1/*  fr_bareme_km -- French tax mileage allowance scale (bareme kilometrique)
    2
    3    Coefficients of the French "bareme kilometrique" used to deduct
    4    professional travel costs ("frais reels") from income tax, for five
    5    tax returns: declaration years 2022 to 2026 (income years 2021-2025).
    6
    7    Data: dataset "Bareme kilometrique fiscal France 2022-2026"
    8    (MaCalculatriceEnLigne, DOI 10.17632/5s59m9wycw.1, CC BY 4.0),
    9    each value cross-checked against the official texts listed in
   10    source_bareme/2 (BOFIP, DGFiP brochures, service-public.gouv.fr).
   11
   12    Code: MIT licence. See LICENSE and README.md.
   13    Home: https://macalculatriceenligne.com/finance/divers/calcul-frais-kilometriques/
   14*/
   15
   16:- module(fr_bareme_km,
   17          [ bareme_km/5,          % ?Annee, ?Vehicule, ?Classe, ?Tranche, ?Formule
   18            classe_puissance/3,   % +Vehicule, +CV, -Classe
   19            frais_km/5,           % +Annee, +Vehicule, +CV, +Km, -Montant
   20            frais_km/6,           % +Annee, +Vehicule, +CV, +Km, +Options, -Montant
   21            annee_revenus/2,      % ?AnneeDeclaration, ?AnneeRevenus
   22            source_bareme/2       % ?AnneeDeclaration, ?Source
   23          ]).

French tax mileage allowance scale (bareme kilometrique)

Schema of the facts:

bareme_km(Annee, Vehicule, Classe, tranche(Min, Max), formule(Coef, Constante))

Electric vehicles: +20 % on the amount (CGI, annexe IV, art. 6 B, II), option electrique(true) of frais_km/6.

 classe_puissance(+Vehicule, +CV, -Classe) is semidet
Maps a fiscal horsepower (integer CV) to the class used by the scale. Cyclomoteurs have a single class (toutes), CV is ignored.
   48classe_puissance(automobile, CV, Classe) :-
   49    integer(CV), CV >= 1,
   50    (   CV =< 3 -> Classe = cv3_et_moins
   51    ;   CV =:= 4 -> Classe = cv4
   52    ;   CV =:= 5 -> Classe = cv5
   53    ;   CV =:= 6 -> Classe = cv6
   54    ;   Classe = cv7_et_plus
   55    ).
   56classe_puissance(motocyclette, CV, Classe) :-
   57    integer(CV), CV >= 1,
   58    (   CV =< 2 -> Classe = cv1_2
   59    ;   CV =< 5 -> Classe = cv3_4_5
   60    ;   Classe = cv_plus_de_5
   61    ).
   62classe_puissance(cyclomoteur, _, toutes).
 frais_km(+Annee, +Vehicule, +CV, +Km, -Montant) is semidet
Deductible amount in euros (rounded to the cent) for Km professional kilometres, thermal / hybrid / hydrogen vehicle.
   69frais_km(Annee, Vehicule, CV, Km, Montant) :-
   70    frais_km(Annee, Vehicule, CV, Km, [], Montant).
 frais_km(+Annee, +Vehicule, +CV, +Km, +Options, -Montant) is semidet
As frais_km/5. Options: electrique(true) applies the 20 % increase for 100 % electric vehicles.
   77frais_km(Annee, Vehicule, CV, Km, Options, Montant) :-
   78    number(Km), Km >= 0,
   79    classe_puissance(Vehicule, CV, Classe),
   80    bareme_km(Annee, Vehicule, Classe, Tranche, formule(Coef, Constante)),
   81    dans_tranche(Km, Tranche),
   82    !,
   83    Brut is Km * Coef + Constante,
   84    (   memberchk(electrique(true), Options)
   85    ->  Total is Brut * 1.2
   86    ;   Total = Brut
   87    ),
   88    Montant is round(Total * 100) / 100.
   89
   90dans_tranche(Km, tranche(0, Max)) :-
   91    !,
   92    Km =< Max.
   93dans_tranche(Km, tranche(Min, Max)) :-
   94    Km > Min,
   95    (   Max == inf -> true ; Km =< Max ).
 annee_revenus(?AnneeDeclaration, ?AnneeRevenus) is nondet
