Product / item specification
nutrab2b.master.product_upserted.v2 · Master data
- Purpose
- The full specification of an ingredient or finished product: identity, botanical source, specs per test, allergens, claims, storage, shelf life.
- When to send
- New item, spec revision.
- Sender → receiver
- Supplier / brand → Buyers, CDMOs, labs
- Expected responses
- ACK
- Equivalent standards
- GS1: GDSN Trade Item · X12: 832 Price/Sales Catalog · EDIFACT: PRICAT · SAP: Material master (MARA/MARC/QM spec)
- Scenarios using it
- Full order-to-cash · Undeclared allergen
Fields and mappings
| Field | Type | Req | Description | Code list / format | EDI / GS1 / SAP mapping |
|---|---|---|---|---|---|
| item_id | string | yes | Buyer's or seller's item number | x12: PO107 (BP/VP) edifact: PIA sap: MATNR | |
| gtin | string | GS1 GTIN of the traded item | ^(\d{8}|\d{12,14})$ | x12: PO107 (UK) edifact: LIN C212 (SRV) gs1: gtin | |
| ingredient | string | NutraB2B ingredient master code | ingredient | ||
| description | string | yes | Item description | x12: PID05 edifact: IMD | |
| hs_code | string | yes | HS 6-digit (or national) classificationNB-R005 NB-R017 | ^\d{4}(\.\d{2}){1,2}$|^\d{6,10}$ | x12: PO107 (HS) edifact: PIA+5 C212 (HS) |
| national_code | string | National tariff line for the destination country (8–10 digits)NB-R005 | ^\d{8,10}$ | ||
| grade | string | Grade / pharmacopoeia | grade | ||
| form | string | Product form | product_form | ||
| standardisation | object | Extract standardisation | |||
| type | string | yes | Notation | standardisation | |
| marker | string | Marker compound | |||
| min_pct | number | Minimum % | |||
| max_pct | number | Maximum % | |||
| ratio | string | Drug-extract ratio e.g. 10:1 | ^\d+(\.\d+)?(-\d+(\.\d+)?)?:1$ | ||
| method | string | Assay method | method | ||
| certifications | array<string> | Required certifications | |||
| cas | string | CAS number | ^\d{2,7}-\d{2}-\d$ | ||
| botanical | object | Botanical identity | |||
| latin_name | string | yes | Latin binomial incl. author | ||
| plant_part | string | yes | Plant part | ||
| origin_country | string | Country of origin | country | ||
| wild_crafted | boolean | Wild collected | |||
| solvent | string | Extraction solvent | |||
| specification | array<object> | Release specification, one row per test | |||
| analyte | string | yes | Analyte | analyte | |
| method | string | yes | Method | method | |
| min | number | Lower limit | |||
| max | number | Upper limit | |||
| uom | string | yes | Unit | uom | |
| text_limit | string | Text limit, e.g. 'Absent in 10 g' or 'Conforms' | |||
| allergens | array<string> | Allergens present (allergen codes)NB-R009 | |||
| claims | array<string> | Claim categories (claim codes) | |||
| daily_dose_g | number | Maximum daily dose of the finished product (g) for USP <2232>NB-R013 | |||
| shelf_life_months | integer | yes | Shelf life from manufacture | ||
| storage | string | Storage class | storage | ||
| min_shelf_life_days | integer | Minimum remaining shelf life required at delivery |
Business rules
- NB-R009 Allergen not declared, an allergen in the product master is missing from the CoA / label declaration.
Example
{
"specversion": "2.0",
"id": "evt-product-PRODUCT-1",
"type": "nutrab2b.master.product_upserted.v2",
"source": "urn:gln:4012345000009:erp",
"subject": "PRODUCT",
"time": "2026-11-02T09:00:00Z",
"datacontenttype": "application/json",
"dataschema": "https://nutrab2b.org/schemas/2.0/PRODUCT.json",
"sender": {
"gln": "4012345000009"
},
"receiver": {
"gln": "0614141000012"
},
"correlationid": "CONV-RFQ-1001",
"idempotencykey": "PRODUCT:PRODUCT:1",
"sequence": 1,
"env": "test",
"data": {
"item_id": "ASH-KSM-5",
"ingredient": "ASHWAGANDHA",
"description": "Ashwagandha root extract 5% withanolides",
"hs_code": "1302.19",
"grade": "USP_DSC",
"form": "EXTRACT_DRY",
"standardisation": {
"type": "STD_MARKER",
"marker": "withanolides",
"min_pct": 5,
"method": "HPLC"
},
"certifications": [
"ORGANIC_USDA",
"NON_GMO_PV"
],
"botanical": {
"latin_name": "Withania somnifera (L.) Dunal",
"plant_part": "root",
"origin_country": "IN",
"wild_crafted": false,
"solvent": "water"
},
"specification": [
{
"analyte": "ASSAY",
"method": "HPLC",
"min": 5,
"uom": "P1"
},
{
"analyte": "PB",
"method": "USP_2232",
"max": 0.5,
"uom": "59"
},
{
"analyte": "SALM",
"method": "USP_2022",
"uom": "C62",
"text_limit": "Absent in 10 g"
}
],
"allergens": [],
"claims": [
"STRUCTURE_FUNCTION"
],
"daily_dose_g": 0.6,
"shelf_life_months": 36,
"storage": "AMBIENT",
"min_shelf_life_days": 540
}
}Mapping checklist
- Every required field populated from your system of record
- Coded fields mapped to the Bodylia OpenB2B code lists
- GLN, GTIN and SSCC check digits validated
- Rules above pass in the validator
- Idempotency key and per-subject sequence generated
- Expected responses, including rejections, handled
