LOT P1.0 : paquet @transformer/moteurs v0.1.0

Extraction du cœur autonomie de calculs.trans-former.fr (12 modules, sans
singleton, couplages sans mutation, console derrière debug), découpage en trois
moteurs d'axe + intégrateur (mode global = calculs, mode par_axe = plateforme),
moteurs commun.contexte (Corse 2A/2B, DOM 97x corrigés) et commun.geometrie,
table des coefficients harmonisés (docs/CONSTANTES.md pour Jules, R-7),
validation structurelle des données (schemas/), tests hors ligne : 28 assertions
d'origine + épingle générée depuis le code d'astro-pro + écarts d'harmonisation
figés + contrat des moteurs. dist/ committé.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019UBHYPdeQYy2m1GVJp6b12
This commit is contained in:
Jules
2026-09-28 17:06:49 +02:00
co-authored by Claude Fable 5.1
commit 69809df5d1
123 changed files with 13225 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.trans-former.fr/jules/moteurs/schemas/algo_config.schema.json",
"description": "Heuristiques de conception du simulateur autonomie (poids, modulateurs, matrices, tolérances, alias, poids des postes). Données non sourcées, injectées, jamais importées.",
"type": "object",
"required": [
"poids_axes_base",
"modulateurs",
"adequation_weights",
"tolerances",
"bonus_malus",
"couplages_alias",
"postes_poids"
],
"properties": {
"poids_axes_base": {
"type": "object",
"required": [
"eau",
"energie",
"alim"
],
"properties": {
"eau": {
"type": "number"
},
"energie": {
"type": "number"
},
"alim": {
"type": "number"
}
}
},
"modulateurs": {
"type": "object"
},
"adequation_weights": {
"type": "object"
},
"tolerances": {
"type": "object",
"properties": {
"budget_overrun_pct": {
"type": "number"
},
"budget_underspend_pct": {
"type": "number"
},
"tolerance_par_poste_pct": {
"type": "number"
}
}
},
"bonus_malus": {
"type": "object"
},
"couplages_alias": {
"type": "object"
},
"postes_poids": {
"type": "object"
}
}
}
+68
View File
@@ -0,0 +1,68 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.trans-former.fr/jules/moteurs/schemas/france_climat.schema.json",
"description": "Une ligne par département (2A, 2B et 971-976 compris) : zone RT, pluviométrie, DJU base 18, zone biogéographique numérique.",
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"dept",
"zone_rt"
],
"properties": {
"dept": {
"type": "string"
},
"nom_dept": {
"type": [
"string",
"null"
]
},
"zone_rt": {
"type": "string",
"enum": [
"H1a",
"H1b",
"H1c",
"H2a",
"H2b",
"H2c",
"H2d",
"H3"
]
},
"pluvio_mm_an": {
"type": [
"number",
"null"
]
},
"dju_base_18": {
"type": [
"number",
"null"
]
},
"zone_biogeo": {
"type": [
"number",
"null"
]
},
"source_climat": {
"type": [
"string",
"null"
]
},
"source_date": {
"type": [
"string",
"null"
]
}
}
}
}
+183
View File
@@ -0,0 +1,183 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.trans-former.fr/jules/moteurs/schemas/options.schema.json",
"description": "Typologies (options) du simulateur autonomie. Les prix y sont des DONNÉES publiées par calculs, jamais des constantes du paquet. parametre_dim, couplages_requis et couplages_exclus arrivent en JSON sérialisé (NocoDB) ou déjà parsés.",
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"Id",
"poste_id",
"code",
"nom"
],
"properties": {
"Id": {
"type": "integer"
},
"poste_id": {
"type": "integer"
},
"code": {
"type": "string"
},
"nom": {
"type": "string"
},
"typologie": {
"type": [
"string",
"null"
]
},
"actif": {
"type": [
"boolean",
"null"
]
},
"prix_mat_min": {
"type": [
"number",
"null"
]
},
"prix_mat_max": {
"type": [
"number",
"null"
]
},
"prix_pro_min": {
"type": [
"number",
"null"
]
},
"prix_pro_max": {
"type": [
"number",
"null"
]
},
"prix_par_unite": {
"type": [
"number",
"null"
]
},
"prix_fixe": {
"type": [
"number",
"null"
]
},
"unite": {
"type": [
"string",
"null"
]
},
"quantite_default": {
"type": [
"number",
"null"
]
},
"parametre_dim": {
"type": [
"string",
"object",
"null"
]
},
"couplages_requis": {
"type": [
"string",
"array",
"null"
]
},
"couplages_exclus": {
"type": [
"string",
"array",
"null"
]
},
"flag_diy": {
"type": [
"boolean",
"null"
]
},
"complexite_pose": {
"type": [
"number",
"null"
]
},
"accessible_fr": {
"type": [
"boolean",
"null"
]
},
"filiere_agreee": {
"type": [
"boolean",
"null"
]
},
"surface_min_m2": {
"type": [
"number",
"null"
]
},
"surface_optimale_m2": {
"type": [
"number",
"null"
]
},
"tags": {
"type": [
"array",
"null"
]
},
"source": {
"type": [
"string",
"null"
]
},
"source_date": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"description_pedago": {
"type": [
"string",
"null"
]
},
"notes_techniques": {
"type": [
"string",
"null"
]
}
}
}
}
+59
View File
@@ -0,0 +1,59 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.trans-former.fr/jules/moteurs/schemas/postes.schema.json",
"description": "Postes du simulateur autonomie (calculs.trans-former.fr/calculs/data/postes.json). Champs lus par les moteurs.",
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"Id",
"axe",
"code",
"poste"
],
"properties": {
"Id": {
"type": "integer"
},
"axe": {
"type": "string",
"enum": [
"eau",
"energie",
"alimentation"
]
},
"code": {
"type": "string"
},
"poste": {
"type": "string"
},
"ordre": {
"type": [
"number",
"null"
]
},
"obligatoire": {
"type": [
"boolean",
"null"
]
},
"actif": {
"type": [
"boolean",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
}
}
}
}