{
  "type": "excalidraw",
  "version": 2,
  "source": "https://excalidraw.com",
  "appState": { "viewBackgroundColor": "#ffffff", "gridSize": 20 },
  "files": {},
  "elements": [
    {
      "type": "text", "id": "titre", "x": 40, "y": 24, "width": 980, "height": 35,
      "text": "Ingestion des flux Enedis — architecture ELT (dlt + dbt)",
      "originalText": "Ingestion des flux Enedis — architecture ELT (dlt + dbt)",
      "fontSize": 28, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#1e40af", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100001, "version": 1, "versionNonce": 100002, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "text", "id": "sous_titre", "x": 40, "y": 64, "width": 900, "height": 25,
      "text": "Le mouvement ne casse jamais ; la transformation est rejouable.",
      "originalText": "Le mouvement ne casse jamais ; la transformation est rejouable.",
      "fontSize": 18, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#3b82f6", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100003, "version": 1, "versionNonce": 100004, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "sum1", "x": 1180, "y": 30, "width": 150, "height": 36,
      "strokeColor": "#c2410c", "backgroundColor": "#fed7aa", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100010, "version": 1, "versionNonce": 100011, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "sum1t", "type": "text"}, {"id": "suma1", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "sum1t", "x": 1190, "y": 38, "width": 130, "height": 20,
      "text": "SFTP Enedis", "originalText": "SFTP Enedis",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#374151", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100012, "version": 1, "versionNonce": 100013, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "sum1", "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "sum2", "x": 1380, "y": 30, "width": 170, "height": 36,
      "strokeColor": "#1e3a5f", "backgroundColor": "#93c5fd", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100014, "version": 1, "versionNonce": 100015, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "sum2t", "type": "text"}, {"id": "suma1", "type": "arrow"}, {"id": "suma2", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "sum2t", "x": 1390, "y": 38, "width": 150, "height": 20,
      "text": "brut JSON", "originalText": "brut JSON",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#374151", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100016, "version": 1, "versionNonce": 100017, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "sum2", "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "sum3", "x": 1600, "y": 30, "width": 170, "height": 36,
      "strokeColor": "#047857", "backgroundColor": "#a7f3d0", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100018, "version": 1, "versionNonce": 100019, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "sum3t", "type": "text"}, {"id": "suma2", "type": "arrow"}, {"id": "suma3", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "sum3t", "x": 1610, "y": 38, "width": 150, "height": 20,
      "text": "tables typées", "originalText": "tables typées",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#374151", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100020, "version": 1, "versionNonce": 100021, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "sum3", "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "sum4", "x": 1820, "y": 30, "width": 150, "height": 36,
      "strokeColor": "#1e3a5f", "backgroundColor": "#60a5fa", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100022, "version": 1, "versionNonce": 100023, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "sum4t", "type": "text"}, {"id": "suma3", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "sum4t", "x": 1830, "y": 38, "width": 130, "height": 20,
      "text": "core Polars", "originalText": "core Polars",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#ffffff", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100024, "version": 1, "versionNonce": 100025, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "sum4", "lineHeight": 1.25
    },
    {
      "type": "arrow", "id": "suma1", "x": 1334, "y": 48, "width": 42, "height": 0,
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100026, "version": 1, "versionNonce": 100027, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [42, 0]],
      "startBinding": {"elementId": "sum1", "focus": 0, "gap": 4},
      "endBinding": {"elementId": "sum2", "focus": 0, "gap": 4},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "arrow", "id": "suma2", "x": 1554, "y": 48, "width": 42, "height": 0,
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100028, "version": 1, "versionNonce": 100029, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [42, 0]],
      "startBinding": {"elementId": "sum2", "focus": 0, "gap": 4},
      "endBinding": {"elementId": "sum3", "focus": 0, "gap": 4},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "arrow", "id": "suma3", "x": 1774, "y": 48, "width": 42, "height": 0,
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 100030, "version": 1, "versionNonce": 100031, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [42, 0]],
      "startBinding": {"elementId": "sum3", "focus": 0, "gap": 4},
      "endBinding": {"elementId": "sum4", "focus": 0, "gap": 4},
      "startArrowhead": null, "endArrowhead": "arrow"
    },

    {
      "type": "rectangle", "id": "salle_mouvement", "x": 40, "y": 150, "width": 660, "height": 640,
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "dashed", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200001, "version": 1, "versionNonce": 200002, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "salle_mouvement_titre", "x": 60, "y": 165, "width": 420, "height": 28,
      "text": "1 · MOUVEMENT — dlt", "originalText": "1 · MOUVEMENT — dlt",
      "fontSize": 22, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#1e40af", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200003, "version": 1, "versionNonce": 200004, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "text", "id": "salle_mouvement_st", "x": 60, "y": 196, "width": 560, "height": 20,
      "text": "ingestion/sources/sftp_enedis_brut.py — incrémental (modification_date)\naucune connaissance du contenu, ne casse jamais",
      "originalText": "ingestion/sources/sftp_enedis_brut.py — incrémental (modification_date)\naucune connaissance du contenu, ne casse jamais",
      "fontSize": 13, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200005, "version": 1, "versionNonce": 200006, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "ellipse", "id": "sftp", "x": 70, "y": 240, "width": 210, "height": 76,
      "strokeColor": "#c2410c", "backgroundColor": "#fed7aa", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200010, "version": 1, "versionNonce": 200011, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "sftp_t", "type": "text"}, {"id": "fl_a1", "type": "arrow"}],
      "link": null, "locked": false
    },
    {
      "type": "text", "id": "sftp_t", "x": 95, "y": 258, "width": 160, "height": 40,
      "text": "SFTP Enedis\n*.zip chiffrés AES", "originalText": "SFTP Enedis\n*.zip chiffrés AES",
      "fontSize": 14, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#374151", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200012, "version": 1, "versionNonce": 200013, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "sftp", "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "decrypt", "x": 75, "y": 370, "width": 200, "height": 58,
      "strokeColor": "#1e3a5f", "backgroundColor": "#60a5fa", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200014, "version": 1, "versionNonce": 200015, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "decrypt_t", "type": "text"}, {"id": "fl_a1", "type": "arrow"}, {"id": "fl_a2", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "decrypt_t", "x": 85, "y": 380, "width": 180, "height": 38,
      "text": "decrypt AES-128-CBC\nrotation current / previous", "originalText": "decrypt AES-128-CBC\nrotation current / previous",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#ffffff", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200016, "version": 1, "versionNonce": 200017, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "decrypt", "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "unzip", "x": 75, "y": 478, "width": 200, "height": 58,
      "strokeColor": "#1e3a5f", "backgroundColor": "#60a5fa", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200018, "version": 1, "versionNonce": 200019, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "unzip_t", "type": "text"}, {"id": "fl_a2", "type": "arrow"}, {"id": "fl_a3", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "unzip_t", "x": 85, "y": 488, "width": 180, "height": 38,
      "text": "unzip\nfile_regex (flux.yaml)", "originalText": "unzip\nfile_regex (flux.yaml)",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#ffffff", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200020, "version": 1, "versionNonce": 200021, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "unzip", "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "convertir", "x": 65, "y": 586, "width": 220, "height": 74,
      "strokeColor": "#1e3a5f", "backgroundColor": "#3b82f6", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200022, "version": 1, "versionNonce": 200023, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "convertir_t", "type": "text"}, {"id": "fl_a3", "type": "arrow"}, {"id": "vers_brut", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "convertir_t", "x": 75, "y": 596, "width": 200, "height": 54,
      "text": "xml_vers_dict (générique)\n« conteneur = liste »\nR64 : json.loads", "originalText": "xml_vers_dict (générique)\n« conteneur = liste »\nR64 : json.loads",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#ffffff", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200024, "version": 1, "versionNonce": 200025, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "convertir", "lineHeight": 1.25
    },
    {
      "type": "arrow", "id": "fl_a1", "x": 175, "y": 320, "width": 0, "height": 46,
      "strokeColor": "#c2410c", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200026, "version": 1, "versionNonce": 200027, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [0, 46]],
      "startBinding": {"elementId": "sftp", "focus": 0, "gap": 4},
      "endBinding": {"elementId": "decrypt", "focus": 0, "gap": 4},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "arrow", "id": "fl_a2", "x": 175, "y": 432, "width": 0, "height": 42,
      "strokeColor": "#1e3a5f", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200028, "version": 1, "versionNonce": 200029, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [0, 42]],
      "startBinding": {"elementId": "decrypt", "focus": 0, "gap": 4},
      "endBinding": {"elementId": "unzip", "focus": 0, "gap": 4},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "arrow", "id": "fl_a3", "x": 175, "y": 540, "width": 0, "height": 42,
      "strokeColor": "#1e3a5f", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200030, "version": 1, "versionNonce": 200031, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [0, 42]],
      "startBinding": {"elementId": "unzip", "focus": 0, "gap": 4},
      "endBinding": {"elementId": "convertir", "focus": 0, "gap": 4},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "rectangle", "id": "ev_xml", "x": 330, "y": 250, "width": 340, "height": 170,
      "strokeColor": "#1e293b", "backgroundColor": "#1e293b", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200040, "version": 1, "versionNonce": 200041, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "ev_fleche", "type": "arrow"}], "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "ev_xml_t", "x": 345, "y": 262, "width": 310, "height": 146,
      "text": "<PRM>\n  <Id_PRM>14206…</Id_PRM>\n  <Donnees_Releve>\n    <Date_Releve>2024-11-26…\n    <Classe_Temporelle_Distributeur>\n      <Id_Classe_Temporelle>HCH\n      <Valeur>305148</Valeur>\n  <Donnees_Releve>   ← répété !",
      "originalText": "<PRM>\n  <Id_PRM>14206…</Id_PRM>\n  <Donnees_Releve>\n    <Date_Releve>2024-11-26…\n    <Classe_Temporelle_Distributeur>\n      <Id_Classe_Temporelle>HCH\n      <Valeur>305148</Valeur>\n  <Donnees_Releve>   ← répété !",
      "fontSize": 12, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#e2e8f0", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200042, "version": 1, "versionNonce": 200043, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "arrow", "id": "ev_fleche", "x": 500, "y": 426, "width": 0, "height": 48,
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200044, "version": 1, "versionNonce": 200045, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [0, 48]],
      "startBinding": {"elementId": "ev_xml", "focus": 0, "gap": 4},
      "endBinding": {"elementId": "ev_json", "focus": 0, "gap": 4},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "rectangle", "id": "ev_json", "x": 330, "y": 480, "width": 340, "height": 180,
      "strokeColor": "#1e293b", "backgroundColor": "#1e293b", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200046, "version": 1, "versionNonce": 200047, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "ev_json_t", "x": 345, "y": 492, "width": 310, "height": 156,
      "text": "{\"PRM\": [{\n  \"Id_PRM\": \"14206…\",\n  \"Donnees_Releve\": [{\n    \"Date_Releve\": \"2024-11-26…\",\n    \"Classe_Temporelle_Distributeur\": [{\n      \"Id_Classe_Temporelle\": \"HCH\",\n      \"Valeur\": \"305148\" }] },\n  { … 2e relevé … }] }]}",
      "originalText": "{\"PRM\": [{\n  \"Id_PRM\": \"14206…\",\n  \"Donnees_Releve\": [{\n    \"Date_Releve\": \"2024-11-26…\",\n    \"Classe_Temporelle_Distributeur\": [{\n      \"Id_Classe_Temporelle\": \"HCH\",\n      \"Valeur\": \"305148\" }] },\n  { … 2e relevé … }] }]}",
      "fontSize": 12, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#22c55e", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200048, "version": 1, "versionNonce": 200049, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "text", "id": "ev_note", "x": 330, "y": 700, "width": 350, "height": 60,
      "text": "politique structurelle : tout conteneur devient une\nliste, même unique → chemins [0] stables, les\nmultiplicités Enedis sont absorbées sans casser",
      "originalText": "politique structurelle : tout conteneur devient une\nliste, même unique → chemins [0] stables, les\nmultiplicités Enedis sont absorbées sans casser",
      "fontSize": 13, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 200050, "version": 1, "versionNonce": 200051, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },

    {
      "type": "text", "id": "hero_sur", "x": 790, "y": 268, "width": 330, "height": 22,
      "text": "LE PIVOT — l'assurance du système", "originalText": "LE PIVOT — l'assurance du système",
      "fontSize": 17, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#1e40af", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 300001, "version": 1, "versionNonce": 300002, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "hero_brut", "x": 770, "y": 300, "width": 380, "height": 280,
      "strokeColor": "#1e3a5f", "backgroundColor": "#93c5fd", "fillStyle": "solid",
      "strokeWidth": 3, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 300003, "version": 1, "versionNonce": 300004, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "vers_brut", "type": "arrow"}, {"id": "vers_stg", "type": "arrow"}, {"id": "replay", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "hero_titre", "x": 800, "y": 318, "width": 320, "height": 28,
      "text": "flux_raw.raw_c15 / r15 / r151 / f12 / f15 / r64",
      "originalText": "flux_raw.raw_c15 / r15 / r151 / f12 / f15 / r64",
      "fontSize": 15, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#1e3a5f", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 300005, "version": 1, "versionNonce": 300006, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "text", "id": "hero_props", "x": 800, "y": 350, "width": 330, "height": 60,
      "text": "1 ligne = 1 document intégral\nmerge sur file_name → re-livraisons dédoublonnées\naucun schéma : ne casse jamais, ne perd rien",
      "originalText": "1 ligne = 1 document intégral\nmerge sur file_name → re-livraisons dédoublonnées\naucun schéma : ne casse jamais, ne perd rien",
      "fontSize": 12, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#374151", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 300007, "version": 1, "versionNonce": 300008, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "hero_chip", "x": 790, "y": 420, "width": 340, "height": 130,
      "strokeColor": "#1e293b", "backgroundColor": "#1e293b", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 300009, "version": 1, "versionNonce": 300010, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "hero_chip_t", "x": 805, "y": 432, "width": 315, "height": 106,
      "text": "file_name          'ERDF_R151_…_00238….xml'\nmodification_date  '2024-11-28T05:01:12'\n_source_zip        'ERDF_R151_….zip'\ncontent            { document JSON intégral }",
      "originalText": "file_name          'ERDF_R151_…_00238….xml'\nmodification_date  '2024-11-28T05:01:12'\n_source_zip        'ERDF_R151_….zip'\ncontent            { document JSON intégral }",
      "fontSize": 12, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#22c55e", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 300011, "version": 1, "versionNonce": 300012, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.45
    },
    {
      "type": "arrow", "id": "vers_brut", "x": 175, "y": 666, "width": 590, "height": -206,
      "strokeColor": "#1e3a5f", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 3, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 300013, "version": 1, "versionNonce": 300014, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [0, 109], [560, 109], [560, -206], [590, -206]],
      "startBinding": {"elementId": "convertir", "focus": 0, "gap": 6},
      "endBinding": {"elementId": "hero_brut", "focus": 0, "gap": 6},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "rectangle", "id": "callout_enedis", "x": 770, "y": 620, "width": 380, "height": 120,
      "strokeColor": "#b45309", "backgroundColor": "#fef3c7", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "dashed", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 300015, "version": 1, "versionNonce": 300016, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "callout_enedis_t", "x": 786, "y": 632, "width": 350, "height": 96,
      "text": "Enedis change un flux (nouvelle version XSD) ?\nLe nouveau champ atterrit DÉJÀ dans le brut.\n→ 1 ligne de SQL : coalesce(nouveau, ancien)\n→ rebuild : historique backfillé en ~13 s,\n   zéro re-téléchargement",
      "originalText": "Enedis change un flux (nouvelle version XSD) ?\nLe nouveau champ atterrit DÉJÀ dans le brut.\n→ 1 ligne de SQL : coalesce(nouveau, ancien)\n→ rebuild : historique backfillé en ~13 s,\n   zéro re-téléchargement",
      "fontSize": 13, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#b45309", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 300017, "version": 1, "versionNonce": 300018, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.35
    },

    {
      "type": "rectangle", "id": "salle_dbt", "x": 1220, "y": 150, "width": 750, "height": 640,
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "dashed", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400001, "version": 1, "versionNonce": 400002, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "salle_dbt_titre", "x": 1240, "y": 165, "width": 480, "height": 28,
      "text": "2 · TRANSFORMATION — dbt", "originalText": "2 · TRANSFORMATION — dbt",
      "fontSize": 22, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#1e40af", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400003, "version": 1, "versionNonce": 400004, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "text", "id": "salle_dbt_st", "x": 1240, "y": 196, "width": 600, "height": 20,
      "text": "SQL pur — electricore/ingestion/dbt/models/ — re-matérialisable à volonté",
      "originalText": "SQL pur — electricore/ingestion/dbt/models/ — re-matérialisable à volonté",
      "fontSize": 13, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400005, "version": 1, "versionNonce": 400006, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "staging", "x": 1250, "y": 250, "width": 260, "height": 86,
      "strokeColor": "#1e3a5f", "backgroundColor": "#60a5fa", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400010, "version": 1, "versionNonce": 400011, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "staging_t", "type": "text"}, {"id": "vers_stg", "type": "arrow"}, {"id": "stg_vers_mod", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "staging_t", "x": 1260, "y": 262, "width": 240, "height": 62,
      "text": "staging (vues stg_*)\néclatement en occurrences\nprm_id · releve_id · mesure_id", "originalText": "staging (vues stg_*)\néclatement en occurrences\nprm_id · releve_id · mesure_id",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#ffffff", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400012, "version": 1, "versionNonce": 400013, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "staging", "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "modeles", "x": 1250, "y": 400, "width": 260, "height": 86,
      "strokeColor": "#1e3a5f", "backgroundColor": "#3b82f6", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400014, "version": 1, "versionNonce": 400015, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "modeles_t", "type": "text"}, {"id": "stg_vers_mod", "type": "arrow"}, {"id": "mod_vers_tables", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "modeles_t", "x": 1260, "y": 412, "width": 240, "height": 62,
      "text": "modèles flux_* (1 par table)\nsélection WHERE · pivot cadrans\ntypes dictés par les XSD", "originalText": "modèles flux_* (1 par table)\nsélection WHERE · pivot cadrans\ntypes dictés par les XSD",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#ffffff", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400016, "version": 1, "versionNonce": 400017, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "modeles", "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "ev_sql", "x": 1570, "y": 250, "width": 370, "height": 236,
      "strokeColor": "#1e293b", "backgroundColor": "#1e293b", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400018, "version": 1, "versionNonce": 400019, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "ev_sql_t", "x": 1585, "y": 262, "width": 340, "height": 212,
      "text": "-- flux_c15.sql (extrait réel)\nselect\n  prm ->> '$.Id_PRM'  as pdl,\n  cast(prm ->> '$…Puissance_Souscrite'\n       as double) as puissance_souscrite_kva,\n  …\nwhere code_qualif in ('1', '2')\n  and classe_mesure = '1'   -- index\n  and sens_mesure   = '0'   -- soutirage",
      "originalText": "-- flux_c15.sql (extrait réel)\nselect\n  prm ->> '$.Id_PRM'  as pdl,\n  cast(prm ->> '$…Puissance_Souscrite'\n       as double) as puissance_souscrite_kva,\n  …\nwhere code_qualif in ('1', '2')\n  and classe_mesure = '1'   -- index\n  and sens_mesure   = '0'   -- soutirage",
      "fontSize": 12, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#93c5fd", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400020, "version": 1, "versionNonce": 400021, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.45
    },
    {
      "type": "rectangle", "id": "tables_typees", "x": 1250, "y": 560, "width": 290, "height": 90,
      "strokeColor": "#047857", "backgroundColor": "#a7f3d0", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400022, "version": 1, "versionNonce": 400023, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "tables_t", "type": "text"}, {"id": "mod_vers_tables", "type": "arrow"}, {"id": "replay", "type": "arrow"}, {"id": "vers_aval", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "tables_t", "x": 1260, "y": 572, "width": 270, "height": 66,
      "text": "flux_enedis.flux_c15, flux_r15,\nflux_r15_acc, flux_r151, flux_r64,\nflux_f12_detail, flux_f15_detail", "originalText": "flux_enedis.flux_c15, flux_r15,\nflux_r15_acc, flux_r151, flux_r64,\nflux_f12_detail, flux_f15_detail",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#047857", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400024, "version": 1, "versionNonce": 400025, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "tables_typees", "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "ev_types", "x": 1570, "y": 540, "width": 370, "height": 130,
      "strokeColor": "#1e293b", "backgroundColor": "#1e293b", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400026, "version": 1, "versionNonce": 400027, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "ev_types_t", "x": 1585, "y": 552, "width": 340, "height": 106,
      "text": "pdl                      VARCHAR\ndate_evenement           TIMESTAMPTZ\ndate_releve              DATE\npuissance_souscrite_kva  DOUBLE\nindex_hph_kwh            BIGINT",
      "originalText": "pdl                      VARCHAR\ndate_evenement           TIMESTAMPTZ\ndate_releve              DATE\npuissance_souscrite_kva  DOUBLE\nindex_hph_kwh            BIGINT",
      "fontSize": 12, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#22c55e", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400028, "version": 1, "versionNonce": 400029, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.45
    },
    {
      "type": "arrow", "id": "vers_stg", "x": 1156, "y": 380, "width": 88, "height": -60,
      "strokeColor": "#1e3a5f", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 3, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400030, "version": 1, "versionNonce": 400031, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [88, -60]],
      "startBinding": {"elementId": "hero_brut", "focus": 0, "gap": 6},
      "endBinding": {"elementId": "staging", "focus": 0, "gap": 6},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "arrow", "id": "stg_vers_mod", "x": 1380, "y": 340, "width": 0, "height": 54,
      "strokeColor": "#1e3a5f", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400032, "version": 1, "versionNonce": 400033, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [0, 54]],
      "startBinding": {"elementId": "staging", "focus": 0, "gap": 4},
      "endBinding": {"elementId": "modeles", "focus": 0, "gap": 4},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "arrow", "id": "mod_vers_tables", "x": 1380, "y": 490, "width": 0, "height": 64,
      "strokeColor": "#1e3a5f", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400034, "version": 1, "versionNonce": 400035, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [0, 64]],
      "startBinding": {"elementId": "modeles", "focus": 0, "gap": 4},
      "endBinding": {"elementId": "tables_typees", "focus": 0, "gap": 4},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "arrow", "id": "replay", "x": 1250, "y": 605, "width": 96, "height": -85,
      "strokeColor": "#047857", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 3, "strokeStyle": "dashed", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400036, "version": 1, "versionNonce": 400037, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [-65, 0], [-65, -85], [-96, -85]],
      "startBinding": {"elementId": "tables_typees", "focus": 0, "gap": 8},
      "endBinding": {"elementId": "hero_brut", "focus": 0, "gap": 8},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "text", "id": "replay_label", "x": 880, "y": 796, "width": 460, "height": 42,
      "text": "↻ rebuild — re-matérialise TOUT\ndepuis le brut · ~13 s · zéro réseau",
      "originalText": "↻ rebuild — re-matérialise TOUT\ndepuis le brut · ~13 s · zéro réseau",
      "fontSize": 16, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#047857", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 400038, "version": 1, "versionNonce": 400039, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },

    {
      "type": "text", "id": "filet_titre", "x": 40, "y": 850, "width": 620, "height": 26,
      "text": "LE FILET — toute dérive de contrat casse la CI",
      "originalText": "LE FILET — toute dérive de contrat casse la CI",
      "fontSize": 20, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#1e40af", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500001, "version": 1, "versionNonce": 500002, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "line", "id": "filet_ligne", "x": 60, "y": 920, "width": 1040, "height": 0,
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500003, "version": 1, "versionNonce": 500004, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [1040, 0]]
    },
    {
      "type": "ellipse", "id": "filet_dot1", "x": 112, "y": 912, "width": 16, "height": 16,
      "strokeColor": "#3b82f6", "backgroundColor": "#3b82f6", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500005, "version": 1, "versionNonce": 500006, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false
    },
    {
      "type": "text", "id": "filet_lab1", "x": 70, "y": 944, "width": 250, "height": 56,
      "text": "golden — fixtures réelles\nanonymisées (6 flux),\nfigées au record près",
      "originalText": "golden — fixtures réelles\nanonymisées (6 flux),\nfigées au record près",
      "fontSize": 13, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500007, "version": 1, "versionNonce": 500008, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.3
    },
    {
      "type": "ellipse", "id": "filet_dot2", "x": 452, "y": 912, "width": 16, "height": 16,
      "strokeColor": "#3b82f6", "backgroundColor": "#3b82f6", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500009, "version": 1, "versionNonce": 500010, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false
    },
    {
      "type": "text", "id": "filet_lab2", "x": 410, "y": 944, "width": 280, "height": 56,
      "text": "golden — fixtures XSD maximales\ngénérées des schémas Enedis\n(optionnels + enums couverts)",
      "originalText": "golden — fixtures XSD maximales\ngénérées des schémas Enedis\n(optionnels + enums couverts)",
      "fontSize": 13, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500011, "version": 1, "versionNonce": 500012, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.3
    },
    {
      "type": "ellipse", "id": "filet_dot3", "x": 822, "y": 912, "width": 16, "height": 16,
      "strokeColor": "#3b82f6", "backgroundColor": "#3b82f6", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500013, "version": 1, "versionNonce": 500014, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false
    },
    {
      "type": "text", "id": "filet_lab3", "x": 780, "y": 944, "width": 290, "height": 56,
      "text": "data tests dbt (not_null) +\ncontrat de types XSD —\njoués à chaque dbt build & CI",
      "originalText": "data tests dbt (not_null) +\ncontrat de types XSD —\njoués à chaque dbt build & CI",
      "fontSize": 13, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500015, "version": 1, "versionNonce": 500016, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.3
    },
    {
      "type": "rectangle", "id": "aval_loaders", "x": 1250, "y": 880, "width": 320, "height": 64,
      "strokeColor": "#1e3a5f", "backgroundColor": "#60a5fa", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500020, "version": 1, "versionNonce": 500021, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "aval_loaders_t", "type": "text"}, {"id": "vers_aval", "type": "arrow"}, {"id": "aval_fl", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "aval_loaders_t", "x": 1260, "y": 892, "width": 300, "height": 40,
      "text": "core/loaders — DuckDBQuery\nc15() · r151() · releves() · r64()", "originalText": "core/loaders — DuckDBQuery\nc15() · r151() · releves() · r64()",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#ffffff", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500022, "version": 1, "versionNonce": 500023, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "aval_loaders", "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "aval_core", "x": 1640, "y": 880, "width": 320, "height": 64,
      "strokeColor": "#1e3a5f", "backgroundColor": "#3b82f6", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500024, "version": 1, "versionNonce": 500025, "isDeleted": false,
      "groupIds": [], "boundElements": [{"id": "aval_core_t", "type": "text"}, {"id": "aval_fl", "type": "arrow"}],
      "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "aval_core_t", "x": 1650, "y": 892, "width": 300, "height": 40,
      "text": "pipelines Polars (core)\npérimètre · énergies · TURPE · facturation", "originalText": "pipelines Polars (core)\npérimètre · énergies · TURPE · facturation",
      "fontSize": 13, "fontFamily": 3, "textAlign": "center", "verticalAlign": "middle",
      "strokeColor": "#ffffff", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500026, "version": 1, "versionNonce": 500027, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": "aval_core", "lineHeight": 1.25
    },
    {
      "type": "arrow", "id": "vers_aval", "x": 1400, "y": 654, "width": 8, "height": 220,
      "strokeColor": "#047857", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500028, "version": 1, "versionNonce": 500029, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [8, 220]],
      "startBinding": {"elementId": "tables_typees", "focus": 0, "gap": 6},
      "endBinding": {"elementId": "aval_loaders", "focus": 0, "gap": 6},
      "startArrowhead": null, "endArrowhead": "arrow"
    },
    {
      "type": "arrow", "id": "aval_fl", "x": 1576, "y": 912, "width": 58, "height": 0,
      "strokeColor": "#1e3a5f", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 2, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 500030, "version": 1, "versionNonce": 500031, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "points": [[0, 0], [58, 0]],
      "startBinding": {"elementId": "aval_loaders", "focus": 0, "gap": 4},
      "endBinding": {"elementId": "aval_core", "focus": 0, "gap": 4},
      "startArrowhead": null, "endArrowhead": "arrow"
    },

    {
      "type": "text", "id": "orch_titre", "x": 40, "y": 1050, "width": 520, "height": 26,
      "text": "3 · ORCHESTRATION — python -m electricore.ingestion",
      "originalText": "3 · ORCHESTRATION — python -m electricore.ingestion",
      "fontSize": 20, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#1e40af", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 600001, "version": 1, "versionNonce": 600002, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "text", "id": "orch_st", "x": 40, "y": 1082, "width": 660, "height": 20,
      "text": "un seul runner pour les deux étages — lancé par l'API /ingestion/run, le cron du VPS, ou à la main",
      "originalText": "un seul runner pour les deux étages — lancé par l'API /ingestion/run, le cron du VPS, ou à la main",
      "fontSize": 13, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 600003, "version": 1, "versionNonce": 600004, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "rectangle", "id": "orch_term", "x": 40, "y": 1120, "width": 640, "height": 124,
      "strokeColor": "#1e293b", "backgroundColor": "#1e293b", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 600005, "version": 1, "versionNonce": 600006, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false, "roundness": {"type": 3}
    },
    {
      "type": "text", "id": "orch_term_t", "x": 55, "y": 1132, "width": 610, "height": 90,
      "text": "$ python -m electricore.ingestion test      # smoke — 2 fichiers/flux\n$ python -m electricore.ingestion all       # landing + dbt build\n$ python -m electricore.ingestion r151 c15  # sélection de flux\n$ python -m electricore.ingestion rebuild   # dbt seul — zéro réseau\n$ python -m electricore.ingestion resync    # re-télécharge tout",
      "originalText": "$ python -m electricore.ingestion test      # smoke — 2 fichiers/flux\n$ python -m electricore.ingestion all       # landing + dbt build\n$ python -m electricore.ingestion r151 c15  # sélection de flux\n$ python -m electricore.ingestion rebuild   # dbt seul — zéro réseau\n$ python -m electricore.ingestion resync    # re-télécharge tout",
      "fontSize": 12, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#e2e8f0", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 600007, "version": 1, "versionNonce": 600008, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.45
    },
    {
      "type": "text", "id": "orch_rebuild_t", "x": 740, "y": 1138, "width": 680, "height": 20,
      "text": "rebuild → rejoue seulement 2 · TRANSFORMATION — le brut reste, zéro réseau",
      "originalText": "rebuild → rejoue seulement 2 · TRANSFORMATION — le brut reste, zéro réseau",
      "fontSize": 14, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#047857", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 600009, "version": 1, "versionNonce": 600010, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "text", "id": "orch_resync_t", "x": 740, "y": 1176, "width": 680, "height": 20,
      "text": "resync  → rejoue seulement 1 · MOUVEMENT — le brut se reconstruit du SFTP",
      "originalText": "resync  → rejoue seulement 1 · MOUVEMENT — le brut se reconstruit du SFTP",
      "fontSize": 14, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#c2410c", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 600011, "version": 1, "versionNonce": 600012, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    },
    {
      "type": "text", "id": "orch_these_t", "x": 740, "y": 1216, "width": 640, "height": 20,
      "text": "chaque étage se rejoue indépendamment de l'autre : c'est la thèse du schéma",
      "originalText": "chaque étage se rejoue indépendamment de l'autre : c'est la thèse du schéma",
      "fontSize": 13, "fontFamily": 3, "textAlign": "left", "verticalAlign": "top",
      "strokeColor": "#64748b", "backgroundColor": "transparent", "fillStyle": "solid",
      "strokeWidth": 1, "strokeStyle": "solid", "roughness": 0, "opacity": 100, "angle": 0,
      "seed": 600013, "version": 1, "versionNonce": 600014, "isDeleted": false,
      "groupIds": [], "boundElements": null, "link": null, "locked": false,
      "containerId": null, "lineHeight": 1.25
    }
  ]
}
