GLC_RFM-0010
_RFM-0010-GLC·fase 0 · pre-MVP·interno (Rafa + Ale)

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.

Progresso total
18%
x
Fase atual
Sprint 0 — Fundacao de negocio (desbloqueada)
Bloqueios
2
status

Onde estamos

Proximo passo concreto e o que trava o avanco.

Proximo passo
3 frentes paralelas — custo unitario (T1-T3), mercado (T4-T6), catalogo posto SP (T7-T9). Sem bloqueio em Ale.
Bloqueios ativos
  • 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.
roadmap

As 4 versoes

v1 e o MVP que vai pra proposta. v2+ fica congelado ate v1 validar.

v1MVP
MAPEAMENTO (MVP para proposta)

**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

v2backlog
WORKPLAN + coleta via WhatsApp

- 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

v3backlog
PRODUCAO

- 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)

v4backlog
PROMOCAO

- Revisao juridica LGPD/ToS primeiro - Identificacao de empresas com licencas vencidas em bases publicas - Enriquecimento com decisores (fontes legitimas) - Apresentacao personalizada como hook comercial ---

decomposicao

4 blocos independentes

Cada frente tem entrada, processamento e saida proprios. Qualquer bloco pode ser desligado sem quebrar os outros (Regra 1).

A
MAPEAMENTO
entradaidentidade legal, socios, CNPJ, CNAE, endereco, produtos/servicos, estrutura fisica
processamentoclassificar licencas aplicaveis; consultar estado atual; calcular proxima renovacao
saidamapa visual (dashboard) com semaforo: OK / proximo a vencer / vencido
B
WORKPLAN
entradalicencas que vencem em N dias
processamentomontar calendario de renovacao com etapas e SLAs
saidaplano aprovado pela lider, checklist por licenca, alertas
C
PRODUCAO
entradalicenca ativa para renovar + plano
processamentocoleta de docs (WhatsApp/email), validacao, montagem do requerimento, submissao, acompanhamento
saidaprotocolo submetido + licenca renovada + arquivo na pasta do cliente
D
PROMOCAO
entradabase publica de empresas com licencas vencidas/sancionadas
processamentoenriquecer com decisores (LinkedIn), segmentar, personalizar apresentacao
saidalista de leads + campanha outbound + apresentacao pre-montada
arquitetura

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.

Nivel 1 — Contexto
 +-----------------+      +------------------+      +----------------+
 |  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)  |                     |
 |          +------------------------------+                     |
 +--------------------------------------------------------------+
Nivel 2 — Containers (v1)
 +--------------------------------------------------------------+
 |                         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)
dominio

Modelo de entidades (v1 draft)

So o que a v1 precisa. Entidades de Workplan/Producao entram em v2/v3.

Empresa
  • 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)
CatalogoLicenca
  • 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)
LicencaDaEmpresa
  • id
  • empresa_id
  • catalogo_licenca_id
  • status (ativa, vencida, em_renovacao, dispensada, faltando)
  • numero
  • data_emissao
  • data_vencimento
  • proxima_renovacao (calculada)
  • obs
Tenant
  • id
  • nome (nome da operacao GLC, ou da empresa contratante)
  • licenses_ativas_count (usado para billing)
fluxos v1

Como as coisas acontecem

3 fluxos vivem na v1. Workplan, coleta e submissao entram em v2+.

Fluxo 1
Cadastrar empresa e mapear licencas
  1. 1Lider cadastra empresa (CNPJ, socios, endereco, CNAE, estrutura)
  2. 2Sistema lista catalogo aplicavel (filtro por vertical + municipio + CNAE)
  3. 3Lider marca quais licencas a empresa **ja tem**, **nao tem**, **nao se aplica** (validacao humana — item 2 do MAPEAMENTO do email)
  4. 4Para as que tem, lider cadastra numero + datas
  5. 5Sistema calcula proxima renovacao por frequencia do catalogo
  6. 6Dashboard mostra semaforo
Fluxo 2
Alertas
  1. 1Cron diario no FastAPI consulta licencas com vencimento em D-60/D-30/D-15
  2. 2Dispara email para lider (e opcionalmente cliente)
  3. 3Registra log de alerta enviado (para relatorio)
Fluxo 3
Visualizacao por cliente
  1. 1Cliente loga (PocketBase Auth)
  2. 2Ve so suas empresas e licencas
  3. 3Painel read-only (v1). Edicao e 100% da lider.
perguntas

Todas as perguntas resolvidas

Perguntas P1-P6 foram promovidas a ADRs 0004-0008 (aceitos por coerencia, aguardam ratificacao de Ale).

Nenhuma pergunta aberta no momento.
riscos

10 riscos mapeados

Alta: 6 · Media: 4 · Baixa: 0. Severidade inferida por categoria e texto — Rafa pode ajustar no proprio md.

R1altaescopo
"Identificar todas as licencas" e problema aberto

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.

mitigacao

recortar por vertical + municipio na v1 (ver escopo v1).

R2mediaescopo
Consulta a orgaos publicos varia por orgao

