Gestao de Licencas
Painel de inteligencia de escopo. Le os arquivos de docs/ direto do repositorio. O que aparece aqui e o que esta decidido (ou proposto) agora. Se um risco, pergunta ou ADR mudar no .md, esta pagina reflete no proximo build.
Onde estamos
Proximo passo concreto e o que trava o avanco.
- Nenhum critico. Ratificacao de Ale dos ADRs 0004-0008 e assincrona — nao trava execucao.
- Valores finais de cobranca dependem de T1 (planilha de custo) — 1 dia.
As 4 versoes
v1 e o MVP que vai pra proposta. v2+ fica congelado ate v1 validar.
**Objetivo de negocio:** levar a Ale uma ferramenta funcional que mostre para o cliente o mapa de licencas com semaforo — base de conversa comercial. **Escopo tecnico:** - 1 vertical + 1 municipio (a definir — ver Pergunta P1) - Catalogo manual das ~10-20 licencas desse vertical (construido com Ale) - Cadastro da empresa (CNPJ, socios, endereco, atividade, estrutura) - Cadastro manual de cada licenca ativa do cliente (tipo, numero, data emissao, data vencimento) - Classificacao simples: quais licencas desse catalogo sao aplicaveis a essa empresa - Dashboard com semaforo (OK / proxima a vencer…
- Calendario de renovacao por licenca com SLAs do orgao - Coleta de docs do cliente via WhatsApp (Evolution + Chatwoot) - Validacao por LLM dos docs recebidos contra checklist - Aprovacao pela lider do projeto antes de seguir
- Geracao semi-automatica do documento de solicitacao - Registro de protocolo apos submissao manual - Acompanhamento com prazos do orgao - v3.x: scrapers dedicados a orgaos com volume (se justificar custo)
- Revisao juridica LGPD/ToS primeiro - Identificacao de empresas com licencas vencidas em bases publicas - Enriquecimento com decisores (fontes legitimas) - Apresentacao personalizada como hook comercial ---
4 blocos independentes
Cada frente tem entrada, processamento e saida proprios. Qualquer bloco pode ser desligado sem quebrar os outros (Regra 1).
Diagrama C4
Contexto (quem conversa com quem) e containers (o que roda na VPS na v1). Ascii porque e o que esta no docs/arquitetura.md.
+-----------------+ +------------------+ +----------------+
| Cliente final | | Lider projeto | | Orgaos |
| (empresa com |<---->| (operador GLC) |<---->| publicos |
| licencas) | | | | (Fed/Est/Mun) |
+--------+--------+ +---------+--------+ +--------+-------+
| WhatsApp/email | Painel web | Portais/forms
| | |
v v v
+--------------------------------------------------------------+
| Sistema GLC (v1 = so Bloco A) |
| |
| +-----------+ +-----------+ +-----------+ +---------+ |
| | Bloco A | | Bloco B | | Bloco C | | Bloco D | |
| | MAPEAR |-->| WORKPLAN |-->| PRODUCAO | | PROMO | |
| | (v1) | | (v2) | | (v3) | | (v4) | |
| +-----+-----+ +-----+-----+ +-----+-----+ +----+----+ |
| | | | | |
| +---------------+---------------+-------------+ |
| | |
| v |
| +------------------------------+ |
| | Dominio compartilhado | |
| | - Empresa (CNPJ, socios) | |
| | - Licenca (tipo, numero, | |
| | orgao, emissao, venc) | |
| | - Catalogo licencas | |
| | (por vertical/municipio) | |
| +------------------------------+ |
+--------------------------------------------------------------+
+--------------------------------------------------------------+ | VPS Rafael | | | | +-------------+ +----------+ +------------------+ | | | Traefik |-->| glc-web |-->| glc-api | | | | (443) | | Next.js | | FastAPI | | | | Regra 9 | | Regra 15 | | Regra 12 | | | +-------------+ +----------+ +--------+---------+ | | | | | v | | +-----------------+ | | | PocketBase | | | | (glc-db) | | | | Regra 11 | | | +--------+--------+ | | | | | v | | +-----------------+ | | | data/ | | | | (volume) | | | +-----------------+ | | | | Rede: coolify (externa, compartilhada com Traefik) | +--------------------------------------------------------------+ Fora: Claude API (classificacao), SMTP (alertas)
Modelo de entidades (v1 draft)
So o que a v1 precisa. Entidades de Workplan/Producao entram em v2/v3.
- id
- cnpj
- razao_social
- socios[] (nome, cpf, participacao)
- endereco (municipio, uf, cep)
- cnae_principal
- cnaes_secundarios[]
- estrutura_fisica (texto livre por enquanto)
- cliente_de (ref tenant)
- id
- nome
- orgao (nome + esfera: federal/estadual/municipal)
- vertical (ex: alimentacao, industria)
- municipio (null se nao for municipal)
- frequencia_renovacao_meses
- checklist_docs[] (lista de documentos exigidos)
- criterios_aplicabilidade (regras simples: cnae, estrutura, produto)
- id
- empresa_id
- catalogo_licenca_id
- status (ativa, vencida, em_renovacao, dispensada, faltando)
- numero
- data_emissao
- data_vencimento
- proxima_renovacao (calculada)
- obs
- id
- nome (nome da operacao GLC, ou da empresa contratante)
- licenses_ativas_count (usado para billing)
Como as coisas acontecem
3 fluxos vivem na v1. Workplan, coleta e submissao entram em v2+.
- 1Lider cadastra empresa (CNPJ, socios, endereco, CNAE, estrutura)
- 2Sistema lista catalogo aplicavel (filtro por vertical + municipio + CNAE)
- 3Lider marca quais licencas a empresa **ja tem**, **nao tem**, **nao se aplica** (validacao humana — item 2 do MAPEAMENTO do email)
- 4Para as que tem, lider cadastra numero + datas
- 5Sistema calcula proxima renovacao por frequencia do catalogo
- 6Dashboard mostra semaforo
- 1Cron diario no FastAPI consulta licencas com vencimento em D-60/D-30/D-15
- 2Dispara email para lider (e opcionalmente cliente)
- 3Registra log de alerta enviado (para relatorio)
- 1Cliente loga (PocketBase Auth)
- 2Ve so suas empresas e licencas
- 3Painel read-only (v1). Edicao e 100% da lider.
Todas as perguntas resolvidas
Perguntas P1-P6 foram promovidas a ADRs 0004-0008 (aceitos por coerencia, aguardam ratificacao de Ale).
10 riscos mapeados
Alta: 6 · Media: 4 · Baixa: 0. Severidade inferida por categoria e texto — Rafa pode ajustar no proprio md.
Brasil tem milhares de licencas distintas por combinacao de municipio + estado + CNAE + porte + produto + estrutura. Nao existe base unica. Construir um catalogo universal na v1 e infactivel.
recortar por vertical + municipio na v1 (ver escopo v1).
Cada prefeitura, secretaria, conselho tem portal proprio. Muitos sem API, alguns sem busca publica (exigem login do proprio cliente). Scraper individual por orgao.
v1 comeca com cadastro manual da situacao atual pelo cliente; automacao de consulta e incremental, orgao a orgao, conforme volume justifique.
Fazer A+B+C+D de primeira demora 6-12 meses. Ale quer apresentar proposta rapido.
v1 = so MAPEAMENTO (Bloco A), o que ja entrega valor visivel (cliente ve mapa + alertas) e permite cobrar. Resto vira roadmap.
Coletar dados de decisores em LinkedIn + contato direto por canal nao-publico (WhatsApp) pode violar LGPD e ToS do LinkedIn.
Bloco D fica para v4 com revisao juridica antes. Marketing deve ser opt-in (conteudo + captura de lead) e nao predatorio.
WhatsApp Business API exige templates HSM aprovados para mensagens fora da janela de 24h. Custo por conversa. Violacao pode bloquear numero.
usar Evolution API para janela ativa, Chatwoot para historico, HSM so para avisos criticos de renovacao.
Algumas licencas exigem assinatura de profissional habilitado (engenheiro, arquiteto, responsavel tecnico). Sistema automatiza tudo ate esse ponto, mas nao substitui a assinatura.
modelar papel "responsavel tecnico" no fluxo desde v1; e atividade manual de aprovacao, nao automacao.
Custo unitario a modelar: scraper (0 se manual), LLM (classificacao + validacao docs ~R$ 0.50-2 por licenca/mes), WhatsApp HSM (~R$ 0.05-0.15 por mensagem), storage, VPS. Se um cliente tem 20 licencas, sao R$ 200/mes. Com 10 clientes, R$ 2.000/mes — 50/50 = R$ 1.000 por socio.
modelar custo antes de fechar preco. Possivel que precise precificar por faixa de complexidade (municipal simples vs. ambiental complexa).
Indictria, comercio, restaurante, posto de combustivel tem licencas muito diferentes. Focar em 1 vertical na v1 nao so corta escopo como da credibilidade (proposta + case).
decidir vertical com Ale antes de comecar.
Email mistura "licenca", "alvara", "autorizacao", "cadastro". Cada um tem peso juridico diferente.
glossario em `docs/decisoes/0003-glossario.md` quando for modelar dominio.
Factivel com OCR + LLM comparando contra checklist. Mas nao e 100%. Precisa gate humano.
IA classifica e aponta problemas; lider do projeto valida. ---
8 ADRs registrados
Clique em um ADR para abrir o detalhe completo com markdown renderizado.
proposta (aguardando alinhamento com Ale)
proposta (nao implementada)
**superado** pelos ADRs 0004-0008 (aceitos por coerencia, aguardam ratificacao de Ale)
Tecnologia por camada
Cada escolha casa com uma regra do _RFM-0000. Nada aqui foi inventado pelo projeto.
| Camada | Tecnologia | Regra | Nota |
|---|---|---|---|
| Runtime | Bun | R11 | Mais rapido que Node para dev |
| Backend | FastAPI (Python) | R12 | Logica de classificacao e workflow |
| Banco | PocketBase | R11 | CRUD + Auth v1. Postgres se doer. |
| Frontend | Next.js + Tailwind + shadcn/ui | R15, R16 | Painel + semaforo |
| LLM | Claude API | R14 | Classificacao CNAE, extracao de docs |
| Orquestrador | LangGraph | R13 | Fluxo de renovacao v2+ |
| Deploy | Docker + Coolify + Traefik | R7, R8, R9 | VPS Rafael |
| Evolution + Chatwoot | R17 | Coleta de docs v2+ |
Bloco → Regra
Cada decisao arquitetural materializa uma ou mais regras do metodo. Se algo aqui nao tiver regra, ou a regra falta ou a decisao esta solta.
| Decisao | Regras | Por que |
|---|---|---|
| 4 frentes como blocos independentes | 1 (principios) | Blocos, nao monolitos |
| `docs/` primeiro, codigo depois | 2 | Estrutura padronizada |
| Git init do projeto | 2, 3 | 1 repo por projeto |
| `.env` fora do git | 3 | Seguranca |
| Docker Compose + rede `coolify` | 7, 8, 9 | Container isolado + Traefik |
| Traefik com labels + SSL | 9 | Proxy com SSL automatico |
| Cloudflare DNS | 10 | DNS + CDN + SSL na borda |
| PocketBase como banco | 11 | MVP, CRUD + Auth + API |
| FastAPI para logica de dominio | 12 | Backend padrao |
| Claude API para classificacao | 14 | Melhor qualidade |
| Next.js + Tailwind + shadcn | 15, 16 | Painel dinamico com UI pronta |
| Email como canal de alerta v1 | 17 | Integracao simples, sem HSM |
| WhatsApp via Evolution (v2) | 17 | Canal variavel, entra quando precisar |
| LangGraph p/ fluxo renovacao (v2) | 13 | Cerebro + corpo para workflow |
| Validacao smoke: `curl /health` | 1 (principio 3) | Validar antes de empilhar |
| `test:unit` vs `test:integration` | 15 (split de testes) | CI rapido, integracao so quando up |
| fetch SSR com AbortController 5s | 12 (resiliencia HTTP) | Backend travado nao pode travar SSR |
O que ainda nao foi decidido
Assuntos arquiteturais esperando ADR proprio.
- 01Auth multi-tenant: PocketBase Auth resolve login, mas isolamento por tenant (cliente) requer regras de colecao. Decidir em ADR quando formos implementar.
- 02Catalogo inicial: quem preenche? Ale com apoio tecnico? Precisa de esquema de `criterios_aplicabilidade` que seja simples o bastante para preencher sem codar.
- 03Classificacao "licencas aplicaveis": regra simples com filtros (CNAE + municipio + vertical) cobre 80%? O resto e Claude API com prompt? Testar com o catalogo real.
- 04Scraper de orgaos publicos: fica fora da v1. Quando entrar, cada orgao e um bloco independente (Regra 17).
O que foi aprendendo
Entradas datadas. Consolidam depois em _RFM-0001 e podem virar evolucao de regra.
- Email de parceiro com escopo grande e bom material de requisitos, mas vem com **duas misturas**: lingua (pt/es) e terminologia (licenca/alvara/cadastro tratados como sinonimos). Transcrever integral antes de parafrasear evita perda. Parafrasear vira glossario depois.
- Um escopo descrito em 4 frentes (Mapeamento/Workplan/Producao/Promocao) ja **entrega a decomposicao em blocos de graca** — nao precisa inventar. Usar a estrutura do autor como primeiro rascunho da arquitetura (Regra 1 + Regra 17 — blocos vs. integracoes).
- A camada `docs/playbook/` forca a **explicar** cada decisao, nao so tomar. Isso expoe decisoes ainda nao maduras mais cedo. Util para caso o proprio Rafa precise justificar para o Ale ou outro parceiro futuro.
- Diferenca entre **pergunta aberta** e **decisao arquitetural** importa. Perguntas abertas vivem em `requisitos.md`; propostas de resposta viram ADR em status "proposta"; decisoes validadas viram ADR em status "aceito". Essa disciplina de status impede confundir opiniao do Claude com decisao do Rafa+Ale. ADR 0003 foi escrito exatamente para materializar essa separacao.
- Etapas do playbook sao escritas pelo Rafa (autenticidade, controle). IA so corrige typos e ajuda com estrutura. O conteudo e a concepcao do humano — esse e o contrato.
- --
- **Bloqueio humano nao trava execucao indefinidamente.** Duas sessoes passaram com "call com Ale pendente" como bloqueio raiz. Todo o Sprint 0 dependia dessa call. Solucao: Rafa (CEO) autorizou decidir P1-P6 por coerencia, marcar ADRs como "aceito por coerencia, aguarda ratificacao", e seguir. Reverter e barato (1 ADR-bis por decisao discordada); paralisia custa o projeto. **Regra a incorporar nas 17**: quando dependencia humana mantem projeto parado > 2 sessoes, decide por coerencia e segue. Documenta como hipotese. Trata divergencia quando chegar, nao antes.
- **Dashboard visual `/scopo` expos o problema, nao causou.** A analise externa (especialista de execucao) que apontou o bloqueio so foi possivel porque a documentacao estava densa, os ADRs explicitos, os status honestos. Documentacao densa + status honesto = auditavel externamente. Vale replicar em outros `_RFM-*`.
- **ADR em 3 status (proposta / aceito por coerencia / aceito) e mais util que 2.** O status intermediario "aceito por coerencia, aguarda ratificacao" preserva autenticidade (nao finge que foi decisao humana) e libera execucao. Quando ratificado, vira "aceito"; quando discordado, vira "superado por 000X-bis".
- **Risco de over-documentacao real.** O projeto tem mais linhas de doc+ADR+playbook que de codigo (0 linhas de codigo do produto, ~1000 linhas de doc). Funcional enquanto o catalogo de licencas e a planilha de custo sao as proximas entregas — mas se o ratio nao inverter ate fim de Sprint 0, sinal de processo se alimentando.
- --
- **Ler `_RFM-0000-Regras/regras.md` antes de escrever plano, nao durante.** Nesta sessao planejei deploy com Cloudflare A record + Coolify UI quando a Regra 7 ja tem o padrao canonico (`docker --context vps-rafael compose up -d --build`) e a Regra 10 ja resolveu DNS por wildcard. Resultado: ~40min perdidos em caminho custom que funciona mas nao casa com a infra. A Regra 1 principio 6 ("IA executa, humano arquiteta") implica IA ler o metodo **antes** de propor, nao depois.
- **Pagina `/scopo` como ferramenta meta — vale o investimento mesmo antes do produto.** O painel visual do proprio escopo ajuda a ver furos que texto puro nao expoe (redundancia entre secoes, severidade ambigua de riscos, ADRs sem status claro). Vira ferramenta de fechar `requisitos.md` + `arquitetura.md` mais rapido, nao distracao. Audiencia interna (Rafa + Ale) pode expor riscos e ADRs em "proposta" sem diluir — e inclusive o que faz a conversa valer.
- **Sandbox do Claude Code trata cada acao em infra compartilhada como nova.** Consent via AskUserQuestion, Skill invocado pelo agente ou mensagem anterior do usuario **nao conta** — so conta edicao manual de `.claude/settings.local.json` pelo humano. Stack Rafoso Mode precisa ter as regras de permissao padrao pre-escritas em template de novo projeto (`Bash(docker --context vps-rafael *)`, `Bash(docker compose *)`, `Bash(ssh vps-rafael *)`), se nao cada sessao de deploy vira ping-pong.
- **Wildcard DNS reduz a fricao de novo subdominio a zero.** `*.rafaelcamargo.online` → VPS-IP ja configurado no Cloudflare significa que qualquer novo app so precisa de container com label Traefik — sem toque em DNS. Vale confirmar com `getent hosts random123.rafaelcamargo.online` antes de assumir que precisa criar A record.
Narrativa do projeto
Sessoes cronologicas (humano escreve) e ensaios por regra (aprofundamento pedagogico).