Nitech MCP
This MCP server allows AI assistants to search the Nitech catalog for heating and sanitary parts, calculate quotes, create orders, and manage payments. It supports product discovery, cart management, and order tracking using private access tokens for secure operations.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.nitech.fr/mcpWhat you can do with it
- Search for a product reference, price, and availability
- Create a shopping cart and calculate shipping costs
- Prepare payment via card, transfer, or check
- Retrieve order status and payment results
Source and maintenance
Protocol and capabilities
- Server
- nitech 0.1.0
- MCP protocol
- 2025-06-18
- Tools
- 11 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
11 advertised
get_product
Lire le produit public Nitech courant par PID, y compris les produits hors vente historiquement publics. Textes, caractéristiques, appareils, éclatés, repères et documents conservent leur provenance ; une relation historique ou un contenu observé ne vaut pas qualification humaine.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1,
"description": "PID interne du catalogue actif. PID1843 est le pilote qualifié ; les autres projections restent provisoires en recette."
}
},
"additionalProperties": false
}{
"type": "object",
"$defs": {
"canonical": {
"type": "object",
"$defs": {
"alias": {
"type": "object",
"required": [
"value",
"kind",
"evidence"
],
"properties": {
"kind": {
"enum": [
"commercial_name",
"spelling_variant"
]
},
"value": {
"type": "string",
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"https": {
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
"image": {
"type": "object",
"required": [
"url",
"role",
"mediaType",
"evidence"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
"role": {
"enum": [
"primary",
"secondary"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"mediaType": {
"anyOf": [
{
"enum": [
"image/jpeg",
"image/png",
"image/webp",
"image/avif"
]
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"issue": {
"type": "object",
"required": [
"code",
"path",
"severity",
"message",
"sourceRefs"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"path": {
"type": "string",
"pattern": "^/"
},
"message": {
"type": "string",
"minLength": 1
},
"severity": {
"enum": [
"info",
"review_required",
"publication_blocker"
]
},
"sourceRefs": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 0,
"uniqueItems": true
}
},
"additionalProperties": false
},
"price": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"taxRate": {
"type": "null"
},
"amountHt": {
"type": "null"
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
},
"amountTtc": {
"type": "null"
},
"validUntil": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "observed"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"enum": [
"observed",
"validated"
]
}
}
},
"amountTtc": {
"type": "string",
"pattern": "^(?:0|[1-9][0-9]*)\\.[0-9]{2}$"
}
}
}
},
{
"if": {
"properties": {
"validUntil": {
"type": "string"
}
}
},
"else": {
"properties": {
"validityEvidence": {
"type": "null"
}
}
},
"then": {
"properties": {
"validityEvidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
}
}
}
],
"required": [
"status",
"amountTtc",
"amountHt",
"currency",
"taxRate",
"validUntil",
"evidence",
"validityEvidence"
],
"properties": {
"status": {
"enum": [
"observed",
"unknown"
]
},
"taxRate": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:0|[1-9][0-9]{0,2})(?:\\.[0-9]{1,2})?$"
},
{
"type": "null"
}
]
},
"amountHt": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:0|[1-9][0-9]*)\\.[0-9]{2}$"
},
{
"type": "null"
}
]
},
"currency": {
"const": "EUR"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"amountTtc": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:0|[1-9][0-9]*)\\.[0-9]{2}$"
},
{
"type": "null"
}
]
},
"validUntil": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
]
},
"validityEvidence": {
"anyOf": [
{
"$ref": "#/$defs/canonical/$defs/evidence"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"stock": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"managed": {
"enum": [
false,
null
]
}
}
},
"then": {
"properties": {
"quantity": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"const": "public"
}
}
},
"then": {
"properties": {
"quantity": {
"type": "null"
},
"rawQuantity": {
"type": "null"
}
}
}
}
],
"required": [
"managed",
"quantity",
"rawQuantity",
"visibility",
"evidence"
],
"properties": {
"counted": {
"type": "boolean"
},
"managed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"quantity": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"visibility": {
"enum": [
"internal",
"public"
]
},
"rawQuantity": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"source": {
"type": "object",
"allOf": [
{
"anyOf": [
{
"properties": {
"url": {
"$ref": "#/$defs/canonical/$defs/https"
}
}
},
{
"properties": {
"artifactPath": {
"type": "string"
}
}
},
{
"properties": {
"kind": {
"const": "catalogue_read"
}
}
},
{
"properties": {
"kind": {
"const": "human_review"
}
}
}
]
},
{
"if": {
"properties": {
"visibility": {
"const": "public"
}
}
},
"then": {
"allOf": [
{
"if": {
"properties": {
"kind": {
"enum": [
"catalogue_read",
"human_review"
]
}
}
},
"else": {
"properties": {
"url": {
"$ref": "#/$defs/canonical/$defs/https"
}
}
},
"then": {
"type": "object"
}
}
],
"properties": {
"artifactPath": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "catalogue_read"
}
}
},
"then": {
"properties": {
"observedAt": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
}
],
"required": [
"id",
"kind",
"url",
"artifactPath",
"locator",
"observedOn",
"observedAt",
"visibility",
"sha256"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"url": {
"anyOf": [
{
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
{
"type": "null"
}
]
},
"kind": {
"enum": [
"backoffice",
"public_page",
"manufacturer_document",
"audit_record",
"historical_capture",
"catalogue_read",
"human_review"
]
},
"sha256": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-fA-F0-9]{64}$"
},
{
"type": "null"
}
]
},
"locator": {
"type": "string",
"minLength": 1
},
"observedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"observedOn": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"visibility": {
"enum": [
"public",
"internal"
]
},
"artifactPath": {
"anyOf": [
{
"type": "string",
"pattern": "^(?!/)(?!.*\\.\\.)(?!.*\\\\)[A-Za-z0-9_./-]+$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"target": {
"type": "object",
"anyOf": [
{
"properties": {
"productId": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
}
}
},
{
"properties": {
"reference": {
"type": "string",
"minLength": 1
}
}
}
],
"required": [
"productId",
"reference",
"label"
],
"properties": {
"label": {
"type": "string",
"minLength": 1
},
"productId": {
"anyOf": [
{
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
},
{
"type": "null"
}
]
},
"reference": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"category": {
"type": "object",
"required": [
"legacyId",
"name",
"evidence"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"legacyId": {
"anyOf": [
{
"type": "integer",
"minimum": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"document": {
"type": "object",
"required": [
"id",
"kind",
"title",
"url",
"mediaType",
"scope",
"contentInspection",
"evidence"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"url": {
"anyOf": [
{
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
{
"type": "null"
}
]
},
"kind": {
"enum": [
"manual",
"technical_sheet",
"certificate",
"unknown",
"user_manual",
"installation_manual",
"parts_diagram",
"commercial",
"other",
"irrelevant"
]
},
"scope": {
"type": "object",
"required": [
"type",
"productId"
],
"properties": {
"type": {
"enum": [
"product",
"related_appliance"
]
},
"productId": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
}
},
"additionalProperties": false
},
"title": {
"type": "string",
"minLength": 1
},
"decision": {
"$ref": "#/$defs/canonical/$defs/humanDecision"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"mediaType": {
"anyOf": [
{
"enum": [
"application/pdf",
"text/html",
"image/jpeg",
"image/png"
]
},
{
"type": "null"
}
]
},
"reviewStatus": {
"enum": [
"relevant",
"not_relevant",
"unreadable",
"wrong_appliance"
]
},
"contentInspection": {
"enum": [
"not_inspected",
"partially_inspected",
"inspected"
]
},
"confirmedAppliance": {
"type": "string",
"maxLength": 150
}
},
"additionalProperties": false
},
"evidence": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"observed",
"inferred",
"validated"
]
}
}
},
"then": {
"properties": {
"sourceRefs": {
"minItems": 1
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
},
"then": {
"properties": {
"confidence": {
"const": "unknown"
}
}
}
}
],
"required": [
"status",
"confidence",
"sourceRefs",
"note"
],
"properties": {
"note": {
"type": "string",
"minLength": 1
},
"status": {
"enum": [
"observed",
"inferred",
"unconfirmed",
"validated"
]
},
"confidence": {
"enum": [
"high",
"medium",
"low",
"unknown"
]
},
"sourceRefs": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 0,
"uniqueItems": true
}
},
"additionalProperties": false
},
"relation": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"qualification": {
"const": "confirmed"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "validated"
}
}
}
}
}
}
],
"required": [
"target",
"qualification",
"evidence"
],
"properties": {
"target": {
"$ref": "#/$defs/canonical/$defs/target"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"qualification": {
"enum": [
"asserted",
"confirmed",
"unknown"
]
}
},
"additionalProperties": false
},
"appliance": {
"type": "object",
"required": [
"productId",
"brand",
"model",
"reference"
],
"properties": {
"brand": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"model": {
"type": "string",
"minLength": 1
},
"productId": {
"anyOf": [
{
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
},
{
"type": "null"
}
]
},
"reference": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"statement": {
"type": "object",
"required": [
"text",
"evidence"
],
"properties": {
"text": {
"type": "string",
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"identifier": {
"type": "object",
"required": [
"kind",
"value",
"evidence"
],
"properties": {
"kind": {
"enum": [
"manufacturer_reference_displayed",
"adaptable_reference",
"legacy_public_sku",
"gtin",
"other",
"nitech_reference",
"former_reference",
"supplier_reference",
"unknown"
]
},
"value": {
"type": "string",
"minLength": 1
},
"decision": {
"$ref": "#/$defs/canonical/$defs/humanDecision"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"measurement": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"amount",
"unit",
"qualifier"
],
"properties": {
"kind": {
"const": "number"
},
"unit": {
"type": "string",
"minLength": 1
},
"amount": {
"type": "string",
"pattern": "^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?$"
},
"qualifier": {
"enum": [
"exact",
"approximate"
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"text",
"unit",
"interpretation"
],
"properties": {
"kind": {
"const": "text"
},
"text": {
"type": "string",
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"interpretation": {
"enum": [
"literal",
"ambiguous"
]
}
},
"additionalProperties": false
}
]
},
"availability": {
"type": "object",
"required": [
"status",
"orderable",
"observations",
"evidence"
],
"properties": {
"status": {
"enum": [
"in_stock",
"out_of_stock",
"on_order",
"preorder",
"unknown",
"conflicting",
"on_request",
"not_for_sale"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"orderable": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"observations": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/availabilityObservation"
},
"minItems": 0
}
},
"additionalProperties": false
},
"explodedView": {
"type": "object",
"required": [
"id",
"appliance",
"planUrl",
"version",
"documentIds",
"occurrences",
"evidence"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"planUrl": {
"anyOf": [
{
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
{
"type": "null"
}
]
},
"version": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"appliance": {
"$ref": "#/$defs/canonical/$defs/appliance"
},
"documentIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 0,
"uniqueItems": true
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"required": [
"productId",
"marker"
],
"properties": {
"marker": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"productId": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
}
},
"additionalProperties": false
},
"minItems": 1
}
},
"additionalProperties": false
},
"compatibility": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"confirmed",
"incompatible"
]
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "validated"
}
}
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"target",
"status",
"scope",
"evidence"
],
"properties": {
"scope": {
"type": "string",
"minLength": 1
},
"status": {
"enum": [
"asserted",
"confirmed",
"incompatible",
"unknown",
"conflicting",
"verified",
"inferred"
]
},
"target": {
"$ref": "#/$defs/canonical/$defs/appliance"
},
"decision": {
"$ref": "#/$defs/canonical/$defs/humanDecision"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"humanDecision": {
"type": "object",
"required": [
"id",
"outcome",
"at",
"sourceFingerprint",
"sourceRef"
],
"properties": {
"at": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
"id": {
"type": "integer",
"minimum": 1
},
"outcome": {
"enum": [
"relevant",
"not_relevant",
"unreadable",
"wrong_appliance",
"confirmed",
"rejected",
"qualified"
]
},
"sourceRef": {
"type": "string",
"pattern": "^human-decision-[1-9][0-9]*$"
},
"sourceFingerprint": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"additionalProperties": false
},
"relationGroup": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/relation"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"specification": {
"type": "object",
"required": [
"key",
"label",
"value",
"sourceText",
"evidence"
],
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"label": {
"type": "string",
"minLength": 1
},
"value": {
"$ref": "#/$defs/canonical/$defs/measurement"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"sourceText": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"availabilityObservation": {
"type": "object",
"required": [
"sourceRef",
"channel",
"reportedStatus",
"rawValue"
],
"properties": {
"channel": {
"enum": [
"human",
"jsonld",
"backoffice"
]
},
"rawValue": {
"type": "string",
"minLength": 1
},
"sourceRef": {
"type": "string",
"minLength": 1
},
"reportedStatus": {
"enum": [
"in_stock",
"out_of_stock",
"on_order",
"preorder",
"for_sale",
"unknown"
]
}
},
"additionalProperties": false
}
},
"allOf": [
{
"if": {
"properties": {
"recordType": {
"const": "source_snapshot"
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"policy": {
"const": "snapshot_only"
},
"expiresAt": {
"type": "null"
}
}
}
}
},
"visibility": {
"properties": {
"record": {
"const": "internal"
},
"publication": {
"const": "not_approved"
}
}
}
}
}
},
{
"if": {
"properties": {
"verification": {
"properties": {
"status": {
"const": "pending_business_review"
}
}
}
}
},
"then": {
"properties": {
"verification": {
"properties": {
"verifiedAt": {
"type": "null"
},
"verifiedBy": {
"type": "null"
}
}
}
}
}
},
{
"if": {
"properties": {
"verification": {
"properties": {
"status": {
"const": "approved"
}
}
}
}
},
"then": {
"properties": {
"verification": {
"properties": {
"verifiedAt": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
"verifiedBy": {
"type": "string",
"minLength": 1
}
}
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"properties": {
"publication": {
"const": "approved"
}
}
}
}
},
"then": {
"properties": {
"recordType": {
"const": "canonical_product"
},
"verification": {
"properties": {
"status": {
"const": "approved"
}
}
}
}
}
},
{
"if": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"policy": {
"const": "bounded"
}
}
}
}
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"expiresAt": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
}
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"properties": {
"record": {
"const": "public"
}
}
}
}
},
"then": {
"properties": {
"visibility": {
"properties": {
"publication": {
"enum": [
"approved",
"published_read_only"
]
}
}
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"const": "0.1.0"
}
}
},
"else": {
"allOf": [
{
"if": {
"properties": {
"visibility": {
"properties": {
"record": {
"const": "preview"
}
}
}
}
},
"then": {
"properties": {
"recordType": {
"const": "canonical_product"
},
"visibility": {
"properties": {
"publication": {
"const": "not_approved"
}
}
},
"verification": {
"properties": {
"status": {
"const": "pending_business_review"
}
}
}
}
}
},
{
"if": {
"properties": {
"recordType": {
"const": "source_snapshot"
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"freshness_status": {
"const": "source_snapshot"
}
}
}
}
}
}
}
},
{
"if": {
"properties": {
"recordType": {
"const": "canonical_product"
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"freshness_status": {
"enum": [
"not_certified",
"unknown",
"current_read"
]
}
}
}
}
}
}
}
}
],
"properties": {
"offer": {
"properties": {
"freshness": {
"allOf": [
{
"if": {
"properties": {
"freshness_status": {
"const": "source_snapshot"
}
}
},
"then": {
"properties": {
"policy": {
"const": "snapshot_only"
}
}
}
},
{
"if": {
"properties": {
"freshness_status": {
"const": "not_certified"
}
}
},
"then": {
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
},
{
"if": {
"properties": {
"freshness_status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "null"
},
"verified_at": {
"type": "null"
}
}
}
}
],
"required": [
"source_updated_at",
"observed_at",
"verified_at",
"freshness_status"
],
"properties": {
"policy": {
"enum": [
"snapshot_only",
"observation_only"
]
},
"expiresAt": {
"type": "null"
}
}
},
"availability": {
"properties": {
"status": {
"enum": [
"in_stock",
"out_of_stock",
"unknown",
"on_request",
"not_for_sale"
]
}
}
}
}
},
"compatibilities": {
"properties": {
"items": {
"items": {
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"verified",
"incompatible"
]
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "validated"
}
}
},
"verified_at": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "inferred"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "inferred"
},
"sourceRefs": {
"minItems": 1
}
}
},
"verified_at": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"verified_at": {
"type": "null"
}
}
}
}
],
"required": [
"verified_at"
],
"properties": {
"status": {
"enum": [
"verified",
"inferred",
"incompatible",
"unknown"
]
},
"evidence": {
"properties": {
"sourceRefs": {
"minItems": 1
}
}
}
}
}
}
}
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"stock": {
"properties": {
"quantity": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
]
}
}
},
"freshness": {
"properties": {
"policy": {
"enum": [
"snapshot_only",
"bounded"
]
},
"observed_at": {
"not": {}
},
"verified_at": {
"not": {}
},
"freshness_status": {
"not": {}
},
"source_updated_at": {
"not": {}
}
}
},
"availability": {
"properties": {
"status": {
"enum": [
"in_stock",
"out_of_stock",
"on_order",
"preorder",
"unknown",
"conflicting"
]
}
}
}
}
},
"provenance": {
"properties": {
"sources": {
"items": {
"properties": {
"kind": {
"enum": [
"backoffice",
"public_page",
"manufacturer_document",
"audit_record",
"historical_capture"
]
}
}
}
}
}
},
"visibility": {
"properties": {
"record": {
"enum": [
"internal",
"public"
]
}
}
},
"compatibilities": {
"properties": {
"items": {
"items": {
"properties": {
"status": {
"enum": [
"asserted",
"confirmed",
"incompatible",
"unknown",
"conflicting"
]
},
"verified_at": {
"not": {}
}
}
}
}
}
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"const": "0.1.0"
}
}
},
"then": {
"properties": {
"names": {
"properties": {
"preferred": {
"type": "string"
}
}
},
"references": {
"properties": {
"identifiers": {
"minItems": 1
}
}
},
"classification": {
"properties": {
"brandLabel": {
"properties": {
"name": {
"type": "string"
}
}
},
"categoryPath": {
"minItems": 1
}
}
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"properties": {
"publication": {
"const": "published_read_only"
}
}
}
}
},
"then": {
"properties": {
"recordType": {
"const": "canonical_product"
},
"visibility": {
"properties": {
"record": {
"const": "public"
}
}
},
"verification": {
"properties": {
"status": {
"const": "pending_business_review"
}
}
},
"schemaVersion": {
"enum": [
"0.1.1",
"0.1.2",
"0.1.3"
]
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"enum": [
"0.1.2",
"0.1.3"
]
}
}
},
"else": {
"properties": {
"offer": {
"not": {
"anyOf": [
{
"required": [
"sale_status"
]
},
{
"required": [
"order_mode"
]
},
{
"required": [
"order_reason"
]
},
{
"required": [
"review_reasons"
]
}
]
},
"properties": {
"stock": {
"not": {
"required": [
"counted"
]
}
},
"freshness": {
"properties": {
"freshness_status": {
"not": {
"const": "current_read"
}
}
}
},
"availability": {
"properties": {
"status": {
"not": {
"const": "not_for_sale"
}
}
}
}
}
}
}
},
"then": {
"properties": {
"offer": {
"required": [
"sale_status",
"order_mode",
"order_reason",
"review_reasons"
],
"properties": {
"stock": {
"required": [
"counted"
]
},
"freshness": {
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"freshness_status": {
"const": "current_read"
}
}
},
"availability": {
"properties": {
"orderable": {
"type": "boolean"
}
}
}
}
},
"recordType": {
"const": "canonical_product"
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"const": "0.1.3"
}
}
},
"else": {
"properties": {
"documents": {
"properties": {
"items": {
"items": {
"properties": {
"kind": {
"enum": [
"manual",
"technical_sheet",
"certificate",
"unknown"
]
},
"decision": {
"not": {}
},
"reviewStatus": {
"not": {}
},
"confirmedAppliance": {
"not": {}
}
}
}
}
}
},
"provenance": {
"properties": {
"sources": {
"items": {
"properties": {
"kind": {
"not": {
"const": "human_review"
}
}
}
}
}
}
},
"references": {
"properties": {
"identifiers": {
"items": {
"properties": {
"kind": {
"enum": [
"manufacturer_reference_displayed",
"adaptable_reference",
"legacy_public_sku",
"gtin",
"other"
]
},
"decision": {
"not": {}
}
}
}
}
}
},
"humanReview": {
"not": {}
},
"compatibilities": {
"properties": {
"items": {
"items": {
"properties": {
"decision": {
"not": {}
}
}
}
}
}
}
}
},
"then": {
"required": [
"humanReview"
]
}
}
],
"title": "Nitech — produit canonique v0.1",
"required": [
"schemaVersion",
"recordRevision",
"recordType",
"identity",
"references",
"names",
"classification",
"description",
"specifications",
"compatibilities",
"relations",
"offer",
"images",
"documents",
"explodedViews",
"provenance",
"verification",
"visibility"
],
"properties": {
"names": {
"type": "object",
"required": [
"preferred",
"aliases",
"evidence"
],
"properties": {
"aliases": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/alias"
},
"minItems": 0
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"preferred": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 1
}
},
"additionalProperties": false
},
"offer": {
"type": "object",
"required": [
"context",
"price",
"stock",
"availability",
"delivery",
"freshness"
],
"properties": {
"price": {
"$ref": "#/$defs/canonical/$defs/price"
},
"stock": {
"$ref": "#/$defs/canonical/$defs/stock"
},
"context": {
"type": "object",
"required": [
"market",
"channel",
"seller",
"shippingIncluded",
"evidence"
],
"properties": {
"market": {
"const": "FR"
},
"seller": {
"const": "Nitech"
},
"channel": {
"const": "retail"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"shippingIncluded": {
"const": false
}
},
"additionalProperties": false
},
"delivery": {
"type": "object",
"required": [
"text",
"evidence"
],
"properties": {
"text": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"freshness": {
"type": "object",
"required": [
"asOf",
"policy",
"expiresAt",
"evidence"
],
"properties": {
"asOf": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"policy": {
"enum": [
"snapshot_only",
"bounded",
"observation_only"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"expiresAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Heure réelle de lecture courante de la base Nitech."
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Instant de vérification métier de cette offre, distinct de sa lecture ; null en l'absence de vérification."
},
"freshness_status": {
"enum": [
"source_snapshot",
"not_certified",
"unknown",
"current_read"
],
"description": "current_read : quantité courante observée ; aucun délai de fraîcheur inventé."
},
"source_updated_at": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Précision réelle de la source : date SQL conservée comme date, instant seulement si connu ; null si inconnu."
}
},
"additionalProperties": false
},
"order_mode": {
"enum": [
"online",
"contact_only",
"disabled"
]
},
"sale_status": {
"enum": [
"on_sale",
"not_on_sale"
]
},
"availability": {
"$ref": "#/$defs/canonical/$defs/availability"
},
"order_reason": {
"enum": [
"not_for_sale",
"sale_mode_undecided",
"stock_not_counted",
"untracked_orders_allowed",
"stock_empty",
"unavailable_orders_allowed",
"stock_available"
]
},
"review_reasons": {
"type": "array",
"items": {
"enum": [
"stock_not_counted",
"sale_mode_undecided",
"on_sale_not_orderable"
]
},
"maxItems": 3,
"uniqueItems": true
}
},
"additionalProperties": false
},
"images": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/image"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"identity": {
"type": "object",
"required": [
"id",
"legacyPid",
"kind",
"evidence"
],
"properties": {
"id": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
},
"kind": {
"enum": [
"spare_part",
"product",
"appliance"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"legacyPid": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
},
"documents": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/document"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"relations": {
"type": "object",
"required": [
"replaces",
"replacedBy",
"alternatives",
"accessories"
],
"properties": {
"replaces": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
},
"replacedBy": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
},
"accessories": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
},
"alternatives": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
}
},
"additionalProperties": false
},
"provenance": {
"type": "object",
"required": [
"snapshotOn",
"sourceModifiedOn",
"sources",
"issues"
],
"properties": {
"issues": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/issue"
},
"minItems": 0
},
"sources": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/source"
},
"minItems": 1
},
"snapshotOn": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"sourceModifiedOn": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"recordType": {
"enum": [
"source_snapshot",
"canonical_product"
]
},
"references": {
"type": "object",
"required": [
"merchantSku",
"identifiers",
"evidence"
],
"properties": {
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"identifiers": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/identifier"
},
"minItems": 0
},
"merchantSku": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"visibility": {
"type": "object",
"required": [
"record",
"publication",
"evidence"
],
"properties": {
"record": {
"enum": [
"internal",
"public",
"preview"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"publication": {
"enum": [
"not_approved",
"approved",
"published_read_only"
],
"description": "published_read_only décrit la diffusion publique autorisée sans approbation de revue métier ; approved conserve son sens historique de publication après revue."
}
},
"additionalProperties": false
},
"description": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/statement"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"humanReview": {
"type": "object",
"required": [
"status",
"productFingerprint",
"reviewedFingerprint",
"reviewedAt"
],
"properties": {
"status": {
"enum": [
"pending",
"reviewed"
]
},
"reviewedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"productFingerprint": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"reviewedFingerprint": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"verification": {
"type": "object",
"required": [
"status",
"verifiedAt",
"verifiedBy"
],
"properties": {
"status": {
"enum": [
"pending_business_review",
"approved"
]
},
"verifiedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"verifiedBy": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"description": "Revue des assertions qualifiées (evidence.status=validated) et de leur publication examinée ; ne certifie pas chaque observation commerciale ultérieure. Une validation ne se transfère pas à une valeur/provenance modifiée.",
"additionalProperties": false
},
"canonical_url": {
"type": "string",
"format": "uri",
"pattern": "^https://catalogue\\.nitech\\.fr/produits/[1-9][0-9]{0,9}$"
},
"explodedViews": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/explodedView"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"schemaVersion": {
"enum": [
"0.1.0",
"0.1.1",
"0.1.2",
"0.1.3"
]
},
"classification": {
"type": "object",
"required": [
"brandLabel",
"manufacturer",
"categoryPath",
"evidence"
],
"properties": {
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"brandLabel": {
"type": "object",
"required": [
"name",
"evidence"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"categoryPath": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/category"
},
"minItems": 0
},
"manufacturer": {
"type": "object",
"required": [
"name",
"evidence"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"recordRevision": {
"type": "integer",
"minimum": 1
},
"specifications": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/specification"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"compatibilities": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/compatibility"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
}
},
"description": "0.1.3 : qualifications humaines distinctes, liées à une source stable ; lecture commerciale courante inchangée.",
"additionalProperties": false
}
},
"oneOf": [
{
"type": "object",
"required": [
"product"
],
"properties": {
"product": {
"allOf": [
{
"$ref": "#/$defs/canonical"
},
{
"properties": {
"recordType": {
"const": "canonical_product"
},
"visibility": {
"anyOf": [
{
"properties": {
"record": {
"const": "preview"
},
"publication": {
"const": "not_approved"
}
}
},
{
"properties": {
"record": {
"const": "public"
},
"publication": {
"const": "published_read_only"
}
}
}
]
},
"schemaVersion": {
"enum": [
"0.1.1",
"0.1.2",
"0.1.3"
]
}
}
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[A-Z_]{3,64}$"
},
"message": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"retryable": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Generated by bin/build-mcp-schemas.py; authoritative product definitions remain in nitech-product-v0.1.schema.json."
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_offer
Lire l'offre canonique à l'heure d'observation : mise en vente, stock compté, disponibilité et autorisation de commande distinctes. Cette consultation ne réserve aucun stock ; la qualification métier de la fiche reste séparée.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1,
"description": "PID interne du catalogue actif. PID1843 est le pilote qualifié ; les autres projections restent provisoires en recette."
}
},
"additionalProperties": false
}{
"type": "object",
"$defs": {
"canonical": {
"type": "object",
"$defs": {
"alias": {
"type": "object",
"required": [
"value",
"kind",
"evidence"
],
"properties": {
"kind": {
"enum": [
"commercial_name",
"spelling_variant"
]
},
"value": {
"type": "string",
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"https": {
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
"image": {
"type": "object",
"required": [
"url",
"role",
"mediaType",
"evidence"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
"role": {
"enum": [
"primary",
"secondary"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"mediaType": {
"anyOf": [
{
"enum": [
"image/jpeg",
"image/png",
"image/webp",
"image/avif"
]
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"issue": {
"type": "object",
"required": [
"code",
"path",
"severity",
"message",
"sourceRefs"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"path": {
"type": "string",
"pattern": "^/"
},
"message": {
"type": "string",
"minLength": 1
},
"severity": {
"enum": [
"info",
"review_required",
"publication_blocker"
]
},
"sourceRefs": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 0,
"uniqueItems": true
}
},
"additionalProperties": false
},
"price": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"taxRate": {
"type": "null"
},
"amountHt": {
"type": "null"
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
},
"amountTtc": {
"type": "null"
},
"validUntil": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "observed"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"enum": [
"observed",
"validated"
]
}
}
},
"amountTtc": {
"type": "string",
"pattern": "^(?:0|[1-9][0-9]*)\\.[0-9]{2}$"
}
}
}
},
{
"if": {
"properties": {
"validUntil": {
"type": "string"
}
}
},
"else": {
"properties": {
"validityEvidence": {
"type": "null"
}
}
},
"then": {
"properties": {
"validityEvidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
}
}
}
],
"required": [
"status",
"amountTtc",
"amountHt",
"currency",
"taxRate",
"validUntil",
"evidence",
"validityEvidence"
],
"properties": {
"status": {
"enum": [
"observed",
"unknown"
]
},
"taxRate": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:0|[1-9][0-9]{0,2})(?:\\.[0-9]{1,2})?$"
},
{
"type": "null"
}
]
},
"amountHt": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:0|[1-9][0-9]*)\\.[0-9]{2}$"
},
{
"type": "null"
}
]
},
"currency": {
"const": "EUR"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"amountTtc": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:0|[1-9][0-9]*)\\.[0-9]{2}$"
},
{
"type": "null"
}
]
},
"validUntil": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
]
},
"validityEvidence": {
"anyOf": [
{
"$ref": "#/$defs/canonical/$defs/evidence"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"stock": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"managed": {
"enum": [
false,
null
]
}
}
},
"then": {
"properties": {
"quantity": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"const": "public"
}
}
},
"then": {
"properties": {
"quantity": {
"type": "null"
},
"rawQuantity": {
"type": "null"
}
}
}
}
],
"required": [
"managed",
"quantity",
"rawQuantity",
"visibility",
"evidence"
],
"properties": {
"counted": {
"type": "boolean"
},
"managed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"quantity": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"visibility": {
"enum": [
"internal",
"public"
]
},
"rawQuantity": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"source": {
"type": "object",
"allOf": [
{
"anyOf": [
{
"properties": {
"url": {
"$ref": "#/$defs/canonical/$defs/https"
}
}
},
{
"properties": {
"artifactPath": {
"type": "string"
}
}
},
{
"properties": {
"kind": {
"const": "catalogue_read"
}
}
},
{
"properties": {
"kind": {
"const": "human_review"
}
}
}
]
},
{
"if": {
"properties": {
"visibility": {
"const": "public"
}
}
},
"then": {
"allOf": [
{
"if": {
"properties": {
"kind": {
"enum": [
"catalogue_read",
"human_review"
]
}
}
},
"else": {
"properties": {
"url": {
"$ref": "#/$defs/canonical/$defs/https"
}
}
},
"then": {
"type": "object"
}
}
],
"properties": {
"artifactPath": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "catalogue_read"
}
}
},
"then": {
"properties": {
"observedAt": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
}
],
"required": [
"id",
"kind",
"url",
"artifactPath",
"locator",
"observedOn",
"observedAt",
"visibility",
"sha256"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"url": {
"anyOf": [
{
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
{
"type": "null"
}
]
},
"kind": {
"enum": [
"backoffice",
"public_page",
"manufacturer_document",
"audit_record",
"historical_capture",
"catalogue_read",
"human_review"
]
},
"sha256": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-fA-F0-9]{64}$"
},
{
"type": "null"
}
]
},
"locator": {
"type": "string",
"minLength": 1
},
"observedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"observedOn": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"visibility": {
"enum": [
"public",
"internal"
]
},
"artifactPath": {
"anyOf": [
{
"type": "string",
"pattern": "^(?!/)(?!.*\\.\\.)(?!.*\\\\)[A-Za-z0-9_./-]+$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"target": {
"type": "object",
"anyOf": [
{
"properties": {
"productId": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
}
}
},
{
"properties": {
"reference": {
"type": "string",
"minLength": 1
}
}
}
],
"required": [
"productId",
"reference",
"label"
],
"properties": {
"label": {
"type": "string",
"minLength": 1
},
"productId": {
"anyOf": [
{
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
},
{
"type": "null"
}
]
},
"reference": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"category": {
"type": "object",
"required": [
"legacyId",
"name",
"evidence"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"legacyId": {
"anyOf": [
{
"type": "integer",
"minimum": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"document": {
"type": "object",
"required": [
"id",
"kind",
"title",
"url",
"mediaType",
"scope",
"contentInspection",
"evidence"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"url": {
"anyOf": [
{
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
{
"type": "null"
}
]
},
"kind": {
"enum": [
"manual",
"technical_sheet",
"certificate",
"unknown",
"user_manual",
"installation_manual",
"parts_diagram",
"commercial",
"other",
"irrelevant"
]
},
"scope": {
"type": "object",
"required": [
"type",
"productId"
],
"properties": {
"type": {
"enum": [
"product",
"related_appliance"
]
},
"productId": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
}
},
"additionalProperties": false
},
"title": {
"type": "string",
"minLength": 1
},
"decision": {
"$ref": "#/$defs/canonical/$defs/humanDecision"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"mediaType": {
"anyOf": [
{
"enum": [
"application/pdf",
"text/html",
"image/jpeg",
"image/png"
]
},
{
"type": "null"
}
]
},
"reviewStatus": {
"enum": [
"relevant",
"not_relevant",
"unreadable",
"wrong_appliance"
]
},
"contentInspection": {
"enum": [
"not_inspected",
"partially_inspected",
"inspected"
]
},
"confirmedAppliance": {
"type": "string",
"maxLength": 150
}
},
"additionalProperties": false
},
"evidence": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"observed",
"inferred",
"validated"
]
}
}
},
"then": {
"properties": {
"sourceRefs": {
"minItems": 1
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
},
"then": {
"properties": {
"confidence": {
"const": "unknown"
}
}
}
}
],
"required": [
"status",
"confidence",
"sourceRefs",
"note"
],
"properties": {
"note": {
"type": "string",
"minLength": 1
},
"status": {
"enum": [
"observed",
"inferred",
"unconfirmed",
"validated"
]
},
"confidence": {
"enum": [
"high",
"medium",
"low",
"unknown"
]
},
"sourceRefs": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 0,
"uniqueItems": true
}
},
"additionalProperties": false
},
"relation": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"qualification": {
"const": "confirmed"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "validated"
}
}
}
}
}
}
],
"required": [
"target",
"qualification",
"evidence"
],
"properties": {
"target": {
"$ref": "#/$defs/canonical/$defs/target"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"qualification": {
"enum": [
"asserted",
"confirmed",
"unknown"
]
}
},
"additionalProperties": false
},
"appliance": {
"type": "object",
"required": [
"productId",
"brand",
"model",
"reference"
],
"properties": {
"brand": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"model": {
"type": "string",
"minLength": 1
},
"productId": {
"anyOf": [
{
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
},
{
"type": "null"
}
]
},
"reference": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"statement": {
"type": "object",
"required": [
"text",
"evidence"
],
"properties": {
"text": {
"type": "string",
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"identifier": {
"type": "object",
"required": [
"kind",
"value",
"evidence"
],
"properties": {
"kind": {
"enum": [
"manufacturer_reference_displayed",
"adaptable_reference",
"legacy_public_sku",
"gtin",
"other",
"nitech_reference",
"former_reference",
"supplier_reference",
"unknown"
]
},
"value": {
"type": "string",
"minLength": 1
},
"decision": {
"$ref": "#/$defs/canonical/$defs/humanDecision"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"measurement": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"amount",
"unit",
"qualifier"
],
"properties": {
"kind": {
"const": "number"
},
"unit": {
"type": "string",
"minLength": 1
},
"amount": {
"type": "string",
"pattern": "^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?$"
},
"qualifier": {
"enum": [
"exact",
"approximate"
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"text",
"unit",
"interpretation"
],
"properties": {
"kind": {
"const": "text"
},
"text": {
"type": "string",
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"interpretation": {
"enum": [
"literal",
"ambiguous"
]
}
},
"additionalProperties": false
}
]
},
"availability": {
"type": "object",
"required": [
"status",
"orderable",
"observations",
"evidence"
],
"properties": {
"status": {
"enum": [
"in_stock",
"out_of_stock",
"on_order",
"preorder",
"unknown",
"conflicting",
"on_request",
"not_for_sale"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"orderable": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"observations": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/availabilityObservation"
},
"minItems": 0
}
},
"additionalProperties": false
},
"explodedView": {
"type": "object",
"required": [
"id",
"appliance",
"planUrl",
"version",
"documentIds",
"occurrences",
"evidence"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"planUrl": {
"anyOf": [
{
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
{
"type": "null"
}
]
},
"version": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"appliance": {
"$ref": "#/$defs/canonical/$defs/appliance"
},
"documentIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 0,
"uniqueItems": true
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"required": [
"productId",
"marker"
],
"properties": {
"marker": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"productId": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
}
},
"additionalProperties": false
},
"minItems": 1
}
},
"additionalProperties": false
},
"compatibility": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"confirmed",
"incompatible"
]
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "validated"
}
}
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"target",
"status",
"scope",
"evidence"
],
"properties": {
"scope": {
"type": "string",
"minLength": 1
},
"status": {
"enum": [
"asserted",
"confirmed",
"incompatible",
"unknown",
"conflicting",
"verified",
"inferred"
]
},
"target": {
"$ref": "#/$defs/canonical/$defs/appliance"
},
"decision": {
"$ref": "#/$defs/canonical/$defs/humanDecision"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"humanDecision": {
"type": "object",
"required": [
"id",
"outcome",
"at",
"sourceFingerprint",
"sourceRef"
],
"properties": {
"at": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
"id": {
"type": "integer",
"minimum": 1
},
"outcome": {
"enum": [
"relevant",
"not_relevant",
"unreadable",
"wrong_appliance",
"confirmed",
"rejected",
"qualified"
]
},
"sourceRef": {
"type": "string",
"pattern": "^human-decision-[1-9][0-9]*$"
},
"sourceFingerprint": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"additionalProperties": false
},
"relationGroup": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/relation"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"specification": {
"type": "object",
"required": [
"key",
"label",
"value",
"sourceText",
"evidence"
],
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"label": {
"type": "string",
"minLength": 1
},
"value": {
"$ref": "#/$defs/canonical/$defs/measurement"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"sourceText": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"availabilityObservation": {
"type": "object",
"required": [
"sourceRef",
"channel",
"reportedStatus",
"rawValue"
],
"properties": {
"channel": {
"enum": [
"human",
"jsonld",
"backoffice"
]
},
"rawValue": {
"type": "string",
"minLength": 1
},
"sourceRef": {
"type": "string",
"minLength": 1
},
"reportedStatus": {
"enum": [
"in_stock",
"out_of_stock",
"on_order",
"preorder",
"for_sale",
"unknown"
]
}
},
"additionalProperties": false
}
},
"allOf": [
{
"if": {
"properties": {
"recordType": {
"const": "source_snapshot"
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"policy": {
"const": "snapshot_only"
},
"expiresAt": {
"type": "null"
}
}
}
}
},
"visibility": {
"properties": {
"record": {
"const": "internal"
},
"publication": {
"const": "not_approved"
}
}
}
}
}
},
{
"if": {
"properties": {
"verification": {
"properties": {
"status": {
"const": "pending_business_review"
}
}
}
}
},
"then": {
"properties": {
"verification": {
"properties": {
"verifiedAt": {
"type": "null"
},
"verifiedBy": {
"type": "null"
}
}
}
}
}
},
{
"if": {
"properties": {
"verification": {
"properties": {
"status": {
"const": "approved"
}
}
}
}
},
"then": {
"properties": {
"verification": {
"properties": {
"verifiedAt": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
"verifiedBy": {
"type": "string",
"minLength": 1
}
}
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"properties": {
"publication": {
"const": "approved"
}
}
}
}
},
"then": {
"properties": {
"recordType": {
"const": "canonical_product"
},
"verification": {
"properties": {
"status": {
"const": "approved"
}
}
}
}
}
},
{
"if": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"policy": {
"const": "bounded"
}
}
}
}
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"expiresAt": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
}
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"properties": {
"record": {
"const": "public"
}
}
}
}
},
"then": {
"properties": {
"visibility": {
"properties": {
"publication": {
"enum": [
"approved",
"published_read_only"
]
}
}
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"const": "0.1.0"
}
}
},
"else": {
"allOf": [
{
"if": {
"properties": {
"visibility": {
"properties": {
"record": {
"const": "preview"
}
}
}
}
},
"then": {
"properties": {
"recordType": {
"const": "canonical_product"
},
"visibility": {
"properties": {
"publication": {
"const": "not_approved"
}
}
},
"verification": {
"properties": {
"status": {
"const": "pending_business_review"
}
}
}
}
}
},
{
"if": {
"properties": {
"recordType": {
"const": "source_snapshot"
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"freshness_status": {
"const": "source_snapshot"
}
}
}
}
}
}
}
},
{
"if": {
"properties": {
"recordType": {
"const": "canonical_product"
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"freshness_status": {
"enum": [
"not_certified",
"unknown",
"current_read"
]
}
}
}
}
}
}
}
}
],
"properties": {
"offer": {
"properties": {
"freshness": {
"allOf": [
{
"if": {
"properties": {
"freshness_status": {
"const": "source_snapshot"
}
}
},
"then": {
"properties": {
"policy": {
"const": "snapshot_only"
}
}
}
},
{
"if": {
"properties": {
"freshness_status": {
"const": "not_certified"
}
}
},
"then": {
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
},
{
"if": {
"properties": {
"freshness_status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "null"
},
"verified_at": {
"type": "null"
}
}
}
}
],
"required": [
"source_updated_at",
"observed_at",
"verified_at",
"freshness_status"
],
"properties": {
"policy": {
"enum": [
"snapshot_only",
"observation_only"
]
},
"expiresAt": {
"type": "null"
}
}
},
"availability": {
"properties": {
"status": {
"enum": [
"in_stock",
"out_of_stock",
"unknown",
"on_request",
"not_for_sale"
]
}
}
}
}
},
"compatibilities": {
"properties": {
"items": {
"items": {
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"verified",
"incompatible"
]
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "validated"
}
}
},
"verified_at": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "inferred"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "inferred"
},
"sourceRefs": {
"minItems": 1
}
}
},
"verified_at": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"verified_at": {
"type": "null"
}
}
}
}
],
"required": [
"verified_at"
],
"properties": {
"status": {
"enum": [
"verified",
"inferred",
"incompatible",
"unknown"
]
},
"evidence": {
"properties": {
"sourceRefs": {
"minItems": 1
}
}
}
}
}
}
}
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"stock": {
"properties": {
"quantity": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
]
}
}
},
"freshness": {
"properties": {
"policy": {
"enum": [
"snapshot_only",
"bounded"
]
},
"observed_at": {
"not": {}
},
"verified_at": {
"not": {}
},
"freshness_status": {
"not": {}
},
"source_updated_at": {
"not": {}
}
}
},
"availability": {
"properties": {
"status": {
"enum": [
"in_stock",
"out_of_stock",
"on_order",
"preorder",
"unknown",
"conflicting"
]
}
}
}
}
},
"provenance": {
"properties": {
"sources": {
"items": {
"properties": {
"kind": {
"enum": [
"backoffice",
"public_page",
"manufacturer_document",
"audit_record",
"historical_capture"
]
}
}
}
}
}
},
"visibility": {
"properties": {
"record": {
"enum": [
"internal",
"public"
]
}
}
},
"compatibilities": {
"properties": {
"items": {
"items": {
"properties": {
"status": {
"enum": [
"asserted",
"confirmed",
"incompatible",
"unknown",
"conflicting"
]
},
"verified_at": {
"not": {}
}
}
}
}
}
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"const": "0.1.0"
}
}
},
"then": {
"properties": {
"names": {
"properties": {
"preferred": {
"type": "string"
}
}
},
"references": {
"properties": {
"identifiers": {
"minItems": 1
}
}
},
"classification": {
"properties": {
"brandLabel": {
"properties": {
"name": {
"type": "string"
}
}
},
"categoryPath": {
"minItems": 1
}
}
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"properties": {
"publication": {
"const": "published_read_only"
}
}
}
}
},
"then": {
"properties": {
"recordType": {
"const": "canonical_product"
},
"visibility": {
"properties": {
"record": {
"const": "public"
}
}
},
"verification": {
"properties": {
"status": {
"const": "pending_business_review"
}
}
},
"schemaVersion": {
"enum": [
"0.1.1",
"0.1.2",
"0.1.3"
]
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"enum": [
"0.1.2",
"0.1.3"
]
}
}
},
"else": {
"properties": {
"offer": {
"not": {
"anyOf": [
{
"required": [
"sale_status"
]
},
{
"required": [
"order_mode"
]
},
{
"required": [
"order_reason"
]
},
{
"required": [
"review_reasons"
]
}
]
},
"properties": {
"stock": {
"not": {
"required": [
"counted"
]
}
},
"freshness": {
"properties": {
"freshness_status": {
"not": {
"const": "current_read"
}
}
}
},
"availability": {
"properties": {
"status": {
"not": {
"const": "not_for_sale"
}
}
}
}
}
}
}
},
"then": {
"properties": {
"offer": {
"required": [
"sale_status",
"order_mode",
"order_reason",
"review_reasons"
],
"properties": {
"stock": {
"required": [
"counted"
]
},
"freshness": {
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"freshness_status": {
"const": "current_read"
}
}
},
"availability": {
"properties": {
"orderable": {
"type": "boolean"
}
}
}
}
},
"recordType": {
"const": "canonical_product"
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"const": "0.1.3"
}
}
},
"else": {
"properties": {
"documents": {
"properties": {
"items": {
"items": {
"properties": {
"kind": {
"enum": [
"manual",
"technical_sheet",
"certificate",
"unknown"
]
},
"decision": {
"not": {}
},
"reviewStatus": {
"not": {}
},
"confirmedAppliance": {
"not": {}
}
}
}
}
}
},
"provenance": {
"properties": {
"sources": {
"items": {
"properties": {
"kind": {
"not": {
"const": "human_review"
}
}
}
}
}
}
},
"references": {
"properties": {
"identifiers": {
"items": {
"properties": {
"kind": {
"enum": [
"manufacturer_reference_displayed",
"adaptable_reference",
"legacy_public_sku",
"gtin",
"other"
]
},
"decision": {
"not": {}
}
}
}
}
}
},
"humanReview": {
"not": {}
},
"compatibilities": {
"properties": {
"items": {
"items": {
"properties": {
"decision": {
"not": {}
}
}
}
}
}
}
}
},
"then": {
"required": [
"humanReview"
]
}
}
],
"title": "Nitech — produit canonique v0.1",
"required": [
"schemaVersion",
"recordRevision",
"recordType",
"identity",
"references",
"names",
"classification",
"description",
"specifications",
"compatibilities",
"relations",
"offer",
"images",
"documents",
"explodedViews",
"provenance",
"verification",
"visibility"
],
"properties": {
"names": {
"type": "object",
"required": [
"preferred",
"aliases",
"evidence"
],
"properties": {
"aliases": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/alias"
},
"minItems": 0
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"preferred": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 1
}
},
"additionalProperties": false
},
"offer": {
"type": "object",
"required": [
"context",
"price",
"stock",
"availability",
"delivery",
"freshness"
],
"properties": {
"price": {
"$ref": "#/$defs/canonical/$defs/price"
},
"stock": {
"$ref": "#/$defs/canonical/$defs/stock"
},
"context": {
"type": "object",
"required": [
"market",
"channel",
"seller",
"shippingIncluded",
"evidence"
],
"properties": {
"market": {
"const": "FR"
},
"seller": {
"const": "Nitech"
},
"channel": {
"const": "retail"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"shippingIncluded": {
"const": false
}
},
"additionalProperties": false
},
"delivery": {
"type": "object",
"required": [
"text",
"evidence"
],
"properties": {
"text": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"freshness": {
"type": "object",
"required": [
"asOf",
"policy",
"expiresAt",
"evidence"
],
"properties": {
"asOf": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"policy": {
"enum": [
"snapshot_only",
"bounded",
"observation_only"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"expiresAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Heure réelle de lecture courante de la base Nitech."
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Instant de vérification métier de cette offre, distinct de sa lecture ; null en l'absence de vérification."
},
"freshness_status": {
"enum": [
"source_snapshot",
"not_certified",
"unknown",
"current_read"
],
"description": "current_read : quantité courante observée ; aucun délai de fraîcheur inventé."
},
"source_updated_at": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Précision réelle de la source : date SQL conservée comme date, instant seulement si connu ; null si inconnu."
}
},
"additionalProperties": false
},
"order_mode": {
"enum": [
"online",
"contact_only",
"disabled"
]
},
"sale_status": {
"enum": [
"on_sale",
"not_on_sale"
]
},
"availability": {
"$ref": "#/$defs/canonical/$defs/availability"
},
"order_reason": {
"enum": [
"not_for_sale",
"sale_mode_undecided",
"stock_not_counted",
"untracked_orders_allowed",
"stock_empty",
"unavailable_orders_allowed",
"stock_available"
]
},
"review_reasons": {
"type": "array",
"items": {
"enum": [
"stock_not_counted",
"sale_mode_undecided",
"on_sale_not_orderable"
]
},
"maxItems": 3,
"uniqueItems": true
}
},
"additionalProperties": false
},
"images": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/image"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"identity": {
"type": "object",
"required": [
"id",
"legacyPid",
"kind",
"evidence"
],
"properties": {
"id": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
},
"kind": {
"enum": [
"spare_part",
"product",
"appliance"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"legacyPid": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
},
"documents": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/document"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"relations": {
"type": "object",
"required": [
"replaces",
"replacedBy",
"alternatives",
"accessories"
],
"properties": {
"replaces": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
},
"replacedBy": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
},
"accessories": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
},
"alternatives": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
}
},
"additionalProperties": false
},
"provenance": {
"type": "object",
"required": [
"snapshotOn",
"sourceModifiedOn",
"sources",
"issues"
],
"properties": {
"issues": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/issue"
},
"minItems": 0
},
"sources": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/source"
},
"minItems": 1
},
"snapshotOn": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"sourceModifiedOn": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"recordType": {
"enum": [
"source_snapshot",
"canonical_product"
]
},
"references": {
"type": "object",
"required": [
"merchantSku",
"identifiers",
"evidence"
],
"properties": {
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"identifiers": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/identifier"
},
"minItems": 0
},
"merchantSku": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"visibility": {
"type": "object",
"required": [
"record",
"publication",
"evidence"
],
"properties": {
"record": {
"enum": [
"internal",
"public",
"preview"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"publication": {
"enum": [
"not_approved",
"approved",
"published_read_only"
],
"description": "published_read_only décrit la diffusion publique autorisée sans approbation de revue métier ; approved conserve son sens historique de publication après revue."
}
},
"additionalProperties": false
},
"description": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/statement"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"humanReview": {
"type": "object",
"required": [
"status",
"productFingerprint",
"reviewedFingerprint",
"reviewedAt"
],
"properties": {
"status": {
"enum": [
"pending",
"reviewed"
]
},
"reviewedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"productFingerprint": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"reviewedFingerprint": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"verification": {
"type": "object",
"required": [
"status",
"verifiedAt",
"verifiedBy"
],
"properties": {
"status": {
"enum": [
"pending_business_review",
"approved"
]
},
"verifiedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"verifiedBy": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"description": "Revue des assertions qualifiées (evidence.status=validated) et de leur publication examinée ; ne certifie pas chaque observation commerciale ultérieure. Une validation ne se transfère pas à une valeur/provenance modifiée.",
"additionalProperties": false
},
"canonical_url": {
"type": "string",
"format": "uri",
"pattern": "^https://catalogue\\.nitech\\.fr/produits/[1-9][0-9]{0,9}$"
},
"explodedViews": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/explodedView"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"schemaVersion": {
"enum": [
"0.1.0",
"0.1.1",
"0.1.2",
"0.1.3"
]
},
"classification": {
"type": "object",
"required": [
"brandLabel",
"manufacturer",
"categoryPath",
"evidence"
],
"properties": {
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"brandLabel": {
"type": "object",
"required": [
"name",
"evidence"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"categoryPath": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/category"
},
"minItems": 0
},
"manufacturer": {
"type": "object",
"required": [
"name",
"evidence"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"recordRevision": {
"type": "integer",
"minimum": 1
},
"specifications": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/specification"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"compatibilities": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/compatibility"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
}
},
"description": "0.1.3 : qualifications humaines distinctes, liées à une source stable ; lecture commerciale courante inchangée.",
"additionalProperties": false
}
},
"oneOf": [
{
"type": "object",
"allOf": [
{
"properties": {
"offer": {
"properties": {
"stock": {
"properties": {
"quantity": {
"type": "null"
},
"rawQuantity": {
"type": "null"
}
}
},
"freshness": {
"required": [
"source_updated_at",
"observed_at",
"verified_at",
"freshness_status"
],
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"freshness_status": {
"enum": [
"not_certified",
"current_read"
]
}
}
},
"availability": {
"properties": {
"status": {
"enum": [
"in_stock",
"out_of_stock",
"unknown",
"on_request",
"not_for_sale"
]
}
}
}
}
},
"visibility": {
"anyOf": [
{
"properties": {
"record": {
"const": "preview"
},
"publication": {
"const": "not_approved"
}
}
},
{
"properties": {
"record": {
"const": "public"
},
"publication": {
"const": "published_read_only"
}
}
}
]
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"enum": [
"0.1.2",
"0.1.3"
]
}
}
},
"else": {
"properties": {
"offer": {
"not": {
"anyOf": [
{
"required": [
"sale_status"
]
},
{
"required": [
"order_mode"
]
},
{
"required": [
"order_reason"
]
},
{
"required": [
"review_reasons"
]
}
]
},
"properties": {
"stock": {
"not": {
"required": [
"counted"
]
}
},
"freshness": {
"properties": {
"freshness_status": {
"not": {
"const": "current_read"
}
}
}
},
"availability": {
"properties": {
"status": {
"not": {
"const": "not_for_sale"
}
}
}
}
}
}
}
},
"then": {
"properties": {
"offer": {
"required": [
"sale_status",
"order_mode",
"order_reason",
"review_reasons"
],
"properties": {
"stock": {
"required": [
"counted"
]
},
"freshness": {
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"freshness_status": {
"const": "current_read"
}
}
},
"availability": {
"properties": {
"orderable": {
"type": "boolean"
}
}
}
}
},
"recordType": {
"const": "canonical_product"
}
}
}
}
],
"required": [
"schemaVersion",
"identity",
"references",
"offer",
"provenance",
"verification",
"visibility"
],
"properties": {
"offer": {
"type": "object",
"required": [
"context",
"price",
"stock",
"availability",
"delivery",
"freshness"
],
"properties": {
"price": {
"$ref": "#/$defs/canonical/$defs/price"
},
"stock": {
"$ref": "#/$defs/canonical/$defs/stock"
},
"context": {
"type": "object",
"required": [
"market",
"channel",
"seller",
"shippingIncluded",
"evidence"
],
"properties": {
"market": {
"const": "FR"
},
"seller": {
"const": "Nitech"
},
"channel": {
"const": "retail"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"shippingIncluded": {
"const": false
}
},
"additionalProperties": false
},
"delivery": {
"type": "object",
"required": [
"text",
"evidence"
],
"properties": {
"text": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"freshness": {
"type": "object",
"required": [
"asOf",
"policy",
"expiresAt",
"evidence"
],
"properties": {
"asOf": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"policy": {
"enum": [
"snapshot_only",
"bounded",
"observation_only"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"expiresAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Heure réelle de lecture courante de la base Nitech."
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Instant de vérification métier de cette offre, distinct de sa lecture ; null en l'absence de vérification."
},
"freshness_status": {
"enum": [
"source_snapshot",
"not_certified",
"unknown",
"current_read"
],
"description": "current_read : quantité courante observée ; aucun délai de fraîcheur inventé."
},
"source_updated_at": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Précision réelle de la source : date SQL conservée comme date, instant seulement si connu ; null si inconnu."
}
},
"additionalProperties": false
},
"order_mode": {
"enum": [
"online",
"contact_only",
"disabled"
]
},
"sale_status": {
"enum": [
"on_sale",
"not_on_sale"
]
},
"availability": {
"$ref": "#/$defs/canonical/$defs/availability"
},
"order_reason": {
"enum": [
"not_for_sale",
"sale_mode_undecided",
"stock_not_counted",
"untracked_orders_allowed",
"stock_empty",
"unavailable_orders_allowed",
"stock_available"
]
},
"review_reasons": {
"type": "array",
"items": {
"enum": [
"stock_not_counted",
"sale_mode_undecided",
"on_sale_not_orderable"
]
},
"maxItems": 3,
"uniqueItems": true
}
},
"additionalProperties": false
},
"identity": {
"type": "object",
"required": [
"id",
"legacyPid",
"kind",
"evidence"
],
"properties": {
"id": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
},
"kind": {
"enum": [
"spare_part",
"product",
"appliance"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"legacyPid": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
},
"provenance": {
"type": "object",
"required": [
"snapshotOn",
"sourceModifiedOn",
"sources",
"issues"
],
"properties": {
"issues": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/issue"
},
"minItems": 0
},
"sources": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/source"
},
"minItems": 1
},
"snapshotOn": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"sourceModifiedOn": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"references": {
"type": "object",
"required": [
"merchantSku",
"identifiers",
"evidence"
],
"properties": {
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"identifiers": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/identifier"
},
"minItems": 0
},
"merchantSku": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"visibility": {
"type": "object",
"required": [
"record",
"publication",
"evidence"
],
"properties": {
"record": {
"enum": [
"internal",
"public",
"preview"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"publication": {
"enum": [
"not_approved",
"approved",
"published_read_only"
],
"description": "published_read_only décrit la diffusion publique autorisée sans approbation de revue métier ; approved conserve son sens historique de publication après revue."
}
},
"additionalProperties": false
},
"verification": {
"type": "object",
"required": [
"status",
"verifiedAt",
"verifiedBy"
],
"properties": {
"status": {
"enum": [
"pending_business_review",
"approved"
]
},
"verifiedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"verifiedBy": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"description": "Revue des assertions qualifiées (evidence.status=validated) et de leur publication examinée ; ne certifie pas chaque observation commerciale ultérieure. Une validation ne se transfère pas à une valeur/provenance modifiée.",
"additionalProperties": false
},
"schemaVersion": {
"enum": [
"0.1.1",
"0.1.2",
"0.1.3"
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[A-Z_]{3,64}$"
},
"message": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"retryable": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Generated by bin/build-mcp-schemas.py; authoritative product definitions remain in nitech-product-v0.1.schema.json."
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_products
Rechercher dans le catalogue actif par PID, référence observée, ancienne référence, désignation, marque ou appareil lié. Résultats courts et bornés ; conserver les incertitudes, puis appeler get_product par PID.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"field": {
"enum": [
"auto",
"pid",
"nitech_reference",
"manufacturer_reference",
"former_reference",
"designation",
"brand",
"model"
]
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 20,
"minimum": 1
},
"query": {
"type": "string",
"pattern": "^[^\\u0000-\\u001f\\u007f]*$",
"maxLength": 120,
"minLength": 1
},
"after_pid": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
}
},
"additionalProperties": false
}{
"type": "object",
"$defs": {},
"oneOf": [
{
"type": "object",
"required": [
"query",
"field",
"scope",
"status",
"results",
"limit",
"next_after_pid",
"observed_at",
"uncertainties"
],
"properties": {
"field": {
"enum": [
"auto",
"pid",
"nitech_reference",
"manufacturer_reference",
"former_reference",
"designation",
"brand",
"model"
]
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 20,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 120
},
"scope": {
"const": "active_catalogue"
},
"status": {
"enum": [
"exact",
"possible",
"no_match",
"too_vague",
"uncertain"
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"designation",
"references",
"brand",
"associated_models",
"match_type",
"qualification_status",
"uncertainties",
"source"
],
"properties": {
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"maxLength": 2000,
"minLength": 1
},
"source": {
"type": "object",
"required": [
"kind",
"product_id",
"observed_at"
],
"properties": {
"kind": {
"const": "catalogue_read"
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"match_type": {
"enum": [
"exact",
"probable",
"partial"
]
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"references": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"kind",
"source"
],
"properties": {
"kind": {
"enum": [
"catalogue_reference",
"manufacturer_reference",
"former_reference",
"internal_reference",
"unknown"
]
},
"value": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"source": {
"type": "object",
"required": [
"kind",
"product_id",
"observed_at"
],
"properties": {
"kind": {
"const": "catalogue_read"
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"maxItems": 40
},
"designation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"maxLength": 2000,
"minLength": 1
},
"canonical_url": {
"type": "string",
"format": "uri",
"pattern": "^https://catalogue\\.nitech\\.fr/produits/[1-9][0-9]{0,9}$"
},
"uncertainties": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z_]{3,80}$"
},
"maxItems": 12
},
"associated_models": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"designation",
"reference",
"reference_kind",
"relation"
],
"properties": {
"relation": {
"const": "catalogue_appliance_link"
},
"reference": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"maxLength": 2000,
"minLength": 1
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"designation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"maxLength": 2000,
"minLength": 1
},
"reference_kind": {
"const": "catalogue_reference"
}
},
"additionalProperties": false
},
"maxItems": 5
},
"qualification_status": {
"enum": [
"pilot_qualified",
"provisional"
]
}
},
"additionalProperties": false
},
"maxItems": 20
},
"observed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"format": "date-time"
},
"uncertainties": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z_]{3,80}$"
},
"maxItems": 12
},
"next_after_pid": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"maximum": 2147483647,
"minimum": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[A-Z_]{3,64}$"
},
"message": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"retryable": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_product_documents
Lire les seuls documents connus et publiables du produit ou de ses appareils liés, avec leur type et les contrôles humains applicables à leur source. Les autres contenus restent à vérifier ; aucune qualification n'est déduite automatiquement.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1,
"description": "PID interne du catalogue actif. PID1843 est le pilote qualifié ; les autres projections restent provisoires en recette."
}
},
"additionalProperties": false
}{
"type": "object",
"$defs": {
"canonical": {
"type": "object",
"$defs": {
"alias": {
"type": "object",
"required": [
"value",
"kind",
"evidence"
],
"properties": {
"kind": {
"enum": [
"commercial_name",
"spelling_variant"
]
},
"value": {
"type": "string",
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"https": {
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
"image": {
"type": "object",
"required": [
"url",
"role",
"mediaType",
"evidence"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
"role": {
"enum": [
"primary",
"secondary"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"mediaType": {
"anyOf": [
{
"enum": [
"image/jpeg",
"image/png",
"image/webp",
"image/avif"
]
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"issue": {
"type": "object",
"required": [
"code",
"path",
"severity",
"message",
"sourceRefs"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"path": {
"type": "string",
"pattern": "^/"
},
"message": {
"type": "string",
"minLength": 1
},
"severity": {
"enum": [
"info",
"review_required",
"publication_blocker"
]
},
"sourceRefs": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 0,
"uniqueItems": true
}
},
"additionalProperties": false
},
"price": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"taxRate": {
"type": "null"
},
"amountHt": {
"type": "null"
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
},
"amountTtc": {
"type": "null"
},
"validUntil": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "observed"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"enum": [
"observed",
"validated"
]
}
}
},
"amountTtc": {
"type": "string",
"pattern": "^(?:0|[1-9][0-9]*)\\.[0-9]{2}$"
}
}
}
},
{
"if": {
"properties": {
"validUntil": {
"type": "string"
}
}
},
"else": {
"properties": {
"validityEvidence": {
"type": "null"
}
}
},
"then": {
"properties": {
"validityEvidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
}
}
}
],
"required": [
"status",
"amountTtc",
"amountHt",
"currency",
"taxRate",
"validUntil",
"evidence",
"validityEvidence"
],
"properties": {
"status": {
"enum": [
"observed",
"unknown"
]
},
"taxRate": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:0|[1-9][0-9]{0,2})(?:\\.[0-9]{1,2})?$"
},
{
"type": "null"
}
]
},
"amountHt": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:0|[1-9][0-9]*)\\.[0-9]{2}$"
},
{
"type": "null"
}
]
},
"currency": {
"const": "EUR"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"amountTtc": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:0|[1-9][0-9]*)\\.[0-9]{2}$"
},
{
"type": "null"
}
]
},
"validUntil": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
]
},
"validityEvidence": {
"anyOf": [
{
"$ref": "#/$defs/canonical/$defs/evidence"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"stock": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"managed": {
"enum": [
false,
null
]
}
}
},
"then": {
"properties": {
"quantity": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"const": "public"
}
}
},
"then": {
"properties": {
"quantity": {
"type": "null"
},
"rawQuantity": {
"type": "null"
}
}
}
}
],
"required": [
"managed",
"quantity",
"rawQuantity",
"visibility",
"evidence"
],
"properties": {
"counted": {
"type": "boolean"
},
"managed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"quantity": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"visibility": {
"enum": [
"internal",
"public"
]
},
"rawQuantity": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"source": {
"type": "object",
"allOf": [
{
"anyOf": [
{
"properties": {
"url": {
"$ref": "#/$defs/canonical/$defs/https"
}
}
},
{
"properties": {
"artifactPath": {
"type": "string"
}
}
},
{
"properties": {
"kind": {
"const": "catalogue_read"
}
}
},
{
"properties": {
"kind": {
"const": "human_review"
}
}
}
]
},
{
"if": {
"properties": {
"visibility": {
"const": "public"
}
}
},
"then": {
"allOf": [
{
"if": {
"properties": {
"kind": {
"enum": [
"catalogue_read",
"human_review"
]
}
}
},
"else": {
"properties": {
"url": {
"$ref": "#/$defs/canonical/$defs/https"
}
}
},
"then": {
"type": "object"
}
}
],
"properties": {
"artifactPath": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "catalogue_read"
}
}
},
"then": {
"properties": {
"observedAt": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
}
],
"required": [
"id",
"kind",
"url",
"artifactPath",
"locator",
"observedOn",
"observedAt",
"visibility",
"sha256"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"url": {
"anyOf": [
{
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
{
"type": "null"
}
]
},
"kind": {
"enum": [
"backoffice",
"public_page",
"manufacturer_document",
"audit_record",
"historical_capture",
"catalogue_read",
"human_review"
]
},
"sha256": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-fA-F0-9]{64}$"
},
{
"type": "null"
}
]
},
"locator": {
"type": "string",
"minLength": 1
},
"observedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"observedOn": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"visibility": {
"enum": [
"public",
"internal"
]
},
"artifactPath": {
"anyOf": [
{
"type": "string",
"pattern": "^(?!/)(?!.*\\.\\.)(?!.*\\\\)[A-Za-z0-9_./-]+$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"target": {
"type": "object",
"anyOf": [
{
"properties": {
"productId": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
}
}
},
{
"properties": {
"reference": {
"type": "string",
"minLength": 1
}
}
}
],
"required": [
"productId",
"reference",
"label"
],
"properties": {
"label": {
"type": "string",
"minLength": 1
},
"productId": {
"anyOf": [
{
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
},
{
"type": "null"
}
]
},
"reference": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"category": {
"type": "object",
"required": [
"legacyId",
"name",
"evidence"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"legacyId": {
"anyOf": [
{
"type": "integer",
"minimum": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"document": {
"type": "object",
"required": [
"id",
"kind",
"title",
"url",
"mediaType",
"scope",
"contentInspection",
"evidence"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"url": {
"anyOf": [
{
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
{
"type": "null"
}
]
},
"kind": {
"enum": [
"manual",
"technical_sheet",
"certificate",
"unknown",
"user_manual",
"installation_manual",
"parts_diagram",
"commercial",
"other",
"irrelevant"
]
},
"scope": {
"type": "object",
"required": [
"type",
"productId"
],
"properties": {
"type": {
"enum": [
"product",
"related_appliance"
]
},
"productId": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
}
},
"additionalProperties": false
},
"title": {
"type": "string",
"minLength": 1
},
"decision": {
"$ref": "#/$defs/canonical/$defs/humanDecision"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"mediaType": {
"anyOf": [
{
"enum": [
"application/pdf",
"text/html",
"image/jpeg",
"image/png"
]
},
{
"type": "null"
}
]
},
"reviewStatus": {
"enum": [
"relevant",
"not_relevant",
"unreadable",
"wrong_appliance"
]
},
"contentInspection": {
"enum": [
"not_inspected",
"partially_inspected",
"inspected"
]
},
"confirmedAppliance": {
"type": "string",
"maxLength": 150
}
},
"additionalProperties": false
},
"evidence": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"observed",
"inferred",
"validated"
]
}
}
},
"then": {
"properties": {
"sourceRefs": {
"minItems": 1
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
},
"then": {
"properties": {
"confidence": {
"const": "unknown"
}
}
}
}
],
"required": [
"status",
"confidence",
"sourceRefs",
"note"
],
"properties": {
"note": {
"type": "string",
"minLength": 1
},
"status": {
"enum": [
"observed",
"inferred",
"unconfirmed",
"validated"
]
},
"confidence": {
"enum": [
"high",
"medium",
"low",
"unknown"
]
},
"sourceRefs": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 0,
"uniqueItems": true
}
},
"additionalProperties": false
},
"relation": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"qualification": {
"const": "confirmed"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "validated"
}
}
}
}
}
}
],
"required": [
"target",
"qualification",
"evidence"
],
"properties": {
"target": {
"$ref": "#/$defs/canonical/$defs/target"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"qualification": {
"enum": [
"asserted",
"confirmed",
"unknown"
]
}
},
"additionalProperties": false
},
"appliance": {
"type": "object",
"required": [
"productId",
"brand",
"model",
"reference"
],
"properties": {
"brand": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"model": {
"type": "string",
"minLength": 1
},
"productId": {
"anyOf": [
{
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
},
{
"type": "null"
}
]
},
"reference": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"statement": {
"type": "object",
"required": [
"text",
"evidence"
],
"properties": {
"text": {
"type": "string",
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"identifier": {
"type": "object",
"required": [
"kind",
"value",
"evidence"
],
"properties": {
"kind": {
"enum": [
"manufacturer_reference_displayed",
"adaptable_reference",
"legacy_public_sku",
"gtin",
"other",
"nitech_reference",
"former_reference",
"supplier_reference",
"unknown"
]
},
"value": {
"type": "string",
"minLength": 1
},
"decision": {
"$ref": "#/$defs/canonical/$defs/humanDecision"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"measurement": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"amount",
"unit",
"qualifier"
],
"properties": {
"kind": {
"const": "number"
},
"unit": {
"type": "string",
"minLength": 1
},
"amount": {
"type": "string",
"pattern": "^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?$"
},
"qualifier": {
"enum": [
"exact",
"approximate"
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"text",
"unit",
"interpretation"
],
"properties": {
"kind": {
"const": "text"
},
"text": {
"type": "string",
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"interpretation": {
"enum": [
"literal",
"ambiguous"
]
}
},
"additionalProperties": false
}
]
},
"availability": {
"type": "object",
"required": [
"status",
"orderable",
"observations",
"evidence"
],
"properties": {
"status": {
"enum": [
"in_stock",
"out_of_stock",
"on_order",
"preorder",
"unknown",
"conflicting",
"on_request",
"not_for_sale"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"orderable": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"observations": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/availabilityObservation"
},
"minItems": 0
}
},
"additionalProperties": false
},
"explodedView": {
"type": "object",
"required": [
"id",
"appliance",
"planUrl",
"version",
"documentIds",
"occurrences",
"evidence"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"planUrl": {
"anyOf": [
{
"type": "string",
"format": "uri",
"pattern": "^https://[^\\s]+$"
},
{
"type": "null"
}
]
},
"version": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"appliance": {
"$ref": "#/$defs/canonical/$defs/appliance"
},
"documentIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 0,
"uniqueItems": true
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"required": [
"productId",
"marker"
],
"properties": {
"marker": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"productId": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
}
},
"additionalProperties": false
},
"minItems": 1
}
},
"additionalProperties": false
},
"compatibility": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"confirmed",
"incompatible"
]
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "validated"
}
}
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"target",
"status",
"scope",
"evidence"
],
"properties": {
"scope": {
"type": "string",
"minLength": 1
},
"status": {
"enum": [
"asserted",
"confirmed",
"incompatible",
"unknown",
"conflicting",
"verified",
"inferred"
]
},
"target": {
"$ref": "#/$defs/canonical/$defs/appliance"
},
"decision": {
"$ref": "#/$defs/canonical/$defs/humanDecision"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"humanDecision": {
"type": "object",
"required": [
"id",
"outcome",
"at",
"sourceFingerprint",
"sourceRef"
],
"properties": {
"at": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
"id": {
"type": "integer",
"minimum": 1
},
"outcome": {
"enum": [
"relevant",
"not_relevant",
"unreadable",
"wrong_appliance",
"confirmed",
"rejected",
"qualified"
]
},
"sourceRef": {
"type": "string",
"pattern": "^human-decision-[1-9][0-9]*$"
},
"sourceFingerprint": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"additionalProperties": false
},
"relationGroup": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/relation"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"specification": {
"type": "object",
"required": [
"key",
"label",
"value",
"sourceText",
"evidence"
],
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"label": {
"type": "string",
"minLength": 1
},
"value": {
"$ref": "#/$defs/canonical/$defs/measurement"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"sourceText": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"availabilityObservation": {
"type": "object",
"required": [
"sourceRef",
"channel",
"reportedStatus",
"rawValue"
],
"properties": {
"channel": {
"enum": [
"human",
"jsonld",
"backoffice"
]
},
"rawValue": {
"type": "string",
"minLength": 1
},
"sourceRef": {
"type": "string",
"minLength": 1
},
"reportedStatus": {
"enum": [
"in_stock",
"out_of_stock",
"on_order",
"preorder",
"for_sale",
"unknown"
]
}
},
"additionalProperties": false
}
},
"allOf": [
{
"if": {
"properties": {
"recordType": {
"const": "source_snapshot"
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"policy": {
"const": "snapshot_only"
},
"expiresAt": {
"type": "null"
}
}
}
}
},
"visibility": {
"properties": {
"record": {
"const": "internal"
},
"publication": {
"const": "not_approved"
}
}
}
}
}
},
{
"if": {
"properties": {
"verification": {
"properties": {
"status": {
"const": "pending_business_review"
}
}
}
}
},
"then": {
"properties": {
"verification": {
"properties": {
"verifiedAt": {
"type": "null"
},
"verifiedBy": {
"type": "null"
}
}
}
}
}
},
{
"if": {
"properties": {
"verification": {
"properties": {
"status": {
"const": "approved"
}
}
}
}
},
"then": {
"properties": {
"verification": {
"properties": {
"verifiedAt": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
"verifiedBy": {
"type": "string",
"minLength": 1
}
}
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"properties": {
"publication": {
"const": "approved"
}
}
}
}
},
"then": {
"properties": {
"recordType": {
"const": "canonical_product"
},
"verification": {
"properties": {
"status": {
"const": "approved"
}
}
}
}
}
},
{
"if": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"policy": {
"const": "bounded"
}
}
}
}
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"expiresAt": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
}
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"properties": {
"record": {
"const": "public"
}
}
}
}
},
"then": {
"properties": {
"visibility": {
"properties": {
"publication": {
"enum": [
"approved",
"published_read_only"
]
}
}
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"const": "0.1.0"
}
}
},
"else": {
"allOf": [
{
"if": {
"properties": {
"visibility": {
"properties": {
"record": {
"const": "preview"
}
}
}
}
},
"then": {
"properties": {
"recordType": {
"const": "canonical_product"
},
"visibility": {
"properties": {
"publication": {
"const": "not_approved"
}
}
},
"verification": {
"properties": {
"status": {
"const": "pending_business_review"
}
}
}
}
}
},
{
"if": {
"properties": {
"recordType": {
"const": "source_snapshot"
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"freshness_status": {
"const": "source_snapshot"
}
}
}
}
}
}
}
},
{
"if": {
"properties": {
"recordType": {
"const": "canonical_product"
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"freshness": {
"properties": {
"freshness_status": {
"enum": [
"not_certified",
"unknown",
"current_read"
]
}
}
}
}
}
}
}
}
],
"properties": {
"offer": {
"properties": {
"freshness": {
"allOf": [
{
"if": {
"properties": {
"freshness_status": {
"const": "source_snapshot"
}
}
},
"then": {
"properties": {
"policy": {
"const": "snapshot_only"
}
}
}
},
{
"if": {
"properties": {
"freshness_status": {
"const": "not_certified"
}
}
},
"then": {
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
},
{
"if": {
"properties": {
"freshness_status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "null"
},
"verified_at": {
"type": "null"
}
}
}
}
],
"required": [
"source_updated_at",
"observed_at",
"verified_at",
"freshness_status"
],
"properties": {
"policy": {
"enum": [
"snapshot_only",
"observation_only"
]
},
"expiresAt": {
"type": "null"
}
}
},
"availability": {
"properties": {
"status": {
"enum": [
"in_stock",
"out_of_stock",
"unknown",
"on_request",
"not_for_sale"
]
}
}
}
}
},
"compatibilities": {
"properties": {
"items": {
"items": {
"allOf": [
{
"if": {
"properties": {
"status": {
"enum": [
"verified",
"incompatible"
]
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "validated"
}
}
},
"verified_at": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "inferred"
}
}
},
"then": {
"properties": {
"evidence": {
"properties": {
"status": {
"const": "inferred"
},
"sourceRefs": {
"minItems": 1
}
}
},
"verified_at": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"status": {
"const": "unknown"
}
}
},
"then": {
"properties": {
"verified_at": {
"type": "null"
}
}
}
}
],
"required": [
"verified_at"
],
"properties": {
"status": {
"enum": [
"verified",
"inferred",
"incompatible",
"unknown"
]
},
"evidence": {
"properties": {
"sourceRefs": {
"minItems": 1
}
}
}
}
}
}
}
}
}
},
"then": {
"properties": {
"offer": {
"properties": {
"stock": {
"properties": {
"quantity": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
]
}
}
},
"freshness": {
"properties": {
"policy": {
"enum": [
"snapshot_only",
"bounded"
]
},
"observed_at": {
"not": {}
},
"verified_at": {
"not": {}
},
"freshness_status": {
"not": {}
},
"source_updated_at": {
"not": {}
}
}
},
"availability": {
"properties": {
"status": {
"enum": [
"in_stock",
"out_of_stock",
"on_order",
"preorder",
"unknown",
"conflicting"
]
}
}
}
}
},
"provenance": {
"properties": {
"sources": {
"items": {
"properties": {
"kind": {
"enum": [
"backoffice",
"public_page",
"manufacturer_document",
"audit_record",
"historical_capture"
]
}
}
}
}
}
},
"visibility": {
"properties": {
"record": {
"enum": [
"internal",
"public"
]
}
}
},
"compatibilities": {
"properties": {
"items": {
"items": {
"properties": {
"status": {
"enum": [
"asserted",
"confirmed",
"incompatible",
"unknown",
"conflicting"
]
},
"verified_at": {
"not": {}
}
}
}
}
}
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"const": "0.1.0"
}
}
},
"then": {
"properties": {
"names": {
"properties": {
"preferred": {
"type": "string"
}
}
},
"references": {
"properties": {
"identifiers": {
"minItems": 1
}
}
},
"classification": {
"properties": {
"brandLabel": {
"properties": {
"name": {
"type": "string"
}
}
},
"categoryPath": {
"minItems": 1
}
}
}
}
}
},
{
"if": {
"properties": {
"visibility": {
"properties": {
"publication": {
"const": "published_read_only"
}
}
}
}
},
"then": {
"properties": {
"recordType": {
"const": "canonical_product"
},
"visibility": {
"properties": {
"record": {
"const": "public"
}
}
},
"verification": {
"properties": {
"status": {
"const": "pending_business_review"
}
}
},
"schemaVersion": {
"enum": [
"0.1.1",
"0.1.2",
"0.1.3"
]
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"enum": [
"0.1.2",
"0.1.3"
]
}
}
},
"else": {
"properties": {
"offer": {
"not": {
"anyOf": [
{
"required": [
"sale_status"
]
},
{
"required": [
"order_mode"
]
},
{
"required": [
"order_reason"
]
},
{
"required": [
"review_reasons"
]
}
]
},
"properties": {
"stock": {
"not": {
"required": [
"counted"
]
}
},
"freshness": {
"properties": {
"freshness_status": {
"not": {
"const": "current_read"
}
}
}
},
"availability": {
"properties": {
"status": {
"not": {
"const": "not_for_sale"
}
}
}
}
}
}
}
},
"then": {
"properties": {
"offer": {
"required": [
"sale_status",
"order_mode",
"order_reason",
"review_reasons"
],
"properties": {
"stock": {
"required": [
"counted"
]
},
"freshness": {
"properties": {
"policy": {
"const": "observation_only"
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"freshness_status": {
"const": "current_read"
}
}
},
"availability": {
"properties": {
"orderable": {
"type": "boolean"
}
}
}
}
},
"recordType": {
"const": "canonical_product"
}
}
}
},
{
"if": {
"properties": {
"schemaVersion": {
"const": "0.1.3"
}
}
},
"else": {
"properties": {
"documents": {
"properties": {
"items": {
"items": {
"properties": {
"kind": {
"enum": [
"manual",
"technical_sheet",
"certificate",
"unknown"
]
},
"decision": {
"not": {}
},
"reviewStatus": {
"not": {}
},
"confirmedAppliance": {
"not": {}
}
}
}
}
}
},
"provenance": {
"properties": {
"sources": {
"items": {
"properties": {
"kind": {
"not": {
"const": "human_review"
}
}
}
}
}
}
},
"references": {
"properties": {
"identifiers": {
"items": {
"properties": {
"kind": {
"enum": [
"manufacturer_reference_displayed",
"adaptable_reference",
"legacy_public_sku",
"gtin",
"other"
]
},
"decision": {
"not": {}
}
}
}
}
}
},
"humanReview": {
"not": {}
},
"compatibilities": {
"properties": {
"items": {
"items": {
"properties": {
"decision": {
"not": {}
}
}
}
}
}
}
}
},
"then": {
"required": [
"humanReview"
]
}
}
],
"title": "Nitech — produit canonique v0.1",
"required": [
"schemaVersion",
"recordRevision",
"recordType",
"identity",
"references",
"names",
"classification",
"description",
"specifications",
"compatibilities",
"relations",
"offer",
"images",
"documents",
"explodedViews",
"provenance",
"verification",
"visibility"
],
"properties": {
"names": {
"type": "object",
"required": [
"preferred",
"aliases",
"evidence"
],
"properties": {
"aliases": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/alias"
},
"minItems": 0
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"preferred": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 1
}
},
"additionalProperties": false
},
"offer": {
"type": "object",
"required": [
"context",
"price",
"stock",
"availability",
"delivery",
"freshness"
],
"properties": {
"price": {
"$ref": "#/$defs/canonical/$defs/price"
},
"stock": {
"$ref": "#/$defs/canonical/$defs/stock"
},
"context": {
"type": "object",
"required": [
"market",
"channel",
"seller",
"shippingIncluded",
"evidence"
],
"properties": {
"market": {
"const": "FR"
},
"seller": {
"const": "Nitech"
},
"channel": {
"const": "retail"
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"shippingIncluded": {
"const": false
}
},
"additionalProperties": false
},
"delivery": {
"type": "object",
"required": [
"text",
"evidence"
],
"properties": {
"text": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"freshness": {
"type": "object",
"required": [
"asOf",
"policy",
"expiresAt",
"evidence"
],
"properties": {
"asOf": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"policy": {
"enum": [
"snapshot_only",
"bounded",
"observation_only"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"expiresAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Heure réelle de lecture courante de la base Nitech."
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Instant de vérification métier de cette offre, distinct de sa lecture ; null en l'absence de vérification."
},
"freshness_status": {
"enum": [
"source_snapshot",
"not_certified",
"unknown",
"current_read"
],
"description": "current_read : quantité courante observée ; aucun délai de fraîcheur inventé."
},
"source_updated_at": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
],
"description": "Précision réelle de la source : date SQL conservée comme date, instant seulement si connu ; null si inconnu."
}
},
"additionalProperties": false
},
"order_mode": {
"enum": [
"online",
"contact_only",
"disabled"
]
},
"sale_status": {
"enum": [
"on_sale",
"not_on_sale"
]
},
"availability": {
"$ref": "#/$defs/canonical/$defs/availability"
},
"order_reason": {
"enum": [
"not_for_sale",
"sale_mode_undecided",
"stock_not_counted",
"untracked_orders_allowed",
"stock_empty",
"unavailable_orders_allowed",
"stock_available"
]
},
"review_reasons": {
"type": "array",
"items": {
"enum": [
"stock_not_counted",
"sale_mode_undecided",
"on_sale_not_orderable"
]
},
"maxItems": 3,
"uniqueItems": true
}
},
"additionalProperties": false
},
"images": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/image"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"identity": {
"type": "object",
"required": [
"id",
"legacyPid",
"kind",
"evidence"
],
"properties": {
"id": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
},
"kind": {
"enum": [
"spare_part",
"product",
"appliance"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"legacyPid": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
},
"documents": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/document"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"relations": {
"type": "object",
"required": [
"replaces",
"replacedBy",
"alternatives",
"accessories"
],
"properties": {
"replaces": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
},
"replacedBy": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
},
"accessories": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
},
"alternatives": {
"$ref": "#/$defs/canonical/$defs/relationGroup"
}
},
"additionalProperties": false
},
"provenance": {
"type": "object",
"required": [
"snapshotOn",
"sourceModifiedOn",
"sources",
"issues"
],
"properties": {
"issues": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/issue"
},
"minItems": 0
},
"sources": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/source"
},
"minItems": 1
},
"snapshotOn": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"sourceModifiedOn": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"recordType": {
"enum": [
"source_snapshot",
"canonical_product"
]
},
"references": {
"type": "object",
"required": [
"merchantSku",
"identifiers",
"evidence"
],
"properties": {
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"identifiers": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/identifier"
},
"minItems": 0
},
"merchantSku": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"visibility": {
"type": "object",
"required": [
"record",
"publication",
"evidence"
],
"properties": {
"record": {
"enum": [
"internal",
"public",
"preview"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"publication": {
"enum": [
"not_approved",
"approved",
"published_read_only"
],
"description": "published_read_only décrit la diffusion publique autorisée sans approbation de revue métier ; approved conserve son sens historique de publication après revue."
}
},
"additionalProperties": false
},
"description": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/statement"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"humanReview": {
"type": "object",
"required": [
"status",
"productFingerprint",
"reviewedFingerprint",
"reviewedAt"
],
"properties": {
"status": {
"enum": [
"pending",
"reviewed"
]
},
"reviewedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"productFingerprint": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"reviewedFingerprint": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"verification": {
"type": "object",
"required": [
"status",
"verifiedAt",
"verifiedBy"
],
"properties": {
"status": {
"enum": [
"pending_business_review",
"approved"
]
},
"verifiedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T.*(?:Z|[+-]\\d{2}:\\d{2})$"
},
{
"type": "null"
}
]
},
"verifiedBy": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"description": "Revue des assertions qualifiées (evidence.status=validated) et de leur publication examinée ; ne certifie pas chaque observation commerciale ultérieure. Une validation ne se transfère pas à une valeur/provenance modifiée.",
"additionalProperties": false
},
"canonical_url": {
"type": "string",
"format": "uri",
"pattern": "^https://catalogue\\.nitech\\.fr/produits/[1-9][0-9]{0,9}$"
},
"explodedViews": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/explodedView"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"schemaVersion": {
"enum": [
"0.1.0",
"0.1.1",
"0.1.2",
"0.1.3"
]
},
"classification": {
"type": "object",
"required": [
"brandLabel",
"manufacturer",
"categoryPath",
"evidence"
],
"properties": {
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
},
"brandLabel": {
"type": "object",
"required": [
"name",
"evidence"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 1
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"categoryPath": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/category"
},
"minItems": 0
},
"manufacturer": {
"type": "object",
"required": [
"name",
"evidence"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"recordRevision": {
"type": "integer",
"minimum": 1
},
"specifications": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/specification"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
},
"compatibilities": {
"type": "object",
"allOf": [
{
"if": {
"properties": {
"coverage": {
"const": "not_assessed"
}
}
},
"then": {
"properties": {
"items": {
"maxItems": 0
},
"evidence": {
"properties": {
"status": {
"const": "unconfirmed"
}
}
}
}
}
}
],
"required": [
"coverage",
"scope",
"items",
"evidence"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/compatibility"
},
"minItems": 0
},
"scope": {
"type": "string",
"minLength": 1
},
"coverage": {
"enum": [
"not_assessed",
"partial",
"reviewed_scope"
]
},
"evidence": {
"$ref": "#/$defs/canonical/$defs/evidence"
}
},
"additionalProperties": false
}
},
"description": "0.1.3 : qualifications humaines distinctes, liées à une source stable ; lecture commerciale courante inchangée.",
"additionalProperties": false
}
},
"oneOf": [
{
"type": "object",
"required": [
"product_id",
"qualification_status",
"status",
"documents",
"withheld_count",
"verified_document_count",
"observed_at",
"uncertainties"
],
"properties": {
"status": {
"enum": [
"documents_available",
"no_public_documents"
]
},
"documents": {
"type": "array",
"items": {
"type": "object",
"required": [
"document_id",
"document_type",
"title",
"filename",
"url",
"scope",
"sources",
"document_date",
"version",
"verification_status",
"verified_at",
"previous_content_inspection",
"publication"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"pattern": "^https://www\\.(?:direct-chaudiere\\.com|nitech-negoce\\.com)/img/produits/(?:p_pdf|p_eclates)/[^/?#]+$"
},
"scope": {
"type": "object",
"required": [
"type",
"productId"
],
"properties": {
"type": {
"enum": [
"product",
"related_appliance"
]
},
"productId": {
"type": "string",
"pattern": "^nitech:product:[1-9][0-9]*$"
}
},
"additionalProperties": false
},
"title": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"sources": {
"type": "array",
"items": {
"$ref": "#/$defs/canonical/$defs/source"
},
"maxItems": 10
},
"version": {
"type": "null"
},
"filename": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"document_id": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"publication": {
"const": "public_link"
},
"verified_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"format": "date-time"
},
"document_date": {
"type": "null"
},
"document_type": {
"enum": [
"manual",
"technical_sheet",
"certificate",
"unknown",
"user_manual",
"installation_manual",
"parts_diagram",
"commercial",
"other",
"irrelevant"
]
},
"verification_status": {
"enum": [
"not_reverified",
"human_verified"
]
},
"previous_content_inspection": {
"enum": [
"not_inspected",
"partially_inspected",
"inspected"
]
}
},
"additionalProperties": false
},
"maxItems": 403
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"uncertainties": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z_]{3,80}$"
},
"maxItems": 12
},
"withheld_count": {
"type": "integer",
"maximum": 403,
"minimum": 0
},
"qualification_status": {
"enum": [
"pilot_qualified",
"provisional"
]
},
"verified_document_count": {
"type": "integer",
"maximum": 403,
"minimum": 0
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[A-Z_]{3,64}$"
},
"message": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"retryable": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}find_compatibility_evidence
Retrouver les preuves publiables pièce/appareil du pilote. verified exige une décision humaine active liée à la preuve exacte, au SHA, à la page et au repère courants. stale_source impose une nouvelle vérification. Les scores ne sont pas des probabilités de compatibilité.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"part",
"appliance"
],
"properties": {
"part": {
"type": "string",
"pattern": "^[A-Za-z0-9.-]+$",
"maxLength": 80,
"minLength": 1
},
"appliance": {
"type": "string",
"pattern": "^[A-Za-z0-9.-]+$",
"maxLength": 80,
"minLength": 1
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"allOf": [
{
"if": {
"properties": {
"compatibility": {
"const": "verified"
}
}
},
"then": {
"properties": {
"evidence": {
"contains": {
"type": "object",
"required": [
"status",
"human_decision_id",
"validated_at"
],
"properties": {
"status": {
"const": "validated"
},
"validated_at": {
"type": "string",
"minLength": 1
},
"human_decision_id": {
"type": "integer",
"minimum": 1
}
}
},
"minItems": 1
},
"human_validation_status": {
"const": "confirmed"
}
}
}
},
{
"if": {
"properties": {
"compatibility": {
"const": "rejected"
}
}
},
"then": {
"properties": {
"human_validation_status": {
"const": "rejected"
}
}
}
},
{
"if": {
"properties": {
"compatibility": {
"enum": [
"candidate",
"unknown"
]
}
}
},
"then": {
"properties": {
"human_validation_status": {
"const": "not_validated"
}
}
}
}
],
"required": [
"compatibility",
"conclusion",
"part",
"appliance",
"evidence",
"human_validation_status"
],
"properties": {
"part": {
"type": "object",
"required": [
"pid",
"reference"
],
"properties": {
"pid": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"minimum": 1
},
"reference": {
"type": "string",
"maxLength": 80
}
},
"additionalProperties": false
},
"evidence": {
"type": "array",
"items": {
"type": "object",
"required": [
"evidence_id",
"document_id",
"sha256",
"physical_page",
"printed_page",
"marker",
"observed_reference",
"status",
"source_uri"
],
"properties": {
"bbox": {
"oneOf": [
{
"type": "null"
},
{
"type": "array",
"items": {
"type": "number"
},
"maxItems": 4,
"minItems": 4
}
]
},
"marker": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"maxLength": 2000
},
"reason": {
"type": "string",
"maxLength": 2000
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"status": {
"enum": [
"candidate",
"validated",
"rejected",
"invalidated"
]
},
"excerpt": {
"type": "string",
"maxLength": 2000
},
"part_pid": {
"type": "integer",
"minimum": 1
},
"appliance": {
"type": "string",
"maxLength": 2000
},
"confidence": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"source_uri": {
"type": "string",
"format": "uri",
"pattern": "^https://www\\.(?:direct-chaudiere\\.com|nitech-negoce\\.com)/img/produits/(?:p_pdf|p_eclates)/[A-Za-z0-9._%-]+#page=[1-9][0-9]*$"
},
"document_id": {
"type": "string",
"maxLength": 2000
},
"evidence_id": {
"type": "string",
"maxLength": 2000
},
"manufacturer": {
"type": "string",
"maxLength": 2000
},
"printed_page": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"maxLength": 2000
},
"validated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"maxLength": 2000
},
"document_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"maxLength": 2000
},
"physical_page": {
"type": "integer",
"maximum": 200,
"minimum": 1
},
"relation_type": {
"type": "string",
"maxLength": 2000
},
"engine_version": {
"type": "string",
"maxLength": 2000
},
"schema_version": {
"type": "string",
"maxLength": 2000
},
"figure_or_table": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"maxLength": 2000
},
"document_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"maxLength": 2000
},
"extraction_method": {
"type": "string",
"maxLength": 2000
},
"human_decision_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"minimum": 1
},
"appliance_observed": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 30
},
"observed_reference": {
"type": "string",
"maxLength": 2000
},
"observed_designation": {
"type": "string",
"maxLength": 2000
}
},
"additionalProperties": false
},
"maxItems": 30
},
"appliance": {
"type": "object",
"required": [
"pid",
"reference"
],
"properties": {
"pid": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"minimum": 1
},
"reference": {
"type": "string",
"maxLength": 80
}
},
"additionalProperties": false
},
"conclusion": {
"type": "string",
"maxLength": 2000
},
"compatibility": {
"enum": [
"verified",
"candidate",
"rejected",
"unknown",
"stale_source"
]
},
"human_validation_status": {
"enum": [
"confirmed",
"rejected",
"not_validated"
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[A-Z_]{3,64}$"
},
"message": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"retryable": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}quote_cart_shipping
Calculer le port actuel depuis les produits, profils et zones Nitech relus à chaque appel. Entrées : pays, code postal requis pour la France, product_id et quantity. Limites : 30 lignes, 100 unités par produit, 300 au total. Renvoie HT, TVA, TTC, zone, groupes tarifaires et politique observée. Ce résultat n’est pas une réservation ; aucune commande n’est créée ; montant à relire lors d’une future commande. Le calcul commercial des boutiques reste autoritaire.
{
"$id": "https://catalogue.nitech.fr/schemas/mcp/quote-cart-shipping-input-v0.1.schema.json",
"type": "object",
"title": "Calculer le port actuel Nitech",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"destination",
"lines"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 30,
"minItems": 1
},
"destination": {
"type": "object",
"required": [
"country_code"
],
"properties": {
"postal_code": {
"type": "string",
"pattern": "^[A-Za-z0-9 -]*$",
"maxLength": 12
},
"country_code": {
"type": "string",
"pattern": "^[A-Za-z]{2}$"
}
},
"additionalProperties": false
}
},
"description": "Lecture seule. Code postal requis pour la France. 30 lignes, 100 unités par produit, 300 unités au total. Aucun prix, poids ou profil fourni par le client.",
"additionalProperties": false
}{
"$id": "https://catalogue.nitech.fr/schemas/mcp/quote-cart-shipping-output-v0.1.schema.json",
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"schema_version",
"status",
"policy_version",
"effective_from",
"effective_from_basis",
"observed_at",
"currency",
"destination",
"zone",
"lines",
"parcels",
"parcel_count",
"parcel_basis",
"rules_applied",
"shipping_amount_ht",
"tax_rate",
"tax_basis",
"shipping_amount_ttc",
"warnings",
"result_is_reservation",
"order_created",
"must_recheck_at_order",
"commercial_authority",
"notice",
"read_only"
]
},
{
"required": [
"error"
],
"maxProperties": 1
}
],
"title": "Port courant ou erreur bornée, sans création commerciale",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [],
"properties": {
"zone": {
"type": "object",
"required": [
"id",
"label",
"default_amount_ht"
],
"properties": {
"id": {
"type": "integer"
},
"label": {
"type": "string",
"maxLength": 160
},
"default_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
}
},
"additionalProperties": false
},
"error": {
"type": "object",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"enum": [
"EMPTY_CART",
"INVALID_QUANTITY",
"INVALID_ARGUMENTS",
"PRODUCT_NOT_AVAILABLE",
"INCOMPLETE_LOGISTICS_PROFILE",
"DESTINATION_NOT_SERVED",
"ZONE_UNDETERMINED",
"CURRENT_RULE_UNSUPPORTED",
"SOURCE_UNAVAILABLE",
"BACKEND_ACCESS_DENIED",
"BACKEND_TIMEOUT",
"BACKEND_UNAVAILABLE",
"BACKEND_RESPONSE_INVALID",
"BACKEND_RESPONSE_TOO_LARGE",
"CANONICAL_INVALID",
"CANONICAL_UNAVAILABLE"
],
"type": "string"
},
"message": {
"type": "string",
"maxLength": 240,
"minLength": 1
},
"retryable": {
"type": "boolean"
}
},
"additionalProperties": false
},
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"quantity",
"unit_amount_ht",
"pricing_mode",
"individual_parcel"
],
"properties": {
"quantity": {
"type": "integer"
},
"product_id": {
"type": "integer"
},
"pricing_mode": {
"enum": [
"zone_default",
"free",
"no_shipping",
"special_rate"
],
"type": "string"
},
"unit_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
},
"individual_parcel": {
"type": "boolean"
}
},
"additionalProperties": false
},
"maxItems": 30,
"minItems": 1
},
"notice": {
"const": "Ce résultat ne constitue pas une réservation. Aucune commande n’est créée. Le montant devra être relu lors d’une future commande. Le calcul commercial des boutiques Nitech reste autoritaire."
},
"status": {
"const": "quoted"
},
"parcels": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"kind",
"lines",
"amount_ht"
],
"properties": {
"id": {
"type": "string",
"maxLength": 80
},
"kind": {
"enum": [
"shared",
"dedicated"
],
"type": "string"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 30
},
"amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
}
},
"additionalProperties": false
},
"maxItems": 300
},
"currency": {
"const": "EUR"
},
"tax_rate": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
},
"warnings": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
},
"maxItems": 20
},
"read_only": {
"type": "object",
"required": [
"business_writes",
"source",
"consistency"
],
"properties": {
"source": {
"const": "current_nitech_read_only_session"
},
"consistency": {
"const": "best_effort_myisam"
},
"business_writes": {
"const": 0
}
},
"additionalProperties": false
},
"tax_basis": {
"const": "current_order_column_default"
},
"destination": {
"type": "object",
"required": [
"country_code",
"postal_code"
],
"properties": {
"postal_code": {
"type": "string",
"maxLength": 12
},
"country_code": {
"type": "string",
"pattern": "^[A-Z]{2}$"
}
},
"additionalProperties": false
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"parcel_basis": {
"const": "tariff_groups_not_certified_physical_packing"
},
"parcel_count": {
"type": "integer",
"maximum": 300,
"minimum": 0
},
"order_created": {
"const": false
},
"rules_applied": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 20
},
"effective_from": {
"type": "string",
"format": "date-time"
},
"policy_version": {
"type": "string",
"pattern": "^nitech-current-[a-f0-9]{16}$"
},
"schema_version": {
"const": "1.0"
},
"shipping_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
},
"shipping_amount_ttc": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
},
"commercial_authority": {
"const": "nitech_storefront"
},
"effective_from_basis": {
"const": "controlled_observation_start_only; actual_historical_activation_date_unproven"
},
"must_recheck_at_order": {
"const": true
},
"result_is_reservation": {
"const": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}quote_cart
Préparer un devis complet du panier depuis les offres et le port Nitech actuels. Pays et code postal selon la zone, product_id et quantity seulement. 30 lignes distinctes, 100 unités par ligne, 300 au total, 8 Kio. Doublons refusés. Lecture seule sans panier, réservation, commande ni paiement. Toute ligne invalide bloque les totaux. Offres et port à relire lors de la commande ; checkout des boutiques autoritaire.
{
"$id": "https://catalogue.nitech.fr/schemas/mcp/quote-cart-input-v0.1.schema.json",
"type": "object",
"title": "Préparer un devis complet Nitech en lecture seule",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"destination",
"lines"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"quantity"
],
"properties": {
"quantity": {
"type": "integer"
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 30,
"minItems": 0
},
"destination": {
"type": "object",
"required": [
"country_code"
],
"properties": {
"postal_code": {
"type": "string",
"pattern": "^[A-Za-z0-9 -]*$",
"maxLength": 12
},
"country_code": {
"type": "string",
"pattern": "^[A-Za-z]{2}$"
}
},
"additionalProperties": false
}
},
"description": "30 lignes distinctes, 100 unités par ligne, 300 unités au total, 8192 octets JSON. Doublons refusés. Panier vide et quantité invalide : erreurs structurées. France : code postal requis. Aucune donnée personnelle ni donnée commerciale client.",
"additionalProperties": false
}{
"$id": "https://catalogue.nitech.fr/schemas/mcp/quote-cart-output-v0.1.schema.json",
"type": "object",
"anyOf": [
{
"not": {
"required": [
"errors"
]
},
"required": [
"currency",
"lines",
"shipping",
"shipping_tax_amount",
"products_amount_ht",
"products_amount_ttc",
"shipping_amount_ht",
"shipping_amount_ttc",
"grand_total_ht",
"grand_total_ttc",
"tax_breakdown",
"products_rounding_adjustment_ttc",
"rounding",
"warnings"
],
"properties": {
"status": {
"const": "quoted"
}
}
},
{
"required": [
"errors"
],
"properties": {
"status": {
"enum": [
"not_quotable",
"source_unavailable"
]
}
},
"maxProperties": 5
}
],
"title": "Devis complet courant ou erreurs explicites sans totaux partiels",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"schema_version",
"status",
"expires_at",
"scope"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"public_reference",
"designation",
"canonical_url",
"quantity",
"unit_amount_ht",
"unit_amount_ttc",
"tax_rate",
"line_amount_ht",
"line_amount_ttc",
"availability",
"orderable",
"order_mode",
"offer_observed_at"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"tax_rate": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,2})(\\.[0-9]{1,6})?$"
},
"orderable": {
"const": true
},
"order_mode": {
"const": "online"
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"designation": {
"type": "string",
"maxLength": 4000
},
"availability": {
"enum": [
"in_stock",
"out_of_stock",
"unknown"
],
"type": "string"
},
"canonical_url": {
"type": "string",
"pattern": "^https://catalogue\\.nitech\\.fr/produits/[1-9][0-9]{0,9}$"
},
"line_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"unit_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"line_amount_ttc": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"unit_amount_ttc": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"public_reference": {
"anyOf": [
{
"type": "string",
"maxLength": 300
},
{
"type": "null"
}
]
},
"offer_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"maxItems": 30,
"minItems": 1
},
"scope": {
"type": "object",
"required": [
"reservation_created",
"cart_saved",
"order_created",
"stock_reserved",
"payment_created",
"must_recheck_offers_and_shipping_at_order",
"commercial_authority"
],
"properties": {
"cart_saved": {
"const": false
},
"order_created": {
"const": false
},
"stock_reserved": {
"const": false
},
"payment_created": {
"const": false
},
"reservation_created": {
"const": false
},
"commercial_authority": {
"const": "nitech_storefront_checkout"
},
"must_recheck_offers_and_shipping_at_order": {
"const": true
}
},
"additionalProperties": false
},
"errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"code",
"message",
"retryable",
"line_index",
"product_id"
],
"properties": {
"code": {
"enum": [
"EMPTY_CART",
"DUPLICATE_PRODUCT_ID",
"INVALID_QUANTITY",
"INVALID_ARGUMENTS",
"REQUEST_TOO_LARGE",
"PRODUCT_NOT_FOUND",
"PRODUCT_NOT_PUBLIC",
"PRODUCT_NOT_ON_SALE",
"PRODUCT_NOT_ORDERABLE",
"PRICE_UNAVAILABLE",
"CURRENCY_MISMATCH",
"DESTINATION_NOT_SERVED",
"ZONE_UNDETERMINED",
"INCOMPLETE_LOGISTICS_PROFILE",
"CURRENT_RULE_UNSUPPORTED",
"OFFER_SOURCE_UNAVAILABLE",
"SHIPPING_SOURCE_UNAVAILABLE",
"SOURCE_UNAVAILABLE",
"BACKEND_ACCESS_DENIED"
],
"type": "string"
},
"message": {
"type": "string",
"maxLength": 240
},
"retryable": {
"type": "boolean"
},
"line_index": {
"anyOf": [
{
"type": "integer",
"maximum": 29,
"minimum": 0
},
{
"type": "null"
}
]
},
"product_id": {
"anyOf": [
{
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 60,
"minItems": 1
},
"status": {
"enum": [
"quoted",
"not_quotable",
"source_unavailable"
],
"type": "string"
},
"currency": {
"const": "EUR"
},
"rounding": {
"const": "half_up_line_display_and_combined_taxable_base_per_rate; explicit_residual"
},
"shipping": {
"type": "object",
"required": [
"schema_version",
"status",
"policy_version",
"effective_from",
"effective_from_basis",
"observed_at",
"currency",
"destination",
"zone",
"lines",
"parcels",
"parcel_count",
"parcel_basis",
"rules_applied",
"shipping_amount_ht",
"tax_rate",
"tax_basis",
"shipping_amount_ttc",
"warnings",
"result_is_reservation",
"order_created",
"must_recheck_at_order",
"commercial_authority",
"notice",
"read_only"
],
"properties": {
"zone": {
"type": "object",
"required": [
"id",
"label",
"default_amount_ht"
],
"properties": {
"id": {
"type": "integer"
},
"label": {
"type": "string",
"maxLength": 160
},
"default_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
}
},
"additionalProperties": false
},
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"quantity",
"unit_amount_ht",
"pricing_mode",
"individual_parcel"
],
"properties": {
"quantity": {
"type": "integer"
},
"product_id": {
"type": "integer"
},
"pricing_mode": {
"enum": [
"zone_default",
"free",
"no_shipping",
"special_rate"
],
"type": "string"
},
"unit_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
},
"individual_parcel": {
"type": "boolean"
}
},
"additionalProperties": false
},
"maxItems": 30,
"minItems": 1
},
"notice": {
"const": "Ce résultat ne constitue pas une réservation. Aucune commande n’est créée. Le montant devra être relu lors d’une future commande. Le calcul commercial des boutiques Nitech reste autoritaire."
},
"status": {
"const": "quoted"
},
"parcels": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"kind",
"lines",
"amount_ht"
],
"properties": {
"id": {
"type": "string",
"maxLength": 80
},
"kind": {
"enum": [
"shared",
"dedicated"
],
"type": "string"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 30
},
"amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
}
},
"additionalProperties": false
},
"maxItems": 300
},
"currency": {
"const": "EUR"
},
"tax_rate": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
},
"warnings": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
},
"maxItems": 20
},
"read_only": {
"type": "object",
"required": [
"business_writes",
"source",
"consistency"
],
"properties": {
"source": {
"const": "current_nitech_read_only_session"
},
"consistency": {
"const": "best_effort_myisam"
},
"business_writes": {
"const": 0
}
},
"additionalProperties": false
},
"tax_basis": {
"const": "current_order_column_default"
},
"destination": {
"type": "object",
"required": [
"country_code",
"postal_code"
],
"properties": {
"postal_code": {
"type": "string",
"maxLength": 12
},
"country_code": {
"type": "string",
"pattern": "^[A-Z]{2}$"
}
},
"additionalProperties": false
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"parcel_basis": {
"const": "tariff_groups_not_certified_physical_packing"
},
"parcel_count": {
"type": "integer",
"maximum": 300,
"minimum": 0
},
"order_created": {
"const": false
},
"rules_applied": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 20
},
"effective_from": {
"type": "string",
"format": "date-time"
},
"policy_version": {
"type": "string",
"pattern": "^nitech-current-[a-f0-9]{16}$"
},
"schema_version": {
"const": "1.0"
},
"shipping_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
},
"shipping_amount_ttc": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,8})\\.[0-9]{2}$"
},
"commercial_authority": {
"const": "nitech_storefront"
},
"effective_from_basis": {
"const": "controlled_observation_start_only; actual_historical_activation_date_unproven"
},
"must_recheck_at_order": {
"const": true
},
"result_is_reservation": {
"const": false
}
},
"additionalProperties": false
},
"warnings": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
},
"maxItems": 21
},
"expires_at": {
"type": "null"
},
"tax_breakdown": {
"type": "array",
"items": {
"type": "object",
"required": [
"tax_rate",
"products_amount_ht",
"products_tax_amount",
"shipping_amount_ht",
"shipping_tax_amount",
"taxable_amount_ht",
"tax_amount",
"line_tax_sum",
"rounding_adjustment_ttc"
],
"properties": {
"tax_rate": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,2})(\\.[0-9]{1,6})?$"
},
"tax_amount": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"line_tax_sum": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"taxable_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"products_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"shipping_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"products_tax_amount": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"shipping_tax_amount": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"rounding_adjustment_ttc": {
"type": "string",
"pattern": "^-?(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
}
},
"additionalProperties": false
},
"maxItems": 31,
"minItems": 1
},
"grand_total_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"schema_version": {
"const": "1.0"
},
"grand_total_ttc": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"products_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"shipping_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"products_amount_ttc": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"shipping_amount_ttc": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"shipping_tax_amount": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"products_rounding_adjustment_ttc": {
"type": "string",
"pattern": "^-?(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_order
Créer une vraie commande Nitech dans le canal MCP autonome, sans boutique Web ni paiement. Appeler d’abord avec confirmation.confirmed=false pour présenter au client les articles, adresses, montant et conditions. Après son accord explicite, rappeler avec la même clé UUID, le token retourné, confirmed=true, confirmed_at, proof_reference et terms_version. Prix, stock, port et conditions sont revérifiés. Un changement exige un nouveau récapitulatif. Conserver la même clé et les mêmes arguments pour toute reprise, y compris après timeout ou résultat incertain ; ne jamais créer une nouvelle clé pour contourner pending ou un conflit. 30 lignes, 100 unités par ligne, 300 au total, 32 Kio. Ne déclenche ni paiement, facture, e-mail ni réservation. Si web_resume.status=available, proposer au client le choix parmi les quatre liens privés de boutique, valables sept jours : ils ouvrent le même caddie et conservent son origine MCP. La reprise Web est facultative.
{
"$id": "https://catalogue.nitech.fr/schemas/mcp/create-order-input-v0.1.schema.json",
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"idempotency_key",
"interaction_id",
"customer",
"billing_address",
"shipping_address",
"lines",
"confirmation"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 30,
"minItems": 1
},
"customer": {
"type": "object",
"required": [
"email",
"phone"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"maxLength": 80,
"minLength": 1
},
"phone": {
"type": "string",
"pattern": "^[+0-9 ()/.-]{5,30}$",
"maxLength": 30,
"minLength": 1
}
},
"additionalProperties": false
},
"confirmation": {
"type": "object",
"required": [
"confirmed"
],
"properties": {
"token": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+\\.[a-f0-9]{64}$",
"maxLength": 1024,
"minLength": 1
},
"confirmed": {
"type": "boolean"
},
"confirmed_at": {
"type": "string",
"format": "date-time",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
"maxLength": 20,
"minLength": 20
},
"terms_version": {
"type": "string",
"const": "livraison-2026-10-08-v1"
},
"proof_reference": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]+$",
"maxLength": 128,
"minLength": 8
}
},
"additionalProperties": false
},
"interaction_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]+$",
"maxLength": 128,
"minLength": 8
},
"billing_address": {
"type": "object",
"required": [
"first_name",
"last_name",
"address_line1",
"postal_code",
"city",
"country_code"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"company": {
"type": "string",
"maxLength": 120,
"minLength": 0
},
"last_name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"first_name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"postal_code": {
"type": "string",
"pattern": "^[A-Za-z0-9 -]+$",
"maxLength": 12,
"minLength": 1
},
"country_code": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"maxLength": 2,
"minLength": 2
},
"address_line1": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"address_line2": {
"type": "string",
"maxLength": 200,
"minLength": 0
}
},
"additionalProperties": false
},
"idempotency_key": {
"type": "string",
"pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$",
"maxLength": 36,
"minLength": 36
},
"shipping_address": {
"type": "object",
"required": [
"first_name",
"last_name",
"address_line1",
"postal_code",
"city",
"country_code"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"company": {
"type": "string",
"maxLength": 120,
"minLength": 0
},
"last_name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"first_name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"postal_code": {
"type": "string",
"pattern": "^[A-Za-z0-9 -]+$",
"maxLength": 12,
"minLength": 1
},
"country_code": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"maxLength": 2,
"minLength": 2
},
"address_line1": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"address_line2": {
"type": "string",
"maxLength": 200,
"minLength": 0
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"$id": "https://catalogue.nitech.fr/schemas/mcp/create-order-output-v0.1.schema.json",
"type": "object",
"allOf": [
{
"if": {
"properties": {
"status": {
"const": "confirmation_required"
}
}
},
"then": {
"required": [
"confirmation",
"summary",
"order_created",
"payment_created"
]
}
},
{
"if": {
"properties": {
"status": {
"const": "created"
}
}
},
"then": {
"required": [
"order_id",
"reference",
"state",
"origin",
"currency",
"amount_to_pay",
"payment_created",
"replayed"
]
}
},
{
"if": {
"properties": {
"status": {
"enum": [
"pending",
"rejected",
"unknown"
]
}
}
},
"then": {
"required": [
"error"
]
}
},
{
"if": {
"properties": {
"status": {
"const": "pending"
}
}
},
"then": {
"required": [
"operation_reference"
]
}
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"schema_version",
"status"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"retry_same_key"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[A-Z0-9_]+$",
"maxLength": 80,
"minLength": 1
},
"message": {
"type": "string",
"maxLength": 1000,
"minLength": 1
},
"retry_same_key": {
"type": "boolean"
}
},
"additionalProperties": false
},
"state": {
"enum": [
"awaiting_payment",
"paid",
"payment_accepted",
"payment_captured",
"payment_status_unknown",
"cancelled"
]
},
"origin": {
"const": "MCP"
},
"status": {
"enum": [
"confirmation_required",
"created",
"pending",
"rejected",
"unknown"
]
},
"summary": {
"type": "object",
"required": [
"customer",
"billing_address",
"shipping_address",
"lines",
"currency",
"products_amount_ht",
"shipping_amount_ht",
"grand_total_ht",
"amount_to_pay",
"tax_breakdown",
"terms_text",
"terms_notice"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"public_reference",
"designation",
"quantity",
"unit_amount_ht",
"unit_amount_ttc",
"tax_rate",
"line_amount_ht",
"line_amount_ttc"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"tax_rate": {
"type": "string",
"maxLength": 16,
"minLength": 1
},
"product_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"designation": {
"type": "string",
"maxLength": 2000,
"minLength": 0
},
"line_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,7})\\.[0-9]{2}$",
"maxLength": 16,
"minLength": 1
},
"unit_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,7})\\.[0-9]{2}$",
"maxLength": 16,
"minLength": 1
},
"line_amount_ttc": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,7})\\.[0-9]{2}$",
"maxLength": 16,
"minLength": 1
},
"unit_amount_ttc": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,7})\\.[0-9]{2}$",
"maxLength": 16,
"minLength": 1
},
"public_reference": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 30,
"minItems": 1
},
"currency": {
"const": "EUR"
},
"customer": {
"type": "object",
"required": [
"email",
"phone"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"maxLength": 80,
"minLength": 1
},
"phone": {
"type": "string",
"pattern": "^[+0-9 ()/.-]{5,30}$",
"maxLength": 30,
"minLength": 1
}
},
"additionalProperties": false
},
"terms_text": {
"type": "string",
"maxLength": 1000,
"minLength": 1
},
"terms_notice": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"amount_to_pay": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,7})\\.[0-9]{2}$",
"maxLength": 16,
"minLength": 1
},
"tax_breakdown": {
"type": "array",
"items": {
"type": "object",
"required": [
"tax_rate",
"products_amount_ht",
"products_tax_amount",
"shipping_amount_ht",
"shipping_tax_amount",
"taxable_amount_ht",
"tax_amount",
"line_tax_sum",
"rounding_adjustment_ttc"
],
"properties": {
"tax_rate": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,2})(\\.[0-9]{1,6})?$"
},
"tax_amount": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"line_tax_sum": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"taxable_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"products_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"shipping_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"products_tax_amount": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"shipping_tax_amount": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
},
"rounding_adjustment_ttc": {
"type": "string",
"pattern": "^-?(0|[1-9][0-9]{0,13})\\.[0-9]{2}$"
}
},
"additionalProperties": false
},
"maxItems": 31,
"minItems": 1
},
"grand_total_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,7})\\.[0-9]{2}$",
"maxLength": 16,
"minLength": 1
},
"billing_address": {
"type": "object",
"required": [
"first_name",
"last_name",
"address_line1",
"postal_code",
"city",
"country_code"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"company": {
"type": "string",
"maxLength": 120,
"minLength": 0
},
"last_name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"first_name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"postal_code": {
"type": "string",
"pattern": "^[A-Za-z0-9 -]+$",
"maxLength": 12,
"minLength": 1
},
"country_code": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"maxLength": 2,
"minLength": 2
},
"address_line1": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"address_line2": {
"type": "string",
"maxLength": 200,
"minLength": 0
}
},
"additionalProperties": false
},
"shipping_address": {
"type": "object",
"required": [
"first_name",
"last_name",
"address_line1",
"postal_code",
"city",
"country_code"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"company": {
"type": "string",
"maxLength": 120,
"minLength": 0
},
"last_name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"first_name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"postal_code": {
"type": "string",
"pattern": "^[A-Za-z0-9 -]+$",
"maxLength": 12,
"minLength": 1
},
"country_code": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"maxLength": 2,
"minLength": 2
},
"address_line1": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"address_line2": {
"type": "string",
"maxLength": 200,
"minLength": 0
}
},
"additionalProperties": false
},
"products_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,7})\\.[0-9]{2}$",
"maxLength": 16,
"minLength": 1
},
"shipping_amount_ht": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,7})\\.[0-9]{2}$",
"maxLength": 16,
"minLength": 1
}
},
"additionalProperties": false
},
"currency": {
"const": "EUR"
},
"order_id": {
"type": "integer",
"minimum": 1
},
"replayed": {
"type": "boolean"
},
"reference": {
"type": "string",
"maxLength": 32,
"minLength": 1
},
"web_resume": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"shops"
],
"properties": {
"shops": {
"type": "array",
"maxItems": 0
},
"status": {
"const": "unavailable"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"expires_at",
"shops"
],
"properties": {
"shops": {
"type": "array",
"items": {
"type": "object",
"required": [
"shop",
"label",
"url"
],
"properties": {
"url": {
"type": "string",
"pattern": "^https://www\\.(direct-chaudiere\\.com/boutique/|nitech-negoce\\.com/panier/|douchetherapy\\.com/noindex/order/|eausanitaire\\.com/boutique/caddie/)\\?mcp_resume=m1\\.[A-Za-z0-9_-]+\\.[a-f0-9]{64}$",
"maxLength": 2048,
"minLength": 1
},
"shop": {
"enum": [
"d_chau",
"n_nego",
"d_ther",
"e_sani"
]
},
"label": {
"type": "string",
"maxLength": 80,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 4,
"minItems": 4
},
"status": {
"const": "available"
},
"expires_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
}
]
},
"confirmation": {
"type": "object",
"required": [
"token",
"expires_at",
"quote_digest",
"terms_version"
],
"properties": {
"token": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+\\.[a-f0-9]{64}$",
"maxLength": 1024,
"minLength": 1
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"quote_digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"maxLength": 64,
"minLength": 64
},
"terms_version": {
"type": "string",
"const": "livraison-2026-10-08-v1"
}
},
"additionalProperties": false
},
"amount_to_pay": {
"type": "string",
"pattern": "^(0|[1-9][0-9]{0,7})\\.[0-9]{2}$",
"maxLength": 16,
"minLength": 1
},
"order_created": {
"type": "boolean",
"const": false
},
"schema_version": {
"const": "1.0"
},
"payment_created": {
"type": "boolean",
"const": false
},
"operation_reference": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"maxLength": 64,
"minLength": 64
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}get_payment
Retrouver le même caddie MCP, son montant accepté, les trois moyens card/transfer/cheque, le moyen choisi, les instructions et son état bancaire Scellius. payment_page fournit une URL privée stable du caddie, sans date d'expiration, commune aux trois moyens ; elle reste consultable après paiement. Le jeton p2 de cette page peut remplacer le jeton mcp_resume pour les appels suivants. awaiting_receipt signifie attente du règlement et ne prouve aucun paiement. Fournir cart_id et cart_access : le jeton mcp_resume privé obtenu dans un lien web_resume de create_order ou du BO. Ne jamais fournir un simple numéro comme preuve d’accès. NOT_PREPARED et PREPARED ne prouvent aucun paiement. Pour le client, AUTHORISED, AUTHORISED_TO_VALIDATE et CAPTURED se présentent simplement comme Paiement accepté ; ne pas détailler les étapes bancaires internes. business_effects et status signalent les réconciliations. Ne pas payer à nouveau en cas d’incertitude.
{
"$id": "https://catalogue.nitech.fr/schemas/mcp/get-payment-input-v0.1.schema.json",
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"cart_id",
"cart_access"
],
"properties": {
"cart_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"cart_access": {
"type": "string",
"pattern": "^(?:m1\\.[A-Za-z0-9_-]+\\.[a-f0-9]{64}|p2\\.[0-7]\\.[a-f0-9]{64})$",
"maxLength": 1024
}
},
"additionalProperties": false
}{
"$id": "https://catalogue.nitech.fr/schemas/mcp/get-payment-output-v0.1.schema.json",
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"notice",
"accepted_amount",
"bank_observed_at",
"currency",
"settlement_received",
"schema_version",
"cart_id",
"bank_reference",
"bank_status",
"origin",
"captured",
"status",
"reference",
"cart_state",
"action",
"business_effects",
"amount_to_pay",
"attempt_id"
],
"properties": {
"action": {
"oneOf": [
{
"type": "null"
},
{
"type": "object",
"required": [
"type",
"url",
"expires_at",
"provider"
],
"properties": {
"url": {
"type": "string",
"pattern": "^https://mcp\\.nitech\\.fr/payments/(?:start\\?attempt=[a-f0-9]{32}&token=[a-f0-9]{64}|choose\\?cart_id=[1-9][0-9]*&access=p2\\.[0-7]\\.[a-f0-9]{64})$"
},
"type": {
"const": "open_secure_payment"
},
"provider": {
"const": "Scellius / La Banque Postale"
},
"expires_at": {
"type": [
"string",
"null"
],
"format": "date-time"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"postal_address",
"amount",
"payee",
"reference",
"currency",
"bic",
"iban",
"payment_method",
"receipt_status",
"type",
"deadline",
"rib_url",
"reference_instruction",
"bank"
],
"properties": {
"bic": {
"type": [
"string",
"null"
]
},
"bank": {
"type": [
"string",
"null"
]
},
"iban": {
"type": [
"string",
"null"
]
},
"type": {
"const": "payment_instructions"
},
"payee": {
"type": "string",
"minLength": 1
},
"amount": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"rib_url": {
"type": [
"string",
"null"
]
},
"currency": {
"const": "EUR"
},
"deadline": {
"type": "string"
},
"reference": {
"type": "string"
},
"payment_method": {
"enum": [
"cheque",
"transfer"
]
},
"postal_address": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt_status": {
"const": "awaiting_receipt"
},
"reference_instruction": {
"type": "string"
}
},
"additionalProperties": false
}
]
},
"notice": {
"type": "string"
},
"origin": {
"const": "MCP"
},
"status": {
"enum": [
"ok",
"confirmation_required",
"reconciliation_required"
]
},
"cart_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"captured": {
"type": "boolean"
},
"currency": {
"const": "EUR"
},
"reference": {
"type": "string",
"pattern": "^MCP-[1-9][0-9]*$"
},
"attempt_id": {
"type": [
"string",
"null"
]
},
"cart_state": {
"type": "integer"
},
"bank_status": {
"enum": [
"NOT_PREPARED",
"PREPARED",
"INITIAL",
"WAITING_FOR_PAYMENT",
"WAITING_AUTHORISATION",
"WAITING_AUTHORISATION_TO_VALIDATE",
"UNDER_VERIFICATION",
"AUTHORISED_TO_VALIDATE",
"AUTHORISED",
"CAPTURED",
"CAPTURE_FAILED",
"REFUSED",
"ABANDONED",
"CANCELLED",
"EXPIRED",
"SUSPENDED"
]
},
"bank_history": {
"type": "object",
"required": [
"operations",
"debit",
"refunded",
"net",
"reduced_before_capture",
"cancelled",
"commercial_review_required",
"pending_events",
"next_action",
"events"
],
"properties": {
"net": {
"type": "string",
"pattern": "^-?[0-9]+\\.[0-9]{2}$"
},
"debit": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"events": {
"type": "array",
"items": {
"type": "object",
"required": [
"event_id",
"received_at",
"source",
"disposition",
"fact"
],
"properties": {
"fact": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"source": {
"type": "string"
},
"event_id": {
"type": "string"
},
"disposition": {
"type": "string"
},
"received_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
}
},
"refunded": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"cancelled": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"operations": {
"type": "array",
"items": {
"type": "object",
"required": [
"bank_uuid",
"original_attempt",
"operation",
"status",
"amount",
"initial_amount",
"bank_created_at",
"event_id"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"status": {
"type": "string"
},
"event_id": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"bank_uuid": {
"type": "string",
"pattern": "^[a-f0-9]{32}$"
},
"operation": {
"enum": [
"DEBIT",
"CREDIT"
]
},
"initial_amount": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"bank_created_at": {
"type": "string",
"pattern": "^[0-9]{14}$"
},
"original_attempt": {
"type": "string",
"pattern": "^[a-f0-9]{32}$"
}
},
"additionalProperties": false
}
},
"next_action": {
"type": "string"
},
"pending_events": {
"type": "integer",
"minimum": 0
},
"reduced_before_capture": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"commercial_review_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"payment_page": {
"type": "string",
"pattern": "^https://mcp\\.nitech\\.fr/payments/choose\\?cart_id=[1-9][0-9]*&access="
},
"amount_to_pay": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"bank_reference": {
"type": [
"string",
"null"
]
},
"delivery_state": {
"enum": [
null,
"LEGACY_UNKNOWN",
"UNISSUED",
"ISSUED",
"RELEASED_UNISSUED"
]
},
"payment_method": {
"enum": [
null,
"card",
"transfer",
"cheque"
],
"type": [
"string",
"null"
]
},
"payment_status": {
"enum": [
"not_selected",
"pending",
"awaiting_receipt",
"accepted",
"captured",
"reconciliation_required"
],
"type": "string"
},
"schema_version": {
"const": "2.0"
},
"accepted_amount": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"bank_observed_at": {
"type": [
"string",
"null"
]
},
"business_effects": {
"enum": [
"complete",
"pending",
"not_started"
]
},
"requested_method": {
"enum": [
"card",
"transfer",
"cheque"
],
"type": "string"
},
"available_methods": {
"type": "array",
"items": {
"enum": [
"card",
"transfer",
"cheque"
]
},
"uniqueItems": true
},
"handoff_available": {
"type": "boolean"
},
"confirmation_token": {
"type": "string",
"pattern": "^[0-9]{10}\\.[a-f0-9]{64}$"
},
"settlement_received": {
"const": false
},
"method_change_allowed": {
"type": "boolean"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}prepare_payment
Préparer le moyen de paiement du même caddie MCP : payment_method=card, transfer ou cheque. Pour virement/chèque, confirmer enregistre seulement c_stat=3 et c_moyp=3/2 et renvoie les instructions existantes : aucun règlement reçu, stock, e-mail ou facture. Une carte en cours/incertaine ou une commande déjà prise en compte interdit un autre moyen. Pour la carte, préparer le paiement autonome Scellius. Appeler avec confirmed=false, cart_access, expected_amount, currency=EUR et une clé UUID pour présenter le montant au client. Uniquement après son accord explicite, rappeler confirmed=true avec confirmation_token et proof_reference. Renvoyer payment_page ou action.url au client : URL stable sans expiration (expires_at=null). La préparation UNISSUED peut attendre ; le formulaire bancaire est daté et marqué ISSUED seulement au départ explicite du client. Les confirmations temporaires sont renouvelées derrière la page. Une session ISSUED ou LEGACY_UNKNOWN reste protégée jusqu'au résultat authentifié ; ne jamais inventer une expiration bancaire. Le client saisit sa carte uniquement chez Scellius. Aucun envoi de carte ou authentification via MCP. Répétitions et clés différentes retrouvent la même tentative ; aucun nouvel essai automatique après un refus, une expiration ou une incertitude. Après REFUSED, ABANDONED ou EXPIRED authentifié par le serveur, demander un nouveau récapitulatif avec une nouvelle clé et retry_of=attempt_id, puis recueillir un nouvel accord explicite. get_payment donne la preuve serveur et les effets métier. Un lien ne valide pas le paiement.
{
"$id": "https://catalogue.nitech.fr/schemas/mcp/prepare-payment-input-v0.1.schema.json",
"type": "object",
"allOf": [
{
"if": {
"properties": {
"confirmed": {
"const": true
}
}
},
"then": {
"required": [
"confirmation_token",
"proof_reference"
]
}
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"cart_id",
"cart_access",
"expected_amount",
"currency",
"confirmed",
"idempotency_key"
],
"properties": {
"cart_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"currency": {
"const": "EUR"
},
"retry_of": {
"type": "string",
"pattern": "^[a-f0-9]{32}$"
},
"confirmed": {
"type": "boolean"
},
"cart_access": {
"type": "string",
"pattern": "^(?:m1\\.[A-Za-z0-9_-]+\\.[a-f0-9]{64}|p2\\.[0-7]\\.[a-f0-9]{64})$",
"maxLength": 1024
},
"payment_method": {
"enum": [
"card",
"transfer",
"cheque"
],
"type": "string",
"default": "card"
},
"expected_amount": {
"type": "string",
"pattern": "^[0-9]{1,8}\\.[0-9]{2}$"
},
"idempotency_key": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"proof_reference": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"confirmation_token": {
"type": "string",
"pattern": "^[0-9]{10}\\.[a-f0-9]{64}$"
}
},
"additionalProperties": false
}{
"$id": "https://catalogue.nitech.fr/schemas/mcp/prepare-payment-output-v0.1.schema.json",
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"notice",
"accepted_amount",
"bank_observed_at",
"currency",
"settlement_received",
"schema_version",
"cart_id",
"bank_reference",
"bank_status",
"origin",
"captured",
"status",
"reference",
"cart_state",
"action",
"business_effects",
"amount_to_pay",
"attempt_id"
],
"properties": {
"action": {
"oneOf": [
{
"type": "null"
},
{
"type": "object",
"required": [
"type",
"url",
"expires_at",
"provider"
],
"properties": {
"url": {
"type": "string",
"pattern": "^https://mcp\\.nitech\\.fr/payments/(?:start\\?attempt=[a-f0-9]{32}&token=[a-f0-9]{64}|choose\\?cart_id=[1-9][0-9]*&access=p2\\.[0-7]\\.[a-f0-9]{64})$"
},
"type": {
"const": "open_secure_payment"
},
"provider": {
"const": "Scellius / La Banque Postale"
},
"expires_at": {
"type": [
"string",
"null"
],
"format": "date-time"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"postal_address",
"amount",
"payee",
"reference",
"currency",
"bic",
"iban",
"payment_method",
"receipt_status",
"type",
"deadline",
"rib_url",
"reference_instruction",
"bank"
],
"properties": {
"bic": {
"type": [
"string",
"null"
]
},
"bank": {
"type": [
"string",
"null"
]
},
"iban": {
"type": [
"string",
"null"
]
},
"type": {
"const": "payment_instructions"
},
"payee": {
"type": "string",
"minLength": 1
},
"amount": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"rib_url": {
"type": [
"string",
"null"
]
},
"currency": {
"const": "EUR"
},
"deadline": {
"type": "string"
},
"reference": {
"type": "string"
},
"payment_method": {
"enum": [
"cheque",
"transfer"
]
},
"postal_address": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt_status": {
"const": "awaiting_receipt"
},
"reference_instruction": {
"type": "string"
}
},
"additionalProperties": false
}
]
},
"notice": {
"type": "string"
},
"origin": {
"const": "MCP"
},
"status": {
"enum": [
"ok",
"confirmation_required",
"reconciliation_required"
]
},
"cart_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"captured": {
"type": "boolean"
},
"currency": {
"const": "EUR"
},
"reference": {
"type": "string",
"pattern": "^MCP-[1-9][0-9]*$"
},
"attempt_id": {
"type": [
"string",
"null"
]
},
"cart_state": {
"type": "integer"
},
"bank_status": {
"enum": [
"NOT_PREPARED",
"PREPARED",
"INITIAL",
"WAITING_FOR_PAYMENT",
"WAITING_AUTHORISATION",
"WAITING_AUTHORISATION_TO_VALIDATE",
"UNDER_VERIFICATION",
"AUTHORISED_TO_VALIDATE",
"AUTHORISED",
"CAPTURED",
"CAPTURE_FAILED",
"REFUSED",
"ABANDONED",
"CANCELLED",
"EXPIRED",
"SUSPENDED"
]
},
"bank_history": {
"type": "object",
"required": [
"operations",
"debit",
"refunded",
"net",
"reduced_before_capture",
"cancelled",
"commercial_review_required",
"pending_events",
"next_action",
"events"
],
"properties": {
"net": {
"type": "string",
"pattern": "^-?[0-9]+\\.[0-9]{2}$"
},
"debit": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"events": {
"type": "array",
"items": {
"type": "object",
"required": [
"event_id",
"received_at",
"source",
"disposition",
"fact"
],
"properties": {
"fact": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"source": {
"type": "string"
},
"event_id": {
"type": "string"
},
"disposition": {
"type": "string"
},
"received_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
}
},
"refunded": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"cancelled": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"operations": {
"type": "array",
"items": {
"type": "object",
"required": [
"bank_uuid",
"original_attempt",
"operation",
"status",
"amount",
"initial_amount",
"bank_created_at",
"event_id"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"status": {
"type": "string"
},
"event_id": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"bank_uuid": {
"type": "string",
"pattern": "^[a-f0-9]{32}$"
},
"operation": {
"enum": [
"DEBIT",
"CREDIT"
]
},
"initial_amount": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"bank_created_at": {
"type": "string",
"pattern": "^[0-9]{14}$"
},
"original_attempt": {
"type": "string",
"pattern": "^[a-f0-9]{32}$"
}
},
"additionalProperties": false
}
},
"next_action": {
"type": "string"
},
"pending_events": {
"type": "integer",
"minimum": 0
},
"reduced_before_capture": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"commercial_review_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"payment_page": {
"type": "string",
"pattern": "^https://mcp\\.nitech\\.fr/payments/choose\\?cart_id=[1-9][0-9]*&access="
},
"amount_to_pay": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"bank_reference": {
"type": [
"string",
"null"
]
},
"delivery_state": {
"enum": [
null,
"LEGACY_UNKNOWN",
"UNISSUED",
"ISSUED",
"RELEASED_UNISSUED"
]
},
"payment_method": {
"enum": [
null,
"card",
"transfer",
"cheque"
],
"type": [
"string",
"null"
]
},
"payment_status": {
"enum": [
"not_selected",
"pending",
"awaiting_receipt",
"accepted",
"captured",
"reconciliation_required"
],
"type": "string"
},
"schema_version": {
"const": "2.0"
},
"accepted_amount": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"bank_observed_at": {
"type": [
"string",
"null"
]
},
"business_effects": {
"enum": [
"complete",
"pending",
"not_started"
]
},
"requested_method": {
"enum": [
"card",
"transfer",
"cheque"
],
"type": "string"
},
"available_methods": {
"type": "array",
"items": {
"enum": [
"card",
"transfer",
"cheque"
]
},
"uniqueItems": true
},
"handoff_available": {
"type": "boolean"
},
"confirmation_token": {
"type": "string",
"pattern": "^[0-9]{10}\\.[a-f0-9]{64}$"
},
"settlement_received": {
"const": false
},
"method_change_allowed": {
"type": "boolean"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}get_order
Lire une commande privée avec cart_id et cart_access (m1 privé ou p2 permanent). Le numéro seul ne suffit jamais. Reprend la même vérification d’accès que get_payment. Lecture seule : état de commande, paiement serveur, bordereaux et quantités documentées, déclaration de départ, transporteur explicitement renseigné. Un bordereau ne prouve pas la préparation physique ; une déclaration de départ ne prouve pas la livraison. Numéro/lien de suivi absents de ces sources : null et unavailable explicites. Ne rien déduire du paiement sur l’expédition. Ne pas recréer ni repayer en cas d’incertitude.
{
"$id": "https://catalogue.nitech.fr/schemas/mcp/get-order-input-v0.1.schema.json",
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"cart_id",
"cart_access"
],
"properties": {
"cart_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"cart_access": {
"type": "string",
"pattern": "^(?:m1\\.[A-Za-z0-9_-]+\\.[a-f0-9]{64}|p2\\.[0-7]\\.[a-f0-9]{64})$",
"maxLength": 1024
}
},
"additionalProperties": false
}{
"$id": "https://catalogue.nitech.fr/schemas/mcp/get-order-output-v0.1.schema.json",
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"schema_version",
"status",
"observed_at",
"cart_id",
"reference",
"order",
"payment",
"preparation",
"shipment",
"unavailable",
"sources"
],
"properties": {
"order": {
"type": "object",
"required": [
"state_code",
"state"
],
"properties": {
"state": {
"enum": [
"cart",
"accepted",
"cancelled",
"awaiting_payment",
"unavailable"
],
"type": "string"
},
"state_code": {
"type": "integer"
}
},
"additionalProperties": false
},
"status": {
"const": "ok"
},
"cart_id": {
"type": "integer",
"maximum": 2147483647,
"minimum": 1
},
"payment": {
"type": "object",
"required": [
"status",
"bank_status",
"bank_observed_at",
"payment_status",
"payment_method",
"accepted_amount",
"currency",
"captured",
"settlement_received",
"business_effects",
"notice"
],
"properties": {
"notice": {
"type": "string"
},
"status": {
"enum": [
"ok",
"confirmation_required",
"reconciliation_required"
]
},
"captured": {
"type": "boolean"
},
"currency": {
"const": "EUR"
},
"bank_status": {
"enum": [
"NOT_PREPARED",
"PREPARED",
"INITIAL",
"WAITING_FOR_PAYMENT",
"WAITING_AUTHORISATION",
"WAITING_AUTHORISATION_TO_VALIDATE",
"UNDER_VERIFICATION",
"AUTHORISED_TO_VALIDATE",
"AUTHORISED",
"CAPTURED",
"CAPTURE_FAILED",
"REFUSED",
"ABANDONED",
"CANCELLED",
"EXPIRED",
"SUSPENDED"
]
},
"payment_method": {
"enum": [
null,
"card",
"transfer",
"cheque"
],
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"payment_status": {
"enum": [
"not_selected",
"pending",
"awaiting_receipt",
"accepted",
"captured",
"reconciliation_required"
],
"type": "string"
},
"accepted_amount": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]{2}$"
},
"bank_observed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"business_effects": {
"enum": [
"complete",
"pending",
"not_started"
]
},
"settlement_received": {
"const": false
}
},
"additionalProperties": false
},
"sources": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 5,
"minItems": 5
},
"shipment": {
"type": "object",
"required": [
"status",
"departure_record",
"carrier",
"tracking_number",
"tracking_url",
"delivered_at",
"notice"
],
"properties": {
"notice": {
"type": "string",
"maxLength": 500
},
"status": {
"enum": [
"unavailable",
"departure_recorded"
],
"type": "string"
},
"carrier": {
"anyOf": [
{
"const": "GLS"
},
{
"type": "null"
}
]
},
"delivered_at": {
"type": "null"
},
"tracking_url": {
"type": "null"
},
"tracking_number": {
"type": "null"
},
"departure_record": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"reference": {
"type": "string",
"maxLength": 100
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"preparation": {
"type": "object",
"required": [
"status",
"ordered_quantity",
"documented_quantity",
"delivery_documents",
"notice"
],
"properties": {
"notice": {
"type": "string",
"maxLength": 500
},
"status": {
"enum": [
"unavailable",
"partially_documented",
"documented"
],
"type": "string"
},
"ordered_quantity": {
"type": "integer",
"minimum": 0
},
"delivery_documents": {
"type": "array",
"items": {
"type": "object",
"required": [
"reference",
"date"
],
"properties": {
"date": {
"anyOf": [
{
"type": "string",
"maxLength": 10
},
{
"type": "null"
}
]
},
"reference": {
"anyOf": [
{
"type": "string",
"maxLength": 20
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 99
},
"documented_quantity": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"unavailable": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 7,
"uniqueItems": true
},
"schema_version": {
"const": "1.0"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"enum": [
"BACKEND_ACCESS_DENIED",
"INVALID_ARGUMENTS",
"CART_ACCESS_DENIED",
"ORDER_SOURCE_UNAVAILABLE",
"CANONICAL_INVALID",
"CANONICAL_UNAVAILABLE"
],
"type": "string"
},
"message": {
"type": "string",
"maxLength": 500
},
"retryable": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1387 ms
- 95th percentile latency
- 1387 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1387 ms · metadata changed · 11 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http nitech-mcp https://mcp.nitech.fr/mcpCodex
codex mcp add nitech-mcp --url https://mcp.nitech.fr/mcpCursor
{
"mcpServers": {
"nitech-mcp": {
"url": "https://mcp.nitech.fr/mcp"
}
}
}Cline
{
"mcpServers": {
"nitech-mcp": {
"type": "streamableHttp",
"url": "https://mcp.nitech.fr/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"nitech-mcp": {
"type": "http",
"url": "https://mcp.nitech.fr/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http nitech-mcp https://mcp.nitech.fr/mcpClaude Desktop
{
"mcpServers": {
"nitech-mcp": {
"url": "https://mcp.nitech.fr/mcp"
}
}
}Windsurf
{
"mcpServers": {
"nitech-mcp": {
"serverUrl": "https://mcp.nitech.fr/mcp"
}
}
}Let your agent find its tools
Find servers like Nitech MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run Nitech MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.