Cada prefeitura, secretaria, conselho tem portal proprio. Muitos sem API, alguns sem busca publica (exigem login do proprio cliente). Scraper individual por orgao.

mitigacao

v1 comeca com cadastro manual da situacao atual pelo cliente; automacao de consulta e incremental, orgao a orgao, conforme volume justifique.

R3mediaescopo
Escopo gigantesco para v1

Fazer A+B+C+D de primeira demora 6-12 meses. Ale quer apresentar proposta rapido.

mitigacao

v1 = so MAPEAMENTO (Bloco A), o que ja entrega valor visivel (cliente ve mapa + alertas) e permite cobrar. Resto vira roadmap.

R4altajuridicos e de conformidade
LGPD na Promocao (Bloco D)

Coletar dados de decisores em LinkedIn + contato direto por canal nao-publico (WhatsApp) pode violar LGPD e ToS do LinkedIn.

mitigacao

Bloco D fica para v4 com revisao juridica antes. Marketing deve ser opt-in (conteudo + captura de lead) e nao predatorio.

R5altajuridicos e de conformidade
WhatsApp automatizado com cliente (Bloco C)

WhatsApp Business API exige templates HSM aprovados para mensagens fora da janela de 24h. Custo por conversa. Violacao pode bloquear numero.

mitigacao

usar Evolution API para janela ativa, Chatwoot para historico, HSM so para avisos criticos de renovacao.

R6altajuridicos e de conformidade
Responsabilidade tecnica

Algumas licencas exigem assinatura de profissional habilitado (engenheiro, arquiteto, responsavel tecnico). Sistema automatiza tudo ate esse ponto, mas nao substitui a assinatura.

mitigacao

modelar papel "responsavel tecnico" no fluxo desde v1; e atividade manual de aprovacao, nao automacao.

R7altamodelo de negocio
Margem em R$ 10/licenca

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.

mitigacao

modelar custo antes de fechar preco. Possivel que precise precificar por faixa de complexidade (municipal simples vs. ambiental complexa).

R8mediamodelo de negocio
Cliente-alvo indefinido

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).

mitigacao

decidir vertical com Ale antes de comecar.

R9altaoperacionais
Terminologia ambigua

Email mistura "licenca", "alvara", "autorizacao", "cadastro". Cada um tem peso juridico diferente.

mitigacao

glossario em `docs/decisoes/0003-glossario.md` quando for modelar dominio.

R10mediaoperacionais
"Validar informacoes e documentos" via IA

Factivel com OCR + LLM comparando contra checklist. Mas nao e 100%. Precisa gate humano.

mitigacao

IA classifica e aponta problemas; lider do projeto valida. ---

decisoes

8 ADRs registrados

Clique em um ADR para abrir o detalhe completo com markdown renderizado.

stack

Tecnologia por camada

Cada escolha casa com uma regra do _RFM-0000. Nada aqui foi inventado pelo projeto.

CamadaTecnologiaRegraNota
RuntimeBunR11Mais rapido que Node para dev
BackendFastAPI (Python)R12Logica de classificacao e workflow
BancoPocketBaseR11CRUD + Auth v1. Postgres se doer.
FrontendNext.js + Tailwind + shadcn/uiR15, R16Painel + semaforo
LLMClaude APIR14Classificacao CNAE, extracao de docs
OrquestradorLangGraphR13Fluxo de renovacao v2+
DeployDocker + Coolify + TraefikR7, R8, R9VPS Rafael
WhatsAppEvolution + ChatwootR17Coleta de docs v2+
rastreabilidade

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.

DecisaoRegrasPor que
4 frentes como blocos independentes1 (principios)Blocos, nao monolitos
`docs/` primeiro, codigo depois2Estrutura padronizada
Git init do projeto2, 31 repo por projeto
`.env` fora do git3Seguranca
Docker Compose + rede `coolify`7, 8, 9Container isolado + Traefik
Traefik com labels + SSL9Proxy com SSL automatico
Cloudflare DNS10DNS + CDN + SSL na borda
PocketBase como banco11MVP, CRUD + Auth + API
FastAPI para logica de dominio12Backend padrao
Claude API para classificacao14Melhor qualidade
Next.js + Tailwind + shadcn15, 16Painel dinamico com UI pronta
Email como canal de alerta v117Integracao simples, sem HSM
WhatsApp via Evolution (v2)17Canal variavel, entra quando precisar
LangGraph p/ fluxo renovacao (v2)13Cerebro + 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 5s12 (resiliencia HTTP)Backend travado nao pode travar SSR
em aberto

O que ainda nao foi decidido

Assuntos arquiteturais esperando ADR proprio.

aprendizados

O que foi aprendendo

Entradas datadas. Consolidam depois em _RFM-0001 e podem virar evolucao de regra.

2026-04-17
Sessao 1 (criacao do projeto)
  • 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.
  • --
2026-04-17
Analise executiva (desbloqueio P1-P6)
  • **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.
  • --
2026-04-17
Sessao 2 (URL visual do escopo)
  • **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.
playbook

Narrativa do projeto

Sessoes cronologicas (humano escreve) e ensaios por regra (aprofundamento pedagogico).