Monte o agente que fecha o seu caixa.
O prompt inteiro do sistema que fecha o caixa do @pedropauloai.
269
linhas de prompt
7
fases de montagem
8
blocos de entrevista
O entregável
O que ele monta
Um sistema que lê o seu dia e fecha o relatório sozinho, no horário que você marcar.
Seus números num banco
A régua até a meta
Roda no horário que você marcar
Tudo no seu computador
Três passos
Como usar
Não tem instalação e não tem cadastro. O que existe é uma conversa.
Copiar o prompt
Colar numa conversa nova
Responder a entrevista
Antes de começar
O que você precisa
Montar sozinho dá trabalho e o resultado varia com a conversa.
Sem cadastro
O prompt inteiro
Ele está aqui, na página. Copie com um toque ou abra o arquivo.
Você vai montar comigo, do zero, um sistema de acompanhamento diário da minha operação. Ele já roda para outra pessoa e funciona. Eu quero a mesma arquitetura, com o meu conteúdo. Não me pergunte tudo de uma vez e não escreva código nenhum antes da Fase 1 terminar. Siga as fases na ordem. Se o seu ambiente não tiver artefatos ou o caminho `/sessions` do bash (isso varia entre o Claude Code e o app de desktop), pule essas partes quando elas chegarem: o painel HTML local cumpre o papel do artefato, e o caminho da pasta é o que o seu ambiente mostrar. ## O que o sistema é Seis peças:
Expandir: ler as 269 linhas na páginaRecolher
1. **Uma pasta única de projeto**, no meu computador, que é a raiz de tudo.
2. **Um banco SQLite** (`relatorio.db`) como fonte de verdade única dos números, com um módulo Python (`banco.py`) na frente dele. Nada de planilha solta, nada de número que só existe no chat.
3. **Um `vault/`** de markdown linkado, ao lado do banco, que guarda pessoa, decisão e pauta. É a memória de motivo, e ela é o que faz o sistema me conhecer em vez de só me medir.
4. **Um `CONTEXTO.md`** na raiz, que é o cérebro compartilhado: a operação, as regras, as categorias, as fórmulas, os limites e o tom de escrita. Ele existe para o contexto viver em um lugar só. Quando o negócio muda, muda ali, e todas as tarefas passam a saber junto.
5. **Uma tarefa agendada, ou duas.** Uma diária já sustenta o sistema inteiro. Duas só valem se o meu dia tem uma virada no meio que muda a decisão. O prompt de cada uma guarda só o que é específico dela: o horário, as perguntas e o formato do relatório. Todo o resto elas leem do `CONTEXTO.md`.
6. **Um gerador (`gerar.py`)** que lê o banco e escreve o painel HTML, mais um artefato publicado numa URL fixa, sobrescrito todo dia.
Dois princípios sustentam tudo.
**Grave o evento, calcule o resto.** Total do mês, meta diária, streak, sobra, cobertura, média, nada disso vira coluna no banco. Tudo sai de função. Se um número aparece no chat e no painel, ele vem da mesma função, senão os dois divergem em uma semana.
**Número em tabela, motivo em texto linkado.** Série temporal precisa de chave primária, tipo e escrita atômica, e markdown não tem nenhum dos três. Entidade e histórico precisam de link e leitura humana, e tabela não dá nenhum dos dois. A fronteira entre as duas coisas nunca se cruza.
## Fase 1: Entrevista
Me entreviste em blocos. Um bloco por mensagem, perguntas numeradas e curtas, espere eu responder antes de ir para o próximo. Se eu responder vago, insista uma vez pedindo número. Se eu não souber, marque como desconhecido e siga: campo vazio é informação, chute não é.
**Bloco 1, a operação.** O que eu faço para entrar dinheiro hoje. Quais são as frentes separadas (posso ter mais de uma). O que é emergência e o que é o negócio de verdade. Qual é o produto ou serviço principal, o preço, e quanto tempo custa entregar um. Em que dias e horários cada frente acontece. Quem trabalha comigo e o que é conjunto e o que é separado (se o dinheiro de duas pessoas cai na mesma conta, isso muda como o banco registra e precisa ficar escrito).
**Bloco 2, o objetivo com data.** Qual é o número que eu estou perseguindo e até quando. Dívida a quitar, meta de faturamento, reserva, tanto faz, mas tem que ter valor e data, porque a régua inteira depende disso. Se for dívida: cada credor, valor original, valor em aberto, prazo. Se for meta: valor, data e o que já tem.
**Bloco 3, o custo.** O que sai todo mês com contrato e cai igual (aluguel, assinatura, parcela): item por item, valor e dia do vencimento. O que sai todo mês mas varia (comida, transporte, insumo): item por item, com a média medida, não com o que eu acho. Se algum item é dividido com outra pessoa, quanto é a minha parte. Some e me devolva o piso mensal e o piso por dia útil.
**Bloco 4, o que eu controlo.** As atividades que eu faço e que fazem o dinheiro aparecer depois. Quantas horas, quantos contatos, quantas propostas, quantas entregas. Essa lista vira as colunas de esforço do banco, e ela é diferente do que entra em dinheiro. Pergunte também o que eu quero manter como hábito diário, para virar streak.
**Bloco 5, o dinheiro na prática.** Onde o dinheiro cai (qual banco ou carteira). Se tem entrada em espécie que não aparece em extrato nenhum. Se o valor recebido é fixo ou variável por unidade vendida. Se o dinheiro chega no dia ou chega defasado. Que gasto meu não passa pela minha conta e por isso não pode virar lançamento.
**Bloco 6, rotina, canais e ferramenta.** Quantos relatórios por dia eu quero e a que horas. **Pergunte de forma neutra, sem empurrar dois:** um por dia sustenta o sistema inteiro; o segundo só paga o custo se existe uma virada no meio do dia que muda a decisão, tipo um turno que fecha e cujo resultado define o que fazer no turno seguinte. Se eu não souber responder, comece com um. Se eu publico em algum canal e qual (perfil exato, e qual perfil está morto e nunca deve ser citado). Se tem algo que eu quero que apareça pronto no fim do relatório para copiar e colar. E **se eu já uso Obsidian, Notion, Logseq ou qualquer coisa parecida, e onde fica**, inclusive se eu já tenho um cofre com anos de coisa dentro.
**Bloco 7, quem e o que já foi decidido.** Quem tem dinheiro, tempo ou decisão envolvida comigo: credor, sócio, cliente, fornecedor, parceiro, quem divide conta comigo, e quem eu uso como referência. Um nome de cada vez, com o que importa saber sobre cada um. E o que eu já decidi e não quero rediscutir todo mês, principalmente **o que eu já descartei e por quê**: isso vale tanto quanto o que eu escolhi, porque é o que impede a discussão voltar em duas semanas.
**Bloco 8, o tom.** Como eu quero ouvir número ruim. Padrão, e é o que eu recomendo: sem elogio, sem motivação, sem consolo, sem enfeite. Se o número está ruim, mostra o número.
Ao fim da entrevista, me devolva um resumo de meia página do que você entendeu e **espere eu confirmar**. Não crie arquivo antes disso.
## Fase 2: A pasta e o banco
Peça acesso à pasta onde o projeto vai morar (ou crie uma) e trate ela como raiz. Anote o caminho no `CONTEXTO.md`, junto com o aviso de que no bash a mesma pasta aparece montada em outro caminho, que muda a cada sessão e nunca deve ser chutado: descubra com `ls -d /sessions/*/mnt/<NomeDaPasta>`.
Crie `banco.py`, SQLite puro, sem dependência externa, com estas tabelas:
- `dias`: **uma linha por dia**, chave primária `data`, nunca duas linhas para o mesmo dia. Colunas: as atividades do Bloco 4, os campos de agenda, `saldo_conta` (retrato do dia), os campos de publicação se eu publico em algum canal, `tarefa_1`, `tarefa_2`, `tarefa_3`, `pendencias`, `linha_do_dia`, `humor`, e `fase` (`parcial` quando a tarefa da manhã grava, `fechado` quando a da noite fecha).
- `lancamentos`: **uma linha por transação**, com `id INTEGER PRIMARY KEY AUTOINCREMENT`, `data`, `tipo` (entrada ou saída), `categoria`, `subcategoria`, `valor`, `descricao`, mais índice por data e por categoria. Três gastos no dia são três linhas, nunca um campo somado. Sem `id` não dá para editar nem deduplicar uma linha depois.
- `dividas` ou `metas_financeiras`: credor ou objetivo, valor original, valor em aberto, prazo, observação.
- `custo`: item, `fonte` (vida ou operação), valor total, minha parte, dia do vencimento, `status` e observação. O `status` existe para tirar um item do piso **sem apagar a linha**: a leitura padrão pega custo de vida mais o que estiver com status ativo, e o resto fica gravado como histórico.
- `metas`: as metas não financeiras, com `alvo`, `atual` e unidade, mais uma função `atualizar_meta(...)`.
- `parametros`: chave e valor em JSON, para aguentar texto, número e lista. Aqui vivem a data-alvo, os preços, as categorias válidas e as decisões estratégicas escritas por extenso.
- `metricas`: leituras de fora (alcance, seguidores, o que for), com data, plataforma, métrica, valor e janela, e **chave primária composta pelas quatro primeiras**, para a mesma leitura não entrar duas vezes.
Regras do módulo, todas obrigatórias:
- Funções prontas, e as tarefas usam elas em vez de SQL solto: `carregar()`, `gravar_dia({...})`, `gravar_lancamento(...)`, `atualizar_divida(...)`, `atualizar_meta(...)`, `exportar()`.
- `gravar_dia` faz upsert e **campo ausente não apaga o que já estava lá**. A tarefa da manhã grava metade, a da noite completa.
- Texto vazio vira `NULL`, nunca zero. **Zero é uma afirmação, vazio é a ausência de resposta**, e o relatório inteiro depende dessa diferença.
- `exportar()` despeja o banco inteiro em CSV/SQL dentro de `backup/`, regravado a cada geração. Assim o único problema real de um arquivo binário (não dar para ler nem consertar sem ferramenta) some. Os arquivos de `backup/` são leitura, ninguém escreve neles.
- Se a pasta estiver em OneDrive, Dropbox ou mount parecido, o journal padrão do SQLite quebra na hora de apagar arquivo. Abra a conexão com `PRAGMA journal_mode=TRUNCATE`, que zera o journal em vez de apagar. Se aparecer `disk I/O error` em qualquer escrita, confira esse pragma antes de qualquer outra hipótese.
Defina as categorias comigo agora e grave a lista em `parametros`. Poucas e fechadas, tipo `entrada: [...]` e `saida: [...]`. Se algo não encaixar em nenhuma, pergunte em qual entra e **deixe fora do banco até eu responder**.
Duas regras de categoria que valem em qualquer negócio:
- Reembolso entra na conta mas não é faturamento, ele anula um gasto que já aconteceu. Exclua da receita no cálculo e no texto.
- Pagamento de dívida é saída de categoria `divida` **e** atualiza o valor em aberto. As duas coisas, sempre juntas.
E uma regra de preço, que vale sempre que o valor recebido não é fixo por unidade:
> **Nunca use margem estimada por unidade.** Se o comprador escolhe quanto paga, ou se o preço negocia, preço por unidade não existe como número fixo, existe como média que muda todo dia. Registre o investido na data da compra e cada entrada na data em que ela caiu, e **deixe a margem aparecer sozinha no acumulado**. Custo por unidade só quando houver dois lotes registrados. O preço nominal em `parametros` serve para projetar, nunca para lançar receita.
## Fase 3: O vault, a memória de motivo
Um banco guarda o que aconteceu e quanto deu. Ele não guarda quem, nem por quê, nem o que eu já tentei e descartei. Sem isso o sistema me mede sem me conhecer: repropõe o que eu já recusei, pergunta o que eu já respondi, e trata uma pessoa como uma célula de texto.
**Antes de criar qualquer coisa, descubra se eu já tenho um cofre.** Não pergunte só "você usa Obsidian": procure. Uma pasta com `.obsidian/` dentro é um cofre, e o jeito de achar é varrer os lugares óbvios pelo bash:
```
ls -d /sessions/*/mnt/*/.obsidian /sessions/*/mnt/*/*/.obsidian 2>/dev/null
```
Se eu tiver dito onde fica, peça acesso àquela pasta e confirme lendo o `.obsidian/`. Três caminhos, e você escolhe **junto comigo**, nunca sozinho:
**Não tenho cofre.** Crie `vault/` dentro da raiz do projeto, com as pastas abaixo, e crie também `.obsidian/` com os plugins core ligados, para eu só apontar o app e abrir se um dia quiser.
**Tenho cofre e ele é pessoal, com anos de coisa dentro.** **Não despeje o projeto na raiz dele** e não mexa em nota que já existe. Crie uma pasta única dentro do cofre, com nome do projeto, e monte a estrutura ali dentro. O agente escreve só nessa pasta; o resto do cofre é leitura. Diga isso no `CONTEXTO.md` com todas as letras, porque uma tarefa agendada escrevendo solta no cofre de alguém é a maneira mais rápida de queimar a confiança no sistema inteiro.
**Tenho cofre e quero o projeto dentro dele.** Mesma coisa do caso anterior, só que você pode linkar para notas que já existem. **Linkar, nunca reescrever.** Se já existe nota de uma pessoa que também é credora, o arquivo do projeto aponta para ela em vez de criar uma segunda.
Em qualquer caso, me pergunte **onde o banco vai morar**, e a resposta certa quase sempre é fora do cofre: cofre costuma estar em sync de nuvem, e SQLite em pasta sincronizada dá conflito e corrompe. Pasta do projeto para o banco, cofre para o texto, e o `CONTEXTO.md` guarda os dois caminhos.
Decidido isso, a estrutura é sempre a mesma: `pessoas/`, `decisoes/`, `pautas/`, `dias/`, mais `_templates/` e um `INDEX.md` que é o mapa.
**A fronteira, que nunca se cruza:**
| Vai para o banco | Vai para o vault |
|---|---|
| Número, transação, data, meta, dívida, custo | Pessoa, decisão, pauta, histórico, motivo |
| Consultado por função | Lido por mim e pelo agente antes de agir |
| Uma linha por dia, uma por transação | Um arquivo por entidade |
Valor em reais dentro de um arquivo do vault é **citação para dar contexto, nunca fonte**. Se banco e vault discordarem de um número, o banco está certo e o texto do vault está velho.
**Como cada arquivo se escreve.** Nome próprio como título, um por entidade. Frontmatter com os campos estruturados (tipo, papel, status, datas, o campo correspondente no banco). Corpo com uma seção de "o que importa saber", que é o que muda a ação de quem lê, e um histórico em ordem cronológica inversa com a data na frente de cada entrada. **Entrada nova vai no topo e não reescreve o que estava lá**: versão velha de um fato é informação sobre como a coisa evoluiu.
**Toda menção a outra entidade vira wikilink, sempre.** Link é o produto. Um arquivo sem link é só texto, e texto solto já existia antes do vault. Os arquivos de `dias/` apontam para pessoas e decisões, e nunca o contrário: quem responde "em que dias essa pessoa apareceu" é o painel de backlinks, não uma lista escrita na mão que envelhece.
**Arquivo de decisão tem quatro partes obrigatórias:** a decisão em uma frase no imperativo, o porquê com o número que sustentou, **o que foi descartado junto**, e a condição concreta que me faria mudar de ideia. Sem a terceira e a quarta, não é decisão registrada, é opinião datada.
Semeie o vault agora, com o que saiu do Bloco 7 da entrevista, e linke tudo a partir do `INDEX.md`. Vault vazio nunca começa a ser usado.
**A regra que impede isso virar cemitério, e todo segundo cérebro morre disso:** nada entra no vault que nenhuma tarefa vá ler. Antes de criar um arquivo, responda qual execução vai abrir aquilo e para decidir o quê. Sem resposta, não crie.
Sobre o Obsidian: ele é um leitor de pasta de markdown com links, e a pasta acima já é exatamente isso. **Nunca faça o conteúdo depender de plugin.** Se o vault só faz sentido com Dataview instalado, ele deixou de ser memória e virou aplicativo, e o agente que lê por bash não enxerga mais nada.
## Fase 4: O CONTEXTO.md
Escreva na raiz, em seções marcadas, em português do Brasil, frases curtas. Ele é lido no começo de toda execução das tarefas.
Critério de divisão, antes de escrever qualquer coisa: **o que muda de valor ou tem prazo vive no banco, o que é invariante vive aqui.** Se um acordo tem data de vencimento, o `CONTEXTO.md` diz "leia da tabela tal" e guarda só a regra que não muda. Dado volátil congelado em markdown envelhece calado e contamina relatório meses depois.
Seções:
- **operacao**: o que eu faço, o que é emergência e o que é o negócio real, quando cada frente acontece, o que é conjunto com outra pessoa e o que é separado, e qual é a condição para essa fase acabar.
- **pasta_e_banco**: caminho no host, caminho no bash, funções do `banco.py`, lista de tabelas, e o aviso de que HTML e artefato são visualização descartável: guarde só o evento.
- **categorias**: a lista fechada e as duas regras acima.
- **fixo_e_variavel**: o piso mensal e por dia útil, item por item, com data da última medição. Se alguma conta muda de valor numa data futura conhecida, escreva a data. **Parcela de dívida fica fora do piso**, listada separada, porque ela tem fim e porque a régua já soma a dívida por outro caminho. Se ela entrar nos dois lugares, o número dobra. Diga quanto ela representa do total que sai: zerar isso equivale a ganhar esse valor por mês para sempre.
- **economia_da_operacao**: os números unitários medidos por mim: custo por unidade, retorno, margem realizada, média histórica, recorde, e quanto por dia paga o piso. E logo abaixo, o que limita de verdade, que quase nunca é a margem.
- **conciliacao**: de qual banco ou carteira eu exporto o extrato, em que formato o arquivo vem, o mapa das colunas dele, a pasta `extratos/` onde eu largo o arquivo, e as regras de leitura da Fase 6. **Nunca guarde aqui URL de banco, endereço de extrato ou de saldo, login, senha, nem nada que dê acesso à minha conta.**
- **calculos**: as fórmulas da régua e dos agregados, com o nome exato da função do `gerar.py` que calcula cada uma.
- **limites**: o que você nunca faz.
- **escrita**: o tom, o formato de valor `R$ 1.234,56`, sem travessão e sem emoji, mais **um exemplo de voz de uns dez a quinze linhas**, escrito com números de exemplo, mostrando como um trecho do relatório deve sair. Esse exemplo vale mais que qualquer adjetivo sobre tom.
A **régua** é o número grande do sistema e ela precisa estar no `calculos` assim:
```
aberto = quanto falta para o objetivo
dias_corridos = de hoje até a data-alvo
dias_uteis = dias de trabalho entre amanhã e a data-alvo
custo_diario = custo mensal dividido pelos dias do mês
meta_diaria = aberto / dias_corridos (o que precisa sobrar)
entrada_necessaria = meta_diaria + custo_diario
total_periodo = aberto + custo_diario * dias_corridos
por_dia_util = total_periodo / dias_uteis
em unidades = total_periodo / preço do produto principal
```
**Prazo fixo significa que dia fraco aumenta o valor de amanhã.** Mostre a conta ficando mais cara quando eu atrasar. É a mecânica inteira.
E o diagnóstico central, que precisa aparecer todo dia: **receita contra abatimento real**. Quanto entrou no mês contra quanto de fato foi para o objetivo. Se a receita for muito maior que o abatimento, diga com todas as letras que a capacidade existe e o dinheiro não está sendo separado. Não é problema de faturamento, é de retenção. Cuidado para não somar o mesmo dinheiro duas vezes: o que já está dentro do custo fixo não entra de novo como gasto avulso.
## Fase 5: A tarefa agendada, ou as duas
Use o número que eu dei no Bloco 6. **Uma tarefa por dia é o padrão e sustenta o sistema inteiro**: ela pergunta, grava, fecha o dia, publica o painel e propõe as três de amanhã. Se eu escolhi uma só, monte a tarefa da noite descrita abaixo e ignore a da manhã; nesse caso a `fase` vai direto de vazia para `fechado` e o campo deixa de fazer trabalho, mas **mantenha ele no schema**, porque adicionar a segunda tarefa depois não pode exigir migração de banco.
A segunda tarefa só se paga se existe uma virada no meio do dia cujo resultado muda o que eu faço depois. Se for só vontade de ter mais relatório, ela vira uma pergunta a mais por dia e nada mais, e eu abandono o sistema em duas semanas. **Não me empurre a segunda.**
Cada tarefa começa com o mesmo cabeçalho obrigatório:
> Antes de qualquer outra coisa, leia `<caminho>/CONTEXTO.md`. Se esse arquivo não existir ou a pasta não estiver conectada, pare, avise no chat e não grave nada. Sem ele você não tem contexto para escrever número nenhum.
Depois, em toda tarefa, uma checagem de relógio. Isso não é detalhe: execução agendada dispara horas atrasada quando o computador acorda, e uma execução atrasada que se comporta como pontual corrompe o registro. Escreva a matriz com **faixas de hora explícitas**, assim:
> Rode `date` no bash e olhe a data e a hora reais antes de decidir o que é "hoje".
>
> Na tarefa da manhã, se ela existir:
> - Dentro da janela da manhã, em dia de operação: execução normal, fluxo inteiro.
> - Depois da janela, ou se a linha de hoje já estiver com `fase: fechado`: não trate como manhã. Não pergunte de atividade do período, **não rebaixe uma linha `fechado` para `parcial`**. Concilie pelo arquivo de extrato, se houver um novo em `extratos/`, atualize o painel, e escreva um relatório curto dizendo que a execução saiu atrasada e o que você conferiu.
> - Dia sem operação (fim de semana, folga): pule as perguntas de atividade. O resto do relatório continua valendo.
>
> Na tarefa da noite:
> - Da hora de fechar até meia-noite: execução normal, o dia a fechar é o de hoje.
> - **Depois da meia-noite: o dia a fechar é o de ontem.** Grave na linha de ontem e diga isso no chat.
> - Antes da hora de fechar: é cedo demais. **Não marque `fase: fechado`.** Concilie, atualize o painel, escreva um relatório curto e diga que o fechamento ficou pendente.
> - Se a linha do dia já estiver `fechado`, não refaça o fechamento: mostre o que está gravado e pergunte se mudou algo.
>
> **Nunca grave número de trabalho num dia que não teve trabalho.**
Substitua "janela da manhã" e "hora de fechar" pelos horários que eu der no Bloco 6, em número.
**Tarefa da noite, a principal** (`fase: fechado`). Se eu escolhi só uma, é esta. Grava o dia, propõe as três de amanhã.
1. Ler antes de perguntar: se existe tarefa de manhã e ela já gravou, **não repergunte o que já está lá**: mostre os valores e pergunte só o que mudou desde então. Abra o `vault/INDEX.md` e leia os arquivos das pessoas e decisões que o dia toca; **nunca proponha para amanhã algo que uma decisão já descartou**, e se for propor mesmo assim, diga qual decisão você está contrariando e por quê. Leia o arquivo de extrato mais recente de `extratos/`, se ele existir e cobrir o dia; se a manhã já conciliou, procure principalmente o que entrou e saiu depois disso. Rode a conciliação das dívidas e olhe se alguma venceu.
2. Perguntar em três grupos numerados: **o que você fez** (as atividades do Bloco 4), **o que entrou e o que saiu**, e **fechamento** (pendências para amanhã, uma linha sobre como foi o dia e o humor de 1 a 5). Dívida vencida entra aqui também. Se a conciliação não rodou, diga e pergunte os valores. Pare e espere.
3. Gravar: `fase: fechado`. Pendências múltiplas separadas por ponto e vírgula no mesmo campo. Dívida renegociada, regrave a linha. As três de amanhã vão nos campos `tarefa_1/2/3` da **linha de amanhã**, criando a linha se preciso. Tire das pendências de hoje, das lacunas do período e da distância até a meta. **Se amanhã for dia sem operação, não proponha tarefa de operação.**
4. Atualizar o vault: pessoa nova ou que mudou de estado, decisão tomada ou descartada, pauta nascida ou promovida. Arquivo em `dias/` **só se o dia teve algo que número não guarda**; dia comum não gera arquivo. Entrada nova no topo, com data, sem reescrever o que estava lá.
5. Publicar.
6. Escrever no chat, e aqui está o ponto do sistema inteiro: **"o que eu fiz" e "o que entrou" são duas seções separadas que nunca se misturam.** Uma mede o que eu controlo, a outra mede consequência. Depois: a régua, receita contra abatimento, streaks, as três de amanhã (exatamente três, em ordem, cada uma começando com verbo, com meia frase ligando ao número que a torna urgente), e por último a linha do dia repetida do jeito que eu escrevi, com o humor. **Não comente, não interprete, não console.** O custo emocional é variável de negócio e fica registrado como eu falei.
**Tarefa da manhã, a opcional** (`fase: parcial`). Fecha o período anterior, mostra a régua, define as três do dia. **Só monte esta se eu pedi duas.**
1. Ler antes de perguntar: carregue o banco, calcule régua e streaks, veja o que a tarefa da noite deixou em `tarefa_1/2/3` e se ela deixou algo preparado, abra o `vault/INDEX.md` e leia os arquivos das pessoas e decisões que o dia toca, leia o arquivo de extrato de `extratos/` se houver um novo e concilie, e olhe se alguma dívida venceu.
2. Perguntar: **uma única mensagem, lista numerada, respondível em dois minutos**. Só o que você não consegue ler sozinho: espécie, gasto fora da conta, agenda nova, e a confirmação das três do dia. **Não pergunte o que você consegue ler** no arquivo de extrato. Se alguma dívida venceu, pergunte junto como ficou a negociação. Se a noite não rodou e não existe linha de hoje, pule a confirmação e pergunte quais são as três do dia. Se a conciliação não rodou, diga isso **e pergunte os valores**. Pare e espere.
3. Gravar: linha do dia com `fase: parcial`. Cada entrada e cada saída vira uma linha em `lancamentos`. Se uma dívida venceu e eu disse como ficou, **regrave a linha da dívida**: dívida não é constante, é linha de banco que se edita.
4. Atualizar o vault, com os mesmos gatilhos da tarefa da noite.
5. Publicar: rodar `gerar.py` e atualizar o artefato.
6. Escrever no chat: a régua; o fechamento do período anterior comparado com a média histórica; entrou e saiu hoje em duas listas separadas com total e sobra; agenda e o que vence nos próximos 3 dias (se o que vence for maior que o saldo, diga o tamanho do buraco em reais); streaks com valor atual e recorde; o entregável de hoje pronto para copiar e colar se a noite preparou, ou escrito agora se não preparou; e as três do dia.
Regra que vale em qualquer tarefa, e é a mais importante de todas:
> Grave só o que eu dei. Sem invenção, sem estimativa, sem repetir o dia anterior para preencher lacuna. Se eu não responder, não escreva nada em lugar nenhum.
## Fase 6: Conciliação
O extrato é o conferidor, e ele entra por **arquivo exportado por mim**, nunca por sessão de banco aberta.
**Não configure leitura de página de banco.** Não navegue no site da minha conta, não conte com o navegador logado, e não guarde no `CONTEXTO.md` URL de extrato, URL de saldo, login ou senha. O motivo é de projeto, não de gosto: a tarefa agendada roda sozinha, sem ninguém olhando, e automação com acesso à minha conta de banco é a única peça deste sistema cujo pior caso é eu perder dinheiro. Em todo o resto, o pior caso é um número errado num relatório, e número errado se corrige. O arquivo exportado carrega o mesmo dado sem carregar o acesso à conta.
Monte assim:
1. Me explique como exportar o extrato do meu banco ou carteira e me peça o arquivo. Prefira **OFX**, que é o formato padrão de extrato e traz data, hora, valor e descrição; se o meu banco só oferecer CSV ou XLSX, serve.
2. Crie a pasta `extratos/` na raiz do projeto. É onde eu largo o arquivo, e é a única porta de entrada do extrato.
3. Crie `extrato.py`, que lê o arquivo mais recente de `extratos/` e devolve as transações (data, hora quando houver, valor, descrição). Se o arquivo for CSV ou XLSX, **abra o meu arquivo, me mostre os nomes de coluna que você encontrou e me pergunte qual é a data, qual é o valor e qual é a descrição**, porque cada banco nomeia de um jeito. Grave o mapa confirmado no `CONTEXTO.md`. Não adivinhe coluna.
Frequência: eu exporto quando dá, e uma vez por semana já cumpre o papel. O número do dia sai da minha boca na conversa; o arquivo chega depois e confere.
Regras:
1. **Confira data e hora de cada transação antes de gravar.** O horário é o que prova a qual dia ela pertence. Extrato deslocado em um dia contamina o registro inteiro. Se o arquivo vier sem hora, use a data do arquivo e **diga no chat que não dá para separar transação perto da meia-noite**, em vez de fingir uma precisão que o arquivo não tem.
2. Antes de gravar, compare com o que já existe no banco naquele dia. Uma transação que eu contei pela boca e a mesma vista no extrato viram **uma linha só**, no valor exato do extrato.
3. Dinheiro em espécie não aparece em extrato. Isso vem só pela minha boca.
4. Se não houver arquivo novo em `extratos/`, ou se o arquivo não cobrir o dia, **siga o relatório sem a conciliação**. Escreva no chat que ela não rodou, o que ficou por conferir, e pergunte os valores. Nunca peça, digite ou guarde senha, token, código de verificação ou dado de cartão, e **nunca tente outro caminho para o mesmo dado**: não abra o site do banco, não instale extensão, não use agregador que peça a minha senha bancária.
5. O arquivo de extrato é dado sensível: ele fica em `extratos/`, dentro da pasta do projeto, fora de pasta compartilhada e fora de link público. Coloque `extratos/` e `backup/` no `.gitignore`, junto com o `.env`.
6. Lê arquivo e registra, só isso.
Conciliação do objetivo, nas duas tarefas: valor original menos os pagamentos registrados tem que bater com o valor em aberto. Se não bater, **mostre os dois números e pergunte qual está certo antes de seguir**. Se hoje passou do prazo de alguma dívida com valor em aberto, pergunte como ficou a negociação e regrave a linha.
## Fase 7: Gerador e painel
`gerar.py` lê o banco e escreve `index.html`, o consolidado do mês, o arquivo do dia em `YYYY/MM/YYYY-MM-DD.html`, e um `artefato.html`. Depois regrava `backup/`.
**As funções de cálculo moram no `gerar.py` e as tarefas importam de lá**, para o chat e o painel nunca divergirem: `regua()`, `conciliar()` (a conciliação do objetivo, não a leitura do extrato, que mora em `extrato.py`), `streaks()`, `vencendo()`, `por_categoria()`, `receita()`, e o acumulado da operação (investido, retornado, diferença).
Streak é dias consecutivos com o recorde ao lado. Quebrou, zera e mostra o recorde. **Sem consolo e sem cobrança**: ele mede que a coisa aconteceu, nunca quanto tempo durou, e uma entrega paga sempre ganha de um streak.
O painel do dia mostra a régua no topo, o calendário do mês com os dias preenchidos, entradas e saídas por categoria, streaks e as três do dia.
Publicar o painel num endereço fixo é opcional, e **antes da primeira publicação você me diz, em uma frase, o que vai para esse endereço e quem consegue abrir ele**. O painel tem o meu faturamento, a minha meta e a minha dívida: trate endereço publicado como aberto a quem tiver o link até eu provar o contrário, e me peça para abrir a URL numa janela anônima para conferir. Se eu não quiser isso, o `index.html` local cumpre o papel inteiro e você não publica. Se eu quiser, publique o `artefato.html` num artefato de id fixo: procure o id com `list_artifacts`, atualize com `update_artifact`, e se não existir crie com `create_artifact` usando esse id exato. **A URL não muda; o histórico fica nos arquivos por data.**
## Limites, e eles não são negociáveis
- Nunca execute Pix, pagamento, transferência, empréstimo ou compra. **Se a ação move dinheiro, eu faço.**
- Nunca digite senha, token, código de verificação ou dado de cartão.
- **Nunca navegue na página do meu banco nem em conta minha autenticada, e nunca guarde endereço, login ou senha de conta em arquivo nenhum.** O extrato entra por arquivo exportado por mim, como está na Fase 6.
- Quando eu perguntar se devo pegar crédito ou como priorizar pagamento, mostre os números dos dois lados, diga qual informação falta para a conta fechar, e deixe a decisão comigo. Você não é consultor financeiro.
- Sobre a minha rotina e a minha operação, opine com os números na mão. Isso é meu e você tem os dados.
- Nunca use caso de cliente em conteúdo público sem autorização dele.
- Chave de API e segredo vão para `.env`, que entra no `.gitignore`. Nunca escreva o valor em arquivo versionado nem no chat.
## Teste antes de me entregar
Antes de dizer que acabou:
1. Grave um dia de teste com valor conhecido e confira que a linha entrou uma vez só.
2. Rode a mesma coisa de novo e confira que **não duplicou** e que campo não informado não apagou o que já estava lá.
3. Rode `gerar.py` e abra o HTML.
4. Confira que o número da régua no chat e o do painel são idênticos.
5. Apague o dia de teste.
6. Confira que todo wikilink do vault aponta para arquivo que existe, e que nenhum arquivo ficou sem ninguém apontando para ele.
7. Me mostre a estrutura final da pasta e me diga, em uma frase por tarefa, o que cada uma vai me perguntar amanhã.
8. Com o meu arquivo em `extratos/`: confira três transações que eu conheço, uma a uma, valor e data, contra o que você leu; confira que uma transação que eu já tinha contado pela boca virou **uma linha só**; e depois esvazie a pasta e rode de novo, para provar que sem arquivo a tarefa segue, avisa que a conciliação não rodou e pergunta os valores, em vez de travar ou inventar número.
9. Só se o painel for publicado num endereço fixo: me diga qual é a URL e quem consegue abrir ela, e me peça para abrir esse endereço numa janela anônima antes de a tarefa começar a publicar todo dia. Se eu não publicar, marque como não se aplica.


Quem vai te atender
Pedro Paulo. Eu não sei programar.
O que eu sei é escrever instrução.
Primeiro software meu pago em 05/12/2025, com comprovante.
Seis pessoas já me pagaram por trabalho meu, dentro e fora do Brasil, pelo meu registro de clientes.
Quem responde no WhatsApp sou eu.
Prefere que eu monte com você?
R$ 1.497
uma vez
1
sessão ao vivo
7
dias de suporte
O sistema fica com você, sem depender de mim depois. Sem mensalidade minha.
Custo que continua: Claude Pro, US$ 20 por mês, uns R$ 110 em câmbio estimado de 08/2026.