Sistema de gestão condominial em AdvPL/TLPP, rodando sobre o
AdvPP (compilador/VM open-source
para AdvPL/TLPP, escrito em Go). Serve dois propósitos: uso real de
administração de condomínio, e case de validação de robustez do
compilador — o desenvolvimento deste projeto encontrou e corrigiu 5
bugs reais (persistência de work-area, Recover sem variável nomeada,
ponto de entrada com #include, comparação com Nil derrubando a VM,
diálogos não bloqueantes no desktop) e motivou 4 capacidades novas
(TCSqlExec/TCSqlQuery, TMailMessage, FWMenuSelect/FWGetText,
FWHash) no AdvPP — ver ARQUITETURA.md.
Login de administrador seguido de um menu real navegando entre as telas: cadastro de unidades e condôminos, lançamento de despesas, Fechamento Mensal com rateio por fração ideal, Cobrança e Registro de Pagamento, Mala Direta com envio real de e-mail, Relatórios (Balancete Mensal, Inadimplência, Extrato por Unidade, Despesas por Categoria), gestão de usuários (criar admin, gerar/revogar token temporário), boleto bancário Itaú/Bradesco e portal do condômino (acesso read-only via token).
- Documentação funcional — o que o sistema faz, telas, regras de negócio, limitações conhecidas.
- Documentação técnica — stack, estrutura de arquivos, modelo de dados, decisões de implementação.
- Histórico de design — spec, plano de implementação e ledger de execução (processo completo, não só o resultado).
advplcv1.24.0+ — v1.22.1 corrigiu um bug real de ponto de entrada que impedia rodar qualquer projeto AdvPL multi-arquivo como o GesCon; v1.23.0 adicionouFWMenuSelect/FWGetText(menu de navegação); v1.23.1-v1.23.4 trouxeram identidade visual própria (web e desktop) e corrigiram um bug real de diálogo não bloqueante no desktop; v1.23.5 adicionouFWHash(usado pelo login); v1.24.0 adicionou 3º argumentobIsPasswordemFWGetText(campo de senha mascarado em web e desktop). Todos achados/motivados durante este projeto.sqlite3(CLI, só para o bootstrap do schema).
Duas formas de rodar, mesmo banco de dados e mesmo menu por baixo:
Web (advplc serve) — abre num navegador, útil pra acessar de
qualquer dispositivo na rede:
./scripts/bootstrap-db.sh # cria as tabelas (uma vez, ou após mudar schema.sql)
advplc serve gescon.prw # sobe em http://localhost:8080Desktop (advplc build) — um executável nativo só, sem navegador,
sem servidor rodando à parte:
./scripts/bootstrap-db.sh
export ADVPP_SRC=/caminho/pro/checkout/do/AdvPP # necessário pra compilar
advplc build gescon.prw -o GesConApp
./GesConAppNo primeiro acesso (nenhum usuário cadastrado ainda), o sistema pede
pra escolher login e senha do administrador e já entra. O campo de
senha é mascarado (3º argumento bIsPassword=.T. de FWGetText). A
senha nunca é gravada em texto puro (hash SHA-256).
advplc run tests/db_test.prw
advplc run tests/fechamento_test.prw
advplc run tests/pagamento_test.prw
advplc run tests/malas_test.prw
advplc run tests/relatorios_test.prw
advplc run tests/login_test.prw
advplc run tests/portal_test.prwGcMalaDireta(cCompetencia) envia uma mensagem personalizada por
condômino com cobrança não paga na competência. Configuração via
variáveis de ambiente — não GetMV(), que é um stub no AdvPP (sempre
retorna o valor padrão, nunca lê configuração real):
export GESCON_SMTP_HOST=smtp.exemplo.com
export GESCON_SMTP_PORT=587 # opcional, default 587
export GESCON_SMTP_USER=usuario # opcional, sem auth se vazio
export GESCON_SMTP_PASS=senha
export GESCON_SMTP_FROM=gescon@seucondominio.comSem GESCON_SMTP_HOST, GcMalaDireta não tenta enviar nada e retorna 0
(comportamento seguro por padrão).
Plano 1 (v1): login, cadastros (unidades, condôminos, despesas), fechamento mensal (rateio por fração ideal), cobranças + registrar pagamento, mala direta, relatórios (balancete, inadimplência, extrato, despesas por categoria).
Plano 2: senha mascarada (FWGetText bIsPassword), boleto bancário
(Itaú/Bradesco, código de barras e linha digitável), gestão de usuários
(criar admin, gerar/revogar token temporário), portal do condômino
(token-based read-only access).
- A tela de Cobranças permite editar/excluir registros livremente pela
UI (mesmo
FWMBrowseeditável dos demais cadastros) — a garantia de "valor travado no fechamento" é imposta pela lógica de negócio, não pela UI. Aceitável para a v1 (login único, uso pessoal/piloto). Verdocs/ARQUITETURA.mdpara o motivo técnico. - Os relatórios também são telas de
FWMBrowse— dá pra clicar Incluir/Alterar/Excluir neles, mas não faz sentido (o conteúdo é recalculado do zero na próxima abertura).