{
  "$schema": "https://docs.get-flowie.com/schemas/fr-lifecycle-status.schema.json",
  "version": "1.0.0",
  "specVersions": {
    "dgfipExternalSpecifications": "v3.2 (2026-04-30)",
    "afnorNorm": "XP Z12-012 (annexes V1.3, 2026-02-26)"
  },
  "orderingRule": "Chronology must be respected, but optional statuses may be skipped: transitionsTo describes the canonical graph, not mandatory checkpoints. A legal lifecycle can be as short as 200 → 212 (or 200 → 210 / 200 → 213). Consumers must accept out-of-order delivery and tier jumps.",
  "statuses": [
    {
      "code": 200,
      "labelFr": "Déposée",
      "labelEn": "Deposited",
      "tier": "mandatory",
      "tierFr": "Obligatoire",
      "phase": "transmission",
      "mdt77": 305,
      "emittedBy": "seller_platform",
      "terminal": false,
      "transmittedToDgfip": true,
      "reasonRequired": false,
      "untdid1373": { "code": 10, "name": "In preparation" },
      "transitionsTo": [201, 213],
      "flowie": {
        "emission": "automatic",
        "webhook": "lifecycle.updated",
        "notes": "Emitted when POST /v1/documents/send passes format, SIRET and annuaire controls. Invoice data reaches the PPF concentrator within 24 h of this timestamp."
      },
      "description": "The sending platform attests the invoice was received, controlled and is compliant — the legal birth of the e-invoice and the start of every lifecycle."
    },
    {
      "code": 201,
      "labelFr": "Émise par la plateforme",
      "labelEn": "Issued by platform",
      "tier": "free",
      "tierFr": "Libre",
      "phase": "transmission",
      "mdt77": 305,
      "emittedBy": "seller_platform",
      "terminal": false,
      "transmittedToDgfip": false,
      "reasonRequired": false,
      "untdid1373": { "code": 51, "name": "Issued" },
      "transitionsTo": [202, 213],
      "flowie": {
        "emission": "automatic",
        "webhook": "document.sent",
        "notes": "Flowie confirms transmission to the recipient's platform (PA-to-PA routing resolved via the annuaire)."
      },
      "description": "The seller's platform confirms it transmitted the invoice to the recipient's platform."
    },
    {
      "code": 202,
      "labelFr": "Reçue par la plateforme",
      "labelEn": "Received by platform",
      "tier": "free",
      "tierFr": "Libre",
      "phase": "transmission",
      "mdt77": 305,
      "emittedBy": "buyer_platform",
      "terminal": false,
      "transmittedToDgfip": false,
      "reasonRequired": false,
      "untdid1373": { "code": 43, "name": "Received" },
      "transitionsTo": [203, 213],
      "flowie": {
        "emission": "automatic",
        "webhook": "document.delivered"
      },
      "description": "The recipient's platform acknowledges receipt from the sender's platform; the invoice is not yet visible to the buyer."
    },
    {
      "code": 203,
      "labelFr": "Mise à disposition",
      "labelEn": "Made available",
      "tier": "recommended",
      "tierFr": "Recommandé",
      "phase": "transmission",
      "mdt77": 305,
      "emittedBy": "buyer_platform",
      "terminal": false,
      "transmittedToDgfip": false,
      "reasonRequired": false,
      "untdid1373": { "code": 48, "name": "Available" },
      "transitionsTo": [204],
      "flowie": {
        "emission": "automatic",
        "webhook": "document.received",
        "notes": "If you are the buyer on Flowie, this is when the invoice lands in your queue."
      },
      "description": "The invoice is available to the buyer on their platform."
    },
    {
      "code": 204,
      "labelFr": "Prise en charge",
      "labelEn": "Acknowledged",
      "tier": "recommended",
      "tierFr": "Recommandé",
      "phase": "traitement",
      "mdt77": 23,
      "emittedBy": "buyer",
      "terminal": false,
      "transmittedToDgfip": false,
      "reasonRequired": false,
      "untdid1373": { "code": 45, "name": "In process" },
      "transitionsTo": [205, 206, 207, 208, 210],
      "flowie": {
        "emission": "api_call",
        "request": {
          "method": "POST",
          "path": "/v1/documents/{document_id}/lifecycle",
          "body": { "status": "under_review" },
          "party": "buyer"
        },
        "webhook": "lifecycle.updated"
      },
      "description": "The buyer acknowledges the invoice and starts processing it."
    },
    {
      "code": 205,
      "labelFr": "Approuvée",
      "labelEn": "Approved",
      "tier": "recommended",
      "tierFr": "Recommandé",
      "phase": "traitement",
      "mdt77": 23,
      "emittedBy": "buyer",
      "terminal": false,
      "transmittedToDgfip": false,
      "reasonRequired": false,
      "untdid1373": { "code": 1, "name": "Accepted" },
      "transitionsTo": [211],
      "flowie": {
        "emission": "api_call",
        "request": {
          "method": "POST",
          "path": "/v1/documents/{document_id}/lifecycle",
          "body": { "status": "approved" },
          "party": "buyer"
        },
        "webhook": "lifecycle.updated"
      },
      "description": "The buyer accepts the invoice in full."
    },
    {
      "code": 206,
      "labelFr": "Approuvée partiellement",
      "labelEn": "Partially approved",
      "tier": "recommended",
      "tierFr": "Recommandé",
      "phase": "traitement",
      "mdt77": 23,
      "emittedBy": "buyer",
      "terminal": false,
      "transmittedToDgfip": false,
      "reasonRequired": true,
      "amountBlocks": ["MAP", "MAPTTC", "MNA", "MNATTC"],
      "untdid1373": { "code": 49, "name": "Conditionally accepted" },
      "transitionsTo": [211],
      "flowie": {
        "emission": "api_call",
        "request": {
          "method": "POST",
          "path": "/v1/documents/{document_id}/lifecycle",
          "body": { "status": "approved", "remainingAmount": 240.0, "note": "…" },
          "party": "buyer"
        },
        "webhook": "lifecycle.updated",
        "notes": "The remainingAmount is what makes Flowie transmit 206 instead of 205. Usually followed by a corrective invoice or credit note."
      },
      "description": "The buyer accepts the invoice only in part, with the approved / non-approved amount blocks."
    },
    {
      "code": 207,
      "labelFr": "En litige",
      "labelEn": "In dispute",
      "tier": "free",
      "tierFr": "Libre",
      "tierNote": "The v2.3 dossier's transmission table reads libre; some industry readings class it recommandé. Optional either way.",
      "phase": "traitement",
      "mdt77": 23,
      "emittedBy": "buyer",
      "terminal": false,
      "transmittedToDgfip": false,
      "reasonRequired": true,
      "untdid1373": { "code": 46, "name": "Litigious" },
      "transitionsTo": [205, 206, 210],
      "flowie": {
        "emission": "api_call",
        "request": {
          "method": "POST",
          "path": "/v1/documents/{document_id}/lifecycle",
          "body": { "status": "disputed", "reason": "…" },
          "party": "buyer"
        },
        "webhook": "lifecycle.updated"
      },
      "description": "The buyer contests all or part of the invoice without refusing it outright; resolves to approval or refusal."
    },
    {
      "code": 208,
      "labelFr": "Suspendue",
      "labelEn": "Suspended",
      "tier": "free",
      "tierFr": "Libre",
      "phase": "traitement",
      "mdt77": 23,
      "emittedBy": "buyer",
      "terminal": false,
      "transmittedToDgfip": false,
      "reasonRequired": true,
      "untdid1373": { "code": 39, "name": "Suspended" },
      "transitionsTo": [209],
      "flowie": {
        "emission": "api_call",
        "request": {
          "method": "POST",
          "path": "/v1/documents/{document_id}/lifecycle",
          "body": { "status": "disputed", "reasonCode": "suspended", "reason": "…" },
          "party": "buyer"
        },
        "webhook": "lifecycle.updated",
        "notes": "The reasonCode \"suspended\" is Flowie's discriminator to transmit 208 rather than 207."
      },
      "description": "Processing suspended pending supporting documents from the supplier."
    },
    {
      "code": 209,
      "labelFr": "Complétée",
      "labelEn": "Completed",
      "tier": "free",
      "tierFr": "Libre",
      "phase": "traitement",
      "mdt77": 23,
      "emittedBy": "supplier",
      "terminal": false,
      "transmittedToDgfip": false,
      "reasonRequired": false,
      "amountBlocks": ["MAJ"],
      "untdid1373": { "code": 37, "name": "Complete" },
      "transitionsTo": [204],
      "flowie": {
        "emission": "api_call",
        "request": {
          "method": "POST",
          "path": "/v1/documents/{document_id}/actions",
          "body": { "action": "link", "relatedDocumentId": "…" },
          "party": "supplier"
        },
        "webhook": "lifecycle.updated",
        "notes": "Attach the requested material (link or add-note action) on the suspended invoice; complementary data travels in the status message (MDG-43 code MAJ) — the invoice itself is not re-sent."
      },
      "description": "The supplier delivered the awaited material — lifts the suspension (208) and puts the invoice back into the buyer's processing."
    },
    {
      "code": 210,
      "labelFr": "Refusée",
      "labelEn": "Refused",
      "tier": "mandatory",
      "tierFr": "Obligatoire",
      "phase": "traitement",
      "mdt77": 23,
      "emittedBy": "buyer",
      "terminal": true,
      "terminalOutcome": "failure",
      "transmittedToDgfip": true,
      "reasonRequired": true,
      "untdid1373": { "code": 50, "name": "Rejected" },
      "transitionsTo": [],
      "flowie": {
        "emission": "api_call",
        "request": {
          "method": "POST",
          "path": "/v1/documents/{document_id}/lifecycle",
          "body": { "status": "rejected", "reasonCode": "…", "reason": "…" },
          "party": "buyer"
        },
        "webhook": "lifecycle.updated",
        "notes": "reasonCode/reason are forwarded verbatim as MDT-113/MDT-114 — use a code from the official AFNOR motif annex (« Tableau des motifs de STATUTS »)."
      },
      "description": "Deliberate business refusal of a valid, well-formed invoice. Cancels the invoice for VAT purposes; the supplier must issue a corrective invoice (and a credit note if the original was already accepted)."
    },
    {
      "code": 211,
      "labelFr": "Paiement transmis",
      "labelEn": "Payment sent",
      "tier": "recommended",
      "tierFr": "Recommandé",
      "phase": "traitement",
      "mdt77": 23,
      "emittedBy": "buyer",
      "terminal": false,
      "transmittedToDgfip": false,
      "reasonRequired": false,
      "amountBlocks": ["MPA", "RAP"],
      "untdid1373": { "code": 47, "name": "Paid" },
      "transitionsTo": [212],
      "flowie": {
        "emission": "api_call",
        "request": {
          "method": "POST",
          "path": "/v1/documents/{document_id}/lifecycle",
          "body": { "status": "paid", "paymentDate": "…", "paymentReference": "…" },
          "party": "buyer"
        },
        "webhook": "lifecycle.updated",
        "notes": "Same call as 212 — the buyer party role is what makes Flowie transmit 211."
      },
      "description": "The buyer states the payment was issued. The supplier-side mirror — funds actually received — is 212."
    },
    {
      "code": 212,
      "labelFr": "Encaissée",
      "labelEn": "Collected",
      "tier": "mandatory",
      "tierFr": "Obligatoire",
      "phase": "traitement",
      "mdt77": 23,
      "emittedBy": "supplier",
      "terminal": true,
      "terminalOutcome": "success",
      "transmittedToDgfip": true,
      "reasonRequired": false,
      "amountBlocks": ["MEN"],
      "untdid1373": { "code": 47, "name": "Paid" },
      "transitionsTo": [],
      "flowie": {
        "emission": "api_call",
        "request": {
          "method": "POST",
          "path": "/v1/documents/{document_id}/lifecycle",
          "body": { "status": "paid", "paymentDate": "…", "paymentAmount": 0, "paymentCurrency": "EUR" },
          "party": "supplier"
        },
        "webhook": "lifecycle.updated",
        "notes": "Use status partially_paid + remainingAmount for partial collections (repeatable). Must carry the collected amount (MDT-207 = MEN, rule BR-FR-CDV-14) — this is the e-reporting payment-data vehicle behind the VAT-on-collection (CA3) pre-fill for services."
      },
      "description": "The supplier confirms funds received (partial or full). The mandatory status that feeds the DGFiP's VAT pre-fill."
    },
    {
      "code": 213,
      "labelFr": "Rejetée",
      "labelEn": "Rejected",
      "tier": "mandatory",
      "tierFr": "Obligatoire",
      "phase": "transmission",
      "mdt77": 305,
      "emittedBy": "any_platform",
      "terminal": true,
      "terminalOutcome": "failure",
      "transmittedToDgfip": true,
      "reasonRequired": true,
      "untdid1373": { "code": 8, "name": "Rejected (technical)" },
      "transitionsTo": [],
      "flowie": {
        "emission": "automatic",
        "webhook": "document.failed",
        "notes": "The norm distinguishes « rejetée à l'émission » (caught by Flowie before transmission) and « rejetée en réception » (caught by the buyer's PA). Motif passed through verbatim (MDT-113/114). Fix the payload and send a new invoice — never mutate the rejected one."
      },
      "description": "Technical rejection by a platform control (format, SIRET, duplicate number, antivirus, size…). The invoice never validly entered the network."
    }
  ]
}
