Skip to content
Open menu
Supplier integration guideLevel 2

Level 2 · Optional

Level 2 — print options and print pricing.

Two feeds: what can be printed, where and how large; and what that print costs at each quantity.

Level 2 is what makes decoration pricing computable, so a distributor's customer can configure a print and see a real price instead of waiting for a quotation. It unlocks TronCalculator.

Every rule has to be expressible as columns. A condition written as a sentence cannot be evaluated and is discarded rather than interpreted — §3.0 is the clause to read before you export anything.

Document
SPEC-L2-002
Revised
8 September 2026
Depends on
Level 1
§1.0

What has to be true first

Requires Level 1

Transport, formats and identifiers

  • Level 1 is activePrint options join to product models by ModelCode. An unresolved code is rejected with E-301.
  • Your print positions have a stable code eachPositionCode is immutable and is consumed by Levels 3 and 4.
  • Your techniques map to the six accepted valuesListed in §2.0. An unknown value is dropped with W-311 rather than rejected.
  • Both feeds follow the shared transport and encoding rulesREF-FMT-010 governs anything this document does not state.

Level 2 can be positions without pricing

Submit print options and no pricing layer and the calculator stays unavailable — but Levels 3 and 4 can still consume the position data. It is a legitimate way to reach logo visualisation without digitising a price list first.

§4.0

Validation rules

A PositionCode is never pricedW-320The position is accepted but not quotable. Every position needs at least one pricing row to be offered.
QtyBreak does not increaseE-204Row rejected. Breaks must strictly increase per technique and colour count.
MinQty is above the lowest QtyBreakE-205Row rejected — the lowest break would be unreachable.
An unknown TechniqueCodeW-311The value is dropped and the row accepted. The position stays available for its other techniques.
A pricing row with no matching optionE-302Row rejected. Pricing cannot exist for a technique that is not offered at any position.
Colours omitted on a colour-priced techniqueE-121Row rejected. The price curve would be ambiguous.
MaxAreaCm2 missing on a position used at Level 3W-321Level 2 is accepted; Level 3 overlay validation for that position is skipped.
§5.0

Options and pricing for one model

Level 2 · Two positions and one techniqueprint.jsonJSON
{
  "ModelCode": "POLO-CLASSIC",
  "positions": [
    { "PositionCode": "CHEST_L", "TechniqueCode": "SCREEN", "MaxAreaCm2": 100, "MaxColors": 4 },
    { "PositionCode": "BACK",    "TechniqueCode": "SCREEN", "MaxAreaCm2": 600, "MaxColors": 6 }
  ],
  "pricing": [
    { "TechniqueCode": "SCREEN", "Colors": 2, "QtyBreak": 50,  "UnitPrice": 1.80, "SetupFee": 25, "Currency": "EUR" },
    { "TechniqueCode": "SCREEN", "Colors": 2, "QtyBreak": 250, "UnitPrice": 1.20, "SetupFee": 25, "Currency": "EUR" }
  ]
}
The nesting is for readability and is not required. Flat CSV and XML equivalents carry the same fields, one row per record.

Send the source, not the export

A PDF price list can be parsed, but conditional rules written as prose are lost on the way. The spreadsheet your team maintains internally — however messy — keeps the logic, and the logic is what §3.0 needs.