Files
moteurs/dist/commun/argent.js
T
JulesandClaude Fable 5.1 69809df5d1 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
2026-09-28 17:06:49 +02:00

58 lines
2.0 KiB
JavaScript

// argent.ts — fourchettes, arrondis, annuité d'un prêt. Fonctions pures,
// sans formatage (l'affichage « 1 200 € HT » appartient aux sites, pas au
// paquet : Intl dépend de l'environnement).
export function fourchette(min, max) {
return min <= max ? { min, max } : { min: max, max: min };
}
export function pointMedian(f) {
return (f.min + f.max) / 2;
}
/** Somme de fourchettes ; une borne manquante est remplacée par l'autre. */
export function additionneFourchettes(liste) {
let min = 0;
let max = 0;
for (const f of liste) {
if (f.min == null && f.max == null)
continue;
const a = f.min ?? f.max ?? 0;
const b = f.max ?? f.min ?? 0;
min += a;
max += b;
}
return { min, max };
}
/** Arrondi au pas donné (pas ≤ 0 → valeur inchangée). */
export function arrondiAuPas(valeur, pas) {
if (!pas || pas <= 0)
return valeur;
return Math.round(valeur / pas) * pas;
}
/** Arrondi à deux décimales. */
export function arrondi2(n) {
return Math.round(n * 100) / 100;
}
/**
* Mensualité d'un prêt à taux fixe (formule d'annuité constante).
* @param capital montant emprunté
* @param taux_annuel_pct taux nominal annuel en % (0 → capital / nombre de mois)
* @param duree_annees durée en années
*/
export function mensualite(capital, taux_annuel_pct, duree_annees) {
const n = Math.round(duree_annees * 12);
if (n <= 0 || capital <= 0)
return 0;
const r = taux_annuel_pct / 100 / 12;
if (r === 0)
return capital / n;
return (capital * r) / (1 - Math.pow(1 + r, -n));
}
/** Annuité (12 mensualités). */
export function annuite(capital, taux_annuel_pct, duree_annees) {
return mensualite(capital, taux_annuel_pct, duree_annees) * 12;
}
/** Coût total du crédit (intérêts seuls). */
export function coutDuCredit(capital, taux_annuel_pct, duree_annees) {
const n = Math.round(duree_annees * 12);
return mensualite(capital, taux_annuel_pct, duree_annees) * n - capital;
}