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:
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
import type { Moteur, Resultat } from '../commun/contrat.js';
|
||||
import type { Contexte, LigneClimat } from '../commun/contexte.js';
|
||||
import { type DonneesAutonomie, type SortiesAxe } from './axe.js';
|
||||
import { type AxesActifs } from './noyau/axes-actifs.js';
|
||||
import type { Autodiag, Axe, PoidsAxes, Statut } from './noyau/types.js';
|
||||
export interface EntreesIntegrateur {
|
||||
autodiag: Autodiag;
|
||||
budget_total: number;
|
||||
/** 'global' = pipeline d'origine (calculs) ; 'par_axe' = somme des moteurs d'axe (plateforme). */
|
||||
mode?: 'global' | 'par_axe';
|
||||
/** Axes désactivés par l'habitant (toggles) ; absent = les trois. */
|
||||
axes_actifs?: AxesActifs;
|
||||
/** P1.5 : aménagements cochés ; ignoré en v0.1 (signalé). */
|
||||
amenagements_coches?: string[];
|
||||
}
|
||||
export interface DonneesIntegrateur extends DonneesAutonomie {
|
||||
france_climat: LigneClimat[];
|
||||
}
|
||||
export interface SortiesIntegrateur {
|
||||
mode: 'global' | 'par_axe';
|
||||
contexte: Contexte;
|
||||
poids: PoidsAxes;
|
||||
budgets: PoidsAxes;
|
||||
axes: Record<Axe, Pick<SortiesAxe, 'postes' | 'typologies' | 'sous_total_eur_ht' | 'budget_alloue' | 'status' | 'taux_couverture' | 'taux_detail'>>;
|
||||
total_eur_ht: number;
|
||||
budget_cible: number;
|
||||
ecart_budget_pct: number;
|
||||
status: Statut;
|
||||
message_status?: string;
|
||||
couplages: string[];
|
||||
taux_couverture: Record<Axe, number | null>;
|
||||
}
|
||||
/** Statut agrégé : BUDGET_INSUFFISANT l'emporte, puis AJOUTER_OPTIONNEL, sinon OK. */
|
||||
export declare function agregeStatuts(statuts: Statut[]): Statut;
|
||||
export declare function calculeIntegrateur(entrees: EntreesIntegrateur, donnees: DonneesIntegrateur): Resultat<SortiesIntegrateur>;
|
||||
export declare const integrateur: Moteur<EntreesIntegrateur, DonneesIntegrateur, SortiesIntegrateur>;
|
||||
export default integrateur;
|
||||
Reference in New Issue
Block a user