Three invoices in, a Shipment import dossier out
FreightParse reads a supplier's invoice and packing list and writes the goods lines of the declaration. Here the same readings are written as the request Stratech Shipment and Beurtvaartadres ShipmentManager take at POST /api/Import/Importdossier, with the page and the printed text behind every value.
In
- three public invoices, two with their packing list (PDF)
- read by the cloud model, as a desk's documents are
Out
fits the field table Stratech publishes- one import dossier request per shipment
- what it leaves out, what to check, where each value came from
The check is against the field table Stratech publishes for DMS import (40-00), https://www.stratechlogistic.nl/customer-portal/knowledge-base/shipment-api/dms-invoer, fetched 2026-10-11 (SHA-256 3d3248e34b2de4ed): 129 field paths, each with its type, length and range. Every object is closed, so a field the table does not name is refused wherever it sits. Stratech's OpenAPI file is on each customer's own Shipment environment and is not public, so the requests were not checked against it, and none has been posted to a Shipment environment yet.
The documents are public exhibits in US court records, chosen because anyone can open them and because each read cleanly in our test of 10 October: every goods-line and header value right. The readings are saved ones, made by Gemini 3.8 Flash in Google's EU region, one reading each. The service reads every document twice and marks where the two readings disagree, so a desk's file carries those marks as well. No model was called to make this page.
z17: All Courtesy International Ltd
The goods items, and where each value is printed
| Item | Description | Commodity code | TARIC part | Origin | Net mass | Gross mass | Packages | Value |
|---|---|---|---|---|---|---|---|---|
| 1 | VAL BOW WITH RED HEART | 95059060p.1, printed “9505906000” verified on the page | 00p.1, printed “9505906000” verified on the page | CNp.1, printed “Country of Origin: CHINA” verified on the page | 399.1 kgp.2, printed “399.10” verified on the page | 516 kgp.2, printed “516.00” verified on the page | 307p.1, printed “307 CTNS” verified on the page | 3868.2 USDp.1, printed “3,868.200” verified on the page |
Read for the shipment: invoice total 3868.2 USD; delivery terms FOB; total gross mass 516 kg (p.2, printed “516.00”, verified on the page).
The request
{
"dossierNumber": "BIG241014-03",
"dmsImportDeclarations": [
{
"applicationReferenceId": "FP_BIG241014-03_SAMPLE1",
"doSubmitWhenValid": false,
"doNotSaveWhenInvalid": false,
"importer": {
"internalCode": "STRATECH_API"
},
"declarationData": {
"incoTerms": {
"incoTermsCode": "FOB"
},
"totalInvoiceAmount": 3868.2,
"totalInvoiceCurrency": "USD",
"totalGrossWeight": 516,
"goodsItems": [
{
"sequenceNumber": 1,
"description": "VAL BOW WITH RED HEART",
"goodsItemType": {
"hsCode": "95059060",
"taricSubHeading": "00"
},
"countryOfOrigin": "CN",
"goodsMeasure": {
"grossWeight": 516,
"netWeight": 399.1
},
"invoiceValue": 3868.2,
"packaging": [
{
"quantity": 307,
"typeCode": "CT"
}
]
}
]
}
}
]
}
To check before it is lodged
dmsImportDeclarations[0].declarationData.goodsItems[*].dispatchCountry: mandatory (DE 5/14), not read from the documents (all goods items); likely HK because the exporter's own address names it; not written: that is the declarant's call
z18: Gland Pharma Limited
The goods items, and where each value is printed
| Item | Description | Commodity code | TARIC part | Origin | Net mass | Gross mass | Packages | Value |
|---|---|---|---|---|---|---|---|---|
| 1 | BIVALIRUDIN INJECTION 250MG/50ML (5MG/ML), 50ML VIAL NDC No: 7086040351 ANDA No: 211215 FDA Code: 61 L C P -39 | 30049099p.1, printed “30049099” verified on the page | not written | INp.1, printed “Country of Origin of Goods : INDIA” verified on the page | 1254.667 kgp.1, printed “1254.667” verified on the page | 1365.652 kgp.1, printed “1365.652” verified on the page | 147p.1, printed “147” verified on the page | 370020 USDp.1, printed “370,020.00” verified on the page |
Read for the shipment: invoice total 370020 USD; delivery terms EXW; total gross mass 1365.652 kg (p.1, printed “1365.652”, verified on the page).
The request
{
"dossierNumber": "M12317000460",
"dmsImportDeclarations": [
{
"applicationReferenceId": "FP_M12317000460_SAMPLE1",
"doSubmitWhenValid": false,
"doNotSaveWhenInvalid": false,
"importer": {
"internalCode": "STRATECH_API"
},
"declarationData": {
"incoTerms": {
"incoTermsCode": "EXW"
},
"totalInvoiceAmount": 370020,
"totalInvoiceCurrency": "USD",
"totalGrossWeight": 1365.652,
"goodsItems": [
{
"sequenceNumber": 1,
"description": "BIVALIRUDIN INJECTION 250MG/50ML (5MG/ML), 50ML VIAL NDC No: 7086040351 ANDA No: 211215 FDA Code: 61 L C P -39",
"goodsItemType": {
"hsCode": "30049099"
},
"countryOfOrigin": "IN",
"goodsMeasure": {
"grossWeight": 1365.652,
"netWeight": 1254.667
},
"invoiceValue": 370020,
"packaging": [
{
"quantity": 147
}
]
}
]
}
}
]
}
To check before it is lodged
goodsItemType.taricSubHeading(goods item 1): digits 9-10 (TARIC) are not on the document: it gives 30049099, 8 digitspackaging[0].typeCode(goods item 1): read 'Shippers', which is not a two-character package code (code list CL017), so it is not writtendmsImportDeclarations[0].declarationData.goodsItems[*].dispatchCountry: mandatory (DE 5/14), not read from the documents (all goods items); likely IN because the exporter's own address names it; not written: that is the declarant's call
z19: Home Creations Inc
The goods items, and where each value is printed
| Item | Description | Commodity code | TARIC part | Origin | Net mass | Gross mass | Packages | Value |
|---|---|---|---|---|---|---|---|---|
| 1 | 24IN SQUARE STEEL SLAT FOLDING TABLE | 94032000p.1, printed “9403200050” verified on the page | 50p.1, printed “9403200050” verified on the page | CNp.1, printed “CHINA” verified on the page | 6957.5 kgp.3, printed “6,957.50” verified on the page | 7755 kgp.3, printed “7,755.00” verified on the page | 275p.1, printed “275 CTNS” verified on the page | 20350 USDp.1, printed “20,350.000” verified on the page |
| 2 | HELENA SQUARE LAMINATED DINING TABLE | 94032000p.1, printed “9403200050” verified on the page | 50p.1, printed “9403200050” verified on the page | CNp.1, printed “CHINA” verified on the page | 6381.2 kgp.3, printed “6,381.20” verified on the page | 7675.5 kgp.3, printed “7,675.50” verified on the page | 301p.1, printed “301 CTNS” verified on the page | 12642 USDp.1, printed “12,642.000” verified on the page |
| 3 | HELENA 4PK CUSHION DINING CHAIRS | 94017900p.1, printed “9401790011” verified on the page | 11p.1, printed “9401790011” verified on the page | CNp.1, printed “CHINA” verified on the page | 8668.8 kgp.3, printed “8,668.80” verified on the page | 10715.6 kgp.3, printed “10,715.60” verified on the page | 301p.1, printed “301 CTNS” verified on the page | 33110 USDp.1, printed “33,110.000” verified on the page |
Read for the shipment: invoice total 66102 USD; delivery terms FOB; total gross mass 26146.1 kg (p.3, printed “26,146.10 KGS”, verified on the page).
The request
{
"dossierNumber": "S202410230008",
"dmsImportDeclarations": [
{
"applicationReferenceId": "FP_S202410230008_SAMPLE1",
"doSubmitWhenValid": false,
"doNotSaveWhenInvalid": false,
"importer": {
"internalCode": "STRATECH_API"
},
"declarationData": {
"incoTerms": {
"incoTermsCode": "FOB"
},
"totalInvoiceAmount": 66102,
"totalInvoiceCurrency": "USD",
"totalGrossWeight": 26146.1,
"goodsItems": [
{
"sequenceNumber": 1,
"description": "24IN SQUARE STEEL SLAT FOLDING TABLE",
"goodsItemType": {
"hsCode": "94032000",
"taricSubHeading": "50"
},
"countryOfOrigin": "CN",
"goodsMeasure": {
"grossWeight": 7755,
"netWeight": 6957.5
},
"invoiceValue": 20350,
"packaging": [
{
"quantity": 275,
"typeCode": "CT"
}
]
},
{
"sequenceNumber": 2,
"description": "HELENA SQUARE LAMINATED DINING TABLE",
"goodsItemType": {
"hsCode": "94032000",
"taricSubHeading": "50"
},
"countryOfOrigin": "CN",
"goodsMeasure": {
"grossWeight": 7675.5,
"netWeight": 6381.2
},
"invoiceValue": 12642,
"packaging": [
{
"quantity": 301,
"typeCode": "CT"
}
]
},
{
"sequenceNumber": 3,
"description": "HELENA 4PK CUSHION DINING CHAIRS",
"goodsItemType": {
"hsCode": "94017900",
"taricSubHeading": "11"
},
"countryOfOrigin": "CN",
"goodsMeasure": {
"grossWeight": 10715.6,
"netWeight": 8668.8
},
"invoiceValue": 33110,
"packaging": [
{
"quantity": 301,
"typeCode": "CT"
}
]
}
]
}
}
]
}
To check before it is lodged
dmsImportDeclarations[0].declarationData.goodsItems[*].dispatchCountry: mandatory (DE 5/14), not read from the documents (all goods items); likely CN because the exporter's own address names it; not written: that is the declarant's call
What the request leaves to the declarant
Not taken from the documents, because no invoice or packing list states them: the procedure (governmentProcedure), the declaration type and symbol, the customs office, the valuation method and indicators (customsValuation, valuationAdjustment), the statistical value, the preference (taxCalculation.dutyRegimeCode), a preferential origin, the supporting documents and certificates (additionalDocuments), the additional TARIC and national codes, the supplementary units, and the previous document an import follows (previousDocuments: the temporary storage reference). These are the declarant's: Shipment's own settings and article file fill them, or the desk's fixed values where it gave them.
Commodity codes are written as the document prints them, split over the two fields the API has: goodsItemType.hsCode (positions 1-8) and taricSubHeading (9-10). An invoice from outside the EU usually prints the seller's or the buyer's own national tariff code: its first six digits are the international HS code, the rest may not be the EU's. The declarant confirms the CN/TARIC code. These three invoices were made out to US buyers, so z17 and z19 print US tariff codes and z18 an Indian one: they show where a code goes, not that the code is right in the EU.
The exporter is not written either. The API takes it as a code from the desk's Shipment address book (exporter.internalCode) or as a name with its street, city and country, and the address is not split into those fields here.
Container numbers come from a bill of lading read with the invoice. The cloud reading of an invoice does not give them, so the three containers printed on z19's invoice are not in its request; nor is the place after FOB, which the reading left out.
What goes where
Every value is one a document states, written where the table puts that data element, in the form the field takes. Anything that does not fit stays out, and the to-check file says why.
| Read from the documents | Field | Rule |
|---|---|---|
| Description of goods (DE 6/8) | description | Line breaks become spaces; up to 512 characters |
| Commodity code (DE 6/14) | goodsItemType.hsCode, taricSubHeading | 10 digits fill both (1-8, 9-10); 8 digits fill hsCode and the TARIC part is listed to check; never padded |
| Country of origin (DE 5/15) | countryOfOrigin | Two capital letters, or nothing |
| Country of dispatch (DE 5/14) | dispatchCountry on each goods item | Only when a document states it; a likely value goes to the to-check file, never into the field |
| Gross and net mass (DE 6/5, 6/1) | goodsMeasure.grossWeight, netWeight | Kilograms, at most 6 decimals (MIG n..16,6) |
| Item value (DE 4/14) | invoiceValue | The line's amount in the invoice currency, 2 decimals (MIG n..16,2) |
| Packages and their type (DE 6/10, 6/9) | packaging[0].quantity, typeCode | A whole number, and a two-character code from list CL017: a printed “CTNS” is written as CT, with the source of the count it is printed beside; a word with no code is listed to check, not written |
| Delivery terms and place (DE 4/1) | incoTerms.incoTermsCode, locationName | When every line agrees; the place up to 35 characters |
| Invoice currency (DE 4/10) | totalInvoiceCurrency | When every line agrees |
| Invoice total as printed (DE 4/11) | totalInvoiceAmount | Only with one invoice in the shipment; never a sum of the lines |
| Total gross mass as printed | totalGrossWeight | When every document that prints one prints the same |
| Containers (DE 7/2) | containers[].number, isContainerShipment | Up to 17 characters each; the flag only as true |
| B/L, air waybill or CMR number | transportDocuments[] on each goods item | N705, N740, N730 by the document it was read from |
What the sender gives
Five values are on no document. dossierNumber is the invoice number unless the desk gives its own (up to 30 characters). applicationReferenceId is unique for every request, so change it before sending a file twice. importer.internalCode is the importer as the desk's Shipment address book knows it, with its EORI and address: here STRATECH_API, the code in Stratech's own example. doSubmitWhenValid is always false: the declarant lodges the declaration, Shipment does not. doNotSaveWhenInvalid is false, so Shipment keeps the dossier while the declarant's fields are still empty. A desk can fix its own procedure (for example 4000), declaration type, office and exporter code once; they are then written as given, and the notes say so.
The same goods lines for an item import
Software that imports goods items from a spreadsheet and keeps the column mapping, as Riege Scope's C89 module does, takes the same lines as a CSV: one row per goods line, the columns named after the declaration's data elements (DE 6/8 description, 6/14 commodity code, 6/1 net mass and so on), semicolons, UTF-8. Each document's file is linked above as “goods lines as CSV”.
FreightParse is not affiliated with Stratech or Beurtvaartadres. Stratech Shipment and ShipmentManager are theirs; the field table is the one Stratech publishes. The three documents are public exhibits in US court records (CourtListener), not a FreightParse customer's documents.
A desk's documents are read in Google's EU region, not used for training; a request flagged by Google's abuse checks may be kept up to 90 days, in the EU; FreightParse keeps no copy. Questions: danil@freightparse.com.







