Creating and validating a CDAR lifecycle file
France onlyA CDAR (Cross Domain Acknowledgement and Response), also referred to as CDV (Document d'Acheminement et de Validation) in French e-invoicing specifications, is a standardized UN/CEFACT XML message used to report invoice lifecycle status transitions such as approval, dispute, suspension, refusal, payment, or cash receipt.
Status codes and phase mappings
Lifecycle statuses fall into two phases, defined by AcknowledgementDocument/TypeCode (MDT-77):
| Phase | MDT-77 | Purpose |
|---|---|---|
| Processing | 23 | Business lifecycle transitions managed by buyers and sellers. |
| Transmission | 305 | Technical transport and routing updates. Status codes include 10 (Submitted), 51 (Issued), 43 (Received), 8 (Rejected), and 48 (Made Available). |
| Lifecycle Status Code MDT-105 | Action / Status Description | Applicable To | MDT-40 Role | MDT-77 | Status Code MDT-88 | Reason Code Required? MDT-113 | Obligated PPF Status? |
|---|---|---|---|---|---|---|---|
200* | Submitted / Deposited (Déposée) | Sales | WK | 305 | 10 | Optional (NON_TRANSMISE) | Yes |
201* | Taken over (Prise en charge) | Purchase | BY | 23 | 5 | No | No (PDP exchange) |
202* | Received (Reçue par plateforme) | Purchase | WK | 305 | 43 | No | No (PDP exchange) |
203* | Made available (Mise à disposition) | Purchase | WK | 305 | 48 | No | No (PDP exchange) |
204* | Taken over (Prise en charge) | Purchase | BY | 23 | 45 | No | No (PDP exchange) |
205 | Approve invoice (Approuvée) | Purchase | BY | 23 | 1 (Accepted) | No | No (PDP exchange) |
206** | Partially approve (Approuvée partiellement) | Purchase | BY | 23 | 49 | Yes | No (PDP exchange) |
207 | Dispute invoice (Litige) | Purchase | BY | 23 | 46 (Under Query) | Yes | No (PDP exchange) |
208 | Suspend invoice (Suspendue) | Purchase | BY | 23 | 39 (On Hold) | Yes | No (PDP exchange) |
209 | Completed (Complétée) | Sales | SE | 23 | 37 | No | No (PDP exchange) |
210 | Refuse invoice (Refusée) | Purchase | BY | 23 | 50 (Refused) | Yes | Yes |
211 | Payment sent (Paiement émis) | Purchase | BY | 23 | 47 (Paid) | No | No (PDP exchange) |
212 | Payment cashed / received (Encaissée) | Sales | SE | 23 | 47 (Paid) | No | Yes (Requires amount details) |
213* | Business rejection (Rejetée métier) | Platform | WK | 305 | 8 | Yes | Yes |
220** | Cancelled (Annulée) | Sales | SE | 23 | — | No | No (PDP exchange) |
221** | Routing error (Erreur de routage) | Sales / Purchase | SE / BY | 305 | 8 | Yes | No (PDP exchange) |
501** | Inadmissible (Irrecevable) | System | WK | 305 | 8 | Yes | No (PDP exchange) |
* Unsupported by Banqup manual flow (handled automatically via platform transmission).
** Planned for future releases.
Structural field rules
Every CDAR XML document is wrapped in the root tag rsm:CrossDomainAcknowledgementAndResponse using standard UN/CEFACT D22B namespaces:
Context Block
rsm:ExchangedDocumentContext / MDB-1
ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID(MDT-2): Specifies the invoicing scope. Must be one ofREGULATED,NON_REGULATED,B2C,B2CINT,B2BINT, orOUTOFSCOPE(BR-FR-CDV-CL-01). This node is omitted when sending directly to the PPF.ram:GuidelineSpecifiedDocumentContextParameter/ram:ID(MDT-3): Mandatory (BR-FR-CDV-01). Set tourn.cpro.gouv.fr:1p0:CDV:invoicefor standard lifecycle messages between counterparties, orurn.cpro.gouv.fr:1p0:CDV:einvoicingF2for flows transmitted to the PPF (BR-FR-CDV-02).
Message Header
rsm:ExchangedDocument / MDB-2
ram:ID(MDT-4): Mandatory unique identifier for the status message. A standard convention is{InvoiceNumber}_{StatusCode}_{Timestamp}#{InvoiceTypeCode}_{InvoiceDate}.ram:Name(MDT-5): Descriptive name of the file or action (e.g.,UC1_F202500003_05-CDV-205_Approuvee).ram:IssueDateTime/udt:DateTimeString[@format="204"](MDG-4 / MDT-8): Mandatory timestamp of status file generation formatted asYYYYMMDDHHMMSS.ram:SenderTradeParty(MDG-9): Mandatory entity routing the message (BR-FR-CDV-05). Requiresram:RoleCode(MDT-21), set toWKfor platforms.ram:IssuerTradeParty(MDG-16): Entity responsible for generating the status. For processing phases (TypeCode = 23), provideram:GlobalID(schemeID="0002"with SIREN),ram:Name, andram:RoleCode(e.g.,BY).ram:RecipientTradeParty(MDG-23): Target recipient party. Ifram:RoleCode(MDT-59) is notWKorDFH, the electronic addressram:URIUniversalCommunication/ram:URIID(MDT-73) is mandatory (BR-FR-CDV-08).
Acknowledgement Document
rsm:AcknowledgementDocument / MDB-03
ram:MultipleReferencesIndicator/udt:Indicator(MDT-74): Alwaysfalsefor standard single-invoice lifecycle updates.ram:TypeCode(MDT-77): Mandatory indicator set to23(Traitement) or305(Transmission) (BR-FR-CDV-09).ram:IssueDateTime/udt:DateTimeString[@format="204"](MDG-31 / MDT-78): Timestamp at which the underlying event occurred.
Target Invoice Reference
ram:ReferenceReferencedDocument / MDG-32
ram:IssuerAssignedID(MDT-87): Mandatory invoice number matching BT-1 of the referenced invoice. In the case of an irreceivable file (status 501), this contains the submitted filename (BR-FR-CDV-10).ram:StatusCode(MDT-88): UNTDID 1373 standard code aligned withProcessConditionCode(BR-FR-CDV-CL-05).ram:TypeCode(MDT-91): Invoice document type matching BT-3 (e.g.,380for standard commercial invoice,381for credit note) (BR-FR-04).ram:ReceiptDateTime/udt:DateTimeString[@format="204"](MDG-34 / MDT-95): Timestamp when the invoice was received or registered.ram:FormattedIssueDateTime/qdt:DateTimeString[@format="102"](MDG-35 / MDT-100): Issue date of the referenced invoice (BT-2) inYYYYMMDDformat (BR-FR-CDV-11).ram:ProcessConditionCode(MDT-105) &ram:ProcessCondition(MDT-106): Mandatory French reform status code (200–213) and textual description (BR-FR-CDV-12,BR-FR-CDV-CL-06).ram:IssuerTradeParty/ram:GlobalID[@schemeID="0002"](MDG-40 / MDT-129): Must always identify the legal SIREN of the Seller (BT-30 of the invoice) to guarantee unique identification alongside the invoice ID and issue date (BR-FR-CDV-13,BR-FR-CDV-CL-07).
Status Details and Characteristics
MDG-37 & MDG-43
ram:SpecifiedDocumentStatus(MDG-37): Used when communicating reasons, dispute notes, or financial metadata. Requires an incremental sequence number inram:SequenceNumeric(MDT-124-2) (BR-FR-CDV-16).ram:ReasonCode(MDT-113): Mandatory for statuses213(Rejetée),210(Refusée),207(Litige),206(Approuvée Partiellement),208(Suspendue), and501(Irrecevable) (BR-FR-CDV-15).ram:SpecifiedDocumentCharacteristic(MDG-43): Required for quantitative adjustments or payment reporting.- For status
212(Encaissée), at least one block withTypeCode=MENis required, specifyingValueAmount(MDT-215) and the VAT percentageValuePercent(MDT-224) (BR-FR-CDV-14). - For payment transmitted (
211),TypeCode=MPAcarries the paid amount and date. - For approvals specifying approved values,
MAP(Approved HT) orMAPTTC(Approved TTC) can be supplied (BR-FR-CDV-CL-11).
- For status
Standard reason codes and action codes
Inadmissible Status
MDT-105 = 501 / Irrecevable
Technical structural faults detected prior to semantic parsing.
Reason Code (MDT-113) | Official Label | Description |
|---|---|---|
IRR_VIDE_F | Empty flux file control | Flux container or payload file contains 0 bytes. |
IRR_TYPE_F | File type and extension control | File extension or MIME type not permitted by the technical gateway. |
IRR_SYNTAX | Syntax control of flux files | XML document is malformed or violates base XSD schemas. |
IRR_TAILLE_PJ | Attachment size control | An attached document exceeds the maximum permitted individual file size. |
IRR_NOM_PJ | Attachment name control | Attachment filename contains forbidden special characters or illegal syntax. |
IRR_VID_PJ | Empty attachment control | An embedded attachment file contains 0 bytes. |
IRR_EXT_DOC | Attachment extension control | Attachment file extension is unauthorized (only approved PDF/image formats allowed). |
IRR_TAILLE_F | Maximum flux size control | Global flux payload exceeds maximum allowable data volume. |
IRR_ANTIVIRUS | Anti-virus control | Security alert: payload failed automated anti-malware/virus screening. |
Rejected Status
MDT-105 = 213 / UNTDID 1373 = 8 / Rejetée
Automated transmission rejections issued during phase 305 by either the sender platform (PA-E) or recipient platform (PA-D).
Reason Code (MDT-113) | Official Label | PA-E | PA-D | Description |
|---|---|---|---|---|
MONTANTTOTAL_ERR | Total Amount Erroneous | X | X | Total monetary amounts fail verification (e.g., Net Payable mismatch). |
CALCUL_ERR | Invoice Calculation Error | X | X | Arithmetic computation fault detected in lines or header summary. |
DOUBLON | Duplicate Invoice | X | X | Identical invoice number, supplier SIREN, and invoice year already exists. |
DEST_INC | Unknown Recipient | X | — | Recipient legal entity not found in the national central directory. |
ADR_ERR | Electronic Invoicing Address Error | X | X | Routing address of recipient (BT-49) or seller (BT-34) missing or invalid. |
REJ_SEMAN | Semantic Error Rejection | X | X | Non-compliance with EN16931 semantic model or national schematron rules. |
REJ_UNI | Uniqueness Control Rejection | X | X | Document violates national invoice uniqueness constraints. |
REJ_COH | Data Consistency Rejection | X | X | Contradictory business data across tags or code lists. |
REJ_ADR | Addressing Control Rejection | X | X | Routing information conflicts with directory configuration rules. |
REJ_CONT_B2G | B2G Business Control Rejection | X | X | Mandatory public procurement fields failed validation (e.g., legal commitment ID). |
REJ_REF_PJ | Attachment Reference Rejection | X | X | Required attachment reference identifier is missing or malformed. |
REJ_ASS_PJ | Attachment Association Rejection | X | X | Logical linking error between the invoice payload and accompanying attachments. |
Refused Status
MDT-105 = 210 / UNTDID 1373 = 50 / Refusée
Business refusals issued during phase 23 by the Buyer (BY). Results in the definitive commercial voiding of the invoice, requiring a credit note.
Reason Code (MDT-113) | Official Label | Description / Application Rule |
|---|---|---|
TX_TVA_ERR | Erroneous VAT Rate | Tax percentage applied does not match legal or contractual obligations. |
MONTANTTOTAL_ERR | Total Amount Erroneous | Discrepancy in the gross or net totals calculated on the invoice. |
CALCUL_ERR | Invoice Calculation Error | Arithmetic rounding or summation error across item lines. |
NON_CONFORME | Missing Legal Mention | Mandatory fiscal statement omitted (e.g., intra-community VAT, legal form). |
DOUBLON | Duplicate Invoice | Service/goods billed have already been invoiced and registered previously. |
DEST_ERR | Recipient Identity Error | Invoiced SIREN is legally incorrect (e.g., billed to the wrong affiliate in a corporate group). |
TRANSAC_INC | Unknown Transaction | Invoice does not correspond to any delivered goods or executed services. |
EMMET_INC | Unknown Issuer | Supplier is unrecognized or unauthorized in the buyer's ERP (anti-spam). |
CONTRAT_TERM | Contract Terminated | Underlying contract is closed or expired; no further billing allowed. |
DOUBLE_FACT | Double Invoicing | Specific line items or delivery notes are billed concurrently across multiple invoices. |
CMD_ERR | Purchase Order Number Error | PO number missing/incorrect. Allowed with Refused only if the PO was provided to the seller prior to invoicing. |
ADR_ERR | Electronic Invoicing Address Error | Buyer electronic addressing endpoints are invalid. |
REF_CT_ABSENT | Required Contract Reference Missing | Contractual reference mandatory for processing is absent (BT-12 contract, BT-16 dispatch, BT-11 project). |
In Dispute (207), Suspended (208), and Partially Approved (206)
Actionable processing statuses that allow resolution, payment suspension, or data corrections without outright cancellation.
Reason Code (MDT-113) | Official Label | Dispute (207) | Part. Appr (206) | Suspended (208) | Description |
|---|---|---|---|---|---|
AUTRE | Other Reason | X | X | — | Unclassified motive; requires detailed explanation in CDV Note (MDG-39). |
JUSTIF_ABS | Missing Justification / Document | — | — | X | Mandatory attachment absent. Resolved by seller via status 209 (Complétée). |
COORD_BANC_ERR | Bank Coordinates Error | X | — | X | Bank coordinates (IBAN) on invoice conflict with buyer master vendor records. |
CMD_ERR | Purchase Order Number Error | X | X | X | Purchase order number mismatch or exhausted order allowance. |
SIRET_ERR | Erroneous or Missing SIRET | X | X | X | Buyer establishment SIRET missing or invalid. |
CODE_ROUTAGE_ERR | Erroneous or Missing Routing Code | X | X | X | Routing code (Code Service) missing or invalid. |
REF_CT_ABSENT | Contract Reference Missing | X | X | X | Required secondary business reference missing. |
REF_ERR | Incorrect Reference | X | X | X | Secondary reference present but syntactically or contextually invalid. |
PU_ERR | Unit Price Incorrect | X | X | — | Billed item unit price contradicts agreed catalog or contract rates. |
REM_ERR | Erroneous Discount / Allowance | X | X | — | Expected commercial allowance or prompt-payment discount omitted. |
QTE_ERR | Invoiced Quantity Incorrect | X | X | — | Quantity billed exceeds quantities received or signed off. |
ART_ERR | Invoiced Item Incorrect | X | X | — | Wrong product code or specification invoiced. |
MODPAI_ERR | Payment Terms Incorrect | X | X | — | Payment due date or settlement method conflicts with agreement. |
QUALITE_ERR | Delivered Item Quality Defect | X | X | — | Non-conforming or defective items delivered. |
LIVR_INCOMP | Delivery Problem | X | X | — | Delivery incomplete, damaged, or pending completion report. |
Transmission Specific Reason Codes
NON_TRANSMISE(Associated withDÉPOSÉE/200): Used strictly when an invoice has been successfully ingested by the supplier's platform, but cannot be routed forward because the buyer—though present in the national directory—has not configured an active receiving platform (defaulting to technical hold code9998).ROUTAGE_ERR(Associated with Routing Faults): Triggered when routing metadata becomes stale during transit (e.g., directory synchronization latency). Once directory routing is corrected, the invoice can be retransmitted without altering document payload data.
Complete XML example
This example is for Approved status 205 exchanged between partner platforms (PDPs). Status 205 is an optional status exchanged between PDPs and is not submitted directly to the PPF. For PDP-to-PDP exchanges, ram:ID in GuidelineSpecifiedDocumentContextParameter is set to urn.cpro.gouv.fr:1p0:CDV:invoice.
View complete CDAR XML example
The following XML file illustrates an approval status message (Approuvée - code 205) issued by the Buyer (200000008) to the Seller (100000009) for commercial invoice F202500003. It executes under the Traitement phase (TypeCode = 23), with the standard status code 1 (Accepted):
<?xml version="1.0" encoding="UTF-8"?>
<rsm:CrossDomainAcknowledgementAndResponse
xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossDomainAcknowledgementAndResponse:100"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- MDB-1: Context Profile -->
<rsm:ExchangedDocumentContext>
<ram:BusinessProcessSpecifiedDocumentContextParameter>
<ram:ID>REGULATED</ram:ID> <!-- MDT-2: Scope (French reform B2B) -->
</ram:BusinessProcessSpecifiedDocumentContextParameter>
<ram:GuidelineSpecifiedDocumentContextParameter>
<ram:ID>urn.cpro.gouv.fr:1p0:CDV:invoice</ram:ID> <!-- MDT-3: CDV Standard profile -->
</ram:GuidelineSpecifiedDocumentContextParameter>
</rsm:ExchangedDocumentContext>
<!-- MDB-2: Lifecycle Message Header -->
<rsm:ExchangedDocument>
<ram:ID>F202500003_205_20250701161000#380_20250701</ram:ID> <!-- MDT-4: Unique message ID -->
<ram:Name>UC1_F202500003_05-CDV-205_Approuvee</ram:Name> <!-- MDT-5: Status action name -->
<ram:IssueDateTime>
<udt:DateTimeString format="204">20250702100500</udt:DateTimeString> <!-- MDT-8: Generation timestamp -->
</ram:IssueDateTime>
<ram:SenderTradeParty>
<ram:RoleCode>WK</ram:RoleCode> <!-- MDT-21: Transmitted via dematerialization platform -->
</ram:SenderTradeParty>
<ram:IssuerTradeParty>
<ram:GlobalID schemeID="0002">200000008</ram:GlobalID> <!-- MDT-38: SIREN of the Buyer approving the invoice -->
<ram:Name>ACHETEUR</ram:Name> <!-- MDT-39: Buyer legal name -->
<ram:RoleCode>BY</ram:RoleCode> <!-- MDT-40: Role Buyer -->
</ram:IssuerTradeParty>
<ram:RecipientTradeParty>
<ram:GlobalID schemeID="0002">100000009</ram:GlobalID> <!-- MDT-57: SIREN of the Seller -->
<ram:Name>VENDEUR</ram:Name> <!-- MDT-58: Seller legal name -->
<ram:RoleCode>SE</ram:RoleCode> <!-- MDT-59: Role Seller -->
<ram:URIUniversalCommunication>
<ram:URIID schemeID="0225">100000009_STATUTS</ram:URIID> <!-- MDT-73: Platform electronic routing address -->
</ram:URIUniversalCommunication>
</ram:RecipientTradeParty>
</rsm:ExchangedDocument>
<!-- MDB-03: Acknowledgement Content -->
<rsm:AcknowledgementDocument>
<ram:MultipleReferencesIndicator>
<udt:Indicator>false</udt:Indicator> <!-- MDT-74: Single document reference -->
</ram:MultipleReferencesIndicator>
<ram:TypeCode>23</ram:TypeCode> <!-- MDT-77: Phase Traitement -->
<ram:IssueDateTime>
<udt:DateTimeString format="204">20250702100000</udt:DateTimeString> <!-- MDT-78: Approval event timestamp -->
</ram:IssueDateTime>
<ram:ReferenceReferencedDocument>
<ram:IssuerAssignedID>F202500003</ram:IssuerAssignedID> <!-- MDT-87: Target Invoice ID (BT-1) -->
<ram:StatusCode>1</ram:StatusCode> <!-- MDT-88: UNTDID 1373 code for 'Accepted' / Approuvée -->
<ram:TypeCode>380</ram:TypeCode> <!-- MDT-91: Commercial invoice (BT-3) -->
<ram:ReceiptDateTime>
<udt:DateTimeString format="204">20250701161000</udt:DateTimeString> <!-- MDT-95: Timestamp invoice was received -->
</ram:ReceiptDateTime>
<ram:FormattedIssueDateTime>
<qdt:DateTimeString format="102">20250701</qdt:DateTimeString> <!-- MDT-100: Invoice Issue Date (BT-2) -->
</ram:FormattedIssueDateTime>
<ram:ProcessConditionCode>205</ram:ProcessConditionCode> <!-- MDT-105: Reform lifecycle code 'Approuvée' -->
<ram:ProcessCondition>Approuvée</ram:ProcessCondition> <!-- MDT-106: Status label -->
<ram:IssuerTradeParty>
<ram:GlobalID schemeID="0002">100000009</ram:GlobalID> <!-- MDT-129: SIREN of the SELLER (BT-30) -->
</ram:IssuerTradeParty>
</ram:ReferenceReferencedDocument>
</rsm:AcknowledgementDocument>
</rsm:CrossDomainAcknowledgementAndResponse>
Pre-submission checklist
Ensure the following validation assertions pass prior to emitting a CDAR message:
- Context Parameter Check (
BR-FR-CDV-01&02):GuidelineSpecifiedDocumentContextParameter/IDmust be exactlyurn.cpro.gouv.fr:1p0:CDV:invoice(inter-platform/business) orurn.cpro.gouv.fr:1p0:CDV:einvoicingF2(direct to PPF). - Invoice Reference Integrity (
BR-FR-CDV-10,11,13): The triplet composed ofIssuerAssignedID(MDT-87),FormattedIssueDateTime(MDG-35), and the Seller SIREN inIssuerTradeParty/GlobalID(MDT-129) must exactly mirror the target invoice data. - Role Alignment (
BR-FR-CDV-CL-02&03): WhenMDT-77is305,SenderTradeParty/RoleCodeandIssuerTradeParty/RoleCodemust both beWK. WhenMDT-77is23,IssuerTradeParty/RoleCodemust reflect the acting trade entity (e.g.,BY). - Addressing Requirements (
BR-FR-CDV-07&08): WhenMDT-77 = 23,IssuerTradeParty/GlobalID(MDT-38) is mandatory. If the recipient role is notWKorDFH,RecipientTradeParty/URIUniversalCommunication/URIID(MDT-73) is mandatory. - Status Code Harmonization (
BR-FR-CDV-CL-05&06): Verify that the standard status code matches the reform lifecycle code:- Full Approval (Approuvée):
StatusCode = 1,ProcessConditionCode = 205. - Partial Approval (Approuvée Partiellement):
StatusCode = 49,ProcessConditionCode = 206. - Refusal (Refusée):
StatusCode = 50,ProcessConditionCode = 210. - Payment Transmitted (Paiement transmis):
StatusCode = 47,ProcessConditionCode = 211. - Collected (Encaissée):
StatusCode = 47,ProcessConditionCode = 212.
- Full Approval (Approuvée):