alvo 19/09✅ provado · 🔄 em andamento · ❌ falta · ⏸️ depoisbackend 2.48.0 · 134 rotasatualizado 11/09 10:05
Alvo: Central do Sócio 2.0 no ar em 19/09/2026 — carteirinha digital, renovação 100% digital e loja nova.
Estado do backend: contrato 2.49.0 · 137 rotas · 168 testes · produção intocada · branch feature/contrato-v2 (commit 451a95f).
Última atualização: 10/09/2026, 14:45 (fonte: espelho do Claude Code do dia, transcripts brutos, documentos de estado do Claude e dossiê).
Como ler: ✅ provado · 🔄 em execução agora · ❌ falta · ⏸️ depois do lançamento (registrado para não sumir).
🔄 A RODADA EM CURSO — na mão do Base44 desde hoje, 11:02
Um único MD, cinco frentes, tudo já provado contra a base do dev antes de sair (MD-BASE44-LOJA-E-DINHEIRO.md):
A loja nova — vitrine com itens e pacotes, cotação com cupom, compra, e o cadastro no admin (item, pacote, cupom) + relatório de campanha.
O pagamento sai da v1 — os oito pontos do caminho do dinheiro.
A página pública de Day Use — calendário do comprador e o dia errado à noite.
O painel Convites & Day Use — status e origem vindo do contrato.
Lotação, calendário e limpeza — apagar limite, calendário do sócio, arquivos órfãos.
🔴 1. A VIRADA PARA PRODUÇÃO
✅ Medição feita: produção não tem nenhuma migração pendente contra o próprio código. Faltam 24 migrações que existem no dev — o número "47" era arquivos que diferem nos dois sentidos, não o que falta rodar. (10/09 10:05)
❌ Ensaio da virada contra uma cópia fresca da produção — não feito.
❌ Caminho de volta escrito — não existe.
❌ Rodada final de testes do front.
⚠️ É o único item sem plano B: defeito de tela se conserta com o sistema no ar; migração que falha no meio deixa 30 mil sócios num estado que ninguém planejou.
🪪 2. CARTEIRINHA DIGITAL
✅ Backend: nasce da ativação, validade anual arredondada ao fim do mês (2.31.0).
✅ 18.187 QR gerados — o banco tinha zero em toda a base em circulação; distintos e idempotentes (52 s).
✅ Portaria libera por QR, registra liberado e barrado com motivo congelado.
✅ QR do título abre a família (teste: 3 pessoas liberadas).
✅ Página /c/{codigo} responde 200 — era bloqueador de lançamento.
✅ Sócio: carteirinha digital na Central — testada e aprovada no roteiro (item 12 ok).
✅ POST /v2/renovacao/preparar cria o pedido sem cobrar.
✅ 2.369 de 22.536 pedidos com valor nulo/zero corrigidos (2.35.0).
❌ Renovação pendente esconde as outras telas do sócio (item que bloqueia a rodada de front).
🚪 4. PORTARIA
✅ Rota da ficha liberada — /admin/associados e /admin/pedidos davam 403 desde 14/08 (duas das cinco telas nunca funcionaram). A ficha abre com nome, título, categoria, situação e dependentes — sem RG, endereço, e-mail, telefone e nascimento.
❌ Corte dentro da ficha — aguardando você. O topo da ficha já vem enxuto (nome, título, categoria, situação, dependentes — sem RG, endereço, e-mail, telefone, nascimento), mas o bloco de carteirinhas logo abaixo ainda devolve o cadastro completo do dependente. O corte fica furado por dentro: o balcão vê os dados que a portaria não deveria ver. O Claude não cortou porque não sabe o que a tela desenha ali — e isso está no código, que ele tem.
❌ Rebranding da portaria — apontado, sem data.
🔐 5. LGPD
✅ Consentimento com hash sha256 e versão no repositório; 7.381 titulares vão aceitar; primeira escrita real registrada (título 5444, canal "central").
⏸️ Protocolo de direito de exclusão — o termo no ar promete essa porta; o módulo não existe. Entra na incursão de Protocolos.
📅 6. CALENDÁRIO, TEMPORADAS E LOTAÇÃO
✅ Tabela temporada_dias, uma linha por data, data UNIQUE — sobreposição deixa de ser possível. Day use e cashback independentes.
✅ 4 rotas de admin + comando de expansão. Paridade provada em 759 dias, zero divergência.
✅ temporada_idopcional (2.42.0) — acabou a obrigação de carimbar dia novo com nome de temporada velha.
✅ Erro em inglês corrigido: campo em branco não é mais enviado; falta de preço do inteiro é recusada em português.
✅ Lotação resolvida (2.47.0): todo dia tem limite. Sem número próprio, o dia herda o padrão do parque = 1000, editável em Ajustes sem deploy. O zero que significava "infinito" deixou de existir. O calendário diz o que foi digitado, o número que vale e de onde veio.
✅ Rota pública GET /v2/loja/dias (2.43.0) — dias abertos e preço por dia, sem login.
🔄 Em execução no Base44:lotacao: null explícito para apagar o limite · calendário do sócio para convites (ainda na v1) · limpeza dos arquivos órfãos.
🔄 Roteiro: itens 4 a 11 (pintar por regra, pintar por data, repintar, corrigir dia, fechar dia, dia apagado) prejudicados pela obrigatoriedade — precisam ser refeitos. Itens 1–3, 12, 13, 17 e 18: ok.
⏸️ Modelo antigo de temporadas sobreviveu (uma temporada grava dois registros casados por prefixo de nome; 16 órfãs) — incursão própria.
✅ Item — qualquer coisa vendável. preco_tipodo_dia (ingresso; o preço sai do calendário daquela data pela referência) ou próprio (almoço, bangalô, balde de cerveja, valor fixo). Cada item diz quantas pessoas ocupa no parque — almoço ocupa zero.
✅ Pacote — conjunto de itens com nome e foto próprios. Não guarda preço de tabela de propósito: o "de" é a soma das partes naquela data e sobe sozinho. Por cima cabe preço fechado OU percentual, nunca os dois.
✅ Cupom — código de campanha com validade, limite total, limite por CPF, valor mínimo e alvo. Cada uso vira registro com pedido, CPF, bruto e desconto. Olhar o preço não queima o cupom — o uso só é gravado depois que o pedido existe.
✅ Vitrine pública:GET /v2/loja/catalogo?data= devolve itens, pacotes (com preco_de, preco_por, economia, tem_desconto) e a lotação do dia.
✅ Cotação com cupom:POST /v2/loja/cotacao — carrinho válido com cupom recusado continua válido; cinco motivos de recusa, cada um com frase própria.
✅ Compra:POST /v2/loja/pedidos aceita item e pacote e grava cupom e pacote no pedido. Na compra, cupom recusado é 422.
✅ Cadastro no admin: 12 rotas em /v2/admin/loja/ (itens, pacotes, cupons) + relatório de campanha (usos, pessoas distintas, pedidos pagos, bruto, descontado, receita líquida, ticket médio).
✅ Provado na base, em transação com rollback: Combo Família com Almoço em 7 de fevereiro de R$ 417,80 por R$ 250,00 · Bangalô + 6 ingressos + balde de R$ 839,40 por R$ 713,49 · cupom de 30% sobre R$ 295,00 desconta R$ 88,50.
✅ Deixado cadastrado no dev para teste: item Almoço R$ 45, o Combo Família com Almoço e o cupom VERAO30.
✅ A v1 continua funcionando: um pacote se dissolve nos ingressos que carrega para montar as chaves antigas — o portal Nuxt em produção não sabe o que é pacote.
🔄 Em execução no Base44: as telas do admin, a vitrine e a compra no front; e a substituição das telas antigas de produto/variação (4 arquivos).
🧾 7b. RODADA DE FECHAMENTO — contrato 2.49.0 (10/09, 12:29)
Fechou os cinco pontos que o Base44 devolveu na rodada anterior. O que entrou:
✅ GET /v2/admin/dayuse/resumo — o painel parou de somar 200 e chamar de total. Agrega no banco com os mesmos filtros da lista (lista e resumo que filtram diferente fazem o cabeçalho contar uma base e a tabela mostrar outra). Sobre a base inteira: 1.782 pedidos, 1.169 com receita, R$ 148.866,61 líquidos, ticket médio R$ 127,35, Pix 880 · cartão 260 · secretaria 29 · origem secretaria 29 / online 1.753.
✅ Erro do próprio Claude, pego pela prova: contou origem por quem vendeu e deu 1 venda de balcão contra 29 pelo método secretaria — a coluna de operador só passou a ser gravada ontem, então conta o futuro e não a base. Passou a usar a mesma regra do recurso; os dois números batem em 29.
✅ Um nome só para a composição — o cadastro devolvia itens e a vitrine composicao; agora é composicao nos dois.
✅ POST /v2/admin/loja/imagens — multipart, 5 MB; devolve caminho e url. Grava-se o caminho, nunca a URL (guardar URL assinada foi o defeito das carteirinhas: 22.194 de 22.536 davam 403).
✅ DELETE /v2/admin/loja/cupons/{id} — só apaga cupom nunca usado; com uso registrado, 422 mandando desativar (apagar levaria o rastro da campanha).
✅ Cinco órfãos de config/logApi/ autorizados para apagar.
⏸️ Aberto esperando você: autorização para gravar foto no bucket S3 compartilhado com produção (prefixo loja/). O Claude não mandou o Base44 testar upload sem o seu ok — o campo fica pronto, sem enviar imagem.
🎟️ 8. DAY USE E A VITRINE PÚBLICA
✅ A venda de balcão pela secretaria já é loja v2 de ponta a ponta e usa data local.
✅ Achado grave corrigido na 2.48.0: a venda de balcão nunca funcionou. A rota de criar pedido é pública (o visitante do day use não tem conta), e o servidor procurava o operador no lugar errado — encontrava nulo mesmo com token válido. Toda venda pela secretaria respondia "sem permissão". Agora grava quem vendeu, e é isso que faz o painel separar balcão de online.
🔄 A página pública compra o dia errado à noite (toISOString — depois das 21h o dia vira), na data da compra e na do ingresso. Na rodada atual.
🔄 Com o calendário novo, a página pública passa a dizer "Day Use Indisponível" em dia aberto direto no calendário. Na rodada atual.
🔄 Duas fontes de preço na mesma tela — se o catálogo v2 vier vazio, a página cai silenciosamente no cálculo antigo da v1. Na rodada atual.
🗂️ 9. ADMIN — CONVITES & DAY USE
✅ Sete telas já falam v2 inteiro e não precisam de nada: painel do cashback, lista de convites, saldos, transações, previsão de movimento, venda de balcão e o extrato de Pio Coins do sócio.
✅ Extrato de Pio Coins na tela do sócio, dentro de Convites — JÁ EXISTE. Era o item 6 da sua fila.
✅ Painel de Day Use ganhou status e origem no contrato (2.36.0) — 968 day uses utilizados que nunca eram contados; a base fecha: 604 pendente + 201 pago + 968 utilizado + 9 cancelado = 1.782.
✅ Filtro de status traduzido (escolher "Pago" dava 422).
✅ Aba Leads estava vazia — não havia rota v2; criada, 1.069 leads apareceram.
🔄 Front: o painel ainda calcula status e origem no navegador a partir de campos crus (diz "tudo online" sempre, porque user_id existe em 1 de 1.782). Na rodada atual.
❌ 13 arquivos ainda importam o cliente v1 — oito deles no caminho do dinheiro (cobertos pela Parte 2 do MD).
💳 10. O CAMINHO DO DINHEIRO
✅ Os pares na v2 já existem para os oito pontos, e o hook usePagamentoV2já está escrito — ninguém o ligou.
✅ Rotas: POST /v2/pagamentos/pix e /cartao recebem pedidos_ids como array de 1 a 20 (avulso e agrupado viraram uma rota só); GET /v2/pagamentos/{codigo} (sem sufixo — a rota com sufixo dá 404 silencioso).
🔄 Trocar os oito pontos do front para a v2. Na rodada atual.
⚠️ É o único trecho de v1 que cobra de verdade. Painel que discorda mostra número errado; pagamento que discorda cobra errado.
🧱 11. BACKEND — DÍVIDAS FECHADAS HOJE
✅ CPF passou a ser conferido, com dígito verificador. Vale para entrada nova — não revalida cadastro histórico, senão um erro de digitação de anos atrás barraria sócio real no portão.
✅ Editar produto não apaga mais o que não foi enviado (perda de dado silenciosa, provada).
✅ Remover variação remove de verdade; o que já foi vendido é recusado com instrução de desativar.
✅ Variação não pode mais ser vendida por R$ 0,00.
✅ Rotas de produto passaram a usar o envelope v2.
✅ As três referências de ingresso saíram do código e são publicadas nas configurações.
✅ Convite de cashback em dia sem temporada (dívida da 2.43.0) — fechada.
✅ Erro cometido e corrigido no caminho: a primeira checagem de "já foi vendida" deixou apagar a variação Inteiro no dev; restaurado, e a checagem agora olha as duas gravações.
⏸️ FORA DO DIA 15 — registrado para não se perder
Protocolos e mensagens (fila nº 2 e 3) · Dashboard (nº 4)
Autenticação v2 — a última da fila. Hoje o login inteiro ainda é v1 (função do Base44), e recuperar-senha-cpfdiz quem é sócio.
Incursão de segurança (token em localStorage, rotas de admin sem papel no front)
Cashback — incursão própria. A diretoria sinalizou sem validade + contabilizar em unidades. Extrato já existe.
Aba de regras de negócio em Configurações
Tela da TV — endereço próprio, F11, espelhada, tempo real
Não existe cron na VPS (schedule:run não roda)
Limpar as temporadas de teste de 2027 em produção (preços de R$ 2/R$ 3, "teste")
Dado sujo: as variações 4 e 5 do "Pacote Família" têm o mesmo nome — já sentenciado como teste
Fotos: decisão sua — não mexer. A fila caiu de 6.950 para 120, e as 120 têm ação de gente (as 18 "bloqueadas" são "título não encontrado para este CPF", assunto da aba Vínculos).
SDR Pio 11 (frente separada): entregue por link para testar — não depende do número sandbox e não expira nada. (correção do GT, 10/09)
Base44 travou duas vezes na execução do MD de 5 frentes (10/09). O prompt foi cortado em duas etapas, por área do código — Pio11/dados/PROMPT-ETAPA-1-LOJA.md (loja + página pública: Partes 1 e 3) e PROMPT-ETAPA-2-DINHEIRO.md (pagamento + painel + calendário/limpeza: Partes 2, 4 e 5). Nada foi reescrito: o texto é o mesmo, só partido.
📌 RETOMADA — para colar no Claude quando a sessão perder o fio
PIO 11 — Central do Socio 2.0 · estado em 10/09/2026, 11:35
Backend: branch feature/contrato-v2, contrato 2.48.0, 134 rotas, 168 testes.
Producao INTOCADA. Alvo: lancar em 19/09.
Ambientes (confirmado no nginx):
api.infrapio11.com.br -> pio11_back_dev DEV (banco pio11_dev)
api.grupopio11.com.br -> pio11_back PROD (banco pio11)
Producao: ler pode sempre; mexer so com autorizacao explicita.
PRONTO no backend: carteirinha digital (validade anual, 18.187 QR gerados),
portaria com liberado/barrado e resposta reduzida, LGPD, fim da grafica,
renovacao parcial com preco no servidor, calendario novo (temporada_dias,
paridade 759 dias, temporada_id opcional), lotacao com padrao 1000 herdado,
rota publica de dias abertos, venda de balcao corrigida (nunca funcionou),
CPF validado com digito verificador, e a LOJA inteira: item / pacote / cupom,
vitrine (GET /v2/loja/catalogo), cotacao com cupom, compra gravando pacote e
cupom, 12 rotas de cadastro em /v2/admin/loja/ e relatorio de campanha.
Cadastrado no dev: item Almoco R$ 45, Combo Familia com Almoco, cupom VERAO30.
EM CURSO: um MD unico no Base44 (10/09 11:02) com 5 frentes - loja no front,
pagamento v1->v2 (8 pontos), pagina publica de Day Use, painel Convites & Day
Use, lotacao/calendario/limpeza.
FALTA fora do front: ensaio da virada (24 migracoes do dev) com caminho de
volta escrito.
Nunca esquecer: o dev manda e-mail real pelo SMTP de producao; as fotos vao
para o bucket S3 de producao; nao existe cron na VPS.
Fonte canônica: Pio11/dados/PROGRESSO-19-09.md · gerado por render_progresso.py.
Alimentado pelo espelho do Claude Code, pelos transcripts brutos e pelos fatos do dia.