{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://oto.dtp/schemas/faisabilite/master_intake.schema.json", "title": "OTO V18 · Master Project Intake (A1-A20) · Master Data Model", "description": "Formulaire d'intake maître V18 qui remplace le Formulaire Briefing V12. D-08 (V18_DECISIONS_D07_D08_20260812.md) : SUR-ENSEMBLE STRICT de brief.json V12 — le contrat V12 brief.schema.json est INCLUS tel quel via allOf/$ref (toute clé V12 conserve son nom exact, rétro-compat parser Publiciste), et les champs V18 sont ajoutés en EXTENSION, jamais en remplacement. Le champ dataset_version distingue V12 vs V18. Anti-invention #6 : les A1-A20 fins restent ouverts tant que la spec root-owned de Michel (#8) n'est pas confrontée — ce schéma livre le CADRE (statuts · catégories · registres), pas des champs A1-A20 fabriqués.", "type": "object", "allOf": [ { "$ref": "https://oto.dtp/schemas/faisabilite/brief.schema.json" } ], "required": ["projet", "dataset_version"], "properties": { "dataset_version": { "type": "string", "enum": ["V12", "V18"], "description": "Distingue un dataset legacy V12 d'un intake V18 (D-08 règle 6). Un intake maître V18 porte « V18 »." }, "intake_sections": { "type": "object", "description": "Slots A1-A20 du Master Project Intake (directive V18 §Master Project Intake). Contenu FIN volontairement OUVERT (additionalProperties) : les 20 sections détaillées vivent dans la directive complète root-owned (#8, audit §0) et seront confrontées par Michel au CP0 — les fabriquer ici serait une invention (#6). Chaque clé est un id de section A1..A20.", "propertyNames": { "pattern": "^A([1-9]|1[0-9]|20)$" }, "additionalProperties": true }, "document_register": { "type": "array", "description": "Catalogue des pièces probantes (Evidence Room · audit §18). Register documents / files / versions (V18_GO_PHASE_1).", "items": { "$ref": "#/definitions/document_ref" } }, "data_register": { "type": "array", "description": "Le Master Dataset : chaque donnée AVEC sa provenance (statut · source · confiance · validateur). One Master Dataset · Multiple Outputs — les 3 sorties (Bank/Full/Ops) sont des projections de ce registre.", "items": { "$ref": "#/definitions/data_point" } }, "evidence_register": { "type": "array", "description": "Liens donnée→pièce : rattache un data_key à un ou plusieurs doc_id du document_register (intégrité référentielle : pas de provenance fantôme).", "items": { "type": "object", "required": ["data_key", "doc_ids"], "additionalProperties": false, "properties": { "data_key": { "type": "string" }, "doc_ids": { "type": "array", "items": { "type": "string" }, "minItems": 1 } } } } }, "definitions": { "data_status": { "description": "Les 11 statuts obligatoires (V18_GO_PHASE_1 §Data status). Ordre canonique = du plus fiable au sans-objet ; miroir de mdmlib.master_data_model.STATUSES.", "type": "string", "enum": [ "VERIFIED", "CONFIRMED", "SOURCE_BASED", "CALCULATED", "ESTIMATED", "ASSUMPTION", "TARGET", "BANK_REQUIREMENT", "PENDING", "MISSING", "NOT_APPLICABLE" ] }, "data_category": { "description": "Les 5 catégories de séparation (V18_GO_PHASE_1 §Séparation). Le RÔLE de la donnée dans le modèle ; miroir de mdmlib.master_data_model.CATEGORIES.", "type": "string", "enum": [ "INPUT", "TARGET", "ASSUMPTION", "BANK_REQUIREMENT", "CALCULATED" ] }, "data_point": { "type": "object", "description": "Une donnée du Master Dataset avec sa provenance intégrale.", "required": ["key", "category", "status"], "additionalProperties": false, "properties": { "key": { "type": "string", "minLength": 1 }, "value": {}, "category": { "$ref": "#/definitions/data_category" }, "status": { "$ref": "#/definitions/data_status" }, "source_document": { "type": ["string", "null"] }, "source_date": { "type": ["string", "null"] }, "confidence": { "type": ["number", "null"], "minimum": 0, "maximum": 1 }, "validated_by": { "type": ["string", "null"] }, "unit": { "type": ["string", "null"] }, "note": { "type": ["string", "null"] } } }, "document_ref": { "type": "object", "description": "Une pièce probante cataloguée (id unique · version · date).", "required": ["doc_id", "title"], "additionalProperties": false, "properties": { "doc_id": { "type": "string", "minLength": 1 }, "title": { "type": "string", "minLength": 1 }, "filename": { "type": ["string", "null"] }, "version": { "type": ["string", "null"] }, "source_date": { "type": ["string", "null"] } } } } }