The 2026 scale (declaration year) applies to 2025 income/kilometres.
  101annee_revenus(Decl, Rev) :-
  102    source_bareme(Decl, _),
  103    Rev is Decl - 1.
 source_bareme(?AnneeDeclaration, ?Source) is nondet
Official text against which each year was cross-checked.
  109source_bareme(2022, 'BOFIP BOI-BAREME-000001-20230720, II-B and III (revenus 2021)').
  110source_bareme(2023, 'BOFIP BOI-BAREME-000001-20230720, II-A and III (revenus 2022)').
  111source_bareme(2024, 'DGFiP, brochure pratique IR 2024, traitements et salaires').
  112source_bareme(2025, 'DGFiP, brochure pratique IR 2025, traitements et salaires').
  113source_bareme(2026, 'service-public.gouv.fr actualite A14686 (09/04/2026) and DGFiP brochure pratique IR 2026').
 bareme_km(?Annee, ?Vehicule, ?Classe, ?Tranche, ?Formule) is nondet
135 facts: 5 years x (15 automobile + 9 motocyclette + 3 cyclomoteur).
  119bareme_km(2022, automobile, cv3_et_moins, tranche(0, 5000), formule(0.502, 0)).
  120bareme_km(2022, automobile, cv3_et_moins, tranche(5000, 20000), formule(0.300, 1007)).
  121bareme_km(2022, automobile, cv3_et_moins, tranche(20000, inf), formule(0.350, 0)).
  122bareme_km(2022, automobile, cv4, tranche(0, 5000), formule(0.575, 0)).
  123bareme_km(2022, automobile, cv4, tranche(5000, 20000), formule(0.323, 1262)).
  124bareme_km(2022, automobile, cv4, tranche(20000, inf), formule(0.387, 0)).
  125bareme_km(2022, automobile, cv5, tranche(0, 5000), formule(0.603, 0)).
  126bareme_km(2022, automobile, cv5, tranche(5000, 20000), formule(0.339, 1320)).
  127bareme_km(2022, automobile, cv5, tranche(20000, inf), formule(0.405, 0)).
  128bareme_km(2022, automobile, cv6, tranche(0, 5000), formule(0.631, 0)).
  129bareme_km(2022, automobile, cv6, tranche(5000, 20000), formule(0.355, 1382)).
  130bareme_km(2022, automobile, cv6, tranche(20000, inf), formule(0.425, 0)).
  131bareme_km(2022, automobile, cv7_et_plus, tranche(0, 5000), formule(0.661, 0)).
  132bareme_km(2022, automobile, cv7_et_plus, tranche(5000, 20000), formule(0.374, 1435)).
  133bareme_km(2022, automobile, cv7_et_plus, tranche(20000, inf), formule(0.446, 0)).
  134
  135bareme_km(2022, motocyclette, cv1_2, tranche(0, 3000), formule(0.375, 0)).
  136bareme_km(2022, motocyclette, cv1_2, tranche(3000, 6000), formule(0.094, 845)).
  137bareme_km(2022, motocyclette, cv1_2, tranche(6000, inf), formule(0.234, 0)).
  138bareme_km(2022, motocyclette, cv3_4_5, tranche(0, 3000), formule(0.444, 0)).
  139bareme_km(2022, motocyclette, cv3_4_5, tranche(3000, 6000), formule(0.078, 1099)).
  140bareme_km(2022, motocyclette, cv3_4_5, tranche(6000, inf), formule(0.261, 0)).
  141bareme_km(2022, motocyclette, cv_plus_de_5, tranche(0, 3000), formule(0.575, 0)).
  142bareme_km(2022, motocyclette, cv_plus_de_5, tranche(3000, 6000), formule(0.075, 1502)).
  143bareme_km(2022, motocyclette, cv_plus_de_5, tranche(6000, inf), formule(0.325, 0)).
  144
  145bareme_km(2022, cyclomoteur, toutes, tranche(0, 3000), formule(0.299, 0)).
  146bareme_km(2022, cyclomoteur, toutes, tranche(3000, 6000), formule(0.070, 458)).
  147bareme_km(2022, cyclomoteur, toutes, tranche(6000, inf), formule(0.162, 0)).
  148
  149bareme_km(2023, automobile, cv3_et_moins, tranche(0, 5000), formule(0.529, 0)).
  150bareme_km(2023, automobile, cv3_et_moins, tranche(5000, 20000), formule(0.316, 1065)).
  151bareme_km(2023, automobile, cv3_et_moins, tranche(20000, inf), formule(0.370, 0)).
  152bareme_km(2023, automobile, cv4, tranche(0, 5000), formule(0.606, 0)).
  153bareme_km(2023, automobile, cv4, tranche(5000, 20000), formule(0.340, 1330)).
  154bareme_km(2023, automobile, cv4, tranche(20000, inf), formule(0.407, 0)).
  155bareme_km(2023, automobile, cv5, tranche(0, 5000), formule(0.636, 0)).
  156bareme_km(2023, automobile, cv5, tranche(5000, 20000), formule(0.357, 1395)).
  157bareme_km(2023, automobile, cv5, tranche(20000, inf), formule(0.427, 0)).
  158bareme_km(2023, automobile, cv6, tranche(0, 5000), formule(0.665, 0)).
  159bareme_km(2023, automobile, cv6, tranche(5000, 20000), formule(0.374, 1457)).
  160bareme_km(2023, automobile, cv6, tranche(20000, inf), formule(0.447, 0)).
  161bareme_km(2023, automobile, cv7_et_plus, tranche(0, 5000), formule(0.697, 0)).
  162bareme_km(2023, automobile, cv7_et_plus, tranche(5000, 20000), formule(0.394, 1515)).
  163bareme_km(2023, automobile, cv7_et_plus, tranche(20000, inf), formule(0.470, 0)).
  164
  165bareme_km(2023, motocyclette, cv1_2, tranche(0, 3000), formule(0.395, 0)).
  166bareme_km(2023, motocyclette, cv1_2, tranche(3000, 6000), formule(0.099, 891)).
  167bareme_km(2023, motocyclette, cv1_2, tranche(6000, inf), formule(0.248, 0)).
  168bareme_km(2023, motocyclette, cv3_4_5, tranche(0, 3000), formule(0.468, 0)).
  169bareme_km(2023, motocyclette, cv3_4_5, tranche(3000, 6000), formule(0.082, 1158)).
  170bareme_km(2023, motocyclette, cv3_4_5, tranche(6000, inf), formule(0.275, 0)).
  171bareme_km(2023, motocyclette, cv_plus_de_5, tranche(0, 3000), formule(0.606, 0)).
  172bareme_km(2023, motocyclette, cv_plus_de_5, tranche(3000, 6000), formule(0.079, 1583)).
  173bareme_km(2023, motocyclette, cv_plus_de_5, tranche(6000, inf), formule(0.343, 0)).
  174
  175bareme_km(2023, cyclomoteur, toutes, tranche(0, 3000), formule(0.315, 0)).
  176bareme_km(2023, cyclomoteur, toutes, tranche(3000, 6000), formule(0.079, 711)).
  177bareme_km(2023, cyclomoteur, toutes, tranche(6000, inf), formule(0.198, 0)).
  178
  179bareme_km(2024, automobile, cv3_et_moins, tranche(0, 5000), formule(0.529, 0)).
  180bareme_km(2024, automobile, cv3_et_moins, tranche(5000, 20000), formule(0.316, 1065)).
  181bareme_km(2024, automobile, cv3_et_moins, tranche(20000, inf), formule(0.370, 0)).
  182bareme_km(2024, automobile, cv4, tranche(0, 5000), formule(0.606, 0)).
  183bareme_km(2024, automobile, cv4, tranche(5000, 20000), formule(0.340, 1330)).
  184bareme_km(2024, automobile, cv4, tranche(20000, inf), formule(0.407, 0)).
  185bareme_km(2024, automobile, cv5, tranche(0, 5000), formule(0.636, 0)).
  186bareme_km(2024, automobile, cv5, tranche(5000, 20000), formule(0.357, 1395)).
  187bareme_km(2024, automobile, cv5, tranche(20000, inf), formule(0.427, 0)).
  188bareme_km(2024, automobile, cv6, tranche(0, 5000), formule(0.665, 0)).
  189bareme_km(2024, automobile, cv6, tranche(5000, 20000), formule(0.374, 1457)).
  190bareme_km(2024, automobile, cv6, tranche(20000, inf), formule(0.447, 0)).
  191bareme_km(2024, automobile, cv7_et_plus, tranche(0, 5000), formule(0.697, 0)).
  192bareme_km(2024, automobile, cv7_et_plus, tranche(5000, 20000), formule(0.394, 1515)).
  193bareme_km(2024, automobile, cv7_et_plus, tranche(20000, inf), formule(0.470, 0)).
  194
  195bareme_km(2024, motocyclette, cv1_2, tranche(0, 3000), formule(0.395, 0)).
  196bareme_km(2024, motocyclette, cv1_2, tranche(3000, 6000), formule(0.099, 891)).
  197bareme_km(2024, motocyclette, cv1_2, tranche(6000, inf), formule(0.248, 0)).
  198bareme_km(2024, motocyclette, cv3_4_5, tranche(0, 3000), formule(0.468, 0)).
  199bareme_km(2024, motocyclette, cv3_4_5, tranche(3000, 6000), formule(0.082, 1158)).
  200bareme_km(2024, motocyclette, cv3_4_5, tranche(6000, inf), formule(0.275, 0)).
  201bareme_km(2024, motocyclette, cv_plus_de_5, tranche(0, 3000), formule(0.606, 0)).
  202bareme_km(2024, motocyclette, cv_plus_de_5, tranche(3000, 6000), formule(0.079, 1583)).
  203bareme_km(2024, motocyclette, cv_plus_de_5, tranche(6000, inf), formule(0.343, 0)).
  204
  205bareme_km(2024, cyclomoteur, toutes, tranche(0, 3000), formule(0.315, 0)).
  206bareme_km(2024, cyclomoteur, toutes, tranche(3000, 6000), formule(0.079, 711)).
  207bareme_km(2024, cyclomoteur, toutes, tranche(6000, inf), formule(0.198, 0)).
  208
  209bareme_km(2025, automobile, cv3_et_moins, tranche(0, 5000), formule(0.529, 0)).
  210bareme_km(2025, automobile, cv3_et_moins, tranche(5000, 20000), formule(0.316, 1065)).
  211bareme_km(2025, automobile, cv3_et_moins, tranche(20000, inf), formule(0.370, 0)).
  212bareme_km(2025, automobile, cv4, tranche(0, 5000), formule(0.606, 0)).
  213bareme_km(2025, automobile, cv4, tranche(5000, 20000), formule(0.340, 1330)).
  214bareme_km(2025, automobile, cv4, tranche(20000, inf), formule(0.407, 0)).
  215bareme_km(2025, automobile, cv5, tranche(0, 5000), formule(0.636, 0)).
  216bareme_km(2025, automobile, cv5, tranche(5000, 20000), formule(0.357, 1395)).
  217bareme_km(2025, automobile, cv5, tranche(20000, inf), formule(0.427, 0)).
  218bareme_km(2025, automobile, cv6, tranche(0, 5000), formule(0.665, 0)).
  219bareme_km(2025, automobile, cv6, tranche(5000, 20000), formule(0.374, 1457)).
  220bareme_km(2025, automobile, cv6, tranche(20000, inf), formule(0.447, 0)).
  221bareme_km(2025, automobile, cv7_et_plus, tranche(0, 5000), formule(0.697, 0)).
  222bareme_km(2025, automobile, cv7_et_plus, tranche(5000, 20000), formule(0.394, 1515)).
  223bareme_km(2025, automobile, cv7_et_plus, tranche(20000, inf), formule(0.470, 0)).
  224
  225bareme_km(2025, motocyclette, cv1_2, tranche(0, 3000), formule(0.395, 0)).
  226bareme_km(2025, motocyclette, cv1_2, tranche(3000, 6000), formule(0.099, 891)).
  227bareme_km(2025, motocyclette, cv1_2, tranche(6000, inf), formule(0.248, 0)).
  228bareme_km(2025, motocyclette, cv3_4_5, tranche(0, 3000), formule(0.468, 0)).
  229bareme_km(2025, motocyclette, cv3_4_5, tranche(3000, 6000), formule(0.082, 1158)).
  230bareme_km(2025, motocyclette, cv3_4_5, tranche(6000, inf), formule(0.275, 0)).
  231bareme_km(2025, motocyclette, cv_plus_de_5, tranche(0, 3000), formule(0.606, 0)).
  232bareme_km(2025, motocyclette, cv_plus_de_5, tranche(3000, 6000), formule(0.079, 1583)).
  233bareme_km(2025, motocyclette, cv_plus_de_5, tranche(6000, inf), formule(0.343, 0)).
  234
  235bareme_km(2025, cyclomoteur, toutes, tranche(0, 3000), formule(0.315, 0)).
  236bareme_km(2025, cyclomoteur, toutes, tranche(3000, 6000), formule(0.079, 711)).
  237bareme_km(2025, cyclomoteur, toutes, tranche(6000, inf), formule(0.198, 0)).
  238
  239bareme_km(2026, automobile, cv3_et_moins, tranche(0, 5000), formule(0.529, 0)).
  240bareme_km(2026, automobile, cv3_et_moins, tranche(5000, 20000), formule(0.316, 1065)).
  241bareme_km(2026, automobile, cv3_et_moins, tranche(20000, inf), formule(0.370, 0)).
  242bareme_km(2026, automobile, cv4, tranche(0, 5000), formule(0.606, 0)).
  243bareme_km(2026, automobile, cv4, tranche(5000, 20000), formule(0.340, 1330)).
  244bareme_km(2026, automobile, cv4, tranche(20000, inf), formule(0.407, 0)).
  245bareme_km(2026, automobile, cv5, tranche(0, 5000), formule(0.636, 0)).
  246bareme_km(2026, automobile, cv5, tranche(5000, 20000), formule(0.357, 1395)).
  247bareme_km(2026, automobile, cv5, tranche(20000, inf), formule(0.427, 0)).
  248bareme_km(2026, automobile, cv6, tranche(0, 5000), formule(0.665, 0)).
  249bareme_km(2026, automobile, cv6, tranche(5000, 20000), formule(0.374, 1457)).
  250bareme_km(2026, automobile, cv6, tranche(20000, inf), formule(0.447, 0)).
  251bareme_km(2026, automobile, cv7_et_plus, tranche(0, 5000), formule(0.697, 0)).
  252bareme_km(2026, automobile, cv7_et_plus, tranche(5000, 20000), formule(0.394, 1515)).
  253bareme_km(2026, automobile, cv7_et_plus, tranche(20000, inf), formule(0.470, 0)).
  254
  255bareme_km(2026, motocyclette, cv1_2, tranche(0, 3000), formule(0.395, 0)).
  256bareme_km(2026, motocyclette, cv1_2, tranche(3000, 6000), formule(0.099, 891)).
  257bareme_km(2026, motocyclette, cv1_2, tranche(6000, inf), formule(0.248, 0)).
  258bareme_km(2026, motocyclette, cv3_4_5, tranche(0, 3000), formule(0.468, 0)).
  259bareme_km(2026, motocyclette, cv3_4_5, tranche(3000, 6000), formule(0.082, 1158)).
  260bareme_km(2026, motocyclette, cv3_4_5, tranche(6000, inf), formule(0.275, 0)).
  261bareme_km(2026, motocyclette, cv_plus_de_5, tranche(0, 3000), formule(0.606, 0)).
  262bareme_km(2026, motocyclette, cv_plus_de_5, tranche(3000, 6000), formule(0.079, 1583)).
  263bareme_km(2026, motocyclette, cv_plus_de_5, tranche(6000, inf), formule(0.343, 0)).
  264
  265bareme_km(2026, cyclomoteur, toutes, tranche(0, 3000), formule(0.315, 0)).
  266bareme_km(2026, cyclomoteur, toutes, tranche(3000, 6000), formule(0.079, 711)).
  267bareme_km(2026, cyclomoteur, toutes, tranche(6000, inf), formule(0.198, 0))