Pendências e decisões em aberto¶
Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-09-12
O que ainda depende de terceiros (PIED / X-Adm) para fechar. Itens já decididos saíram daqui — o conhecimento ficou destilado na doc do assunto (Modelagem, Mapeamento, API do Integrador, Tratamento de dados no ZIM, decisões).
Dono: 🔌 PIED · 🧮 X-Adm/ERP.
P1 — Quais dealStatus marcam "enviar ao X-Adm" 🔌 · bloqueia o quando enviar (Fase 2)¶
O X-Adm só faz INSERT de pedido (nunca UPDATE), então só se envia pedido em estado que já conta
como venda. Campo identificado nos dados reais (14.300 pedidos capturados, jul/2026): é o
dealStatus — e o requestStatus veio com distribuição idêntica (espelho; usar dealStatus).
stockStatus (removed/none/reserved) não serve de gate. Valores observados, agrupados:
| Grupo | Valores (dealStatus) |
qtd | Enviar? |
|---|---|---|---|
| Finalizado | Finalizado (8269), Finalizado Garantia/Avaria (312) |
8581 | ✅ provável |
| Despachado | Despachado (2727), Despachado Garantia/Avaria (63) |
2790 | ✅ provável |
| Pago / em produção | Pedido Pago - Liberado para Produção (40), OP Gerada (34), NF Faturamento Banco - Financiamento (13), Nota Futura Emitida (7), Pedido Pago - Venda Futura (2) |
96 | 🟡 decidir |
| Aguardando | Aguardando Transportadora Coletar (55), Aguardando Controladoria (22), Aguardando Financiamento (2) |
79 | 🟡 provavelmente não |
| Novo | Novo (39) |
39 | ❌ não |
| Recusado | Recusado Falta de Pagamento (2230), Recusado Alterar Informações (433), Recusado Desistência (45), Recusado Devolução/Estorno (7) |
2715 | ❌ não |
Decisão (2026-07-13): âncora do gate = Pedido Pago - Liberado para Produção — o pedido é lançado
ao X-Adm ao atingir esse marco.
✅ RESOLVIDA (2026-08-07) — Maxsul confirmou, e o gate MUDOU de eixo: não é mais por
dealStatus. Análise dos pedidos reais mostrou quedealStatusnão distingue pago de não-pago (ex.: "OP Gerada" aparece pago e não-pago) e que a PIED tem um campopayment.statusdedicado (received,notRequested,requested,partial,cancelled). O gate passou a ser a transição de pagamento: envia quando um pedido que já tínhamos não-pago recebe um update compayment.status='received'. Detectada por evento no upsert (payment_status/payment_status_anterior).estados-vendanão governa mais o envio (sobrou como filtro do "Puxar da PIED"). Verdocs/glossario.md(Gate) eIntegracaoConfig.
Ponto de atenção — o furo da 1ª captura (trade-off da transição): o gate é a transição para
received, então precisa de um estado anterior não-pago que a gente tenha testemunhado. Um pedido que
aparece já pago na 1ª captura (sem anterior) não dispara automaticamente — é intencional (pode ser
pedido antigo da PIED chegando agora; evita despejar backlog). O operador manda esses pelo /console
(Enfileirar exige payment_status='received'). Como o X-Adm só faz INSERT, envia uma vez. Ver
decisão 0001 (design
detalhado na spec 002 da linhagem .ia/).
⚠️ COBRADO NA PRÁTICA (2026-09-21) — o furo custou quatro pedidos. No apagão de webhook de 18/09/2026 (a PIED desativou o webhook após timeout; 2h44 de silêncio no pico da sexta), quatro pedidos nasceram e foram pagos na janela cega. O poll REST de backstop os trouxe já pagos — sem transição a testemunhar, encalharam em
CAPTURADOe ninguém viu até a segunda. A válvula manual não basta: ninguém olha o console sem saber que há o que olhar. A decisão 0023 fecha os dois lados — watchdog com régua comercial (45 min, seg–sex 8h–18h) para o apagão virar visível, e resgate automático da 1ª captura já paga, cercado pororderCreated(piso de ativação + janela de 7 dias). Nasce desligado: ligar é pôrPIED_GATE_PRIMEIRA_CAPTURA_DESDEno deploy.
P2 — De-para restante 🧮 · não bloqueia o esqueleto da Fase 2¶
Já resolvidos (movidos ao Mapeamento): TpVda←freight.type,
TaxaFrete←freight.price, InscEst←companies.stateInscription. Faltam quatro:
ClassForma (forma de pagamento)¶
Catálogo X-Adm: 01 Dinheiro · 02 Cheque · 03 Cartão de Crédito · 04 Cartão de Débito · 05
Crédito da Loja · 15 Boleto · 16 Depósito · 17 PIX · 18 Transferência · 90 Sem Pagamento ·
99 Outros. Valores reais de payment.type (14.300 pedidos, jul/2026) e o de-para proposto:
payment.type |
qtd | → ClassForma |
obs |
|---|---|---|---|
boleto |
6950 | 15 Boleto |
✅ |
pix |
6201 | 17 PIX |
✅ |
credito |
379 | 03 Cartão de Crédito |
payment.condition.name = "Cartão 3x/6x/10x" (parcelado) |
financiamento |
711 | ? a decidir | sub-tipos em condition.name: BV, Santander, "outros". Sem código X-Adm direto → 99? código novo? |
other |
41 | 99 Outros |
fallback |
- A (recomendada): de-para configurável (
boleto→15,pix→17,credito→03,other→99), default99p/ tipo não mapeado — ajustável sem recompilar. - A fechar com a equipe: o código de
financiamento(não há equivalente óbvio no catálogo).
Implementado (Fase 2): de-para configurável em
pied.integracao.transform.class-formacom esses defaults;financiamento→99é o default até a equipe decidir. Falta só a confirmação do código.
Prazo (data de entrega)¶
payment.condition ("30/60 dias") é condição de pagamento, não data de entrega. A PIED
aparentemente não tem data de entrega. A confirmar com a PIED; enquanto isso, branco
(regra "branco não nulo").
TaxaFrete (rateio)¶
freight.price é do pedido (valor único). Para gravar por item:
- A (recomendada): ratear proporcional ao valor de cada item.
- B: lançar o total no primeiro item.
EAN13¶
Não vem da API de produtos → branco; enriquecer de outra fonte depois, se necessário.
P3 — Contrato de entrada do zimrtmu 🧮 · bloqueia a gravação real (ps-java)¶
Como o cliente Java grava no ZIM. Ver Tratamento de dados no ZIM e decisão 0003.
| A confirmar com a equipe X-Adm |
|---|
Recebe o valor-armazenado ou o mascarado? Formato de ingestão (JSON, string ;)? |
| Largura / escala / padding por campo das cinco tabelas. |
Interino: o ps-java segue como exemplo simulado (simulaXadm) até o contrato; a formatação
por tipo já está especificada para a equipe.
P4 — Gate de identidade da segurança 🧮 · bloqueia fechar as telas administrativas¶
O int-pied roda com security.enabled: false (Fase 1 por design — decisões
0001, 0004,
0005): /console, /captura, /destinatarios e o
/admin/mensageria que veio da lib xadm-mensageria (decisão 0012)
nascem abertos. Ligar xadm-seguranca (Firebase idToken + sessão JWT, como o bi-transporte-xls)
é trabalho pequeno.
Decidido (2026-09-12) — quem loga e o que fica público, para quando fechar:
| Rota | Acesso |
|---|---|
GET / (painel) e GET /pedidos/{code} |
público |
POST /webhook/pied |
público (autenticado pelo segredo do webhook) |
todo o resto — ações do painel (POST /pedidos/{code}/importar, /dispensar, /reimportar, /importado-manual), /console, /captura, /dados, /destinatarios, /admin/mensageria, /test |
login Google restrito a @xadm.com.br (xadm-seguranca, AUTH_XADM_EMAIL_DOMAIN, default xadm.com.br) |
Operador da Maxsul não loga nesta etapa.
Interino (decisão do dono): tudo aberto enquanto a implantação está em fase final. O deploy é público
(https://pied.maxsul.xadm.biz) — as telas não expõem segredo, mas expõem ações (enfileirar, reenviar,
reconciliar). Risco aceito conscientemente, não esquecido.
Reavaliar a cada release: o CLAUDE.md do repo manda o agente perguntar ao dono, antes de cada release,
"a implantação terminou? fechar as telas agora?". Fechar = ligar micronaut.security, configurar auth.* e as regras de rota acima, e provar no e2e
(rota pública responde sem sessão; rota fechada redireciona para o login).
Resumo — o que trava o quê¶
| Para desenvolver… | Precisa antes |
|---|---|
| maxsul-pied Fase 1 (captura raw) | ✅ pronta (em produção) |
| maxsul-pied Fase 2 (transform + push) | ✅ implementada e em produção (2026-08-07). P1 resolvida (gate = transição de pagamento payment.status→received); resta P2 código do financiamento (default configurável cobre) |
| Integrador | ✅ colunas de venda + fones + INT-PIED em KNOWN_ORIGENS + GET …/retorno já no repo do Integrador |
| ps-java (gravação real) | P3 (zimrtmu) — até lá, exemplo simulado |
| PowerSync | pronto (sync rules já definidas) |
| Fechar as telas administrativas | P4 decidida (só @xadm.com.br); aguarda o fim da implantação — até lá tudo aberto |