mirror of
https://github.com/CatalaLang/catala.git
synced 2024-09-20 00:41:05 +03:00
Merge branch 'allocations_logement' of https://github.com/CatalaLang/catala into allocations_logement
This commit is contained in:
commit
cd4e9f48d0
2
.github/workflows/run-builds.yml
vendored
2
.github/workflows/run-builds.yml
vendored
@ -20,7 +20,7 @@ jobs:
|
||||
|
||||
- name: Install external dependencies
|
||||
run: |
|
||||
sudo apt-get update && sudo apt-get install python3-dev virtualenv python3-setuptools python3-pip python3-pygments man2html rsync colordiff npm nodejs libmpc-dev ninja-build
|
||||
sudo apt-get update && sudo apt-get install python3-dev virtualenv python3-setuptools python3-pip python3-pygments man2html rsync colordiff npm nodejs libmpc-dev ninja-build pandoc
|
||||
sudo python3 -m pip install --upgrade pip
|
||||
sudo python3 -m pip install virtualenv
|
||||
sudo make pygments
|
||||
|
2
Makefile
2
Makefile
@ -10,7 +10,7 @@ export
|
||||
# Dependencies
|
||||
##########################################
|
||||
|
||||
EXECUTABLES = man2html virtualenv python3 colordiff node pygmentize nodejs npm ninja
|
||||
EXECUTABLES = man2html virtualenv python3 colordiff node pygmentize nodejs npm ninja pandoc
|
||||
K := $(foreach exec,$(EXECUTABLES),\
|
||||
$(if $(shell which $(exec)),some string,$(warning [WARNING] No "$(exec)" executable found. \
|
||||
Please install this executable for everything to work smoothly)))
|
||||
|
@ -171,7 +171,8 @@ let filename_to_expected_output_descr (output_dir : string) (filename : string)
|
||||
else
|
||||
let scope_name_regex = Re.Pcre.regexp "\\.(.+)" in
|
||||
let scope_name =
|
||||
(Re.Pcre.extract ~rex:scope_name_regex second_extension).(1)
|
||||
try (Re.Pcre.extract ~rex:scope_name_regex second_extension).(1)
|
||||
with Not_found -> ""
|
||||
in
|
||||
(Filename.remove_extension filename, Some scope_name)
|
||||
in
|
||||
|
@ -99,6 +99,7 @@ type unop =
|
||||
| GetMonth
|
||||
| GetYear
|
||||
| RoundMoney
|
||||
| RoundDecimal
|
||||
|
||||
type operator = Ternop of ternop | Binop of binop | Unop of unop
|
||||
|
||||
|
@ -98,6 +98,7 @@ type unop =
|
||||
| GetMonth
|
||||
| GetYear
|
||||
| RoundMoney
|
||||
| RoundDecimal
|
||||
|
||||
type operator = Ternop of ternop | Binop of binop | Unop of unop
|
||||
|
||||
|
@ -268,6 +268,8 @@ let rec evaluate_operator
|
||||
A.ELit (LRat Runtime.(decimal_of_integer i))
|
||||
| A.Unop A.RoundMoney, [ ELit (LMoney m) ] ->
|
||||
A.ELit (LMoney Runtime.(money_round m))
|
||||
| A.Unop A.RoundDecimal, [ ELit (LRat m) ] ->
|
||||
A.ELit (LRat Runtime.(decimal_round m))
|
||||
| A.Unop (A.Log (entry, infos)), [ e' ] ->
|
||||
if !Cli.trace_flag then (
|
||||
match entry with
|
||||
|
@ -210,7 +210,8 @@ let format_unop (fmt : Format.formatter) (op : unop Pos.marked) : unit =
|
||||
| GetDay -> "get_day"
|
||||
| GetMonth -> "get_month"
|
||||
| GetYear -> "get_year"
|
||||
| RoundMoney -> "round_money")
|
||||
| RoundMoney -> "round_money"
|
||||
| RoundDecimal -> "round_decimal")
|
||||
|
||||
let needs_parens (e : expr Pos.marked) : bool =
|
||||
match Pos.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false
|
||||
|
@ -197,6 +197,7 @@ let op_type (op : A.operator Pos.marked) : typ Pos.marked UnionFind.elem =
|
||||
| A.Unop A.GetMonth -> arr dat it
|
||||
| A.Unop A.GetYear -> arr dat it
|
||||
| A.Unop A.RoundMoney -> arr mt mt
|
||||
| A.Unop A.RoundDecimal -> arr rt rt
|
||||
| A.Unop A.IntToRat -> arr it rt
|
||||
| Binop (Mult (KDate | KDuration)) | Binop (Div KDate) | Unop (Minus KDate) ->
|
||||
Errors.raise_spanned_error pos "This operator is not available!"
|
||||
|
@ -123,6 +123,7 @@ let format_unop (fmt : Format.formatter) (op : Dcalc.Ast.unop Pos.marked) : unit
|
||||
| GetMonth -> Format.fprintf fmt "%s" "month_number_of_date"
|
||||
| GetYear -> Format.fprintf fmt "%s" "year_of_date"
|
||||
| RoundMoney -> Format.fprintf fmt "%s" "money_round"
|
||||
| RoundDecimal -> Format.fprintf fmt "%s" "decimal_round"
|
||||
|
||||
let avoid_keywords (s : string) : string =
|
||||
if
|
||||
|
@ -28,18 +28,17 @@ module C = Cli
|
||||
|
||||
(** Espaces various LaTeX-sensitive characters *)
|
||||
let pre_latexify (s : string) : string =
|
||||
(* first we substitute the annoying characters *)
|
||||
let substitute s (old_s, new_s) =
|
||||
R.substitute ~rex:(R.regexp old_s) ~subst:(fun _ -> new_s) s
|
||||
in
|
||||
[
|
||||
("\\$", "\\$");
|
||||
("%", "\\%");
|
||||
("\\_", "\\_");
|
||||
("\\#", "\\#");
|
||||
("1er", "1\\textsuperscript{er}");
|
||||
("\\^", "\\textasciicircum");
|
||||
]
|
||||
|> List.fold_left substitute s
|
||||
let s =
|
||||
[ ("1er", "1\\textsuperscript{er}"); ("\\^", "\\textasciicircum") ]
|
||||
|> List.fold_left substitute s
|
||||
in
|
||||
(* Then we send to pandoc, to ensure the markdown features used in the
|
||||
original document are correctly printed! *)
|
||||
run_pandoc s Cli.Latex
|
||||
|
||||
(** Usage: [wrap_latex source_files custom_pygments language fmt wrapped]
|
||||
|
||||
@ -55,14 +54,68 @@ let wrap_latex
|
||||
\\usepackage[utf8]{inputenc}\n\
|
||||
\\usepackage{amssymb}\n\
|
||||
\\usepackage{babel}\n\
|
||||
\\usepackage{lmodern}\n\
|
||||
\\usepackage{fontspec}\n\
|
||||
\\usepackage[hidelinks]{hyperref}\n\
|
||||
\\setmainfont{Marianne}\n\
|
||||
\\usepackage{minted}\n\
|
||||
\\usepackage{longtable}\n\
|
||||
\\usepackage{booktabs}\n\
|
||||
\\usepackage{newunicodechar}\n\
|
||||
\\usepackage{textcomp}\n\
|
||||
\\usepackage[hidelinks]{hyperref}\n\
|
||||
\\usepackage[dvipsnames]{xcolor}\n\
|
||||
\\usepackage{fullpage}\n\
|
||||
\\usepackage[left=2cm,right=2cm,top=3cm,bottom=3cm,headheight=2cm]{geometry}\n\
|
||||
\\usepackage[many]{tcolorbox}\n\n\
|
||||
\\usepackage{fancyhdr}\n\
|
||||
\\pagestyle{fancy}\n\
|
||||
\\fancyhf{}\n\
|
||||
\\fancyhead[C]{\\leftmark}\n\
|
||||
\\fancyfoot[C]{\\thepage}\n\
|
||||
\\renewcommand{\\headrulewidth}{0.5pt}\n\
|
||||
\\renewcommand{\\footrulewidth}{0.5pt}\n\
|
||||
\\usepackage{titlesec}\n\
|
||||
\\titleclass{\\subsubsubsection}{straight}[\\subsection]\n\
|
||||
\\newcounter{subsubsubsection}[subsubsection]\n\
|
||||
\\renewcommand\\thesubsubsubsection{\\thesubsubsection.\\arabic{subsubsubsection}}\n\
|
||||
\\titleformat{\\subsubsubsection}{\\normalfont\\normalsize\\bfseries}{\\thesubsubsubsection}{1em}{}\n\
|
||||
\\titlespacing*{\\subsubsubsection}{0pt}{3.25ex plus 1ex minus \
|
||||
.2ex}{1.5ex plus .2ex}\n\
|
||||
\\titleclass{\\subsubsubsubsection}{straight}[\\subsubsection]\n\
|
||||
\\newcounter{subsubsubsubsection}[subsubsubsection]\n\
|
||||
\\renewcommand\\thesubsubsubsubsection{\\thesubsubsubsection.\\arabic{subsubsubsubsection}}\n\
|
||||
\\titleformat{\\subsubsubsubsection}{\\normalfont\\normalsize\\bfseries}{\\thesubsubsubsubsection}{0.75em}{}\n\
|
||||
\\titlespacing*{\\subsubsubsubsection}{0pt}{2.75ex plus 1ex minus \
|
||||
.2ex}{1.25ex plus .2ex}\n\
|
||||
\\titleclass{\\subsubsubsubsubsection}{straight}[\\subsubsubsection]\n\
|
||||
\\newcounter{subsubsubsubsubsection}[subsubsubsubsection]\n\
|
||||
\\renewcommand\\thesubsubsubsubsubsection{\\thesubsubsubsubsection.\\arabic{subsubsubsubsubsection}}\n\
|
||||
\\titleformat{\\subsubsubsubsubsection}{\\normalfont\\normalsize\\bfseries}{\\thesubsubsubsubsubsection}{0.7em}{}\n\
|
||||
\\titlespacing*{\\subsubsubsubsubsection}{0pt}{2.5ex plus 1ex minus \
|
||||
.2ex}{1.1ex plus .2ex}\n\
|
||||
\\titleclass{\\subsubsubsubsubsubsection}{straight}[\\subsubsubsubsection]\n\
|
||||
\\newcounter{subsubsubsubsubsubsection}[subsubsubsubsubsection]\n\
|
||||
\\renewcommand\\thesubsubsubsubsubsubsection{\\thesubsubsubsubsubsection.\\arabic{subsubsubsubsubsubsection}}\n\
|
||||
\\titleformat{\\subsubsubsubsubsubsection}{\\normalfont\\normalsize\\bfseries}{\\thesubsubsubsubsubsubsection}{0.6em}{}\n\
|
||||
\\titlespacing*{\\subsubsubsubsubsubsection}{0pt}{2.25ex plus 1ex minus \
|
||||
.2ex}{1ex plus .2ex}\n\
|
||||
\\makeatletter\n\
|
||||
\\def\\toclevel@subsubsubsection{4}\n\
|
||||
\\def\\toclevel@subsubsubsubsection{5}\n\
|
||||
\\def\\toclevel@subsubsubsubsubsection{6}\n\
|
||||
\\def\\toclevel@subsubsubsubsubsubsection{7}\n\
|
||||
\\def\\toclevel@paragraph{8}\n\
|
||||
\\def\\toclevel@subparagraph{9}\n\
|
||||
\\def\\l@subsection{\\@dottedtocline{1}{1em}{0.5em}}\n\
|
||||
\\def\\l@subsubsection{\\@dottedtocline{2}{2em}{1em}}\n\
|
||||
\\def\\l@subsubsubsection{\\@dottedtocline{3}{3em}{1.5em}}\n\
|
||||
\\def\\l@subsubsubsubsection{\\@dottedtocline{5}{4em}{2em}}\n\
|
||||
\\def\\l@subsubsubsubsubsection{\\@dottedtocline{6}{5em}{2.5em}}\n\
|
||||
\\def\\l@subsubsubsubsubsubsection{\\@dottedtocline{7}{6em}{3em}}\n\
|
||||
\\def\\l@paragraph{\\@dottedtocline{8}{7em}{3.5em}}\n\
|
||||
\\def\\l@subparagraph{\\@dottedtocline{9}{8em}{4em}}\n\
|
||||
\\makeatother\n\
|
||||
\\setcounter{secnumdepth}{0}\n\
|
||||
\\setcounter{tocdepth}{9}\n\
|
||||
\\newunicodechar{÷}{$\\div$}\n\
|
||||
\\newunicodechar{×}{$\\times$}\n\
|
||||
\\newunicodechar{≤}{$\\leqslant$}\n\
|
||||
@ -78,7 +131,8 @@ let wrap_latex
|
||||
rulecolor=\\color{gray!70},\n\
|
||||
firstnumber=last,\n\
|
||||
codes={\\catcode`\\$=3\\catcode`\\^=7}\n\
|
||||
}\n\n\
|
||||
}\n\
|
||||
\\newcommand{\\tightlist}{\\setlength{\\itemsep}{0pt}\\setlength{\\parskip}{0pt}}\n\n\
|
||||
\\title{\n\
|
||||
%s\n\
|
||||
}\n\
|
||||
@ -89,7 +143,10 @@ let wrap_latex
|
||||
\\maketitle\n\n\
|
||||
%s : \n\
|
||||
\\begin{itemize}%s\\end{itemize}\n\n\
|
||||
\\[\\star\\star\\star\\]\\\\\n"
|
||||
\\clearpage\n\
|
||||
\\tableofcontents\n\n\
|
||||
\\[\\star\\star\\star\\]\n\
|
||||
\\clearpage"
|
||||
(match language with Fr -> "french" | En -> "english" | Pl -> "polish")
|
||||
(literal_title language)
|
||||
(literal_generated_by language)
|
||||
@ -116,17 +173,41 @@ let wrap_latex
|
||||
|
||||
(** {1 Weaving} *)
|
||||
|
||||
(** [check_exceeding_lines max_len start_line filename content] prints a warning
|
||||
message for each lines of [content] exceeding [max_len] characters. *)
|
||||
let check_exceeding_lines
|
||||
?(max_len = 80) (start_line : int) (filename : string) (content : string) =
|
||||
content |> String.split_on_char '\n'
|
||||
|> List.iteri (fun i s ->
|
||||
if String.length s > max_len then (
|
||||
Cli.warning_print "The line %s in %s is exceeding %s characters:"
|
||||
(Cli.with_style
|
||||
ANSITerminal.[ Bold; yellow ]
|
||||
"%d"
|
||||
(start_line + i + 1))
|
||||
(Cli.with_style ANSITerminal.[ Bold; magenta ] "%s" filename)
|
||||
(Cli.with_style ANSITerminal.[ Bold; red ] "%d" max_len);
|
||||
Cli.warning_print "%s%s" (String.sub s 0 max_len)
|
||||
(Cli.with_style
|
||||
ANSITerminal.[ red ]
|
||||
"%s"
|
||||
String.(sub s max_len (length s - max_len)))))
|
||||
|
||||
let rec law_structure_to_latex
|
||||
(language : C.backend_lang) (fmt : Format.formatter) (i : A.law_structure) :
|
||||
unit =
|
||||
match i with
|
||||
| A.LawHeading (heading, children) ->
|
||||
Format.fprintf fmt "\\%s*{%s}\n\n"
|
||||
Format.fprintf fmt "\\%s{%s}\n\n"
|
||||
(match heading.law_heading_precedence with
|
||||
| 0 -> "section"
|
||||
| 1 -> "subsection"
|
||||
| 2 -> "subsubsection"
|
||||
| 3 -> "paragraph"
|
||||
| 3 -> "subsubsubsection"
|
||||
| 4 -> "subsubsubsubsection"
|
||||
| 5 -> "subsubsubsubsubsection"
|
||||
| 6 -> "subsubsubsubsubsubsection"
|
||||
| 7 -> "paragraph"
|
||||
| _ -> "subparagraph")
|
||||
(pre_latexify (Pos.unmark heading.law_heading_name));
|
||||
Format.pp_print_list
|
||||
@ -164,22 +245,24 @@ let rec law_structure_to_latex
|
||||
| En -> "Metadata"
|
||||
| Pl -> "Metadane"
|
||||
in
|
||||
let start_line = Pos.get_start_line (Pos.get_position c) - 1 in
|
||||
let filename = Filename.basename (Pos.get_file (Pos.get_position c)) in
|
||||
let block_content = Pos.unmark c in
|
||||
check_exceeding_lines start_line filename block_content;
|
||||
Format.fprintf fmt
|
||||
"\\begin{tcolorbox}[colframe=OliveGreen, breakable, \
|
||||
title=\\textcolor{black}{\\texttt{%s}},title after \
|
||||
break=\\textcolor{black}{\\texttt{%s}},before skip=1em, after \
|
||||
skip=1em]\n\
|
||||
\\begin{minted}[numbersep=9mm, firstnumber=%d, \
|
||||
\\begin{minted}[breaklines, numbersep=9mm, firstnumber=%d, \
|
||||
label={\\hspace*{\\fill}\\texttt{%s}}]{%s}\n\
|
||||
```catala\n\
|
||||
%s```\n\
|
||||
\\end{minted}\n\
|
||||
\\end{tcolorbox}"
|
||||
metadata_title metadata_title
|
||||
(Pos.get_start_line (Pos.get_position c) - 1)
|
||||
(pre_latexify (Filename.basename (Pos.get_file (Pos.get_position c))))
|
||||
metadata_title metadata_title start_line (pre_latexify filename)
|
||||
(get_language_extension language)
|
||||
(Pos.unmark c)
|
||||
block_content
|
||||
|
||||
(** {1 API} *)
|
||||
|
||||
|
@ -41,3 +41,40 @@ let get_language_extension = function
|
||||
| Fr -> "catala_fr"
|
||||
| En -> "catala_en"
|
||||
| Pl -> "catala_pl"
|
||||
|
||||
let raise_failed_pandoc (command : string) (error_code : int) : 'a =
|
||||
Errors.raise_error
|
||||
"Weaving failed: pandoc command \"%s\" returned with error code %d" command
|
||||
error_code
|
||||
|
||||
let run_pandoc (s : string) (backend : Utils.Cli.backend_option) : string =
|
||||
let pandoc = "pandoc" in
|
||||
let tmp_file_in = Filename.temp_file "catala_pandoc" "in" in
|
||||
let tmp_file_out = Filename.temp_file "catala_pandoc" "out" in
|
||||
let oc = open_out tmp_file_in in
|
||||
Printf.fprintf oc "%s" s;
|
||||
close_out oc;
|
||||
let pandoc_args =
|
||||
[|
|
||||
"-f";
|
||||
"markdown+multiline_tables";
|
||||
"-t";
|
||||
(match backend with
|
||||
| Cli.Html -> "html"
|
||||
| Cli.Latex -> "latex"
|
||||
| _ -> failwith "should not happen");
|
||||
"-o";
|
||||
tmp_file_out;
|
||||
|]
|
||||
in
|
||||
let cmd =
|
||||
Format.sprintf "%s %s %s" pandoc
|
||||
(String.concat " " (Array.to_list pandoc_args))
|
||||
tmp_file_in
|
||||
in
|
||||
let return_code = Sys.command cmd in
|
||||
if return_code <> 0 then raise_failed_pandoc cmd return_code;
|
||||
let oc = open_in tmp_file_out in
|
||||
let tmp_file_as_string = really_input_string oc (in_channel_length oc) in
|
||||
close_in oc;
|
||||
tmp_file_as_string
|
||||
|
@ -35,3 +35,7 @@ val literal_last_modification : Cli.backend_lang -> string
|
||||
val get_language_extension : Cli.backend_lang -> string
|
||||
(** Return the file extension corresponding to the given {!type:
|
||||
Utils.Cli.backend_lang}. *)
|
||||
|
||||
val run_pandoc : string -> Cli.backend_option -> string
|
||||
(** Runs the [pandoc] on a string to pretty-print markdown features into the
|
||||
desired format. *)
|
||||
|
@ -146,6 +146,13 @@ let decimal_to_string ~(max_prec_digits : int) (i : decimal) : string =
|
||||
(if List.length !digits - leading_zeroes !digits = max_prec_digits then "…"
|
||||
else "")
|
||||
|
||||
let decimal_round (q : decimal) : decimal =
|
||||
(* Implements the workaround by
|
||||
https://gmplib.org/list-archives/gmp-discuss/2009-May/003767.html *)
|
||||
let n = Q.num q in
|
||||
let d = Q.den q in
|
||||
Q.of_bigint Z.(fdiv ((of_int 2 * n) + d) (of_int 2 * d))
|
||||
|
||||
let integer_of_string (s : string) : integer = Z.of_string s
|
||||
let integer_to_string (i : integer) : string = Z.to_string i
|
||||
let integer_to_int (i : integer) : int = Z.to_int i
|
||||
|
@ -103,6 +103,7 @@ val decimal_to_string : max_prec_digits:int -> decimal -> string
|
||||
val decimal_of_integer : integer -> decimal
|
||||
val decimal_of_float : float -> decimal
|
||||
val decimal_to_float : decimal -> float
|
||||
val decimal_round : decimal -> decimal
|
||||
|
||||
(**{2 Integers} *)
|
||||
|
||||
|
@ -103,6 +103,7 @@ let format_unop (fmt : Format.formatter) (op : Dcalc.Ast.unop Pos.marked) : unit
|
||||
| GetMonth -> Format.fprintf fmt "%s" "month_number_of_date"
|
||||
| GetYear -> Format.fprintf fmt "%s" "year_of_date"
|
||||
| RoundMoney -> Format.fprintf fmt "%s" "money_round"
|
||||
| RoundDecimal -> Format.fprintf fmt "%s" "decimal_round"
|
||||
|
||||
let avoid_keywords (s : string) : string =
|
||||
if
|
||||
|
@ -304,6 +304,7 @@ type builtin_expression =
|
||||
| GetMonth
|
||||
| GetYear
|
||||
| RoundMoney
|
||||
| RoundDecimal
|
||||
[@@deriving
|
||||
visitors { variety = "map"; name = "builtin_expression_map"; nude = true },
|
||||
visitors { variety = "iter"; name = "builtin_expression_iter"; nude = true }]
|
||||
|
@ -889,6 +889,9 @@ let rec translate_expr
|
||||
Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.GetYear), pos)
|
||||
| Builtin RoundMoney ->
|
||||
Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.RoundMoney), pos)
|
||||
| Builtin RoundDecimal ->
|
||||
Bindlib.box
|
||||
(Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.RoundDecimal), pos)
|
||||
|
||||
and disambiguate_match_and_build_expression
|
||||
(scope : Scopelang.Ast.ScopeName.t)
|
||||
@ -1058,14 +1061,18 @@ let merge_conditions
|
||||
| Some precond, Some cond ->
|
||||
let op_term =
|
||||
( Desugared.Ast.EOp (Dcalc.Ast.Binop Dcalc.Ast.And),
|
||||
Pos.get_position (Bindlib.unbox precond) )
|
||||
Pos.get_position (Bindlib.unbox cond) )
|
||||
in
|
||||
Bindlib.box_apply2
|
||||
(fun precond cond ->
|
||||
( Desugared.Ast.EApp (op_term, [ precond; cond ]),
|
||||
Pos.get_position precond ))
|
||||
Pos.get_position cond ))
|
||||
precond cond
|
||||
| Some cond, None | None, Some cond -> cond
|
||||
| Some precond, None ->
|
||||
Bindlib.box_apply
|
||||
(fun precond -> (Pos.unmark precond, default_pos))
|
||||
precond
|
||||
| None, Some cond -> cond
|
||||
| None, None ->
|
||||
Bindlib.box (Desugared.Ast.ELit (Dcalc.Ast.LBool true), default_pos)
|
||||
|
||||
|
@ -224,6 +224,9 @@ module R = Re.Pcre
|
||||
#ifndef MR_RoundMoney
|
||||
#define MR_RoundMoney MS_RoundMoney
|
||||
#endif
|
||||
#ifndef MR_RoundDecimal
|
||||
#define MR_RoundDecimal MS_RoundDecimal
|
||||
#endif
|
||||
#ifndef MR_GetDay
|
||||
#define MR_GetDay MS_GetDay
|
||||
#endif
|
||||
@ -323,6 +326,7 @@ let lex_builtin (s : string) : Ast.builtin_expression option =
|
||||
| MR_GetMonth, eof -> Some GetMonth
|
||||
| MR_GetYear, eof -> Some GetYear
|
||||
| MR_RoundMoney, eof -> Some RoundMoney
|
||||
| MR_RoundDecimal, eof -> Some RoundDecimal
|
||||
| _ -> None
|
||||
|
||||
(** Regexp matching any digit character.
|
||||
|
@ -100,6 +100,7 @@
|
||||
(* Builtins *)
|
||||
|
||||
#define MS_RoundMoney "round_money"
|
||||
#define MS_RoundDecimal "round_decimal"
|
||||
#define MS_IntToDec "integer_to_decimal"
|
||||
#define MS_GetDay "get_day"
|
||||
#define MS_GetMonth "get_month"
|
||||
|
@ -121,6 +121,8 @@
|
||||
(* Builtins *)
|
||||
|
||||
#define MS_RoundMoney "arrondi_argent"
|
||||
#define MS_RoundDecimal "arrondi_décimal"
|
||||
#define MR_RoundDecimal "arrondi_d", 0xE9, "cimal"
|
||||
#define MS_IntToDec "entier_vers_décimal"
|
||||
#define MR_IntToDec "entier_vers_d", 0xE9, "cimal"
|
||||
#define MS_GetDay "accès_jour"
|
||||
|
@ -107,6 +107,8 @@
|
||||
|
||||
(* Builtins *)
|
||||
|
||||
#define MS_RoundDecimal "zaokrąglony_dziesiętny"
|
||||
#define MR_RoundDecimal "zaokr",0x0105,"glony_dziesi", 0x0119, "tny"
|
||||
#define MS_RoundMoney "zaokrąglony_pieniądze"
|
||||
#define MR_RoundMoney "zaokr",0x0105,"glony_pieni", 0x0105, "dze"
|
||||
#define MS_IntToDec "calkowita_wers_dziesiętny"
|
||||
|
@ -301,11 +301,11 @@ let process_data_decl
|
||||
| Some use ->
|
||||
Errors.raise_multispanned_error
|
||||
[
|
||||
( Some "first use",
|
||||
( Some "First use:",
|
||||
Pos.get_position (Desugared.Ast.ScopeVar.get_info use) );
|
||||
(Some "second use", pos);
|
||||
(Some "Second use:", pos);
|
||||
]
|
||||
"var name \"%a\" already used"
|
||||
"Variable name \"%a\" already used"
|
||||
(Utils.Cli.format_with_style [ ANSITerminal.yellow ])
|
||||
name
|
||||
| None ->
|
||||
|
@ -241,7 +241,7 @@ let set_option_globals options : unit =
|
||||
disable_counterexamples := options.disable_counterexamples;
|
||||
avoid_exceptions_flag := options.avoid_exceptions
|
||||
|
||||
let version = "0.5.0"
|
||||
let version = "0.6.0"
|
||||
|
||||
let info =
|
||||
let doc =
|
||||
|
@ -598,6 +598,8 @@ let rec translate_op
|
||||
failwith
|
||||
"[Z3 encoding] GetYear operator only supported in comparisons with \
|
||||
literal"
|
||||
| RoundDecimal ->
|
||||
failwith "[Z3 encoding] RoundDecimal operator not implemented yet"
|
||||
| RoundMoney ->
|
||||
failwith "[Z3 encoding] RoundMoney operator not implemented yet")
|
||||
|
||||
|
@ -46,7 +46,7 @@ help : ../Makefile.common.mk
|
||||
|
||||
#> <target_file>.pdf : Weaves the file to PDF (via LaTeX)
|
||||
%.pdf: %.tex
|
||||
cd $(@D) && $(LATEXMK) -g -pdf -halt-on-error -shell-escape $(%F)
|
||||
cd $(@D) && $(LATEXMK) -g -xelatex -halt-on-error -shell-escape $(%F)
|
||||
|
||||
#> <target_file>.html : Weaves the file to HTML
|
||||
%.html: %.catala_$(CATALA_LANG)
|
||||
|
@ -25,7 +25,7 @@ of the Catala programming language development.
|
||||
Building and running examples is done via Makefiles. Each example directory
|
||||
contains its own Makefile, which includes `Makefile.common.mk`. This common
|
||||
Makefiles defines a list of targets that call the Catala compiler with the
|
||||
right options. Each of these targers can be called from the root of the
|
||||
right options. Each of these targets can be called from the root of the
|
||||
repository with:
|
||||
|
||||
make -C examples/<directory of example> <name of target>
|
||||
@ -44,7 +44,13 @@ file `examples/foo/foo.catala_en`) list.
|
||||
When invoking any of these targets, additional options to the Catala compiler
|
||||
can be passed using the `CATALA_OPTS` Makefile variable.
|
||||
|
||||
> **Remark**: don't forget to run `make pygments` before generating LaTex or PDF files.
|
||||
Important
|
||||
|
||||
: Before trying to generates LaTex or PDF files:
|
||||
1. don't forget to run `make pygments`,
|
||||
2. and you need to have the font
|
||||
[Marianne](https://gouvfr.atlassian.net/wiki/spaces/DB/pages/223019527/Typographie+-+Typography)
|
||||
installed in your machine.
|
||||
|
||||
## Testing examples
|
||||
|
||||
|
1
examples/allocations_logement/.gitignore
vendored
1
examples/allocations_logement/.gitignore
vendored
@ -15,3 +15,4 @@ _minted*
|
||||
*.new
|
||||
*.ml
|
||||
*.py
|
||||
*.xdv
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
# Circulaire de la CNAV 2022-3 du 11/01/2022 "Revalorisation à compter du 1er janvier 2022"
|
||||
|
||||
Lien: https://www.legislation.cnav.fr/Documents/circulaire_cnav_2022_03_11012022.pdf
|
||||
[Lien vers le texte](https://www.legislation.cnav.fr/Documents/circulaire_cnav_2022_03_11012022.pdf)
|
||||
|
||||
|
||||
## Allocation de solidarité aux personnes âgées
|
||||
@ -8,10 +8,10 @@ Lien: https://www.legislation.cnav.fr/Documents/circulaire_cnav_2022_03_11012022
|
||||
|
||||
Le montant de l’Aspa s’élève, à compter du 1er janvier 2022, à :
|
||||
|
||||
Bénéficiaire | Montant annuel | Montant mensuel
|
||||
-------------------------------------------------
|
||||
Personne seule | 11 001,44 € | 916,78 €
|
||||
Couple marié | 17 079,77 € | 1 423,31 €
|
||||
Bénéficiaire Montant annuel Montant mensuel
|
||||
-------------- -------------- ---------------
|
||||
Personne seule 11 001,44 € 916,78 €
|
||||
Couple marié 17 079,77 € 1 423,31 €
|
||||
|
||||
```catala
|
||||
# Pas important pour nous
|
||||
@ -20,14 +20,14 @@ Couple marié | 17 079,77 € | 1 423,31 €
|
||||
|
||||
Pour prétendre à cette allocation non contributive, les plafonds de ressources sont fixés à:
|
||||
|
||||
Bénéficiaire | Montant annuel | Montant mensuel
|
||||
-------------------------------------------------
|
||||
Personne seule | 11 001,44€ | 916,78 €
|
||||
Couple marié | 17 079,77 € | 1 423,31 €
|
||||
Bénéficiaire Montant annuel Montant mensuel
|
||||
-------------- -------------- -----------------
|
||||
Personne seule 11 001,44€ 916,78 €
|
||||
Couple marié 17 079,77 € 1 423,31 €
|
||||
|
||||
```catala
|
||||
# Uniquement la valeur du plafond individuel est important pour l'éligibilité aux APL
|
||||
|
||||
# Uniquement la valeur du plafond individuel est important pour l'éligibilité
|
||||
# aux APL
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
définition plafond_individuel_l815_9_sécu sous condition
|
||||
date_ouverture_droits >=@ |2022-01-01| et
|
||||
|
@ -38,17 +38,19 @@ la résidence principale.
|
||||
|
||||
```catala
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
assertion ménage.logement.résidence_principale
|
||||
règle condition_logement_résidence_principale sous condition
|
||||
ménage.logement.résidence_principale
|
||||
conséquence rempli
|
||||
```
|
||||
|
||||
##### Chapitre II : Conditions générales d'attribution
|
||||
|
||||
```catala
|
||||
# Ce chapitre définit diverses conditions d'éligibilité concernant le logement.
|
||||
# La structure de ces conditions comporte des exceptions négatives à une condition
|
||||
# positive. Il n'y a pas vraiment de bonne manière de modéliser cela en Catala
|
||||
# pour le moment à part le code ci-dessous qui récapitule la méta-structure
|
||||
# logique des articles de loi de ce chapitre.
|
||||
# La structure de ces conditions comporte des exceptions négatives à une
|
||||
# condition positive. Il n'y a pas vraiment de bonne manière de modéliser
|
||||
# cela en Catala pour le moment à part le code ci-dessous qui récapitule
|
||||
# la méta-structure logique des articles de loi de ce chapitre.
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
|
||||
règle éligibilité_logement sous condition
|
||||
@ -56,6 +58,7 @@ champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
# portant toutes sur le logement définies au long des diverses parties
|
||||
# du code de la construction et de l'habitation. Attention, ne pas oublier
|
||||
# de modifier cette liste en cas de rajout d'une sous-condition.
|
||||
condition_logement_résidence_principale et # L821-2
|
||||
condition_logement_bailleur et # L831-1
|
||||
condition_logement_prêt et # L831-2
|
||||
condition_logement_mode_occupation et
|
||||
@ -123,8 +126,8 @@ champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
-- AccessionPropriétéLocalUsageExclusifHabitation:
|
||||
ménage.logement.résidence_principale
|
||||
-- SousLocataire: vrai
|
||||
-- LocationAccession: vrai # Justifié par L831-2, avec une exception à venir
|
||||
-- ModeOccupation.Autre: faux
|
||||
-- LocationAccession: vrai # Justifié par L831-2, avec une
|
||||
# exception à venir
|
||||
conséquence rempli
|
||||
```
|
||||
|
||||
@ -161,7 +164,8 @@ Ces seuils ne peuvent excéder 20 % de la propriété ou de l'usufruit du logeme
|
||||
|
||||
```catala
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
étiquette l822_3_2 exception l822_3_1 règle condition_logement_mode_occupation sous condition
|
||||
étiquette l822_3_2 exception l822_3_1
|
||||
règle condition_logement_mode_occupation sous condition
|
||||
usufruit_ou_propriété_famille et
|
||||
(selon ménage.logement.propriétaire sous forme
|
||||
-- DemandeurOuConjointOuParentOuViaPartsSociétés de parts: parts
|
||||
@ -197,7 +201,8 @@ exception cas_base_l822_4 règle condition_logement_location_tiers
|
||||
selon ménage.logement.loué_ou_sous_loué_à_des_tiers sous forme
|
||||
-- LouéOuSousLouéÀDesTiers.Non: vrai
|
||||
-- LouéOuSousLouéÀDesTiers.Oui de personne:
|
||||
personne.age_personne_sous_location <= 30 ou personne.conforme_article_l442_1
|
||||
personne.age_personne_sous_location <= 30 ou
|
||||
personne.conforme_article_l442_1
|
||||
conséquence rempli
|
||||
```
|
||||
|
||||
@ -231,12 +236,9 @@ patrimoine, lorsque cette valeur est supérieure à un montant fixé par voie
|
||||
réglementaire.
|
||||
|
||||
```catala
|
||||
|
||||
# Cet article est une déclaration d'intention qui donne des propriétée sur la formule
|
||||
# de calcul. Dans le futur il serait interessant de vérifier que la formule est bien
|
||||
# de cette forme là.
|
||||
|
||||
|
||||
# Cet article est une déclaration d'intention qui donne des propriétée sur
|
||||
# la formule de calcul. Dans le futur il serait interessant de vérifier que
|
||||
# la formule est bien de cette forme là.
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
définition patrimoine_total_demandeur égal à
|
||||
demandeur.patrimoine.produisant_revenu_période_r822_3_3_r822_4 +€
|
||||
@ -247,7 +249,6 @@ champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
patrimoine_total_demandeur
|
||||
sinon
|
||||
0€
|
||||
|
||||
```
|
||||
|
||||
Par dérogation à la règle énoncée au premier alinéa, lorsque le demandeur d'une
|
||||
@ -264,7 +265,6 @@ champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
(prestation = AllocationSoutienEnfantHandicapé) ou
|
||||
(prestation = AllocationAdulteHandicapé)
|
||||
conséquence égal à 0€
|
||||
|
||||
```
|
||||
|
||||
La même dérogation s'applique au demandeur d'une aide personnelle au logement
|
||||
@ -295,11 +295,9 @@ Les conditions de prise en compte des ressources, notamment les périodes de ré
|
||||
retenues, peuvent varier en fonction de la nature des ressources.
|
||||
|
||||
```catala
|
||||
|
||||
# Cet article est une déclaration d'intention qui donne des propriétée sur la formule
|
||||
# de calcul. Dans le futur il serait interessant de vérifier que la formule est bien
|
||||
# de cette forme là.
|
||||
|
||||
# Cet article est une déclaration d'intention qui donne des propriétée sur
|
||||
# la formule de calcul. Dans le futur il serait interessant de vérifier que
|
||||
# la formule est bien de cette forme là.
|
||||
```
|
||||
|
||||
###### Article L822-7 | LEGIARTI000038814932
|
||||
@ -313,7 +311,8 @@ contrat de travail autre qu'un contrat à durée indéterminée.
|
||||
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
règle condition_spécifique_prise_en_compte_revenus_demandeur sous condition
|
||||
(demandeur.age_demandeur <= 25) et non (demandeur.contrat_de_travail sous forme CDI)
|
||||
(demandeur.age_demandeur <= 25) et
|
||||
non (demandeur.contrat_de_travail sous forme CDI)
|
||||
conséquence rempli
|
||||
|
||||
```
|
||||
@ -347,7 +346,8 @@ l'article 6 de la loi n° 89-462 du 6 juillet 1989 tendant à améliorer les rap
|
||||
locatifs et portant modification de la loi n° 86-1290 du 23 décembre 1986.
|
||||
|
||||
```catala
|
||||
# todo informatique: structure inverse de la structure avec des conditions chainées
|
||||
# TODO informatique: structure inverse de la structure avec des conditions
|
||||
# chainées
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
règle condition_non_ouverture_l822_9_decence_logement
|
||||
sous condition non ménage.logement.logement_decent_l89_462
|
||||
@ -360,18 +360,19 @@ s'il répond à ces mêmes exigences, de l'ensemble des éléments, équipements
|
||||
pièces dont dispose chaque colocataire.
|
||||
|
||||
```catala
|
||||
# ne nécessite pas de code particulier
|
||||
# Ne nécessite pas de code particulier
|
||||
```
|
||||
|
||||
Les modalités d'application du présent article sont fixées par voie réglementaire.
|
||||
|
||||
####### Article L822-10 | LEGIARTI000038814924
|
||||
###### Article L822-10 | LEGIARTI000038814924
|
||||
|
||||
L'attribution d'une aide personnelle au logement est subordonnée au
|
||||
respect de conditions de peuplement des logements.
|
||||
|
||||
```catala
|
||||
# todo informatique: structure inverse de la structure avec des conditions chainées
|
||||
# TODO informatique: structure inverse de la structure avec des conditions
|
||||
# chainées
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
règle condition_non_ouverture_l822_10_peuplement_logement
|
||||
sous condition condition_peuplement_logement_l822_10
|
||||
@ -407,10 +408,11 @@ prévues à l'article L. 512-2 du code de la sécurité sociale.
|
||||
|
||||
```catala
|
||||
# Cet article indique ce qu'on prend en compte mais pas comment on le prend
|
||||
# en compte, donc rien à formaliser, le code viendra dans la partie réglementaire
|
||||
# et décrétale qui se réferera elle à L823-1. Il sera peut-être utile par la suite
|
||||
# de vérifier que les parties réglementaire et décrétale se conforment bien à
|
||||
# L823-1 mais nous laissons cela pour le futur.
|
||||
# en compte, donc rien à formaliser, le code viendra dans la partie
|
||||
# réglementaire et décrétale qui se réferera elle à L823-1. Il sera
|
||||
# peut-être utile par la suite de vérifier que les parties réglementaire
|
||||
# et décrétale se conforment bien à L823-1 mais nous laissons cela pour
|
||||
# le futur.
|
||||
```
|
||||
|
||||
###### Article L823-2 | LEGIARTI000038814918
|
||||
@ -435,7 +437,7 @@ déclaration énumération PriseEnCharge:
|
||||
-- RésidenceAlternéeAllocationsPartagée
|
||||
```
|
||||
|
||||
###### Article Article L823-3 | LEGIARTI000038814916
|
||||
###### Article L823-3 | LEGIARTI000038814916
|
||||
|
||||
Sont assimilées aux loyers :
|
||||
|
||||
@ -516,7 +518,7 @@ réglementaire.
|
||||
# Rien à faire ici.
|
||||
```
|
||||
|
||||
##### Article L823-7 | LEGIARTI000038814908
|
||||
###### Article L823-7 | LEGIARTI000038814908
|
||||
|
||||
L'aide personnelle au logement peut ne pas être versée lorsque son montant
|
||||
mensuel est inférieur à un montant, qui peut varier selon la nature de l'aide
|
||||
@ -657,7 +659,8 @@ ou par la section 3 du chapitre Ier du titre II du livre III ;
|
||||
|
||||
```catala
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
étiquette l831_1_4 exception l831_1_2 règle condition_logement_bailleur sous condition
|
||||
étiquette l831_1_4 exception l831_1_2
|
||||
règle condition_logement_bailleur sous condition
|
||||
selon ménage.logement.mode_occupation sous forme
|
||||
-- Locataire de location:
|
||||
(selon location.bailleur.type_bailleur sous forme
|
||||
@ -706,8 +709,8 @@ mentionné au 1° ou au 6° de l'article L. 831-1 signé après le 31 décembre
|
||||
n'ouvrent pas droit à l'aide personnalisée au logement.
|
||||
|
||||
```catala
|
||||
# TODO informatique: vérifier que cette exception a un groupe lui même exception a un groupe
|
||||
# est bien encodé dans le calcul par défaut.
|
||||
# TODO informatique: vérifier que cette exception a un groupe lui même
|
||||
# exception a un groupe est bien encodé dans le calcul par défaut.
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
étiquette l831_2_base règle condition_logement_prêt rempli
|
||||
# Cas de base implicite
|
||||
@ -794,13 +797,16 @@ concernés par la réduction de loyer de solidarité définie à l'article L. 44
|
||||
est fixée par voie réglementaire.
|
||||
|
||||
```catala
|
||||
champ d'application CalculAidePersonnelleLogement:
|
||||
définition aide_finale_locatif état réduction_loyer_solidarité égal à
|
||||
si aide_finale_locatif -€ réduction_loyer_solidarité *€ fraction_l832_3 >=€ 0€ alors
|
||||
aide_finale_locatif -€ réduction_loyer_solidarité *€ fraction_l832_3
|
||||
champ d'application CalculAidePersonnelleLogementLocatif:
|
||||
définition aide_finale état réduction_loyer_solidarité égal à
|
||||
si
|
||||
aide_finale -€ réduction_loyer_solidarité *€ fraction_l832_3 >=€
|
||||
0€
|
||||
alors
|
||||
aide_finale -€ réduction_loyer_solidarité *€ fraction_l832_3
|
||||
sinon 0€
|
||||
|
||||
assertion fraction_l832_3 >=. 90% et fraction_l832_3 <=. 98%
|
||||
assertion fraction_l832_3 >=. 90% et fraction_l832_3 <=. 98%
|
||||
```
|
||||
|
||||
###### Article L832-4 | LEGIARTI000038814870
|
||||
@ -961,7 +967,7 @@ l'allocation de logement conservé par l'organisme payeur au titre de la périod
|
||||
le paiement de la part de loyer non perçue correspondant au montant de l'allocation conservé.
|
||||
|
||||
|
||||
####### Article L843-4 | LEGIARTI000038814833
|
||||
###### Article L843-4 | LEGIARTI000038814833
|
||||
|
||||
Lors d'un changement de locataire, s'il est, de nouveau, constaté que le logement n'est pas conforme
|
||||
aux caractéristiques de décence mentionnées à l'article L. 822-9, l'allocation de logement n'est pas
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -230,7 +230,8 @@ janvier 2019 et à 10 838,40 euros par an à compter du 1er janvier 2020 ;
|
||||
|
||||
```catala
|
||||
|
||||
# Uniquement la valeur du plafond individuel est important pour l'éligibilité aux APL
|
||||
# Uniquement la valeur du plafond individuel est importante pour
|
||||
# l'éligibilité aux APL.
|
||||
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
définition plafond_individuel_l815_9_sécu sous condition
|
||||
@ -248,7 +249,8 @@ champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
date_ouverture_droits <@ |2021-01-01|
|
||||
conséquence égal à 10 838,40€
|
||||
|
||||
# TODO juridique: trouver les décrets définissant les montants pour 2021 et 2022
|
||||
# TODO juridique: trouver les décrets définissant les montants pour
|
||||
# 2021 et 2022
|
||||
```
|
||||
|
||||
b) Lorsque les deux conjoints, concubins ou partenaires liés par un pacte civil
|
||||
|
@ -32,8 +32,6 @@ déclaration énumération TypePrêt:
|
||||
-- D331_63_64
|
||||
-- D331_59_8
|
||||
-- D331_76_1
|
||||
-- Autre
|
||||
# TODO informatique: mettre option pas de prêt
|
||||
|
||||
déclaration énumération TitulairePrêt:
|
||||
-- Demandeur
|
||||
@ -60,7 +58,6 @@ déclaration énumération ModeOccupation:
|
||||
contenu Propriétaire
|
||||
-- SousLocataire contenu Location
|
||||
-- LocationAccession contenu Propriétaire
|
||||
-- Autre
|
||||
|
||||
déclaration énumération ParentOuAutre:
|
||||
-- DemandeurOuConjointOuParentOuViaPartsSociétés contenu décimal
|
||||
@ -101,7 +98,8 @@ déclaration énumération Parenté:
|
||||
déclaration structure ParentÀCharge:
|
||||
donnée âge contenu durée
|
||||
donnée ressources contenu argent
|
||||
donnée ascendant_descendant_collatéral_deuxième_troisième_degré contenu booléen
|
||||
donnée ascendant_descendant_collatéral_deuxième_troisième_degré
|
||||
contenu booléen
|
||||
donnée parenté contenu Parenté
|
||||
donnée incapacité_80_pourcent_ou_restriction_emploi contenu booléen
|
||||
donnée bénéficiaire_l161_19_l351_8_l643_3_sécu contenu booléen
|
||||
@ -126,7 +124,8 @@ déclaration structure Ménage:
|
||||
donnée nombre_autres_occupants_logement contenu entier
|
||||
donnée situation_familiale contenu SituationFamiliale
|
||||
donnée condition_rattaché_foyer_fiscal_parent_ifi contenu booléen
|
||||
donnée nombre_enfants_à_naître_après_troisième_mois_grossesse contenu entier
|
||||
donnée nombre_enfants_à_naître_après_troisième_mois_grossesse
|
||||
contenu entier
|
||||
donnée date_naissance_troisième_enfant_ou_dernier_si_plus contenu
|
||||
DateNaissanceTroisièmeOuDernierPlusEnfant
|
||||
|
||||
@ -149,40 +148,49 @@ déclaration énumération Nationalité:
|
||||
|
||||
déclaration champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
entrée ménage contenu Ménage
|
||||
interne condition_prêt condition dépend de Prêt
|
||||
entrée demandeur contenu Demandeur
|
||||
entrée sortie date_ouverture_droits contenu date
|
||||
interne patrimoine_total_demandeur contenu argent
|
||||
|
||||
# Différentes conditions pour l'éligibilité
|
||||
interne condition_prêt condition dépend de Prêt
|
||||
interne condition_spécifique_prise_en_compte_revenus_demandeur condition
|
||||
interne condition_nationalité condition
|
||||
interne caractéristiques_prêt_l831_1_1 condition dépend de Prêt
|
||||
interne caractéristiques_prêt_l831_1_6 condition dépend de Prêt
|
||||
interne prise_en_compte_personne_à_charge condition
|
||||
dépend de PersonneÀCharge
|
||||
interne personnes_à_charge_prises_en_compte contenu collection PersonneÀCharge
|
||||
interne condition_logement_résidence_principale condition
|
||||
interne condition_logement_mode_occupation condition
|
||||
interne condition_logement_location_tiers condition
|
||||
interne condition_logement_bailleur condition
|
||||
interne condition_logement_prêt condition
|
||||
interne condition_logement_surface_minimale_sans_seuil_m_carrés contenu entier
|
||||
interne nombre_personnes_logement contenu entier
|
||||
interne condition_logement_surface_minimale_sans_seuil_m_carrés
|
||||
contenu entier
|
||||
interne condition_logement_surface condition
|
||||
interne usufruit_ou_propriété_famille contenu booléen
|
||||
interne seuil_l822_3_parts_propriété contenu décimal
|
||||
interne seuil_l822_3_parts_usufruit contenu décimal
|
||||
interne seuil_l822_5_patrimoine contenu argent
|
||||
interne patrimoine_pris_en_compte contenu argent
|
||||
interne condition_non_ouverture_l822_8 condition
|
||||
interne condition_non_ouverture_l822_9_decence_logement condition
|
||||
interne condition_non_ouverture_l822_10_peuplement_logement condition
|
||||
interne condition_peuplement_logement_l822_10 condition
|
||||
interne éligibilité_logement condition
|
||||
interne prise_en_compte_personne_à_charge condition
|
||||
dépend de PersonneÀCharge
|
||||
interne personnes_à_charge_prises_en_compte
|
||||
contenu collection PersonneÀCharge
|
||||
|
||||
# Autres variables
|
||||
interne patrimoine_total_demandeur contenu argent
|
||||
interne caractéristiques_prêt_l831_1_1 condition dépend de Prêt
|
||||
interne caractéristiques_prêt_l831_1_6 condition dépend de Prêt
|
||||
interne nombre_personnes_logement contenu entier
|
||||
interne usufruit_ou_propriété_famille contenu booléen
|
||||
interne seuil_l822_3_parts_propriété contenu décimal
|
||||
interne seuil_l822_3_parts_usufruit contenu décimal
|
||||
interne seuil_l822_5_patrimoine contenu argent
|
||||
interne patrimoine_pris_en_compte contenu argent
|
||||
interne âge_l351_8_1_sécu contenu durée
|
||||
interne âge_l161_17_2_sécu contenu durée
|
||||
interne plafond_individuel_l815_9_sécu contenu argent
|
||||
sortie éligibilité condition
|
||||
|
||||
ouverture_droits_retraite champ d'application OuvertureDroitsRetraite
|
||||
|
||||
sortie éligibilité condition
|
||||
|
||||
champ d'application ÉligibilitéAidePersonnelleLogement:
|
||||
règle éligibilité sous condition
|
||||
condition_nationalité et
|
||||
@ -195,21 +203,25 @@ déclaration champ d'application ÉligibilitéPrimeDeDéménagement:
|
||||
entrée ménage contenu Ménage
|
||||
entrée demandeur contenu Demandeur
|
||||
entrée date_ouverture_droits contenu date
|
||||
entrée dépenses_justifiées_réellement_engagées contenu argent
|
||||
|
||||
interne condition_rang_enfant condition
|
||||
interne condition_période_déménagement condition
|
||||
éligibilité_apl champ d'application ÉligibilitéAidePersonnelleLogement
|
||||
interne éligibilité_logement condition
|
||||
interne délai_après_emménagement_l823_8_2 contenu durée
|
||||
entrée dépenses_justifiées_réellement_engagées contenu argent
|
||||
sortie montant_prime_déménagement contenu argent
|
||||
interne plafond_d823_22 contenu argent
|
||||
|
||||
éligibilité_apl champ d'application ÉligibilitéAidePersonnelleLogement
|
||||
base_mensuelle_allocations_familiales champ d'application
|
||||
BaseMensuelleAllocationsFamiliales
|
||||
|
||||
sortie montant_prime_déménagement contenu argent
|
||||
|
||||
champ d'application ÉligibilitéPrimeDeDéménagement:
|
||||
définition éligibilité_apl.ménage égal à ménage
|
||||
définition éligibilité_apl.demandeur égal à demandeur
|
||||
définition éligibilité_apl.date_ouverture_droits égal à date_ouverture_droits
|
||||
définition éligibilité_apl.date_ouverture_droits égal à
|
||||
date_ouverture_droits
|
||||
définition base_mensuelle_allocations_familiales.date_courante égal à
|
||||
date_ouverture_droits
|
||||
|
||||
@ -224,28 +236,31 @@ déclaration énumération PaiementLogementDistinctProfessionnel:
|
||||
déclaration champ d'application RessourcesAidePersonnelleLogement:
|
||||
entrée ressources_demandeur contenu argent
|
||||
entrée ressources_conjoint contenu argent
|
||||
interne ressources_personnes_vivant_habituellement_foyer contenu argent
|
||||
interne ressources_prises_en_compte contenu argent
|
||||
entrée personnes_vivant_habituellement_foyer contenu
|
||||
collection PersonneVivantHabituellementAuFoyer
|
||||
entrée demandeur_exerce_activité_rémunérée contenu booléen
|
||||
entrée conjoint_exerce_activité_rémunérée contenu booléen
|
||||
entrée personnes_à_charge contenu collection PersonneÀCharge
|
||||
entrée situation_familiale contenu SituationFamiliale
|
||||
entrée mode_occupation contenu ModeOccupation
|
||||
entrée condition_âge_bourse_enseignement_supérieur condition
|
||||
entrée demandeur_poursuit_des_études condition
|
||||
entrée date_demande_ou_reexamen_droit contenu date
|
||||
entrée paiement_logement_distinct_professionnel contenu
|
||||
PaiementLogementDistinctProfessionnel
|
||||
|
||||
interne ressources_personnes_vivant_habituellement_foyer contenu argent
|
||||
interne abattement_r_822_8 contenu argent
|
||||
interne montant_forfaitaire_r_822_8 contenu argent
|
||||
interne abattement_r_822_7 contenu argent
|
||||
interne montant_forfaitaire_r_822_7 contenu argent
|
||||
interne abattement_r_822_10 contenu argent
|
||||
entrée demandeur_exerce_activité_rémunérée contenu booléen
|
||||
entrée conjoint_exerce_activité_rémunérée contenu booléen
|
||||
entrée personnes_à_charge contenu collection PersonneÀCharge
|
||||
entrée situation_familiale contenu SituationFamiliale
|
||||
interne ressources_forfaitaires_r822_20 contenu argent
|
||||
|
||||
base_mensuelle_allocations_familiales champ d'application
|
||||
BaseMensuelleAllocationsFamiliales
|
||||
entrée mode_occupation contenu ModeOccupation
|
||||
entrée condition_âge_bourse_enseignement_supérieur condition
|
||||
entrée demandeur_poursuit_des_études condition
|
||||
entrée date_demande_ou_reexamen_droit contenu date
|
||||
interne ressources_forfaitaires_r822_20 contenu argent
|
||||
|
||||
sortie ressources_prises_en_compte contenu argent
|
||||
|
||||
déclaration énumération ZoneDHabitation:
|
||||
-- Zone1
|
||||
@ -260,7 +275,7 @@ déclaration énumération CatégorieCalculAPL:
|
||||
déclaration énumération TypeTravauxLogement:
|
||||
-- SurLocauxNonHabitation
|
||||
-- SurLogementExistant
|
||||
# TODO informatique: rajouter cas où pas de travaux.
|
||||
-- PasDeTravaux
|
||||
|
||||
déclaration énumération AmélioréParOccupant:
|
||||
-- Oui
|
||||
@ -279,10 +294,49 @@ déclaration structure TrancheRevenu:
|
||||
donnée bas contenu argent
|
||||
donnée taux contenu décimal
|
||||
|
||||
déclaration champ d'application CalculAidePersonnelleLogement:
|
||||
sortie aide_finale contenu argent
|
||||
déclaration champ d'application ContributionsSocialesAidePersonnelleLogement:
|
||||
sortie montant contenu argent dépend de argent
|
||||
|
||||
interne aide_finale_locatif contenu argent
|
||||
déclaration champ d'application CalculAidePersonnelleLogementLocatif:
|
||||
entrée loyer_principal contenu argent
|
||||
entrée ressources_ménage_arrondies contenu argent
|
||||
entrée bénéficiaire_aide_adulte_ou_enfant_handicapés
|
||||
contenu booléen
|
||||
entrée date_courante contenu date
|
||||
entrée nombre_personnes_à_charge contenu entier
|
||||
entrée situation_familiale_calcul_apl contenu SituationFamilialeCalculAPL
|
||||
entrée zone contenu ZoneDHabitation
|
||||
entrée logement_est_chambre contenu booléen
|
||||
entrée personnes_âgées_ou_handicap_adultes_hébergées_onéreux_particuliers
|
||||
contenu booléen
|
||||
entrée type_aide contenu TypeAidePersonnelleLogement
|
||||
entrée colocation contenu booléen
|
||||
entrée réduction_loyer_solidarité contenu argent
|
||||
|
||||
interne loyer_éligible contenu argent
|
||||
interne taux_loyer_éligible contenu décimal
|
||||
état formule
|
||||
état arrondi
|
||||
interne rapport_loyers contenu décimal
|
||||
interne loyer_référence contenu argent
|
||||
interne fraction_l832_3 contenu décimal
|
||||
interne plafond_dégressivité_d823_16 contenu argent
|
||||
interne plafond_suppression_d823_16 contenu argent
|
||||
interne montant_forfaitaire_d823_16 contenu argent
|
||||
interne montant_minimal_aide_d823_16 contenu argent
|
||||
interne abattement_forfaitaire_d823_17 contenu argent
|
||||
interne taux_prise_compte_ressources contenu décimal
|
||||
|
||||
sortie montant_forfaitaire_charges_d823_16 contenu argent
|
||||
sortie plafond_loyer_d823_16_2 contenu argent
|
||||
sortie participation_minimale contenu argent
|
||||
sortie taux_composition_familiale contenu décimal
|
||||
sortie participation_personnelle contenu argent
|
||||
|
||||
contributions_sociales champ d'application
|
||||
ContributionsSocialesAidePersonnelleLogement
|
||||
|
||||
sortie aide_finale contenu argent
|
||||
état formule
|
||||
état diminué
|
||||
état minoration_forfaitaire
|
||||
@ -290,121 +344,152 @@ déclaration champ d'application CalculAidePersonnelleLogement:
|
||||
état réduction_loyer_solidarité
|
||||
état montant_minimal
|
||||
|
||||
interne aide_finale_accession_propriété contenu argent
|
||||
état formule
|
||||
état minoration_forfaitaire
|
||||
état abattement
|
||||
état contributions_sociales_arrondi
|
||||
état montant_minimal
|
||||
|
||||
interne aide_finale_logement_foyer contenu argent
|
||||
état formule
|
||||
état minoration_forfaitaire
|
||||
état abattement
|
||||
état contributions_sociales_arrondi
|
||||
état montant_minimal
|
||||
|
||||
interne tranches_revenus_d832_26 contenu collection TrancheRevenu
|
||||
|
||||
entrée type_prêt contenu TypePrêt
|
||||
interne taux_francs_vers_euros contenu décimal
|
||||
entrée ancienneté_logement contenu NeufOuAncien
|
||||
déclaration champ d'application CalculAidePersonnelleLogementFoyer:
|
||||
entrée mode_occupation contenu ModeOccupation
|
||||
interne catégorie_calcul_apl contenu CatégorieCalculAPL
|
||||
interne loyer_éligible contenu argent
|
||||
interne mensualité_éligible contenu argent
|
||||
entrée loyer_principal contenu argent
|
||||
entrée mensualité_principale contenu argent
|
||||
entrée date_courante contenu date
|
||||
entrée logement_est_chambre contenu booléen
|
||||
entrée personnes_âgées_ou_handicapées_adultes_hébergées_à_titre_onéreux_chez_des_particuliers contenu booléen
|
||||
entrée zone contenu ZoneDHabitation
|
||||
entrée situation_familiale contenu SituationFamiliale
|
||||
interne situation_familiale_calcul_apl contenu SituationFamilialeCalculAPL
|
||||
interne fraction_l832_3 contenu décimal
|
||||
|
||||
entrée ressources_ménage_arrondies contenu argent
|
||||
entrée nombre_personnes_à_charge contenu entier
|
||||
entrée type_aide contenu TypeAidePersonnelleLogement
|
||||
entrée situation_familiale_calcul_apl contenu SituationFamilialeCalculAPL
|
||||
entrée zone contenu ZoneDHabitation
|
||||
entrée date_courante contenu date
|
||||
|
||||
interne plafond_dégressivité_d823_16 contenu argent
|
||||
interne plafond_suppression_d823_16 contenu argent
|
||||
sortie montant_forfaitaire_charges_d823_16 contenu argent
|
||||
sortie montant_forfaitaire_charges_d832_10 contenu argent
|
||||
sortie plafond_loyer_d823_16_2 contenu argent
|
||||
interne loyer_référence contenu argent
|
||||
interne rapport_loyers contenu décimal
|
||||
entrée colocation contenu booléen
|
||||
contexte condition_2_du_832_25 contenu booléen
|
||||
|
||||
interne mensualité_minimale contenu argent
|
||||
|
||||
interne montant_limite_tranches_d832_15_1 contenu argent
|
||||
interne taux_tranche_inférieure_d832_15_1 contenu décimal
|
||||
interne taux_tranche_supérieure_d832_15_1 contenu décimal
|
||||
|
||||
entrée type_travaux_logement contenu TypeTravauxLogement
|
||||
entrée date_signature_prêt contenu date
|
||||
# TODO informatique: mettre un type option là
|
||||
entrée local_habité_première_fois_bénéficiaire contenu booléen
|
||||
# TODO informatique: mettre un type option là
|
||||
entrée date_entrée_logement contenu date
|
||||
# TODO informatique: mettre un type option là
|
||||
interne plafond_menusalité_d832_10_3 contenu argent
|
||||
état base
|
||||
état copropriétaires
|
||||
entrée copropriété contenu booléen
|
||||
interne calcul_plafond_menusalité_d832_10_3 contenu argent dépend de date
|
||||
|
||||
interne équivalence_minimale_loyer contenu argent
|
||||
interne coefficient_prise_en_charge_d832_25 contenu décimal
|
||||
état formule
|
||||
état arrondi
|
||||
état seuil
|
||||
interne coefficient_multiplicateur_d832_25 contenu argent
|
||||
interne coefficient_r_d832_25 contenu argent
|
||||
interne n_nombre_parts_d832_25 contenu décimal
|
||||
interne équivalence_loyer_éligible contenu argent
|
||||
|
||||
interne dépense_nette_minimale_d832_10 contenu argent dépend de argent
|
||||
état avant_abattement
|
||||
état après_abattement
|
||||
interne dépense_nette_minimale_d832_27 contenu argent dépend de argent
|
||||
état avant_abattement
|
||||
état après_abattement
|
||||
interne coefficient_multiplicateur_d832_17_3 contenu décimal
|
||||
interne coefficient_multiplicateur_d832_11 contenu argent
|
||||
interne coefficient_multiplicateur_d832_25 contenu argent
|
||||
interne coefficient_r_d832_25 contenu argent
|
||||
interne n_nombre_parts_d832_11 contenu décimal
|
||||
interne n_nombre_parts_d832_25 contenu décimal
|
||||
interne coefficient_prise_en_charge_d832_10 contenu décimal
|
||||
interne coefficient_prise_en_charge_d832_25 contenu décimal
|
||||
sortie participation_personnelle contenu argent
|
||||
interne montant_forfaitaire_d832_10 contenu argent
|
||||
interne montant_forfaitaire_d823_16 contenu argent
|
||||
interne montant_forfaitaire_d832_24 contenu argent
|
||||
interne montant_forfaitaire_d832_26 contenu argent
|
||||
interne montant_forfaitaire_d832_27 contenu argent
|
||||
interne condition_2_du_832_25 contenu booléen
|
||||
entrée bénéficiaire_aide_adulte_ou_enfant_handicapés condition
|
||||
interne montant_contributions_sociales contenu argent dépend de argent
|
||||
entrée réduction_loyer_solidarité contenu argent
|
||||
interne montant_minimal_aide_d832_10 contenu argent
|
||||
interne montant_minimal_aide_d823_16 contenu argent
|
||||
interne montant_minimal_aide_d823_24 contenu argent
|
||||
sortie participation_minimale contenu argent
|
||||
interne tranches_revenus_d832_26 contenu collection TrancheRevenu
|
||||
|
||||
contributions_sociales champ d'application
|
||||
ContributionsSocialesAidePersonnelleLogement
|
||||
|
||||
sortie équivalence_minimale_loyer contenu argent
|
||||
sortie aide_finale contenu argent
|
||||
état formule
|
||||
état minoration_forfaitaire
|
||||
état abattement
|
||||
état contributions_sociales_arrondi
|
||||
état montant_minimal
|
||||
|
||||
déclaration champ d'application CalculAidePersonnelleLogementAccessionPropriété:
|
||||
entrée mensualité_principale contenu argent
|
||||
entrée ressources_ménage_arrondies contenu argent
|
||||
entrée nombre_personnes_à_charge contenu entier
|
||||
entrée situation_familiale_calcul_apl contenu SituationFamilialeCalculAPL
|
||||
entrée type_travaux_logement contenu TypeTravauxLogement
|
||||
entrée date_signature_prêt contenu date
|
||||
entrée local_habité_première_fois_bénéficiaire contenu booléen
|
||||
entrée date_entrée_logement contenu date
|
||||
entrée copropriété contenu booléen
|
||||
entrée situation_r822_11_13_17 contenu booléen
|
||||
entrée équivalence_minimale_loyer contenu argent
|
||||
entrée zone contenu ZoneDHabitation
|
||||
entrée type_prêt contenu TypePrêt
|
||||
entrée ancienneté_logement contenu NeufOuAncien
|
||||
entrée date_courante contenu date
|
||||
|
||||
interne mensualité_éligible contenu argent
|
||||
interne mensualité_minimale contenu argent
|
||||
interne plafond_mensualité_d832_10_3 contenu argent
|
||||
état base
|
||||
état copropriétaires
|
||||
interne calcul_plafond_mensualité_d832_10_3 contenu argent dépend de date
|
||||
interne n_nombre_parts_d832_11 contenu décimal
|
||||
interne coefficient_prise_en_charge_d832_10 contenu décimal
|
||||
état formule
|
||||
état arrondi
|
||||
état seuil
|
||||
interne dépense_nette_minimale_d832_10 contenu argent dépend de argent
|
||||
état avant_abattement
|
||||
état après_abattement
|
||||
interne ressources_ménage_avec_d832_18 contenu argent
|
||||
interne montant_forfaitaire_charges_d832_10 contenu argent
|
||||
interne montant_forfaitaire_d832_10 contenu argent
|
||||
interne montant_minimal_aide_d832_10 contenu argent
|
||||
interne coefficient_multiplicateur_d832_17_3 contenu décimal
|
||||
interne coefficient_multiplicateur_d832_11 contenu argent
|
||||
interne coefficient_multiplicateur_d832_18 contenu décimal
|
||||
interne montant_limite_tranches_d832_15_1 contenu argent
|
||||
interne taux_tranche_inférieure_d832_15_1 contenu décimal
|
||||
interne taux_tranche_supérieure_d832_15_1 contenu décimal
|
||||
interne taux_francs_vers_euros contenu décimal
|
||||
|
||||
contributions_sociales champ d'application
|
||||
ContributionsSocialesAidePersonnelleLogement
|
||||
|
||||
sortie aide_finale contenu argent
|
||||
état formule
|
||||
état minoration_forfaitaire
|
||||
état abattement
|
||||
état contributions_sociales_arrondi
|
||||
état montant_minimal
|
||||
|
||||
déclaration structure InformationsCalculAPLLocatif:
|
||||
donnée loyer_principal contenu argent
|
||||
donnée bénéficiaire_aide_adulte_ou_enfant_handicapés contenu booléen
|
||||
donnée logement_est_chambre contenu booléen
|
||||
donnée colocation contenu booléen
|
||||
donnée personnes_âgées_ou_handicap_adultes_hébergées_onéreux_particuliers
|
||||
contenu booléen
|
||||
# TODO informatique et juridique: calculer type_aide!
|
||||
donnée type_aide contenu TypeAidePersonnelleLogement
|
||||
donnée réduction_loyer_solidarité contenu argent
|
||||
|
||||
déclaration structure InformationsCalculAPLAccessionPropriété:
|
||||
donnée mensualité_principale contenu argent
|
||||
donnée date_signature_prêt contenu date
|
||||
donnée date_entrée_logement contenu date
|
||||
donnée type_travaux_logement contenu TypeTravauxLogement
|
||||
donnée local_habité_première_fois_bénéficiaire contenu booléen
|
||||
donnée copropriété contenu booléen
|
||||
donnée situation_r822_11_13_17 contenu booléen
|
||||
donnée type_prêt contenu TypePrêt
|
||||
donnée ancienneté_logement contenu NeufOuAncien
|
||||
|
||||
déclaration énumération InformationsCalculAPL:
|
||||
-- InfosLocatif contenu InformationsCalculAPLLocatif
|
||||
-- InfosLogementFoyer
|
||||
-- InfosAccessionPropriété contenu
|
||||
InformationsCalculAPLAccessionPropriété
|
||||
|
||||
|
||||
déclaration champ d'application CalculAidePersonnelleLogement:
|
||||
entrée mode_occupation contenu ModeOccupation
|
||||
entrée informations_calcul contenu InformationsCalculAPL
|
||||
entrée ressources_ménage contenu argent
|
||||
état sans_arrondi
|
||||
état avec_arrondi
|
||||
interne ressources_ménage_avec_d832_18 contenu argent
|
||||
interne coefficient_multiplicateur_d832_18 contenu décimal
|
||||
interne abattement_forfaitaire_d823_17 contenu argent
|
||||
interne taux_prise_compte_ressources contenu décimal
|
||||
interne taux_loyer_éligible contenu décimal
|
||||
sortie taux_composition_familiale contenu décimal
|
||||
entrée situation_r822_11_13_17 contenu booléen
|
||||
entrée situation_familiale contenu SituationFamiliale
|
||||
entrée nombre_personnes_à_charge contenu entier
|
||||
entrée zone contenu ZoneDHabitation
|
||||
entrée date_courante contenu date
|
||||
|
||||
champ d'application CalculAidePersonnelleLogement:
|
||||
# Valeur par défaut pour ce plafond quand il n'est pas applicable.
|
||||
définition calcul_plafond_menusalité_d832_10_3 de date_signature_prêt sous condition
|
||||
type_prêt sous forme TypePrêt.Autre
|
||||
conséquence égal à 0 €
|
||||
interne catégorie_calcul_apl contenu CatégorieCalculAPL
|
||||
interne situation_familiale_calcul_apl contenu SituationFamilialeCalculAPL
|
||||
|
||||
locatif champ d'application CalculAidePersonnelleLogementLocatif
|
||||
logement_foyer champ d'application CalculAidePersonnelleLogementFoyer
|
||||
accession_propriété champ d'application
|
||||
CalculAidePersonnelleLogementAccessionPropriété
|
||||
|
||||
sortie aide_finale contenu argent
|
||||
|
||||
|
||||
champ d'application ContributionsSocialesAidePersonnelleLogement:
|
||||
# TODO juridique: mettre ce bout de code à côté des articles de loi qui le
|
||||
# justifient. (Pas de CSG mais la CRDS pour les APL)
|
||||
définition montant_contributions_sociales de aide_finale égal à
|
||||
définition montant de aide_finale égal à
|
||||
aide_finale *€ 0,5%
|
||||
|
||||
déclaration champ d'application OuvertureDroitsRetraite:
|
||||
@ -426,20 +511,17 @@ déclaration énumération ModeOccupationImpayé:
|
||||
-- ImpayéPrêt
|
||||
|
||||
déclaration champ d'application ImpayéDépenseLogement:
|
||||
interne seuil_impayé_dépense_de_logement contenu argent
|
||||
|
||||
entrée mode_occupation contenu ModeOccupation
|
||||
interne mode_occupation_impayé contenu ModeOccupationImpayé
|
||||
|
||||
entrée aide_versée contenu VersementÀ
|
||||
|
||||
entrée montant_charges contenu argent
|
||||
entrée montant_apl contenu argent
|
||||
|
||||
entrée montant_charges contenu argent
|
||||
entrée dépense_logement contenu DépenseLogement
|
||||
entrée montant_dette contenu argent
|
||||
|
||||
interne seuil_impayé_dépense_de_logement contenu argent
|
||||
interne mode_occupation_impayé contenu ModeOccupationImpayé
|
||||
interne dépense_logement_brute contenu DépenseLogement
|
||||
interne dépense_logement_nette contenu DépenseLogement
|
||||
|
||||
entrée montant_dette contenu argent
|
||||
sortie montant_impayé contenu argent
|
||||
```
|
||||
|
@ -1,2 +0,0 @@
|
||||
[RESULT] Computation successful! Results:
|
||||
[RESULT] éligible = true
|
@ -1,2 +1,2 @@
|
||||
[RESULT] Computation successful! Results:
|
||||
[RESULT] éligible = false
|
||||
[RESULT] montant = 0.00 €
|
@ -4,43 +4,26 @@
|
||||
|
||||
```catala
|
||||
déclaration champ d'application Exemple1 :
|
||||
calcul champ d'application CalculAidePersonnelleLogement
|
||||
calcul champ d'application CalculAidePersonnelleLogementLocatif
|
||||
sortie montant contenu argent
|
||||
|
||||
champ d'application Exemple1:
|
||||
définition montant égal à calcul.aide_finale
|
||||
définition calcul.ancienneté_logement égal à Neuf
|
||||
définition calcul.mode_occupation égal à Locataire contenu (Location {
|
||||
-- bailleur: Bailleur {
|
||||
-- type_bailleur: BailleurPrivé
|
||||
-- respecte_convention_titre_V: vrai
|
||||
-- respecte_convention_titre_II: vrai
|
||||
-- construit_amélioré_conditions_l831_1_4: faux
|
||||
-- acquisition_aides_état_prêt_titre_II_ou_livre_III: faux
|
||||
}
|
||||
})
|
||||
définition calcul.loyer_principal égal à 700 €
|
||||
définition calcul.mensualité_principale égal à 0 €
|
||||
définition calcul.date_courante égal à |2021-10-3|
|
||||
définition calcul.logement_est_chambre égal à faux
|
||||
définition calcul.personnes_âgées_ou_handicapées_adultes_hébergées_à_titre_onéreux_chez_des_particuliers
|
||||
définition calcul.personnes_âgées_ou_handicap_adultes_hébergées_onéreux_particuliers
|
||||
égal à faux
|
||||
définition calcul.zone égal à Zone1
|
||||
définition calcul.situation_familiale égal à Mariés
|
||||
définition calcul.situation_familiale_calcul_apl égal à Couple
|
||||
définition calcul.nombre_personnes_à_charge égal à 3
|
||||
définition calcul.type_aide égal à AidePersonnaliséeLogement
|
||||
# TODO juridique: trouver articles loi qui calculent le type d'aide
|
||||
# à partir des caractéristiques du ménage et l'implémenter.
|
||||
définition calcul.colocation égal à faux
|
||||
définition calcul.type_travaux_logement égal à SurLogementExistant
|
||||
définition calcul.local_habité_première_fois_bénéficiaire égal à faux
|
||||
définition calcul.date_entrée_logement égal à |2020-05-20|
|
||||
définition calcul.copropriété égal à faux
|
||||
définition calcul.réduction_loyer_solidarité égal à 0 €
|
||||
définition calcul.ressources_ménage égal à 35 999 €
|
||||
définition calcul.situation_r822_11_13_17 égal à faux
|
||||
définition calcul.type_prêt égal à TypePrêt.Autre
|
||||
définition calcul.date_signature_prêt égal à |2020-05-03|
|
||||
définition calcul.ressources_ménage_arrondies égal à 36 000 €
|
||||
définition calcul.bénéficiaire_aide_adulte_ou_enfant_handicapés égal à faux
|
||||
assertion montant = 0 €
|
||||
assertion calcul.montant_forfaitaire_charges_d823_16 = 91,09 €
|
||||
assertion calcul.plafond_loyer_d823_16_2 = 524,20 €
|
||||
|
@ -65,3 +65,21 @@ champ d'application BaseMensuelleAllocationsFamiliales :
|
||||
date_courante <@ |2022-04-01|
|
||||
conséquence égal à 414,81 €
|
||||
```
|
||||
|
||||
## Instruction interministérielle n°DSS/2B/2022/82 du 28 mars 2022 relative à la revalorisation au 1er avril 2022 des prestations familiales servies en métropole, en Guadeloupe, en Guyane, en Martinique, à la Réunion, à Saint-Barthélemy, à Saint-Martin et dans le département de Mayotte
|
||||
|
||||
Au 1er avril 2022, le coefficient de revalorisation de la base mensuelle de
|
||||
calcul des allocations familiales (BMAF) est ainsi fixé à 1,018 soit un taux
|
||||
de revalorisation de la BMAF de 1,8 %. Le montant de cette base mensuelle,
|
||||
en pourcentage duquel sont fixées les prestations familiales, est donc porté
|
||||
de 414,81 € au 1er avril 2021 à 422,28 € au 1er avril 2022.
|
||||
|
||||
|
||||
```catala
|
||||
champ d'application BaseMensuelleAllocationsFamiliales :
|
||||
définition montant
|
||||
sous condition
|
||||
date_courante >=@ |2022-04-01| et
|
||||
date_courante <@ |2023-04-01|
|
||||
conséquence égal à 422,28 €
|
||||
```
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
# This file should be in sync with compiler/runtime.{ml, mli} !
|
||||
|
||||
from gmpy2 import log2, mpz, mpq, mpfr, t_divmod, sign # type: ignore
|
||||
from gmpy2 import log2, mpz, mpq, mpfr, t_divmod, f_div, sign # type: ignore
|
||||
import datetime
|
||||
import dateutil.relativedelta
|
||||
from typing import NewType, List, Callable, Tuple, Optional, TypeVar, Iterable, Union, Any
|
||||
@ -397,6 +397,12 @@ def decimal_of_integer(d: Integer) -> Decimal:
|
||||
def decimal_to_string(precision: int, i: Decimal) -> str:
|
||||
return "{1:.{0}}".format(precision, mpfr(i.value, precision * 10 // 2))
|
||||
|
||||
|
||||
def decimal_round(q: Decimal) -> Decimal:
|
||||
# Implements the workaround by
|
||||
# https://gmplib.org/list-archives/gmp-discuss/2009-May/003767.html *)
|
||||
return f_div(2*q.numerator + q.denominator, 2*q.denominator) # type:ignore
|
||||
|
||||
# --------
|
||||
# Integers
|
||||
# --------
|
||||
|
@ -0,0 +1,5 @@
|
||||
[RESULT] Computation successful! Results:
|
||||
[RESULT] x = 84.648665
|
||||
[RESULT] x1 = 85.
|
||||
[RESULT] y = 4.368297
|
||||
[RESULT] y1 = 4.
|
15
tests/test_dec/good/rounding.catala_en
Normal file
15
tests/test_dec/good/rounding.catala_en
Normal file
@ -0,0 +1,15 @@
|
||||
## Article
|
||||
|
||||
```catala
|
||||
declaration scope A:
|
||||
output x content decimal
|
||||
output y content decimal
|
||||
output x1 content decimal
|
||||
output y1 content decimal
|
||||
|
||||
scope A:
|
||||
definition x equals 84.648665
|
||||
definition y equals 4.368297
|
||||
definition x1 equals round_decimal of x
|
||||
definition y1 equals round_decimal of y
|
||||
```
|
Loading…
Reference in New Issue
Block a user