Adicional: Múltiplas Notas Fiscais por pedido
Esta seção descreve o comportamento da nossa API durante o fluxo de envio de múltiplas notas fiscais para um mesmo pedido.
Visão Geral do Fluxo de Status
Quando um pedido é criado e aprovado, ele aguarda o envio das Notas Fiscais. Durante o processo de envio de múltiplas notas, o pedido transita pelos seguintes status na API:
- waiting_for_invoice (ou status inicial equivalente de aprovação)
- partially_captured (Recebendo notas de forma fracionada)
- captured (Captura finalizada e ciclo de envio de notas encerrado)
flowchart TD
%% Início do Fluxo
n1["Pedido aprovado aguardando nota (waiting_for_invoice)"]
subgraph s1["<b>Ações Iniciais do Vendedor</b>"]
n2["Vendedor emite NF e recebe aprovação da SEFAZ"]
n10["Aciona 'Finalizar Captura' manualmente"]
end
n1 --> n2
n1 --> n10
%% Validação da Flag
n2 --> n7{"Flag 'Enviar mais notas' marcada?"}
%% Caminho SIM: Mantém em waiting_for_invoice
n7 -- "Sim" --> n3a["Envia XML para CrediPay"]
n3a -- POST v2/orders/{orderId}/capture --> n4a["CrediPay recebe e valida XML"]
n4a --> n5a{"XML aprovado?"}
n5a -- "Não - webhook order.validationFailed" --> n6a["Vendedor apenas recebe feedback"]
n5a -- "Sim" --> n8["Mantém status como waiting_for_invoice"]
%% Caminho NÃO: Segue para finalização
n7 -- "Não" --> n3b["Envia XML para CrediPay"]
n3b -- POST v2/orders/{orderId}/capture --> n4b["CrediPay recebe e valida XML"]
n4b --> n5b{"XML aprovado?"}
n5b -- "Não - webhook order.validationFailed" --> n6b["Vendedor apenas recebe feedback"]
n5b -- "Sim" --> n11["Altera status para captured"]
%% Caminho do Botão Manual
n10 --> n11
%% Conclusão do Pedido
n11 -- "webhook order.captured" --> n12["Formaliza a operação"]
n12 --> n13["Gera e envia boletos ao comprador"]
%% Legenda Compacta no Final usando Caracteres Unicode (Não some na renderização)
n13 ~~~ Legenda
Legenda["<b>Legenda</b><br><br>🟩 Ações do Vendedor<br><br>🟧 Ações da CrediPay"]:::legendaBox
%% Estilização e Cores
n1:::credipay
n2:::vendedor
n10:::vendedor
n7:::vendedor
n3a:::vendedor
n4a:::credipay
n5a:::credipay
n8:::credipay
n3b:::vendedor
n4b:::credipay
n5b:::credipay
n6a:::vendedor
n6b:::vendedor
n11:::credipay
n12:::credipay
n13:::credipay
%% Definições de Classes Visuais
classDef vendedor fill:#C6F7D0,stroke:#333,stroke-width:1px,color:#000;
classDef credipay fill:#FFD8A8,stroke:#333,stroke-width:1px,color:#000;
classDef legendaBox fill:#f9f9f9,stroke:#ccc,stroke-width:1px,color:#000,text-align:left;
style s1 stroke:#000000,stroke-width:2px,stroke-dasharray: 5 5
Passo 1: Recuperar o ID do Pedido (Order ID)
Para interagir com a API, você precisará do order_id (identificador único do pedido ex: e9feb5aa-0000-...).
Endpoint de Consulta de Pedido:GET GET /v2/orders/{id}
Passo 2: Encaminhar NF com status de Captura Parcial (partially_captured)
Para enviar a Nota Fiscal e sinalizar que aquele pedido receberá mais notas no futuro, você deve utilizar o endpoint de Captura enviando o arquivo XML e passando o parâmetro que indica a continuidade (flag ativa). Ao realizar esta requisição com a flag indicando mais envios (ex: isPartialCapture: true no payload da requisição), a plataforma processa a nota e altera o status do pedido para indicar que a captura ainda está em andamento.
Endpoint de Captura: Ver referência na Documentação da API (Capture Order)
POST /v2/orders/{id}/captureAo fazer uma requisição GET no pedido após o primeiro envio, a API retornará as seguintes atualizações:
status: O campo será atualizado para "partially_captured".invoices: Um array será retornado contendo o objeto da Nota Fiscal que acabou de ser processada, incluindo o invoiceNumber (chave de acesso da NF-e) e os valores associados.
Exemplo de Resposta da API (Parcial):
{
"id": "e9feb5aa-0000-0000-0000-000000000000",
"status": "partially_captured",
"totalAmountCents": 10000,
"invoices": [
{
"id": "f2a1b9cc-...",
"invoiceNumber": "000000000000000000000000000000000017",
"status": "approved",
"amountCents": 5000
}
],
"metadata": { ... }
}Passo 3: Adicionando Notas Subsequentes
Enquanto o pedido estiver no status "partially_captured", ele continuará apto a receber novas chamadas para inserção de notas.
Sempre que uma nova nota for enviada com a flag de continuidade, o array "invoices" na resposta do GET crescerá, acumulando todas as chaves de acesso vinculadas àquele order_id, e o status se manterá como "partially_captured".
Passo 4: Finalizando a Captura (captured)
Para encerrar o ciclo de envio de notas e gerar os boletos, você tem duas possibilidades de integração:
Possibilidade 1: Enviando a última nota
Se você tem uma última nota fiscal para enviar e quer fechar o pedido simultaneamente, basta utilizar o mesmo endpoint do Passo 2, mas desta vez enviando a flag de isPartialCapture: false.
POST /v2/orders/{id}/capturePossibilidade 2: Finalizando manualmente (sem novas notas)
Se você já enviou todas as notas fracionadas anteriormente e quer apenas encerrar o pedido para gerar as cobranças (mesmo que o valor capturado seja inferior ao total original), você deve acionar o endpoint específico de finalização de captura.
POST /v2/orders/{id}/capture/completeAo realizar uma dessas ações, o sistema consolida as informações e gera os boletos.
Ao consultar o pedido novamente via GET /v2/orders/{id}, você notará as seguintes mudanças definitivas:
status: O campo agora retorna "captured".invoices: O array lista todas as notas fiscais validadas.
Exemplo de Resposta da API (Finalizada):
{
"id": "e9feb5aa-0000-0000-0000-000000000000",
"status": "captured",
"totalAmountCents": 10000,
"invoices": [
{
"id": "f2a1b9cc-...",
"invoiceNumber": "000000000000000000000000000000000017",
"status": "approved",
"amountCents": 5000
},
{
"id": "a1b2c3d4-...",
"invoiceNumber": "000000000000000000000000000000000018",
"status": "approved",
"amountCents": 5000
}
],
"metadata": { ... }
}Resumo para o Desenvolvedor
- Utilize a rota
GET /v2/orders/{id}para monitorar o andamento da captura ou configure webhooks para receber as atualizações. - O array "invoices" é a sua fonte da verdade para saber quais chaves de acesso já foram atreladas e aprovadas para um determinado pedido.
- Apenas pedidos no status "captured" irão gerar recebíveis/boletos para o seu cliente final.
Updated about 11 hours ago