{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://aisa.ablera.com/contracts/drafts/normalised-arrival.schema.json",
  "title": "Normalised arrival — DRAFT inter-stage contract (Support S1 / platform.intake)",
  "x-status": "draft",
  "description": "Stage Classification § 1 and Agents § 5c: every channel lands in one shape — reporter, subject, body, referenced identifiers, attachments, arrival time — stamped with an origin key (channel + external id) that dedup checks first. Identifiers are HANDLES here: substitution happened at the connector (Trust and Data § 4). Channel mechanics stay in the connector. Required core only (D139).",
  "type": "object", "additionalProperties": true,
  "required": ["channel", "origin_key", "received_on", "reporter", "subject", "body_paper_ref", "identifiers", "attachments", "customer_code"],
  "properties": {
    "channel": { "type": "string", "enum": ["jira", "mail", "hdesk", "in_place", "schedule", "handover", "admin_ui"] },
    "origin_key": { "type": "string", "description": "channel:external id — SD-1717 · a Message-ID · an OTRS TicketID · a client-app request id" },
    "received_on": { "type": "string", "format": "date-time" },
    "customer_code": { "type": "string" },
    "reporter": { "type": "object", "required": ["handle"], "properties": { "handle": { "type": "string" }, "organisation": { "type": "string" }, "role_hint": { "type": "string" } } },
    "subject": { "type": "string" },
    "body_paper_ref": { "type": "string", "description": "the re-briefed body as a paper; the raw source stays in the channel" },
    "identifiers": { "type": "array", "items": { "type": "object", "required": ["handle", "kind"], "properties": { "handle": { "type": "string" }, "kind": { "type": "string", "enum": ["EGN", "EIK", "VIN", "POLICY_NO", "CLAIM_NO", "IBAN", "NAME", "EMAIL", "PHONE", "PRODUCT_CODE", "OFFICE", "USER", "OTHER"] }, "resolved_to": { "type": "object", "properties": { "environment": { "type": "string" }, "system": { "type": "string" }, "object": { "type": "string" } } }, "structural_facets": { "type": "object" } } } },
    "attachments": { "type": "array", "items": { "type": "object", "required": ["name", "hash", "scanned"], "properties": { "name": { "type": "string" }, "hash": { "type": "string" }, "media_type": { "type": "string" }, "scanned": { "type": "boolean", "description": "attachment scanning before any connector opens it (Delivery § 4)" }, "paper_ref": { "type": "string" } } } },
    "mirrors": { "type": "array", "items": { "type": "object", "required": ["channel", "origin_key"], "properties": { "channel": { "type": "string" }, "origin_key": { "type": "string" } } }, "description": "the same request on another channel (a HelpDesk ticket and its Jira mirror are one case)" },
    "proposed": { "type": "object", "properties": { "module": { "type": "string", "enum": ["configuration", "support", "source"] }, "case_type": { "type": "string" }, "request_type": { "type": "string" }, "confidence": { "type": "string", "enum": ["high", "low"] }, "duplicate_of_case_id": { "type": "string" }, "precedents": { "type": "array", "items": { "type": "string" } } } },
    "initiation": { "type": "object", "properties": { "outcome": { "type": "string", "enum": ["granted", "may_request", "not_granted"] }, "rule_ref": { "type": "string" } } }
  }
}
