How to generate CN22 & CN23 customs declarations


When we sell to individuals outside EU, we need to join a custom declaration (both paper and electronic), with a different report depending on total amount.

  1. Is there a standard way in Tryton to handle such reports for each shipment?
  2. Should this be added to account_fr?

Usually the carrier takes care of it. But current module does not handle the extra information that is needed by their API. Mainly because we are missing some standard field like the description for the customs.
But it will be good to add the support.

Well this is specific for La Poste so it does not really belong to the general module.
But I guess a module could be create to fill the PDF form. Indeed I think we could implement the feature in a generic way where user could define as report a PDF form and the expression to use to fill each field. It should take care of being able to slice and repeat based on the length of a field (like a One2Many) because usually list in PDF form has a fixed length so the document must be repeated.

I’m pretty sure it’s a generic form prescribed for all EU B2C. Any shipping service needs the CN23 form: see for instance the sendcloud recommandation. Only the API for online declaration is specific by shipping service.

I doubt it is generic with “La Poste” logo.

I doubt that carriers will accept the CN22/23 with the layout of other services.

Sry to contradict, but CN22/23 is a regular requirement for all B2C in EU + UK:
UK: Digital CN22 and CN23 customs forms | Post Office
FR: Envoyer un colis à un particulier
IT: Spedire all'estero: documentazione doganale - Poste Italiane - Professionisti e piccole imprese

I see no mandatory online form. Neither an EU API to fill out the form. So the form should be generated as pdf or paper only.

As it’s a standard, there should be a report available for all client shipments

  • if company is in EU + UK
  • and client is outside EU
    Correcting what I wrote above, it’s necessary for all clients, individuals or VAT identified companies.

I propose to build it as other reports, with a .fodt file. Should it be added to account_eu? or to one of the shipment_* modules?
Where should the thresholds be coded? When total amount > threshold1 or total weight > threshold2 a CN23 should be filled instead of CN22, and these thresholds seems to vary in time and by country/currency. Should it be a configuration value, or in company record, or hardcoded in the module?

I never said that. I said that the model of “La Poste” is not the standard.

But for me you must provide the specific format that the carrier provides.

I doubt a generic report will be accepted by the carriers.

I guess the best is to have it configured on the carrier like the form template. But it should be to compute a default proposal that user can choose to change.

With a little more search, I found the origin of the CN 22/23 norm: it’s the Universal Postal Union.
Customs :
Definition of CN 22/23 : from page 31 of

The description of the label (items, size, color) is exhaustive. About the amount thresold, precisions are in note 11:

300 SDR.
The SDR (“special drawing right”) is a monetary unit used between Posts. SDRs are denoted with the ISO 4217 currency code XDR. The UPU publishes SDR/national currency conversion factors periodically by circular. The website can also be used to unofficially determine the SDR equivalent of national currencies.

Defined by UPU, these Customs declarations apply to 192 countries. Seems only China clients are not concerned. Many kinds of carriers and shipping services rely on UPU custom service.

Should a report to generate CN22 and CN23 for a shipment be placed into stock_package_shipping?
Should I post a draft in Ideas on this forum?

This still does not answer if carrier would accept a generic form instead of their PDF form.

I just talked to a Commercial representative of La Poste (FR): there is no pb to print ourselves the CN22, as soon as all fields and informations are present and the UPU standard (format) is respected. He added that their own online tool for Colissimo doesn’t produce the same layout as the printed paper labels CN22 they distribute through post offices.

Ok so we could have a generic report on the package. I guess it should go in the module stock_package_shipping as it should not add new dependencies.