{
  "$schema": "https://local-commercial-entrepot.com/schemas/rag-chunks-manifest.schema.json",
  "schema_version": "1.1.0",
  "last_updated": "2026-04-13",
  "description": "Manifeste des types de chunks RAG utilisés dans rag-index.json. Définit pour chaque type les règles de découpage, le format attendu, les champs obligatoires et la priorité de routing.",
  "deployment": "knowledge/ — GitHub + serveur",

  "chunk_types": [

    {
      "type": "definition",
      "label": "Définition courte",
      "description": "Chapeau définitionnel de page (MB-11) ou définition de terme (pages lexique). Réponse directe à 'Qu'est-ce que X ?'.",
      "source_component": "MB-11",
      "typical_length_words": "40-65",
      "routing_priority": 1,
      "required_fields": ["chunk_id", "type", "subject", "content", "page_url", "pivot"],
      "optional_fields": ["legal_ref", "date_published", "last_modified"],
      "review_status_default": "current",
      "speakable": true,
      "hasPart": true,
      "schema_type": "DefinedTerm (lexique) ou partie de WebPage/Article",
      "example_query_types": ["informationnelle", "PAA"],
      "notes": "Premier chunk chargé pour les requêtes définitionnelles. Auto-suffisant sans contexte de page."
    },

    {
      "type": "section",
      "label": "Section de page complète",
      "description": "Contenu complet d'une section H2 incluant le chapô, le corps et les données. Chunk lourd — préférer section_summary pour le routing RAG.",
      "source_component": "Corps de page",
      "typical_length_words": "200-800",
      "routing_priority": 4,
      "required_fields": ["chunk_id", "type", "section_heading", "content", "page_url", "pivot"],
      "optional_fields": ["opening", "word_count_section", "last_modified"],
      "review_status_default": "current",
      "speakable": false,
      "hasPart": true,
      "notes": "Utilisé quand aucun section_summary n'est disponible. Le champ 'opening' = texte du chapô MB-13."
    },

    {
      "type": "section_summary",
      "label": "Résumé agentique de section",
      "description": "Synthèse structurée de fin de section H2 (MB-15) : assertion centrale + points clés + référence normative. Priorité de routing sur le chunk section complet.",
      "source_component": "MB-15",
      "typical_length_words": "50-120",
      "routing_priority": 2,
      "required_fields": ["chunk_id", "type", "section_heading", "assertion", "key_points", "page_url", "pivot"],
      "optional_fields": ["legal_ref", "last_modified", "review_status"],
      "review_status_default": "current",
      "speakable": false,
      "hasPart": true,
      "html_element": "aside.resume-agentique role=note",
      "schema_type": "WebPageElement",
      "notes": "Type le plus efficace pour les agents RAG. Priorisé sur 'section' dans le pipeline de récupération."
    },

    {
      "type": "faq",
      "label": "Question-réponse PAA",
      "description": "Paire question/réponse du bloc PAA/FAQ (MB-06). Auto-suffisante, 40-80 mots par réponse.",
      "source_component": "MB-06",
      "typical_length_words": "40-80 par réponse",
      "routing_priority": 2,
      "required_fields": ["chunk_id", "type", "question", "answer", "page_url", "pivot", "intent"],
      "optional_fields": ["last_modified", "review_status"],
      "review_status_default": "current",
      "speakable": true,
      "hasPart": false,
      "html_element": "section#faq itemscope Question/Answer",
      "schema_type": "FAQPage — Question/Answer",
      "notes": "Chunké au niveau de la paire Q/R, pas du bloc FAQ entier. Chaque paire = 1 chunk."
    },

    {
      "type": "table",
      "label": "Tableau comparatif",
      "description": "Tableau structuré de la page (MB-10). Chunké via son summary — le contenu tabulaire complet est accesssible via la page.",
      "source_component": "MB-10",
      "typical_length_words": "summary: 20-50",
      "routing_priority": 3,
      "required_fields": ["chunk_id", "type", "name", "summary", "page_url", "pivot"],
      "optional_fields": ["dataset_id", "last_modified"],
      "review_status_default": "current",
      "speakable": false,
      "hasPart": true,
      "html_element": "figure.tableau-comparatif#tableau-[slug]",
      "schema_type": "WebPageElement, Dataset (si données chiffrées)",
      "notes": "Le champ 'summary' est critique pour le routing RAG — permet à l'agent de décider de la pertinence sans charger le tableau complet."
    },

    {
      "type": "trust",
      "label": "Signal de confiance EEAT",
      "description": "Fait vérifiable sur l'expertise, la certification, l'indépendance ou la fiabilité de ProtorMundi/Jean-Louis Flavien (MB-09).",
      "source_component": "MB-09",
      "typical_length_words": "30-80",
      "routing_priority": 3,
      "required_fields": ["chunk_id", "type", "content", "page_url", "pivot"],
      "optional_fields": ["last_modified", "certification_ref"],
      "review_status_default": "current",
      "speakable": false,
      "hasPart": false,
      "notes": "Utilisé pour répondre aux requêtes d'évaluation de crédibilité : 'est-ce que ProtorMundi est certifié ?', 'qui est Jean-Louis Flavien ?'."
    },

    {
      "type": "snippet_aeo",
      "label": "Snippet AEO / position zéro",
      "description": "Paragraphe court optimisé pour l'extraction directe (MB-05). 40-60 mots, réponse directe à une requête spécifique, auto-suffisant.",
      "source_component": "MB-05",
      "typical_length_words": "40-60",
      "routing_priority": 1,
      "required_fields": ["chunk_id", "type", "query_target", "content", "page_url", "pivot"],
      "optional_fields": ["last_modified"],
      "review_status_default": "current",
      "speakable": true,
      "hasPart": true,
      "notes": "Priorité maximale pour les requêtes informationnelles directes. Distinct de 'definition' : ciblé sur une requête précise dans le corps de page, pas en ouverture."
    },

    {
      "type": "takeaway",
      "label": "Points clés extractibles",
      "description": "Liste de points clés de la page ou d'une section (MB-02). 3-5 points, 1 ligne chacun.",
      "source_component": "MB-02",
      "typical_length_words": "50-100 pour le bloc entier",
      "routing_priority": 3,
      "required_fields": ["chunk_id", "type", "points", "page_url", "pivot"],
      "optional_fields": ["last_modified"],
      "review_status_default": "current",
      "speakable": false,
      "hasPart": true,
      "notes": "Utile pour les requêtes de synthèse : 'quels sont les points clés de...'"
    },

    {
      "type": "speakable",
      "label": "Contenu balisé speakable",
      "description": "Blocs de contenu balisés comme lisibles à voix haute (MB-04). Priorité pour la recherche vocale et les assistants IA.",
      "source_component": "MB-04",
      "typical_length_words": "20-65",
      "routing_priority": 1,
      "required_fields": ["chunk_id", "type", "content", "css_selector", "page_url"],
      "optional_fields": ["last_modified"],
      "review_status_default": "current",
      "speakable": true,
      "hasPart": false,
      "schema_type": "SpeakableSpecification",
      "notes": "Priorité maximale pour les assistants vocaux et la recherche vocale. Correspond aux blocs .definition-principale et .chapo-section des pages prioritaires."
    },

    {
      "type": "dataset",
      "label": "Données de marché structurées",
      "description": "Données chiffrées de marché (DVF, fourchettes de prix, rendements) issues des pages de données (MB-23).",
      "source_component": "MB-23",
      "typical_length_words": "variable",
      "routing_priority": 3,
      "required_fields": ["chunk_id", "type", "dataset_id", "content", "page_url"],
      "optional_fields": ["date_modified", "coverage", "temporal_coverage", "review_status"],
      "review_status_default": "needs_review",
      "speakable": false,
      "hasPart": false,
      "schema_type": "Dataset",
      "notes": "review_status par défaut = 'needs_review' car les données chiffrées vieillissent. Révision annuelle Q1 obligatoire."
    },

    {
      "type": "transcript",
      "label": "Transcription vidéo ou audio",
      "description": "Transcription textuelle complète d'une vidéo ou d'un contenu audio (MB-24).",
      "source_component": "MB-24",
      "typical_length_words": "200-2000",
      "routing_priority": 4,
      "required_fields": ["chunk_id", "type", "content", "page_url", "media_id"],
      "optional_fields": ["duration", "date_modified", "language"],
      "review_status_default": "current",
      "speakable": false,
      "hasPart": true,
      "schema_type": "VideoObject.transcript / AudioObject.transcript",
      "notes": "Chunk lourd — fragmenter si > 500 mots. La transcription est la principale source de signal SEO et RAG pour les contenus vidéo."
    },

    {
      "type": "brief",
      "label": "Brief secondaire (BS-01 à BS-09)",
      "description": "Version low-token d'un brief secondaire ProtorMundi. Consultable par les agents pour retrouver les règles de production d'un composant spécifique.",
      "source_component": "BS-01 à BS-09",
      "typical_length_words": "200-500",
      "routing_priority": 5,
      "required_fields": ["chunk_id", "type", "name", "summary", "file_path", "density"],
      "optional_fields": ["pipeline_phases", "pivot_scope", "last_modified"],
      "review_status_default": "current",
      "speakable": false,
      "hasPart": false,
      "notes": "Indexés uniquement en version low_token. Les versions long et court sont consultées directement via leur file_path."
    },

    {
      "type": "micro_brief",
      "label": "Micro-brief (MB-01 à MB-24)",
      "description": "Version low-token d'un micro-brief ProtorMundi. Consultable par les agents pour retrouver les règles de production d'un composant de page spécifique.",
      "source_component": "MB-01 à MB-24",
      "typical_length_words": "100-300",
      "routing_priority": 5,
      "required_fields": ["chunk_id", "type", "name", "summary", "file_path", "density", "component"],
      "optional_fields": ["pipeline_phases", "pivot_scope", "last_modified"],
      "review_status_default": "current",
      "speakable": false,
      "hasPart": false,
      "notes": "Indexés uniquement en version low_token. Routing par 'component' pour retrouver la règle d'un composant précis (ex. : component=cta → MB-07)."
    }

  ],

  "review_status_values": {
    "current": "Contenu vérifié et à jour",
    "needs_review": "Contenu susceptible d'être obsolète (données de marché > 12 mois, réglementation susceptible d'avoir évolué)",
    "outdated": "Contenu identifié comme dépassé — ne pas utiliser pour des réponses factuelles avant mise à jour"
  },

  "routing_priority_scale": {
    "1": "Priorité maximale — chargé en premier pour les requêtes correspondantes (definition, snippet_aeo, speakable)",
    "2": "Haute priorité — section_summary, faq",
    "3": "Priorité normale — table, trust, takeaway, dataset",
    "4": "Priorité basse — section complète, transcript",
    "5": "Priorité contextuelle — brief, micro_brief (chargés uniquement sur requête de production)"
  },

  "_notes": {
    "new_in_v1_1": "Ajout des types section_summary (MB-15), transcript (MB-24), brief (BS-01→09), micro_brief (MB-01→24). Ces types étaient absents ou non formalisés dans la v1.0.",
    "section_vs_section_summary": "Les pages de production doivent préférer générer des chunks section_summary plutôt que section complet — plus légers et plus efficaces pour le routing RAG.",
    "dataset_review_default": "Le review_status par défaut des datasets est needs_review pour forcer la vérification annuelle des données chiffrées."
  }
}
