Ciclo fiscal
Los pedidos comunican la intencion fiscal mediante dos campos:
| Campo | Valores |
|---|---|
fiscal_event | order_sync, invoice_candidate, cancel_candidate, refund_candidate |
invoice_action | none, create_invoice, cancel_or_annul, rectify_or_refund, exchange_to_full (v1.1) |
Flujos habituales
| Escenario | fiscal_event | invoice_action |
|---|---|---|
| Sincronizacion sin factura | order_sync | none |
| Pedido pagado listo para factura | invoice_candidate | create_invoice |
| Pedido cancelado | cancel_candidate | cancel_or_annul |
| Reembolso parcial o total | refund_candidate | rectify_or_refund |
| Comprador invitado aporta NIF despues | invoice_candidate | exchange_to_full (v1.1) |
Para cambios posteriores a la factura, envia contract_version: "1.3" con correction_events[]. Reembolsos y devoluciones deben incluir id estable, evidencia por linea y deltas con signo. Un cambio conocido solo por fingerprint es unknown: abre revision guiada, pero nunca se autocorrige. refunds[] legacy sigue siendo compatible.
Canje F2 a F3
Un comprador invitado recibe primero una factura simplificada (F2, "ticket"). Si despues aporta sus datos fiscales y solicita factura completa, reenvia el pedido con invoice_action: "exchange_to_full" y la identificacion fiscal completa del cliente en client:
json
{
"contract_version": "1.1",
"id_external": "order-1001",
"reference": "1001",
"fiscal_event": "invoice_candidate",
"invoice_action": "exchange_to_full",
"original_order_reference": "1001",
"client": {
"id_external": "customer-1001",
"company": "Example SL",
"vat_number": "B00000000",
"customer_type": "b2b",
"tax_id_type": "cif",
"country": "ES"
}
}original_order_referencesolo es necesario cuando el canje se envia como un pedido nuevo que referencia al original. Se omite cuando el canje se envia como actualizacion del mismo pedido.- El nucleo emite una factura completa (F3) que sustituye a la F2. La F2 no se anula ni se rectifica.
- El canje exige que la F2 este aceptada, no haya sido canjeada antes y este dentro del plazo permitido. Si no se cumple alguna condicion, el pedido queda en
needs_reviewen lugar de devolver un error. - Reenviar el mismo canje es idempotente: no genera una segunda F3.