diff --git a/.nix/bindlib.nix b/.nix/bindlib.nix deleted file mode 100644 index 1a3fc7d4..00000000 --- a/.nix/bindlib.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ lib, fetchFromGitHub, buildDunePackage }: - -# We need the very last version "bleeding edge" since previous versions don't use dune. - -buildDunePackage rec { - pname = "bindlib"; - version = "5.0.1a"; - - minimumOCamlVersion = "4.0.8"; - - useDune2 = true; - - src = fetchFromGitHub { - owner = "rlepigre"; - repo = "ocaml-${pname}"; - rev = "317f195d22c75f556053039cd94b52bd0c423709"; - name = pname; - hash = "sha256-uO/Ko9PmQ+wE0d9jfEngd4G014B4nxGgfQyEvB52Pz8="; - }; - - meta = with lib; { - homepage = "https://rlepigre.github.io/ocaml-bindlib/"; - description = - "Bindlib is a library allowing the manipulation of data structures with bound variables"; - license = licenses.lgpl3; - maintainers = [ ]; - }; -} diff --git a/.nix/catala.nix b/.nix/catala.nix index d7a8b96e..51019102 100644 --- a/.nix/catala.nix +++ b/.nix/catala.nix @@ -5,7 +5,7 @@ , bindlib , buildDunePackage , calendar -, cmdliner_1_1_0 +, cmdliner , cppo , dates_calc , fetchFromGitHub @@ -42,7 +42,7 @@ buildDunePackage rec { ansiterminal benchmark bindlib - cmdliner_1_1_0 + cmdliner cppo dates_calc js_of_ocaml diff --git a/.nix/packages.nix b/.nix/packages.nix index 9b28fc12..15fdcebe 100644 --- a/.nix/packages.nix +++ b/.nix/packages.nix @@ -1,32 +1,13 @@ { ocamlPackages, fetchurl }: ocamlPackages.overrideScope' (self: super: { - cmdliner_1_1_0 = super.cmdliner.overrideAttrs (o: rec { - version = "1.1.0"; - src = fetchurl { - url = "https://erratique.ch/software/${o.pname}/releases/${o.pname }-${version}.tbz"; - sha256 = "sha256-irWd4HTlJSYuz3HMgi1de2GVL2qus0QjeCe1WdsSs8Q="; - }; - }); - alcotest = (super.alcotest.override { - cmdliner = self.cmdliner_1_1_0; - }).overrideAttrs (_: { + alcotest = (super.alcotest.override {}).overrideAttrs (_: { doCheck = false; }); - # Use a more recent version of `re` than the one packaged in nixpkgs - re = super.re.overrideAttrs (o: rec { - version = "1.10.4"; - src = fetchurl { - url = "https://github.com/ocaml/ocaml-${o.pname}/releases/download/${version}/${o.pname}-${version}.tbz"; - sha256 = "sha256-g+s+QwCqmx3HggdJAQ9DYuqDUkdCEwUk14wgzpnKdHw="; - }; - }); catala = self.callPackage ./catala.nix { }; - bindlib = self.callPackage ./bindlib.nix { }; unionfind = self.callPackage ./unionfind.nix { }; ninja_utils = self.callPackage ./ninja_utils.nix { }; clerk = self.callPackage ./clerk.nix { }; - ppx_yojson_conv = self.callPackage ./ppx_yojson_conv.nix { }; ubase = self.callPackage ./ubase.nix { }; dates_calc = self.callPackage ./dates_calc.nix { }; }) diff --git a/.nix/ppx_yojson_conv.nix b/.nix/ppx_yojson_conv.nix deleted file mode 100644 index 6b5e14b3..00000000 --- a/.nix/ppx_yojson_conv.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ lib, fetchurl, buildDunePackage, ppxlib, ppx_yojson_conv_lib, ppx_js_style }: - -buildDunePackage rec { - pname = "ppx_yojson_conv"; - version = "0.14.0"; - - minimumOCamlVersion = "4.0.8"; - - useDune2 = true; - - propagatedBuildInputs = [ - ppxlib ppx_yojson_conv_lib ppx_js_style - ]; - - src = fetchurl - { - url = "https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv-v0.14.0.tar.gz"; - sha256 = "0ls6vzj7k0wrjliifqczs78anbc8b88as5w7a3wixfcs1gjfsp2w"; - }; -} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ecb12841..2c09a3c8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -104,19 +104,20 @@ need more, here is how one can be added: - Choose a name wisely. Be ready to patch any code that already used the name for scope parameters, variables or structure fields, since it won't compile anymore. -- Add an element to the `builtin_expression` type in `surface/ast.ml(i)` +- Add an element to the `builtin_expression` type in `surface/ast.ml` - Add your builtin in the `builtins` list in `surface/lexer.cppo.ml`, and with proper translations in all of the language-specific modules `surface/lexer_en.cppo.ml`, `surface/lexer_fr.cppo.ml`, etc. Don't forget the macro at the beginning of `lexer.cppo.ml`. - The rest can all be done by following the type errors downstream: - - Add a corresponding element to the lower-level AST in `dcalc/ast.ml(i)`, type `unop` - - Extend the translation accordingly in `surface/desugaring.ml` - - Extend the printer (`dcalc/print.ml`) and the typer with correct type - information (`dcalc/typing.ml`) + - Add a corresponding element to the lower-level AST in `shared_ast/definitions.ml`, type `Op.t` + - Extend the generic operations on operators in `shared_ast/operators.ml` as well as the type information for the operator + - Extend the translation accordingly in `desugared/from_surface.ml` + - Extend the printer (`shared_ast/print.ml`) - Finally, provide the implementations: - - in `lcalc/to_ocaml.ml`, function `format_unop` - in `dcalc/interpreter.ml`, function `evaluate_operator` + - in `../runtimes/ocaml/runtime.ml` + - in `../runtimes/python/catala/src/catala/runtime.py` - Update the syntax guide in `doc/syntax/syntax.tex` with your new builtin ### Internationalization of the Catala syntax diff --git a/Dockerfile b/Dockerfile index f55157a2..6d00ad1a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM ocamlpro/ocaml:4.14-2022-07-17 AS dev-build-context # pandoc is not in alpine stable yet, install it manually with an explicit repository -RUN sudo apk add pandoc --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/ +RUN sudo apk add pandoc --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community/ RUN mkdir catala WORKDIR catala diff --git a/INSTALL.md b/INSTALL.md index 43d057ce..410e7cb5 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -22,18 +22,31 @@ Finally, start a shell inside a new container created from the newly built image The repository provides nix files to build or develop the catala compiler. Once [nix is installed](https://nixos.org/manual/nix/stable/#ch-installing-binary), -it is possible to enter a development shell: +with flakes enabled it is possible to enter a development shell: - nix-shell + nix develop or to build the Catala compiler, documentation and runtime library: - nix-build release.nix + nix build -Dependencies not yet in nixpkgs (`bindlib` and `unionFind` at the moment of writing) -are hardcoded inside the `.nix` directory. The `default.nix` should be compatible with +Dependencies not yet in nixpkgs (`ubase` and `unionFind` at the moment of writing) +are hardcoded inside the `.nix` directory. The `.nix/catala.nix` should be compatible with nixpkgs, if it finds a maintainer. +To develop catala's compiler using vscode using ocaml's [lsp](https://microsoft.github.io/language-server-protocol/), you can use the [ocaml-platform extension](https://marketplace.visualstudio.com/items?itemName=ocamllabs.ocaml-platform) with the following settings (inside the file `.vscode/settings.json`). + +```json +{ + "ocaml.sandbox": { + "kind": "custom", + "template": "nix develop --command $prog $args" + }, +} +``` + +The nix build is updated weekly by an automatic github action. + ### With opam The Catala compiler is written using OCaml. First, you have to install `opam`, diff --git a/Makefile b/Makefile index e845a61a..29e805f0 100644 --- a/Makefile +++ b/Makefile @@ -299,8 +299,9 @@ run_french_law_library_benchmark_python: $(PY_VIRTUALENV) \ CATALA_OPTS?= CLERK_OPTS?=--makeflags="$(MAKEFLAGS)" -CATALA_BIN=_build/default/compiler/catala.exe -CLERK_BIN=_build/default/build_system/clerk.exe +CATALA_BIN=_build/default/$(COMPILER_DIR)/catala.exe +CLERK_BIN=_build/default/$(BUILD_SYSTEM_DIR)/clerk.exe +CATALA_LEGIFRANCE_BIN=_build/default/$(CATALA_LEGIFRANCE_DIR)/catala_legifrance.exe CLERK=$(CLERK_BIN) --exe $(CATALA_BIN) \ $(CLERK_OPTS) $(if $(CATALA_OPTS),--catala-opts=$(CATALA_OPTS),) @@ -336,7 +337,7 @@ tests/%: .FORCE # Website assets ########################################## -WEBSITE_ASSETS = grammar.html catala.html +WEBSITE_ASSETS = grammar.html catala.html clerk.html catala_legifrance.html $(addprefix _build/default/,$(WEBSITE_ASSETS)): dune build $@ @@ -386,6 +387,11 @@ help_clerk: help_catala: $(CATALA_BIN) --help +#> help_catala_legifrance : Display the catala_legifrance man page +help_catala_legifrance: + $(CATALA_LEGIFRANCE_BIN) --help + + ########################################## # Special targets ########################################## diff --git a/build_system/clerk_driver.ml b/build_system/clerk_driver.ml index b6ab7efd..966c8803 100644 --- a/build_system/clerk_driver.ml +++ b/build_system/clerk_driver.ml @@ -16,7 +16,7 @@ the License. *) open Cmdliner -open Utils +open Catala_utils open Ninja_utils module Nj = Ninja_utils @@ -524,7 +524,7 @@ let collect_all_ninja_build (tested_file : string) (reset_test_outputs : bool) : (string * ninja) option = let expected_outputs = search_for_expected_outputs tested_file in - if List.length expected_outputs = 0 then ( + if expected_outputs = [] then ( Cli.debug_print "No expected outputs were found for test file %s" tested_file; None) @@ -890,10 +890,18 @@ let driver let files_or_folders = List.sort_uniq String.compare files_or_folders and catala_exe = Option.fold ~none:"catala" ~some:Fun.id catala_exe and catala_opts = Option.fold ~none:"" ~some:Fun.id catala_opts - and ninja_output = - Option.fold - ~none:(Filename.temp_file "clerk_build_" ".ninja") - ~some:Fun.id ninja_output + and with_ninja_output k = + match ninja_output with + | Some f -> k f + | None -> ( + let f = Filename.temp_file "clerk_build_" ".ninja" in + match k f with + | exception e -> + if not debug then Sys.remove f; + raise e + | r -> + Sys.remove f; + r) in match String.lowercase_ascii command with | "test" -> ( @@ -919,20 +927,22 @@ let driver if 0 = List.compare_lengths ctx.all_failed_names files_or_folders then return_ok else - try - File.with_formatter_of_file ninja_output (fun fmt -> - Cli.debug_print "writing %s..." ninja_output; + with_ninja_output + @@ fun nin -> + match + File.with_formatter_of_file nin (fun fmt -> + Cli.debug_print "writing %s..." nin; Nj.format fmt (add_root_test_build ninja ctx.all_file_names - ctx.all_test_builds)); + ctx.all_test_builds)) + with + | () -> let ninja_cmd = - "ninja -k 0 -f " ^ ninja_output ^ " " ^ ninja_flags ^ " test" + "ninja -k 0 -f " ^ nin ^ " " ^ ninja_flags ^ " test" in Cli.debug_print "executing '%s'..." ninja_cmd; - let return = Sys.command ninja_cmd in - if not debug then Sys.remove ninja_output; - return - with Sys_error e -> + Sys.command ninja_cmd + | exception Sys_error e -> Cli.error_print "can not write in %s" e; return_err) | "run" -> ( diff --git a/build_system/dune b/build_system/dune index c1ffbcba..50c30752 100644 --- a/build_system/dune +++ b/build_system/dune @@ -9,7 +9,7 @@ (public_name clerk.driver) (libraries catala.runtime_ocaml - catala.utils + catala.catala_utils ninja_utils cmdliner re diff --git a/catala.opam b/catala.opam index f42288eb..0f69283f 100644 --- a/catala.opam +++ b/catala.opam @@ -34,6 +34,7 @@ depends: [ "ppx_yojson_conv" {>= "0.14.0"} "re" {>= "1.9.0"} "sedlex" {>= "2.4"} + "uutf" {>= "1.0.3"} "ubase" {>= "0.05"} "unionFind" {>= "20200320"} "visitors" {>= "20200210"} @@ -45,6 +46,7 @@ depends: [ "obelisk" {cataladevmode} "conf-npm" {cataladevmode} "conf-python-3-dev" {cataladevmode} + "cpdf" {cataladevmode} "z3" {catalaz3mode} ] depopts: ["z3"] diff --git a/compiler/utils/utils.mld b/compiler/catala_utils/catala_utils.mld similarity index 90% rename from compiler/utils/utils.mld rename to compiler/catala_utils/catala_utils.mld index 17fb6c01..ff4215d0 100644 --- a/compiler/utils/utils.mld +++ b/compiler/catala_utils/catala_utils.mld @@ -7,12 +7,12 @@ In {{: desugared.html} the desugared representation} or in the global identifiers. These identifiers use OCaml's type system to statically distinguish e.g. a scope identifier from a struct identifier. -The {!module: Utils.Uid} module provides a generative functor whose output is +The {!module: Uid} module provides a generative functor whose output is a fresh sort of global identifiers. Related modules: -{!modules: Utils.Uid} +{!modules: Uid} {1 Source code positions} @@ -22,7 +22,7 @@ code. These annotations are critical to produce readable error messages. Related modules: -{!modules: Utils.Pos} +{!modules: Pos} {1 Error messages} diff --git a/compiler/utils/cli.ml b/compiler/catala_utils/cli.ml similarity index 99% rename from compiler/utils/cli.ml rename to compiler/catala_utils/cli.ml index a17bc3dc..20b77fa7 100644 --- a/compiler/utils/cli.ml +++ b/compiler/catala_utils/cli.ml @@ -172,7 +172,7 @@ let plugins_dirs = let default = let ( / ) = Filename.concat in [ - Sys.executable_name + Filename.dirname Sys.executable_name / Filename.parent_dir_name / "lib" / "catala" diff --git a/compiler/utils/cli.mli b/compiler/catala_utils/cli.mli similarity index 100% rename from compiler/utils/cli.mli rename to compiler/catala_utils/cli.mli diff --git a/compiler/utils/dune b/compiler/catala_utils/dune similarity index 58% rename from compiler/utils/dune rename to compiler/catala_utils/dune index e267b3b2..a5bebf6e 100644 --- a/compiler/utils/dune +++ b/compiler/catala_utils/dune @@ -1,8 +1,8 @@ (library - (name utils) - (public_name catala.utils) + (name catala_utils) + (public_name catala.catala_utils) (libraries cmdliner ubase ANSITerminal re bindlib catala.runtime_ocaml)) (documentation (package catala) - (mld_files utils)) + (mld_files catala_utils)) diff --git a/compiler/utils/errors.ml b/compiler/catala_utils/errors.ml similarity index 97% rename from compiler/utils/errors.ml rename to compiler/catala_utils/errors.ml index 3147a094..489de670 100644 --- a/compiler/utils/errors.ml +++ b/compiler/catala_utils/errors.ml @@ -26,7 +26,7 @@ exception StructuredError of (string * (string option * Pos.t) list) let print_structured_error (msg : string) (pos : (string option * Pos.t) list) : string = Printf.sprintf "%s%s%s" msg - (if List.length pos = 0 then "" else "\n\n") + (if pos = [] then "" else "\n\n") (String.concat "\n\n" (List.map (fun (msg, pos) -> diff --git a/compiler/utils/errors.mli b/compiler/catala_utils/errors.mli similarity index 100% rename from compiler/utils/errors.mli rename to compiler/catala_utils/errors.mli diff --git a/compiler/utils/file.ml b/compiler/catala_utils/file.ml similarity index 100% rename from compiler/utils/file.ml rename to compiler/catala_utils/file.ml diff --git a/compiler/utils/file.mli b/compiler/catala_utils/file.mli similarity index 100% rename from compiler/utils/file.mli rename to compiler/catala_utils/file.mli diff --git a/compiler/utils/marked.ml b/compiler/catala_utils/marked.ml similarity index 100% rename from compiler/utils/marked.ml rename to compiler/catala_utils/marked.ml diff --git a/compiler/utils/marked.mli b/compiler/catala_utils/marked.mli similarity index 100% rename from compiler/utils/marked.mli rename to compiler/catala_utils/marked.mli diff --git a/compiler/utils/pos.ml b/compiler/catala_utils/pos.ml similarity index 79% rename from compiler/utils/pos.ml rename to compiler/catala_utils/pos.ml index 5c235a31..d5eb6702 100644 --- a/compiler/utils/pos.ml +++ b/compiler/catala_utils/pos.ml @@ -79,11 +79,11 @@ let to_string (pos : t) : string = let to_string_short (pos : t) : string = let s, e = pos.code_pos in if e.Lexing.pos_lnum = s.Lexing.pos_lnum then - Printf.sprintf "%s:%d.%d-%d" s.Lexing.pos_fname s.Lexing.pos_lnum + Printf.sprintf "%s:%d.%d-%d:" s.Lexing.pos_fname s.Lexing.pos_lnum (s.Lexing.pos_cnum - s.Lexing.pos_bol) (e.Lexing.pos_cnum - e.Lexing.pos_bol) else - Printf.sprintf "%s:%d.%d-%d.%d" s.Lexing.pos_fname s.Lexing.pos_lnum + Printf.sprintf "%s:%d.%d-%d.%d:" s.Lexing.pos_fname s.Lexing.pos_lnum (s.Lexing.pos_cnum - s.Lexing.pos_bol) e.Lexing.pos_lnum (e.Lexing.pos_cnum - e.Lexing.pos_bol) @@ -102,6 +102,27 @@ let string_repeat n s = done; Bytes.to_string buf +(* Note: this should do, but remains incorrect for combined unicode characters + that display as one (e.g. `e` + postfix `'`). We should switch to Uuseg at + some poing *) +let string_columns s = + let len = String.length s in + let rec aux ncols i = + if i >= len then ncols + else if s.[i] = '\t' then aux (ncols + 8) (i + 1) + else + aux (ncols + 1) (i + Uchar.utf_decode_length (String.get_utf_8_uchar s i)) + in + aux 0 0 + +let utf8_byte_index s ui0 = + let rec aux bi ui = + if ui >= ui0 then bi + else + aux (bi + Uchar.utf_decode_length (String.get_utf_8_uchar s bi)) (ui + 1) + in + aux 0 0 + let retrieve_loc_text (pos : t) : string = try let filename = get_file pos in @@ -132,34 +153,32 @@ let retrieve_loc_text (pos : t) : string = let print_matched_line (line : string) (line_no : int) : string = let line_indent = indent_number line in let error_indicator_style = [ANSITerminal.red; ANSITerminal.Bold] in - line - ^ - if line_no >= sline && line_no <= eline then - "\n" - ^ - if line_no = sline && line_no = eline then - Cli.with_style error_indicator_style "%*s%s" - (get_start_column pos - 1) - "" - (string_repeat - (max (get_end_column pos - get_start_column pos) 0) - "‾") - else if line_no = sline && line_no <> eline then - Cli.with_style error_indicator_style "%*s%s" - (get_start_column pos - 1) - "" - (string_repeat - (max (String.length line - get_start_column pos) 0) - "‾") - else if line_no <> sline && line_no <> eline then - Cli.with_style error_indicator_style "%*s%s" line_indent "" - (string_repeat (max (String.length line - line_indent) 0) "‾") - else if line_no <> sline && line_no = eline then - Cli.with_style error_indicator_style "%*s%*s" line_indent "" - (get_end_column pos - 1 - line_indent) - (string_repeat (max (get_end_column pos - line_indent) 0) "‾") - else assert false (* should not happen *) - else "" + let match_start_index = + utf8_byte_index line + (if line_no = sline then get_start_column pos - 1 else line_indent) + in + let match_end_index = + if line_no = eline then utf8_byte_index line (get_end_column pos - 1) + else String.length line + in + let unmatched_prefix = String.sub line 0 match_start_index in + let matched_substring = + String.sub line match_start_index + (max 0 (match_end_index - match_start_index)) + in + let match_start_col = string_columns unmatched_prefix in + let match_num_cols = string_columns matched_substring in + String.concat "" + (line + :: "\n" + :: + (if line_no >= sline && line_no <= eline then + [ + string_repeat match_start_col " "; + Cli.with_style error_indicator_style "%s" + (string_repeat match_num_cols "‾"); + ] + else [])) in let include_extra_count = 0 in let rec get_lines (n : int) : string list = @@ -193,10 +212,8 @@ let retrieve_loc_text (pos : t) : string = (Cli.with_style blue_style "└%s┐" (string_repeat spaces "─")); Buffer.add_char buf '\n'; Buffer.add_string buf - (Cli.add_prefix_to_each_line - (String.concat "\n" ("" :: pos_lines)) - (fun i -> - let cur_line = sline - include_extra_count + i - 1 in + (Cli.add_prefix_to_each_line (String.concat "\n" pos_lines) (fun i -> + let cur_line = sline - include_extra_count + i in if cur_line >= sline && cur_line <= sline + (2 * (eline - sline)) diff --git a/compiler/utils/pos.mli b/compiler/catala_utils/pos.mli similarity index 100% rename from compiler/utils/pos.mli rename to compiler/catala_utils/pos.mli diff --git a/compiler/utils/string_common.ml b/compiler/catala_utils/string.ml similarity index 70% rename from compiler/utils/string_common.ml rename to compiler/catala_utils/string.ml index 747f030f..02ea9f29 100644 --- a/compiler/utils/string_common.ml +++ b/compiler/catala_utils/string.ml @@ -14,39 +14,47 @@ License for the specific language governing permissions and limitations under the License. *) -let to_ascii : string -> string = Ubase.from_utf8 +include Stdlib.String -let is_uppercase_ascii (c : char) : bool = - let c = Char.code c in - (* 'A' <= c && c <= 'Z' *) - 0x41 <= c && c <= 0x5b +let to_ascii : string -> string = Ubase.from_utf8 +let is_uppercase_ascii = function 'A' .. 'Z' -> true | _ -> false let begins_with_uppercase (s : string) : bool = - if "" = s then false else is_uppercase_ascii (to_ascii s).[0] + "" <> s && is_uppercase_ascii (get (to_ascii s) 0) let to_snake_case (s : string) : string = let out = ref "" in to_ascii s - |> String.iteri (fun i c -> + |> iteri (fun i c -> out := !out ^ (if is_uppercase_ascii c && 0 <> i then "_" else "") - ^ String.lowercase_ascii (String.make 1 c)); + ^ lowercase_ascii (make 1 c)); !out let to_camel_case (s : string) : string = let last_was_underscore = ref false in let out = ref "" in to_ascii s - |> String.iteri (fun i c -> + |> iteri (fun i c -> let is_underscore = c = '_' in - let c_string = String.make 1 c in + let c_string = make 1 c in out := !out ^ if is_underscore then "" - else if !last_was_underscore || 0 = i then - String.uppercase_ascii c_string + else if !last_was_underscore || 0 = i then uppercase_ascii c_string else c_string; last_was_underscore := is_underscore); !out + +let remove_prefix ~prefix s = + if starts_with ~prefix s then + let plen = length prefix in + sub s plen (length s - plen) + else s + +let format_t = Format.pp_print_string + +module Set = Set.Make (Stdlib.String) +module Map = Map.Make (Stdlib.String) diff --git a/compiler/utils/string_common.mli b/compiler/catala_utils/string.mli similarity index 80% rename from compiler/utils/string_common.mli rename to compiler/catala_utils/string.mli index 07bdc521..de785f37 100644 --- a/compiler/utils/string_common.mli +++ b/compiler/catala_utils/string.mli @@ -14,6 +14,10 @@ License for the specific language governing permissions and limitations under the License. *) +include module type of Stdlib.String +module Set : Set.S with type elt = string +module Map : Map.S with type key = string + (** Helper functions used for string manipulation. *) val to_ascii : string -> string @@ -34,3 +38,11 @@ val to_snake_case : string -> string val to_camel_case : string -> string (** Converts snake_case into CamlCase after removing Remove all diacritics on Latin letters. *) + +val remove_prefix : prefix:string -> string -> string +(** [remove_prefix ~prefix str] returns + + - if [str] starts with [prefix], a string [s] such that [prefix ^ s = str] + - otherwise, [str] unchanged *) + +val format_t : Format.formatter -> string -> unit diff --git a/compiler/utils/uid.ml b/compiler/catala_utils/uid.ml similarity index 74% rename from compiler/utils/uid.ml rename to compiler/catala_utils/uid.ml index 5ea06f97..82404208 100644 --- a/compiler/utils/uid.ml +++ b/compiler/catala_utils/uid.ml @@ -18,7 +18,7 @@ module type Info = sig type info val to_string : info -> string - val format_info : Format.formatter -> info -> unit + val format : Format.formatter -> info -> unit val equal : info -> info -> bool val compare : info -> info -> int end @@ -33,10 +33,21 @@ module type Id = sig val equal : t -> t -> bool val format_t : Format.formatter -> t -> unit val hash : t -> int + + module Set : Set.S with type elt = t + module Map : Map.S with type key = t end module Make (X : Info) () : Id with type info = X.info = struct - type t = { id : int; info : X.info } + module Ordering = struct + type t = { id : int; info : X.info } + + let compare (x : t) (y : t) : int = compare x.id y.id + let equal x y = Int.equal x.id y.id + end + + include Ordering + type info = X.info let counter = ref 0 @@ -46,20 +57,20 @@ module Make (X : Info) () : Id with type info = X.info = struct { id = !counter; info } let get_info (uid : t) : X.info = uid.info - let compare (x : t) (y : t) : int = compare x.id y.id - let equal x y = Int.equal x.id y.id - - let format_t (fmt : Format.formatter) (x : t) : unit = - X.format_info fmt x.info - + let format_t (fmt : Format.formatter) (x : t) : unit = X.format fmt x.info let hash (x : t) : int = x.id + + module Set = Set.Make (Ordering) + module Map = Map.Make (Ordering) end module MarkedString = struct type info = string Marked.pos let to_string (s, _) = s - let format_info fmt i = Format.pp_print_string fmt (to_string i) + let format fmt i = Format.pp_print_string fmt (to_string i) let equal i1 i2 = String.equal (Marked.unmark i1) (Marked.unmark i2) let compare i1 i2 = String.compare (Marked.unmark i1) (Marked.unmark i2) end + +module Gen () = Make (MarkedString) () diff --git a/compiler/utils/uid.mli b/compiler/catala_utils/uid.mli similarity index 89% rename from compiler/utils/uid.mli rename to compiler/catala_utils/uid.mli index 46cec079..5e479f95 100644 --- a/compiler/utils/uid.mli +++ b/compiler/catala_utils/uid.mli @@ -21,7 +21,7 @@ module type Info = sig type info val to_string : info -> string - val format_info : Format.formatter -> info -> unit + val format : Format.formatter -> info -> unit val equal : info -> info -> bool (** Equality disregards position *) @@ -48,9 +48,15 @@ module type Id = sig val equal : t -> t -> bool val format_t : Format.formatter -> t -> unit val hash : t -> int + + module Set : Set.S with type elt = t + module Map : Map.S with type key = t end (** This is the generative functor that ensures that two modules resulting from two different calls to [Make] will be viewed as different types [t] by the OCaml typechecker. Prevents mixing up different sorts of identifiers. *) module Make (X : Info) () : Id with type info = X.info + +module Gen () : Id with type info = MarkedString.info +(** Shortcut for creating a kind of uids over marked strings *) diff --git a/compiler/catala_web_interpreter.ml b/compiler/catala_web_interpreter.ml index c4089647..9b2caa40 100644 --- a/compiler/catala_web_interpreter.ml +++ b/compiler/catala_web_interpreter.ml @@ -1,3 +1,4 @@ +open Catala_utils open Driver open Js_of_ocaml @@ -12,7 +13,7 @@ let _ = driver (Contents (Js.to_string contents)) { - Utils.Cli.debug = false; + Cli.debug = false; color = Never; wrap_weaved_output = false; avoid_exceptions = false; diff --git a/compiler/dcalc/dune b/compiler/dcalc/dune index 9b105b24..a5caa02e 100644 --- a/compiler/dcalc/dune +++ b/compiler/dcalc/dune @@ -1,7 +1,15 @@ (library (name dcalc) (public_name catala.dcalc) - (libraries bindlib unionFind utils re ubase catala.runtime_ocaml shared_ast) + (libraries + bindlib + unionFind + catala_utils + re + ubase + catala.runtime_ocaml + shared_ast + scopelang) (preprocess (pps visitors.ppx))) diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/dcalc/from_scopelang.ml similarity index 50% rename from compiler/scopelang/scope_to_dcalc.ml rename to compiler/dcalc/from_scopelang.ml index 1f169d00..037106e2 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/dcalc/from_scopelang.ml @@ -14,39 +14,49 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast type scope_var_ctx = { scope_var_name : ScopeVar.t; scope_var_typ : naked_typ; - scope_var_io : Ast.io; + scope_var_io : Desugared.Ast.io; +} + +type scope_input_var_ctx = { + scope_input_name : StructField.t; + scope_input_io : Desugared.Ast.io_input Marked.pos; + scope_input_typ : naked_typ; } type 'm scope_sig_ctx = { scope_sig_local_vars : scope_var_ctx list; (** List of scope variables *) - scope_sig_scope_var : 'm Dcalc.Ast.expr Var.t; - (** Var representing the scope *) - scope_sig_input_var : 'm Dcalc.Ast.expr Var.t; + scope_sig_scope_var : 'm Ast.expr Var.t; (** Var representing the scope *) + scope_sig_input_var : 'm Ast.expr Var.t; (** Var representing the scope input inside the scope func *) scope_sig_input_struct : StructName.t; (** Scope input *) scope_sig_output_struct : StructName.t; (** Scope output *) - scope_sig_in_fields : - (StructFieldName.t * Ast.io_input Marked.pos) ScopeVarMap.t; + scope_sig_in_fields : scope_input_var_ctx ScopeVar.Map.t; (** Mapping between the input scope variables and the input struct fields. *) + scope_sig_out_fields : StructField.t ScopeVar.Map.t; + (** Mapping between the output scope variables and the output struct + fields. TODO: could likely be removed now that we have it in the + program ctx *) } -type 'm scope_sigs_ctx = 'm scope_sig_ctx ScopeMap.t +type 'm scope_sigs_ctx = 'm scope_sig_ctx ScopeName.Map.t type 'm ctx = { structs : struct_ctx; enums : enum_ctx; scope_name : ScopeName.t; scopes_parameters : 'm scope_sigs_ctx; - scope_vars : ('m Dcalc.Ast.expr Var.t * naked_typ * Ast.io) ScopeVarMap.t; + scope_vars : + ('m Ast.expr Var.t * naked_typ * Desugared.Ast.io) ScopeVar.Map.t; subscope_vars : - ('m Dcalc.Ast.expr Var.t * naked_typ * Ast.io) ScopeVarMap.t SubScopeMap.t; - local_vars : ('m Ast.expr, 'm Dcalc.Ast.expr Var.t) Var.Map.t; + ('m Ast.expr Var.t * naked_typ * Desugared.Ast.io) ScopeVar.Map.t + SubScopeName.Map.t; + local_vars : ('m Scopelang.Ast.expr, 'm Ast.expr Var.t) Var.Map.t; } let empty_ctx @@ -59,8 +69,8 @@ let empty_ctx enums = enum_ctx; scope_name; scopes_parameters = scopes_ctx; - scope_vars = ScopeVarMap.empty; - subscope_vars = SubScopeMap.empty; + scope_vars = ScopeVar.Map.empty; + subscope_vars = SubScopeName.Map.empty; local_vars = Var.Map.empty; } @@ -76,30 +86,69 @@ let pos_mark_mk (type a m) (e : (a, m mark) gexpr) : let pos_mark_as e = pos_mark (Marked.get_mark e) in pos_mark, pos_mark_as -let merge_defaults caller callee = - let caller = - let m = Marked.get_mark caller in - let pos = Expr.mark_pos m in - Expr.make_app caller - [Expr.elit LUnit (Expr.with_ty m (Marked.mark pos (TLit TUnit)))] - pos - in - let body = - let m = Marked.get_mark callee in - let ltrue = - Expr.elit (LBool true) - (Expr.with_ty m (Marked.mark (Expr.mark_pos m) (TLit TBool))) +let merge_defaults + ~(is_func : bool) + (caller : (dcalc, 'm mark) boxed_gexpr) + (callee : (dcalc, 'm mark) boxed_gexpr) : (dcalc, 'm mark) boxed_gexpr = + (* the merging of the two defaults, from the reentrant caller and the callee, + is straightfoward in the general case and a little subtler when the + variable being defined is a function. *) + if is_func then + let m_callee = Marked.get_mark callee in + let unboxed_callee = Expr.unbox callee in + match Marked.unmark unboxed_callee with + | EAbs { binder; tys } -> + let vars, body = Bindlib.unmbind binder in + let m_body = Marked.get_mark body in + let caller = + let m = Marked.get_mark caller in + let pos = Expr.mark_pos m in + Expr.make_app caller + (List.map2 + (fun (var : (dcalc, 'm mark) naked_gexpr Bindlib.var) ty -> + Expr.evar var + (* we have to correctly propagate types when doing this + rewriting *) + (Expr.with_ty m_body ~pos:(Expr.mark_pos m_body) ty)) + (Array.to_list vars) tys) + pos + in + let ltrue = + Expr.elit (LBool true) + (Expr.with_ty m_callee + (Marked.mark (Expr.mark_pos m_callee) (TLit TBool))) + in + let d = Expr.edefault [caller] ltrue (Expr.rebox body) m_body in + Expr.make_abs vars + (Expr.eerroronempty d m_body) + tys (Expr.mark_pos m_callee) + | _ -> assert false + (* should not happen because there should always be a lambda at the + beginning of a default with a function type *) + else + let caller = + let m = Marked.get_mark caller in + let pos = Expr.mark_pos m in + Expr.make_app caller + [Expr.elit LUnit (Expr.with_ty m (Marked.mark pos (TLit TUnit)))] + pos in - Expr.edefault [caller] ltrue callee m - in - body + let body = + let m = Marked.get_mark callee in + let ltrue = + Expr.elit (LBool true) + (Expr.with_ty m (Marked.mark (Expr.mark_pos m) (TLit TBool))) + in + Expr.eerroronempty (Expr.edefault [caller] ltrue callee m) m + in + body let tag_with_log_entry - (e : 'm Dcalc.Ast.expr boxed) + (e : 'm Ast.expr boxed) (l : log_entry) - (markings : Utils.Uid.MarkedString.info list) : 'm Dcalc.Ast.expr boxed = + (markings : Uid.MarkedString.info list) : 'm Ast.expr boxed = let m = mark_tany (Marked.get_mark e) (Expr.pos e) in - Expr.eapp (Expr.eop (Unop (Log (l, markings))) m) [e] m + Expr.eapp (Expr.eop (Log (l, markings)) [TAny, Expr.pos e] m) [e] m (* In a list of exceptions, it is normally an error if more than a single one apply at the same time. This relaxes this constraint slightly, allowing a @@ -108,17 +157,17 @@ let tag_with_log_entry NOTE: the choice of the exception that will be triggered and show in the trace is arbitrary (but deterministic). *) -let collapse_similar_outcomes (type m) (excepts : m Ast.expr list) : - m Ast.expr list = +let collapse_similar_outcomes (type m) (excepts : m Scopelang.Ast.expr list) : + m Scopelang.Ast.expr list = let module ExprMap = Map.Make (struct - type t = m Ast.expr + type t = m Scopelang.Ast.expr let compare = Expr.compare end) in let cons_map = List.fold_left (fun map -> function - | (EDefault ([], _, cons), _) as e -> + | (EDefault { excepts = []; cons; _ }, _) as e -> ExprMap.update cons (fun prev -> Some (e :: Option.value ~default:[] prev)) map @@ -129,12 +178,12 @@ let collapse_similar_outcomes (type m) (excepts : m Ast.expr list) : List.fold_right (fun e (cons_map, excepts) -> match e with - | EDefault ([], _, cons), _ -> + | EDefault { excepts = []; cons; _ }, _ -> let collapsed_exc = List.fold_left (fun acc -> function - | EDefault ([], just, cons), pos -> - [EDefault (acc, just, cons), pos] + | EDefault { excepts = []; just; cons }, pos -> + [EDefault { excepts = acc; just; cons }, pos] | _ -> assert false) [] (ExprMap.find cons cons_map) @@ -145,19 +194,22 @@ let collapse_similar_outcomes (type m) (excepts : m Ast.expr list) : in excepts -let thunk_scope_arg io_in e = +let thunk_scope_arg ~is_func io_in e = (* For "context" (or reentrant) variables, we thunk them as [(fun () -> e)] so that we can put them in default terms at the initialisation of the function body, allowing an empty error to recover the default value. *) let silent_var = Var.make "_" in let pos = Marked.get_mark io_in in match Marked.unmark io_in with - | Ast.NoInput -> invalid_arg "thunk_scope_arg" - | Ast.OnlyInput -> Expr.eerroronempty e (Marked.get_mark e) - | Ast.Reentrant -> Expr.make_abs [| silent_var |] e [TLit TUnit, pos] pos + | Desugared.Ast.NoInput -> invalid_arg "thunk_scope_arg" + | Desugared.Ast.OnlyInput -> Expr.eerroronempty e (Marked.get_mark e) + | Desugared.Ast.Reentrant -> + (* we don't need to thunk expressions that are already functions *) + if is_func then e + else Expr.make_abs [| silent_var |] e [TLit TUnit, pos] pos -let rec translate_expr (ctx : 'm ctx) (e : 'm Ast.expr) : - 'm Dcalc.Ast.expr boxed = +let rec translate_expr (ctx : 'm ctx) (e : 'm Scopelang.Ast.expr) : + 'm Ast.expr boxed = let m = Marked.get_mark e in match Marked.unmark e with | EVar v -> Expr.evar (Var.Map.find v ctx.local_vars) m @@ -165,102 +217,74 @@ let rec translate_expr (ctx : 'm ctx) (e : 'm Ast.expr) : (( LBool _ | LEmptyError | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ | LDuration _ ) as l) -> Expr.elit l m - | EStruct (struct_name, e_fields) -> - let struct_sig = StructMap.find struct_name ctx.structs in - let d_fields, remaining_e_fields = - List.fold_right - (fun (field_name, _) (d_fields, e_fields) -> - let field_e = StructFieldMap.find field_name e_fields in - let field_d = translate_expr ctx field_e in - field_d :: d_fields, StructFieldMap.remove field_name e_fields) - struct_sig ([], e_fields) - in - if StructFieldMap.cardinal remaining_e_fields > 0 then - Errors.raise_spanned_error (Expr.pos e) - "The fields \"%a\" do not belong to the structure %a" - StructName.format_t struct_name - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt ", ") - (fun fmt (field_name, _) -> - Format.fprintf fmt "%a" StructFieldName.format_t field_name)) - (StructFieldMap.bindings remaining_e_fields) - else Expr.etuple d_fields (Some struct_name) m - | EStructAccess (e1, field_name, struct_name) -> - let struct_sig = StructMap.find struct_name ctx.structs in - let _, field_index = - try - List.assoc field_name (List.mapi (fun i (x, y) -> x, (y, i)) struct_sig) - with Not_found -> - Errors.raise_spanned_error (Expr.pos e) - "The field \"%a\" does not belong to the structure %a" - StructFieldName.format_t field_name StructName.format_t struct_name - in - let e1 = translate_expr ctx e1 in - Expr.etupleaccess e1 field_index (Some struct_name) - (List.map snd struct_sig) m - | EEnumInj (e1, constructor, enum_name) -> - let enum_sig = EnumMap.find enum_name ctx.enums in - let _, constructor_index = - try - List.assoc constructor (List.mapi (fun i (x, y) -> x, (y, i)) enum_sig) - with Not_found -> - Errors.raise_spanned_error (Expr.pos e) - "The constructor \"%a\" does not belong to the enum %a" - EnumConstructor.format_t constructor EnumName.format_t enum_name - in - let e1 = translate_expr ctx e1 in - Expr.einj e1 constructor_index enum_name (List.map snd enum_sig) m - | EMatchS (e1, enum_name, cases) -> - let enum_sig = EnumMap.find enum_name ctx.enums in + | EStruct { name; fields } -> + let fields = StructField.Map.map (translate_expr ctx) fields in + Expr.estruct name fields m + | EStructAccess { e; field; name } -> + Expr.estructaccess (translate_expr ctx e) field name m + | EInj { e; cons; name } -> + let e' = translate_expr ctx e in + Expr.einj e' cons name m + | EMatch { e = e1; name; cases = e_cases } -> + let enum_sig = EnumName.Map.find name ctx.enums in let d_cases, remaining_e_cases = - List.fold_right - (fun (constructor, _) (d_cases, e_cases) -> + (* FIXME: these checks should probably be moved to a better place *) + EnumConstructor.Map.fold + (fun constructor _ (d_cases, e_cases) -> let case_e = - try EnumConstructorMap.find constructor e_cases + try EnumConstructor.Map.find constructor e_cases with Not_found -> Errors.raise_spanned_error (Expr.pos e) "The constructor %a of enum %a is missing from this pattern \ matching" - EnumConstructor.format_t constructor EnumName.format_t enum_name + EnumConstructor.format_t constructor EnumName.format_t name in let case_d = translate_expr ctx case_e in - case_d :: d_cases, EnumConstructorMap.remove constructor e_cases) - enum_sig ([], cases) + ( EnumConstructor.Map.add constructor case_d d_cases, + EnumConstructor.Map.remove constructor e_cases )) + enum_sig + (EnumConstructor.Map.empty, e_cases) in - if EnumConstructorMap.cardinal remaining_e_cases > 0 then + if not (EnumConstructor.Map.is_empty remaining_e_cases) then Errors.raise_spanned_error (Expr.pos e) "Pattern matching is incomplete for enum %a: missing cases %a" - EnumName.format_t enum_name + EnumName.format_t name (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ", ") - (fun fmt (case_name, _) -> - Format.fprintf fmt "%a" EnumConstructor.format_t case_name)) - (EnumConstructorMap.bindings remaining_e_cases) - else - let e1 = translate_expr ctx e1 in - Expr.ematch e1 d_cases enum_name m - | EScopeCall (sc_name, fields) -> + (fun fmt (case_name, _) -> EnumConstructor.format_t fmt case_name)) + (EnumConstructor.Map.bindings remaining_e_cases); + let e1 = translate_expr ctx e1 in + Expr.ematch e1 name d_cases m + | EScopeCall { scope; args } -> let pos = Expr.mark_pos m in - let sc_sig = ScopeMap.find sc_name ctx.scopes_parameters in + let sc_sig = ScopeName.Map.find scope ctx.scopes_parameters in let in_var_map = - ScopeVarMap.merge - (fun var_name str_field expr -> + ScopeVar.Map.merge + (fun var_name (str_field : scope_input_var_ctx option) expr -> let expr = match str_field, expr with - | Some (_, (Ast.Reentrant, _)), None -> + | Some { scope_input_io = Desugared.Ast.Reentrant, _; _ }, None -> Some (Expr.unbox (Expr.elit LEmptyError (mark_tany m pos))) | _ -> expr in match str_field, expr with | None, None -> None - | Some (fld, io_in), Some e -> - Some (fld, thunk_scope_arg io_in (translate_expr ctx e)) - | Some (fld, _), None -> + | Some var_ctx, Some e -> + Some + ( var_ctx.scope_input_name, + thunk_scope_arg + ~is_func: + (match var_ctx.scope_input_typ with + | TArrow _ -> true + | _ -> false) + var_ctx.scope_input_io (translate_expr ctx e) ) + | Some var_ctx, None -> Errors.raise_multispanned_error [ None, pos; ( Some "Declaration of the missing input variable", - Marked.get_mark (StructFieldName.get_info fld) ); + Marked.get_mark + (StructField.get_info var_ctx.scope_input_name) ); ] "Definition of input variable '%a' missing in this scope call" ScopeVar.format_t var_name @@ -269,27 +293,150 @@ let rec translate_expr (ctx : 'm ctx) (e : 'm Ast.expr) : [ None, pos; ( Some "Declaration of scope '%a'", - Marked.get_mark (ScopeName.get_info sc_name) ); + Marked.get_mark (ScopeName.get_info scope) ); ] "Unknown input variable '%a' in scope call of '%a'" - ScopeVar.format_t var_name ScopeName.format_t sc_name) - sc_sig.scope_sig_in_fields fields + ScopeVar.format_t var_name ScopeName.format_t scope) + sc_sig.scope_sig_in_fields args in let field_map = - ScopeVarMap.fold - (fun _ (fld, e) acc -> StructFieldMap.add fld e acc) - in_var_map StructFieldMap.empty + ScopeVar.Map.fold + (fun _ (fld, e) acc -> StructField.Map.add fld e acc) + in_var_map StructField.Map.empty in let arg_struct = - Expr.make_struct field_map sc_sig.scope_sig_input_struct (mark_tany m pos) + Expr.estruct sc_sig.scope_sig_input_struct field_map (mark_tany m pos) in - Expr.eapp - (Expr.evar sc_sig.scope_sig_scope_var (mark_tany m pos)) - [arg_struct] m - | EApp (e1, args) -> + let called_func = + tag_with_log_entry + (Expr.evar sc_sig.scope_sig_scope_var (mark_tany m pos)) + BeginCall + [ScopeName.get_info scope; Marked.mark (Expr.pos e) "direct"] + in + let single_arg = + tag_with_log_entry arg_struct + (VarDef (TStruct sc_sig.scope_sig_input_struct)) + [ + ScopeName.get_info scope; + Marked.mark (Expr.pos e) "direct"; + Marked.mark (Expr.pos e) "input"; + ] + in + let direct_output_info = + [ + ScopeName.get_info scope; + Marked.mark (Expr.pos e) "direct"; + Marked.mark (Expr.pos e) "output"; + ] + in + (* calling_expr = scope_function scope_input_struct *) + let calling_expr = Expr.eapp called_func [single_arg] m in + (* For the purposes of log parsing explained in Runtime.EventParser, we need + to wrap this function call in a flurry of log tags. Specifically, we are + mascarading this scope call as a function call. In a normal function + call, the log parser expects the output of the function to be defined as + a default, hence the production of the output should yield a + PosRecordIfTrueBool (which is not the case here). To remedy this absence + we fabricate a fake PosRecordIfTrueBool attached to a silent let binding + to "true" before returning the output value. + + But this is not sufficient. Indeed for the tricky case of + [tests/test_scope/scope_call3.catala_en], when a scope returns a + function, because we insert loggins calls at the call site of the + function and not during its definition, then we're missing the call log + instructions of the function returned. To avoid this trap, we need to + rebind the resulting scope output struct by eta-expanding the functions + to insert logging instructions*) + let result_var = Var.make "result" in + let result_eta_expanded_var = Var.make "result" in + (* result_eta_expanded = { struct_output_function_field = lambda x -> log + (struct_output.struct_output_function_field x) ... } *) + let result_eta_expanded = + Expr.estruct sc_sig.scope_sig_output_struct + (StructField.Map.mapi + (fun field typ -> + let original_field_expr = + Expr.estructaccess + (Expr.make_var result_var + (Expr.with_ty m + (TStruct sc_sig.scope_sig_output_struct, Expr.pos e))) + field sc_sig.scope_sig_output_struct (Expr.with_ty m typ) + in + match Marked.unmark typ with + | TArrow (t_in, t_out) -> + (* Here the output scope struct field is a function so we + eta-expand it and insert logging instructions. Invariant: + works because user-defined functions in scope have only one + argument. *) + let param_var = Var.make "param" in + let f_markings = + [ScopeName.get_info scope; StructField.get_info field] + in + Expr.make_abs + (Array.of_list [param_var]) + (tag_with_log_entry + (tag_with_log_entry + (Expr.eapp + (tag_with_log_entry original_field_expr BeginCall + f_markings) + [ + tag_with_log_entry + (Expr.make_var param_var (Expr.with_ty m t_in)) + (VarDef (Marked.unmark t_in)) + (f_markings @ [Marked.mark (Expr.pos e) "input"]); + ] + (Expr.with_ty m t_out)) + (VarDef (Marked.unmark t_out)) + (f_markings @ [Marked.mark (Expr.pos e) "output"])) + EndCall f_markings) + [t_in] (Expr.pos e) + | _ -> original_field_expr) + (StructName.Map.find sc_sig.scope_sig_output_struct ctx.structs)) + (Expr.with_ty m (TStruct sc_sig.scope_sig_output_struct, Expr.pos e)) + in + (* Here we have to go through an if statement that records a decision being + taken with a log. We can't just do a let-in with the true boolean value + enclosed in the log because it might get optimized by a compiler later + down the chain. *) + (* if_then_else_returned = if log true then result_eta_expanded else + emptyError *) + let if_then_else_returned = + Expr.eifthenelse + (tag_with_log_entry + (Expr.box + (Marked.mark + (Expr.with_ty m (TLit TBool, Expr.pos e)) + (ELit (LBool true)))) + PosRecordIfTrueBool direct_output_info) + (Expr.make_var result_eta_expanded_var + (Expr.with_ty m (TStruct sc_sig.scope_sig_output_struct, Expr.pos e))) + (Expr.box + (Marked.mark + (Expr.with_ty m + (TStruct sc_sig.scope_sig_output_struct, Expr.pos e)) + (ELit LEmptyError))) + (Expr.with_ty m (TStruct sc_sig.scope_sig_output_struct, Expr.pos e)) + in + (* let result_var = calling_expr in let result_eta_expanded_var = + result_eta_expaneded in log (if_then_else_returned ) *) + Expr.make_let_in result_var + (TStruct sc_sig.scope_sig_output_struct, Expr.pos e) + calling_expr + (Expr.make_let_in result_eta_expanded_var + (TStruct sc_sig.scope_sig_output_struct, Expr.pos e) + result_eta_expanded + (tag_with_log_entry + (tag_with_log_entry if_then_else_returned + (VarDef (TStruct sc_sig.scope_sig_output_struct)) + direct_output_info) + EndCall + [ScopeName.get_info scope; Marked.mark (Expr.pos e) "direct"]) + (Expr.pos e)) + (Expr.pos e) + | EApp { f; args } -> (* We insert various log calls to record arguments and outputs of user-defined functions belonging to scopes *) - let e1_func = translate_expr ctx e1 in + let e1_func = translate_expr ctx f in let markings l = match l with | ScopelangScopeVar (v, _) -> @@ -298,7 +445,7 @@ let rec translate_expr (ctx : 'm ctx) (e : 'm Ast.expr) : [ScopeName.get_info s; ScopeVar.get_info v] in let e1_func = - match Marked.unmark e1 with + match Marked.unmark f with | ELocation l -> tag_with_log_entry e1_func BeginCall (markings l) | _ -> e1_func in @@ -309,23 +456,23 @@ let rec translate_expr (ctx : 'm ctx) (e : 'm Ast.expr) : -- for more information see https://github.com/CatalaLang/catala/pull/280#discussion_r898851693. *) let retrieve_in_and_out_typ_or_any var vars = - let _, typ, _ = ScopeVarMap.find (Marked.unmark var) vars in + let _, typ, _ = ScopeVar.Map.find (Marked.unmark var) vars in match typ with | TArrow (marked_input_typ, marked_output_typ) -> Marked.unmark marked_input_typ, Marked.unmark marked_output_typ | _ -> TAny, TAny in - match Marked.unmark e1 with + match Marked.unmark f with | ELocation (ScopelangScopeVar var) -> retrieve_in_and_out_typ_or_any var ctx.scope_vars | ELocation (SubScopeVar (_, sname, var)) -> ctx.subscope_vars - |> SubScopeMap.find (Marked.unmark sname) + |> SubScopeName.Map.find (Marked.unmark sname) |> retrieve_in_and_out_typ_or_any var | _ -> TAny, TAny in let new_args = - match Marked.unmark e1, new_args with + match Marked.unmark f, new_args with | ELocation l, [new_arg] -> [ tag_with_log_entry new_arg (VarDef input_typ) @@ -335,7 +482,7 @@ let rec translate_expr (ctx : 'm ctx) (e : 'm Ast.expr) : in let new_e = Expr.eapp e1_func new_args m in let new_e = - match Marked.unmark e1 with + match Marked.unmark f with | ELocation l -> tag_with_log_entry (tag_with_log_entry new_e (VarDef output_typ) @@ -344,7 +491,7 @@ let rec translate_expr (ctx : 'm ctx) (e : 'm Ast.expr) : | _ -> new_e in new_e - | EAbs (binder, typ) -> + | EAbs { binder; tys } -> let xs, body = Bindlib.unmbind binder in let new_xs = Array.map (fun x -> Var.make (Bindlib.name_of x)) xs in let both_xs = Array.map2 (fun x new_x -> x, new_x) xs new_xs in @@ -360,20 +507,20 @@ let rec translate_expr (ctx : 'm ctx) (e : 'm Ast.expr) : body in let binder = Expr.bind new_xs body in - Expr.eabs binder typ m - | EDefault (excepts, just, cons) -> + Expr.eabs binder tys m + | EDefault { excepts; just; cons } -> let excepts = collapse_similar_outcomes excepts in Expr.edefault (List.map (translate_expr ctx) excepts) (translate_expr ctx just) (translate_expr ctx cons) m | ELocation (ScopelangScopeVar a) -> - let v, _, _ = ScopeVarMap.find (Marked.unmark a) ctx.scope_vars in + let v, _, _ = ScopeVar.Map.find (Marked.unmark a) ctx.scope_vars in Expr.evar v m | ELocation (SubScopeVar (_, s, a)) -> ( try let v, _, _ = - ScopeVarMap.find (Marked.unmark a) - (SubScopeMap.find (Marked.unmark s) ctx.subscope_vars) + ScopeVar.Map.find (Marked.unmark a) + (SubScopeName.Map.find (Marked.unmark s) ctx.subscope_vars) in Expr.evar v m with Not_found -> @@ -389,11 +536,12 @@ let rec translate_expr (ctx : 'm ctx) (e : 'm Ast.expr) : %a's results. Maybe you forgot to qualify it as an output?" SubScopeName.format_t (Marked.unmark s) ScopeVar.format_t (Marked.unmark a) SubScopeName.format_t (Marked.unmark s)) - | EIfThenElse (cond, et, ef) -> - Expr.eifthenelse (translate_expr ctx cond) (translate_expr ctx et) - (translate_expr ctx ef) m - | EOp op -> Expr.eop op m - | ErrorOnEmpty e' -> Expr.eerroronempty (translate_expr ctx e') m + | EIfThenElse { cond; etrue; efalse } -> + Expr.eifthenelse (translate_expr ctx cond) (translate_expr ctx etrue) + (translate_expr ctx efalse) + m + | EOp { op; tys } -> Expr.eop (Operator.translate op) tys m + | EErrorOnEmpty e' -> Expr.eerroronempty (translate_expr ctx e') m | EArray es -> Expr.earray (List.map (translate_expr ctx) es) m (** The result of a rule translation is a list of assignment, with variables and @@ -403,10 +551,10 @@ let rec translate_expr (ctx : 'm ctx) (e : 'm Ast.expr) : come later in the chain of let-bindings. *) let translate_rule (ctx : 'm ctx) - (rule : 'm Ast.rule) - ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) : - ('m Dcalc.Ast.expr scope_body_expr Bindlib.box -> - 'm Dcalc.Ast.expr scope_body_expr Bindlib.box) + (rule : 'm Scopelang.Ast.rule) + ((sigma_name, pos_sigma) : Uid.MarkedString.info) : + ('m Ast.expr scope_body_expr Bindlib.box -> + 'm Ast.expr scope_body_expr Bindlib.box) * 'm ctx = match rule with | Definition ((ScopelangScopeVar a, var_def_pos), tau, a_io, e) -> @@ -416,14 +564,15 @@ let translate_rule let new_e = translate_expr ctx e in let a_expr = Expr.make_var a_var (pos_mark var_def_pos) in let merged_expr = - Expr.eerroronempty - (match Marked.unmark a_io.io_input with - | OnlyInput -> failwith "should not happen" - (* scopelang should not contain any definitions of input only - variables *) - | Reentrant -> merge_defaults a_expr new_e - | NoInput -> new_e) - (pos_mark_as a_name) + match Marked.unmark a_io.io_input with + | OnlyInput -> failwith "should not happen" + (* scopelang should not contain any definitions of input only variables *) + | Reentrant -> + merge_defaults + ~is_func: + (match Marked.unmark tau with TArrow _ -> true | _ -> false) + a_expr new_e + | NoInput -> Expr.eerroronempty new_e (pos_mark_as a_name) in let merged_expr = tag_with_log_entry merged_expr @@ -446,7 +595,7 @@ let translate_rule { ctx with scope_vars = - ScopeVarMap.add (Marked.unmark a) + ScopeVar.Map.add (Marked.unmark a) (a_var, Marked.unmark tau, a_io) ctx.scope_vars; } ) @@ -467,7 +616,12 @@ let translate_rule (VarDef (Marked.unmark tau)) [sigma_name, pos_sigma; a_name] in - let thunked_or_nonempty_new_e = thunk_scope_arg a_io.Ast.io_input new_e in + let is_func = + match Marked.unmark tau with TArrow _ -> true | _ -> false + in + let thunked_or_nonempty_new_e = + thunk_scope_arg ~is_func a_io.Desugared.Ast.io_input new_e + in ( (fun next -> Bindlib.box_apply2 (fun next thunked_or_nonempty_new_e -> @@ -480,7 +634,8 @@ let translate_rule | NoInput -> failwith "should not happen" | OnlyInput -> tau | Reentrant -> - TArrow ((TLit TUnit, var_def_pos), tau), var_def_pos); + if is_func then tau + else TArrow ((TLit TUnit, var_def_pos), tau), var_def_pos); scope_let_expr = thunked_or_nonempty_new_e; scope_let_kind = SubScopeVarDefinition; }) @@ -489,67 +644,74 @@ let translate_rule { ctx with subscope_vars = - SubScopeMap.update (Marked.unmark subs_index) + SubScopeName.Map.update (Marked.unmark subs_index) (fun map -> match map with | Some map -> Some - (ScopeVarMap.add (Marked.unmark subs_var) + (ScopeVar.Map.add (Marked.unmark subs_var) (a_var, Marked.unmark tau, a_io) map) | None -> Some - (ScopeVarMap.singleton (Marked.unmark subs_var) + (ScopeVar.Map.singleton (Marked.unmark subs_var) (a_var, Marked.unmark tau, a_io))) ctx.subscope_vars; } ) | Call (subname, subindex, m) -> - let subscope_sig = ScopeMap.find subname ctx.scopes_parameters in + let subscope_sig = ScopeName.Map.find subname ctx.scopes_parameters in let all_subscope_vars = subscope_sig.scope_sig_local_vars in let all_subscope_input_vars = List.filter (fun var_ctx -> - match Marked.unmark var_ctx.scope_var_io.Ast.io_input with + match Marked.unmark var_ctx.scope_var_io.Desugared.Ast.io_input with | NoInput -> false | _ -> true) all_subscope_vars in let all_subscope_output_vars = List.filter - (fun var_ctx -> Marked.unmark var_ctx.scope_var_io.Ast.io_output) + (fun var_ctx -> + Marked.unmark var_ctx.scope_var_io.Desugared.Ast.io_output) all_subscope_vars in let scope_dcalc_var = subscope_sig.scope_sig_scope_var in let called_scope_input_struct = subscope_sig.scope_sig_input_struct in let called_scope_return_struct = subscope_sig.scope_sig_output_struct in let subscope_vars_defined = - try SubScopeMap.find subindex ctx.subscope_vars - with Not_found -> ScopeVarMap.empty + try SubScopeName.Map.find subindex ctx.subscope_vars + with Not_found -> ScopeVar.Map.empty in let subscope_var_not_yet_defined subvar = - not (ScopeVarMap.mem subvar subscope_vars_defined) + not (ScopeVar.Map.mem subvar subscope_vars_defined) in let pos_call = Marked.get_mark (SubScopeName.get_info subindex) in let subscope_args = - List.map - (fun (subvar : scope_var_ctx) -> - if subscope_var_not_yet_defined subvar.scope_var_name then - (* This is a redundant check. Normally, all subscope variables - should have been defined (even an empty definition, if they're - not defined by any rule in the source code) by the translation - from desugared to the scope language. *) - Expr.empty_thunked_term m - else - let a_var, _, _ = - ScopeVarMap.find subvar.scope_var_name subscope_vars_defined - in - Expr.make_var a_var (mark_tany m pos_call)) - all_subscope_input_vars + List.fold_left + (fun acc (subvar : scope_var_ctx) -> + let e = + if subscope_var_not_yet_defined subvar.scope_var_name then + (* This is a redundant check. Normally, all subscope variables + should have been defined (even an empty definition, if they're + not defined by any rule in the source code) by the translation + from desugared to the scope language. *) + Expr.empty_thunked_term m + else + let a_var, _, _ = + ScopeVar.Map.find subvar.scope_var_name subscope_vars_defined + in + Expr.make_var a_var (mark_tany m pos_call) + in + let field = + (ScopeVar.Map.find subvar.scope_var_name + subscope_sig.scope_sig_in_fields) + .scope_input_name + in + StructField.Map.add field e acc) + StructField.Map.empty all_subscope_input_vars in let subscope_struct_arg = - (* FIXME: this is very fragile: we assume that the ordering of the scope - variables is the same as the ordering of the struct fields. *) - Expr.etuple subscope_args (Some called_scope_input_struct) + Expr.estruct called_scope_input_struct subscope_args (mark_tany m pos_call) in let all_subscope_output_vars_dcalc = @@ -602,44 +764,40 @@ let translate_rule in let result_bindings_lets next = List.fold_right - (fun (var_ctx, v) (next, i) -> - ( Bindlib.box_apply2 - (fun next r -> - ScopeLet - { - scope_let_next = next; - scope_let_pos = pos_sigma; - scope_let_typ = var_ctx.scope_var_typ, pos_sigma; - scope_let_kind = DestructuringSubScopeResults; - scope_let_expr = - ( ETupleAccess - ( r, - i, - Some called_scope_return_struct, - List.map - (fun (var_ctx, _) -> - var_ctx.scope_var_typ, pos_sigma) - all_subscope_output_vars_dcalc ), - mark_tany m pos_sigma ); - }) - (Bindlib.bind_var v next) - (Expr.Box.lift - (Expr.make_var result_tuple_var (mark_tany m pos_sigma))), - i - 1 )) - all_subscope_output_vars_dcalc - (next, List.length all_subscope_output_vars_dcalc - 1) + (fun (var_ctx, v) next -> + let field = + ScopeVar.Map.find var_ctx.scope_var_name + subscope_sig.scope_sig_out_fields + in + Bindlib.box_apply2 + (fun next r -> + ScopeLet + { + scope_let_next = next; + scope_let_pos = pos_sigma; + scope_let_typ = var_ctx.scope_var_typ, pos_sigma; + scope_let_kind = DestructuringSubScopeResults; + scope_let_expr = + ( EStructAccess + { name = called_scope_return_struct; e = r; field }, + mark_tany m pos_sigma ); + }) + (Bindlib.bind_var v next) + (Expr.Box.lift + (Expr.make_var result_tuple_var (mark_tany m pos_sigma)))) + all_subscope_output_vars_dcalc next in - ( (fun next -> call_scope_let (fst (result_bindings_lets next))), + ( (fun next -> call_scope_let (result_bindings_lets next)), { ctx with subscope_vars = - SubScopeMap.add subindex + SubScopeName.Map.add subindex (List.fold_left (fun acc (var_ctx, dvar) -> - ScopeVarMap.add var_ctx.scope_var_name + ScopeVar.Map.add var_ctx.scope_var_name (dvar, var_ctx.scope_var_typ, var_ctx.scope_var_io) acc) - ScopeVarMap.empty all_subscope_output_vars_dcalc) + ScopeVar.Map.empty all_subscope_output_vars_dcalc) ctx.subscope_vars; } ) | Assertion e -> @@ -659,7 +817,7 @@ let translate_rule defined, we add an check "ErrorOnEmpty" here. *) Marked.mark (Expr.map_ty (fun _ -> scope_let_typ) (Marked.get_mark e)) - (EAssert (Marked.same_mark_as (ErrorOnEmpty new_e) e)); + (EAssert (Marked.same_mark_as (EErrorOnEmpty new_e) e)); scope_let_kind = Assertion; }) (Bindlib.bind_var (Var.make "_") next) @@ -668,11 +826,11 @@ let translate_rule let translate_rules (ctx : 'm ctx) - (rules : 'm Ast.rule list) - ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) + (rules : 'm Scopelang.Ast.rule list) + ((sigma_name, pos_sigma) : Uid.MarkedString.info) (mark : 'm mark) - (sigma_return_struct_name : StructName.t) : - 'm Dcalc.Ast.expr scope_body_expr Bindlib.box * 'm ctx = + (scope_sig : 'm scope_sig_ctx) : + 'm Ast.expr scope_body_expr Bindlib.box * 'm ctx = let scope_lets, new_ctx = List.fold_left (fun (scope_lets, ctx) rule -> @@ -683,19 +841,18 @@ let translate_rules ((fun next -> next), ctx) rules in - let scope_variables = ScopeVarMap.bindings new_ctx.scope_vars in - let scope_output_variables = - List.filter - (fun (_, (_, _, io)) -> Marked.unmark io.Ast.io_output) - scope_variables - in let return_exp = - Expr.etuple - (List.map - (fun (_, (dcalc_var, _, _)) -> - Expr.make_var dcalc_var (mark_tany mark pos_sigma)) - scope_output_variables) - (Some sigma_return_struct_name) (mark_tany mark pos_sigma) + Expr.estruct scope_sig.scope_sig_output_struct + (ScopeVar.Map.fold + (fun var (dcalc_var, _, io) acc -> + if Marked.unmark io.Desugared.Ast.io_output then + let field = ScopeVar.Map.find var scope_sig.scope_sig_out_fields in + StructField.Map.add field + (Expr.make_var dcalc_var (mark_tany mark pos_sigma)) + acc + else acc) + new_ctx.scope_vars StructField.Map.empty) + (mark_tany mark pos_sigma) in ( scope_lets (Bindlib.box_apply @@ -708,10 +865,10 @@ let translate_scope_decl (enum_ctx : enum_ctx) (sctx : 'm scope_sigs_ctx) (scope_name : ScopeName.t) - (sigma : 'm Ast.scope_decl) : - 'm Dcalc.Ast.expr scope_body Bindlib.box * struct_ctx = + (sigma : 'm Scopelang.Ast.scope_decl) : + 'm Ast.expr scope_body Bindlib.box * struct_ctx = let sigma_info = ScopeName.get_info sigma.scope_decl_name in - let scope_sig = ScopeMap.find sigma.scope_decl_name sctx in + let scope_sig = ScopeName.Map.find sigma.scope_decl_name sctx in let scope_variables = scope_sig.scope_sig_local_vars in let ctx = (* the context must be initialized for fresh variables for all only-input @@ -725,7 +882,7 @@ let translate_scope_decl { ctx with scope_vars = - ScopeVarMap.add scope_var.scope_var_name + ScopeVar.Map.add scope_var.scope_var_name ( scope_var_dcalc, scope_var.scope_var_typ, scope_var.scope_var_io ) @@ -741,13 +898,13 @@ let translate_scope_decl let pos_sigma = Marked.get_mark sigma_info in let rules_with_return_expr, ctx = translate_rules ctx sigma.scope_decl_rules sigma_info sigma.scope_mark - scope_return_struct_name + scope_sig in let scope_variables = List.map (fun var_ctx -> let dcalc_x, _, _ = - ScopeVarMap.find var_ctx.scope_var_name ctx.scope_vars + ScopeVar.Map.find var_ctx.scope_var_name ctx.scope_vars in var_ctx, dcalc_x) scope_variables @@ -764,50 +921,54 @@ let translate_scope_decl let input_var_typ (var_ctx : scope_var_ctx) = match Marked.unmark var_ctx.scope_var_io.io_input with | OnlyInput -> var_ctx.scope_var_typ, pos_sigma - | Reentrant -> - ( TArrow ((TLit TUnit, pos_sigma), (var_ctx.scope_var_typ, pos_sigma)), - pos_sigma ) + | Reentrant -> ( + match var_ctx.scope_var_typ with + | TArrow _ -> var_ctx.scope_var_typ, pos_sigma + | _ -> + ( TArrow ((TLit TUnit, pos_sigma), (var_ctx.scope_var_typ, pos_sigma)), + pos_sigma )) | NoInput -> failwith "should not happen" in let input_destructurings next = - fst - (List.fold_right - (fun (var_ctx, v) (next, i) -> - ( Bindlib.box_apply2 - (fun next r -> - ScopeLet - { - scope_let_kind = DestructuringInputStruct; - scope_let_next = next; - scope_let_pos = pos_sigma; - scope_let_typ = input_var_typ var_ctx; - scope_let_expr = - ( ETupleAccess - ( r, - i, - Some scope_input_struct_name, - List.map - (fun (var_ctx, _) -> input_var_typ var_ctx) - scope_input_variables ), - mark_tany sigma.scope_mark pos_sigma ); - }) - (Bindlib.bind_var v next) - (Expr.Box.lift - (Expr.make_var scope_input_var - (mark_tany sigma.scope_mark pos_sigma))), - i - 1 )) - scope_input_variables - (next, List.length scope_input_variables - 1)) + List.fold_right + (fun (var_ctx, v) next -> + let field = + (ScopeVar.Map.find var_ctx.scope_var_name + scope_sig.scope_sig_in_fields) + .scope_input_name + in + Bindlib.box_apply2 + (fun next r -> + ScopeLet + { + scope_let_kind = DestructuringInputStruct; + scope_let_next = next; + scope_let_pos = pos_sigma; + scope_let_typ = input_var_typ var_ctx; + scope_let_expr = + ( EStructAccess + { name = scope_input_struct_name; e = r; field }, + mark_tany sigma.scope_mark pos_sigma ); + }) + (Bindlib.bind_var v next) + (Expr.Box.lift + (Expr.make_var scope_input_var + (mark_tany sigma.scope_mark pos_sigma)))) + scope_input_variables next in let field_map = - List.map - (fun (var_ctx, _) -> + List.fold_left + (fun acc (var_ctx, _) -> let var = var_ctx.scope_var_name in - let field, _ = ScopeVarMap.find var scope_sig.scope_sig_in_fields in - field, input_var_typ var_ctx) - scope_input_variables + let field = + (ScopeVar.Map.find var scope_sig.scope_sig_in_fields).scope_input_name + in + StructField.Map.add field (input_var_typ var_ctx) acc) + StructField.Map.empty scope_input_variables + in + let new_struct_ctx = + StructName.Map.singleton scope_input_struct_name field_map in - let new_struct_ctx = StructMap.singleton scope_input_struct_name field_map in ( Bindlib.box_apply (fun scope_body_expr -> { @@ -819,21 +980,22 @@ let translate_scope_decl (input_destructurings rules_with_return_expr)), new_struct_ctx ) -let translate_program (prgm : 'm Ast.program) : 'm Dcalc.Ast.program = - let scope_dependencies = Dependency.build_program_dep_graph prgm in - Dependency.check_for_cycle_in_scope scope_dependencies; - let scope_ordering = Dependency.get_scope_ordering scope_dependencies in +let translate_program (prgm : 'm Scopelang.Ast.program) : 'm Ast.program = + let scope_dependencies = Scopelang.Dependency.build_program_dep_graph prgm in + Scopelang.Dependency.check_for_cycle_in_scope scope_dependencies; + let scope_ordering = + Scopelang.Dependency.get_scope_ordering scope_dependencies + in let decl_ctx = prgm.program_ctx in let sctx : 'm scope_sigs_ctx = - ScopeMap.mapi + ScopeName.Map.mapi (fun scope_name scope -> let scope_dvar = Var.make - (Marked.unmark (ScopeName.get_info scope.Ast.scope_decl_name)) - in - let scope_return_struct_name = - ScopeMap.find scope_name decl_ctx.ctx_scopes + (Marked.unmark + (ScopeName.get_info scope.Scopelang.Ast.scope_decl_name)) in + let scope_return = ScopeName.Map.find scope_name decl_ctx.ctx_scopes in let scope_input_var = Var.make (Marked.unmark (ScopeName.get_info scope_name) ^ "_in") in @@ -844,16 +1006,20 @@ let translate_program (prgm : 'm Ast.program) : 'm Dcalc.Ast.program = (ScopeName.get_info scope_name)) in let scope_sig_in_fields = - ScopeVarMap.filter_map - (fun dvar (_, vis) -> - match Marked.unmark vis.Ast.io_input with + ScopeVar.Map.filter_map + (fun dvar (typ, vis) -> + match Marked.unmark vis.Desugared.Ast.io_input with | NoInput -> None | OnlyInput | Reentrant -> let info = ScopeVar.get_info dvar in let s = Marked.unmark info ^ "_in" in Some - ( StructFieldName.fresh (s, Marked.get_mark info), - vis.Ast.io_input )) + { + scope_input_name = + StructField.fresh (s, Marked.get_mark info); + scope_input_io = vis.Desugared.Ast.io_input; + scope_input_typ = Marked.unmark typ; + }) scope.scope_sig in { @@ -865,12 +1031,13 @@ let translate_program (prgm : 'm Ast.program) : 'm Dcalc.Ast.program = scope_var_typ = Marked.unmark tau; scope_var_io = vis; }) - (ScopeVarMap.bindings scope.scope_sig); + (ScopeVar.Map.bindings scope.scope_sig); scope_sig_scope_var = scope_dvar; scope_sig_input_var = scope_input_var; scope_sig_input_struct = scope_input_struct_name; - scope_sig_output_struct = scope_return_struct_name; + scope_sig_output_struct = scope_return.out_struct_name; scope_sig_in_fields; + scope_sig_out_fields = scope_return.out_struct_fields; }) prgm.program_scopes in @@ -879,17 +1046,17 @@ let translate_program (prgm : 'm Ast.program) : 'm Dcalc.Ast.program = order, then the chained scopes aggregated from the right. *) let rec translate_scopes decl_ctx = function | scope_name :: next_scopes -> - let scope = ScopeMap.find scope_name prgm.program_scopes in + let scope = ScopeName.Map.find scope_name prgm.program_scopes in let scope_body, scope_in_struct = translate_scope_decl decl_ctx.ctx_structs decl_ctx.ctx_enums sctx scope_name scope in - let dvar = (ScopeMap.find scope_name sctx).scope_sig_scope_var in + let dvar = (ScopeName.Map.find scope_name sctx).scope_sig_scope_var in let decl_ctx = { decl_ctx with ctx_structs = - StructMap.union + StructName.Map.union (fun _ _ -> assert false (* should not happen *)) decl_ctx.ctx_structs scope_in_struct; } diff --git a/compiler/scopelang/scope_to_dcalc.mli b/compiler/dcalc/from_scopelang.mli similarity index 92% rename from compiler/scopelang/scope_to_dcalc.mli rename to compiler/dcalc/from_scopelang.mli index af8eb11a..1d60ac9a 100644 --- a/compiler/scopelang/scope_to_dcalc.mli +++ b/compiler/dcalc/from_scopelang.mli @@ -16,4 +16,4 @@ (** Scope language to default calculus translator *) -val translate_program : 'm Ast.program -> 'm Dcalc.Ast.program +val translate_program : 'm Scopelang.Ast.program -> 'm Ast.program diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index 1b164337..3abb7d34 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -16,7 +16,7 @@ (** Reference interpreter for the default calculus *) -open Utils +open Catala_utils open Shared_ast module Runtime = Runtime_ocaml.Runtime @@ -29,272 +29,117 @@ let log_indent = ref 0 (** {1 Evaluation} *) -let rec evaluate_operator - (ctx : decl_ctx) - (op : operator) - (pos : Pos.t) - (args : 'm Ast.expr list) : 'm Ast.naked_expr = - (* Try to apply [div] and if a [Division_by_zero] exceptions is catched, use - [op] to raise multispanned errors. *) - let apply_div_or_raise_err (div : unit -> 'm Ast.naked_expr) : - 'm Ast.naked_expr = - try div () - with Division_by_zero -> +let print_log ctx entry infos pos e = + if !Cli.trace_flag then + match entry with + | VarDef _ -> + (* TODO: this usage of Format is broken, Formatting requires that all is + formatted in one pass, without going through intermediate "%s" *) + Cli.log_format "%*s%a %a: %s" (!log_indent * 2) "" Print.log_entry entry + Print.uid_list infos + (match Marked.unmark e with + | EAbs _ -> Cli.with_style [ANSITerminal.green] "" + | _ -> + let expr_str = + Format.asprintf "%a" (Expr.format ctx ~debug:false) e + in + let expr_str = + Re.Pcre.substitute ~rex:(Re.Pcre.regexp "\n\\s*") + ~subst:(fun _ -> " ") + expr_str + in + Cli.with_style [ANSITerminal.green] "%s" expr_str) + | PosRecordIfTrueBool -> ( + match pos <> Pos.no_pos, Marked.unmark e with + | true, ELit (LBool true) -> + Cli.log_format "%*s%a%s:\n%s" (!log_indent * 2) "" Print.log_entry entry + (Cli.with_style [ANSITerminal.green] "Definition applied") + (Cli.add_prefix_to_each_line (Pos.retrieve_loc_text pos) (fun _ -> + Format.asprintf "%*s" (!log_indent * 2) "")) + | _ -> ()) + | BeginCall -> + Cli.log_format "%*s%a %a" (!log_indent * 2) "" Print.log_entry entry + Print.uid_list infos; + log_indent := !log_indent + 1 + | EndCall -> + log_indent := !log_indent - 1; + Cli.log_format "%*s%a %a" (!log_indent * 2) "" Print.log_entry entry + Print.uid_list infos + +(* Todo: this should be handled early when resolving overloads. Here we have + proper structural equality, but the OCaml backend for example uses the + builtin equality function instead of this. *) +let rec handle_eq ctx pos e1 e2 = + let open Runtime.Oper in + match e1, e2 with + | ELit LUnit, ELit LUnit -> true + | ELit (LBool b1), ELit (LBool b2) -> not (o_xor b1 b2) + | ELit (LInt x1), ELit (LInt x2) -> o_eq_int_int x1 x2 + | ELit (LRat x1), ELit (LRat x2) -> o_eq_rat_rat x1 x2 + | ELit (LMoney x1), ELit (LMoney x2) -> o_eq_mon_mon x1 x2 + | ELit (LDuration x1), ELit (LDuration x2) -> o_eq_dur_dur x1 x2 + | ELit (LDate x1), ELit (LDate x2) -> o_eq_dat_dat x1 x2 + | EArray es1, EArray es2 -> ( + try + List.for_all2 + (fun e1 e2 -> + match evaluate_operator ctx Eq pos [e1; e2] with + | ELit (LBool b) -> b + | _ -> assert false + (* should not happen *)) + es1 es2 + with Invalid_argument _ -> false) + | EStruct { fields = es1; name = s1 }, EStruct { fields = es2; name = s2 } -> + StructName.equal s1 s2 + && StructField.Map.equal + (fun e1 e2 -> + match evaluate_operator ctx Eq pos [e1; e2] with + | ELit (LBool b) -> b + | _ -> assert false + (* should not happen *)) + es1 es2 + | ( EInj { e = e1; cons = i1; name = en1 }, + EInj { e = e2; cons = i2; name = en2 } ) -> ( + try + EnumName.equal en1 en2 + && EnumConstructor.equal i1 i2 + && + match evaluate_operator ctx Eq pos [e1; e2] with + | ELit (LBool b) -> b + | _ -> assert false + (* should not happen *) + with Invalid_argument _ -> false) + | _, _ -> false (* comparing anything else return false *) + +(* Call-by-value: the arguments are expected to be already evaluated here *) +and evaluate_operator : + type k. + decl_ctx -> + (dcalc, k) operator -> + Pos.t -> + 'm Ast.expr list -> + 'm Ast.naked_expr = + fun ctx op pos args -> + let protect f x y = + let get_binop_args_pos = function + | (arg0 :: arg1 :: _ : 'm Ast.expr list) -> + [None, Expr.pos arg0; None, Expr.pos arg1] + | _ -> assert false + in + try f x y with + | Division_by_zero -> Errors.raise_multispanned_error [ Some "The division operator:", pos; Some "The null denominator:", Expr.pos (List.nth args 1); ] "division by zero at runtime" - in - let get_binop_args_pos = function - | (arg0 :: arg1 :: _ : 'm Ast.expr list) -> - [None, Expr.pos arg0; None, Expr.pos arg1] - | _ -> assert false - in - (* Try to apply [cmp] and if a [UncomparableDurations] exceptions is catched, - use [args] to raise multispanned errors. *) - let apply_cmp_or_raise_err - (cmp : unit -> 'm Ast.naked_expr) - (args : 'm Ast.expr list) : 'm Ast.naked_expr = - try cmp () - with Runtime.UncomparableDurations -> + | Runtime.UncomparableDurations -> Errors.raise_multispanned_error (get_binop_args_pos args) "Cannot compare together durations that cannot be converted to a \ precise number of days" in - match op, List.map Marked.unmark args with - | Ternop Fold, [_f; _init; EArray es] -> - Marked.unmark - (List.fold_left - (fun acc e' -> - evaluate_expr ctx - (Marked.same_mark_as (EApp (List.nth args 0, [acc; e'])) e')) - (List.nth args 1) es) - | Binop And, [ELit (LBool b1); ELit (LBool b2)] -> ELit (LBool (b1 && b2)) - | Binop Or, [ELit (LBool b1); ELit (LBool b2)] -> ELit (LBool (b1 || b2)) - | Binop Xor, [ELit (LBool b1); ELit (LBool b2)] -> ELit (LBool (b1 <> b2)) - | Binop (Add KInt), [ELit (LInt i1); ELit (LInt i2)] -> - ELit (LInt Runtime.(i1 +! i2)) - | Binop (Sub KInt), [ELit (LInt i1); ELit (LInt i2)] -> - ELit (LInt Runtime.(i1 -! i2)) - | Binop (Mult KInt), [ELit (LInt i1); ELit (LInt i2)] -> - ELit (LInt Runtime.(i1 *! i2)) - | Binop (Div KInt), [ELit (LInt i1); ELit (LInt i2)] -> - apply_div_or_raise_err (fun _ -> ELit (LInt Runtime.(i1 /! i2))) - | Binop (Add KRat), [ELit (LRat i1); ELit (LRat i2)] -> - ELit (LRat Runtime.(i1 +& i2)) - | Binop (Sub KRat), [ELit (LRat i1); ELit (LRat i2)] -> - ELit (LRat Runtime.(i1 -& i2)) - | Binop (Mult KRat), [ELit (LRat i1); ELit (LRat i2)] -> - ELit (LRat Runtime.(i1 *& i2)) - | Binop (Div KRat), [ELit (LRat i1); ELit (LRat i2)] -> - apply_div_or_raise_err (fun _ -> ELit (LRat Runtime.(i1 /& i2))) - | Binop (Add KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - ELit (LMoney Runtime.(m1 +$ m2)) - | Binop (Sub KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - ELit (LMoney Runtime.(m1 -$ m2)) - | Binop (Mult KMoney), [ELit (LMoney m1); ELit (LRat m2)] -> - ELit (LMoney Runtime.(m1 *$ m2)) - | Binop (Div KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - apply_div_or_raise_err (fun _ -> ELit (LRat Runtime.(m1 /$ m2))) - | Binop (Add KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - ELit (LDuration Runtime.(d1 +^ d2)) - | Binop (Sub KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - ELit (LDuration Runtime.(d1 -^ d2)) - | Binop (Sub KDate), [ELit (LDate d1); ELit (LDate d2)] -> - ELit (LDuration Runtime.(d1 -@ d2)) - | Binop (Add KDate), [ELit (LDate d1); ELit (LDuration d2)] -> - ELit (LDate Runtime.(d1 +@ d2)) - | Binop (Mult KDuration), [ELit (LDuration d1); ELit (LInt i1)] -> - ELit (LDuration Runtime.(d1 *^ i1)) - | Binop (Lt KInt), [ELit (LInt i1); ELit (LInt i2)] -> - ELit (LBool Runtime.(i1 - ELit (LBool Runtime.(i1 <=! i2)) - | Binop (Gt KInt), [ELit (LInt i1); ELit (LInt i2)] -> - ELit (LBool Runtime.(i1 >! i2)) - | Binop (Gte KInt), [ELit (LInt i1); ELit (LInt i2)] -> - ELit (LBool Runtime.(i1 >=! i2)) - | Binop (Lt KRat), [ELit (LRat i1); ELit (LRat i2)] -> - ELit (LBool Runtime.(i1 <& i2)) - | Binop (Lte KRat), [ELit (LRat i1); ELit (LRat i2)] -> - ELit (LBool Runtime.(i1 <=& i2)) - | Binop (Gt KRat), [ELit (LRat i1); ELit (LRat i2)] -> - ELit (LBool Runtime.(i1 >& i2)) - | Binop (Gte KRat), [ELit (LRat i1); ELit (LRat i2)] -> - ELit (LBool Runtime.(i1 >=& i2)) - | Binop (Lt KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - ELit (LBool Runtime.(m1 <$ m2)) - | Binop (Lte KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - ELit (LBool Runtime.(m1 <=$ m2)) - | Binop (Gt KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - ELit (LBool Runtime.(m1 >$ m2)) - | Binop (Gte KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - ELit (LBool Runtime.(m1 >=$ m2)) - | Binop (Lt KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - apply_cmp_or_raise_err (fun _ -> ELit (LBool Runtime.(d1 <^ d2))) args - | Binop (Lte KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - apply_cmp_or_raise_err (fun _ -> ELit (LBool Runtime.(d1 <=^ d2))) args - | Binop (Gt KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - apply_cmp_or_raise_err (fun _ -> ELit (LBool Runtime.(d1 >^ d2))) args - | Binop (Gte KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - apply_cmp_or_raise_err (fun _ -> ELit (LBool Runtime.(d1 >=^ d2))) args - | Binop (Lt KDate), [ELit (LDate d1); ELit (LDate d2)] -> - ELit (LBool Runtime.(d1 <@ d2)) - | Binop (Lte KDate), [ELit (LDate d1); ELit (LDate d2)] -> - ELit (LBool Runtime.(d1 <=@ d2)) - | Binop (Gt KDate), [ELit (LDate d1); ELit (LDate d2)] -> - ELit (LBool Runtime.(d1 >@ d2)) - | Binop (Gte KDate), [ELit (LDate d1); ELit (LDate d2)] -> - ELit (LBool Runtime.(d1 >=@ d2)) - | Binop Eq, [ELit LUnit; ELit LUnit] -> ELit (LBool true) - | Binop Eq, [ELit (LDuration d1); ELit (LDuration d2)] -> - ELit (LBool Runtime.(d1 =^ d2)) - | Binop Eq, [ELit (LDate d1); ELit (LDate d2)] -> - ELit (LBool Runtime.(d1 =@ d2)) - | Binop Eq, [ELit (LMoney m1); ELit (LMoney m2)] -> - ELit (LBool Runtime.(m1 =$ m2)) - | Binop Eq, [ELit (LRat i1); ELit (LRat i2)] -> - ELit (LBool Runtime.(i1 =& i2)) - | Binop Eq, [ELit (LInt i1); ELit (LInt i2)] -> - ELit (LBool Runtime.(i1 =! i2)) - | Binop Eq, [ELit (LBool b1); ELit (LBool b2)] -> ELit (LBool (b1 = b2)) - | Binop Eq, [EArray es1; EArray es2] -> - ELit - (LBool - (try - List.for_all2 - (fun e1 e2 -> - match evaluate_operator ctx op pos [e1; e2] with - | ELit (LBool b) -> b - | _ -> assert false - (* should not happen *)) - es1 es2 - with Invalid_argument _ -> false)) - | Binop Eq, [ETuple (es1, s1); ETuple (es2, s2)] -> - ELit - (LBool - (try - s1 = s2 - && List.for_all2 - (fun e1 e2 -> - match evaluate_operator ctx op pos [e1; e2] with - | ELit (LBool b) -> b - | _ -> assert false - (* should not happen *)) - es1 es2 - with Invalid_argument _ -> false)) - | Binop Eq, [EInj (e1, i1, en1, _ts1); EInj (e2, i2, en2, _ts2)] -> - ELit - (LBool - (try - en1 = en2 - && i1 = i2 - && - match evaluate_operator ctx op pos [e1; e2] with - | ELit (LBool b) -> b - | _ -> assert false - (* should not happen *) - with Invalid_argument _ -> false)) - | Binop Eq, [_; _] -> - ELit (LBool false) (* comparing anything else return false *) - | Binop Neq, [_; _] -> ( - match evaluate_operator ctx (Binop Eq) pos args with - | ELit (LBool b) -> ELit (LBool (not b)) - | _ -> assert false (*should not happen *)) - | Binop Concat, [EArray es1; EArray es2] -> EArray (es1 @ es2) - | Binop Map, [_; EArray es] -> - EArray - (List.map - (fun e' -> - evaluate_expr ctx - (Marked.same_mark_as (EApp (List.nth args 0, [e'])) e')) - es) - | Binop Filter, [_; EArray es] -> - EArray - (List.filter - (fun e' -> - match - evaluate_expr ctx - (Marked.same_mark_as (EApp (List.nth args 0, [e'])) e') - with - | ELit (LBool b), _ -> b - | _ -> - Errors.raise_spanned_error - (Expr.pos (List.nth args 0)) - "This predicate evaluated to something else than a boolean \ - (should not happen if the term was well-typed)") - es) - | Binop _, ([ELit LEmptyError; _] | [_; ELit LEmptyError]) -> ELit LEmptyError - | Unop (Minus KInt), [ELit (LInt i)] -> - ELit (LInt Runtime.(integer_of_int 0 -! i)) - | Unop (Minus KRat), [ELit (LRat i)] -> - ELit (LRat Runtime.(decimal_of_string "0" -& i)) - | Unop (Minus KMoney), [ELit (LMoney i)] -> - ELit (LMoney Runtime.(money_of_units_int 0 -$ i)) - | Unop (Minus KDuration), [ELit (LDuration i)] -> - ELit (LDuration Runtime.(~-^i)) - | Unop Not, [ELit (LBool b)] -> ELit (LBool (not b)) - | Unop Length, [EArray es] -> - ELit (LInt (Runtime.integer_of_int (List.length es))) - | Unop GetDay, [ELit (LDate d)] -> - ELit (LInt Runtime.(day_of_month_of_date d)) - | Unop GetMonth, [ELit (LDate d)] -> - ELit (LInt Runtime.(month_number_of_date d)) - | Unop GetYear, [ELit (LDate d)] -> ELit (LInt Runtime.(year_of_date d)) - | Unop FirstDayOfMonth, [ELit (LDate d)] -> - ELit (LDate Runtime.(first_day_of_month d)) - | Unop LastDayOfMonth, [ELit (LDate d)] -> - ELit (LDate Runtime.(first_day_of_month d)) - | Unop IntToRat, [ELit (LInt i)] -> ELit (LRat Runtime.(decimal_of_integer i)) - | Unop MoneyToRat, [ELit (LMoney i)] -> - ELit (LRat Runtime.(decimal_of_money i)) - | Unop RatToMoney, [ELit (LRat i)] -> - ELit (LMoney Runtime.(money_of_decimal i)) - | Unop RoundMoney, [ELit (LMoney m)] -> ELit (LMoney Runtime.(money_round m)) - | Unop RoundDecimal, [ELit (LRat m)] -> ELit (LRat Runtime.(decimal_round m)) - | Unop (Log (entry, infos)), [e'] -> - if !Cli.trace_flag then ( - match entry with - | VarDef _ -> - (* TODO: this usage of Format is broken, Formatting requires that all is - formatted in one pass, without going through intermediate "%s" *) - Cli.log_format "%*s%a %a: %s" (!log_indent * 2) "" Print.log_entry entry - Print.uid_list infos - (match e' with - | EAbs _ -> Cli.with_style [ANSITerminal.green] "" - | _ -> - let expr_str = - Format.asprintf "%a" (Expr.format ctx ~debug:false) (List.hd args) - in - let expr_str = - Re.Pcre.substitute ~rex:(Re.Pcre.regexp "\n\\s*") - ~subst:(fun _ -> " ") - expr_str - in - Cli.with_style [ANSITerminal.green] "%s" expr_str) - | PosRecordIfTrueBool -> ( - match pos <> Pos.no_pos, e' with - | true, ELit (LBool true) -> - Cli.log_format "%*s%a%s:\n%s" (!log_indent * 2) "" Print.log_entry - entry - (Cli.with_style [ANSITerminal.green] "Definition applied") - (Cli.add_prefix_to_each_line (Pos.retrieve_loc_text pos) (fun _ -> - Format.asprintf "%*s" (!log_indent * 2) "")) - | _ -> ()) - | BeginCall -> - Cli.log_format "%*s%a %a" (!log_indent * 2) "" Print.log_entry entry - Print.uid_list infos; - log_indent := !log_indent + 1 - | EndCall -> - log_indent := !log_indent - 1; - Cli.log_format "%*s%a %a" (!log_indent * 2) "" Print.log_entry entry - Print.uid_list infos) - else (); - e' - | Unop _, [ELit LEmptyError] -> ELit LEmptyError - | _ -> + let err () = Errors.raise_multispanned_error ([Some "Operator:", pos] @ List.mapi @@ -307,6 +152,162 @@ let rec evaluate_operator args) "Operator applied to the wrong arguments\n\ (should not happen if the term was well-typed)" + in + let open Runtime.Oper in + if List.exists (function ELit LEmptyError, _ -> true | _ -> false) args then + ELit LEmptyError + else + Operator.kind_dispatch op + ~polymorphic:(fun op -> + match op, args with + | Length, [(EArray es, _)] -> + ELit (LInt (Runtime.integer_of_int (List.length es))) + | Log (entry, infos), [e'] -> + print_log ctx entry infos pos e'; + Marked.unmark e' + | Eq, [(e1, _); (e2, _)] -> ELit (LBool (handle_eq ctx pos e1 e2)) + | Map, [f; (EArray es, _)] -> + EArray + (List.map + (fun e' -> + evaluate_expr ctx + (Marked.same_mark_as (EApp { f; args = [e'] }) e')) + es) + | Reduce, [_; default; (EArray [], _)] -> Marked.unmark default + | Reduce, [f; _; (EArray (x0 :: xn), _)] -> + Marked.unmark + (List.fold_left + (fun acc x -> + evaluate_expr ctx + (Marked.same_mark_as (EApp { f; args = [acc; x] }) f)) + x0 xn) + | Concat, [(EArray es1, _); (EArray es2, _)] -> EArray (es1 @ es2) + | Filter, [f; (EArray es, _)] -> + EArray + (List.filter + (fun e' -> + match + evaluate_expr ctx + (Marked.same_mark_as (EApp { f; args = [e'] }) e') + with + | ELit (LBool b), _ -> b + | _ -> + Errors.raise_spanned_error + (Expr.pos (List.nth args 0)) + "This predicate evaluated to something else than a \ + boolean (should not happen if the term was well-typed)") + es) + | Fold, [f; init; (EArray es, _)] -> + Marked.unmark + (List.fold_left + (fun acc e' -> + evaluate_expr ctx + (Marked.same_mark_as (EApp { f; args = [acc; e'] }) e')) + init es) + | (Length | Log _ | Eq | Map | Concat | Filter | Fold | Reduce), _ -> + err ()) + ~monomorphic:(fun op -> + let rlit = + match op, List.map (function ELit l, _ -> l | _ -> err ()) args with + | Not, [LBool b] -> LBool (o_not b) + | GetDay, [LDate d] -> LInt (o_getDay d) + | GetMonth, [LDate d] -> LInt (o_getMonth d) + | GetYear, [LDate d] -> LInt (o_getYear d) + | FirstDayOfMonth, [LDate d] -> LDate (o_firstDayOfMonth d) + | LastDayOfMonth, [LDate d] -> LDate (o_lastDayOfMonth d) + | And, [LBool b1; LBool b2] -> LBool (o_and b1 b2) + | Or, [LBool b1; LBool b2] -> LBool (o_or b1 b2) + | Xor, [LBool b1; LBool b2] -> LBool (o_xor b1 b2) + | ( ( Not | GetDay | GetMonth | GetYear | FirstDayOfMonth + | LastDayOfMonth | And | Or | Xor ), + _ ) -> + err () + in + ELit rlit) + ~resolved:(fun op -> + let rlit = + match op, List.map (function ELit l, _ -> l | _ -> err ()) args with + | Minus_int, [LInt x] -> LInt (o_minus_int x) + | Minus_rat, [LRat x] -> LRat (o_minus_rat x) + | Minus_mon, [LMoney x] -> LMoney (o_minus_mon x) + | Minus_dur, [LDuration x] -> LDuration (o_minus_dur x) + | ToRat_int, [LInt i] -> LRat (o_torat_int i) + | ToRat_mon, [LMoney i] -> LRat (o_torat_mon i) + | ToMoney_rat, [LRat i] -> LMoney (o_tomoney_rat i) + | Round_mon, [LMoney m] -> LMoney (o_round_mon m) + | Round_rat, [LRat m] -> LRat (o_round_rat m) + | Add_int_int, [LInt x; LInt y] -> LInt (o_add_int_int x y) + | Add_rat_rat, [LRat x; LRat y] -> LRat (o_add_rat_rat x y) + | Add_mon_mon, [LMoney x; LMoney y] -> LMoney (o_add_mon_mon x y) + | Add_dat_dur, [LDate x; LDuration y] -> LDate (o_add_dat_dur x y) + | Add_dur_dur, [LDuration x; LDuration y] -> + LDuration (o_add_dur_dur x y) + | Sub_int_int, [LInt x; LInt y] -> LInt (o_sub_int_int x y) + | Sub_rat_rat, [LRat x; LRat y] -> LRat (o_sub_rat_rat x y) + | Sub_mon_mon, [LMoney x; LMoney y] -> LMoney (o_sub_mon_mon x y) + | Sub_dat_dat, [LDate x; LDate y] -> LDuration (o_sub_dat_dat x y) + | Sub_dat_dur, [LDate x; LDuration y] -> LDate (o_sub_dat_dur x y) + | Sub_dur_dur, [LDuration x; LDuration y] -> + LDuration (o_sub_dur_dur x y) + | Mult_int_int, [LInt x; LInt y] -> LInt (o_mult_int_int x y) + | Mult_rat_rat, [LRat x; LRat y] -> LRat (o_mult_rat_rat x y) + | Mult_mon_rat, [LMoney x; LRat y] -> LMoney (o_mult_mon_rat x y) + | Mult_dur_int, [LDuration x; LInt y] -> + LDuration (o_mult_dur_int x y) + | Div_int_int, [LInt x; LInt y] -> LRat (protect o_div_int_int x y) + | Div_rat_rat, [LRat x; LRat y] -> LRat (protect o_div_rat_rat x y) + | Div_mon_mon, [LMoney x; LMoney y] -> + LRat (protect o_div_mon_mon x y) + | Div_mon_rat, [LMoney x; LRat y] -> + LMoney (protect o_div_mon_rat x y) + | Lt_int_int, [LInt x; LInt y] -> LBool (o_lt_int_int x y) + | Lt_rat_rat, [LRat x; LRat y] -> LBool (o_lt_rat_rat x y) + | Lt_mon_mon, [LMoney x; LMoney y] -> LBool (o_lt_mon_mon x y) + | Lt_dat_dat, [LDate x; LDate y] -> LBool (o_lt_dat_dat x y) + | Lt_dur_dur, [LDuration x; LDuration y] -> + LBool (protect o_lt_dur_dur x y) + | Lte_int_int, [LInt x; LInt y] -> LBool (o_lte_int_int x y) + | Lte_rat_rat, [LRat x; LRat y] -> LBool (o_lte_rat_rat x y) + | Lte_mon_mon, [LMoney x; LMoney y] -> LBool (o_lte_mon_mon x y) + | Lte_dat_dat, [LDate x; LDate y] -> LBool (o_lte_dat_dat x y) + | Lte_dur_dur, [LDuration x; LDuration y] -> + LBool (protect o_lte_dur_dur x y) + | Gt_int_int, [LInt x; LInt y] -> LBool (o_gt_int_int x y) + | Gt_rat_rat, [LRat x; LRat y] -> LBool (o_gt_rat_rat x y) + | Gt_mon_mon, [LMoney x; LMoney y] -> LBool (o_gt_mon_mon x y) + | Gt_dat_dat, [LDate x; LDate y] -> LBool (o_gt_dat_dat x y) + | Gt_dur_dur, [LDuration x; LDuration y] -> + LBool (protect o_gt_dur_dur x y) + | Gte_int_int, [LInt x; LInt y] -> LBool (o_gte_int_int x y) + | Gte_rat_rat, [LRat x; LRat y] -> LBool (o_gte_rat_rat x y) + | Gte_mon_mon, [LMoney x; LMoney y] -> LBool (o_gte_mon_mon x y) + | Gte_dat_dat, [LDate x; LDate y] -> LBool (o_gte_dat_dat x y) + | Gte_dur_dur, [LDuration x; LDuration y] -> + LBool (protect o_gte_dur_dur x y) + | Eq_int_int, [LInt x; LInt y] -> LBool (o_eq_int_int x y) + | Eq_rat_rat, [LRat x; LRat y] -> LBool (o_eq_rat_rat x y) + | Eq_mon_mon, [LMoney x; LMoney y] -> LBool (o_eq_mon_mon x y) + | Eq_dat_dat, [LDate x; LDate y] -> LBool (o_eq_dat_dat x y) + | Eq_dur_dur, [LDuration x; LDuration y] -> + LBool (protect o_eq_dur_dur x y) + | ( ( Minus_int | Minus_rat | Minus_mon | Minus_dur | ToRat_int + | ToRat_mon | ToMoney_rat | Round_rat | Round_mon | Add_int_int + | Add_rat_rat | Add_mon_mon | Add_dat_dur | Add_dur_dur + | Sub_int_int | Sub_rat_rat | Sub_mon_mon | Sub_dat_dat + | Sub_dat_dur | Sub_dur_dur | Mult_int_int | Mult_rat_rat + | Mult_mon_rat | Mult_dur_int | Div_int_int | Div_rat_rat + | Div_mon_mon | Div_mon_rat | Lt_int_int | Lt_rat_rat | Lt_mon_mon + | Lt_dat_dat | Lt_dur_dur | Lte_int_int | Lte_rat_rat + | Lte_mon_mon | Lte_dat_dat | Lte_dur_dur | Gt_int_int + | Gt_rat_rat | Gt_mon_mon | Gt_dat_dat | Gt_dur_dur | Gte_int_int + | Gte_rat_rat | Gte_mon_mon | Gte_dat_dat | Gte_dur_dur + | Eq_int_int | Eq_rat_rat | Eq_mon_mon | Eq_dat_dat | Eq_dur_dur + ), + _ ) -> + err () + in + ELit rlit) + ~overloaded:(fun _ -> assert false) and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = match Marked.unmark e with @@ -314,11 +315,11 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = Errors.raise_spanned_error (Expr.pos e) "free variable found at evaluation (should not happen if term was \ well-typed" - | EApp (e1, args) -> ( + | EApp { f = e1; args } -> ( let e1 = evaluate_expr ctx e1 in let args = List.map (evaluate_expr ctx) args in match Marked.unmark e1 with - | EAbs (binder, _) -> + | EAbs { binder; _ } -> if Bindlib.mbinder_arity binder = List.length args then evaluate_expr ctx (Bindlib.msubst binder (Array.of_list (List.map Marked.unmark args))) @@ -327,7 +328,7 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = "wrong function call, expected %d arguments, got %d" (Bindlib.mbinder_arity binder) (List.length args) - | EOp op -> + | EOp { op; _ } -> Marked.same_mark_as (evaluate_operator ctx op (Expr.pos e) args) e | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> @@ -335,69 +336,66 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = "function has not been reduced to a lambda at evaluation (should not \ happen if the term was well-typed") | EAbs _ | ELit _ | EOp _ -> e (* these are values *) - | ETuple (es, s) -> - let new_es = List.map (evaluate_expr ctx) es in - if List.exists is_empty_error new_es then + | EStruct { fields = es; name } -> + let new_es = StructField.Map.map (evaluate_expr ctx) es in + if StructField.Map.exists (fun _ e -> is_empty_error e) new_es then Marked.same_mark_as (ELit LEmptyError) e - else Marked.same_mark_as (ETuple (new_es, s)) e - | ETupleAccess (e1, n, s, _) -> ( + else Marked.same_mark_as (EStruct { fields = new_es; name }) e + | EStructAccess { e = e1; name = s; field } -> ( let e1 = evaluate_expr ctx e1 in match Marked.unmark e1 with - | ETuple (es, s') -> ( - (match s, s' with - | None, None -> () - | Some s, Some s' when s = s' -> () - | _ -> + | EStruct { fields = es; name = s' } -> ( + if not (StructName.equal s s') then Errors.raise_multispanned_error [None, Expr.pos e; None, Expr.pos e1] - "Error during tuple access: not the same structs (should not happen \ - if the term was well-typed)"); - match List.nth_opt es n with + "Error during struct access: not the same structs (should not happen \ + if the term was well-typed)"; + match StructField.Map.find_opt field es with | Some e' -> e' | None -> Errors.raise_spanned_error (Expr.pos e1) - "The tuple has %d components but the %i-th element was requested \ - (should not happen if the term was well-type)" - (List.length es) n) + "Invalid field access %a in struct %a (should not happen if the term \ + was well-typed)" + StructField.format_t field StructName.format_t s) | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> Errors.raise_spanned_error (Expr.pos e1) - "The expression %a should be a tuple with %d components but is not \ - (should not happen if the term was well-typed)" + "The expression %a should be a struct %a but is not (should not happen \ + if the term was well-typed)" (Expr.format ctx ~debug:true) - e n) - | EInj (e1, n, en, ts) -> + e StructName.format_t s) + | EInj { e = e1; name; cons } -> let e1' = evaluate_expr ctx e1 in - if is_empty_error e1' then Marked.same_mark_as (ELit LEmptyError) e - else Marked.same_mark_as (EInj (e1', n, en, ts)) e - | EMatch (e1, es, e_name) -> ( + if is_empty_error e then Marked.same_mark_as (ELit LEmptyError) e + else Marked.same_mark_as (EInj { e = e1'; name; cons }) e + | EMatch { e = e1; cases = es; name } -> ( let e1 = evaluate_expr ctx e1 in match Marked.unmark e1 with - | EInj (e1, n, e_name', _) -> - if e_name <> e_name' then + | EInj { e = e1; cons; name = name' } -> + if not (EnumName.equal name name') then Errors.raise_multispanned_error [None, Expr.pos e; None, Expr.pos e1] "Error during match: two different enums found (should not happen if \ the term was well-typed)"; let es_n = - match List.nth_opt es n with + match EnumConstructor.Map.find_opt cons es with | Some es_n -> es_n | None -> Errors.raise_spanned_error (Expr.pos e) "sum type index error (should not happen if the term was \ well-typed)" in - let new_e = Marked.same_mark_as (EApp (es_n, [e1])) e in + let new_e = Marked.same_mark_as (EApp { f = es_n; args = [e1] }) e in evaluate_expr ctx new_e | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> Errors.raise_spanned_error (Expr.pos e1) "Expected a term having a sum type as an argument to a match (should \ not happen if the term was well-typed") - | EDefault (exceptions, just, cons) -> ( - let exceptions = List.map (evaluate_expr ctx) exceptions in - let empty_count = List.length (List.filter is_empty_error exceptions) in - match List.length exceptions - empty_count with + | EDefault { excepts; just; cons } -> ( + let excepts = List.map (evaluate_expr ctx) excepts in + let empty_count = List.length (List.filter is_empty_error excepts) in + match List.length excepts - empty_count with | 0 -> ( let just = evaluate_expr ctx just in match Marked.unmark just with @@ -408,19 +406,19 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = Errors.raise_spanned_error (Expr.pos e) "Default justification has not been reduced to a boolean at \ evaluation (should not happen if the term was well-typed") - | 1 -> List.find (fun sub -> not (is_empty_error sub)) exceptions + | 1 -> List.find (fun sub -> not (is_empty_error sub)) excepts | _ -> Errors.raise_multispanned_error (List.map (fun except -> Some "This consequence has a valid justification:", Expr.pos except) - (List.filter (fun sub -> not (is_empty_error sub)) exceptions)) + (List.filter (fun sub -> not (is_empty_error sub)) excepts)) "There is a conflict between multiple valid consequences for assigning \ the same variable.") - | EIfThenElse (cond, et, ef) -> ( + | EIfThenElse { cond; etrue; efalse } -> ( match Marked.unmark (evaluate_expr ctx cond) with - | ELit (LBool true) -> evaluate_expr ctx et - | ELit (LBool false) -> evaluate_expr ctx ef + | ELit (LBool true) -> evaluate_expr ctx etrue + | ELit (LBool false) -> evaluate_expr ctx efalse | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> Errors.raise_spanned_error (Expr.pos cond) @@ -431,7 +429,7 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = if List.exists is_empty_error new_es then Marked.same_mark_as (ELit LEmptyError) e else Marked.same_mark_as (EArray new_es) e - | ErrorOnEmpty e' -> + | EErrorOnEmpty e' -> let e' = evaluate_expr ctx e' in if Marked.unmark e' = ELit LEmptyError then Errors.raise_spanned_error (Expr.pos e') @@ -443,23 +441,44 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = | ELit (LBool true) -> Marked.same_mark_as (ELit LUnit) e' | ELit (LBool false) -> ( match Marked.unmark e' with - | ErrorOnEmpty + | EErrorOnEmpty ( EApp - ((EOp (Binop op), _), [((ELit _, _) as e1); ((ELit _, _) as e2)]), - _ ) - | EApp - ( (EOp (Unop (Log _)), _), - [ - ( EApp - ( (EOp (Binop op), _), - [((ELit _, _) as e1); ((ELit _, _) as e2)] ), - _ ); - ] ) - | EApp ((EOp (Binop op), _), [((ELit _, _) as e1); ((ELit _, _) as e2)]) - -> + { + f = EOp { op; _ }, _; + args = [((ELit _, _) as e1); ((ELit _, _) as e2)]; + }, + _ ) -> Errors.raise_spanned_error (Expr.pos e') "Assertion failed: %a %a %a" (Expr.format ctx ~debug:false) - e1 Print.binop op + e1 Print.operator op + (Expr.format ctx ~debug:false) + e2 + | EApp + { + f = EOp { op = Log _; _ }, _; + args = + [ + ( EApp + { + f = EOp { op; _ }, _; + args = [((ELit _, _) as e1); ((ELit _, _) as e2)]; + }, + _ ); + ]; + } -> + Errors.raise_spanned_error (Expr.pos e') "Assertion failed: %a %a %a" + (Expr.format ctx ~debug:false) + e1 Print.operator op + (Expr.format ctx ~debug:false) + e2 + | EApp + { + f = EOp { op; _ }, _; + args = [((ELit _, _) as e1); ((ELit _, _) as e2)]; + } -> + Errors.raise_spanned_error (Expr.pos e') "Assertion failed: %a %a %a" + (Expr.format ctx ~debug:false) + e1 Print.operator op (Expr.format ctx ~debug:false) e2 | _ -> @@ -479,19 +498,22 @@ let interpret_program : fun (ctx : decl_ctx) (e : 'm Ast.expr) : (Uid.MarkedString.info * 'm Ast.expr) list -> match evaluate_expr ctx e with - | (EAbs (_, [((TStruct s_in, _) as _targs)]), mark_e) as e -> begin + | (EAbs { tys = [((TStruct s_in, _) as _targs)]; _ }, mark_e) as e -> begin (* At this point, the interpreter seeks to execute the scope but does not have a way to retrieve input values from the command line. [taus] contain the types of the scope arguments. For [context] arguments, we can provide an empty thunked term. But for [input] arguments of another type, we cannot provide anything so we have to fail. *) - let taus = StructMap.find s_in ctx.ctx_structs in + let taus = StructName.Map.find s_in ctx.ctx_structs in let application_term = - List.map - (fun (_, ty) -> + StructField.Map.map + (fun ty -> match Marked.unmark ty with - | TArrow ((TLit TUnit, _), ty_in) -> - Expr.empty_thunked_term (Expr.with_ty mark_e ty_in) + | TArrow (ty_in, ty_out) -> + Expr.make_abs + [| Var.make "_" |] + (Bindlib.box (ELit LEmptyError), Expr.with_ty mark_e ty_out) + [ty_in] (Expr.mark_pos mark_e) | _ -> Errors.raise_spanned_error (Marked.get_mark ty) "This scope needs input arguments to be executed. But the Catala \ @@ -503,17 +525,14 @@ let interpret_program : in let to_interpret = Expr.make_app (Expr.box e) - [Expr.make_tuple application_term (Some s_in) mark_e] + [Expr.estruct s_in application_term mark_e] (Expr.pos e) in match Marked.unmark (evaluate_expr ctx (Expr.unbox to_interpret)) with - | ETuple (args, Some s_out) -> - let s_out_fields = - List.map - (fun (f, _) -> StructFieldName.get_info f) - (StructMap.find s_out ctx.ctx_structs) - in - List.map2 (fun arg var -> var, arg) args s_out_fields + | EStruct { fields; _ } -> + List.map + (fun (fld, e) -> StructField.get_info fld, e) + (StructField.Map.bindings fields) | _ -> Errors.raise_spanned_error (Expr.pos e) "The interpretation of a program should always yield a struct \ diff --git a/compiler/dcalc/interpreter.mli b/compiler/dcalc/interpreter.mli index f117c0b4..1bc4e9c3 100644 --- a/compiler/dcalc/interpreter.mli +++ b/compiler/dcalc/interpreter.mli @@ -16,7 +16,7 @@ (** Reference interpreter for the default calculus *) -open Utils +open Catala_utils open Shared_ast val evaluate_expr : decl_ctx -> 'm Ast.expr -> 'm Ast.expr diff --git a/compiler/dcalc/optimizations.ml b/compiler/dcalc/optimizations.ml index a51933e9..f261de52 100644 --- a/compiler/dcalc/optimizations.ml +++ b/compiler/dcalc/optimizations.ml @@ -14,7 +14,7 @@ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast open Ast @@ -24,179 +24,206 @@ type partial_evaluation_ctx = { } let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm expr) : - 'm expr Bindlib.box = + (dcalc, 'm mark) boxed_gexpr = + (* We proceed bottom-up, first apply on the subterms *) + let e = Expr.map ~f:(partial_evaluation ctx) e in let mark = Marked.get_mark e in - let rec_helper = partial_evaluation ctx in - match Marked.unmark e with - | EApp - ( (( EOp (Unop Not), _ - | EApp ((EOp (Unop (Log _)), _), [(EOp (Unop Not), _)]), _ ) as op), - [e1] ) -> - (* reduction of logical not *) - (Bindlib.box_apply (fun e1 -> - match e1 with - | ELit (LBool false), _ -> ELit (LBool true), mark - | ELit (LBool true), _ -> ELit (LBool false), mark - | _ -> EApp (op, [e1]), mark)) - (rec_helper e1) - | EApp - ( (( EOp (Binop Or), _ - | EApp ((EOp (Unop (Log _)), _), [(EOp (Binop Or), _)]), _ ) as op), - [e1; e2] ) -> - (* reduction of logical or *) - (Bindlib.box_apply2 (fun e1 e2 -> - match e1, e2 with - | (ELit (LBool false), _), new_e | new_e, (ELit (LBool false), _) -> - new_e - | (ELit (LBool true), _), _ | _, (ELit (LBool true), _) -> - ELit (LBool true), mark - | _ -> EApp (op, [e1; e2]), mark)) - (rec_helper e1) (rec_helper e2) - | EApp - ( (( EOp (Binop And), _ - | EApp ((EOp (Unop (Log _)), _), [(EOp (Binop And), _)]), _ ) as op), - [e1; e2] ) -> - (* reduction of logical and *) - (Bindlib.box_apply2 (fun e1 e2 -> - match e1, e2 with - | (ELit (LBool true), _), new_e | new_e, (ELit (LBool true), _) -> - new_e - | (ELit (LBool false), _), _ | _, (ELit (LBool false), _) -> - ELit (LBool false), mark - | _ -> EApp (op, [e1; e2]), mark)) - (rec_helper e1) (rec_helper e2) - | EVar x -> Bindlib.box_apply (fun x -> x, mark) (Bindlib.box_var x) - | ETuple (args, s_name) -> - Bindlib.box_apply - (fun args -> ETuple (args, s_name), mark) - (List.map rec_helper args |> Bindlib.box_list) - | ETupleAccess (arg, i, s_name, typs) -> - Bindlib.box_apply - (fun arg -> ETupleAccess (arg, i, s_name, typs), mark) - (rec_helper arg) - | EInj (arg, i, e_name, typs) -> - Bindlib.box_apply - (fun arg -> EInj (arg, i, e_name, typs), mark) - (rec_helper arg) - | EMatch (arg, arms, e_name) -> - Bindlib.box_apply2 - (fun arg arms -> - match arg, arms with - | (EInj (e1, i, e_name', _ts), _), _ - when EnumName.compare e_name e_name' = 0 -> - (* iota reduction *) - EApp (List.nth arms i, [e1]), mark - | _ -> EMatch (arg, arms, e_name), mark) - (rec_helper arg) - (List.map rec_helper arms |> Bindlib.box_list) - | EArray args -> - Bindlib.box_apply - (fun args -> EArray args, mark) - (List.map rec_helper args |> Bindlib.box_list) - | ELit l -> Bindlib.box (ELit l, mark) - | EAbs (binder, typs) -> - let vars, body = Bindlib.unmbind binder in - let new_body = rec_helper body in - let new_binder = Bindlib.bind_mvar vars new_body in - Bindlib.box_apply (fun binder -> EAbs (binder, typs), mark) new_binder - | EApp (f, args) -> - Bindlib.box_apply2 - (fun f args -> - match Marked.unmark f with - | EAbs (binder, _ts) -> - (* beta reduction *) - Bindlib.msubst binder (List.map fst args |> Array.of_list) - | _ -> EApp (f, args), mark) - (rec_helper f) - (List.map rec_helper args |> Bindlib.box_list) - | EAssert e1 -> Bindlib.box_apply (fun e1 -> EAssert e1, mark) (rec_helper e1) - | EOp op -> Bindlib.box (EOp op, mark) - | EDefault (exceptions, just, cons) -> - Bindlib.box_apply3 - (fun exceptions just cons -> - (* TODO: mechanically prove each of these optimizations correct :) *) - match - ( List.filter - (fun except -> - match Marked.unmark except with - | ELit LEmptyError -> false - | _ -> true) - exceptions - (* we can discard the exceptions that are always empty error *), - just, - cons ) - with - | exceptions, just, cons - when List.fold_left - (fun nb except -> if Expr.is_value except then nb + 1 else nb) - 0 exceptions - > 1 -> - (* at this point we know a conflict error will be triggered so we just - feed the expression to the interpreter that will print the - beautiful right error message *) - Interpreter.evaluate_expr ctx.decl_ctx - (EDefault (exceptions, just, cons), mark) - | [except], _, _ when Expr.is_value except -> + (* Then reduce the parent node *) + let reduce e = + (* Todo: improve the handling of eapp(log,elit) cases here, it obfuscates + the matches and the log calls are not preserved, which would be a good + property *) + match Marked.unmark e with + | EApp + { + f = + ( EOp { op = Not; _ }, _ + | ( EApp + { + f = EOp { op = Log _; _ }, _; + args = [(EOp { op = Not; _ }, _)]; + }, + _ ) ) as op; + args = [e1]; + } -> ( + (* reduction of logical not *) + match e1 with + | ELit (LBool false), _ -> ELit (LBool true) + | ELit (LBool true), _ -> ELit (LBool false) + | e1 -> EApp { f = op; args = [e1] }) + | EApp + { + f = + ( EOp { op = Or; _ }, _ + | ( EApp + { + f = EOp { op = Log _; _ }, _; + args = [(EOp { op = Or; _ }, _)]; + }, + _ ) ) as op; + args = [e1; e2]; + } -> ( + (* reduction of logical or *) + match e1, e2 with + | (ELit (LBool false), _), new_e | new_e, (ELit (LBool false), _) -> + Marked.unmark new_e + | (ELit (LBool true), _), _ | _, (ELit (LBool true), _) -> + ELit (LBool true) + | _ -> EApp { f = op; args = [e1; e2] }) + | EApp + { + f = + ( EOp { op = And; _ }, _ + | ( EApp + { + f = EOp { op = Log _; _ }, _; + args = [(EOp { op = And; _ }, _)]; + }, + _ ) ) as op; + args = [e1; e2]; + } -> ( + (* reduction of logical and *) + match e1, e2 with + | (ELit (LBool true), _), new_e | new_e, (ELit (LBool true), _) -> + Marked.unmark new_e + | (ELit (LBool false), _), _ | _, (ELit (LBool false), _) -> + ELit (LBool false) + | _ -> EApp { f = op; args = [e1; e2] }) + | EMatch { e = EInj { e; name = name1; cons }, _; cases; name } + when EnumName.equal name name1 -> + (* iota reduction *) + EApp { f = EnumConstructor.Map.find cons cases; args = [e] } + | EApp { f = EAbs { binder; _ }, _; args } -> + (* beta reduction *) + Marked.unmark (Bindlib.msubst binder (List.map fst args |> Array.of_list)) + | EDefault { excepts; just; cons } -> ( + (* TODO: mechanically prove each of these optimizations correct :) *) + let excepts = + List.filter + (fun except -> Marked.unmark except <> ELit LEmptyError) + excepts + (* we can discard the exceptions that are always empty error *) + in + let value_except_count = + List.fold_left + (fun nb except -> if Expr.is_value except then nb + 1 else nb) + 0 excepts + in + if value_except_count > 1 then + (* at this point we know a conflict error will be triggered so we just + feed the expression to the interpreter that will print the beautiful + right error message *) + Marked.unmark (Interpreter.evaluate_expr ctx.decl_ctx e) + else + match excepts, just with + | [except], _ when Expr.is_value except -> (* if there is only one exception and it is a non-empty value it is always chosen *) - except + Marked.unmark except | ( [], ( ( ELit (LBool true) - | EApp ((EOp (Unop (Log _)), _), [(ELit (LBool true), _)]) ), - _ ), - cons ) -> - cons + | EApp + { + f = EOp { op = Log _; _ }, _; + args = [(ELit (LBool true), _)]; + } ), + _ ) ) -> + Marked.unmark cons | ( [], ( ( ELit (LBool false) - | EApp ((EOp (Unop (Log _)), _), [(ELit (LBool false), _)]) ), - _ ), - _ ) -> - ELit LEmptyError, mark - | [], just, cons when not !Cli.avoid_exceptions_flag -> + | EApp + { + f = EOp { op = Log _; _ }, _; + args = [(ELit (LBool false), _)]; + } ), + _ ) ) -> + ELit LEmptyError + | [], just when not !Cli.avoid_exceptions_flag -> (* without exceptions, a default is just an [if then else] raising an error in the else case. This exception is only valid in the context of compilation_with_exceptions, so we desactivate with a global flag to know if we will be compiling using exceptions or the option - monad. *) - EIfThenElse (just, cons, (ELit LEmptyError, mark)), mark - | exceptions, just, cons -> EDefault (exceptions, just, cons), mark) - (List.map rec_helper exceptions |> Bindlib.box_list) - (rec_helper just) (rec_helper cons) - | EIfThenElse (e1, e2, e3) -> - Bindlib.box_apply3 - (fun e1 e2 e3 -> - match Marked.unmark e1, Marked.unmark e2, Marked.unmark e3 with - | ELit (LBool true), _, _ - | EApp ((EOp (Unop (Log _)), _), [(ELit (LBool true), _)]), _, _ -> - e2 - | ELit (LBool false), _, _ - | EApp ((EOp (Unop (Log _)), _), [(ELit (LBool false), _)]), _, _ -> - e3 - | ( _, - ( ELit (LBool true) - | EApp ((EOp (Unop (Log _)), _), [(ELit (LBool true), _)]) ), - ( ELit (LBool false) - | EApp ((EOp (Unop (Log _)), _), [(ELit (LBool false), _)]) ) ) -> - e1 - | _ when Expr.equal e2 e3 -> e2 - | _ -> EIfThenElse (e1, e2, e3), mark) - (rec_helper e1) (rec_helper e2) (rec_helper e3) - | ErrorOnEmpty e1 -> - Bindlib.box_apply (fun e1 -> ErrorOnEmpty e1, mark) (rec_helper e1) + monad. FIXME: move this optimisation somewhere else to avoid this + check *) + EIfThenElse + { cond = just; etrue = cons; efalse = ELit LEmptyError, mark } + | excepts, just -> EDefault { excepts; just; cons }) + | EIfThenElse + { + cond = + ( ELit (LBool true), _ + | ( EApp + { + f = EOp { op = Log _; _ }, _; + args = [(ELit (LBool true), _)]; + }, + _ ) ); + etrue; + _; + } -> + Marked.unmark etrue + | EIfThenElse + { + cond = + ( ( ELit (LBool false) + | EApp + { + f = EOp { op = Log _; _ }, _; + args = [(ELit (LBool false), _)]; + } ), + _ ); + efalse; + _; + } -> + Marked.unmark efalse + | EIfThenElse + { + cond; + etrue = + ( ( ELit (LBool btrue) + | EApp + { + f = EOp { op = Log _; _ }, _; + args = [(ELit (LBool btrue), _)]; + } ), + _ ); + efalse = + ( ( ELit (LBool bfalse) + | EApp + { + f = EOp { op = Log _; _ }, _; + args = [(ELit (LBool bfalse), _)]; + } ), + _ ); + } -> + if btrue && not bfalse then Marked.unmark cond + else if (not btrue) && bfalse then + EApp + { + f = EOp { op = Not; tys = [TLit TBool, Expr.mark_pos mark] }, mark; + args = [cond]; + } + (* note: this last call eliminates the condition & might skip log calls + as well *) + else (* btrue = bfalse *) ELit (LBool btrue) + | e -> e + in + Expr.Box.app1 e reduce mark let optimize_expr (decl_ctx : decl_ctx) (e : 'm expr) = partial_evaluation { var_values = Var.Map.empty; decl_ctx } e let rec scope_lets_map - (t : 'a -> 'm expr -> 'm expr Bindlib.box) + (t : 'a -> 'm expr -> (dcalc, 'm mark) boxed_gexpr) (ctx : 'a) (scope_body_expr : 'm expr scope_body_expr) : 'm expr scope_body_expr Bindlib.box = match scope_body_expr with - | Result e -> Bindlib.box_apply (fun e' -> Result e') (t ctx e) + | Result e -> + Bindlib.box_apply (fun e' -> Result e') (Expr.Box.lift (t ctx e)) | ScopeLet scope_let -> let var, next = Bindlib.unbind scope_let.scope_let_next in - let new_scope_let_expr = t ctx scope_let.scope_let_expr in + let new_scope_let_expr = Expr.Box.lift (t ctx scope_let.scope_let_expr) in let new_next = scope_lets_map t ctx next in let new_next = Bindlib.bind_var var new_next in Bindlib.box_apply2 @@ -210,7 +237,7 @@ let rec scope_lets_map new_scope_let_expr new_next let rec scopes_map - (t : 'a -> 'm expr -> 'm expr Bindlib.box) + (t : 'a -> 'm expr -> (dcalc, 'm mark) boxed_gexpr) (ctx : 'a) (scopes : 'm expr scopes) : 'm expr scopes Bindlib.box = match scopes with @@ -241,7 +268,7 @@ let rec scopes_map new_scope_body_expr new_scope_next let program_map - (t : 'a -> 'm expr -> 'm expr Bindlib.box) + (t : 'a -> 'm expr -> (dcalc, 'm mark) boxed_gexpr) (ctx : 'a) (p : 'm program) : 'm program Bindlib.box = Bindlib.box_apply diff --git a/compiler/dcalc/optimizations.mli b/compiler/dcalc/optimizations.mli index ce1be264..30491809 100644 --- a/compiler/dcalc/optimizations.mli +++ b/compiler/dcalc/optimizations.mli @@ -20,5 +20,5 @@ open Shared_ast open Ast -val optimize_expr : decl_ctx -> 'm expr -> 'm expr Bindlib.box +val optimize_expr : decl_ctx -> 'm expr -> (dcalc, 'm mark) boxed_gexpr val optimize_program : 'm program -> 'm program diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index 660b68c2..025a5bbd 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -16,25 +16,11 @@ (** Abstract syntax tree of the desugared representation *) -open Utils +open Catala_utils open Shared_ast (** {1 Names, Maps and Keys} *) -module IdentMap : Map.S with type key = String.t = Map.Make (String) - -module RuleName : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - -module RuleMap : Map.S with type key = RuleName.t = Map.Make (RuleName) -module RuleSet : Set.S with type elt = RuleName.t = Set.Make (RuleName) - -module LabelName : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - -module LabelMap : Map.S with type key = LabelName.t = Map.Make (LabelName) -module LabelSet : Set.S with type elt = LabelName.t = Set.Make (LabelName) - (** Inside a scope, a definition can refer either to a scope def, or a subscope def *) module ScopeDef = struct @@ -103,6 +89,9 @@ module ExprMap = Map.Make (struct let compare = Expr.compare end) +type io_input = NoInput | OnlyInput | Reentrant +type io = { io_output : bool Marked.pos; io_input : io_input Marked.pos } + type exception_situation = | BaseCase | ExceptionToLabel of LabelName.t Marked.pos @@ -136,7 +125,7 @@ module Rule = struct Expr.compare c1 c2 | n -> n) | Some (v1, t1), Some (v2, t2) -> ( - match Shared_ast.Expr.compare_typ t1 t2 with + match Type.compare t1 t2 with | 0 -> ( let open Bindlib in let b1 = unbox (bind_var v1 (Expr.Box.lift r1.rule_just)) in @@ -189,29 +178,32 @@ type meta_assertion = | VariesWith of unit * variation_typ Marked.pos option type scope_def = { - scope_def_rules : rule RuleMap.t; + scope_def_rules : rule RuleName.Map.t; scope_def_typ : typ; scope_def_is_condition : bool; - scope_def_io : Scopelang.Ast.io; + scope_def_io : io; } type var_or_states = WholeVar | States of StateName.t list type scope = { - scope_vars : var_or_states ScopeVarMap.t; - scope_sub_scopes : ScopeName.t SubScopeMap.t; + scope_vars : var_or_states ScopeVar.Map.t; + scope_sub_scopes : ScopeName.t SubScopeName.Map.t; scope_uid : ScopeName.t; scope_defs : scope_def ScopeDefMap.t; scope_assertions : assertion list; scope_meta_assertions : meta_assertion list; } -type program = { program_scopes : scope ScopeMap.t; program_ctx : decl_ctx } +type program = { + program_scopes : scope ScopeName.Map.t; + program_ctx : decl_ctx; +} let rec locations_used e : LocationSet.t = match e with | ELocation l, m -> LocationSet.singleton (l, Expr.mark_pos m) - | EAbs (binder, _), _ -> + | EAbs { binder; _ }, _ -> let _, body = Bindlib.unmbind binder in locations_used body | e -> @@ -219,7 +211,7 @@ let rec locations_used e : LocationSet.t = (fun e -> LocationSet.union (locations_used e)) e LocationSet.empty -let free_variables (def : rule RuleMap.t) : Pos.t ScopeDefMap.t = +let free_variables (def : rule RuleName.Map.t) : Pos.t ScopeDefMap.t = let add_locs (acc : Pos.t ScopeDefMap.t) (locs : LocationSet.t) : Pos.t ScopeDefMap.t = LocationSet.fold @@ -235,7 +227,7 @@ let free_variables (def : rule RuleMap.t) : Pos.t ScopeDefMap.t = loc_pos acc) locs acc in - RuleMap.fold + RuleName.Map.fold (fun _ rule acc -> let locs = LocationSet.union diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index 713cff92..0d80d781 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -16,19 +16,9 @@ (** Abstract syntax tree of the desugared representation *) -open Utils +open Catala_utils open Shared_ast -(** {1 Names, Maps and Keys} *) - -module IdentMap : Map.S with type key = String.t -module RuleName : Uid.Id with type info = Uid.MarkedString.info -module RuleMap : Map.S with type key = RuleName.t -module RuleSet : Set.S with type elt = RuleName.t -module LabelName : Uid.Id with type info = Uid.MarkedString.info -module LabelMap : Map.S with type key = LabelName.t -module LabelSet : Set.S with type elt = LabelName.t - (** Inside a scope, a definition can refer either to a scope def, or a subscope def *) module ScopeDef : sig @@ -88,27 +78,51 @@ type meta_assertion = | FixedBy of reference_typ Marked.pos | VariesWith of unit * variation_typ Marked.pos option +(** This type characterizes the three levels of visibility for a given scope + variable with regards to the scope's input and possible redefinitions inside + the scope.. *) +type io_input = + | NoInput + (** For an internal variable defined only in the scope, and does not + appear in the input. *) + | OnlyInput + (** For variables that should not be redefined in the scope, because they + appear in the input. *) + | Reentrant + (** For variables defined in the scope that can also be redefined by the + caller as they appear in the input. *) + +type io = { + io_output : bool Marked.pos; + (** [true] is present in the output of the scope. *) + io_input : io_input Marked.pos; +} +(** Characterization of the input/output status of a scope variable. *) + type scope_def = { - scope_def_rules : rule RuleMap.t; + scope_def_rules : rule RuleName.Map.t; scope_def_typ : typ; scope_def_is_condition : bool; - scope_def_io : Scopelang.Ast.io; + scope_def_io : io; } type var_or_states = WholeVar | States of StateName.t list type scope = { - scope_vars : var_or_states ScopeVarMap.t; - scope_sub_scopes : ScopeName.t SubScopeMap.t; + scope_vars : var_or_states ScopeVar.Map.t; + scope_sub_scopes : ScopeName.t SubScopeName.Map.t; scope_uid : ScopeName.t; scope_defs : scope_def ScopeDefMap.t; scope_assertions : assertion list; scope_meta_assertions : meta_assertion list; } -type program = { program_scopes : scope ScopeMap.t; program_ctx : decl_ctx } +type program = { + program_scopes : scope ScopeName.Map.t; + program_ctx : decl_ctx; +} (** {1 Helpers} *) val locations_used : expr -> LocationSet.t -val free_variables : rule RuleMap.t -> Pos.t ScopeDefMap.t +val free_variables : rule RuleName.Map.t -> Pos.t ScopeDefMap.t diff --git a/compiler/desugared/dependency.ml b/compiler/desugared/dependency.ml index 521ddb4d..a8233c55 100644 --- a/compiler/desugared/dependency.ml +++ b/compiler/desugared/dependency.ml @@ -17,7 +17,7 @@ (** Scope dependencies computations using {{:http://ocamlgraph.lri.fr/} OCamlgraph} *) -open Utils +open Catala_utils open Shared_ast (** {1 Scope variables dependency graph} *) @@ -143,7 +143,7 @@ let build_scope_dependencies (scope : Ast.scope) : ScopeDependencies.t = let g = ScopeDependencies.empty in (* Add all the vertices to the graph *) let g = - ScopeVarMap.fold + ScopeVar.Map.fold (fun (v : ScopeVar.t) var_or_state g -> match var_or_state with | Ast.WholeVar -> ScopeDependencies.add_vertex g (Vertex.Var (v, None)) @@ -155,7 +155,7 @@ let build_scope_dependencies (scope : Ast.scope) : ScopeDependencies.t = scope.scope_vars g in let g = - SubScopeMap.fold + SubScopeName.Map.fold (fun (v : SubScopeName.t) _ g -> ScopeDependencies.add_vertex g (Vertex.SubScope v)) scope.scope_sub_scopes g @@ -229,10 +229,10 @@ let build_scope_dependencies (scope : Ast.scope) : ScopeDependencies.t = (** {2 Graph declaration} *) module ExceptionVertex = struct - include Ast.RuleSet + include RuleName.Set let hash (x : t) : int = - Ast.RuleSet.fold (fun r acc -> Int.logxor (Ast.RuleName.hash r) acc) x 0 + RuleName.Set.fold (fun r acc -> Int.logxor (RuleName.hash r) acc) x 0 let equal x y = compare x y = 0 end @@ -257,13 +257,13 @@ module ExceptionsSCC = Graph.Components.Make (ExceptionsDependencies) (** {2 Graph computations} *) type exception_edge = { - label_from : Ast.LabelName.t; - label_to : Ast.LabelName.t; + label_from : LabelName.t; + label_to : LabelName.t; edge_positions : Pos.t list; } let build_exceptions_graph - (def : Ast.rule Ast.RuleMap.t) + (def : Ast.rule RuleName.Map.t) (def_info : Ast.ScopeDef.t) : ExceptionsDependencies.t = (* First we partition the definitions into groups bearing the same label. To handle the rules that were not labeled by the user, we create implicit @@ -271,63 +271,59 @@ let build_exceptions_graph (* All the rules of the form [definition x ...] are base case with no explicit label, so they should share this implicit label. *) - let base_case_implicit_label = - Ast.LabelName.fresh ("base_case", Pos.no_pos) - in + let base_case_implicit_label = LabelName.fresh ("base_case", Pos.no_pos) in (* When declaring [exception definition x ...], it means there is a unique rule [R] to which this can be an exception to. So we give a unique label to all the rules that are implicitly exceptions to rule [R]. *) - let exception_to_rule_implicit_labels : Ast.LabelName.t Ast.RuleMap.t = - Ast.RuleMap.fold + let exception_to_rule_implicit_labels : LabelName.t RuleName.Map.t = + RuleName.Map.fold (fun _ rule_from exception_to_rule_implicit_labels -> match rule_from.Ast.rule_exception with | Ast.ExceptionToRule (rule_to, _) -> ( match - Ast.RuleMap.find_opt rule_to exception_to_rule_implicit_labels + RuleName.Map.find_opt rule_to exception_to_rule_implicit_labels with | Some _ -> (* we already created the label *) exception_to_rule_implicit_labels | None -> - Ast.RuleMap.add rule_to - (Ast.LabelName.fresh - ( "exception_to_" - ^ Marked.unmark (Ast.RuleName.get_info rule_to), + RuleName.Map.add rule_to + (LabelName.fresh + ( "exception_to_" ^ Marked.unmark (RuleName.get_info rule_to), Pos.no_pos )) exception_to_rule_implicit_labels) | _ -> exception_to_rule_implicit_labels) - def Ast.RuleMap.empty + def RuleName.Map.empty in (* When declaring [exception foo_l definition x ...], the rule is exception to all the rules sharing label [foo_l]. So we give a unique label to all the rules that are implicitly exceptions to rule [foo_l]. *) - let exception_to_label_implicit_labels : Ast.LabelName.t Ast.LabelMap.t = - Ast.RuleMap.fold + let exception_to_label_implicit_labels : LabelName.t LabelName.Map.t = + RuleName.Map.fold (fun _ rule_from - (exception_to_label_implicit_labels : Ast.LabelName.t Ast.LabelMap.t) -> + (exception_to_label_implicit_labels : LabelName.t LabelName.Map.t) -> match rule_from.Ast.rule_exception with | Ast.ExceptionToLabel (label_to, _) -> ( match - Ast.LabelMap.find_opt label_to exception_to_label_implicit_labels + LabelName.Map.find_opt label_to exception_to_label_implicit_labels with | Some _ -> (* we already created the label *) exception_to_label_implicit_labels | None -> - Ast.LabelMap.add label_to - (Ast.LabelName.fresh - ( "exception_to_" - ^ Marked.unmark (Ast.LabelName.get_info label_to), + LabelName.Map.add label_to + (LabelName.fresh + ( "exception_to_" ^ Marked.unmark (LabelName.get_info label_to), Pos.no_pos )) exception_to_label_implicit_labels) | _ -> exception_to_label_implicit_labels) - def Ast.LabelMap.empty + def LabelName.Map.empty in (* Now we have all the labels necessary to partition our rules into sets, each one corresponding to a label relating to the structure of the exception DAG. *) let label_to_rule_sets = - Ast.RuleMap.fold + RuleName.Map.fold (fun rule_name rule rule_sets -> let label_of_rule = match rule.Ast.rule_label with @@ -336,23 +332,23 @@ let build_exceptions_graph match rule.Ast.rule_exception with | BaseCase -> base_case_implicit_label | ExceptionToRule (r, _) -> - Ast.RuleMap.find r exception_to_rule_implicit_labels + RuleName.Map.find r exception_to_rule_implicit_labels | ExceptionToLabel (l', _) -> - Ast.LabelMap.find l' exception_to_label_implicit_labels) + LabelName.Map.find l' exception_to_label_implicit_labels) in - Ast.LabelMap.update label_of_rule + LabelName.Map.update label_of_rule (fun rule_set -> match rule_set with - | None -> Some (Ast.RuleSet.singleton rule_name) - | Some rule_set -> Some (Ast.RuleSet.add rule_name rule_set)) + | None -> Some (RuleName.Set.singleton rule_name) + | Some rule_set -> Some (RuleName.Set.add rule_name rule_set)) rule_sets) - def Ast.LabelMap.empty + def LabelName.Map.empty in - let find_label_of_rule (r : Ast.RuleName.t) : Ast.LabelName.t = + let find_label_of_rule (r : RuleName.t) : LabelName.t = fst - (Ast.LabelMap.choose - (Ast.LabelMap.filter - (fun _ rule_set -> Ast.RuleSet.mem r rule_set) + (LabelName.Map.choose + (LabelName.Map.filter + (fun _ rule_set -> RuleName.Set.mem r rule_set) label_to_rule_sets)) in (* Next, we collect the exception edges between those groups of rules referred @@ -360,7 +356,7 @@ let build_exceptions_graph edges as they are declared at each rule but should be the same for all the rules of the same group. *) let exception_edges : exception_edge list = - Ast.RuleMap.fold + RuleName.Map.fold (fun rule_name rule exception_edges -> let label_from = find_label_of_rule rule_name in let label_to_and_pos = @@ -374,16 +370,16 @@ let build_exceptions_graph | Some (label_to, edge_pos) -> ( let other_edges_originating_from_same_label = List.filter - (fun edge -> Ast.LabelName.compare edge.label_from label_from = 0) + (fun edge -> LabelName.compare edge.label_from label_from = 0) exception_edges in (* We check the consistency*) - if Ast.LabelName.compare label_from label_to = 0 then + if LabelName.compare label_from label_to = 0 then Errors.raise_spanned_error edge_pos "Cannot define rule as an exception to itself"; List.iter (fun edge -> - if Ast.LabelName.compare edge.label_to label_to <> 0 then + if LabelName.compare edge.label_to label_to <> 0 then Errors.raise_multispanned_error (( Some "This declaration contradicts another exception \ @@ -401,8 +397,8 @@ let build_exceptions_graph let existing_edge = List.find_opt (fun edge -> - Ast.LabelName.compare edge.label_from label_from = 0 - && Ast.LabelName.compare edge.label_to label_to = 0) + LabelName.compare edge.label_from label_from = 0 + && LabelName.compare edge.label_to label_to = 0) exception_edges in match existing_edge with @@ -420,7 +416,7 @@ let build_exceptions_graph in (* We've got the vertices and the edges, let's build the graph! *) let g = - Ast.LabelMap.fold + LabelName.Map.fold (fun _label rule_set g -> ExceptionsDependencies.add_vertex g rule_set) label_to_rule_sets ExceptionsDependencies.empty in @@ -429,10 +425,10 @@ let build_exceptions_graph List.fold_left (fun g edge -> let rule_group_from = - Ast.LabelMap.find edge.label_from label_to_rule_sets + LabelName.Map.find edge.label_from label_to_rule_sets in let rule_group_to = - Ast.LabelMap.find edge.label_to label_to_rule_sets + LabelName.Map.find edge.label_to label_to_rule_sets in let edge = ExceptionsDependencies.E.create rule_group_from edge.edge_positions @@ -453,11 +449,10 @@ let check_for_exception_cycle (g : ExceptionsDependencies.t) : unit = let spans = List.flatten (List.map - (fun (vs : Ast.RuleSet.t) -> - let v = Ast.RuleSet.choose vs in + (fun (vs : RuleName.Set.t) -> + let v = RuleName.Set.choose vs in let var_str, var_info = - ( Format.asprintf "%a" Ast.RuleName.format_t v, - Ast.RuleName.get_info v ) + Format.asprintf "%a" RuleName.format_t v, RuleName.get_info v in let succs = ExceptionsDependencies.succ_e g vs in let _, edge_pos, _ = diff --git a/compiler/desugared/dependency.mli b/compiler/desugared/dependency.mli index 6e18b56a..d1b07cd2 100644 --- a/compiler/desugared/dependency.mli +++ b/compiler/desugared/dependency.mli @@ -17,7 +17,8 @@ (** Scope dependencies computations using {{:http://ocamlgraph.lri.fr/} OCamlgraph} *) -open Utils +open Catala_utils +open Shared_ast (** {1 Scope variables dependency graph} *) @@ -71,9 +72,9 @@ val build_scope_dependencies : Ast.scope -> ScopeDependencies.t module EdgeExceptions : Graph.Sig.ORDERED_TYPE_DFT with type t = Pos.t list module ExceptionsDependencies : - Graph.Sig.P with type V.t = Ast.RuleSet.t and type E.label = EdgeExceptions.t + Graph.Sig.P with type V.t = RuleName.Set.t and type E.label = EdgeExceptions.t val build_exceptions_graph : - Ast.rule Ast.RuleMap.t -> Ast.ScopeDef.t -> ExceptionsDependencies.t + Ast.rule RuleName.Map.t -> Ast.ScopeDef.t -> ExceptionsDependencies.t val check_for_exception_cycle : ExceptionsDependencies.t -> unit diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml deleted file mode 100644 index e6328d50..00000000 --- a/compiler/desugared/desugared_to_scope.ml +++ /dev/null @@ -1,670 +0,0 @@ -(* This file is part of the Catala compiler, a specification language for tax - and social benefits computation rules. Copyright (C) 2020 Inria, contributor: - Denis Merigoux - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy of - the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. *) - -(** Translation from {!module: Desugared.Ast} to {!module: Scopelang.Ast} *) - -open Utils -open Shared_ast - -(** {1 Expression translation}*) - -type target_scope_vars = - | WholeVar of ScopeVar.t - | States of (StateName.t * ScopeVar.t) list - -type ctx = { - scope_var_mapping : target_scope_vars ScopeVarMap.t; - var_mapping : (Ast.expr, untyped Scopelang.Ast.expr Var.t) Var.Map.t; -} - -let tag_with_log_entry - (e : untyped Scopelang.Ast.expr boxed) - (l : log_entry) - (markings : Utils.Uid.MarkedString.info list) : - untyped Scopelang.Ast.expr boxed = - Expr.eapp - (Expr.eop (Unop (Log (l, markings))) (Marked.get_mark e)) - [e] (Marked.get_mark e) - -let rec translate_expr (ctx : ctx) (e : Ast.expr) : - untyped Scopelang.Ast.expr boxed = - let m = Marked.get_mark e in - match Marked.unmark e with - | ELocation (SubScopeVar (s_name, ss_name, s_var)) -> - (* When referring to a subscope variable in an expression, we are referring - to the output, hence we take the last state. *) - let new_s_var = - match ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping with - | WholeVar new_s_var -> Marked.same_mark_as new_s_var s_var - | States states -> - Marked.same_mark_as (snd (List.hd (List.rev states))) s_var - in - Expr.elocation (SubScopeVar (s_name, ss_name, new_s_var)) m - | ELocation (DesugaredScopeVar (s_var, None)) -> - Expr.elocation - (ScopelangScopeVar - (match - ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping - with - | WholeVar new_s_var -> Marked.same_mark_as new_s_var s_var - | States _ -> failwith "should not happen")) - m - | ELocation (DesugaredScopeVar (s_var, Some state)) -> - Expr.elocation - (ScopelangScopeVar - (match - ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping - with - | WholeVar _ -> failwith "should not happen" - | States states -> Marked.same_mark_as (List.assoc state states) s_var)) - m - | EVar v -> Expr.evar (Var.Map.find v ctx.var_mapping) m - | EStruct (s_name, fields) -> - Expr.estruct s_name (StructFieldMap.map (translate_expr ctx) fields) m - | EStructAccess (e1, f_name, s_name) -> - Expr.estructaccess (translate_expr ctx e1) f_name s_name m - | EEnumInj (e1, cons, e_name) -> - Expr.eenuminj (translate_expr ctx e1) cons e_name m - | EMatchS (e1, e_name, arms) -> - Expr.ematchs (translate_expr ctx e1) e_name - (EnumConstructorMap.map (translate_expr ctx) arms) - m - | EScopeCall (sc_name, fields) -> - Expr.escopecall sc_name - (ScopeVarMap.fold - (fun v e fields' -> - let v' = - match ScopeVarMap.find v ctx.scope_var_mapping with - | WholeVar v' -> v' - | States ((_, v') :: _) -> - (* When there are multiple states, the input is always the first - one *) - v' - | States [] -> assert false - in - ScopeVarMap.add v' (translate_expr ctx e) fields') - fields ScopeVarMap.empty) - m - | ELit - (( LBool _ | LEmptyError | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ - | LDuration _ ) as l) -> - Expr.elit l m - | EAbs (binder, typs) -> - let vars, body = Bindlib.unmbind binder in - let new_vars = Array.map (fun var -> Var.make (Bindlib.name_of var)) vars in - let ctx = - List.fold_left2 - (fun ctx var new_var -> - { ctx with var_mapping = Var.Map.add var new_var ctx.var_mapping }) - ctx (Array.to_list vars) (Array.to_list new_vars) - in - Expr.eabs (Expr.bind new_vars (translate_expr ctx body)) typs m - | EApp (e1, args) -> - Expr.eapp (translate_expr ctx e1) (List.map (translate_expr ctx) args) m - | EOp op -> Expr.eop op m - | EDefault (excepts, just, cons) -> - Expr.edefault - (List.map (translate_expr ctx) excepts) - (translate_expr ctx just) (translate_expr ctx cons) m - | EIfThenElse (e1, e2, e3) -> - Expr.eifthenelse (translate_expr ctx e1) (translate_expr ctx e2) - (translate_expr ctx e3) m - | EArray args -> Expr.earray (List.map (translate_expr ctx) args) m - | ErrorOnEmpty e1 -> Expr.eerroronempty (translate_expr ctx e1) m - -(** {1 Rule tree construction} *) - -(** Intermediate representation for the exception tree of rules for a particular - scope definition. *) -type rule_tree = - | Leaf of Ast.rule list - (** Rules defining a base case piecewise. List is non-empty. *) - | Node of rule_tree list * Ast.rule list - (** [Node (exceptions, base_case)] is a list of exceptions to a non-empty - list of rules defining a base case piecewise. *) - -(** Transforms a flat list of rules into a tree, taking into account the - priorities declared between rules *) -let def_map_to_tree (def_info : Ast.ScopeDef.t) (def : Ast.rule Ast.RuleMap.t) : - rule_tree list = - let exc_graph = Dependency.build_exceptions_graph def def_info in - Dependency.check_for_exception_cycle exc_graph; - (* we start by the base cases: they are the vertices which have no - successors *) - let base_cases = - Dependency.ExceptionsDependencies.fold_vertex - (fun v base_cases -> - if Dependency.ExceptionsDependencies.out_degree exc_graph v = 0 then - v :: base_cases - else base_cases) - exc_graph [] - in - let rec build_tree (base_cases : Ast.RuleSet.t) : rule_tree = - let exceptions = - Dependency.ExceptionsDependencies.pred exc_graph base_cases - in - let base_case_as_rule_list = - List.map - (fun r -> Ast.RuleMap.find r def) - (Ast.RuleSet.elements base_cases) - in - match exceptions with - | [] -> Leaf base_case_as_rule_list - | _ -> Node (List.map build_tree exceptions, base_case_as_rule_list) - in - List.map build_tree base_cases - -(** From the {!type: rule_tree}, builds an {!constructor: Dcalc.EDefault} - expression in the scope language. The [~toplevel] parameter is used to know - when to place the toplevel binding in the case of functions. *) -let rec rule_tree_to_expr - ~(toplevel : bool) - (ctx : ctx) - (def_pos : Pos.t) - (is_func : Ast.expr Var.t option) - (tree : rule_tree) : untyped Scopelang.Ast.expr boxed = - let emark = Untyped { pos = def_pos } in - let exceptions, base_rules = - match tree with Leaf r -> [], r | Node (exceptions, r) -> exceptions, r - in - (* because each rule has its own variable parameter and we want to convert the - whole rule tree into a function, we need to perform some alpha-renaming of - all the expressions *) - let substitute_parameter (e : Ast.expr boxed) (rule : Ast.rule) : - Ast.expr boxed = - match is_func, rule.Ast.rule_parameter with - | Some new_param, Some (old_param, _) -> - let binder = Bindlib.bind_var old_param (Marked.unmark e) in - Marked.mark (Marked.get_mark e) - @@ Bindlib.box_apply2 - (fun binder new_param -> Bindlib.subst binder new_param) - binder - (Bindlib.box_var new_param) - | None, None -> e - | _ -> assert false - (* should not happen *) - in - let ctx = - match is_func with - | None -> ctx - | Some new_param -> ( - match Var.Map.find_opt new_param ctx.var_mapping with - | None -> - let new_param_scope = Var.make (Bindlib.name_of new_param) in - { - ctx with - var_mapping = Var.Map.add new_param new_param_scope ctx.var_mapping; - } - | Some _ -> - (* We only create a mapping if none exists because [rule_tree_to_expr] - is called recursively on the exceptions of the tree and we don't want - to create a new Scopelang variable for the parameter at each tree - level. *) - ctx) - in - let base_just_list = - List.map - (fun rule -> substitute_parameter rule.Ast.rule_just rule) - base_rules - in - let base_cons_list = - List.map - (fun rule -> substitute_parameter rule.Ast.rule_cons rule) - base_rules - in - let translate_and_unbox_list (list : Ast.expr boxed list) : - untyped Scopelang.Ast.expr boxed list = - List.map - (fun e -> - (* There are two levels of boxing here, the outermost is introduced by - the [translate_expr] function for which all of the bindings should - have been closed by now, so we can safely unbox. *) - translate_expr ctx (Expr.unbox e)) - list - in - let default_containing_base_cases = - Expr.make_default - (List.map2 - (fun base_just base_cons -> - Expr.make_default [] - (* Here we insert the logging command that records when a decision - is taken for the value of a variable. *) - (tag_with_log_entry base_just PosRecordIfTrueBool []) - base_cons emark) - (translate_and_unbox_list base_just_list) - (translate_and_unbox_list base_cons_list)) - (Expr.elit (LBool false) emark) - (Expr.elit LEmptyError emark) - emark - in - let exceptions = - List.map (rule_tree_to_expr ~toplevel:false ctx def_pos is_func) exceptions - in - let default = - Expr.make_default exceptions - (Expr.elit (LBool true) emark) - default_containing_base_cases emark - in - match is_func, (List.hd base_rules).Ast.rule_parameter with - | None, None -> default - | Some new_param, Some (_, typ) -> - if toplevel then - (* When we're creating a function from multiple defaults, we must check - that the result returned by the function is not empty *) - let default = Expr.eerroronempty default emark in - Expr.make_abs - [| Var.Map.find new_param ctx.var_mapping |] - default [typ] def_pos - else default - | _ -> (* should not happen *) assert false - -(** {1 AST translation} *) - -(** Translates a definition inside a scope, the resulting expression should be - an {!constructor: Dcalc.EDefault} *) -let translate_def - (ctx : ctx) - (def_info : Ast.ScopeDef.t) - (def : Ast.rule Ast.RuleMap.t) - (typ : typ) - (io : Scopelang.Ast.io) - ~(is_cond : bool) - ~(is_subscope_var : bool) : untyped Scopelang.Ast.expr boxed = - (* Here, we have to transform this list of rules into a default tree. *) - let is_def_func = - match Marked.unmark typ with TArrow (_, _) -> true | _ -> false - in - let is_rule_func _ (r : Ast.rule) : bool = - Option.is_some r.Ast.rule_parameter - in - let all_rules_func = Ast.RuleMap.for_all is_rule_func def in - let all_rules_not_func = - Ast.RuleMap.for_all (fun n r -> not (is_rule_func n r)) def - in - let is_def_func_param_typ : typ option = - if is_def_func && all_rules_func then - match Marked.unmark typ with - | TArrow (t_param, _) -> Some t_param - | _ -> - Errors.raise_spanned_error (Marked.get_mark typ) - "The definitions of %a are function but it doesn't have a function \ - type" - Ast.ScopeDef.format_t def_info - else if (not is_def_func) && all_rules_not_func then None - else - let spans = - List.map - (fun (_, r) -> - Some "This definition is a function:", Expr.pos r.Ast.rule_cons) - (Ast.RuleMap.bindings (Ast.RuleMap.filter is_rule_func def)) - @ List.map - (fun (_, r) -> - ( Some "This definition is not a function:", - Expr.pos r.Ast.rule_cons )) - (Ast.RuleMap.bindings - (Ast.RuleMap.filter (fun n r -> not (is_rule_func n r)) def)) - in - Errors.raise_multispanned_error spans - "some definitions of the same variable are functions while others \ - aren't" - in - let top_list = def_map_to_tree def_info def in - let is_input = - match Marked.unmark io.Scopelang.Ast.io_input with - | OnlyInput -> true - | _ -> false - in - let top_value = - if is_cond && ((not is_subscope_var) || (is_subscope_var && is_input)) then - (* We add the bottom [false] value for conditions, only for the scope - where the condition is declared. Except when the variable is an input, - where we want the [false] to be added at each caller parent scope. *) - Some - (Ast.always_false_rule - (Ast.ScopeDef.get_position def_info) - is_def_func_param_typ) - else None - in - if - Ast.RuleMap.cardinal def = 0 - && is_subscope_var - (* Here we have a special case for the empty definitions. Indeed, we could - use the code for the regular case below that would create a convoluted - default always returning empty error, and this would be correct. But it - gets more complicated with functions. Indeed, if we create an empty - definition for a subscope argument whose type is a function, we get - something like [fun () -> (fun real_param -> < ... >)] that is passed as - an argument to the subscope. The sub-scope de-thunks but the de-thunking - does not return empty error, signalling there is not reentrant variable, - because functions are values! So the subscope does not see that there is - not reentrant variable and does not pick its internal definition instead. - See [test/test_scope/subscope_function_arg_not_defined.catala_en] for a - test case exercising that subtlety. - - To avoid this complication we special case here and put an empty error - for all subscope variables that are not defined. It covers the subtlety - with functions described above but also conditions with the false default - value. *) - && not (is_cond && is_input) - (* However, this special case suffers from an exception: when a condition is - defined as an OnlyInput to a subscope, since the [false] default value - will not be provided by the calee scope, it has to be placed in the - caller. *) - then - Expr.elit LEmptyError (Untyped { pos = Ast.ScopeDef.get_position def_info }) - else - rule_tree_to_expr ~toplevel:true ctx - (Ast.ScopeDef.get_position def_info) - (Option.map (fun _ -> Var.make "param") is_def_func_param_typ) - (match top_list, top_value with - | [], None -> - (* In this case, there are no rules to define the expression and no - default value so we put an empty rule. *) - Leaf [Ast.empty_rule (Marked.get_mark typ) is_def_func_param_typ] - | [], Some top_value -> - (* In this case, there are no rules to define the expression but a - default value so we put it. *) - Leaf [top_value] - | _, Some top_value -> - (* When there are rules + a default value, we put the rules as - exceptions to the default value *) - Node (top_list, [top_value]) - | [top_tree], None -> top_tree - | _, None -> - Node - ( top_list, - [Ast.empty_rule (Marked.get_mark typ) is_def_func_param_typ] )) - -(** Translates a scope *) -let translate_scope (ctx : ctx) (scope : Ast.scope) : - untyped Scopelang.Ast.scope_decl = - let scope_dependencies = Dependency.build_scope_dependencies scope in - Dependency.check_for_cycle scope scope_dependencies; - let scope_ordering = - Dependency.correct_computation_ordering scope_dependencies - in - let scope_decl_rules = - List.flatten - (List.map - (fun vertex -> - match vertex with - | Dependency.Vertex.Var (var, state) -> ( - let scope_def = - Ast.ScopeDefMap.find - (Ast.ScopeDef.Var (var, state)) - scope.scope_defs - in - let var_def = scope_def.scope_def_rules in - let var_typ = scope_def.scope_def_typ in - let is_cond = scope_def.scope_def_is_condition in - match Marked.unmark scope_def.Ast.scope_def_io.io_input with - | OnlyInput when not (Ast.RuleMap.is_empty var_def) -> - (* If the variable is tagged as input, then it shall not be - redefined. *) - Errors.raise_multispanned_error - (( Some "Incriminated variable:", - Marked.get_mark (ScopeVar.get_info var) ) - :: List.map - (fun (rule, _) -> - ( Some "Incriminated variable definition:", - Marked.get_mark (Ast.RuleName.get_info rule) )) - (Ast.RuleMap.bindings var_def)) - "It is impossible to give a definition to a scope variable \ - tagged as input." - | OnlyInput -> - [] - (* we do not provide any definition for an input-only variable *) - | _ -> - let expr_def = - translate_def ctx - (Ast.ScopeDef.Var (var, state)) - var_def var_typ scope_def.Ast.scope_def_io ~is_cond - ~is_subscope_var:false - in - let scope_var = - match ScopeVarMap.find var ctx.scope_var_mapping, state with - | WholeVar v, None -> v - | States states, Some state -> List.assoc state states - | _ -> failwith "should not happen" - in - [ - Scopelang.Ast.Definition - ( ( ScopelangScopeVar - ( scope_var, - Marked.get_mark (ScopeVar.get_info scope_var) ), - Marked.get_mark (ScopeVar.get_info scope_var) ), - var_typ, - scope_def.Ast.scope_def_io, - Expr.unbox expr_def ); - ]) - | Dependency.Vertex.SubScope sub_scope_index -> - (* Before calling the sub_scope, we need to include all the - re-definitions of subscope parameters*) - let sub_scope = - SubScopeMap.find sub_scope_index scope.scope_sub_scopes - in - let sub_scope_vars_redefs_candidates = - Ast.ScopeDefMap.filter - (fun def_key scope_def -> - match def_key with - | Ast.ScopeDef.Var _ -> false - | Ast.ScopeDef.SubScopeVar (sub_scope_index', _, _) -> - sub_scope_index = sub_scope_index' - (* We exclude subscope variables that have 0 re-definitions - and are not visible in the input of the subscope *) - && not - ((match - Marked.unmark scope_def.Ast.scope_def_io.io_input - with - | Scopelang.Ast.NoInput -> true - | _ -> false) - && Ast.RuleMap.is_empty scope_def.scope_def_rules)) - scope.scope_defs - in - let sub_scope_vars_redefs = - Ast.ScopeDefMap.mapi - (fun def_key scope_def -> - let def = scope_def.Ast.scope_def_rules in - let def_typ = scope_def.scope_def_typ in - let is_cond = scope_def.scope_def_is_condition in - match def_key with - | Ast.ScopeDef.Var _ -> assert false (* should not happen *) - | Ast.ScopeDef.SubScopeVar (sscope, sub_scope_var, pos) -> - (* This definition redefines a variable of the correct - subscope. But we have to check that this redefinition is - allowed with respect to the io parameters of that - subscope variable. *) - (match - Marked.unmark scope_def.Ast.scope_def_io.io_input - with - | Scopelang.Ast.NoInput -> - Errors.raise_multispanned_error - (( Some "Incriminated subscope:", - Marked.get_mark (SubScopeName.get_info sscope) ) - :: ( Some "Incriminated variable:", - Marked.get_mark (ScopeVar.get_info sub_scope_var) - ) - :: List.map - (fun (rule, _) -> - ( Some - "Incriminated subscope variable definition:", - Marked.get_mark (Ast.RuleName.get_info rule) )) - (Ast.RuleMap.bindings def)) - "It is impossible to give a definition to a subscope \ - variable not tagged as input or context." - | OnlyInput when Ast.RuleMap.is_empty def && not is_cond -> - (* If the subscope variable is tagged as input, then it - shall be defined. *) - Errors.raise_multispanned_error - [ - ( Some "Incriminated subscope:", - Marked.get_mark (SubScopeName.get_info sscope) ); - Some "Incriminated variable:", pos; - ] - "This subscope variable is a mandatory input but no \ - definition was provided." - | _ -> ()); - (* Now that all is good, we can proceed with translating - this redefinition to a proper Scopelang term. *) - let expr_def = - translate_def ctx def_key def def_typ - scope_def.Ast.scope_def_io ~is_cond - ~is_subscope_var:true - in - let subscop_real_name = - SubScopeMap.find sub_scope_index scope.scope_sub_scopes - in - let var_pos = Ast.ScopeDef.get_position def_key in - Scopelang.Ast.Definition - ( ( SubScopeVar - ( subscop_real_name, - (sub_scope_index, var_pos), - match - ScopeVarMap.find sub_scope_var - ctx.scope_var_mapping - with - | WholeVar v -> v, var_pos - | States states -> - (* When defining a sub-scope variable, we - always define its first state in the - sub-scope. *) - snd (List.hd states), var_pos ), - var_pos ), - def_typ, - scope_def.Ast.scope_def_io, - Expr.unbox expr_def )) - sub_scope_vars_redefs_candidates - in - let sub_scope_vars_redefs = - List.map snd (Ast.ScopeDefMap.bindings sub_scope_vars_redefs) - in - sub_scope_vars_redefs - @ [ - Scopelang.Ast.Call - ( sub_scope, - sub_scope_index, - Untyped - { - pos = - Marked.get_mark - (SubScopeName.get_info sub_scope_index); - } ); - ]) - scope_ordering) - in - (* Then, after having computed all the scopes variables, we add the - assertions. TODO: the assertions should be interleaved with the - definitions! *) - let scope_decl_rules = - scope_decl_rules - @ List.map - (fun e -> - let scope_e = translate_expr ctx (Expr.unbox e) in - Scopelang.Ast.Assertion (Expr.unbox scope_e)) - scope.Ast.scope_assertions - in - let scope_sig = - ScopeVarMap.fold - (fun var (states : Ast.var_or_states) acc -> - match states with - | WholeVar -> - let scope_def = - Ast.ScopeDefMap.find (Ast.ScopeDef.Var (var, None)) scope.scope_defs - in - let typ = scope_def.scope_def_typ in - ScopeVarMap.add - (match ScopeVarMap.find var ctx.scope_var_mapping with - | WholeVar v -> v - | States _ -> failwith "should not happen") - (typ, scope_def.scope_def_io) - acc - | States states -> - (* What happens in the case of variables with multiple states is - interesting. We need to create as many Scopelang.Var entries in the - scope signature as there are states. *) - List.fold_left - (fun acc (state : StateName.t) -> - let scope_def = - Ast.ScopeDefMap.find - (Ast.ScopeDef.Var (var, Some state)) - scope.scope_defs - in - ScopeVarMap.add - (match ScopeVarMap.find var ctx.scope_var_mapping with - | WholeVar _ -> failwith "should not happen" - | States states' -> List.assoc state states') - (scope_def.scope_def_typ, scope_def.scope_def_io) - acc) - acc states) - scope.scope_vars ScopeVarMap.empty - in - let pos = Marked.get_mark (ScopeName.get_info scope.scope_uid) in - { - Scopelang.Ast.scope_decl_name = scope.scope_uid; - Scopelang.Ast.scope_decl_rules; - Scopelang.Ast.scope_sig; - Scopelang.Ast.scope_mark = Untyped { pos }; - } - -(** {1 API} *) - -let translate_program (pgrm : Ast.program) : untyped Scopelang.Ast.program = - (* First we give mappings to all the locations between Desugared and - Scopelang. This involves creating a new Scopelang scope variable for every - state of a Desugared variable. *) - let ctx = - ScopeMap.fold - (fun _scope scope_decl ctx -> - ScopeVarMap.fold - (fun scope_var (states : Ast.var_or_states) ctx -> - match states with - | Ast.WholeVar -> - { - ctx with - scope_var_mapping = - ScopeVarMap.add scope_var - (WholeVar (ScopeVar.fresh (ScopeVar.get_info scope_var))) - ctx.scope_var_mapping; - } - | States states -> - { - ctx with - scope_var_mapping = - ScopeVarMap.add scope_var - (States - (List.map - (fun state -> - ( state, - ScopeVar.fresh - (let state_name, state_pos = - StateName.get_info state - in - ( Marked.unmark (ScopeVar.get_info scope_var) - ^ "_" - ^ state_name, - state_pos )) )) - states)) - ctx.scope_var_mapping; - }) - scope_decl.Ast.scope_vars ctx) - pgrm.Ast.program_scopes - { scope_var_mapping = ScopeVarMap.empty; var_mapping = Var.Map.empty } - in - { - Scopelang.Ast.program_scopes = - ScopeMap.map (translate_scope ctx) pgrm.program_scopes; - Scopelang.Ast.program_ctx = pgrm.program_ctx; - } diff --git a/compiler/desugared/disambiguate.ml b/compiler/desugared/disambiguate.ml new file mode 100644 index 00000000..7392edc7 --- /dev/null +++ b/compiler/desugared/disambiguate.ml @@ -0,0 +1,78 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +open Shared_ast +open Ast + +let expr ctx env e = + (* The typer takes care of disambiguating: this consists in: - ensuring + [EAbs.tys] doesn't contain any [TAny] - [EDStructAccess.name_opt] is always + [Some] *) + (* Intermediate unboxings are fine since the last [untype] will rebox in + depth *) + Typing.check_expr ctx ~env (Expr.unbox e) + +let rule ctx env rule = + let env = + match rule.rule_parameter with + | None -> env + | Some (v, ty) -> Typing.Env.add_var v ty env + in + (* Note: we could use the known rule type here to direct typing. We choose not + to because it shouldn't be needed for disambiguation, and we prefer to + focus on local type errors first. *) + { + rule with + rule_just = expr ctx env rule.rule_just; + rule_cons = expr ctx env rule.rule_cons; + } + +let scope ctx env scope = + let env = Typing.Env.open_scope scope.scope_uid env in + let scope_defs = + ScopeDefMap.map + (fun def -> + let scope_def_rules = + (* Note: ordering in file order might be better for error reporting ? + When we gather errors, the ordering could be done afterwards, + though *) + RuleName.Map.map (rule ctx env) def.scope_def_rules + in + { def with scope_def_rules }) + scope.scope_defs + in + let scope_assertions = List.map (expr ctx env) scope.scope_assertions in + { scope with scope_defs; scope_assertions } + +let program prg = + let env = + ScopeName.Map.fold + (fun scope_name scope env -> + let vars = + ScopeDefMap.fold + (fun var def vars -> + match var with + | Var (v, _states) -> ScopeVar.Map.add v def.scope_def_typ vars + | SubScopeVar _ -> vars) + scope.scope_defs ScopeVar.Map.empty + in + Typing.Env.add_scope scope_name ~vars env) + prg.program_scopes Typing.Env.empty + in + let program_scopes = + ScopeName.Map.map (scope prg.program_ctx env) prg.program_scopes + in + { prg with program_scopes } diff --git a/compiler/desugared/disambiguate.mli b/compiler/desugared/disambiguate.mli new file mode 100644 index 00000000..95718ade --- /dev/null +++ b/compiler/desugared/disambiguate.mli @@ -0,0 +1,24 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +(** This module does local typing in order to fill some missing type information + in the AST: + + - it fills the types of arguments in [EAbs] nodes, (untyped ones are + inserted during desugaring, e.g. by `let-in` constructs), + - it resolves the structure names of [EDStructAccess] nodes. *) + +val program : Ast.program -> Ast.program diff --git a/compiler/desugared/dune b/compiler/desugared/dune index 9d5fb83f..77efc84a 100644 --- a/compiler/desugared/dune +++ b/compiler/desugared/dune @@ -1,7 +1,7 @@ (library (name desugared) (public_name catala.desugared) - (libraries utils dcalc scopelang ocamlgraph)) + (libraries ocamlgraph catala_utils shared_ast surface)) (documentation (package catala) diff --git a/compiler/surface/desugaring.ml b/compiler/desugared/from_surface.ml similarity index 58% rename from compiler/surface/desugaring.ml rename to compiler/desugared/from_surface.ml index 01a97d88..d77a6873 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/desugared/from_surface.ml @@ -15,8 +15,9 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils -module SurfacePrint = Print +open Catala_utils +module S = Surface.Ast +module SurfacePrint = Surface.Print open Shared_ast module Runtime = Runtime_ocaml.Runtime @@ -27,59 +28,120 @@ module Runtime = Runtime_ocaml.Runtime (** {1 Translating expressions} *) -let translate_op_kind (k : Ast.op_kind) : op_kind = - match k with - | KInt -> KInt - | KDec -> KRat - | KMoney -> KMoney - | KDate -> KDate - | KDuration -> KDuration +(* Resolves the operator kinds into the expected operator operand types. -let translate_binop (op : Ast.binop) : binop = + This gives only partial typing information, in the case it is enforced using + the operator suffixes for explicit typing. See {!modules: + Shared_ast.Operator} for detail. *) + +let translate_binop : Surface.Ast.binop -> Pos.t -> Ast.expr boxed = + fun op pos -> + let op_expr op tys = + Expr.eop op (List.map (Marked.mark pos) tys) (Untyped { pos }) + in match op with - | And -> And - | Or -> Or - | Xor -> Xor - | Add l -> Add (translate_op_kind l) - | Sub l -> Sub (translate_op_kind l) - | Mult l -> Mult (translate_op_kind l) - | Div l -> Div (translate_op_kind l) - | Lt l -> Lt (translate_op_kind l) - | Lte l -> Lte (translate_op_kind l) - | Gt l -> Gt (translate_op_kind l) - | Gte l -> Gte (translate_op_kind l) - | Eq -> Eq - | Neq -> Neq - | Concat -> Concat + | S.And -> op_expr And [TLit TBool; TLit TBool] + | S.Or -> op_expr Or [TLit TBool; TLit TBool] + | S.Xor -> op_expr Xor [TLit TBool; TLit TBool] + | S.Add k -> + op_expr Add + (match k with + | S.KPoly -> [TAny; TAny] + | S.KInt -> [TLit TInt; TLit TInt] + | S.KDec -> [TLit TRat; TLit TRat] + | S.KMoney -> [TLit TMoney; TLit TMoney] + | S.KDate -> [TLit TDate; TLit TDuration] + | S.KDuration -> [TLit TDuration; TLit TDuration]) + | S.Sub k -> + op_expr Sub + (match k with + | S.KPoly -> [TAny; TAny] + | S.KInt -> [TLit TInt; TLit TInt] + | S.KDec -> [TLit TRat; TLit TRat] + | S.KMoney -> [TLit TMoney; TLit TMoney] + | S.KDate -> [TLit TDate; TLit TDate] + | S.KDuration -> [TLit TDuration; TLit TDuration]) + | S.Mult k -> + op_expr Mult + (match k with + | S.KPoly -> [TAny; TAny] + | S.KInt -> [TLit TInt; TLit TInt] + | S.KDec -> [TLit TRat; TLit TRat] + | S.KMoney -> [TLit TMoney; TLit TRat] + | S.KDate -> + Errors.raise_spanned_error pos + "This operator doesn't exist, dates can't be multiplied" + | S.KDuration -> [TLit TDuration; TLit TInt]) + | S.Div k -> + op_expr Div + (match k with + | S.KPoly -> [TAny; TAny] + | S.KInt -> [TLit TInt; TLit TInt] + | S.KDec -> [TLit TRat; TLit TRat] + | S.KMoney -> [TLit TMoney; TLit TMoney] + | S.KDate -> + Errors.raise_spanned_error pos + "This operator doesn't exist, dates can't be divided" + | S.KDuration -> [TLit TDuration; TLit TDuration]) + | S.Lt k | S.Lte k | S.Gt k | S.Gte k -> + op_expr + (match op with + | S.Lt _ -> Lt + | S.Lte _ -> Lte + | S.Gt _ -> Gt + | S.Gte _ -> Gte + | _ -> assert false) + (match k with + | S.KPoly -> [TAny; TAny] + | S.KInt -> [TLit TInt; TLit TInt] + | S.KDec -> [TLit TRat; TLit TRat] + | S.KMoney -> [TLit TMoney; TLit TMoney] + | S.KDate -> [TLit TDate; TLit TDate] + | S.KDuration -> [TLit TDuration; TLit TDuration]) + | S.Eq -> + op_expr Eq [TAny; TAny] + (* This is a truly polymorphic operator, not an overload *) + | S.Neq -> assert false (* desugared already *) + | S.Concat -> op_expr Concat [TArray (TAny, pos); TArray (TAny, pos)] -let translate_unop (op : Ast.unop) : unop = - match op with Not -> Not | Minus l -> Minus (translate_op_kind l) +let translate_unop (op : Surface.Ast.unop) pos : Ast.expr boxed = + let op_expr op ty = Expr.eop op [Marked.mark pos ty] (Untyped { pos }) in + match op with + | S.Not -> op_expr Not (TLit TBool) + | S.Minus k -> + op_expr Minus + (match k with + | S.KPoly -> TAny + | S.KInt -> TLit TInt + | S.KDec -> TLit TRat + | S.KMoney -> TLit TMoney + | S.KDate -> + Errors.raise_spanned_error pos + "This operator doesn't exist, dates can't be negative" + | S.KDuration -> TLit TDuration) let disambiguate_constructor (ctxt : Name_resolution.context) - (constructor : (string Marked.pos option * string Marked.pos) list) + (constructor : (S.path * S.uident Marked.pos) Marked.pos list) (pos : Pos.t) : EnumName.t * EnumConstructor.t = - let enum, constructor = + let path, constructor = match constructor with - | [c] -> c + | [c] -> Marked.unmark c | _ -> Errors.raise_spanned_error pos "The deep pattern matching syntactic sugar is not yet supported" in let possible_c_uids = - try - Desugared.Ast.IdentMap.find - (Marked.unmark constructor) - ctxt.constructor_idmap + try IdentName.Map.find (Marked.unmark constructor) ctxt.constructor_idmap with Not_found -> Errors.raise_spanned_error (Marked.get_mark constructor) "The name of this constructor has not been defined before, maybe it is \ a typo?" in - match enum with - | None -> - if EnumMap.cardinal possible_c_uids > 1 then + match path with + | [] -> + if EnumName.Map.cardinal possible_c_uids > 1 then Errors.raise_spanned_error (Marked.get_mark constructor) "This constructor name is ambiguous, it can belong to %a. Disambiguate \ @@ -88,14 +150,14 @@ let disambiguate_constructor ~pp_sep:(fun fmt () -> Format.fprintf fmt " or ") (fun fmt (s_name, _) -> Format.fprintf fmt "%a" EnumName.format_t s_name)) - (EnumMap.bindings possible_c_uids); - EnumMap.choose possible_c_uids - | Some enum -> ( + (EnumName.Map.bindings possible_c_uids); + EnumName.Map.choose possible_c_uids + | [enum] -> ( try (* The path is fully qualified *) let e_uid = Name_resolution.get_enum ctxt enum in try - let c_uid = EnumMap.find e_uid possible_c_uids in + let c_uid = EnumName.Map.find e_uid possible_c_uids in e_uid, c_uid with Not_found -> Errors.raise_spanned_error pos "Enum %s does not contain case %s" @@ -104,6 +166,28 @@ let disambiguate_constructor with Not_found -> Errors.raise_spanned_error (Marked.get_mark enum) "Enum %s has not been defined before" (Marked.unmark enum)) + | _ -> Errors.raise_spanned_error pos "Qualified paths are not supported yet" + +let int100 = Runtime.integer_of_int 100 +let rat100 = Runtime.decimal_of_integer int100 + +(** The parser allows any combination of logical operators with right + associativity. We actually want to reject anything that mixes operators + without parens, so that is handled here. *) +let rec check_formula (op, pos_op) e = + match Marked.unmark e with + | S.Binop ((((S.And | S.Or | S.Xor) as op1), pos_op1), e1, e2) -> + if op = S.Xor || op <> op1 then + (* Xor is mathematically associative, but without a useful semantics ([a + xor b xor c] is most likely an error since it's true for [a = b = c = + true]) *) + Errors.raise_multispanned_error + [None, pos_op; None, pos_op1] + "Please add parentheses to explicit which of these operators should be \ + applied first"; + check_formula (op1, pos_op1) e1; + check_formula (op1, pos_op1) e2 + | _ -> () (** Usage: [translate_expr scope ctxt naked_expr] @@ -111,16 +195,17 @@ let disambiguate_constructor disambiguate the scope and subscopes variables than occur in the expression *) let rec translate_expr (scope : ScopeName.t) - (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) + (inside_definition_of : Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) - (expr : Ast.expression Marked.pos) : Desugared.Ast.expr boxed = - let scope_ctxt = ScopeMap.find scope ctxt.scopes in + (expr : Surface.Ast.expression) : Ast.expr boxed = + let scope_ctxt = ScopeName.Map.find scope ctxt.scopes in let rec_helper = translate_expr scope inside_definition_of ctxt in let pos = Marked.get_mark expr in let emark = Untyped { pos } in match Marked.unmark expr with + | Paren e -> rec_helper e | Binop - ( (Ast.And, _pos_op), + ( (Surface.Ast.And, _pos_op), ( TestMatchCase (e1_sub, ((constructors, Some binding), pos_pattern)), _pos_e1 ), e2 ) -> @@ -130,7 +215,7 @@ let rec translate_expr disambiguate_constructor ctxt constructors pos_pattern in let cases = - EnumConstructorMap.mapi + EnumConstructor.Map.mapi (fun c_uid' tau -> if EnumConstructor.compare c_uid c_uid' <> 0 then let nop_var = Var.make "_" in @@ -143,38 +228,49 @@ let rec translate_expr in let e2 = translate_expr scope inside_definition_of ctxt e2 in Expr.make_abs [| binding_var |] e2 [tau] pos) - (EnumMap.find enum_uid ctxt.enums) + (EnumName.Map.find enum_uid ctxt.enums) in - Expr.ematchs + Expr.ematch (translate_expr scope inside_definition_of ctxt e1_sub) enum_uid cases emark + | Binop ((((S.And | S.Or | S.Xor), _) as op), e1, e2) -> + check_formula op e1; + check_formula op e2; + let op_term = translate_binop (Marked.unmark op) (Marked.get_mark op) in + Expr.eapp op_term [rec_helper e1; rec_helper e2] emark | IfThenElse (e_if, e_then, e_else) -> Expr.eifthenelse (rec_helper e_if) (rec_helper e_then) (rec_helper e_else) emark + | Binop ((S.Neq, posn), e1, e2) -> + (* Neq is just sugar *) + rec_helper (Unop ((S.Not, posn), (Binop ((S.Eq, posn), e1, e2), posn)), pos) | Binop ((op, pos), e1, e2) -> - let op_term = Expr.eop (Binop (translate_binop op)) (Untyped { pos }) in + let op_term = translate_binop op pos in Expr.eapp op_term [rec_helper e1; rec_helper e2] emark | Unop ((op, pos), e) -> - let op_term = Expr.eop (Unop (translate_unop op)) (Untyped { pos }) in + let op_term = translate_unop op pos in Expr.eapp op_term [rec_helper e] emark | Literal l -> let lit = match l with | LNumber ((Int i, _), None) -> LInt (Runtime.integer_of_string i) | LNumber ((Int i, _), Some (Percent, _)) -> - LRat Runtime.(decimal_of_string i /& decimal_of_string "100") + LRat Runtime.(Oper.o_div_rat_rat (decimal_of_string i) rat100) | LNumber ((Dec (i, f), _), None) -> LRat Runtime.(decimal_of_string (i ^ "." ^ f)) | LNumber ((Dec (i, f), _), Some (Percent, _)) -> LRat - Runtime.(decimal_of_string (i ^ "." ^ f) /& decimal_of_string "100") + Runtime.(Oper.o_div_rat_rat (decimal_of_string (i ^ "." ^ f)) rat100) | LBool b -> LBool b | LMoneyAmount i -> LMoney Runtime.( money_of_cents_integer - ((integer_of_string i.money_amount_units *! integer_of_int 100) - +! integer_of_string i.money_amount_cents)) + (Oper.o_add_int_int + (Oper.o_mult_int_int + (integer_of_string i.money_amount_units) + int100) + (integer_of_string i.money_amount_cents))) | LNumber ((Int i, _), Some (Year, _)) -> LDuration (Runtime.duration_of_numbers (int_of_string i) 0 0) | LNumber ((Int i, _), Some (Month, _)) -> @@ -201,18 +297,18 @@ let rec translate_expr correct calendar day") in Expr.elit lit emark - | Ident x -> ( + | Ident ([], (x, pos)) -> ( (* first we check whether this is a local var, then we resort to scope-wide variables *) - match Desugared.Ast.IdentMap.find_opt x ctxt.local_var_idmap with + match IdentName.Map.find_opt x ctxt.local_var_idmap with | None -> ( - match Desugared.Ast.IdentMap.find_opt x scope_ctxt.var_idmap with + match IdentName.Map.find_opt x scope_ctxt.var_idmap with | Some (ScopeVar uid) -> (* If the referenced variable has states, then here are the rules to desambiguate. In general, only the last state can be referenced. Except if defining a state of the same variable, then it references the previous state in the chain. *) - let x_sig = ScopeVarMap.find uid ctxt.var_typs in + let x_sig = ScopeVar.Map.find uid ctxt.var_typs in let x_state = match x_sig.var_sig_states_list with | [] -> None @@ -253,12 +349,15 @@ let rec translate_expr | Some uid -> Expr.make_var uid emark (* the whole box thing is to accomodate for this case *)) - | Dotted (e, c, x) -> ( - match Marked.unmark e with - | Ident y when Name_resolution.is_subscope_uid scope ctxt y -> + | Ident (_path, _x) -> + Errors.raise_spanned_error pos "Qualified paths are not supported yet" + | Dotted (e, ((path, x), _ppos)) -> ( + match path, Marked.unmark e with + | [], Ident ([], (y, _)) when Name_resolution.is_subscope_uid scope ctxt y + -> (* In this case, y.x is a subscope variable *) let subscope_uid, subscope_real_uid = - match Desugared.Ast.IdentMap.find y scope_ctxt.var_idmap with + match IdentName.Map.find y scope_ctxt.var_idmap with | SubScope (sub, sc) -> sub, sc | ScopeVar _ -> assert false in @@ -269,53 +368,31 @@ let rec translate_expr (SubScopeVar (subscope_real_uid, (subscope_uid, pos), (subscope_var_uid, pos))) emark - | _ -> ( + | _ -> (* In this case e.x is the struct field x access of expression e *) let e = translate_expr scope inside_definition_of ctxt e in - let x_possible_structs = - try Desugared.Ast.IdentMap.find (Marked.unmark x) ctxt.field_idmap - with Not_found -> - Errors.raise_spanned_error (Marked.get_mark x) - "Unknown subscope or struct field name" - in - match c with - | None -> - (* No constructor name was specified *) - if StructMap.cardinal x_possible_structs > 1 then - Errors.raise_spanned_error (Marked.get_mark x) - "This struct field name is ambiguous, it can belong to %a. \ - Disambiguate it by prefixing it with the struct name." - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt " or ") - (fun fmt (s_name, _) -> - Format.fprintf fmt "%a" StructName.format_t s_name)) - (StructMap.bindings x_possible_structs) - else - let s_uid, f_uid = StructMap.choose x_possible_structs in - Expr.estructaccess e f_uid s_uid emark - | Some c_name -> ( - try - let c_uid = Name_resolution.get_struct ctxt c_name in - try - let f_uid = StructMap.find c_uid x_possible_structs in - Expr.estructaccess e f_uid c_uid emark + let str = + match path with + | [] -> None + | [c] -> ( + try Some (Name_resolution.get_struct ctxt c) with Not_found -> - Errors.raise_spanned_error pos "Struct %s does not contain field %s" - (Marked.unmark c_name) (Marked.unmark x) - with Not_found -> - Errors.raise_spanned_error (Marked.get_mark c_name) - "Struct %s has not been defined before" (Marked.unmark c_name)))) + Errors.raise_spanned_error (Marked.get_mark c) + "Structure %s was not declared" (Marked.unmark c)) + | _ -> + Errors.raise_spanned_error pos "Qualified paths are not supported yet" + in + Expr.edstructaccess e (Marked.unmark x) str emark) | FunCall (f, arg) -> Expr.eapp (rec_helper f) [rec_helper arg] emark - | ScopeCall (sc_name, fields) -> + | ScopeCall ((([], sc_name), _), fields) -> let called_scope = Name_resolution.get_scope ctxt sc_name in - let scope_def = ScopeMap.find called_scope ctxt.scopes in + let scope_def = ScopeName.Map.find called_scope ctxt.scopes in let in_struct = List.fold_left (fun acc (fld_id, e) -> let var = match - Desugared.Ast.IdentMap.find_opt (Marked.unmark fld_id) - scope_def.var_idmap + IdentName.Map.find_opt (Marked.unmark fld_id) scope_def.var_idmap with | Some (ScopeVar v) -> v | Some (SubScope _) | None -> @@ -330,7 +407,7 @@ let rec translate_expr "Scope %a has no input variable %a" ScopeName.format_t called_scope Print.lit_style (Marked.unmark fld_id) in - ScopeVarMap.update var + ScopeVar.Map.update var (function | None -> Some (rec_helper e) | Some _ -> @@ -338,23 +415,24 @@ let rec translate_expr "Duplicate definition of scope input variable '%a'" ScopeVar.format_t var) acc) - ScopeVarMap.empty fields + ScopeVar.Map.empty fields in Expr.escopecall called_scope in_struct emark + | ScopeCall (((_, _sc_name), _), _fields) -> + Errors.raise_spanned_error pos "Qualified paths are not supported yet" | LetIn (x, e1, e2) -> let ctxt, v = Name_resolution.add_def_local_var ctxt (Marked.unmark x) in let tau = TAny, Marked.get_mark x in + (* This type will be resolved in Scopelang.Desambiguation *) let fn = Expr.make_abs [| v |] (translate_expr scope inside_definition_of ctxt e2) [tau] pos in Expr.eapp fn [rec_helper e1] emark - | StructLit (s_name, fields) -> + | StructLit ((([], s_name), _), fields) -> let s_uid = - match - Desugared.Ast.IdentMap.find_opt (Marked.unmark s_name) ctxt.typedefs - with + match IdentName.Map.find_opt (Marked.unmark s_name) ctxt.typedefs with | Some (Name_resolution.TStruct s_uid) -> s_uid | _ -> Errors.raise_spanned_error (Marked.get_mark s_name) @@ -366,38 +444,38 @@ let rec translate_expr (fun s_fields (f_name, f_e) -> let f_uid = try - StructMap.find s_uid - (Desugared.Ast.IdentMap.find (Marked.unmark f_name) - ctxt.field_idmap) + StructName.Map.find s_uid + (IdentName.Map.find (Marked.unmark f_name) ctxt.field_idmap) with Not_found -> Errors.raise_spanned_error (Marked.get_mark f_name) "This identifier should refer to a field of struct %s" (Marked.unmark s_name) in - (match StructFieldMap.find_opt f_uid s_fields with + (match StructField.Map.find_opt f_uid s_fields with | None -> () | Some e_field -> Errors.raise_multispanned_error [None, Marked.get_mark f_e; None, Expr.pos e_field] - "The field %a has been defined twice:" StructFieldName.format_t - f_uid); + "The field %a has been defined twice:" StructField.format_t f_uid); let f_e = translate_expr scope inside_definition_of ctxt f_e in - StructFieldMap.add f_uid f_e s_fields) - StructFieldMap.empty fields + StructField.Map.add f_uid f_e s_fields) + StructField.Map.empty fields in - let expected_s_fields = StructMap.find s_uid ctxt.structs in - StructFieldMap.iter + let expected_s_fields = StructName.Map.find s_uid ctxt.structs in + StructField.Map.iter (fun expected_f _ -> - if not (StructFieldMap.mem expected_f s_fields) then + if not (StructField.Map.mem expected_f s_fields) then Errors.raise_spanned_error pos "Missing field for structure %a: \"%a\"" StructName.format_t s_uid - StructFieldName.format_t expected_f) + StructField.format_t expected_f) expected_s_fields; Expr.estruct s_uid s_fields emark - | EnumInject (enum, (constructor, pos_constructor), payload) -> ( + | StructLit (((_, _s_name), _), _fields) -> + Errors.raise_spanned_error pos "Qualified paths are not supported yet" + | EnumInject (((path, (constructor, pos_constructor)), _), payload) -> ( let possible_c_uids = - try Desugared.Ast.IdentMap.find constructor ctxt.constructor_idmap + try IdentName.Map.find constructor ctxt.constructor_idmap with Not_found -> Errors.raise_spanned_error pos_constructor "The name of this constructor has not been defined before, maybe it \ @@ -405,11 +483,11 @@ let rec translate_expr in let mark_constructor = Untyped { pos = pos_constructor } in - match enum with - | None -> + match path with + | [] -> if (* No constructor name was specified *) - EnumMap.cardinal possible_c_uids > 1 + EnumName.Map.cardinal possible_c_uids > 1 then Errors.raise_spanned_error pos_constructor "This constructor name is ambiguous, it can belong to %a. \ @@ -418,27 +496,27 @@ let rec translate_expr ~pp_sep:(fun fmt () -> Format.fprintf fmt " or ") (fun fmt (s_name, _) -> Format.fprintf fmt "%a" EnumName.format_t s_name)) - (EnumMap.bindings possible_c_uids) + (EnumName.Map.bindings possible_c_uids) else - let e_uid, c_uid = EnumMap.choose possible_c_uids in + let e_uid, c_uid = EnumName.Map.choose possible_c_uids in let payload = Option.map (translate_expr scope inside_definition_of ctxt) payload in - Expr.eenuminj + Expr.einj (match payload with | Some e' -> e' | None -> Expr.elit LUnit mark_constructor) c_uid e_uid emark - | Some enum -> ( + | [enum] -> ( try (* The path has been fully qualified *) let e_uid = Name_resolution.get_enum ctxt enum in try - let c_uid = EnumMap.find e_uid possible_c_uids in + let c_uid = EnumName.Map.find e_uid possible_c_uids in let payload = Option.map (translate_expr scope inside_definition_of ctxt) payload in - Expr.eenuminj + Expr.einj (match payload with | Some e' -> e' | None -> Expr.elit LUnit mark_constructor) @@ -448,14 +526,16 @@ let rec translate_expr (Marked.unmark enum) constructor with Not_found -> Errors.raise_spanned_error (Marked.get_mark enum) - "Enum %s has not been defined before" (Marked.unmark enum))) + "Enum %s has not been defined before" (Marked.unmark enum)) + | _ -> + Errors.raise_spanned_error pos "Qualified paths are not supported yet") | MatchWith (e1, (cases, _cases_pos)) -> let e1 = translate_expr scope inside_definition_of ctxt e1 in let cases_d, e_uid = disambiguate_match_and_build_expression scope inside_definition_of ctxt cases in - Expr.ematchs e1 e_uid cases_d emark + Expr.ematch e1 e_uid cases_d emark | TestMatchCase (e1, pattern) -> (match snd (Marked.unmark pattern) with | None -> () @@ -468,26 +548,23 @@ let rec translate_expr (Marked.get_mark pattern) in let cases = - EnumConstructorMap.mapi + EnumConstructor.Map.mapi (fun c_uid' tau -> let nop_var = Var.make "_" in Expr.make_abs [| nop_var |] (Expr.elit (LBool (EnumConstructor.compare c_uid c_uid' = 0)) emark) [tau] pos) - (EnumMap.find enum_uid ctxt.enums) + (EnumName.Map.find enum_uid ctxt.enums) in - Expr.ematchs + Expr.ematch (translate_expr scope inside_definition_of ctxt e1) enum_uid cases emark | ArrayLit es -> Expr.earray (List.map rec_helper es) emark - | CollectionOp - ( (((Ast.Filter | Ast.Map) as op'), _pos_op'), - param', - collection, - predicate ) -> + | CollectionOp (((S.Filter { f } | S.Map { f }) as op), collection) -> let collection = rec_helper collection in + let param, predicate = f in let ctxt, param = - Name_resolution.add_def_local_var ctxt (Marked.unmark param') + Name_resolution.add_def_local_var ctxt (Marked.unmark param) in let f_pred = Expr.make_abs [| param |] @@ -497,201 +574,132 @@ let rec translate_expr in Expr.eapp (Expr.eop - (match op' with - | Ast.Map -> Binop Map - | Ast.Filter -> Binop Filter - | _ -> assert false (* should not happen *)) + (match op with + | S.Map _ -> Map + | S.Filter _ -> Filter + | _ -> assert false) + [TAny, pos; TAny, pos] emark) [f_pred; collection] emark | CollectionOp - ( ( Ast.Aggregate (Ast.AggregateArgExtremum (max_or_min, pred_typ, init)), - pos_op' ), - param', - collection, - predicate ) -> - let init = rec_helper init in + (S.AggregateArgExtremum { max; default; f = param, predicate }, collection) + -> + let default = rec_helper default in + let pos_dft = Expr.pos default in let collection = rec_helper collection in let ctxt, param = - Name_resolution.add_def_local_var ctxt (Marked.unmark param') + Name_resolution.add_def_local_var ctxt (Marked.unmark param) in - let op_kind = - match pred_typ with - | Ast.Integer -> KInt - | Ast.Decimal -> KRat - | Ast.Money -> KMoney - | Ast.Duration -> KDuration - | Ast.Date -> KDate - | _ -> - Errors.raise_spanned_error pos - "It is impossible to compute the arg-%s of two values of type %a" - (if max_or_min then "max" else "min") - SurfacePrint.format_primitive_typ pred_typ - in - let cmp_op = if max_or_min then Gt op_kind else Lt op_kind in + let cmp_op = if max then Op.Gt else Op.Lt in let f_pred = Expr.make_abs [| param |] (translate_expr scope inside_definition_of ctxt predicate) [TAny, pos] pos in - let f_pred_var = Var.make "predicate" in - let f_pred_var_e = - Expr.make_var f_pred_var (Untyped { pos = Marked.get_mark predicate }) - in - let acc_var = Var.make "acc" in - let acc_var_e = Expr.make_var acc_var emark in - let item_var = Var.make "item" in - let item_var_e = Expr.make_var item_var (Marked.get_mark collection) in - let fold_body = - Expr.eifthenelse - (Expr.eapp - (Expr.eop (Binop cmp_op) (Untyped { pos = pos_op' })) - [ - Expr.eapp f_pred_var_e [acc_var_e] emark; - Expr.eapp f_pred_var_e [item_var_e] emark; - ] - emark) - acc_var_e item_var_e emark - in - let fold_f = - Expr.make_abs [| acc_var; item_var |] fold_body [TAny, pos; TAny, pos] pos - in - let fold = - Expr.eapp (Expr.eop (Ternop Fold) emark) [fold_f; init; collection] emark - in - Expr.make_let_in f_pred_var (TAny, pos) f_pred fold pos - | CollectionOp (op', param', collection, predicate) -> - let ctxt, param = - Name_resolution.add_def_local_var ctxt (Marked.unmark param') + let param_name = Bindlib.name_of param in + let v1, v2 = Var.make (param_name ^ "_1"), Var.make (param_name ^ "_2") in + let x1 = Expr.make_var v1 emark in + let x2 = Expr.make_var v2 emark in + let reduce_f = + (* fun x1 x2 -> cmp_op (pred x1) (pred x2) *) + (* Note: this computes f_pred twice on every element, but we'd rather not + rely on returning tuples here *) + Expr.make_abs [| v1; v2 |] + (Expr.eifthenelse + (Expr.eapp + (Expr.eop cmp_op + [TAny, pos_dft; TAny, pos_dft] + (Untyped { pos = pos_dft })) + [Expr.eapp f_pred [x1] emark; Expr.eapp f_pred [x2] emark] + emark) + x1 x2 emark) + [TAny, pos; TAny, pos] + pos in + Expr.eapp + (Expr.eop Reduce [TAny, pos; TAny, pos; TAny, pos] emark) + [reduce_f; default; collection] + emark + | CollectionOp + (((Exists { predicate } | Forall { predicate }) as op), collection) -> let collection = rec_helper collection in - let mark = Untyped { pos = Marked.get_mark op' } in - let init = - match Marked.unmark op' with - | Ast.Map | Ast.Filter | Ast.Aggregate (Ast.AggregateArgExtremum _) -> - assert false (* should not happen *) - | Ast.Exists -> Expr.elit (LBool false) mark - | Ast.Forall -> Expr.elit (LBool true) mark - | Ast.Aggregate (Ast.AggregateSum Ast.Integer) -> - Expr.elit (LInt (Runtime.integer_of_int 0)) mark - | Ast.Aggregate (Ast.AggregateSum Ast.Decimal) -> - Expr.elit (LRat (Runtime.decimal_of_string "0")) mark - | Ast.Aggregate (Ast.AggregateSum Ast.Money) -> - Expr.elit - (LMoney (Runtime.money_of_cents_integer (Runtime.integer_of_int 0))) - mark - | Ast.Aggregate (Ast.AggregateSum Ast.Duration) -> - Expr.elit (LDuration (Runtime.duration_of_numbers 0 0 0)) mark - | Ast.Aggregate (Ast.AggregateSum t) -> - Errors.raise_spanned_error pos - "It is impossible to sum two values of type %a together" - SurfacePrint.format_primitive_typ t - | Ast.Aggregate (Ast.AggregateExtremum (_, _, init)) -> rec_helper init - | Ast.Aggregate Ast.AggregateCount -> - Expr.elit (LInt (Runtime.integer_of_int 0)) mark + let init, op = + match op with + | Exists _ -> false, S.Or + | Forall _ -> true, S.And + | _ -> assert false in - let acc_var = Var.make "acc" in - let acc = - Expr.make_var acc_var (Untyped { pos = Marked.get_mark param' }) - in - let f_body = - let make_body (op : binop) = - Expr.eapp (Expr.eop (Binop op) mark) - [acc; translate_expr scope inside_definition_of ctxt predicate] - emark - in - let make_extr_body (cmp_op : binop) (t : typ) = - let tmp_var = Var.make "tmp" in - let tmp = - Expr.make_var tmp_var (Untyped { pos = Marked.get_mark param' }) - in - Expr.make_let_in tmp_var t - (translate_expr scope inside_definition_of ctxt predicate) - (Expr.eifthenelse - (Expr.eapp (Expr.eop (Binop cmp_op) mark) [acc; tmp] emark) - acc tmp emark) - pos - in - match Marked.unmark op' with - | Ast.Map | Ast.Filter | Ast.Aggregate (Ast.AggregateArgExtremum _) -> - assert false (* should not happen *) - | Ast.Exists -> make_body Or - | Ast.Forall -> make_body And - | Ast.Aggregate (Ast.AggregateSum Ast.Integer) -> make_body (Add KInt) - | Ast.Aggregate (Ast.AggregateSum Ast.Decimal) -> make_body (Add KRat) - | Ast.Aggregate (Ast.AggregateSum Ast.Money) -> make_body (Add KMoney) - | Ast.Aggregate (Ast.AggregateSum Ast.Duration) -> - make_body (Add KDuration) - | Ast.Aggregate (Ast.AggregateSum _) -> - assert false (* should not happen *) - | Ast.Aggregate (Ast.AggregateExtremum (max_or_min, t, _)) -> - let op_kind, typ = - match t with - | Ast.Integer -> KInt, (TLit TInt, pos) - | Ast.Decimal -> KRat, (TLit TRat, pos) - | Ast.Money -> KMoney, (TLit TMoney, pos) - | Ast.Duration -> KDuration, (TLit TDuration, pos) - | Ast.Date -> KDate, (TLit TDate, pos) - | _ -> - Errors.raise_spanned_error pos - "It is impossible to compute the %s of two values of type %a" - (if max_or_min then "max" else "min") - SurfacePrint.format_primitive_typ t - in - let cmp_op = if max_or_min then Gt op_kind else Lt op_kind in - make_extr_body cmp_op typ - | Ast.Aggregate Ast.AggregateCount -> - let predicate = - translate_expr scope inside_definition_of ctxt predicate - in - Expr.eifthenelse predicate - (Expr.eapp - (Expr.eop (Binop (Add KInt)) mark) - [ - acc; - Expr.elit - (LInt (Runtime.integer_of_int 1)) - (Marked.get_mark predicate); - ] - emark) - acc emark + let init = Expr.elit (LBool init) emark in + let param0, predicate = predicate in + let ctxt, param = + Name_resolution.add_def_local_var ctxt (Marked.unmark param0) in let f = - let make_f (t : typ_lit) = - Expr.eabs - (Expr.bind [| acc_var; param |] f_body) - [ - TLit t, Marked.get_mark op'; - TAny, pos - (* we put any here because the type of the elements of the arrays is - not always the type of the accumulator; for instance in - AggregateCount. *); - ] - emark + let acc_var = Var.make "acc" in + let acc = + Expr.make_var acc_var (Untyped { pos = Marked.get_mark param0 }) in - match Marked.unmark op' with - | Ast.Map | Ast.Filter | Ast.Aggregate (Ast.AggregateArgExtremum _) -> - assert false (* should not happen *) - | Ast.Exists -> make_f TBool - | Ast.Forall -> make_f TBool - | Ast.Aggregate (Ast.AggregateSum Ast.Integer) - | Ast.Aggregate (Ast.AggregateExtremum (_, Ast.Integer, _)) -> - make_f TInt - | Ast.Aggregate (Ast.AggregateSum Ast.Decimal) - | Ast.Aggregate (Ast.AggregateExtremum (_, Ast.Decimal, _)) -> - make_f TRat - | Ast.Aggregate (Ast.AggregateSum Ast.Money) - | Ast.Aggregate (Ast.AggregateExtremum (_, Ast.Money, _)) -> - make_f TMoney - | Ast.Aggregate (Ast.AggregateSum Ast.Duration) - | Ast.Aggregate (Ast.AggregateExtremum (_, Ast.Duration, _)) -> - make_f TDuration - | Ast.Aggregate (Ast.AggregateSum _) - | Ast.Aggregate (Ast.AggregateExtremum _) -> - assert false (* should not happen *) - | Ast.Aggregate Ast.AggregateCount -> make_f TInt + Expr.eabs + (Expr.bind [| acc_var; param |] + (Expr.eapp (translate_binop op pos) + [acc; translate_expr scope inside_definition_of ctxt predicate] + emark)) + [TAny, pos; TAny, pos] + emark in - Expr.eapp (Expr.eop (Ternop Fold) emark) [f; init; collection] emark + Expr.eapp + (Expr.eop Fold [TAny, pos; TAny, pos; TAny, pos] emark) + [f; init; collection] emark + | CollectionOp (AggregateExtremum { max; default }, collection) -> + let collection = rec_helper collection in + let default = translate_expr scope inside_definition_of ctxt default in + let op = translate_binop (if max then S.Gt KPoly else S.Lt KPoly) pos in + let op_f = + (* fun x1 x2 -> if op x1 x2 then x1 else x2 *) + let vname = if max then "max" else "min" in + let v1, v2 = Var.make (vname ^ "1"), Var.make (vname ^ "2") in + let x1 = Expr.make_var v1 emark in + let x2 = Expr.make_var v2 emark in + Expr.make_abs [| v1; v2 |] + (Expr.eifthenelse (Expr.eapp op [x1; x2] emark) x1 x2 emark) + [TAny, pos; TAny, pos] + pos + in + Expr.eapp + (Expr.eop Reduce [TAny, pos; TAny, pos; TAny, pos] emark) + [op_f; default; collection] + emark + | CollectionOp (AggregateSum { typ }, collection) -> + let collection = rec_helper collection in + let default_lit = + let i0 = Runtime.integer_of_int 0 in + match typ with + | S.Integer -> LInt i0 + | S.Decimal -> LRat (Runtime.decimal_of_integer i0) + | S.Money -> LMoney (Runtime.money_of_cents_integer i0) + | S.Duration -> LDuration (Runtime.duration_of_numbers 0 0 0) + | t -> + Errors.raise_spanned_error pos + "It is impossible to sum values of type %a together" + SurfacePrint.format_primitive_typ t + in + let op_f = + (* fun x1 x2 -> op x1 x2 *) + (* we're not allowed pass the operator directly as argument, it must + appear inside an [EApp] *) + let v1, v2 = Var.make "sum1", Var.make "sum2" in + let x1 = Expr.make_var v1 emark in + let x2 = Expr.make_var v2 emark in + Expr.make_abs [| v1; v2 |] + (Expr.eapp (translate_binop (S.Add KPoly) pos) [x1; x2] emark) + [TAny, pos; TAny, pos] + pos + in + Expr.eapp + (Expr.eop Reduce [TAny, pos; TAny, pos; TAny, pos] emark) + [op_f; Expr.elit default_lit emark; collection] + emark | MemCollection (member, collection) -> let param_var = Var.make "collection_member" in let param = Expr.make_var param_var emark in @@ -702,8 +710,13 @@ let rec translate_expr let f_body = let member = translate_expr scope inside_definition_of ctxt member in Expr.eapp - (Expr.eop (Binop Or) emark) - [Expr.eapp (Expr.eop (Binop Eq) emark) [member; param] emark; acc] + (Expr.eop Or [TLit TBool, pos; TLit TBool, pos] emark) + [ + Expr.eapp + (Expr.eop Eq [TAny, pos; TAny, pos] emark) + [member; param] emark; + acc; + ] emark in let f = @@ -712,25 +725,25 @@ let rec translate_expr [TLit TBool, pos; TAny, pos] emark in - Expr.eapp (Expr.eop (Ternop Fold) emark) [f; init; collection] emark - | Builtin IntToDec -> Expr.eop (Unop IntToRat) emark - | Builtin MoneyToDec -> Expr.eop (Unop MoneyToRat) emark - | Builtin DecToMoney -> Expr.eop (Unop RatToMoney) emark - | Builtin Cardinal -> Expr.eop (Unop Length) emark - | Builtin GetDay -> Expr.eop (Unop GetDay) emark - | Builtin GetMonth -> Expr.eop (Unop GetMonth) emark - | Builtin GetYear -> Expr.eop (Unop GetYear) emark - | Builtin FirstDayOfMonth -> Expr.eop (Unop FirstDayOfMonth) emark - | Builtin LastDayOfMonth -> Expr.eop (Unop LastDayOfMonth) emark - | Builtin RoundMoney -> Expr.eop (Unop RoundMoney) emark - | Builtin RoundDecimal -> Expr.eop (Unop RoundDecimal) emark + Expr.eapp + (Expr.eop Fold [TAny, pos; TAny, pos; TAny, pos] emark) + [f; init; collection] emark + | Builtin ToDecimal -> Expr.eop ToRat [TAny, pos] emark + | Builtin ToMoney -> Expr.eop ToMoney [TAny, pos] emark + | Builtin Round -> Expr.eop Round [TAny, pos] emark + | Builtin Cardinal -> Expr.eop Length [TArray (TAny, pos), pos] emark + | Builtin GetDay -> Expr.eop GetDay [TLit TDate, pos] emark + | Builtin GetMonth -> Expr.eop GetMonth [TLit TDate, pos] emark + | Builtin GetYear -> Expr.eop GetYear [TLit TDate, pos] emark + | Builtin FirstDayOfMonth -> Expr.eop FirstDayOfMonth [TLit TDate, pos] emark + | Builtin LastDayOfMonth -> Expr.eop LastDayOfMonth [TLit TDate, pos] emark and disambiguate_match_and_build_expression (scope : ScopeName.t) - (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) + (inside_definition_of : Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) - (cases : Ast.match_case Marked.pos list) : - Desugared.Ast.expr boxed EnumConstructorMap.t * EnumName.t = + (cases : Surface.Ast.match_case Marked.pos list) : + Ast.expr boxed EnumConstructor.Map.t * EnumName.t = let create_var = function | None -> ctxt, Var.make "_" | Some param -> @@ -745,18 +758,20 @@ and disambiguate_match_and_build_expression e_binder = Expr.eabs e_binder [ - EnumConstructorMap.find c_uid - (EnumMap.find e_uid ctxt.Name_resolution.enums); + EnumConstructor.Map.find c_uid + (EnumName.Map.find e_uid ctxt.Name_resolution.enums); ] (Marked.get_mark case_body) in let bind_match_cases (cases_d, e_uid, curr_index) (case, case_pos) = match case with - | Ast.MatchCase case -> - let constructor, binding = Marked.unmark case.Ast.match_case_pattern in + | Surface.Ast.MatchCase case -> + let constructor, binding = + Marked.unmark case.Surface.Ast.match_case_pattern + in let e_uid', c_uid = disambiguate_constructor ctxt constructor - (Marked.get_mark case.Ast.match_case_pattern) + (Marked.get_mark case.Surface.Ast.match_case_pattern) in let e_uid = match e_uid with @@ -765,12 +780,12 @@ and disambiguate_match_and_build_expression if e_uid = e_uid' then e_uid else Errors.raise_spanned_error - (Marked.get_mark case.Ast.match_case_pattern) + (Marked.get_mark case.Surface.Ast.match_case_pattern) "This case matches a constructor of enumeration %a but previous \ case were matching constructors of enumeration %a" EnumName.format_t e_uid EnumName.format_t e_uid' in - (match EnumConstructorMap.find_opt c_uid cases_d with + (match EnumConstructor.Map.find_opt c_uid cases_d with | None -> () | Some e_case -> Errors.raise_multispanned_error @@ -779,12 +794,15 @@ and disambiguate_match_and_build_expression c_uid); let ctxt, param_var = create_var (Option.map Marked.unmark binding) in let case_body = - translate_expr scope inside_definition_of ctxt case.Ast.match_case_expr + translate_expr scope inside_definition_of ctxt + case.Surface.Ast.match_case_expr in let e_binder = Expr.bind [| param_var |] case_body in let case_expr = bind_case_body c_uid e_uid ctxt case_body e_binder in - EnumConstructorMap.add c_uid case_expr cases_d, Some e_uid, curr_index + 1 - | Ast.WildCard match_case_expr -> ( + ( EnumConstructor.Map.add c_uid case_expr cases_d, + Some e_uid, + curr_index + 1 ) + | Surface.Ast.WildCard match_case_expr -> ( let nb_cases = List.length cases in let raise_wildcard_not_last_case_err () = Errors.raise_multispanned_error @@ -805,13 +823,13 @@ and disambiguate_match_and_build_expression | Some e_uid -> if curr_index < nb_cases - 1 then raise_wildcard_not_last_case_err (); let missing_constructors = - EnumMap.find e_uid ctxt.Name_resolution.enums - |> EnumConstructorMap.filter_map (fun c_uid _ -> - match EnumConstructorMap.find_opt c_uid cases_d with + EnumName.Map.find e_uid ctxt.Name_resolution.enums + |> EnumConstructor.Map.filter_map (fun c_uid _ -> + match EnumConstructor.Map.find_opt c_uid cases_d with | Some _ -> None | None -> Some c_uid) in - if EnumConstructorMap.is_empty missing_constructors then + if EnumConstructor.Map.is_empty missing_constructors then Errors.format_spanned_warning case_pos "Unreachable match case, all constructors of the enumeration %a \ are already specified" @@ -835,19 +853,19 @@ and disambiguate_match_and_build_expression let e_binder = Expr.bind [| payload_var |] case_body in (* For each missing cases, binds the wildcard payload. *) - EnumConstructorMap.fold + EnumConstructor.Map.fold (fun c_uid _ (cases_d, e_uid_opt, curr_index) -> let case_expr = bind_case_body c_uid e_uid ctxt case_body e_binder in - ( EnumConstructorMap.add c_uid case_expr cases_d, + ( EnumConstructor.Map.add c_uid case_expr cases_d, e_uid_opt, curr_index + 1 )) missing_constructors (cases_d, Some e_uid, curr_index)) in let naked_expr, e_name, _ = - List.fold_left bind_match_cases (EnumConstructorMap.empty, None, 0) cases + List.fold_left bind_match_cases (EnumConstructor.Map.empty, None, 0) cases in naked_expr, Option.get e_name [@@ocamlformat "wrap-comments=false"] @@ -858,30 +876,34 @@ and disambiguate_match_and_build_expression this precondition has to be appended to the justifications of each definition in the subscope use. This is what this function does. *) let merge_conditions - (precond : Desugared.Ast.expr boxed option) - (cond : Desugared.Ast.expr boxed option) - (default_pos : Pos.t) : Desugared.Ast.expr boxed = + (precond : Ast.expr boxed option) + (cond : Ast.expr boxed option) + (default_pos : Pos.t) : Ast.expr boxed = match precond, cond with | Some precond, Some cond -> - let op_term = Expr.eop (Binop And) (Marked.get_mark cond) in + let op_term = + Expr.eop And + [TLit TBool, default_pos; TLit TBool, default_pos] + (Marked.get_mark cond) + in Expr.eapp op_term [precond; cond] (Marked.get_mark cond) | Some precond, None -> Marked.unmark precond, Untyped { pos = default_pos } | None, Some cond -> cond | None, None -> Expr.elit (LBool true) (Untyped { pos = default_pos }) (** Translates a surface definition into condition into a desugared {!type: - Desugared.Ast.rule} *) + Ast.rule} *) let process_default (ctxt : Name_resolution.context) (scope : ScopeName.t) - (def_key : Desugared.Ast.ScopeDef.t Marked.pos) - (rule_id : Desugared.Ast.RuleName.t) - (param_uid : Desugared.Ast.expr Var.t Marked.pos option) - (precond : Desugared.Ast.expr boxed option) - (exception_situation : Desugared.Ast.exception_situation) - (label_situation : Desugared.Ast.label_situation) - (just : Ast.expression Marked.pos option) - (cons : Ast.expression Marked.pos) : Desugared.Ast.rule = + (def_key : Ast.ScopeDef.t Marked.pos) + (rule_id : RuleName.t) + (param_uid : Ast.expr Var.t Marked.pos option) + (precond : Ast.expr boxed option) + (exception_situation : Ast.exception_situation) + (label_situation : Ast.label_situation) + (just : Surface.Ast.expression option) + (cons : Surface.Ast.expression) : Ast.rule = let just = match just with | Some just -> Some (translate_expr scope (Some def_key) ctxt just) @@ -913,15 +935,13 @@ let process_default (** Wrapper around {!val: process_default} that performs some name disambiguation *) let process_def - (precond : Desugared.Ast.expr boxed option) + (precond : Ast.expr boxed option) (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) - (prgm : Desugared.Ast.program) - (def : Ast.definition) : Desugared.Ast.program = - let scope : Desugared.Ast.scope = - ScopeMap.find scope_uid prgm.program_scopes - in - let scope_ctxt = ScopeMap.find scope_uid ctxt.scopes in + (prgm : Ast.program) + (def : Surface.Ast.definition) : Ast.program = + let scope : Ast.scope = ScopeName.Map.find scope_uid prgm.program_scopes in + let scope_ctxt = ScopeName.Map.find scope_uid ctxt.scopes in let def_key = Name_resolution.get_def_key (Marked.unmark def.definition_name) @@ -929,7 +949,7 @@ let process_def (Marked.get_mark def.definition_name) in let scope_def_ctxt = - Desugared.Ast.ScopeDefMap.find def_key scope_ctxt.scope_defs_contexts + Ast.ScopeDefMap.find def_key scope_ctxt.scope_defs_contexts in (* We add to the name resolution context the name of the parameter variable *) let param_uid, new_ctxt = @@ -942,19 +962,18 @@ let process_def Some (Marked.same_mark_as param_var param), ctxt in let scope_updated = - let scope_def = Desugared.Ast.ScopeDefMap.find def_key scope.scope_defs in + let scope_def = Ast.ScopeDefMap.find def_key scope.scope_defs in let rule_name = def.definition_id in let label_situation = match def.definition_label with | Some (label_str, label_pos) -> - Desugared.Ast.ExplicitlyLabeled - ( Desugared.Ast.IdentMap.find label_str scope_def_ctxt.label_idmap, - label_pos ) - | None -> Desugared.Ast.Unlabeled + Ast.ExplicitlyLabeled + (IdentName.Map.find label_str scope_def_ctxt.label_idmap, label_pos) + | None -> Ast.Unlabeled in let exception_situation = - match def.Ast.definition_exception_to with - | NotAnException -> Desugared.Ast.BaseCase + match def.Surface.Ast.definition_exception_to with + | NotAnException -> Ast.BaseCase | UnlabeledException -> ( match scope_def_ctxt.default_exception_rulename with | None | Some (Name_resolution.Ambiguous _) -> @@ -966,7 +985,7 @@ let process_def | ExceptionToLabel label_str -> ( try let label_id = - Desugared.Ast.IdentMap.find (Marked.unmark label_str) + IdentName.Map.find (Marked.unmark label_str) scope_def_ctxt.label_idmap in ExceptionToLabel (label_id, Marked.get_mark label_str) @@ -974,13 +993,13 @@ let process_def Errors.raise_spanned_error (Marked.get_mark label_str) "Unknown label for the scope variable %a: \"%s\"" - Desugared.Ast.ScopeDef.format_t def_key (Marked.unmark label_str)) + Ast.ScopeDef.format_t def_key (Marked.unmark label_str)) in let scope_def = { scope_def with scope_def_rules = - Desugared.Ast.RuleMap.add rule_name + RuleName.Map.add rule_name (process_default new_ctxt scope_uid (def_key, Marked.get_mark def.definition_name) rule_name param_uid precond exception_situation label_situation @@ -990,44 +1009,43 @@ let process_def in { scope with - scope_defs = - Desugared.Ast.ScopeDefMap.add def_key scope_def scope.scope_defs; + scope_defs = Ast.ScopeDefMap.add def_key scope_def scope.scope_defs; } in { prgm with - program_scopes = ScopeMap.add scope_uid scope_updated prgm.program_scopes; + program_scopes = + ScopeName.Map.add scope_uid scope_updated prgm.program_scopes; } (** Translates a {!type: Surface.Ast.rule} from the surface language *) let process_rule - (precond : Desugared.Ast.expr boxed option) + (precond : Ast.expr boxed option) (scope : ScopeName.t) (ctxt : Name_resolution.context) - (prgm : Desugared.Ast.program) - (rule : Ast.rule) : Desugared.Ast.program = - let def = Ast.rule_to_def rule in + (prgm : Ast.program) + (rule : Surface.Ast.rule) : Ast.program = + let def = Surface.Ast.rule_to_def rule in process_def precond scope ctxt prgm def (** Translates assertions *) let process_assert - (precond : Desugared.Ast.expr boxed option) + (precond : Ast.expr boxed option) (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) - (prgm : Desugared.Ast.program) - (ass : Ast.assertion) : Desugared.Ast.program = - let scope : Desugared.Ast.scope = - ScopeMap.find scope_uid prgm.program_scopes - in + (prgm : Ast.program) + (ass : Surface.Ast.assertion) : Ast.program = + let scope : Ast.scope = ScopeName.Map.find scope_uid prgm.program_scopes in let ass = translate_expr scope_uid None ctxt - (match ass.Ast.assertion_condition with - | None -> ass.Ast.assertion_content + (match ass.Surface.Ast.assertion_condition with + | None -> ass.Surface.Ast.assertion_content | Some cond -> - ( Ast.IfThenElse + ( Surface.Ast.IfThenElse ( cond, - ass.Ast.assertion_content, - Marked.same_mark_as (Ast.Literal (Ast.LBool true)) cond ), + ass.Surface.Ast.assertion_content, + Marked.same_mark_as (Surface.Ast.Literal (Surface.Ast.LBool true)) + cond ), Marked.get_mark cond )) in let ass = @@ -1043,21 +1061,21 @@ let process_assert in { prgm with - program_scopes = ScopeMap.add scope_uid new_scope prgm.program_scopes; + program_scopes = ScopeName.Map.add scope_uid new_scope prgm.program_scopes; } (** Translates a surface definition, rule or assertion *) let process_scope_use_item - (precond : Ast.expression Marked.pos option) + (precond : Surface.Ast.expression option) (scope : ScopeName.t) (ctxt : Name_resolution.context) - (prgm : Desugared.Ast.program) - (item : Ast.scope_use_item Marked.pos) : Desugared.Ast.program = + (prgm : Ast.program) + (item : Surface.Ast.scope_use_item Marked.pos) : Ast.program = let precond = Option.map (translate_expr scope None ctxt) precond in match Marked.unmark item with - | Ast.Rule rule -> process_rule precond scope ctxt prgm rule - | Ast.Definition def -> process_def precond scope ctxt prgm def - | Ast.Assertion ass -> process_assert precond scope ctxt prgm ass + | Surface.Ast.Rule rule -> process_rule precond scope ctxt prgm rule + | Surface.Ast.Definition def -> process_def precond scope ctxt prgm def + | Surface.Ast.Assertion ass -> process_assert precond scope ctxt prgm ass | _ -> prgm (** {1 Translating top-level items} *) @@ -1067,19 +1085,19 @@ let process_scope_use_item let check_unlabeled_exception (scope : ScopeName.t) (ctxt : Name_resolution.context) - (item : Ast.scope_use_item Marked.pos) : unit = - let scope_ctxt = ScopeMap.find scope ctxt.scopes in + (item : Surface.Ast.scope_use_item Marked.pos) : unit = + let scope_ctxt = ScopeName.Map.find scope ctxt.scopes in match Marked.unmark item with - | Ast.Rule _ | Ast.Definition _ -> ( + | Surface.Ast.Rule _ | Surface.Ast.Definition _ -> ( let def_key, exception_to = match Marked.unmark item with - | Ast.Rule rule -> + | Surface.Ast.Rule rule -> ( Name_resolution.get_def_key (Marked.unmark rule.rule_name) rule.rule_state scope ctxt (Marked.get_mark rule.rule_name), rule.rule_exception_to ) - | Ast.Definition def -> + | Surface.Ast.Definition def -> ( Name_resolution.get_def_key (Marked.unmark def.definition_name) def.definition_state scope ctxt @@ -1089,13 +1107,13 @@ let check_unlabeled_exception (* should not happen *) in let scope_def_ctxt = - Desugared.Ast.ScopeDefMap.find def_key scope_ctxt.scope_defs_contexts + Ast.ScopeDefMap.find def_key scope_ctxt.scope_defs_contexts in match exception_to with - | Ast.NotAnException | Ast.ExceptionToLabel _ -> () + | Surface.Ast.NotAnException | Surface.Ast.ExceptionToLabel _ -> () (* If this is an unlabeled exception, we check that it has a unique default definition *) - | Ast.UnlabeledException -> ( + | Surface.Ast.UnlabeledException -> ( match scope_def_ctxt.default_exception_rulename with | None -> Errors.raise_spanned_error (Marked.get_mark item) @@ -1112,12 +1130,12 @@ let check_unlabeled_exception (** Translates a surface scope use, which is a bunch of definitions *) let process_scope_use (ctxt : Name_resolution.context) - (prgm : Desugared.Ast.program) - (use : Ast.scope_use) : Desugared.Ast.program = + (prgm : Ast.program) + (use : Surface.Ast.scope_use) : Ast.program = let scope_uid = Name_resolution.get_scope ctxt use.scope_use_name in (* Make sure the scope exists *) let prgm = - match ScopeMap.find_opt scope_uid prgm.program_scopes with + match ScopeName.Map.find_opt scope_uid prgm.program_scopes with | Some _ -> prgm | None -> assert false (* should not happen *) @@ -1128,53 +1146,51 @@ let process_scope_use (process_scope_use_item precond scope_uid ctxt) prgm use.scope_use_items -let attribute_to_io (attr : Ast.scope_decl_context_io) : Scopelang.Ast.io = +let attribute_to_io (attr : Surface.Ast.scope_decl_context_io) : Ast.io = { - Scopelang.Ast.io_output = attr.scope_decl_context_io_output; - Scopelang.Ast.io_input = + Ast.io_output = attr.scope_decl_context_io_output; + Ast.io_input = Marked.map_under_mark (fun io -> match io with - | Ast.Input -> Scopelang.Ast.OnlyInput - | Ast.Internal -> Scopelang.Ast.NoInput - | Ast.Context -> Scopelang.Ast.Reentrant) + | Surface.Ast.Input -> Ast.OnlyInput + | Surface.Ast.Internal -> Ast.NoInput + | Surface.Ast.Context -> Ast.Reentrant) attr.scope_decl_context_io_input; } let init_scope_defs (ctxt : Name_resolution.context) - (scope_idmap : - Name_resolution.scope_var_or_subscope Desugared.Ast.IdentMap.t) : - Desugared.Ast.scope_def Desugared.Ast.ScopeDefMap.t = + (scope_idmap : Name_resolution.scope_var_or_subscope IdentName.Map.t) : + Ast.scope_def Ast.ScopeDefMap.t = (* Initializing the definitions of all scopes and subscope vars, with no rules yet inside *) let add_def _ v scope_def_map = match v with | Name_resolution.ScopeVar v -> ( - let v_sig = ScopeVarMap.find v ctxt.Name_resolution.var_typs in + let v_sig = ScopeVar.Map.find v ctxt.Name_resolution.var_typs in match v_sig.var_sig_states_list with | [] -> - let def_key = Desugared.Ast.ScopeDef.Var (v, None) in - Desugared.Ast.ScopeDefMap.add def_key + let def_key = Ast.ScopeDef.Var (v, None) in + Ast.ScopeDefMap.add def_key { - Desugared.Ast.scope_def_rules = Desugared.Ast.RuleMap.empty; - Desugared.Ast.scope_def_typ = v_sig.var_sig_typ; - Desugared.Ast.scope_def_is_condition = v_sig.var_sig_is_condition; - Desugared.Ast.scope_def_io = attribute_to_io v_sig.var_sig_io; + Ast.scope_def_rules = RuleName.Map.empty; + Ast.scope_def_typ = v_sig.var_sig_typ; + Ast.scope_def_is_condition = v_sig.var_sig_is_condition; + Ast.scope_def_io = attribute_to_io v_sig.var_sig_io; } scope_def_map | states -> let scope_def, _ = List.fold_left (fun (acc, i) state -> - let def_key = Desugared.Ast.ScopeDef.Var (v, Some state) in + let def_key = Ast.ScopeDef.Var (v, Some state) in let def = { - Desugared.Ast.scope_def_rules = Desugared.Ast.RuleMap.empty; - Desugared.Ast.scope_def_typ = v_sig.var_sig_typ; - Desugared.Ast.scope_def_is_condition = - v_sig.var_sig_is_condition; - Desugared.Ast.scope_def_io = + Ast.scope_def_rules = RuleName.Map.empty; + Ast.scope_def_typ = v_sig.var_sig_typ; + Ast.scope_def_is_condition = v_sig.var_sig_is_condition; + Ast.scope_def_io = (* The first state should have the input I/O of the original variable, and the last state should have the output I/O of the original variable. All intermediate states shall @@ -1183,8 +1199,7 @@ let init_scope_defs let io_input = if i = 0 then original_io.io_input else - ( Scopelang.Ast.NoInput, - Marked.get_mark (StateName.get_info state) ) + Ast.NoInput, Marked.get_mark (StateName.get_info state) in let io_output = if i = List.length states - 1 then original_io.io_output @@ -1193,71 +1208,69 @@ let init_scope_defs { io_input; io_output }); } in - Desugared.Ast.ScopeDefMap.add def_key def acc, i + 1) + Ast.ScopeDefMap.add def_key def acc, i + 1) (scope_def_map, 0) states in scope_def) | Name_resolution.SubScope (v0, subscope_uid) -> let sub_scope_def = - ScopeMap.find subscope_uid ctxt.Name_resolution.scopes + ScopeName.Map.find subscope_uid ctxt.Name_resolution.scopes in - Desugared.Ast.IdentMap.fold + IdentName.Map.fold (fun _ v scope_def_map -> match v with | Name_resolution.SubScope _ -> scope_def_map | Name_resolution.ScopeVar v -> (* TODO: shouldn't we ignore internal variables too at this point ? *) - let v_sig = ScopeVarMap.find v ctxt.Name_resolution.var_typs in + let v_sig = ScopeVar.Map.find v ctxt.Name_resolution.var_typs in let def_key = - Desugared.Ast.ScopeDef.SubScopeVar + Ast.ScopeDef.SubScopeVar (v0, v, Marked.get_mark (ScopeVar.get_info v)) in - Desugared.Ast.ScopeDefMap.add def_key + Ast.ScopeDefMap.add def_key { - Desugared.Ast.scope_def_rules = Desugared.Ast.RuleMap.empty; - Desugared.Ast.scope_def_typ = v_sig.var_sig_typ; - Desugared.Ast.scope_def_is_condition = - v_sig.var_sig_is_condition; - Desugared.Ast.scope_def_io = attribute_to_io v_sig.var_sig_io; + Ast.scope_def_rules = RuleName.Map.empty; + Ast.scope_def_typ = v_sig.var_sig_typ; + Ast.scope_def_is_condition = v_sig.var_sig_is_condition; + Ast.scope_def_io = attribute_to_io v_sig.var_sig_io; } scope_def_map) sub_scope_def.Name_resolution.var_idmap scope_def_map in - Desugared.Ast.IdentMap.fold add_def scope_idmap - Desugared.Ast.ScopeDefMap.empty + IdentName.Map.fold add_def scope_idmap Ast.ScopeDefMap.empty (** Main function of this module *) -let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : - Desugared.Ast.program = +let translate_program + (ctxt : Name_resolution.context) + (prgm : Surface.Ast.program) : Ast.program = let empty_prgm = let program_scopes = - ScopeMap.mapi + ScopeName.Map.mapi (fun s_uid s_context -> let scope_vars = - Desugared.Ast.IdentMap.fold + IdentName.Map.fold (fun _ v acc -> match v with | Name_resolution.SubScope _ -> acc | Name_resolution.ScopeVar v -> ( - let v_sig = ScopeVarMap.find v ctxt.var_typs in + let v_sig = ScopeVar.Map.find v ctxt.var_typs in match v_sig.var_sig_states_list with - | [] -> ScopeVarMap.add v Desugared.Ast.WholeVar acc - | states -> - ScopeVarMap.add v (Desugared.Ast.States states) acc)) - s_context.Name_resolution.var_idmap ScopeVarMap.empty + | [] -> ScopeVar.Map.add v Ast.WholeVar acc + | states -> ScopeVar.Map.add v (Ast.States states) acc)) + s_context.Name_resolution.var_idmap ScopeVar.Map.empty in let scope_sub_scopes = - Desugared.Ast.IdentMap.fold + IdentName.Map.fold (fun _ v acc -> match v with | Name_resolution.ScopeVar _ -> acc | Name_resolution.SubScope (sub_var, sub_scope) -> - SubScopeMap.add sub_var sub_scope acc) - s_context.Name_resolution.var_idmap SubScopeMap.empty + SubScopeName.Map.add sub_var sub_scope acc) + s_context.Name_resolution.var_idmap SubScopeName.Map.empty in { - Desugared.Ast.scope_vars; + Ast.scope_vars; scope_sub_scopes; scope_defs = init_scope_defs ctxt s_context.var_idmap; scope_assertions = []; @@ -1267,27 +1280,26 @@ let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : ctxt.Name_resolution.scopes in { - Desugared.Ast.program_ctx = + Ast.program_ctx = { - ctx_structs = - StructMap.map StructFieldMap.bindings ctxt.Name_resolution.structs; - ctx_enums = - EnumMap.map EnumConstructorMap.bindings ctxt.Name_resolution.enums; + ctx_structs = ctxt.Name_resolution.structs; + ctx_enums = ctxt.Name_resolution.enums; ctx_scopes = - Desugared.Ast.IdentMap.fold + IdentName.Map.fold (fun _ def acc -> match def with - | Name_resolution.TScope (scope, struc) -> - ScopeMap.add scope struc acc + | Name_resolution.TScope (scope, scope_out_struct) -> + ScopeName.Map.add scope scope_out_struct acc | _ -> acc) - ctxt.Name_resolution.typedefs ScopeMap.empty; + ctxt.Name_resolution.typedefs ScopeName.Map.empty; + ctx_struct_fields = ctxt.Name_resolution.field_idmap; }; - Desugared.Ast.program_scopes; + Ast.program_scopes; } in let rec processer_structure - (prgm : Desugared.Ast.program) - (item : Ast.law_structure) : Desugared.Ast.program = + (prgm : Ast.program) + (item : Surface.Ast.law_structure) : Ast.program = match item with | LawHeading (_, children) -> List.fold_left @@ -1297,7 +1309,7 @@ let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : List.fold_left (fun prgm item -> match Marked.unmark item with - | Ast.ScopeUse use -> process_scope_use ctxt prgm use + | Surface.Ast.ScopeUse use -> process_scope_use ctxt prgm use | _ -> prgm) prgm block | LawInclude _ | LawText _ -> prgm diff --git a/compiler/surface/desugaring.mli b/compiler/desugared/from_surface.mli similarity index 91% rename from compiler/surface/desugaring.mli rename to compiler/desugared/from_surface.mli index 28f81ce7..e6d6f050 100644 --- a/compiler/surface/desugaring.mli +++ b/compiler/desugared/from_surface.mli @@ -20,6 +20,6 @@ - Removes syntactic sugars - Separate code from legislation *) -val desugar_program : - Name_resolution.context -> Ast.program -> Desugared.Ast.program +val translate_program : + Name_resolution.context -> Surface.Ast.program -> Ast.program (** Main function of this module *) diff --git a/compiler/surface/name_resolution.ml b/compiler/desugared/name_resolution.ml similarity index 56% rename from compiler/surface/name_resolution.ml rename to compiler/desugared/name_resolution.ml index d3b2b8be..6128b675 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/desugared/name_resolution.ml @@ -18,20 +18,18 @@ (** Builds a context that allows for mapping each name to a precise uid, taking lexical scopes into account *) -open Utils +open Catala_utils open Shared_ast (** {1 Name resolution context} *) -type ident = string - type unique_rulename = | Ambiguous of Pos.t list - | Unique of Desugared.Ast.RuleName.t Marked.pos + | Unique of RuleName.t Marked.pos type scope_def_context = { default_exception_rulename : unique_rulename option; - label_idmap : Desugared.Ast.LabelName.t Desugared.Ast.IdentMap.t; + label_idmap : LabelName.t IdentName.Map.t; } type scope_var_or_subscope = @@ -39,26 +37,26 @@ type scope_var_or_subscope = | SubScope of SubScopeName.t * ScopeName.t type scope_context = { - var_idmap : scope_var_or_subscope Desugared.Ast.IdentMap.t; + var_idmap : scope_var_or_subscope IdentName.Map.t; (** All variables, including scope variables and subscopes *) - scope_defs_contexts : scope_def_context Desugared.Ast.ScopeDefMap.t; + scope_defs_contexts : scope_def_context Ast.ScopeDefMap.t; (** What is the default rule to refer to for unnamed exceptions, if any *) - sub_scopes : ScopeSet.t; + sub_scopes : ScopeName.Set.t; (** Other scopes referred to by this scope. Used for dependency analysis *) } (** Inside a scope, we distinguish between the variables and the subscopes. *) -type struct_context = typ StructFieldMap.t +type struct_context = typ StructField.Map.t (** Types of the fields of a struct *) -type enum_context = typ EnumConstructorMap.t +type enum_context = typ EnumConstructor.Map.t (** Types of the payloads of the cases of an enum *) type var_sig = { var_sig_typ : typ; var_sig_is_condition : bool; - var_sig_io : Ast.scope_decl_context_io; - var_sig_states_idmap : StateName.t Desugared.Ast.IdentMap.t; + var_sig_io : Surface.Ast.scope_decl_context_io; + var_sig_states_idmap : StateName.t IdentName.Map.t; var_sig_states_list : StateName.t list; } @@ -67,25 +65,26 @@ type var_sig = { type typedef = | TStruct of StructName.t | TEnum of EnumName.t - | TScope of ScopeName.t * StructName.t + | TScope of ScopeName.t * scope_out_struct (** Implicitly defined output struct *) type context = { - local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Ast.expr Var.t IdentName.Map.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) - typedefs : typedef Desugared.Ast.IdentMap.t; + typedefs : typedef IdentName.Map.t; (** Gathers the names of the scopes, structs and enums *) - field_idmap : StructFieldName.t StructMap.t Desugared.Ast.IdentMap.t; + field_idmap : StructField.t StructName.Map.t IdentName.Map.t; (** The names of the struct fields. Names of fields can be shared between different structs *) - constructor_idmap : EnumConstructor.t EnumMap.t Desugared.Ast.IdentMap.t; + constructor_idmap : EnumConstructor.t EnumName.Map.t IdentName.Map.t; (** The names of the enum constructors. Constructor names can be shared between different enums *) - scopes : scope_context ScopeMap.t; (** For each scope, its context *) - structs : struct_context StructMap.t; (** For each struct, its context *) - enums : enum_context EnumMap.t; (** For each enum, its context *) - var_typs : var_sig ScopeVarMap.t; + scopes : scope_context ScopeName.Map.t; (** For each scope, its context *) + structs : struct_context StructName.Map.t; + (** For each struct, its context *) + enums : enum_context EnumName.Map.t; (** For each enum, its context *) + var_typs : var_sig ScopeVar.Map.t; (** The signatures of each scope variable declared *) } (** Main context used throughout {!module: Surface.Desugaring} *) @@ -99,29 +98,30 @@ let raise_unsupported_feature (msg : string) (pos : Pos.t) = (** Function to call whenever an identifier used somewhere has not been declared in the program previously *) -let raise_unknown_identifier (msg : string) (ident : ident Marked.pos) = +let raise_unknown_identifier (msg : string) (ident : IdentName.t Marked.pos) = Errors.raise_spanned_error (Marked.get_mark ident) "\"%s\": unknown identifier %s" - (Utils.Cli.with_style [ANSITerminal.yellow] "%s" (Marked.unmark ident)) + (Cli.with_style [ANSITerminal.yellow] "%s" (Marked.unmark ident)) msg (** Gets the type associated to an uid *) let get_var_typ (ctxt : context) (uid : ScopeVar.t) : typ = - (ScopeVarMap.find uid ctxt.var_typs).var_sig_typ + (ScopeVar.Map.find uid ctxt.var_typs).var_sig_typ let is_var_cond (ctxt : context) (uid : ScopeVar.t) : bool = - (ScopeVarMap.find uid ctxt.var_typs).var_sig_is_condition + (ScopeVar.Map.find uid ctxt.var_typs).var_sig_is_condition -let get_var_io (ctxt : context) (uid : ScopeVar.t) : Ast.scope_decl_context_io = - (ScopeVarMap.find uid ctxt.var_typs).var_sig_io +let get_var_io (ctxt : context) (uid : ScopeVar.t) : + Surface.Ast.scope_decl_context_io = + (ScopeVar.Map.find uid ctxt.var_typs).var_sig_io (** Get the variable uid inside the scope given in argument *) let get_var_uid (scope_uid : ScopeName.t) (ctxt : context) - ((x, pos) : ident Marked.pos) : ScopeVar.t = - let scope = ScopeMap.find scope_uid ctxt.scopes in - match Desugared.Ast.IdentMap.find_opt x scope.var_idmap with + ((x, pos) : IdentName.t Marked.pos) : ScopeVar.t = + let scope = ScopeName.Map.find scope_uid ctxt.scopes in + match IdentName.Map.find_opt x scope.var_idmap with | Some (ScopeVar uid) -> uid | _ -> raise_unknown_identifier @@ -132,50 +132,50 @@ let get_var_uid let get_subscope_uid (scope_uid : ScopeName.t) (ctxt : context) - ((y, pos) : ident Marked.pos) : SubScopeName.t = - let scope = ScopeMap.find scope_uid ctxt.scopes in - match Desugared.Ast.IdentMap.find_opt y scope.var_idmap with + ((y, pos) : IdentName.t Marked.pos) : SubScopeName.t = + let scope = ScopeName.Map.find scope_uid ctxt.scopes in + match IdentName.Map.find_opt y scope.var_idmap with | Some (SubScope (sub_uid, _sub_id)) -> sub_uid | _ -> raise_unknown_identifier "for a subscope of this scope" (y, pos) (** [is_subscope_uid scope_uid ctxt y] returns true if [y] belongs to the subscopes of [scope_uid]. *) -let is_subscope_uid (scope_uid : ScopeName.t) (ctxt : context) (y : ident) : - bool = - let scope = ScopeMap.find scope_uid ctxt.scopes in - match Desugared.Ast.IdentMap.find_opt y scope.var_idmap with +let is_subscope_uid (scope_uid : ScopeName.t) (ctxt : context) (y : IdentName.t) + : bool = + let scope = ScopeName.Map.find scope_uid ctxt.scopes in + match IdentName.Map.find_opt y scope.var_idmap with | Some (SubScope _) -> true | _ -> false (** Checks if the var_uid belongs to the scope scope_uid *) let belongs_to (ctxt : context) (uid : ScopeVar.t) (scope_uid : ScopeName.t) : bool = - let scope = ScopeMap.find scope_uid ctxt.scopes in - Desugared.Ast.IdentMap.exists + let scope = ScopeName.Map.find scope_uid ctxt.scopes in + IdentName.Map.exists (fun _ -> function | ScopeVar var_uid -> ScopeVar.equal uid var_uid | _ -> false) scope.var_idmap (** Retrieves the type of a scope definition from the context *) -let get_def_typ (ctxt : context) (def : Desugared.Ast.ScopeDef.t) : typ = +let get_def_typ (ctxt : context) (def : Ast.ScopeDef.t) : typ = match def with - | Desugared.Ast.ScopeDef.SubScopeVar (_, x, _) + | Ast.ScopeDef.SubScopeVar (_, x, _) (* we don't need to look at the subscope prefix because [x] is already the uid referring back to the original subscope *) - | Desugared.Ast.ScopeDef.Var (x, _) -> + | Ast.ScopeDef.Var (x, _) -> get_var_typ ctxt x -let is_def_cond (ctxt : context) (def : Desugared.Ast.ScopeDef.t) : bool = +let is_def_cond (ctxt : context) (def : Ast.ScopeDef.t) : bool = match def with - | Desugared.Ast.ScopeDef.SubScopeVar (_, x, _) + | Ast.ScopeDef.SubScopeVar (_, x, _) (* we don't need to look at the subscope prefix because [x] is already the uid referring back to the original subscope *) - | Desugared.Ast.ScopeDef.Var (x, _) -> + | Ast.ScopeDef.Var (x, _) -> is_var_cond ctxt x let get_enum ctxt id = - match Desugared.Ast.IdentMap.find (Marked.unmark id) ctxt.typedefs with + match IdentName.Map.find (Marked.unmark id) ctxt.typedefs with | TEnum id -> id | TStruct sid -> Errors.raise_multispanned_error @@ -196,8 +196,8 @@ let get_enum ctxt id = (Marked.unmark id) let get_struct ctxt id = - match Desugared.Ast.IdentMap.find (Marked.unmark id) ctxt.typedefs with - | TStruct id | TScope (_, id) -> id + match IdentName.Map.find (Marked.unmark id) ctxt.typedefs with + | TStruct id | TScope (_, { out_struct_name = id; _ }) -> id | TEnum eid -> Errors.raise_multispanned_error [ @@ -210,7 +210,7 @@ let get_struct ctxt id = (Marked.unmark id) let get_scope ctxt id = - match Desugared.Ast.IdentMap.find (Marked.unmark id) ctxt.typedefs with + match IdentName.Map.find (Marked.unmark id) ctxt.typedefs with | TScope (id, _) -> id | TEnum eid -> Errors.raise_multispanned_error @@ -236,11 +236,11 @@ let get_scope ctxt id = let process_subscope_decl (scope : ScopeName.t) (ctxt : context) - (decl : Ast.scope_decl_context_scope) : context = + (decl : Surface.Ast.scope_decl_context_scope) : context = let name, name_pos = decl.scope_decl_context_scope_name in let subscope, s_pos = decl.scope_decl_context_scope_sub_scope in - let scope_ctxt = ScopeMap.find scope ctxt.scopes in - match Desugared.Ast.IdentMap.find_opt subscope scope_ctxt.var_idmap with + let scope_ctxt = ScopeName.Map.find scope ctxt.scopes in + match IdentName.Map.find_opt subscope scope_ctxt.var_idmap with | Some use -> let info = match use with @@ -250,7 +250,7 @@ let process_subscope_decl Errors.raise_multispanned_error [Some "first use", Marked.get_mark info; Some "second use", s_pos] "Subscope name \"%a\" already used" - (Utils.Cli.format_with_style [ANSITerminal.yellow]) + (Cli.format_with_style [ANSITerminal.yellow]) subscope | None -> let sub_scope_uid = SubScopeName.fresh (name, name_pos) in @@ -261,56 +261,63 @@ let process_subscope_decl { scope_ctxt with var_idmap = - Desugared.Ast.IdentMap.add name + IdentName.Map.add name (SubScope (sub_scope_uid, original_subscope_uid)) scope_ctxt.var_idmap; - sub_scopes = ScopeSet.add original_subscope_uid scope_ctxt.sub_scopes; + sub_scopes = + ScopeName.Set.add original_subscope_uid scope_ctxt.sub_scopes; } in - { ctxt with scopes = ScopeMap.add scope scope_ctxt ctxt.scopes } + { ctxt with scopes = ScopeName.Map.add scope scope_ctxt ctxt.scopes } -let is_type_cond ((typ, _) : Ast.typ) = +let is_type_cond ((typ, _) : Surface.Ast.typ) = match typ with - | Ast.Base Ast.Condition - | Ast.Func { arg_typ = _; return_typ = Ast.Condition, _ } -> + | Surface.Ast.Base Surface.Ast.Condition + | Surface.Ast.Func { arg_typ = _; return_typ = Surface.Ast.Condition, _ } -> true | _ -> false (** Process a basic type (all types except function types) *) let rec process_base_typ (ctxt : context) - ((typ, typ_pos) : Ast.base_typ Marked.pos) : typ = + ((typ, typ_pos) : Surface.Ast.base_typ Marked.pos) : typ = match typ with - | Ast.Condition -> TLit TBool, typ_pos - | Ast.Data (Ast.Collection t) -> + | Surface.Ast.Condition -> TLit TBool, typ_pos + | Surface.Ast.Data (Surface.Ast.Collection t) -> ( TArray - (process_base_typ ctxt (Ast.Data (Marked.unmark t), Marked.get_mark t)), + (process_base_typ ctxt + (Surface.Ast.Data (Marked.unmark t), Marked.get_mark t)), typ_pos ) - | Ast.Data (Ast.Primitive prim) -> ( + | Surface.Ast.Data (Surface.Ast.Primitive prim) -> ( match prim with - | Ast.Integer -> TLit TInt, typ_pos - | Ast.Decimal -> TLit TRat, typ_pos - | Ast.Money -> TLit TMoney, typ_pos - | Ast.Duration -> TLit TDuration, typ_pos - | Ast.Date -> TLit TDate, typ_pos - | Ast.Boolean -> TLit TBool, typ_pos - | Ast.Text -> raise_unsupported_feature "text type" typ_pos - | Ast.Named ident -> ( - match Desugared.Ast.IdentMap.find_opt ident ctxt.typedefs with + | Surface.Ast.Integer -> TLit TInt, typ_pos + | Surface.Ast.Decimal -> TLit TRat, typ_pos + | Surface.Ast.Money -> TLit TMoney, typ_pos + | Surface.Ast.Duration -> TLit TDuration, typ_pos + | Surface.Ast.Date -> TLit TDate, typ_pos + | Surface.Ast.Boolean -> TLit TBool, typ_pos + | Surface.Ast.Text -> raise_unsupported_feature "text type" typ_pos + | Surface.Ast.Named ([], (ident, _pos)) -> ( + match IdentName.Map.find_opt ident ctxt.typedefs with | Some (TStruct s_uid) -> TStruct s_uid, typ_pos | Some (TEnum e_uid) -> TEnum e_uid, typ_pos - | Some (TScope (_, s_uid)) -> TStruct s_uid, typ_pos + | Some (TScope (_, scope_str)) -> + TStruct scope_str.out_struct_name, typ_pos | None -> Errors.raise_spanned_error typ_pos "Unknown type \"%a\", not a struct or enum previously declared" - (Utils.Cli.format_with_style [ANSITerminal.yellow]) - ident)) + (Cli.format_with_style [ANSITerminal.yellow]) + ident) + | Surface.Ast.Named (_path, (_ident, _pos)) -> + Errors.raise_spanned_error typ_pos "Qualified paths are not supported yet" + ) (** Process a type (function or not) *) -let process_type (ctxt : context) ((naked_typ, typ_pos) : Ast.typ) : typ = +let process_type (ctxt : context) ((naked_typ, typ_pos) : Surface.Ast.typ) : typ + = match naked_typ with - | Ast.Base base_typ -> process_base_typ ctxt (base_typ, typ_pos) - | Ast.Func { arg_typ; return_typ } -> + | Surface.Ast.Base base_typ -> process_base_typ ctxt (base_typ, typ_pos) + | Surface.Ast.Func { arg_typ; return_typ } -> ( TArrow (process_base_typ ctxt arg_typ, process_base_typ ctxt return_typ), typ_pos ) @@ -318,13 +325,13 @@ let process_type (ctxt : context) ((naked_typ, typ_pos) : Ast.typ) : typ = let process_data_decl (scope : ScopeName.t) (ctxt : context) - (decl : Ast.scope_decl_context_data) : context = + (decl : Surface.Ast.scope_decl_context_data) : context = (* First check the type of the context data *) let data_typ = process_type ctxt decl.scope_decl_context_item_typ in let is_cond = is_type_cond decl.scope_decl_context_item_typ in let name, pos = decl.scope_decl_context_item_name in - let scope_ctxt = ScopeMap.find scope ctxt.scopes in - match Desugared.Ast.IdentMap.find_opt name scope_ctxt.var_idmap with + let scope_ctxt = ScopeName.Map.find scope ctxt.scopes in + match IdentName.Map.find_opt name scope_ctxt.var_idmap with | Some use -> let info = match use with @@ -334,32 +341,29 @@ let process_data_decl Errors.raise_multispanned_error [Some "First use:", Marked.get_mark info; Some "Second use:", pos] "Variable name \"%a\" already used" - (Utils.Cli.format_with_style [ANSITerminal.yellow]) + (Cli.format_with_style [ANSITerminal.yellow]) name | None -> let uid = ScopeVar.fresh (name, pos) in let scope_ctxt = { scope_ctxt with - var_idmap = - Desugared.Ast.IdentMap.add name (ScopeVar uid) scope_ctxt.var_idmap; + var_idmap = IdentName.Map.add name (ScopeVar uid) scope_ctxt.var_idmap; } in let states_idmap, states_list = List.fold_right (fun state_id (states_idmap, states_list) -> let state_uid = StateName.fresh state_id in - ( Desugared.Ast.IdentMap.add (Marked.unmark state_id) state_uid - states_idmap, + ( IdentName.Map.add (Marked.unmark state_id) state_uid states_idmap, state_uid :: states_list )) - decl.scope_decl_context_item_states - (Desugared.Ast.IdentMap.empty, []) + decl.scope_decl_context_item_states (IdentName.Map.empty, []) in { ctxt with - scopes = ScopeMap.add scope scope_ctxt ctxt.scopes; + scopes = ScopeName.Map.add scope scope_ctxt ctxt.scopes; var_typs = - ScopeVarMap.add uid + ScopeVar.Map.add uid { var_sig_typ = data_typ; var_sig_is_condition = is_cond; @@ -371,20 +375,21 @@ let process_data_decl } (** Adds a binding to the context *) -let add_def_local_var (ctxt : context) (name : ident) : - context * Desugared.Ast.expr Var.t = +let add_def_local_var (ctxt : context) (name : IdentName.t) : + context * Ast.expr Var.t = let local_var_uid = Var.make name in let ctxt = { ctxt with local_var_idmap = - Desugared.Ast.IdentMap.add name local_var_uid ctxt.local_var_idmap; + IdentName.Map.add name local_var_uid ctxt.local_var_idmap; } in ctxt, local_var_uid (** Process a struct declaration *) -let process_struct_decl (ctxt : context) (sdecl : Ast.struct_decl) : context = +let process_struct_decl (ctxt : context) (sdecl : Surface.Ast.struct_decl) : + context = let s_uid = get_struct ctxt sdecl.struct_decl_name in if sdecl.struct_decl_fields = [] then Errors.raise_spanned_error @@ -394,41 +399,42 @@ let process_struct_decl (ctxt : context) (sdecl : Ast.struct_decl) : context = (Marked.unmark sdecl.struct_decl_name); List.fold_left (fun ctxt (fdecl, _) -> - let f_uid = StructFieldName.fresh fdecl.Ast.struct_decl_field_name in + let f_uid = StructField.fresh fdecl.Surface.Ast.struct_decl_field_name in let ctxt = { ctxt with field_idmap = - Desugared.Ast.IdentMap.update - (Marked.unmark fdecl.Ast.struct_decl_field_name) + IdentName.Map.update + (Marked.unmark fdecl.Surface.Ast.struct_decl_field_name) (fun uids -> match uids with - | None -> Some (StructMap.singleton s_uid f_uid) - | Some uids -> Some (StructMap.add s_uid f_uid uids)) + | None -> Some (StructName.Map.singleton s_uid f_uid) + | Some uids -> Some (StructName.Map.add s_uid f_uid uids)) ctxt.field_idmap; } in { ctxt with structs = - StructMap.update s_uid + StructName.Map.update s_uid (fun fields -> match fields with | None -> Some - (StructFieldMap.singleton f_uid - (process_type ctxt fdecl.Ast.struct_decl_field_typ)) + (StructField.Map.singleton f_uid + (process_type ctxt fdecl.Surface.Ast.struct_decl_field_typ)) | Some fields -> Some - (StructFieldMap.add f_uid - (process_type ctxt fdecl.Ast.struct_decl_field_typ) + (StructField.Map.add f_uid + (process_type ctxt fdecl.Surface.Ast.struct_decl_field_typ) fields)) ctxt.structs; }) ctxt sdecl.struct_decl_fields (** Process an enum declaration *) -let process_enum_decl (ctxt : context) (edecl : Ast.enum_decl) : context = +let process_enum_decl (ctxt : context) (edecl : Surface.Ast.enum_decl) : context + = let e_uid = get_enum ctxt edecl.enum_decl_name in if List.length edecl.enum_decl_cases = 0 then Errors.raise_spanned_error @@ -438,33 +444,33 @@ let process_enum_decl (ctxt : context) (edecl : Ast.enum_decl) : context = (Marked.unmark edecl.enum_decl_name); List.fold_left (fun ctxt (cdecl, cdecl_pos) -> - let c_uid = EnumConstructor.fresh cdecl.Ast.enum_decl_case_name in + let c_uid = EnumConstructor.fresh cdecl.Surface.Ast.enum_decl_case_name in let ctxt = { ctxt with constructor_idmap = - Desugared.Ast.IdentMap.update - (Marked.unmark cdecl.Ast.enum_decl_case_name) + IdentName.Map.update + (Marked.unmark cdecl.Surface.Ast.enum_decl_case_name) (fun uids -> match uids with - | None -> Some (EnumMap.singleton e_uid c_uid) - | Some uids -> Some (EnumMap.add e_uid c_uid uids)) + | None -> Some (EnumName.Map.singleton e_uid c_uid) + | Some uids -> Some (EnumName.Map.add e_uid c_uid uids)) ctxt.constructor_idmap; } in { ctxt with enums = - EnumMap.update e_uid + EnumName.Map.update e_uid (fun cases -> let typ = - match cdecl.Ast.enum_decl_case_typ with + match cdecl.Surface.Ast.enum_decl_case_typ with | None -> TLit TUnit, cdecl_pos | Some typ -> process_type ctxt typ in match cases with - | None -> Some (EnumConstructorMap.singleton c_uid typ) - | Some fields -> Some (EnumConstructorMap.add c_uid typ fields)) + | None -> Some (EnumConstructor.Map.singleton c_uid typ) + | Some fields -> Some (EnumConstructor.Map.add c_uid typ fields)) ctxt.enums; }) ctxt edecl.enum_decl_cases @@ -473,13 +479,15 @@ let process_enum_decl (ctxt : context) (edecl : Ast.enum_decl) : context = let process_item_decl (scope : ScopeName.t) (ctxt : context) - (decl : Ast.scope_decl_context_item) : context = + (decl : Surface.Ast.scope_decl_context_item) : context = match decl with - | Ast.ContextData data_decl -> process_data_decl scope ctxt data_decl - | Ast.ContextScope sub_decl -> process_subscope_decl scope ctxt sub_decl + | Surface.Ast.ContextData data_decl -> process_data_decl scope ctxt data_decl + | Surface.Ast.ContextScope sub_decl -> + process_subscope_decl scope ctxt sub_decl (** Process a scope declaration *) -let process_scope_decl (ctxt : context) (decl : Ast.scope_decl) : context = +let process_scope_decl (ctxt : context) (decl : Surface.Ast.scope_decl) : + context = let scope_uid = get_scope ctxt decl.scope_decl_name in let ctxt = List.fold_left @@ -491,7 +499,7 @@ let process_scope_decl (ctxt : context) (decl : Ast.scope_decl) : context = List.fold_right (fun item acc -> match Marked.unmark item with - | Ast.ContextData + | Surface.Ast.ContextData ({ scope_decl_context_item_attribute = { scope_decl_context_io_output = true, _; _ }; @@ -499,8 +507,10 @@ let process_scope_decl (ctxt : context) (decl : Ast.scope_decl) : context = } as data) -> Marked.mark (Marked.get_mark item) { - Ast.struct_decl_field_name = data.scope_decl_context_item_name; - Ast.struct_decl_field_typ = data.scope_decl_context_item_typ; + Surface.Ast.struct_decl_field_name = + data.scope_decl_context_item_name; + Surface.Ast.struct_decl_field_typ = + data.scope_decl_context_item_typ; } :: acc | _ -> acc) @@ -512,16 +522,44 @@ let process_scope_decl (ctxt : context) (decl : Ast.scope_decl) : context = { ctxt with structs = - StructMap.add + StructName.Map.add (get_struct ctxt decl.scope_decl_name) - StructFieldMap.empty ctxt.structs; + StructField.Map.empty ctxt.structs; } else - process_struct_decl ctxt - { - struct_decl_name = decl.scope_decl_name; - struct_decl_fields = output_fields; - } + let ctxt = + process_struct_decl ctxt + { + struct_decl_name = decl.scope_decl_name; + struct_decl_fields = output_fields; + } + in + let out_struct_fields = + let sco = ScopeName.Map.find scope_uid ctxt.scopes in + let str = get_struct ctxt decl.scope_decl_name in + IdentName.Map.fold + (fun id var svmap -> + match var with + | SubScope _ -> svmap + | ScopeVar v -> ( + try + let field = + StructName.Map.find str (IdentName.Map.find id ctxt.field_idmap) + in + ScopeVar.Map.add v field svmap + with Not_found -> svmap)) + sco.var_idmap ScopeVar.Map.empty + in + let typedefs = + IdentName.Map.update + (Marked.unmark decl.scope_decl_name) + (function + | Some (TScope (scope, { out_struct_name; _ })) -> + Some (TScope (scope, { out_struct_name; out_struct_fields })) + | _ -> assert false) + ctxt.typedefs + in + { ctxt with typedefs } let typedef_info = function | TStruct t -> StructName.get_info t @@ -529,8 +567,8 @@ let typedef_info = function | TScope (s, _) -> ScopeName.get_info s (** Process the names of all declaration items *) -let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : - context = +let process_name_item (ctxt : context) (item : Surface.Ast.code_item Marked.pos) + : context = let raise_already_defined_error (use : Uid.MarkedString.info) name pos msg = Errors.raise_multispanned_error [ @@ -538,7 +576,7 @@ let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : Some "Second definition:", pos; ] "%s name \"%a\" already defined" msg - (Utils.Cli.format_with_style [ANSITerminal.yellow]) + (Cli.format_with_style [ANSITerminal.yellow]) name in match Marked.unmark item with @@ -548,21 +586,26 @@ let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : Option.iter (fun use -> raise_already_defined_error (typedef_info use) name pos "scope") - (Desugared.Ast.IdentMap.find_opt name ctxt.typedefs); + (IdentName.Map.find_opt name ctxt.typedefs); let scope_uid = ScopeName.fresh (name, pos) in let out_struct_uid = StructName.fresh (name, pos) in { ctxt with typedefs = - Desugared.Ast.IdentMap.add name - (TScope (scope_uid, out_struct_uid)) + IdentName.Map.add name + (TScope + ( scope_uid, + { + out_struct_name = out_struct_uid; + out_struct_fields = ScopeVar.Map.empty; + } )) ctxt.typedefs; scopes = - ScopeMap.add scope_uid + ScopeName.Map.add scope_uid { - var_idmap = Desugared.Ast.IdentMap.empty; - scope_defs_contexts = Desugared.Ast.ScopeDefMap.empty; - sub_scopes = ScopeSet.empty; + var_idmap = IdentName.Map.empty; + scope_defs_contexts = Ast.ScopeDefMap.empty; + sub_scopes = ScopeName.Set.empty; } ctxt.scopes; } @@ -571,12 +614,12 @@ let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : Option.iter (fun use -> raise_already_defined_error (typedef_info use) name pos "struct") - (Desugared.Ast.IdentMap.find_opt name ctxt.typedefs); + (IdentName.Map.find_opt name ctxt.typedefs); let s_uid = StructName.fresh sdecl.struct_decl_name in { ctxt with typedefs = - Desugared.Ast.IdentMap.add + IdentName.Map.add (Marked.unmark sdecl.struct_decl_name) (TStruct s_uid) ctxt.typedefs; } @@ -585,20 +628,20 @@ let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : Option.iter (fun use -> raise_already_defined_error (typedef_info use) name pos "enum") - (Desugared.Ast.IdentMap.find_opt name ctxt.typedefs); + (IdentName.Map.find_opt name ctxt.typedefs); let e_uid = EnumName.fresh edecl.enum_decl_name in { ctxt with typedefs = - Desugared.Ast.IdentMap.add + IdentName.Map.add (Marked.unmark edecl.enum_decl_name) (TEnum e_uid) ctxt.typedefs; } | ScopeUse _ -> ctxt (** Process a code item that is a declaration *) -let process_decl_item (ctxt : context) (item : Ast.code_item Marked.pos) : - context = +let process_decl_item (ctxt : context) (item : Surface.Ast.code_item Marked.pos) + : context = match Marked.unmark item with | ScopeDecl decl -> process_scope_decl ctxt decl | StructDecl sdecl -> process_struct_decl ctxt sdecl @@ -608,43 +651,46 @@ let process_decl_item (ctxt : context) (item : Ast.code_item Marked.pos) : (** Process a code block *) let process_code_block (ctxt : context) - (block : Ast.code_block) - (process_item : context -> Ast.code_item Marked.pos -> context) : context = + (block : Surface.Ast.code_block) + (process_item : context -> Surface.Ast.code_item Marked.pos -> context) : + context = List.fold_left (fun ctxt decl -> process_item ctxt decl) ctxt block (** Process a law structure, only considering the code blocks *) let rec process_law_structure (ctxt : context) - (s : Ast.law_structure) - (process_item : context -> Ast.code_item Marked.pos -> context) : context = + (s : Surface.Ast.law_structure) + (process_item : context -> Surface.Ast.code_item Marked.pos -> context) : + context = match s with - | Ast.LawHeading (_, children) -> + | Surface.Ast.LawHeading (_, children) -> List.fold_left (fun ctxt child -> process_law_structure ctxt child process_item) ctxt children - | Ast.CodeBlock (block, _, _) -> process_code_block ctxt block process_item - | Ast.LawInclude _ | Ast.LawText _ -> ctxt + | Surface.Ast.CodeBlock (block, _, _) -> + process_code_block ctxt block process_item + | Surface.Ast.LawInclude _ | Surface.Ast.LawText _ -> ctxt (** {1 Scope uses pass} *) let get_def_key - (name : Ast.qident) - (state : Ast.ident Marked.pos option) + (name : Surface.Ast.scope_var) + (state : Surface.Ast.lident Marked.pos option) (scope_uid : ScopeName.t) (ctxt : context) - (pos : Pos.t) : Desugared.Ast.ScopeDef.t = - let scope_ctxt = ScopeMap.find scope_uid ctxt.scopes in + (pos : Pos.t) : Ast.ScopeDef.t = + let scope_ctxt = ScopeName.Map.find scope_uid ctxt.scopes in match name with | [x] -> let x_uid = get_var_uid scope_uid ctxt x in - let var_sig = ScopeVarMap.find x_uid ctxt.var_typs in - Desugared.Ast.ScopeDef.Var + let var_sig = ScopeVar.Map.find x_uid ctxt.var_typs in + Ast.ScopeDef.Var ( x_uid, match state with | Some state -> ( try Some - (Desugared.Ast.IdentMap.find (Marked.unmark state) + (IdentName.Map.find (Marked.unmark state) var_sig.var_sig_states_idmap) with Not_found -> Errors.raise_multispanned_error @@ -656,8 +702,7 @@ let get_def_key "This identifier is not a state declared for variable %a." ScopeVar.format_t x_uid) | None -> - if not (Desugared.Ast.IdentMap.is_empty var_sig.var_sig_states_idmap) - then + if not (IdentName.Map.is_empty var_sig.var_sig_states_idmap) then Errors.raise_multispanned_error [ None, Marked.get_mark x; @@ -670,9 +715,7 @@ let get_def_key else None ) | [y; x] -> let (subscope_uid, subscope_real_uid) : SubScopeName.t * ScopeName.t = - match - Desugared.Ast.IdentMap.find_opt (Marked.unmark y) scope_ctxt.var_idmap - with + match IdentName.Map.find_opt (Marked.unmark y) scope_ctxt.var_idmap with | Some (SubScope (v, u)) -> v, u | Some _ -> Errors.raise_spanned_error pos @@ -683,22 +726,89 @@ let get_def_key Print.lit_style (Marked.unmark y) in let x_uid = get_var_uid subscope_real_uid ctxt x in - Desugared.Ast.ScopeDef.SubScopeVar (subscope_uid, x_uid, pos) + Ast.ScopeDef.SubScopeVar (subscope_uid, x_uid, pos) | _ -> Errors.raise_spanned_error pos "This line is defining a quantity that is neither a scope variable nor a \ subscope variable. In particular, it is not possible to define struct \ fields individually in Catala." +let update_def_key_ctx + (d : Surface.Ast.definition) + (def_key_ctx : scope_def_context) : scope_def_context = + (* First, we update the def key context with information about the + definition's label*) + let def_key_ctx = + match d.Surface.Ast.definition_label with + | None -> def_key_ctx + | Some label -> + let new_label_idmap = + IdentName.Map.update (Marked.unmark label) + (fun existing_label -> + match existing_label with + | Some existing_label -> Some existing_label + | None -> Some (LabelName.fresh label)) + def_key_ctx.label_idmap + in + { def_key_ctx with label_idmap = new_label_idmap } + in + (* And second, we update the map of default rulenames for unlabeled + exceptions *) + match d.Surface.Ast.definition_exception_to with + (* If this definition is an exception, it cannot be a default definition *) + | UnlabeledException | ExceptionToLabel _ -> def_key_ctx + (* If it is not an exception, we need to distinguish between several cases *) + | NotAnException -> ( + match def_key_ctx.default_exception_rulename with + (* There was already a default definition for this key. If we need it, it is + ambiguous *) + | Some old -> + { + def_key_ctx with + default_exception_rulename = + Some + (Ambiguous + ([Marked.get_mark d.definition_name] + @ + match old with Ambiguous old -> old | Unique (_, pos) -> [pos])); + } + (* No definition has been set yet for this key *) + | None -> ( + match d.Surface.Ast.definition_label with + (* This default definition has a label. This is not allowed for unlabeled + exceptions *) + | Some _ -> + { + def_key_ctx with + default_exception_rulename = + Some (Ambiguous [Marked.get_mark d.definition_name]); + } + (* This is a possible default definition for this key. We create and store + a fresh rulename *) + | None -> + { + def_key_ctx with + default_exception_rulename = + Some (Unique (d.definition_id, Marked.get_mark d.definition_name)); + })) + +let empty_def_key_ctx = + { + (* Here, this is the first time we encounter a definition for this + definition key *) + default_exception_rulename = None; + label_idmap = IdentName.Map.empty; + } + let process_definition (ctxt : context) (s_name : ScopeName.t) - (d : Ast.definition) : context = + (d : Surface.Ast.definition) : context = (* We update the definition context inside the big context *) { ctxt with scopes = - ScopeMap.update s_name + ScopeName.Map.update s_name (fun (s_ctxt : scope_context option) -> let def_key = get_def_key @@ -713,88 +823,11 @@ let process_definition { s_ctxt with scope_defs_contexts = - Desugared.Ast.ScopeDefMap.update def_key + Ast.ScopeDefMap.update def_key (fun def_key_ctx -> - let def_key_ctx : scope_def_context = - Option.fold - ~none: - { - (* Here, this is the first time we encounter a - definition for this definition key *) - default_exception_rulename = None; - label_idmap = Desugared.Ast.IdentMap.empty; - } - ~some:(fun x -> x) - def_key_ctx - in - (* First, we update the def key context with information - about the definition's label*) - let def_key_ctx = - match d.Ast.definition_label with - | None -> def_key_ctx - | Some label -> - let new_label_idmap = - Desugared.Ast.IdentMap.update (Marked.unmark label) - (fun existing_label -> - match existing_label with - | Some existing_label -> Some existing_label - | None -> - Some (Desugared.Ast.LabelName.fresh label)) - def_key_ctx.label_idmap - in - { def_key_ctx with label_idmap = new_label_idmap } - in - (* And second, we update the map of default rulenames for - unlabeled exceptions *) - let def_key_ctx = - match d.Ast.definition_exception_to with - (* If this definition is an exception, it cannot be a - default definition *) - | UnlabeledException | ExceptionToLabel _ -> def_key_ctx - (* If it is not an exception, we need to distinguish - between several cases *) - | NotAnException -> ( - match def_key_ctx.default_exception_rulename with - (* There was already a default definition for this - key. If we need it, it is ambiguous *) - | Some old -> - { - def_key_ctx with - default_exception_rulename = - Some - (Ambiguous - ([Marked.get_mark d.definition_name] - @ - match old with - | Ambiguous old -> old - | Unique (_, pos) -> [pos])); - } - (* No definition has been set yet for this key *) - | None -> ( - match d.Ast.definition_label with - (* This default definition has a label. This is not - allowed for unlabeled exceptions *) - | Some _ -> - { - def_key_ctx with - default_exception_rulename = - Some - (Ambiguous - [Marked.get_mark d.definition_name]); - } - (* This is a possible default definition for this - key. We create and store a fresh rulename *) - | None -> - { - def_key_ctx with - default_exception_rulename = - Some - (Unique - ( d.definition_id, - Marked.get_mark d.definition_name )); - })) - in - Some def_key_ctx) + Some + (update_def_key_ctx d + (Option.value ~default:empty_def_key_ctx def_key_ctx))) s_ctxt.scope_defs_contexts; }) ctxt.scopes; @@ -803,31 +836,34 @@ let process_definition let process_scope_use_item (s_name : ScopeName.t) (ctxt : context) - (sitem : Ast.scope_use_item Marked.pos) : context = + (sitem : Surface.Ast.scope_use_item Marked.pos) : context = match Marked.unmark sitem with - | Rule r -> process_definition ctxt s_name (Ast.rule_to_def r) + | Rule r -> process_definition ctxt s_name (Surface.Ast.rule_to_def r) | Definition d -> process_definition ctxt s_name d | _ -> ctxt -let process_scope_use (ctxt : context) (suse : Ast.scope_use) : context = +let process_scope_use (ctxt : context) (suse : Surface.Ast.scope_use) : context + = let s_name = match - Desugared.Ast.IdentMap.find_opt - (Marked.unmark suse.Ast.scope_use_name) + IdentName.Map.find_opt + (Marked.unmark suse.Surface.Ast.scope_use_name) ctxt.typedefs with | Some (TScope (sn, _)) -> sn | _ -> Errors.raise_spanned_error - (Marked.get_mark suse.Ast.scope_use_name) + (Marked.get_mark suse.Surface.Ast.scope_use_name) "\"%a\": this scope has not been declared anywhere, is it a typo?" - (Utils.Cli.format_with_style [ANSITerminal.yellow]) - (Marked.unmark suse.Ast.scope_use_name) + (Cli.format_with_style [ANSITerminal.yellow]) + (Marked.unmark suse.Surface.Ast.scope_use_name) in - List.fold_left (process_scope_use_item s_name) ctxt suse.Ast.scope_use_items + List.fold_left + (process_scope_use_item s_name) + ctxt suse.Surface.Ast.scope_use_items -let process_use_item (ctxt : context) (item : Ast.code_item Marked.pos) : - context = +let process_use_item (ctxt : context) (item : Surface.Ast.code_item Marked.pos) + : context = match Marked.unmark item with | ScopeDecl _ | StructDecl _ | EnumDecl _ -> ctxt | ScopeUse suse -> process_scope_use ctxt suse @@ -835,17 +871,17 @@ let process_use_item (ctxt : context) (item : Ast.code_item Marked.pos) : (** {1 API} *) (** Derive the context from metadata, in one pass over the declarations *) -let form_context (prgm : Ast.program) : context = +let form_context (prgm : Surface.Ast.program) : context = let empty_ctxt = { - local_var_idmap = Desugared.Ast.IdentMap.empty; - typedefs = Desugared.Ast.IdentMap.empty; - scopes = ScopeMap.empty; - var_typs = ScopeVarMap.empty; - structs = StructMap.empty; - field_idmap = Desugared.Ast.IdentMap.empty; - enums = EnumMap.empty; - constructor_idmap = Desugared.Ast.IdentMap.empty; + local_var_idmap = IdentName.Map.empty; + typedefs = IdentName.Map.empty; + scopes = ScopeName.Map.empty; + var_typs = ScopeVar.Map.empty; + structs = StructName.Map.empty; + field_idmap = IdentName.Map.empty; + enums = EnumName.Map.empty; + constructor_idmap = IdentName.Map.empty; } in let ctxt = diff --git a/compiler/surface/name_resolution.mli b/compiler/desugared/name_resolution.mli similarity index 67% rename from compiler/surface/name_resolution.mli rename to compiler/desugared/name_resolution.mli index eedee271..774e158c 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/desugared/name_resolution.mli @@ -18,20 +18,18 @@ (** Builds a context that allows for mapping each name to a precise uid, taking lexical scopes into account *) -open Utils +open Catala_utils open Shared_ast (** {1 Name resolution context} *) -type ident = string - type unique_rulename = | Ambiguous of Pos.t list - | Unique of Desugared.Ast.RuleName.t Marked.pos + | Unique of RuleName.t Marked.pos type scope_def_context = { default_exception_rulename : unique_rulename option; - label_idmap : Desugared.Ast.LabelName.t Desugared.Ast.IdentMap.t; + label_idmap : LabelName.t IdentName.Map.t; } type scope_var_or_subscope = @@ -39,26 +37,26 @@ type scope_var_or_subscope = | SubScope of SubScopeName.t * ScopeName.t type scope_context = { - var_idmap : scope_var_or_subscope Desugared.Ast.IdentMap.t; + var_idmap : scope_var_or_subscope IdentName.Map.t; (** All variables, including scope variables and subscopes *) - scope_defs_contexts : scope_def_context Desugared.Ast.ScopeDefMap.t; + scope_defs_contexts : scope_def_context Ast.ScopeDefMap.t; (** What is the default rule to refer to for unnamed exceptions, if any *) - sub_scopes : ScopeSet.t; + sub_scopes : ScopeName.Set.t; (** Other scopes referred to by this scope. Used for dependency analysis *) } (** Inside a scope, we distinguish between the variables and the subscopes. *) -type struct_context = typ StructFieldMap.t +type struct_context = typ StructField.Map.t (** Types of the fields of a struct *) -type enum_context = typ EnumConstructorMap.t +type enum_context = typ EnumConstructor.Map.t (** Types of the payloads of the cases of an enum *) type var_sig = { var_sig_typ : typ; var_sig_is_condition : bool; - var_sig_io : Ast.scope_decl_context_io; - var_sig_states_idmap : StateName.t Desugared.Ast.IdentMap.t; + var_sig_io : Surface.Ast.scope_decl_context_io; + var_sig_states_idmap : StateName.t IdentName.Map.t; var_sig_states_list : StateName.t list; } @@ -67,25 +65,26 @@ type var_sig = { type typedef = | TStruct of StructName.t | TEnum of EnumName.t - | TScope of ScopeName.t * StructName.t + | TScope of ScopeName.t * scope_out_struct (** Implicitly defined output struct *) type context = { - local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Ast.expr Var.t IdentName.Map.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) - typedefs : typedef Desugared.Ast.IdentMap.t; + typedefs : typedef IdentName.Map.t; (** Gathers the names of the scopes, structs and enums *) - field_idmap : StructFieldName.t StructMap.t Desugared.Ast.IdentMap.t; + field_idmap : StructField.t StructName.Map.t IdentName.Map.t; (** The names of the struct fields. Names of fields can be shared between different structs *) - constructor_idmap : EnumConstructor.t EnumMap.t Desugared.Ast.IdentMap.t; + constructor_idmap : EnumConstructor.t EnumName.Map.t IdentName.Map.t; (** The names of the enum constructors. Constructor names can be shared between different enums *) - scopes : scope_context ScopeMap.t; (** For each scope, its context *) - structs : struct_context StructMap.t; (** For each struct, its context *) - enums : enum_context EnumMap.t; (** For each enum, its context *) - var_typs : var_sig ScopeVarMap.t; + scopes : scope_context ScopeName.Map.t; (** For each scope, its context *) + structs : struct_context StructName.Map.t; + (** For each struct, its context *) + enums : enum_context EnumName.Map.t; (** For each enum, its context *) + var_typs : var_sig ScopeVar.Map.t; (** The signatures of each scope variable declared *) } (** Main context used throughout {!module: Surface.Desugaring} *) @@ -96,7 +95,7 @@ val raise_unsupported_feature : string -> Pos.t -> 'a (** Temporary function raising an error message saying that a feature is not supported yet *) -val raise_unknown_identifier : string -> ident Marked.pos -> 'a +val raise_unknown_identifier : string -> IdentName.t Marked.pos -> 'a (** Function to call whenever an identifier used somewhere has not been declared in the program previously *) @@ -104,53 +103,53 @@ val get_var_typ : context -> ScopeVar.t -> typ (** Gets the type associated to an uid *) val is_var_cond : context -> ScopeVar.t -> bool -val get_var_io : context -> ScopeVar.t -> Ast.scope_decl_context_io +val get_var_io : context -> ScopeVar.t -> Surface.Ast.scope_decl_context_io -val get_var_uid : ScopeName.t -> context -> ident Marked.pos -> ScopeVar.t +val get_var_uid : ScopeName.t -> context -> IdentName.t Marked.pos -> ScopeVar.t (** Get the variable uid inside the scope given in argument *) val get_subscope_uid : - ScopeName.t -> context -> ident Marked.pos -> SubScopeName.t + ScopeName.t -> context -> IdentName.t Marked.pos -> SubScopeName.t (** Get the subscope uid inside the scope given in argument *) -val is_subscope_uid : ScopeName.t -> context -> ident -> bool +val is_subscope_uid : ScopeName.t -> context -> IdentName.t -> bool (** [is_subscope_uid scope_uid ctxt y] returns true if [y] belongs to the subscopes of [scope_uid]. *) val belongs_to : context -> ScopeVar.t -> ScopeName.t -> bool (** Checks if the var_uid belongs to the scope scope_uid *) -val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ +val get_def_typ : context -> Ast.ScopeDef.t -> typ (** Retrieves the type of a scope definition from the context *) -val is_def_cond : context -> Desugared.Ast.ScopeDef.t -> bool -val is_type_cond : Ast.typ -> bool +val is_def_cond : context -> Ast.ScopeDef.t -> bool +val is_type_cond : Surface.Ast.typ -> bool -val add_def_local_var : context -> ident -> context * Desugared.Ast.expr Var.t +val add_def_local_var : context -> IdentName.t -> context * Ast.expr Var.t (** Adds a binding to the context *) val get_def_key : - Ast.qident -> - Ast.ident Marked.pos option -> + Surface.Ast.scope_var -> + Surface.Ast.lident Marked.pos option -> ScopeName.t -> context -> Pos.t -> - Desugared.Ast.ScopeDef.t + Ast.ScopeDef.t (** Usage: [get_def_key var_name var_state scope_uid ctxt pos]*) -val get_enum : context -> ident Marked.pos -> EnumName.t +val get_enum : context -> IdentName.t Marked.pos -> EnumName.t (** Find an enum definition from the typedefs, failing if there is none or it has a different kind *) -val get_struct : context -> ident Marked.pos -> StructName.t +val get_struct : context -> IdentName.t Marked.pos -> StructName.t (** Find a struct definition from the typedefs (possibly an implicit output struct from a scope), failing if there is none or it has a different kind *) -val get_scope : context -> ident Marked.pos -> ScopeName.t +val get_scope : context -> IdentName.t Marked.pos -> ScopeName.t (** Find a scope definition from the typedefs, failing if there is none or it has a different kind *) (** {1 API} *) -val form_context : Ast.program -> context +val form_context : Surface.Ast.program -> context (** Derive the context from metadata, in one pass over the declarations *) diff --git a/compiler/driver.ml b/compiler/driver.ml index 470c14b3..e004cbcf 100644 --- a/compiler/driver.ml +++ b/compiler/driver.ml @@ -15,10 +15,7 @@ License for the specific language governing permissions and limitations under the License. *) -module Cli = Utils.Cli -module File = Utils.File -module Errors = Utils.Errors -module Pos = Utils.Pos +open Catala_utils (** Associates a {!type: Cli.backend_lang} with its string represtation. *) let languages = ["en", Cli.En; "fr", Cli.Fr; "pl", Cli.Pl] @@ -76,7 +73,15 @@ let driver source_file (options : Cli.options) : int = try `Plugin (Plugin.find s) with Not_found -> Errors.raise_error - "The selected backend (%s) is not supported by Catala" backend) + "The selected backend (%s) is not supported by Catala, nor was a \ + plugin by this name found under %a" + backend + (Format.pp_print_list + ~pp_sep:(fun ppf () -> Format.fprintf ppf "@ or @ ") + (fun ppf dir -> + Format.pp_print_string ppf + (try Unix.readlink dir with _ -> dir))) + options.plugins_dirs) in let prgm = Surface.Parser_driver.parse_top_level_file source_file language @@ -143,7 +148,7 @@ let driver source_file (options : Cli.options) : int = | ( `Interpret | `Typecheck | `OCaml | `Python | `Scalc | `Lcalc | `Dcalc | `Scopelang | `Proof | `Plugin _ ) as backend -> ( Cli.debug_print "Name resolution..."; - let ctxt = Surface.Name_resolution.form_context prgm in + let ctxt = Desugared.Name_resolution.form_context prgm in let scope_uid = match options.ex_scope, backend with | None, `Interpret -> @@ -151,27 +156,29 @@ let driver source_file (options : Cli.options) : int = | None, _ -> let _, scope = try - Desugared.Ast.IdentMap.filter_map + Shared_ast.IdentName.Map.filter_map (fun _ -> function - | Surface.Name_resolution.TScope (uid, _) -> Some uid + | Desugared.Name_resolution.TScope (uid, _) -> Some uid | _ -> None) ctxt.typedefs - |> Desugared.Ast.IdentMap.choose + |> Shared_ast.IdentName.Map.choose with Not_found -> Errors.raise_error "There isn't any scope inside the program." in scope | Some name, _ -> ( - match Desugared.Ast.IdentMap.find_opt name ctxt.typedefs with - | Some (Surface.Name_resolution.TScope (uid, _)) -> uid + match Shared_ast.IdentName.Map.find_opt name ctxt.typedefs with + | Some (Desugared.Name_resolution.TScope (uid, _)) -> uid | _ -> Errors.raise_error "There is no scope \"%s\" inside the program." name) in Cli.debug_print "Desugaring..."; - let prgm = Surface.Desugaring.desugar_program ctxt prgm in + let prgm = Desugared.From_surface.translate_program ctxt prgm in + Cli.debug_print "Disambiguating..."; + let prgm = Desugared.Disambiguate.program prgm in Cli.debug_print "Collecting rules..."; - let prgm = Desugared.Desugared_to_scope.translate_program prgm in + let prgm = Scopelang.From_desugared.translate_program prgm in match backend with | `Scopelang -> let _output_file, with_output = get_output_format () in @@ -180,7 +187,8 @@ let driver source_file (options : Cli.options) : int = if Option.is_some options.ex_scope then Format.fprintf fmt "%a\n" (Scopelang.Print.scope prgm.program_ctx ~debug:options.debug) - (scope_uid, Shared_ast.ScopeMap.find scope_uid prgm.program_scopes) + ( scope_uid, + Shared_ast.ScopeName.Map.find scope_uid prgm.program_scopes ) else Format.fprintf fmt "%a\n" (Scopelang.Print.program ~debug:options.debug) @@ -194,7 +202,7 @@ let driver source_file (options : Cli.options) : int = in let prgm = Scopelang.Ast.type_program prgm in Cli.debug_print "Translating to default calculus..."; - let prgm = Scopelang.Scope_to_dcalc.translate_program prgm in + let prgm = Dcalc.From_scopelang.translate_program prgm in let prgm = if options.optimize then begin Cli.debug_print "Optimizing default calculus..."; @@ -202,8 +210,21 @@ let driver source_file (options : Cli.options) : int = end else prgm in + (* Cli.debug_print (Format.asprintf "Typechecking results :@\n%a" + (Print.typ prgm.decl_ctx) typ); *) match backend with | `Typecheck -> + Cli.debug_print "Typechecking again..."; + let _ = + try Shared_ast.Typing.program prgm + with Errors.StructuredError (msg, details) -> + let msg = + "Typing error occured during re-typing on the 'default \ + calculus'. This is a bug in the Catala compiler.\n" + ^ msg + in + raise (Errors.StructuredError (msg, details)) + in (* That's it! *) Cli.result_print "Typechecking successful!" | `Dcalc -> @@ -229,7 +250,7 @@ let driver source_file (options : Cli.options) : int = Shared_ast.Expr.unbox (Shared_ast.Program.to_expr prgm scope_uid) in Format.fprintf fmt "%a\n" - (Shared_ast.Expr.format prgm.decl_ctx) + (Shared_ast.Expr.format ~debug:options.debug prgm.decl_ctx) prgrm_dcalc_expr | (`Interpret | `OCaml | `Python | `Scalc | `Lcalc | `Proof | `Plugin _) as backend -> ( @@ -244,8 +265,6 @@ let driver source_file (options : Cli.options) : int = in raise (Errors.StructuredError (msg, details)) in - (* Cli.debug_print (Format.asprintf "Typechecking results :@\n%a" - (Print.typ prgm.decl_ctx) typ); *) match backend with | `Proof -> let vcs = @@ -308,24 +327,14 @@ let driver source_file (options : Cli.options) : int = if Option.is_some options.ex_scope then Format.fprintf fmt "%a\n" (Shared_ast.Scope.format ~debug:options.debug prgm.decl_ctx) - ( scope_uid, - Option.get - (Shared_ast.Scope.fold_left ~init:None - ~f:(fun acc scope_def _ -> - if - Shared_ast.ScopeName.compare scope_def.scope_name - scope_uid - = 0 - then Some scope_def.scope_body - else acc) - prgm.scopes) ) + (scope_uid, Shared_ast.Program.get_scope_body prgm scope_uid) else let prgrm_lcalc_expr = Shared_ast.Expr.unbox (Shared_ast.Program.to_expr prgm scope_uid) in Format.fprintf fmt "%a\n" - (Shared_ast.Expr.format prgm.decl_ctx) + (Shared_ast.Expr.format ~debug:options.debug prgm.decl_ctx) prgrm_lcalc_expr | (`OCaml | `Python | `Scalc | `Plugin _) as backend -> ( match backend with diff --git a/compiler/driver.mli b/compiler/driver.mli index af6243f1..503d9522 100644 --- a/compiler/driver.mli +++ b/compiler/driver.mli @@ -15,9 +15,10 @@ License for the specific language governing permissions and limitations under the License. *) +open Catala_utils module Plugin = Plugin.PluginAPI -val driver : Utils.Pos.input_file -> Utils.Cli.options -> int +val driver : Pos.input_file -> Cli.options -> int (** Entry function for the executable. Returns a negative number in case of error. *) diff --git a/compiler/dune b/compiler/dune index 3fdc3105..35eb2f42 100644 --- a/compiler/dune +++ b/compiler/dune @@ -3,7 +3,7 @@ (public_name catala.driver) (libraries dynlink - utils + catala_utils surface desugared literate @@ -50,3 +50,7 @@ (documentation (package catala) (mld_files index)) + +(alias + (name catala) + (deps catala.exe)) diff --git a/compiler/index.mld b/compiler/index.mld index c84b5a89..42e93883 100644 --- a/compiler/index.mld +++ b/compiler/index.mld @@ -103,7 +103,7 @@ Two more modules contain additional features for the compiler: {ul {li {{: literate.html} Literate programming}} -{li {{: utils.html} Compiler utilities}} +{li {{: catala_utils.html} Compiler utilities}} } The Catala runtimes documentation is available here: diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index feb12929..a94f73b9 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils include Shared_ast type lit = lcalc glit @@ -28,31 +28,32 @@ let option_enum : EnumName.t = EnumName.fresh ("eoption", Pos.no_pos) let none_constr : EnumConstructor.t = EnumConstructor.fresh ("ENone", Pos.no_pos) let some_constr : EnumConstructor.t = EnumConstructor.fresh ("ESome", Pos.no_pos) -let option_enum_config : (EnumConstructor.t * typ) list = - [none_constr, (TLit TUnit, Pos.no_pos); some_constr, (TAny, Pos.no_pos)] +let option_enum_config : typ EnumConstructor.Map.t = + EnumConstructor.Map.empty + |> EnumConstructor.Map.add none_constr (TLit TUnit, Pos.no_pos) + |> EnumConstructor.Map.add some_constr (TAny, Pos.no_pos) (* FIXME: proper typing in all the constructors below *) let make_none m = let tunit = TLit TUnit, Expr.mark_pos m in - Expr.einj - (Expr.elit LUnit (Expr.with_ty m tunit)) - 0 option_enum - [TLit TUnit, Pos.no_pos; TAny, Pos.no_pos] - m + Expr.einj (Expr.elit LUnit (Expr.with_ty m tunit)) none_constr option_enum m let make_some e = let m = Marked.get_mark e in - Expr.einj e 1 option_enum - [TLit TUnit, Expr.mark_pos m; TAny, Expr.mark_pos m] - m + Expr.einj e some_constr option_enum m (** [make_matchopt_with_abs_arms arg e_none e_some] build an expression [match arg with |None -> e_none | Some -> e_some] and requires e_some and e_none to be in the form [EAbs ...].*) let make_matchopt_with_abs_arms arg e_none e_some = let m = Marked.get_mark arg in - Expr.ematch arg [e_none; e_some] option_enum m + let cases = + EnumConstructor.Map.empty + |> EnumConstructor.Map.add none_constr e_none + |> EnumConstructor.Map.add some_constr e_some + in + Expr.ematch arg option_enum cases m (** [make_matchopt pos v tau arg e_none e_some] builds an expression [match arg with | None () -> e_none | Some v -> e_some]. It binds v to diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 08e2ad60..be417680 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -14,6 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) +open Catala_utils open Shared_ast (** Abstract syntax tree for the lambda calculus *) @@ -32,7 +33,7 @@ type 'm program = 'm expr Shared_ast.program val option_enum : EnumName.t val none_constr : EnumConstructor.t val some_constr : EnumConstructor.t -val option_enum_config : (EnumConstructor.t * typ) list +val option_enum_config : typ EnumConstructor.Map.t val make_none : 'm mark -> 'm expr boxed val make_some : 'm expr boxed -> 'm expr boxed @@ -40,7 +41,7 @@ val make_matchopt_with_abs_arms : 'm expr boxed -> 'm expr boxed -> 'm expr boxed -> 'm expr boxed val make_matchopt : - Utils.Pos.t -> + Pos.t -> 'm expr Var.t -> typ -> 'm expr boxed -> diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index a17979f6..d85241ea 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast open Ast module D = Dcalc.Ast @@ -31,74 +31,56 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m expr) : m expr boxed = let rec aux e = let m = Marked.get_mark e in match Marked.unmark e with + | EStruct _ | EStructAccess _ | ETuple _ | ETupleAccess _ | EInj _ + | EArray _ | ELit _ | EAssert _ | EOp _ | EIfThenElse _ | ERaise _ + | ECatch _ -> + Expr.map_gather ~acc:Var.Set.empty ~join:Var.Set.union ~f:aux e | EVar v -> - ( (Bindlib.box_var v, m), - if Var.Set.mem v ctx.globally_bound_vars then Var.Set.empty - else Var.Set.singleton v ) - | ETuple (args, s) -> - let new_args, free_vars = - List.fold_left - (fun (new_args, free_vars) arg -> - let new_arg, new_free_vars = aux arg in - new_arg :: new_args, Var.Set.union new_free_vars free_vars) - ([], Var.Set.empty) args - in - Expr.etuple (List.rev new_args) s m, free_vars - | ETupleAccess (e1, n, s, typs) -> - let new_e1, free_vars = aux e1 in - Expr.etupleaccess new_e1 n s typs m, free_vars - | EInj (e1, n, e_name, typs) -> - let new_e1, free_vars = aux e1 in - Expr.einj new_e1 n e_name typs m, free_vars - | EMatch (e1, arms, e_name) -> - let new_e1, free_vars = aux e1 in + ( (if Var.Set.mem v ctx.globally_bound_vars then Var.Set.empty + else Var.Set.singleton v), + (Bindlib.box_var v, m) ) + | EMatch { e; cases; name } -> + let free_vars, new_e = aux e in (* We do not close the clotures inside the arms of the match expression, since they get a special treatment at compilation to Scalc. *) - let new_arms, free_vars = - List.fold_right - (fun arm (new_arms, free_vars) -> - match Marked.unmark arm with - | EAbs (binder, typs) -> + let free_vars, new_cases = + EnumConstructor.Map.fold + (fun cons e1 (free_vars, new_cases) -> + match Marked.unmark e1 with + | EAbs { binder; tys } -> let vars, body = Bindlib.unmbind binder in - let new_body, new_free_vars = aux body in + let new_free_vars, new_body = aux body in let new_binder = Expr.bind vars new_body in - ( Expr.eabs new_binder typs (Marked.get_mark arm) :: new_arms, - Var.Set.union free_vars new_free_vars ) + ( Var.Set.union free_vars new_free_vars, + EnumConstructor.Map.add cons + (Expr.eabs new_binder tys (Marked.get_mark e1)) + new_cases ) | _ -> failwith "should not happen") - arms ([], free_vars) + cases + (free_vars, EnumConstructor.Map.empty) in - Expr.ematch new_e1 new_arms e_name m, free_vars - | EArray args -> - let new_args, free_vars = - List.fold_right - (fun arg (new_args, free_vars) -> - let new_arg, new_free_vars = aux arg in - new_arg :: new_args, Var.Set.union free_vars new_free_vars) - args ([], Var.Set.empty) - in - Expr.earray new_args m, free_vars - | ELit l -> Expr.elit l m, Var.Set.empty - | EApp ((EAbs (binder, typs_abs), e1_pos), args) -> + free_vars, Expr.ematch new_e name new_cases m + | EApp { f = EAbs { binder; tys }, e1_pos; args } -> (* let-binding, we should not close these *) let vars, body = Bindlib.unmbind binder in - let new_body, free_vars = aux body in + let free_vars, new_body = aux body in let new_binder = Expr.bind vars new_body in - let new_args, free_vars = + let free_vars, new_args = List.fold_right - (fun arg (new_args, free_vars) -> - let new_arg, new_free_vars = aux arg in - new_arg :: new_args, Var.Set.union free_vars new_free_vars) - args ([], free_vars) + (fun arg (free_vars, new_args) -> + let new_free_vars, new_arg = aux arg in + Var.Set.union free_vars new_free_vars, new_arg :: new_args) + args (free_vars, []) in - Expr.eapp (Expr.eabs new_binder typs_abs e1_pos) new_args m, free_vars - | EAbs (binder, typs) -> + free_vars, Expr.eapp (Expr.eabs new_binder tys e1_pos) new_args m + | EAbs { binder; tys } -> (* λ x.t *) let binder_mark = m in let binder_pos = Expr.mark_pos binder_mark in (* Converting the closure. *) let vars, body = Bindlib.unmbind binder in (* t *) - let new_body, body_vars = aux body in + let body_vars, new_body = aux body in (* [[t]] *) let extra_vars = Var.Set.diff body_vars (Var.Set.of_list (Array.to_list vars)) @@ -117,8 +99,8 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m expr) : m expr boxed = (fun i _ -> Expr.etupleaccess (Expr.evar inner_c_var binder_mark) - (i + 1) None - (List.map (fun _ -> any_ty) extra_vars_list) + (i + 1) + (List.length extra_vars_list) binder_mark) extra_vars_list) new_body @@ -128,10 +110,11 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m expr) : m expr boxed = Expr.make_abs (Array.concat [Array.make 1 inner_c_var; vars]) new_closure_body - ((TAny, binder_pos) :: typs) + ((TAny, binder_pos) :: tys) (Expr.pos e) in - ( Expr.make_let_in code_var + ( extra_vars, + Expr.make_let_in code_var (TAny, Expr.pos e) new_closure (Expr.etuple @@ -139,40 +122,25 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m expr) : m expr boxed = :: List.map (fun extra_var -> Bindlib.box_var extra_var, binder_mark) extra_vars_list) - None m) - (Expr.pos e), - extra_vars ) - | EApp ((EOp op, pos_op), args) -> + m) + (Expr.pos e) ) + | EApp { f = EOp _, _; _ } -> (* This corresponds to an operator call, which we don't want to transform*) - let new_args, free_vars = - List.fold_right - (fun arg (new_args, free_vars) -> - let new_arg, new_free_vars = aux arg in - new_arg :: new_args, Var.Set.union free_vars new_free_vars) - args ([], Var.Set.empty) - in - Expr.eapp (Expr.eop op pos_op) new_args m, free_vars - | EApp ((EVar v, v_pos), args) when Var.Set.mem v ctx.globally_bound_vars -> + Expr.map_gather ~acc:Var.Set.empty ~join:Var.Set.union ~f:aux e + | EApp { f = EVar v, _; _ } when Var.Set.mem v ctx.globally_bound_vars -> (* This corresponds to a scope call, which we don't want to transform*) - let new_args, free_vars = - List.fold_right - (fun arg (new_args, free_vars) -> - let new_arg, new_free_vars = aux arg in - new_arg :: new_args, Var.Set.union free_vars new_free_vars) - args ([], Var.Set.empty) - in - Expr.eapp (Bindlib.box_var v, v_pos) new_args m, free_vars - | EApp (e1, args) -> - let new_e1, free_vars = aux e1 in + Expr.map_gather ~acc:Var.Set.empty ~join:Var.Set.union ~f:aux e + | EApp { f = e1; args } -> + let free_vars, new_e1 = aux e1 in let env_var = Var.make "env" in let code_var = Var.make "code" in - let new_args, free_vars = + let free_vars, new_args = List.fold_right - (fun arg (new_args, free_vars) -> - let new_arg, new_free_vars = aux arg in - new_arg :: new_args, Var.Set.union free_vars new_free_vars) - args ([], free_vars) + (fun arg (free_vars, new_args) -> + let new_free_vars, new_arg = aux arg in + Var.Set.union free_vars new_free_vars, new_arg :: new_args) + args (free_vars, []) in let call_expr = let m1 = Marked.get_mark e1 in @@ -180,7 +148,8 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m expr) : m expr boxed = (TAny, Expr.pos e) (Expr.etupleaccess (Bindlib.box_var env_var, m1) - 0 None [ (*TODO: fill?*) ] + 0 + (List.length new_args + 1) m) (Expr.eapp (Bindlib.box_var code_var, m1) @@ -188,25 +157,12 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m expr) : m expr boxed = m) (Expr.pos e) in - ( Expr.make_let_in env_var (TAny, Expr.pos e) new_e1 call_expr (Expr.pos e), - free_vars ) - | EAssert e1 -> - let new_e1, free_vars = aux e1 in - Expr.eassert new_e1 m, free_vars - | EOp op -> Expr.eop op m, Var.Set.empty - | EIfThenElse (e1, e2, e3) -> - let new_e1, free_vars1 = aux e1 in - let new_e2, free_vars2 = aux e2 in - let new_e3, free_vars3 = aux e3 in - ( Expr.eifthenelse new_e1 new_e2 new_e3 m, - Var.Set.union (Var.Set.union free_vars1 free_vars2) free_vars3 ) - | ERaise except -> Expr.eraise except m, Var.Set.empty - | ECatch (e1, except, e2) -> - let new_e1, free_vars1 = aux e1 in - let new_e2, free_vars2 = aux e2 in - Expr.ecatch new_e1 except new_e2 m, Var.Set.union free_vars1 free_vars2 + ( free_vars, + Expr.make_let_in env_var + (TAny, Expr.pos e) + new_e1 call_expr (Expr.pos e) ) in - let e', _vars = aux e in + let _vars, e' = aux e in e' let closure_conversion (p : 'm program) : 'm program Bindlib.box = diff --git a/compiler/lcalc/compile_with_exceptions.ml b/compiler/lcalc/compile_with_exceptions.ml index 36f3cacc..ab612d82 100644 --- a/compiler/lcalc/compile_with_exceptions.ml +++ b/compiler/lcalc/compile_with_exceptions.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast module D = Dcalc.Ast module A = Ast @@ -43,7 +43,7 @@ let rec translate_default Expr.make_app (Expr.make_var (Var.translate A.handle_default) - (Expr.with_ty mark_default (Utils.Marked.mark pos TAny))) + (Expr.with_ty mark_default (Marked.mark pos TAny))) [ Expr.earray exceptions mark_default; thunk_expr (translate_expr ctx just); @@ -54,39 +54,39 @@ let rec translate_default exceptions and translate_expr (ctx : 'm ctx) (e : 'm D.expr) : 'm A.expr boxed = + let m = Marked.get_mark e in match Marked.unmark e with - | EVar v -> Expr.make_var (Var.Map.find v ctx) (Marked.get_mark e) - | ETuple (args, s) -> - Expr.etuple (List.map (translate_expr ctx) args) s (Marked.get_mark e) - | ETupleAccess (e1, i, s, ts) -> - Expr.etupleaccess (translate_expr ctx e1) i s ts (Marked.get_mark e) - | EInj (e1, i, en, ts) -> - Expr.einj (translate_expr ctx e1) i en ts (Marked.get_mark e) - | EMatch (e1, cases, en) -> - Expr.ematch (translate_expr ctx e1) - (List.map (translate_expr ctx) cases) - en (Marked.get_mark e) - | EArray es -> - Expr.earray (List.map (translate_expr ctx) es) (Marked.get_mark e) + | EVar v -> Expr.make_var (Var.Map.find v ctx) m + | EStruct { name; fields } -> + Expr.estruct name (StructField.Map.map (translate_expr ctx) fields) m + | EStructAccess { name; e; field } -> + Expr.estructaccess (translate_expr ctx e) field name m + | EInj { name; e; cons } -> Expr.einj (translate_expr ctx e) cons name m + | EMatch { name; e; cases } -> + Expr.ematch (translate_expr ctx e) name + (EnumConstructor.Map.map (translate_expr ctx) cases) + m + | EArray es -> Expr.earray (List.map (translate_expr ctx) es) m | ELit ((LBool _ | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ | LDuration _) as l) -> - Expr.elit l (Marked.get_mark e) - | ELit LEmptyError -> Expr.eraise EmptyError (Marked.get_mark e) - | EOp op -> Expr.eop op (Marked.get_mark e) - | EIfThenElse (e1, e2, e3) -> - Expr.eifthenelse (translate_expr ctx e1) (translate_expr ctx e2) - (translate_expr ctx e3) (Marked.get_mark e) - | EAssert e1 -> Expr.eassert (translate_expr ctx e1) (Marked.get_mark e) - | ErrorOnEmpty arg -> + Expr.elit l m + | ELit LEmptyError -> Expr.eraise EmptyError m + | EOp { op; tys } -> Expr.eop (Operator.translate op) tys m + | EIfThenElse { cond; etrue; efalse } -> + Expr.eifthenelse (translate_expr ctx cond) (translate_expr ctx etrue) + (translate_expr ctx efalse) + m + | EAssert e1 -> Expr.eassert (translate_expr ctx e1) m + | EErrorOnEmpty arg -> Expr.ecatch (translate_expr ctx arg) EmptyError - (Expr.eraise NoValueProvided (Marked.get_mark e)) - (Marked.get_mark e) - | EApp (e1, args) -> - Expr.eapp (translate_expr ctx e1) + (Expr.eraise NoValueProvided m) + m + | EApp { f; args } -> + Expr.eapp (translate_expr ctx f) (List.map (translate_expr ctx) args) (Marked.get_mark e) - | EAbs (binder, ts) -> + | EAbs { binder; tys } -> let vars, body = Bindlib.unmbind binder in let ctx, lc_vars = Array.fold_right @@ -98,15 +98,16 @@ and translate_expr (ctx : 'm ctx) (e : 'm D.expr) : 'm A.expr boxed = let lc_vars = Array.of_list lc_vars in let new_body = translate_expr ctx body in let new_binder = Expr.bind lc_vars new_body in - Expr.eabs new_binder ts (Marked.get_mark e) - | EDefault ([exn], just, cons) when !Cli.optimize_flag -> + Expr.eabs new_binder tys (Marked.get_mark e) + | EDefault { excepts = [exn]; just; cons } when !Cli.optimize_flag -> + (* FIXME: bad place to rely on a global flag *) Expr.ecatch (translate_expr ctx exn) EmptyError (Expr.eifthenelse (translate_expr ctx just) (translate_expr ctx cons) (Expr.eraise EmptyError (Marked.get_mark e)) (Marked.get_mark e)) (Marked.get_mark e) - | EDefault (exceptions, just, cons) -> - translate_default ctx exceptions just cons (Marked.get_mark e) + | EDefault { excepts; just; cons } -> + translate_default ctx excepts just cons (Marked.get_mark e) let rec translate_scope_lets (decl_ctx : decl_ctx) diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 70846d61..38cc3a69 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils module D = Dcalc.Ast module A = Ast @@ -170,7 +170,7 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : created a variable %a to replace it" Print.var v Print.var v'; *) Expr.make_var v' mark, Var.Map.singleton v' e else (find ~info:"should never happen" v ctx).expr, Var.Map.empty - | EApp ((EVar v, p), [(ELit LUnit, _)]) -> + | EApp { f = EVar v, p; args = [(ELit LUnit, _)] } -> if not (find ~info:"search for a variable" v ctx).is_pure then let v' = Var.make (Bindlib.name_of v) in (* Cli.debug_print @@ Format.asprintf "Found an unpure variable %a, @@ -179,7 +179,7 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : else Errors.raise_spanned_error (Expr.pos e) "Internal error: an pure variable was found in an unpure environment." - | EDefault (_exceptions, _just, _cons) -> + | EDefault _ -> let v' = Var.make "default_term" in Expr.make_var v' mark, Var.Map.singleton v' e | ELit LEmptyError -> @@ -187,7 +187,7 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : Expr.make_var v' mark, Var.Map.singleton v' e (* This one is a very special case. It transform an unpure expression environement to a pure expression. *) - | ErrorOnEmpty arg -> + | EErrorOnEmpty arg -> (* [ match arg with | None -> raise NoValueProvided | Some v -> {{ v }} ] *) let silent_var = Var.make "_" in let x = Var.make "non_empty_argument" in @@ -206,22 +206,23 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : ((LBool _ | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ | LDuration _) as l) -> Expr.elit l mark, Var.Map.empty - | EIfThenElse (e1, e2, e3) -> - let e1', h1 = translate_and_hoist ctx e1 in - let e2', h2 = translate_and_hoist ctx e2 in - let e3', h3 = translate_and_hoist ctx e3 in + | EIfThenElse { cond; etrue; efalse } -> + let cond', h1 = translate_and_hoist ctx cond in + let etrue', h2 = translate_and_hoist ctx etrue in + let efalse', h3 = translate_and_hoist ctx efalse in - let e' = Expr.eifthenelse e1' e2' e3' mark in + let e' = Expr.eifthenelse cond' etrue' efalse' mark in - (*(* equivalent code : *) let e' = let+ e1' = e1' and+ e2' = e2' and+ e3' = - e3' in (A.EIfThenElse (e1', e2', e3'), pos) in *) + (*(* equivalent code : *) let e' = let+ cond' = cond' and+ etrue' = etrue' + and+ efalse' = efalse' in (A.EIfThenElse (cond', etrue', efalse'), pos) + in *) e', disjoint_union_maps (Expr.pos e) [h1; h2; h3] | EAssert e1 -> (* same behavior as in the ICFP paper: if e1 is empty, then no error is raised. *) let e1', h1 = translate_and_hoist ctx e1 in Expr.eassert e1' mark, h1 - | EAbs (binder, ts) -> + | EAbs { binder; tys } -> let vars, body = Bindlib.unmbind binder in let ctx, lc_vars = ArrayLabels.fold_right vars ~init:(ctx, []) ~f:(fun var (ctx, lc_vars) -> @@ -242,8 +243,8 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : let new_body, hoists = translate_and_hoist ctx body in let new_binder = Expr.bind lc_vars new_body in - Expr.eabs new_binder (List.map translate_typ ts) mark, hoists - | EApp (e1, args) -> + Expr.eabs new_binder (List.map translate_typ tys) mark, hoists + | EApp { f = e1; args } -> let e1', h1 = translate_and_hoist ctx e1 in let args', h_args = args |> List.map (translate_and_hoist ctx) |> List.split @@ -252,35 +253,43 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : let hoists = disjoint_union_maps (Expr.pos e) (h1 :: h_args) in let e' = Expr.eapp e1' args' mark in e', hoists - | ETuple (args, s) -> - let args', h_args = - args |> List.map (translate_and_hoist ctx) |> List.split + | EStruct { name; fields } -> + let fields', h_fields = + StructField.Map.fold + (fun field e (fields, hoists) -> + let e, h = translate_and_hoist ctx e in + StructField.Map.add field e fields, h :: hoists) + fields + (StructField.Map.empty, []) in - - let hoists = disjoint_union_maps (Expr.pos e) h_args in - Expr.etuple args' s mark, hoists - | ETupleAccess (e1, i, s, ts) -> + let hoists = disjoint_union_maps (Expr.pos e) h_fields in + Expr.estruct name fields' mark, hoists + | EStructAccess { name; e = e1; field } -> let e1', hoists = translate_and_hoist ctx e1 in - let e1' = Expr.etupleaccess e1' i s ts mark in + let e1' = Expr.estructaccess e1' field name mark in e1', hoists - | EInj (e1, i, en, ts) -> + | EInj { name; e = e1; cons } -> let e1', hoists = translate_and_hoist ctx e1 in - let e1' = Expr.einj e1' i en ts mark in + let e1' = Expr.einj e1' cons name mark in e1', hoists - | EMatch (e1, cases, en) -> + | EMatch { name; e = e1; cases } -> let e1', h1 = translate_and_hoist ctx e1 in let cases', h_cases = - cases |> List.map (translate_and_hoist ctx) |> List.split + EnumConstructor.Map.fold + (fun cons e (cases, hoists) -> + let e', h = translate_and_hoist ctx e in + EnumConstructor.Map.add cons e' cases, h :: hoists) + cases + (EnumConstructor.Map.empty, []) in - let hoists = disjoint_union_maps (Expr.pos e) (h1 :: h_cases) in - let e' = Expr.ematch e1' cases' en mark in + let e' = Expr.ematch e1' name cases' mark in e', hoists | EArray es -> let es', hoists = es |> List.map (translate_and_hoist ctx) |> List.split in Expr.earray es' mark, disjoint_union_maps (Expr.pos e) hoists - | EOp op -> Expr.eop op mark, Var.Map.empty + | EOp { op; tys } -> Expr.eop (Operator.translate op) tys mark, Var.Map.empty and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) : 'm A.expr boxed = @@ -302,14 +311,14 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) : (* Here we have to handle only the cases appearing in hoists, as defined the [translate_and_hoist] function. *) | EVar v -> (find ~info:"should never happen" v ctx).expr - | EDefault (excep, just, cons) -> - let excep' = List.map (translate_expr ctx) excep in + | EDefault { excepts; just; cons } -> + let excepts' = List.map (translate_expr ctx) excepts in let just' = translate_expr ctx just in let cons' = translate_expr ctx cons in (* calls handle_option. *) Expr.make_app (Expr.make_var (Var.translate A.handle_default_opt) mark_hoist) - [Expr.earray excep' mark_hoist; just'; cons'] + [Expr.earray excepts' mark_hoist; just'; cons'] pos | ELit LEmptyError -> A.make_none mark_hoist | EAssert arg -> @@ -354,7 +363,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : { scope_let_kind = SubScopeVarDefinition; scope_let_typ = typ; - scope_let_expr = EAbs (binder, _), emark; + scope_let_expr = EAbs { binder; _ }, emark; scope_let_next = next; scope_let_pos = pos; } -> @@ -385,7 +394,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : { scope_let_kind = SubScopeVarDefinition; scope_let_typ = typ; - scope_let_expr = (ErrorOnEmpty _, emark) as expr; + scope_let_expr = (EErrorOnEmpty _, emark) as expr; scope_let_next = next; scope_let_pos = pos; } -> @@ -529,7 +538,7 @@ let translate_program (prgm : 'm D.program) : 'm A.program = prgm.decl_ctx with ctx_enums = prgm.decl_ctx.ctx_enums - |> EnumMap.add A.option_enum A.option_enum_config; + |> EnumName.Map.add A.option_enum A.option_enum_config; } in let decl_ctx = @@ -537,15 +546,14 @@ let translate_program (prgm : 'm D.program) : 'm A.program = decl_ctx with ctx_structs = prgm.decl_ctx.ctx_structs - |> StructMap.mapi (fun n l -> + |> StructName.Map.mapi (fun n str -> if List.mem n inputs_structs then - ListLabels.map l ~f:(fun (n, tau) -> - (* Cli.debug_print @@ Format.asprintf "Input type: %a" - (Print.typ decl_ctx) tau; Cli.debug_print @@ - Format.asprintf "Output type: %a" (Print.typ decl_ctx) - (translate_typ tau); *) - n, translate_typ tau) - else l); + StructField.Map.map translate_typ str + (* Cli.debug_print @@ Format.asprintf "Input type: %a" + (Print.typ decl_ctx) tau; Cli.debug_print @@ Format.asprintf + "Output type: %a" (Print.typ decl_ctx) (translate_typ + tau); *) + else str); } in diff --git a/compiler/lcalc/from_dcalc.ml b/compiler/lcalc/from_dcalc.ml new file mode 100644 index 00000000..ec7601c3 --- /dev/null +++ b/compiler/lcalc/from_dcalc.ml @@ -0,0 +1,21 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Denis Merigoux + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +let translate_program_with_exceptions = + Compile_with_exceptions.translate_program + +let translate_program_without_exceptions = + Compile_without_exceptions.translate_program diff --git a/compiler/lcalc/from_dcalc.mli b/compiler/lcalc/from_dcalc.mli new file mode 100644 index 00000000..493115f3 --- /dev/null +++ b/compiler/lcalc/from_dcalc.mli @@ -0,0 +1,26 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Denis Merigoux + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +val translate_program_with_exceptions : 'm Dcalc.Ast.program -> 'm Ast.program +(** Translation from the default calculus to the lambda calculus. This + translation uses exceptions to handle empty default terms. *) + +val translate_program_without_exceptions : + 'm Dcalc.Ast.program -> 'm Ast.program +(** Translation from the default calculus to the lambda calculus. This + translation uses an option monad to handle empty defaults terms. This + transformation is one piece to permit to compile toward legacy languages + that does not contains exceptions. *) diff --git a/compiler/lcalc/optimizations.ml b/compiler/lcalc/optimizations.ml index 11628f3b..6551e551 100644 --- a/compiler/lcalc/optimizations.ml +++ b/compiler/lcalc/optimizations.ml @@ -13,50 +13,47 @@ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast open Ast module D = Dcalc.Ast -let visitor_map (t : 'a -> 'm expr -> 'm expr boxed) (ctx : 'a) (e : 'm expr) : - 'm expr boxed = - Expr.map ctx ~f:t e +let visitor_map (t : 'm expr -> 'm expr boxed) (e : 'm expr) : 'm expr boxed = + Expr.map ~f:t e -let rec iota_expr (_ : unit) (e : 'm expr) : 'm expr boxed = +let rec iota_expr (e : 'm expr) : 'm expr boxed = let m = Marked.get_mark e in match Marked.unmark e with - | EMatch ((EInj (e1, i, n', _ts), _), cases, n) when EnumName.compare n n' = 0 - -> - let e1 = visitor_map iota_expr () e1 in - let case = visitor_map iota_expr () (List.nth cases i) in + | EMatch { e = EInj { e = e'; cons; name = n' }, _; cases; name = n } + when EnumName.equal n n' -> + let e1 = visitor_map iota_expr e' in + let case = visitor_map iota_expr (EnumConstructor.Map.find cons cases) in Expr.eapp case [e1] m - | EMatch (e', cases, n) + | EMatch { e = e'; cases; name = n } when cases - |> List.mapi (fun i (case, _pos) -> - match case with - | EInj (_ei, i', n', _ts') -> - i = i' && (* n = n' *) EnumName.compare n n' = 0 + |> EnumConstructor.Map.mapi (fun i case -> + match Marked.unmark case with + | EInj { cons = i'; name = n'; _ } -> + EnumConstructor.equal i i' && EnumName.equal n n' | _ -> false) - |> List.for_all Fun.id -> - visitor_map iota_expr () e' - | _ -> visitor_map iota_expr () e + |> EnumConstructor.Map.for_all (fun _ b -> b) -> + visitor_map iota_expr e' + | _ -> visitor_map iota_expr e let rec beta_expr (e : 'm expr) : 'm expr boxed = let m = Marked.get_mark e in match Marked.unmark e with - | EApp (e1, args) -> + | EApp { f = e1; args } -> Expr.Box.app1n (beta_expr e1) (List.map beta_expr args) (fun e1 args -> match Marked.unmark e1 with - | EAbs (binder, _) -> Marked.unmark (Expr.subst binder args) - | _ -> EApp (e1, args)) + | EAbs { binder; _ } -> Marked.unmark (Expr.subst binder args) + | _ -> EApp { f = e1; args }) m - | _ -> visitor_map (fun () -> beta_expr) () e + | _ -> visitor_map beta_expr e let iota_optimizations (p : 'm program) : 'm program = - let new_scopes = - Scope.map_exprs ~f:(iota_expr ()) ~varf:(fun v -> v) p.scopes - in + let new_scopes = Scope.map_exprs ~f:iota_expr ~varf:(fun v -> v) p.scopes in { p with scopes = Bindlib.unbox new_scopes } (* TODO: beta optimizations apply inlining of the program. We left the inclusion @@ -70,30 +67,32 @@ let _beta_optimizations (p : 'm program) : 'm program = let rec peephole_expr (e : 'm expr) : 'm expr boxed = let m = Marked.get_mark e in match Marked.unmark e with - | EIfThenElse (e1, e2, e3) -> - Expr.Box.app3 (peephole_expr e1) (peephole_expr e2) (peephole_expr e3) - (fun e1 e2 e3 -> - match Marked.unmark e1 with + | EIfThenElse { cond; etrue; efalse } -> + Expr.Box.app3 (peephole_expr cond) (peephole_expr etrue) + (peephole_expr efalse) + (fun cond etrue efalse -> + match Marked.unmark cond with | ELit (LBool true) - | EApp ((EOp (Unop (Log _)), _), [(ELit (LBool true), _)]) -> - Marked.unmark e2 + | EApp { f = EOp { op = Log _; _ }, _; args = [(ELit (LBool true), _)] } + -> + Marked.unmark etrue | ELit (LBool false) - | EApp ((EOp (Unop (Log _)), _), [(ELit (LBool false), _)]) -> - Marked.unmark e3 - | _ -> EIfThenElse (e1, e2, e3)) + | EApp + { f = EOp { op = Log _; _ }, _; args = [(ELit (LBool false), _)] } + -> + Marked.unmark efalse + | _ -> EIfThenElse { cond; etrue; efalse }) m - | ECatch (e1, except, e2) -> - Expr.Box.app2 (peephole_expr e1) (peephole_expr e2) - (fun e1 e2 -> - match Marked.unmark e1, Marked.unmark e2 with - | ERaise except', ERaise except'' - when except' = except && except = except'' -> - ERaise except - | ERaise except', _ when except' = except -> Marked.unmark e2 - | _, ERaise except' when except' = except -> Marked.unmark e1 - | _ -> ECatch (e1, except, e2)) + | ECatch { body; exn; handler } -> + Expr.Box.app2 (peephole_expr body) (peephole_expr handler) + (fun body handler -> + match Marked.unmark body, Marked.unmark handler with + | ERaise exn', ERaise exn'' when exn' = exn && exn = exn'' -> ERaise exn + | ERaise exn', _ when exn' = exn -> Marked.unmark handler + | _, ERaise exn' when exn' = exn -> Marked.unmark body + | _ -> ECatch { body; exn; handler }) m - | _ -> visitor_map (fun () -> peephole_expr) () e + | _ -> visitor_map peephole_expr e let peephole_optimizations (p : 'm program) : 'm program = let new_scopes = diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index d7ba239d..bf229ac8 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -14,24 +14,21 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast open Ast -open String_common module D = Dcalc.Ast -let find_struct (s : StructName.t) (ctx : decl_ctx) : - (StructFieldName.t * typ) list = - try StructMap.find s ctx.ctx_structs +let find_struct (s : StructName.t) (ctx : decl_ctx) : typ StructField.Map.t = + try StructName.Map.find s ctx.ctx_structs with Not_found -> let s_name, pos = StructName.get_info s in Errors.raise_spanned_error pos "Internal Error: Structure %s was not found in the current environment." s_name -let find_enum (en : EnumName.t) (ctx : decl_ctx) : - (EnumConstructor.t * typ) list = - try EnumMap.find en ctx.ctx_enums +let find_enum (en : EnumName.t) (ctx : decl_ctx) : typ EnumConstructor.Map.t = + try EnumName.Map.find en ctx.ctx_enums with Not_found -> let en_name, pos = EnumName.get_info en in Errors.raise_spanned_error pos @@ -57,43 +54,13 @@ let format_lit (fmt : Format.formatter) (l : lit Marked.pos) : unit = let years, months, days = Runtime.duration_to_years_months_days d in Format.fprintf fmt "duration_of_numbers (%d) (%d) (%d)" years months days -let format_op_kind (fmt : Format.formatter) (k : op_kind) = - Format.fprintf fmt "%s" - (match k with - | KInt -> "!" - | KRat -> "&" - | KMoney -> "$" - | KDate -> "@" - | KDuration -> "^") - -let format_binop (fmt : Format.formatter) (op : binop Marked.pos) : unit = - match Marked.unmark op with - | Add k -> Format.fprintf fmt "+%a" format_op_kind k - | Sub k -> Format.fprintf fmt "-%a" format_op_kind k - | Mult k -> Format.fprintf fmt "*%a" format_op_kind k - | Div k -> Format.fprintf fmt "/%a" format_op_kind k - | And -> Format.fprintf fmt "%s" "&&" - | Or -> Format.fprintf fmt "%s" "||" - | Eq -> Format.fprintf fmt "%s" "=" - | Neq | Xor -> Format.fprintf fmt "%s" "<>" - | Lt k -> Format.fprintf fmt "%s%a" "<" format_op_kind k - | Lte k -> Format.fprintf fmt "%s%a" "<=" format_op_kind k - | Gt k -> Format.fprintf fmt "%s%a" ">" format_op_kind k - | Gte k -> Format.fprintf fmt "%s%a" ">=" format_op_kind k - | Concat -> Format.fprintf fmt "@" - | Map -> Format.fprintf fmt "Array.map" - | Filter -> Format.fprintf fmt "array_filter" - -let format_ternop (fmt : Format.formatter) (op : ternop Marked.pos) : unit = - match Marked.unmark op with Fold -> Format.fprintf fmt "Array.fold_left" - let format_uid_list (fmt : Format.formatter) (uids : Uid.MarkedString.info list) : unit = Format.fprintf fmt "@[[%a]@]" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") (fun fmt info -> - Format.fprintf fmt "\"%a\"" Utils.Uid.MarkedString.format_info info)) + Format.fprintf fmt "\"%a\"" Uid.MarkedString.format info)) uids let format_string_list (fmt : Format.formatter) (uids : string list) : unit = @@ -106,26 +73,6 @@ let format_string_list (fmt : Format.formatter) (uids : string list) : unit = (Re.replace sanitize_quotes ~f:(fun _ -> "\\\"") info))) uids -let format_unop (fmt : Format.formatter) (op : unop Marked.pos) : unit = - match Marked.unmark op with - | Minus k -> Format.fprintf fmt "~-%a" format_op_kind k - | Not -> Format.fprintf fmt "%s" "not" - | Log (_entry, _infos) -> - Errors.raise_spanned_error (Marked.get_mark op) - "Internal error: a log operator has not been caught by the expression \ - match" - | Length -> Format.fprintf fmt "%s" "array_length" - | IntToRat -> Format.fprintf fmt "%s" "decimal_of_integer" - | MoneyToRat -> Format.fprintf fmt "%s" "decimal_of_money" - | RatToMoney -> Format.fprintf fmt "%s" "money_of_decimal" - | GetDay -> Format.fprintf fmt "%s" "day_of_month_of_date" - | GetMonth -> Format.fprintf fmt "%s" "month_number_of_date" - | GetYear -> Format.fprintf fmt "%s" "year_of_date" - | FirstDayOfMonth -> Format.fprintf fmt "%s" "first_day_of_month" - | LastDayOfMonth -> Format.fprintf fmt "%s" "last_day_of_month" - | RoundMoney -> Format.fprintf fmt "%s" "money_round" - | RoundDecimal -> Format.fprintf fmt "%s" "decimal_round" - let avoid_keywords (s : string) : string = match s with (* list taken from @@ -137,14 +84,14 @@ let avoid_keywords (s : string) : string = | "match" | "method" | "mod" | "module" | "mutable" | "new" | "nonrec" | "object" | "of" | "open" | "or" | "private" | "rec" | "sig" | "struct" | "then" | "to" | "true" | "try" | "type" | "val" | "virtual" | "when" - | "while" | "with" -> + | "while" | "with" | "Stdlib" | "Runtime" | "Oper" -> s ^ "_user" | _ -> s let format_struct_name (fmt : Format.formatter) (v : StructName.t) : unit = Format.asprintf "%a" StructName.format_t v - |> to_ascii - |> to_snake_case + |> String.to_ascii + |> String.to_snake_case |> avoid_keywords |> Format.fprintf fmt "%s" @@ -154,8 +101,8 @@ let format_to_module_name (match name with | `Ename v -> Format.asprintf "%a" EnumName.format_t v | `Sname v -> Format.asprintf "%a" StructName.format_t v) - |> to_ascii - |> to_snake_case + |> String.to_ascii + |> String.to_snake_case |> avoid_keywords |> String.split_on_char '_' |> List.map String.capitalize_ascii @@ -164,24 +111,25 @@ let format_to_module_name let format_struct_field_name (fmt : Format.formatter) - ((sname_opt, v) : StructName.t option * StructFieldName.t) : unit = + ((sname_opt, v) : StructName.t option * StructField.t) : unit = (match sname_opt with | Some sname -> Format.fprintf fmt "%a.%s" format_to_module_name (`Sname sname) | None -> Format.fprintf fmt "%s") (avoid_keywords - (to_ascii (Format.asprintf "%a" StructFieldName.format_t v))) + (String.to_ascii (Format.asprintf "%a" StructField.format_t v))) let format_enum_name (fmt : Format.formatter) (v : EnumName.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_snake_case (to_ascii (Format.asprintf "%a" EnumName.format_t v)))) + (String.to_snake_case + (String.to_ascii (Format.asprintf "%a" EnumName.format_t v)))) let format_enum_cons_name (fmt : Format.formatter) (v : EnumConstructor.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) + (String.to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) let rec typ_embedding_name (fmt : Format.formatter) (ty : typ) : unit = match Marked.unmark ty with @@ -225,25 +173,27 @@ let rec format_typ (fmt : Format.formatter) (typ : typ) : unit = | TAny -> Format.fprintf fmt "_" let format_var (fmt : Format.formatter) (v : 'm Var.t) : unit = - let lowercase_name = to_snake_case (to_ascii (Bindlib.name_of v)) in + let lowercase_name = + String.to_snake_case (String.to_ascii (Bindlib.name_of v)) + in let lowercase_name = Re.Pcre.substitute ~rex:(Re.Pcre.regexp "\\.") ~subst:(fun _ -> "_dot_") lowercase_name in - let lowercase_name = avoid_keywords (to_ascii lowercase_name) in + let lowercase_name = avoid_keywords (String.to_ascii lowercase_name) in if List.mem lowercase_name ["handle_default"; "handle_default_opt"] - || begins_with_uppercase (Bindlib.name_of v) - then Format.fprintf fmt "%s" lowercase_name - else if lowercase_name = "_" then Format.fprintf fmt "%s" lowercase_name + || String.begins_with_uppercase (Bindlib.name_of v) + then Format.pp_print_string fmt lowercase_name + else if lowercase_name = "_" then Format.pp_print_string fmt lowercase_name else ( Cli.debug_print "lowercase_name: %s " lowercase_name; Format.fprintf fmt "%s_" lowercase_name) let needs_parens (e : 'm expr) : bool = match Marked.unmark e with - | EApp ((EAbs (_, _), _), _) + | EApp { f = EAbs _, _; _ } | ELit (LBool _ | LUnit) | EVar _ | ETuple _ | EOp _ -> false @@ -279,56 +229,52 @@ let rec format_expr (ctx : decl_ctx) (fmt : Format.formatter) (e : 'm expr) : in match Marked.unmark e with | EVar v -> Format.fprintf fmt "%a" format_var v - | ETuple (es, None) -> + | ETuple es -> Format.fprintf fmt "@[(%a)@]" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") (fun fmt e -> Format.fprintf fmt "%a" format_with_parens e)) es - | ETuple (es, Some s) -> - if List.length es = 0 then Format.fprintf fmt "()" + | EStruct { name = s; fields = es } -> + if StructField.Map.is_empty es then Format.fprintf fmt "()" else Format.fprintf fmt "{@[%a@]}" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") - (fun fmt (e, struct_field) -> + (fun fmt (struct_field, e) -> Format.fprintf fmt "@[%a =@ %a@]" format_struct_field_name (Some s, struct_field) format_with_parens e)) - (List.combine es (List.map fst (find_struct s ctx))) + (StructField.Map.bindings es) | EArray es -> Format.fprintf fmt "@[[|%a|]@]" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") (fun fmt e -> Format.fprintf fmt "%a" format_with_parens e)) es - | ETupleAccess (e1, n, s, ts) -> ( - match s with - | None -> - Format.fprintf fmt "let@ %a@ = %a@ in@ x" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - (fun fmt i -> Format.fprintf fmt "%s" (if i = n then "x" else "_"))) - (List.mapi (fun i _ -> i) ts) - format_with_parens e1 - | Some s -> - Format.fprintf fmt "%a.%a" format_with_parens e1 format_struct_field_name - (Some s, fst (List.nth (find_struct s ctx) n))) - | EInj (e, n, en, _ts) -> - Format.fprintf fmt "@[%a.%a@ %a@]" format_to_module_name (`Ename en) - format_enum_cons_name - (fst (List.nth (find_enum en ctx) n)) - format_with_parens e - | EMatch (e, es, e_name) -> + | ETupleAccess { e; index; size } -> + Format.fprintf fmt "let@ %a@ = %a@ in@ x" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") + (fun fmt i -> + Format.pp_print_string fmt (if i = index then "x" else "_"))) + (List.init size Fun.id) format_with_parens e + | EStructAccess { e; field; name } -> + Format.fprintf fmt "%a.%a" format_with_parens e format_struct_field_name + (Some name, field) + | EInj { e; cons; name } -> + Format.fprintf fmt "@[%a.%a@ %a@]" format_to_module_name + (`Ename name) format_enum_cons_name cons format_with_parens e + | EMatch { e; cases; name } -> Format.fprintf fmt "@[@[match@ %a@]@ with@\n| %a@]" format_with_parens e (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ | ") - (fun fmt (e, c) -> + (fun fmt (c, e) -> Format.fprintf fmt "@[%a.%a %a@]" format_to_module_name - (`Ename e_name) format_enum_cons_name c + (`Ename name) format_enum_cons_name c (fun fmt e -> match Marked.unmark e with - | EAbs (binder, _) -> + | EAbs { binder; _ } -> let xs, body = Bindlib.unmbind binder in Format.fprintf fmt "%a ->@ %a" (Format.pp_print_list @@ -338,11 +284,11 @@ let rec format_expr (ctx : decl_ctx) (fmt : Format.formatter) (e : 'm expr) : | _ -> assert false (* should not happen *)) e)) - (List.combine es (List.map fst (find_enum e_name ctx))) + (EnumConstructor.Map.bindings cases) | ELit l -> Format.fprintf fmt "%a" format_lit (Marked.mark (Expr.pos e) l) - | EApp ((EAbs (binder, taus), _), args) -> + | EApp { f = EAbs { binder; tys }, _; args } -> let xs, body = Bindlib.unmbind binder in - let xs_tau = List.map2 (fun x tau -> x, tau) (Array.to_list xs) taus in + let xs_tau = List.map2 (fun x tau -> x, tau) (Array.to_list xs) tys in let xs_tau_arg = List.map2 (fun (x, tau) arg -> x, tau, arg) xs_tau args in Format.fprintf fmt "(%a%a)" (Format.pp_print_list @@ -351,30 +297,28 @@ let rec format_expr (ctx : decl_ctx) (fmt : Format.formatter) (e : 'm expr) : Format.fprintf fmt "@[let@ %a@ :@ %a@ =@ %a@]@ in@\n" format_var x format_typ tau format_with_parens arg)) xs_tau_arg format_with_parens body - | EAbs (binder, taus) -> + | EAbs { binder; tys } -> let xs, body = Bindlib.unmbind binder in - let xs_tau = List.map2 (fun x tau -> x, tau) (Array.to_list xs) taus in + let xs_tau = List.map2 (fun x tau -> x, tau) (Array.to_list xs) tys in Format.fprintf fmt "@[fun@ %a ->@ %a@]" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") (fun fmt (x, tau) -> Format.fprintf fmt "@[(%a:@ %a)@]" format_var x format_typ tau)) xs_tau format_expr body - | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" format_binop (op, Pos.no_pos) - format_with_parens arg1 format_with_parens arg2 - | EApp ((EOp (Binop op), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" format_with_parens arg1 - format_binop (op, Pos.no_pos) format_with_parens arg2 - | EApp ((EApp ((EOp (Unop (Log (BeginCall, info))), _), [f]), _), [arg]) + | EApp + { + f = EApp { f = EOp { op = Log (BeginCall, info); _ }, _; args = [f] }, _; + args = [arg]; + } when !Cli.trace_flag -> Format.fprintf fmt "(log_begin_call@ %a@ %a)@ %a" format_uid_list info format_with_parens f format_with_parens arg - | EApp ((EOp (Unop (Log (VarDef tau, info))), _), [arg1]) when !Cli.trace_flag - -> + | EApp { f = EOp { op = Log (VarDef tau, info); _ }, _; args = [arg1] } + when !Cli.trace_flag -> Format.fprintf fmt "(log_variable_definition@ %a@ (%a)@ %a)" format_uid_list info typ_embedding_name (tau, Pos.no_pos) format_with_parens arg1 - | EApp ((EOp (Unop (Log (PosRecordIfTrueBool, _))), m), [arg1]) + | EApp { f = EOp { op = Log (PosRecordIfTrueBool, _); _ }, m; args = [arg1] } when !Cli.trace_flag -> let pos = Expr.mark_pos m in Format.fprintf fmt @@ -383,15 +327,13 @@ let rec format_expr (ctx : decl_ctx) (fmt : Format.formatter) (e : 'm expr) : (Pos.get_file pos) (Pos.get_start_line pos) (Pos.get_start_column pos) (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) format_with_parens arg1 - | EApp ((EOp (Unop (Log (EndCall, info))), _), [arg1]) when !Cli.trace_flag -> + | EApp { f = EOp { op = Log (EndCall, info); _ }, _; args = [arg1] } + when !Cli.trace_flag -> Format.fprintf fmt "(log_end_call@ %a@ %a)" format_uid_list info format_with_parens arg1 - | EApp ((EOp (Unop (Log _)), _), [arg1]) -> + | EApp { f = EOp { op = Log _; _ }, _; args = [arg1] } -> Format.fprintf fmt "%a" format_with_parens arg1 - | EApp ((EOp (Unop op), _), [arg1]) -> - Format.fprintf fmt "@[%a@ %a@]" format_unop (op, Pos.no_pos) - format_with_parens arg1 - | EApp ((EVar x, pos), args) + | EApp { f = EVar x, pos; args } when Var.compare x (Var.translate Ast.handle_default) = 0 || Var.compare x (Var.translate Ast.handle_default_opt) = 0 -> Format.fprintf fmt @@ -409,19 +351,17 @@ let rec format_expr (ctx : decl_ctx) (fmt : Format.formatter) (e : 'm expr) : ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") format_with_parens) args - | EApp (f, args) -> + | EApp { f; args } -> Format.fprintf fmt "@[%a@ %a@]" format_with_parens f (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") format_with_parens) args - | EIfThenElse (e1, e2, e3) -> + | EIfThenElse { cond; etrue; efalse } -> Format.fprintf fmt "@[ if@ @[%a@]@ then@ @[%a@]@ else@ @[%a@]@]" - format_with_parens e1 format_with_parens e2 format_with_parens e3 - | EOp (Ternop op) -> Format.fprintf fmt "%a" format_ternop (op, Pos.no_pos) - | EOp (Binop op) -> Format.fprintf fmt "%a" format_binop (op, Pos.no_pos) - | EOp (Unop op) -> Format.fprintf fmt "%a" format_unop (op, Pos.no_pos) + format_with_parens cond format_with_parens etrue format_with_parens efalse + | EOp { op; _ } -> Format.pp_print_string fmt (Operator.name op) | EAssert e' -> Format.fprintf fmt "@[if@ %a@ then@ ()@ else@ raise (AssertionFailed @[ Format.fprintf fmt "raise@ %a" format_exception (exc, Expr.pos e) - | ECatch (e1, exc, e2) -> + | ECatch { body; exn; handler } -> Format.fprintf fmt "@,@[@[try@ %a@]@ with@]@ @[%a@ ->@ %a@]" - format_with_parens e1 format_exception - (exc, Expr.pos e) - format_with_parens e2 + format_with_parens body format_exception + (exn, Expr.pos e) + format_with_parens handler let format_struct_embedding (fmt : Format.formatter) - ((struct_name, struct_fields) : - StructName.t * (StructFieldName.t * typ) list) = - if List.length struct_fields = 0 then + ((struct_name, struct_fields) : StructName.t * typ StructField.Map.t) = + if StructField.Map.is_empty struct_fields then Format.fprintf fmt "let embed_%a (_: %a.t) : runtime_value = Unit@\n@\n" format_struct_name struct_name format_to_module_name (`Sname struct_name) else @@ -461,16 +400,16 @@ let format_struct_embedding (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@\n") (fun _fmt (struct_field, struct_field_type) -> - Format.fprintf fmt "(\"%a\",@ %a@ x.%a)" StructFieldName.format_t + Format.fprintf fmt "(\"%a\",@ %a@ x.%a)" StructField.format_t struct_field typ_embedding_name struct_field_type format_struct_field_name (Some struct_name, struct_field))) - struct_fields + (StructField.Map.bindings struct_fields) let format_enum_embedding (fmt : Format.formatter) - ((enum_name, enum_cases) : EnumName.t * (EnumConstructor.t * typ) list) = - if List.length enum_cases = 0 then + ((enum_name, enum_cases) : EnumName.t * typ EnumConstructor.Map.t) = + if EnumConstructor.Map.is_empty enum_cases then Format.fprintf fmt "let embed_%a (_: %a.t) : runtime_value = Unit@\n@\n" format_to_module_name (`Ename enum_name) format_enum_name enum_name else @@ -486,14 +425,14 @@ let format_enum_embedding Format.fprintf fmt "@[| %a x ->@ (\"%a\", %a x)@]" format_enum_cons_name enum_cons EnumConstructor.format_t enum_cons typ_embedding_name enum_cons_type)) - enum_cases + (EnumConstructor.Map.bindings enum_cases) let format_ctx (type_ordering : Scopelang.Dependency.TVertex.t list) (fmt : Format.formatter) (ctx : decl_ctx) : unit = let format_struct_decl fmt (struct_name, struct_fields) = - if List.length struct_fields = 0 then + if StructField.Map.is_empty struct_fields then Format.fprintf fmt "@[module %a = struct@\n@[type t = unit@]@]@\nend@\n" format_to_module_name (`Sname struct_name) @@ -508,7 +447,7 @@ let format_ctx (fun _fmt (struct_field, struct_field_type) -> Format.fprintf fmt "@[%a:@ %a@]" format_struct_field_name (None, struct_field) format_typ struct_field_type)) - struct_fields; + (StructField.Map.bindings struct_fields); if !Cli.trace_flag then format_struct_embedding fmt (struct_name, struct_fields) in @@ -521,7 +460,7 @@ let format_ctx (fun _fmt (enum_cons, enum_cons_type) -> Format.fprintf fmt "@[| %a@ of@ %a@]" format_enum_cons_name enum_cons format_typ enum_cons_type)) - enum_cons; + (EnumConstructor.Map.bindings enum_cons); if !Cli.trace_flag then format_enum_embedding fmt (enum_name, enum_cons) in let is_in_type_ordering s = @@ -535,8 +474,8 @@ let format_ctx let scope_structs = List.map (fun (s, _) -> Scopelang.Dependency.TVertex.Struct s) - (StructMap.bindings - (StructMap.filter + (StructName.Map.bindings + (StructName.Map.filter (fun s _ -> not (is_in_type_ordering s)) ctx.ctx_structs)) in diff --git a/compiler/lcalc/to_ocaml.mli b/compiler/lcalc/to_ocaml.mli index 04e7bcf1..4a5bc73f 100644 --- a/compiler/lcalc/to_ocaml.mli +++ b/compiler/lcalc/to_ocaml.mli @@ -14,29 +14,28 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils open Shared_ast -open Ast (** Formats a lambda calculus program into a valid OCaml program *) val avoid_keywords : string -> string -val find_struct : StructName.t -> decl_ctx -> (StructFieldName.t * typ) list -val find_enum : EnumName.t -> decl_ctx -> (EnumConstructor.t * typ) list +val find_struct : StructName.t -> decl_ctx -> typ StructField.Map.t +val find_enum : EnumName.t -> decl_ctx -> typ EnumConstructor.Map.t val typ_needs_parens : typ -> bool -val needs_parens : 'm expr -> bool + +(* val needs_parens : 'm expr -> bool *) val format_enum_name : Format.formatter -> EnumName.t -> unit val format_enum_cons_name : Format.formatter -> EnumConstructor.t -> unit val format_struct_name : Format.formatter -> StructName.t -> unit val format_struct_field_name : - Format.formatter -> StructName.t option * StructFieldName.t -> unit + Format.formatter -> StructName.t option * StructField.t -> unit val format_to_module_name : Format.formatter -> [< `Ename of EnumName.t | `Sname of StructName.t ] -> unit +(* * val format_lit : Format.formatter -> lit Marked.pos -> unit * val + format_uid_list : Format.formatter -> Uid.MarkedString.info list -> unit *) -val format_lit : Format.formatter -> lit Marked.pos -> unit -val format_uid_list : Format.formatter -> Uid.MarkedString.info list -> unit val format_var : Format.formatter -> 'm Var.t -> unit val format_program : diff --git a/compiler/literate/dune b/compiler/literate/dune index 70ed9a39..8dbc9976 100644 --- a/compiler/literate/dune +++ b/compiler/literate/dune @@ -1,7 +1,7 @@ (library (name literate) (public_name catala.literate) - (libraries re utils surface ubase)) + (libraries re catala_utils surface ubase uutf)) (documentation (package catala) diff --git a/compiler/literate/html.ml b/compiler/literate/html.ml index 5aed9a7f..7bb42557 100644 --- a/compiler/literate/html.ml +++ b/compiler/literate/html.ml @@ -18,7 +18,7 @@ (** This modules weaves the source code and the legislative text together into a document that law professionals can understand. *) -open Utils +open Catala_utils open Literate_common module A = Surface.Ast module P = Printf @@ -91,7 +91,7 @@ let wrap_html \n" css_as_string (literal_title language) (literal_generated_by language) - Utils.Cli.version + Cli.version (pre_html (literal_disclaimer_and_link language)) (literal_source_files language) (String.concat "\n" @@ -133,7 +133,7 @@ let pygmentize_code (c : string Marked.pos) (language : C.backend_lang) : string "html"; "-O"; "style=colorful,anchorlinenos=True,lineanchors=\"" - ^ String_common.to_ascii (Pos.get_file (Marked.get_mark c)) + ^ String.to_ascii (Pos.get_file (Marked.get_mark c)) ^ "\",linenos=table,linenostart=" ^ string_of_int (Pos.get_start_line (Marked.get_mark c)); "-o"; @@ -160,7 +160,7 @@ let pygmentize_code (c : string Marked.pos) (language : C.backend_lang) : string let sanitize_html_href str = str - |> String_common.to_ascii + |> String.to_ascii |> R.substitute ~rex:(R.regexp "[' '°\"]") ~subst:(function _ -> "%20") let rec law_structure_to_html diff --git a/compiler/literate/html.mli b/compiler/literate/html.mli index 6cbd65d1..53d071c9 100644 --- a/compiler/literate/html.mli +++ b/compiler/literate/html.mli @@ -17,7 +17,7 @@ (** This modules weaves the source code and the legislative text together into a document that law professionals can understand. *) -open Utils +open Catala_utils (** {1 Helpers} *) diff --git a/compiler/literate/latex.ml b/compiler/literate/latex.ml index 6171e484..e31df6da 100644 --- a/compiler/literate/latex.ml +++ b/compiler/literate/latex.ml @@ -18,7 +18,7 @@ (** This modules weaves the source code and the legislative text together into a document that law professionals can understand. *) -open Utils +open Catala_utils open Literate_common module A = Surface.Ast module R = Re.Pcre @@ -61,7 +61,7 @@ let wrap_latex %s \usepackage{minted} \usepackage{longtable} -\usepackage{booktabs} +\usepackage{booktabs,tabularx} \usepackage{newunicodechar} \usepackage{textcomp} \usepackage[hidelinks]{hyperref} @@ -122,8 +122,8 @@ let wrap_latex \newunicodechar{→}{$\rightarrow$} \newunicodechar{≠}{$\neq$} -\newcommand*\FancyVerbStartString{```catala} -\newcommand*\FancyVerbStopString{```} +\newcommand*\FancyVerbStartString{\PYG{l+s}{```catala}} +\newcommand*\FancyVerbStopString{\PYG{l+s}{```}} \fvset{ numbers=left, @@ -151,14 +151,15 @@ codes={\catcode`\$=3\catcode`\^=7} \tableofcontents \[\star\star\star\] -\clearpage|latex} +\clearpage +|latex} (match language with Fr -> "french" | En -> "english" | Pl -> "polish") (match language with Fr -> "\\setmainfont{Marianne}" | _ -> "") (* for France, we use the official font of the French state design system https://gouvfr.atlassian.net/wiki/spaces/DB/pages/223019527/Typographie+-+Typography *) (literal_title language) (literal_generated_by language) - Utils.Cli.version + Cli.version (pre_latexify (literal_disclaimer_and_link language)) (literal_source_files language) (String.concat @@ -243,7 +244,7 @@ let rec law_structure_to_latex | En -> "Metadata" | Pl -> "Metadane" in - let start_line = Pos.get_start_line (Marked.get_mark c) - 1 in + let start_line = Pos.get_start_line (Marked.get_mark c) + 1 in let filename = Filename.basename (Pos.get_file (Marked.get_mark c)) in let block_content = Marked.unmark c in check_exceeding_lines start_line filename block_content; @@ -252,7 +253,7 @@ let rec law_structure_to_latex "\\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, breaklines, \ + \\begin{minted}[numbersep=9mm, firstnumber=%d, \ label={\\hspace*{\\fill}\\texttt{%s}}]{%s}\n\ ```catala\n\ %s```\n\ diff --git a/compiler/literate/latex.mli b/compiler/literate/latex.mli index 012d0ec6..28ba0801 100644 --- a/compiler/literate/latex.mli +++ b/compiler/literate/latex.mli @@ -17,7 +17,7 @@ (** This modules weaves the source code and the legislative text together into a document that law professionals can understand. *) -open Utils +open Catala_utils (** {1 Helpers} *) diff --git a/compiler/literate/literate_common.ml b/compiler/literate/literate_common.ml index 68aa6f6d..7513bb04 100644 --- a/compiler/literate/literate_common.ml +++ b/compiler/literate/literate_common.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Cli let literal_title = function diff --git a/compiler/literate/literate_common.mli b/compiler/literate/literate_common.mli index 24741079..d9240a9d 100644 --- a/compiler/literate/literate_common.mli +++ b/compiler/literate/literate_common.mli @@ -14,32 +14,30 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils val literal_title : Cli.backend_lang -> string -(** Return the title traduction according the given - {!type:Utils.Cli.backend_lang}. *) +(** Return the title traduction according the given {!type:Cli.backend_lang}. *) val literal_generated_by : Cli.backend_lang -> string (** Return the 'generated by' traduction according the given - {!type:Utils.Cli.backend_lang}. *) + {!type:Cli.backend_lang}. *) val literal_source_files : Cli.backend_lang -> string (** Return the 'source files weaved' traduction according the given - {!type:Utils.Cli.backend_lang}. *) + {!type:Cli.backend_lang}. *) val literal_disclaimer_and_link : Cli.backend_lang -> string (** Return the traduction of a paragraph giving a basic disclaimer about Catala - and a link to the website according the given {!type: - Utils.Cli.backend_lang}. *) + and a link to the website according the given {!type: Cli.backend_lang}. *) val literal_last_modification : Cli.backend_lang -> string (** Return the 'last modification' traduction according the given - {!type:Utils.Cli.backend_lang}. *) + {!type:Cli.backend_lang}. *) val get_language_extension : Cli.backend_lang -> string (** Return the file extension corresponding to the given - {!type:Utils.Cli.backend_lang}. *) + {!type:Cli.backend_lang}. *) val run_pandoc : string -> [ `Html | `Latex ] -> string (** Runs the [pandoc] on a string to pretty-print markdown features into the diff --git a/compiler/plugin.ml b/compiler/plugin.ml index 1378c2da..e7f9437a 100644 --- a/compiler/plugin.ml +++ b/compiler/plugin.ml @@ -14,8 +14,10 @@ License for the specific language governing permissions and limitations under the License. *) +open Catala_utils + type 'ast plugin_apply_fun_typ = - source_file:Utils.Pos.input_file -> + source_file:Pos.input_file -> output_file:string option -> scope:string option -> 'ast -> @@ -51,17 +53,21 @@ let find name = Hashtbl.find backend_plugins (String.lowercase_ascii name) let load_file f = try Dynlink.loadfile f; - Utils.Cli.debug_print "Plugin %S loaded" f + Cli.debug_print "Plugin %S loaded" f with e -> - Utils.Errors.format_warning "Could not load plugin %S: %s" f + Errors.format_warning "Could not load plugin %S: %s" f (Printexc.to_string e) -let load_dir d = +let rec load_dir d = let dynlink_exts = if Dynlink.is_native then [".cmxs"] else [".cmo"; ".cma"] in Array.iter (fun f -> - if List.exists (Filename.check_suffix f) dynlink_exts then - load_file (Filename.concat d f)) + if f.[0] = '.' then () + else + let f = Filename.concat d f in + if Sys.is_directory f then load_dir f + else if List.exists (Filename.check_suffix f) dynlink_exts then + load_file f) (Sys.readdir d) diff --git a/compiler/plugin.mli b/compiler/plugin.mli index b6d678f9..acfdf56a 100644 --- a/compiler/plugin.mli +++ b/compiler/plugin.mli @@ -16,8 +16,10 @@ (** {2 catala-facing API} *) +open Catala_utils + type 'ast plugin_apply_fun_typ = - source_file:Utils.Pos.input_file -> + source_file:Pos.input_file -> output_file:string option -> scope:string option -> 'ast -> diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index f0517567..8f22a13c 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -18,9 +18,8 @@ (** Catala plugin for generating web APIs. It generates OCaml code before the the associated [js_of_ocaml] wrapper. *) -open Utils +open Catala_utils open Shared_ast -open String_common open Lcalc open Lcalc.Ast open Lcalc.To_ocaml @@ -40,11 +39,11 @@ module To_jsoo = struct let format_struct_field_name_camel_case (fmt : Format.formatter) - (v : StructFieldName.t) : unit = + (v : StructField.t) : unit = let s = - Format.asprintf "%a" StructFieldName.format_t v - |> to_ascii - |> to_snake_case + Format.asprintf "%a" StructField.format_t v + |> String.to_ascii + |> String.to_snake_case |> avoid_keywords |> to_camel_case in @@ -118,17 +117,17 @@ module To_jsoo = struct let format_var_camel_case (fmt : Format.formatter) (v : 'm Var.t) : unit = let lowercase_name = Bindlib.name_of v - |> to_ascii - |> to_snake_case + |> String.to_ascii + |> String.to_snake_case |> Re.Pcre.substitute ~rex:(Re.Pcre.regexp "\\.") ~subst:(fun _ -> "_dot_") - |> to_ascii + |> String.to_ascii |> avoid_keywords |> to_camel_case in if List.mem lowercase_name ["handle_default"; "handle_default_opt"] - || begins_with_uppercase (Bindlib.name_of v) + || String.begins_with_uppercase (Bindlib.name_of v) then Format.fprintf fmt "%s" lowercase_name else if lowercase_name = "_" then Format.fprintf fmt "%s" lowercase_name else Format.fprintf fmt "%s_" lowercase_name @@ -166,7 +165,7 @@ module To_jsoo = struct format_struct_field_name_camel_case struct_field format_typ_to_jsoo struct_field_type fmt_struct_name () format_struct_field_name (None, struct_field))) - struct_fields + (StructField.Map.bindings struct_fields) in let fmt_of_jsoo fmt _ = Format.fprintf fmt "%a" @@ -186,7 +185,7 @@ module To_jsoo = struct format_struct_field_name (None, struct_field) format_typ_of_jsoo struct_field_type fmt_struct_name () format_struct_field_name_camel_case struct_field)) - struct_fields + (StructField.Map.bindings struct_fields) in let fmt_conv_funs fmt _ = Format.fprintf fmt @@ -203,7 +202,7 @@ module To_jsoo = struct () fmt_struct_name () fmt_module_struct_name () fmt_of_jsoo () in - if List.length struct_fields = 0 then + if StructField.Map.is_empty struct_fields then Format.fprintf fmt "class type %a =@ object end@\n\ let %a_to_jsoo (_ : %a.t) : %a Js.t = object%%js end@\n\ @@ -220,11 +219,11 @@ module To_jsoo = struct Format.fprintf fmt "@[method %a:@ %a %a@]" format_struct_field_name_camel_case struct_field format_typ struct_field_type format_prop_or_meth struct_field_type)) - struct_fields fmt_conv_funs () + (StructField.Map.bindings struct_fields) + fmt_conv_funs () in - let format_enum_decl - fmt - (enum_name, (enum_cons : (EnumConstructor.t * typ) list)) = + let format_enum_decl fmt (enum_name, (enum_cons : typ EnumConstructor.Map.t)) + = let fmt_enum_name fmt _ = format_enum_name fmt enum_name in let fmt_module_enum_name fmt _ = To_ocaml.format_to_module_name fmt (`Ename enum_name) @@ -247,7 +246,7 @@ module To_jsoo = struct end@]" format_enum_cons_name cname format_enum_cons_name cname format_typ_to_jsoo typ)) - enum_cons + (EnumConstructor.Map.bindings enum_cons) in let fmt_of_jsoo fmt _ = Format.fprintf fmt @@ -273,7 +272,8 @@ module To_jsoo = struct format_enum_cons_name cname fmt_module_enum_name () format_enum_cons_name cname format_typ_of_jsoo typ fmt_enum_name ())) - enum_cons fmt_module_enum_name () + (EnumConstructor.Map.bindings enum_cons) + fmt_module_enum_name () in let fmt_conv_funs fmt _ = @@ -301,7 +301,8 @@ module To_jsoo = struct ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (enum_cons, _) -> Format.fprintf fmt "- \"%a\"" format_enum_cons_name enum_cons)) - enum_cons fmt_conv_funs () + (EnumConstructor.Map.bindings enum_cons) + fmt_conv_funs () in let is_in_type_ordering s = List.exists @@ -314,8 +315,8 @@ module To_jsoo = struct let scope_structs = List.map (fun (s, _) -> Scopelang.Dependency.TVertex.Struct s) - (StructMap.bindings - (StructMap.filter + (StructName.Map.bindings + (StructName.Map.filter (fun s _ -> not (is_in_type_ordering s)) ctx.ctx_structs)) in diff --git a/compiler/plugins/dune b/compiler/plugins/dune index 1b67068e..531a170f 100644 --- a/compiler/plugins/dune +++ b/compiler/plugins/dune @@ -1,18 +1,22 @@ -(executable +(library (name python) - (modes plugin) + (public_name catala.plugins.python) + (synopsis + "Demonstration Catala plugin that reproduces the behaviour of the built-in python backend") (modules python) (libraries catala.driver)) -(executable +(library (name api_web) - (modes plugin) + (public_name catala.plugins.api_web) + (synopsis "Catala plugin for interaction with a web interface") (modules api_web) (libraries catala.driver)) -(executable +(library (name json_schema) - (modes plugin) + (public_name catala.plugins.json_schema) + (synopsis "Catala plugin generating JSON schemas useful to build web-forms") (modules json_schema) (libraries catala.driver)) diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index 409e0e62..fcbca769 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -20,8 +20,7 @@ let name = "json_schema" let extension = "_schema.json" -open Utils -open String_common +open Catala_utils open Shared_ast open Lcalc.Ast open Lcalc.To_ocaml @@ -38,11 +37,11 @@ module To_json = struct let format_struct_field_name_camel_case (fmt : Format.formatter) - (v : StructFieldName.t) : unit = + (v : StructField.t) : unit = let s = - Format.asprintf "%a" StructFieldName.format_t v - |> to_ascii - |> to_snake_case + Format.asprintf "%a" StructField.format_t v + |> String.to_ascii + |> String.to_snake_case |> avoid_keywords |> to_camel_case in @@ -97,7 +96,7 @@ module To_json = struct (fun fmt (field_name, field_type) -> Format.fprintf fmt "@[\"%a\": {@\n%a@]@\n}" format_struct_field_name_camel_case field_name fmt_type field_type)) - (find_struct sname ctx) + (StructField.Map.bindings (find_struct sname ctx)) let fmt_definitions (ctx : decl_ctx) @@ -118,11 +117,14 @@ module To_json = struct (t :: acc) @ collect_required_type_defs_from_scope_input s | TEnum e -> List.fold_left collect (t :: acc) - (List.map snd (EnumMap.find e ctx.ctx_enums)) + (List.map snd + (EnumConstructor.Map.bindings + (EnumName.Map.find e ctx.ctx_enums))) | TArray t -> collect acc t | _ -> acc in find_struct input_struct ctx + |> StructField.Map.bindings |> List.fold_left (fun acc (_, field_typ) -> collect acc field_typ) [] |> List.sort_uniq (fun t t' -> String.compare (get_name t) (get_name t')) in @@ -146,7 +148,7 @@ module To_json = struct Format.fprintf fmt "@[{@\n\"type\": \"string\",@\n\"enum\": [\"%a\"]@]@\n}" format_enum_cons_name enum_cons)) - enum_def + (EnumConstructor.Map.bindings enum_def) (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@\n") (fun fmt (enum_cons, payload_type) -> @@ -168,7 +170,7 @@ module To_json = struct }@]@\n\ }" format_enum_cons_name enum_cons fmt_type payload_type)) - enum_def + (EnumConstructor.Map.bindings enum_def) in Format.fprintf fmt "@\n%a" diff --git a/compiler/plugins/python.ml b/compiler/plugins/python.ml index 3f9a8300..5154b808 100644 --- a/compiler/plugins/python.ml +++ b/compiler/plugins/python.ml @@ -20,13 +20,15 @@ The code for the Python backend already has first-class support, so there would be no reason to use this plugin instead *) +open Catala_utils + let name = "python-plugin" let extension = ".py" let apply ~source_file ~output_file ~scope prgm type_ordering = ignore source_file; ignore scope; - Utils.File.with_formatter_of_opt_file output_file + File.with_formatter_of_opt_file output_file @@ fun fmt -> Scalc.To_python.format_program fmt prgm type_ordering let () = Driver.Plugin.register_scalc ~name ~extension apply diff --git a/compiler/scalc/ast.ml b/compiler/scalc/ast.ml index cb8b79bd..944e64ae 100644 --- a/compiler/scalc/ast.ml +++ b/compiler/scalc/ast.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast module D = Dcalc.Ast module L = Lcalc.Ast @@ -28,15 +28,15 @@ let handle_default_opt = TopLevelName.fresh ("handle_default_opt", Pos.no_pos) type expr = naked_expr Marked.pos and naked_expr = - | EVar of LocalName.t - | EFunc of TopLevelName.t - | EStruct of expr list * StructName.t - | EStructFieldAccess of expr * StructFieldName.t * StructName.t - | EInj of expr * EnumConstructor.t * EnumName.t - | EArray of expr list - | ELit of L.lit - | EApp of expr * expr list - | EOp of operator + | EVar : LocalName.t -> naked_expr + | EFunc : TopLevelName.t -> naked_expr + | EStruct : expr list * StructName.t -> naked_expr + | EStructFieldAccess : expr * StructField.t * StructName.t -> naked_expr + | EInj : expr * EnumConstructor.t * EnumName.t -> naked_expr + | EArray : expr list -> naked_expr + | ELit : L.lit -> naked_expr + | EApp : expr * expr list -> naked_expr + | EOp : (lcalc, _) operator -> naked_expr type stmt = | SInnerFuncDef of LocalName.t Marked.pos * func diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index 0e8db1d5..691d24a0 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast module A = Ast module L = Lcalc.Ast @@ -35,36 +35,37 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.expr) : A.block * A.expr = | EVar v -> let local_var = try A.EVar (Var.Map.find v ctxt.var_dict) - with Not_found -> A.EFunc (Var.Map.find v ctxt.func_dict) + with Not_found -> ( + try A.EFunc (Var.Map.find v ctxt.func_dict) + with Not_found -> + Errors.raise_spanned_error (Expr.pos expr) + "Var not found in lambda→scalc: %a@\nknown: @[%a@]@\n" + Print.var_debug v + (Format.pp_print_list ~pp_sep:Format.pp_print_space + (fun ppf (v, _) -> Print.var_debug ppf v)) + (Var.Map.bindings ctxt.var_dict)) in [], (local_var, Expr.pos expr) - | ETuple (args, Some s_name) -> + | EStruct { fields; name } -> let args_stmts, new_args = - List.fold_left - (fun (args_stmts, new_args) arg -> + StructField.Map.fold + (fun _ arg (args_stmts, new_args) -> let arg_stmts, new_arg = translate_expr ctxt arg in arg_stmts @ args_stmts, new_arg :: new_args) - ([], []) args + fields ([], []) in let new_args = List.rev new_args in let args_stmts = List.rev args_stmts in - args_stmts, (A.EStruct (new_args, s_name), Expr.pos expr) - | ETuple (_, None) -> failwith "Non-struct tuples cannot be compiled to scalc" - | ETupleAccess (e1, num_field, Some s_name, _) -> + args_stmts, (A.EStruct (new_args, name), Expr.pos expr) + | ETuple _ -> failwith "Tuples cannot be compiled to scalc" + | EStructAccess { e = e1; field; name } -> let e1_stmts, new_e1 = translate_expr ctxt e1 in - let field_name = - fst (List.nth (StructMap.find s_name ctxt.decl_ctx.ctx_structs) num_field) - in - e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos expr) - | ETupleAccess (_, _, None, _) -> - failwith "Non-struct tuples cannot be compiled to scalc" - | EInj (e1, num_cons, e_name, _) -> + e1_stmts, (A.EStructFieldAccess (new_e1, field, name), Expr.pos expr) + | ETupleAccess _ -> failwith "Non-struct tuples cannot be compiled to scalc" + | EInj { e = e1; cons; name } -> let e1_stmts, new_e1 = translate_expr ctxt e1 in - let cons_name = - fst (List.nth (EnumMap.find e_name ctxt.decl_ctx.ctx_enums) num_cons) - in - e1_stmts, (A.EInj (new_e1, cons_name, e_name), Expr.pos expr) - | EApp (f, args) -> + e1_stmts, (A.EInj (new_e1, cons, name), Expr.pos expr) + | EApp { f; args } -> let f_stmts, new_f = translate_expr ctxt f in let args_stmts, new_args = List.fold_left @@ -85,7 +86,7 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.expr) : A.block * A.expr = in let new_args = List.rev new_args in args_stmts, (A.EArray new_args, Expr.pos expr) - | EOp op -> [], (A.EOp op, Expr.pos expr) + | EOp { op; _ } -> [], (A.EOp op, Expr.pos expr) | ELit l -> [], (A.ELit l, Expr.pos expr) | _ -> let tmp_var = @@ -120,11 +121,11 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : A.block = (* Assertions are always encapsulated in a unit-typed let binding *) let e_stmts, new_e = translate_expr ctxt e in e_stmts @ [A.SAssert (Marked.unmark new_e), Expr.pos block_expr] - | EApp ((EAbs (binder, taus), binder_mark), args) -> + | EApp { f = EAbs { binder; tys }, binder_mark; args } -> (* This defines multiple local variables at the time *) let binder_pos = Expr.mark_pos binder_mark in let vars, body = Bindlib.unmbind binder in - let vars_tau = List.map2 (fun x tau -> x, tau) (Array.to_list vars) taus in + let vars_tau = List.map2 (fun x tau -> x, tau) (Array.to_list vars) tys in let ctxt = { ctxt with @@ -167,10 +168,10 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : A.block = in let rest_of_block = translate_statements ctxt body in local_decls @ List.flatten def_blocks @ rest_of_block - | EAbs (binder, taus) -> + | EAbs { binder; tys } -> let vars, body = Bindlib.unmbind binder in let binder_pos = Expr.pos block_expr in - let vars_tau = List.map2 (fun x tau -> x, tau) (Array.to_list vars) taus in + let vars_tau = List.map2 (fun x tau -> x, tau) (Array.to_list vars) tys in let closure_name = match ctxt.inside_definition_of with | None -> A.LocalName.fresh (ctxt.context_name, Expr.pos block_expr) @@ -203,13 +204,13 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : A.block = } ), binder_pos ); ] - | EMatch (e1, args, e_name) -> + | EMatch { e = e1; cases; name } -> let e1_stmts, new_e1 = translate_expr ctxt e1 in - let new_args = - List.fold_left - (fun new_args arg -> + let new_cases = + EnumConstructor.Map.fold + (fun _ arg new_args -> match Marked.unmark arg with - | EAbs (binder, _) -> + | EAbs { binder; _ } -> let vars, body = Bindlib.unmbind binder in assert (Array.length vars = 1); let var = vars.(0) in @@ -223,20 +224,20 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : A.block = (new_arg, scalc_var) :: new_args | _ -> assert false (* should not happen *)) - [] args + cases [] in - let new_args = List.rev new_args in - e1_stmts @ [A.SSwitch (new_e1, e_name, new_args), Expr.pos block_expr] - | EIfThenElse (cond, e_true, e_false) -> + let new_args = List.rev new_cases in + e1_stmts @ [A.SSwitch (new_e1, name, new_args), Expr.pos block_expr] + | EIfThenElse { cond; etrue; efalse } -> let cond_stmts, s_cond = translate_expr ctxt cond in - let s_e_true = translate_statements ctxt e_true in - let s_e_false = translate_statements ctxt e_false in + let s_e_true = translate_statements ctxt etrue in + let s_e_false = translate_statements ctxt efalse in cond_stmts @ [A.SIfThenElse (s_cond, s_e_true, s_e_false), Expr.pos block_expr] - | ECatch (e_try, except, e_catch) -> - let s_e_try = translate_statements ctxt e_try in - let s_e_catch = translate_statements ctxt e_catch in - [A.STryExcept (s_e_try, except, s_e_catch), Expr.pos block_expr] + | ECatch { body; exn; handler } -> + let s_e_try = translate_statements ctxt body in + let s_e_catch = translate_statements ctxt handler in + [A.STryExcept (s_e_try, exn, s_e_catch), Expr.pos block_expr] | ERaise except -> (* Before raising the exception, we still give a dummy definition to the current variable so that tools like mypy don't complain. *) diff --git a/compiler/scalc/print.ml b/compiler/scalc/print.ml index 4bf10438..8e3223ae 100644 --- a/compiler/scalc/print.ml +++ b/compiler/scalc/print.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast open Ast @@ -44,11 +44,12 @@ let rec format_expr Print.punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - (fun fmt (e, struct_field) -> + (fun fmt (e, (struct_field, _)) -> Format.fprintf fmt "%a%a%a%a %a" Print.punctuation "\"" - StructFieldName.format_t struct_field Print.punctuation "\"" + StructField.format_t struct_field Print.punctuation "\"" Print.punctuation ":" format_expr e)) - (List.combine es (List.map fst (StructMap.find s decl_ctx.ctx_structs))) + (List.combine es + (StructField.Map.bindings (StructName.Map.find s decl_ctx.ctx_structs))) Print.punctuation "}" | EArray es -> Format.fprintf fmt "@[%a%a%a@]" Print.punctuation "[" @@ -56,41 +57,31 @@ let rec format_expr ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") (fun fmt e -> Format.fprintf fmt "%a" format_expr e)) es Print.punctuation "]" - | EStructFieldAccess (e1, field, s) -> + | EStructFieldAccess (e1, field, _) -> Format.fprintf fmt "%a%a%a%a%a" format_expr e1 Print.punctuation "." - Print.punctuation "\"" StructFieldName.format_t - (fst - (List.find - (fun (field', _) -> StructFieldName.compare field' field = 0) - (StructMap.find s decl_ctx.ctx_structs))) - Print.punctuation "\"" - | EInj (e, case, enum) -> - Format.fprintf fmt "@[%a@ %a@]" Print.enum_constructor - (fst - (List.find - (fun (case', _) -> EnumConstructor.compare case' case = 0) - (EnumMap.find enum decl_ctx.ctx_enums))) + Print.punctuation "\"" StructField.format_t field Print.punctuation "\"" + | EInj (e, cons, _) -> + Format.fprintf fmt "@[%a@ %a@]" Print.enum_constructor cons format_expr e | ELit l -> Print.lit fmt l - | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" Print.binop op format_with_parens - arg1 format_with_parens arg2 - | EApp ((EOp (Binop op), _), [arg1; arg2]) -> + | EApp ((EOp ((Map | Filter) as op), _), [arg1; arg2]) -> + Format.fprintf fmt "@[%a@ %a@ %a@]" Print.operator op + format_with_parens arg1 format_with_parens arg2 + | EApp ((EOp op, _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" format_with_parens arg1 - Print.binop op format_with_parens arg2 - | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> + Print.operator op format_with_parens arg2 + | EApp ((EOp (Log _), _), [arg1]) when not debug -> Format.fprintf fmt "%a" format_with_parens arg1 - | EApp ((EOp (Unop op), _), [arg1]) -> - Format.fprintf fmt "@[%a@ %a@]" Print.unop op format_with_parens arg1 + | EApp ((EOp op, _), [arg1]) -> + Format.fprintf fmt "@[%a@ %a@]" Print.operator op format_with_parens + arg1 | EApp (f, args) -> Format.fprintf fmt "@[%a@ %a@]" format_expr f (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") format_with_parens) args - | EOp (Ternop op) -> Format.fprintf fmt "%a" Print.ternop op - | EOp (Binop op) -> Format.fprintf fmt "%a" Print.binop op - | EOp (Unop op) -> Format.fprintf fmt "%a" Print.unop op + | EOp op -> Format.fprintf fmt "%a" Print.operator op let rec format_statement (decl_ctx : decl_ctx) @@ -101,22 +92,22 @@ let rec format_statement match Marked.unmark stmt with | SInnerFuncDef (name, func) -> Format.fprintf fmt "@[%a@ %a@ %a@ %a@]@\n@[ %a@]" Print.keyword - "let" LocalName.format_t (Marked.unmark name) + "let" format_local_name (Marked.unmark name) (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") (fun fmt ((name, _), typ) -> Format.fprintf fmt "%a%a %a@ %a%a" Print.punctuation "(" - LocalName.format_t name Print.punctuation ":" (Print.typ decl_ctx) + format_local_name name Print.punctuation ":" (Print.typ decl_ctx) typ Print.punctuation ")")) func.func_params Print.punctuation "=" (format_block decl_ctx ~debug) func.func_body | SLocalDecl (name, typ) -> Format.fprintf fmt "@[%a %a %a@ %a@]" Print.keyword "decl" - LocalName.format_t (Marked.unmark name) Print.punctuation ":" + format_local_name (Marked.unmark name) Print.punctuation ":" (Print.typ decl_ctx) typ | SLocalDef (name, naked_expr) -> - Format.fprintf fmt "@[%a %a@ %a@]" LocalName.format_t + Format.fprintf fmt "@[%a %a@ %a@]" format_local_name (Marked.unmark name) Print.punctuation "=" (format_expr decl_ctx ~debug) naked_expr @@ -156,10 +147,13 @@ let rec format_statement (fun fmt ((case, _), (arm_block, payload_name)) -> Format.fprintf fmt "%a %a%a@ %a @[%a@ %a@]" Print.punctuation "|" Print.enum_constructor case Print.punctuation ":" - LocalName.format_t payload_name Print.punctuation "→" + format_local_name payload_name Print.punctuation "→" (format_block decl_ctx ~debug) arm_block)) - (List.combine (EnumMap.find enum decl_ctx.ctx_enums) arms) + (List.combine + (EnumConstructor.Map.bindings + (EnumName.Map.find enum decl_ctx.ctx_enums)) + arms) and format_block (decl_ctx : decl_ctx) @@ -183,8 +177,8 @@ let format_scope ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") (fun fmt ((name, _), typ) -> Format.fprintf fmt "%a%a %a@ %a%a" Print.punctuation "(" - LocalName.format_t name Print.punctuation ":" (Print.typ decl_ctx) - typ Print.punctuation ")")) + format_local_name name Print.punctuation ":" (Print.typ decl_ctx) typ + Print.punctuation ")")) body.scope_body_func.func_params Print.punctuation "=" (format_block decl_ctx ~debug) body.scope_body_func.func_body diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index 2fa60715..f30ca4db 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -15,21 +15,20 @@ the License. *) [@@@warning "-32-27"] -open Utils +open Catala_utils open Shared_ast open Ast -open String_common module Runtime = Runtime_ocaml.Runtime module D = Dcalc.Ast module L = Lcalc.Ast let format_lit (fmt : Format.formatter) (l : L.lit Marked.pos) : unit = match Marked.unmark l with - | LBool true -> Format.fprintf fmt "True" - | LBool false -> Format.fprintf fmt "False" + | LBool true -> Format.pp_print_string fmt "True" + | LBool false -> Format.pp_print_string fmt "False" | LInt i -> Format.fprintf fmt "integer_of_string(\"%s\")" (Runtime.integer_to_string i) - | LUnit -> Format.fprintf fmt "Unit()" + | LUnit -> Format.pp_print_string fmt "Unit()" | LRat i -> Format.fprintf fmt "decimal_of_string(\"%a\")" Print.lit (LRat i) | LMoney e -> Format.fprintf fmt "money_of_cents_string(\"%s\")" @@ -45,31 +44,60 @@ let format_lit (fmt : Format.formatter) (l : L.lit Marked.pos) : unit = let format_log_entry (fmt : Format.formatter) (entry : log_entry) : unit = match entry with - | VarDef _ -> Format.fprintf fmt ":=" - | BeginCall -> Format.fprintf fmt "→ " + | VarDef _ -> Format.pp_print_string fmt ":=" + | BeginCall -> Format.pp_print_string fmt "→ " | EndCall -> Format.fprintf fmt "%s" "← " - | PosRecordIfTrueBool -> Format.fprintf fmt "☛ " + | PosRecordIfTrueBool -> Format.pp_print_string fmt "☛ " -let format_binop (fmt : Format.formatter) (op : binop Marked.pos) : unit = +let format_op + (type k) + (fmt : Format.formatter) + (op : (lcalc, k) operator Marked.pos) : unit = match Marked.unmark op with - | Add _ | Concat -> Format.fprintf fmt "+" - | Sub _ -> Format.fprintf fmt "-" - | Mult _ -> Format.fprintf fmt "*" - | Div KInt -> Format.fprintf fmt "//" - | Div _ -> Format.fprintf fmt "/" - | And -> Format.fprintf fmt "and" - | Or -> Format.fprintf fmt "or" - | Eq -> Format.fprintf fmt "==" - | Neq | Xor -> Format.fprintf fmt "!=" - | Lt _ -> Format.fprintf fmt "<" - | Lte _ -> Format.fprintf fmt "<=" - | Gt _ -> Format.fprintf fmt ">" - | Gte _ -> Format.fprintf fmt ">=" - | Map -> Format.fprintf fmt "list_map" - | Filter -> Format.fprintf fmt "list_filter" - -let format_ternop (fmt : Format.formatter) (op : ternop Marked.pos) : unit = - match Marked.unmark op with Fold -> Format.fprintf fmt "list_fold_left" + | Log (entry, infos) -> assert false + | Minus_int | Minus_rat | Minus_mon | Minus_dur -> + Format.pp_print_string fmt "-" + (* Todo: use the names from [Operator.name] *) + | Not -> Format.pp_print_string fmt "not" + | Length -> Format.pp_print_string fmt "list_length" + | ToRat_int -> Format.pp_print_string fmt "decimal_of_integer" + | ToRat_mon -> Format.pp_print_string fmt "decimal_of_money" + | ToMoney_rat -> Format.pp_print_string fmt "money_of_decimal" + | GetDay -> Format.pp_print_string fmt "day_of_month_of_date" + | GetMonth -> Format.pp_print_string fmt "month_number_of_date" + | GetYear -> Format.pp_print_string fmt "year_of_date" + | FirstDayOfMonth -> Format.pp_print_string fmt "first_day_of_month" + | LastDayOfMonth -> Format.pp_print_string fmt "last_day_of_month" + | Round_mon -> Format.pp_print_string fmt "money_round" + | Round_rat -> Format.pp_print_string fmt "decimal_round" + | Add_int_int | Add_rat_rat | Add_mon_mon | Add_dat_dur | Add_dur_dur | Concat + -> + Format.pp_print_string fmt "+" + | Sub_int_int | Sub_rat_rat | Sub_mon_mon | Sub_dat_dat | Sub_dat_dur + | Sub_dur_dur -> + Format.pp_print_string fmt "-" + | Mult_int_int | Mult_rat_rat | Mult_mon_rat | Mult_dur_int -> + Format.pp_print_string fmt "*" + | Div_int_int -> Format.pp_print_string fmt "//" + | Div_rat_rat | Div_mon_mon | Div_mon_rat -> Format.pp_print_string fmt "/" + | And -> Format.pp_print_string fmt "and" + | Or -> Format.pp_print_string fmt "or" + | Eq -> Format.pp_print_string fmt "==" + | Xor -> Format.pp_print_string fmt "!=" + | Lt_int_int | Lt_rat_rat | Lt_mon_mon | Lt_dat_dat | Lt_dur_dur -> + Format.pp_print_string fmt "<" + | Lte_int_int | Lte_rat_rat | Lte_mon_mon | Lte_dat_dat | Lte_dur_dur -> + Format.pp_print_string fmt "<=" + | Gt_int_int | Gt_rat_rat | Gt_mon_mon | Gt_dat_dat | Gt_dur_dur -> + Format.pp_print_string fmt ">" + | Gte_int_int | Gte_rat_rat | Gte_mon_mon | Gte_dat_dat | Gte_dur_dur -> + Format.pp_print_string fmt ">=" + | Eq_int_int | Eq_rat_rat | Eq_mon_mon | Eq_dat_dat | Eq_dur_dur -> + Format.pp_print_string fmt "==" + | Map -> Format.pp_print_string fmt "list_map" + | Reduce -> Format.pp_print_string fmt "list_reduce" + | Filter -> Format.pp_print_string fmt "list_filter" + | Fold -> Format.pp_print_string fmt "list_fold_left" let format_uid_list (fmt : Format.formatter) (uids : Uid.MarkedString.info list) : unit = @@ -77,7 +105,7 @@ let format_uid_list (fmt : Format.formatter) (uids : Uid.MarkedString.info list) (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") (fun fmt info -> - Format.fprintf fmt "\"%a\"" Utils.Uid.MarkedString.format_info info)) + Format.fprintf fmt "\"%a\"" Uid.MarkedString.format info)) uids let format_string_list (fmt : Format.formatter) (uids : string list) : unit = @@ -90,23 +118,6 @@ let format_string_list (fmt : Format.formatter) (uids : string list) : unit = (Re.replace sanitize_quotes ~f:(fun _ -> "\\\"") info))) uids -let format_unop (fmt : Format.formatter) (op : unop Marked.pos) : unit = - match Marked.unmark op with - | Minus _ -> Format.fprintf fmt "-" - | Not -> Format.fprintf fmt "not" - | Log (entry, infos) -> assert false (* should not happen *) - | Length -> Format.fprintf fmt "%s" "list_length" - | IntToRat -> Format.fprintf fmt "%s" "decimal_of_integer" - | MoneyToRat -> Format.fprintf fmt "%s" "decimal_of_money" - | RatToMoney -> Format.fprintf fmt "%s" "money_of_decimal" - | GetDay -> Format.fprintf fmt "%s" "day_of_month_of_date" - | GetMonth -> Format.fprintf fmt "%s" "month_number_of_date" - | GetYear -> Format.fprintf fmt "%s" "year_of_date" - | FirstDayOfMonth -> Format.fprintf fmt "%s" "first_day_of_month" - | LastDayOfMonth -> Format.fprintf fmt "%s" "last_day_of_month" - | RoundMoney -> Format.fprintf fmt "%s" "money_round" - | RoundDecimal -> Format.fprintf fmt "%s" "decimal_round" - let avoid_keywords (s : string) : string = if match s with @@ -125,24 +136,26 @@ let avoid_keywords (s : string) : string = let format_struct_name (fmt : Format.formatter) (v : StructName.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_camel_case (to_ascii (Format.asprintf "%a" StructName.format_t v)))) + (String.to_camel_case + (String.to_ascii (Format.asprintf "%a" StructName.format_t v)))) -let format_struct_field_name (fmt : Format.formatter) (v : StructFieldName.t) : - unit = +let format_struct_field_name (fmt : Format.formatter) (v : StructField.t) : unit + = Format.fprintf fmt "%s" (avoid_keywords - (to_ascii (Format.asprintf "%a" StructFieldName.format_t v))) + (String.to_ascii (Format.asprintf "%a" StructField.format_t v))) let format_enum_name (fmt : Format.formatter) (v : EnumName.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_camel_case (to_ascii (Format.asprintf "%a" EnumName.format_t v)))) + (String.to_camel_case + (String.to_ascii (Format.asprintf "%a" EnumName.format_t v)))) let format_enum_cons_name (fmt : Format.formatter) (v : EnumConstructor.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) + (String.to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) let typ_needs_parens (e : typ) : bool = match Marked.unmark e with TArrow _ | TArray _ -> true | _ -> false @@ -180,10 +193,10 @@ let rec format_typ (fmt : Format.formatter) (typ : typ) : unit = let format_name_cleaned (fmt : Format.formatter) (s : string) : unit = s - |> to_ascii - |> to_snake_case + |> String.to_ascii + |> String.to_snake_case |> Re.Pcre.substitute ~rex:(Re.Pcre.regexp "\\.") ~subst:(fun _ -> "_dot_") - |> to_ascii + |> String.to_ascii |> avoid_keywords |> Format.fprintf fmt "%s" @@ -268,10 +281,11 @@ let rec format_expression (ctx : decl_ctx) (fmt : Format.formatter) (e : expr) : Format.fprintf fmt "%a(%a)" format_struct_name s (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - (fun fmt (e, struct_field) -> + (fun fmt (e, (struct_field, _)) -> Format.fprintf fmt "%a = %a" format_struct_field_name struct_field (format_expression ctx) e)) - (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) + (List.combine es + (StructField.Map.bindings (StructName.Map.find s ctx.ctx_structs))) | EStructFieldAccess (e1, field, _) -> Format.fprintf fmt "%a.%a" (format_expression ctx) e1 format_struct_field_name field @@ -296,21 +310,20 @@ let rec format_expression (ctx : decl_ctx) (fmt : Format.formatter) (e : expr) : (fun fmt e -> Format.fprintf fmt "%a" (format_expression ctx) e)) es | ELit l -> Format.fprintf fmt "%a" format_lit (Marked.same_mark_as l e) - | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> - Format.fprintf fmt "%a(%a,@ %a)" format_binop (op, Pos.no_pos) + | EApp ((EOp ((Map | Filter) as op), _), [arg1; arg2]) -> + Format.fprintf fmt "%a(%a,@ %a)" format_op (op, Pos.no_pos) (format_expression ctx) arg1 (format_expression ctx) arg2 - | EApp ((EOp (Binop op), _), [arg1; arg2]) -> - Format.fprintf fmt "(%a %a@ %a)" (format_expression ctx) arg1 format_binop + | EApp ((EOp op, _), [arg1; arg2]) -> + Format.fprintf fmt "(%a %a@ %a)" (format_expression ctx) arg1 format_op (op, Pos.no_pos) (format_expression ctx) arg2 - | EApp ((EApp ((EOp (Unop (Log (BeginCall, info))), _), [f]), _), [arg]) + | EApp ((EApp ((EOp (Log (BeginCall, info)), _), [f]), _), [arg]) when !Cli.trace_flag -> Format.fprintf fmt "log_begin_call(%a,@ %a,@ %a)" format_uid_list info (format_expression ctx) f (format_expression ctx) arg - | EApp ((EOp (Unop (Log (VarDef tau, info))), _), [arg1]) when !Cli.trace_flag - -> + | EApp ((EOp (Log (VarDef tau, info)), _), [arg1]) when !Cli.trace_flag -> Format.fprintf fmt "log_variable_definition(%a,@ %a)" format_uid_list info (format_expression ctx) arg1 - | EApp ((EOp (Unop (Log (PosRecordIfTrueBool, _))), pos), [arg1]) + | EApp ((EOp (Log (PosRecordIfTrueBool, _)), pos), [arg1]) when !Cli.trace_flag -> Format.fprintf fmt "log_decision_taken(SourcePosition(filename=\"%s\",@ start_line=%d,@ \ @@ -318,16 +331,21 @@ let rec format_expression (ctx : decl_ctx) (fmt : Format.formatter) (e : expr) : (Pos.get_file pos) (Pos.get_start_line pos) (Pos.get_start_column pos) (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) (format_expression ctx) arg1 - | EApp ((EOp (Unop (Log (EndCall, info))), _), [arg1]) when !Cli.trace_flag -> + | EApp ((EOp (Log (EndCall, info)), _), [arg1]) when !Cli.trace_flag -> Format.fprintf fmt "log_end_call(%a,@ %a)" format_uid_list info (format_expression ctx) arg1 - | EApp ((EOp (Unop (Log _)), _), [arg1]) -> + | EApp ((EOp (Log _), _), [arg1]) -> Format.fprintf fmt "%a" (format_expression ctx) arg1 - | EApp ((EOp (Unop ((Minus _ | Not) as op)), _), [arg1]) -> - Format.fprintf fmt "%a %a" format_unop (op, Pos.no_pos) + | EApp ((EOp Not, _), [arg1]) -> + Format.fprintf fmt "%a %a" format_op (Not, Pos.no_pos) (format_expression ctx) arg1 - | EApp ((EOp (Unop op), _), [arg1]) -> - Format.fprintf fmt "%a(%a)" format_unop (op, Pos.no_pos) + | EApp + ((EOp ((Minus_int | Minus_rat | Minus_mon | Minus_dur) as op), _), [arg1]) + -> + Format.fprintf fmt "%a %a" format_op (op, Pos.no_pos) + (format_expression ctx) arg1 + | EApp ((EOp op, _), [arg1]) -> + Format.fprintf fmt "%a(%a)" format_op (op, Pos.no_pos) (format_expression ctx) arg1 | EApp ((EFunc x, pos), args) when Ast.TopLevelName.compare x Ast.handle_default = 0 @@ -348,9 +366,7 @@ let rec format_expression (ctx : decl_ctx) (fmt : Format.formatter) (e : expr) : ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") (format_expression ctx)) args - | EOp (Ternop op) -> Format.fprintf fmt "%a" format_ternop (op, Pos.no_pos) - | EOp (Binop op) -> Format.fprintf fmt "%a" format_binop (op, Pos.no_pos) - | EOp (Unop op) -> Format.fprintf fmt "%a" format_unop (op, Pos.no_pos) + | EOp op -> Format.fprintf fmt "%a" format_op (op, Pos.no_pos) let rec format_statement (ctx : decl_ctx) @@ -400,7 +416,7 @@ let rec format_statement List.map2 (fun (x, y) (cons, _) -> x, y, cons) cases - (EnumMap.find e_name ctx.ctx_enums) + (EnumConstructor.Map.bindings (EnumName.Map.find e_name ctx.ctx_enums)) in let tmp_var = LocalName.fresh ("match_arg", Pos.no_pos) in Format.fprintf fmt "%a = %a@\n@[if %a@]" format_var tmp_var @@ -442,6 +458,7 @@ let format_ctx (fmt : Format.formatter) (ctx : decl_ctx) : unit = let format_struct_decl fmt (struct_name, struct_fields) = + let fields = StructField.Map.bindings struct_fields in Format.fprintf fmt "class %a:@\n\ \ def __init__(self, %a) -> None:@\n\ @@ -461,40 +478,41 @@ let format_ctx struct_name (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ", ") - (fun _fmt (struct_field, struct_field_type) -> + (fun fmt (struct_field, struct_field_type) -> Format.fprintf fmt "%a: %a" format_struct_field_name struct_field format_typ struct_field_type)) - struct_fields - (if List.length struct_fields = 0 then fun fmt _ -> + fields + (if StructField.Map.is_empty struct_fields then fun fmt _ -> Format.fprintf fmt " pass" else Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") - (fun _fmt (struct_field, _) -> + (fun fmt (struct_field, _) -> Format.fprintf fmt " self.%a = %a" format_struct_field_name struct_field format_struct_field_name struct_field)) - struct_fields format_struct_name struct_name - (if List.length struct_fields > 0 then + fields format_struct_name struct_name + (if not (StructField.Map.is_empty struct_fields) then Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt " and@ ") - (fun _fmt (struct_field, _) -> + (fun fmt (struct_field, _) -> Format.fprintf fmt "self.%a == other.%a" format_struct_field_name struct_field format_struct_field_name struct_field) else fun fmt _ -> Format.fprintf fmt "True") - struct_fields format_struct_name struct_name + fields format_struct_name struct_name (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",") - (fun _fmt (struct_field, _) -> + (fun fmt (struct_field, _) -> Format.fprintf fmt "%a={}" format_struct_field_name struct_field)) - struct_fields + fields (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - (fun _fmt (struct_field, _) -> + (fun fmt (struct_field, _) -> Format.fprintf fmt "self.%a" format_struct_field_name struct_field)) - struct_fields + fields in let format_enum_decl fmt (enum_name, enum_cons) = - if List.length enum_cons = 0 then failwith "no constructors in the enum" + if EnumConstructor.Map.is_empty enum_cons then + failwith "no constructors in the enum" else Format.fprintf fmt "@[class %a_Code(Enum):@\n\ @@ -522,9 +540,11 @@ let format_ctx format_enum_name enum_name (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") - (fun _fmt (i, enum_cons, enum_cons_type) -> + (fun fmt (i, enum_cons, enum_cons_type) -> Format.fprintf fmt "%a = %d" format_enum_cons_name enum_cons i)) - (List.mapi (fun i (x, y) -> i, x, y) enum_cons) + (List.mapi + (fun i (x, y) -> i, x, y) + (EnumConstructor.Map.bindings enum_cons)) format_enum_name enum_name format_enum_name enum_name format_enum_name enum_name in @@ -540,8 +560,8 @@ let format_ctx let scope_structs = List.map (fun (s, _) -> Scopelang.Dependency.TVertex.Struct s) - (StructMap.bindings - (StructMap.filter + (StructName.Map.bindings + (StructName.Map.filter (fun s _ -> not (is_in_type_ordering s)) ctx.ctx_structs)) in @@ -550,10 +570,10 @@ let format_ctx match struct_or_enum with | Scopelang.Dependency.TVertex.Struct s -> Format.fprintf fmt "%a@\n@\n" format_struct_decl - (s, StructMap.find s ctx.ctx_structs) + (s, StructName.Map.find s ctx.ctx_structs) | Scopelang.Dependency.TVertex.Enum e -> Format.fprintf fmt "%a@\n@\n" format_enum_decl - (e, EnumMap.find e ctx.ctx_enums)) + (e, EnumName.Map.find e ctx.ctx_enums)) (type_ordering @ scope_structs) let format_program diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index f43afcc2..f7f35c1d 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast type location = scopelang glocation @@ -31,7 +31,7 @@ type 'm expr = (scopelang, 'm mark) gexpr let rec locations_used (e : 'm expr) : LocationSet.t = match e with | ELocation l, pos -> LocationSet.singleton (l, Expr.mark_pos pos) - | EAbs (binder, _), _ -> + | EAbs { binder; _ }, _ -> let _, body = Bindlib.unmbind binder in locations_used body | e -> @@ -39,23 +39,20 @@ let rec locations_used (e : 'm expr) : LocationSet.t = (fun e -> LocationSet.union (locations_used e)) e LocationSet.empty -type io_input = NoInput | OnlyInput | Reentrant -type io = { io_output : bool Marked.pos; io_input : io_input Marked.pos } - type 'm rule = - | Definition of location Marked.pos * typ * io * 'm expr + | Definition of location Marked.pos * typ * Desugared.Ast.io * 'm expr | Assertion of 'm expr | Call of ScopeName.t * SubScopeName.t * 'm mark type 'm scope_decl = { scope_decl_name : ScopeName.t; - scope_sig : (typ * io) ScopeVarMap.t; + scope_sig : (typ * Desugared.Ast.io) ScopeVar.Map.t; scope_decl_rules : 'm rule list; scope_mark : 'm mark; } type 'm program = { - program_scopes : 'm scope_decl ScopeMap.t; + program_scopes : 'm scope_decl ScopeName.Map.t; program_ctx : decl_ctx; } @@ -73,17 +70,17 @@ let type_rule decl_ctx env = function let type_program (prg : 'm program) : typed program = let typing_env = - ScopeMap.fold + ScopeName.Map.fold (fun scope_name scope_decl -> - let vars = ScopeVarMap.map fst scope_decl.scope_sig in + let vars = ScopeVar.Map.map fst scope_decl.scope_sig in Typing.Env.add_scope scope_name ~vars) prg.program_scopes Typing.Env.empty in let program_scopes = - ScopeMap.map + ScopeName.Map.map (fun scope_decl -> let typing_env = - ScopeVarMap.fold + ScopeVar.Map.fold (fun svar (typ, _) env -> Typing.Env.add_scope_var svar typ env) scope_decl.scope_sig typing_env in diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index 2586bedd..342b506c 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -16,7 +16,7 @@ (** Abstract syntax tree of the scope language *) -open Utils +open Catala_utils open Shared_ast (** {1 Identifiers} *) @@ -31,41 +31,20 @@ type 'm expr = (scopelang, 'm mark) gexpr val locations_used : 'm expr -> LocationSet.t -(** This type characterizes the three levels of visibility for a given scope - variable with regards to the scope's input and possible redefinitions inside - the scope.. *) -type io_input = - | NoInput - (** For an internal variable defined only in the scope, and does not - appear in the input. *) - | OnlyInput - (** For variables that should not be redefined in the scope, because they - appear in the input. *) - | Reentrant - (** For variables defined in the scope that can also be redefined by the - caller as they appear in the input. *) - -type io = { - io_output : bool Marked.pos; - (** [true] is present in the output of the scope. *) - io_input : io_input Marked.pos; -} -(** Characterization of the input/output status of a scope variable. *) - type 'm rule = - | Definition of location Marked.pos * typ * io * 'm expr + | Definition of location Marked.pos * typ * Desugared.Ast.io * 'm expr | Assertion of 'm expr | Call of ScopeName.t * SubScopeName.t * 'm mark type 'm scope_decl = { scope_decl_name : ScopeName.t; - scope_sig : (typ * io) ScopeVarMap.t; + scope_sig : (typ * Desugared.Ast.io) ScopeVar.Map.t; scope_decl_rules : 'm rule list; scope_mark : 'm mark; } type 'm program = { - program_scopes : 'm scope_decl ScopeMap.t; + program_scopes : 'm scope_decl ScopeName.Map.t; program_ctx : decl_ctx; } diff --git a/compiler/scopelang/dependency.ml b/compiler/scopelang/dependency.ml index e230843d..72177d8a 100644 --- a/compiler/scopelang/dependency.ml +++ b/compiler/scopelang/dependency.ml @@ -17,7 +17,7 @@ (** Graph representation of the dependencies between scopes in the Catala program. Vertices are functions, x -> y if x is used in the definition of y. *) -open Utils +open Catala_utils open Shared_ast module SVertex = ScopeName @@ -41,13 +41,13 @@ module SSCC = Graph.Components.Make (SDependencies) let rec expr_used_scopes e = let recurse_subterms e = Expr.shallow_fold - (fun e -> ScopeMap.union (fun _ x _ -> Some x) (expr_used_scopes e)) - e ScopeMap.empty + (fun e -> ScopeName.Map.union (fun _ x _ -> Some x) (expr_used_scopes e)) + e ScopeName.Map.empty in match e with - | (EScopeCall (scope, _), m) as e -> - ScopeMap.add scope (Expr.mark_pos m) (recurse_subterms e) - | EAbs (binder, _), _ -> + | (EScopeCall { scope; _ }, m) as e -> + ScopeName.Map.add scope (Expr.mark_pos m) (recurse_subterms e) + | EAbs { binder; _ }, _ -> let _, body = Bindlib.unmbind binder in expr_used_scopes body | e -> recurse_subterms e @@ -58,28 +58,28 @@ let rule_used_scopes = function walking through all exprs again *) expr_used_scopes e | Ast.Call (subscope, subindex, _) -> - ScopeMap.singleton subscope + ScopeName.Map.singleton subscope (Marked.get_mark (SubScopeName.get_info subindex)) let build_program_dep_graph (prgm : 'm Ast.program) : SDependencies.t = let g = SDependencies.empty in let g = - ScopeMap.fold + ScopeName.Map.fold (fun v _ g -> SDependencies.add_vertex g v) prgm.program_scopes g in - ScopeMap.fold + ScopeName.Map.fold (fun scope_name scope g -> List.fold_left (fun g rule -> let used_scopes = rule_used_scopes rule in - if ScopeMap.mem scope_name used_scopes then + if ScopeName.Map.mem scope_name used_scopes then Errors.raise_spanned_error (Marked.get_mark (ScopeName.get_info scope.Ast.scope_decl_name)) "The scope %a is calling into itself as a subscope, which is \ forbidden since Catala does not provide recursion" ScopeName.format_t scope.Ast.scope_decl_name; - ScopeMap.fold + ScopeName.Map.fold (fun used_scope pos g -> let edge = SDependencies.E.create used_scope pos scope_name in SDependencies.add_edge_e g edge) @@ -190,10 +190,10 @@ let build_type_graph (structs : struct_ctx) (enums : enum_ctx) : TDependencies.t = let g = TDependencies.empty in let g = - StructMap.fold + StructName.Map.fold (fun s fields g -> - List.fold_left - (fun g (_, typ) -> + StructField.Map.fold + (fun _ typ g -> let def = TVertex.Struct s in let g = TDependencies.add_vertex g def in let used = get_structs_or_enums_in_type typ in @@ -210,14 +210,14 @@ let build_type_graph (structs : struct_ctx) (enums : enum_ctx) : TDependencies.t in TDependencies.add_edge_e g edge) used g) - g fields) + fields g) structs g in let g = - EnumMap.fold + EnumName.Map.fold (fun e cases g -> - List.fold_left - (fun g (_, typ) -> + EnumConstructor.Map.fold + (fun _ typ g -> let def = TVertex.Enum e in let g = TDependencies.add_vertex g def in let used = get_structs_or_enums_in_type typ in @@ -234,7 +234,7 @@ let build_type_graph (structs : struct_ctx) (enums : enum_ctx) : TDependencies.t in TDependencies.add_edge_e g edge) used g) - g cases) + cases g) enums g in g diff --git a/compiler/scopelang/dependency.mli b/compiler/scopelang/dependency.mli index 5ccf1790..f4d40dba 100644 --- a/compiler/scopelang/dependency.mli +++ b/compiler/scopelang/dependency.mli @@ -17,7 +17,7 @@ (** Graph representation of the dependencies between scopes in the Catala program. Vertices are functions, x -> y if x is used in the definition of y. *) -open Utils +open Catala_utils open Shared_ast (** {1 Scope dependencies} *) diff --git a/compiler/scopelang/dune b/compiler/scopelang/dune index ab63006c..9b798ce4 100644 --- a/compiler/scopelang/dune +++ b/compiler/scopelang/dune @@ -1,7 +1,7 @@ (library (name scopelang) (public_name catala.scopelang) - (libraries utils dcalc ocamlgraph) + (libraries catala_utils ocamlgraph desugared) (flags (:standard -short-paths))) diff --git a/compiler/scopelang/from_desugared.ml b/compiler/scopelang/from_desugared.ml new file mode 100644 index 00000000..957e9051 --- /dev/null +++ b/compiler/scopelang/from_desugared.ml @@ -0,0 +1,730 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Denis Merigoux + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +(** Translation from {!module: Desugared.Ast} to {!module: Scopelang.Ast} *) + +open Catala_utils +open Shared_ast + +(** {1 Expression translation}*) + +type target_scope_vars = + | WholeVar of ScopeVar.t + | States of (StateName.t * ScopeVar.t) list + +type ctx = { + decl_ctx : decl_ctx; + scope_var_mapping : target_scope_vars ScopeVar.Map.t; + var_mapping : (Desugared.Ast.expr, untyped Ast.expr Var.t) Var.Map.t; +} + +let tag_with_log_entry + (e : untyped Ast.expr boxed) + (l : log_entry) + (markings : Uid.MarkedString.info list) : untyped Ast.expr boxed = + Expr.eapp + (Expr.eop (Log (l, markings)) [TAny, Expr.pos e] (Marked.get_mark e)) + [e] (Marked.get_mark e) + +let rec translate_expr (ctx : ctx) (e : Desugared.Ast.expr) : + untyped Ast.expr boxed = + let m = Marked.get_mark e in + match Marked.unmark e with + | ELocation (SubScopeVar (s_name, ss_name, s_var)) -> + (* When referring to a subscope variable in an expression, we are referring + to the output, hence we take the last state. *) + let new_s_var = + match ScopeVar.Map.find (Marked.unmark s_var) ctx.scope_var_mapping with + | WholeVar new_s_var -> Marked.same_mark_as new_s_var s_var + | States states -> + Marked.same_mark_as (snd (List.hd (List.rev states))) s_var + in + Expr.elocation (SubScopeVar (s_name, ss_name, new_s_var)) m + | ELocation (DesugaredScopeVar (s_var, None)) -> + Expr.elocation + (ScopelangScopeVar + (match + ScopeVar.Map.find (Marked.unmark s_var) ctx.scope_var_mapping + with + | WholeVar new_s_var -> Marked.same_mark_as new_s_var s_var + | States _ -> failwith "should not happen")) + m + | ELocation (DesugaredScopeVar (s_var, Some state)) -> + Expr.elocation + (ScopelangScopeVar + (match + ScopeVar.Map.find (Marked.unmark s_var) ctx.scope_var_mapping + with + | WholeVar _ -> failwith "should not happen" + | States states -> Marked.same_mark_as (List.assoc state states) s_var)) + m + | EVar v -> Expr.evar (Var.Map.find v ctx.var_mapping) m + | EStruct { name; fields } -> + Expr.estruct name (StructField.Map.map (translate_expr ctx) fields) m + | EDStructAccess { name_opt = None; _ } -> + (* Note: this could only happen if disambiguation was disabled. If we want + to support it, we should still allow this case when the field has only + one possible matching structure *) + Errors.raise_spanned_error (Expr.mark_pos m) + "Ambiguous structure field access" + | EDStructAccess { e; field; name_opt = Some name } -> + let e' = translate_expr ctx e in + let field = + try + StructName.Map.find name + (IdentName.Map.find field ctx.decl_ctx.ctx_struct_fields) + with Not_found -> + (* Should not happen after disambiguation *) + Errors.raise_spanned_error (Expr.mark_pos m) + "Field %s does not belong to structure %a" field StructName.format_t + name + in + Expr.estructaccess e' field name m + | EInj { e; cons; name } -> Expr.einj (translate_expr ctx e) cons name m + | EMatch { e; name; cases } -> + Expr.ematch (translate_expr ctx e) name + (EnumConstructor.Map.map (translate_expr ctx) cases) + m + | EScopeCall { scope; args } -> + Expr.escopecall scope + (ScopeVar.Map.fold + (fun v e args' -> + let v' = + match ScopeVar.Map.find v ctx.scope_var_mapping with + | WholeVar v' -> v' + | States ((_, v') :: _) -> + (* When there are multiple states, the input is always the first + one *) + v' + | States [] -> assert false + in + ScopeVar.Map.add v' (translate_expr ctx e) args') + args ScopeVar.Map.empty) + m + | ELit + (( LBool _ | LEmptyError | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ + | LDuration _ ) as l) -> + Expr.elit l m + | EAbs { binder; tys } -> + let vars, body = Bindlib.unmbind binder in + let new_vars = Array.map (fun var -> Var.make (Bindlib.name_of var)) vars in + let ctx = + List.fold_left2 + (fun ctx var new_var -> + { ctx with var_mapping = Var.Map.add var new_var ctx.var_mapping }) + ctx (Array.to_list vars) (Array.to_list new_vars) + in + Expr.eabs (Expr.bind new_vars (translate_expr ctx body)) tys m + | EApp { f = EOp { op; tys }, m1; args } -> + let args = List.map (translate_expr ctx) args in + Operator.kind_dispatch op + ~monomorphic:(fun op -> Expr.eapp (Expr.eop op tys m1) args m) + ~polymorphic:(fun op -> Expr.eapp (Expr.eop op tys m1) args m) + ~overloaded:(fun op -> + match + Operator.resolve_overload ctx.decl_ctx + (Marked.mark (Expr.pos e) op) + tys + with + | op, `Straight -> Expr.eapp (Expr.eop op tys m1) args m + | op, `Reversed -> + Expr.eapp (Expr.eop op (List.rev tys) m1) (List.rev args) m) + | EOp _ -> assert false (* Only allowed within [EApp] *) + | EApp { f; args } -> + Expr.eapp (translate_expr ctx f) (List.map (translate_expr ctx) args) m + | EDefault { excepts; just; cons } -> + Expr.edefault + (List.map (translate_expr ctx) excepts) + (translate_expr ctx just) (translate_expr ctx cons) m + | EIfThenElse { cond; etrue; efalse } -> + Expr.eifthenelse (translate_expr ctx cond) (translate_expr ctx etrue) + (translate_expr ctx efalse) + m + | EArray args -> Expr.earray (List.map (translate_expr ctx) args) m + | EErrorOnEmpty e1 -> Expr.eerroronempty (translate_expr ctx e1) m + +(** {1 Rule tree construction} *) + +(** Intermediate representation for the exception tree of rules for a particular + scope definition. *) +type rule_tree = + | Leaf of Desugared.Ast.rule list + (** Rules defining a base case piecewise. List is non-empty. *) + | Node of rule_tree list * Desugared.Ast.rule list + (** [Node (exceptions, base_case)] is a list of exceptions to a non-empty + list of rules defining a base case piecewise. *) + +(** Transforms a flat list of rules into a tree, taking into account the + priorities declared between rules *) +let def_map_to_tree + (def_info : Desugared.Ast.ScopeDef.t) + (def : Desugared.Ast.rule RuleName.Map.t) : rule_tree list = + let exc_graph = Desugared.Dependency.build_exceptions_graph def def_info in + Desugared.Dependency.check_for_exception_cycle exc_graph; + (* we start by the base cases: they are the vertices which have no + successors *) + let base_cases = + Desugared.Dependency.ExceptionsDependencies.fold_vertex + (fun v base_cases -> + if + Desugared.Dependency.ExceptionsDependencies.out_degree exc_graph v = 0 + then v :: base_cases + else base_cases) + exc_graph [] + in + let rec build_tree (base_cases : RuleName.Set.t) : rule_tree = + let exceptions = + Desugared.Dependency.ExceptionsDependencies.pred exc_graph base_cases + in + let base_case_as_rule_list = + List.map + (fun r -> RuleName.Map.find r def) + (RuleName.Set.elements base_cases) + in + match exceptions with + | [] -> Leaf base_case_as_rule_list + | _ -> Node (List.map build_tree exceptions, base_case_as_rule_list) + in + List.map build_tree base_cases + +(** From the {!type: rule_tree}, builds an {!constructor: Dcalc.EDefault} + expression in the scope language. The [~toplevel] parameter is used to know + when to place the toplevel binding in the case of functions. *) +let rec rule_tree_to_expr + ~(toplevel : bool) + ~(is_reentrant_var : bool) + (ctx : ctx) + (def_pos : Pos.t) + (is_func : Desugared.Ast.expr Var.t option) + (tree : rule_tree) : untyped Ast.expr boxed = + let emark = Untyped { pos = def_pos } in + let exceptions, base_rules = + match tree with Leaf r -> [], r | Node (exceptions, r) -> exceptions, r + in + (* because each rule has its own variable parameter and we want to convert the + whole rule tree into a function, we need to perform some alpha-renaming of + all the expressions *) + let substitute_parameter + (e : Desugared.Ast.expr boxed) + (rule : Desugared.Ast.rule) : Desugared.Ast.expr boxed = + match is_func, rule.Desugared.Ast.rule_parameter with + | Some new_param, Some (old_param, _) -> + let binder = Bindlib.bind_var old_param (Marked.unmark e) in + Marked.mark (Marked.get_mark e) + @@ Bindlib.box_apply2 + (fun binder new_param -> Bindlib.subst binder new_param) + binder + (Bindlib.box_var new_param) + | None, None -> e + | _ -> assert false + (* should not happen *) + in + let ctx = + match is_func with + | None -> ctx + | Some new_param -> ( + match Var.Map.find_opt new_param ctx.var_mapping with + | None -> + let new_param_scope = Var.make (Bindlib.name_of new_param) in + { + ctx with + var_mapping = Var.Map.add new_param new_param_scope ctx.var_mapping; + } + | Some _ -> + (* We only create a mapping if none exists because [rule_tree_to_expr] + is called recursively on the exceptions of the tree and we don't want + to create a new Scopelang variable for the parameter at each tree + level. *) + ctx) + in + let base_just_list = + List.map + (fun rule -> substitute_parameter rule.Desugared.Ast.rule_just rule) + base_rules + in + let base_cons_list = + List.map + (fun rule -> substitute_parameter rule.Desugared.Ast.rule_cons rule) + base_rules + in + let translate_and_unbox_list (list : Desugared.Ast.expr boxed list) : + untyped Ast.expr boxed list = + List.map + (fun e -> + (* There are two levels of boxing here, the outermost is introduced by + the [translate_expr] function for which all of the bindings should + have been closed by now, so we can safely unbox. *) + translate_expr ctx (Expr.unbox e)) + list + in + let default_containing_base_cases = + Expr.make_default + (List.map2 + (fun base_just base_cons -> + Expr.make_default [] + (* Here we insert the logging command that records when a decision + is taken for the value of a variable. *) + (tag_with_log_entry base_just PosRecordIfTrueBool []) + base_cons emark) + (translate_and_unbox_list base_just_list) + (translate_and_unbox_list base_cons_list)) + (Expr.elit (LBool false) emark) + (Expr.elit LEmptyError emark) + emark + in + let exceptions = + List.map + (rule_tree_to_expr ~toplevel:false ~is_reentrant_var ctx def_pos is_func) + exceptions + in + let default = + Expr.make_default exceptions + (Expr.elit (LBool true) emark) + default_containing_base_cases emark + in + match is_func, (List.hd base_rules).Desugared.Ast.rule_parameter with + | None, None -> default + | Some new_param, Some (_, typ) -> + if toplevel then + (* When we're creating a function from multiple defaults, we must check + that the result returned by the function is not empty, unless we're + dealing with a context variable which is reentrant (either in the + caller or callee). In this case the ErrorOnEmpty will be added later in + the scopelang->dcalc translation. *) + let default = + if is_reentrant_var then default else Expr.eerroronempty default emark + in + Expr.make_abs + [| Var.Map.find new_param ctx.var_mapping |] + default [typ] def_pos + else default + | _ -> (* should not happen *) assert false + +(** {1 AST translation} *) + +(** Translates a definition inside a scope, the resulting expression should be + an {!constructor: Dcalc.EDefault} *) +let translate_def + (ctx : ctx) + (def_info : Desugared.Ast.ScopeDef.t) + (def : Desugared.Ast.rule RuleName.Map.t) + (typ : typ) + (io : Desugared.Ast.io) + ~(is_cond : bool) + ~(is_subscope_var : bool) : untyped Ast.expr boxed = + (* Here, we have to transform this list of rules into a default tree. *) + let is_def_func = + match Marked.unmark typ with TArrow (_, _) -> true | _ -> false + in + let is_rule_func _ (r : Desugared.Ast.rule) : bool = + Option.is_some r.Desugared.Ast.rule_parameter + in + let all_rules_func = RuleName.Map.for_all is_rule_func def in + let all_rules_not_func = + RuleName.Map.for_all (fun n r -> not (is_rule_func n r)) def + in + let is_def_func_param_typ : typ option = + if is_def_func && all_rules_func then + match Marked.unmark typ with + | TArrow (t_param, _) -> Some t_param + | _ -> + Errors.raise_spanned_error (Marked.get_mark typ) + "The definitions of %a are function but it doesn't have a function \ + type" + Desugared.Ast.ScopeDef.format_t def_info + else if (not is_def_func) && all_rules_not_func then None + else + let spans = + List.map + (fun (_, r) -> + ( Some "This definition is a function:", + Expr.pos r.Desugared.Ast.rule_cons )) + (RuleName.Map.bindings (RuleName.Map.filter is_rule_func def)) + @ List.map + (fun (_, r) -> + ( Some "This definition is not a function:", + Expr.pos r.Desugared.Ast.rule_cons )) + (RuleName.Map.bindings + (RuleName.Map.filter (fun n r -> not (is_rule_func n r)) def)) + in + Errors.raise_multispanned_error spans + "some definitions of the same variable are functions while others \ + aren't" + in + let top_list = def_map_to_tree def_info def in + let is_input = + match Marked.unmark io.Desugared.Ast.io_input with + | OnlyInput -> true + | _ -> false + in + let is_reentrant = + match Marked.unmark io.Desugared.Ast.io_input with + | Reentrant -> true + | _ -> false + in + let top_value = + if is_cond && ((not is_subscope_var) || (is_subscope_var && is_input)) then + (* We add the bottom [false] value for conditions, only for the scope + where the condition is declared. Except when the variable is an input, + where we want the [false] to be added at each caller parent scope. *) + Some + (Desugared.Ast.always_false_rule + (Desugared.Ast.ScopeDef.get_position def_info) + is_def_func_param_typ) + else None + in + if + RuleName.Map.cardinal def = 0 + && is_subscope_var + (* Here we have a special case for the empty definitions. Indeed, we could + use the code for the regular case below that would create a convoluted + default always returning empty error, and this would be correct. But it + gets more complicated with functions. Indeed, if we create an empty + definition for a subscope argument whose type is a function, we get + something like [fun () -> (fun real_param -> < ... >)] that is passed as + an argument to the subscope. The sub-scope de-thunks but the de-thunking + does not return empty error, signalling there is not reentrant variable, + because functions are values! So the subscope does not see that there is + not reentrant variable and does not pick its internal definition instead. + See [test/test_scope/subscope_function_arg_not_defined.catala_en] for a + test case exercising that subtlety. + + To avoid this complication we special case here and put an empty error + for all subscope variables that are not defined. It covers the subtlety + with functions described above but also conditions with the false default + value. *) + && not (is_cond && is_input) + (* However, this special case suffers from an exception: when a condition is + defined as an OnlyInput to a subscope, since the [false] default value + will not be provided by the calee scope, it has to be placed in the + caller. *) + then + let m = Untyped { pos = Desugared.Ast.ScopeDef.get_position def_info } in + let empty_error = Expr.elit LEmptyError m in + match is_def_func_param_typ with + | Some ty -> + Expr.make_abs [| Var.make "_" |] empty_error [ty] (Expr.mark_pos m) + | _ -> empty_error + else + rule_tree_to_expr ~toplevel:true ~is_reentrant_var:is_reentrant ctx + (Desugared.Ast.ScopeDef.get_position def_info) + (Option.map (fun _ -> Var.make "param") is_def_func_param_typ) + (match top_list, top_value with + | [], None -> + (* In this case, there are no rules to define the expression and no + default value so we put an empty rule. *) + Leaf + [Desugared.Ast.empty_rule (Marked.get_mark typ) is_def_func_param_typ] + | [], Some top_value -> + (* In this case, there are no rules to define the expression but a + default value so we put it. *) + Leaf [top_value] + | _, Some top_value -> + (* When there are rules + a default value, we put the rules as + exceptions to the default value *) + Node (top_list, [top_value]) + | [top_tree], None -> top_tree + | _, None -> + Node + ( top_list, + [ + Desugared.Ast.empty_rule (Marked.get_mark typ) + is_def_func_param_typ; + ] )) + +let translate_rule ctx (scope : Desugared.Ast.scope) = function + | Desugared.Dependency.Vertex.Var (var, state) -> ( + let scope_def = + Desugared.Ast.ScopeDefMap.find + (Desugared.Ast.ScopeDef.Var (var, state)) + scope.scope_defs + in + let var_def = scope_def.scope_def_rules in + let var_typ = scope_def.scope_def_typ in + let is_cond = scope_def.scope_def_is_condition in + match Marked.unmark scope_def.Desugared.Ast.scope_def_io.io_input with + | OnlyInput when not (RuleName.Map.is_empty var_def) -> + (* If the variable is tagged as input, then it shall not be redefined. *) + Errors.raise_multispanned_error + ((Some "Incriminated variable:", Marked.get_mark (ScopeVar.get_info var)) + :: List.map + (fun (rule, _) -> + ( Some "Incriminated variable definition:", + Marked.get_mark (RuleName.get_info rule) )) + (RuleName.Map.bindings var_def)) + "It is impossible to give a definition to a scope variable tagged as \ + input." + | OnlyInput -> [] + (* we do not provide any definition for an input-only variable *) + | _ -> + let expr_def = + translate_def ctx + (Desugared.Ast.ScopeDef.Var (var, state)) + var_def var_typ scope_def.Desugared.Ast.scope_def_io ~is_cond + ~is_subscope_var:false + in + let scope_var = + match ScopeVar.Map.find var ctx.scope_var_mapping, state with + | WholeVar v, None -> v + | States states, Some state -> List.assoc state states + | _ -> failwith "should not happen" + in + [ + Ast.Definition + ( ( ScopelangScopeVar + (scope_var, Marked.get_mark (ScopeVar.get_info scope_var)), + Marked.get_mark (ScopeVar.get_info scope_var) ), + var_typ, + scope_def.Desugared.Ast.scope_def_io, + Expr.unbox expr_def ); + ]) + | Desugared.Dependency.Vertex.SubScope sub_scope_index -> + (* Before calling the sub_scope, we need to include all the re-definitions + of subscope parameters*) + let sub_scope = + SubScopeName.Map.find sub_scope_index scope.scope_sub_scopes + in + let sub_scope_vars_redefs_candidates = + Desugared.Ast.ScopeDefMap.filter + (fun def_key scope_def -> + match def_key with + | Desugared.Ast.ScopeDef.Var _ -> false + | Desugared.Ast.ScopeDef.SubScopeVar (sub_scope_index', _, _) -> + sub_scope_index = sub_scope_index' + (* We exclude subscope variables that have 0 re-definitions and are + not visible in the input of the subscope *) + && not + ((match + Marked.unmark scope_def.Desugared.Ast.scope_def_io.io_input + with + | Desugared.Ast.NoInput -> true + | _ -> false) + && RuleName.Map.is_empty scope_def.scope_def_rules)) + scope.scope_defs + in + let sub_scope_vars_redefs = + Desugared.Ast.ScopeDefMap.mapi + (fun def_key scope_def -> + let def = scope_def.Desugared.Ast.scope_def_rules in + let def_typ = scope_def.scope_def_typ in + let is_cond = scope_def.scope_def_is_condition in + match def_key with + | Desugared.Ast.ScopeDef.Var _ -> assert false (* should not happen *) + | Desugared.Ast.ScopeDef.SubScopeVar (sscope, sub_scope_var, pos) -> + (* This definition redefines a variable of the correct subscope. But + we have to check that this redefinition is allowed with respect + to the io parameters of that subscope variable. *) + (match + Marked.unmark scope_def.Desugared.Ast.scope_def_io.io_input + with + | Desugared.Ast.NoInput -> + Errors.raise_multispanned_error + (( Some "Incriminated subscope:", + Marked.get_mark (SubScopeName.get_info sscope) ) + :: ( Some "Incriminated variable:", + Marked.get_mark (ScopeVar.get_info sub_scope_var) ) + :: List.map + (fun (rule, _) -> + ( Some "Incriminated subscope variable definition:", + Marked.get_mark (RuleName.get_info rule) )) + (RuleName.Map.bindings def)) + "It is impossible to give a definition to a subscope variable \ + not tagged as input or context." + | OnlyInput when RuleName.Map.is_empty def && not is_cond -> + (* If the subscope variable is tagged as input, then it shall be + defined. *) + Errors.raise_multispanned_error + [ + ( Some "Incriminated subscope:", + Marked.get_mark (SubScopeName.get_info sscope) ); + Some "Incriminated variable:", pos; + ] + "This subscope variable is a mandatory input but no definition \ + was provided." + | _ -> ()); + (* Now that all is good, we can proceed with translating this + redefinition to a proper Scopelang term. *) + let expr_def = + translate_def ctx def_key def def_typ + scope_def.Desugared.Ast.scope_def_io ~is_cond + ~is_subscope_var:true + in + let subscop_real_name = + SubScopeName.Map.find sub_scope_index scope.scope_sub_scopes + in + let var_pos = Desugared.Ast.ScopeDef.get_position def_key in + Ast.Definition + ( ( SubScopeVar + ( subscop_real_name, + (sub_scope_index, var_pos), + match + ScopeVar.Map.find sub_scope_var ctx.scope_var_mapping + with + | WholeVar v -> v, var_pos + | States states -> + (* When defining a sub-scope variable, we always define + its first state in the sub-scope. *) + snd (List.hd states), var_pos ), + var_pos ), + def_typ, + scope_def.Desugared.Ast.scope_def_io, + Expr.unbox expr_def )) + sub_scope_vars_redefs_candidates + in + let sub_scope_vars_redefs = + List.map snd (Desugared.Ast.ScopeDefMap.bindings sub_scope_vars_redefs) + in + sub_scope_vars_redefs + @ [ + Ast.Call + ( sub_scope, + sub_scope_index, + Untyped + { pos = Marked.get_mark (SubScopeName.get_info sub_scope_index) } + ); + ] + +(** Translates a scope *) +let translate_scope (ctx : ctx) (scope : Desugared.Ast.scope) : + untyped Ast.scope_decl = + let scope_dependencies = + Desugared.Dependency.build_scope_dependencies scope + in + Desugared.Dependency.check_for_cycle scope scope_dependencies; + let scope_ordering = + Desugared.Dependency.correct_computation_ordering scope_dependencies + in + let scope_decl_rules = + List.flatten (List.map (translate_rule ctx scope) scope_ordering) + in + (* Then, after having computed all the scopes variables, we add the + assertions. TODO: the assertions should be interleaved with the + definitions! *) + let scope_decl_rules = + scope_decl_rules + @ List.map + (fun e -> + let scope_e = translate_expr ctx (Expr.unbox e) in + Ast.Assertion (Expr.unbox scope_e)) + scope.Desugared.Ast.scope_assertions + in + let scope_sig = + ScopeVar.Map.fold + (fun var (states : Desugared.Ast.var_or_states) acc -> + match states with + | WholeVar -> + let scope_def = + Desugared.Ast.ScopeDefMap.find + (Desugared.Ast.ScopeDef.Var (var, None)) + scope.scope_defs + in + let typ = scope_def.scope_def_typ in + ScopeVar.Map.add + (match ScopeVar.Map.find var ctx.scope_var_mapping with + | WholeVar v -> v + | States _ -> failwith "should not happen") + (typ, scope_def.scope_def_io) + acc + | States states -> + (* What happens in the case of variables with multiple states is + interesting. We need to create as many Var entries in the scope + signature as there are states. *) + List.fold_left + (fun acc (state : StateName.t) -> + let scope_def = + Desugared.Ast.ScopeDefMap.find + (Desugared.Ast.ScopeDef.Var (var, Some state)) + scope.scope_defs + in + ScopeVar.Map.add + (match ScopeVar.Map.find var ctx.scope_var_mapping with + | WholeVar _ -> failwith "should not happen" + | States states' -> List.assoc state states') + (scope_def.scope_def_typ, scope_def.scope_def_io) + acc) + acc states) + scope.scope_vars ScopeVar.Map.empty + in + let pos = Marked.get_mark (ScopeName.get_info scope.scope_uid) in + { + Ast.scope_decl_name = scope.scope_uid; + Ast.scope_decl_rules; + Ast.scope_sig; + Ast.scope_mark = Untyped { pos }; + } + +(** {1 API} *) + +let translate_program (pgrm : Desugared.Ast.program) : untyped Ast.program = + (* First we give mappings to all the locations between Desugared and This + involves creating a new Scopelang scope variable for every state of a + Desugared variable. *) + let ctx = + (* Todo: since we rename all scope vars at this point, it would be better to + have different types for Desugared.ScopeVar.t and Scopelang.ScopeVar.t *) + ScopeName.Map.fold + (fun _scope scope_decl ctx -> + ScopeVar.Map.fold + (fun scope_var (states : Desugared.Ast.var_or_states) ctx -> + let var_name, var_pos = ScopeVar.get_info scope_var in + let new_var = + match states with + | Desugared.Ast.WholeVar -> + WholeVar (ScopeVar.fresh (var_name, var_pos)) + | States states -> + let var_prefix = var_name ^ "_" in + let state_var state = + ScopeVar.fresh + (Marked.map_under_mark (( ^ ) var_prefix) + (StateName.get_info state)) + in + States (List.map (fun state -> state, state_var state) states) + in + { + ctx with + scope_var_mapping = + ScopeVar.Map.add scope_var new_var ctx.scope_var_mapping; + }) + scope_decl.Desugared.Ast.scope_vars ctx) + pgrm.Desugared.Ast.program_scopes + { + scope_var_mapping = ScopeVar.Map.empty; + var_mapping = Var.Map.empty; + decl_ctx = pgrm.program_ctx; + } + in + let ctx_scopes = + ScopeName.Map.map + (fun out_str -> + let out_struct_fields = + ScopeVar.Map.fold + (fun var fld out_map -> + let var' = + match ScopeVar.Map.find var ctx.scope_var_mapping with + | WholeVar v -> v + | States l -> snd (List.hd (List.rev l)) + in + ScopeVar.Map.add var' fld out_map) + out_str.out_struct_fields ScopeVar.Map.empty + in + { out_str with out_struct_fields }) + pgrm.Desugared.Ast.program_ctx.ctx_scopes + in + { + Ast.program_scopes = + ScopeName.Map.map (translate_scope ctx) pgrm.program_scopes; + program_ctx = { pgrm.program_ctx with ctx_scopes }; + } diff --git a/compiler/desugared/desugared_to_scope.mli b/compiler/scopelang/from_desugared.mli similarity index 91% rename from compiler/desugared/desugared_to_scope.mli rename to compiler/scopelang/from_desugared.mli index b5314e7c..8f2dae8c 100644 --- a/compiler/desugared/desugared_to_scope.mli +++ b/compiler/scopelang/from_desugared.mli @@ -16,4 +16,4 @@ (** Translation from {!module: Desugared.Ast} to {!module: Scopelang.Ast} *) -val translate_program : Ast.program -> Shared_ast.untyped Scopelang.Ast.program +val translate_program : Desugared.Ast.program -> Shared_ast.untyped Ast.program diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index deb7f4e4..649ef551 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast open Ast @@ -22,21 +22,22 @@ let struc ctx (fmt : Format.formatter) (name : StructName.t) - (fields : (StructFieldName.t * typ) list) : unit = + (fields : typ StructField.Map.t) : unit = Format.fprintf fmt "%a %a %a %a@\n@[ %a@]@\n%a" Print.keyword "struct" StructName.format_t name Print.punctuation "=" Print.punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (field_name, typ) -> - Format.fprintf fmt "%a%a %a" StructFieldName.format_t field_name + Format.fprintf fmt "%a%a %a" StructField.format_t field_name Print.punctuation ":" (Print.typ ctx) typ)) - fields Print.punctuation "}" + (StructField.Map.bindings fields) + Print.punctuation "}" let enum ctx (fmt : Format.formatter) (name : EnumName.t) - (cases : (EnumConstructor.t * typ) list) : unit = + (cases : typ EnumConstructor.Map.t) : unit = Format.fprintf fmt "%a %a %a @\n@[ %a@]" Print.keyword "enum" EnumName.format_t name Print.punctuation "=" (Format.pp_print_list @@ -45,7 +46,7 @@ let enum Format.fprintf fmt "%a %a%a %a" Print.punctuation "|" EnumConstructor.format_t field_name Print.punctuation ":" (Print.typ ctx) typ)) - cases + (EnumConstructor.Map.bindings cases) let scope ?(debug = false) ctx fmt (name, decl) = Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@]@\n@[ %a@]" @@ -55,16 +56,16 @@ let scope ?(debug = false) ctx fmt (name, decl) = Format.fprintf fmt "%a%a%a %a%a%a%a%a" Print.punctuation "(" ScopeVar.format_t scope_var Print.punctuation ":" (Print.typ ctx) typ Print.punctuation "|" Print.keyword - (match Marked.unmark vis.io_input with + (match Marked.unmark vis.Desugared.Ast.io_input with | NoInput -> "internal" | OnlyInput -> "input" | Reentrant -> "context") - (if Marked.unmark vis.io_output then fun fmt () -> + (if Marked.unmark vis.Desugared.Ast.io_output then fun fmt () -> Format.fprintf fmt "%a@,%a" Print.punctuation "|" Print.keyword "output" else fun fmt () -> Format.fprintf fmt "@<0>") () Print.punctuation ")")) - (ScopeVarMap.bindings decl.scope_sig) + (ScopeVar.Map.bindings decl.scope_sig) Print.punctuation "=" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " Print.punctuation ";") @@ -80,11 +81,11 @@ let scope ?(debug = false) ctx fmt (name, decl) = | ScopelangScopeVar v -> ( match Marked.unmark - (snd (ScopeVarMap.find (Marked.unmark v) decl.scope_sig)) + (snd (ScopeVar.Map.find (Marked.unmark v) decl.scope_sig)) .io_input with | Reentrant -> - Format.fprintf fmt "%a@ %a" Print.operator + Format.fprintf fmt "%a@ %a" Print.op_style "reentrant or by default" (Print.expr ~debug ctx) e | _ -> Format.fprintf fmt "%a" (Print.expr ~debug ctx) e)) e @@ -105,16 +106,16 @@ let program ?(debug : bool = false) (fmt : Format.formatter) (p : 'm program) : Format.pp_print_cut fmt () in Format.pp_open_vbox fmt 0; - StructMap.iter + StructName.Map.iter (fun n s -> struc ctx fmt n s; pp_sep fmt ()) ctx.ctx_structs; - EnumMap.iter + EnumName.Map.iter (fun n e -> enum ctx fmt n e; pp_sep fmt ()) ctx.ctx_enums; Format.pp_print_list ~pp_sep (scope ~debug ctx) fmt - (ScopeMap.bindings p.program_scopes); + (ScopeName.Map.bindings p.program_scopes); Format.pp_close_box fmt () diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index d904456a..ff5b5020 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -20,59 +20,47 @@ (* Doesn't define values, so OK to have without an mli *) -open Utils +open Catala_utils module Runtime = Runtime_ocaml.Runtime +module ScopeName = Uid.Gen () +module StructName = Uid.Gen () +module StructField = Uid.Gen () +module EnumName = Uid.Gen () +module EnumConstructor = Uid.Gen () -module ScopeName : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () +(** Only used by surface *) -module ScopeSet : Set.S with type elt = ScopeName.t = Set.Make (ScopeName) -module ScopeMap : Map.S with type key = ScopeName.t = Map.Make (ScopeName) +module RuleName = Uid.Gen () +module LabelName = Uid.Gen () -module StructName : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () +(** Used for unresolved structs/maps in desugared *) -module StructFieldName : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - -module StructMap : Map.S with type key = StructName.t = Map.Make (StructName) - -module EnumName : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - -module EnumConstructor : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - -module EnumMap : Map.S with type key = EnumName.t = Map.Make (EnumName) +module IdentName = String (** Only used by desugared/scopelang *) -module ScopeVar : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - -module ScopeVarSet : Set.S with type elt = ScopeVar.t = Set.Make (ScopeVar) -module ScopeVarMap : Map.S with type key = ScopeVar.t = Map.Make (ScopeVar) - -module SubScopeName : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - -module SubScopeNameSet : Set.S with type elt = SubScopeName.t = - Set.Make (SubScopeName) - -module SubScopeMap : Map.S with type key = SubScopeName.t = - Map.Make (SubScopeName) - -module StructFieldMap : Map.S with type key = StructFieldName.t = - Map.Make (StructFieldName) - -module EnumConstructorMap : Map.S with type key = EnumConstructor.t = - Map.Make (EnumConstructor) - -module StateName : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () +module ScopeVar = Uid.Gen () +module SubScopeName = Uid.Gen () +module StateName = Uid.Gen () (** {1 Abstract syntax tree} *) +(** Define a common base type for the expressions in most passes of the compiler *) + +type desugared = [ `Desugared ] +(** {2 Phantom types used to select relevant cases on the generic AST} + + we instantiate them with a polymorphic variant to take advantage of + sub-typing. The values aren't actually used. *) + +type scopelang = [ `Scopelang ] +type dcalc = [ `Dcalc ] +type lcalc = [ `Lcalc ] + +type 'a any = [< desugared | scopelang | dcalc | lcalc ] as 'a +(** ['a any] is 'a, but adds the constraint that it should be restricted to + valid AST kinds *) + (** {2 Types} *) type typ_lit = TBool | TUnit | TInt | TRat | TMoney | TDate | TDuration @@ -94,33 +82,6 @@ and naked_typ = type date = Runtime.date type duration = Runtime.duration -type op_kind = - | KInt - | KRat - | KMoney - | KDate - | KDuration (** All ops don't have a KDate and KDuration. *) - -type ternop = Fold - -type binop = - | And - | Or - | Xor - | Add of op_kind - | Sub of op_kind - | Mult of op_kind - | Div of op_kind - | Lt of op_kind - | Lte of op_kind - | Gt of op_kind - | Gte of op_kind - | Eq - | Neq - | Map - | Concat - | Filter - type log_entry = | VarDef of naked_typ (** During code generation, we need to know the type of the variable being @@ -129,35 +90,140 @@ type log_entry = | EndCall | PosRecordIfTrueBool -type unop = - | Not - | Minus of op_kind - | Log of log_entry * Uid.MarkedString.info list - | Length - | IntToRat - | MoneyToRat - | RatToMoney - | GetDay - | GetMonth - | GetYear - | FirstDayOfMonth - | LastDayOfMonth - | RoundMoney - | RoundDecimal +module Op = struct + (** Classification of operators on how they should be typed *) -type operator = Ternop of ternop | Binop of binop | Unop of unop + type monomorphic = + | Monomorphic (** Operands and return types of the operator are fixed *) + + type polymorphic = + | Polymorphic + (** The operator is truly polymorphic: it's the same runtime function + that may work on multiple types. We require that resolving the + argument types from right to left trivially resolves all type + variables declared in the operator type. *) + + type overloaded = + | Overloaded + (** The operator is ambiguous and requires the types of its arguments to + be known before it can be typed, using a pre-defined table *) + + type resolved = + | Resolved (** Explicit monomorphic versions of the overloaded operators *) + + (** Classification of operators. This could be inlined in the definition of + [t] but is more concise this way *) + type (_, _) kind = + | Monomorphic : ('a any, monomorphic) kind + | Polymorphic : ('a any, polymorphic) kind + | Overloaded : ([< desugared ], overloaded) kind + | Resolved : ([< scopelang | dcalc | lcalc ], resolved) kind + + type (_, _) t = + (* unary *) + (* * monomorphic *) + | Not : ('a any, monomorphic) t + | GetDay : ('a any, monomorphic) t + | GetMonth : ('a any, monomorphic) t + | GetYear : ('a any, monomorphic) t + | FirstDayOfMonth : ('a any, monomorphic) t + | LastDayOfMonth : ('a any, monomorphic) t + (* * polymorphic *) + | Length : ('a any, polymorphic) t + | Log : log_entry * Uid.MarkedString.info list -> ('a any, polymorphic) t + (* * overloaded *) + | Minus : (desugared, overloaded) t + | Minus_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Minus_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Minus_mon : ([< scopelang | dcalc | lcalc ], resolved) t + | Minus_dur : ([< scopelang | dcalc | lcalc ], resolved) t + | ToRat : (desugared, overloaded) t + | ToRat_int : ([< scopelang | dcalc | lcalc ], resolved) t + | ToRat_mon : ([< scopelang | dcalc | lcalc ], resolved) t + | ToMoney : (desugared, overloaded) t + | ToMoney_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Round : (desugared, overloaded) t + | Round_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Round_mon : ([< scopelang | dcalc | lcalc ], resolved) t + (* binary *) + (* * monomorphic *) + | And : ('a any, monomorphic) t + | Or : ('a any, monomorphic) t + | Xor : ('a any, monomorphic) t + (* * polymorphic *) + | Eq : ('a any, polymorphic) t + | Map : ('a any, polymorphic) t + | Concat : ('a any, polymorphic) t + | Filter : ('a any, polymorphic) t + | Reduce : ('a any, polymorphic) t + (* * overloaded *) + | Add : (desugared, overloaded) t + | Add_int_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Add_rat_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Add_mon_mon : ([< scopelang | dcalc | lcalc ], resolved) t + | Add_dat_dur : ([< scopelang | dcalc | lcalc ], resolved) t + | Add_dur_dur : ([< scopelang | dcalc | lcalc ], resolved) t + | Sub : (desugared, overloaded) t + | Sub_int_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Sub_rat_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Sub_mon_mon : ([< scopelang | dcalc | lcalc ], resolved) t + | Sub_dat_dat : ([< scopelang | dcalc | lcalc ], resolved) t + | Sub_dat_dur : ([< scopelang | dcalc | lcalc ], resolved) t + | Sub_dur_dur : ([< scopelang | dcalc | lcalc ], resolved) t + | Mult : (desugared, overloaded) t + | Mult_int_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Mult_rat_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Mult_mon_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Mult_dur_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Div : (desugared, overloaded) t + | Div_int_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Div_rat_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Div_mon_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Div_mon_mon : ([< scopelang | dcalc | lcalc ], resolved) t + | Lt : (desugared, overloaded) t + | Lt_int_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Lt_rat_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Lt_mon_mon : ([< scopelang | dcalc | lcalc ], resolved) t + | Lt_dat_dat : ([< scopelang | dcalc | lcalc ], resolved) t + | Lt_dur_dur : ([< scopelang | dcalc | lcalc ], resolved) t + | Lte : (desugared, overloaded) t + | Lte_int_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Lte_rat_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Lte_mon_mon : ([< scopelang | dcalc | lcalc ], resolved) t + | Lte_dat_dat : ([< scopelang | dcalc | lcalc ], resolved) t + | Lte_dur_dur : ([< scopelang | dcalc | lcalc ], resolved) t + | Gt : (desugared, overloaded) t + | Gt_int_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Gt_rat_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Gt_mon_mon : ([< scopelang | dcalc | lcalc ], resolved) t + | Gt_dat_dat : ([< scopelang | dcalc | lcalc ], resolved) t + | Gt_dur_dur : ([< scopelang | dcalc | lcalc ], resolved) t + | Gte : (desugared, overloaded) t + | Gte_int_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Gte_rat_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Gte_mon_mon : ([< scopelang | dcalc | lcalc ], resolved) t + | Gte_dat_dat : ([< scopelang | dcalc | lcalc ], resolved) t + | Gte_dur_dur : ([< scopelang | dcalc | lcalc ], resolved) t + (* Todo: Eq is not an overload at the moment, but it should be one. The + trick is that it needs generation of specific code for arrays, every + struct and enum: operators [Eq_structs of StructName.t], etc. *) + | Eq_int_int : ([< scopelang | dcalc | lcalc ], resolved) t + | Eq_rat_rat : ([< scopelang | dcalc | lcalc ], resolved) t + | Eq_mon_mon : ([< scopelang | dcalc | lcalc ], resolved) t + | Eq_dur_dur : ([< scopelang | dcalc | lcalc ], resolved) t + | Eq_dat_dat : ([< scopelang | dcalc | lcalc ], resolved) t + (* ternary *) + (* * polymorphic *) + | Fold : ('a any, polymorphic) t +end + +type ('a, 'k) operator = ('a any, 'k) Op.t type except = ConflictError | EmptyError | NoValueProvided | Crash (** {2 Generic expressions} *) (** Define a common base type for the expressions in most passes of the compiler *) -type desugared = [ `Desugared ] -type scopelang = [ `Scopelang ] -type dcalc = [ `Dcalc ] -type lcalc = [ `Lcalc ] -type 'a any = [< desugared | scopelang | dcalc | lcalc ] as 'a - (** Literals are the same throughout compilation except for the [LEmptyError] case which is eliminated midway through. *) type 'a glit = @@ -192,65 +258,98 @@ type ('a, 't) gexpr = (('a, 't) naked_gexpr, 't) Marked.t - To write a function that handles cases from different ASTs, explicit the type variables: [fun (type a) (x: a naked_gexpr) -> ...] - For recursive functions, you may need to additionally explicit the - generalisation of the variable: [let rec f: type a . a naked_gexpr -> ...] *) + generalisation of the variable: [let rec f: type a . a naked_gexpr -> ...] + - Always think of using the pre-defined map/fold functions in [Expr] rather + than completely defining your recursion manually. *) and ('a, 't) naked_gexpr = (* Constructors common to all ASTs *) | ELit : 'a glit -> ('a any, 't) naked_gexpr - | EApp : ('a, 't) gexpr * ('a, 't) gexpr list -> ('a any, 't) naked_gexpr - | EOp : operator -> ('a any, 't) naked_gexpr + | EApp : { + f : ('a, 't) gexpr; + args : ('a, 't) gexpr list; + } + -> ('a any, 't) naked_gexpr + | EOp : { op : ('a, _) operator; tys : typ list } -> ('a any, 't) naked_gexpr | EArray : ('a, 't) gexpr list -> ('a any, 't) naked_gexpr | EVar : ('a, 't) naked_gexpr Bindlib.var -> ('a any, 't) naked_gexpr - | EAbs : - (('a, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder * typ list + | EAbs : { + binder : (('a, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder; + tys : typ list; + } -> ('a any, 't) naked_gexpr - | EIfThenElse : - ('a, 't) gexpr * ('a, 't) gexpr * ('a, 't) gexpr + | EIfThenElse : { + cond : ('a, 't) gexpr; + etrue : ('a, 't) gexpr; + efalse : ('a, 't) gexpr; + } + -> ('a any, 't) naked_gexpr + | EStruct : { + name : StructName.t; + fields : ('a, 't) gexpr StructField.Map.t; + } + -> ('a any, 't) naked_gexpr + | EInj : { + name : EnumName.t; + e : ('a, 't) gexpr; + cons : EnumConstructor.t; + } + -> ('a any, 't) naked_gexpr + | EMatch : { + name : EnumName.t; + e : ('a, 't) gexpr; + cases : ('a, 't) gexpr EnumConstructor.Map.t; + } -> ('a any, 't) naked_gexpr (* Early stages *) | ELocation : 'a glocation -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr - | EStruct : - StructName.t * ('a, 't) gexpr StructFieldMap.t - -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr - | EStructAccess : - ('a, 't) gexpr * StructFieldName.t * StructName.t - -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr - | EEnumInj : - ('a, 't) gexpr * EnumConstructor.t * EnumName.t - -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr - | EMatchS : - ('a, 't) gexpr * EnumName.t * ('a, 't) gexpr EnumConstructorMap.t - -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr - | EScopeCall : - ScopeName.t * ('a, 't) gexpr ScopeVarMap.t + | EScopeCall : { + scope : ScopeName.t; + args : ('a, 't) gexpr ScopeVar.Map.t; + } -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr + | EDStructAccess : { + name_opt : StructName.t option; + e : ('a, 't) gexpr; + field : IdentName.t; + } + -> ((desugared as 'a), 't) naked_gexpr + (** [desugared] has ambiguous struct fields *) + | EStructAccess : { + name : StructName.t; + e : ('a, 't) gexpr; + field : StructField.t; + } + -> (([< scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr + (** Resolved struct/enums, after [desugared] *) (* Lambda-like *) - | ETuple : - ('a, 't) gexpr list * StructName.t option - -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr - | ETupleAccess : - ('a, 't) gexpr * int * StructName.t option * typ list - -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr - | EInj : - ('a, 't) gexpr * int * EnumName.t * typ list - -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr - | EMatch : - ('a, 't) gexpr * ('a, 't) gexpr list * EnumName.t - -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | EAssert : ('a, 't) gexpr -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr (* Default terms *) - | EDefault : - ('a, 't) gexpr list * ('a, 't) gexpr * ('a, 't) gexpr + | EDefault : { + excepts : ('a, 't) gexpr list; + just : ('a, 't) gexpr; + cons : ('a, 't) gexpr; + } -> (([< desugared | scopelang | dcalc ] as 'a), 't) naked_gexpr - | ErrorOnEmpty : + | EErrorOnEmpty : ('a, 't) gexpr -> (([< desugared | scopelang | dcalc ] as 'a), 't) naked_gexpr (* Lambda calculus with exceptions *) + | ETuple : ('a, 't) gexpr list -> ((lcalc as 'a), 't) naked_gexpr + | ETupleAccess : { + e : ('a, 't) gexpr; + index : int; + size : int; + } + -> ((lcalc as 'a), 't) naked_gexpr | ERaise : except -> ((lcalc as 'a), 't) naked_gexpr - | ECatch : - ('a, 't) gexpr * except * ('a, 't) gexpr + | ECatch : { + body : ('a, 't) gexpr; + exn : except; + handler : ('a, 't) gexpr; + } -> ((lcalc as 'a), 't) naked_gexpr type ('a, 't) boxed_gexpr = (('a, 't) naked_gexpr Bindlib.box, 't) Marked.t @@ -276,9 +375,9 @@ type typed = { pos : Pos.t; ty : typ } (** The generic type of AST markings. Using a GADT allows functions to be polymorphic in the marking, but still do transformations on types when - appropriate. Expected to fill the ['t] parameter of [naked_gexpr] and - [gexpr] (a ['t] annotation different from this type is used in the middle of - the typing processing, but all visible ASTs should otherwise use this. *) + appropriate. Expected to fill the ['t] parameter of [gexpr] and [gexpr] (a + ['t] annotation different from this type is used in the middle of the typing + processing, but all visible ASTs should otherwise use this. *) type _ mark = Untyped : untyped -> untyped mark | Typed : typed -> typed mark (** Useful for errors and printing, for example *) @@ -287,11 +386,10 @@ type any_expr = AnyExpr : (_, _ mark) gexpr -> any_expr (** {2 Higher-level program structure} *) (** Constructs scopes and programs on top of expressions. The ['e] type - parameter throughout is expected to match instances of the [naked_gexpr] - type defined above. Markings are constrained to the [mark] GADT defined - above. Note that this structure is at the moment only relevant for [dcalc] - and [lcalc], as [scopelang] has its own scope structure, as the name - implies. *) + parameter throughout is expected to match instances of the [gexpr] type + defined above. Markings are constrained to the [mark] GADT defined above. + Note that this structure is at the moment only relevant for [dcalc] and + [lcalc], as [scopelang] has its own scope structure, as the name implies. *) (** This kind annotation signals that the let-binding respects a structural invariant. These invariants concern the shape of the expression in the @@ -350,14 +448,20 @@ and 'e scopes = | ScopeDef of 'e scope_def constraint 'e = (_ any, _ mark) gexpr -type struct_ctx = (StructFieldName.t * typ) list StructMap.t -type enum_ctx = (EnumConstructor.t * typ) list EnumMap.t +type struct_ctx = typ StructField.Map.t StructName.Map.t +type enum_ctx = typ EnumConstructor.Map.t EnumName.Map.t + +type scope_out_struct = { + out_struct_name : StructName.t; + out_struct_fields : StructField.t ScopeVar.Map.t; +} type decl_ctx = { ctx_enums : enum_ctx; ctx_structs : struct_ctx; - ctx_scopes : StructName.t ScopeMap.t; - (** The output structure type of every scope *) + ctx_struct_fields : StructField.t StructName.Map.t IdentName.Map.t; + (** needed for disambiguation (desugared -> scope) *) + ctx_scopes : scope_out_struct ScopeName.Map.t; } type 'e program = { decl_ctx : decl_ctx; scopes : 'e scopes } diff --git a/compiler/shared_ast/dune b/compiler/shared_ast/dune index 64a1668b..03ffd8de 100644 --- a/compiler/shared_ast/dune +++ b/compiler/shared_ast/dune @@ -3,4 +3,4 @@ (public_name catala.shared_ast) (flags (:standard -short-paths)) - (libraries bindlib unionFind utils catala.runtime_ocaml)) + (libraries bindlib unionFind catala_utils catala.runtime_ocaml)) diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 8532843b..5c41b096 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -15,7 +15,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Definitions (** Functions handling the types of [shared_ast] *) @@ -57,15 +57,15 @@ module Box = struct fun em -> B.box_apply (fun e -> Marked.mark (Marked.get_mark em) e) (Marked.unmark em) - module LiftStruct = Bindlib.Lift (StructFieldMap) + module LiftStruct = Bindlib.Lift (StructField.Map) let lift_struct = LiftStruct.lift_box - module LiftEnum = Bindlib.Lift (EnumConstructorMap) + module LiftEnum = Bindlib.Lift (EnumConstructor.Map) let lift_enum = LiftEnum.lift_box - module LiftScopeVars = Bindlib.Lift (ScopeVarMap) + module LiftScopeVars = Bindlib.Lift (ScopeVar.Map) let lift_scope_vars = LiftScopeVars.lift_box end @@ -76,61 +76,64 @@ let subst binder vars = Bindlib.msubst binder (Array.of_list (List.map Marked.unmark vars)) let evar v mark = Marked.mark mark (Bindlib.box_var v) -let etuple args s = Box.appn args @@ fun args -> ETuple (args, s) +let etuple args = Box.appn args @@ fun args -> ETuple args -let etupleaccess e1 i s typs = - Box.app1 e1 @@ fun e1 -> ETupleAccess (e1, i, s, typs) - -let einj e1 i e_name typs = Box.app1 e1 @@ fun e1 -> EInj (e1, i, e_name, typs) - -let ematch arg arms e_name = - Box.app1n arg arms @@ fun arg arms -> EMatch (arg, arms, e_name) +let etupleaccess e index size = + assert (index < size); + Box.app1 e @@ fun e -> ETupleAccess { e; index; size } let earray args = Box.appn args @@ fun args -> EArray args let elit l mark = Marked.mark mark (Bindlib.box (ELit l)) -let eabs binder typs mark = - Bindlib.box_apply (fun binder -> EAbs (binder, typs)) binder, mark +let eabs binder tys mark = + Bindlib.box_apply (fun binder -> EAbs { binder; tys }) binder, mark -let eapp e1 args = Box.app1n e1 args @@ fun e1 args -> EApp (e1, args) +let eapp f args = Box.app1n f args @@ fun f args -> EApp { f; args } let eassert e1 = Box.app1 e1 @@ fun e1 -> EAssert e1 -let eop op = Box.app0 @@ EOp op +let eop op tys = Box.app0 @@ EOp { op; tys } let edefault excepts just cons = Box.app2n just cons excepts - @@ fun just cons excepts -> EDefault (excepts, just, cons) + @@ fun just cons excepts -> EDefault { excepts; just; cons } -let eifthenelse e1 e2 e3 = - Box.app3 e1 e2 e3 @@ fun e1 e2 e3 -> EIfThenElse (e1, e2, e3) +let eifthenelse cond etrue efalse = + Box.app3 cond etrue efalse + @@ fun cond etrue efalse -> EIfThenElse { cond; etrue; efalse } -let eerroronempty e1 = Box.app1 e1 @@ fun e1 -> ErrorOnEmpty e1 +let eerroronempty e1 = Box.app1 e1 @@ fun e1 -> EErrorOnEmpty e1 let eraise e1 = Box.app0 @@ ERaise e1 -let ecatch e1 exn e2 = Box.app2 e1 e2 @@ fun e1 e2 -> ECatch (e1, exn, e2) + +let ecatch body exn handler = + Box.app2 body handler @@ fun body handler -> ECatch { body; exn; handler } + let elocation loc = Box.app0 @@ ELocation loc -let estruct name (fields : ('a, 't) boxed_gexpr StructFieldMap.t) mark = +let estruct name (fields : ('a, 't) boxed_gexpr StructField.Map.t) mark = Marked.mark mark @@ Bindlib.box_apply - (fun fields -> EStruct (name, fields)) - (Box.lift_struct (StructFieldMap.map Box.lift fields)) + (fun fields -> EStruct { name; fields }) + (Box.lift_struct (StructField.Map.map Box.lift fields)) -let estructaccess e1 field struc = - Box.app1 e1 @@ fun e1 -> EStructAccess (e1, field, struc) +let edstructaccess e field name_opt = + Box.app1 e @@ fun e -> EDStructAccess { name_opt; e; field } -let eenuminj e1 cons enum = Box.app1 e1 @@ fun e1 -> EEnumInj (e1, cons, enum) +let estructaccess e field name = + Box.app1 e @@ fun e -> EStructAccess { name; e; field } -let ematchs e1 enum cases mark = +let einj e cons name = Box.app1 e @@ fun e -> EInj { name; e; cons } + +let ematch e name cases mark = Marked.mark mark @@ Bindlib.box_apply2 - (fun e1 cases -> EMatchS (e1, enum, cases)) - (Box.lift e1) - (Box.lift_enum (EnumConstructorMap.map Box.lift cases)) + (fun e cases -> EMatch { name; e; cases }) + (Box.lift e) + (Box.lift_enum (EnumConstructor.Map.map Box.lift cases)) -let escopecall scope_name fields mark = +let escopecall scope args mark = Marked.mark mark @@ Bindlib.box_apply - (fun fields -> EScopeCall (scope_name, fields)) - (Box.lift_scope_vars (ScopeVarMap.map Box.lift fields)) + (fun args -> EScopeCall { scope; args }) + (Box.lift_scope_vars (ScopeVar.Map.map Box.lift args)) (* - Manipulation of marks - *) @@ -203,49 +206,46 @@ let maybe_ty (type m) ?(typ = TAny) (m : m mark) : typ = (* shallow map *) let map (type a) - (ctx : 'ctx) - ~(f : 'ctx -> (a, 'm1) gexpr -> (a, 'm2) boxed_gexpr) + ~(f : (a, 'm1) gexpr -> (a, 'm2) boxed_gexpr) (e : ((a, 'm1) naked_gexpr, 'm2) Marked.t) : (a, 'm2) boxed_gexpr = let m = Marked.get_mark e in match Marked.unmark e with | ELit l -> elit l m - | EApp (e1, args) -> eapp (f ctx e1) (List.map (f ctx) args) m - | EOp op -> eop op m - | EArray args -> earray (List.map (f ctx) args) m + | EApp { f = e1; args } -> eapp (f e1) (List.map f args) m + | EOp { op; tys } -> eop op tys m + | EArray args -> earray (List.map f args) m | EVar v -> evar (Var.translate v) m - | EAbs (binder, typs) -> + | EAbs { binder; tys } -> let vars, body = Bindlib.unmbind binder in - let body = f ctx body in + let body = f body in let binder = bind (Array.map Var.translate vars) body in - eabs binder typs m - | EIfThenElse (e1, e2, e3) -> - eifthenelse ((f ctx) e1) ((f ctx) e2) ((f ctx) e3) m - | ETuple (args, s) -> etuple (List.map (f ctx) args) s m - | ETupleAccess (e1, n, s_name, typs) -> - etupleaccess ((f ctx) e1) n s_name typs m - | EInj (e1, i, e_name, typs) -> einj ((f ctx) e1) i e_name typs m - | EMatch (arg, arms, e_name) -> - ematch ((f ctx) arg) (List.map (f ctx) arms) e_name m - | EAssert e1 -> eassert ((f ctx) e1) m - | EDefault (excepts, just, cons) -> - edefault (List.map (f ctx) excepts) ((f ctx) just) ((f ctx) cons) m - | ErrorOnEmpty e1 -> eerroronempty ((f ctx) e1) m - | ECatch (e1, exn, e2) -> ecatch (f ctx e1) exn (f ctx e2) m + eabs binder tys m + | EIfThenElse { cond; etrue; efalse } -> + eifthenelse (f cond) (f etrue) (f efalse) m + | ETuple args -> etuple (List.map f args) m + | ETupleAccess { e; index; size } -> etupleaccess (f e) index size m + | EInj { e; name; cons } -> einj (f e) cons name m + | EAssert e1 -> eassert (f e1) m + | EDefault { excepts; just; cons } -> + edefault (List.map f excepts) (f just) (f cons) m + | EErrorOnEmpty e1 -> eerroronempty (f e1) m + | ECatch { body; exn; handler } -> ecatch (f body) exn (f handler) m | ERaise exn -> eraise exn m | ELocation loc -> elocation loc m - | EStruct (name, fields) -> - let fields = StructFieldMap.map (f ctx) fields in + | EStruct { name; fields } -> + let fields = StructField.Map.map f fields in estruct name fields m - | EStructAccess (e1, field, struc) -> estructaccess (f ctx e1) field struc m - | EEnumInj (e1, cons, enum) -> eenuminj (f ctx e1) cons enum m - | EMatchS (e1, enum, cases) -> - let cases = EnumConstructorMap.map (f ctx) cases in - ematchs (f ctx e1) enum cases m - | EScopeCall (scope_name, fields) -> - let fields = ScopeVarMap.map (f ctx) fields in - escopecall scope_name fields m + | EDStructAccess { e; field; name_opt } -> + edstructaccess (f e) field name_opt m + | EStructAccess { e; field; name } -> estructaccess (f e) field name m + | EMatch { e; name; cases } -> + let cases = EnumConstructor.Map.map f cases in + ematch (f e) name cases m + | EScopeCall { scope; args } -> + let fields = ScopeVar.Map.map f args in + escopecall scope fields m -let rec map_top_down ~f e = map () ~f:(fun () -> map_top_down ~f) (f e) +let rec map_top_down ~f e = map ~f:(map_top_down ~f) (f e) let map_marks ~f e = map_top_down ~f:(fun e -> Marked.(mark (f (get_mark e)) (unmark e))) e @@ -260,31 +260,130 @@ let shallow_fold let lfold x acc = List.fold_left (fun acc x -> f x acc) acc x in match Marked.unmark e with | ELit _ | EOp _ | EVar _ | ERaise _ | ELocation _ -> acc - | EApp (e1, args) -> acc |> f e1 |> lfold args + | EApp { f = e; args } -> acc |> f e |> lfold args | EArray args -> acc |> lfold args | EAbs _ -> acc - | EIfThenElse (e1, e2, e3) -> acc |> f e1 |> f e2 |> f e3 - | ETuple (args, _) -> acc |> lfold args - | ETupleAccess (e1, _, _, _) -> acc |> f e1 - | EInj (e1, _, _, _) -> acc |> f e1 - | EMatch (arg, arms, _) -> acc |> f arg |> lfold arms - | EAssert e1 -> acc |> f e1 - | EDefault (excepts, just, cons) -> acc |> lfold excepts |> f just |> f cons - | ErrorOnEmpty e1 -> acc |> f e1 - | ECatch (e1, _, e2) -> acc |> f e1 |> f e2 - | EStruct (_, fields) -> acc |> StructFieldMap.fold (fun _ -> f) fields - | EStructAccess (e1, _, _) -> acc |> f e1 - | EEnumInj (e1, _, _) -> acc |> f e1 - | EMatchS (e1, _, cases) -> - acc |> f e1 |> EnumConstructorMap.fold (fun _ -> f) cases - | EScopeCall (_, fields) -> acc |> ScopeVarMap.fold (fun _ -> f) fields + | EIfThenElse { cond; etrue; efalse } -> acc |> f cond |> f etrue |> f efalse + | ETuple args -> acc |> lfold args + | ETupleAccess { e; _ } -> acc |> f e + | EInj { e; _ } -> acc |> f e + | EAssert e -> acc |> f e + | EDefault { excepts; just; cons } -> acc |> lfold excepts |> f just |> f cons + | EErrorOnEmpty e -> acc |> f e + | ECatch { body; handler; _ } -> acc |> f body |> f handler + | EStruct { fields; _ } -> acc |> StructField.Map.fold (fun _ -> f) fields + | EDStructAccess { e; _ } -> acc |> f e + | EStructAccess { e; _ } -> acc |> f e + | EMatch { e; cases; _ } -> + acc |> f e |> EnumConstructor.Map.fold (fun _ -> f) cases + | EScopeCall { args; _ } -> acc |> ScopeVar.Map.fold (fun _ -> f) args + +(* Like [map], but also allows to gather a result bottom-up. *) +let map_gather + (type a) + ~(acc : 'acc) + ~(join : 'acc -> 'acc -> 'acc) + ~(f : (a, 'm1) gexpr -> 'acc * (a, 'm2) boxed_gexpr) + (e : ((a, 'm1) naked_gexpr, 'm2) Marked.t) : 'acc * (a, 'm2) boxed_gexpr = + let m = Marked.get_mark e in + let lfoldmap es = + let acc, r_es = + List.fold_left + (fun (acc, es) e -> + let acc1, e = f e in + join acc acc1, e :: es) + (acc, []) es + in + acc, List.rev r_es + in + match Marked.unmark e with + | ELit l -> acc, elit l m + | EApp { f = e1; args } -> + let acc1, f = f e1 in + let acc2, args = lfoldmap args in + join acc1 acc2, eapp f args m + | EOp { op; tys } -> acc, eop op tys m + | EArray args -> + let acc, args = lfoldmap args in + acc, earray args m + | EVar v -> acc, evar (Var.translate v) m + | EAbs { binder; tys } -> + let vars, body = Bindlib.unmbind binder in + let acc, body = f body in + let binder = bind (Array.map Var.translate vars) body in + acc, eabs binder tys m + | EIfThenElse { cond; etrue; efalse } -> + let acc1, cond = f cond in + let acc2, etrue = f etrue in + let acc3, efalse = f efalse in + join (join acc1 acc2) acc3, eifthenelse cond etrue efalse m + | ETuple args -> + let acc, args = lfoldmap args in + acc, etuple args m + | ETupleAccess { e; index; size } -> + let acc, e = f e in + acc, etupleaccess e index size m + | EInj { e; name; cons } -> + let acc, e = f e in + acc, einj e cons name m + | EAssert e -> + let acc, e = f e in + acc, eassert e m + | EDefault { excepts; just; cons } -> + let acc1, excepts = lfoldmap excepts in + let acc2, just = f just in + let acc3, cons = f cons in + join (join acc1 acc2) acc3, edefault excepts just cons m + | EErrorOnEmpty e -> + let acc, e = f e in + acc, eerroronempty e m + | ECatch { body; exn; handler } -> + let acc1, body = f body in + let acc2, handler = f handler in + join acc1 acc2, ecatch body exn handler m + | ERaise exn -> acc, eraise exn m + | ELocation loc -> acc, elocation loc m + | EStruct { name; fields } -> + let acc, fields = + StructField.Map.fold + (fun cons e (acc, fields) -> + let acc1, e = f e in + join acc acc1, StructField.Map.add cons e fields) + fields + (acc, StructField.Map.empty) + in + acc, estruct name fields m + | EDStructAccess { e; field; name_opt } -> + let acc, e = f e in + acc, edstructaccess e field name_opt m + | EStructAccess { e; field; name } -> + let acc, e = f e in + acc, estructaccess e field name m + | EMatch { e; name; cases } -> + let acc, e = f e in + let acc, cases = + EnumConstructor.Map.fold + (fun cons e (acc, cases) -> + let acc1, e = f e in + join acc acc1, EnumConstructor.Map.add cons e cases) + cases + (acc, EnumConstructor.Map.empty) + in + acc, ematch e name cases m + | EScopeCall { scope; args } -> + let acc, args = + ScopeVar.Map.fold + (fun var e (acc, args) -> + let acc1, e = f e in + join acc acc1, ScopeVar.Map.add var e args) + args (acc, ScopeVar.Map.empty) + in + acc, escopecall scope args m (* - *) (** See [Bindlib.box_term] documentation for why we are doing that. *) -let rebox e = - let rec id_t () e = map () ~f:id_t e in - id_t () e +let rec rebox e = map ~f:rebox e let box e = Marked.same_mark_as (Bindlib.box (Marked.unmark e)) e let unbox (e, m) = Bindlib.unbox e, m @@ -297,99 +396,36 @@ let is_value (type a) (e : (a, _) gexpr) = | ELit _ | EAbs _ | EOp _ | ERaise _ -> true | _ -> false -let equal_tlit l1 l2 = l1 = l2 -let compare_tlit l1 l2 = Stdlib.compare l1 l2 - -let rec equal_typ ty1 ty2 = - match Marked.unmark ty1, Marked.unmark ty2 with - | TLit l1, TLit l2 -> equal_tlit l1 l2 - | TTuple tys1, TTuple tys2 -> equal_typ_list tys1 tys2 - | TStruct n1, TStruct n2 -> StructName.equal n1 n2 - | TEnum n1, TEnum n2 -> EnumName.equal n1 n2 - | TOption t1, TOption t2 -> equal_typ t1 t2 - | TArrow (t1, t1'), TArrow (t2, t2') -> equal_typ t1 t2 && equal_typ t1' t2' - | TArray t1, TArray t2 -> equal_typ t1 t2 - | TAny, TAny -> true - | ( ( TLit _ | TTuple _ | TStruct _ | TEnum _ | TOption _ | TArrow _ - | TArray _ | TAny ), - _ ) -> - false - -and equal_typ_list tys1 tys2 = - try List.for_all2 equal_typ tys1 tys2 with Invalid_argument _ -> false - -(* Similar to [equal_typ], but allows TAny holes *) -let rec unifiable ty1 ty2 = - match Marked.unmark ty1, Marked.unmark ty2 with - | TAny, _ | _, TAny -> true - | TLit l1, TLit l2 -> equal_tlit l1 l2 - | TTuple tys1, TTuple tys2 -> unifiable_list tys1 tys2 - | TStruct n1, TStruct n2 -> StructName.equal n1 n2 - | TEnum n1, TEnum n2 -> EnumName.equal n1 n2 - | TOption t1, TOption t2 -> unifiable t1 t2 - | TArrow (t1, t1'), TArrow (t2, t2') -> unifiable t1 t2 && unifiable t1' t2' - | TArray t1, TArray t2 -> unifiable t1 t2 - | ( (TLit _ | TTuple _ | TStruct _ | TEnum _ | TOption _ | TArrow _ | TArray _), - _ ) -> - false - -and unifiable_list tys1 tys2 = - try List.for_all2 unifiable tys1 tys2 with Invalid_argument _ -> false - -let rec compare_typ ty1 ty2 = - match Marked.unmark ty1, Marked.unmark ty2 with - | TLit l1, TLit l2 -> compare_tlit l1 l2 - | TTuple tys1, TTuple tys2 -> List.compare compare_typ tys1 tys2 - | TStruct n1, TStruct n2 -> StructName.compare n1 n2 - | TEnum en1, TEnum en2 -> EnumName.compare en1 en2 - | TOption t1, TOption t2 -> compare_typ t1 t2 - | TArrow (a1, b1), TArrow (a2, b2) -> ( - match compare_typ a1 a2 with 0 -> compare_typ b1 b2 | n -> n) - | TArray t1, TArray t2 -> compare_typ t1 t2 - | TAny, TAny -> 0 - | TLit _, _ -> -1 - | _, TLit _ -> 1 - | TTuple _, _ -> -1 - | _, TTuple _ -> 1 - | TStruct _, _ -> -1 - | _, TStruct _ -> 1 - | TEnum _, _ -> -1 - | _, TEnum _ -> 1 - | TOption _, _ -> -1 - | _, TOption _ -> 1 - | TArrow _, _ -> -1 - | _, TArrow _ -> 1 - | TArray _, _ -> -1 - | _, TArray _ -> 1 - let equal_lit (type a) (l1 : a glit) (l2 : a glit) = + let open Runtime.Oper in match l1, l2 with - | LBool b1, LBool b2 -> Bool.equal b1 b2 + | LBool b1, LBool b2 -> not (o_xor b1 b2) | LEmptyError, LEmptyError -> true - | LInt n1, LInt n2 -> Runtime.( =! ) n1 n2 - | LRat r1, LRat r2 -> Runtime.( =& ) r1 r2 - | LMoney m1, LMoney m2 -> Runtime.( =$ ) m1 m2 + | LInt n1, LInt n2 -> o_eq_int_int n1 n2 + | LRat r1, LRat r2 -> o_eq_rat_rat r1 r2 + | LMoney m1, LMoney m2 -> o_eq_mon_mon m1 m2 | LUnit, LUnit -> true - | LDate d1, LDate d2 -> Runtime.( =@ ) d1 d2 - | LDuration d1, LDuration d2 -> Runtime.( =^ ) d1 d2 + | LDate d1, LDate d2 -> o_eq_dat_dat d1 d2 + | LDuration d1, LDuration d2 -> o_eq_dur_dur d1 d2 | ( ( LBool _ | LEmptyError | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ | LDuration _ ), _ ) -> false let compare_lit (type a) (l1 : a glit) (l2 : a glit) = + let open Runtime.Oper in match l1, l2 with | LBool b1, LBool b2 -> Bool.compare b1 b2 | LEmptyError, LEmptyError -> 0 | LInt n1, LInt n2 -> - if Runtime.( - if Runtime.( <& ) r1 r2 then -1 else if Runtime.( =& ) r1 r2 then 0 else 1 + if o_lt_rat_rat r1 r2 then -1 else if o_eq_rat_rat r1 r2 then 0 else 1 | LMoney m1, LMoney m2 -> - if Runtime.( <$ ) m1 m2 then -1 else if Runtime.( =$ ) m1 m2 then 0 else 1 + if o_lt_mon_mon m1 m2 then -1 else if o_eq_mon_mon m1 m2 then 0 else 1 | LUnit, LUnit -> 0 | LDate d1, LDate d2 -> - if Runtime.( <@ ) d1 d2 then -1 else if Runtime.( =@ ) d1 d2 then 0 else 1 + if o_lt_dat_dat d1 d2 then -1 else if o_eq_dat_dat d1 d2 then 0 else 1 | LDuration d1, LDuration d2 -> ( (* Duration comparison in the runtime may fail, so rely on a basic lexicographic comparison instead *) @@ -441,119 +477,6 @@ let compare_location | _, SubScopeVar _ -> . let equal_location a b = compare_location a b = 0 - -let equal_log_entries l1 l2 = - match l1, l2 with - | VarDef t1, VarDef t2 -> equal_typ (t1, Pos.no_pos) (t2, Pos.no_pos) - | x, y -> x = y - -let compare_log_entries l1 l2 = - match l1, l2 with - | VarDef t1, VarDef t2 -> compare_typ (t1, Pos.no_pos) (t2, Pos.no_pos) - | BeginCall, BeginCall - | EndCall, EndCall - | PosRecordIfTrueBool, PosRecordIfTrueBool -> - 0 - | VarDef _, _ -> -1 - | _, VarDef _ -> 1 - | BeginCall, _ -> -1 - | _, BeginCall -> 1 - | EndCall, _ -> -1 - | _, EndCall -> 1 - | PosRecordIfTrueBool, _ -> . - | _, PosRecordIfTrueBool -> . - -(* let equal_op_kind = Stdlib.(=) *) - -let compare_op_kind = Stdlib.compare - -let equal_unops op1 op2 = - match op1, op2 with - (* Log entries contain a typ which contain position information, we thus need - to descend into them *) - | Log (l1, info1), Log (l2, info2) -> - equal_log_entries l1 l2 && List.equal Uid.MarkedString.equal info1 info2 - | Log _, _ | _, Log _ -> false - (* All the other cases can be discharged through equality *) - | ( ( Not | Minus _ | Length | IntToRat | MoneyToRat | RatToMoney | GetDay - | GetMonth | GetYear | FirstDayOfMonth | LastDayOfMonth | RoundMoney - | RoundDecimal ), - _ ) -> - op1 = op2 - -let compare_unops op1 op2 = - match op1, op2 with - | Not, Not -> 0 - | Minus k1, Minus k2 -> compare_op_kind k1 k2 - | Log (l1, info1), Log (l2, info2) -> ( - match compare_log_entries l1 l2 with - | 0 -> List.compare Uid.MarkedString.compare info1 info2 - | n -> n) - | Length, Length - | IntToRat, IntToRat - | MoneyToRat, MoneyToRat - | RatToMoney, RatToMoney - | GetDay, GetDay - | GetMonth, GetMonth - | GetYear, GetYear - | FirstDayOfMonth, FirstDayOfMonth - | LastDayOfMonth, LastDayOfMonth - | RoundMoney, RoundMoney - | RoundDecimal, RoundDecimal -> - 0 - | Not, _ -> -1 - | _, Not -> 1 - | Minus _, _ -> -1 - | _, Minus _ -> 1 - | Log _, _ -> -1 - | _, Log _ -> 1 - | Length, _ -> -1 - | _, Length -> 1 - | IntToRat, _ -> -1 - | _, IntToRat -> 1 - | MoneyToRat, _ -> -1 - | _, MoneyToRat -> 1 - | RatToMoney, _ -> -1 - | _, RatToMoney -> 1 - | GetDay, _ -> -1 - | _, GetDay -> 1 - | GetMonth, _ -> -1 - | _, GetMonth -> 1 - | GetYear, _ -> -1 - | _, GetYear -> 1 - | FirstDayOfMonth, _ -> -1 - | _, FirstDayOfMonth -> 1 - | LastDayOfMonth, _ -> -1 - | _, LastDayOfMonth -> 1 - | RoundMoney, _ -> -1 - | _, RoundMoney -> 1 - | RoundDecimal, _ -> . - | _, RoundDecimal -> . - -let equal_binop = Stdlib.( = ) -let compare_binop = Stdlib.compare -let equal_ternop = Stdlib.( = ) -let compare_ternop = Stdlib.compare - -let equal_ops op1 op2 = - match op1, op2 with - | Ternop op1, Ternop op2 -> equal_ternop op1 op2 - | Binop op1, Binop op2 -> equal_binop op1 op2 - | Unop op1, Unop op2 -> equal_unops op1 op2 - | _, _ -> false - -let compare_op op1 op2 = - match op1, op2 with - | Ternop op1, Ternop op2 -> compare_ternop op1 op2 - | Binop op1, Binop op2 -> compare_binop op1 op2 - | Unop op1, Unop op2 -> compare_unops op1 op2 - | Ternop _, _ -> -1 - | _, Ternop _ -> 1 - | Binop _, _ -> -1 - | _, Binop _ -> 1 - | Unop _, _ -> . - | _, Unop _ -> . - let equal_except ex1 ex2 = ex1 = ex2 let compare_except ex1 ex2 = Stdlib.compare ex1 ex2 @@ -567,50 +490,60 @@ and equal : type a. (a, 't) gexpr -> (a, 't) gexpr -> bool = fun e1 e2 -> match Marked.unmark e1, Marked.unmark e2 with | EVar v1, EVar v2 -> Bindlib.eq_vars v1 v2 - | ETuple (es1, n1), ETuple (es2, n2) -> n1 = n2 && equal_list es1 es2 - | ETupleAccess (e1, id1, n1, tys1), ETupleAccess (e2, id2, n2, tys2) -> - equal e1 e2 && id1 = id2 && n1 = n2 && equal_typ_list tys1 tys2 - | EInj (e1, id1, n1, tys1), EInj (e2, id2, n2, tys2) -> - equal e1 e2 && id1 = id2 && n1 = n2 && equal_typ_list tys1 tys2 - | EMatch (e1, cases1, n1), EMatch (e2, cases2, n2) -> - n1 = n2 && equal e1 e2 && equal_list cases1 cases2 + | ETuple es1, ETuple es2 -> equal_list es1 es2 + | ( ETupleAccess { e = e1; index = id1; size = s1 }, + ETupleAccess { e = e2; index = id2; size = s2 } ) -> + s1 = s2 && equal e1 e2 && id1 = id2 | EArray es1, EArray es2 -> equal_list es1 es2 | ELit l1, ELit l2 -> l1 = l2 - | EAbs (b1, tys1), EAbs (b2, tys2) -> - equal_typ_list tys1 tys2 + | EAbs { binder = b1; tys = tys1 }, EAbs { binder = b2; tys = tys2 } -> + Type.equal_list tys1 tys2 && let vars1, body1 = Bindlib.unmbind b1 in let body2 = Bindlib.msubst b2 (Array.map (fun x -> EVar x) vars1) in equal body1 body2 - | EApp (e1, args1), EApp (e2, args2) -> equal e1 e2 && equal_list args1 args2 + | EApp { f = e1; args = args1 }, EApp { f = e2; args = args2 } -> + equal e1 e2 && equal_list args1 args2 | EAssert e1, EAssert e2 -> equal e1 e2 - | EOp op1, EOp op2 -> equal_ops op1 op2 - | EDefault (exc1, def1, cons1), EDefault (exc2, def2, cons2) -> + | EOp { op = op1; tys = tys1 }, EOp { op = op2; tys = tys2 } -> + Operator.equal op1 op2 && Type.equal_list tys1 tys2 + | ( EDefault { excepts = exc1; just = def1; cons = cons1 }, + EDefault { excepts = exc2; just = def2; cons = cons2 } ) -> equal def1 def2 && equal cons1 cons2 && equal_list exc1 exc2 - | EIfThenElse (if1, then1, else1), EIfThenElse (if2, then2, else2) -> + | ( EIfThenElse { cond = if1; etrue = then1; efalse = else1 }, + EIfThenElse { cond = if2; etrue = then2; efalse = else2 } ) -> equal if1 if2 && equal then1 then2 && equal else1 else2 - | ErrorOnEmpty e1, ErrorOnEmpty e2 -> equal e1 e2 + | EErrorOnEmpty e1, EErrorOnEmpty e2 -> equal e1 e2 | ERaise ex1, ERaise ex2 -> equal_except ex1 ex2 - | ECatch (etry1, ex1, ewith1), ECatch (etry2, ex2, ewith2) -> + | ( ECatch { body = etry1; exn = ex1; handler = ewith1 }, + ECatch { body = etry2; exn = ex2; handler = ewith2 } ) -> equal etry1 etry2 && equal_except ex1 ex2 && equal ewith1 ewith2 | ELocation l1, ELocation l2 -> equal_location (Marked.mark Pos.no_pos l1) (Marked.mark Pos.no_pos l2) - | EStruct (s1, fields1), EStruct (s2, fields2) -> - StructName.equal s1 s2 && StructFieldMap.equal equal fields1 fields2 - | EStructAccess (e1, f1, s1), EStructAccess (e2, f2, s2) -> - StructName.equal s1 s2 && StructFieldName.equal f1 f2 && equal e1 e2 - | EEnumInj (e1, c1, n1), EEnumInj (e2, c2, n2) -> + | ( EStruct { name = s1; fields = fields1 }, + EStruct { name = s2; fields = fields2 } ) -> + StructName.equal s1 s2 && StructField.Map.equal equal fields1 fields2 + | ( EDStructAccess { e = e1; field = f1; name_opt = s1 }, + EDStructAccess { e = e2; field = f2; name_opt = s2 } ) -> + Option.equal StructName.equal s1 s2 && IdentName.equal f1 f2 && equal e1 e2 + | ( EStructAccess { e = e1; field = f1; name = s1 }, + EStructAccess { e = e2; field = f2; name = s2 } ) -> + StructName.equal s1 s2 && StructField.equal f1 f2 && equal e1 e2 + | EInj { e = e1; cons = c1; name = n1 }, EInj { e = e2; cons = c2; name = n2 } + -> EnumName.equal n1 n2 && EnumConstructor.equal c1 c2 && equal e1 e2 - | EMatchS (e1, n1, cases1), EMatchS (e2, n2, cases2) -> + | ( EMatch { e = e1; name = n1; cases = cases1 }, + EMatch { e = e2; name = n2; cases = cases2 } ) -> EnumName.equal n1 n2 && equal e1 e2 - && EnumConstructorMap.equal equal cases1 cases2 - | EScopeCall (s1, fields1), EScopeCall (s2, fields2) -> - ScopeName.equal s1 s2 && ScopeVarMap.equal equal fields1 fields2 - | ( ( EVar _ | ETuple _ | ETupleAccess _ | EInj _ | EMatch _ | EArray _ - | ELit _ | EAbs _ | EApp _ | EAssert _ | EOp _ | EDefault _ - | EIfThenElse _ | ErrorOnEmpty _ | ERaise _ | ECatch _ | ELocation _ - | EStruct _ | EStructAccess _ | EEnumInj _ | EMatchS _ | EScopeCall _ ), + && EnumConstructor.Map.equal equal cases1 cases2 + | ( EScopeCall { scope = s1; args = fields1 }, + EScopeCall { scope = s2; args = fields2 } ) -> + ScopeName.equal s1 s2 && ScopeVar.Map.equal equal fields1 fields2 + | ( ( EVar _ | ETuple _ | ETupleAccess _ | EArray _ | ELit _ | EAbs _ | EApp _ + | EAssert _ | EOp _ | EDefault _ | EIfThenElse _ | EErrorOnEmpty _ + | ERaise _ | ECatch _ | ELocation _ | EStruct _ | EDStructAccess _ + | EStructAccess _ | EInj _ | EMatch _ | EScopeCall _ ), _ ) -> false @@ -623,72 +556,76 @@ let rec compare : type a. (a, _) gexpr -> (a, _) gexpr -> int = match[@ocamlformat "disable"] Marked.unmark e1, Marked.unmark e2 with | ELit l1, ELit l2 -> compare_lit l1 l2 - | EApp (f1, args1), EApp (f2, args2) -> + | EApp {f=f1; args=args1}, EApp {f=f2; args=args2} -> compare f1 f2 @@< fun () -> List.compare compare args1 args2 - | EOp op1, EOp op2 -> - compare_op op1 op2 + | EOp {op=op1; tys=tys1}, EOp {op=op2; tys=tys2} -> + Operator.compare op1 op2 @@< fun () -> + List.compare Type.compare tys1 tys2 | EArray a1, EArray a2 -> List.compare compare a1 a2 | EVar v1, EVar v2 -> Bindlib.compare_vars v1 v2 - | EAbs (binder1, typs1), EAbs (binder2, typs2) -> - List.compare compare_typ typs1 typs2 @@< fun () -> + | EAbs {binder=binder1; tys=typs1}, + EAbs {binder=binder2; tys=typs2} -> + List.compare Type.compare typs1 typs2 @@< fun () -> let _, e1, e2 = Bindlib.unmbind2 binder1 binder2 in compare e1 e2 - | EIfThenElse (i1, t1, e1), EIfThenElse (i2, t2, e2) -> + | EIfThenElse {cond=i1; etrue=t1; efalse=e1}, + EIfThenElse {cond=i2; etrue=t2; efalse=e2} -> compare i1 i2 @@< fun () -> compare t1 t2 @@< fun () -> compare e1 e2 | ELocation l1, ELocation l2 -> compare_location (Marked.mark Pos.no_pos l1) (Marked.mark Pos.no_pos l2) - | EStruct (name1, field_map1), EStruct (name2, field_map2) -> + | EStruct {name=name1; fields=field_map1}, + EStruct {name=name2; fields=field_map2} -> StructName.compare name1 name2 @@< fun () -> - StructFieldMap.compare compare field_map1 field_map2 - | EStructAccess (e1, field_name1, struct_name1), - EStructAccess (e2, field_name2, struct_name2) -> + StructField.Map.compare compare field_map1 field_map2 + | EDStructAccess {e=e1; field=field_name1; name_opt=struct_name1}, + EDStructAccess {e=e2; field=field_name2; name_opt=struct_name2} -> compare e1 e2 @@< fun () -> - StructFieldName.compare field_name1 field_name2 @@< fun () -> + IdentName.compare field_name1 field_name2 @@< fun () -> + Option.compare StructName.compare struct_name1 struct_name2 + | EStructAccess {e=e1; field=field_name1; name=struct_name1}, + EStructAccess {e=e2; field=field_name2; name=struct_name2} -> + compare e1 e2 @@< fun () -> + StructField.compare field_name1 field_name2 @@< fun () -> StructName.compare struct_name1 struct_name2 - | EEnumInj (e1, cstr1, name1), EEnumInj (e2, cstr2, name2) -> - compare e1 e2 @@< fun () -> + | EMatch {e=e1; name=name1; cases=emap1}, + EMatch {e=e2; name=name2; cases=emap2} -> EnumName.compare name1 name2 @@< fun () -> - EnumConstructor.compare cstr1 cstr2 - | EMatchS (e1, name1, emap1), EMatchS (e2, name2, emap2) -> compare e1 e2 @@< fun () -> - EnumName.compare name1 name2 @@< fun () -> - EnumConstructorMap.compare compare emap1 emap2 - | EScopeCall (name1, field_map1), EScopeCall (name2, field_map2) -> + EnumConstructor.Map.compare compare emap1 emap2 + | EScopeCall {scope=name1; args=field_map1}, + EScopeCall {scope=name2; args=field_map2} -> ScopeName.compare name1 name2 @@< fun () -> - ScopeVarMap.compare compare field_map1 field_map2 - | ETuple (es1, s1), ETuple (es2, s2) -> - Option.compare StructName.compare s1 s2 @@< fun () -> + ScopeVar.Map.compare compare field_map1 field_map2 + | ETuple es1, ETuple es2 -> List.compare compare es1 es2 - | ETupleAccess (e1, n1, s1, tys1), ETupleAccess (e2, n2, s2, tys2) -> - Option.compare StructName.compare s1 s2 @@< fun () -> + | ETupleAccess {e=e1; index=n1; size=s1}, + ETupleAccess {e=e2; index=n2; size=s2} -> + Int.compare s1 s2 @@< fun () -> Int.compare n1 n2 @@< fun () -> - List.compare compare_typ tys1 tys2 @@< fun () -> compare e1 e2 - | EInj (e1, n1, name1, ts1), EInj (e2, n2, name2, ts2) -> + | EInj {e=e1; name=name1; cons=cons1}, + EInj {e=e2; name=name2; cons=cons2} -> EnumName.compare name1 name2 @@< fun () -> - Int.compare n1 n2 @@< fun () -> - List.compare compare_typ ts1 ts2 @@< fun () -> + EnumConstructor.compare cons1 cons2 @@< fun () -> compare e1 e2 - | EMatch (e1, cases1, n1), EMatch (e2, cases2, n2) -> - EnumName.compare n1 n2 @@< fun () -> - compare e1 e2 @@< fun () -> - List.compare compare cases1 cases2 | EAssert e1, EAssert e2 -> compare e1 e2 - | EDefault (exs1, just1, cons1), EDefault (exs2, just2, cons2) -> + | EDefault {excepts=exs1; just=just1; cons=cons1}, + EDefault {excepts=exs2; just=just2; cons=cons2} -> compare just1 just2 @@< fun () -> compare cons1 cons2 @@< fun () -> List.compare compare exs1 exs2 - | ErrorOnEmpty e1, ErrorOnEmpty e2 -> + | EErrorOnEmpty e1, EErrorOnEmpty e2 -> compare e1 e2 | ERaise ex1, ERaise ex2 -> compare_except ex1 ex2 - | ECatch (etry1, ex1, ewith1), ECatch (etry2, ex2, ewith2) -> + | ECatch {body=etry1; exn=ex1; handler=ewith1}, + ECatch {body=etry2; exn=ex2; handler=ewith2} -> compare_except ex1 ex2 @@< fun () -> compare etry1 etry2 @@< fun () -> compare ewith1 ewith2 @@ -701,34 +638,33 @@ let rec compare : type a. (a, _) gexpr -> (a, _) gexpr -> int = | EIfThenElse _, _ -> -1 | _, EIfThenElse _ -> 1 | ELocation _, _ -> -1 | _, ELocation _ -> 1 | EStruct _, _ -> -1 | _, EStruct _ -> 1 + | EDStructAccess _, _ -> -1 | _, EDStructAccess _ -> 1 | EStructAccess _, _ -> -1 | _, EStructAccess _ -> 1 - | EEnumInj _, _ -> -1 | _, EEnumInj _ -> 1 - | EMatchS _, _ -> -1 | _, EMatchS _ -> 1 + | EMatch _, _ -> -1 | _, EMatch _ -> 1 | EScopeCall _, _ -> -1 | _, EScopeCall _ -> 1 | ETuple _, _ -> -1 | _, ETuple _ -> 1 | ETupleAccess _, _ -> -1 | _, ETupleAccess _ -> 1 | EInj _, _ -> -1 | _, EInj _ -> 1 - | EMatch _, _ -> -1 | _, EMatch _ -> 1 | EAssert _, _ -> -1 | _, EAssert _ -> 1 | EDefault _, _ -> -1 | _, EDefault _ -> 1 - | ErrorOnEmpty _, _ -> . | _, ErrorOnEmpty _ -> . + | EErrorOnEmpty _, _ -> . | _, EErrorOnEmpty _ -> . | ERaise _, _ -> -1 | _, ERaise _ -> 1 | ECatch _, _ -> . | _, ECatch _ -> . let rec free_vars : type a. (a, 't) gexpr -> (a, 't) gexpr Var.Set.t = function | EVar v, _ -> Var.Set.singleton v - | EAbs (binder, _), _ -> + | EAbs { binder; _ }, _ -> let vs, body = Bindlib.unmbind binder in Array.fold_right Var.Set.remove vs (free_vars body) | e -> shallow_fold (fun e -> Var.Set.union (free_vars e)) e Var.Set.empty let remove_logging_calls e = - let rec f () e = + let rec f e = match Marked.unmark e with - | EApp ((EOp (Unop (Log _)), _), [arg]) -> map () ~f arg - | _ -> map () ~f e + | EApp { f = EOp { op = Log _; _ }, _; args = [arg] } -> map ~f arg + | _ -> map ~f e in - f () e + f e let format ?debug decl_ctx ppf e = Print.expr ?debug decl_ctx ppf e @@ -736,36 +672,35 @@ let rec size : type a. (a, 't) gexpr -> int = fun e -> match Marked.unmark e with | EVar _ | ELit _ | EOp _ -> 1 - | ETuple (args, _) -> List.fold_left (fun acc arg -> acc + size arg) 1 args + | ETuple args -> List.fold_left (fun acc arg -> acc + size arg) 1 args | EArray args -> List.fold_left (fun acc arg -> acc + size arg) 1 args - | ETupleAccess (e1, _, _, _) -> size e1 + 1 - | EInj (e1, _, _, _) -> size e1 + 1 - | EAssert e1 -> size e1 + 1 - | ErrorOnEmpty e1 -> size e1 + 1 - | EMatch (arg, args, _) -> - List.fold_left (fun acc arg -> acc + size arg) (1 + size arg) args - | EApp (arg, args) -> - List.fold_left (fun acc arg -> acc + size arg) (1 + size arg) args - | EAbs (binder, _) -> + | ETupleAccess { e; _ } -> size e + 1 + | EInj { e; _ } -> size e + 1 + | EAssert e -> size e + 1 + | EErrorOnEmpty e -> size e + 1 + | EApp { f; args } -> + List.fold_left (fun acc arg -> acc + size arg) (1 + size f) args + | EAbs { binder; _ } -> let _, body = Bindlib.unmbind binder in 1 + size body - | EIfThenElse (e1, e2, e3) -> 1 + size e1 + size e2 + size e3 - | EDefault (exceptions, just, cons) -> + | EIfThenElse { cond; etrue; efalse } -> + 1 + size cond + size etrue + size efalse + | EDefault { excepts; just; cons } -> List.fold_left (fun acc except -> acc + size except) (1 + size just + size cons) - exceptions + excepts | ERaise _ -> 1 - | ECatch (etry, _, ewith) -> 1 + size etry + size ewith + | ECatch { body; handler; _ } -> 1 + size body + size handler | ELocation _ -> 1 - | EStruct (_, fields) -> - StructFieldMap.fold (fun _ e acc -> acc + 1 + size e) fields 0 - | EStructAccess (e1, _, _) -> 1 + size e1 - | EEnumInj (e1, _, _) -> 1 + size e1 - | EMatchS (e1, _, cases) -> - EnumConstructorMap.fold (fun _ e acc -> acc + 1 + size e) cases (size e1) - | EScopeCall (_, fields) -> - ScopeVarMap.fold (fun _ e acc -> acc + 1 + size e) fields 1 + | EStruct { fields; _ } -> + StructField.Map.fold (fun _ e acc -> acc + 1 + size e) fields 0 + | EDStructAccess { e; _ } -> 1 + size e + | EStructAccess { e; _ } -> 1 + size e + | EMatch { e; cases; _ } -> + EnumConstructor.Map.fold (fun _ e acc -> acc + 1 + size e) cases (size e) + | EScopeCall { args; _ } -> + ScopeVar.Map.fold (fun _ e acc -> acc + 1 + size e) args 1 (* - Expression building helpers - *) @@ -794,7 +729,7 @@ let make_app e u pos = (fun tf tx -> match Marked.unmark tf with | TArrow (tx', tr) -> - assert (unifiable tx.ty tx'); + assert (Type.unifiable tx.ty tx'); (* wrong arg type *) tr | TAny -> tf @@ -818,50 +753,35 @@ let make_let_in x tau e1 e2 mpos = let make_multiple_let_in xs taus e1s e2 mpos = make_app (make_abs xs e2 taus mpos) e1s (pos e2) -let make_default_unboxed exceptions just cons = +let make_default_unboxed excepts just cons = let rec bool_value = function | ELit (LBool b), _ -> Some b - | EApp ((EOp (Unop (Log (l, _))), _), [e]), _ + | EApp { f = EOp { op = Log (l, _); _ }, _; args = [e]; _ }, _ when l <> PosRecordIfTrueBool (* we don't remove the log calls corresponding to source code definitions !*) -> bool_value e | _ -> None in - match exceptions, bool_value just, cons with + match excepts, bool_value just, cons with | [], Some true, cons -> Marked.unmark cons - | exceptions, Some true, (EDefault ([], just, cons), _) -> - EDefault (exceptions, just, cons) + | excepts, Some true, (EDefault { excepts = []; just; cons }, _) -> + EDefault { excepts; just; cons } | [except], Some false, _ -> Marked.unmark except - | exceptions, _, cons -> EDefault (exceptions, just, cons) + | excepts, _, cons -> EDefault { excepts; just; cons } let make_default exceptions just cons = Box.app2n just cons exceptions @@ fun just cons exceptions -> make_default_unboxed exceptions just cons -let make_tuple el structname m0 = +let make_tuple el m0 = match el with - | [] -> - etuple [] structname - (with_ty m0 - (match structname with - | Some n -> TStruct n, mark_pos m0 - | None -> TTuple [], mark_pos m0)) + | [] -> etuple [] (with_ty m0 (TTuple [], mark_pos m0)) | el -> let m = fold_marks (fun posl -> List.hd posl) - (fun ml -> - let pos = (List.hd ml).pos in - match structname with - | Some n -> TStruct n, pos - | None -> TTuple (List.map (fun t -> t.ty) ml), pos) + (fun ml -> TTuple (List.map (fun t -> t.ty) ml), (List.hd ml).pos) (List.map (fun e -> Marked.get_mark e) el) in - etuple el structname m - -let make_struct fieldmap structname m = - let fields = - List.rev (StructFieldMap.fold (fun _ e acc -> e :: acc) fieldmap []) - in - make_tuple fields (Some structname) m + etuple el m diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index aa99bde9..f33a3b10 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -17,7 +17,7 @@ (** Functions handling the expressions of [shared_ast] *) -open Utils +open Catala_utils open Definitions (** {2 Boxed constructors} *) @@ -43,34 +43,10 @@ val subst : ('a, 't) gexpr list -> ('a, 't) gexpr -val etuple : - (([< dcalc | lcalc ] as 'a), 't) boxed_gexpr list -> - StructName.t option -> - 't -> - ('a, 't) boxed_gexpr +val etuple : (lcalc, 't) boxed_gexpr list -> 't -> (lcalc, 't) boxed_gexpr val etupleaccess : - (([< dcalc | lcalc ] as 'a), 't) boxed_gexpr -> - int -> - StructName.t option -> - typ list -> - 't -> - ('a, 't) boxed_gexpr - -val einj : - (([< dcalc | lcalc ] as 'a), 't) boxed_gexpr -> - int -> - EnumName.t -> - typ list -> - 't -> - ('a, 't) boxed_gexpr - -val ematch : - (([< dcalc | lcalc ] as 'a), 't) boxed_gexpr -> - ('a, 't) boxed_gexpr list -> - EnumName.t -> - 't -> - ('a, 't) boxed_gexpr + (lcalc, 't) boxed_gexpr -> int -> int -> 't -> (lcalc, 't) boxed_gexpr val earray : ('a any, 't) boxed_gexpr list -> 't -> ('a, 't) boxed_gexpr val elit : 'a any glit -> 't -> ('a, 't) boxed_gexpr @@ -90,7 +66,7 @@ val eapp : val eassert : (([< dcalc | lcalc ] as 'a), 't) boxed_gexpr -> 't -> ('a, 't) boxed_gexpr -val eop : operator -> 't -> (_ any, 't) boxed_gexpr +val eop : ('a any, 'k) operator -> typ list -> 't -> ('a, 't) boxed_gexpr val edefault : (([< desugared | scopelang | dcalc ] as 'a), 't) boxed_gexpr list -> @@ -125,34 +101,41 @@ val elocation : val estruct : StructName.t -> - (([< desugared | scopelang ] as 'a), 't) boxed_gexpr StructFieldMap.t -> + ('a any, 't) boxed_gexpr StructField.Map.t -> 't -> ('a, 't) boxed_gexpr +val edstructaccess : + (desugared, 't) boxed_gexpr -> + IdentName.t -> + StructName.t option -> + 't -> + (desugared, 't) boxed_gexpr + val estructaccess : - (([< desugared | scopelang ] as 'a), 't) boxed_gexpr -> - StructFieldName.t -> + (([< scopelang | dcalc | lcalc ] as 'a), 't) boxed_gexpr -> + StructField.t -> StructName.t -> 't -> ('a, 't) boxed_gexpr -val eenuminj : - (([< desugared | scopelang ] as 'a), 't) boxed_gexpr -> +val einj : + ('a any, 't) boxed_gexpr -> EnumConstructor.t -> EnumName.t -> 't -> ('a, 't) boxed_gexpr -val ematchs : - (([< desugared | scopelang ] as 'a), 't) boxed_gexpr -> +val ematch : + ('a any, 't) boxed_gexpr -> EnumName.t -> - ('a, 't) boxed_gexpr EnumConstructorMap.t -> + ('a, 't) boxed_gexpr EnumConstructor.Map.t -> 't -> ('a, 't) boxed_gexpr val escopecall : ScopeName.t -> - (([< desugared | scopelang ] as 'a), 't) boxed_gexpr ScopeVarMap.t -> + (([< desugared | scopelang ] as 'a), 't) boxed_gexpr ScopeVar.Map.t -> 't -> ('a, 't) boxed_gexpr @@ -194,28 +177,25 @@ val untype : ('a, 'm mark) gexpr -> ('a, untyped mark) boxed_gexpr (** {2 Traversal functions} *) val map : - 'ctx -> - f:('ctx -> ('a, 't1) gexpr -> ('a, 't2) boxed_gexpr) -> + f:(('a, 't1) gexpr -> ('a, 't2) boxed_gexpr) -> (('a, 't1) naked_gexpr, 't2) Marked.t -> ('a, 't2) boxed_gexpr -(** Flat (non-recursive) mapping on expressions. +(** Shallow mapping on expressions (non recursive): applies the given function + to all sub-terms of the given expression, and rebuilds the node. - If you want to apply a map transform to an expression, you can save up - writing a painful match over all the cases of the AST. For instance, if you - want to remove all errors on empty, you can write + When applying a map transform to an expression, this avoids expliciting all + cases that remain unchanged. For instance, if you want to remove all errors + on empty, you can write {[ let remove_error_empty = - let rec f () e = + let rec f e = match Marked.unmark e with - | ErrorOnEmpty e1 -> Expr.map () f e1 - | _ -> Expr.map () f e + | ErrorOnEmpty e1 -> Expr.map f e1 + | _ -> Expr.map f e in - f () e - ]} - - The first argument of map_expr is an optional context that you can carry - around during your map traversal. *) + f e + ]} *) val map_top_down : f:(('a, 't1) gexpr -> (('a, 't1) naked_gexpr, 't2) Marked.t) -> @@ -231,7 +211,42 @@ val shallow_fold : (('a, 't) gexpr -> 'acc -> 'acc) -> ('a, 't) gexpr -> 'acc -> 'acc (** Applies a function on all sub-terms of the given expression. Does not recurse, and doesn't open binders. Useful as helper for recursive calls - within traversal functions *) + within traversal functions. This can be used to compute free variables with + e.g.: + + {[ + let rec free_vars = function + | EVar v, _ -> Var.Set.singleton v + | EAbs { binder; _ }, _ -> + let vs, body = Bindlib.unmbind binder in + Array.fold_right Var.Set.remove vs (free_vars body) + | e -> + shallow_fold (fun e -> Var.Set.union (free_vars e)) e Var.Set.empty + ]} *) + +val map_gather : + acc:'acc -> + join:('acc -> 'acc -> 'acc) -> + f:(('a, 't1) gexpr -> 'acc * ('a, 't2) boxed_gexpr) -> + (('a, 't1) naked_gexpr, 't2) Marked.t -> + 'acc * ('a, 't2) boxed_gexpr +(** Shallow mapping similar to [map], but additionally allows to gather an + accumulator bottom-up. [acc] is the accumulator value returned on terminal + nodes, and [join] is used to merge accumulators from the different sub-terms + of an expression. [acc] is assumed to be a neutral element for [join]. + Typically used with a set of variables used in the rewrite: + + {[ + let rec rewrite e = + match Marked.unmark e with + | Specific_case -> + Var.Set.singleton x, some_rewrite_fun e + | _ -> + Expr.map_gather ~acc:Var.Set.empty ~join:Var.Set.union ~f:rewrite e + }] + + + See [Lcalc.closure_conversion] for a real-world example. *) (** {2 Expression building helpers} *) @@ -289,21 +304,10 @@ val make_default : - [], when [ex] is a single exception, is rewritten as [ex] *) val make_tuple : - (([< dcalc | lcalc ] as 'a), 'm mark) boxed_gexpr list -> - StructName.t option -> - 'm mark -> - ('a, 'm mark) boxed_gexpr + (lcalc, 'm mark) boxed_gexpr list -> 'm mark -> (lcalc, 'm mark) boxed_gexpr (** Builds a tuple; the mark argument is only used as witness and for position when building 0-uples *) -val make_struct : - (([< dcalc | lcalc ] as 'a), 'm mark) boxed_gexpr StructFieldMap.t -> - StructName.t -> - 'm mark -> - ('a, 'm mark) boxed_gexpr -(** Builds the tuple of values for the given struct with proper ordering, - assuming the structfieldmap contains the fields defined for structname *) - (** {2 Transformations} *) val remove_logging_calls : ('a any, 't) gexpr -> ('a, 't) boxed_gexpr @@ -331,8 +335,6 @@ val compare : ('a, 't) gexpr -> ('a, 't) gexpr -> int (** Standard comparison function, suitable for e.g. [Set.Make]. Ignores position information *) -val equal_typ : typ -> typ -> bool -val compare_typ : typ -> typ -> int val is_value : ('a any, 't) gexpr -> bool val free_vars : ('a any, 't) gexpr -> ('a, 't) gexpr Var.Set.t @@ -363,10 +365,10 @@ module Box : sig a separate argument. *) val app1 : - ('a, 't) boxed_gexpr -> - (('a, 't) gexpr -> ('a, 't) naked_gexpr) -> - 't -> - ('a, 't) boxed_gexpr + ('a, 't1) boxed_gexpr -> + (('a, 't1) gexpr -> ('a, 't2) naked_gexpr) -> + 't2 -> + ('a, 't2) boxed_gexpr val app2 : ('a, 't) boxed_gexpr -> diff --git a/compiler/shared_ast/operator.ml b/compiler/shared_ast/operator.ml new file mode 100644 index 00000000..c28b7b4f --- /dev/null +++ b/compiler/shared_ast/operator.ml @@ -0,0 +1,582 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +open Catala_utils +open Definitions +include Definitions.Op + +let name : type a k. (a, k) t -> string = function + | Not -> "o_not" + | Length -> "o_length" + | GetDay -> "o_getDay" + | GetMonth -> "o_getMonth" + | GetYear -> "o_getYear" + | FirstDayOfMonth -> "o_firstDayOfMonth" + | LastDayOfMonth -> "o_lastDayOfMonth" + | Log _ -> "o_log" + | Minus -> "o_minus" + | Minus_int -> "o_minus_int" + | Minus_rat -> "o_minus_rat" + | Minus_mon -> "o_minus_mon" + | Minus_dur -> "o_minus_dur" + | ToRat -> "o_torat" + | ToRat_int -> "o_torat_int" + | ToRat_mon -> "o_torat_mon" + | ToMoney -> "o_tomoney" + | ToMoney_rat -> "o_tomoney_rat" + | Round -> "o_round" + | Round_rat -> "o_round_rat" + | Round_mon -> "o_round_mon" + | And -> "o_and" + | Or -> "o_or" + | Xor -> "o_xor" + | Eq -> "o_eq" + | Map -> "o_map" + | Concat -> "o_concat" + | Filter -> "o_filter" + | Reduce -> "o_reduce" + | Add -> "o_add" + | Add_int_int -> "o_add_int_int" + | Add_rat_rat -> "o_add_rat_rat" + | Add_mon_mon -> "o_add_mon_mon" + | Add_dat_dur -> "o_add_dat_dur" + | Add_dur_dur -> "o_add_dur_dur" + | Sub -> "o_sub" + | Sub_int_int -> "o_sub_int_int" + | Sub_rat_rat -> "o_sub_rat_rat" + | Sub_mon_mon -> "o_sub_mon_mon" + | Sub_dat_dat -> "o_sub_dat_dat" + | Sub_dat_dur -> "o_sub_dat_dur" + | Sub_dur_dur -> "o_sub_dur_dur" + | Mult -> "o_mult" + | Mult_int_int -> "o_mult_int_int" + | Mult_rat_rat -> "o_mult_rat_rat" + | Mult_mon_rat -> "o_mult_mon_rat" + | Mult_dur_int -> "o_mult_dur_int" + | Div -> "o_div" + | Div_int_int -> "o_div_int_int" + | Div_rat_rat -> "o_div_rat_rat" + | Div_mon_mon -> "o_div_mon_mon" + | Div_mon_rat -> "o_div_mon_mon" + | Lt -> "o_lt" + | Lt_int_int -> "o_lt_int_int" + | Lt_rat_rat -> "o_lt_rat_rat" + | Lt_mon_mon -> "o_lt_mon_mon" + | Lt_dur_dur -> "o_lt_dur_dur" + | Lt_dat_dat -> "o_lt_dat_dat" + | Lte -> "o_lte" + | Lte_int_int -> "o_lte_int_int" + | Lte_rat_rat -> "o_lte_rat_rat" + | Lte_mon_mon -> "o_lte_mon_mon" + | Lte_dur_dur -> "o_lte_dur_dur" + | Lte_dat_dat -> "o_lte_dat_dat" + | Gt -> "o_gt" + | Gt_int_int -> "o_gt_int_int" + | Gt_rat_rat -> "o_gt_rat_rat" + | Gt_mon_mon -> "o_gt_mon_mon" + | Gt_dur_dur -> "o_gt_dur_dur" + | Gt_dat_dat -> "o_gt_dat_dat" + | Gte -> "o_gte" + | Gte_int_int -> "o_gte_int_int" + | Gte_rat_rat -> "o_gte_rat_rat" + | Gte_mon_mon -> "o_gte_mon_mon" + | Gte_dur_dur -> "o_gte_dur_dur" + | Gte_dat_dat -> "o_gte_dat_dat" + | Eq_int_int -> "o_eq_int_int" + | Eq_rat_rat -> "o_eq_rat_rat" + | Eq_mon_mon -> "o_eq_mon_mon" + | Eq_dur_dur -> "o_eq_dur_dur" + | Eq_dat_dat -> "o_eq_dat_dat" + | Fold -> "o_fold" + +let compare_log_entries l1 l2 = + match l1, l2 with + | VarDef t1, VarDef t2 -> Type.compare (t1, Pos.no_pos) (t2, Pos.no_pos) + | BeginCall, BeginCall + | EndCall, EndCall + | PosRecordIfTrueBool, PosRecordIfTrueBool -> + 0 + | VarDef _, _ -> -1 + | _, VarDef _ -> 1 + | BeginCall, _ -> -1 + | _, BeginCall -> 1 + | EndCall, _ -> -1 + | _, EndCall -> 1 + | PosRecordIfTrueBool, _ -> . + | _, PosRecordIfTrueBool -> . + +let compare (type a k a2 k2) (t1 : (a, k) t) (t2 : (a2, k2) t) = + match[@ocamlformat "disable"] t1, t2 with + | Log (l1, info1), Log (l2, info2) -> ( + match compare_log_entries l1 l2 with + | 0 -> List.compare Uid.MarkedString.compare info1 info2 + | n -> n) + | Not, Not + | Length, Length + | GetDay, GetDay + | GetMonth, GetMonth + | GetYear, GetYear + | FirstDayOfMonth, FirstDayOfMonth + | LastDayOfMonth, LastDayOfMonth + | Minus, Minus + | Minus_int, Minus_int + | Minus_rat, Minus_rat + | Minus_mon, Minus_mon + | Minus_dur, Minus_dur + | ToRat, ToRat + | ToRat_int, ToRat_int + | ToRat_mon, ToRat_mon + | ToMoney, ToMoney + | ToMoney_rat, ToMoney_rat + | Round, Round + | Round_rat, Round_rat + | Round_mon, Round_mon + | And, And + | Or, Or + | Xor, Xor + | Eq, Eq + | Map, Map + | Concat, Concat + | Filter, Filter + | Reduce, Reduce + | Add, Add + | Add_int_int, Add_int_int + | Add_rat_rat, Add_rat_rat + | Add_mon_mon, Add_mon_mon + | Add_dat_dur, Add_dat_dur + | Add_dur_dur, Add_dur_dur + | Sub, Sub + | Sub_int_int, Sub_int_int + | Sub_rat_rat, Sub_rat_rat + | Sub_mon_mon, Sub_mon_mon + | Sub_dat_dat, Sub_dat_dat + | Sub_dat_dur, Sub_dat_dur + | Sub_dur_dur, Sub_dur_dur + | Mult, Mult + | Mult_int_int, Mult_int_int + | Mult_rat_rat, Mult_rat_rat + | Mult_mon_rat, Mult_mon_rat + | Mult_dur_int, Mult_dur_int + | Div, Div + | Div_int_int, Div_int_int + | Div_rat_rat, Div_rat_rat + | Div_mon_mon, Div_mon_mon + | Div_mon_rat, Div_mon_rat + | Lt, Lt + | Lt_int_int, Lt_int_int + | Lt_rat_rat, Lt_rat_rat + | Lt_mon_mon, Lt_mon_mon + | Lt_dat_dat, Lt_dat_dat + | Lt_dur_dur, Lt_dur_dur + | Lte, Lte + | Lte_int_int, Lte_int_int + | Lte_rat_rat, Lte_rat_rat + | Lte_mon_mon, Lte_mon_mon + | Lte_dat_dat, Lte_dat_dat + | Lte_dur_dur, Lte_dur_dur + | Gt, Gt + | Gt_int_int, Gt_int_int + | Gt_rat_rat, Gt_rat_rat + | Gt_mon_mon, Gt_mon_mon + | Gt_dat_dat, Gt_dat_dat + | Gt_dur_dur, Gt_dur_dur + | Gte, Gte + | Gte_int_int, Gte_int_int + | Gte_rat_rat, Gte_rat_rat + | Gte_mon_mon, Gte_mon_mon + | Gte_dat_dat, Gte_dat_dat + | Gte_dur_dur, Gte_dur_dur + | Eq_int_int, Eq_int_int + | Eq_rat_rat, Eq_rat_rat + | Eq_mon_mon, Eq_mon_mon + | Eq_dat_dat, Eq_dat_dat + | Eq_dur_dur, Eq_dur_dur + | Fold, Fold -> 0 + | Not, _ -> -1 | _, Not -> 1 + | Length, _ -> -1 | _, Length -> 1 + | GetDay, _ -> -1 | _, GetDay -> 1 + | GetMonth, _ -> -1 | _, GetMonth -> 1 + | GetYear, _ -> -1 | _, GetYear -> 1 + | FirstDayOfMonth, _ -> -1 | _, FirstDayOfMonth -> 1 + | LastDayOfMonth, _ -> -1 | _, LastDayOfMonth -> 1 + | Log _, _ -> -1 | _, Log _ -> 1 + | Minus, _ -> -1 | _, Minus -> 1 + | Minus_int, _ -> -1 | _, Minus_int -> 1 + | Minus_rat, _ -> -1 | _, Minus_rat -> 1 + | Minus_mon, _ -> -1 | _, Minus_mon -> 1 + | Minus_dur, _ -> -1 | _, Minus_dur -> 1 + | ToRat, _ -> -1 | _, ToRat -> 1 + | ToRat_int, _ -> -1 | _, ToRat_int -> 1 + | ToRat_mon, _ -> -1 | _, ToRat_mon -> 1 + | ToMoney, _ -> -1 | _, ToMoney -> 1 + | ToMoney_rat, _ -> -1 | _, ToMoney_rat -> 1 + | Round, _ -> -1 | _, Round -> 1 + | Round_rat, _ -> -1 | _, Round_rat -> 1 + | Round_mon, _ -> -1 | _, Round_mon -> 1 + | And, _ -> -1 | _, And -> 1 + | Or, _ -> -1 | _, Or -> 1 + | Xor, _ -> -1 | _, Xor -> 1 + | Eq, _ -> -1 | _, Eq -> 1 + | Map, _ -> -1 | _, Map -> 1 + | Concat, _ -> -1 | _, Concat -> 1 + | Filter, _ -> -1 | _, Filter -> 1 + | Reduce, _ -> -1 | _, Reduce -> 1 + | Add, _ -> -1 | _, Add -> 1 + | Add_int_int, _ -> -1 | _, Add_int_int -> 1 + | Add_rat_rat, _ -> -1 | _, Add_rat_rat -> 1 + | Add_mon_mon, _ -> -1 | _, Add_mon_mon -> 1 + | Add_dat_dur, _ -> -1 | _, Add_dat_dur -> 1 + | Add_dur_dur, _ -> -1 | _, Add_dur_dur -> 1 + | Sub, _ -> -1 | _, Sub -> 1 + | Sub_int_int, _ -> -1 | _, Sub_int_int -> 1 + | Sub_rat_rat, _ -> -1 | _, Sub_rat_rat -> 1 + | Sub_mon_mon, _ -> -1 | _, Sub_mon_mon -> 1 + | Sub_dat_dat, _ -> -1 | _, Sub_dat_dat -> 1 + | Sub_dat_dur, _ -> -1 | _, Sub_dat_dur -> 1 + | Sub_dur_dur, _ -> -1 | _, Sub_dur_dur -> 1 + | Mult, _ -> -1 | _, Mult -> 1 + | Mult_int_int, _ -> -1 | _, Mult_int_int -> 1 + | Mult_rat_rat, _ -> -1 | _, Mult_rat_rat -> 1 + | Mult_mon_rat, _ -> -1 | _, Mult_mon_rat -> 1 + | Mult_dur_int, _ -> -1 | _, Mult_dur_int -> 1 + | Div, _ -> -1 | _, Div -> 1 + | Div_int_int, _ -> -1 | _, Div_int_int -> 1 + | Div_rat_rat, _ -> -1 | _, Div_rat_rat -> 1 + | Div_mon_mon, _ -> -1 | _, Div_mon_mon -> 1 + | Div_mon_rat, _ -> -1 | _, Div_mon_rat -> 1 + | Lt, _ -> -1 | _, Lt -> 1 + | Lt_int_int, _ -> -1 | _, Lt_int_int -> 1 + | Lt_rat_rat, _ -> -1 | _, Lt_rat_rat -> 1 + | Lt_mon_mon, _ -> -1 | _, Lt_mon_mon -> 1 + | Lt_dat_dat, _ -> -1 | _, Lt_dat_dat -> 1 + | Lt_dur_dur, _ -> -1 | _, Lt_dur_dur -> 1 + | Lte, _ -> -1 | _, Lte -> 1 + | Lte_int_int, _ -> -1 | _, Lte_int_int -> 1 + | Lte_rat_rat, _ -> -1 | _, Lte_rat_rat -> 1 + | Lte_mon_mon, _ -> -1 | _, Lte_mon_mon -> 1 + | Lte_dat_dat, _ -> -1 | _, Lte_dat_dat -> 1 + | Lte_dur_dur, _ -> -1 | _, Lte_dur_dur -> 1 + | Gt, _ -> -1 | _, Gt -> 1 + | Gt_int_int, _ -> -1 | _, Gt_int_int -> 1 + | Gt_rat_rat, _ -> -1 | _, Gt_rat_rat -> 1 + | Gt_mon_mon, _ -> -1 | _, Gt_mon_mon -> 1 + | Gt_dat_dat, _ -> -1 | _, Gt_dat_dat -> 1 + | Gt_dur_dur, _ -> -1 | _, Gt_dur_dur -> 1 + | Gte, _ -> -1 | _, Gte -> 1 + | Gte_int_int, _ -> -1 | _, Gte_int_int -> 1 + | Gte_rat_rat, _ -> -1 | _, Gte_rat_rat -> 1 + | Gte_mon_mon, _ -> -1 | _, Gte_mon_mon -> 1 + | Gte_dat_dat, _ -> -1 | _, Gte_dat_dat -> 1 + | Gte_dur_dur, _ -> -1 | _, Gte_dur_dur -> 1 + | Eq_int_int, _ -> -1 | _, Eq_int_int -> 1 + | Eq_rat_rat, _ -> -1 | _, Eq_rat_rat -> 1 + | Eq_mon_mon, _ -> -1 | _, Eq_mon_mon -> 1 + | Eq_dat_dat, _ -> -1 | _, Eq_dat_dat -> 1 + | Eq_dur_dur, _ -> -1 | _, Eq_dur_dur -> 1 + | Fold, _ | _, Fold -> . + +let equal (type a k a2 k2) (t1 : (a, k) t) (t2 : (a2, k2) t) = compare t1 t2 = 0 + +(* Classification of operators *) + +let kind_dispatch : + type a b k. + polymorphic:((_, polymorphic) t -> b) -> + monomorphic:((_, monomorphic) t -> b) -> + ?overloaded:((_, overloaded) t -> b) -> + ?resolved:((_, resolved) t -> b) -> + (a, k) t -> + b = + fun ~polymorphic ~monomorphic ?(overloaded = fun _ -> assert false) + ?(resolved = fun _ -> assert false) op -> + match op with + | ( Not | GetDay | GetMonth | GetYear | FirstDayOfMonth | LastDayOfMonth | And + | Or | Xor ) as op -> + monomorphic op + | (Log _ | Length | Eq | Map | Concat | Filter | Reduce | Fold) as op -> + polymorphic op + | ( Minus | ToRat | ToMoney | Round | Add | Sub | Mult | Div | Lt | Lte | Gt + | Gte ) as op -> + overloaded op + | ( Minus_int | Minus_rat | Minus_mon | Minus_dur | ToRat_int | ToRat_mon + | ToMoney_rat | Round_rat | Round_mon | Add_int_int | Add_rat_rat + | Add_mon_mon | Add_dat_dur | Add_dur_dur | Sub_int_int | Sub_rat_rat + | Sub_mon_mon | Sub_dat_dat | Sub_dat_dur | Sub_dur_dur | Mult_int_int + | Mult_rat_rat | Mult_mon_rat | Mult_dur_int | Div_int_int | Div_rat_rat + | Div_mon_mon | Div_mon_rat | Lt_int_int | Lt_rat_rat | Lt_mon_mon + | Lt_dat_dat | Lt_dur_dur | Lte_int_int | Lte_rat_rat | Lte_mon_mon + | Lte_dat_dat | Lte_dur_dur | Gt_int_int | Gt_rat_rat | Gt_mon_mon + | Gt_dat_dat | Gt_dur_dur | Gte_int_int | Gte_rat_rat | Gte_mon_mon + | Gte_dat_dat | Gte_dur_dur | Eq_int_int | Eq_rat_rat | Eq_mon_mon + | Eq_dat_dat | Eq_dur_dur ) as op -> + resolved op + +(* Glorified identity... allowed operators are the same in scopelang, dcalc, + lcalc *) +let translate : + type k. + ([< scopelang | dcalc | lcalc ], k) t -> + ([< scopelang | dcalc | lcalc ], k) t = + fun op -> + match op with + | Length -> Length + | Log (i, l) -> Log (i, l) + | Eq -> Eq + | Map -> Map + | Concat -> Concat + | Filter -> Filter + | Reduce -> Reduce + | Fold -> Fold + | Not -> Not + | GetDay -> GetDay + | GetMonth -> GetMonth + | GetYear -> GetYear + | FirstDayOfMonth -> FirstDayOfMonth + | LastDayOfMonth -> LastDayOfMonth + | And -> And + | Or -> Or + | Xor -> Xor + | Minus_int -> Minus_int + | Minus_rat -> Minus_rat + | Minus_mon -> Minus_mon + | Minus_dur -> Minus_dur + | ToRat_int -> ToRat_int + | ToRat_mon -> ToRat_mon + | ToMoney_rat -> ToMoney_rat + | Round_rat -> Round_rat + | Round_mon -> Round_mon + | Add_int_int -> Add_int_int + | Add_rat_rat -> Add_rat_rat + | Add_mon_mon -> Add_mon_mon + | Add_dat_dur -> Add_dat_dur + | Add_dur_dur -> Add_dur_dur + | Sub_int_int -> Sub_int_int + | Sub_rat_rat -> Sub_rat_rat + | Sub_mon_mon -> Sub_mon_mon + | Sub_dat_dat -> Sub_dat_dat + | Sub_dat_dur -> Sub_dat_dur + | Sub_dur_dur -> Sub_dur_dur + | Mult_int_int -> Mult_int_int + | Mult_rat_rat -> Mult_rat_rat + | Mult_mon_rat -> Mult_mon_rat + | Mult_dur_int -> Mult_dur_int + | Div_int_int -> Div_int_int + | Div_rat_rat -> Div_rat_rat + | Div_mon_mon -> Div_mon_mon + | Div_mon_rat -> Div_mon_rat + | Lt_int_int -> Lt_int_int + | Lt_rat_rat -> Lt_rat_rat + | Lt_mon_mon -> Lt_mon_mon + | Lt_dat_dat -> Lt_dat_dat + | Lt_dur_dur -> Lt_dur_dur + | Lte_int_int -> Lte_int_int + | Lte_rat_rat -> Lte_rat_rat + | Lte_mon_mon -> Lte_mon_mon + | Lte_dat_dat -> Lte_dat_dat + | Lte_dur_dur -> Lte_dur_dur + | Gt_int_int -> Gt_int_int + | Gt_rat_rat -> Gt_rat_rat + | Gt_mon_mon -> Gt_mon_mon + | Gt_dat_dat -> Gt_dat_dat + | Gt_dur_dur -> Gt_dur_dur + | Gte_int_int -> Gte_int_int + | Gte_rat_rat -> Gte_rat_rat + | Gte_mon_mon -> Gte_mon_mon + | Gte_dat_dat -> Gte_dat_dat + | Gte_dur_dur -> Gte_dur_dur + | Eq_int_int -> Eq_int_int + | Eq_rat_rat -> Eq_rat_rat + | Eq_mon_mon -> Eq_mon_mon + | Eq_dat_dat -> Eq_dat_dat + | Eq_dur_dur -> Eq_dur_dur + +let monomorphic_type (op, pos) = + let ( @- ) a b = TArrow ((TLit a, pos), b), pos in + let ( @-> ) a b = TArrow ((TLit a, pos), (TLit b, pos)), pos in + match op with + | Not -> TBool @-> TBool + | GetDay -> TDate @-> TInt + | GetMonth -> TDate @-> TInt + | GetYear -> TDate @-> TInt + | FirstDayOfMonth -> TDate @-> TDate + | LastDayOfMonth -> TDate @-> TDate + | And -> TBool @- TBool @-> TBool + | Or -> TBool @- TBool @-> TBool + | Xor -> TBool @- TBool @-> TBool + +(** Rules for overloads definitions: + + - the concrete operator, including its return type, is uniquely determined + by the type of the operands + + - no resolved version of an operator should be the redefinition of another + one with an added conversion. For example, [int + rat -> rat] is not + acceptable (that would amount to implicit casts). + + These two points can be generalised for binary operators as: when + considering an operator with type ['a -> 'b -> 'c], for any given two among + ['a], ['b] and ['c], there should be a unique solution for the third. *) + +let resolved_type (op, pos) = + let ( @- ) a b = TArrow ((TLit a, pos), b), pos in + let ( @-> ) a b = TArrow ((TLit a, pos), (TLit b, pos)), pos in + match op with + | Minus_int -> TInt @-> TInt + | Minus_rat -> TRat @-> TRat + | Minus_mon -> TMoney @-> TMoney + | Minus_dur -> TDuration @-> TDuration + | ToRat_int -> TInt @-> TRat + | ToRat_mon -> TMoney @-> TRat + | ToMoney_rat -> TRat @-> TMoney + | Round_rat -> TRat @-> TRat + | Round_mon -> TMoney @-> TMoney + | Add_int_int -> TInt @- TInt @-> TInt + | Add_rat_rat -> TRat @- TRat @-> TRat + | Add_mon_mon -> TMoney @- TMoney @-> TMoney + | Add_dat_dur -> TDate @- TDuration @-> TDate + | Add_dur_dur -> TDuration @- TDuration @-> TDuration + | Sub_int_int -> TInt @- TInt @-> TInt + | Sub_rat_rat -> TRat @- TRat @-> TRat + | Sub_mon_mon -> TMoney @- TMoney @-> TMoney + | Sub_dat_dat -> TDate @- TDate @-> TDuration + | Sub_dat_dur -> TDate @- TDuration @-> TDuration + | Sub_dur_dur -> TDuration @- TDuration @-> TDuration + | Mult_int_int -> TInt @- TInt @-> TInt + | Mult_rat_rat -> TRat @- TRat @-> TRat + | Mult_mon_rat -> TMoney @- TRat @-> TMoney + | Mult_dur_int -> TDuration @- TInt @-> TDuration + | Div_int_int -> TInt @- TInt @-> TRat + | Div_rat_rat -> TRat @- TRat @-> TRat + | Div_mon_mon -> TMoney @- TMoney @-> TRat + | Div_mon_rat -> TMoney @- TRat @-> TMoney + | Lt_int_int -> TInt @- TInt @-> TBool + | Lt_rat_rat -> TRat @- TRat @-> TBool + | Lt_mon_mon -> TMoney @- TMoney @-> TBool + | Lt_dat_dat -> TDate @- TDate @-> TBool + | Lt_dur_dur -> TDuration @- TDuration @-> TBool + | Lte_int_int -> TInt @- TInt @-> TBool + | Lte_rat_rat -> TRat @- TRat @-> TBool + | Lte_mon_mon -> TMoney @- TMoney @-> TBool + | Lte_dat_dat -> TDate @- TDate @-> TBool + | Lte_dur_dur -> TDuration @- TDuration @-> TBool + | Gt_int_int -> TInt @- TInt @-> TBool + | Gt_rat_rat -> TRat @- TRat @-> TBool + | Gt_mon_mon -> TMoney @- TMoney @-> TBool + | Gt_dat_dat -> TDate @- TDate @-> TBool + | Gt_dur_dur -> TDuration @- TDuration @-> TBool + | Gte_int_int -> TInt @- TInt @-> TBool + | Gte_rat_rat -> TRat @- TRat @-> TBool + | Gte_mon_mon -> TMoney @- TMoney @-> TBool + | Gte_dat_dat -> TDate @- TDate @-> TBool + | Gte_dur_dur -> TDuration @- TDuration @-> TBool + | Eq_int_int -> TInt @- TInt @-> TBool + | Eq_rat_rat -> TRat @- TRat @-> TBool + | Eq_mon_mon -> TMoney @- TMoney @-> TBool + | Eq_dat_dat -> TDate @- TDate @-> TBool + | Eq_dur_dur -> TDuration @- TDuration @-> TBool + +let resolve_overload_aux (op : ('a, overloaded) t) (operands : typ_lit list) : + ('b, resolved) t * [ `Straight | `Reversed ] = + match op, operands with + | Minus, [TInt] -> Minus_int, `Straight + | Minus, [TRat] -> Minus_rat, `Straight + | Minus, [TMoney] -> Minus_mon, `Straight + | Minus, [TDuration] -> Minus_dur, `Straight + | ToRat, [TInt] -> ToRat_int, `Straight + | ToRat, [TMoney] -> ToRat_mon, `Straight + | ToMoney, [TRat] -> ToMoney_rat, `Straight + | Round, [TRat] -> Round_rat, `Straight + | Round, [TMoney] -> Round_mon, `Straight + | Add, [TInt; TInt] -> Add_int_int, `Straight + | Add, [TRat; TRat] -> Add_rat_rat, `Straight + | Add, [TMoney; TMoney] -> Add_mon_mon, `Straight + | Add, [TDuration; TDuration] -> Add_dur_dur, `Straight + | Add, [TDate; TDuration] -> Add_dat_dur, `Straight + | Add, [TDuration; TDate] -> Add_dat_dur, `Reversed + | Sub, [TInt; TInt] -> Sub_int_int, `Straight + | Sub, [TRat; TRat] -> Sub_rat_rat, `Straight + | Sub, [TMoney; TMoney] -> Sub_mon_mon, `Straight + | Sub, [TDuration; TDuration] -> Sub_dur_dur, `Straight + | Sub, [TDate; TDate] -> Sub_dat_dat, `Straight + | Sub, [TDate; TDuration] -> Sub_dat_dur, `Straight + | Mult, [TInt; TInt] -> Mult_int_int, `Straight + | Mult, [TRat; TRat] -> Mult_rat_rat, `Straight + | Mult, [TMoney; TRat] -> Mult_mon_rat, `Straight + | Mult, [TRat; TMoney] -> Mult_mon_rat, `Reversed + | Mult, [TDuration; TInt] -> Mult_dur_int, `Straight + | Mult, [TInt; TDuration] -> Mult_dur_int, `Reversed + | Div, [TInt; TInt] -> Div_int_int, `Straight + | Div, [TRat; TRat] -> Div_rat_rat, `Straight + | Div, [TMoney; TMoney] -> Div_mon_mon, `Straight + | Div, [TMoney; TRat] -> Div_mon_rat, `Straight + | Lt, [TInt; TInt] -> Lt_int_int, `Straight + | Lt, [TRat; TRat] -> Lt_rat_rat, `Straight + | Lt, [TMoney; TMoney] -> Lt_mon_mon, `Straight + | Lt, [TDuration; TDuration] -> Lt_dur_dur, `Straight + | Lt, [TDate; TDate] -> Lt_dat_dat, `Straight + | Lte, [TInt; TInt] -> Lte_int_int, `Straight + | Lte, [TRat; TRat] -> Lte_rat_rat, `Straight + | Lte, [TMoney; TMoney] -> Lte_mon_mon, `Straight + | Lte, [TDuration; TDuration] -> Lte_dur_dur, `Straight + | Lte, [TDate; TDate] -> Lte_dat_dat, `Straight + | Gt, [TInt; TInt] -> Gt_int_int, `Straight + | Gt, [TRat; TRat] -> Gt_rat_rat, `Straight + | Gt, [TMoney; TMoney] -> Gt_mon_mon, `Straight + | Gt, [TDuration; TDuration] -> Gt_dur_dur, `Straight + | Gt, [TDate; TDate] -> Gt_dat_dat, `Straight + | Gte, [TInt; TInt] -> Gte_int_int, `Straight + | Gte, [TRat; TRat] -> Gte_rat_rat, `Straight + | Gte, [TMoney; TMoney] -> Gte_mon_mon, `Straight + | Gte, [TDuration; TDuration] -> Gte_dur_dur, `Straight + | Gte, [TDate; TDate] -> Gte_dat_dat, `Straight + | ( ( Minus | ToRat | ToMoney | Round | Add | Sub | Mult | Div | Lt | Lte | Gt + | Gte ), + _ ) -> + raise Not_found + +let resolve_overload + ctx + (op : ('a, overloaded) t Marked.pos) + (operands : typ list) : ('b, resolved) t * [ `Straight | `Reversed ] = + try + let operands = + List.map + (fun t -> + match Marked.unmark t with TLit tl -> tl | _ -> raise Not_found) + operands + in + resolve_overload_aux (Marked.unmark op) operands + with Not_found -> + Errors.raise_multispanned_error + ((None, Marked.get_mark op) + :: List.map + (fun ty -> + ( Some + (Format.asprintf "Type %a coming from expression:" + (Print.typ ctx) ty), + Marked.get_mark ty )) + operands) + "I don't know how to apply operator %a on types %a" Print.operator + (Marked.unmark op) + (Format.pp_print_list + ~pp_sep:(fun ppf () -> Format.fprintf ppf " and@ ") + (Print.typ ctx)) + operands + +let overload_type ctx (op : ('a, overloaded) t Marked.pos) (operands : typ list) + : typ = + let rop = fst (resolve_overload ctx op operands) in + resolved_type (Marked.same_mark_as rop op) diff --git a/compiler/shared_ast/operator.mli b/compiler/shared_ast/operator.mli new file mode 100644 index 00000000..a91ec214 --- /dev/null +++ b/compiler/shared_ast/operator.mli @@ -0,0 +1,85 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +(** {1 Catala operator utilities} *) + +(** Resolving operators from the surface syntax proceeds in three steps: + + - During desugaring, the operators may remain untyped (with [TAny]) or, if + they have an explicit type suffix (e.g. the [$] for "money" in [+$]), + their operands types are already explicited in the [EOp] expression node. + - {!modules:Shared_ast.Typing} will then enforce these constraints in + addition to the known built-in type for each operator (e.g. + [Eq: 'a -> 'a -> 'a] isn't encoded in the first-order AST types). + - Finally, during {!modules:Scopelang.From_desugared}, these types are + leveraged to resolve the overloaded operators to their concrete, + monomorphic counterparts +*) + +open Catala_utils +open Definitions +include module type of Definitions.Op + +val equal : ('a1, 'k1) t -> ('a2, 'k2) t -> bool +val compare : ('a1, 'k1) t -> ('a2, 'k2) t -> int + +val name : ('a, 'k) t -> string +(** Returns the operator name as a valid ident starting with a lowercase + character. This is different from Print.operator which returns operator + symbols, e.g. [+$]. *) + +val kind_dispatch : + polymorphic:((_ any, polymorphic) t -> 'b) -> + monomorphic:((_ any, monomorphic) t -> 'b) -> + ?overloaded:((desugared, overloaded) t -> 'b) -> + ?resolved:(([< scopelang | dcalc | lcalc ], resolved) t -> 'b) -> + ('a, 'k) t -> + 'b +(** Calls one of the supplied functions depending on the kind of the operator *) + +val translate : + ([< scopelang | dcalc | lcalc ], 'k) t -> + ([< scopelang | dcalc | lcalc ], 'k) t +(** An identity function that allows translating an operator between different + passes that don't change operator types *) + +(** {2 Getting the types of operators} *) + +val monomorphic_type : ('a any, monomorphic) t Marked.pos -> typ + +val resolved_type : + ([< scopelang | dcalc | lcalc ], resolved) t Marked.pos -> typ + +val overload_type : + decl_ctx -> (desugared, overloaded) t Marked.pos -> typ list -> typ +(** The type for typing overloads is different since the types of the operands + are required in advance. + + @raise a detailed user error if no matching operator can be found *) + +(** Polymorphic operators are typed directly within [Typing], since their types + may contain type variables that can't be expressed outside of it*) + +(** {2 Overload handling} *) + +val resolve_overload : + decl_ctx -> + (desugared, overloaded) t Marked.pos -> + typ list -> + ([< scopelang | dcalc | lcalc ], resolved) t * [ `Straight | `Reversed ] +(** Some overloads are sugar for an operation with reversed operands, e.g. + [TRat * TMoney] is using [mult_mon_rat]. [`Reversed] is returned to signify + this case. *) diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index 7c6987c4..f91a114f 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -14,8 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils -open String_common +open Catala_utils open Definitions let typ_needs_parens (ty : typ) : bool = @@ -26,27 +25,28 @@ let uid_list (fmt : Format.formatter) (infos : Uid.MarkedString.info list) : Format.pp_print_list ~pp_sep:(fun fmt () -> Format.pp_print_char fmt '.') (fun fmt info -> - Utils.Cli.format_with_style - (if begins_with_uppercase (Marked.unmark info) then [ANSITerminal.red] + Cli.format_with_style + (if String.begins_with_uppercase (Marked.unmark info) then + [ANSITerminal.red] else []) fmt - (Utils.Uid.MarkedString.to_string info)) + (Uid.MarkedString.to_string info)) fmt infos let keyword (fmt : Format.formatter) (s : string) : unit = - Utils.Cli.format_with_style [ANSITerminal.red] fmt s + Cli.format_with_style [ANSITerminal.red] fmt s let base_type (fmt : Format.formatter) (s : string) : unit = - Utils.Cli.format_with_style [ANSITerminal.yellow] fmt s + Cli.format_with_style [ANSITerminal.yellow] fmt s let punctuation (fmt : Format.formatter) (s : string) : unit = - Utils.Cli.format_with_style [ANSITerminal.cyan] fmt s + Cli.format_with_style [ANSITerminal.cyan] fmt s -let operator (fmt : Format.formatter) (s : string) : unit = - Utils.Cli.format_with_style [ANSITerminal.green] fmt s +let op_style (fmt : Format.formatter) (s : string) : unit = + Cli.format_with_style [ANSITerminal.green] fmt s let lit_style (fmt : Format.formatter) (s : string) : unit = - Utils.Cli.format_with_style [ANSITerminal.yellow] fmt s + Cli.format_with_style [ANSITerminal.yellow] fmt s let tlit (fmt : Format.formatter) (l : typ_lit) : unit = base_type fmt @@ -68,7 +68,7 @@ let location (type a) (fmt : Format.formatter) (l : a glocation) : unit = ScopeVar.format_t (Marked.unmark subvar) let enum_constructor (fmt : Format.formatter) (c : EnumConstructor.t) : unit = - Utils.Cli.format_with_style [ANSITerminal.magenta] fmt + Cli.format_with_style [ANSITerminal.magenta] fmt (Format.asprintf "%a" EnumConstructor.format_t c) let rec typ (ctx : decl_ctx option) (fmt : Format.formatter) (ty : typ) : unit = @@ -81,7 +81,7 @@ let rec typ (ctx : decl_ctx option) (fmt : Format.formatter) (ty : typ) : unit = | TTuple ts -> Format.fprintf fmt "@[(%a)@]" (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ %a@ " operator "*") + ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ %a@ " op_style "*") typ) ts | TStruct s -> ( @@ -94,9 +94,9 @@ let rec typ (ctx : decl_ctx option) (fmt : Format.formatter) (ty : typ) : unit = ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ";") (fun fmt (field, mty) -> Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" - StructFieldName.format_t field punctuation "\"" punctuation ":" - typ mty)) - (StructMap.find s ctx.ctx_structs) + StructField.format_t field punctuation "\"" punctuation ":" typ + mty)) + (StructField.Map.bindings (StructName.Map.find s ctx.ctx_structs)) punctuation "}") | TEnum e -> ( match ctx with @@ -109,11 +109,11 @@ let rec typ (ctx : decl_ctx option) (fmt : Format.formatter) (ty : typ) : unit = (fun fmt (case, mty) -> Format.fprintf fmt "%a%a@ %a" enum_constructor case punctuation ":" typ mty)) - (EnumMap.find e ctx.ctx_enums) + (EnumConstructor.Map.bindings (EnumName.Map.find e ctx.ctx_enums)) punctuation "]") | TOption t -> Format.fprintf fmt "@[%a@ %a@]" base_type "option" typ t | TArrow (t1, t2) -> - Format.fprintf fmt "@[%a %a@ %a@]" typ_with_parens t1 operator "→" + Format.fprintf fmt "@[%a %a@ %a@]" typ_with_parens t1 op_style "→" typ t2 | TArray t1 -> Format.fprintf fmt "@[%a@ %a@]" base_type "collection" typ t1 @@ -127,9 +127,9 @@ let lit (type a) (fmt : Format.formatter) (l : a glit) : unit = | LUnit -> lit_style fmt "()" | LRat i -> lit_style fmt - (Runtime.decimal_to_string ~max_prec_digits:!Utils.Cli.max_prec_digits i) + (Runtime.decimal_to_string ~max_prec_digits:!Cli.max_prec_digits i) | LMoney e -> ( - match !Utils.Cli.locale_lang with + match !Cli.locale_lang with | En -> lit_style fmt (Format.asprintf "$%s" (Runtime.money_to_string e)) | Fr -> lit_style fmt (Format.asprintf "%s €" (Runtime.money_to_string e)) | Pl -> lit_style fmt (Format.asprintf "%s PLN" (Runtime.money_to_string e)) @@ -137,72 +137,112 @@ let lit (type a) (fmt : Format.formatter) (l : a glit) : unit = | LDate d -> lit_style fmt (Runtime.date_to_string d) | LDuration d -> lit_style fmt (Runtime.duration_to_string d) -let op_kind (fmt : Format.formatter) (k : op_kind) = - Format.fprintf fmt "%s" - (match k with - | KInt -> "" - | KRat -> "." - | KMoney -> "$" - | KDate -> "@" - | KDuration -> "^") - -let binop (fmt : Format.formatter) (op : binop) : unit = - operator fmt - (match op with - | Add k -> Format.asprintf "+%a" op_kind k - | Sub k -> Format.asprintf "-%a" op_kind k - | Mult k -> Format.asprintf "*%a" op_kind k - | Div k -> Format.asprintf "/%a" op_kind k - | And -> "&&" - | Or -> "||" - | Xor -> "xor" - | Eq -> "=" - | Neq -> "!=" - | Lt k -> Format.asprintf "%s%a" "<" op_kind k - | Lte k -> Format.asprintf "%s%a" "<=" op_kind k - | Gt k -> Format.asprintf "%s%a" ">" op_kind k - | Gte k -> Format.asprintf "%s%a" ">=" op_kind k - | Concat -> "++" - | Map -> "map" - | Filter -> "filter") - -let ternop (fmt : Format.formatter) (op : ternop) : unit = - match op with Fold -> keyword fmt "fold" - let log_entry (fmt : Format.formatter) (entry : log_entry) : unit = Format.fprintf fmt "@<2>%a" (fun fmt -> function - | VarDef _ -> Utils.Cli.format_with_style [ANSITerminal.blue] fmt "≔ " - | BeginCall -> Utils.Cli.format_with_style [ANSITerminal.yellow] fmt "→ " - | EndCall -> Utils.Cli.format_with_style [ANSITerminal.yellow] fmt "← " + | VarDef _ -> Cli.format_with_style [ANSITerminal.blue] fmt "≔ " + | BeginCall -> Cli.format_with_style [ANSITerminal.yellow] fmt "→ " + | EndCall -> Cli.format_with_style [ANSITerminal.yellow] fmt "← " | PosRecordIfTrueBool -> - Utils.Cli.format_with_style [ANSITerminal.green] fmt "☛ ") + Cli.format_with_style [ANSITerminal.green] fmt "☛ ") entry -let unop (fmt : Format.formatter) (op : unop) : unit = +let operator_to_string : type a k. (a, k) Op.t -> string = function + | Not -> "~" + | Length -> "length" + | GetDay -> "get_day" + | GetMonth -> "get_month" + | GetYear -> "get_year" + | FirstDayOfMonth -> "first_day_of_month" + | LastDayOfMonth -> "last_day_of_month" + | ToRat -> "to_rat" + | ToRat_int -> "to_rat_int" + | ToRat_mon -> "to_rat_mon" + | ToMoney -> "to_mon" + | ToMoney_rat -> "to_mon_rat" + | Round -> "round" + | Round_rat -> "round_rat" + | Round_mon -> "round_mon" + | Log _ -> "Log" + | Minus -> "-" + | Minus_int -> "-!" + | Minus_rat -> "-." + | Minus_mon -> "-$" + | Minus_dur -> "-^" + | And -> "&&" + | Or -> "||" + | Xor -> "xor" + | Eq -> "=" + | Map -> "map" + | Reduce -> "reduce" + | Concat -> "++" + | Filter -> "filter" + | Add -> "+" + | Add_int_int -> "+!" + | Add_rat_rat -> "+." + | Add_mon_mon -> "+$" + | Add_dat_dur -> "+@" + | Add_dur_dur -> "+^" + | Sub -> "-" + | Sub_int_int -> "-!" + | Sub_rat_rat -> "-." + | Sub_mon_mon -> "-$" + | Sub_dat_dat -> "-@" + | Sub_dat_dur -> "-@^" + | Sub_dur_dur -> "-^" + | Mult -> "*" + | Mult_int_int -> "*!" + | Mult_rat_rat -> "*." + | Mult_mon_rat -> "*$" + | Mult_dur_int -> "*^" + | Div -> "/" + | Div_int_int -> "/!" + | Div_rat_rat -> "/." + | Div_mon_mon -> "/$" + | Div_mon_rat -> "/$." + | Lt -> "<" + | Lt_int_int -> " "<." + | Lt_mon_mon -> "<$" + | Lt_dur_dur -> "<^" + | Lt_dat_dat -> "<@" + | Lte -> "<=" + | Lte_int_int -> "<=!" + | Lte_rat_rat -> "<=." + | Lte_mon_mon -> "<=$" + | Lte_dur_dur -> "<=^" + | Lte_dat_dat -> "<=@" + | Gt -> ">" + | Gt_int_int -> ">!" + | Gt_rat_rat -> ">." + | Gt_mon_mon -> ">$" + | Gt_dur_dur -> ">^" + | Gt_dat_dat -> ">@" + | Gte -> ">=" + | Gte_int_int -> ">=!" + | Gte_rat_rat -> ">=." + | Gte_mon_mon -> ">=$" + | Gte_dur_dur -> ">=^" + | Gte_dat_dat -> ">=@" + | Eq_int_int -> "=!" + | Eq_rat_rat -> "=." + | Eq_mon_mon -> "=$" + | Eq_dur_dur -> "=^" + | Eq_dat_dat -> "=@" + | Fold -> "fold" + +let operator (type k) (fmt : Format.formatter) (op : ('a, k) operator) : unit = match op with - | Minus _ -> Format.pp_print_string fmt "-" - | Not -> Format.pp_print_string fmt "~" | Log (entry, infos) -> - Format.fprintf fmt "log@[[%a|%a]@]" log_entry entry + Format.fprintf fmt "%a@[[%a|%a]@]" op_style "log" log_entry entry (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ".") - (fun fmt info -> Utils.Uid.MarkedString.format_info fmt info)) + (fun fmt info -> Uid.MarkedString.format fmt info)) infos - | Length -> Format.pp_print_string fmt "length" - | IntToRat -> Format.pp_print_string fmt "int_to_rat" - | MoneyToRat -> Format.pp_print_string fmt "money_to_rat" - | RatToMoney -> Format.pp_print_string fmt "rat_to_money" - | GetDay -> Format.pp_print_string fmt "get_day" - | GetMonth -> Format.pp_print_string fmt "get_month" - | GetYear -> Format.pp_print_string fmt "get_year" - | FirstDayOfMonth -> Format.pp_print_string fmt "first_day_of_month" - | LastDayOfMonth -> Format.pp_print_string fmt "last_day_of_month" - | RoundMoney -> Format.pp_print_string fmt "round_money" - | RoundDecimal -> Format.pp_print_string fmt "round_decimal" + | op -> Format.fprintf fmt "%a" op_style (operator_to_string op) let except (fmt : Format.formatter) (exn : except) : unit = - operator fmt + op_style fmt (match exn with | EmptyError -> "EmptyError" | ConflictError -> "ConflictError" @@ -215,7 +255,7 @@ let var_debug fmt v = let var fmt v = Format.pp_print_string fmt (Bindlib.name_of v) let needs_parens (type a) (e : (a, _) gexpr) : bool = - match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false + match Marked.unmark e with EAbs _ | EStruct _ -> true | _ -> false let rec expr_aux : type a. @@ -228,6 +268,7 @@ let rec expr_aux : fun ?(debug = false) ctx bnd_ctx fmt e -> let exprb bnd_ctx e = expr_aux ~debug ctx bnd_ctx e in let expr e = exprb bnd_ctx e in + let var = if debug then var_debug else var in let with_parens fmt e = if needs_parens e then ( punctuation fmt "("; @@ -236,79 +277,28 @@ let rec expr_aux : else expr fmt e in match Marked.unmark e with - | EVar v -> if debug then var_debug fmt v else var fmt v - | ETuple (es, None) -> + | EVar v -> var fmt v + | ETuple es -> Format.fprintf fmt "@[%a%a%a@]" punctuation "(" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") (fun fmt e -> expr fmt e)) es punctuation ")" - | ETuple (es, Some s) -> ( - match ctx with - | None -> expr fmt (Marked.same_mark_as (ETuple (es, None)) e) - | Some ctx -> - Format.fprintf fmt "@[%a@ @[%a%a%a@]@]" StructName.format_t - s punctuation "{" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ";") - (fun fmt (e, struct_field) -> - Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" - StructFieldName.format_t struct_field punctuation "\"" - punctuation "=" expr e)) - (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) - punctuation "}") | EArray es -> Format.fprintf fmt "@[%a%a%a@]" punctuation "[" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") (fun fmt e -> expr fmt e)) es punctuation "]" - | ETupleAccess (e1, n, s, _ts) -> ( - match s, ctx with - | None, _ | _, None -> - expr fmt e1; - punctuation fmt "."; - Format.pp_print_int fmt n - | Some s, Some ctx -> - expr fmt e1; - operator fmt "."; - punctuation fmt "\""; - StructFieldName.format_t fmt - (fst (List.nth (StructMap.find s ctx.ctx_structs) n)); - punctuation fmt "\"") - | EInj (e, n, en, _ts) -> ( - match ctx with - | None -> - Format.fprintf fmt "@[%a[%d]@ %a@]" EnumName.format_t en n expr e - | Some ctx -> - Format.fprintf fmt "@[%a@ %a@]" enum_constructor - (fst (List.nth (EnumMap.find en ctx.ctx_enums) n)) - expr e) - | EMatch (e, es, e_name) -> ( - match ctx with - | None -> - Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" - expr e keyword "with" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") - (fun fmt (e, i) -> - Format.fprintf fmt "@[%a %a[%d]%a@ %a@]" punctuation "|" - EnumName.format_t e_name i punctuation ":" expr e)) - (List.mapi (fun i e -> e, i) es) - | Some ctx -> - Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" - expr e keyword "with" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") - (fun fmt (e, c) -> - Format.fprintf fmt "@[%a %a%a@ %a@]" punctuation "|" - enum_constructor c punctuation ":" expr e)) - (List.combine es (List.map fst (EnumMap.find e_name ctx.ctx_enums)))) + | ETupleAccess { e; index; _ } -> + expr fmt e; + punctuation fmt "."; + Format.pp_print_int fmt index | ELit l -> lit fmt l - | EApp ((EAbs (binder, taus), _), args) -> + | EApp { f = EAbs { binder; tys }, _; args } -> let xs, body, bnd_ctx = Bindlib.unmbind_in bnd_ctx binder in let expr = exprb bnd_ctx in - let xs_tau = List.mapi (fun i tau -> xs.(i), tau) taus in + let xs_tau = List.mapi (fun i tau -> xs.(i), tau) tys in let xs_tau_arg = List.map2 (fun (x, tau) arg -> x, tau, arg) xs_tau args in Format.fprintf fmt "%a%a" (Format.pp_print_list @@ -318,10 +308,10 @@ let rec expr_aux : "let" var x punctuation ":" (typ ctx) tau punctuation "=" expr arg keyword "in")) xs_tau_arg expr body - | EAbs (binder, taus) -> + | EAbs { binder; tys } -> let xs, body, bnd_ctx = Bindlib.unmbind_in bnd_ctx binder in let expr = exprb bnd_ctx in - let xs_tau = List.mapi (fun i tau -> xs.(i), tau) taus in + let xs_tau = List.mapi (fun i tau -> xs.(i), tau) tys in Format.fprintf fmt "@[%a @[%a@] %a@ %a@]" punctuation "λ" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") @@ -329,29 +319,28 @@ let rec expr_aux : Format.fprintf fmt "%a%a%a %a%a" punctuation "(" var x punctuation ":" (typ ctx) tau punctuation ")")) xs_tau punctuation "→" expr body - | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" binop op with_parens arg1 + | EApp { f = EOp { op = (Map | Filter) as op; _ }, _; args = [arg1; arg2] } -> + Format.fprintf fmt "@[%a@ %a@ %a@]" operator op with_parens arg1 with_parens arg2 - | EApp ((EOp (Binop op), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" with_parens arg1 binop op + | EApp { f = EOp { op; _ }, _; args = [arg1; arg2] } -> + Format.fprintf fmt "@[%a@ %a@ %a@]" with_parens arg1 operator op with_parens arg2 - | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> expr fmt arg1 - | EApp ((EOp (Unop op), _), [arg1]) -> - Format.fprintf fmt "@[%a@ %a@]" unop op with_parens arg1 - | EApp (f, args) -> + | EApp { f = EOp { op = Log _; _ }, _; args = [arg1] } when not debug -> + expr fmt arg1 + | EApp { f = EOp { op; _ }, _; args = [arg1] } -> + Format.fprintf fmt "@[%a@ %a@]" operator op with_parens arg1 + | EApp { f; args } -> Format.fprintf fmt "@[%a@ %a@]" expr f (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") with_parens) args - | EIfThenElse (e1, e2, e3) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" expr e1 - keyword "then" expr e2 keyword "else" expr e3 - | EOp (Ternop op) -> ternop fmt op - | EOp (Binop op) -> binop fmt op - | EOp (Unop op) -> unop fmt op - | EDefault (exceptions, just, cons) -> - if List.length exceptions = 0 then + | EIfThenElse { cond; etrue; efalse } -> + Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" expr + cond keyword "then" expr etrue keyword "else" expr efalse + | EOp { op; _ } -> operator fmt op + | EDefault { excepts; just; cons } -> + if List.length excepts = 0 then Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" punctuation "⟨" expr just punctuation "⊢" expr cons punctuation "⟩" else @@ -359,45 +348,48 @@ let rec expr_aux : (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ",") expr) - exceptions punctuation "|" expr just punctuation "⊢" expr cons - punctuation "⟩" - | ErrorOnEmpty e' -> - Format.fprintf fmt "%a@ %a" operator "error_empty" with_parens e' + excepts punctuation "|" expr just punctuation "⊢" expr cons punctuation + "⟩" + | EErrorOnEmpty e' -> + Format.fprintf fmt "%a@ %a" op_style "error_empty" with_parens e' | EAssert e' -> Format.fprintf fmt "@[%a@ %a%a%a@]" keyword "assert" punctuation "(" expr e' punctuation ")" - | ECatch (e1, exn, e2) -> + | ECatch { body; exn; handler } -> Format.fprintf fmt "@[%a@ %a@ %a@ %a ->@ %a@]" keyword "try" - with_parens e1 keyword "with" except exn with_parens e2 + with_parens body keyword "with" except exn with_parens handler | ERaise exn -> Format.fprintf fmt "@[%a@ %a@]" keyword "raise" except exn | ELocation loc -> location fmt loc - | EStruct (name, fields) -> - Format.fprintf fmt " @[%a@ %a@ %a@ %a@]" StructName.format_t name + | EDStructAccess { e; field; _ } -> + Format.fprintf fmt "%a%a%a%a%a" expr e punctuation "." punctuation "\"" + IdentName.format_t field punctuation "\"" + | EStruct { name; fields } -> + Format.fprintf fmt "@[%a@ %a@ %a@ %a@]" StructName.format_t name punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ";") (fun fmt (field_name, field_expr) -> Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" - StructFieldName.format_t field_name punctuation "\"" punctuation - "=" expr field_expr)) - (StructFieldMap.bindings fields) + StructField.format_t field_name punctuation "\"" punctuation "=" + expr field_expr)) + (StructField.Map.bindings fields) punctuation "}" - | EStructAccess (e1, field, _) -> - Format.fprintf fmt "%a%a%a%a%a" expr e1 punctuation "." punctuation "\"" - StructFieldName.format_t field punctuation "\"" - | EEnumInj (e1, cons, _) -> - Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons expr e1 - | EMatchS (e1, _, cases) -> + | EStructAccess { e; field; _ } -> + Format.fprintf fmt "%a%a%a%a%a" expr e punctuation "." punctuation "\"" + StructField.format_t field punctuation "\"" + | EInj { e; cons; _ } -> + Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons expr e + | EMatch { e; cases; _ } -> Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" - expr e1 keyword "with" + expr e keyword "with" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (cons_name, case_expr) -> Format.fprintf fmt "@[%a %a@ %a@ %a@]" punctuation "|" enum_constructor cons_name punctuation "→" expr case_expr)) - (EnumConstructorMap.bindings cases) - | EScopeCall (scope, fields) -> + (EnumConstructor.Map.bindings cases) + | EScopeCall { scope; args } -> Format.pp_open_hovbox fmt 2; ScopeName.format_t fmt scope; Format.pp_print_space fmt (); @@ -411,7 +403,7 @@ let rec expr_aux : Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" ScopeVar.format_t field_name punctuation "\"" punctuation "=" expr field_expr) fmt - (ScopeVarMap.bindings fields); + (ScopeVar.Map.bindings args); Format.pp_close_box fmt (); punctuation fmt "}"; Format.pp_close_box fmt () diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli index f4dbd8f0..d490ee90 100644 --- a/compiler/shared_ast/print.mli +++ b/compiler/shared_ast/print.mli @@ -16,7 +16,7 @@ (** Printing functions for the default calculus AST *) -open Utils +open Catala_utils open Definitions (** {1 Common syntax highlighting helpers}*) @@ -24,7 +24,7 @@ open Definitions val base_type : Format.formatter -> string -> unit val keyword : Format.formatter -> string -> unit val punctuation : Format.formatter -> string -> unit -val operator : Format.formatter -> string -> unit +val op_style : Format.formatter -> string -> unit val lit_style : Format.formatter -> string -> unit (** {1 Formatters} *) @@ -35,13 +35,11 @@ val tlit : Format.formatter -> typ_lit -> unit val location : Format.formatter -> 'a glocation -> unit val typ : decl_ctx -> Format.formatter -> typ -> unit val lit : Format.formatter -> 'a glit -> unit -val op_kind : Format.formatter -> op_kind -> unit -val binop : Format.formatter -> binop -> unit -val ternop : Format.formatter -> ternop -> unit +val operator : Format.formatter -> ('a any, 'k) operator -> unit val log_entry : Format.formatter -> log_entry -> unit -val unop : Format.formatter -> unop -> unit val except : Format.formatter -> except -> unit val var : Format.formatter -> 'e Var.t -> unit +val var_debug : Format.formatter -> 'e Var.t -> unit val expr : ?debug:bool (** [true] for debug printing *) -> diff --git a/compiler/shared_ast/program.ml b/compiler/shared_ast/program.ml index 092111b9..aec818cb 100644 --- a/compiler/shared_ast/program.ml +++ b/compiler/shared_ast/program.ml @@ -22,6 +22,18 @@ let map_exprs ~f ~varf { scopes; decl_ctx } = (fun scopes -> { scopes; decl_ctx }) (Scope.map_exprs ~f ~varf scopes) +let get_scope_body { scopes; _ } scope = + match + Scope.fold_left ~init:None + ~f:(fun acc scope_def _ -> + if ScopeName.equal scope_def.scope_name scope then + Some scope_def.scope_body + else acc) + scopes + with + | None -> raise Not_found + | Some body -> body + let untype : 'm. ('a, 'm mark) gexpr program -> ('a, untyped mark) gexpr program = fun prg -> Bindlib.unbox (map_exprs ~f:Expr.untype ~varf:Var.translate prg) diff --git a/compiler/shared_ast/program.mli b/compiler/shared_ast/program.mli index 58ea68b9..f92f14a3 100644 --- a/compiler/shared_ast/program.mli +++ b/compiler/shared_ast/program.mli @@ -25,6 +25,9 @@ val map_exprs : 'expr1 program -> 'expr2 program Bindlib.box +val get_scope_body : + (([< dcalc | lcalc ], _) gexpr as 'e) program -> ScopeName.t -> 'e scope_body + val untype : (([< dcalc | lcalc ] as 'a), 'm mark) gexpr program -> ('a, untyped mark) gexpr program diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index fc1f0704..037741b5 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -15,7 +15,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Definitions let rec fold_left_lets ~f ~init scope_body_expr = @@ -106,7 +106,7 @@ let rec get_body_expr_mark = function get_body_expr_mark e | Result e -> let m = Marked.get_mark e in - Expr.with_ty m (Utils.Marked.mark (Expr.mark_pos m) TAny) + Expr.with_ty m (Marked.mark (Expr.mark_pos m) TAny) let get_body_mark scope_body = let _, e = Bindlib.unbind scope_body.scope_body_expr in diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index 6e18ee5e..eea0ae9b 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -17,7 +17,7 @@ (** Functions handling the scope structures of [shared_ast] *) -open Utils +open Catala_utils open Definitions (** {2 Traversal functions} *) diff --git a/compiler/shared_ast/shared_ast.ml b/compiler/shared_ast/shared_ast.ml index 1a170742..0195b454 100644 --- a/compiler/shared_ast/shared_ast.ml +++ b/compiler/shared_ast/shared_ast.ml @@ -16,6 +16,8 @@ include Definitions module Var = Var +module Type = Type +module Operator = Operator module Expr = Expr module Scope = Scope module Program = Program diff --git a/compiler/shared_ast/type.ml b/compiler/shared_ast/type.ml new file mode 100644 index 00000000..872b22f1 --- /dev/null +++ b/compiler/shared_ast/type.ml @@ -0,0 +1,87 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +open Catala_utils +open Definitions + +type t = typ + +let equal_tlit l1 l2 = l1 = l2 +let compare_tlit l1 l2 = Stdlib.compare l1 l2 + +let rec equal ty1 ty2 = + match Marked.unmark ty1, Marked.unmark ty2 with + | TLit l1, TLit l2 -> equal_tlit l1 l2 + | TTuple tys1, TTuple tys2 -> equal_list tys1 tys2 + | TStruct n1, TStruct n2 -> StructName.equal n1 n2 + | TEnum n1, TEnum n2 -> EnumName.equal n1 n2 + | TOption t1, TOption t2 -> equal t1 t2 + | TArrow (t1, t1'), TArrow (t2, t2') -> equal t1 t2 && equal t1' t2' + | TArray t1, TArray t2 -> equal t1 t2 + | TAny, TAny -> true + | ( ( TLit _ | TTuple _ | TStruct _ | TEnum _ | TOption _ | TArrow _ + | TArray _ | TAny ), + _ ) -> + false + +and equal_list tys1 tys2 = + try List.for_all2 equal tys1 tys2 with Invalid_argument _ -> false + +(* Similar to [equal], but allows TAny holes *) +let rec unifiable ty1 ty2 = + match Marked.unmark ty1, Marked.unmark ty2 with + | TAny, _ | _, TAny -> true + | TLit l1, TLit l2 -> equal_tlit l1 l2 + | TTuple tys1, TTuple tys2 -> unifiable_list tys1 tys2 + | TStruct n1, TStruct n2 -> StructName.equal n1 n2 + | TEnum n1, TEnum n2 -> EnumName.equal n1 n2 + | TOption t1, TOption t2 -> unifiable t1 t2 + | TArrow (t1, t1'), TArrow (t2, t2') -> unifiable t1 t2 && unifiable t1' t2' + | TArray t1, TArray t2 -> unifiable t1 t2 + | ( (TLit _ | TTuple _ | TStruct _ | TEnum _ | TOption _ | TArrow _ | TArray _), + _ ) -> + false + +and unifiable_list tys1 tys2 = + try List.for_all2 unifiable tys1 tys2 with Invalid_argument _ -> false + +let rec compare ty1 ty2 = + match Marked.unmark ty1, Marked.unmark ty2 with + | TLit l1, TLit l2 -> compare_tlit l1 l2 + | TTuple tys1, TTuple tys2 -> List.compare compare tys1 tys2 + | TStruct n1, TStruct n2 -> StructName.compare n1 n2 + | TEnum en1, TEnum en2 -> EnumName.compare en1 en2 + | TOption t1, TOption t2 -> compare t1 t2 + | TArrow (a1, b1), TArrow (a2, b2) -> ( + match compare a1 a2 with 0 -> compare b1 b2 | n -> n) + | TArray t1, TArray t2 -> compare t1 t2 + | TAny, TAny -> 0 + | TLit _, _ -> -1 + | _, TLit _ -> 1 + | TTuple _, _ -> -1 + | _, TTuple _ -> 1 + | TStruct _, _ -> -1 + | _, TStruct _ -> 1 + | TEnum _, _ -> -1 + | _, TEnum _ -> 1 + | TOption _, _ -> -1 + | _, TOption _ -> 1 + | TArrow _, _ -> -1 + | _, TArrow _ -> 1 + | TArray _, _ -> -1 + | _, TArray _ -> 1 + +let rec arrow_return = function TArrow (_, b), _ -> arrow_return b | t -> t diff --git a/compiler/shared_ast/type.mli b/compiler/shared_ast/type.mli new file mode 100644 index 00000000..53282f29 --- /dev/null +++ b/compiler/shared_ast/type.mli @@ -0,0 +1,27 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +type t = Definitions.typ + +val equal : t -> t -> bool +val equal_list : t list -> t list -> bool +val compare : t -> t -> int + +val unifiable : t -> t -> bool +(** Similar to [equal], but allows TAny holes *) + +val arrow_return : t -> t +(** Returns the last member in nested [TArrow] types *) diff --git a/compiler/shared_ast/typing.ml b/compiler/shared_ast/typing.ml index b188ffec..6e876f7f 100644 --- a/compiler/shared_ast/typing.ml +++ b/compiler/shared_ast/typing.ml @@ -17,16 +17,16 @@ (** Typing for the default calculus. Because of the error terms, we perform type inference using the classical W algorithm with union-find unification. *) -open Utils +open Catala_utils module A = Definitions module Any = - Utils.Uid.Make + Uid.Make (struct type info = unit let to_string _ = "any" - let format_info fmt () = Format.fprintf fmt "any" + let format fmt () = Format.fprintf fmt "any" let equal _ _ = true let compare _ _ = 0 end) @@ -47,7 +47,8 @@ and naked_typ = | TArray of unionfind_typ | TAny of Any.t -let rec typ_to_ast (ty : unionfind_typ) : A.typ = +let rec typ_to_ast ?(unsafe = false) (ty : unionfind_typ) : A.typ = + let typ_to_ast = typ_to_ast ~unsafe in let ty, pos = UnionFind.get (UnionFind.find ty) in match ty with | TLit l -> A.TLit l, pos @@ -58,11 +59,22 @@ let rec typ_to_ast (ty : unionfind_typ) : A.typ = | TArrow (t1, t2) -> A.TArrow (typ_to_ast t1, typ_to_ast t2), pos | TArray t1 -> A.TArray (typ_to_ast t1), pos | TAny _ -> - (* No polymorphism in Catala: type inference should return full types - without wildcards, and this function is used to recover the types after - typing. *) - Errors.raise_spanned_error pos - "Internal error: typing at this point could not be resolved" + if unsafe then A.TAny, pos + else + (* No polymorphism in Catala: type inference should return full types + without wildcards, and this function is used to recover the types after + typing. *) + Errors.raise_spanned_error pos + "Internal error: typing at this point could not be resolved" + +(* Checks that there are no type variables remaining *) +let rec all_resolved ty = + match Marked.unmark (UnionFind.get (UnionFind.find ty)) with + | TAny _ -> false + | TLit _ | TStruct _ | TEnum _ -> true + | TOption t1 | TArray t1 -> all_resolved t1 + | TArrow (t1, t2) -> all_resolved t1 && all_resolved t2 + | TTuple ts -> List.for_all all_resolved ts let rec ast_to_typ (ty : A.typ) : unionfind_typ = let ty' = @@ -97,7 +109,7 @@ let rec format_typ match Marked.unmark naked_typ with | TLit l -> Format.fprintf fmt "%a" Print.tlit l | TTuple ts -> - Format.fprintf fmt "@[(%a)]" + Format.fprintf fmt "@[(%a)@]" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ *@ ") (fun fmt t -> Format.fprintf fmt "%a" format_typ t)) @@ -111,9 +123,11 @@ let rec format_typ format_typ t2 | TArray t1 -> ( match Marked.unmark (UnionFind.get (UnionFind.find t1)) with - | TAny _ -> Format.pp_print_string fmt "collection" + | TAny _ when not !Cli.debug_flag -> Format.pp_print_string fmt "collection" | _ -> Format.fprintf fmt "@[collection@ %a@]" format_typ t1) - | TAny _ -> Format.pp_print_string fmt "" + | TAny v -> + if !Cli.debug_flag then Format.fprintf fmt "" (Any.hash v) + else Format.pp_print_string fmt "" exception Type_error of A.any_expr * unionfind_typ * unionfind_typ @@ -211,105 +225,90 @@ let lit_type (type a) (lit : a A.glit) : naked_typ = | LUnit -> TLit TUnit | LEmptyError -> TAny (Any.fresh ()) -(** Operators have a single type, instead of being polymorphic with constraints. - This allows us to have a simpler type system, while we argue the syntactic - burden of operator annotations helps the programmer visualize the type flow - in the code. *) -let op_type (op : A.operator Marked.pos) : unionfind_typ = +(** [op_type] and [resolve_overload] are a bit similar, and work on disjoint + sets of operators. However, their assumptions are different so we keep the + functions separate. In particular [resolve_overloads] requires its argument + types to be known in advance. *) + +let polymorphic_op_type (op : ('a, Operator.polymorphic) A.operator Marked.pos) + : unionfind_typ = + let open Operator in let pos = Marked.get_mark op in - let bt = UnionFind.make (TLit TBool, pos) in - let it = UnionFind.make (TLit TInt, pos) in - let rt = UnionFind.make (TLit TRat, pos) in - let mt = UnionFind.make (TLit TMoney, pos) in - let dut = UnionFind.make (TLit TDuration, pos) in - let dat = UnionFind.make (TLit TDate, pos) in - let any = UnionFind.make (TAny (Any.fresh ()), pos) in - let array_any = UnionFind.make (TArray any, pos) in - let any2 = UnionFind.make (TAny (Any.fresh ()), pos) in - let array_any2 = UnionFind.make (TArray any2, pos) in - let arr x y = UnionFind.make (TArrow (x, y), pos) in - match Marked.unmark op with - | A.Ternop A.Fold -> - arr (arr any2 (arr any any2)) (arr any2 (arr array_any any2)) - | A.Binop (A.And | A.Or | A.Xor) -> arr bt (arr bt bt) - | A.Binop (A.Add KInt | A.Sub KInt | A.Mult KInt | A.Div KInt) -> - arr it (arr it it) - | A.Binop (A.Add KRat | A.Sub KRat | A.Mult KRat | A.Div KRat) -> - arr rt (arr rt rt) - | A.Binop (A.Add KMoney | A.Sub KMoney) -> arr mt (arr mt mt) - | A.Binop (A.Add KDuration | A.Sub KDuration) -> arr dut (arr dut dut) - | A.Binop (A.Sub KDate) -> arr dat (arr dat dut) - | A.Binop (A.Add KDate) -> arr dat (arr dut dat) - | A.Binop (A.Mult KDuration) -> arr dut (arr it dut) - | A.Binop (A.Div KMoney) -> arr mt (arr mt rt) - | A.Binop (A.Mult KMoney) -> arr mt (arr rt mt) - | A.Binop (A.Lt KInt | A.Lte KInt | A.Gt KInt | A.Gte KInt) -> - arr it (arr it bt) - | A.Binop (A.Lt KRat | A.Lte KRat | A.Gt KRat | A.Gte KRat) -> - arr rt (arr rt bt) - | A.Binop (A.Lt KMoney | A.Lte KMoney | A.Gt KMoney | A.Gte KMoney) -> - arr mt (arr mt bt) - | A.Binop (A.Lt KDate | A.Lte KDate | A.Gt KDate | A.Gte KDate) -> - arr dat (arr dat bt) - | A.Binop (A.Lt KDuration | A.Lte KDuration | A.Gt KDuration | A.Gte KDuration) - -> - arr dut (arr dut bt) - | A.Binop (A.Eq | A.Neq) -> arr any (arr any bt) - | A.Binop A.Map -> arr (arr any any2) (arr array_any array_any2) - | A.Binop A.Filter -> arr (arr any bt) (arr array_any array_any) - | A.Binop A.Concat -> arr array_any (arr array_any array_any) - | A.Unop (A.Minus KInt) -> arr it it - | A.Unop (A.Minus KRat) -> arr rt rt - | A.Unop (A.Minus KMoney) -> arr mt mt - | A.Unop (A.Minus KDuration) -> arr dut dut - | A.Unop A.Not -> arr bt bt - | A.Unop (A.Log (A.PosRecordIfTrueBool, _)) -> arr bt bt - | A.Unop (A.Log _) -> arr any any - | A.Unop A.Length -> arr array_any it - | A.Unop A.GetDay -> arr dat it - | A.Unop A.GetMonth -> arr dat it - | A.Unop A.GetYear -> arr dat it - | A.Unop A.FirstDayOfMonth -> arr dat dat - | A.Unop A.LastDayOfMonth -> arr dat dat - | A.Unop A.RoundMoney -> arr mt mt - | A.Unop A.RoundDecimal -> arr rt rt - | A.Unop A.IntToRat -> arr it rt - | A.Unop A.MoneyToRat -> arr mt rt - | A.Unop A.RatToMoney -> arr rt mt - | Binop (Mult KDate) | Binop (Div (KDate | KDuration)) | Unop (Minus KDate) -> - Errors.raise_spanned_error pos "This operator is not available!" + let any = lazy (UnionFind.make (TAny (Any.fresh ()), pos)) in + let any2 = lazy (UnionFind.make (TAny (Any.fresh ()), pos)) in + let bt = lazy (UnionFind.make (TLit TBool, pos)) in + let it = lazy (UnionFind.make (TLit TInt, pos)) in + let array a = lazy (UnionFind.make (TArray (Lazy.force a), pos)) in + let ( @-> ) x y = + lazy (UnionFind.make (TArrow (Lazy.force x, Lazy.force y), pos)) + in + let ty = + match Marked.unmark op with + | Fold -> (any2 @-> any @-> any2) @-> any2 @-> array any @-> any2 + | Eq -> any @-> any @-> bt + | Map -> (any @-> any2) @-> array any @-> array any2 + | Filter -> (any @-> bt) @-> array any @-> array any + | Reduce -> (any @-> any @-> any) @-> any @-> array any @-> any + | Concat -> array any @-> array any @-> array any + | Log (PosRecordIfTrueBool, _) -> bt @-> bt + | Log _ -> any @-> any + | Length -> array any @-> it + in + Lazy.force ty + +let resolve_overload_ret_type + (ctx : A.decl_ctx) + e + (op : ('a A.any, Operator.overloaded) A.operator) + tys : unionfind_typ = + let op_ty = + Operator.overload_type ctx + (Marked.mark (Expr.pos e) op) + (List.map (typ_to_ast ~unsafe:true) tys) + (* We use [unsafe] because the error is caught below *) + in + ast_to_typ (Type.arrow_return op_ty) (** {1 Double-directed typing} *) module Env = struct type 'e t = { vars : ('e, unionfind_typ) Var.Map.t; - scope_vars : A.typ A.ScopeVarMap.t; - scopes : A.typ A.ScopeVarMap.t A.ScopeMap.t; + scope_vars : A.typ A.ScopeVar.Map.t; + scopes : A.typ A.ScopeVar.Map.t A.ScopeName.Map.t; } let empty = { vars = Var.Map.empty; - scope_vars = A.ScopeVarMap.empty; - scopes = A.ScopeMap.empty; + scope_vars = A.ScopeVar.Map.empty; + scopes = A.ScopeName.Map.empty; } let get t v = Var.Map.find_opt v t.vars - let get_scope_var t sv = A.ScopeVarMap.find_opt sv t.scope_vars + let get_scope_var t sv = A.ScopeVar.Map.find_opt sv t.scope_vars let get_subscope_out_var t scope var = - Option.bind (A.ScopeMap.find_opt scope t.scopes) (fun vmap -> - A.ScopeVarMap.find_opt var vmap) + Option.bind (A.ScopeName.Map.find_opt scope t.scopes) (fun vmap -> + A.ScopeVar.Map.find_opt var vmap) let add v tau t = { t with vars = Var.Map.add v tau t.vars } let add_var v typ t = add v (ast_to_typ typ) t let add_scope_var v typ t = - { t with scope_vars = A.ScopeVarMap.add v typ t.scope_vars } + { t with scope_vars = A.ScopeVar.Map.add v typ t.scope_vars } let add_scope scope_name ~vars t = - { t with scopes = A.ScopeMap.add scope_name vars t.scopes } + { t with scopes = A.ScopeName.Map.add scope_name vars t.scopes } + + let open_scope scope_name t = + let scope_vars = + A.ScopeVar.Map.union + (fun _ _ -> assert false) + t.scope_vars + (A.ScopeName.Map.find scope_name t.scopes) + in + { t with scope_vars } end let add_pos e ty = Marked.mark (Expr.pos e) ty @@ -371,68 +370,165 @@ and typecheck_expr_top_down : (Expr.format ctx) e in Expr.elocation loc (uf_mark (ast_to_typ ty)) - | A.EStruct (s_name, fmap) -> - let mark = ty_mark (TStruct s_name) in - let str = A.StructMap.find s_name ctx.A.ctx_structs in - let fmap' = - (* This assumes that the fields in fmap and the struct type are already - ensured to be the same *) - A.StructFieldMap.mapi - (fun f_name f_e -> - let f_ty = List.assoc f_name str in - typecheck_expr_top_down ctx env (ast_to_typ f_ty) f_e) - fmap + | A.EStruct { name; fields } -> + let mark = ty_mark (TStruct name) in + let str = A.StructName.Map.find name ctx.A.ctx_structs in + let _check_fields : unit = + let missing_fields, extra_fields = + A.StructField.Map.fold + (fun fld x (remaining, extra) -> + if A.StructField.Map.mem fld remaining then + A.StructField.Map.remove fld remaining, extra + else remaining, A.StructField.Map.add fld x extra) + fields + (str, A.StructField.Map.empty) + in + let errs = + List.map + (fun (f, ty) -> + ( Some (Format.asprintf "Missing field %a" A.StructField.format_t f), + Marked.get_mark ty )) + (A.StructField.Map.bindings missing_fields) + @ List.map + (fun (f, ef) -> + let dup = A.StructField.Map.mem f str in + ( Some + (Format.asprintf "%s field %a" + (if dup then "Duplicate" else "Unknown") + A.StructField.format_t f), + Expr.pos ef )) + (A.StructField.Map.bindings extra_fields) + in + if errs <> [] then + Errors.raise_multispanned_error errs + "Mismatching field definitions for structure %a" A.StructName.format_t + name in - Expr.estruct s_name fmap' mark - | A.EStructAccess (e_struct, f_name, s_name) -> - let mark = - uf_mark - (ast_to_typ - (List.assoc f_name (A.StructMap.find s_name ctx.A.ctx_structs))) + let fields' = + A.StructField.Map.mapi + (fun f_name f_e -> + let f_ty = A.StructField.Map.find f_name str in + typecheck_expr_top_down ctx env (ast_to_typ f_ty) f_e) + fields + in + Expr.estruct name fields' mark + | A.EDStructAccess { e = e_struct; name_opt; field } -> + let t_struct = + match name_opt with + | Some name -> TStruct name + | None -> TAny (Any.fresh ()) in let e_struct' = - typecheck_expr_top_down ctx env (unionfind (TStruct s_name)) e_struct + typecheck_expr_top_down ctx env (unionfind t_struct) e_struct in - Expr.estructaccess e_struct' f_name s_name mark - | A.EEnumInj (e_enum, c_name, e_name) -> - let mark = uf_mark (unionfind (TEnum e_name)) in + let name = + match UnionFind.get (ty e_struct') with + | TStruct name, _ -> name + | TAny _, _ -> + Printf.ksprintf failwith + "Disambiguation failed before reaching field %s" field + | _ -> + Errors.raise_spanned_error (Expr.pos e) + "This is not a structure, cannot access field %s (%a)" field + (format_typ ctx) (ty e_struct') + in + let fld_ty = + let str = + try A.StructName.Map.find name ctx.A.ctx_structs + with Not_found -> + Errors.raise_spanned_error pos_e "No structure %a found" + A.StructName.format_t name + in + let field = + let candidate_structs = + try A.IdentName.Map.find field ctx.ctx_struct_fields + with Not_found -> + Errors.raise_spanned_error context_mark.pos + "Field %s does not belong to structure %a (no structure defines \ + it)" + field A.StructName.format_t name + in + try A.StructName.Map.find name candidate_structs + with Not_found -> + Errors.raise_spanned_error context_mark.pos + "Field %s does not belong to structure %a, but to %a" field + A.StructName.format_t name + (Format.pp_print_list + ~pp_sep:(fun ppf () -> Format.fprintf ppf "@ or@ ") + A.StructName.format_t) + (List.map fst (A.StructName.Map.bindings candidate_structs)) + in + A.StructField.Map.find field str + in + let mark = uf_mark (ast_to_typ fld_ty) in + Expr.edstructaccess e_struct' field (Some name) mark + | A.EStructAccess { e = e_struct; name; field } -> + let fld_ty = + let str = + try A.StructName.Map.find name ctx.A.ctx_structs + with Not_found -> + Errors.raise_spanned_error pos_e "No structure %a found" + A.StructName.format_t name + in + try A.StructField.Map.find field str + with Not_found -> + Errors.raise_multispanned_error + [ + None, pos_e; + ( Some "Structure %a declared here", + Marked.get_mark (A.StructName.get_info name) ); + ] + "Structure %a doesn't define a field %a" A.StructName.format_t name + A.StructField.format_t field + in + let mark = uf_mark (ast_to_typ fld_ty) in + let e_struct' = + typecheck_expr_top_down ctx env (unionfind (TStruct name)) e_struct + in + Expr.estructaccess e_struct' field name mark + | A.EInj { name; cons; e = e_enum } -> + let mark = uf_mark (unionfind (TEnum name)) in let e_enum' = typecheck_expr_top_down ctx env - (ast_to_typ (List.assoc c_name (A.EnumMap.find e_name ctx.A.ctx_enums))) + (ast_to_typ + (A.EnumConstructor.Map.find cons + (A.EnumName.Map.find name ctx.A.ctx_enums))) e_enum in - Expr.eenuminj e_enum' c_name e_name mark - | A.EMatchS (e1, e_name, cases) -> - let cases_ty = A.EnumMap.find e_name ctx.A.ctx_enums in + Expr.einj e_enum' cons name mark + | A.EMatch { e = e1; name; cases } -> + let cases_ty = A.EnumName.Map.find name ctx.A.ctx_enums in let t_ret = unionfind ~pos:e1 (TAny (Any.fresh ())) in let mark = uf_mark t_ret in - let e1' = typecheck_expr_top_down ctx env (unionfind (TEnum e_name)) e1 in + let e1' = typecheck_expr_top_down ctx env (unionfind (TEnum name)) e1 in let cases' = - A.EnumConstructorMap.mapi + A.EnumConstructor.Map.mapi (fun c_name e -> - let c_ty = List.assoc c_name cases_ty in + let c_ty = A.EnumConstructor.Map.find c_name cases_ty in let e_ty = unionfind ~pos:e (TArrow (ast_to_typ c_ty, t_ret)) in typecheck_expr_top_down ctx env e_ty e) cases in - Expr.ematchs e1' e_name cases' mark - | A.EScopeCall (scope_name, fields) -> - let scope_out_struct = A.ScopeMap.find scope_name ctx.ctx_scopes in + Expr.ematch e1' name cases' mark + | A.EScopeCall { scope; args } -> + let scope_out_struct = + (A.ScopeName.Map.find scope ctx.ctx_scopes).out_struct_name + in let mark = uf_mark (unionfind (TStruct scope_out_struct)) in - let vars = A.ScopeMap.find scope_name env.scopes in - let fields' = - A.ScopeVarMap.mapi + let vars = A.ScopeName.Map.find scope env.scopes in + let args' = + A.ScopeVar.Map.mapi (fun name -> typecheck_expr_top_down ctx env - (ast_to_typ (A.ScopeVarMap.find name vars))) - fields + (ast_to_typ (A.ScopeVar.Map.find name vars))) + args in - Expr.escopecall scope_name fields' mark + Expr.escopecall scope args' mark | A.ERaise ex -> Expr.eraise ex context_mark - | A.ECatch (e1, ex, e2) -> - let e1' = typecheck_expr_top_down ctx env tau e1 in - let e2' = typecheck_expr_top_down ctx env tau e2 in - Expr.ecatch e1' ex e2' context_mark + | A.ECatch { body; exn; handler } -> + let body' = typecheck_expr_top_down ctx env tau body in + let handler' = typecheck_expr_top_down ctx env tau handler in + Expr.ecatch body' exn handler' context_mark | A.EVar v -> let tau' = match Env.get env v with @@ -443,62 +539,23 @@ and typecheck_expr_top_down : in Expr.evar (Var.translate v) (uf_mark tau') | A.ELit lit -> Expr.elit lit (ty_mark (lit_type lit)) - | A.ETuple (es, None) -> + | A.ETuple es -> let tys = List.map (fun _ -> unionfind (TAny (Any.fresh ()))) es in let mark = uf_mark (unionfind (TTuple tys)) in let es' = List.map2 (typecheck_expr_top_down ctx env) tys es in - Expr.etuple es' None mark - | A.ETuple (es, Some s_name) -> - let tys = - List.map - (fun (_, ty) -> ast_to_typ ty) - (A.StructMap.find s_name ctx.A.ctx_structs) + Expr.etuple es' mark + | A.ETupleAccess { e = e1; index; size } -> + if index >= size then + Errors.raise_spanned_error (Expr.pos e) + "Tuple access out of bounds (%d/%d)" index size; + let tuple_ty = + TTuple + (List.init size (fun n -> + if n = index then tau else unionfind ~pos:e1 (TAny (Any.fresh ())))) in - let mark = uf_mark (unionfind (TStruct s_name)) in - let es' = List.map2 (typecheck_expr_top_down ctx env) tys es in - Expr.etuple es' (Some s_name) mark - | A.ETupleAccess (e1, n, s, typs) -> - let typs' = List.map ast_to_typ typs in - let tuple_ty = match s with None -> TTuple typs' | Some s -> TStruct s in - let t1n = - try List.nth typs' n - with Not_found -> - Errors.raise_spanned_error (Expr.pos e1) - "Expression should have a tuple type with at least %d elements but \ - only has %d" - n (List.length typs) - in - let mark = uf_mark t1n in - let e1' = typecheck_expr_top_down ctx env (unionfind tuple_ty) e1 in - Expr.etupleaccess e1' n s typs mark - | A.EInj (e1, n, e_name, ts) -> - let ts' = List.map ast_to_typ ts in - let ts_n = - try List.nth ts' n - with Not_found -> - Errors.raise_spanned_error (Expr.pos e) - "Expression should have a sum type with at least %d cases but only \ - has %d" - n (List.length ts) - in - let mark = uf_mark (unionfind (TEnum e_name)) in - let e1' = typecheck_expr_top_down ctx env ts_n e1 in - Expr.einj e1' n e_name ts mark - | A.EMatch (e1, es, e_name) -> - let es' = - List.map2 - (fun es' (_, c_ty) -> - typecheck_expr_top_down ctx env - (unionfind ~pos:es' (TArrow (ast_to_typ c_ty, tau))) - es') - es - (A.EnumMap.find e_name ctx.ctx_enums) - in - let e1' = - typecheck_expr_top_down ctx env (unionfind ~pos:e1 (TEnum e_name)) e1 - in - Expr.ematch e1' es' e_name context_mark - | A.EAbs (binder, t_args) -> + let e1' = typecheck_expr_top_down ctx env (unionfind ~pos:e1 tuple_ty) e1 in + Expr.etupleaccess e1' index size context_mark + | A.EAbs { binder; tys = t_args } -> if Bindlib.mbinder_arity binder <> List.length t_args then Errors.raise_spanned_error (Expr.pos e) "function has %d variables but was supplied %d types" @@ -513,6 +570,7 @@ and typecheck_expr_top_down : tau_args t_ret in let mark = uf_mark t_func in + assert (List.for_all all_resolved tau_args); let xs, body = Bindlib.unmbind binder in let xs' = Array.map Var.translate xs in let env = @@ -522,26 +580,94 @@ and typecheck_expr_top_down : in let body' = typecheck_expr_top_down ctx env t_ret body in let binder' = Bindlib.bind_mvar xs' (Expr.Box.lift body') in - Expr.eabs binder' t_args mark - | A.EApp (e1, args) -> + Expr.eabs binder' (List.map typ_to_ast tau_args) mark + | A.EApp { f = (EOp { op; tys }, _) as e1; args } -> + let t_args = List.map ast_to_typ tys in + let t_func = + List.fold_right + (fun t_arg acc -> unionfind (TArrow (t_arg, acc))) + t_args tau + in + let e1', args' = + Operator.kind_dispatch op + ~polymorphic:(fun _ -> + (* Type the operator first, then right-to-left: polymorphic operators + are required to allow the resolution of all type variables this + way *) + let e1' = typecheck_expr_top_down ctx env t_func e1 in + let args' = + List.rev_map2 + (typecheck_expr_top_down ctx env) + (List.rev t_args) (List.rev args) + in + e1', args') + ~overloaded:(fun _ -> + (* Typing the arguments first is required to resolve the operator *) + let args' = List.map2 (typecheck_expr_top_down ctx env) t_args args in + let e1' = typecheck_expr_top_down ctx env t_func e1 in + e1', args') + ~monomorphic:(fun _ -> + (* Here it doesn't matter but may affect the error messages *) + let e1' = typecheck_expr_top_down ctx env t_func e1 in + let args' = List.map2 (typecheck_expr_top_down ctx env) t_args args in + e1', args') + ~resolved:(fun _ -> + (* This case should not fail *) + let e1' = typecheck_expr_top_down ctx env t_func e1 in + let args' = List.map2 (typecheck_expr_top_down ctx env) t_args args in + e1', args') + in + Expr.eapp e1' args' context_mark + | A.EApp { f = e1; args } -> + (* Here we type the arguments first (in order), to ensure we know the types + of the arguments if [f] is [EAbs] before disambiguation. This is also the + right order for the [let-in] form. *) let t_args = List.map (fun _ -> unionfind (TAny (Any.fresh ()))) args in let t_func = List.fold_right (fun t_arg acc -> unionfind (TArrow (t_arg, acc))) t_args tau in - let e1' = typecheck_expr_top_down ctx env t_func e1 in let args' = List.map2 (typecheck_expr_top_down ctx env) t_args args in + let e1' = typecheck_expr_top_down ctx env t_func e1 in Expr.eapp e1' args' context_mark - | A.EOp op -> Expr.eop op (uf_mark (op_type (Marked.mark pos_e op))) - | A.EDefault (excepts, just, cons) -> + | A.EOp { op; tys } -> + let tys' = List.map ast_to_typ tys in + let t_ret = unionfind (TAny (Any.fresh ())) in + let t_func = + List.fold_right + (fun t_arg acc -> unionfind (TArrow (t_arg, acc))) + tys' t_ret + in + unify ctx e t_func tau; + let tys, mark = + Operator.kind_dispatch op + ~polymorphic:(fun op -> + tys, uf_mark (polymorphic_op_type (Marked.mark pos_e op))) + ~monomorphic:(fun op -> + let mark = + uf_mark + (ast_to_typ (Operator.monomorphic_type (Marked.mark pos_e op))) + in + List.map typ_to_ast tys', mark) + ~overloaded:(fun op -> + unify ctx e t_ret (resolve_overload_ret_type ctx e op tys'); + List.map typ_to_ast tys', { uf = t_func; pos = pos_e }) + ~resolved:(fun op -> + let mark = + uf_mark (ast_to_typ (Operator.resolved_type (Marked.mark pos_e op))) + in + List.map typ_to_ast tys', mark) + in + Expr.eop op tys mark + | A.EDefault { excepts; just; cons } -> let cons' = typecheck_expr_top_down ctx env tau cons in let just' = typecheck_expr_top_down ctx env (unionfind ~pos:just (TLit TBool)) just in let excepts' = List.map (typecheck_expr_top_down ctx env tau) excepts in Expr.edefault excepts' just' cons' context_mark - | A.EIfThenElse (cond, et, ef) -> + | A.EIfThenElse { cond; etrue = et; efalse = ef } -> let et' = typecheck_expr_top_down ctx env tau et in let ef' = typecheck_expr_top_down ctx env tau ef in let cond' = @@ -554,7 +680,7 @@ and typecheck_expr_top_down : typecheck_expr_top_down ctx env (unionfind ~pos:e1 (TLit TBool)) e1 in Expr.eassert e1' mark - | A.ErrorOnEmpty e1 -> + | A.EErrorOnEmpty e1 -> let e1' = typecheck_expr_top_down ctx env tau e1 in Expr.eerroronempty e1' context_mark | A.EArray es -> @@ -579,19 +705,27 @@ let wrap_expr ctx f e = let get_ty_mark { uf; pos } = A.Typed { ty = typ_to_ast uf; pos } -(* Infer the type of an expression *) -let expr +let expr_raw (type a) (ctx : A.decl_ctx) ?(env = Env.empty) ?(typ : A.typ option) - (e : (a, 'm) A.gexpr) : (a, A.typed A.mark) A.boxed_gexpr = + (e : (a, 'm) A.gexpr) : (a, mark) A.gexpr = let fty = match typ with | None -> typecheck_expr_bottom_up ctx env | Some typ -> typecheck_expr_top_down ctx env (ast_to_typ typ) in - Expr.map_marks ~f:get_ty_mark (wrap_expr ctx fty e) + wrap_expr ctx fty e + +let check_expr ctx ?env ?typ e = + Expr.map_marks + ~f:(fun { pos; _ } -> A.Untyped { pos }) + (expr_raw ctx ?env ?typ e) + +(* Infer the type of an expression *) +let expr ctx ?env ?typ e = + Expr.map_marks ~f:get_ty_mark (expr_raw ctx ?env ?typ e) let rec scope_body_expr ctx env ty_out body_expr = match body_expr with diff --git a/compiler/shared_ast/typing.mli b/compiler/shared_ast/typing.mli index 1329362e..32460428 100644 --- a/compiler/shared_ast/typing.mli +++ b/compiler/shared_ast/typing.mli @@ -25,7 +25,8 @@ module Env : sig val empty : 'e t val add_var : 'e Var.t -> typ -> 'e t -> 'e t val add_scope_var : ScopeVar.t -> typ -> 'e t -> 'e t - val add_scope : ScopeName.t -> vars:typ ScopeVarMap.t -> 'e t -> 'e t + val add_scope : ScopeName.t -> vars:typ ScopeVar.Map.t -> 'e t -> 'e t + val open_scope : ScopeName.t -> 'e t -> 'e t end val expr : @@ -43,6 +44,17 @@ val expr : filling the gaps ([TAny]) if any. Use [Expr.untype] first if this is not what you want. *) +val check_expr : + decl_ctx -> + ?env:'e Env.t -> + ?typ:typ -> + (('a, 'm mark) gexpr as 'e) -> + ('a, untyped mark) boxed_gexpr +(** Same as [expr], but doesn't annotate the returned expression. Equivalent to + [Typing.expr |> Expr.untype], but more efficient. This can be useful for + type-checking and disambiguation (some AST nodes are updated with missing + information, e.g. any [TAny] appearing in the AST is replaced) *) + val program : ('a, 'm mark) gexpr program -> ('a, typed mark) gexpr program (** Typing on whole programs (as defined in Shared_ast.program, i.e. for the later dcalc/lcalc stages. diff --git a/compiler/surface/ast.ml b/compiler/surface/ast.ml index 6ca03fd6..61b3d928 100644 --- a/compiler/surface/ast.ml +++ b/compiler/surface/ast.ml @@ -19,7 +19,7 @@ [@@@ocaml.warning "-7"] -open Utils +open Catala_utils (** {1 Visitor classes for programs} *) (** To allow for quick traversal and/or modification of this AST structure, we @@ -30,33 +30,49 @@ open Utils (** {1 Type definitions} *) -type constructor = (string[@opaque]) +type uident = (string[@opaque]) [@@deriving - visitors { variety = "map"; name = "constructor_map"; nude = true }, - visitors { variety = "iter"; name = "constructor_iter"; nude = true }] + visitors { variety = "map"; name = "uident_map"; nude = true }, + visitors { variety = "iter"; name = "uident_iter"; nude = true }] (** Constructors are CamelCase *) -type ident = (string[@opaque]) +type lident = (string[@opaque]) [@@deriving - visitors { variety = "map"; name = "ident_map"; nude = true }, - visitors { variety = "iter"; name = "ident_iter"; nude = true }] + visitors { variety = "map"; name = "lident_map"; nude = true }, + visitors { variety = "iter"; name = "lident_iter"; nude = true }] (** Idents are snake_case *) -type qident = ident Marked.pos list +type path = uident Marked.pos list [@@deriving visitors { variety = "map"; - ancestors = ["Marked.pos_map"; "ident_map"]; - name = "qident_map"; + ancestors = ["Marked.pos_map"; "uident_map"]; + name = "path_map"; }, visitors { variety = "iter"; - ancestors = ["Marked.pos_iter"; "ident_iter"]; - name = "qident_iter"; + ancestors = ["Marked.pos_iter"; "uident_iter"]; + name = "path_iter"; }] +type scope_var = lident Marked.pos list +[@@deriving + visitors + { + variety = "map"; + ancestors = ["Marked.pos_map"; "lident_map"]; + name = "scope_var_map"; + }, + visitors + { + variety = "iter"; + ancestors = ["Marked.pos_iter"; "lident_iter"]; + name = "scope_var_iter"; + }] +(** [foo.bar] in binding position: used to specify variables of subscopes *) + type primitive_typ = | Integer | Decimal @@ -65,18 +81,18 @@ type primitive_typ = | Duration | Text | Date - | Named of constructor + | Named of path * uident Marked.pos [@@deriving visitors { variety = "map"; - ancestors = ["constructor_map"]; + ancestors = ["path_map"; "uident_map"]; name = "primitive_typ_map"; }, visitors { variety = "iter"; - ancestors = ["constructor_iter"]; + ancestors = ["path_iter"; "uident_iter"]; name = "primitive_typ_iter"; }] @@ -154,25 +170,25 @@ and naked_typ = Base of base_typ | Func of func_typ }] type struct_decl_field = { - struct_decl_field_name : ident Marked.pos; + struct_decl_field_name : lident Marked.pos; struct_decl_field_typ : typ; } [@@deriving visitors { variety = "map"; - ancestors = ["typ_map"; "ident_map"]; + ancestors = ["typ_map"; "lident_map"]; name = "struct_decl_field_map"; }, visitors { variety = "iter"; - ancestors = ["typ_iter"; "ident_iter"]; + ancestors = ["typ_iter"; "lident_iter"]; name = "struct_decl_field_iter"; }] type struct_decl = { - struct_decl_name : constructor Marked.pos; + struct_decl_name : uident Marked.pos; struct_decl_fields : struct_decl_field Marked.pos list; } [@@deriving @@ -190,7 +206,7 @@ type struct_decl = { }] type enum_decl_case = { - enum_decl_case_name : constructor Marked.pos; + enum_decl_case_name : uident Marked.pos; enum_decl_case_typ : typ option; } [@@deriving @@ -210,7 +226,7 @@ type enum_decl_case = { }] type enum_decl = { - enum_decl_name : constructor Marked.pos; + enum_decl_name : uident Marked.pos; enum_decl_cases : enum_decl_case Marked.pos list; } [@@deriving @@ -230,23 +246,23 @@ type enum_decl = { }] type match_case_pattern = - (constructor Marked.pos option * constructor Marked.pos) list - * ident Marked.pos option + (path * uident Marked.pos) Marked.pos list * lident Marked.pos option [@@deriving visitors { variety = "map"; - ancestors = ["ident_map"; "constructor_map"; "Marked.pos_map"]; + ancestors = ["path_map"; "lident_map"; "uident_map"; "Marked.pos_map"]; name = "match_case_pattern_map"; }, visitors { variety = "iter"; - ancestors = ["ident_iter"; "constructor_iter"; "Marked.pos_iter"]; + ancestors = + ["path_iter"; "lident_iter"; "uident_iter"; "Marked.pos_iter"]; name = "match_case_pattern_iter"; }] -type op_kind = KInt | KDec | KMoney | KDate | KDuration +type op_kind = KPoly | KInt | KDec | KMoney | KDate | KDuration [@@deriving visitors { variety = "map"; name = "op_kind_map"; nude = true }, visitors { variety = "iter"; name = "op_kind_iter"; nude = true }] @@ -301,16 +317,14 @@ type unop = Not | Minus of op_kind type builtin_expression = | Cardinal - | IntToDec - | MoneyToDec - | DecToMoney + | ToDecimal + | ToMoney | GetDay | GetMonth | GetYear | LastDayOfMonth | FirstDayOfMonth - | RoundMoney - | RoundDecimal + | Round [@@deriving visitors { variety = "map"; name = "builtin_expression_map"; nude = true }, visitors { variety = "iter"; name = "builtin_expression_iter"; nude = true }] @@ -385,59 +399,54 @@ type literal = name = "literal_iter"; }] -type aggregate_func = - | AggregateSum of primitive_typ - | AggregateCount - | AggregateExtremum of bool * primitive_typ * expression Marked.pos - | AggregateArgExtremum of bool * primitive_typ * expression Marked.pos - -and collection_op = - | Exists - | Forall - | Aggregate of aggregate_func - | Map - | Filter +type collection_op = + | Exists of { predicate : lident Marked.pos * expression } + | Forall of { predicate : lident Marked.pos * expression } + | Map of { f : lident Marked.pos * expression } + | Filter of { f : lident Marked.pos * expression } + | AggregateSum of { typ : primitive_typ } + (* it would be nice to remove the need for specifying the type here like for + extremums, but we need an additionl overload for "neutral element for + addition across types" *) + | AggregateExtremum of { max : bool; default : expression } + | AggregateArgExtremum of { + max : bool; + default : expression; + f : lident Marked.pos * expression; + } and explicit_match_case = { match_case_pattern : match_case_pattern Marked.pos; - match_case_expr : expression Marked.pos; + match_case_expr : expression; } -and match_case = - | WildCard of expression Marked.pos - | MatchCase of explicit_match_case - +and match_case = WildCard of expression | MatchCase of explicit_match_case and match_cases = match_case Marked.pos list +and expression = naked_expression Marked.pos -and expression = - | MatchWith of expression Marked.pos * match_cases Marked.pos - | IfThenElse of - expression Marked.pos * expression Marked.pos * expression Marked.pos - | Binop of binop Marked.pos * expression Marked.pos * expression Marked.pos - | Unop of unop Marked.pos * expression Marked.pos - | CollectionOp of - collection_op Marked.pos - * ident Marked.pos - * expression Marked.pos - * expression Marked.pos - | MemCollection of expression Marked.pos * expression Marked.pos - | TestMatchCase of expression Marked.pos * match_case_pattern Marked.pos - | FunCall of expression Marked.pos * expression Marked.pos +and naked_expression = + | Paren of expression + | MatchWith of expression * match_cases Marked.pos + | IfThenElse of expression * expression * expression + | Binop of binop Marked.pos * expression * expression + | Unop of unop Marked.pos * expression + | CollectionOp of collection_op * expression + | MemCollection of expression * expression + | TestMatchCase of expression * match_case_pattern Marked.pos + | FunCall of expression * expression | ScopeCall of - constructor Marked.pos * (ident Marked.pos * expression Marked.pos) list - | LetIn of ident Marked.pos * expression Marked.pos * expression Marked.pos + (path * uident Marked.pos) Marked.pos + * (lident Marked.pos * expression) list + | LetIn of lident Marked.pos * expression * expression | Builtin of builtin_expression | Literal of literal - | EnumInject of - constructor Marked.pos option - * constructor Marked.pos - * expression Marked.pos option + | EnumInject of (path * uident Marked.pos) Marked.pos * expression option | StructLit of - constructor Marked.pos * (ident Marked.pos * expression Marked.pos) list - | ArrayLit of expression Marked.pos list - | Ident of ident - | Dotted of - expression Marked.pos * constructor Marked.pos option * ident Marked.pos + (path * uident Marked.pos) Marked.pos + * (lident Marked.pos * expression) list + | ArrayLit of expression list + | Ident of path * lident Marked.pos + | Dotted of expression * (path * lident Marked.pos) Marked.pos (** Dotted is for both struct field projection and sub-scope variables *) [@@deriving visitors @@ -472,66 +481,66 @@ and expression = type exception_to = | NotAnException | UnlabeledException - | ExceptionToLabel of ident Marked.pos + | ExceptionToLabel of lident Marked.pos [@@deriving visitors { variety = "map"; - ancestors = ["ident_map"; "Marked.pos_map"]; + ancestors = ["lident_map"; "Marked.pos_map"]; name = "exception_to_map"; }, visitors { variety = "iter"; - ancestors = ["ident_iter"; "Marked.pos_iter"]; + ancestors = ["lident_iter"; "Marked.pos_iter"]; name = "exception_to_iter"; }] type rule = { - rule_label : ident Marked.pos option; + rule_label : lident Marked.pos option; rule_exception_to : exception_to; - rule_parameter : ident Marked.pos option; - rule_condition : expression Marked.pos option; - rule_name : qident Marked.pos; - rule_id : Desugared.Ast.RuleName.t; [@opaque] + rule_parameter : lident Marked.pos option; + rule_condition : expression option; + rule_name : scope_var Marked.pos; + rule_id : Shared_ast.RuleName.t; [@opaque] rule_consequence : (bool[@opaque]) Marked.pos; - rule_state : ident Marked.pos option; + rule_state : lident Marked.pos option; } [@@deriving visitors { variety = "map"; - ancestors = ["expression_map"; "qident_map"; "exception_to_map"]; + ancestors = ["expression_map"; "scope_var_map"; "exception_to_map"]; name = "rule_map"; }, visitors { variety = "iter"; - ancestors = ["expression_iter"; "qident_iter"; "exception_to_iter"]; + ancestors = ["expression_iter"; "scope_var_iter"; "exception_to_iter"]; name = "rule_iter"; }] type definition = { - definition_label : ident Marked.pos option; + definition_label : lident Marked.pos option; definition_exception_to : exception_to; - definition_name : qident Marked.pos; - definition_parameter : ident Marked.pos option; - definition_condition : expression Marked.pos option; - definition_id : Desugared.Ast.RuleName.t; [@opaque] - definition_expr : expression Marked.pos; - definition_state : ident Marked.pos option; + definition_name : scope_var Marked.pos; + definition_parameter : lident Marked.pos option; + definition_condition : expression option; + definition_id : Shared_ast.RuleName.t; [@opaque] + definition_expr : expression; + definition_state : lident Marked.pos option; } [@@deriving visitors { variety = "map"; - ancestors = ["expression_map"; "qident_map"; "exception_to_map"]; + ancestors = ["expression_map"; "scope_var_map"; "exception_to_map"]; name = "definition_map"; }, visitors { variety = "iter"; - ancestors = ["expression_iter"; "qident_iter"; "exception_to_iter"]; + ancestors = ["expression_iter"; "scope_var_iter"; "exception_to_iter"]; name = "definition_iter"; }] @@ -541,28 +550,26 @@ type variation_typ = Increasing | Decreasing visitors { variety = "iter"; name = "variation_typ_iter" }] type meta_assertion = - | FixedBy of qident Marked.pos * ident Marked.pos + | FixedBy of scope_var Marked.pos * lident Marked.pos | VariesWith of - qident Marked.pos - * expression Marked.pos - * variation_typ Marked.pos option + scope_var Marked.pos * expression * variation_typ Marked.pos option [@@deriving visitors { variety = "map"; - ancestors = ["variation_typ_map"; "qident_map"; "expression_map"]; + ancestors = ["variation_typ_map"; "scope_var_map"; "expression_map"]; name = "meta_assertion_map"; }, visitors { variety = "iter"; - ancestors = ["variation_typ_iter"; "qident_iter"; "expression_iter"]; + ancestors = ["variation_typ_iter"; "scope_var_iter"; "expression_iter"]; name = "meta_assertion_iter"; }] type assertion = { - assertion_condition : expression Marked.pos option; - assertion_content : expression Marked.pos; + assertion_condition : expression option; + assertion_content : expression; } [@@deriving visitors @@ -601,8 +608,8 @@ type scope_use_item = }] type scope_use = { - scope_use_condition : expression Marked.pos option; - scope_use_name : constructor Marked.pos; + scope_use_condition : expression option; + scope_use_name : uident Marked.pos; scope_use_items : scope_use_item Marked.pos list; } [@@deriving @@ -643,8 +650,8 @@ type scope_decl_context_io = { }] type scope_decl_context_scope = { - scope_decl_context_scope_name : ident Marked.pos; - scope_decl_context_scope_sub_scope : constructor Marked.pos; + scope_decl_context_scope_name : lident Marked.pos; + scope_decl_context_scope_sub_scope : uident Marked.pos; scope_decl_context_scope_attribute : scope_decl_context_io; } [@@deriving @@ -653,8 +660,8 @@ type scope_decl_context_scope = { variety = "map"; ancestors = [ - "ident_map"; - "constructor_map"; + "lident_map"; + "uident_map"; "scope_decl_context_io_map"; "Marked.pos_map"; ]; @@ -665,8 +672,8 @@ type scope_decl_context_scope = { variety = "iter"; ancestors = [ - "ident_iter"; - "constructor_iter"; + "lident_iter"; + "uident_iter"; "scope_decl_context_io_iter"; "Marked.pos_iter"; ]; @@ -674,22 +681,22 @@ type scope_decl_context_scope = { }] type scope_decl_context_data = { - scope_decl_context_item_name : ident Marked.pos; + scope_decl_context_item_name : lident Marked.pos; scope_decl_context_item_typ : typ; scope_decl_context_item_attribute : scope_decl_context_io; - scope_decl_context_item_states : ident Marked.pos list; + scope_decl_context_item_states : lident Marked.pos list; } [@@deriving visitors { variety = "map"; - ancestors = ["typ_map"; "scope_decl_context_io_map"; "ident_map"]; + ancestors = ["typ_map"; "scope_decl_context_io_map"; "lident_map"]; name = "scope_decl_context_data_map"; }, visitors { variety = "iter"; - ancestors = ["typ_iter"; "scope_decl_context_io_iter"; "ident_iter"]; + ancestors = ["typ_iter"; "scope_decl_context_io_iter"; "lident_iter"]; name = "scope_decl_context_data_iter"; }] @@ -713,7 +720,7 @@ type scope_decl_context_item = }] type scope_decl = { - scope_decl_name : constructor Marked.pos; + scope_decl_name : uident Marked.pos; scope_decl_context : scope_decl_context_item Marked.pos list; } [@@deriving diff --git a/compiler/surface/dune b/compiler/surface/dune index 2184fb8a..7f39f538 100644 --- a/compiler/surface/dune +++ b/compiler/surface/dune @@ -2,15 +2,14 @@ (name surface) (public_name catala.surface) (libraries - utils + catala_utils menhirLib sedlex re - desugared - scopelang zarith zarith_stubs_js - dates_calc) + dates_calc + shared_ast) (preprocess (pps sedlex.ppx visitors.ppx))) diff --git a/compiler/surface/fill_positions.ml b/compiler/surface/fill_positions.ml index f8d3db55..6fa2ec94 100644 --- a/compiler/surface/fill_positions.ml +++ b/compiler/surface/fill_positions.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils let fill_pos_with_legislative_info (p : Ast.program) : Ast.program = let visitor = diff --git a/compiler/surface/lexer.cppo.ml b/compiler/surface/lexer.cppo.ml index 1dd3d232..cd075f67 100644 --- a/compiler/surface/lexer.cppo.ml +++ b/compiler/surface/lexer.cppo.ml @@ -14,7 +14,7 @@ open Tokens open Sedlexing -open Utils +open Catala_utils module L = Lexer_common module R = Re.Pcre @@ -173,6 +173,9 @@ module R = Re.Pcre #ifndef MR_IN #define MR_IN MS_IN #endif +#ifndef MR_AMONG + #define MR_AMONG MS_AMONG +#endif #ifndef MR_SUCH #define MR_SUCH MS_SUCH #endif @@ -197,14 +200,11 @@ module R = Re.Pcre #ifndef MR_MINIMUM #define MR_MINIMUM MS_MINIMUM #endif -#ifndef MR_FILTER - #define MR_FILTER MS_FILTER +#ifndef MR_IS + #define MR_IS MS_IS #endif -#ifndef MR_MAP - #define MR_MAP MS_MAP -#endif -#ifndef MR_INIT - #define MR_INIT MS_INIT +#ifndef MR_EMPTY + #define MR_EMPTY MS_EMPTY #endif #ifndef MR_CARDINAL #define MR_CARDINAL MS_CARDINAL @@ -224,20 +224,8 @@ module R = Re.Pcre #ifndef MR_FALSE #define MR_FALSE MS_FALSE #endif -#ifndef MR_IntToDec - #define MR_IntToDec MS_IntToDec -#endif -#ifndef MR_MoneyToDec - #define MR_MoneyToDec MS_MoneyToDec -#endif -#ifndef MR_DecToMoney - #define MR_DecToMoney MS_DecToMoney -#endif -#ifndef MR_RoundMoney - #define MR_RoundMoney MS_RoundMoney -#endif -#ifndef MR_RoundDecimal - #define MR_RoundDecimal MS_RoundDecimal +#ifndef MR_Round + #define MR_Round MS_Round #endif #ifndef MR_GetDay #define MR_GetDay MS_GetDay @@ -263,6 +251,9 @@ module R = Re.Pcre #ifndef MR_INTERNAL #define MR_INTERNAL MS_INTERNAL #endif +#ifndef MR_MONEY_OP_SUFFIX + #define MR_MONEY_OP_SUFFIX MS_MONEY_OP_SUFFIX +#endif let token_list : (string * token) list = [ @@ -314,6 +305,7 @@ let token_list : (string * token) list = (MS_LET, LET); (MS_EXISTS, EXISTS); (MS_IN, IN); + (MS_AMONG, AMONG); (MS_SUCH, SUCH); (MS_THAT, THAT); (MS_AND, AND); @@ -322,9 +314,8 @@ let token_list : (string * token) list = (MS_NOT, NOT); (MS_MAXIMUM, MAXIMUM); (MS_MINIMUM, MINIMUM); - (MS_FILTER, FILTER); - (MS_MAP, MAP); - (MS_INIT, INIT); + (MS_IS, IS); + (MS_EMPTY, EMPTY); (MS_CARDINAL, CARDINAL); (MS_YEAR, YEAR); (MS_MONTH, MONTH); @@ -341,16 +332,12 @@ let token_list : (string * token) list = let lex_builtin (s : string) : Ast.builtin_expression option = let lexbuf = Utf8.from_string s in match%sedlex lexbuf with - | MR_IntToDec, eof -> Some IntToDec - | MR_DecToMoney, eof -> Some DecToMoney - | MR_MoneyToDec, eof -> Some MoneyToDec + | MR_Round, eof -> Some Round | MR_GetDay, eof -> Some GetDay | MR_GetMonth, eof -> Some GetMonth | MR_GetYear, eof -> Some GetYear | MR_FirstDayOfMonth -> Some FirstDayOfMonth | MR_LastDayOfMonth -> Some LastDayOfMonth - | MR_RoundMoney, eof -> Some RoundMoney - | MR_RoundDecimal, eof -> Some RoundDecimal | _ -> None (** Regexp matching any digit character. @@ -365,6 +352,18 @@ let space_plus = [%sedlex.regexp? Plus white_space] (** Regexp matching white space but not newlines *) let hspace = [%sedlex.regexp? Sub (white_space, Chars "\n\r")] +(** Operator explicit typing suffix chars *) +let op_kind_re = [%sedlex.regexp? "" | MR_MONEY_OP_SUFFIX | Chars "!.@^"] + +let op_kind = function + | "" -> Ast.KPoly + | "!" -> Ast.KInt + | "." -> Ast.KDec + | MS_MONEY_OP_SUFFIX -> Ast.KMoney + | "@" -> Ast.KDate + | "^" -> Ast.KDuration + | _ -> invalid_arg "op_kind" + (** Main lexing function used in code blocks *) let rec lex_code (lexbuf : lexbuf) : token = let prev_lexeme = Utf8.lexeme lexbuf in @@ -535,6 +534,9 @@ let rec lex_code (lexbuf : lexbuf) : token = | MR_IN -> L.update_acc lexbuf; IN + | MR_AMONG -> + L.update_acc lexbuf; + AMONG | MR_SUCH -> L.update_acc lexbuf; SUCH @@ -559,15 +561,12 @@ let rec lex_code (lexbuf : lexbuf) : token = | MR_MINIMUM -> L.update_acc lexbuf; MINIMUM - | MR_FILTER -> + | MR_IS -> L.update_acc lexbuf; - FILTER - | MR_MAP -> + IS + | MR_EMPTY -> L.update_acc lexbuf; - MAP - | MR_INIT -> - L.update_acc lexbuf; - INIT + EMPTY | MR_CARDINAL -> L.update_acc lexbuf; CARDINAL @@ -629,117 +628,38 @@ let rec lex_code (lexbuf : lexbuf) : token = L.update_acc lexbuf; DECIMAL_LITERAL (dec_parts 1, dec_parts 2) - | "<=@" -> + | "<=", op_kind_re -> + let k = op_kind (String.remove_prefix ~prefix:"<=" (Utf8.lexeme lexbuf)) in L.update_acc lexbuf; - LESSER_EQUAL_DATE - | "<@" -> + LESSER_EQUAL k + | "<", op_kind_re -> + let k = op_kind (String.remove_prefix ~prefix:"<" (Utf8.lexeme lexbuf)) in L.update_acc lexbuf; - LESSER_DATE - | ">=@" -> + LESSER k + | ">=", op_kind_re -> + let k = op_kind (String.remove_prefix ~prefix:">=" (Utf8.lexeme lexbuf)) in L.update_acc lexbuf; - GREATER_EQUAL_DATE - | ">@" -> + GREATER_EQUAL k + | ">", op_kind_re -> + let k = op_kind (String.remove_prefix ~prefix:">" (Utf8.lexeme lexbuf)) in L.update_acc lexbuf; - GREATER_DATE - | "-@" -> + GREATER k + | "-", op_kind_re -> + let k = op_kind (String.remove_prefix ~prefix:"-" (Utf8.lexeme lexbuf)) in L.update_acc lexbuf; - MINUSDATE - | "+@" -> + MINUS k + | "+", op_kind_re -> + let k = op_kind (String.remove_prefix ~prefix:"+" (Utf8.lexeme lexbuf)) in L.update_acc lexbuf; - PLUSDATE - | "<=^" -> + PLUS k + | "*", op_kind_re -> + let k = op_kind (String.remove_prefix ~prefix:"*" (Utf8.lexeme lexbuf)) in L.update_acc lexbuf; - LESSER_EQUAL_DURATION - | "<^" -> + MULT k + | '/', op_kind_re -> + let k = op_kind (String.remove_prefix ~prefix:"/" (Utf8.lexeme lexbuf)) in L.update_acc lexbuf; - LESSER_DURATION - | ">=^" -> - L.update_acc lexbuf; - GREATER_EQUAL_DURATION - | ">^" -> - L.update_acc lexbuf; - GREATER_DURATION - | "+^" -> - L.update_acc lexbuf; - PLUSDURATION - | "-^" -> - L.update_acc lexbuf; - MINUSDURATION - | "*^" -> - L.update_acc lexbuf; - MULDURATION - | "<=", MR_MONEY_OP_SUFFIX -> - L.update_acc lexbuf; - LESSER_EQUAL_MONEY - | '<', MR_MONEY_OP_SUFFIX -> - L.update_acc lexbuf; - LESSER_MONEY - | ">=", MR_MONEY_OP_SUFFIX -> - L.update_acc lexbuf; - GREATER_EQUAL_MONEY - | '>', MR_MONEY_OP_SUFFIX -> - L.update_acc lexbuf; - GREATER_MONEY - | '+', MR_MONEY_OP_SUFFIX -> - L.update_acc lexbuf; - PLUSMONEY - | '-', MR_MONEY_OP_SUFFIX -> - L.update_acc lexbuf; - MINUSMONEY - | '*', MR_MONEY_OP_SUFFIX -> - L.update_acc lexbuf; - MULTMONEY - | '/', MR_MONEY_OP_SUFFIX -> - L.update_acc lexbuf; - DIVMONEY - | "<=." -> - L.update_acc lexbuf; - LESSER_EQUAL_DEC - | "<." -> - L.update_acc lexbuf; - LESSER_DEC - | ">=." -> - L.update_acc lexbuf; - GREATER_EQUAL_DEC - | ">." -> - L.update_acc lexbuf; - GREATER_DEC - | "+." -> - L.update_acc lexbuf; - PLUSDEC - | "-." -> - L.update_acc lexbuf; - MINUSDEC - | "*." -> - L.update_acc lexbuf; - MULTDEC - | "/." -> - L.update_acc lexbuf; - DIVDEC - | "<=" -> - L.update_acc lexbuf; - LESSER_EQUAL - | '<' -> - L.update_acc lexbuf; - LESSER - | ">=" -> - L.update_acc lexbuf; - GREATER_EQUAL - | '>' -> - L.update_acc lexbuf; - GREATER - | '+' -> - L.update_acc lexbuf; - PLUS - | '-' -> - L.update_acc lexbuf; - MINUS - | '*' -> - L.update_acc lexbuf; - MULT - | '/' -> - L.update_acc lexbuf; - DIV + DIV k | "!=" -> L.update_acc lexbuf; NOT_EQUAL @@ -757,19 +677,19 @@ let rec lex_code (lexbuf : lexbuf) : token = RPAREN | '{' -> L.update_acc lexbuf; - LBRACKET + LBRACE | '}' -> L.update_acc lexbuf; - RBRACKET + RBRACE | '[' -> L.update_acc lexbuf; - LSQUARE + LBRACKET | ']' -> L.update_acc lexbuf; - RSQUARE + RBRACKET | '|' -> L.update_acc lexbuf; - VERTICAL + BAR | ':' -> L.update_acc lexbuf; COLON @@ -788,11 +708,11 @@ let rec lex_code (lexbuf : lexbuf) : token = | uppercase, Star (uppercase | lowercase | digit | '_' | '\'') -> (* Name of constructor *) L.update_acc lexbuf; - CONSTRUCTOR (Utf8.lexeme lexbuf) + UIDENT (Utf8.lexeme lexbuf) | lowercase, Star (lowercase | uppercase | digit | '_' | '\'') -> (* Name of variable *) L.update_acc lexbuf; - IDENT (Utf8.lexeme lexbuf) + LIDENT (Utf8.lexeme lexbuf) | Opt '-', Plus digit -> (* Integer literal*) L.update_acc lexbuf; diff --git a/compiler/surface/lexer_common.ml b/compiler/surface/lexer_common.ml index 9d05302a..203f78da 100644 --- a/compiler/surface/lexer_common.ml +++ b/compiler/surface/lexer_common.ml @@ -17,7 +17,7 @@ open Tokens open Sedlexing -open Utils +open Catala_utils module R = Re.Pcre (* Calculates the precedence according a {!val: matched_regex} of the form : @@ -69,22 +69,22 @@ let raise_lexer_error (loc : Pos.t) (token : string) = let token_list_language_agnostic : (string * token) list = [ ".", DOT; - "<=", LESSER_EQUAL; - ">=", GREATER_EQUAL; - ">", GREATER; + "<=", LESSER_EQUAL KPoly; + ">=", GREATER_EQUAL KPoly; + ">", GREATER KPoly; "!=", NOT_EQUAL; "=", EQUAL; "(", LPAREN; ")", RPAREN; + "{", LBRACE; + "}", RBRACE; "{", LBRACKET; "}", RBRACKET; - "{", LSQUARE; - "}", RSQUARE; - "+", PLUS; - "-", MINUS; - "*", MULT; - "/", DIV; - "|", VERTICAL; + "+", PLUS KPoly; + "-", MINUS KPoly; + "*", MULT KPoly; + "/", DIV KPoly; + "|", BAR; ":", COLON; ";", SEMICOLON; "--", ALT; diff --git a/compiler/surface/lexer_common.mli b/compiler/surface/lexer_common.mli index 129a0b85..384059b1 100644 --- a/compiler/surface/lexer_common.mli +++ b/compiler/surface/lexer_common.mli @@ -31,7 +31,7 @@ val code_buffer : Buffer.t val update_acc : Sedlexing.lexbuf -> unit (** Updates {!val:code_buffer} with the current lexeme *) -val raise_lexer_error : Utils.Pos.t -> string -> 'a +val raise_lexer_error : Catala_utils.Pos.t -> string -> 'a (** Error-generating helper *) val token_list_language_agnostic : (string * Tokens.token) list diff --git a/compiler/surface/lexer_en.cppo.ml b/compiler/surface/lexer_en.cppo.ml index 9e3e1e7e..c91a21d4 100644 --- a/compiler/surface/lexer_en.cppo.ml +++ b/compiler/surface/lexer_en.cppo.ml @@ -70,6 +70,7 @@ #define MS_LET "let" #define MS_EXISTS "exists" #define MS_IN "in" +#define MS_AMONG "among" #define MS_SUCH "such" #define MS_THAT "that" #define MS_AND "and" @@ -78,9 +79,8 @@ #define MS_NOT "not" #define MS_MAXIMUM "maximum" #define MS_MINIMUM "minimum" -#define MS_FILTER "filter" -#define MS_MAP "map" -#define MS_INIT "initial" +#define MS_IS "is" +#define MS_EMPTY "empty" #define MS_CARDINAL "number" #define MS_YEAR "year" #define MS_MONTH "month" @@ -93,7 +93,7 @@ (* Specific delimiters *) -#define MR_MONEY_OP_SUFFIX '$' +#define MS_MONEY_OP_SUFFIX "$" #define MC_DECIMAL_SEPARATOR '.' #define MR_MONEY_PREFIX '$', Star hspace #define MR_MONEY_DELIM ',' @@ -101,11 +101,7 @@ (* Builtins *) -#define MS_RoundMoney "round_money" -#define MS_RoundDecimal "round_decimal" -#define MS_IntToDec "integer_to_decimal" -#define MS_MoneyToDec "money_to_decimal" -#define MS_DecToMoney "decimal_to_money" +#define MS_Round "round" #define MS_GetDay "get_day" #define MS_GetMonth "get_month" #define MS_GetYear "get_year" diff --git a/compiler/surface/lexer_fr.cppo.ml b/compiler/surface/lexer_fr.cppo.ml index b3255b4e..a3edf7fb 100644 --- a/compiler/surface/lexer_fr.cppo.ml +++ b/compiler/surface/lexer_fr.cppo.ml @@ -89,6 +89,7 @@ #define MS_LET "soit" #define MS_EXISTS "existe" #define MS_IN "dans" +#define MS_AMONG "parmi" #define MS_SUCH "tel" #define MS_THAT "que" #define MS_AND "et" @@ -98,9 +99,8 @@ #define MS_NOT "non" #define MS_MAXIMUM "maximum" #define MS_MINIMUM "minimum" -#define MS_FILTER "filtre" -#define MS_MAP "application" -#define MS_INIT "initial" +#define MS_IS "est" +#define MS_EMPTY "vide" #define MS_CARDINAL "nombre" #define MS_YEAR "an" #define MS_MONTH "mois" @@ -109,12 +109,15 @@ #define MS_FALSE "faux" #define MS_INPUT "entrée" #define MR_INPUT "entr", 0xE9, "e" -#define MS_OUTPUT "sortie" +#define MS_OUTPUT "résultat" +#define MR_OUTPUT "r", 0xE9,"sultat" #define MS_INTERNAL "interne" (* Specific delimiters *) -#define MR_MONEY_OP_SUFFIX 0x20AC (* The euro sign *) +#define MS_MONEY_OP_SUFFIX "€" +#define MR_MONEY_OP_SUFFIX 0x20AC + (* The euro sign *) #define MC_DECIMAL_SEPARATOR ',' #define MR_MONEY_PREFIX "" #define MR_MONEY_DELIM ' ' @@ -122,15 +125,7 @@ (* 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_MoneyToDec "argent_vers_décimal" -#define MR_MoneyToDec "argent_vers_d", 0xE9, "cimal" -#define MS_DecToMoney "décimal_vers_argent" -#define MR_DecToMoney "d", 0xE9, "cimal_vers_argent" +#define MS_Round "arrondi" #define MS_GetDay "accès_jour" #define MR_GetDay "acc", 0xE8, "s_jour" #define MS_GetMonth "accès_mois" diff --git a/compiler/surface/lexer_pl.cppo.ml b/compiler/surface/lexer_pl.cppo.ml index d949f54e..ce372b96 100644 --- a/compiler/surface/lexer_pl.cppo.ml +++ b/compiler/surface/lexer_pl.cppo.ml @@ -75,6 +75,8 @@ #define MS_EXISTS "istnieje" (* "in" or "w" ? *) #define MS_IN "in" +#define MS_AMONG "wśród" +#define MR_AMONG "w", 0x15B,"r", 0xf3,"d" #define MS_SUCH "takie ze" #define MR_SUCH "takie", space_plus, "ze" #define MS_THAT "to" @@ -84,9 +86,8 @@ #define MS_NOT "nie" #define MS_MAXIMUM "maximum" #define MS_MINIMUM "minimum" -#define MS_FILTER "filtr" -#define MS_MAP "mapuj" -#define MS_INIT "poczatkowy" +#define MS_IS "jest" +#define MS_EMPTY "pusty" #define MS_CARDINAL "liczba" #define MS_YEAR "rok" #define MS_MONTH "miesiac" @@ -102,7 +103,7 @@ (* Specific delimiters *) -#define MR_MONEY_OP_SUFFIX '$' +#define MS_MONEY_OP_SUFFIX "$" #define MC_DECIMAL_SEPARATOR '.' #define MR_MONEY_PREFIX "" #define MR_MONEY_DELIM ',' @@ -110,16 +111,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" -#define MR_IntToDec "calkowita_wers_dziesi", 0x0119, "tny" -#define MS_MoneyToDec "pieniądze_wers_dziesiętny" -#define MR_MoneyToDec "pieni", 0x0105, "dze_wers_dziesi", 0x0119, "tny" -#define MS_DecToMoney "dziesiętny_wers_pieniądze" -#define MR_DecToMoney "dziesi", 0x0119, "tny_wers_pieni", 0x0105, "dze" +#define MS_Round "zaokrąglony" +#define MR_Round "zaokr",0x0105,"glony" #define MS_GetDay "dostęp_dzień" #define MR_GetDay "dost", 0x0119, "p_dzie", 0x144 #define MS_GetMonth "dostęp_miesiąc" diff --git a/compiler/surface/parser.messages b/compiler/surface/parser.messages index 71e92eab..b278b95b 100644 --- a/compiler/surface/parser.messages +++ b/compiler/surface/parser.messages @@ -1,8 +1,8 @@ -source_file: BEGIN_CODE DECLARATION ENUM CONSTRUCTOR COLON ALT CONSTRUCTOR CONTENT TEXT YEAR +source_file: BEGIN_CODE DECLARATION ENUM UIDENT COLON ALT UIDENT CONTENT TEXT YEAR ## -## Ends in an error in state: 366. +## Ends in an error in state: 335. ## -## list(enum_decl_line) -> enum_decl_line . list(enum_decl_line) [ SCOPE END_CODE DECLARATION ] +## list(addpos(enum_decl_line)) -> enum_decl_line . list(addpos(enum_decl_line)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## enum_decl_line @@ -10,11 +10,11 @@ source_file: BEGIN_CODE DECLARATION ENUM CONSTRUCTOR COLON ALT CONSTRUCTOR CONTE expected another enum case, or a new declaration or scope use -source_file: BEGIN_CODE DECLARATION ENUM CONSTRUCTOR COLON ALT CONSTRUCTOR CONTENT YEAR +source_file: BEGIN_CODE DECLARATION ENUM UIDENT COLON ALT UIDENT CONTENT YEAR ## -## Ends in an error in state: 361. +## Ends in an error in state: 331. ## -## enum_decl_line_payload -> CONTENT . typ [ SCOPE END_CODE DECLARATION ALT ] +## option(preceded(CONTENT,addpos(typ))) -> CONTENT . typ [ SCOPE END_CODE DECLARATION ALT ] ## ## The known suffix of the stack is as follows: ## CONTENT @@ -22,23 +22,23 @@ source_file: BEGIN_CODE DECLARATION ENUM CONSTRUCTOR COLON ALT CONSTRUCTOR CONTE expected a content type -source_file: BEGIN_CODE DECLARATION ENUM CONSTRUCTOR COLON ALT CONSTRUCTOR YEAR +source_file: BEGIN_CODE DECLARATION ENUM UIDENT COLON ALT UIDENT YEAR ## -## Ends in an error in state: 360. +## Ends in an error in state: 330. ## -## enum_decl_line -> ALT constructor . option(enum_decl_line_payload) [ SCOPE END_CODE DECLARATION ALT ] +## enum_decl_line -> ALT UIDENT . option(preceded(CONTENT,addpos(typ))) [ SCOPE END_CODE DECLARATION ALT ] ## ## The known suffix of the stack is as follows: -## ALT constructor +## ALT UIDENT ## expected a payload for your enum case, or another case or declaration -source_file: BEGIN_CODE DECLARATION ENUM CONSTRUCTOR COLON ALT YEAR +source_file: BEGIN_CODE DECLARATION ENUM UIDENT COLON ALT YEAR ## -## Ends in an error in state: 359. +## Ends in an error in state: 329. ## -## enum_decl_line -> ALT . constructor option(enum_decl_line_payload) [ SCOPE END_CODE DECLARATION ALT ] +## enum_decl_line -> ALT . UIDENT option(preceded(CONTENT,addpos(typ))) [ SCOPE END_CODE DECLARATION ALT ] ## ## The known suffix of the stack is as follows: ## ALT @@ -46,35 +46,35 @@ source_file: BEGIN_CODE DECLARATION ENUM CONSTRUCTOR COLON ALT YEAR expected the name of an enum case -source_file: BEGIN_CODE DECLARATION ENUM CONSTRUCTOR COLON YEAR +source_file: BEGIN_CODE DECLARATION ENUM UIDENT COLON YEAR ## -## Ends in an error in state: 358. +## Ends in an error in state: 328. ## -## code_item -> DECLARATION ENUM constructor COLON . list(enum_decl_line) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION ENUM UIDENT COLON . list(addpos(enum_decl_line)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION ENUM constructor COLON +## DECLARATION ENUM UIDENT COLON ## expected an enum case -source_file: BEGIN_CODE DECLARATION ENUM CONSTRUCTOR YEAR +source_file: BEGIN_CODE DECLARATION ENUM UIDENT YEAR ## -## Ends in an error in state: 357. +## Ends in an error in state: 327. ## -## code_item -> DECLARATION ENUM constructor . COLON list(enum_decl_line) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION ENUM UIDENT . COLON list(addpos(enum_decl_line)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION ENUM constructor +## DECLARATION ENUM UIDENT ## expected a colon source_file: BEGIN_CODE DECLARATION ENUM YEAR ## -## Ends in an error in state: 356. +## Ends in an error in state: 326. ## -## code_item -> DECLARATION ENUM . constructor COLON list(enum_decl_line) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION ENUM . UIDENT COLON list(addpos(enum_decl_line)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## DECLARATION ENUM @@ -89,35 +89,35 @@ expected the name of your enum -source_file: BEGIN_CODE DECLARATION SCOPE CONSTRUCTOR COLON YEAR +source_file: BEGIN_CODE DECLARATION SCOPE UIDENT COLON YEAR ## -## Ends in an error in state: 331. +## Ends in an error in state: 301. ## -## code_item -> DECLARATION SCOPE constructor COLON . nonempty_list(scope_decl_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION SCOPE UIDENT COLON . nonempty_list(addpos(scope_decl_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION SCOPE constructor COLON +## DECLARATION SCOPE UIDENT COLON ## expected a context item introduced by "context" -source_file: BEGIN_CODE DECLARATION SCOPE CONSTRUCTOR YEAR +source_file: BEGIN_CODE DECLARATION SCOPE UIDENT YEAR ## -## Ends in an error in state: 330. +## Ends in an error in state: 300. ## -## code_item -> DECLARATION SCOPE constructor . COLON nonempty_list(scope_decl_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION SCOPE UIDENT . COLON nonempty_list(addpos(scope_decl_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION SCOPE constructor +## DECLARATION SCOPE UIDENT ## expected a colon followed by the list of context items of this scope source_file: BEGIN_CODE DECLARATION SCOPE YEAR ## -## Ends in an error in state: 329. +## Ends in an error in state: 299. ## -## code_item -> DECLARATION SCOPE . constructor COLON nonempty_list(scope_decl_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION SCOPE . UIDENT COLON nonempty_list(addpos(scope_decl_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## DECLARATION SCOPE @@ -125,23 +125,23 @@ source_file: BEGIN_CODE DECLARATION SCOPE YEAR expected the name of the scope you are declaring -source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON CONDITION IDENT DEPENDS COLLECTION YEAR +source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON CONDITION LIDENT DEPENDS COLLECTION YEAR ## -## Ends in an error in state: 316. +## Ends in an error in state: 286. ## -## typ -> collection_marked . typ [ STATE SCOPE OUTPUT INTERNAL INPUT IDENT END_CODE DEPENDS DECLARATION DATA CONTEXT CONDITION ALT ] +## typ -> COLLECTION . typ [ STATE SCOPE OUTPUT LIDENT INTERNAL INPUT END_CODE DEPENDS DECLARATION DATA CONTEXT CONDITION ALT ] ## ## The known suffix of the stack is as follows: -## collection_marked +## COLLECTION ## expected a new struct data, or another declaration or scope use -source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON CONDITION IDENT DEPENDS TEXT YEAR +source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON CONDITION LIDENT DEPENDS TEXT YEAR ## -## Ends in an error in state: 324. +## Ends in an error in state: 296. ## -## list(struct_scope) -> struct_scope . list(struct_scope) [ SCOPE END_CODE DECLARATION ] +## list(addpos(struct_scope)) -> struct_scope . list(addpos(struct_scope)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## struct_scope @@ -149,11 +149,11 @@ source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON CONDITION IDENT DEP expected a new struct data, or another declaration or scope use -source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON CONDITION IDENT DEPENDS YEAR +source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON CONDITION LIDENT DEPENDS YEAR ## -## Ends in an error in state: 320. +## Ends in an error in state: 293. ## -## struct_scope_func -> DEPENDS . typ [ STATE SCOPE OUTPUT INTERNAL INPUT IDENT END_CODE DECLARATION DATA CONTEXT CONDITION ] +## option(struct_scope_func) -> DEPENDS . typ [ STATE SCOPE OUTPUT LIDENT INTERNAL INPUT END_CODE DECLARATION DATA CONTEXT CONDITION ] ## ## The known suffix of the stack is as follows: ## DEPENDS @@ -161,9 +161,9 @@ source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON CONDITION IDENT DEP expected the type of the parameter of this struct data function -source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON CONDITION IDENT YEAR +source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON CONDITION LIDENT YEAR ## -## Ends in an error in state: 319. +## Ends in an error in state: 292. ## ## struct_scope -> struct_scope_base . option(struct_scope_func) [ SCOPE END_CODE DECLARATION DATA CONDITION ] ## @@ -173,47 +173,47 @@ source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON CONDITION IDENT YEA expected a new struct data, or another declaration or scope use -source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON CONDITION YEAR +source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON CONDITION YEAR ## -## Ends in an error in state: 326. +## Ends in an error in state: 290. ## -## struct_scope_base -> condition_pos . ident [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] +## struct_scope_base -> CONDITION . lident [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] ## ## The known suffix of the stack is as follows: -## condition_pos +## CONDITION ## expected the name of this struct condition -source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON DATA IDENT CONTENT YEAR +source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON DATA LIDENT CONTENT YEAR ## -## Ends in an error in state: 312. +## Ends in an error in state: 285. ## -## struct_scope_base -> DATA ident CONTENT . typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] +## struct_scope_base -> DATA lident CONTENT . typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] ## ## The known suffix of the stack is as follows: -## DATA ident CONTENT +## DATA lident CONTENT ## expected the type of this struct data -source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON DATA IDENT YEAR +source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON DATA LIDENT YEAR ## -## Ends in an error in state: 311. +## Ends in an error in state: 284. ## -## struct_scope_base -> DATA ident . CONTENT typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] +## struct_scope_base -> DATA lident . CONTENT typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] ## ## The known suffix of the stack is as follows: -## DATA ident +## DATA lident ## expected the type of this struct data, introduced by the content keyword -source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON DATA YEAR +source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON DATA YEAR ## -## Ends in an error in state: 310. +## Ends in an error in state: 283. ## -## struct_scope_base -> DATA . ident CONTENT typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] +## struct_scope_base -> DATA . lident CONTENT typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] ## ## The known suffix of the stack is as follows: ## DATA @@ -221,35 +221,35 @@ source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON DATA YEAR expected the name of this struct data -source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR COLON YEAR +source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON YEAR ## -## Ends in an error in state: 309. +## Ends in an error in state: 282. ## -## code_item -> DECLARATION STRUCT constructor COLON . list(struct_scope) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION STRUCT UIDENT COLON . list(addpos(struct_scope)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION STRUCT constructor COLON +## DECLARATION STRUCT UIDENT COLON ## expected struct data or condition -source_file: BEGIN_CODE DECLARATION STRUCT CONSTRUCTOR YEAR +source_file: BEGIN_CODE DECLARATION STRUCT UIDENT YEAR ## -## Ends in an error in state: 308. +## Ends in an error in state: 281. ## -## code_item -> DECLARATION STRUCT constructor . COLON list(struct_scope) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION STRUCT UIDENT . COLON list(addpos(struct_scope)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION STRUCT constructor +## DECLARATION STRUCT UIDENT ## expected a colon source_file: BEGIN_CODE DECLARATION STRUCT YEAR ## -## Ends in an error in state: 307. +## Ends in an error in state: 280. ## -## code_item -> DECLARATION STRUCT . constructor COLON list(struct_scope) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION STRUCT . UIDENT COLON list(addpos(struct_scope)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## DECLARATION STRUCT @@ -259,11 +259,11 @@ expected the struct name source_file: BEGIN_CODE DECLARATION YEAR ## -## Ends in an error in state: 306. +## Ends in an error in state: 279. ## -## code_item -> DECLARATION . STRUCT constructor COLON list(struct_scope) [ SCOPE END_CODE DECLARATION ] -## code_item -> DECLARATION . SCOPE constructor COLON nonempty_list(scope_decl_item) [ SCOPE END_CODE DECLARATION ] -## code_item -> DECLARATION . ENUM constructor COLON list(enum_decl_line) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION . STRUCT UIDENT COLON list(addpos(struct_scope)) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION . SCOPE UIDENT COLON nonempty_list(addpos(scope_decl_item)) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION . ENUM UIDENT COLON list(addpos(enum_decl_line)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## DECLARATION @@ -271,74 +271,73 @@ source_file: BEGIN_CODE DECLARATION YEAR expected the kind of the declaration (struct, scope or enum) -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION CARDINAL THEN +source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION CARDINAL THEN ## -## Ends in an error in state: 271. +## Ends in an error in state: 241. ## -## nonempty_list(scope_item) -> scope_item . [ SCOPE END_CODE DECLARATION ] -## nonempty_list(scope_item) -> scope_item . nonempty_list(scope_item) [ SCOPE END_CODE DECLARATION ] +## assertion -> option(condition_consequence) expression . [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## expression -> expression . DOT qlident [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . OF expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . CONTAINS expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . MULT expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . DIV expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . PLUS expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . MINUS expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . LESSER expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . GREATER expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . EQUAL expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . AND expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . OR expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . XOR expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] ## ## The known suffix of the stack is as follows: -## scope_item -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 80, spurious reduction of production small_expression -> CARDINAL -## In state 84, spurious reduction of production primitive_expression -> small_expression -## In state 86, spurious reduction of production base_expression -> primitive_expression -## In state 125, spurious reduction of production unop_expression -> base_expression -## In state 81, spurious reduction of production mult_expression -> unop_expression -## In state 172, spurious reduction of production sum_expression -> mult_expression -## In state 126, spurious reduction of production compare_expression -> sum_expression -## In state 183, spurious reduction of production logical_atom -> compare_expression -## In state 178, spurious reduction of production logical_or_expression -> logical_atom -## In state 174, spurious reduction of production logical_expression -> logical_or_expression -## In state 205, spurious reduction of production expression -> logical_expression -## In state 265, spurious reduction of production assertion_base -> expression -## In state 266, spurious reduction of production assertion -> option(condition_consequence) assertion_base -## In state 270, spurious reduction of production scope_item -> ASSERTION assertion +## option(condition_consequence) expression ## expected a new scope use item -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION FIXED IDENT BY YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION FIXED LIDENT BY YEAR ## -## Ends in an error in state: 262. +## Ends in an error in state: 238. ## -## assertion -> FIXED qident BY . ident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> FIXED separated_nonempty_list(DOT,addpos(LIDENT)) BY . lident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## FIXED qident BY +## FIXED separated_nonempty_list(DOT,addpos(LIDENT)) BY ## expected the legislative text by which the value of the variable is fixed -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION FIXED IDENT WITH_V +source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION FIXED LIDENT WITH_V ## -## Ends in an error in state: 261. +## Ends in an error in state: 237. ## -## assertion -> FIXED qident . BY ident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> FIXED separated_nonempty_list(DOT,addpos(LIDENT)) . BY lident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## FIXED qident +## FIXED separated_nonempty_list(DOT,addpos(LIDENT)) ## ## WARNING: This example involves spurious reductions. ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 255, spurious reduction of production separated_nonempty_list(DOT,ident) -> ident -## In state 247, spurious reduction of production qident -> separated_nonempty_list(DOT,ident) +## In state 223, spurious reduction of production separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT ## expected the legislative text by which the value of the variable is fixed -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION FIXED YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION FIXED YEAR ## -## Ends in an error in state: 260. +## Ends in an error in state: 236. ## -## assertion -> FIXED . qident BY ident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> FIXED . separated_nonempty_list(DOT,addpos(LIDENT)) BY lident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: ## FIXED @@ -347,39 +346,43 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION FIXED YEAR expected the name of the variable that should be fixed -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION UNDER_CONDITION TRUE THEN +source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION UNDER_CONDITION TRUE THEN ## -## Ends in an error in state: 268. +## Ends in an error in state: 234. ## -## condition_consequence -> condition . CONSEQUENCE [ VERTICAL TRUE SUM STATE NOT MONEY_AMOUNT MINUSMONEY MINUSDURATION MINUSDEC MINUS MINIMUM MAXIMUM MATCH MAP LSQUARE LPAREN LET INT_LITERAL IF IDENT FOR FILTER FILLED FALSE EXISTS DEFINED_AS DECIMAL_LITERAL CONTENT CONSTRUCTOR CARDINAL ] +## condition_consequence -> UNDER_CONDITION expression . CONSEQUENCE [ UIDENT TRUE SUM STATE OUTPUT NOT MONEY_AMOUNT MONEY MINUS MINIMUM MAXIMUM MATCH LPAREN LIDENT LET LBRACKET INT_LITERAL IF FOR FILLED FALSE EXISTS DEFINED_AS DECIMAL_LITERAL DECIMAL CARDINAL BAR ] +## expression -> expression . DOT qlident [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . OF expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . CONTAINS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . MULT expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . DIV expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . PLUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . MINUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . LESSER expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . GREATER expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . AND expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . OR expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . XOR expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] ## ## The known suffix of the stack is as follows: -## condition -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 84, spurious reduction of production primitive_expression -> small_expression -## In state 86, spurious reduction of production base_expression -> primitive_expression -## In state 125, spurious reduction of production unop_expression -> base_expression -## In state 81, spurious reduction of production mult_expression -> unop_expression -## In state 172, spurious reduction of production sum_expression -> mult_expression -## In state 126, spurious reduction of production compare_expression -> sum_expression -## In state 183, spurious reduction of production logical_atom -> compare_expression -## In state 178, spurious reduction of production logical_or_expression -> logical_atom -## In state 174, spurious reduction of production logical_expression -> logical_or_expression -## In state 205, spurious reduction of production expression -> logical_expression -## In state 259, spurious reduction of production condition -> UNDER_CONDITION expression +## UNDER_CONDITION expression ## expected a consequence for this definition under condition -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION UNDER_CONDITION YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION UNDER_CONDITION YEAR ## -## Ends in an error in state: 258. +## Ends in an error in state: 233. ## -## condition -> UNDER_CONDITION . expression [ CONSEQUENCE ] +## condition_consequence -> UNDER_CONDITION . expression CONSEQUENCE [ UIDENT TRUE SUM STATE OUTPUT NOT MONEY_AMOUNT MONEY MINUS MINIMUM MAXIMUM MATCH LPAREN LIDENT LET LBRACKET INT_LITERAL IF FOR FILLED FALSE EXISTS DEFINED_AS DECIMAL_LITERAL DECIMAL CARDINAL BAR ] ## ## The known suffix of the stack is as follows: ## UNDER_CONDITION @@ -387,61 +390,41 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION UNDER_CONDITION YEAR expected an expression for this condition -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION VARIES IDENT UNDER_CONDITION +source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION VARIES LIDENT UNDER_CONDITION ## -## Ends in an error in state: 248. +## Ends in an error in state: 226. ## -## assertion -> VARIES qident . WITH_V base_expression option(variation_type) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> VARIES separated_nonempty_list(DOT,addpos(LIDENT)) . WITH_V expression option(addpos(variation_type)) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## VARIES qident +## VARIES separated_nonempty_list(DOT,addpos(LIDENT)) ## ## WARNING: This example involves spurious reductions. ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 255, spurious reduction of production separated_nonempty_list(DOT,ident) -> ident -## In state 247, spurious reduction of production qident -> separated_nonempty_list(DOT,ident) +## In state 223, spurious reduction of production separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT ## expected an indication about what this variable varies with -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION VARIES IDENT WITH_V TRUE XOR +source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION VARIES LIDENT WITH_V YEAR ## -## Ends in an error in state: 250. +## Ends in an error in state: 227. ## -## assertion -> VARIES qident WITH_V base_expression . option(variation_type) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> VARIES separated_nonempty_list(DOT,addpos(LIDENT)) WITH_V . expression option(addpos(variation_type)) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## VARIES qident WITH_V base_expression -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 84, spurious reduction of production primitive_expression -> small_expression -## In state 86, spurious reduction of production base_expression -> primitive_expression -## - -expected an indication about the variation sense of the variable, or a new scope item - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION VARIES IDENT WITH_V YEAR -## -## Ends in an error in state: 249. -## -## assertion -> VARIES qident WITH_V . base_expression option(variation_type) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] -## -## The known suffix of the stack is as follows: -## VARIES qident WITH_V +## VARIES separated_nonempty_list(DOT,addpos(LIDENT)) WITH_V ## the variable varies with an expression that was expected here -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION VARIES YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION VARIES YEAR ## -## Ends in an error in state: 246. +## Ends in an error in state: 222. ## -## assertion -> VARIES . qident WITH_V base_expression option(variation_type) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> VARIES . separated_nonempty_list(DOT,addpos(LIDENT)) WITH_V expression option(addpos(variation_type)) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: ## VARIES @@ -449,9 +432,9 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION VARIES YEAR expecting the name of the varying variable -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION YEAR ## -## Ends in an error in state: 245. +## Ends in an error in state: 221. ## ## scope_item -> ASSERTION . assertion [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## @@ -461,55 +444,54 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON ASSERTION YEAR expected an expression that shoud be asserted during execution -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON DEFINITION IDENT DEFINED_AS YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON DEFINITION LIDENT DEFINED_AS YEAR ## -## Ends in an error in state: 299. +## Ends in an error in state: 272. ## -## definition -> option(label) option(exception_to) DEFINITION qident option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS . expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS . expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## option(label) option(exception_to) DEFINITION qident option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS +## option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS ## expected an expression for the definition -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON DEFINITION IDENT OF IDENT DECREASING +source_file: BEGIN_CODE SCOPE UIDENT COLON DEFINITION LIDENT OF LIDENT DECREASING ## -## Ends in an error in state: 296. +## Ends in an error in state: 269. ## -## definition -> option(label) option(exception_to) DEFINITION qident option(definition_parameters) . option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) . option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## option(label) option(exception_to) DEFINITION qident option(definition_parameters) +## option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) ## expected a expression for defining this function, introduced by the defined as keyword -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON DEFINITION IDENT WITH_V +source_file: BEGIN_CODE SCOPE UIDENT COLON DEFINITION LIDENT WITH_V ## -## Ends in an error in state: 295. +## Ends in an error in state: 268. ## -## definition -> option(label) option(exception_to) DEFINITION qident . option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) . option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## option(label) option(exception_to) DEFINITION qident +## option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) ## ## WARNING: This example involves spurious reductions. ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 255, spurious reduction of production separated_nonempty_list(DOT,ident) -> ident -## In state 247, spurious reduction of production qident -> separated_nonempty_list(DOT,ident) +## In state 223, spurious reduction of production separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT ## expected the defined as keyword to introduce the definition of this variable -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON DEFINITION YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON DEFINITION YEAR ## -## Ends in an error in state: 294. +## Ends in an error in state: 267. ## -## definition -> option(label) option(exception_to) DEFINITION . qident option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) option(exception_to) DEFINITION . separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: ## option(label) option(exception_to) DEFINITION @@ -517,11 +499,11 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON DEFINITION YEAR expected the name of the variable you want to define -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON EXCEPTION IDENT YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON EXCEPTION LIDENT YEAR ## -## Ends in an error in state: 277. +## Ends in an error in state: 250. ## -## definition -> option(label) option(exception_to) . DEFINITION qident option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) option(exception_to) . DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## rule -> option(label) option(exception_to) . RULE rule_expr option(condition_consequence) option(state) rule_consequence [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: @@ -530,11 +512,11 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON EXCEPTION IDENT YEAR expected a rule or a definition after the exception declaration -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON EXCEPTION YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON EXCEPTION YEAR ## -## Ends in an error in state: 274. +## Ends in an error in state: 247. ## -## exception_to -> EXCEPTION . option(ident) [ RULE DEFINITION ] +## exception_to -> EXCEPTION . option(lident) [ RULE DEFINITION ] ## ## The known suffix of the stack is as follows: ## EXCEPTION @@ -542,11 +524,11 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON EXCEPTION YEAR expected the label to which the exception is referring back -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON LABEL IDENT DEFINED_AS +source_file: BEGIN_CODE SCOPE UIDENT COLON LABEL LIDENT DEFINED_AS ## -## Ends in an error in state: 273. +## Ends in an error in state: 246. ## -## definition -> option(label) . option(exception_to) DEFINITION qident option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) . option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## rule -> option(label) . option(exception_to) RULE rule_expr option(condition_consequence) option(state) rule_consequence [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: @@ -555,11 +537,11 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON LABEL IDENT DEFINED_AS expected a rule or a definition after the label declaration -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON LABEL YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON LABEL YEAR ## -## Ends in an error in state: 243. +## Ends in an error in state: 219. ## -## label -> LABEL . ident [ RULE EXCEPTION DEFINITION ] +## label -> LABEL . lident [ RULE EXCEPTION DEFINITION ] ## ## The known suffix of the stack is as follows: ## LABEL @@ -567,21 +549,21 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON LABEL YEAR expected the name of the label -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE IDENT DOT YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT DOT YEAR ## -## Ends in an error in state: 256. +## Ends in an error in state: 224. ## -## separated_nonempty_list(DOT,ident) -> ident DOT . separated_nonempty_list(DOT,ident) [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] +## separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT DOT . separated_nonempty_list(DOT,addpos(LIDENT)) [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] ## ## The known suffix of the stack is as follows: -## ident DOT +## LIDENT DOT ## expected a struct field or a sub-scope context item after the dot -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE IDENT NOT FALSE +source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT NOT FALSE ## -## Ends in an error in state: 287. +## Ends in an error in state: 265. ## ## rule_consequence -> option(NOT) . FILLED [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## @@ -591,9 +573,9 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE IDENT NOT FALSE expected the filled keyword the this rule -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE IDENT OF IDENT YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT OF LIDENT YEAR ## -## Ends in an error in state: 279. +## Ends in an error in state: 257. ## ## rule -> option(label) option(exception_to) RULE rule_expr . option(condition_consequence) option(state) rule_consequence [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## @@ -603,11 +585,11 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE IDENT OF IDENT YEAR expected the expression of the rule -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE IDENT OF YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT OF YEAR ## -## Ends in an error in state: 290. +## Ends in an error in state: 253. ## -## definition_parameters -> OF . ident [ UNDER_CONDITION STATE NOT FILLED DEFINED_AS ] +## definition_parameters -> OF . lident [ UNDER_CONDITION STATE NOT FILLED DEFINED_AS ] ## ## The known suffix of the stack is as follows: ## OF @@ -616,41 +598,40 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE IDENT OF YEAR expected the name of the parameter for this dependent variable -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE IDENT WITH_V +source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT WITH_V ## -## Ends in an error in state: 289. +## Ends in an error in state: 252. ## -## rule_expr -> qident . option(definition_parameters) [ UNDER_CONDITION STATE NOT FILLED ] +## rule_expr -> separated_nonempty_list(DOT,addpos(LIDENT)) . option(definition_parameters) [ UNDER_CONDITION STATE NOT FILLED ] ## ## The known suffix of the stack is as follows: -## qident +## separated_nonempty_list(DOT,addpos(LIDENT)) ## ## WARNING: This example involves spurious reductions. ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 255, spurious reduction of production separated_nonempty_list(DOT,ident) -> ident -## In state 247, spurious reduction of production qident -> separated_nonempty_list(DOT,ident) +## In state 223, spurious reduction of production separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT ## expected a condition or a consequence for this rule -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE IDENT YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT YEAR ## -## Ends in an error in state: 255. +## Ends in an error in state: 223. ## -## separated_nonempty_list(DOT,ident) -> ident . [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] -## separated_nonempty_list(DOT,ident) -> ident . DOT separated_nonempty_list(DOT,ident) [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] +## separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT . [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] +## separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT . DOT separated_nonempty_list(DOT,addpos(LIDENT)) [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] ## ## The known suffix of the stack is as follows: -## ident +## LIDENT ## expected a condition or a consequence for this rule, or the rest of the variable qualified name -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON RULE YEAR ## -## Ends in an error in state: 278. +## Ends in an error in state: 251. ## ## rule -> option(label) option(exception_to) RULE . rule_expr option(condition_consequence) option(state) rule_consequence [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## @@ -660,371 +641,89 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON RULE YEAR expected the name of the variable subject to the rule -source_file: BEGIN_CODE SCOPE CONSTRUCTOR COLON YEAR +source_file: BEGIN_CODE SCOPE UIDENT COLON YEAR ## -## Ends in an error in state: 242. +## Ends in an error in state: 218. ## -## code_item -> SCOPE constructor option(scope_use_condition) COLON . nonempty_list(scope_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> SCOPE UIDENT option(preceded(UNDER_CONDITION,expression)) COLON . nonempty_list(addpos(scope_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## SCOPE constructor option(scope_use_condition) COLON +## SCOPE UIDENT option(preceded(UNDER_CONDITION,expression)) COLON ## expected a scope use item: a rule, definition or assertion -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CARDINAL YEAR + + + + +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION UIDENT YEAR ## -## Ends in an error in state: 80. +## Ends in an error in state: 10. ## -## aggregate_func -> CARDINAL . [ FOR ] -## small_expression -> CARDINAL . [ XOR WITH THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> UIDENT . DOT qlident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## quident -> UIDENT . DOT quident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LBRACE LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTENT CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## quident -> UIDENT . [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LBRACE LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTENT CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## CARDINAL -## - -expected the keyword following cardinal to compute the number of elements in a set - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR CONTENT TRUE YEAR -## -## Ends in an error in state: 111. -## -## enum_inject_content -> CONTENT small_expression . [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## small_expression -> small_expression . DOT option(terminated(constructor,DOT)) ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## CONTENT small_expression -## - -the expression for the content of the enum case is already well-formed, expected an operator to form a bigger expression - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR CONTENT YEAR -## -## Ends in an error in state: 110. -## -## enum_inject_content -> CONTENT . small_expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## CONTENT -## - -expected an expression for the content of this enum case - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR DOT CONSTRUCTOR ALL -## -## Ends in an error in state: 109. -## -## struct_or_enum_inject -> constructor option(preceded(DOT,constructor)) . option(enum_inject_content) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## constructor option(preceded(DOT,constructor)) -## - -expected the rest of the path, or the content of the enum constructor - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR DOT YEAR -## -## Ends in an error in state: 93. -## -## option(preceded(DOT,constructor)) -> DOT . constructor [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTENT CONTAINS CONSTRUCTOR CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## DOT -## - -expected the rest of the path after the dot - - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR LBRACKET ALT IDENT COLON CARDINAL THEN -## -## Ends in an error in state: 76. -## -## nonempty_list(preceded(ALT,struct_content_field)) -> ALT struct_content_field . [ RBRACKET ] -## nonempty_list(preceded(ALT,struct_content_field)) -> ALT struct_content_field . nonempty_list(preceded(ALT,struct_content_field)) [ RBRACKET ] -## -## The known suffix of the stack is as follows: -## ALT struct_content_field -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 80, spurious reduction of production small_expression -> CARDINAL -## In state 84, spurious reduction of production primitive_expression -> small_expression -## In state 86, spurious reduction of production base_expression -> primitive_expression -## In state 125, spurious reduction of production unop_expression -> base_expression -## In state 81, spurious reduction of production mult_expression -> unop_expression -## In state 172, spurious reduction of production sum_expression -> mult_expression -## In state 126, spurious reduction of production compare_expression -> sum_expression -## In state 183, spurious reduction of production logical_atom -> compare_expression -## In state 178, spurious reduction of production logical_or_expression -> logical_atom -## In state 174, spurious reduction of production logical_expression -> logical_or_expression -## In state 184, spurious reduction of production struct_content_field -> ident COLON logical_expression -## - -expected another structure field or the closing bracket - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR LBRACKET ALT IDENT COLON YEAR -## -## Ends in an error in state: 79. -## -## struct_content_field -> ident COLON . logical_expression [ RBRACKET ALT ] -## -## The known suffix of the stack is as follows: -## ident COLON -## - -expected the expression for this struct field - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR LBRACKET ALT IDENT YEAR -## -## Ends in an error in state: 78. -## -## struct_content_field -> ident . COLON logical_expression [ RBRACKET ALT ] -## -## The known suffix of the stack is as follows: -## ident -## - -expected a colon - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR LBRACKET ALT YEAR -## -## Ends in an error in state: 75. -## -## nonempty_list(preceded(ALT,struct_content_field)) -> ALT . struct_content_field [ RBRACKET ] -## nonempty_list(preceded(ALT,struct_content_field)) -> ALT . struct_content_field nonempty_list(preceded(ALT,struct_content_field)) [ RBRACKET ] -## -## The known suffix of the stack is as follows: -## ALT -## - -expected the name of the structure field - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR LBRACKET YEAR -## -## Ends in an error in state: 74. -## -## struct_inject_content -> LBRACKET . nonempty_list(preceded(ALT,struct_content_field)) RBRACKET [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## LBRACKET -## - -expected structure fields introduced by -- - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR YEAR -## -## Ends in an error in state: 100. -## -## base_expression -> constructor . OF LBRACKET list(preceded(ALT,struct_content_field)) RBRACKET [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## struct_or_enum_inject -> constructor . option(preceded(DOT,constructor)) option(enum_inject_content) [ XOR WITH THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## struct_or_enum_inject -> constructor . struct_inject_content [ XOR WITH THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## constructor +## UIDENT ## expected a payload for the enum case constructor, or the rest of the expression (with an operator ?) -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONTENT MAXIMUM TEXT INIT YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION EXISTS LIDENT YEAR ## -## Ends in an error in state: 189. +## Ends in an error in state: 70. ## -## aggregate_func -> CONTENT MAXIMUM typ_base INIT . primitive_expression [ FOR ] +## expression -> EXISTS lident . AMONG expression SUCH THAT expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## CONTENT MAXIMUM typ_base INIT -## - -expected the initial expression for the maximum - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONTENT MAXIMUM TEXT YEAR -## -## Ends in an error in state: 188. -## -## aggregate_func -> CONTENT MAXIMUM typ_base . INIT primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## CONTENT MAXIMUM typ_base -## - -expected the "initial" keyword introducing the initial expression for the maximum - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONTENT MAXIMUM YEAR -## -## Ends in an error in state: 187. -## -## aggregate_func -> CONTENT MAXIMUM . typ_base INIT primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## CONTENT MAXIMUM -## - -expected the type of the elements compared to get the maximum - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONTENT MINIMUM TEXT INIT YEAR -## -## Ends in an error in state: 63. -## -## aggregate_func -> CONTENT MINIMUM typ_base INIT . primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## CONTENT MINIMUM typ_base INIT -## - -expected the initial expression for the minimum - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONTENT MINIMUM TEXT YEAR -## -## Ends in an error in state: 62. -## -## aggregate_func -> CONTENT MINIMUM typ_base . INIT primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## CONTENT MINIMUM typ_base -## - -expected the "initial" keyword introducing the initial expression for the minimum - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONTENT MINIMUM YEAR -## -## Ends in an error in state: 61. -## -## aggregate_func -> CONTENT MINIMUM . typ_base INIT primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## CONTENT MINIMUM -## - -expected the type of the elements compared to get the minimum - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONTENT YEAR -## -## Ends in an error in state: 60. -## -## aggregate_func -> CONTENT . MAXIMUM typ_base INIT primitive_expression [ FOR ] -## aggregate_func -> CONTENT . MINIMUM typ_base INIT primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## CONTENT -## - -this is the start of an arg-maximum or arg-minimum expression - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION EXISTS IDENT IN CARDINAL SUCH THAT YEAR -## -## Ends in an error in state: 213. -## -## expression -> exists_prefix . expression [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION ] -## -## The known suffix of the stack is as follows: -## exists_prefix -## - -expected an expression for the existential test - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION EXISTS IDENT IN TRUE SUCH YEAR -## -## Ends in an error in state: 219. -## -## exists_prefix -> exists_marked ident IN primitive_expression SUCH . THAT [ VERTICAL TRUE SUM NOT MONEY_AMOUNT MINUSMONEY MINUSDURATION MINUSDEC MINUS MINIMUM MAXIMUM MATCH MAP LSQUARE LPAREN LET INT_LITERAL IF IDENT FOR FILTER FALSE EXISTS DECIMAL_LITERAL CONTENT CONSTRUCTOR CARDINAL ] -## -## The known suffix of the stack is as follows: -## exists_marked ident IN primitive_expression SUCH -## - -expected a keyword to complete the "such that" construction - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION EXISTS IDENT IN YEAR -## -## Ends in an error in state: 217. -## -## exists_prefix -> exists_marked ident IN . primitive_expression SUCH THAT [ VERTICAL TRUE SUM NOT MONEY_AMOUNT MINUSMONEY MINUSDURATION MINUSDEC MINUS MINIMUM MAXIMUM MATCH MAP LSQUARE LPAREN LET INT_LITERAL IF IDENT FOR FILTER FALSE EXISTS DECIMAL_LITERAL CONTENT CONSTRUCTOR CARDINAL ] -## -## The known suffix of the stack is as follows: -## exists_marked ident IN -## - -expected an expression that designates the set subject to the existential test - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION EXISTS IDENT YEAR -## -## Ends in an error in state: 216. -## -## exists_prefix -> exists_marked ident . IN primitive_expression SUCH THAT [ VERTICAL TRUE SUM NOT MONEY_AMOUNT MINUSMONEY MINUSDURATION MINUSDEC MINUS MINIMUM MAXIMUM MATCH MAP LSQUARE LPAREN LET INT_LITERAL IF IDENT FOR FILTER FALSE EXISTS DECIMAL_LITERAL CONTENT CONSTRUCTOR CARDINAL ] -## -## The known suffix of the stack is as follows: -## exists_marked ident +## EXISTS lident ## expected the "in" keyword to continue this existential test -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION EXISTS YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION EXISTS YEAR ## -## Ends in an error in state: 215. +## Ends in an error in state: 69. ## -## exists_prefix -> exists_marked . ident IN primitive_expression SUCH THAT [ VERTICAL TRUE SUM NOT MONEY_AMOUNT MINUSMONEY MINUSDURATION MINUSDEC MINUS MINIMUM MAXIMUM MATCH MAP LSQUARE LPAREN LET INT_LITERAL IF IDENT FOR FILTER FALSE EXISTS DECIMAL_LITERAL CONTENT CONSTRUCTOR CARDINAL ] +## expression -> EXISTS . lident AMONG expression SUCH THAT expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## exists_marked +## EXISTS ## expected an identifier that will designate the existential witness for the test -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION FOR ALL IDENT IN CARDINAL WE_HAVE YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION FOR ALL LIDENT YEAR ## -## Ends in an error in state: 206. +## Ends in an error in state: 66. ## -## expression -> forall_prefix . expression [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION ] +## expression -> FOR ALL lident . AMONG expression WE_HAVE expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## forall_prefix -## - -expected an expression for the universal test - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION FOR ALL IDENT IN YEAR -## -## Ends in an error in state: 209. -## -## forall_prefix -> for_all_marked ident IN . primitive_expression WE_HAVE [ VERTICAL TRUE SUM NOT MONEY_AMOUNT MINUSMONEY MINUSDURATION MINUSDEC MINUS MINIMUM MAXIMUM MATCH MAP LSQUARE LPAREN LET INT_LITERAL IF IDENT FOR FILTER FALSE EXISTS DECIMAL_LITERAL CONTENT CONSTRUCTOR CARDINAL ] -## -## The known suffix of the stack is as follows: -## for_all_marked ident IN -## - -expected the expression designating the set on which to perform the universal test - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION FOR ALL IDENT YEAR -## -## Ends in an error in state: 208. -## -## forall_prefix -> for_all_marked ident . IN primitive_expression WE_HAVE [ VERTICAL TRUE SUM NOT MONEY_AMOUNT MINUSMONEY MINUSDURATION MINUSDEC MINUS MINIMUM MAXIMUM MATCH MAP LSQUARE LPAREN LET INT_LITERAL IF IDENT FOR FILTER FALSE EXISTS DECIMAL_LITERAL CONTENT CONSTRUCTOR CARDINAL ] -## -## The known suffix of the stack is as follows: -## for_all_marked ident +## FOR ALL lident ## expected the "in" keyword for the rest of the universal test -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION FOR ALL YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION FOR ALL YEAR ## -## Ends in an error in state: 207. +## Ends in an error in state: 65. ## -## forall_prefix -> for_all_marked . ident IN primitive_expression WE_HAVE [ VERTICAL TRUE SUM NOT MONEY_AMOUNT MINUSMONEY MINUSDURATION MINUSDEC MINUS MINIMUM MAXIMUM MATCH MAP LSQUARE LPAREN LET INT_LITERAL IF IDENT FOR FILTER FALSE EXISTS DECIMAL_LITERAL CONTENT CONSTRUCTOR CARDINAL ] +## expression -> FOR ALL . lident AMONG expression WE_HAVE expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## for_all_marked +## FOR ALL ## expected an identifier for the bound variable of the universal test -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION FOR YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION FOR YEAR ## -## Ends in an error in state: 202. +## Ends in an error in state: 64. ## -## for_all_marked -> FOR . ALL [ IDENT ] +## expression -> FOR . ALL lident AMONG expression WE_HAVE expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## FOR @@ -1032,41 +731,46 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION FOR YEAR expected the "all" keyword to mean the "for all" construction of the universal test -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION IF TRUE SEMICOLON +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION IF TRUE SEMICOLON ## -## Ends in an error in state: 221. +## Ends in an error in state: 166. ## -## expression -> IF expression . THEN expression ELSE expression [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION ] +## expression -> expression . DOT qlident [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OF expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . CONTAINS expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MULT expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . DIV expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUS expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MINUS expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . EQUAL expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . AND expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OR expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . XOR expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> IF expression . THEN expression ELSE expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] ## ## The known suffix of the stack is as follows: ## IF expression ## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 84, spurious reduction of production primitive_expression -> small_expression -## In state 86, spurious reduction of production base_expression -> primitive_expression -## In state 125, spurious reduction of production unop_expression -> base_expression -## In state 81, spurious reduction of production mult_expression -> unop_expression -## In state 172, spurious reduction of production sum_expression -> mult_expression -## In state 126, spurious reduction of production compare_expression -> sum_expression -## In state 183, spurious reduction of production logical_atom -> compare_expression -## In state 178, spurious reduction of production logical_or_expression -> logical_atom -## In state 174, spurious reduction of production logical_expression -> logical_or_expression -## In state 205, spurious reduction of production expression -> logical_expression -## expected the "then" keyword as the conditional expression is complete -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION IF YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION IF YEAR ## -## Ends in an error in state: 201. +## Ends in an error in state: 63. ## -## expression -> IF . expression THEN expression ELSE expression [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION ] +## expression -> IF . expression THEN expression ELSE expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## IF @@ -1074,50 +778,55 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION IF YEAR expected an expression for the test of the conditional -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION INT_LITERAL WITH_V +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION INT_LITERAL WITH_V ## -## Ends in an error in state: 65. +## Ends in an error in state: 57. ## -## literal -> num_literal . option(unit_literal) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## literal -> INT_LITERAL . option(addpos(unit_literal)) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## num_literal +## INT_LITERAL ## expected a unit for this literal, or a valid operator to complete the expression -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION LPAREN TRUE THEN +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION LPAREN TRUE THEN ## -## Ends in an error in state: 229. +## Ends in an error in state: 180. ## -## atomic_expression -> LPAREN expression . RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> LPAREN expression . RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> expression . DOT qlident [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OF expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . CONTAINS expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MULT expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . DIV expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUS expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MINUS expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . EQUAL expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . AND expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OR expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . XOR expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] ## ## The known suffix of the stack is as follows: ## LPAREN expression ## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 84, spurious reduction of production primitive_expression -> small_expression -## In state 86, spurious reduction of production base_expression -> primitive_expression -## In state 125, spurious reduction of production unop_expression -> base_expression -## In state 81, spurious reduction of production mult_expression -> unop_expression -## In state 172, spurious reduction of production sum_expression -> mult_expression -## In state 126, spurious reduction of production compare_expression -> sum_expression -## In state 183, spurious reduction of production logical_atom -> compare_expression -## In state 178, spurious reduction of production logical_or_expression -> logical_atom -## In state 174, spurious reduction of production logical_expression -> logical_or_expression -## In state 205, spurious reduction of production expression -> logical_expression -## unmatched parenthesis that should have been closed by here -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION LPAREN YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION LPAREN YEAR ## -## Ends in an error in state: 38. +## Ends in an error in state: 51. ## -## atomic_expression -> LPAREN . expression RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> LPAREN . expression RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## LPAREN @@ -1126,185 +835,59 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION LPAREN YEAR expected an expression inside the parenthesis -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION LSQUARE TRUE THEN +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION LBRACKET TRUE THEN ## -## Ends in an error in state: 235. +## Ends in an error in state: 174. ## -## separated_nonempty_list(SEMICOLON,expression) -> expression . [ RSQUARE ] -## separated_nonempty_list(SEMICOLON,expression) -> expression . SEMICOLON separated_nonempty_list(SEMICOLON,expression) [ RSQUARE ] +## expression -> expression . DOT qlident [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OF expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . CONTAINS expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MULT expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . DIV expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUS expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MINUS expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . EQUAL expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . AND expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OR expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . XOR expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## separated_nonempty_list(SEMICOLON,expression) -> expression . [ RBRACKET ] +## separated_nonempty_list(SEMICOLON,expression) -> expression . SEMICOLON separated_nonempty_list(SEMICOLON,expression) [ RBRACKET ] ## ## The known suffix of the stack is as follows: ## expression ## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 84, spurious reduction of production primitive_expression -> small_expression -## In state 86, spurious reduction of production base_expression -> primitive_expression -## In state 125, spurious reduction of production unop_expression -> base_expression -## In state 81, spurious reduction of production mult_expression -> unop_expression -## In state 172, spurious reduction of production sum_expression -> mult_expression -## In state 126, spurious reduction of production compare_expression -> sum_expression -## In state 183, spurious reduction of production logical_atom -> compare_expression -## In state 178, spurious reduction of production logical_or_expression -> logical_atom -## In state 174, spurious reduction of production logical_expression -> logical_or_expression -## In state 205, spurious reduction of production expression -> logical_expression -## expected a semicolon or a right square bracket after the collection element -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION LSQUARE YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION LBRACKET YEAR ## -## Ends in an error in state: 34. +## Ends in an error in state: 56. ## -## small_expression -> LSQUARE . loption(separated_nonempty_list(SEMICOLON,expression)) RSQUARE [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> LBRACKET . loption(separated_nonempty_list(SEMICOLON,expression)) RBRACKET [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## LSQUARE +## LBRACKET ## expected a collection element -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP FOR IDENT IN TRUE OF YEAR -## -## Ends in an error in state: 121. -## -## aggregate -> aggregate_func FOR ident IN primitive_expression OF . base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## aggregate_func FOR ident IN primitive_expression OF -## -expected an expression for the map predicate -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP FOR IDENT IN TRUE XOR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION MATCH TRUE WITH ALT YEAR ## -## Ends in an error in state: 46. +## Ends in an error in state: 184. ## -## primitive_expression -> small_expression . [ WITH WE_HAVE SUCH OF FOR ] -## small_expression -> small_expression . DOT option(terminated(constructor,DOT)) ident [ WITH WE_HAVE SUCH OF FOR DOT ] -## -## The known suffix of the stack is as follows: -## small_expression -## - -expected the "of" keyword to introduce the map predicate - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP FOR IDENT IN YEAR -## -## Ends in an error in state: 119. -## -## aggregate -> aggregate_func FOR ident IN . primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## aggregate_func FOR ident IN -## - -expected the collection argument to map - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP FOR IDENT YEAR -## -## Ends in an error in state: 118. -## -## aggregate -> aggregate_func FOR ident . IN primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## aggregate_func FOR ident -## - -expected the "in" keyword to introduce the collection argument to map - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP FOR YEAR -## -## Ends in an error in state: 117. -## -## aggregate -> aggregate_func FOR . ident IN primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## aggregate_func FOR -## - -expected the identifier for the map predicate - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP YEAR -## -## Ends in an error in state: 116. -## -## aggregate -> aggregate_func . FOR ident IN primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## aggregate_func -## - -expected the "for" keyword to introduce the identifier for the map predicate - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MATCH TRUE WITH ALT CONSTRUCTOR COLON CARDINAL RBRACKET -## -## Ends in an error in state: 192. -## -## match_arms -> ALT match_arm . match_arms [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION ] -## -## The known suffix of the stack is as follows: -## ALT match_arm -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 80, spurious reduction of production small_expression -> CARDINAL -## In state 84, spurious reduction of production primitive_expression -> small_expression -## In state 86, spurious reduction of production base_expression -> primitive_expression -## In state 125, spurious reduction of production unop_expression -> base_expression -## In state 81, spurious reduction of production mult_expression -> unop_expression -## In state 172, spurious reduction of production sum_expression -> mult_expression -## In state 126, spurious reduction of production compare_expression -> sum_expression -## In state 183, spurious reduction of production logical_atom -> compare_expression -## In state 178, spurious reduction of production logical_or_expression -> logical_atom -## In state 174, spurious reduction of production logical_expression -> logical_or_expression -## In state 196, spurious reduction of production match_arm -> constructor_binding COLON logical_expression -## - -expected the "with pattern" keyword to complete the pattern matching expression - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MATCH TRUE WITH ALT CONSTRUCTOR COLON YEAR -## -## Ends in an error in state: 195. -## -## match_arm -> constructor_binding COLON . logical_expression [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION ALT ] -## -## The known suffix of the stack is as follows: -## constructor_binding COLON -## - -expected a correct expression for this match arm - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MATCH TRUE WITH ALT CONSTRUCTOR XOR -## -## Ends in an error in state: 194. -## -## match_arm -> constructor_binding . COLON logical_expression [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION ALT ] -## -## The known suffix of the stack is as follows: -## constructor_binding -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 92, spurious reduction of production option(preceded(DOT,constructor)) -> -## In state 95, spurious reduction of production maybe_qualified_constructor -> constructor option(preceded(DOT,constructor)) -## In state 88, spurious reduction of production optional_binding -> -## In state 97, spurious reduction of production constructor_binding -> maybe_qualified_constructor optional_binding -## - -expected a constructor payload binding or a colon - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MATCH TRUE WITH ALT YEAR -## -## Ends in an error in state: 55. -## -## match_arms -> ALT . match_arm match_arms [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION ] +## nonempty_list(addpos(preceded(ALT,match_arm))) -> ALT . match_arm [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## nonempty_list(addpos(preceded(ALT,match_arm))) -> ALT . match_arm nonempty_list(addpos(preceded(ALT,match_arm))) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## ALT @@ -1312,23 +895,24 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MATCH TRUE WITH ALT YE expected the name of the constructor for the enum case in the pattern matching -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MATCH TRUE WITH YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION MATCH TRUE WITH YEAR ## -## Ends in an error in state: 54. +## Ends in an error in state: 183. ## -## expression -> MATCH primitive_expression WITH . match_arms [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION ] +## expression -> expression WITH . constructor_binding [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> MATCH expression WITH . nonempty_list(addpos(preceded(ALT,match_arm))) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## MATCH primitive_expression WITH +## MATCH expression WITH ## expected a pattern matching case -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MATCH YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION MATCH YEAR ## -## Ends in an error in state: 39. +## Ends in an error in state: 50. ## -## expression -> MATCH . primitive_expression WITH match_arms [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION ] +## expression -> MATCH . expression WITH nonempty_list(addpos(preceded(ALT,match_arm))) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## MATCH @@ -1336,361 +920,56 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MATCH YEAR expected an expression to match with -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAXIMUM TEXT INIT YEAR + +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION TRUE YEAR ## -## Ends in an error in state: 37. +## Ends in an error in state: 216. ## -## aggregate_func -> MAXIMUM typ_base INIT . primitive_expression [ FOR ] +## expression -> expression . DOT qlident [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . OF expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . CONTAINS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . MULT expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . DIV expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . PLUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . MINUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . LESSER expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . GREATER expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . AND expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . OR expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . XOR expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## option(preceded(UNDER_CONDITION,expression)) -> UNDER_CONDITION expression . [ COLON ] ## ## The known suffix of the stack is as follows: -## MAXIMUM typ_base INIT -## - -expected the maximum initial expression - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAXIMUM TEXT YEAR -## -## Ends in an error in state: 36. -## -## aggregate_func -> MAXIMUM typ_base . INIT primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## MAXIMUM typ_base -## - -expected the "initial" keyword to introduce the maximum initial expression - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAXIMUM YEAR -## -## Ends in an error in state: 35. -## -## aggregate_func -> MAXIMUM . typ_base INIT primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## MAXIMUM -## - -expected the type of the elements compared for the maximum - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MINIMUM TEXT INIT YEAR -## -## Ends in an error in state: 33. -## -## aggregate_func -> MINIMUM typ_base INIT . primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## MINIMUM typ_base INIT -## - -expected the minimum initial expression - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MINIMUM TEXT YEAR -## -## Ends in an error in state: 32. -## -## aggregate_func -> MINIMUM typ_base . INIT primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## MINIMUM typ_base -## - -expected the "initial" keyword to introduce the minimum initial expression - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MINIMUM YEAR -## -## Ends in an error in state: 31. -## -## aggregate_func -> MINIMUM . typ_base INIT primitive_expression [ FOR ] -## -## The known suffix of the stack is as follows: -## MINIMUM -## - -expected the type of the elements compared for the minimum - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MINUSMONEY YEAR -## -## Ends in an error in state: 82. -## -## unop_expression -> unop . unop_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## unop -## - -expected an expression to take the opposite of - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION SUM YEAR -## -## Ends in an error in state: 15. -## -## aggregate_func -> SUM . typ_base [ FOR ] -## -## The known suffix of the stack is as follows: -## SUM -## - -expected the "for" keyword to spell the aggregation - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE ASSERTION -## -## Ends in an error in state: 241. -## -## code_item -> SCOPE constructor option(scope_use_condition) . COLON nonempty_list(scope_item) [ SCOPE END_CODE DECLARATION ] -## -## The known suffix of the stack is as follows: -## SCOPE constructor option(scope_use_condition) -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 84, spurious reduction of production primitive_expression -> small_expression -## In state 86, spurious reduction of production base_expression -> primitive_expression -## In state 125, spurious reduction of production unop_expression -> base_expression -## In state 81, spurious reduction of production mult_expression -> unop_expression -## In state 172, spurious reduction of production sum_expression -> mult_expression -## In state 126, spurious reduction of production compare_expression -> sum_expression -## In state 183, spurious reduction of production logical_atom -> compare_expression -## In state 178, spurious reduction of production logical_or_expression -> logical_atom -## In state 174, spurious reduction of production logical_expression -> logical_or_expression -## In state 205, spurious reduction of production expression -> logical_expression -## In state 239, spurious reduction of production scope_use_condition -> UNDER_CONDITION expression -## In state 240, spurious reduction of production option(scope_use_condition) -> scope_use_condition -## - -expected a colon after the scope use precondition - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE DOT CONSTRUCTOR DOT YEAR -## -## Ends in an error in state: 48. -## -## small_expression -> small_expression DOT option(terminated(constructor,DOT)) . ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## small_expression DOT option(terminated(constructor,DOT)) -## - -expected the rest of the path after the dot - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE DOT CONSTRUCTOR YEAR -## -## Ends in an error in state: 51. -## -## option(terminated(constructor,DOT)) -> constructor . DOT [ IDENT ] -## -## The known suffix of the stack is as follows: -## constructor -## - -expected the rest of the path after a dot - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE DOT YEAR -## -## Ends in an error in state: 47. -## -## small_expression -> small_expression DOT . option(terminated(constructor,DOT)) ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## small_expression DOT -## - -expected the name of the struct field of the expression before - - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE INCREASING -## -## Ends in an error in state: 172. -## -## mult_expression -> mult_expression . mult_op unop_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## sum_expression -> mult_expression . [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## mult_expression -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 84, spurious reduction of production primitive_expression -> small_expression -## In state 86, spurious reduction of production base_expression -> primitive_expression -## In state 125, spurious reduction of production unop_expression -> base_expression -## In state 81, spurious reduction of production mult_expression -> unop_expression -## - -expected an operator to compose the expression on the left - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE MULTMONEY YEAR -## -## Ends in an error in state: 169. -## -## mult_expression -> mult_expression mult_op . unop_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## mult_expression mult_op -## - -expected an expression on the right side of the multiplication or division operator - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE NOT_EQUAL YEAR -## -## Ends in an error in state: 171. -## -## compare_expression -> sum_expression compare_op . compare_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET OR LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## sum_expression compare_op -## - -expected an expression on the right side of the comparison operator - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE OF YEAR -## -## Ends in an error in state: 85. -## -## base_expression -> small_expression OF . base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## small_expression OF -## - -expected an expression for the argument of this function call - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE PLUSMONEY YEAR -## -## Ends in an error in state: 160. -## -## sum_expression -> sum_expression sum_op . mult_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## sum_expression sum_op -## - -expected an expression after the plus or minus operator - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WITH CONSTRUCTOR CONSTRUCTOR -## -## Ends in an error in state: 88. -## -## constructor_binding -> maybe_qualified_constructor . optional_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## maybe_qualified_constructor -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 92, spurious reduction of production option(preceded(DOT,constructor)) -> -## In state 95, spurious reduction of production maybe_qualified_constructor -> constructor option(preceded(DOT,constructor)) -## - -a enum constructor pattern should be followed by a payload - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WITH CONSTRUCTOR OF CONSTRUCTOR XOR -## -## Ends in an error in state: 90. -## -## optional_binding -> OF maybe_qualified_constructor . constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## OF maybe_qualified_constructor -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 92, spurious reduction of production option(preceded(DOT,constructor)) -> -## In state 95, spurious reduction of production maybe_qualified_constructor -> constructor option(preceded(DOT,constructor)) -## - -unexpected expression following a function application with an enum constructor name - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WITH CONSTRUCTOR OF YEAR -## -## Ends in an error in state: 89. -## -## optional_binding -> OF . ident [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## optional_binding -> OF . maybe_qualified_constructor constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## OF -## - -expecting an expression to stand in as the function argument - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WITH CONSTRUCTOR YEAR -## -## Ends in an error in state: 92. -## -## maybe_qualified_constructor -> constructor . option(preceded(DOT,constructor)) [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSTRUCTOR CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## constructor -## - -the expression before ended, what follows next should be an operator or the rest of the code structure - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WITH YEAR -## -## Ends in an error in state: 87. -## -## base_expression -> primitive_expression WITH . constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## primitive_expression WITH -## - - - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE XOR YEAR -## -## Ends in an error in state: 181. -## -## logical_or_expression -> logical_atom logical_or_op . logical_or_expression [ THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET LABEL IN EXCEPTION END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## logical_atom logical_or_op -## - - - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE YEAR -## -## Ends in an error in state: 84. -## -## base_expression -> small_expression . OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ] -## primitive_expression -> small_expression . [ XOR WITH THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## small_expression -> small_expression . DOT option(terminated(constructor,DOT)) ident [ XOR WITH THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## small_expression +## UNDER_CONDITION expression ## expected the function application operator - - - - - -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION VERTICAL YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION BAR YEAR ## -## Ends in an error in state: 11. +## Ends in an error in state: 76. ## -## literal -> VERTICAL . DATE_LITERAL VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MULDURATION MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDEC DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## literal -> BAR . DATE_LITERAL BAR [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## VERTICAL +## BAR ## expected the year for this date literal -source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION YEAR +source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION YEAR ## -## Ends in an error in state: 10. +## Ends in an error in state: 9. ## -## scope_use_condition -> UNDER_CONDITION . expression [ COLON ] +## option(preceded(UNDER_CONDITION,expression)) -> UNDER_CONDITION . expression [ COLON ] ## ## The known suffix of the stack is as follows: ## UNDER_CONDITION @@ -1698,14 +977,14 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION YEAR expected an expression -source_file: BEGIN_CODE SCOPE CONSTRUCTOR YEAR +source_file: BEGIN_CODE SCOPE UIDENT YEAR ## -## Ends in an error in state: 9. +## Ends in an error in state: 8. ## -## code_item -> SCOPE constructor . option(scope_use_condition) COLON nonempty_list(scope_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> SCOPE UIDENT . option(preceded(UNDER_CONDITION,expression)) COLON nonempty_list(addpos(scope_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## SCOPE constructor +## SCOPE UIDENT ## expected a scope use condition or the content of this scope use @@ -1714,7 +993,7 @@ source_file: BEGIN_CODE SCOPE YEAR ## ## Ends in an error in state: 7. ## -## code_item -> SCOPE . constructor option(scope_use_condition) COLON nonempty_list(scope_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> SCOPE . UIDENT option(preceded(UNDER_CONDITION,expression)) COLON nonempty_list(addpos(scope_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## SCOPE @@ -1724,7 +1003,7 @@ expected the name of the scope being used source_file: BEGIN_CODE YEAR ## -## Ends in an error in state: 384. +## Ends in an error in state: 353. ## ## source_file_item -> BEGIN_CODE . code END_CODE [ LAW_TEXT LAW_HEADING EOF BEGIN_METADATA BEGIN_DIRECTIVE BEGIN_CODE ] ## diff --git a/compiler/surface/parser.mly b/compiler/surface/parser.mly index 2d2299de..5c3f7670 100644 --- a/compiler/surface/parser.mly +++ b/compiler/surface/parser.mly @@ -18,519 +18,516 @@ *) %{ - open Utils + open Catala_utils %} %parameter Ast.builtin_expression option end> -%type source_file - -%start source_file - (* The token is returned for every line of law text, make them right-associative so that we concat them efficiently as much as possible. *) %right LAW_TEXT +(* Precedence of expression constructions *) +%right top_expr +%right ALT +%right let_expr IS +%right AND OR XOR (* Desugaring enforces proper parens later on *) +%nonassoc GREATER GREATER_EQUAL LESSER LESSER_EQUAL EQUAL NOT_EQUAL +%left PLUS MINUS PLUSPLUS +%left MULT DIV +%right apply OF CONTAINS FOR SUCH WITH +%right unop_expr +%right CONTENT +%nonassoc UIDENT +%left DOT + +(* Types of all rules, in order. Without this, Menhir type errors are nearly + impossible to debug because of inlining *) + +%type addpos(UIDENT) +%type pos(CONDITION) +%type typ_base +%type typ +%type uident +%type lident +%type scope_var +%type quident +%type qlident +%type expression +%type naked_expression +%type struct_content_field +%type struct_or_enum_inject +%type num_literal +%type unit_literal +%type literal +%type<(Ast.lident Marked.pos * expression) list> scope_call_args +%type minmax +%type unop +%type binop +%type constructor_binding +%type match_arm +%type condition_consequence +%type rule_expr +%type rule_consequence +%type rule +%type definition_parameters +%type label +%type state +%type exception_to +%type definition +%type variation_type +%type assertion +%type scope_item +%type struct_scope_base +%type struct_scope_func +%type struct_scope +%type scope_decl_item_attribute_input +%type scope_decl_item_attribute_output +%type scope_decl_item_attribute +%type scope_decl_item +%type enum_decl_line +%type code_item +%type code +%type metadata_block +%type law_heading +%type law_text +%type source_file_item +%type source_file + +%start source_file + %% -typ_base: -| INTEGER { (Integer, Pos.from_lpos $sloc) } -| BOOLEAN { (Boolean, Pos.from_lpos $sloc) } -| MONEY { (Money, Pos.from_lpos $sloc) } -| DURATION { (Duration, Pos.from_lpos $sloc) } -| TEXT { (Text, Pos.from_lpos $sloc) } -| DECIMAL { (Decimal, Pos.from_lpos $sloc) } -| DATE { (Date, Pos.from_lpos $sloc) } -| c = constructor { - let (s, _) = c in - (Named s, Pos.from_lpos $sloc) +let pos(x) == +| x ; { Pos.from_lpos $loc } + +let addpos(x) == +| ~=x ; { x, Pos.from_lpos $loc(x) } + +let typ_base := +| INTEGER ; { Integer } +| BOOLEAN ; { Boolean } +| MONEY ; { Money } +| DURATION ; { Duration } +| TEXT ; { Text } +| DECIMAL ; { Decimal } +| DATE ; { Date } +| c = quident ; { let path, uid = c in Named (path, uid) } + +let typ := +| t = typ_base ; +| COLLECTION ; t = addpos(typ) ; + +let uident == +| ~ = addpos(UIDENT) ; <> + +let lident := +| i = LIDENT ; { + match Localisation.lex_builtin i with + | Some _ -> + Errors.raise_spanned_error + (Pos.from_lpos $sloc) + "Reserved builtin name" + | None -> + (i, Pos.from_lpos $sloc) } -collection_marked: -| COLLECTION { Pos.from_lpos $sloc } +let scope_var == +| b = separated_nonempty_list(DOT, addpos(LIDENT)) ; <> -typ: -| t = typ_base { - let t, loc = t in - (Primitive t, loc) +let quident := +| uid = uident ; DOT ; quid = quident ; { + let path, quid = quid in uid :: path, quid } -| collection_marked t = typ { - (Collection t, Pos.from_lpos $sloc) +| id = uident ; { [], id } + +let qlident := +| uid = uident ; DOT ; qlid = qlident ; { + let path, lid = qlid in uid :: path, lid +} +| id = lident ; { [], id } + +let expression := +| e = addpos(naked_expression) ; <> + +let naked_expression == +| id = addpos(LIDENT) ; { + match Localisation.lex_builtin (Marked.unmark id) with + | Some b -> Builtin b + | None -> Ident ([], id) +} +| uid = uident ; DOT ; qlid = qlident ; { + let path, lid = qlid in Ident (uid :: path, lid) +} +| l = literal ; { + Literal l +} +| LPAREN ; e = expression ; RPAREN ; +| e = expression ; + DOT ; i = addpos(qlident) ; +| CARDINAL ; { + Builtin Cardinal +} +| DECIMAL ; { + Builtin ToDecimal +} +| MONEY ; { + Builtin ToMoney +} +| LBRACKET ; l = separated_list(SEMICOLON, expression) ; RBRACKET ; + +| e = struct_or_enum_inject ; <> +| e1 = expression ; + OF ; + e2 = expression ; { + FunCall (e1, e2) +} %prec apply +| OUTPUT ; OF ; + c = addpos(quident) ; + fields = option(scope_call_args) ; { + let fields = Option.value ~default:[] fields in + ScopeCall (c, fields) +} +| e = expression ; + WITH ; c = constructor_binding ; { + TestMatchCase (e, (c, Pos.from_lpos $sloc)) +} +| e1 = expression ; + CONTAINS ; + e2 = expression ; { + MemCollection (e2, e1) +} %prec apply +| SUM ; typ = addpos(typ_base) ; + OF ; coll = expression ; { + CollectionOp (AggregateSum { typ = Marked.unmark typ }, coll) +} %prec apply +| f = expression ; + FOR ; i = lident ; + AMONG ; coll = expression ; { + CollectionOp (Map {f = i, f}, coll) +} %prec apply +| max = minmax ; + OF ; coll = expression ; + OR ; IF ; COLLECTION ; EMPTY ; THEN ; + default = expression ; { + CollectionOp (AggregateExtremum { max; default }, coll) +} %prec apply +| op = addpos(unop) ; e = expression ; { + Unop (op, e) +} %prec unop_expr +| e1 = expression ; + binop = addpos(binop) ; + e2 = expression ; { + Binop (binop, e1, e2) +} +| EXISTS ; i = lident ; + AMONG ; coll = expression ; + SUCH ; THAT ; predicate = expression ; { + CollectionOp (Exists {predicate = i, predicate}, coll) +} %prec let_expr +| FOR ; ALL ; i = lident ; + AMONG ; coll = expression ; + WE_HAVE ; predicate = expression ; { + CollectionOp (Forall {predicate = i, predicate}, coll) +} %prec let_expr +| MATCH ; e = expression ; + WITH ; + arms = addpos(nonempty_list(addpos(preceded(ALT, match_arm)))) ; { + MatchWith (e, arms) +} +| IF ; e1 = expression ; + THEN ; e2 = expression ; + ELSE ; e3 = expression ; { + IfThenElse (e1, e2, e3) +} %prec let_expr +| LET ; id = lident ; + DEFINED_AS ; e1 = expression ; + IN ; e2 = expression ; { + LetIn (id, e1, e2) +} %prec let_expr +| i = lident ; + AMONG ; coll = expression ; + SUCH ; THAT ; f = expression ; { + CollectionOp (Filter {f = i, f}, coll) +} %prec top_expr +| fmap = expression ; + FOR ; i = lident ; + AMONG ; coll = expression ; + SUCH ; THAT ; ffilt = expression ; { + CollectionOp (Map {f = i, fmap}, (CollectionOp (Filter {f = i, ffilt}, coll), Pos.from_lpos $loc)) +} %prec top_expr +| i = lident ; + AMONG ; coll = expression ; + SUCH ; THAT ; f = expression ; + IS ; max = minmax ; + OR ; IF ; COLLECTION ; EMPTY ; THEN ; default = expression ; { + CollectionOp (AggregateArgExtremum { max; default; f = i, f }, coll) +} %prec top_expr + + +let struct_content_field := +| field = lident ; COLON ; e = expression ; <> + +let struct_or_enum_inject == +| uid = addpos(quident) ; + data = option(preceded(CONTENT,expression)) ; { + EnumInject(uid, data) +} +| c = addpos(quident) ; + LBRACE ; + fields = nonempty_list(preceded(ALT, struct_content_field)) ; + RBRACE ; { + StructLit(c, fields) } -qident: -| b = separated_nonempty_list(DOT, ident) { - ( b, Pos.from_lpos $sloc) +let num_literal == +| d = INT_LITERAL ; +| d = DECIMAL_LITERAL ; { + let (d1, d2) = d in Dec (d1, d2) } -atomic_expression: -| q = IDENT { - (match Localisation.lex_builtin q with - | Some b -> Builtin b - | None -> Ident q), - Pos.from_lpos $sloc } -| l = literal { let (l, l_pos) = l in (Literal l, l_pos) } -| LPAREN e = expression RPAREN { e } +let unit_literal == +| PERCENT ; { Percent } +| YEAR ; { Year} +| MONTH ; { Month } +| DAY ; { Day } -small_expression: -| e = atomic_expression { e } -| e = small_expression DOT c = option(terminated(constructor,DOT)) i = ident { - (Dotted (e, c, i), Pos.from_lpos $sloc) -} -| CARDINAL { - (Builtin Cardinal, Pos.from_lpos $sloc) -} -| LSQUARE l = separated_list(SEMICOLON, expression) RSQUARE { - (ArrayLit l, Pos.from_lpos $sloc) -} - -struct_content_field: -| field = ident COLON e = logical_expression { - (field, e) -} - -enum_inject_content: -| CONTENT e = small_expression { e } - -struct_inject_content: -| LBRACKET fields = nonempty_list(preceded(ALT, struct_content_field)) RBRACKET { fields } - -struct_or_enum_inject: -| enum = constructor c = option(preceded(DOT, constructor)) data = option(enum_inject_content) { - (* The fully qualified enum is actually the optional part, but it leads to shift/reduce conflicts. - We flip it here *) - match c with - | None -> (EnumInject(None, enum, data), Pos.from_lpos $sloc) - | Some c -> (EnumInject(Some enum, c, data), Pos.from_lpos $sloc) -} -| c = constructor fields = struct_inject_content { (StructLit(c, fields), Pos.from_lpos $sloc) } - -primitive_expression: -| e = small_expression { e } -| e = struct_or_enum_inject { - e -} - -num_literal: -| d = INT_LITERAL { (Int d, Pos.from_lpos $sloc) } -| d = DECIMAL_LITERAL { -let (d1, d2) = d in -(Dec (d1, d2), Pos.from_lpos $sloc) -} - -unit_literal: -| PERCENT { (Percent, Pos.from_lpos $sloc) } -| YEAR { (Year, Pos.from_lpos $sloc)} -| MONTH { (Month, Pos.from_lpos $sloc) } -| DAY { (Day, Pos.from_lpos $sloc) } - -literal: -| l = num_literal u = option(unit_literal) { - (LNumber (l, u), Pos.from_lpos $sloc) -} -| money = MONEY_AMOUNT { +let literal := +| l = addpos(num_literal); u = option(addpos(unit_literal)) ; +| money = MONEY_AMOUNT ; { let (units, cents) = money in - (LMoneyAmount { + LMoneyAmount { money_amount_units = units; money_amount_cents = cents; - }, Pos.from_lpos $sloc) + } } -| VERTICAL d = DATE_LITERAL VERTICAL { +| BAR ; d = DATE_LITERAL ; BAR ; { let (y,m,d) = d in - (LDate { + LDate { literal_date_year = y; literal_date_month = m; literal_date_day = d; - }, Pos.from_lpos $sloc) + } } -| TRUE { (LBool true, Pos.from_lpos $sloc) } -| FALSE { (LBool false, Pos.from_lpos $sloc) } +| TRUE ; { LBool true } +| FALSE ; { LBool false } -compare_op: -| LESSER { (Lt KInt, Pos.from_lpos $sloc) } -| LESSER_EQUAL { (Lte KInt, Pos.from_lpos $sloc) } -| GREATER { (Gt KInt, Pos.from_lpos $sloc) } -| GREATER_EQUAL { (Gte KInt, Pos.from_lpos $sloc) } -| LESSER_DEC { (Lt KDec, Pos.from_lpos $sloc) } -| LESSER_EQUAL_DEC { (Lte KDec, Pos.from_lpos $sloc) } -| GREATER_DEC { (Gt KDec, Pos.from_lpos $sloc) } -| GREATER_EQUAL_DEC { (Gte KDec, Pos.from_lpos $sloc) } -| LESSER_MONEY { (Lt KMoney, Pos.from_lpos $sloc) } -| LESSER_EQUAL_MONEY { (Lte KMoney, Pos.from_lpos $sloc) } -| GREATER_MONEY { (Gt KMoney, Pos.from_lpos $sloc) } -| GREATER_EQUAL_MONEY { (Gte KMoney, Pos.from_lpos $sloc) } -| LESSER_DATE { (Lt KDate, Pos.from_lpos $sloc) } -| LESSER_EQUAL_DATE { (Lte KDate, Pos.from_lpos $sloc) } -| GREATER_DATE { (Gt KDate, Pos.from_lpos $sloc) } -| GREATER_EQUAL_DATE { (Gte KDate, Pos.from_lpos $sloc) } -| LESSER_DURATION { (Lt KDuration, Pos.from_lpos $sloc) } -| LESSER_EQUAL_DURATION { (Lte KDuration, Pos.from_lpos $sloc) } -| GREATER_DURATION { (Gt KDuration, Pos.from_lpos $sloc) } -| GREATER_EQUAL_DURATION { (Gte KDuration, Pos.from_lpos $sloc) } -| EQUAL { (Eq, Pos.from_lpos $sloc) } -| NOT_EQUAL { (Neq, Pos.from_lpos $sloc) } - -aggregate_func: -| CONTENT MAXIMUM t = typ_base INIT init = primitive_expression { - (Aggregate (AggregateArgExtremum (true, Marked.unmark t, init)), Pos.from_lpos $sloc) -} -| CONTENT MINIMUM t = typ_base INIT init = primitive_expression { - (Aggregate (AggregateArgExtremum (false, Marked.unmark t, init)), Pos.from_lpos $sloc) -} -| MAXIMUM t = typ_base INIT init = primitive_expression { - (Aggregate (AggregateExtremum (true, Marked.unmark t, init)), Pos.from_lpos $sloc) -} -| MINIMUM t = typ_base INIT init = primitive_expression { - (Aggregate (AggregateExtremum (false, Marked.unmark t, init)), Pos.from_lpos $sloc) -} -| SUM t = typ_base { (Aggregate (AggregateSum (Marked.unmark t)), Pos.from_lpos $sloc) } -| CARDINAL { (Aggregate AggregateCount, Pos.from_lpos $sloc) } -| FILTER { (Filter, Pos.from_lpos $sloc ) } -| MAP { (Map, Pos.from_lpos $sloc) } - -aggregate: -| func = aggregate_func FOR i = ident IN e1 = primitive_expression - OF e2 = base_expression { - (CollectionOp (func, i, e1, e2), Pos.from_lpos $sloc) +let scope_call_args == +| WITH_V ; + LBRACE ; + fields = list(preceded (ALT, struct_content_field)) ; + RBRACE ; { + fields } -base_expression: -| e = primitive_expression { e } -| ag = aggregate { ag } -| e1 = small_expression OF e2 = base_expression { - (FunCall (e1, e2), Pos.from_lpos $sloc) -} -| c = constructor OF - LBRACKET fields = list(preceded (ALT, struct_content_field)) RBRACKET { - (* empty list is allowed *) - (ScopeCall (c, fields), Pos.from_lpos $sloc) -} -| e = primitive_expression WITH c = constructor_binding { - (TestMatchCase (e, (c, Pos.from_lpos $sloc)), Pos.from_lpos $sloc) -} -| e1 = primitive_expression CONTAINS e2 = base_expression { - (MemCollection (e2, e1), Pos.from_lpos $sloc) +let minmax == +| MAXIMUM ; { true } +| MINIMUM ; { false } + +let unop == +| NOT ; { Not } +| k = MINUS ; + +let binop == +| k = MULT ; +| k = DIV ;
+| k = PLUS ; +| k = MINUS ; +| PLUSPLUS ; { Concat } +| k = LESSER ; +| k = LESSER_EQUAL ; +| k = GREATER ; +| k = GREATER_EQUAL ; +| EQUAL ; { Eq } +| NOT_EQUAL ; { Neq } +| AND ; { And } +| OR ; { Or } +| XOR ; { Xor } + +let constructor_binding := +| uid = addpos(quident) ; OF ; lid = lident ; { + ([uid], Some lid) } +| uid = addpos(quident) ; { + ([uid], None) +} %prec apply -unop: -| NOT { (Not, Pos.from_lpos $sloc) } -| MINUS { (Minus KInt, Pos.from_lpos $sloc) } -| MINUSDEC { (Minus KDec, Pos.from_lpos $sloc) } -| MINUSMONEY { (Minus KMoney, Pos.from_lpos $sloc) } -| MINUSDURATION { (Minus KDuration, Pos.from_lpos $sloc) } - -unop_expression: -| e = base_expression { e } -| op = unop e = unop_expression { (Unop (op, e), Pos.from_lpos $sloc) } - -mult_op: -| MULT { (Mult KInt, Pos.from_lpos $sloc) } -| DIV { (Div KInt, Pos.from_lpos $sloc) } -| MULTDEC { (Mult KDec, Pos.from_lpos $sloc) } -| DIVDEC { (Div KDec, Pos.from_lpos $sloc) } -| MULTMONEY { (Mult KMoney, Pos.from_lpos $sloc) } -| DIVMONEY { (Div KMoney, Pos.from_lpos $sloc) } -| MULDURATION { (Mult KDuration, Pos.from_lpos $sloc) } - -mult_expression: -| e = unop_expression { e } -| e1 = mult_expression binop = mult_op e2 = unop_expression { - (Binop (binop, e1, e2), Pos.from_lpos $sloc) -} - -sum_op: -| PLUSDURATION { (Add KDuration, Pos.from_lpos $sloc) } -| MINUSDURATION { (Sub KDuration, Pos.from_lpos $sloc) } -| PLUSDATE { (Add KDate, Pos.from_lpos $sloc) } -| MINUSDATE { (Sub KDate, Pos.from_lpos $sloc) } -| PLUSMONEY { (Add KMoney, Pos.from_lpos $sloc) } -| MINUSMONEY { (Sub KMoney, Pos.from_lpos $sloc) } -| PLUSDEC { (Add KDec, Pos.from_lpos $sloc) } -| MINUSDEC { (Sub KDec, Pos.from_lpos $sloc) } -| PLUS { (Add KInt, Pos.from_lpos $sloc) } -| MINUS { (Sub KInt, Pos.from_lpos $sloc) } -| PLUSPLUS { (Concat, Pos.from_lpos $sloc) } - -sum_expression: -| e = mult_expression { e } -| e1 = sum_expression binop = sum_op e2 = mult_expression { - (Binop (binop, e1, e2), Pos.from_lpos $sloc) -} - -logical_and_op: -| AND { (And, Pos.from_lpos $sloc) } - -logical_or_op: -| OR { (Or, Pos.from_lpos $sloc) } -| XOR { (Xor, Pos.from_lpos $sloc) } - -compare_expression: -| e = sum_expression { e } -| e1 = sum_expression binop = compare_op e2 = compare_expression { - (Binop (binop, e1, e2), Pos.from_lpos $sloc) -} - -logical_atom: -| e = compare_expression { e } - -logical_or_expression: -| e = logical_atom { e } -| e1 = logical_atom binop = logical_or_op e2 = logical_or_expression { - (Binop (binop, e1, e2), Pos.from_lpos $sloc) -} - -logical_expression: -| e = logical_or_expression { e } -| e1 = logical_or_expression binop = logical_and_op e2 = logical_expression { - (Binop (binop, e1, e2), Pos.from_lpos $sloc) -} - -maybe_qualified_constructor: -| c_or_path = constructor c = option(preceded(DOT, constructor)) { - match c with - | None -> (None, c_or_path) - | Some c -> (Some c_or_path, c) -} - -optional_binding: -| { ([], None)} -| OF i = ident {([], Some i)} -| OF c = maybe_qualified_constructor cs_and_i = constructor_binding { - let (cs, i) = cs_and_i in - (c::cs, i) -} - -constructor_binding: -| c = maybe_qualified_constructor cs_and_i = optional_binding { -let (cs, i) = cs_and_i in -(c::cs, i) -} - -match_arm: -| WILDCARD COLON e = logical_expression { (WildCard (e), Pos.from_lpos $sloc) } -| pat = constructor_binding COLON e = logical_expression { - (MatchCase ({ - (* DM 14/04/2020 : I can't have the $sloc in constructor_binding... *) - match_case_pattern = (pat, Pos.from_lpos $sloc); +let match_arm := +| WILDCARD ; COLON ; ~ = expression ; + %prec ALT +| pat = addpos(constructor_binding) ; + COLON ; e = expression ; { + MatchCase { + match_case_pattern = pat; match_case_expr = e; - }), Pos.from_lpos $sloc) + } +} %prec ALT + +let condition_consequence := +| UNDER_CONDITION ; c = expression ; CONSEQUENCE ; <> + +let rule_expr := +| i = addpos(scope_var) ; p = option(definition_parameters) ; <> + +let rule_consequence := +| flag = option(NOT); FILLED ; { + None = flag } -match_arms: -| ALT a = match_arm arms = match_arms { -let (arms, _) = arms in -(a::arms, Pos.from_lpos $sloc) -} -| { ([], Pos.from_lpos $sloc)} - -for_all_marked: -| FOR ALL { Pos.from_lpos $sloc } - -exists_marked: -| EXISTS { Pos.from_lpos $sloc } - -forall_prefix: -| pos = for_all_marked i = ident IN e = primitive_expression WE_HAVE { - (pos, i, e) +let rule := +| label = option(label) ; + except = option(exception_to) ; + RULE ; + name_and_param = rule_expr ; + cond = option(condition_consequence) ; + state = option(state) ; + consequence = addpos(rule_consequence) ; { + let (name, param_applied) = name_and_param in + let cons : bool Marked.pos = consequence in + let rule_exception = match except with + | None -> NotAnException + | Some x -> x + in + { + rule_label = label; + rule_exception_to = rule_exception; + rule_parameter = param_applied; + rule_condition = cond; + rule_name = name; + rule_id = Shared_ast.RuleName.fresh + (String.concat "." (List.map (fun i -> Marked.unmark i) (Marked.unmark name)), + Pos.from_lpos $sloc); + rule_consequence = cons; + rule_state = state; + } } -exists_prefix: -| pos = exists_marked i = ident IN e = primitive_expression SUCH THAT { - (pos, i, e) +let definition_parameters := +| OF ; i = lident ; <> + +let label := +| LABEL ; i = lident ; <> + +let state := +| STATE ; s = lident ; <> + +let exception_to := +| EXCEPTION ; i = option(lident) ; { + match i with + | None -> UnlabeledException + | Some x -> ExceptionToLabel x } -expression: -| i_in_e1 = exists_prefix e2 = expression { -let (pos, i,e1) = i_in_e1 in -(CollectionOp ((Exists, pos), i, e1, e2), Pos.from_lpos $sloc) -} -| i_in_e1 = forall_prefix e2 = expression { -let (pos, i,e1) = i_in_e1 in -(CollectionOp ((Forall, pos), i, e1, e2), Pos.from_lpos $sloc) -} -| MATCH e = primitive_expression WITH arms = match_arms { - (MatchWith (e, arms), Pos.from_lpos $sloc) -} -| IF e1 = expression THEN e2 = expression ELSE e3 = expression { - (IfThenElse (e1, e2, e3), Pos.from_lpos $sloc) -} -| LET id = ident DEFINED_AS e1 = expression IN e2 = expression { - (LetIn (id, e1, e2), Pos.from_lpos $sloc) -} -| e = logical_expression { e } - -condition: -| UNDER_CONDITION e = expression { e } - -condition_consequence: -| cond = condition CONSEQUENCE { cond } - -rule_expr: -| i = qident p = option(definition_parameters) { (i, p) } - -rule_consequence: -| flag = option(NOT) FILLED { - let b = match flag with Some _ -> false | None -> true in - (b, Pos.from_lpos $sloc) -} - -rule: -| label = option(label) - except = option(exception_to) - RULE - name_and_param = rule_expr cond = option(condition_consequence) - state = option(state) - consequence = rule_consequence { - let (name, param_applied) = name_and_param in - let cons : bool Marked.pos = consequence in - let rule_exception = match except with | None -> NotAnException | Some x -> x in - ({ - rule_label = label; - rule_exception_to = rule_exception; - rule_parameter = param_applied; - rule_condition = cond; - rule_name = name; - rule_id = Desugared.Ast.RuleName.fresh +let definition := +| label = option(label); + except = option(exception_to) ; + DEFINITION ; + name = addpos(scope_var) ; + param = option(definition_parameters) ; + state = option(state) ; + cond = option(condition_consequence) ; + DEFINED_AS ; + e = expression ; { + let def_exception = match except with + | None -> NotAnException + | Some x -> x + in + { + definition_label = label; + definition_exception_to = def_exception; + definition_name = name; + definition_parameter = param; + definition_condition = cond; + definition_id = + Shared_ast.RuleName.fresh (String.concat "." (List.map (fun i -> Marked.unmark i) (Marked.unmark name)), Pos.from_lpos $sloc); - rule_consequence = cons; - rule_state = state; - }, $sloc) + definition_expr = e; + definition_state = state; + } } -definition_parameters: -| OF i = ident { i } +let variation_type := +| INCREASING ; { Increasing } +| DECREASING ; { Decreasing } -label: -| LABEL i = ident { i } - -state: -| STATE s = ident { s } - -exception_to: -| EXCEPTION i = option(ident) { - match i with | None -> UnlabeledException | Some x -> ExceptionToLabel x -} - -definition: -| label = option(label) - except = option(exception_to) - DEFINITION - name = qident param = option(definition_parameters) - state = option(state) - cond = option(condition_consequence) DEFINED_AS e = expression { - let def_exception = match except with | None -> NotAnException | Some x -> x in - ({ - definition_label = label; - definition_exception_to = def_exception; - definition_name = name; - definition_parameter = param; - definition_condition = cond; - definition_id = - Desugared.Ast.RuleName.fresh - (String.concat "." (List.map (fun i -> Marked.unmark i) (Marked.unmark name)), - Pos.from_lpos $sloc); - definition_expr = e; - definition_state = state; - }, $sloc) -} - -variation_type: -| INCREASING { (Increasing, Pos.from_lpos $sloc) } -| DECREASING { (Decreasing, Pos.from_lpos $sloc) } - -assertion_base: -| e = expression { let (e, _) = e in (e, Pos.from_lpos $sloc) } - -assertion: -| cond = option(condition_consequence) base = assertion_base { +let assertion := +| cond = option(condition_consequence) ; + base = expression ; { (Assertion { assertion_condition = cond; assertion_content = base; }) } -| FIXED q = qident BY i = ident { MetaAssertion (FixedBy (q, i)) } -| VARIES q = qident WITH_V e = base_expression t = option(variation_type) { +| FIXED ; q = addpos(scope_var) ; BY ; i = lident ; { + MetaAssertion (FixedBy (q, i)) +} +| VARIES ; q = addpos(scope_var) ; + WITH_V ; e = expression ; + t = option(addpos(variation_type)) ; { MetaAssertion (VariesWith (q, e, t)) } -scope_item: -| r = rule { - let (r, _) = r in (Rule r, Pos.from_lpos $sloc) -} -| d = definition { - let (d, _) = d in (Definition d, Pos.from_lpos $sloc) -} -| ASSERTION contents = assertion { - (contents, Pos.from_lpos $sloc) -} +let scope_item := +| r = rule ; +| d = definition ; +| ASSERTION ; contents = assertion ; <> -ident: -| i = IDENT { - match Localisation.lex_builtin i with - | Some _ -> - Errors.raise_spanned_error - (Pos.from_lpos $sloc) - "Reserved builtin name" - | None -> - (i, Pos.from_lpos $sloc) -} - -condition_pos: -| CONDITION { Pos.from_lpos $sloc } - -struct_scope_base: -| DATA i= ident CONTENT t = typ { +let struct_scope_base := +| DATA ; i = lident ; + CONTENT ; t = addpos(typ) ; { let t, pos = t in (i, (Data t, pos)) } -| pos = condition_pos i = ident { +| pos = pos(CONDITION) ; i = lident ; { (i, (Condition, pos)) } -struct_scope_func: -| DEPENDS t = typ { t } +let struct_scope_func == +| DEPENDS ; t = addpos(typ) ; <> -struct_scope: -| name_and_typ = struct_scope_base func_typ = option(struct_scope_func) { +let struct_scope := +| name_and_typ = struct_scope_base ; + func_typ = option(struct_scope_func) ; { let (name, typ) = name_and_typ in let (typ, typ_pos) = typ in - ({ + { struct_decl_field_name = name; struct_decl_field_typ = match func_typ with | None -> (Base typ, typ_pos) - | Some (arg_typ, arg_pos) -> (Func { - arg_typ = (Data arg_typ, arg_pos); - return_typ = (typ, typ_pos); - }, Pos.from_lpos $sloc) ; - }, Pos.from_lpos $sloc) + | Some (arg_typ, arg_pos) -> + Func { + arg_typ = (Data arg_typ, arg_pos); + return_typ = (typ, typ_pos); + }, Pos.from_lpos $sloc ; + } } -scope_decl_item_attribute_input: -| CONTEXT { Context, Pos.from_lpos $sloc } -| INPUT { Input, Pos.from_lpos $sloc } +let scope_decl_item_attribute_input := +| CONTEXT ; { Context } +| INPUT ; { Input } -scope_decl_item_attribute_output: -| OUTPUT { true, Pos.from_lpos $sloc } -| { false, Pos.from_lpos $sloc } +let scope_decl_item_attribute_output := +| OUTPUT ; { true } +| { false } -scope_decl_item_attribute: -| input = scope_decl_item_attribute_input - output = scope_decl_item_attribute_output { +let scope_decl_item_attribute := +| input = addpos(scope_decl_item_attribute_input) ; + output = addpos(scope_decl_item_attribute_output) ; { { scope_decl_context_io_input = input; scope_decl_context_io_output = output } } -| INTERNAL { +| INTERNAL ; { { scope_decl_context_io_input = (Internal, Pos.from_lpos $sloc); scope_decl_context_io_output = (false, Pos.from_lpos $sloc) } } -| OUTPUT { +| OUTPUT ; { { scope_decl_context_io_input = (Internal, Pos.from_lpos $sloc); scope_decl_context_io_output = (true, Pos.from_lpos $sloc) @@ -538,110 +535,111 @@ scope_decl_item_attribute: } -scope_decl_item: -| attr = scope_decl_item_attribute - i = ident - CONTENT t = typ func_typ = option(struct_scope_func) - states = list(state) -{ (ContextData ({ +let scope_decl_item := +| attr = scope_decl_item_attribute ; + i = lident ; + CONTENT ; t = addpos(typ) ; + func_typ = option(struct_scope_func) ; + states = list(state) ; { + ContextData { scope_decl_context_item_name = i; scope_decl_context_item_attribute = attr; scope_decl_context_item_typ = (let (typ, typ_pos) = t in match func_typ with | None -> (Base (Data typ), typ_pos) - | Some (arg_typ, arg_pos) -> (Func { - arg_typ = (Data arg_typ, arg_pos); - return_typ = (Data typ, typ_pos); - }, Pos.from_lpos $sloc)); + | Some (arg_typ, arg_pos) -> + Func { + arg_typ = (Data arg_typ, arg_pos); + return_typ = (Data typ, typ_pos); + }, Pos.from_lpos $sloc); scope_decl_context_item_states = states; - }), Pos.from_lpos $sloc) + } } -| i = ident SCOPE c = constructor { - (ContextScope({ +| i = lident ; SCOPE ; c = uident ; { + ContextScope{ scope_decl_context_scope_name = i; scope_decl_context_scope_sub_scope = c; scope_decl_context_scope_attribute = { scope_decl_context_io_input = (Internal, Pos.from_lpos $sloc); scope_decl_context_io_output = (false, Pos.from_lpos $sloc); }; - }), Pos.from_lpos $sloc) + } } -| attr = scope_decl_item_attribute - i = ident _condition = CONDITION func_typ = option(struct_scope_func) - states = list(state) -{ - (ContextData ({ +| attr = scope_decl_item_attribute ; + i = lident ; + pos_condition = pos(CONDITION) ; + func_typ = option(struct_scope_func) ; + states = list(state) ; { + ContextData { scope_decl_context_item_name = i; scope_decl_context_item_attribute = attr; scope_decl_context_item_typ = (match func_typ with - | None -> (Base (Condition), Pos.from_lpos $loc(_condition)) - | Some (arg_typ, arg_pos) -> (Func { - arg_typ = (Data arg_typ, arg_pos); - return_typ = (Condition, Pos.from_lpos $loc(_condition)); - }, Pos.from_lpos $sloc)); + | None -> (Base (Condition), pos_condition) + | Some (arg_typ, arg_pos) -> + Func { + arg_typ = (Data arg_typ, arg_pos); + return_typ = (Condition, pos_condition); + }, Pos.from_lpos $sloc); scope_decl_context_item_states = states; - }), Pos.from_lpos $sloc - ) + } } -enum_decl_line_payload: -| CONTENT t = typ { let (t, t_pos) = t in (Base (Data t), t_pos) } - -enum_decl_line: -| ALT c = constructor t = option(enum_decl_line_payload) { - ({ +let enum_decl_line := +| ALT ; c = uident ; + t = option(preceded(CONTENT,addpos(typ))) ; { + { enum_decl_case_name = c; - enum_decl_case_typ = t; - }, Pos.from_lpos $sloc) + enum_decl_case_typ = + Option.map (fun (t, t_pos) -> Base (Data t), t_pos) t; + } } -constructor: -| c = CONSTRUCTOR { (c, Pos.from_lpos $sloc) } - -scope_use_condition: -| UNDER_CONDITION e = expression { e } - -code_item: -| SCOPE c = constructor e = option(scope_use_condition) COLON items = nonempty_list(scope_item) { - (ScopeUse { +let code_item := +| SCOPE ; c = uident ; + e = option(preceded(UNDER_CONDITION,expression)) ; + COLON ; items = nonempty_list(addpos(scope_item)) ; { + ScopeUse { scope_use_name = c; scope_use_condition = e; scope_use_items = items; - }, Pos.from_lpos $sloc) + } } -| DECLARATION STRUCT c = constructor COLON scopes = list(struct_scope) { - (StructDecl { +| DECLARATION ; STRUCT ; c = uident ; + COLON ; scopes = list(addpos(struct_scope)) ; { + StructDecl { struct_decl_name = c; struct_decl_fields = scopes; - }, Pos.from_lpos $sloc) + } } -| DECLARATION SCOPE c = constructor COLON context = nonempty_list(scope_decl_item) { - (ScopeDecl { +| DECLARATION ; SCOPE ; c = uident ; + COLON ; context = nonempty_list(addpos(scope_decl_item)) ; { + ScopeDecl { scope_decl_name = c; scope_decl_context = context; - }, Pos.from_lpos $sloc) + } } -| DECLARATION ENUM c = constructor COLON cases = list(enum_decl_line) { - (EnumDecl { +| DECLARATION ; ENUM ; c = uident ; + COLON ; cases = list(addpos(enum_decl_line)) ; { + EnumDecl { enum_decl_name = c; enum_decl_cases = cases; - }, Pos.from_lpos $sloc) + } } -code: -| code = list(code_item) { (code, Pos.from_lpos $sloc) } +let code := +| code = list(addpos(code_item)) ; <> -metadata_block: -| BEGIN_METADATA option(law_text) code_and_pos = code text = END_CODE { - let (code, _) = code_and_pos in - (code, (text, Pos.from_lpos $sloc)) +let metadata_block := +| BEGIN_METADATA ; option(law_text) ; + ~ = code ; + text = END_CODE ; { + (code, (text, Pos.from_lpos $sloc)) } - -law_heading: -| title = LAW_HEADING { +let law_heading := +| title = LAW_HEADING ; { let (title, id, is_archive, precedence) = title in { law_heading_name = (title, Pos.from_lpos $sloc); law_heading_id = id; @@ -650,26 +648,30 @@ law_heading: } } -law_text: -| lines = nonempty_list(LAW_TEXT) { String.trim (String.concat "" lines) } +let law_text := +| lines = nonempty_list(LAW_TEXT) ; { String.trim (String.concat "" lines) } -source_file_item: -| text = law_text { LawText text } -| BEGIN_CODE code_and_pos = code text = END_CODE { - let (code, _) = code_and_pos in +let source_file_item := +| text = law_text ; { LawText text } +| BEGIN_CODE ; + ~ = code ; + text = END_CODE ; { CodeBlock (code, (text, Pos.from_lpos $sloc), false) } -| heading = law_heading { +| heading = law_heading ; { LawHeading (heading, []) } -| code = metadata_block { +| code = metadata_block ; { let (code, source_repr) = code in CodeBlock (code, source_repr, true) } -| BEGIN_DIRECTIVE LAW_INCLUDE COLON args = nonempty_list(DIRECTIVE_ARG) page = option(AT_PAGE) END_DIRECTIVE { +| BEGIN_DIRECTIVE ; LAW_INCLUDE ; COLON ; + args = nonempty_list(DIRECTIVE_ARG) ; + page = option(AT_PAGE) ; + END_DIRECTIVE ; { let filename = String.trim (String.concat "" args) in let pos = Pos.from_lpos $sloc in - let jorftext = Re.Pcre.regexp "JORFTEXT\\d{12}" in + let jorftext = Re.Pcre.regexp "(JORFARTI\\d{12}|LEGIARTI\\d{12}|CETATEXT\\d{12})" in if Re.Pcre.pmatch ~rex:jorftext filename && page = None then LawInclude (Ast.LegislativeText (filename, pos)) else if Filename.extension filename = ".pdf" || page <> None then @@ -678,7 +680,6 @@ source_file_item: LawInclude (Ast.CatalaFile (filename, pos)) } - -source_file: -| hd = source_file_item tl = source_file { hd:: tl } -| EOF { [] } +let source_file := +| hd = source_file_item ; tl = source_file ; { hd::tl } +| EOF ; { [] } diff --git a/compiler/surface/parser_driver.ml b/compiler/surface/parser_driver.ml index 2ef14d13..dd1cd47a 100644 --- a/compiler/surface/parser_driver.ml +++ b/compiler/surface/parser_driver.ml @@ -19,7 +19,7 @@ Parser_driver.parse_source_file} API. *) open Sedlexing -open Utils +open Catala_utils (** {1 Internal functions} *) diff --git a/compiler/surface/parser_driver.mli b/compiler/surface/parser_driver.mli index 922e487e..d889ba12 100644 --- a/compiler/surface/parser_driver.mli +++ b/compiler/surface/parser_driver.mli @@ -17,6 +17,6 @@ (** Wrapping module around parser and lexer that offers the [Surface.Parser_driver.parse_source_file] API. *) -open Utils +open Catala_utils val parse_top_level_file : Pos.input_file -> Cli.backend_lang -> Ast.program diff --git a/compiler/surface/print.ml b/compiler/surface/print.ml index 50a8d183..a439fc45 100644 --- a/compiler/surface/print.ml +++ b/compiler/surface/print.ml @@ -14,15 +14,22 @@ License for the specific language governing permissions and limitations under the License. *) +open Catala_utils open Ast let format_primitive_typ (fmt : Format.formatter) (t : primitive_typ) : unit = match t with - | Integer -> Format.fprintf fmt "integer" - | Decimal -> Format.fprintf fmt "decimal" - | Boolean -> Format.fprintf fmt "boolean" - | Money -> Format.fprintf fmt "money" - | Duration -> Format.fprintf fmt "duration" - | Text -> Format.fprintf fmt "text" - | Date -> Format.fprintf fmt "date" - | Named constructor -> Format.fprintf fmt "%s" constructor + | Integer -> Format.pp_print_string fmt "integer" + | Decimal -> Format.pp_print_string fmt "decimal" + | Boolean -> Format.pp_print_string fmt "boolean" + | Money -> Format.pp_print_string fmt "money" + | Duration -> Format.pp_print_string fmt "duration" + | Text -> Format.pp_print_string fmt "text" + | Date -> Format.pp_print_string fmt "date" + | Named (path, constructor) -> + Format.fprintf fmt "%a.%s" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.pp_print_char fmt '.') + (fun fmt (uid, _pos) -> Format.pp_print_string fmt uid)) + path + (Marked.unmark constructor) diff --git a/compiler/surface/tokens.mly b/compiler/surface/tokens.mly index e12890dd..8e9715eb 100644 --- a/compiler/surface/tokens.mly +++ b/compiler/surface/tokens.mly @@ -29,7 +29,7 @@ %token DIRECTIVE_ARG %token LAW_TEXT -%token CONSTRUCTOR IDENT +%token UIDENT LIDENT %token END_CODE %token INT_LITERAL %token DATE_LITERAL @@ -37,21 +37,14 @@ %token DECIMAL_LITERAL %token MONEY_AMOUNT %token BEGIN_CODE TEXT -%token COLON ALT DATA VERTICAL -%token OF INTEGER COLLECTION CONTAINS +%token COLON ALT DATA BAR +%token OF INTEGER COLLECTION CONTAINS AMONG %token RULE CONDITION DEFINED_AS -%token LESSER GREATER LESSER_EQUAL GREATER_EQUAL -%token LESSER_DEC GREATER_DEC LESSER_EQUAL_DEC GREATER_EQUAL_DEC -%token LESSER_MONEY GREATER_MONEY LESSER_EQUAL_MONEY GREATER_EQUAL_MONEY -%token LESSER_DATE GREATER_DATE LESSER_EQUAL_DATE GREATER_EQUAL_DATE -%token LESSER_DURATION GREATER_DURATION LESSER_EQUAL_DURATION GREATER_EQUAL_DURATION +%token LESSER GREATER LESSER_EQUAL GREATER_EQUAL %token LET EXISTS IN SUCH THAT %token DOT AND OR XOR LPAREN RPAREN EQUAL %token CARDINAL ASSERTION FIXED BY YEAR MONTH DAY -%token PLUS MINUS MULT DIV -%token PLUSDEC MINUSDEC MULTDEC DIVDEC -%token PLUSMONEY MINUSMONEY MULTMONEY DIVMONEY -%token MINUSDATE PLUSDATE PLUSDURATION MINUSDURATION MULDURATION +%token PLUS MINUS MULT DIV %token PLUSPLUS %token MATCH WITH VARIES WITH_V WILDCARD %token FOR ALL WE_HAVE INCREASING DECREASING @@ -60,9 +53,8 @@ %token STRUCT CONTENT IF THEN DEPENDS DECLARATION %token CONTEXT INPUT OUTPUT INTERNAL ENUM ELSE DATE SUM %token BEGIN_METADATA MONEY DECIMAL -%token UNDER_CONDITION CONSEQUENCE LBRACKET RBRACKET -%token LABEL EXCEPTION LSQUARE RSQUARE SEMICOLON -%token MAXIMUM MINIMUM INIT -%token FILTER MAP +%token UNDER_CONDITION CONSEQUENCE LBRACE RBRACE +%token LABEL EXCEPTION LBRACKET RBRACKET SEMICOLON +%token MAXIMUM MINIMUM IS EMPTY %% diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index 9095af72..28384204 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -16,7 +16,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast open Dcalc open Ast @@ -45,11 +45,28 @@ let conjunction (args : vc_return list) (mark : typed mark) : vc_return = match args with hd :: tl -> hd, tl | [] -> (ELit (LBool true), mark), [] in List.fold_left - (fun acc arg -> EApp ((EOp (Binop And), mark), [arg; acc]), mark) + (fun acc arg -> + ( EApp + { + f = + ( EOp + { + op = And; + tys = [TLit TBool, Expr.pos acc; TLit TBool, Expr.pos arg]; + }, + mark ); + args = [arg; acc]; + }, + mark )) acc list let negation (arg : vc_return) (mark : typed mark) : vc_return = - EApp ((EOp (Unop Not), mark), [arg]), mark + ( EApp + { + f = EOp { op = Not; tys = [TLit TBool, Expr.pos arg] }, mark; + args = [arg]; + }, + mark ) let disjunction (args : vc_return list) (mark : typed mark) : vc_return = let acc, list = @@ -57,7 +74,18 @@ let disjunction (args : vc_return list) (mark : typed mark) : vc_return = in List.fold_left (fun (acc : vc_return) arg -> - EApp ((EOp (Binop Or), mark), [arg; acc]), mark) + ( EApp + { + f = + ( EOp + { + op = Or; + tys = [TLit TBool, Expr.pos acc; TLit TBool, Expr.pos arg]; + }, + mark ); + args = [arg; acc]; + }, + mark )) acc list (** [half_product \[a1,...,an\] \[b1,...,bm\] returns \[(a1,b1),...(a1,bn),...(an,b1),...(an,bm)\]] *) @@ -75,20 +103,34 @@ let half_product (l1 : 'a list) (l2 : 'b list) : ('a * 'b) list = let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed expr) : typed expr = match Marked.unmark e with - | ErrorOnEmpty + | EErrorOnEmpty ( EDefault - ( [(EApp ((EVar x, _), [(ELit LUnit, _)]), _)], - (ELit (LBool true), _), - cons ), + { + excepts = [(EApp { f = EVar x, _; args = [(ELit LUnit, _)] }, _)]; + just = ELit (LBool true), _; + cons; + }, _ ) when List.exists (fun x' -> Var.eq x x') ctx.input_vars -> (* scope variables*) cons - | EAbs (binder, [(TLit TUnit, _)]) -> + | EAbs { binder; tys = [(TLit TUnit, _)] } -> (* context sub-scope variables *) let _, body = Bindlib.unmbind binder in body - | ErrorOnEmpty d -> + | EAbs { binder; _ } -> ( + (* context scope variables *) + let _, body = Bindlib.unmbind binder in + match Marked.unmark body with + | EErrorOnEmpty e -> e + | _ -> + Errors.raise_spanned_error (Expr.pos e) + "Internal error: this expression does not have the structure expected \ + by the VC generator:\n\ + %a" + (Expr.format ~debug:true ctx.decl) + e) + | EErrorOnEmpty d -> d (* input subscope variables and non-input scope variable *) | _ -> Errors.raise_spanned_error (Expr.pos e) @@ -106,78 +148,61 @@ let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed expr) : expression. *) let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed expr) : vc_return = - let out = - match Marked.unmark e with - | ETuple (args, _) | EArray args -> - conjunction - (List.map (generate_vc_must_not_return_empty ctx) args) - (Marked.get_mark e) - | EMatch (arg, arms, _) -> - conjunction - (List.map (generate_vc_must_not_return_empty ctx) (arg :: arms)) - (Marked.get_mark e) - | ETupleAccess (e1, _, _, _) - | EInj (e1, _, _, _) - | EAssert e1 - | ErrorOnEmpty e1 -> - (generate_vc_must_not_return_empty ctx) e1 - | EAbs (binder, _typs) -> - (* Hot take: for a function never to return an empty error when called, it has to do - so whatever its input. So we universally quantify over the variable of the function - when inspecting the body, resulting in simply traversing through in the code here. *) - let _vars, body = Bindlib.unmbind binder in - (generate_vc_must_not_return_empty ctx) body - | EApp (f, args) -> - (* We assume here that function calls never return empty error, which implies - all functions have been checked never to return empty errors. *) - conjunction - (List.map (generate_vc_must_not_return_empty ctx) (f :: args)) - (Marked.get_mark e) - | EIfThenElse (e1, e2, e3) -> - let e1_vc = generate_vc_must_not_return_empty ctx e1 in - let e2_vc = generate_vc_must_not_return_empty ctx e2 in - let e3_vc = generate_vc_must_not_return_empty ctx e3 in - conjunction - [e1_vc; EIfThenElse (e1, e2_vc, e3_vc), Marked.get_mark e] - (Marked.get_mark e) - | ELit LEmptyError -> Marked.same_mark_as (ELit (LBool false)) e - | EVar _ - (* Per default calculus semantics, you cannot call a function with an argument - that evaluates to the empty error. Thus, all variable evaluate to non-empty-error terms. *) - | ELit _ | EOp _ -> - Marked.same_mark_as (ELit (LBool true)) e - | EDefault (exceptions, just, cons) -> - (* never returns empty if and only if: - - first we look if e1 .. en ejust can return empty; - - if no, we check that if ejust is true, whether econs can return empty. - *) - disjunction - (List.map (generate_vc_must_not_return_empty ctx) exceptions - @ [ - conjunction - [ - generate_vc_must_not_return_empty ctx just; - (let vc_just_expr = - generate_vc_must_not_return_empty ctx cons - in - ( EIfThenElse - ( just, - (* Comment from Alain: the justification is not checked for holding an default term. - In such cases, we need to encode the logic of the default terms within - the generation of the verification condition (Z3encoding.translate_expr). - Answer from Denis: Normally, there is a structural invariant from the - surface language to intermediate representation translation preventing - any default terms to appear in justifications.*) - vc_just_expr, - (ELit (LBool false), Marked.get_mark e) ), - Marked.get_mark e )); - ] - (Marked.get_mark e); - ]) - (Marked.get_mark e) - in - out - [@@ocamlformat "wrap-comments=false"] + match Marked.unmark e with + | EAbs { binder; _ } -> + (* Hot take: for a function never to return an empty error when called, it + has to do so whatever its input. So we universally quantify over the + variable of the function when inspecting the body, resulting in simply + traversing through in the code here. *) + let _vars, body = Bindlib.unmbind binder in + (generate_vc_must_not_return_empty ctx) body + | EDefault { excepts; just; cons } -> + (* never returns empty if and only if: - first + we look if e1 .. en ejust can return empty; - if no, we check that if + ejust is true, whether econs can return empty. *) + disjunction + (List.map (generate_vc_must_not_return_empty ctx) excepts + @ [ + conjunction + [ + generate_vc_must_not_return_empty ctx just; + (let vc_just_expr = generate_vc_must_not_return_empty ctx cons in + ( EIfThenElse + { + cond = just; + (* Comment from Alain: the justification is not checked for + holding an default term. In such cases, we need to + encode the logic of the default terms within the + generation of the verification condition + (Z3encoding.translate_expr). Answer from Denis: + Normally, there is a structural invariant from the + surface language to intermediate representation + translation preventing any default terms to appear in + justifications.*) + etrue = vc_just_expr; + efalse = ELit (LBool false), Marked.get_mark e; + }, + Marked.get_mark e )); + ] + (Marked.get_mark e); + ]) + (Marked.get_mark e) + | ELit LEmptyError -> Marked.same_mark_as (ELit (LBool false)) e + | EVar _ + (* Per default calculus semantics, you cannot call a function with an argument + that evaluates to the empty error. Thus, all variable evaluate to + non-empty-error terms. *) + | ELit _ | EOp _ -> + Marked.same_mark_as (ELit (LBool true)) e + | _ -> + (* For the [EApp] case, We assume here that function calls never return + empty error, which implies all functions have been checked never to + return empty errors. *) + conjunction + (Expr.shallow_fold + (fun e acc -> generate_vc_must_not_return_empty ctx e :: acc) + e []) + (Marked.get_mark e) (** [generate_vc_must_not_return_conflict e] returns the dcalc boolean expression [b] such that if [b] is true, then [e] will never return a @@ -185,67 +210,45 @@ let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed expr) : variables inside the expression. *) let rec generate_vc_must_not_return_conflict (ctx : ctx) (e : typed expr) : vc_return = - let out = - (* See the code of [generate_vc_must_not_return_empty] for a list of invariants on which this - function relies on. *) - match Marked.unmark e with - | ETuple (args, _) | EArray args -> - conjunction - (List.map (generate_vc_must_not_return_conflict ctx) args) + (* See the code of [generate_vc_must_not_return_empty] for a list of + invariants on which this function relies on. *) + match Marked.unmark e with + | EAbs { binder; _ } -> + let _vars, body = Bindlib.unmbind binder in + (generate_vc_must_not_return_conflict ctx) body + | EVar _ | ELit _ | EOp _ -> Marked.same_mark_as (ELit (LBool true)) e + | EDefault { excepts; just; cons } -> + (* never returns conflict if and only if: - + neither e1 nor ... nor en nor ejust nor econs return conflict - there is + no two differents ei ej that are not empty. *) + let quadratic = + negation + (disjunction + (List.map + (fun (e1, e2) -> + conjunction + [ + generate_vc_must_not_return_empty ctx e1; + generate_vc_must_not_return_empty ctx e2; + ] + (Marked.get_mark e)) + (half_product excepts excepts)) + (Marked.get_mark e)) (Marked.get_mark e) - | EMatch (arg, arms, _) -> - conjunction - (List.map (generate_vc_must_not_return_conflict ctx) (arg :: arms)) - (Marked.get_mark e) - | ETupleAccess (e1, _, _, _) - | EInj (e1, _, _, _) - | EAssert e1 - | ErrorOnEmpty e1 -> - generate_vc_must_not_return_conflict ctx e1 - | EAbs (binder, _typs) -> - let _vars, body = Bindlib.unmbind binder in - (generate_vc_must_not_return_conflict ctx) body - | EApp (f, args) -> - conjunction - (List.map (generate_vc_must_not_return_conflict ctx) (f :: args)) - (Marked.get_mark e) - | EIfThenElse (e1, e2, e3) -> - let e1_vc = generate_vc_must_not_return_conflict ctx e1 in - let e2_vc = generate_vc_must_not_return_conflict ctx e2 in - let e3_vc = generate_vc_must_not_return_conflict ctx e3 in - conjunction - [e1_vc; EIfThenElse (e1, e2_vc, e3_vc), Marked.get_mark e] - (Marked.get_mark e) - | EVar _ | ELit _ | EOp _ -> Marked.same_mark_as (ELit (LBool true)) e - | EDefault (exceptions, just, cons) -> - (* never returns conflict if and only if: - - neither e1 nor ... nor en nor ejust nor econs return conflict - - there is no two differents ei ej that are not empty. *) - let quadratic = - negation - (disjunction - (List.map - (fun (e1, e2) -> - conjunction - [ - generate_vc_must_not_return_empty ctx e1; - generate_vc_must_not_return_empty ctx e2; - ] - (Marked.get_mark e)) - (half_product exceptions exceptions)) - (Marked.get_mark e)) - (Marked.get_mark e) - in - let others = - List.map - (generate_vc_must_not_return_conflict ctx) - (just :: cons :: exceptions) - in - let out = conjunction (quadratic :: others) (Marked.get_mark e) in - out - in - out - [@@ocamlformat "wrap-comments=false"] + in + let others = + List.map + (generate_vc_must_not_return_conflict ctx) + (just :: cons :: excepts) + in + let out = conjunction (quadratic :: others) (Marked.get_mark e) in + out + | _ -> + conjunction + (Expr.shallow_fold + (fun e acc -> generate_vc_must_not_return_conflict ctx e :: acc) + e []) + (Marked.get_mark e) (** {1 Interface}*) @@ -306,7 +309,7 @@ let rec generate_verification_conditions_scope_body_expr let vc_confl = generate_vc_must_not_return_conflict ctx e in let vc_confl = if !Cli.optimize_flag then - Bindlib.unbox (Optimizations.optimize_expr ctx.decl vc_confl) + Expr.unbox (Optimizations.optimize_expr ctx.decl vc_confl) else vc_confl in let vc_list = @@ -328,7 +331,7 @@ let rec generate_verification_conditions_scope_body_expr let vc_empty = generate_vc_must_not_return_empty ctx e in let vc_empty = if !Cli.optimize_flag then - Bindlib.unbox (Optimizations.optimize_expr ctx.decl vc_empty) + Expr.unbox (Optimizations.optimize_expr ctx.decl vc_empty) else vc_empty in { diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index 4df645be..97420c20 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -17,7 +17,7 @@ (** Generates verification conditions from scope definitions *) -open Utils +open Catala_utils open Shared_ast type verification_condition_kind = diff --git a/compiler/verification/dune b/compiler/verification/dune index 37df5b9a..56e49368 100644 --- a/compiler/verification/dune +++ b/compiler/verification/dune @@ -3,7 +3,7 @@ (public_name catala.verification) (libraries bindlib - utils + catala_utils dcalc catala.runtime_ocaml dates_calc diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index cc136565..68a3bcd5 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -15,7 +15,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast module type Backend = sig diff --git a/compiler/verification/solver.ml b/compiler/verification/solver.ml index 6752375a..a46c5dbb 100644 --- a/compiler/verification/solver.ml +++ b/compiler/verification/solver.ml @@ -14,6 +14,8 @@ License for the specific language governing permissions and limitations under the License. *) +open Catala_utils + (** [solve_vc] is the main entry point of this module. It takes a list of expressions [vcs] corresponding to verification conditions that must be discharged by Z3, and attempts to solve them **) @@ -47,4 +49,4 @@ let solve_vc true z3_vcs in if all_proven then - Utils.Cli.result_format "No errors found during the proof mode run." + Cli.result_format "No errors found during the proof mode run." diff --git a/compiler/verification/z3backend.dummy.ml b/compiler/verification/z3backend.dummy.ml index 8293b767..700a6f9c 100644 --- a/compiler/verification/z3backend.dummy.ml +++ b/compiler/verification/z3backend.dummy.ml @@ -18,7 +18,7 @@ without the expected backend. All functions print an error message and exit *) let dummy () = - Utils.Cli.error_print + Catala_utils.Cli.error_print "This instance of Catala was compiled without Z3 support."; exit 124 @@ -37,7 +37,6 @@ module Io = struct type model = unit type vc_encoding_result = Success of model * model | Fail of string - let print_positive_result _ = dummy () let print_negative_result _ _ _ = dummy () let encode_and_check_vc _ _ = dummy () end diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index e7d803e9..d4fe2347 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils +open Catala_utils open Shared_ast open Dcalc open Ast @@ -35,13 +35,13 @@ type context = { (* A map from strings, corresponding to Z3 symbol names, to the Catala variable they represent. Used when to pretty-print Z3 models when a counterexample is generated *) - ctx_z3datatypes : Sort.sort EnumMap.t; + ctx_z3datatypes : Sort.sort EnumName.Map.t; (* A map from Catala enumeration names to the corresponding Z3 sort, from which we can retrieve constructors and accessors *) ctx_z3matchsubsts : (typed expr, Expr.expr) Var.Map.t; (* A map from Catala temporary variables, generated when translating a match, to the corresponding enum accessor call as a Z3 expression *) - ctx_z3structs : Sort.sort StructMap.t; + ctx_z3structs : Sort.sort StructName.Map.t; (* A map from Catala struct names to the corresponding Z3 sort, from which we can retrieve the constructor and the accessors *) ctx_z3unit : Sort.sort * Expr.expr; @@ -80,7 +80,7 @@ let add_z3var (name : string) (v : typed expr Var.t) (ty : typ) (ctx : context) corresponding Z3 datatype [sort] to the context **) let add_z3enum (enum : EnumName.t) (sort : Sort.sort) (ctx : context) : context = - { ctx with ctx_z3datatypes = EnumMap.add enum sort ctx.ctx_z3datatypes } + { ctx with ctx_z3datatypes = EnumName.Map.add enum sort ctx.ctx_z3datatypes } (** [add_z3matchsubst] adds the mapping between temporary variable [v] and the Z3 expression [e] representing an accessor application to the context **) @@ -92,7 +92,7 @@ let add_z3matchsubst (v : typed expr Var.t) (e : Expr.expr) (ctx : context) : corresponding Z3 datatype [sort] to the context **) let add_z3struct (s : StructName.t) (sort : Sort.sort) (ctx : context) : context = - { ctx with ctx_z3structs = StructMap.add s sort ctx.ctx_z3structs } + { ctx with ctx_z3structs = StructName.Map.add s sort ctx.ctx_z3structs } let add_z3constraint (e : Expr.expr) (ctx : context) : context = { ctx with ctx_z3constraints = e :: ctx.ctx_z3constraints } @@ -111,7 +111,7 @@ let unique_name (v : 'e Var.t) : string = let date_to_int (d : Runtime.date) : int = (* Alternatively, could expose this from Runtime as a (noop) coercion, but would allow to break abstraction more easily elsewhere *) - let period = Runtime.( -@ ) d base_day in + let period = Runtime.Oper.o_sub_dat_dat d base_day in let y, m, d = Runtime.duration_to_years_months_days period in assert (y = 0 && m = 0); d @@ -124,7 +124,7 @@ let date_of_year (year : int) = Runtime.date_of_numbers year 1 1 defined here as Jan 1, 1900 **) let nb_days_to_date (nb : int) : string = Runtime.date_to_string - (Runtime.( +@ ) base_day (Runtime.duration_of_numbers 0 0 nb)) + (Runtime.Oper.o_add_dat_dur base_day (Runtime.duration_of_numbers 0 0 nb)) (** [print_z3model_expr] pretty-prints the value [e] given by a Z3 model according to the Catala type [ty], corresponding to [e] **) @@ -161,16 +161,17 @@ let rec print_z3model_expr (ctx : context) (ty : typ) (e : Expr.expr) : string = match Marked.unmark ty with | TLit ty -> print_lit ty | TStruct name -> - let s = StructMap.find name ctx.ctx_decl.ctx_structs in - let get_fieldname (fn : StructFieldName.t) : string = - Marked.unmark (StructFieldName.get_info fn) + let s = StructName.Map.find name ctx.ctx_decl.ctx_structs in + let get_fieldname (fn : StructField.t) : string = + Marked.unmark (StructField.get_info fn) in let fields = List.map2 (fun (fn, ty) e -> Format.asprintf "-- %s : %s" (get_fieldname fn) (print_z3model_expr ctx ty e)) - s (Expr.get_args e) + (StructField.Map.bindings s) + (Expr.get_args e) in let fields_str = String.concat " " fields in @@ -186,12 +187,13 @@ let rec print_z3model_expr (ctx : context) (ty : typ) (e : Expr.expr) : string = let fd = Expr.get_func_decl e in let fd_name = Symbol.to_string (FuncDecl.get_name fd) in - let enum_ctrs = EnumMap.find name ctx.ctx_decl.ctx_enums in + let enum_ctrs = EnumName.Map.find name ctx.ctx_decl.ctx_enums in let case = List.find (fun (ctr, _) -> + (* FIXME: don't match on strings *) String.equal fd_name (Marked.unmark (EnumConstructor.get_info ctr))) - enum_ctrs + (EnumConstructor.Map.bindings enum_ctrs) in Format.asprintf "%s (%s)" fd_name (print_z3model_expr ctx (snd case) e') @@ -284,9 +286,8 @@ let rec translate_typ (ctx : context) (t : naked_typ) : context * Sort.sort = and find_or_create_enum (ctx : context) (enum : EnumName.t) : context * Sort.sort = (* Creates a Z3 constructor corresponding to the Catala constructor [c] *) - let create_constructor (ctx : context) (c : EnumConstructor.t * typ) : + let create_constructor (name : EnumConstructor.t) (ty : typ) (ctx : context) : context * Datatype.Constructor.constructor = - let name, ty = c in let name = Marked.unmark (EnumConstructor.get_info name) in let ctx, arg_z3_ty = translate_typ ctx (Marked.unmark ty) in @@ -309,15 +310,21 @@ and find_or_create_enum (ctx : context) (enum : EnumName.t) : [Sort.get_id arg_z3_ty] ) in - match EnumMap.find_opt enum ctx.ctx_z3datatypes with + match EnumName.Map.find_opt enum ctx.ctx_z3datatypes with | Some e -> ctx, e | None -> - let ctrs = EnumMap.find enum ctx.ctx_decl.ctx_enums in - let ctx, z3_ctrs = List.fold_left_map create_constructor ctx ctrs in + let ctrs = EnumName.Map.find enum ctx.ctx_decl.ctx_enums in + let ctx, z3_ctrs = + EnumConstructor.Map.fold + (fun ctr ty (ctx, ctrs) -> + let ctx, ctr = create_constructor ctr ty ctx in + ctx, ctr :: ctrs) + ctrs (ctx, []) + in let z3_enum = Datatype.mk_sort_s ctx.ctx_z3 (Marked.unmark (EnumName.get_info enum)) - z3_ctrs + (List.rev z3_ctrs) in add_z3enum enum z3_enum ctx, z3_enum @@ -327,23 +334,26 @@ and find_or_create_enum (ctx : context) (enum : EnumName.t) : context *) and find_or_create_struct (ctx : context) (s : StructName.t) : context * Sort.sort = - match StructMap.find_opt s ctx.ctx_z3structs with + match StructName.Map.find_opt s ctx.ctx_z3structs with | Some s -> ctx, s | None -> let s_name = Marked.unmark (StructName.get_info s) in - let fields = StructMap.find s ctx.ctx_decl.ctx_structs in + let fields = StructName.Map.find s ctx.ctx_decl.ctx_structs in let z3_fieldnames = List.map (fun f -> - Marked.unmark (StructFieldName.get_info (fst f)) + Marked.unmark (StructField.get_info (fst f)) |> Symbol.mk_string ctx.ctx_z3) - fields + (StructField.Map.bindings fields) in - let ctx, z3_fieldtypes = - List.fold_left_map - (fun ctx f -> Marked.unmark (snd f) |> translate_typ ctx) - ctx fields + let ctx, z3_fieldtypes_rev = + StructField.Map.fold + (fun _ ty (ctx, ftypes) -> + let ctx, ftype = translate_typ ctx (Marked.unmark ty) in + ctx, ftype :: ftypes) + fields (ctx, []) in + let z3_fieldtypes = List.rev z3_fieldtypes_rev in let z3_sortrefs = List.map Sort.get_id z3_fieldtypes in let mk_struct_s = "mk!" ^ s_name in let z3_mk_struct = @@ -416,204 +426,181 @@ let is_leap_year = Runtime.is_leap_year (** [translate_op] returns the Z3 expression corresponding to the application of [op] to the arguments [args] **) -let rec translate_op (ctx : context) (op : operator) (args : 'm expr list) : - context * Expr.expr = - match op with - | Ternop _top -> - let _e1, _e2, _e3 = - match args with - | [e1; e2; e3] -> e1, e2, e3 - | _ -> - Format.kasprintf failwith - "[Z3 encoding] Ill-formed ternary operator application: %a" - (Shared_ast.Expr.format ctx.ctx_decl) - (Shared_ast.Expr.eapp - (Shared_ast.Expr.eop op (Untyped { pos = Pos.no_pos })) - (List.map Shared_ast.Expr.untype args) - (Untyped { pos = Pos.no_pos }) - |> Shared_ast.Expr.unbox) - in +let rec translate_op : + type k. + context -> (dcalc, k) operator -> 'm expr list -> context * Expr.expr = + fun ctx op args -> + let ill_formed () = + Format.kasprintf failwith + "[Z3 encoding] Ill-formed operator application: %a" + (Shared_ast.Expr.format ctx.ctx_decl) + (Shared_ast.Expr.eapp + (Shared_ast.Expr.eop op [] (Untyped { pos = Pos.no_pos })) + (List.map Shared_ast.Expr.untype args) + (Untyped { pos = Pos.no_pos }) + |> Shared_ast.Expr.unbox) + in + let app f = + let ctx, args = List.fold_left_map translate_expr ctx args in + ctx, f ctx.ctx_z3 args + in + let app1 f = + app (fun ctx -> function [a] -> f ctx a | _ -> ill_formed ()) + in + let app2 f = + app (fun ctx -> function [a; b] -> f ctx a b | _ -> ill_formed ()) + in + match op, args with + | Fold, _ -> failwith "[Z3 encoding] ternary operator application not supported" - | Binop bop -> ( (* Special case for GetYear comparisons *) - match bop, args with - | Lt KInt, [(EApp ((EOp (Unop GetYear), _), [e1]), _); (ELit (LInt n), _)] - -> - let n = Runtime.integer_to_int n in - let ctx, e1 = translate_expr ctx e1 in - let e2 = - Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 - (date_to_int (date_of_year n)) - in - (* e2 corresponds to the first day of the year n. GetYear e1 < e2 can thus - be directly translated as < in the Z3 encoding using the number of - days *) - ctx, Arithmetic.mk_lt ctx.ctx_z3 e1 e2 - | Lte KInt, [(EApp ((EOp (Unop GetYear), _), [e1]), _); (ELit (LInt n), _)] - -> - let ctx, e1 = translate_expr ctx e1 in - let nb_days = if is_leap_year n then 365 else 364 in - let n = Runtime.integer_to_int n in - (* We want that the year corresponding to e1 is smaller or equal to n. We - encode this as the day corresponding to e1 is smaller or equal than the - last day of the year [n], which is Jan 1st + 365 days if [n] is a leap - year, Jan 1st + 364 else *) - let e2 = - Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 - (date_to_int (date_of_year n) + nb_days) - in - ctx, Arithmetic.mk_le ctx.ctx_z3 e1 e2 - | Gt KInt, [(EApp ((EOp (Unop GetYear), _), [e1]), _); (ELit (LInt n), _)] - -> - let ctx, e1 = translate_expr ctx e1 in - let nb_days = if is_leap_year n then 365 else 364 in - let n = Runtime.integer_to_int n in - (* We want that the year corresponding to e1 is greater to n. We encode - this as the day corresponding to e1 is greater than the last day of the - year [n], which is Jan 1st + 365 days if [n] is a leap year, Jan 1st + - 364 else *) - let e2 = - Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 - (date_to_int (date_of_year n) + nb_days) - in - ctx, Arithmetic.mk_gt ctx.ctx_z3 e1 e2 - | Gte KInt, [(EApp ((EOp (Unop GetYear), _), [e1]), _); (ELit (LInt n), _)] - -> - let n = Runtime.integer_to_int n in - let ctx, e1 = translate_expr ctx e1 in - let e2 = - Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 - (date_to_int (date_of_year n)) - in - (* e2 corresponds to the first day of the year n. GetYear e1 >= e2 can - thus be directly translated as >= in the Z3 encoding using the number - of days *) - ctx, Arithmetic.mk_ge ctx.ctx_z3 e1 e2 - | Eq, [(EApp ((EOp (Unop GetYear), _), [e1]), _); (ELit (LInt n), _)] -> - let n = Runtime.integer_to_int n in - let ctx, e1 = translate_expr ctx e1 in - let min_date = - Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 - (date_to_int (date_of_year n)) - in - let max_date = - Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 - (date_to_int (date_of_year (n + 1))) - in - ( ctx, - Boolean.mk_and ctx.ctx_z3 - [ - Arithmetic.mk_ge ctx.ctx_z3 e1 min_date; - Arithmetic.mk_lt ctx.ctx_z3 e1 max_date; - ] ) - | _ -> ( - let ctx, e1, e2 = - match args with - | [e1; e2] -> - let ctx, e1 = translate_expr ctx e1 in - let ctx, e2 = translate_expr ctx e2 in - ctx, e1, e2 - | _ -> - Format.kasprintf failwith - "[Z3 encoding] Ill-formed binary operator application: %a" - (Shared_ast.Expr.format ctx.ctx_decl) - (Shared_ast.Expr.eapp - (Shared_ast.Expr.eop op (Untyped { pos = Pos.no_pos })) - (List.map Shared_ast.Expr.untype args) - (Untyped { pos = Pos.no_pos }) - |> Shared_ast.Expr.unbox) - in - - match bop with - | And -> ctx, Boolean.mk_and ctx.ctx_z3 [e1; e2] - | Or -> ctx, Boolean.mk_or ctx.ctx_z3 [e1; e2] - | Xor -> ctx, Boolean.mk_xor ctx.ctx_z3 e1 e2 - | Add KInt | Add KRat | Add KMoney | Add KDate | Add KDuration -> - ctx, Arithmetic.mk_add ctx.ctx_z3 [e1; e2] - | Sub KInt | Sub KRat | Sub KMoney | Sub KDate | Sub KDuration -> - ctx, Arithmetic.mk_sub ctx.ctx_z3 [e1; e2] - | Mult KInt | Mult KRat | Mult KMoney | Mult KDate | Mult KDuration -> - ctx, Arithmetic.mk_mul ctx.ctx_z3 [e1; e2] - | Div KInt | Div KRat | Div KMoney -> - ctx, Arithmetic.mk_div ctx.ctx_z3 e1 e2 - | Div _ -> - failwith - "[Z3 encoding] application of non-integer binary operator Div not \ - supported" - | Lt KInt | Lt KRat | Lt KMoney | Lt KDate | Lt KDuration -> - ctx, Arithmetic.mk_lt ctx.ctx_z3 e1 e2 - | Lte KInt | Lte KRat | Lte KMoney | Lte KDate | Lte KDuration -> - ctx, Arithmetic.mk_le ctx.ctx_z3 e1 e2 - | Gt KInt | Gt KRat | Gt KMoney | Gt KDate | Gt KDuration -> - ctx, Arithmetic.mk_gt ctx.ctx_z3 e1 e2 - | Gte KInt | Gte KRat | Gte KMoney | Gte KDate | Gte KDuration -> - ctx, Arithmetic.mk_ge ctx.ctx_z3 e1 e2 - | Eq -> ctx, Boolean.mk_eq ctx.ctx_z3 e1 e2 - | Neq -> ctx, Boolean.mk_not ctx.ctx_z3 (Boolean.mk_eq ctx.ctx_z3 e1 e2) - | Map -> - failwith - "[Z3 encoding] application of binary operator Map not supported" - | Concat -> - failwith - "[Z3 encoding] application of binary operator Concat not supported" - | Filter -> - failwith - "[Z3 encoding] application of binary operator Filter not supported")) - | Unop uop -> ( - let ctx, e1 = - match args with - | [e1] -> translate_expr ctx e1 - | _ -> - Format.kasprintf failwith - "[Z3 encoding] Ill-formed unary operator application: %a" - (Shared_ast.Expr.format ctx.ctx_decl) - (Shared_ast.Expr.eapp - (Shared_ast.Expr.eop op (Untyped { pos = Pos.no_pos })) - (List.map Shared_ast.Expr.untype args) - (Untyped { pos = Pos.no_pos }) - |> Shared_ast.Expr.unbox) + | ( Lt_int_int, + [ + (EApp { f = EOp { op = GetYear; _ }, _; args = [e1] }, _); + (ELit (LInt n), _); + ] ) -> + let n = Runtime.integer_to_int n in + let ctx, e1 = translate_expr ctx e1 in + let e2 = + Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 (date_to_int (date_of_year n)) in - - match uop with - | Not -> ctx, Boolean.mk_not ctx.ctx_z3 e1 - | Minus _ -> - failwith "[Z3 encoding] application of unary operator Minus not supported" - (* Omitting the log from the VC *) - | Log _ -> ctx, e1 - | Length -> - (* For now, an array is only its symbolic length. We simply return it *) - ctx, e1 - | IntToRat -> - failwith - "[Z3 encoding] application of unary operator IntToRat not supported" - | MoneyToRat -> - failwith - "[Z3 encoding] application of unary operator MoneyToRat not supported" - | RatToMoney -> - failwith - "[Z3 encoding] application of unary operator RatToMoney not supported" - | GetDay -> - failwith - "[Z3 encoding] application of unary operator GetDay not supported" - | GetMonth -> - failwith - "[Z3 encoding] application of unary operator GetMonth not supported" - | GetYear -> - failwith - "[Z3 encoding] GetYear operator only supported in comparisons with \ - literal" - | FirstDayOfMonth -> - failwith - "[Z3 encoding] FirstDayOfMonth operator only supported in comparisons \ - with literal" - | LastDayOfMonth -> - failwith - "[Z3 encoding] LastDayOfMonth 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") + (* e2 corresponds to the first day of the year n. GetYear e1 < e2 can thus + be directly translated as < in the Z3 encoding using the number of + days *) + ctx, Arithmetic.mk_lt ctx.ctx_z3 e1 e2 + | ( Lte_int_int, + [ + (EApp { f = EOp { op = GetYear; _ }, _; args = [e1] }, _); + (ELit (LInt n), _); + ] ) -> + let ctx, e1 = translate_expr ctx e1 in + let nb_days = if is_leap_year n then 365 else 364 in + let n = Runtime.integer_to_int n in + (* We want that the year corresponding to e1 is smaller or equal to n. We + encode this as the day corresponding to e1 is smaller or equal than the + last day of the year [n], which is Jan 1st + 365 days if [n] is a leap + year, Jan 1st + 364 else *) + let e2 = + Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 + (date_to_int (date_of_year n) + nb_days) + in + ctx, Arithmetic.mk_le ctx.ctx_z3 e1 e2 + | ( Gt_int_int, + [ + (EApp { f = EOp { op = GetYear; _ }, _; args = [e1] }, _); + (ELit (LInt n), _); + ] ) -> + let ctx, e1 = translate_expr ctx e1 in + let nb_days = if is_leap_year n then 365 else 364 in + let n = Runtime.integer_to_int n in + (* We want that the year corresponding to e1 is greater to n. We encode this + as the day corresponding to e1 is greater than the last day of the year + [n], which is Jan 1st + 365 days if [n] is a leap year, Jan 1st + 364 + else *) + let e2 = + Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 + (date_to_int (date_of_year n) + nb_days) + in + ctx, Arithmetic.mk_gt ctx.ctx_z3 e1 e2 + | ( Gte_int_int, + [ + (EApp { f = EOp { op = GetYear; _ }, _; args = [e1] }, _); + (ELit (LInt n), _); + ] ) -> + let n = Runtime.integer_to_int n in + let ctx, e1 = translate_expr ctx e1 in + let e2 = + Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 (date_to_int (date_of_year n)) + in + (* e2 corresponds to the first day of the year n. GetYear e1 >= e2 can thus + be directly translated as >= in the Z3 encoding using the number of + days *) + ctx, Arithmetic.mk_ge ctx.ctx_z3 e1 e2 + | ( Eq, + [ + (EApp { f = EOp { op = GetYear; _ }, _; args = [e1] }, _); + (ELit (LInt n), _); + ] ) -> + let n = Runtime.integer_to_int n in + let ctx, e1 = translate_expr ctx e1 in + let min_date = + Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 (date_to_int (date_of_year n)) + in + let max_date = + Arithmetic.Integer.mk_numeral_i ctx.ctx_z3 + (date_to_int (date_of_year (n + 1))) + in + ( ctx, + Boolean.mk_and ctx.ctx_z3 + [ + Arithmetic.mk_ge ctx.ctx_z3 e1 min_date; + Arithmetic.mk_lt ctx.ctx_z3 e1 max_date; + ] ) + | And, _ -> app Boolean.mk_and + | Or, _ -> app Boolean.mk_or + | Xor, _ -> app2 Boolean.mk_xor + | (Add_int_int | Add_rat_rat | Add_mon_mon | Add_dat_dur | Add_dur_dur), _ -> + app Arithmetic.mk_add + | ( ( Sub_int_int | Sub_rat_rat | Sub_mon_mon | Sub_dat_dat | Sub_dat_dur + | Sub_dur_dur ), + _ ) -> + app Arithmetic.mk_sub + | (Mult_int_int | Mult_rat_rat | Mult_mon_rat | Mult_dur_int), _ -> + app Arithmetic.mk_mul + | (Div_int_int | Div_rat_rat | Div_mon_rat | Div_mon_mon), _ -> + app2 Arithmetic.mk_div + | (Lt_int_int | Lt_rat_rat | Lt_mon_mon | Lt_dat_dat | Lt_dur_dur), _ -> + app2 Arithmetic.mk_lt + | (Lte_int_int | Lte_rat_rat | Lte_mon_mon | Lte_dat_dat | Lte_dur_dur), _ -> + app2 Arithmetic.mk_le + | (Gt_int_int | Gt_rat_rat | Gt_mon_mon | Gt_dat_dat | Gt_dur_dur), _ -> + app2 Arithmetic.mk_gt + | (Gte_int_int | Gte_rat_rat | Gte_mon_mon | Gte_dat_dat | Gte_dur_dur), _ -> + app2 Arithmetic.mk_ge + | Eq, _ -> app2 Boolean.mk_eq + | Map, _ -> + failwith "[Z3 encoding] application of binary operator Map not supported" + | Concat, _ -> + failwith "[Z3 encoding] application of binary operator Concat not supported" + | Filter, _ -> + failwith "[Z3 encoding] application of binary operator Filter not supported" + | Not, _ -> app1 Boolean.mk_not + (* Omitting the log from the VC *) + | Log _, [e1] -> translate_expr ctx e1 + | Length, [e1] -> + (* For now, an array is only its symbolic length. We simply return it *) + translate_expr ctx e1 + | ToRat_int, _ -> + failwith + "[Z3 encoding] application of unary operator ToRat_int not supported" + | ToRat_mon, _ -> + failwith + "[Z3 encoding] application of unary operator ToRat_mon not supported" + | ToMoney_rat, _ -> + failwith + "[Z3 encoding] application of unary operator ToMoney_rat not supported" + | GetDay, _ -> + failwith "[Z3 encoding] application of unary operator GetDay not supported" + | GetMonth, _ -> + failwith + "[Z3 encoding] application of unary operator GetMonth not supported" + | GetYear, _ -> + failwith + "[Z3 encoding] GetYear operator only supported in comparisons with \ + literal" + | FirstDayOfMonth, _ -> + failwith + "[Z3 encoding] FirstDayOfMonth operator only supported in comparisons \ + with literal" + | LastDayOfMonth, _ -> + failwith + "[Z3 encoding] LastDayOfMonth operator only supported in comparisons \ + with literal" + | Round_rat, _ -> + failwith "[Z3 encoding] Round_rat operator not implemented yet" + | Round_mon, _ -> + failwith "[Z3 encoding] Round_mon operator not implemented yet" + | _ -> ill_formed () (** [translate_expr] translate the expression [vc] to its corresponding Z3 expression **) @@ -624,7 +611,7 @@ and translate_expr (ctx : context) (vc : typed expr) : context * Expr.expr = (e : 'm expr * FuncDecl.func_decl list) : context * Expr.expr = let e, accessors = e in match Marked.unmark e with - | EAbs (e, _) -> + | EAbs { binder; _ } -> (* Create a fresh Catala variable to substitue and obtain the body *) let fresh_v = Var.make "arm!tmp" in let fresh_e = EVar fresh_v in @@ -636,7 +623,7 @@ and translate_expr (ctx : context) (vc : typed expr) : context * Expr.expr = in the body, we add this to the context *) let ctx = add_z3matchsubst fresh_v proj ctx in - let body = Bindlib.msubst e [| fresh_e |] in + let body = Bindlib.msubst binder [| fresh_e |] in translate_expr ctx body (* Invariant: Catala match arms are always lambda*) | _ -> failwith "[Z3 encoding] : Arms branches inside VCs should be lambdas" @@ -670,32 +657,46 @@ and translate_expr (ctx : context) (vc : typed expr) : context * Expr.expr = of a match. It actually corresponds to applying an accessor to an enum, the corresponding Z3 expression was previously stored in the context *) ctx, e) - | ETuple _ -> failwith "[Z3 encoding] ETuple unsupported" - | ETupleAccess (s, idx, oname, _tys) -> - let name = - match oname with - | None -> - failwith "[Z3 encoding]: ETupleAccess of unnamed struct unsupported" - | Some n -> n - in + | EStruct _ -> failwith "[Z3 encoding] EStruct unsupported" + | EStructAccess { e; field; name } -> let ctx, z3_struct = find_or_create_struct ctx name in (* This datatype should have only one constructor, corresponding to mk_struct. The accessors of this constructor correspond to the field accesses *) let accessors = List.hd (Datatype.get_accessors z3_struct) in - let accessor = List.nth accessors idx in - let ctx, s = translate_expr ctx s in + let idx_mappings = + List.combine + (List.map fst + (StructField.Map.bindings + (StructName.Map.find name ctx.ctx_decl.ctx_structs))) + accessors + in + let _, accessor = + List.find (fun (field1, _) -> StructField.equal field field1) idx_mappings + in + let ctx, s = translate_expr ctx e in ctx, Expr.mk_app ctx.ctx_z3 accessor [s] - | EInj (e, idx, en, _tys) -> + | EInj { e; cons; name } -> (* This node corresponds to creating a value for the enumeration [en], by calling the [idx]-th constructor of enum [en], with argument [e] *) - let ctx, z3_enum = find_or_create_enum ctx en in + let ctx, z3_enum = find_or_create_enum ctx name in let ctx, z3_arg = translate_expr ctx e in let ctrs = Datatype.get_constructors z3_enum in (* This should always succeed if the expression is well-typed in dcalc *) - let ctr = List.nth ctrs idx in + let idx_mappings = + List.combine + (List.map fst + (EnumConstructor.Map.bindings + (EnumName.Map.find name ctx.ctx_decl.ctx_enums))) + ctrs + in + let _, ctr = + List.find + (fun (cons1, _) -> EnumConstructor.equal cons cons1) + idx_mappings + in ctx, Expr.mk_app ctx.ctx_z3 ctr [z3_arg] - | EMatch (arg, arms, enum) -> + | EMatch { e; cases; name = enum } -> (* We will encode a match as a new variable, tmp_v, and add to the hypotheses that this variable is equal to the conjunction of all `A? arg ==> tmp_v == body`, where `A? arg ==> body` is an arm of the match *) @@ -709,12 +710,14 @@ and translate_expr (ctx : context) (vc : typed expr) : context * Expr.expr = let z3_var = Expr.mk_const_s ctx.ctx_z3 name z3_ty in let ctx, z3_enum = find_or_create_enum ctx enum in - let ctx, z3_arg = translate_expr ctx arg in + let ctx, z3_arg = translate_expr ctx e in let _ctx, z3_arms = List.fold_left_map (translate_match_arm z3_arg) ctx - (List.combine arms (Datatype.get_accessors z3_enum)) + (List.combine + (List.map snd (EnumConstructor.Map.bindings cases)) + (Datatype.get_accessors z3_enum)) in let z3_arms = List.map2 @@ -733,9 +736,9 @@ and translate_expr (ctx : context) (vc : typed expr) : context * Expr.expr = | EArray _ -> failwith "[Z3 encoding] EArray unsupported" | ELit l -> ctx, translate_lit ctx l | EAbs _ -> failwith "[Z3 encoding] EAbs unsupported" - | EApp (head, args) -> ( + | EApp { f = head; args } -> ( match Marked.unmark head with - | EOp op -> translate_op ctx op args + | EOp { op; _ } -> translate_op ctx op args | EVar v -> let (Typed { ty = f_ty; _ }) = Marked.get_mark head in let ctx, fd = find_or_create_funcdecl ctx v f_ty in @@ -756,7 +759,7 @@ and translate_expr (ctx : context) (vc : typed expr) : context * Expr.expr = | EAssert e -> translate_expr ctx e | EOp _ -> failwith "[Z3 encoding] EOp unsupported" | EDefault _ -> failwith "[Z3 encoding] EDefault unsupported" - | EIfThenElse (e_if, e_then, e_else) -> + | EIfThenElse { cond = e_if; etrue = e_then; efalse = e_else } -> (* Encode this as (e_if ==> e_then) /\ (not e_if ==> e_else) *) let ctx, z3_if = translate_expr ctx e_if in let ctx, z3_then = translate_expr ctx e_then in @@ -769,7 +772,7 @@ and translate_expr (ctx : context) (vc : typed expr) : context * Expr.expr = (Boolean.mk_not ctx.ctx_z3 z3_if) z3_else; ] ) - | ErrorOnEmpty _ -> failwith "[Z3 encoding] ErrorOnEmpty unsupported" + | EErrorOnEmpty _ -> failwith "[Z3 encoding] ErrorOnEmpty unsupported" (** [create_z3unit] creates a Z3 sort and expression corresponding to the unit type and value respectively. Concretely, we represent unit as a tuple with 0 @@ -806,7 +809,7 @@ module Backend = struct let print_model (ctx : backend_context) (m : model) : string = print_model ctx m - let is_model_empty (m : model) : bool = List.length (Z3.Model.get_decls m) = 0 + let is_model_empty (m : model) : bool = Z3.Model.get_decls m = [] let translate_expr (ctx : backend_context) (e : typed expr) = translate_expr ctx e @@ -830,9 +833,9 @@ module Backend = struct ctx_decl = decl_ctx; ctx_funcdecl = Var.Map.empty; ctx_z3vars = StringMap.empty; - ctx_z3datatypes = EnumMap.empty; + ctx_z3datatypes = EnumName.Map.empty; ctx_z3matchsubsts = Var.Map.empty; - ctx_z3structs = StructMap.empty; + ctx_z3structs = StructName.Map.empty; ctx_z3unit = z3unit; ctx_z3constraints = []; } diff --git a/doc/syntax/Makefile b/doc/syntax/Makefile index af94c8d4..886f7e03 100644 --- a/doc/syntax/Makefile +++ b/doc/syntax/Makefile @@ -1,7 +1,11 @@ -syntax.pdf: syntax.tex - latexmk -pdf -halt-on-error -shell-escape -pvc syntax.tex +syntax.pdf: syntax_en.pdf syntax_fr.pdf + cpdf $^ -o $@ + +%.pdf: %.tex logo.pdf + latexmk -pdf -halt-on-error -shell-escape $< clean: - latexmk -f -C syntax.tex + latexmk -f -C *.tex + rm -rf _minted* -.PRECIOUS .SECONDARY: syntax.pdf +.PRECIOUS .SECONDARY: syntax.pdf syntax_en.pdf syntax_fr.pdf diff --git a/doc/syntax/logo.pdf b/doc/syntax/logo.pdf new file mode 100644 index 00000000..4166db1a Binary files /dev/null and b/doc/syntax/logo.pdf differ diff --git a/doc/syntax/syntax.pdf b/doc/syntax/syntax.pdf index a4bc5145..c4f9571e 100644 Binary files a/doc/syntax/syntax.pdf and b/doc/syntax/syntax.pdf differ diff --git a/doc/syntax/syntax.tex b/doc/syntax/syntax.tex deleted file mode 100644 index 84dac69a..00000000 --- a/doc/syntax/syntax.tex +++ /dev/null @@ -1,1619 +0,0 @@ -\documentclass[a3paper,landscape]{article} - -\usepackage[T1]{fontenc} -\usepackage[utf8]{inputenc} -\usepackage[left=1cm,right=1cm,top=1cm,bottom=1cm]{geometry} -\usepackage{multicol} -\usepackage{bookman} -\usepackage{booktabs} -\usepackage{minted} - -\pagestyle{empty} - -\newcommand{\li}[1]{\texttt{#1}} -\begin{document} -\begin{center} - 2022-02-28 - \hfill - {\Huge\bfseries\sffamily - Catala Syntax Cheat Sheet} - \hfill - v.0.5.0 -\end{center} -\hrule - -\begin{multicols*}{2} - - \section*{Literate programming} - \begin{center} - \begin{tabular}{p{0.15\columnwidth}p{0.275\columnwidth}p{0.275\columnwidth}} - \toprule - Feature & English syntax & French syntax \\\midrule - Heading & - \vspace*{-1.75em} - \begin{minted}{catala_en} -## Foo -### Bar -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -## Foo -### Bar -\end{minted} - \vspace*{-1.75em} - \\ - Code block & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -``` -\end{minted} - \vspace*{-1.75em} - \\ - Metadata block & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala-metadata -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala-metadata -``` -\end{minted} - \vspace*{-1.75em} - \\ - File inclusion & - \vspace*{-1.75em} - \begin{minted}{catala_en} -> Include: foo.catala_en -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -> Inclusion: foo.catala_fr -\end{minted} - \vspace*{-1.75em} - \\ - \bottomrule - \end{tabular} - \end{center} - \newcommand*\FancyVerbStartString{```catala} - \newcommand*\FancyVerbStopString{```} - - - - - - - - - - - - - - - \section*{Metadata declaration} - \begin{tabular}{p{0.22\columnwidth}p{0.3\columnwidth}p{0.425\columnwidth}} - \toprule - Feature & English syntax & French syntax \\\midrule - Structure declaration & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -declaration structure Foo: - data bar content integer - data baz content boolean -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -déclaration structure Foo: - donnée bar contenu entier - donnée baz contenu booléen -``` -\end{minted} - \vspace*{-1.75em} - \\ - Enumeration declaration & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -declaration enumeration Foo: - -- Bar content integer - -- Baz -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -déclaration énumeration Foo: - -- Bar contenu entier - -- Baz -``` -\end{minted} - \vspace*{-1.75em} \\ - Scope declaration & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -declaration scope Foo: - internal bar content integer - internal baz condition - fizz scope Buzz -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -déclaration champ d'application Foo: - interne bar contenu entier - interne baz condition - contexte fizz champ d'application Buzz -``` -\end{minted} - \vspace*{-1.75em} \\ - Input-output qualifiers & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -internal bar content ... -output baz content ... -input fizz content ... -input output buzz content ... -context biz content ... -context output boz content ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -interne bar contenu ... -sortie baz contenu ... -entrée fizz contenu ... -entrée sortie buzz contenu ... -contexte biz contenu ... -contexte sortie boz contenu ... -``` -\end{minted} - \vspace*{-1.75em} \\ - State transitions declaration & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -internal foo content ... - state bar - state buzz -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -interne foo contenu ... - état bar - état buzz -``` -\end{minted} - \vspace*{-1.75em} \\ - \bottomrule - \end{tabular} - - - - - - - - - - - - \section*{Types} - \begin{center} - \begin{tabular}{p{0.175\columnwidth}p{0.2\columnwidth}p{0.2\columnwidth}} - \toprule - Feature & English syntax & French syntax \\\midrule - Natural integers & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -integer -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -entier -``` -\end{minted} - \vspace*{-1.75em} - \\ - Rational numbers & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -decimal -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -décimal -``` -\end{minted} - \vspace*{-1.75em} - \\ - Booleans & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -boolean -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -booléen -``` -\end{minted} - \vspace*{-1.75em} - \\ - Money & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -money -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -argent -``` -\end{minted} - \vspace*{-1.75em} - \\ - Date & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -date -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -date -``` -\end{minted} - \vspace*{-1.75em} - \\ - Duration & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -duration -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -durée -``` -\end{minted} - \vspace*{-1.75em} - \\ - Function & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -Foo depends on Bar -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -Foo dépend de Bar -``` -\end{minted} - \vspace*{-1.75em} - \\ - Collection & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -collection Foo -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -collection Foo -``` -\end{minted} - \vspace*{-1.75em} - \\ - \bottomrule - \end{tabular} - \end{center} - - - - - - \section*{Literals} - \begin{center} - \begin{tabular}{p{0.15\columnwidth}p{0.275\columnwidth}p{0.275\columnwidth}} - \toprule - Feature & English syntax & French syntax \\\midrule - Integers & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -65536 -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -65536 -``` -\end{minted} - \vspace*{-1.75em} - \\ - Decimals & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -65536.262144 -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -65536.262144 -``` -\end{minted} - \vspace*{-1.75em} - \\ - Money & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -$1,234,567.89 -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -1 234 567,89 € -``` -\end{minted} - \vspace*{-1.75em} - \\ - Date & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -|2021-01-31| -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -|2021-31-01| -``` -\end{minted} - \vspace*{-1.75em} - \\ - Durations & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -254 day 4 month 1 year -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -254 jour 4 mois 1 an -``` -\end{minted} - \vspace*{-1.75em} - \\ - Boolean & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -true false -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -vrai faux -``` -\end{minted} - \vspace*{-1.75em} - \\ - \bottomrule - \end{tabular} - \end{center} - - - - - - \section*{Scope use and related items} - \begin{center} - \begin{tabular}{p{0.22\columnwidth}p{0.36\columnwidth}p{0.35\columnwidth}} - \toprule - Feature & English syntax & French syntax \\\midrule - Scope use & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -scope Foo: ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -champ d'application Foo: ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Use-wide condition & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -scope Foo - under condition bar: ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -champ d'application Foo - sous condition bar: ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Unconditional definition & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -definition foo equals ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -définition foo égal à ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Conditional definition & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -definition foo under condition - bar consequence equals ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -définition foo sous condition - bar conséquence égal à ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Rule\newline(definition for conditions) & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -rule foo under condition - bar consequence fulfilled -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -règle foo sous condition - bar conséquence rempli -``` -\end{minted} - \vspace*{-1.75em} - \\ - Negative rule & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -rule foo under condition - bar consequence not fulfilled -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -règle foo sous condition - bar conséquence non rempli -``` -\end{minted} - \vspace*{-1.75em} - \\ - Function definition/rule & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -definition foo of bar ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -définition foo de bar ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Labeled definition or rule & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -label foo definition bar ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -étiquette foo définition bar ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Exception to label & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -exception foo definition bar ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -exception foo définition bar ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Exception to implicit & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -exception definition bar ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -exception définition bar ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - State definition & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -definition foo state bar equals ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -définition foo état bar égal à ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Assertion & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -assertion... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -assertion ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - \bottomrule - \end{tabular} - \end{center} - - - - - - \section*{Expressions} - \begin{center} - \begin{tabular}{p{0.2\columnwidth}p{0.375\columnwidth}p{0.345\columnwidth}} - \toprule - Feature & English syntax & French syntax \\\midrule - Pattern matching & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -match ... with pattern - -- Foo of foo: ... - -- Bar : ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -selon ... sous forme - -- Foo de foo: ... - -- Bar: ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Pattern test and optional binding & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -... with pattern Foo -... with pattern Bar of bar and ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -... sous forme Foo -... sous forme Bar de bar et -``` -\end{minted} - \vspace*{-1.75em} - \\ - Constructor injection & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -Foo content ... Bar -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -Foo contenu ... Bar -``` -\end{minted} - \vspace*{-1.75em} - \\ - Structure literal & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -Foo { -- bar: ... -- baz: ...} -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -Foo { -- bar: ... -- baz: ...} -``` -\end{minted} - \vspace*{-1.75em} - \\ - Structure field access & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(...).foo -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(...).foo -``` -\end{minted} - \vspace*{-1.75em} - \\ - Function call & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -... of ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -... de ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Subscope variable & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -foo.bar -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -foo.bar -``` -\end{minted} - \vspace*{-1.75em} - \\ - Direct scope call & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -Foo of { -- bar: ... -- baz: ...} -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -Foo de { -- bar: ... -- baz: ...} -``` -\end{minted} - \vspace*{-1.75em} - \\ - Conditional & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -if ... then ... else ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -si ... alors ... sinon -``` -\end{minted} - \vspace*{-1.75em} - \\ - \bottomrule - \end{tabular} - \end{center} - - \section*{Collections} - \begin{center} - \begin{tabular}{p{0.175\columnwidth}p{0.325\columnwidth}p{0.4\columnwidth}} - \toprule - Feature & English syntax & French syntax \\\midrule - Collection literal & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -[ ...; ...; ...] -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -[ ...; ...; ...] -``` -\end{minted} - \vspace*{-1.75em} - \\ - Presence test & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -... in ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -... dans ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Cardinal & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -number of ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -nombre de ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Existence test & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -exists foo in ... such that ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -existe foo dans ... tel que ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - For all test & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -for all foo in ... we have ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -pour tout foo dans ... on a ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - For all test & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -for all foo in ... we have ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -pour tout foo dans ... on a ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Map/filter & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -map for foo in ... of ... -filter for foo in ... of ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -application pour foo dans ... de ... -filtre pour foo dans ... de ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Aggregation & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -sum money for foo in ... of ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -somme argent pour foo dans ... de ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Conditional count & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -number for foo in ... of ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -nombre pour foo dans ... de ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Extremum & - \vspace*{-1.75em} - \begin{minted}[fontsize=\scriptsize]{catala_en} -```catala -maximum integer initial ... for ... in ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}[fontsize=\scriptsize]{catala_fr} -```catala -maximum entier initial ... pour ... dans ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Arg-extremum & - \vspace*{-1.75em} - \begin{minted}[fontsize=\tiny]{catala_en} -```catala -content minimum decimal initial ... for ... in ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}[fontsize=\scriptsize]{catala_fr} -```catala -contenu minimum décimal initial ... pour ... dans ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - \bottomrule - \end{tabular} - \end{center} - - - \section*{Operators} - \begin{center} - \begin{tabular}{p{0.2\columnwidth}p{0.3\columnwidth}p{0.3\columnwidth}} - \toprule - Feature & English syntax & French syntax \\\midrule - Integer to decimal & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -integer_to_decimal of ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -entier_vers_décimal de ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Money rounding & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -round_money of ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -arrondi_argent de ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Date parts & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -get_day of ... -get_month of ... -get_year of ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -accès_jour de ... -accès_mois de ... -accès_année de ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Logical inclusive or & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -... or ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -... ou ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Logical exclusive or & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -... xor ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -... ou bien ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Logical and & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -... and ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -... et ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Polymorphic structural equality & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -... = ... -... != ... -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -... = ... -... != ... -``` -\end{minted} - \vspace*{-1.75em} - \\ - Integer sum & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(integer) + (integer) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(entier) + (entier) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Integer substraction & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(integer) - (integer) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(entier) - (entier) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Integer multiplication & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(integer) * (integer) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(entier) * (entier) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Integer division & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(integer) / (integer) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(entier) / (entier) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Integer comparison & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -< <= > >= -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -< <= > >= -``` -\end{minted} - \vspace*{-1.75em} - \\ - Decimal sum & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(decimal) +. (decimal) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(décimal) +. (décimal) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Decimal substraction & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(decimal) -. (decimal) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(décimal) -. (décimal) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Decimal multiplication & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(decimal) *. (decimal) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(décimal) *. (décimal) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Decimal division & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(decimal) /. (decimal) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(décimal) /. (décimal) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Decimal comparison & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -<. <=. >. >=. -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -<. <=. >. >=. -``` -\end{minted} - \vspace*{-1.75em} - \\ - Money sum & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(money) +$ (money) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(argent) +€ (argent) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Money substraction & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(money) -$ (money) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(argent) -€ (argent) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Money multiplication & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(money) *$ (decimal) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(argent) *€ (décimal) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Money division & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(money) /$ (money) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(argent) /€ (argent) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Money comparison & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -<$ <=$ >$ >=$ -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -<€ <=€ >€ >=€ -``` -\end{minted} - \vspace*{-1.75em} - \\ - Date sum & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(date) +@ (duration) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(date) +@ (durée) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Date substraction & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(date) -@ (date) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(date) -@ (date) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Date comparison & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -<@ <=@ >@ >=@ -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -<@ <=@ >@ >=@ -``` -\end{minted} - \vspace*{-1.75em} - \\ - Duration sum & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(duration) +^ (duration) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(durée) +^ (durée) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Duration substraction & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(duration) -^ (duration) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(durée) -^ (durée) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Duration multiplication & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(duration) *^ (integer) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(durée) *^ (entier) -``` -\end{minted} - \vspace*{-1.75em} - \\ - Duration comparison & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -<^ <=^ >^ >=^ -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -<^ <=^ >^ >=^ -``` -\end{minted} - \vspace*{-1.75em} - \\ - Collection merging & - \vspace*{-1.75em} - \begin{minted}{catala_en} -```catala -(collection) ++ (collection) -``` -\end{minted} - \vspace*{-1.75em} - & - \vspace*{-1.75em} - \begin{minted}{catala_fr} -```catala -(collection) ++ (collection) -``` -\end{minted} - \vspace*{-1.75em} - \\ - \bottomrule - \end{tabular} - \end{center} - - - -\end{multicols*} -\end{document} diff --git a/doc/syntax/syntax_en.tex b/doc/syntax/syntax_en.tex new file mode 100644 index 00000000..03a1e947 --- /dev/null +++ b/doc/syntax/syntax_en.tex @@ -0,0 +1,686 @@ +\documentclass{article} + +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{multicol} +\usepackage{calc} +\usepackage{ifthen} +\usepackage{epsfig} +%\usepackage{bookman} +%\usepackage{booktabs} +\usepackage{upquote} % Uncurly the quotes +\usepackage{etoolbox} % for backquote fix +\usepackage[scaled=0.8]{DejaVuSans} +\usepackage[scaled=0.8]{DejaVuSansMono} +\usepackage{mdframed} % nice frames +\usepackage[nobottomtitles]{titlesec} % better titles +\usepackage{enumitem} +\usepackage{minted} +\usepackage[a4paper,landscape,margin=1cm,includehead,headsep=2ex,nofoot]{geometry} +\usepackage{fancyhdr}\usepackage{hyperref} + +\usemintedstyle{tango} + +\setlist[itemize]{noitemsep, topsep=0pt} + +% backquote dejavu fix +\makeatletter +\chardef\straightquote@code=\catcode`' +\chardef\backquote@code=\catcode`` +\catcode`'=\active \catcode``=\active +\patchcmd{\@noligs} + {\textasciigrave} + {\fixedtextasciigrave} + {}{} +\newcommand{\fixedtextasciigrave}{% + \makebox[.5em]{\fontencoding{TS1}\fontfamily{fvs}\selectfont\textasciigrave}% Vera Sans +} +\catcode\lq\'=\straightquote@code +\catcode\lq\`=\backquote@code +\makeatletter + +% fancyvrb and mdframed stuff +\newmdenv[bottomline=false,rightline=false]{topleft} +\newmdenv[topline=false,leftline=false]{bottomright} +\DefineVerbatimEnvironment{Verbacorner}{Verbatim}{} +\surroundwithmdframed[bottomline=false,rightline=false]{Verbacorner} +\fvset{commandchars=@\{\}} + +\ifthenelse{\lengthtest { \paperwidth = 11in}} + { \geometry{top=.5in,left=.5in,right=.5in,bottom=.5in} } + {\ifthenelse{ \lengthtest{ \paperwidth = 297mm}} + {\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} } + {\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} } + } +\pagestyle{empty} + +%% \makeatletter +%% \renewcommand{\section}{\@startsection{section}{1}{0mm}% +%% {-1ex plus -.5ex minus -.2ex}% +%% {0.5ex plus .2ex}%x +%% {\normalfont\large\bfseries}} +%% \renewcommand{\subsection}{\@startsection{subsection}{2}{0mm}% +%% {-1ex plus -.5ex minus -.2ex}% +%% {0.5ex plus .2ex}% +%% {\normalfont\normalsize\bfseries}} +%% \renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{0mm}% +%% {-1ex plus -.5ex minus -.2ex}% +%% {1ex plus .2ex}% +%% {\normalfont\small\bfseries}} +%% \makeatother + +%% \makeatletter +%% \let\origsection\section +%% \renewcommand\section{\vspace{5em}\origsection} +%% \makeatother + +% Don't print section numbers +\setcounter{secnumdepth}{0} + +\setlength{\parindent}{0pt} +\setlength{\parskip}{1ex} + +\pagestyle{fancy} +\newcommand{\makeheader}[3]{ + \fancyhead[L]{ + \begin{minipage}{30pt} + \vspace{-3pt} + \includegraphics[width=\textwidth]{logo.pdf} + \end{minipage} + } + \fancyhead[C]{ + \LARGE{#1} + } + \fancyhead[R]{ + {\scriptsize + #2 $\cdot$ Revision \#1 $\cdot$ \copyright\ \the\year$\quad$ + %% \begin{minipage}{30pt} + %% \vspace{-3pt} + %% \includegraphics[width=\textwidth]{logo.pdf} %defined at bottom + %% \end{minipage} + }} + \fancyfoot[L]{} + \fancyfoot[C]{} + \fancyfoot[R]{} +} +\renewcommand\headrule{} + +\newenvironment{absolutelynopagebreak} + {\par\nobreak\vfil\penalty0\vfilneg + \vtop\bgroup} + {\par\xdef\tpd{\the\prevdepth}\egroup + \prevdepth=\tpd} + +\newcommand{\vb}{\usefont{T1}{DejaVuSansMono-TLF}{b}{n}} + +\newenvironment{libcomments}{\begin{itemize}[topsep=-10000pt]}{\end{itemize}} + +\setlength{\headheight}{20.1pt} +\setlength{\headsep}{10pt} + +\renewcommand{\familydefault}{\sfdefault} % everything sans-serif + +%Url handling +\hypersetup{ + colorlinks=true, + urlcolor=black, + linkcolor=black, + citecolor=black +} + +% font size -> set to equivalent to footnotesize of 10 pt +% it affect only the \\normalsize command, all are still relative to default's +% article one (10pt) +\newcommand\articlenormalsize{\fontsize{10pt}{12pt}\selectfont} +\renewcommand\normalsize{\footnotesize} + +% redefine sections padding +\makeatletter +\renewcommand{\section}{\@startsection{section}{1}{0mm}% + {-1ex plus -.5ex minus -.2ex}% + {1ex}% + {\normalfont\articlenormalsize\bfseries}} +\renewcommand{\subsection}{\@startsection{subsection}{2}{4mm}% + {-1ex}% + {0.5ex}% + {\normalfont\articlenormalsize\bfseries}} +\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{16mm}% + {-1ex plus -.5ex minus -.2ex}% + {1ex plus .2ex}% + {\normalfont\small\bfseries}} +\makeatother + +%\pagestyle{empty} +% set section counter to 0 +\setcounter{secnumdepth}{0} + +% Text at right +%\raggedright + +% Set up the interline space in tables +\renewcommand{\arraystretch}{0.0} + +% https://github.com/gpoore/minted/issues/82 +\makeatletter +\newenvironment{catala}{% + \VerbatimEnvironment + \let\FV@ListVSpace\relax + \begin{minted}[autogobble]{catala_en}}% + {\end{minted}} +\makeatother + +\begin{document} + +\makeheader{\MakeUppercase{The Catala Syntax} \hspace{2em}\small english version}{v0.8.0}{1} +% warning: this is repeated for p.2 +% \begin{center} +% 2022-12-15 +% \hfill +% {\Huge\bfseries\sffamily +% Catala Syntax Cheat Sheet} +% \hfill +% v.0.8.0 +% \end{center} +% \hrule +\null +\begin{multicols}{3} + +\newlength\cola +\setlength\cola{\dimexpr .4\columnwidth -2\tabcolsep} +\newlength\colb +\setlength\colb{\dimexpr .6\columnwidth -2\tabcolsep} + + + +\section{Literate programming} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + Heading & \begin{catala} + # Title + ### Sub-subtitle + \end{catala} + \\ + Code block & + \begin{catala} + ```catala + ``` + \end{catala} + \\ + Metadata block & \begin{catala} + ```catala-metadata + ``` + \end{catala} + \\ + File inclusion & \begin{catala} + > Include: foo.catala_en + \end{catala} + \\ +\end{tabular} + +\newcommand*\FancyVerbStartString{\PYG{l+s}{```catala}} +\newcommand*\FancyVerbStopString{\PYG{l+s}{```}} + +\section{Types and literals} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + \begin{catala} + ```catala + boolean + ``` + \end{catala} + & + \begin{catala} + ```catala + true false + ``` + \end{catala} + \\ + \begin{catala} + ```catala + integer + ``` + \end{catala} + & + \begin{catala} + ```catala + 65536 + ``` + \end{catala} + \\ + \begin{catala} + ```catala + decimal + ``` + \end{catala} + & \begin{catala} + ```catala + 65536.262144 37% + ``` + \end{catala} + \\ + \begin{catala} + ```catala + money + ``` + \end{catala} + & + \begin{catala} + ```catala + $1,234,567.89 + ``` + \end{catala} + \\ + \begin{catala} + ```catala + date + ``` + \end{catala} + & + \begin{catala} + ```catala + |2021-01-31| + ``` + \end{catala} + \\ + \begin{catala} + ```catala + duration + ``` + \end{catala} + & + \begin{catala} + ```catala + 254 day 4 month 1 year + ``` + \end{catala} + \\ + \begin{catala} + ```catala + collection integer + ``` + \end{catala} + & + \begin{catala} + ```catala + [ 12; 24; 36 ] + ``` + \end{catala} + \\ + \begin{catala} + ```catala + decimal depends on money + ``` + \end{catala} + & + \begin{catala} + ```catala + f of x equals x / $12.0 + ``` + \end{catala} + \\ + \begin{catala} + ```catala + Struct1 + ``` + \end{catala} + & + \begin{catala} + ```catala + Struct1 { -- fld1: 9 -- fld2: false } + ``` + \end{catala} + \\ + \begin{catala} + ```catala + Enum1 + ``` + \end{catala} + & + \begin{catala} + ```catala + Case1 content 12 Case2 + ``` + \end{catala} + \\ +\end{tabular} + +\section{Expressions} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + Local definition & \begin{catala} + ```catala + let x equals 36 - 5 in ... + ``` + \end{catala} + \\ + Pattern matching & \begin{catala} + ```catala + match expr with pattern + -- Case1 of x: ... + -- Case2 : ... + ``` + \end{catala} + \\ + Pattern test and optional binding & \begin{catala} + ```catala + expr with pattern Case1 + expr with pattern Case1 of x + and x >= 2 + ``` + \end{catala} + \\ + Structure field access & \begin{catala} + ```catala + struc1.fld2 + ``` + \end{catala} + \\ + Function call & \begin{catala} + ```catala + f of $44.50 + ``` + \end{catala} + \\ + Subscope variable & \begin{catala} + ```catala + sub1.var0 + ``` + \end{catala} + \\ + Direct scope call & \begin{catala} + ```catala + outut of Scope1 + with { -- fld1: 9 -- fld2: true } + ``` + \end{catala} + \\ + Conditional & \begin{catala} + ```catala + if ... then ... else ... + ``` + \end{catala} + \\ +\end{tabular} + +\section{Metadata declaration} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + + Structure declaration & + \begin{catala} + ```catala + declaration structure Struct1: + data fld1 content integer + data fld2 content boolean + \end{catala} + \\ + Enumeration declaration & \begin{catala} + ```catala + declaration enumeration Enum1: + -- Case1 content integer + -- Case2 + ``` + \end{catala} + \\ + Scope declaration & \begin{catala} + ```catala + declaration scope Scope1: + internal var1 content integer + internal var2 condition + sub1 scope Scope0 + ``` + \end{catala} + \\ + Input-output qualifiers & \begin{catala} + ```catala + internal var1 content ... + output var3 content ... + input var4 content ... + input output var5 content ... + context var6 content ... + context output var7 content ... + ``` + \end{catala} + \\ + State transitions declaration & \begin{catala} + ```catala + internal var1 content ... + state before + state after + ``` + \end{catala} + \\ +\end{tabular} + +\section{Operators and built-ins} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + Logical operators & \begin{catala} + ```catala + not a + a and b + a or b # "or otherwise" + a xor b # exclusive or + ``` + \end{catala} + \\ + Arithmetic & \begin{catala} + ```catala + - a + a + b a - b + a * b a / b + ``` + \end{catala} + \\ + Comparison & + \begin{catala} + ```catala + a = b a != b + a > b a < b + a >= b a <= b + ``` + \end{catala} + \\ + Conversions & \begin{catala} + ```catala + decimal of 44 + money of 23.15 + ``` + \end{catala} + \\ + Rounding & \begin{catala} + ```catala + round of $9.99 + ``` + \end{catala} + \\ + Date parts & \begin{catala} + ```catala + get_day of ... + get_month of ... + get_year of ... + ``` + \end{catala} + \\ + Explicitly typed operators & + \begin{catala} + ```catala + a +! b # integer + a +. b # decimal + a +$ b # money + a +^ b # duration + ``` + \end{catala} + \\ +\end{tabular} + +\columnbreak + +\section{Scope definition} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + Scope use & \begin{catala} + ```catala + scope Scope1: ... + ``` + \end{catala} + \\ + Use-wide condition & \begin{catala} + ```catala + scope Scope1 + under condition var1 >= 2: ... + ``` + \end{catala} + \\ + Unconditional definition & \begin{catala} + ```catala + definition var1 equals ... + ``` + \end{catala} + \\ + Conditional definition & \begin{catala} + ```catala + definition var1 + under condition ... + consequence equals ... + ``` + \end{catala} + \\ + Rule\newline(definition for conditions) & \begin{catala} + ```catala + rule var2 + under condition var1 >= 2 + consequence fulfilled + ``` + \end{catala} + \\ + Negative rule & \begin{catala} + ```catala + consequence not fulfilled + ``` + \end{catala} + \\ + Function definition/rule & \begin{catala} + ```catala + definition f of x equals ... + ``` + \end{catala} + \\ + Labeled definition or rule & \begin{catala} + ```catala + label lbl1 definition var1 ... + ``` + \end{catala} + \\ + Exception to label & \begin{catala} + ```catala + exception lbl1 definition var1 ... + ``` + \end{catala} + \\ + Exception to implicit & \begin{catala} + ```catala + exception definition var1 ... + ``` + \end{catala} + \\ + State definition & \begin{catala} + ```catala + definition var1 + state before + equals ... + ``` + \end{catala} + \\ + Assertion & \begin{catala} + ```catala + assertion ... + ``` + \end{catala} + \\ +\end{tabular} + +\section{Collection operations} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + + Presence test & \begin{catala} + ```catala + coll contains 3 + ``` + \end{catala} + \\ + Cardinal & \begin{catala} + ```catala + number of coll + ``` + \end{catala} + \\ + Existence test & \begin{catala} + ```catala + exists x among coll such that x >= 2 + ``` + \end{catala} + \\ + For all test & \begin{catala} + ```catala + for all x among coll we have x >= 2 + ``` + \end{catala} + \\ + Mapping & \begin{catala} + ```catala + (x + 2) for x among coll + ``` + \end{catala} + \\ + Filter & \begin{catala} + ```catala + x among coll such that x >= 2 + ``` + \end{catala} + \\ + Filter + map & \begin{catala} + ```catala + (x - 2) for x among coll + such that x >= 2 + ``` + \end{catala} + \\ + Merge & \begin{catala} + ```catala + coll1 ++ coll2 + ``` + \end{catala} + \\ + Aggregation & \begin{catala} + ```catala + sum integer coll + ``` + \end{catala} + \\ + Count & \begin{catala} + ```catala + number of coll + ``` + \end{catala} + \\ + Extremum & \begin{catala} + ```catala + maximum of coll + or if collection empty then -1 + ``` + \end{catala} + \\ + Arg-extremum & \begin{catala} + ```catala + x among coll + such that (x * x) is minimum + or if collection empty then -1 + ``` + \end{catala} + \\ +\end{tabular} + +\end{multicols} +\end{document} diff --git a/doc/syntax/syntax_fr.tex b/doc/syntax/syntax_fr.tex new file mode 100644 index 00000000..da3e0b90 --- /dev/null +++ b/doc/syntax/syntax_fr.tex @@ -0,0 +1,692 @@ +\documentclass{article} + +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{multicol} +\usepackage{calc} +\usepackage{ifthen} +\usepackage{epsfig} +%\usepackage{bookman} +%\usepackage{booktabs} +\usepackage{upquote} % Uncurly the quotes +\usepackage{etoolbox} % for backquote fix +\usepackage[scaled=0.8]{DejaVuSans} +\usepackage[scaled=0.8]{DejaVuSansMono} +\usepackage{mdframed} % nice frames +\usepackage[nobottomtitles]{titlesec} % better titles +\usepackage{enumitem} +\usepackage{minted} +\usepackage[a4paper,landscape,margin=1cm,includehead,headsep=2ex,nofoot]{geometry} +\usepackage{fancyhdr}\usepackage{hyperref} + +\usemintedstyle{tango} + +\setlist[itemize]{noitemsep, topsep=0pt} + +% backquote dejavu fix +\makeatletter +\chardef\straightquote@code=\catcode`' +\chardef\backquote@code=\catcode`` +\catcode`'=\active \catcode``=\active +\patchcmd{\@noligs} + {\textasciigrave} + {\fixedtextasciigrave} + {}{} +\newcommand{\fixedtextasciigrave}{% + \makebox[.5em]{\fontencoding{TS1}\fontfamily{fvs}\selectfont\textasciigrave}% Vera Sans +} +\catcode\lq\'=\straightquote@code +\catcode\lq\`=\backquote@code +\makeatletter + +% fancyvrb and mdframed stuff +\newmdenv[bottomline=false,rightline=false]{topleft} +\newmdenv[topline=false,leftline=false]{bottomright} +\DefineVerbatimEnvironment{Verbacorner}{Verbatim}{} +\surroundwithmdframed[bottomline=false,rightline=false]{Verbacorner} +\fvset{commandchars=@\{\}} + +\ifthenelse{\lengthtest { \paperwidth = 11in}} + { \geometry{top=.5in,left=.5in,right=.5in,bottom=.5in} } + {\ifthenelse{ \lengthtest{ \paperwidth = 297mm}} + {\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} } + {\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} } + } +\pagestyle{empty} + +%% \makeatletter +%% \renewcommand{\section}{\@startsection{section}{1}{0mm}% +%% {-1ex plus -.5ex minus -.2ex}% +%% {0.5ex plus .2ex}%x +%% {\normalfont\large\bfseries}} +%% \renewcommand{\subsection}{\@startsection{subsection}{2}{0mm}% +%% {-1ex plus -.5ex minus -.2ex}% +%% {0.5ex plus .2ex}% +%% {\normalfont\normalsize\bfseries}} +%% \renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{0mm}% +%% {-1ex plus -.5ex minus -.2ex}% +%% {1ex plus .2ex}% +%% {\normalfont\small\bfseries}} +%% \makeatother + +%% \makeatletter +%% \let\origsection\section +%% \renewcommand\section{\vspace{5em}\origsection} +%% \makeatother + +% Don't print section numbers +\setcounter{secnumdepth}{0} + +\setlength{\parindent}{0pt} +\setlength{\parskip}{1ex} + +\pagestyle{fancy} +\newcommand{\makeheader}[3]{ + \fancyhead[L]{ + \begin{minipage}{30pt} + \vspace{-3pt} + \includegraphics[width=\textwidth]{logo.pdf} + \end{minipage} + } + \fancyhead[C]{ + \LARGE{#1} + } + \fancyhead[R]{ + {\scriptsize + #2 $\cdot$ Révision \#1 $\cdot$ \copyright\ \the\year$\quad$ + %% \begin{minipage}{30pt} + %% \vspace{-3pt} + %% \includegraphics[width=\textwidth]{logo.pdf} %defined at bottom + %% \end{minipage} + }} + \fancyfoot[L]{} + \fancyfoot[C]{} + \fancyfoot[R]{} +} +\renewcommand\headrule{} + +\newenvironment{absolutelynopagebreak} + {\par\nobreak\vfil\penalty0\vfilneg + \vtop\bgroup} + {\par\xdef\tpd{\the\prevdepth}\egroup + \prevdepth=\tpd} + +\newcommand{\vb}{\usefont{T1}{DejaVuSansMono-TLF}{b}{n}} + +\newenvironment{libcomments}{\begin{itemize}[topsep=-10000pt]}{\end{itemize}} + +\setlength{\headheight}{20.1pt} +\setlength{\headsep}{10pt} + +\renewcommand{\familydefault}{\sfdefault} % everything sans-serif + +%Url handling +\hypersetup{ + colorlinks=true, + urlcolor=black, + linkcolor=black, + citecolor=black +} + +% font size -> set to equivalent to footnotesize of 10 pt +% it affect only the \\normalsize command, all are still relative to default's +% article one (10pt) +\newcommand\articlenormalsize{\fontsize{10pt}{12pt}\selectfont} +\renewcommand\normalsize{\footnotesize} + +% redefine sections padding +\makeatletter +\renewcommand{\section}{\@startsection{section}{1}{0mm}% + {-1ex plus -.5ex minus -.2ex}% + {1ex}% + {\normalfont\articlenormalsize\bfseries}} +\renewcommand{\subsection}{\@startsection{subsection}{2}{4mm}% + {-1ex}% + {0.5ex}% + {\normalfont\articlenormalsize\bfseries}} +\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{16mm}% + {-1ex plus -.5ex minus -.2ex}% + {1ex plus .2ex}% + {\normalfont\small\bfseries}} +\makeatother + +%\pagestyle{empty} +% set section counter to 0 +\setcounter{secnumdepth}{0} + +% Text at right +%\raggedright + +% Set up the interline space in tables +\renewcommand{\arraystretch}{0.0} + +% https://github.com/gpoore/minted/issues/82 +\makeatletter +\newenvironment{catala}{% + \VerbatimEnvironment + \let\FV@ListVSpace\relax + \begin{minted}[autogobble]{catala_fr}}% + {\end{minted}} +\makeatother + +\begin{document} + +\makeheader{\MakeUppercase{La syntaxe de Catala} \hspace{2em}\small version française}{v0.8.0}{1} +% warning: this is repeated for p.2 +% \begin{center} +% 2022-12-15 +% \hfill +% {\Huge\bfseries\sffamily +% Catala Syntax Cheat Sheet} +% \hfill +% v.0.8.0 +% \end{center} +% \hrule +\null +\begin{multicols}{3} + +\newlength\cola +\setlength\cola{\dimexpr .4\columnwidth -2\tabcolsep} +\newlength\colb +\setlength\colb{\dimexpr .6\columnwidth -2\tabcolsep} + + + +\section{Programmation littéraire} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + En-têtes & \begin{catala} + # Titre + ### Sous-sous-titre + \end{catala} + \\ + Référence au journal officiel & \begin{catala} + # Article 1 | JORFARTI000012345678 + # Article 2 | LEGIARTI000012345678 + # Décision 3 | CETATEXT000012345678 + \end{catala} + \\ + Bloc de code & + \begin{catala} + ```catala + ``` + \end{catala} + \\ + Bloc de métadonnées & \begin{catala} + ```catala-metadata + ``` + \end{catala} + \\ + Inclusion de fichier & \begin{catala} + > Inclusion: foo.catala_en + \end{catala} + \\ +\end{tabular} + +\newcommand*\FancyVerbStartString{\PYG{l+s}{```catala}} +\newcommand*\FancyVerbStopString{\PYG{l+s}{```}} + +\section{Types et littéraux} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + \begin{catala} + ```catala + booléen + ``` + \end{catala} + & + \begin{catala} + ```catala + vrai faux + ``` + \end{catala} + \\ + \begin{catala} + ```catala + entier + ``` + \end{catala} + & + \begin{catala} + ```catala + 65536 + ``` + \end{catala} + \\ + \begin{catala} + ```catala + décimal + ``` + \end{catala} + & \begin{catala} + ```catala + 65536,262144 37% + ``` + \end{catala} + \\ + \begin{catala} + ```catala + argent + ``` + \end{catala} + & + \begin{catala} + ```catala + 1 234 567,89€ + ``` + \end{catala} + \\ + \begin{catala} + ```catala + date + ``` + \end{catala} + & + \begin{catala} + ```catala + |2021-01-31| + ``` + \end{catala} + \\ + \begin{catala} + ```catala + durée + ``` + \end{catala} + & + \begin{catala} + ```catala + 254 jour 4 mois 1 an + ``` + \end{catala} + \\ + \begin{catala} + ```catala + collection entier + ``` + \end{catala} + & + \begin{catala} + ```catala + [ 12; 24; 36 ] + ``` + \end{catala} + \\ + \begin{catala} + ```catala + décimal dépend de argent + ``` + \end{catala} + & + \begin{catala} + ```catala + f de x égale à x / 12,0€ + ``` + \end{catala} + \\ + \begin{catala} + ```catala + Struct1 + ``` + \end{catala} + & + \begin{catala} + ```catala + Struct1 { -- chp1: 9 -- chp2: faux } + ``` + \end{catala} + \\ + \begin{catala} + ```catala + Énum1 + ``` + \end{catala} + & + \begin{catala} + ```catala + Cas1 contenu 12 Cas2 + ``` + \end{catala} + \\ +\end{tabular} + +\section{Expressions} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + Définition locale & \begin{catala} + ```catala + soit x égale à 36 - 5 dans ... + ``` + \end{catala} + \\ + Filtrage par motif & \begin{catala} + ```catala + selon expr sous forme + -- Cas1 de x: ... + -- Cas2 : ... + ``` + \end{catala} + \\ + Test de filtrage\newline avec variable optionnelle & \begin{catala} + ```catala + expr sous forme Cas1 + expr sous forme Cas1 de x + et x >= 2 + ``` + \end{catala} + \\ + Champ de structure & \begin{catala} + ```catala + struc1.chp2 + ``` + \end{catala} + \\ + Appel de fonction & \begin{catala} + ```catala + f de 44,50€ + ``` + \end{catala} + \\ + Var. de sous-ch. d'app. & \begin{catala} + ```catala + ss_ch1.var0 + ``` + \end{catala} + \\ + Appel direct\newline du champ d'application & \begin{catala} + ```catala + résultat de ChApp1 + avec { -- chp1: 9 -- chp2: vrai } + ``` + \end{catala} + \\ + Branchement conditionnel & \begin{catala} + ```catala + si ... alors ... sinon ... + ``` + \end{catala} + \\ +\end{tabular} + +\section{Déclaration des métadonnées} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + + Déclaration de structure & + \begin{catala} + ```catala + déclaration structure Struct1: + donnée chp1 contenu entier + donnée chp2 contenu booléen + \end{catala} + \\ + Déclaration d'énumération & \begin{catala} + ```catala + déclaration énumeration Énum1: + -- Cas1 contenu entier + -- Cas2 + ``` + \end{catala} + \\ + Déclaration de champ\newline d'application & \begin{catala} + ```catala + déclaration champ d'application ChApp1: + interne var1 contenu entier + interne var2 condition + ss_ch1 champ d'application ChApp0 + ``` + \end{catala} + \\ + Qualificateurs d'entrée-\newline sortie & \begin{catala} + ```catala + interne var1 contenu ... + résultat var3 contenu ... + entrée var4 contenu ... + entrée résultat var5 contenu ... + contexte var6 contenu ... + contexte résultat var7 contenu ... + ``` + \end{catala} + \\ + Transitions d'état & \begin{catala} + ```catala + interne var1 contenu ... + état avant + état après + ``` + \end{catala} + \\ +\end{tabular} + +\section{Opérations} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + Opérateurs logiques & \begin{catala} + ```catala + non a + a et b + a ou b # "ou à défaut" + a ou bien b # ou exclusif + ``` + \end{catala} + \\ + Arithmétique & \begin{catala} + ```catala + - a + a + b a - b + a * b a / b + ``` + \end{catala} + \\ + Comparaisons & + \begin{catala} + ```catala + a = b a != b + a > b a < b + a >= b a <= b + ``` + \end{catala} + \\ + Conversions & \begin{catala} + ```catala + décimal de 44 + argent de 23,15 + ``` + \end{catala} + \\ + Arrondis & \begin{catala} + ```catala + arrondi de 9,99€ + ``` + \end{catala} + \\ + Éléments de dates & \begin{catala} + ```catala + accès_jour de ... + accès_mois de ... + accès_année de ... + ``` + \end{catala} + \\ + Opérateurs à types\newline explicites & + \begin{catala} + ```catala + a +! b # entier + a +. b # décimal + a +€ b # argent + a +^ b # durée + ``` + \end{catala} + \\ +\end{tabular} + +\columnbreak + +\section{Définition de champ d'application} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + Utilisation & \begin{catala} + ```catala + champ d'application ChApp1: ... + ``` + \end{catala} + \\ + Avec condition générale & \begin{catala} + ```catala + champ d'application ChApp1 + sous condition var1 >= 2: ... + ``` + \end{catala} + \\ + Définition inconditionnelle & \begin{catala} + ```catala + définition var1 égale à ... + ``` + \end{catala} + \\ + Définition conditionnelle& \begin{catala} + ```catala + définition var1 + sous condition ... + conséquence égale à ... + ``` + \end{catala} + \\ + Règle\newline(définition de condition) & \begin{catala} + ```catala + règle var2 + sous condition var1 >= 2 + conséquence rempli + ``` + \end{catala} + \\ + Règle négative & \begin{catala} + ```catala + conséquence non rempli + ``` + \end{catala} + \\ + Définition de fonction/règle & \begin{catala} + ```catala + définition f de x égale à ... + ``` + \end{catala} + \\ + Définition/règle étiquetée & \begin{catala} + ```catala + étiquette étq1 définition var1 ... + ``` + \end{catala} + \\ + Exc. à définition étiquetée & \begin{catala} + ```catala + exception étq1 définition var1 ... + ``` + \end{catala} + \\ + Exception à implicite & \begin{catala} + ```catala + exception définition var1 ... + ``` + \end{catala} + \\ + Définition d'états & \begin{catala} + ```catala + définition var1 + état avant + égale à ... + ``` + \end{catala} + \\ + Assertion & \begin{catala} + ```catala + assertion ... + ``` + \end{catala} + \\ +\end{tabular} + +\section{Opérations sur les collections} + +\begin{tabular}{@{}p{\cola}p{\colb}@{}} + + Test de présence& \begin{catala} + ```catala + coll contient 3 + ``` + \end{catala} + \\ + Cardinal & \begin{catala} + ```catala + nombre de coll + ``` + \end{catala} + \\ + Test d'existence & \begin{catala} + ```catala + existe x parmi coll tel que x >= 2 + ``` + \end{catala} + \\ + Test pour tous & \begin{catala} + ```catala + pour tout x parmi coll on a x >= 2 + ``` + \end{catala} + \\ + Application un-à-un & \begin{catala} + ```catala + (x + 2) pour x parmi coll + ``` + \end{catala} + \\ + Filtrage & \begin{catala} + ```catala + x parmi coll tel que x >= 2 + ``` + \end{catala} + \\ + Filtrage + application & \begin{catala} + ```catala + (x - 2) pour x parmi coll + tel que x >= 2 + ``` + \end{catala} + \\ + Réunion & \begin{catala} + ```catala + coll1 ++ coll2 + ``` + \end{catala} + \\ + Aggrégation & \begin{catala} + ```catala + somme entier coll + ``` + \end{catala} + \\ + Comptage & \begin{catala} + ```catala + nombre de coll + ``` + \end{catala} + \\ + Extremums & \begin{catala} + ```catala + maximum de coll + ou si collection vide alors -1 + ``` + \end{catala} + \\ + Élément selon extremum & \begin{catala} + ```catala + x parmi coll + tel que (x * x) est minimum + ou si collection vide alors -1 + ``` + \end{catala} + \\ +\end{tabular} + +\end{multicols} +\end{document} diff --git a/dune b/dune index 5247ffc7..238a7f80 100644 --- a/dune +++ b/dune @@ -12,6 +12,22 @@ (run catala --help=groff) (run groff -P -l -P -r -mandoc -Thtml))))) +(rule + (action + (with-stdout-to + clerk.html + (pipe-stdout + (run clerk --help=groff) + (run groff -P -l -P -r -mandoc -Thtml))))) + +(rule + (action + (with-stdout-to + catala_legifrance.html + (pipe-stdout + (run catala_legifrance --help=groff) + (run groff -P -l -P -r -mandoc -Thtml))))) + (alias (name exec) (deps compiler/catala.exe build_system/clerk.exe)) diff --git a/examples/NSW_community_gaming/nsw_art_union.catala_en b/examples/NSW_community_gaming/nsw_art_union.catala_en index e25a9b65..d95ef888 100644 --- a/examples/NSW_community_gaming/nsw_art_union.catala_en +++ b/examples/NSW_community_gaming/nsw_art_union.catala_en @@ -38,7 +38,7 @@ requirements are complied with— benefiting organisation, ```catala scope GamingAuthorized: -definition minimumProceeds equals (artUnion.proceedsToBenefitingOrg >=$ artUnion.grossProceeds *$ 30 %) +definition minimumProceeds equals (artUnion.proceedsToBenefitingOrg >= artUnion.grossProceeds * 30 %) definition benefitingOrg equals artUnion.typeOrg with pattern BenefitingOrganisation.Charitable or artUnion.typeOrg with pattern BenefitingOrganisation.NonProfit or artUnion.typeOrg with pattern BenefitingOrganisation.ObjectOfPublicOrCharitableCharacter @@ -47,14 +47,14 @@ definition benefitingOrg equals artUnion.typeOrg with pattern BenefitingOrganisa (b) the total value of all the prizes exceeds $30,000, ```catala scope GamingAuthorized: -definition valueOfPrizes equals (artUnion.totalValueOfThePrizes >=$ $30,000) +definition valueOfPrizes equals (artUnion.totalValueOfThePrizes >= $30,000) ``` (c) the maximum amount of money payable as a separate prize does not exceed $30,000, ```catala scope GamingAuthorized: -definition separatePrizeMaxValue equals (artUnion.maxAmountMoneyAsSeparatePrize <=$ $30,000) +definition separatePrizeMaxValue equals (artUnion.maxAmountMoneyAsSeparatePrize <= $30,000) ``` (d) the person conducting the activity holds an authority to do so that is in force and the activity is conducted in accordance with the authority diff --git a/examples/NSW_community_gaming/nsw_charity_housie.catala_en b/examples/NSW_community_gaming/nsw_charity_housie.catala_en index 2aa4309a..e6565df2 100644 --- a/examples/NSW_community_gaming/nsw_charity_housie.catala_en +++ b/examples/NSW_community_gaming/nsw_charity_housie.catala_en @@ -34,22 +34,22 @@ definition benefitingOrg equals (charityHousie.typeOrg with pattern Organisation (b) not less than 12.5% of the gross proceeds of the gaming activity are paid to the benefiting org ```catala scope GamingAuthorized: -definition minimumProceeds equals charityHousie.proceedsToBenefitingOrganisation >=$ charityHousie.grossProceeds *$ 12.5 % +definition minimumProceeds equals charityHousie.proceedsToBenefitingOrganisation >= charityHousie.grossProceeds * 12.5 % ``` (c)the total value of the expenses of conducting the gaming activity (excluding the cost of prizes) does not exceed 12.5% of the gross proceeds of the gaming activity ```catala scope GamingAuthorized: -definition expenses equals (charityHousie.totalValueOfExpenses -$ charityHousie.totalValueOfThePrizes)<=$ charityHousie.grossProceeds *$ 12.5 % +definition expenses equals (charityHousie.totalValueOfExpenses - charityHousie.totalValueOfThePrizes)<= charityHousie.grossProceeds * 12.5 % ``` (d) the total value of all of the prizes for 1 session of the gaming activity does not exceed $10,000 and does not exceed 75% of the gross proceeds from the gaming activity ```catala scope GamingAuthorized: -definition prizesTotal equals (charityHousie.totalValueOfThePrizes <=$ $10,000) -and (charityHousie.totalValueOfThePrizes <=$ charityHousie.grossProceeds*$ 75 %) -#definition prizesTotal equals (charityHousie.totalValuePrizePerSession <=$ 10.000) -#and (charityHousie.totalValuePrizePerSession <= (charityHousie.grossProceeds*$ 75%)) +definition prizesTotal equals (charityHousie.totalValueOfThePrizes <= $10,000) +and (charityHousie.totalValueOfThePrizes <= charityHousie.grossProceeds* 75 %) +#definition prizesTotal equals (charityHousie.totalValuePrizePerSession <= 10.000) +#and (charityHousie.totalValuePrizePerSession <= (charityHousie.grossProceeds* 75%)) ``` (e)no more than 48 tickets are permitted to be sold to the same participant ```catala diff --git a/examples/NSW_community_gaming/nsw_club_bingo.catala_en b/examples/NSW_community_gaming/nsw_club_bingo.catala_en index 8a8c43e0..6171ac25 100644 --- a/examples/NSW_community_gaming/nsw_club_bingo.catala_en +++ b/examples/NSW_community_gaming/nsw_club_bingo.catala_en @@ -27,14 +27,14 @@ scope GamingAuthorized: ```catala scope GamingAuthorized: - definition prizeValueIsSmall equals (clubBingo.totalValuePrizePerGame <=$ $70) + definition prizeValueIsSmall equals (clubBingo.totalValuePrizePerGame <= $70) ``` (c) if a bonus prize is offered at the end of a session of club bingo, only 1 prize of a value not exceeding $70 may be offered, ```catala scope GamingAuthorized: definition bonusPrize equals - ( (clubBingo.bonusPrizeMaxValue <=$ $70) or (not clubBingo.bonusPrizeOffered) ) + ( (clubBingo.bonusPrizeMaxValue <= $70) or (not clubBingo.bonusPrizeOffered) ) ``` (d) none of the prizes consist of or include money. diff --git a/examples/NSW_community_gaming/nsw_draw_lottery.catala_en b/examples/NSW_community_gaming/nsw_draw_lottery.catala_en index aa993d84..e6f9fbd1 100644 --- a/examples/NSW_community_gaming/nsw_draw_lottery.catala_en +++ b/examples/NSW_community_gaming/nsw_draw_lottery.catala_en @@ -37,13 +37,13 @@ definition benefitingOrg equals drawLottery.typeOrg with pattern OrganisationTyp benefiting organisation, ```catala scope GamingAuthorized: -definition minimumProceeds equals drawLottery.proceedsToBenefitingOrg >=$ drawLottery.grossProceeds *$ 40 % +definition minimumProceeds equals drawLottery.proceedsToBenefitingOrg >= drawLottery.grossProceeds * 40 % ``` (c) the total value of all of the prizes does not exceed $30,000. ```catala scope GamingAuthorized: -definition maxValueOfPrizes equals drawLottery.totalValueOfThePrizes <=$ $30,000 +definition maxValueOfPrizes equals drawLottery.totalValueOfThePrizes <= $30,000 scope GamingAuthorized: rule authorized diff --git a/examples/NSW_community_gaming/nsw_no_draw_lottery.catala_en b/examples/NSW_community_gaming/nsw_no_draw_lottery.catala_en index 85c06c67..546f3642 100644 --- a/examples/NSW_community_gaming/nsw_no_draw_lottery.catala_en +++ b/examples/NSW_community_gaming/nsw_no_draw_lottery.catala_en @@ -38,13 +38,13 @@ or noDrawLottery.typeOrg with pattern OrganisationType.NonProfit benefiting organisation, ```catala scope GamingAuthorized: -definition minimumProceeds equals noDrawLottery.proceedsToBenefitingOrg >=$ noDrawLottery.grossProceeds *$ 40 % +definition minimumProceeds equals noDrawLottery.proceedsToBenefitingOrg >= noDrawLottery.grossProceeds * 40 % ``` (c) the total value of all of the prizes does not exceed $5,000, ```catala scope GamingAuthorized: -definition maxValueOfPrizes equals noDrawLottery.totalValueOfThePrizes <=$ $5,000 +definition maxValueOfPrizes equals noDrawLottery.totalValueOfThePrizes <= $5,000 ``` (d) the total number of tickets produced or obtained for sale for the lottery does not exceed 3,000. diff --git a/examples/NSW_community_gaming/nsw_progressive_lottery.catala_en b/examples/NSW_community_gaming/nsw_progressive_lottery.catala_en index 1be206f5..da0e59dd 100644 --- a/examples/NSW_community_gaming/nsw_progressive_lottery.catala_en +++ b/examples/NSW_community_gaming/nsw_progressive_lottery.catala_en @@ -22,7 +22,7 @@ declaration scope GamingAuthorized: (a) the maximum amount of money payable as a prize does not exceed $7,000, ```catala scope GamingAuthorized: - definition maxCashPrize equals (progressiveLottery.maxAmountPayable <=$ $7000) + definition maxCashPrize equals (progressiveLottery.maxAmountPayable <= $7000) ``` (b) if the total value of all the prizes exceeds $30,000, the person conducting the activity holds an authority to do so that is in force and the activity is conducted @@ -30,7 +30,7 @@ scope GamingAuthorized: ```catala scope GamingAuthorized: definition amountOfPrizesGreaterThan30000 equals - (progressiveLottery.totalValueOfThePrizes <$ $30000 + (progressiveLottery.totalValueOfThePrizes < $30000 or progressiveLottery.holdsAuthority) scope GamingAuthorized: diff --git a/examples/NSW_community_gaming/nsw_social_housie.catala_en b/examples/NSW_community_gaming/nsw_social_housie.catala_en index 1fe7cc83..17f143c5 100644 --- a/examples/NSW_community_gaming/nsw_social_housie.catala_en +++ b/examples/NSW_community_gaming/nsw_social_housie.catala_en @@ -50,14 +50,14 @@ scope GamingAuthorized : available prizes for 1 session of the gaming activity does not exceed $40, ```catala scope GamingAuthorized : - definition prizePrice equals socialHousie.totalValuePrizePerSession <=$ $40 + definition prizePrice equals socialHousie.totalValuePrizePerSession <= $40 ``` (d) if 1 or more individual prizes are not won, the value of any jackpot prize does not exceed $200, ```catala scope GamingAuthorized : - definition maxJackpotValue equals socialHousie.jackpotPrizeValue <=$ $200 + definition maxJackpotValue equals socialHousie.jackpotPrizeValue <= $200 ``` (e) the total amount invested by participants in a session of the gaming diff --git a/examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en b/examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en index bae59cde..384b551e 100644 --- a/examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en +++ b/examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en @@ -33,17 +33,15 @@ Message: unexpected token Autosuggestion: did you mean "content", or maybe "condition"? Error token: -┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.20-25 +┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.20-25: └──┐ - │ 11 │ context my_gaming scope GamingAuthorized │ ‾‾‾‾‾ Last good token: -┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.10-19 +┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.10-19: └──┐ - │ 11 │ context my_gaming scope GamingAuthorized │ ‾‾‾‾‾‾‾‾‾ @@ -79,17 +77,15 @@ Message: unexpected token Autosuggestion: did you mean "content", or maybe "condition"? Error token: -┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.20-25 +┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.20-25: └──┐ - │ 11 │ context my_gaming scope GamingAuthorized │ ‾‾‾‾‾ Last good token: -┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.10-19 +┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.10-19: └──┐ - │ 11 │ context my_gaming scope GamingAuthorized │ ‾‾‾‾‾‾‾‾‾ @@ -125,17 +121,15 @@ Message: unexpected token Autosuggestion: did you mean "content", or maybe "condition"? Error token: -┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.20-25 +┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.20-25: └──┐ - │ 11 │ context my_gaming scope GamingAuthorized │ ‾‾‾‾‾ Last good token: -┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.10-19 +┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.10-19: └──┐ - │ 11 │ context my_gaming scope GamingAuthorized │ ‾‾‾‾‾‾‾‾‾ @@ -173,17 +167,15 @@ Message: unexpected token Autosuggestion: did you mean "content", or maybe "condition"? Error token: -┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.20-25 +┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.20-25: └──┐ - │ 11 │ context my_gaming scope GamingAuthorized │ ‾‾‾‾‾ Last good token: -┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.10-19 +┌─⯈ examples/NSW_community_gaming/tests/test_nsw_social_housie.catala_en:11.10-19: └──┐ - │ 11 │ context my_gaming scope GamingAuthorized │ ‾‾‾‾‾‾‾‾‾ diff --git a/examples/aides_logement/archives.catala_fr b/examples/aides_logement/archives.catala_fr index 24fa0da3..99e3bd20 100644 --- a/examples/aides_logement/archives.catala_fr +++ b/examples/aides_logement/archives.catala_fr @@ -1,6 +1,59 @@ -# Archives législatives et réglementaires +# Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement -## Articles valables du 1er octobre 2021 au 1er juillet 2022 +## Articles valables du 1er juillet 2022 au 31 décembre 2022 + +### Article 15 | LEGIARTI000046126962 [archive] + +Pour l'application du 5° de l'article D. 823-17 du même code, le forfait " R0 " est fixé selon +le tableau suivant (en euros) : + +Composition du foyer MONTANT (en euros) +----------------------------------------- ------------------- +Personne seule sans personne à charge 4 870 +Couple sans personne à charge 6 977 +Personne seule ou couple ayant : + -une personne à charge 8 322 + -deux personnes à charge 8 509 + -trois personnes à charge 8 834 + -quatre personnes à charge 9 163 + -cinq personnes à charge 9 488 + -six personnes à charge 9 816 + -par personne à charge supplémentaire 323 + +```catala +champ d'application CalculAidePersonnaliséeLogementLocatif + sous condition date_courante >= |2022-07-01| et + date_courante <= |2022-12-31|: + définition abattement_forfaitaire_d823_17 égal à + si nombre_personnes_à_charge = 0 alors + selon situation_familiale_calcul_apl sous forme + -- PersonneSeule: 4 870 € + -- Couple: 6 977 € + sinon (si nombre_personnes_à_charge = 1 alors + 8 322 € + sinon (si nombre_personnes_à_charge = 2 alors + 8 509 € + sinon (si nombre_personnes_à_charge = 3 alors + 8 834 € + sinon (si nombre_personnes_à_charge = 4 alors + 9 163 € + sinon (si nombre_personnes_à_charge = 5 alors + 9 488 € + sinon (si nombre_personnes_à_charge = 6 alors + 9 816 € + sinon + (9 816€ + (323 € * (décimal de + (nombre_personnes_à_charge - 6)))) + )))))) +``` + +NOTA : + +Conformément à l’article 3 de l’arrêté du 29 juillet 2022 (NOR : TREL2220748A), +ces dispositions sont applicables pour les prestations dues à compter du 1 er juillet 2022. + + +## Articles valables du 1er octobre 2021 au 30 juin 2022 ### Article 7 | LEGIARTI000044137432 [archive] @@ -26,8 +79,8 @@ pour les prestations dues à compter du 1er octobre 2021. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: # Colonne 1 étiquette base définition plafond_loyer_d823_16_2 sous condition @@ -55,13 +108,13 @@ champ d'application CalculAidePersonnaliséeLogementLocatif conséquence égal à selon zone sous forme --Zone1: - 406,30€ +€ 58,95€ *€ (entier_vers_décimal de + 406,30€ + 58,95€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone2: - 357,80€ +€ 52,08€ *€ (entier_vers_décimal de + 357,80€ + 52,08€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone3: - 330,94€ +€ 47,43€ *€ (entier_vers_décimal de + 330,94€ + 47,43€ * (décimal de (nombre_personnes_à_charge - 1)) ``` @@ -112,7 +165,7 @@ compter du 1er octobre 2021. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif sous condition - date_courante >=@ |2021-10-01| et date_courante <@ |2022-07-01| et + date_courante >= |2021-10-01| et date_courante < |2022-07-01| et logement_est_chambre: étiquette chambre exception base @@ -156,10 +209,10 @@ du 1er octobre 2021. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: étiquette base définition montant_forfaitaire_charges_d823_16 égal à - 54,22€ +€ 12,29€ *€ (entier_vers_décimal de nombre_personnes_à_charge) + 54,22€ + 12,29€ * (décimal de nombre_personnes_à_charge) ``` ### Article 13 | LEGIARTI000044137423 [archive] @@ -170,14 +223,14 @@ défini au 2° de l'article D. 823-16 du même code et du forfait charge ou 35,3 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition participation_minimale égal à si - (loyer_éligible +€ montant_forfaitaire_charges_d823_16) - *€ 8,5% >=€ 35,39 € + (loyer_éligible + montant_forfaitaire_charges_d823_16) + * 8,5% >= 35,39 € alors - (loyer_éligible +€ montant_forfaitaire_charges_d823_16) *€ 8,5% + (loyer_éligible + montant_forfaitaire_charges_d823_16) * 8,5% sinon 35,39 € ``` @@ -215,8 +268,8 @@ Majoration par personne à charge -0,06% ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition taux_composition_familiale égal à si nombre_personnes_à_charge = 0 alors selon situation_familiale_calcul_apl sous forme @@ -235,7 +288,7 @@ champ d'application CalculAidePersonnaliséeLogementLocatif sinon (si nombre_personnes_à_charge = 6 alors 1,73% sinon - (1,73% -. (0,06% *. (entier_vers_décimal de + (1,73% - (0,06% * (décimal de (nombre_personnes_à_charge - 6)))) )))))) # TODO informatique: corriger le parseur pour éviter d'avoir à mettre @@ -249,10 +302,10 @@ RL est exprimé en pourcentage et arrondi à la deuxième décimale. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition rapport_loyers égal à - arrondi_décimal de ((loyer_éligible /€ loyer_référence) *. 100,0) /. 100,0 + arrondi de ((loyer_éligible / loyer_référence) * 100,0) / 100,0 ``` Pour la détermination de TL , les taux progressifs et les tranches successives de RL mentionnés @@ -273,21 +326,21 @@ $\textrm{TL}=0 \%$ $\textrm{TL}=0,45 \%\times (\textrm{RL}-45\%)$ $\textrm{TL ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: # Ici on choisit de mettre des >= pour inclure le résultat sur la crête # dans la case de droite ; nous avons bien vérifié que sur la crête le # résultat est le même à gauche et à droite. définition taux_loyer_éligible état formule égal à - si rapport_loyers <. 45% alors 0% sinon ( - si rapport_loyers >=. 45% et rapport_loyers <. 75% alors - 0,45% *. (rapport_loyers -. 0,45%) - sinon (si rapport_loyers >=. 75% alors - 0,45% *. 30% +. 0,68% *. (rapport_loyers -. 75%) + si rapport_loyers < 45% alors 0% sinon ( + si rapport_loyers >= 45% et rapport_loyers < 75% alors + 0,45% * (rapport_loyers - 0,45%) + sinon (si rapport_loyers >= 75% alors + 0,45% * 30% + 0,68% * (rapport_loyers - 75%) sinon 0,0)) - définition taux_loyer_éligible état arrondi égal à + définition taux_loyer_éligible état taux_arrondi égal à # La troisième décimale en pourcentage est en fait la cinquième décimale - (arrondi_décimal de (taux_loyer_éligible *. 100000,0)) /. 100000,0 + (arrondi de (taux_loyer_éligible * 100000,0)) / 100000,0 ``` Le loyer de référence LR est défini selon le tableau suivant (en euros) : @@ -301,15 +354,15 @@ Majoration par personne à charge 52,08 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition loyer_référence égal à si nombre_personnes_à_charge = 0 alors selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 259,78€ -- Couple: 317,97€ - sinon (357,80€ +€ - (52,08€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (357,80€ + + (52,08€ * (décimal de (nombre_personnes_à_charge - 1)))) ``` NOTA : @@ -342,8 +395,8 @@ charge supplémentaire 44,21 39,06 35,57 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01| et colocation: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01| et colocation: # Ici l'exception est rapportée au cas de base puisqu'on suppose # qu'on ne peut pas être en colocation dans un logement constitué @@ -372,13 +425,13 @@ champ d'application CalculAidePersonnaliséeLogementLocatif conséquence égal à selon zone sous forme --Zone1: - 304,73€ +€ 44,21€ *€ (entier_vers_décimal de + 304,73€ + 44,21€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone2: - 268,35€ +€ 39,06€ *€ (entier_vers_décimal de + 268,35€ + 39,06€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone3: - 248,21€ +€ 35,57€ *€ (entier_vers_décimal de + 248,21€ + 35,57€ * (décimal de (nombre_personnes_à_charge - 1)) ``` @@ -392,13 +445,13 @@ Majoration par personne à charge 12,29 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01| et colocation: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01| et colocation: exception base définition montant_forfaitaire_charges_d823_16 égal à (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 27,10€ - -- Couple: 54,22€) +€ - 12,29€ *€ (entier_vers_décimal de nombre_personnes_à_charge) + -- Couple: 54,22€) + + 12,29€ * (décimal de nombre_personnes_à_charge) ``` NOTA : @@ -424,11 +477,11 @@ du 1er octobre 2021. ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: étiquette base définition montant_forfaitaire_charges_d832_10 égal à - 54,22 € +€ 12,29 € *€ (entier_vers_décimal de nombre_personnes_à_charge) + 54,22 € + 12,29 € * (décimal de nombre_personnes_à_charge) ``` ### Article 24 | LEGIARTI000044137409 [archive] @@ -439,11 +492,11 @@ Dans le cas des copropriétaires prévus à l'article D. 832-16 du même code : ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition plafond_mensualité_d832_10_3 état copropriétaires égal à si copropriété alors - plafond_mensualité_d832_10_3 *€ 75% + plafond_mensualité_d832_10_3 * 75% sinon plafond_mensualité_d832_10_3 ``` @@ -458,15 +511,15 @@ Majoration par personne à charge 12,29 ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: exception base définition montant_forfaitaire_charges_d832_10 sous condition copropriété conséquence égal à (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 27,10€ - -- Couple: 54,22€) +€ - 12,29 € *€ (entier_vers_décimal de nombre_personnes_à_charge) + -- Couple: 54,22€) + + 12,29 € * (décimal de nombre_personnes_à_charge) ``` NOTA : @@ -494,8 +547,8 @@ pour les prestations dues à compter du 1er octobre 2021. ```catala champ d'application CalculAidePersonnaliséeLogementFoyer sous condition - date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition plafond_équivalence_loyer_éligible égal à (selon zone sous forme -- Zone1: ( @@ -510,8 +563,8 @@ champ d'application CalculAidePersonnaliséeLogementFoyer sous condition sinon (si nombre_personnes_à_charge = 3 alors 636,35 € sinon - (686,37 € +€ - 71,19€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 4))))))) + (686,37 € + + 71,19€ * (décimal de (nombre_personnes_à_charge - 4))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -524,8 +577,8 @@ champ d'application CalculAidePersonnaliséeLogementFoyer sous condition sinon (si nombre_personnes_à_charge = 3 alors 579,29 € sinon - (617,27 € +€ - 64,34€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 4))))))) + (617,27 € + + 64,34€ * (décimal de (nombre_personnes_à_charge - 4))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -538,8 +591,8 @@ champ d'application CalculAidePersonnaliséeLogementFoyer sous condition sinon (si nombre_personnes_à_charge = 3 alors 541,10 € sinon - (576,57 € +€ - 59,71€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 4))))))) + (576,57 € + + 59,71€ * (décimal de (nombre_personnes_à_charge - 4))))))) ) ``` @@ -559,12 +612,12 @@ les prestations dues à compter du 1er octobre 2021. ```catala champ d'application CalculAllocationLogementAccessionPropriété - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: étiquette oct_2021_juin_2022 définition montant_forfaitaire_charges égal à si nombre_personnes_à_charge = 0 alors 54,22 € - sinon 54,22 € +€ (12,29 € *€ ( - entier_vers_décimal de nombre_personnes_à_charge)) + sinon 54,22 € + (12,29 € * ( + décimal de nombre_personnes_à_charge)) ``` ### Article 37 | LEGIARTI000044137400 [archive] @@ -575,12 +628,12 @@ Dans le cas des copropriétaires prévus à l'article D. 842-10 du même code : ```catala champ d'application CalculAllocationLogementAccessionPropriété - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: exception définition calcul_plafond_mensualité_d842_6 de date_calcul état avec_copropriété égal à si copropriété alors - calcul_plafond_mensualité_d842_6 de date_calcul *€ 75% + calcul_plafond_mensualité_d842_6 de date_calcul * 75% sinon calcul_plafond_mensualité_d842_6 de date_calcul ``` @@ -595,16 +648,16 @@ Majoration par personne à charge 12,29 ```catala champ d'application CalculAllocationLogementAccessionPropriété - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: exception oct_2021_juin_2022 définition montant_forfaitaire_charges sous condition copropriété conséquence égal à (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 27,10 € - -- Couple : 54,22€) +€ (12,29 € *€ ( - entier_vers_décimal de nombre_personnes_à_charge)) + -- Couple : 54,22€) + (12,29 € * ( + décimal de nombre_personnes_à_charge)) ``` NOTA : @@ -628,12 +681,12 @@ sont applicables pour les prestations dues à compter du 1er octobre 2021. ```catala champ d'application CalculAllocationLogementFoyer - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition montant_forfaitaire_charges égal à si nombre_personnes_à_charge = 0 alors 54,22 € - sinon 54,22 € +€ (12,29 € *€ ( - entier_vers_décimal de nombre_personnes_à_charge)) + sinon 54,22 € + (12,29 € * ( + décimal de nombre_personnes_à_charge)) ``` @@ -650,8 +703,8 @@ b) 131,00 euros lorsqu'il s'agit d'un couple ; ```catala champ d'application CalculAllocationLogementFoyer - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition équivalence_loyer sous condition catégorie_équivalence_loyer_d842_16 sous forme ÉtudiantLogéEnChambreCROUS conséquence égal à @@ -668,8 +721,8 @@ b) 264,40 euros lorsqu'il s'agit d'un couple ; ```catala champ d'application CalculAllocationLogementFoyer - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition équivalence_loyer sous condition catégorie_équivalence_loyer_d842_16 sous forme ÉtudiantLogéEnChambreCROUSRéhabilitée @@ -687,8 +740,8 @@ b) 320,73 euros lorsqu'il s'agit d'un couple ; ```catala champ d'application CalculAllocationLogementFoyer - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition équivalence_loyer sous condition catégorie_équivalence_loyer_d842_16 sous forme PersonnesÂgéesSelon3DeD842_16 @@ -706,8 +759,8 @@ b) 264,40 euros lorsqu'il s'agit d'un couple. ```catala champ d'application CalculAllocationLogementFoyer - sous condition date_courante >=@ |2021-10-01| et - date_courante <@ |2022-07-01|: + sous condition date_courante >= |2021-10-01| et + date_courante < |2022-07-01|: définition équivalence_loyer sous condition catégorie_équivalence_loyer_d842_16 sous forme AutresPersonnes @@ -722,7 +775,79 @@ Conformément au I de l’article 3 de l’arrêté du 23 septembre 2021, ces di applicables pour les prestations dues à compter du 1er octobre 2021. -## Articles valables du 1er octobre 2020 au 1er octobre 2021 +## Articles valables du 1er janvier 2022 au 30 juin 2022 + +### Article 6 | LEGIARTI000045011471 [archive] + +Pour l'application de l'article D. 822-21 du même code, le montant forfaitaire auquel sont réputées +égales les ressources du bénéficiaire et, le cas échéant, de son conjoint, est fixé à 7 800 euros +pour la location et à 6 000 euros pour la résidence en logement-foyer. + +Toutefois, lorsque le demandeur est titulaire d'une bourse de l'enseignement supérieur qui n'est +pas assujettie à l'impôt sur le revenu, le montant forfaitaire de ressources est fixé à 6 300 euros +pour la location et à 4 900 euros pour la résidence en logement-foyer. + +```catala +# TODO informatique et juridique: traduire cet article qui vient définir +# ressources_forfaitaires_r822_20 +``` + +NOTA : + +Conformément à l’article 2 de l’arrêté du 20 décembre 2021 (NOR : LOGL2134477A), +ces dispositions sont applicables pour les prestations dues à compter du 1 er janvier 2022. + +### Article 15 | LEGIARTI000045011468 [archive] + +Pour l'application du 5° de l'article D. 823-17 du même code, le forfait " R0 " est fixé selon +le tableau suivant (en euros) : + +Composition du foyer MONTANT (en euros) +----------------------------------------- ------------------- +Personne seule sans personne à charge 4 683 +Couple sans personne à charge 6 709 +Personne seule ou couple ayant : + -une personne à charge 8 002 + -deux personnes à charge 8 182 + -trois personnes à charge 8 495 + -quatre personnes à charge 8 811 + -cinq personnes à charge 9 124 + -six personnes à charge 9 439 + -par personne à charge supplémentaire 311 + +```catala +champ d'application CalculAidePersonnaliséeLogementLocatif + sous condition date_courante >= |2022-01-01| et + date_courante < |2022-07-01|: + définition abattement_forfaitaire_d823_17 égal à + si nombre_personnes_à_charge = 0 alors + selon situation_familiale_calcul_apl sous forme + -- PersonneSeule: 4 683 € + -- Couple: 6709 € + sinon (si nombre_personnes_à_charge = 1 alors + 8 002 € + sinon (si nombre_personnes_à_charge = 2 alors + 8 192 € + sinon (si nombre_personnes_à_charge = 3 alors + 8 495 € + sinon (si nombre_personnes_à_charge = 4 alors + 8 811 € + sinon (si nombre_personnes_à_charge = 5 alors + 9 124 € + sinon (si nombre_personnes_à_charge = 6 alors + 9 439 € + sinon + (9 439€ + (311 € * (décimal de + (nombre_personnes_à_charge - 6)))) + )))))) +``` + +NOTA : +Conformément à l’article 2 de l’arrêté du 20 décembre 2021 (NOR : LOGL2134477A), +ces dispositions sont applicables pour les prestations dues à compter du 1 er janvier 2022. + + +## Articles valables du 1er octobre 2020 au 31 septembre 2021 ### Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement @@ -751,8 +876,8 @@ octobre 2020. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante <@ |2021-10-01| et - date_courante >=@ |2020-10-01|: + sous condition date_courante < |2021-10-01| et + date_courante >= |2020-10-01|: # Colonne 1 étiquette base définition plafond_loyer_d823_16_2 sous condition @@ -780,13 +905,13 @@ champ d'application CalculAidePersonnaliséeLogementLocatif conséquence égal à selon zone sous forme --Zone1: - 404,60€ +€ 58,70€ *€ (entier_vers_décimal de + 404,60€ + 58,70€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone2: - 356,30€ +€ 51,86€ *€ (entier_vers_décimal de + 356,30€ + 51,86€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone3: - 329,56€ +€ 47,23€ *€ (entier_vers_décimal de + 329,56€ + 47,23€ * (décimal de (nombre_personnes_à_charge - 1)) ``` @@ -836,7 +961,7 @@ sont applicables pour les prestations dues à compter du 1er octobre 2020. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif sous condition - date_courante <@ |2021-10-01| et date_courante >=@ |2020-10-01| et + date_courante < |2021-10-01| et date_courante >= |2020-10-01| et logement_est_chambre: étiquette chambre exception base @@ -880,10 +1005,10 @@ compter du 1er octobre 2020. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante <@ |2021-10-01| et - date_courante >=@ |2020-10-01|: + sous condition date_courante < |2021-10-01| et + date_courante >= |2020-10-01|: étiquette base définition montant_forfaitaire_charges_d823_16 égal à - 53,99€ +€ 12,24€ *€ (entier_vers_décimal de nombre_personnes_à_charge) + 53,99€ + 12,24€ * (décimal de nombre_personnes_à_charge) ``` #### Article 13 | LEGIARTI000042378442 [archive] @@ -894,14 +1019,14 @@ défini au 2° de l'article D. 823-16 du même code et du forfait charge ou 35,2 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante <@ |2021-10-01| et - date_courante >=@ |2020-10-01|: + sous condition date_courante < |2021-10-01| et + date_courante >= |2020-10-01|: définition participation_minimale égal à si - (loyer_éligible +€ montant_forfaitaire_charges_d823_16) - *€ 8,5% >=€ 35,24 € + (loyer_éligible + montant_forfaitaire_charges_d823_16) + * 8,5% >= 35,24 € alors - (loyer_éligible +€ montant_forfaitaire_charges_d823_16) *€ 8,5% + (loyer_éligible + montant_forfaitaire_charges_d823_16) * 8,5% sinon 35,24 € ``` @@ -939,8 +1064,8 @@ Majoration par personne à charge -0,06% ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2020-10-01| et - date_courante <@ |2021-10-01|: + sous condition date_courante >= |2020-10-01| et + date_courante < |2021-10-01|: définition taux_composition_familiale égal à si nombre_personnes_à_charge = 0 alors selon situation_familiale_calcul_apl sous forme @@ -959,7 +1084,7 @@ champ d'application CalculAidePersonnaliséeLogementLocatif sinon (si nombre_personnes_à_charge = 6 alors 1,73% sinon - (1,73% -. (0,06% *. (entier_vers_décimal de + (1,73% - (0,06% * (décimal de (nombre_personnes_à_charge - 6)))) )))))) # TODO informatique: corriger le parseur pour éviter d'avoir à mettre @@ -973,10 +1098,10 @@ RL est exprimé en pourcentage et arrondi à la deuxième décimale. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2020-10-01| et - date_courante <@ |2021-10-01|: + sous condition date_courante >= |2020-10-01| et + date_courante < |2021-10-01|: définition rapport_loyers égal à - arrondi_décimal de ((loyer_éligible /€ loyer_référence) *. 100,0) /. 100,0 + arrondi de ((loyer_éligible / loyer_référence) * 100,0) / 100,0 ``` Pour la détermination de TL , les taux progressifs et les tranches successives de RL mentionnés @@ -997,18 +1122,18 @@ $\text{TL}=0 \%$ $\text{TL}=0,45 \%\times (\text{RL}-45\%)$ $\text{TL}=0,45\% ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2020-10-01| et - date_courante <@ |2021-10-01|: + sous condition date_courante >= |2020-10-01| et + date_courante < |2021-10-01|: définition taux_loyer_éligible état formule égal à - si rapport_loyers <. 45% alors 0% sinon ( - si rapport_loyers >=. 45% et rapport_loyers <. 75% alors - 0,45% *. (rapport_loyers -. 0,45%) - sinon (si rapport_loyers >=. 75% alors - 0,45% *. 30% +. 0,68% *. (rapport_loyers -. 75%) + si rapport_loyers < 45% alors 0% sinon ( + si rapport_loyers >= 45% et rapport_loyers < 75% alors + 0,45% * (rapport_loyers - 0,45%) + sinon (si rapport_loyers >= 75% alors + 0,45% * 30% + 0,68% * (rapport_loyers - 75%) sinon 0,0)) - définition taux_loyer_éligible état arrondi égal à + définition taux_loyer_éligible état taux_arrondi égal à # La troisième décimale en pourcentage est en fait la cinquième décimale - (arrondi_décimal de (taux_loyer_éligible *. 100000,0)) /. 100000,0 + (arrondi de (taux_loyer_éligible * 100000,0)) / 100000,0 ``` Le loyer de référence LR est défini selon le tableau suivant (en euros) : @@ -1022,15 +1147,15 @@ Majoration par personne à charge 51,86 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2020-10-01| et - date_courante <@ |2021-10-01|: + sous condition date_courante >= |2020-10-01| et + date_courante < |2021-10-01|: définition loyer_référence égal à si nombre_personnes_à_charge = 0 alors selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 258,69€ -- Couple: 316,64€ - sinon (356,30€ +€ - (51,86€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (356,30€ + + (51,86€ * (décimal de (nombre_personnes_à_charge - 1)))) ``` NOTA : @@ -1065,8 +1190,8 @@ charge supplémentaire 44,03 38,90 35,42 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante <@ |2021-10-01| et - date_courante >=@ |2020-10-01| et colocation: + sous condition date_courante < |2021-10-01| et + date_courante >= |2020-10-01| et colocation: exception base définition plafond_loyer_d823_16_2 sous condition (situation_familiale_calcul_apl sous forme PersonneSeule) et @@ -1091,13 +1216,13 @@ champ d'application CalculAidePersonnaliséeLogementLocatif conséquence égal à selon zone sous forme --Zone1: - 303,45€ +€ 44,03€ *€ (entier_vers_décimal de + 303,45€ + 44,03€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone2: - 267,23€ +€ 38,90€ *€ (entier_vers_décimal de + 267,23€ + 38,90€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone3: - 247,17€ +€ 35,42€ *€ (entier_vers_décimal de + 247,17€ + 35,42€ * (décimal de (nombre_personnes_à_charge - 1)) ``` @@ -1111,13 +1236,13 @@ Majoration par personne à charge 12,24 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante <@ |2021-10-01| et - date_courante >=@ |2020-10-01| et colocation: + sous condition date_courante < |2021-10-01| et + date_courante >= |2020-10-01| et colocation: exception base définition montant_forfaitaire_charges_d823_16 égal à (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 26,99€ - -- Couple: 53,99€) +€ - 12,24€ *€ (entier_vers_décimal de nombre_personnes_à_charge) + -- Couple: 53,99€) + + 12,24€ * (décimal de nombre_personnes_à_charge) ``` NOTA : @@ -1145,11 +1270,11 @@ sont applicables pour les prestations dues à compter du 1er octobre 2020. ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sous condition date_courante <@ |2021-10-01| et - date_courante >=@ |2020-10-01|: + sous condition date_courante < |2021-10-01| et + date_courante >= |2020-10-01|: étiquette base définition montant_forfaitaire_charges_d832_10 égal à - 53,99 € +€ 12,24 € *€ (entier_vers_décimal de nombre_personnes_à_charge) + 53,99 € + 12,24 € * (décimal de nombre_personnes_à_charge) ``` #### Article 24 | LEGIARTI000042378430 [archive] @@ -1160,11 +1285,11 @@ Dans le cas des copropriétaires prévus à l'article D. 832-16 du même code : ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sous condition date_courante <@ |2021-10-01| et - date_courante >=@ |2020-10-01|: + sous condition date_courante < |2021-10-01| et + date_courante >= |2020-10-01|: définition plafond_mensualité_d832_10_3 état copropriétaires égal à si copropriété alors - plafond_mensualité_d832_10_3 *€ 75% + plafond_mensualité_d832_10_3 * 75% sinon plafond_mensualité_d832_10_3 ``` @@ -1179,15 +1304,15 @@ Majoration par personne à charge 12,24 ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sous condition date_courante <@ |2021-10-01| et - date_courante >=@ |2020-10-01|: + sous condition date_courante < |2021-10-01| et + date_courante >= |2020-10-01|: exception base définition montant_forfaitaire_charges_d832_10 sous condition copropriété conséquence égal à (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 26,99€ - -- Couple: 53,99€) +€ - 12,24 € *€ (entier_vers_décimal de nombre_personnes_à_charge) + -- Couple: 53,99€) + + 12,24 € * (décimal de nombre_personnes_à_charge) ``` NOTA : @@ -1218,7 +1343,7 @@ sont applicables pour les prestations dues à compter du 1er octobre 2020. ```catala champ d'application CalculAidePersonnaliséeLogementFoyer sous condition - date_courante <@ |2021-10-01| et date_courante >=@ |2020-10-01|: + date_courante < |2021-10-01| et date_courante >= |2020-10-01|: définition plafond_équivalence_loyer_éligible égal à (selon zone sous forme -- Zone1: ( @@ -1233,8 +1358,8 @@ champ d'application CalculAidePersonnaliséeLogementFoyer sous condition sinon (si nombre_personnes_à_charge = 3 alors 633,69 € sinon - (683,5 € +€ - 70,89€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 4))))))) + (683,5 € + + 70,89€ * (décimal de (nombre_personnes_à_charge - 4))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -1247,8 +1372,8 @@ champ d'application CalculAidePersonnaliséeLogementFoyer sous condition sinon (si nombre_personnes_à_charge = 3 alors 576,87 € sinon - (614,69 € +€ - 64,07€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 4))))))) + (614,69 € + + 64,07€ * (décimal de (nombre_personnes_à_charge - 4))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -1261,86 +1386,12 @@ champ d'application CalculAidePersonnaliséeLogementFoyer sous condition sinon (si nombre_personnes_à_charge = 3 alors 538,84 € sinon - (574,16 € +€ - 59,46€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 4))))))) + (574,16 € + + 59,46€ * (décimal de (nombre_personnes_à_charge - 4))))))) ) ``` -## Articles valables du 1er janvier 2022 au 1er juillet 2022 - -### Article 6 | LEGIARTI000045011471 [archive] - -Pour l'application de l'article D. 822-21 du même code, le montant forfaitaire auquel sont réputées -égales les ressources du bénéficiaire et, le cas échéant, de son conjoint, est fixé à 7 800 euros -pour la location et à 6 000 euros pour la résidence en logement-foyer. - -Toutefois, lorsque le demandeur est titulaire d'une bourse de l'enseignement supérieur qui n'est -pas assujettie à l'impôt sur le revenu, le montant forfaitaire de ressources est fixé à 6 300 euros -pour la location et à 4 900 euros pour la résidence en logement-foyer. - -```catala -# TODO informatique et juridique: traduire cet article qui vient définir -# ressources_forfaitaires_r822_20 -``` - -NOTA : - -Conformément à l’article 2 de l’arrêté du 20 décembre 2021 (NOR : LOGL2134477A), -ces dispositions sont applicables pour les prestations dues à compter du 1 er janvier 2022. - -### Article 15 | LEGIARTI000045011468 [archive] - -Pour l'application du 5° de l'article D. 823-17 du même code, le forfait " R0 " est fixé selon -le tableau suivant (en euros) : - -Composition du foyer MONTANT (en euros) ------------------------------------------ ------------------- -Personne seule sans personne à charge 4 683 -Couple sans personne à charge 6 709 -Personne seule ou couple ayant : - -une personne à charge 8 002 - -deux personnes à charge 8 182 - -trois personnes à charge 8 495 - -quatre personnes à charge 8 811 - -cinq personnes à charge 9 124 - -six personnes à charge 9 439 - -par personne à charge supplémentaire 311 - -```catala -champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-01-01| et - date_courante <@ |2022-07-01|: - définition abattement_forfaitaire_d823_17 égal à - si nombre_personnes_à_charge = 0 alors - selon situation_familiale_calcul_apl sous forme - -- PersonneSeule: 4 683 € - -- Couple: 6709 € - sinon (si nombre_personnes_à_charge = 1 alors - 8 002 € - sinon (si nombre_personnes_à_charge = 2 alors - 8 192 € - sinon (si nombre_personnes_à_charge = 3 alors - 8 495 € - sinon (si nombre_personnes_à_charge = 4 alors - 8 811 € - sinon (si nombre_personnes_à_charge = 5 alors - 9 124 € - sinon (si nombre_personnes_à_charge = 6 alors - 9 439 € - sinon - (9 439€ +€ (311 € *€ (entier_vers_décimal de - (nombre_personnes_à_charge - 6)))) - )))))) -``` - -NOTA : -Conformément à l’article 2 de l’arrêté du 20 décembre 2021 (NOR : LOGL2134477A), -ces dispositions sont applicables pour les prestations dues à compter du 1 er janvier 2022. - - -## Articles valables du 1er janvier 2020 au 1er janvier 2022 - -### Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement +## Articles valables du 1er janvier 2020 au 31 décembre 2021 #### Article 15 | LEGIARTI000041489192 [archive] @@ -1362,8 +1413,8 @@ Personne seule ou couple ayant : ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante <@ |2022-01-01| et - date_courante >=@ |2020-01-01|: + sous condition date_courante < |2022-01-01| et + date_courante >= |2020-01-01|: définition abattement_forfaitaire_d823_17 égal à si nombre_personnes_à_charge = 0 alors selon situation_familiale_calcul_apl sous forme @@ -1382,7 +1433,7 @@ champ d'application CalculAidePersonnaliséeLogementLocatif sinon (si nombre_personnes_à_charge = 6 alors 9 246 € sinon - (9 246€ +€ (305 € *€ (entier_vers_décimal de + (9 246€ + (305 € * (décimal de (nombre_personnes_à_charge - 6)))) )))))) ``` diff --git a/examples/aides_logement/arrete_2019-09-27.catala_fr b/examples/aides_logement/arrete_2019-09-27.catala_fr index 67a44541..fe7a4a77 100644 --- a/examples/aides_logement/arrete_2019-09-27.catala_fr +++ b/examples/aides_logement/arrete_2019-09-27.catala_fr @@ -97,7 +97,7 @@ champ d'application CalculAllocationLogement: ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: # Colonne 1 étiquette base définition plafond_loyer_d823_16_2 sous condition @@ -125,13 +125,13 @@ champ d'application CalculAidePersonnaliséeLogementLocatif conséquence égal à selon zone sous forme --Zone1: - 420,52€ +€ 61,01€ *€ (entier_vers_décimal de + 420,52€ + 61,01€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone2: - 370,32€ +€ 53,90€ *€ (entier_vers_décimal de + 370,32€ + 53,90€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone3: - 342,52€ +€ 49,09€ *€ (entier_vers_décimal de + 342,52€ + 49,09€ * (décimal de (nombre_personnes_à_charge - 1)) ``` @@ -181,7 +181,7 @@ ces dispositions sont applicables pour les prestations dues à compter du 1er ju ```catala champ d'application CalculAidePersonnaliséeLogementLocatif sous condition - date_courante >=@ |2022-07-01| et + date_courante >= |2022-07-01| et logement_est_chambre: étiquette chambre exception base @@ -226,9 +226,9 @@ ces dispositions sont applicables pour les prestations dues à compter du ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: étiquette base définition montant_forfaitaire_charges_d823_16 égal à - 56,12€ +€ 12,72€ *€ (entier_vers_décimal de nombre_personnes_à_charge) + 56,12€ + 12,72€ * (décimal de nombre_personnes_à_charge) ``` ### Article 10 | LEGIARTI000039160745 @@ -252,15 +252,15 @@ III 2,5 3,1 champ d'application CalculAidePersonnaliséeLogementLocatif: définition plafond_dégressivité_d823_16 égal à selon zone sous forme - -- Zone1: plafond_loyer_d823_16_2 *€ 3,4 - -- Zone2: plafond_loyer_d823_16_2 *€ 2,5 - -- Zone3: plafond_loyer_d823_16_2 *€ 2,5 + -- Zone1: plafond_loyer_d823_16_2 * 3,4 + -- Zone2: plafond_loyer_d823_16_2 * 2,5 + -- Zone3: plafond_loyer_d823_16_2 * 2,5 définition plafond_suppression_d823_16 égal à selon zone sous forme - -- Zone1: plafond_loyer_d823_16_2 *€ 4,0 - -- Zone2: plafond_loyer_d823_16_2 *€ 3,1 - -- Zone3: plafond_loyer_d823_16_2 *€ 3,1 + -- Zone1: plafond_loyer_d823_16_2 * 4,0 + -- Zone2: plafond_loyer_d823_16_2 * 3,1 + -- Zone3: plafond_loyer_d823_16_2 * 3,1 ``` @@ -298,13 +298,13 @@ défini au 2° de l'article D. 823-16 du même code et du forfait charge ou 36,6 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: définition participation_minimale égal à si - (loyer_éligible +€ montant_forfaitaire_charges_d823_16) - *€ 8,5% >=€ 36,63 € + (loyer_éligible + montant_forfaitaire_charges_d823_16) + * 8,5% >= 36,63 € alors - (loyer_éligible +€ montant_forfaitaire_charges_d823_16) *€ 8,5% + (loyer_éligible + montant_forfaitaire_charges_d823_16) * 8,5% sinon 36,63 € ``` @@ -344,7 +344,7 @@ Majoration par personne à charge supplémentaire -0,06 % ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: définition taux_composition_familiale égal à si nombre_personnes_à_charge = 0 alors selon situation_familiale_calcul_apl sous forme @@ -363,7 +363,7 @@ champ d'application CalculAidePersonnaliséeLogementLocatif sinon (si nombre_personnes_à_charge = 6 alors 1,73% sinon - (1,73% -. (0,06% *. (entier_vers_décimal de + (1,73% - (0,06% * (décimal de (nombre_personnes_à_charge - 6)))) )))))) # TODO informatique: corriger le parseur pour éviter d'avoir à mettre @@ -377,9 +377,9 @@ RL est exprimé en pourcentage et arrondi à la deuxième décimale. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: définition rapport_loyers égal à - arrondi_décimal de ((loyer_éligible /€ loyer_référence) *. 100,0) /. 100,0 + arrondi de ((loyer_éligible / loyer_référence) * 100,0) / 100,0 ``` Pour la détermination de TL , les taux progressifs et les tranches successives de RL mentionnés @@ -400,20 +400,20 @@ $\textrm{TL}=0 \%$ $\textrm{TL}=0,45 \%\times (\textrm{RL}-45\%)$ $\textrm{TL ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: # Ici on choisit de mettre des >= pour inclure le résultat sur la crête # dans la case de droite ; nous avons bien vérifié que sur la crête le # résultat est le même à gauche et à droite. définition taux_loyer_éligible état formule égal à - si rapport_loyers <. 45% alors 0% sinon ( - si rapport_loyers >=. 45% et rapport_loyers <. 75% alors - 0,45% *. (rapport_loyers -. 0,45%) - sinon (si rapport_loyers >=. 75% alors - 0,45% *. 30% +. 0,68% *. (rapport_loyers -. 75%) + si rapport_loyers < 45% alors 0% sinon ( + si rapport_loyers >= 45% et rapport_loyers < 75% alors + 0,45% * (rapport_loyers - 0,45%) + sinon (si rapport_loyers >= 75% alors + 0,45% * 30% + 0,68% * (rapport_loyers - 75%) sinon 0,0)) - définition taux_loyer_éligible état arrondi égal à + définition taux_loyer_éligible état taux_arrondi égal à # La troisième décimale en pourcentage est en fait la cinquième décimale - (arrondi_décimal de (taux_loyer_éligible *. 100000,0)) /. 100000,0 + (arrondi de (taux_loyer_éligible * 100000,0)) / 100000,0 ``` Le loyer de référence LR est défini selon le tableau suivant (en euros) : @@ -427,14 +427,14 @@ Majoration par personne à charge 53,90 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: définition loyer_référence égal à si nombre_personnes_à_charge = 0 alors selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 259,78€ -- Couple: 317,97€ - sinon (357,80€ +€ - (52,08€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (357,80€ + + (52,08€ * (décimal de (nombre_personnes_à_charge - 1)))) ``` NOTA : @@ -443,53 +443,55 @@ Conformément à l’article 3 de l’arrêté du 16 août 2022 (TREL2220744A), dispositions sont applicables pour les prestations dues à compter du 1er juillet 2022. -### Article 15 | LEGIARTI000046126962 +### Article 15 | LEGIARTI000046834762 Pour l'application du 5° de l'article D. 823-17 du même code, le forfait " R0 " est fixé selon le tableau suivant (en euros) : Composition du foyer MONTANT (en euros) ----------------------------------------- ------------------- -Personne seule sans personne à charge 4 870 -Couple sans personne à charge 6 977 +Personne seule sans personne à charge 4 949 +Couple sans personne à charge 7 090 Personne seule ou couple ayant : - -une personne à charge 8 322 - -deux personnes à charge 8 509 - -trois personnes à charge 8 834 - -quatre personnes à charge 9 163 - -cinq personnes à charge 9 488 - -six personnes à charge 9 816 - -par personne à charge supplémentaire 323 + -une personne à charge 8 456 + -deux personnes à charge 8 646 + -trois personnes à charge 8 977 + -quatre personnes à charge 9 311 + -cinq personnes à charge 9 642 + -six personnes à charge 9 975 + -par personne à charge supplémentaire 328 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2023-01-01|: définition abattement_forfaitaire_d823_17 égal à si nombre_personnes_à_charge = 0 alors selon situation_familiale_calcul_apl sous forme - -- PersonneSeule: 4 870 € - -- Couple: 6 977 € + -- PersonneSeule: 4 949 € + -- Couple: 7 090 € sinon (si nombre_personnes_à_charge = 1 alors - 8 322 € + 8 456 € sinon (si nombre_personnes_à_charge = 2 alors - 8 509 € + 8 646 € sinon (si nombre_personnes_à_charge = 3 alors - 8 834 € + 8 977 € sinon (si nombre_personnes_à_charge = 4 alors - 9 163 € + 9 311 € sinon (si nombre_personnes_à_charge = 5 alors - 9 488 € + 9 642 € sinon (si nombre_personnes_à_charge = 6 alors - 9 816 € + 9 975 € sinon - (9 816€ +€ (323 € *€ (entier_vers_décimal de + (9 975€ + (328 € * (décimal de (nombre_personnes_à_charge - 6)))) )))))) ``` NOTA : -Conformément à l’article 3 de l’arrêté du 29 juillet 2022 (NOR : TREL2220748A), -ces dispositions sont applicables pour les prestations dues à compter du 1 er juillet 2022. + +Conformément à l’article 3 de l’arrêté du 26 décembre 2022 (NOR : TREL2226772A), +ces dispositions sont applicables pour les prestations dues à compter du +1er janvier 2023. ### Article 16 | LEGIARTI000046206205 @@ -517,7 +519,7 @@ charge supplémentaire 45,76 40,43 36,82 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-07-01| et colocation: + sous condition date_courante >= |2022-07-01| et colocation: # Ici l'exception est rapportée au cas de base puisqu'on suppose # qu'on ne peut pas être en colocation dans un logement constitué @@ -546,13 +548,13 @@ champ d'application CalculAidePersonnaliséeLogementLocatif conséquence égal à selon zone sous forme --Zone1: - 315,39€ +€ 45,76€ *€ (entier_vers_décimal de + 315,39€ + 45,76€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone2: - 277,74€ +€ 40,43€ *€ (entier_vers_décimal de + 277,74€ + 40,43€ * (décimal de (nombre_personnes_à_charge - 1)) --Zone3: - 256,89€ +€ 36,82€ *€ (entier_vers_décimal de + 256,89€ + 36,82€ * (décimal de (nombre_personnes_à_charge - 1)) ``` @@ -566,12 +568,12 @@ Majoration par personne à charge 12,72 ```catala champ d'application CalculAidePersonnaliséeLogementLocatif - sous condition date_courante >=@ |2022-07-01| et colocation: + sous condition date_courante >= |2022-07-01| et colocation: exception base définition montant_forfaitaire_charges_d823_16 égal à (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 28,05€ - -- Couple: 56,12€) +€ - 12,72€ *€ (entier_vers_décimal de nombre_personnes_à_charge) + -- Couple: 56,12€) + + 12,72€ * (décimal de nombre_personnes_à_charge) ``` NOTA : @@ -613,8 +615,8 @@ Par personne supplémentaire à charge 430 379 346 champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |1992-06-30| et - date_signature_prêt <@ |1994-11-27| et + date_signature_prêt >= |1992-06-30| et + date_signature_prêt < |1994-11-27| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_32 conséquence égal à @@ -624,23 +626,23 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 2085 € -- Couple: 2515€) - sinon (2945 € +€ - 430€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2945 € + + 430€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1860 € -- Couple: 2239€) - sinon (2618 € +€ - 379€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2618 € + + 379€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1736 € -- Couple: 2082€) - sinon (2428 € +€ - 356€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros + sinon (2428 € + + 356€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros ``` b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou acquis et améliorés (en francs) : @@ -657,8 +659,8 @@ Par personne supplémentaire à charge 347 305 279 champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |1992-06-30| et - date_signature_prêt <@ |1994-11-27| et + date_signature_prêt >= |1992-06-30| et + date_signature_prêt < |1994-11-27| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_32 conséquence égal à @@ -668,23 +670,23 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1678 € -- Couple: 2025€) - sinon (2372 € +€ - 347€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2372 € + + 347€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1496 € -- Couple: 1801€) - sinon (2106 € +€ - 305€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2106 € + + 305€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1397 € -- Couple: 1676€) - sinon (1955 € +€ - 279€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros + sinon (1955 € + + 279€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros ``` 2° Lorsque la date de signature du contrat de prêt est intervenue après le 27 novembre 1994 : @@ -702,7 +704,7 @@ Par personne supplémentaire à charge 380 335 305 champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |1994-11-27| et + date_signature_prêt >= |1994-11-27| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_32 conséquence égal à @@ -712,23 +714,23 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1840 € -- Couple: 2200€) - sinon (2600 € +€ - 380€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2600 € + + 380€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1642 € -- Couple: 1977€) - sinon (2312 € +€ - 335€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2312 € + + 335€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1532 € -- Couple: 1837€) - sinon (2142 € +€ - 305€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros + sinon (2142 € + + 305€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros ``` b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants @@ -745,7 +747,7 @@ Par personne supplémentaire à charge 306 269 246 champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |1994-11-27| et + date_signature_prêt >= |1994-11-27| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_32 conséquence égal à @@ -755,140 +757,63 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1481 € -- Couple: 1787€) - sinon (2093 € +€ - 306€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2093 € + + 306€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1320 € -- Couple: 1589€) - sinon (1858 € +€ - 269€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (1858 € + + 269€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1233 € -- Couple: 1479€) - sinon (1725 € +€ - 246€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros + sinon (1725 € + + 246€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros ``` -### Article 18 | LEGIARTI000046126970 +## Article 18 | LEGIARTI000046834759 -Pour l'application du 3° de l'article D. 832-10, les mensualités plafonds pour les logements occupés -par leur propriétaire, et financés par les prêts mentionnés au 2° de l'article R. 832-5, sont fixées -comme suit compte tenu de la date de signature du contrat de prêt figurant sur le certificat daté -prévu au 1° du I de l'article D. 832-12 : +Pour l'application du 3° de l'article D. 832-10, les mensualités plafonds pour +les logements occupés par leur propriétaire, et financés par les prêts mentionnés +au 2° de l'article R. 832-5, sont fixées comme suit compte tenu de la date de +signature du contrat de prêt figurant sur le certificat daté prévu au 1° du I +de l'article D. 832-12 : -1° Lorsque la date de signature du contrat de prêt est intervenue après le 30 juin 1992 : +1° Lorsque la date de signature du contrat de prêt est +intervenue après le 30 juin 1992 : -a) Logements neufs construits ou acquis par l'accédant à la propriété (en francs) : +Logements améliorés par leur propriétaire +occupant (en francs) : -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 2 085 1 860 1 736 -Couple sans personne à charge 2 515 2 239 2 082 -Bénéficiaire isolé ou couple ayant une personne à charge 2 945 2 618 2 428 -Par personne supplémentaire à charge 430 379 346 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: - définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt - sous condition - date_signature_prêt >=@ |1992-06-30| et - date_signature_prêt <@ |1994-11-27| et - ancienneté_logement sous forme Neuf et - type_prêt sous forme D331_63_64 - conséquence égal à - (selon zone sous forme - -- Zone1: ( - si nombre_personnes_à_charge = 0 alors - (selon situation_familiale_calcul_apl sous forme - -- PersonneSeule: 2085 € - -- Couple: 2515€) - sinon (2945 € +€ - 430€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - -- Zone2: ( - si nombre_personnes_à_charge = 0 alors - (selon situation_familiale_calcul_apl sous forme - -- PersonneSeule: 1860 € - -- Couple: 2239€) - sinon (2618 € +€ - 379€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - -- Zone3: ( - si nombre_personnes_à_charge = 0 alors - (selon situation_familiale_calcul_apl sous forme - -- PersonneSeule: 1736 € - -- Couple: 2082€) - sinon (2428 € +€ - 346€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros -``` - -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en francs) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 1 678 1 496 1 397 -Couple sans personne à charge 2 025 1 801 1 676 -Bénéficiaire isolé ou couple ayant une personne à charge 2 372 2 106 1 955 -Par personne supplémentaire à charge 347 305 279 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: - définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt - sous condition - date_signature_prêt >=@ |1992-06-30| et - date_signature_prêt <@ |1994-11-27| et - (selon ancienneté_logement sous forme - -- Ancien de amélioré_par_occupant: - amélioré_par_occupant sous forme AmélioréParOccupant.Non - -- Neuf: faux) et - type_prêt sous forme D331_63_64 - conséquence égal à - (selon zone sous forme - -- Zone1: ( - si nombre_personnes_à_charge = 0 alors - (selon situation_familiale_calcul_apl sous forme - -- PersonneSeule: 1678 € - -- Couple: 2025€) - sinon (2372 € +€ - 347€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - -- Zone2: ( - si nombre_personnes_à_charge = 0 alors - (selon situation_familiale_calcul_apl sous forme - -- PersonneSeule: 1496 € - -- Couple: 1801€) - sinon (2106 € +€ - 305€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - -- Zone3: ( - si nombre_personnes_à_charge = 0 alors - (selon situation_familiale_calcul_apl sous forme - -- PersonneSeule: 1397 € - -- Couple: 1676 €) - sinon (1955 € +€ - 279€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros -``` - -c) Logements améliorés par leur propriétaire occupant (en francs) : - -DÉSIGNATION TOUTES ZONES +DÉSIGNATION TOUTES ZONES -------------------------------------------------------- ------------ Bénéficiaire isolé 869 -Couple sans personne à charge 971 +Couple sans personne à charge 971 Bénéficiaire isolé ou couple ayant une personne à charge 1 073 -Par personne supplémentaire à charge 102 +Par personne supplémentaire à charge 102 ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + exception petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |1992-06-30| et - date_signature_prêt <@ |1994-11-27| et + date_courante >= |2023-01-01| et + date_signature_prêt >= |1992-06-30| et + date_signature_prêt <= |1994-11-27| et + # La borne supérieure de la date de signature du prêt est implicite dans + # la rédaction actuelle mais confirmée par un mail de DGALN/DHUP/FE4 le + # 19/01/2023: "sur l'article 18, la nouvelle rédaction reprend l'ancienne : + # dans l'ancienne, nous avions un 1° qui prévoyait, à partir du 30/06/1992, + # un a), un b) et un c). Le 2° prévoyait à partir du 27/11/1994 un a) et + # un b). Le c) n'était plus mentionné, ce qui est également le cas à + # présent". Les anciennes et nouvelles version font référence aux + # changements introduits par l’arrêté du 26 décembre 2022. (selon ancienneté_logement sous forme -- Ancien de amélioré_par_occupant: amélioré_par_occupant sous forme AmélioréParOccupant.Oui @@ -899,28 +824,309 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 869 € -- Couple: 971€) - sinon (1073 € +€ - 102€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - *€ taux_francs_vers_euros + sinon (1073 € + + 102€ * (décimal de (nombre_personnes_à_charge - 1)))) + * taux_francs_vers_euros ``` -2° Lorsque la date de signature du contrat de prêt est intervenue après le 27 novembre 1994 : +2° Pour, d'une part, les logements neufs construits ou acquis par l'accédant +à la propriété et, d'autre part, les logements agrandis ou aménagés à +partir de locaux non destinés à l'habitation ou les logements existants +acquis et, le cas échéant, améliorés : -a) Logements neufs construits ou acquis par l'accédant à la propriété (en francs) : +----------- ---- -------------------- ----------- --------------- -------------- ---------------------- ----------- --------------- -------------- + logements neufs logements agrandis + construits ou acquis ou aménagés à partir + par l'accédant à de locaux non destinés + la propriété à l'habitation ou + logements existants + acquis et, le cas + échéant, améliorés -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 1 981 1 768 1 650 -Couple sans personne à charge 2 390 2 128 1 979 -Bénéficiaire isolé ou couple ayant une personne à charge 2 799 2 488 2 308 -Par personne supplémentaire à charge 409 360 329 + isolé isolé ou + ou couple couple + +Date de Zone isolé couple sans avec 1 personne par personne isolé couple sans avec 1 personne par personne +signature personne à charge à charge personne à à charge à charge +du contrat à charge supplémentaire charge supplémentaire +de prêt + +entre le I 2 085 2 515 2 945 430 1 678 2 025 2 372 347 +01/07/92 et +le 27/11/94 +(en francs) + + II 1 860 2 239 2 618 379 1 496 1 801 2 106 305 + + III 1 736 2 082 2 428 346 1 397 1 676 1 955 279 + +entre le I 1 981 2 390 2 799 409 1 595 1 925 2 255 330 +28/11/94 +et le +30/06/00 +(en +francs) + + II 1 768 2 128 2 488 360 1 422 1 712 2 002 290 + + III 1 650 1 979 2 308 329 1 328 1 593 1 858 265 + +entre le I 2 001 2 414 2 827 413 1 611 1 944 2 277 333 +01/07/00 +et le +30/06/01 +(en francs) + + II 1 786 2 150 2 514 364 1 436 1 729 2 022 293 + + III 1 667 1 999 2 331 332 1341 1 609 1 877 268 + +entre le I 2 025 2 443 2 861 418 1 630 1 967 2 304 337 +01/07/01 +et le +31/12/01 +(en francs) + + II 1 807 2 175 2 543 368 1 453 1 750 2 047 297 + + III 1 687 2 023 2 359 336 1 357 1 628 1 899 271 + +entre le I 308,71 372,43 436,15 63,72 248,49 299,87 351,25 51,38 +01/01/02 +et le +30/06/02 +(en euros) + + II 275,48 331,58 387,68 56,10 221,51 266,79 312,07 45,28 + + III 257,18 308,40 359,62 51,22 206,87 248,18 289,49 41,31 + +entre le I 312,41 376,89 441,37 64,48 251,47 303,47 355,47 52,00 +01/07/02 +et le +30/06/03 +(en euros) + + II 278,79 335,56 392,33 56,77 224,17 269,99 315,81 45,82 + III 260,27 312,10 363,93 51,83 209,35 251,16 292,97 41,81 + +entre le I 316,16 381,41 446,66 65,25 254,49 307,11 359,73 52,62 +01/07/03 +et le +31/08/05 +(en euros) + + II 282,14 339,59 397,04 57,45 226,86 273,23 319,60 46,37 + + III 263,39 315,84 368,29 52,45 211,86 254,17 296,48 42,31 + +entre le I 321,85 388,27 454,69 66,42 259,07 312,64 366,21 53,57 +01/09/05 +et le +31/12/06 +(en euros) + + II 287,22 345,70 404,18 58,48 230,94 278,14 325,34 47,20 + + III 268,13 321,52 374,91 53,39 215,67 258,74 301,81 43,07 + +entre le I 330,86 399,14 467,42 68,28 266,32 321,39 376,46 55,07 +01/01/07 +et le +31/12/07 +(en euros) + + II 295,26 355,38 415,50 60,12 237,41 285,93 334,45 48,52 + + III 275,64 330,52 385,41 54,88 221,71 265,98 310,26 44,28 + +entre le I 339,99 410,16 480,32 70,16 273,67 330,26 386,85 56,59 +01/01/08 +et le +31/12/08 +(en euros) + + II 303,41 365,19 426,97 61,78 243,96 293,82 343,68 49,86 + + III 283,25 339,64 396,05 56,39 227,83 273,32 318,82 45,50 + +entre le I 350,02 422,26 494,49 72,23 281,74 340,00 398,26 58,26 +01/01/09 +et le +31/12/09 +(en euros) + + II 312,36 375,96 439,57 63,60 251,16 302,49 353,82 51,33 + + III 291,61 349,66 407,73 58,05 234,55 281,38 328,23 46,84 + +entre le I 351,14 423,61 496,07 72,46 282,64 341,09 399,53 58,45 +01/01/10 +et le +31/12/10 +(en euros) + + II 313,36 377,16 440,98 63,80 251,96 303,46 354,95 51,49 + + III 292,54 350,78 409,03 58,24 235,30 282,28 329,28 46,99 + +entre le I 355,00 428,27 501,53 73,26 285,75 344,84 403,92 59,09 +01/01/11 +et le +31/12/11 +(en euros) + + II 316,81 381,31 445,83 64,50 254,73 306,80 358,85 52,06 + + III 295,76 354,64 413,53 58,88 237,89 285,39 332,90 47,51 + +entre le I 358,55 432,55 506,55 73,99 288,61 348,29 407,96 59,68 +01/01/12 +et le +31/12/12 +(en euros) + + II 319,98 385,12 450,29 65,15 257,28 309,87 362,44 52,58 + + III 298,72 358,19 417,67 59,47 240,27 288,24 336,23 47,99 + +entre le I 366,26 441,85 517,44 75,58 294,82 355,78 416,73 60,96 +01/01/13 +et le +30/09/14 +(en euros) + + II 326,86 393,40 459,97 66,55 262,81 316,53 370,23 53,71 + + III 305,14 365,89 426,65 60,75 245,44 294,44 343,46 49,02 + +entre le I 368,35 444,37 520,39 76,01 296,50 357,81 419,11 61,31 +01/10/14 +et le +30/09/15 +(en euros) + + II 328,72 395,64 462,59 66,93 264,31 318,33 372,34 54,02 + + III 306,88 367,98 429,08 61,10 246,84 296,12 345,42 49,30 + +entre le I 368,64 444,73 520,81 76,07 296,74 358,10 419,45 61,36 +01/10/15 +et le +30/09/17 +(en euros) + + II 328,98 395,96 462,96 66,98 264,52 318,58 372,64 54,06 + + III 307,13 368,27 429,42 61,15 247,04 296,36 345,7 4 9,34 + +entre le I 371,40 448,07 524,72 76,64 298,97 360,79 422,60 61,82 +01/10/17 +et le +30/09/19 +(en euros) + + II 331,45 398,93 466,43 67,48 266,50 320,97 375,43 54,47 + + III 309,43 371,03 432,64 61,61 248,89 298,58 348,29 49,71 + +à partir I 372,52 449,41 526,29 76,87 299,86 361,87 423,86 62,01 +du +01/10/19 +(en euros) + + II 332,44 400,13 467,83 67,68 267,30 321,93 376,56 54,63 + + III 310,36 372,15 433,94 61,79 249,64 299,48 349,34 49,86 +----------- ---- -------------------- ----------- --------------- -------------- ---------------------- ----------- --------------- -------------- + +NOTA : + +Conformément à l’article 3 de l’arrêté du 26 décembre 2022 (NOR : TREL2226772A), +ces dispositions sont applicables pour les prestations dues à compter du 1er janvier 2023. + +```catala +# Cette version du décret ainsi que la précédente introduite par l'arrêté du 29 +# juillet 2022 ne changent pas les valeurs utilisées pour le calcul du plafond +# de mensualité en vigueur depuis le 1er octobre 2020. Les tableaux de cet +# article ont d'abord subit une correction d'erreurs factuelles, puis une +# réorganisation sans changement des valeurs de calcul. +``` ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |1994-11-27| et - date_signature_prêt <@ |2000-06-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |1992-06-30| et + date_signature_prêt < |1994-11-27| et + ancienneté_logement sous forme Neuf et + type_prêt sous forme D331_63_64 + conséquence égal à + (selon zone sous forme + -- Zone1: ( + si nombre_personnes_à_charge = 0 alors + (selon situation_familiale_calcul_apl sous forme + -- PersonneSeule: 2085 € + -- Couple: 2515€) + sinon (2945 € + + 430€ * (décimal de (nombre_personnes_à_charge - 1)))) + -- Zone2: ( + si nombre_personnes_à_charge = 0 alors + (selon situation_familiale_calcul_apl sous forme + -- PersonneSeule: 1860 € + -- Couple: 2239€) + sinon (2618 € + + 379€ * (décimal de (nombre_personnes_à_charge - 1)))) + -- Zone3: ( + si nombre_personnes_à_charge = 0 alors + (selon situation_familiale_calcul_apl sous forme + -- PersonneSeule: 1736 € + -- Couple: 2082€) + sinon (2428 € + + 346€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros + + étiquette petit_2 + définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt + sous condition + date_courante >= |2020-10-01| et + date_signature_prêt >= |1992-06-30| et + date_signature_prêt < |1994-11-27| et + ancienneté_logement sous forme Ancien et + type_prêt sous forme D331_63_64 + conséquence égal à + (selon zone sous forme + -- Zone1: ( + si nombre_personnes_à_charge = 0 alors + (selon situation_familiale_calcul_apl sous forme + -- PersonneSeule: 1678 € + -- Couple: 2025€) + sinon (2372 € + + 347€ * (décimal de (nombre_personnes_à_charge - 1)))) + -- Zone2: ( + si nombre_personnes_à_charge = 0 alors + (selon situation_familiale_calcul_apl sous forme + -- PersonneSeule: 1496 € + -- Couple: 1801€) + sinon (2106 € + + 305€ * (décimal de (nombre_personnes_à_charge - 1)))) + -- Zone3: ( + si nombre_personnes_à_charge = 0 alors + (selon situation_familiale_calcul_apl sous forme + -- PersonneSeule: 1397 € + -- Couple: 1676 €) + sinon (1955 € + + 279€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros + + étiquette petit_2 + définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt + sous condition + date_courante >= |2020-10-01| et + date_signature_prêt >= |1994-11-27| et + date_signature_prêt < |2000-06-30| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -930,41 +1136,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1981 € -- Couple: 2390€) - sinon (2799 € +€ - 409€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2799 € + + 409€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1768 € -- Couple: 2128€) - sinon (2488 € +€ - 360€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2488 € + + 360€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1650 € -- Couple: 1979€) - sinon (2308 € +€ - 329€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros -``` + sinon (2308 € + + 329€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en francs) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 1 595 1 422 1 328 -Couple sans personne à charge 1 925 1 712 1 593 -Bénéficiaire isolé ou couple ayant une personne à charge 2 255 2 002 1 858 -Par personne supplémentaire à charge 330 290 265 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |1994-11-27| et - date_signature_prêt <@ |2000-06-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |1994-11-27| et + date_signature_prêt < |2000-06-30| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -974,42 +1169,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1595 € -- Couple: 1925€) - sinon (2255 € +€ - 330€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2255 € + + 330€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1422 € -- Couple: 1712€) - sinon (2002 € +€ - 290€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2002 € + + 290€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1328 € -- Couple: 1593€) - sinon (1858 € +€ - 265€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros -``` + sinon (1858 € + + 265€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros -3° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 30 juin 2000 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en francs) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 2 001 1 786 1 667 -Couple sans personne à charge 1 414 2 150 1 999 -Bénéficiaire isolé ou couple ayant une personne à charge 1 827 2 514 2 331 -Par personne supplémentaire à charge 413 364 332 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2000-06-30| et - date_signature_prêt <=@ |2001-06-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2000-06-30| et + date_signature_prêt <= |2001-06-30| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1019,41 +1202,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 2001 € -- Couple: 1414€) - sinon (1827 € +€ - 413€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (1827 € + + 413€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1786 € -- Couple: 2150€) - sinon (2514 € +€ - 364€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2514 € + + 364€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1667 € -- Couple: 1999€) - sinon (2331 € +€ - 332€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros -``` + sinon (2331 € + + 332€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en francs) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 1 611 1 436 1 341 -Couple sans personne à charge 1 944 1 729 1 609 -Bénéficiaire isolé ou couple ayant une personne à charge 2 277 2 022 1 877 -Par personne supplémentaire à charge 333 293 268 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2000-06-30| et - date_signature_prêt <=@ |2001-06-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2000-06-30| et + date_signature_prêt <= |2001-06-30| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1063,44 +1235,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1611 € -- Couple: 1944€) - sinon (2277 € +€ - 333€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2277 € + + 333€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1436 € -- Couple: 1729€) - sinon (2022 € +€ - 293€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2022 € + + 293€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1341 € -- Couple: 1609€) - sinon (1877 € +€ - 268€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros -``` + sinon (1877 € + + 268€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros -4° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 30 juin 2001 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété : - -Valeurs en francs du 1er juillet 2001 au 31 décembre 2001 - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 2 025 1 807 1 687 -Couple sans personne à charge 2 443 2 175 2 023 -Bénéficiaire isolé ou couple ayant une personne à charge 2 861 2 543 2 359 -Par personne supplémentaire à charge 418 368 336 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2001-07-01| et - date_signature_prêt <@ |2001-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2001-07-01| et + date_signature_prêt < |2001-12-31| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1110,40 +1268,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 2025 € -- Couple: 2443€) - sinon (2861 € +€ - 418€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2861 € + + 418€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1807 € -- Couple: 2175€) - sinon (2543 € +€ - 368€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2543 € + + 368€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1687 € -- Couple: 2023€) - sinon (2359 € +€ - 336€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros -``` + sinon (2359 € + + 336€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros -Valeurs en euros à compter du 1er janvier 2002 - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 308,71 275,48 257,18 -Couple sans personne à charge 372,43 331,58 308,4 -Bénéficiaire isolé ou couple ayant une personne à charge 436,15 387,68 359,62 -Par personne supplémentaire à charge 63,72 56,1 51,22 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2002-01-01| et - date_signature_prêt <@ |2002-06-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2002-01-01| et + date_signature_prêt < |2002-06-30| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1153,43 +1301,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 308,71€ -- Couple: 372,43€) - sinon (436,15€ +€ - 63,72€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (436,15€ + + 63,72€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 275,48€ -- Couple: 331,48€) - sinon (387,68€ +€ - 56,1€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (387,68€ + + 56,1€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 257,18€ -- Couple: 308,4€) - sinon (359,62€ +€ - 51,22€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (359,62€ + + 51,22€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés : - -Valeurs en francs du 1er juillet 2001 au 31 décembre 2001 - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 1 630 1 453 1 357 -Couple sans personne à charge 1 967 1 750 1 628 -Bénéficiaire isolé ou couple ayant une personne à charge 2 304 2 047 1 899 -Par personne supplémentaire à charge 337 297 271 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2001-07-01| et - date_signature_prêt <@ |2001-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2001-07-01| et + date_signature_prêt < |2001-12-31| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1199,40 +1334,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1630€ -- Couple: 1967€) - sinon (2304€ +€ - 337€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2304€ + + 337€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1453€ -- Couple: 1750€) - sinon (2047€ +€ - 297€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (2047€ + + 297€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 1357€ -- Couple: 1628€) - sinon (1899€ +€ - 271€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) - ) *€ taux_francs_vers_euros -``` + sinon (1899€ + + 271€ * (décimal de (nombre_personnes_à_charge - 1)))) + ) * taux_francs_vers_euros -Valeurs en euros à compter du 1er janvier 2002 - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 248,49 221,51 206,87 -Couple sans personne à charge 299,87 266,79 248,18 -Bénéficiaire isolé ou couple ayant une personne à charge 351,25 312,07 289,49 -Par personne supplémentaire à charge 51,38 45,28 41,31 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2002-01-01| et - date_signature_prêt <@ |2002-06-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2002-01-01| et + date_signature_prêt < |2002-06-30| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1242,42 +1367,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 248,49€ -- Couple: 299,87€) - sinon (351,25€ +€ - 51,38€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (351,25€ + + 51,38€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 221,51€ -- Couple: 266,79€) - sinon (312,07€ +€ - 45,28€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (312,07€ + + 45,28€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 206,87€ -- Couple: 248,18€) - sinon (289,49€ +€ - 41,31€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (289,49€ + + 41,31€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -5° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 30 juin 2002 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 312,41 278,79 260,27 -Couple sans personne à charge 376,89 335,56 312,1 -Bénéficiaire isolé ou couple ayant une personne à charge 441,37 392,33 363,93 -Par personne supplémentaire à charge 64,48 56,77 51,83 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2002-06-30| et - date_signature_prêt <@ |2003-06-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2002-06-30| et + date_signature_prêt < |2003-06-30| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1287,41 +1400,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 312,41€ -- Couple: 376,89€) - sinon (441,37€ +€ - 64,48€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (441,37€ + + 64,48€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 278,79€ -- Couple: 335,56€) - sinon (392,33€ +€ - 56,77€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (392,33€ + + 56,77€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 260,27€ -- Couple: 312,1€) - sinon (363,93€ +€ - 51,83€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (363,93€ + + 51,83€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 251,47 224,17 209,35 -Couple sans personne à charge 303,47 269,99 251,16 -Bénéficiaire isolé ou couple ayant une personne à charge 355,47 315,81 292,97 -Par personne supplémentaire à charge 52 45,82 41,81 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2002-06-30| et - date_signature_prêt <@ |2003-06-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2002-06-30| et + date_signature_prêt < |2003-06-30| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1331,42 +1433,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 251,47€ -- Couple: 303,47€) - sinon (355,47€ +€ - 52€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (355,47€ + + 52€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 224,17€ -- Couple: 269,99€) - sinon (315,81€ +€ - 45,82€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (315,81€ + + 45,82€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 209,35€ -- Couple: 251,16€) - sinon (292,97€ +€ - 41,81€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (292,97€ + + 41,81€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -6° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 30 juin 2003 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 316,16 282,14 263,39 -Couple sans personne à charge 381,41 339,59 315,84 -Bénéficiaire isolé ou couple ayant une personne à charge 446,66 397,04 368,29 -Par personne supplémentaire à charge 65,25 57,45 52,45 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2003-06-30| et - date_signature_prêt <@ |2005-08-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2003-06-30| et + date_signature_prêt < |2005-08-31| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1376,41 +1466,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 316,16€ -- Couple: 381,41€) - sinon (446,66€ +€ - 65,25€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (446,66€ + + 65,25€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 282,14€ -- Couple: 339,59€) - sinon (397,04€ +€ - 57,45€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (397,04€ + + 57,45€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 263,39€ -- Couple: 315,84€) - sinon (368,29€ +€ - 52,45€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (368,29€ + + 52,45€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 254,49 226,86 211,86 -Couple sans personne à charge 307,11 273,23 254,17 -Bénéficiaire isolé ou couple ayant une personne à charge 359,73 319,6 296,48 -Par personne supplémentaire à charge 52,62 46,37 42,31 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2003-06-30| et - date_signature_prêt <@ |2005-08-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2003-06-30| et + date_signature_prêt < |2005-08-31| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1420,42 +1499,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 254,49€ -- Couple: 307,11€) - sinon (359,73€ +€ - 52,62€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (359,73€ + + 52,62€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 226,86€ -- Couple: 273,23€) - sinon (319,6€ +€ - 46,37€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (319,6€ + + 46,37€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 211,86€ -- Couple: 254,17€) - sinon (296,48€ +€ - 42,31€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (296,48€ + + 42,31€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -7° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 31 août 2005 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 321,85 287,22 268,13 -Couple sans personne à charge 388,27 345,7 321,52 -Bénéficiaire isolé ou couple ayant une personne à charge 454,69 404,18 374,91 -Par personne supplémentaire à charge 66,42 58,48 53,39 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2005-08-31| et - date_signature_prêt <@ |2006-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2005-08-31| et + date_signature_prêt < |2006-12-31| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1465,41 +1532,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 321,85€ -- Couple: 388,27€) - sinon (454,69€ +€ - 66,42€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (454,69€ + + 66,42€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 287,22€ -- Couple: 345,7€) - sinon (404,18€ +€ - 58,48€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (404,18€ + + 58,48€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 268,13€ -- Couple: 321,52€) - sinon (374,91€ +€ - 53,39€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (374,91€ + + 53,39€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 259,07 230,94 215,67 -Couple sans personne à charge 312,64 278,14 258,74 -Bénéficiaire isolé ou couple ayant une personne à charge 366,21 325,34 301,81 -Par personne supplémentaire à charge 53,57 47,2 43,07 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2005-08-31| et - date_signature_prêt <@ |2006-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2005-08-31| et + date_signature_prêt < |2006-12-31| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1509,42 +1565,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 259,07€ -- Couple: 312,64€) - sinon (366,21€ +€ - 53,57€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (366,21€ + + 53,57€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 230,94€ -- Couple: 278,14€) - sinon (325,34€ +€ - 47,2€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (325,34€ + + 47,2€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 215,67€ -- Couple: 258,74€) - sinon (301,81€ +€ - 43,07€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (301,81€ + + 43,07€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -8° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 31 décembre 2006 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 330,86 295,26 275,64 -Couple sans personne à charge 399,14 355,38 330,52 -Bénéficiaire isolé ou couple ayant une personne à charge 467,42 415,5 385,41 -Par personne supplémentaire à charge 68,28 60,12 54,88 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2006-12-31| et - date_signature_prêt <@ |2007-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2006-12-31| et + date_signature_prêt < |2007-12-31| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1554,41 +1598,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 330,86€ -- Couple: 399,14€) - sinon (467,42€ +€ - 68,28€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (467,42€ + + 68,28€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 295,26€ -- Couple: 355,38€) - sinon (415,5€ +€ - 60,12€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (415,5€ + + 60,12€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 275,64€ -- Couple: 330,52€) - sinon (385,41€ +€ - 54,88€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (385,41€ + + 54,88€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 266,32 237,41 221,71 -Couple sans personne à charge 321,39 285,93 365,98 -Bénéficiaire isolé ou couple ayant une personne à charge 376,46 334,45 310,26 -Par personne supplémentaire à charge 55,07 48,52 44,28 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2006-12-31| et - date_signature_prêt <@ |2007-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2006-12-31| et + date_signature_prêt < |2007-12-31| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1598,42 +1631,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 266,32€ -- Couple: 321,39€) - sinon (376,46€ +€ - 55,07€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (376,46€ + + 55,07€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 237,41€ -- Couple: 285,93€) - sinon (334,45€ +€ - 48,52€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (334,45€ + + 48,52€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 221,71€ -- Couple: 365,98€) - sinon (310,26€ +€ - 44,28€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (310,26€ + + 44,28€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -9° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 31 décembre 2007 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 339,99 303,41 283,25 -Couple sans personne à charge 410,16 365,19 339,64 -Bénéficiaire isolé ou couple ayant une personne à charge 480,32 426,97 396,05 -Par personne supplémentaire à charge 70,16 61,78 56,39 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2007-12-31| et - date_signature_prêt <@ |2008-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2007-12-31| et + date_signature_prêt < |2008-12-31| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1643,41 +1664,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 339,99€ -- Couple: 410,16€) - sinon (480,32€ +€ - 70,16€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (480,32€ + + 70,16€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 303,41€ -- Couple: 365,19€) - sinon (426,97€ +€ - 61,78€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (426,97€ + + 61,78€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 283,25€ -- Couple: 339,64€) - sinon (396,05€ +€ - 56,39€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (396,05€ + + 56,39€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 273,67 243,96 227,83 -Couple sans personne à charge 330,26 293,82 273,32 -Bénéficiaire isolé ou couple ayant une personne à charge 386,85 343,68 318,82 -Par personne supplémentaire à charge 56,59 49,86 45,5 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2007-12-31| et - date_signature_prêt <@ |2008-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2007-12-31| et + date_signature_prêt < |2008-12-31| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1687,42 +1697,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 273,67€ -- Couple: 330,26€) - sinon (386,85€ +€ - 56,59€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (386,85€ + + 56,59€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 243,96€ -- Couple: 293,82€) - sinon (343,68€ +€ - 49,86€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (343,68€ + + 49,86€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 227,83€ -- Couple: 273,32€) - sinon (318,82€ +€ - 45,5€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (318,82€ + + 45,5€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -10° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 31 décembre 2008 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 350,02 312,36 291,61 -Couple sans personne à charge 422,26 375,96 349,66 -Bénéficiaire isolé ou couple ayant une personne à charge 494,49 439,57 407,73 -Par personne supplémentaire à charge 72,23 63,6 58,05 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2008-12-31| et - date_signature_prêt <@ |2009-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2008-12-31| et + date_signature_prêt < |2009-12-31| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1732,41 +1730,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 350,02€ -- Couple: 422,26€) - sinon (494,49€ +€ - 72,23€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (494,49€ + + 72,23€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 312,36€ -- Couple: 375,96€) - sinon (439,57€ +€ - 63,6€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (439,57€ + + 63,6€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 291,61€ -- Couple: 349,66€) - sinon (407,73€ +€ - 58,05€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (407,73€ + + 58,05€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 281,74 251,16 234,55 -Couple sans personne à charge 340 302,49 281,38 -Bénéficiaire isolé ou couple ayant une personne à charge 398,26 353,82 328,23 -Par personne supplémentaire à charge 58,26 51,33 46,84 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2008-12-31| et - date_signature_prêt <@ |2009-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2008-12-31| et + date_signature_prêt < |2009-12-31| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1776,42 +1763,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 281,74€ -- Couple: 340€) - sinon (398,26€ +€ - 58,26€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (398,26€ + + 58,26€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 251,16€ -- Couple: 302,49€) - sinon (353,82€ +€ - 51,33€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (353,82€ + + 51,33€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 234,55€ -- Couple: 281,38€) - sinon (328,23€ +€ - 46,84€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (328,23€ + + 46,84€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -11° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 31 décembre 2009 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 351,14 313,36 292,54 -Couple sans personne à charge 423,61 377,16 350,78 -Bénéficiaire isolé ou couple ayant une personne à charge 496,07 440,98 409,03 -Par personne supplémentaire à charge 72,46 63,8 58,24 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2009-12-31| et - date_signature_prêt <@ |2010-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2009-12-31| et + date_signature_prêt < |2010-12-31| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1821,41 +1796,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 351,14€ -- Couple: 423,61€) - sinon (496,07€ +€ - 72,46€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (496,07€ + + 72,46€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 313,36€ -- Couple: 377,16€) - sinon (440,98€ +€ - 63,8€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (440,98€ + + 63,8€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 292,54€ -- Couple: 350,78€) - sinon (409,03€ +€ - 58,24€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (409,03€ + + 58,24€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 282,64 251,96 235,3 -Couple sans personne à charge 341,09 303,46 282,28 -Bénéficiaire isolé ou couple ayant une personne à charge 399,53 354,95 329,28 -Par personne supplémentaire à charge 58,45 51,49 46,99 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2009-12-31| et - date_signature_prêt <@ |2010-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2009-12-31| et + date_signature_prêt < |2010-12-31| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1865,42 +1829,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 282,64€ -- Couple: 341,09€) - sinon (399,53€ +€ - 58,45€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (399,53€ + + 58,45€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 251,96€ -- Couple: 303,46€) - sinon (354,95€ +€ - 51,49€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (354,95€ + + 51,49€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 235,3€ -- Couple: 282,28€) - sinon (329,28€ +€ - 46,99€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (329,28€ + + 46,99€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -12° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 31 décembre 2010 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 355 316,81 295,76 -Couple sans personne à charge 428,27 381,31 354,64 -Bénéficiaire isolé ou couple ayant une personne à charge 501,53 445,83 413,53 -Par personne supplémentaire à charge 73,26 64,5 58,88 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2010-12-31| et - date_signature_prêt <@ |2011-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2010-12-31| et + date_signature_prêt < |2011-12-31| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1910,41 +1862,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 355€ -- Couple: 428,27€) - sinon (501,53€ +€ - 73,26€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (501,53€ + + 73,26€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 316,81€ -- Couple: 381,31€) - sinon (445,83€ +€ - 64,5€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (445,83€ + + 64,5€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 295,76€ -- Couple: 354,64€) - sinon (413,53€ +€ - 58,88€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (413,53€ + + 58,88€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 285,75 254,73 237,89 -Couple sans personne à charge 344,84 306,8 285,39 -Bénéficiaire isolé ou couple ayant une personne à charge 403,92 358,85 332,9 -Par personne supplémentaire à charge 59,09 52,06 47,51 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2010-12-31| et - date_signature_prêt <@ |2011-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2010-12-31| et + date_signature_prêt < |2011-12-31| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -1954,42 +1895,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 285,75€ -- Couple: 344,84€) - sinon (403,92€ +€ - 59,09€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (403,92€ + + 59,09€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 254,73€ -- Couple: 306,8€) - sinon (358,85€ +€ - 52,06€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (358,85€ + + 52,06€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 237,89€ -- Couple: 285,39€) - sinon (332,9€ +€ - 47,51€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (332,9€ + + 47,51€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -13° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 31 décembre 2011 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 358,55 319,98 298,72 -Couple sans personne à charge 432,55 385,12 358,19 -Bénéficiaire isolé ou couple ayant une personne à charge 506,55 450,29 417,67 -Par personne supplémentaire à charge 73,99 65,15 59,47 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2011-12-31| et - date_signature_prêt <@ |2012-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2011-12-31| et + date_signature_prêt < |2012-12-31| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -1999,42 +1928,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 358,55€ -- Couple: 432,55€) - sinon (506,55€ +€ - 73,99€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (506,55€ + + 73,99€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 319,98€ -- Couple: 385,12€) - sinon (450,29€ +€ - 65,15€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (450,29€ + + 65,15€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 298,72€ -- Couple: 358,19€) - sinon (417,67€ +€ - 59,47€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (417,67€ + + 59,47€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` - -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 288,61 257,28 240,27 -Couple sans personne à charge 348,29 309,87 288,24 -Bénéficiaire isolé ou couple ayant une personne à charge 407,96 362,44 336,23 -Par personne supplémentaire à charge 59,68 52,58 47,99 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2011-12-31| et - date_signature_prêt <@ |2012-12-31| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2011-12-31| et + date_signature_prêt < |2012-12-31| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -2044,42 +1961,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 288,61€ -- Couple: 348,29€) - sinon (407,96€ +€ - 59,68€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (407,96€ + + 59,68€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 257,28€ -- Couple: 309,87€) - sinon (362,44€ +€ - 52,58€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (362,44€ + + 52,58€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 240,27€ -- Couple: 288,24€) - sinon (336,23€ +€ - 47,99€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (336,23€ + + 47,99€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -14° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 31 décembre 2012 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 366,26 326,86 305,14 -Couple sans personne à charge 441,85 393,4 365,89 -Bénéficiaire isolé ou couple ayant une personne à charge 517,44 459,97 426,65 -Par personne supplémentaire à charge 75,58 66,55 60,75 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2012-12-31| et - date_signature_prêt <@ |2014-09-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2012-12-31| et + date_signature_prêt < |2014-09-30| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -2089,41 +1994,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 366,26€ -- Couple: 441,85€) - sinon (517,44€ +€ - 75,58€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (517,44€ + + 75,58€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 326,86€ -- Couple: 393,4€) - sinon (459,97€ +€ - 66,55€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (459,97€ + + 66,55€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 305,14€ -- Couple: 365,89€) - sinon (426,65€ +€ - 60,75€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (426,65€ + + 60,75€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 294,82 262,81 245,44 -Couple sans personne à charge 355,78 316,53 294,44 -Bénéficiaire isolé ou couple ayant une personne à charge 416,73 370,23 343,46 -Par personne supplémentaire à charge 60,96 53,71 49,02 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2012-12-31| et - date_signature_prêt <@ |2014-09-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2012-12-31| et + date_signature_prêt < |2014-09-30| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -2133,42 +2027,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 294,82€ -- Couple: 355,78€) - sinon (416,73€ +€ - 60,96€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (416,73€ + + 60,96€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 262,81€ -- Couple: 316,53€) - sinon (370,23€ +€ - 53,71€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (370,23€ + + 53,71€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 245,44€ -- Couple: 294,44€) - sinon (343,46€ +€ - 49,02€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (343,46€ + + 49,02€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -15° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 30 septembre 2014 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 368,35 328,72 306,88 -Couple sans personne à charge 444,37 395,64 367,98 -Bénéficiaire isolé ou couple ayant une personne à charge 520,39 462,59 429,08 -Par personne supplémentaire à charge 76,01 66,93 61,1 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2014-09-30| et - date_signature_prêt <@ |2015-09-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2014-09-30| et + date_signature_prêt < |2015-09-30| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -2178,41 +2060,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 368,35€ -- Couple: 444,37€) - sinon (520,39€ +€ - 76,01€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (520,39€ + + 76,01€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 328,72€ -- Couple: 395,64€) - sinon (462,59€ +€ - 66,93€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (462,59€ + + 66,93€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 306,88€ -- Couple: 367,98€) - sinon (429,08€ +€ - 61,1€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (429,08€ + + 61,1€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 296,5 264,31 246,84 -Couple sans personne à charge 357,81 318,33 296,12 -Bénéficiaire isolé ou couple ayant une personne à charge 419,11 372,34 345,42 -Par personne supplémentaire à charge 61,31 54,02 49,3 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2014-09-30| et - date_signature_prêt <@ |2015-09-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2014-09-30| et + date_signature_prêt < |2015-09-30| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -2222,42 +2093,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 296,5€ -- Couple: 357,81€) - sinon (419,11€ +€ - 61,31€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (419,11€ + + 61,31€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 264,31€ -- Couple: 318,33€) - sinon (372,34€ +€ - 54,02€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (372,34€ + + 54,02€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 246,84€ -- Couple: 296,12€) - sinon (345,42€ +€ - 49,3€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (345,42€ + + 49,3€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -16° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 30 septembre 2015 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 368,64 328,98 307,13 -Couple sans personne à charge 444,73 395,96 368,27 -Bénéficiaire isolé ou couple ayant une personne à charge 520,81 462,96 429,42 -Par personne supplémentaire à charge 76,07 66,98 61,15 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2015-09-30| et - date_signature_prêt <@ |2017-09-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2015-09-30| et + date_signature_prêt < |2017-09-30| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -2267,41 +2126,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 368,64€ -- Couple: 444,73€) - sinon (520,81€ +€ - 76,07€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (520,81€ + + 76,07€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 328,98€ -- Couple: 395,96€) - sinon (462,96€ +€ - 66,98€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (462,96€ + + 66,98€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 307,13€ -- Couple: 368,27€) - sinon (429,42€ +€ - 61,15€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (429,42€ + + 61,15€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -DÉSIGNATION ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 296,74 264,52 247,04 -Couple sans personne à charge 358,1 318,58 296,36 -Bénéficiaire isolé ou couple ayant une personne à charge 419,45 372,64 345,7 -Par personne supplémentaire à charge 61,36 54,06 49,34 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2015-09-30| et - date_signature_prêt <@ |2017-09-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2015-09-30| et + date_signature_prêt < |2017-09-30| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -2311,42 +2159,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 296,74€ -- Couple: 358,1€) - sinon (419,45€ +€ - 61,36€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (419,45€ + + 61,36€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 264,52€ -- Couple: 318,58€) - sinon (372,64€ +€ - 54,06€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (372,64€ + + 54,06€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 247,04€ -- Couple: 296,36€) - sinon (345,7€ +€ - 49,34€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (345,7€ + + 49,34€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -17° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 30 septembre 2017 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -Désignation ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 371,4 331,45 309,43 -Couple sans personne à charge 448,07 398,93 371,03 -Bénéficiaire isolé ou couple ayant une personne à charge 524,72 466,43 432,64 -Par personne supplémentaire à charge 76,64 67,48 61,61 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2017-09-30| et - date_signature_prêt <@ |2019-09-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2017-09-30| et + date_signature_prêt < |2019-09-30| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -2356,41 +2192,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 371,4€ -- Couple: 448,07€) - sinon (524,72€ +€ - 76,64€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (524,72€ + + 76,64€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 331,45€ -- Couple: 398,93€) - sinon (466,43€ +€ - 67,48€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (466,43€ + + 67,48€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 309,43€ -- Couple: 371,03€) - sinon (432,64€ +€ - 61,61€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (432,64€ + + 61,61€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -Désignation ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 298,97 266,5 248,89 -Couple sans personne à charge 360,79 320,97 298,58 -Bénéficiaire isolé ou couple ayant une personne à charge 422,6 375,43 348,29 -Par personne supplémentaire à charge 61,82 54,47 49,71 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2017-09-30| et - date_signature_prêt <@ |2019-09-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2017-09-30| et + date_signature_prêt < |2019-09-30| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -2400,41 +2225,29 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 298,97€ -- Couple: 360,79€) - sinon (422,6€ +€ - 61,82€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (422,6€ + + 61,82€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 266,5€ -- Couple: 320,97€) - sinon (375,43€ +€ - 54,47€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (375,43€ + + 54,47€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 248,89€ -- Couple: 298,58€) - sinon (348,29€ +€ - 49,71€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (348,29€ + + 49,71€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -18° Lorsque la date de signature du contrat de prêt est intervenue postérieurement au 30 septembre 2019 : - -a) Logements neufs construits ou acquis par l'accédant à la propriété (en euros) : - -Désignation ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 372,52 332,44 310,36 -Couple sans personne à charge 449,41 400,13 372,15 -Bénéficiaire isolé ou couple ayant une personne à charge 526,29 467,83 433,94 -Par personne supplémentaire à charge 76,87 67,68 61,79 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2019-09-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2019-09-30| et ancienneté_logement sous forme Neuf et type_prêt sous forme D331_63_64 conséquence égal à @@ -2444,40 +2257,29 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 372,52€ -- Couple: 449,41€) - sinon (526,29€ +€ - 76,87€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (526,29€ + + 76,87€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 332,44€ -- Couple: 400,13€) - sinon (467,83€ +€ - 67,68€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (467,83€ + + 67,68€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 310,36€ -- Couple: 372,15€) - sinon (433,94€ +€ - 61,79€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (433,94€ + + 61,79€ * (décimal de (nombre_personnes_à_charge - 1)))) ) -``` -b) Logements agrandis ou aménagés à partir de locaux non destinés à l'habitation ou logements existants -acquis et, le cas échéant, améliorés (en euros) : - -Désignation ZONE I ZONE II ZONE III --------------------------------------------------------- ------ ------- -------- -Bénéficiaire isolé 299,86 267,30 249,64 -Couple sans personne à charge 361,87 321,93 299,48 -Bénéficiaire isolé ou couple ayant une personne à charge 423,86 376,56 349,34 -Par personne supplémentaire à charge 62,01 54,63 49,86 - -```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: + étiquette petit_2 définition calcul_plafond_mensualité_d832_10_3 de date_signature_prêt sous condition - date_signature_prêt >=@ |2019-09-30| et + date_courante >= |2020-10-01| et + date_signature_prêt >= |2019-09-30| et ancienneté_logement sous forme Ancien et type_prêt sous forme D331_63_64 conséquence égal à @@ -2487,43 +2289,25 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 299,86€ -- Couple: 361,87€) - sinon (423,86€ +€ - 62,01€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (423,86€ + + 62,01€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 267,30€ -- Couple: 321,93€) - sinon (376,56€ +€ - 54,63€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (376,56€ + + 54,63€ * (décimal de (nombre_personnes_à_charge - 1)))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 249,64€ -- Couple: 299,48€) - sinon (349,34€ +€ - 49,86€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 1)))) + sinon (349,34€ + + 49,86€ * (décimal de (nombre_personnes_à_charge - 1)))) ) ``` -NOTA : - -Conformément à l’article 3 de l’arrêté du 29 juillet 2022 (NOR : TREL2220748A), -ces dispositions sont applicables pour les prestations dues à compter du 1 er -juillet 2022. - -```catala -# Cette NOTA fait référence à l'article 3 de l'arrêté du 29 juillet 2022 qui -# contient précisément des corrections pointées par les auteurs de ce code -# source (valeurs aberrantes dans les tableaux). Selon cette NOTA, il faudrait -# donc garder également l'ancienne version erronnée de ce tableau et basculer -# entre la version erronnée et la version corrigée selon que l'on soit avant -# ou après le premier juillet 2022. -# Ici, nous décidons de ne pas faire cela et de ne -# garder que la version corrigée pour simplicité et parceque DGALN/DHUP/FE4 -# nous a confirmé que la CAF a toujours utilisé une version "corrigée" de -# cet article. -``` ### Article 19 | LEGIARTI000046206220 @@ -2544,10 +2328,10 @@ juillet 2022. ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: étiquette base définition montant_forfaitaire_charges_d832_10 égal à - 56,12 € +€ 12,72 € *€ (entier_vers_décimal de nombre_personnes_à_charge) + 56,12 € + 12,72 € * (décimal de nombre_personnes_à_charge) ``` ### Article 20 | LEGIARTI000039160765 @@ -2605,10 +2389,10 @@ Dans le cas des copropriétaires prévus à l'article D. 832-16 du même code : ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: définition plafond_mensualité_d832_10_3 état copropriétaires égal à si copropriété alors - plafond_mensualité_d832_10_3 *€ 75% + plafond_mensualité_d832_10_3 * 75% sinon plafond_mensualité_d832_10_3 ``` @@ -2623,14 +2407,14 @@ Majoration par personne à charge 12,72 ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: exception base définition montant_forfaitaire_charges_d832_10 sous condition copropriété conséquence égal à (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 28,05€ - -- Couple: 56,12€) +€ - 12,72 € *€ (entier_vers_décimal de nombre_personnes_à_charge) + -- Couple: 56,12€) + + 12,72 € * (décimal de nombre_personnes_à_charge) ``` NOTA : @@ -2655,12 +2439,12 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition coefficient_multiplicateur_d832_17_3 égal à selon ancienneté_logement sous forme -- Neuf: - (si date_signature_prêt <=@ |1998-10-01| alors 0,0226 sinon 0,0234) + (si date_signature_prêt <= |1998-10-01| alors 0,0226 sinon 0,0234) -- Ancien de amélioré_par_occupant: (selon amélioré_par_occupant sous forme -- AmélioréParOccupant.Oui: 0,0172 -- AmélioréParOccupant.Non: - (si date_signature_prêt <=@ |1998-10-01| alors 0,0226 sinon 0,0234)) + (si date_signature_prêt <= |1998-10-01| alors 0,0226 sinon 0,0234)) ``` ### Article 26 | LEGIARTI000039160777 @@ -2698,7 +2482,7 @@ dispositions sont applicables pour les prestations dues à compter du ```catala champ d'application CalculAidePersonnaliséeLogementFoyer sous condition - date_courante >=@ |2022-07-01|: + date_courante >= |2022-07-01|: définition plafond_équivalence_loyer_éligible égal à (selon zone sous forme -- Zone1: ( @@ -2713,8 +2497,8 @@ champ d'application CalculAidePersonnaliséeLogementFoyer sous condition sinon (si nombre_personnes_à_charge = 3 alors 658,62 € sinon - (710,39 € +€ - 73,68€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 4))))))) + (710,39 € + + 73,68€ * (décimal de (nombre_personnes_à_charge - 4))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -2727,8 +2511,8 @@ champ d'application CalculAidePersonnaliséeLogementFoyer sous condition sinon (si nombre_personnes_à_charge = 3 alors 599,57 € sinon - (638,87 € +€ - 66,59€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 4))))))) + (638,87 € + + 66,59€ * (décimal de (nombre_personnes_à_charge - 4))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -2741,8 +2525,8 @@ champ d'application CalculAidePersonnaliséeLogementFoyer sous condition sinon (si nombre_personnes_à_charge = 3 alors 560,04 € sinon - (596,75 € +€ - 61,80€ *€ (entier_vers_décimal de (nombre_personnes_à_charge - 4))))))) + (596,75 € + + 61,80€ * (décimal de (nombre_personnes_à_charge - 4))))))) ) ``` @@ -3122,11 +2906,11 @@ Certificats datés I 314,76 379,33 407,87 419,27 431,06 ```catala champ d'application CalculAllocationLogementAccessionPropriété sous condition - date_courante >=@ |2020-01-01|: + date_courante >= |2020-01-01|: définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |1992-07-01| et date_calcul <@ |1994-07-01| + date_calcul >= |1992-07-01| et date_calcul < |1994-07-01| conséquence égal à (selon zone sous forme -- Zone1: ( @@ -3140,8 +2924,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2171 € sinon (si nombre_personnes_à_charge = 4 alors 2229 € sinon (si nombre_personnes_à_charge = 5 alors 2280 € sinon - (2280€ +€ 198€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2280€ + 198€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3153,8 +2937,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 1977 € sinon (si nombre_personnes_à_charge = 4 alors 2042 € sinon (si nombre_personnes_à_charge = 5 alors 2187 € sinon - (2187€ +€ 191€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2187€ + 191€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3166,13 +2950,13 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 1870 € sinon (si nombre_personnes_à_charge = 4 alors 1942 € sinon (si nombre_personnes_à_charge = 5 alors 2086 € sinon - (2086€ +€ 182€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) - ) *€ taux_francs_vers_euros + (2086€ + 182€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) + ) * taux_francs_vers_euros définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |1994-07-01| et date_calcul <@ |1997-07-01| + date_calcul >= |1994-07-01| et date_calcul < |1997-07-01| conséquence égal à (selon zone sous forme -- Zone1: ( @@ -3186,8 +2970,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2196 € sinon (si nombre_personnes_à_charge = 4 alors 2255 € sinon (si nombre_personnes_à_charge = 5 alors 2305 € sinon - (2305€ +€ 200€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2305€ + 200€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3199,8 +2983,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 1999 € sinon (si nombre_personnes_à_charge = 4 alors 2065 € sinon (si nombre_personnes_à_charge = 5 alors 2211 € sinon - (2211 € +€ 193€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2211 € + 193€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3212,13 +2996,13 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 1891 € sinon (si nombre_personnes_à_charge = 4 alors 1964 € sinon (si nombre_personnes_à_charge = 5 alors 2109 € sinon - (2109€ +€ 184€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) - ) *€ taux_francs_vers_euros + (2109€ + 184€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) + ) * taux_francs_vers_euros définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |1997-07-01| et date_calcul <@ |1998-07-01| + date_calcul >= |1997-07-01| et date_calcul < |1998-07-01| conséquence égal à (selon zone sous forme -- Zone1: ( @@ -3232,8 +3016,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2236 € sinon (si nombre_personnes_à_charge = 4 alors 2296 € sinon (si nombre_personnes_à_charge = 5 alors 2346 € sinon - (2346€ +€ 204€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2346€ + 204€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3245,8 +3029,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2035 € sinon (si nombre_personnes_à_charge = 4 alors 2102 € sinon (si nombre_personnes_à_charge = 5 alors 2251 € sinon - (2251 € +€ 196€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2251 € + 196€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3258,13 +3042,13 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 1925 € sinon (si nombre_personnes_à_charge = 4 alors 1999 € sinon (si nombre_personnes_à_charge = 5 alors 2147 € sinon - (2147€ +€ 187€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) - ) *€ taux_francs_vers_euros + (2147€ + 187€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) + ) * taux_francs_vers_euros définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |1998-07-01| et date_calcul <@ |1999-07-01| + date_calcul >= |1998-07-01| et date_calcul < |1999-07-01| conséquence égal à (selon zone sous forme -- Zone1: ( @@ -3278,8 +3062,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2290 € sinon (si nombre_personnes_à_charge = 4 alors 2351 € sinon (si nombre_personnes_à_charge = 5 alors 2402 € sinon - (2402€ +€ 209€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2402€ + 209€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3291,8 +3075,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2084 € sinon (si nombre_personnes_à_charge = 4 alors 2152 € sinon (si nombre_personnes_à_charge = 5 alors 2305 € sinon - (2305 € +€ 201€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2305 € + 201€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3304,13 +3088,13 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 1971 € sinon (si nombre_personnes_à_charge = 4 alors 2047 € sinon (si nombre_personnes_à_charge = 5 alors 2199 € sinon - (2199€ +€ 191€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) - ) *€ taux_francs_vers_euros + (2199€ + 191€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) + ) * taux_francs_vers_euros définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |1999-07-01| et date_calcul <@ |2000-07-01| + date_calcul >= |1999-07-01| et date_calcul < |2000-07-01| conséquence égal à (selon zone sous forme -- Zone1: ( @@ -3324,8 +3108,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2292 € sinon (si nombre_personnes_à_charge = 4 alors 2353 € sinon (si nombre_personnes_à_charge = 5 alors 2404 € sinon - (2404€ +€ 209€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2404€ + 209€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3337,8 +3121,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2086 € sinon (si nombre_personnes_à_charge = 4 alors 2154 € sinon (si nombre_personnes_à_charge = 5 alors 2307 € sinon - (2307 € +€ 201€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2307 € + 201€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3350,13 +3134,13 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 1973 € sinon (si nombre_personnes_à_charge = 4 alors 2049 € sinon (si nombre_personnes_à_charge = 5 alors 2201 € sinon - (2201€ +€ 191€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) - ) *€ taux_francs_vers_euros + (2201€ + 191€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) + ) * taux_francs_vers_euros définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2000-07-01| et date_calcul <@ |2001-07-01| + date_calcul >= |2000-07-01| et date_calcul < |2001-07-01| conséquence égal à (selon zone sous forme -- Zone1: ( @@ -3370,8 +3154,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2315 € sinon (si nombre_personnes_à_charge = 4 alors 2377 € sinon (si nombre_personnes_à_charge = 5 alors 2428 € sinon - (2428€ +€ 211€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2428€ + 211€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3383,8 +3167,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2107 € sinon (si nombre_personnes_à_charge = 4 alors 2176 € sinon (si nombre_personnes_à_charge = 5 alors 2330 € sinon - (2330 € +€ 203€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2330 € + 203€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3396,13 +3180,13 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 1993 € sinon (si nombre_personnes_à_charge = 4 alors 2069 € sinon (si nombre_personnes_à_charge = 5 alors 2223 € sinon - (2223€ +€ 193€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) - ) *€ taux_francs_vers_euros + (2223€ + 193€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) + ) * taux_francs_vers_euros définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2001-07-01| et date_calcul <@ |2002-01-01| + date_calcul >= |2001-07-01| et date_calcul < |2002-01-01| conséquence égal à (selon zone sous forme -- Zone1: ( @@ -3416,8 +3200,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2343 € sinon (si nombre_personnes_à_charge = 4 alors 2406 € sinon (si nombre_personnes_à_charge = 5 alors 2457 € sinon - (2457€ +€ 214€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2457€ + 214€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3429,8 +3213,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2132 € sinon (si nombre_personnes_à_charge = 4 alors 2202 € sinon (si nombre_personnes_à_charge = 5 alors 2358 € sinon - (2358 € +€ 205€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (2358 € + 205€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3442,13 +3226,13 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 2017 € sinon (si nombre_personnes_à_charge = 4 alors 2094 € sinon (si nombre_personnes_à_charge = 5 alors 2250 € sinon - (2250€ +€ 195€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) - ) *€ taux_francs_vers_euros + (2250€ + 195€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) + ) * taux_francs_vers_euros définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2002-01-01| et date_calcul <@ |2002-07-01| + date_calcul >= |2002-01-01| et date_calcul < |2002-07-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3462,8 +3246,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 357,19 € sinon (si nombre_personnes_à_charge = 4 alors 366,79 € sinon (si nombre_personnes_à_charge = 5 alors 374,57 € sinon - (374,57€ +€ 32,62€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (374,57€ + 32,62€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3475,8 +3259,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 325,02 € sinon (si nombre_personnes_à_charge = 4 alors 335,69 € sinon (si nombre_personnes_à_charge = 5 alors 359,47 € sinon - (359,47 € +€ 31,25€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (359,47 € + 31,25€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3488,12 +3272,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 307,49 € sinon (si nombre_personnes_à_charge = 4 alors 319,23 € sinon (si nombre_personnes_à_charge = 5 alors 343,01 € sinon - (343,01€ +€ 29,73€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (343,01€ + 29,73€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2002-07-01| et date_calcul <@ |2003-07-01| + date_calcul >= |2002-07-01| et date_calcul < |2003-07-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3507,8 +3291,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 361,48 € sinon (si nombre_personnes_à_charge = 4 alors 371,19 € sinon (si nombre_personnes_à_charge = 5 alors 379,06 € sinon - (379,06€ +€ 33,01€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (379,06€ + 33,01€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3520,8 +3304,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 328,92 € sinon (si nombre_personnes_à_charge = 4 alors 339,72 € sinon (si nombre_personnes_à_charge = 5 alors 363,78 € sinon - (363,78 € +€ 31,63€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (363,78 € + 31,63€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3533,12 +3317,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 311,18 € sinon (si nombre_personnes_à_charge = 4 alors 323,06 € sinon (si nombre_personnes_à_charge = 5 alors 347,13 € sinon - (347,13€ +€ 30,09€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (347,13€ + 30,09€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2003-07-01| et date_calcul <@ |2005-09-01| + date_calcul >= |2003-07-01| et date_calcul < |2005-09-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3552,8 +3336,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 365,82 € sinon (si nombre_personnes_à_charge = 4 alors 375,64 € sinon (si nombre_personnes_à_charge = 5 alors 383,61 € sinon - (383,61€ +€ 33,41€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (383,61€ + 33,41€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3565,8 +3349,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 332,87 € sinon (si nombre_personnes_à_charge = 4 alors 343,80 € sinon (si nombre_personnes_à_charge = 5 alors 368,15 € sinon - (368,15 € +€ 32,01€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (368,15 € + 32,01€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3578,12 +3362,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 314,91 € sinon (si nombre_personnes_à_charge = 4 alors 326,94 € sinon (si nombre_personnes_à_charge = 5 alors 351,30 € sinon - (351,30€ +€ 30,45€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (351,30€ + 30,45€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2005-09-01| et date_calcul <@ |2007-01-01| + date_calcul >= |2005-09-01| et date_calcul < |2007-01-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3597,8 +3381,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 372,40 € sinon (si nombre_personnes_à_charge = 4 alors 382,40 € sinon (si nombre_personnes_à_charge = 5 alors 390,51 € sinon - (390,51€ +€ 34,01€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (390,51€ + 34,01€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3610,8 +3394,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 338,86 € sinon (si nombre_personnes_à_charge = 4 alors 349,99 € sinon (si nombre_personnes_à_charge = 5 alors 374,78 € sinon - (374,78 € +€ 32,59€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (374,78 € + 32,59€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3623,12 +3407,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 320,58 € sinon (si nombre_personnes_à_charge = 4 alors 332,82 € sinon (si nombre_personnes_à_charge = 5 alors 357,62 € sinon - (357,62€ +€ 31,00€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (357,62€ + 31,00€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2007-01-01| et date_calcul <@ |2008-01-01| + date_calcul >= |2007-01-01| et date_calcul < |2008-01-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3642,8 +3426,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 382,83 € sinon (si nombre_personnes_à_charge = 4 alors 393,11 € sinon (si nombre_personnes_à_charge = 5 alors 401,44 € sinon - (401,44€ +€ 34,96€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (401,44€ + 34,96€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3655,8 +3439,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 348,65 € sinon (si nombre_personnes_à_charge = 4 alors 359,79 € sinon (si nombre_personnes_à_charge = 5 alors 385,27 € sinon - (385,27 € +€ 33,50€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (385,27 € + 33,50€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3668,12 +3452,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 329,56 € sinon (si nombre_personnes_à_charge = 4 alors 342,14 € sinon (si nombre_personnes_à_charge = 5 alors 367,33 € sinon - (367,33€ +€ 31,87€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (367,33€ + 31,87€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2008-01-01| et date_calcul <@ |2009-01-01| + date_calcul >= |2008-01-01| et date_calcul < |2009-01-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3687,8 +3471,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 393,40 € sinon (si nombre_personnes_à_charge = 4 alors 403,96 € sinon (si nombre_personnes_à_charge = 5 alors 412,52 € sinon - (412,52€ +€ 35,92€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (412,52€ + 35,92€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3700,8 +3484,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 357,96 € sinon (si nombre_personnes_à_charge = 4 alors 369,72 € sinon (si nombre_personnes_à_charge = 5 alors 395,90 € sinon - (395,90 € +€ 34,42€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (395,90 € + 34,42€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3713,12 +3497,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 338,66 € sinon (si nombre_personnes_à_charge = 4 alors 351,58 € sinon (si nombre_personnes_à_charge = 5 alors 377,78 € sinon - (377,78€ +€ 32,75€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (377,78€ + 32,75€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2009-01-01| et date_calcul <@ |2010-01-01| + date_calcul >= |2009-01-01| et date_calcul < |2010-01-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3732,8 +3516,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 405,01 € sinon (si nombre_personnes_à_charge = 4 alors 415,88 € sinon (si nombre_personnes_à_charge = 5 alors 424,69 € sinon - (424,69€ +€ 36,98€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (424,69€ + 36,98€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3745,8 +3529,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 368,52 € sinon (si nombre_personnes_à_charge = 4 alors 380,63 € sinon (si nombre_personnes_à_charge = 5 alors 407,58 € sinon - (407,58 € +€ 35,44€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (407,58 € + 35,44€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3758,12 +3542,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 348,65 € sinon (si nombre_personnes_à_charge = 4 alors 361,95 € sinon (si nombre_personnes_à_charge = 5 alors 388,92 € sinon - (388,92€ +€ 33,72€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (388,92€ + 33,72€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2010-01-01| et date_calcul <@ |2011-01-01| + date_calcul >= |2010-01-01| et date_calcul < |2011-01-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3777,8 +3561,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 406,01 € sinon (si nombre_personnes_à_charge = 4 alors 417,21 € sinon (si nombre_personnes_à_charge = 5 alors 426,05 € sinon - (426,05€ +€ 37,10€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (426,05€ + 37,10€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3790,8 +3574,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 369,70 € sinon (si nombre_personnes_à_charge = 4 alors 381,85 € sinon (si nombre_personnes_à_charge = 5 alors 408,88 € sinon - (408,88 € +€ 35,55€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (408,88 € + 35,55€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3803,12 +3587,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 349,77 € sinon (si nombre_personnes_à_charge = 4 alors 363,11 € sinon (si nombre_personnes_à_charge = 5 alors 390,16 € sinon - (390,16€ +€ 33,83€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (390,16€ + 33,83€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2011-01-01| et date_calcul <@ |2012-01-01| + date_calcul >= |2011-01-01| et date_calcul < |2012-01-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3822,8 +3606,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 410,78 € sinon (si nombre_personnes_à_charge = 4 alors 421,80 € sinon (si nombre_personnes_à_charge = 5 alors 430,74 € sinon - (430,74€ +€ 37,51€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (430,74€ + 37,51€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3835,8 +3619,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 373,73 € sinon (si nombre_personnes_à_charge = 4 alors 386,05 € sinon (si nombre_personnes_à_charge = 5 alors 413,38 € sinon - (413,38 € +€ 35,94€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (413,38 € + 35,94€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3848,12 +3632,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 353,62 € sinon (si nombre_personnes_à_charge = 4 alors 367,10 € sinon (si nombre_personnes_à_charge = 5 alors 394,45 € sinon - (394,45€ +€ 34,20€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (394,45€ + 34,20€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2012-01-01| et date_calcul <@ |2013-01-01| + date_calcul >= |2012-01-01| et date_calcul < |2013-01-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3867,8 +3651,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 414,89 € sinon (si nombre_personnes_à_charge = 4 alors 426,02 € sinon (si nombre_personnes_à_charge = 5 alors 435,05 € sinon - (435,05€ +€ 37,89€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (435,05€ + 37,89€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3880,8 +3664,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 377,51 € sinon (si nombre_personnes_à_charge = 4 alors 389,91 € sinon (si nombre_personnes_à_charge = 5 alors 417,51 € sinon - (417,51 € +€ 36,30€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (417,51 € + 36,30€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3893,12 +3677,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 357,16 € sinon (si nombre_personnes_à_charge = 4 alors 370,77 € sinon (si nombre_personnes_à_charge = 5 alors 398,39 € sinon - (398,39€ +€ 34,54€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (398,39€ + 34,54€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2013-01-01| et date_calcul <@ |2014-10-01| + date_calcul >= |2013-01-01| et date_calcul < |2014-10-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3912,8 +3696,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 423,81 € sinon (si nombre_personnes_à_charge = 4 alors 435,18 € sinon (si nombre_personnes_à_charge = 5 alors 444,40 € sinon - (444,40€ +€ 38,70€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (444,40€ + 38,70€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3925,8 +3709,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 385,63 € sinon (si nombre_personnes_à_charge = 4 alors 398,29 € sinon (si nombre_personnes_à_charge = 5 alors 426,49 € sinon - (426,59 € +€ 37,08€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (426,59 € + 37,08€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3938,12 +3722,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 364,84 € sinon (si nombre_personnes_à_charge = 4 alors 378,74 € sinon (si nombre_personnes_à_charge = 5 alors 406,96 € sinon - (406,96€ +€ 35,28€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (406,96€ + 35,28€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2014-10-01| et date_calcul <@ |2015-10-01| + date_calcul >= |2014-10-01| et date_calcul < |2015-10-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -3957,8 +3741,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 426,23 € sinon (si nombre_personnes_à_charge = 4 alors 437,66 € sinon (si nombre_personnes_à_charge = 5 alors 446,93 € sinon - (446,93€ +€ 38,92€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (446,93€ + 38,92€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3970,8 +3754,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 387,83 € sinon (si nombre_personnes_à_charge = 4 alors 400,56 € sinon (si nombre_personnes_à_charge = 5 alors 428,92 € sinon - (428,92 € +€ 37,29€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (428,92 € + 37,29€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -3983,12 +3767,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 366,92 € sinon (si nombre_personnes_à_charge = 4 alors 380,90 € sinon (si nombre_personnes_à_charge = 5 alors 409,28 € sinon - (409,28€ +€ 35,48€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (409,28€ + 35,48€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2015-10-01| et date_calcul <@ |2017-10-01| + date_calcul >= |2015-10-01| et date_calcul < |2017-10-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -4002,8 +3786,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 426,57 € sinon (si nombre_personnes_à_charge = 4 alors 438,01 € sinon (si nombre_personnes_à_charge = 5 alors 447,29 € sinon - (447,29€ +€ 38,95€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (447,29€ + 38,95€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -4015,8 +3799,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 388,14 € sinon (si nombre_personnes_à_charge = 4 alors 400,88 € sinon (si nombre_personnes_à_charge = 5 alors 429,26 € sinon - (429,26 € +€ 37,32€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (429,26 € + 37,32€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -4028,12 +3812,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 367,21 € sinon (si nombre_personnes_à_charge = 4 alors 381,20 € sinon (si nombre_personnes_à_charge = 5 alors 409,61 € sinon - (409,61€ +€ 35,51€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (409,61€ + 35,51€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2017-10-01| et date_calcul <@ |2019-10-01| + date_calcul >= |2017-10-01| et date_calcul < |2019-10-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -4047,8 +3831,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 429,77 € sinon (si nombre_personnes_à_charge = 4 alors 441,30 € sinon (si nombre_personnes_à_charge = 5 alors 450,64 € sinon - (450,64€ +€ 39,24€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (450,64€ + 39,24€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -4060,8 +3844,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 391,05 € sinon (si nombre_personnes_à_charge = 4 alors 403,89 € sinon (si nombre_personnes_à_charge = 5 alors 432,48 € sinon - (432,48 € +€ 37,60€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (432,48 € + 37,60€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -4073,12 +3857,12 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 369,96 € sinon (si nombre_personnes_à_charge = 4 alors 384,06 € sinon (si nombre_personnes_à_charge = 5 alors 412,68 € sinon - (412,68€ +€ 35,78€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (412,68€ + 35,78€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) définition calcul_plafond_mensualité_d842_6 de date_calcul état base sous condition - date_calcul >=@ |2019-10-01| + date_calcul >= |2019-10-01| conséquence égal à selon zone sous forme -- Zone1: ( @@ -4092,8 +3876,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 431,06 € sinon (si nombre_personnes_à_charge = 4 alors 442,62 € sinon (si nombre_personnes_à_charge = 5 alors 452,00 € sinon - (452,00€ +€ 39,36€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (452,00€ + 39,36€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone2: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -4105,8 +3889,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 392,22 € sinon (si nombre_personnes_à_charge = 4 alors 405,10 € sinon (si nombre_personnes_à_charge = 5 alors 433,78 € sinon - (433,78 € +€ 37,71€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (433,78 € + 37,71€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) -- Zone3: ( si nombre_personnes_à_charge = 0 alors (selon situation_familiale_calcul_apl sous forme @@ -4118,8 +3902,8 @@ champ d'application CalculAllocationLogementAccessionPropriété sous condition (si nombre_personnes_à_charge = 3 alors 371,07 € sinon (si nombre_personnes_à_charge = 4 alors 385,21 € sinon (si nombre_personnes_à_charge = 5 alors 413,92 € sinon - (413,92€ +€ 35,88€ *€ - (entier_vers_décimal de (nombre_personnes_à_charge - 5))))))))) + (413,92€ + 35,88€ * + (décimal de (nombre_personnes_à_charge - 5))))))))) # Une exception est à venir avec l'article 37 définition calcul_plafond_mensualité_d842_6 de date_calcul @@ -4163,11 +3947,11 @@ juillet 2022. ```catala champ d'application CalculAllocationLogementAccessionPropriété - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: étiquette récent définition montant_forfaitaire_charges égal à si nombre_personnes_à_charge = 0 alors 56,12 € - sinon 56,12 € +€ (12,72 € *€ ( - entier_vers_décimal de nombre_personnes_à_charge)) + sinon 56,12 € + (12,72 € * ( + décimal de nombre_personnes_à_charge)) ``` ### Article 35 | LEGIARTI000039160693 @@ -4197,11 +3981,11 @@ Dans le cas des copropriétaires prévus à l'article D. 842-10 du même code : ```catala champ d'application CalculAllocationLogementAccessionPropriété - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: exception définition calcul_plafond_mensualité_d842_6 de date_calcul état avec_copropriété égal à si copropriété alors - calcul_plafond_mensualité_d842_6 de date_calcul *€ 75% + calcul_plafond_mensualité_d842_6 de date_calcul * 75% sinon calcul_plafond_mensualité_d842_6 de date_calcul ``` @@ -4216,14 +4000,14 @@ Majoration par personne à charge 12,72 ```catala champ d'application CalculAllocationLogementAccessionPropriété - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: exception récent définition montant_forfaitaire_charges sous condition copropriété conséquence égal à (selon situation_familiale_calcul_apl sous forme -- PersonneSeule: 28,05 € - -- Couple : 56,12€) +€ (12,72 € *€ ( - entier_vers_décimal de nombre_personnes_à_charge)) + -- Couple : 56,12€) + (12,72 € * ( + décimal de nombre_personnes_à_charge)) ``` NOTA : @@ -4288,11 +4072,11 @@ juillet 2022. ```catala champ d'application CalculAllocationLogementFoyer - sous condition date_courante >=@ |2022-07-01| : + sous condition date_courante >= |2022-07-01| : définition montant_forfaitaire_charges égal à si nombre_personnes_à_charge = 0 alors 56,12 € - sinon 56,12 € +€ (12,72 € *€ ( - entier_vers_décimal de nombre_personnes_à_charge)) + sinon 56,12 € + (12,72 € * ( + décimal de nombre_personnes_à_charge)) ``` ### Article 41 | LEGIARTI000039160703 @@ -4329,7 +4113,7 @@ b) 135,59 euros euros lorsqu'il s'agit d'un couple ; ```catala champ d'application CalculAllocationLogementFoyer - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: définition équivalence_loyer sous condition catégorie_équivalence_loyer_d842_16 sous forme ÉtudiantLogéEnChambreCROUS conséquence égal à @@ -4346,7 +4130,7 @@ b) 273,65 euros lorsqu'il s'agit d'un couple ; ```catala champ d'application CalculAllocationLogementFoyer - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: définition équivalence_loyer sous condition catégorie_équivalence_loyer_d842_16 sous forme ÉtudiantLogéEnChambreCROUSRéhabilitée @@ -4364,7 +4148,7 @@ b) 331,96 euros lorsqu'il s'agit d'un couple ; ```catala champ d'application CalculAllocationLogementFoyer - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: définition équivalence_loyer sous condition catégorie_équivalence_loyer_d842_16 sous forme PersonnesÂgéesSelon3DeD842_16 @@ -4382,7 +4166,7 @@ b) 273,65 euros lorsqu'il s'agit d'un couple. ```catala champ d'application CalculAllocationLogementFoyer - sous condition date_courante >=@ |2022-07-01|: + sous condition date_courante >= |2022-07-01|: définition équivalence_loyer sous condition catégorie_équivalence_loyer_d842_16 sous forme AutresPersonnes @@ -4420,13 +4204,13 @@ majoré de 20 % par enfant supplémentaire à charge. ```catala champ d'application ÉligibilitéPrimeDeDéménagement: définition plafond_d823_22 égal à - base_mensuelle_allocations_familiales.montant *€ 240% +€ + base_mensuelle_allocations_familiales.montant * 240% + (si - (nombre pour personne_à_charge dans ménage.personnes_à_charge de - personne_à_charge sous forme EnfantÀCharge) > 3 + nombre de (personne_à_charge parmi ménage.personnes_à_charge + tel que personne_à_charge sous forme EnfantÀCharge) > 3 alors - base_mensuelle_allocations_familiales.montant *€ (entier_vers_décimal de ( - (nombre pour personne_à_charge dans ménage.personnes_à_charge de - personne_à_charge sous forme EnfantÀCharge) - 3) *. 20%) + base_mensuelle_allocations_familiales.montant * (décimal de ( + nombre de (personne_à_charge parmi ménage.personnes_à_charge + tel que personne_à_charge sous forme EnfantÀCharge) - 3) * 20%) sinon 0€) ``` diff --git a/examples/aides_logement/autres_sources.catala_fr b/examples/aides_logement/autres_sources.catala_fr index 8d8bcd92..3e5e2a04 100644 --- a/examples/aides_logement/autres_sources.catala_fr +++ b/examples/aides_logement/autres_sources.catala_fr @@ -28,9 +28,39 @@ le bureau BRS de la 6° sous-direction de la direction du budget le 31/08/2022. Pour éviter de refaire les calculs de revalorisation en Catala, nous prendrons comme référence les valeurs de la CNAV rappelées dans des circulaires internes. -## Circulaire de la CNAV 2022-3 du 11/01/2022 "Revalorisation à compter du 1er janvier 2022" +## Circulaire de la CNAV 2023-3 du 09/01/2022 "Revalorisation à compter du 1er janvier 2023" -Circulaire de la CNAV 2022-3 du 11/01/2022 "Revalorisation à compter du 1er janvier 2022" +[Lien vers le texte](https://www.legislation.cnav.fr/Documents/circulaire_cnav_2023_03_09012023.pdf) + +Le montant de l’Aspa s’élève, à compter du 1er janvier 2023, à : + +Bénéficiaire Montant annuel Montant mensuel +-------------- -------------- --------------- +Personne seule 11 533,02 € 961,08 € +Couple marié 17 905,06 € 1 492,08 € + +```catala +# Pas important pour nous +``` + +Pour prétendre à cette allocation non contributive, les plafonds de ressources sont fixés à: + +Bénéficiaire Montant annuel Montant mensuel +-------------- -------------- ----------------- +Personne seule 11 533,02 € 961,08 € +Couple marié 17 905,06 € 1 492,08 € + +```catala +# Uniquement la valeur du plafond individuel est important pour l'éligibilité +# aux APL +champ d'application ÉligibilitéAidesPersonnelleLogement: + définition plafond_individuel_l815_9_sécu sous condition + date_courante >= |2023-01-01| et + date_courante < |2024-01-01| + conséquence égal à 11 533,02 € +``` + +## Circulaire de la CNAV 2022-3 du 11/01/2022 "Revalorisation à compter du 1er janvier 2022" [Lien vers le texte](https://www.legislation.cnav.fr/Documents/circulaire_cnav_2022_03_11012022.pdf) @@ -57,8 +87,8 @@ Couple marié 17 079,77 € 1 423,31 € # aux APL champ d'application ÉligibilitéAidesPersonnelleLogement: définition plafond_individuel_l815_9_sécu sous condition - date_courante >=@ |2022-01-01| et - date_courante <@ |2023-01-01| + date_courante >= |2022-01-01| et + date_courante < |2023-01-01| conséquence égal à 11 001,44€ ``` @@ -90,8 +120,8 @@ Couple marié 16 893,94 € 1 407,82 € # aux APL champ d'application ÉligibilitéAidesPersonnelleLogement: définition plafond_individuel_l815_9_sécu sous condition - date_courante >=@ |2021-01-01| et - date_courante <@ |2022-01-01| + date_courante >= |2021-01-01| et + date_courante < |2022-01-01| conséquence égal à 10 881,75€ ``` @@ -120,9 +150,9 @@ code de la construction et de l'habitation ; ```catala champ d'application ContributionsSocialesAidesPersonnelleLogement: définition montant de aide_finale sous condition - date_courante >=@ |2018-09-01| + date_courante >= |2018-09-01| conséquence égal à - aide_finale *€ taux_crds + aide_finale * taux_crds assertion exonéré_csg # Voir L136-1-3 code de la sécurité sociale ``` @@ -158,7 +188,7 @@ Le taux des contributions instituées par les articles 14 à 17 est fixé à 0,5 ```catala champ d'application ContributionsSocialesAidesPersonnelleLogement: - définition taux_crds sous condition date_courante >=@ |2020-01-01| + définition taux_crds sous condition date_courante >= |2020-01-01| conséquence égal à 0,5% ``` @@ -256,7 +286,7 @@ champ d'application CalculetteAidesAuLogementGardeAlternée: # Faut-il prendre calculette.traitement_aide_finale ou # calculette_sans_garde_alternée.traitement_aide_finale ? calculette.traitement_aide_finale de ( - calculette_sans_garde_alternée.aide_finale_formule +€ ( + calculette_sans_garde_alternée.aide_finale_formule + ( si nombre de coefficents_enfants_garde_alternée_pris_en_compte = 0 alors 0 € sinon @@ -264,13 +294,12 @@ champ d'application CalculetteAidesAuLogementGardeAlternée: # en garde alternée à hauteur des coefficients prenant en compte la # période cumulée pendant laquelle le ménage accueille l'enfant # à domicile. - (calculette.aide_finale_formule -€ - calculette_sans_garde_alternée.aide_finale_formule) *€ - ((somme décimal pour coeff dans - coefficents_enfants_garde_alternée_pris_en_compte de coeff) /. - (entier_vers_décimal de - (nombre de - coefficents_enfants_garde_alternée_pris_en_compte))))) + (calculette.aide_finale_formule - + calculette_sans_garde_alternée.aide_finale_formule) * + ((somme décimal de + coefficents_enfants_garde_alternée_pris_en_compte) / + (décimal de + nombre de coefficents_enfants_garde_alternée_pris_en_compte)))) ``` 5. Considérant qu'il résulte de ce qui précède que le ministre du logement et @@ -296,8 +325,8 @@ ECLI:FR:CECHR:2017:398563.20170721 ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: - définition taux_francs_vers_euros égal à (1,0 /. 6,55957) + définition taux_francs_vers_euros égal à (1,0 / 6,55957) champ d'application CalculAllocationLogementAccessionPropriété: - définition taux_francs_vers_euros égal à (1,0 /. 6,55957) + définition taux_francs_vers_euros égal à (1,0 / 6,55957) ``` diff --git a/examples/aides_logement/code_construction_legislatif.catala_fr b/examples/aides_logement/code_construction_legislatif.catala_fr index e70ef5b0..18f357b8 100644 --- a/examples/aides_logement/code_construction_legislatif.catala_fr +++ b/examples/aides_logement/code_construction_legislatif.catala_fr @@ -171,15 +171,15 @@ champ d'application ÉligibilitéAidesPersonnelleLogement: usufruit_ou_propriété_famille et (selon ménage.logement.propriétaire sous forme -- DemandeurOuConjointOuParentOuViaPartsSociétés de parts: parts - -- ParentOuAutre.Autre: 0,0) <. seuil_l822_3_parts_propriété et + -- ParentOuAutre.Autre: 0,0) < seuil_l822_3_parts_propriété et (selon ménage.logement.usufruit sous forme -- DemandeurOuConjointOuParentOuViaPartsSociétés de parts: parts - -- ParentOuAutre.Autre: 0,0) <. seuil_l822_3_parts_usufruit + -- ParentOuAutre.Autre: 0,0) < seuil_l822_3_parts_usufruit conséquence rempli - # Les <. sont stricts par mention de R822-1 + # Les < sont stricts par mention de R822-1 - assertion seuil_l822_3_parts_propriété <. 20 % - assertion seuil_l822_3_parts_usufruit <. 20 % + assertion seuil_l822_3_parts_propriété < 20 % + assertion seuil_l822_3_parts_usufruit < 20 % ``` ###### Article L822-4 | LEGIARTI000038814940 @@ -203,7 +203,7 @@ 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.date_naissance_personne_sous_location +@ 30 an >@ + personne.date_naissance_personne_sous_location + 30 an > date_courante ou personne.conforme_article_l442_1 conséquence rempli @@ -244,11 +244,11 @@ réglementaire. # la formule est bien de cette forme là. champ d'application ÉligibilitéAidesPersonnelleLogement: définition patrimoine_total_demandeur égal à - demandeur.patrimoine.produisant_revenu_période_r822_3_3_r822_4 +€ + demandeur.patrimoine.produisant_revenu_période_r822_3_3_r822_4 + demandeur.patrimoine.ne_produisant_pas_revenu_période_r822_3_3_r822_4 étiquette l822_5_1 définition patrimoine_pris_en_compte égal à - si patrimoine_total_demandeur >€ seuil_l822_5_patrimoine alors + si patrimoine_total_demandeur > seuil_l822_5_patrimoine alors patrimoine_total_demandeur sinon 0€ @@ -264,9 +264,9 @@ n'est pas prise en compte dans le calcul de l'aide personnelle au logement. ```catala champ d'application ÉligibilitéAidesPersonnelleLogement: étiquette l822_5_2 exception r822_22_3 définition patrimoine_pris_en_compte - sous condition existe prestation dans ménage.prestations_reçues tel que - (prestation = AllocationSoutienEnfantHandicapé) ou - (prestation = AllocationAdulteHandicapé) + sous condition existe prestation parmi ménage.prestations_reçues tel que + (prestation = AllocationSoutienEnfantHandicapé ou + prestation = AllocationAdulteHandicapé) conséquence égal à 0€ ``` @@ -562,8 +562,8 @@ champ d'application ÉligibilitéPrimeDeDéménagement: règle éligibilité_logement sous condition éligibilité_apl.éligibilité et condition_rang_enfant et condition_période_déménagement et - éligibilité_apl.date_courante -@ date_emménagement - <=^ délai_après_emménagement_l823_8_2 + éligibilité_apl.date_courante - date_emménagement + <= délai_après_emménagement_l823_8_2 conséquence rempli ``` @@ -640,9 +640,9 @@ champ d'application ÉligibilitéAidePersonnaliséeLogement: règle condition_logement_bailleur sous condition selon ménage.logement.mode_occupation sous forme -- Locataire de location: - (selon location.Location.bailleur sous forme + (selon location.bailleur sous forme -- BailleurSocial de convention: - convention.ConventionBailleurSocial. + convention. conventionné_livre_III_titre_V_chap_III -- BailleurPrivéAvecConventionnementSocial de convention: convention.conventionné_livre_III_titre_II_chap_I_sec_3 @@ -683,7 +683,7 @@ champ d'application ÉligibilitéAidePersonnaliséeLogement: règle condition_logement_bailleur sous condition selon ménage.logement.mode_occupation sous forme -- RésidentLogementFoyer de location: - location.LogementFoyer.conventionné_livre_III_titre_V_chap_III + location.conventionné_livre_III_titre_V_chap_III -- n'importe quel: faux conséquence rempli ``` @@ -720,9 +720,9 @@ champ d'application ÉligibilitéAidePersonnaliséeLogement: sous condition selon ménage.logement.mode_occupation sous forme -- LocationAccession de propriété: - propriété.prêt.date_signature >=@ |2017-12-31| + propriété.prêt.date_signature >= |2017-12-31| -- AccessionPropriétéLocalUsageExclusifHabitation de propriété: - propriété.prêt.date_signature >=@ |2017-12-31| + propriété.prêt.date_signature >= |2017-12-31| -- n'importe quel: faux conséquence non rempli ``` @@ -741,13 +741,13 @@ champ d'application ÉligibilitéAidePersonnaliséeLogement: -- LocationAccession de propriété: # Le fait que cette exception ne soit valable qu'après le 1er janvier # 2018 nous a été confirmé le 25/05/2022 par DGALN/DHUP/FE4. - propriété.prêt.date_signature >=@ |2018-01-01| et - propriété.prêt.date_signature <@ |2020-01-01| et + propriété.prêt.date_signature >= |2018-01-01| et + propriété.prêt.date_signature < |2020-01-01| et propriété.ancienneté_logement sous forme Ancien et propriété.logement_situé_commune_déséquilibre_l831_2 -- AccessionPropriétéLocalUsageExclusifHabitation de propriété: - propriété.prêt.date_signature >=@ |2018-01-01| et - propriété.prêt.date_signature <@ |2020-01-01| et + propriété.prêt.date_signature >= |2018-01-01| et + propriété.prêt.date_signature < |2020-01-01| et propriété.ancienneté_logement sous forme Ancien et propriété.logement_situé_commune_déséquilibre_l831_2 -- n'importe quel: faux @@ -809,12 +809,12 @@ champ d'application CalculAidePersonnaliséeLogementLocatif: égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans si - aide_finale -€ réduction_loyer_solidarité *€ fraction_l832_3 >=€ 0€ + aide_finale - réduction_loyer_solidarité * fraction_l832_3 >= 0€ alors - aide_finale -€ réduction_loyer_solidarité *€ fraction_l832_3 + 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 @@ -867,11 +867,12 @@ d) Soit l'allocation de soutien familial mentionnée au 6° du même article ; champ d'application ÉligibilitéAllocationLogement: étiquette l841_1_1 règle éligibilité_allocation_logement_familiale sous condition - existe prestation dans ménage.prestations_reçues tel que + existe prestation parmi ménage.prestations_reçues tel que ( prestation = PrestationReçue.AllocationsFamiliales ou prestation = PrestationReçue.ComplémentFamilial ou prestation = PrestationReçue.AllocationSoutienFamilial ou prestation = AllocationSoutienEnfantHandicapé + ) conséquence rempli ``` @@ -886,28 +887,28 @@ champ d'application ÉligibilitéAllocationLogement: étiquette l841_1_2 exception l841_1_1 règle éligibilité_allocation_logement_familiale sous condition - (nombre pour personne_à_charge dans ménage.personnes_à_charge de - (selon personne_à_charge sous forme - -- AutrePersonneÀCharge: faux - -- EnfantÀCharge de enfant: (prestations_familiales.droit_ouvert de - EnfantPrestationsFamiliales { - -- identifiant: enfant.EnfantÀCharge.identifiant - -- obligation_scolaire: enfant.EnfantÀCharge.obligation_scolaire - -- rémuneration_mensuelle: enfant.EnfantÀCharge.rémuneration_mensuelle - -- date_de_naissance: enfant.EnfantÀCharge.date_de_naissance - -- prise_en_charge: (selon enfant.situation_garde_alternée sous forme - -- GardeAlternéeCoefficientPriseEnCharge: - PriseEnChargeEnfant.GardeAlternéePartageAllocations - -- PasDeGardeAlternée: - PriseEnChargeEnfant.EffectiveEtPermanente) - -- a_déjà_ouvert_droit_aux_allocations_familiales: - enfant.EnfantÀCharge.a_déjà_ouvert_droit_aux_allocations_familiales - -- bénéficie_titre_personnel_aide_personnelle_logement: - enfant.EnfantÀCharge. - bénéficie_titre_personnel_aide_personnelle_logement - } - ) - )) = 1 + nombre de + (personne_à_charge parmi ménage.personnes_à_charge tel que + (selon personne_à_charge sous forme + -- AutrePersonneÀCharge: faux + -- EnfantÀCharge de enfant: prestations_familiales.droit_ouvert de + EnfantPrestationsFamiliales { + -- identifiant: enfant.identifiant + -- obligation_scolaire: enfant.obligation_scolaire + -- rémuneration_mensuelle: enfant.rémuneration_mensuelle + -- date_de_naissance: enfant.date_de_naissance + -- prise_en_charge: (selon enfant.situation_garde_alternée sous forme + -- GardeAlternéeCoefficientPriseEnCharge: + PriseEnChargeEnfant.GardeAlternéePartageAllocations + -- PasDeGardeAlternée: + PriseEnChargeEnfant.EffectiveEtPermanente) + -- a_déjà_ouvert_droit_aux_allocations_familiales: + enfant.a_déjà_ouvert_droit_aux_allocations_familiales + -- bénéficie_titre_personnel_aide_personnelle_logement: + enfant. + bénéficie_titre_personnel_aide_personnelle_logement + })) + = 1 conséquence rempli ``` @@ -918,30 +919,31 @@ champ d'application ÉligibilitéAllocationLogement: étiquette l841_1_3 exception l841_1_2 règle éligibilité_allocation_logement_familiale sous condition - (nombre pour personne_à_charge dans ménage.personnes_à_charge de - (selon personne_à_charge sous forme - -- AutrePersonneÀCharge: faux - -- EnfantÀCharge de enfant: non (prestations_familiales.droit_ouvert de - EnfantPrestationsFamiliales { - -- identifiant: enfant.EnfantÀCharge.identifiant - -- obligation_scolaire: enfant.EnfantÀCharge.obligation_scolaire - -- rémuneration_mensuelle: enfant.EnfantÀCharge.rémuneration_mensuelle - -- date_de_naissance: enfant.EnfantÀCharge.date_de_naissance - -- prise_en_charge: (selon enfant.situation_garde_alternée sous forme - -- GardeAlternéeCoefficientPriseEnCharge: - PriseEnChargeEnfant.GardeAlternéePartageAllocations - -- PasDeGardeAlternée: - PriseEnChargeEnfant.EffectiveEtPermanente) - -- a_déjà_ouvert_droit_aux_allocations_familiales: - enfant.EnfantÀCharge.a_déjà_ouvert_droit_aux_allocations_familiales - -- bénéficie_titre_personnel_aide_personnelle_logement: - enfant.EnfantÀCharge. - bénéficie_titre_personnel_aide_personnelle_logement - } - ) - )) = 0 et + nombre de + (personne_à_charge parmi ménage.personnes_à_charge tel que + (selon personne_à_charge sous forme + -- AutrePersonneÀCharge: faux + -- EnfantÀCharge de enfant: non (prestations_familiales.droit_ouvert de + EnfantPrestationsFamiliales { + -- identifiant: enfant.identifiant + -- obligation_scolaire: enfant.obligation_scolaire + -- rémuneration_mensuelle: enfant.rémuneration_mensuelle + -- date_de_naissance: enfant.date_de_naissance + -- prise_en_charge: (selon enfant.situation_garde_alternée sous forme + -- GardeAlternéeCoefficientPriseEnCharge: + PriseEnChargeEnfant.GardeAlternéePartageAllocations + -- PasDeGardeAlternée: + PriseEnChargeEnfant.EffectiveEtPermanente) + -- a_déjà_ouvert_droit_aux_allocations_familiales: + enfant.a_déjà_ouvert_droit_aux_allocations_familiales + -- bénéficie_titre_personnel_aide_personnelle_logement: + enfant. + bénéficie_titre_personnel_aide_personnelle_logement + }))) + = 0 + et (selon ménage.situation_familiale sous forme - -- Mariés de date_mariage : date_courante <=@ date_mariage +@ durée_l841_1_3 + -- Mariés de date_mariage : date_courante <= date_mariage + durée_l841_1_3 -- n'importe quel: faux) conséquence rempli ``` @@ -956,8 +958,9 @@ champ d'application ÉligibilitéAllocationLogement: étiquette l841_1_4 exception l841_1_3 règle éligibilité_allocation_logement_familiale sous condition - (nombre pour personne_à_charge dans ménage.personnes_à_charge de - éligibilité_commune.condition_2_r823_4 de personne_à_charge) >= 1 + nombre de (personne_à_charge parmi ménage.personnes_à_charge + tel que éligibilité_commune.condition_2_r823_4 de personne_à_charge) + >= 1 conséquence rempli ``` @@ -973,7 +976,7 @@ champ d'application ÉligibilitéAllocationLogement: étiquette l841_1_4 exception l841_1_3 règle éligibilité_allocation_logement_familiale sous condition - (nombre pour personne_à_charge dans ménage.personnes_à_charge de + (nombre de (personne_à_charge parmi ménage.personnes_à_charge tel que (selon personne_à_charge sous forme -- AutrePersonneÀCharge de parent: # Cela a l'air similaire au 3° du R823-4 code construction mais @@ -984,7 +987,7 @@ champ d'application ÉligibilitéAllocationLogement: parent.ascendant_descendant_collatéral_deuxième_troisième_degré et parent.incapacité_80_pourcent_ou_restriction_emploi -- EnfantÀCharge de enfant: faux - )) >= 1 + ))) >= 1 conséquence rempli ``` @@ -1075,7 +1078,7 @@ champ d'application CalculetteAidesAuLogement: non (éligibilité_allocation_logement.éligibilité sous forme PasÉligible) alors (si calcul_aide_personnalisée_logement.traitement_aide_finale de - calcul_aide_personnalisée_logement.aide_finale_formule >€ + calcul_aide_personnalisée_logement.aide_finale_formule > calcul_allocation_logement.traitement_aide_finale de calcul_allocation_logement.aide_finale_formule alors @@ -1099,7 +1102,7 @@ champ d'application CalculetteAidesAuLogement: éligibilité_aide_personnalisée_logement.éligibilité et non (éligibilité_allocation_logement.éligibilité sous forme PasÉligible) alors - (si aide_finale_apl >€ aide_finale_al + (si aide_finale_apl > aide_finale_al alors aide_finale_apl sinon aide_finale_al) sinon si @@ -1133,7 +1136,7 @@ champ d'application ÉligibilitéAllocationLogement: exception définition éligibilité état l841_2 sous condition selon ménage.logement.mode_occupation sous forme -- AccessionPropriétéLocalUsageExclusifHabitation de propriétaire: - propriétaire.prêt.date_signature >@ |2017-12-31| + propriétaire.prêt.date_signature > |2017-12-31| -- n'importe quel: faux conséquence égal à PasÉligible ``` diff --git a/examples/aides_logement/code_construction_reglementaire.catala_fr b/examples/aides_logement/code_construction_reglementaire.catala_fr index 6cef0358..aaf61adc 100644 --- a/examples/aides_logement/code_construction_reglementaire.catala_fr +++ b/examples/aides_logement/code_construction_reglementaire.catala_fr @@ -122,13 +122,13 @@ les personnes vivant habituellement au foyer. # Interprétation confirmée par DGALN/DHUP/FE4 le 25/05/2022. champ d'application RessourcesAidesPersonnelleLogement: définition ressources_prises_en_compte égal à - ressources_demandeur +€ - ressources_conjoint +€ + ressources_demandeur + + ressources_conjoint + ressources_personnes_vivant_habituellement_foyer définition ressources_personnes_vivant_habituellement_foyer égal à - somme argent pour personne dans personnes_vivant_habituellement_foyer de - personne.PersonneVivantHabituellementAuFoyer.ressources + somme argent de personne.ressources pour + personne parmi personnes_vivant_habituellement_foyer ``` Sont considérées comme vivant habituellement au foyer les personnes y ayant @@ -139,7 +139,7 @@ droit à celle-ci. ```catala champ d'application RessourcesAidesPersonnelleLogement: - assertion pour tout personne dans personnes_vivant_habituellement_foyer on a + assertion pour tout personne parmi personnes_vivant_habituellement_foyer on a personne.durée_résidence_durant_période_r_822_3_1_supérieure_à_6_mois # Ici on pourrait coder ça de manière beaucoup plus précise en tenant compte # des différentes périodes mentionnées et en forçant l'utilisateur à bien @@ -409,8 +409,8 @@ champ d'application RessourcesAidesPersonnelleLogement: définition abattement_r_822_7 égal à si demandeur_exerce_activité_rémunérée et conjoint_exerce_activité_rémunérée et - (ressources_demandeur +€ ressources_conjoint) >=€ - base_mensuelle_allocations_familiales.montant *€ 12,0 + (ressources_demandeur + ressources_conjoint) >= + base_mensuelle_allocations_familiales.montant * 12,0 alors montant_forfaitaire_r_822_7 sinon 0€ @@ -851,8 +851,8 @@ sur le revenu. ```catala champ d'application RessourcesAidesPersonnelleLogement: exception définition ressources_prises_en_compte sous condition - mode_occupation sous forme Locataire ou - mode_occupation sous forme RésidentLogementFoyer et + (mode_occupation sous forme Locataire ou + mode_occupation sous forme RésidentLogementFoyer) et condition_âge_bourse_enseignement_supérieur et demandeur_poursuit_des_études conséquence égal à ressources_forfaitaires_r822_20 @@ -941,7 +941,7 @@ R. 822-4 est pris en compte pour le calcul de l'aide. champ d'application ÉligibilitéAidesPersonnelleLogement: étiquette r822_22_3 exception l822_5_1 définition patrimoine_pris_en_compte sous condition - patrimoine_total_demandeur >=€ seuil_l822_5_patrimoine + patrimoine_total_demandeur >= seuil_l822_5_patrimoine conséquence égal à demandeur.patrimoine.ne_produisant_pas_revenu_période_r822_3_3_r822_4 ``` @@ -1080,26 +1080,37 @@ sociale agricole compétente. # Pas pertinent pour le calcul du montant. ``` -####### Article R823-2 | LEGIARTI000038878937 +####### Article R823-2 | LEGIARTI000044636869 Les aides personnelles au logement sont attribuées sur la demande de l'intéressé -déposée auprès de l'organisme payeur mentionné à l'article R. 823-1 dont il -relève. Cette demande est conforme à un modèle type. +déposée auprès de l'organisme payeur mentionné à l'article R. 823-1 dont il relève. +Cette demande est conforme à un modèle type. Elle est assortie de pièces justificatives définies par arrêté des ministres chargés du logement, du budget, de la sécurité sociale et de l'agriculture. Le même arrêté définit le modèle-type de la demande et précise celles de ces -pièces justificatives qui doivent être produites chaque année et, parmi -celles-ci, celles dont le défaut de présentation avant la date qu'il fixe -entraîne la suspension du paiement de l'aide. +pièces justificatives qui doivent être produites chaque année et, parmi celles-ci, +celles dont le défaut de présentation avant la date qu'il fixe entraîne la +suspension du paiement de l'aide. -Le fait que le logement réponde aux conditions de décence mentionnées à l'article -R. 822-24 est justifié par une attestation du bailleur. +Le fait que le logement réponde aux conditions de décence mentionnées à +l'article R. 822-24 est justifié par une attestation du bailleur. En outre, +celui-ci est en mesure de présenter, à la demande des organismes payeurs, +le diagnostic de performance énergétique du logement faisant état du respect +du critère de performance énergétique minimale mentionné à l'article 3 bis du +décret n° 2002-120 du 30 janvier 2002 relatif aux caractéristiques du logement +décent pris pour l'application de l'article 187 de la loi n° 2000-1208 du 13 +décembre 2000 relative à la solidarité et au renouvellement urbain. La personne de nationalité étrangère qui demande à bénéficier des aides personnelles au logement justifie, en outre, de la régularité de son séjour -par la production d'un des titres de séjour ou documents prévus à l' article -D. 512-1 du code de la sécurité sociale . +par la production d'un des titres de séjour ou documents prévus à l'article +D. 512-1 du code de la sécurité sociale. + +NOTA: + +Conformément à l'article 6 du décret n° 2021-1750 du 21 décembre 2021, ces +dispositions entrent en vigueur le 1er janvier 2023. ```catala # Pas pertinent pour le calcul du montant. @@ -1124,7 +1135,7 @@ habituellement au foyer : ```catala champ d'application ÉligibilitéAidesPersonnelleLogement: définition personnes_à_charge_prises_en_compte égal à - filtre pour personne_à_charge dans ménage.personnes_à_charge de + personne_à_charge parmi ménage.personnes_à_charge tel que prise_en_compte_personne_à_charge de personne_à_charge ``` @@ -1137,7 +1148,7 @@ champ d'application ÉligibilitéAidesPersonnelleLogement: règle prise_en_compte_personne_à_charge de personne_à_charge sous condition selon personne_à_charge sous forme -- EnfantÀCharge de enfant: - enfant.EnfantÀCharge.date_de_naissance +@ 21 an >@ date_courante + enfant.date_de_naissance + 21 an > date_courante -- AutrePersonneÀCharge de parent: faux conséquence rempli ``` @@ -1163,17 +1174,17 @@ champ d'application ÉligibilitéAidesPersonnelleLogement: -- EnfantÀCharge de enfant: faux -- AutrePersonneÀCharge de parent: parent.parenté = Ascendant et - parent.AutrePersonneÀCharge.ressources <=€ - plafond_individuel_l815_9_sécu *€ 1,25 et + parent.ressources <= + plafond_individuel_l815_9_sécu * 1,25 et ( - (parent.AutrePersonneÀCharge.date_naissance +@ - âge_l351_8_1_sécu <=@ date_courante ou + (parent.date_naissance + + âge_l351_8_1_sécu <= date_courante ou (parent.titulaire_allocation_personne_âgée et - parent.AutrePersonneÀCharge.date_naissance +@ 65 an <=@ + parent.date_naissance + 65 an <= date_courante) ) ou - (parent.AutrePersonneÀCharge.date_naissance +@ - âge_l161_17_2_sécu <=@ date_courante et + (parent.date_naissance + + âge_l161_17_2_sécu <= date_courante et parent.bénéficiaire_l161_19_l351_8_l643_3_sécu) ) conséquence rempli @@ -1204,8 +1215,8 @@ champ d'application ÉligibilitéAidesPersonnelleLogement: -- AutrePersonneÀCharge de parent: # Pas besoin de préciser parenté car inclusif ici parent.incapacité_80_pourcent_ou_restriction_emploi et - parent.AutrePersonneÀCharge.ressources <=€ - plafond_individuel_l815_9_sécu *€ 1,25 + parent.ressources <= + plafond_individuel_l815_9_sécu * 1,25 conséquence rempli ``` @@ -1385,24 +1396,36 @@ champ d'application CalculAllocationLogement: selon mode_occupation sous forme -- Locataire de location: Location contenu location -- SousLocataire de location: Location contenu location - -- RésidentLogementFoyer de logementfoyer: CatégorieCalculAPL.LogementFoyer contenu logementfoyer - -- AccessionPropriétéLocalUsageExclusifHabitation de propriétaire: AccessionPropriété contenu propriétaire - -- LocationAccession de propriétaire: AccessionPropriété contenu propriétaire + -- RésidentLogementFoyer de logementfoyer: + CatégorieCalculAPL.LogementFoyer contenu logementfoyer + -- AccessionPropriétéLocalUsageExclusifHabitation de propriétaire: + AccessionPropriété contenu propriétaire + -- LocationAccession de propriétaire: + AccessionPropriété contenu propriétaire - définition aide_finale_formule égal à sous_calcul_traitement.Traitement_formule_aide_finale.aide_finale_formule - définition traitement_aide_finale de arg égal à (sous_calcul_traitement.Traitement_formule_aide_finale.traitement_aide_finale de arg) + définition aide_finale_formule égal à + sous_calcul_traitement.aide_finale_formule + définition traitement_aide_finale de arg égal à + (sous_calcul_traitement. + Traitement_formule_aide_finale.traitement_aide_finale de arg) champ d'application CalculAidePersonnaliséeLogement: définition catégorie_calcul_apl égal à selon mode_occupation sous forme -- Locataire de location: Location contenu location -- SousLocataire de location: Location contenu location - -- RésidentLogementFoyer de logementfoyer: CatégorieCalculAPL.LogementFoyer contenu logementfoyer - -- AccessionPropriétéLocalUsageExclusifHabitation de propriétaire: AccessionPropriété contenu propriétaire - -- LocationAccession de propriétaire: AccessionPropriété contenu propriétaire + -- RésidentLogementFoyer de logementfoyer: + CatégorieCalculAPL.LogementFoyer contenu logementfoyer + -- AccessionPropriétéLocalUsageExclusifHabitation de propriétaire: + AccessionPropriété contenu propriétaire + -- LocationAccession de propriétaire: + AccessionPropriété contenu propriétaire - définition aide_finale_formule égal à sous_calcul_traitement.Traitement_formule_aide_finale.aide_finale_formule - définition traitement_aide_finale de arg égal à (sous_calcul_traitement.Traitement_formule_aide_finale.traitement_aide_finale de arg) + définition aide_finale_formule égal à + sous_calcul_traitement.aide_finale_formule + définition traitement_aide_finale de arg égal à + (sous_calcul_traitement. + Traitement_formule_aide_finale.traitement_aide_finale de arg) ``` ```catala-metadata @@ -1414,7 +1437,7 @@ champ d'application CalculAidePersonnaliséeLogement: selon catégorie_calcul_apl sous forme -- Location de location: (soit traitement_formule égal à - CalculAidePersonnaliséeLogementLocatif de { + résultat de CalculAidePersonnaliséeLogementLocatif avec { -- ressources_ménage_arrondies: ressources_ménage -- nombre_personnes_à_charge: nombre_personnes_à_charge -- zone: zone @@ -1429,19 +1452,23 @@ champ d'application CalculAidePersonnaliséeLogement: location.âgées_ou_handicap_adultes_hébergées_onéreux_particuliers -- type_aide: type_aide -- réduction_loyer_solidarité: - (selon location.Location.bailleur sous forme + (selon location.bailleur sous forme -- BailleurSocial de bailleur: bailleur.réduction_loyer_solidarité_perçue -- n'importe quel: 0€) -- logement_meublé_d842_2: location.logement_meublé_d842_2 } dans Traitement_formule_aide_finale { - -- aide_finale_formule: traitement_formule.CalculAidePersonnaliséeLogementLocatif.aide_finale_formule - -- traitement_aide_finale: traitement_formule.CalculAidePersonnaliséeLogementLocatif.traitement_aide_finale + -- aide_finale_formule: + traitement_formule. + CalculAidePersonnaliséeLogementLocatif.aide_finale_formule + -- traitement_aide_finale: + traitement_formule. + CalculAidePersonnaliséeLogementLocatif.traitement_aide_finale }) -- LogementFoyer de logement_foyer_: (soit traitement_formule égal à - CalculAidePersonnaliséeLogementFoyer de { + résultat de CalculAidePersonnaliséeLogementFoyer avec { -- ressources_ménage_arrondies: ressources_ménage -- nombre_personnes_à_charge: nombre_personnes_à_charge -- zone: zone @@ -1452,12 +1479,16 @@ champ d'application CalculAidePersonnaliséeLogement: -- date_conventionnement: logement_foyer_.date_conventionnement } dans Traitement_formule_aide_finale { - -- aide_finale_formule: traitement_formule.CalculAidePersonnaliséeLogementFoyer.aide_finale_formule - -- traitement_aide_finale: traitement_formule.CalculAidePersonnaliséeLogementFoyer.traitement_aide_finale + -- aide_finale_formule: + traitement_formule. + CalculAidePersonnaliséeLogementFoyer.aide_finale_formule + -- traitement_aide_finale: + traitement_formule. + CalculAidePersonnaliséeLogementFoyer.traitement_aide_finale }) -- AccessionPropriété de propriétaire: (soit traitement_formule égal à - CalculAidePersonnaliséeLogementAccessionPropriété de { + résultat de CalculAidePersonnaliséeLogementAccessionPropriété avec { -- ressources_ménage_arrondies: ressources_ménage -- nombre_personnes_à_charge: nombre_personnes_à_charge -- zone: zone @@ -1466,7 +1497,8 @@ champ d'application CalculAidePersonnaliséeLogement: -- mensualité_principale: propriétaire.mensualité_principale -- type_travaux_logement: propriétaire.type_travaux_logement_d832_15 -- date_signature_prêt: propriétaire.prêt.date_signature - -- local_habité_première_fois_bénéficiaire: propriétaire.local_habité_première_fois_bénéficiaire + -- local_habité_première_fois_bénéficiaire: + propriétaire.local_habité_première_fois_bénéficiaire -- date_entrée_logement: propriétaire.date_entrée_logement -- copropriété: propriétaire.copropriété -- situation_r822_11_13_17: propriétaire.situation_r822_11_13_17 @@ -1474,8 +1506,14 @@ champ d'application CalculAidePersonnaliséeLogement: -- ancienneté_logement: propriétaire.ancienneté_logement } dans Traitement_formule_aide_finale { - -- aide_finale_formule: traitement_formule.CalculAidePersonnaliséeLogementAccessionPropriété.aide_finale_formule - -- traitement_aide_finale: traitement_formule.CalculAidePersonnaliséeLogementAccessionPropriété.traitement_aide_finale + -- aide_finale_formule: + traitement_formule. + CalculAidePersonnaliséeLogementAccessionPropriété. + aide_finale_formule + -- traitement_aide_finale: + traitement_formule. + CalculAidePersonnaliséeLogementAccessionPropriété. + traitement_aide_finale }) champ d'application CalculAllocationLogement: @@ -1483,7 +1521,7 @@ champ d'application CalculAllocationLogement: selon mode_occupation sous forme -- Locataire de location: (soit traitement_formule égal à - CalculAllocationLogementLocatif de { + résultat de CalculAllocationLogementLocatif avec { -- ressources_ménage_arrondies: ressources_ménage -- nombre_personnes_à_charge: nombre_personnes_à_charge -- zone: zone @@ -1498,7 +1536,7 @@ champ d'application CalculAllocationLogement: location.âgées_ou_handicap_adultes_hébergées_onéreux_particuliers -- type_aide: type_aide -- réduction_loyer_solidarité: - (selon location.Location.bailleur sous forme + (selon location.bailleur sous forme -- BailleurSocial de bailleur: bailleur.réduction_loyer_solidarité_perçue -- n'importe quel: 0€) @@ -1506,12 +1544,16 @@ champ d'application CalculAllocationLogement: -- changement_logement_d842_4: location.changement_logement_d842_4 } dans Traitement_formule_aide_finale { - -- aide_finale_formule: traitement_formule.CalculAllocationLogementLocatif.aide_finale_formule - -- traitement_aide_finale: traitement_formule.CalculAllocationLogementLocatif.traitement_aide_finale + -- aide_finale_formule: + traitement_formule.aide_finale_formule + -- traitement_aide_finale: + traitement_formule. + CalculAllocationLogementLocatif. + traitement_aide_finale }) -- SousLocataire de location: # Identique à Locataire (soit traitement_formule égal à - CalculAllocationLogementLocatif de { + résultat de CalculAllocationLogementLocatif avec { -- ressources_ménage_arrondies: ressources_ménage -- nombre_personnes_à_charge: nombre_personnes_à_charge -- zone: zone @@ -1526,7 +1568,7 @@ champ d'application CalculAllocationLogement: location.âgées_ou_handicap_adultes_hébergées_onéreux_particuliers -- type_aide: type_aide -- réduction_loyer_solidarité: - (selon location.Location.bailleur sous forme + (selon location.bailleur sous forme -- BailleurSocial de bailleur: bailleur.réduction_loyer_solidarité_perçue -- n'importe quel: 0€) @@ -1534,29 +1576,37 @@ champ d'application CalculAllocationLogement: -- changement_logement_d842_4: location.changement_logement_d842_4 } dans Traitement_formule_aide_finale { - -- aide_finale_formule: traitement_formule.CalculAllocationLogementLocatif.aide_finale_formule - -- traitement_aide_finale: traitement_formule.CalculAllocationLogementLocatif.traitement_aide_finale + -- aide_finale_formule: + traitement_formule. + CalculAllocationLogementLocatif.aide_finale_formule + -- traitement_aide_finale: + traitement_formule. + CalculAllocationLogementLocatif.traitement_aide_finale }) -- RésidentLogementFoyer de logement_foyer_: (soit traitement_formule égal à - CalculAllocationLogementFoyer de { + résultat de CalculAllocationLogementFoyer avec { -- ressources_ménage_arrondies: ressources_ménage -- nombre_personnes_à_charge: nombre_personnes_à_charge -- zone: zone -- date_courante: date_courante -- situation_familiale_calcul_apl: situation_familiale_calcul_apl -- redevance: logement_foyer_.redevance - -- catégorie_équivalence_loyer_d842_16: logement_foyer_.catégorie_équivalence_loyer_d842_16 + -- catégorie_équivalence_loyer_d842_16: + logement_foyer_.catégorie_équivalence_loyer_d842_16 -- type_logement_foyer: logement_foyer_.type -- date_conventionnement: logement_foyer_.date_conventionnement } dans Traitement_formule_aide_finale { - -- aide_finale_formule: traitement_formule.CalculAllocationLogementFoyer.aide_finale_formule - -- traitement_aide_finale: traitement_formule.CalculAllocationLogementFoyer.traitement_aide_finale + -- aide_finale_formule: + traitement_formule.aide_finale_formule + -- traitement_aide_finale: + traitement_formule. + CalculAllocationLogementFoyer.traitement_aide_finale }) -- AccessionPropriétéLocalUsageExclusifHabitation de propriétaire: (soit traitement_formule égal à - CalculAllocationLogementAccessionPropriété de { + résultat de CalculAllocationLogementAccessionPropriété avec { -- ressources_ménage_arrondies: ressources_ménage -- nombre_personnes_à_charge: nombre_personnes_à_charge -- zone: zone @@ -1566,18 +1616,24 @@ champ d'application CalculAllocationLogement: -- charges_mensuelles_prêt: propriétaire.charges_mensuelles_prêt -- type_travaux_logement: propriétaire.type_travaux_logement_r842_5 -- date_signature_prêt: propriétaire.prêt.date_signature - -- local_habité_première_fois_bénéficiaire: propriétaire.local_habité_première_fois_bénéficiaire + -- local_habité_première_fois_bénéficiaire: + propriétaire.local_habité_première_fois_bénéficiaire -- date_entrée_logement: propriétaire.date_entrée_logement -- copropriété: propriétaire.copropriété -- situation_r822_11_13_17: propriétaire.situation_r822_11_13_17 } dans Traitement_formule_aide_finale { - -- aide_finale_formule: traitement_formule.CalculAllocationLogementAccessionPropriété.aide_finale_formule - -- traitement_aide_finale: traitement_formule.CalculAllocationLogementAccessionPropriété.traitement_aide_finale + -- aide_finale_formule: + traitement_formule. + CalculAllocationLogementAccessionPropriété.aide_finale_formule + -- traitement_aide_finale: + traitement_formule. + CalculAllocationLogementAccessionPropriété.traitement_aide_finale }) - -- LocationAccession de propriétaire: # Identique à AccessionPropriétéLocalUsageExclusifHabitation + -- LocationAccession de propriétaire: + # Identique à AccessionPropriétéLocalUsageExclusifHabitation (soit traitement_formule égal à - CalculAllocationLogementAccessionPropriété de { + résultat de CalculAllocationLogementAccessionPropriété avec { -- ressources_ménage_arrondies: ressources_ménage -- nombre_personnes_à_charge: nombre_personnes_à_charge -- zone: zone @@ -1587,14 +1643,19 @@ champ d'application CalculAllocationLogement: -- charges_mensuelles_prêt: propriétaire.charges_mensuelles_prêt -- type_travaux_logement: propriétaire.type_travaux_logement_r842_5 -- date_signature_prêt: propriétaire.prêt.date_signature - -- local_habité_première_fois_bénéficiaire: propriétaire.local_habité_première_fois_bénéficiaire + -- local_habité_première_fois_bénéficiaire: + propriétaire.local_habité_première_fois_bénéficiaire -- date_entrée_logement: propriétaire.date_entrée_logement -- copropriété: propriétaire.copropriété -- situation_r822_11_13_17: propriétaire.situation_r822_11_13_17 } dans Traitement_formule_aide_finale { - -- aide_finale_formule: traitement_formule.CalculAllocationLogementAccessionPropriété.aide_finale_formule - -- traitement_aide_finale: traitement_formule.CalculAllocationLogementAccessionPropriété.traitement_aide_finale + -- aide_finale_formule: + traitement_formule. + CalculAllocationLogementAccessionPropriété.aide_finale_formule + -- traitement_aide_finale: + traitement_formule. + CalculAllocationLogementAccessionPropriété.traitement_aide_finale }) ``` @@ -1726,10 +1787,10 @@ $$\textrm{Af} = \textrm{L} + \textrm{C}-\textrm{Pp}$$ champ d'application CalculAidePersonnaliséeLogementLocatif: définition aide_finale_formule égal à soit aide_finale égal à - loyer_éligible +€ montant_forfaitaire_charges_d823_16 -€ + loyer_éligible + montant_forfaitaire_charges_d823_16 - participation_personnelle dans - si aide_finale <€ 0 € alors 0 € sinon aide_finale + si aide_finale < 0 € alors 0 € sinon aide_finale ``` où : @@ -1743,7 +1804,7 @@ dans le cas où le logement occupé est une chambre, de la composition familiale ```catala champ d'application CalculAidePersonnaliséeLogementLocatif: définition loyer_éligible égal à - si loyer_principal >€ plafond_loyer_d823_16_2 + si loyer_principal > plafond_loyer_d823_16_2 alors plafond_loyer_d823_16_2 sinon loyer_principal ``` @@ -1778,12 +1839,12 @@ l'enfant handicapé prévue à l'article L. 541-1 du même code. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif: définition traitement_aide_finale de aide_finale état diminué égal à - si loyer_principal >€ plafond_suppression_d823_16 alors + si loyer_principal > plafond_suppression_d823_16 alors 0€ - sinon (si loyer_principal >€ plafond_dégressivité_d823_16 alors - aide_finale -€ (aide_finale *€ - ((loyer_principal -€ plafond_dégressivité_d823_16) /€ - (plafond_suppression_d823_16 -€ plafond_dégressivité_d823_16))) + sinon (si loyer_principal > plafond_dégressivité_d823_16 alors + aide_finale - (aide_finale * + ((loyer_principal - plafond_dégressivité_d823_16) / + (plafond_suppression_d823_16 - plafond_dégressivité_d823_16))) # Faire un graphique pour se convaincre que la pente proportionnelle # a bien cette expression. sinon aide_finale) @@ -1794,7 +1855,7 @@ champ d'application CalculAidePersonnaliséeLogementLocatif: bénéficiaire_aide_adulte_ou_enfant_handicapés conséquence égal à aide_finale - assertion plafond_dégressivité_d823_16 >=€ plafond_loyer_d823_16_2 *€ 2,5 + assertion plafond_dégressivité_d823_16 >= plafond_loyer_d823_16_2 * 2,5 ``` Le résultat ainsi obtenu est minoré d'un montant fixé forfaitairement par arrêté. @@ -1806,9 +1867,9 @@ champ d'application CalculAidePersonnaliséeLogementLocatif: égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans si - aide_finale -€ montant_forfaitaire_d823_16 >=€ 0€ + aide_finale - montant_forfaitaire_d823_16 >= 0€ alors - aide_finale -€ montant_forfaitaire_d823_16 + aide_finale - montant_forfaitaire_d823_16 sinon 0€ ``` @@ -1826,12 +1887,12 @@ champ d'application CalculAidePersonnaliséeLogementLocatif: contributions_sociales.montant de aide_finale dans soit aide_finale_moins_crds_arrondie égal à - arrondi_argent de ((aide_finale -€ crds) -€ 0,50€) + arrondi de ((aide_finale - crds) - 0,50€) dans si - aide_finale_moins_crds_arrondie +€ crds >=€ 0€ + aide_finale_moins_crds_arrondie + crds >= 0€ alors - aide_finale_moins_crds_arrondie +€ crds + aide_finale_moins_crds_arrondie + crds sinon 0€ ``` @@ -1853,7 +1914,7 @@ champ d'application CalculAidePersonnaliséeLogementLocatif: définition traitement_aide_finale de aide_finale état montant_minimal égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans si - aide_finale <€ montant_minimal_aide_d823_16 + aide_finale < montant_minimal_aide_d823_16 alors 0 € sinon aide_finale ``` @@ -1869,13 +1930,13 @@ $$\textrm{Pp} = \textrm{P0} + \textrm{Tp}\times (\textrm{R}-\textrm{R0})$$ champ d'application CalculAidePersonnaliséeLogementLocatif: définition participation_personnelle égal à soit participation_ressources égal à - (ressources_ménage_arrondies -€ abattement_forfaitaire_d823_17) *€ + (ressources_ménage_arrondies - abattement_forfaitaire_d823_17) * taux_prise_compte_ressources dans soit participation_ressources égal à - si participation_ressources <€ 0€ alors 0€ sinon participation_ressources + si participation_ressources < 0€ alors 0€ sinon participation_ressources dans - participation_minimale +€ participation_ressources + participation_minimale + participation_ressources ``` où : @@ -1902,7 +1963,7 @@ loyers de référence sont fixées par arrêté ; ```catala champ d'application CalculAidePersonnaliséeLogementLocatif: définition taux_prise_compte_ressources égal à - taux_composition_familiale +. taux_loyer_éligible + taux_composition_familiale + taux_loyer_éligible ``` 4° " R " représente les ressources du ménage, appréciées selon les modalités prévues @@ -1913,7 +1974,7 @@ champ d'application CalculAidePersonnaliséeLogement: définition ressources_ménage état avec_arrondi égal à # Cette formule arrondit à la centaine d'euros supérieure. Essayez quelques # exemples pour vous en convaincre, dont 100 et 150. - arrondi_argent de ((ressources_ménage *€ 1%) +€ 0,49€) *€ 100,0 + arrondi de ((ressources_ménage * 1%) + 0,49€) * 100,0 ``` 5° “ R0 ” est un abattement forfaitaire appliqué aux ressources du ménage. Il est fixé @@ -1996,7 +2057,7 @@ de la date d'emménagement. ```catala champ d'application ÉligibilitéPrimeDeDéménagement: règle condition_rang_enfant sous condition - (nombre pour personne_à_charge dans ménage.personnes_à_charge de + nombre de (personne_à_charge parmi ménage.personnes_à_charge tel que (selon personne_à_charge sous forme -- EnfantÀCharge: vrai -- AutrePersonneÀCharge: faux) @@ -2014,8 +2075,8 @@ champ d'application ÉligibilitéPrimeDeDéménagement: -- AvantPremierJourMoisCivilTroisièmeMoisDeGrossesse: faux -- AprèsPremierJourMoisCivilTroisièmeMoisDeGrossesse: vrai -- DateDeNaissance de date_naissance: - date_courante <=@ - ((premier_jour_du_mois de (date_naissance +@ 2 an))) +@ (-1 jour)) + date_courante <= + ((premier_jour_du_mois de (date_naissance + 2 an))) + (-1 jour)) ) conséquence rempli @@ -2046,7 +2107,7 @@ de la sécurité sociale et de l'agriculture. ```catala champ d'application ÉligibilitéPrimeDeDéménagement: définition montant_prime_déménagement égal à - si dépenses_justifiées_réellement_engagées <=€ plafond_d823_22 alors + si dépenses_justifiées_réellement_engagées <= plafond_d823_22 alors dépenses_justifiées_réellement_engagées sinon plafond_d823_22 @@ -2119,14 +2180,14 @@ brut du loyer et des charges. champ d'application ImpayéDépenseLogement sous condition mode_occupation_impayé sous forme ImpayéLoyer: définition montant_impayé égal à - si montant_dette >=€ seuil_impayé_dépense_de_logement + si montant_dette >= seuil_impayé_dépense_de_logement alors montant_dette sinon 0€ définition seuil_impayé_dépense_de_logement sous condition aide_versée sous forme Bénéficiaire conséquence égal à selon dépense_logement_brute sous forme - -- Loyer de loyer_brut: (loyer_brut +€ montant_charges) *€ 2,0 + -- Loyer de loyer_brut: (loyer_brut + montant_charges) * 2,0 -- Mensualité: 0€ # ne devrait pas arriver -- TotalAnnuelÉchéances: 0€ # ne devrait pas arriver ``` @@ -2142,7 +2203,7 @@ champ d'application ImpayéDépenseLogement sous condition aide_versée sous forme Bailleur conséquence égal à selon dépense_logement_nette sous forme - -- Loyer de loyer_net: (loyer_net +€ montant_charges) *€ 2,0 + -- Loyer de loyer_net: (loyer_net + montant_charges) * 2,0 -- Mensualité: 0€ # ne devrait pas arriver -- TotalAnnuelÉchéances: 0€ # ne devrait pas arriver ``` @@ -2164,7 +2225,7 @@ champ d'application ImpayéDépenseLogement sous condition mode_occupation_impayé sous forme ImpayéLoyer: définition dépense_logement_nette égal à selon dépense_logement_brute sous forme - -- Loyer de montant_loyer: Loyer contenu (montant_loyer -€ montant_apl) + -- Loyer de montant_loyer: Loyer contenu (montant_loyer - montant_apl) -- Mensualité de mensualité: Mensualité contenu mensualité # Ne devrait pas arriver -- TotalAnnuelÉchéances de total: TotalAnnuelÉchéances contenu total @@ -2182,7 +2243,7 @@ champ d'application ImpayéDépenseLogement sous condition mode_occupation_impayé sous forme ImpayéPrêt: définition montant_impayé égal à - si montant_dette >=€ seuil_impayé_dépense_de_logement + si montant_dette >= seuil_impayé_dépense_de_logement alors montant_dette sinon 0€ ``` @@ -2210,9 +2271,9 @@ champ d'application ImpayéDépenseLogement sous condition selon dépense_logement_brute sous forme -- Loyer: 0€ # Ne devrait pas arriver -- Mensualité de mensualité_brute: - mensualité_brute *€ 2,0 + mensualité_brute * 2,0 -- TotalAnnuelÉchéances de échéance_prêt_brute: - échéance_prêt_brute *€ (1,0 /. 6,0) + échéance_prêt_brute * (1,0 / 6,0) ``` 2° Lorsque l'aide personnelle au logement est versée directement auprès de @@ -2238,9 +2299,9 @@ champ d'application ImpayéDépenseLogement sous condition conséquence égal à selon dépense_logement_nette sous forme -- Loyer: 0€ # ne devrait pas arriver - -- Mensualité de mensualité_nette: mensualité_nette *€ 2,0 + -- Mensualité de mensualité_nette: mensualité_nette * 2,0 -- TotalAnnuelÉchéances de échéance_prêt_nette: - échéance_prêt_nette *€ (1,0 /. 6,0) + échéance_prêt_nette * (1,0 / 6,0) ``` @@ -2262,9 +2323,9 @@ champ d'application ImpayéDépenseLogement sous condition selon dépense_logement sous forme -- Loyer de loyer: Loyer contenu loyer # ne devrait pas arriver -- Mensualité de mensualité: - Mensualité contenu (mensualité -€ montant_apl) + Mensualité contenu (mensualité - montant_apl) -- TotalAnnuelÉchéances de total_échéances: - TotalAnnuelÉchéances contenu (total_échéances -€ (montant_apl *€ 12,0)) + TotalAnnuelÉchéances contenu (total_échéances - (montant_apl * 12,0)) ``` @@ -2923,8 +2984,8 @@ par l'article D. 331-64. champ d'application ÉligibilitéAidePersonnaliséeLogement: règle caractéristiques_prêt_l831_1_1 de prêt sous condition prêt.titulaire_prêt sous forme Demandeur et ( - prêt.Prêt.type_prêt sous forme D331_32 ou - prêt.Prêt.type_prêt sous forme D331_63_64) + prêt.type_prêt sous forme D331_32 ou + prêt.type_prêt sous forme D331_63_64) conséquence rempli ``` @@ -2959,8 +3020,8 @@ champ d'application ÉligibilitéAidePersonnaliséeLogement: règle caractéristiques_prêt_l831_1_1 de prêt sous condition prêt.titulaire_prêt sous forme VendeurQuandDemandeurAContratLocationAccession et ( - prêt.Prêt.type_prêt sous forme D331_59_8 ou - prêt.Prêt.type_prêt sous forme D331_76_1) + prêt.type_prêt sous forme D331_59_8 ou + prêt.type_prêt sous forme D331_76_1) conséquence rempli ``` @@ -3023,10 +3084,10 @@ $$\textrm{Af} = \textrm{K} \times (\textrm{L} + \textrm{C}-\textrm{L0})$$ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition aide_finale_formule égal à soit aide_finale égal à - (mensualité_éligible +€ montant_forfaitaire_charges_d832_10 -€ - mensualité_minimale) *€ coefficient_prise_en_charge_d832_10 + (mensualité_éligible + montant_forfaitaire_charges_d832_10 - + mensualité_minimale) * coefficient_prise_en_charge_d832_10 dans - si aide_finale <€ 0 € alors 0 € sinon aide_finale + si aide_finale < 0 € alors 0 € sinon aide_finale ``` où : @@ -3042,7 +3103,7 @@ de la composition familiale et de la finalité de l'opération ; ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition mensualité_éligible égal à - si mensualité_principale >€ plafond_mensualité_d832_10_3 + si mensualité_principale > plafond_mensualité_d832_10_3 alors plafond_mensualité_d832_10_3 sinon mensualité_principale ``` @@ -3069,9 +3130,9 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition traitement_aide_finale de aide_finale état minoration_forfaitaire égal à - si aide_finale -€ montant_forfaitaire_d832_10 >=€ 0€ + si aide_finale - montant_forfaitaire_d832_10 >= 0€ alors - aide_finale -€ montant_forfaitaire_d832_10 + aide_finale - montant_forfaitaire_d832_10 sinon 0€ ``` @@ -3083,9 +3144,9 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition traitement_aide_finale de aide_finale état abattement égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans soit aide_finale égal à - aide_finale -€ abattement_dépense_nette_minimale_d832_10 de aide_finale + aide_finale - abattement_dépense_nette_minimale_d832_10 de aide_finale dans - si aide_finale >=€ 0€ alors aide_finale sinon 0€ + si aide_finale >= 0€ alors aide_finale sinon 0€ ``` Ce dernier résultat, obtenu par application des dispositions précédentes, est diminué d'un montant @@ -3100,12 +3161,12 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: soit aide_finale égal à traitement_aide_finale de aide_finale dans soit crds égal à contributions_sociales.montant de aide_finale dans soit aide_finale_moins_crds_arrondie égal à - arrondi_argent de ((aide_finale -€ crds) -€ 0,50€) + arrondi de ((aide_finale - crds) - 0,50€) dans si - aide_finale_moins_crds_arrondie +€ crds >=€ 0€ + aide_finale_moins_crds_arrondie + crds >= 0€ alors - aide_finale_moins_crds_arrondie +€ crds + aide_finale_moins_crds_arrondie + crds sinon 0€ ``` @@ -3116,7 +3177,7 @@ il n'est pas procédé à son versement. champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition traitement_aide_finale de aide_finale état montant_minimal égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans - si aide_finale <€ montant_minimal_aide_d832_10 + si aide_finale < montant_minimal_aide_d832_10 alors 0 € sinon aide_finale ``` @@ -3131,9 +3192,9 @@ $$\textrm{K} = 0,95 - \frac{\textrm{R}}{\textrm{cm} \times \textrm{N}}$$ ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition coefficient_prise_en_charge_d832_10 état formule égal à - 0,95 -. - (ressources_ménage_arrondies /€ - (coefficient_multiplicateur_d832_11 *€ n_nombre_parts_d832_11) + 0,95 - + (ressources_ménage_arrondies / + (coefficient_multiplicateur_d832_11 * n_nombre_parts_d832_11) ) # Attention: ici coefficient_multiplicateur_d832_11 doit être un montant # d'argent sinon problème d'homogénéité dans la formule. @@ -3146,11 +3207,11 @@ Lorsque le calcul le porte à une valeur supérieure à 0,95, il est considéré ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: - définition coefficient_prise_en_charge_d832_10 état arrondi égal à - (arrondi_décimal de ((coefficient_prise_en_charge_d832_10 -. 0,005) - *. 100,0)) /. 100,0 + définition coefficient_prise_en_charge_d832_10 état coeff_arrondi égal à + (arrondi de ((coefficient_prise_en_charge_d832_10 - 0,005) + * 100,0)) / 100,0 définition coefficient_prise_en_charge_d832_10 état seuil égal à - si coefficient_prise_en_charge_d832_10 >=. 0,95 alors 0,95 sinon + si coefficient_prise_en_charge_d832_10 >= 0,95 alors 0,95 sinon coefficient_prise_en_charge_d832_10 ``` @@ -3210,7 +3271,7 @@ champ d'application CalculNombrePartsAccessionPropriété: sinon (si nombre_personnes_à_charge = 4 alors 4,3 sinon - ( 4,3 +. (0,5 *. (entier_vers_décimal de + ( 4,3 + (0,5 * (décimal de (nombre_personnes_à_charge - 4)))) )))) @@ -3310,7 +3371,7 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: soit plafond_entrée égal à calcul_plafond_mensualité_d832_10_3 de date_entrée_logement dans - si plafond_signature <€ plafond_entrée + si plafond_signature < plafond_entrée alors plafond_entrée sinon plafond_signature ``` @@ -3382,30 +3443,30 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: # décimal plutôt que argent qui arrondi systématiquement au centime près # à chaque étape de calcul. soit ressources_ménage_arrondies égal à - argent_vers_décimal de ressources_ménage_arrondies + décimal de ressources_ménage_arrondies dans soit montant_limite_tranches_d832_15_1 égal à - argent_vers_décimal de montant_limite_tranches_d832_15_1 + décimal de montant_limite_tranches_d832_15_1 dans - décimal_vers_argent de ( + argent de ( ((si # Pour la tranche supérieure - ressources_ménage_arrondies >=. - (montant_limite_tranches_d832_15_1 *. n_nombre_parts_d832_11) + ressources_ménage_arrondies >= + (montant_limite_tranches_d832_15_1 * n_nombre_parts_d832_11) alors - ((ressources_ménage_arrondies -. - (montant_limite_tranches_d832_15_1 *. n_nombre_parts_d832_11)) *. + ((ressources_ménage_arrondies - + (montant_limite_tranches_d832_15_1 * n_nombre_parts_d832_11)) * taux_tranche_supérieure_d832_15_1) - sinon 0,0) +. + sinon 0,0) + (si # Pour la tranche inférieure - ressources_ménage_arrondies <=. - montant_limite_tranches_d832_15_1 *. n_nombre_parts_d832_11 + ressources_ménage_arrondies <= + montant_limite_tranches_d832_15_1 * n_nombre_parts_d832_11 alors - ressources_ménage_arrondies *. taux_tranche_inférieure_d832_15_1 + ressources_ménage_arrondies * taux_tranche_inférieure_d832_15_1 sinon - ((montant_limite_tranches_d832_15_1 *. n_nombre_parts_d832_11) *. - taux_tranche_inférieure_d832_15_1))) /. 12,0) + ((montant_limite_tranches_d832_15_1 * n_nombre_parts_d832_11) * + taux_tranche_inférieure_d832_15_1))) / 12,0) # PS: les ressources ont déjà été arrondies, voir D823-17. ``` @@ -3467,9 +3528,9 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: exception définition dépense_nette_minimale_d832_10 de aide_calculée_2_9_d832_10 sous condition - date_signature_prêt >=@ |1999-06-30| + date_signature_prêt >= |1999-06-30| conséquence égal à - mensualité_principale +€ montant_forfaitaire_charges_d832_10 -€ + mensualité_principale + montant_forfaitaire_charges_d832_10 - aide_calculée_2_9_d832_10 ``` @@ -3479,7 +3540,7 @@ déclarée le montant mensuel de l'aide calculé de la même façon. ```catala champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition dépense_nette_minimale_d832_10 de aide_calculée_2_9_d832_10 égal à - mensualité_principale -€ aide_calculée_2_9_d832_10 + mensualité_principale - aide_calculée_2_9_d832_10 ``` Lorsque la dépense nette ainsi calculée est inférieure au produit des ressources et d'un @@ -3495,10 +3556,10 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: soit dépense_nette_minimale égal à dépense_nette_minimale_d832_10 de aide_calculée_2_9_d832_10 dans - si dépense_nette_minimale<=€ - ressources_ménage_avec_d832_18 *€ coefficient_multiplicateur_d832_17_3 + si dépense_nette_minimale<= + ressources_ménage_avec_d832_18 * coefficient_multiplicateur_d832_17_3 alors - ressources_ménage_avec_d832_18 *€ coefficient_multiplicateur_d832_17_3 -€ + ressources_ménage_avec_d832_18 * coefficient_multiplicateur_d832_17_3 - dépense_nette_minimale sinon 0€ @@ -3524,10 +3585,10 @@ et R. 822-13 à R. 822-17 . # Non, selon réponse de DGALN/DHUP/FE4 du 25/05/2022. champ d'application CalculAidePersonnaliséeLogementAccessionPropriété: définition ressources_ménage_avec_d832_18 égal à - si ressources_ménage_arrondies <=€ mensualité_principale *€ + si ressources_ménage_arrondies <= mensualité_principale * coefficient_multiplicateur_d832_18 alors - mensualité_principale *€ coefficient_multiplicateur_d832_18 + mensualité_principale * coefficient_multiplicateur_d832_18 sinon ressources_ménage_arrondies exception définition ressources_ménage_avec_d832_18 sous condition @@ -3674,10 +3735,10 @@ $$\textrm{Af} = \textrm{K} \times (\textrm{E}-\textrm{E0})$$ champ d'application CalculAidePersonnaliséeLogementFoyer: définition aide_finale_formule égal à soit aide_finale égal à - (équivalence_loyer_éligible -€ équivalence_loyer_minimale) *€ + (équivalence_loyer_éligible - équivalence_loyer_minimale) * coefficient_prise_en_charge_d832_25 dans - si aide_finale <€ 0 € alors 0 € sinon aide_finale + si aide_finale < 0 € alors 0 € sinon aide_finale ``` où : @@ -3694,7 +3755,7 @@ de la zone géographique et de la composition familiale ; ```catala champ d'application CalculAidePersonnaliséeLogementFoyer: définition équivalence_loyer_éligible égal à - si redevance >=€ plafond_équivalence_loyer_éligible alors + si redevance >= plafond_équivalence_loyer_éligible alors plafond_équivalence_loyer_éligible sinon redevance @@ -3722,9 +3783,9 @@ champ d'application CalculAidePersonnaliséeLogementFoyer: définition traitement_aide_finale de aide_finale état minoration_forfaitaire égal à - si aide_finale -€ montant_forfaitaire_d832_24 >=€ 0€ + si aide_finale - montant_forfaitaire_d832_24 >= 0€ alors - aide_finale -€ montant_forfaitaire_d832_24 + aide_finale - montant_forfaitaire_d832_24 sinon 0€ ``` @@ -3736,9 +3797,9 @@ champ d'application CalculAidePersonnaliséeLogementFoyer: définition traitement_aide_finale de aide_finale état abattement égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans soit aide_finale égal à - aide_finale -€ abattement_dépense_nette_minimale_d832_27 de aide_finale + aide_finale - abattement_dépense_nette_minimale_d832_27 de aide_finale dans - si aide_finale >=€ 0€ alors aide_finale sinon 0€ + si aide_finale >= 0€ alors aide_finale sinon 0€ ``` Ce dernier résultat est diminué d'un montant représentatif des contributions sociales qui @@ -3755,11 +3816,11 @@ champ d'application CalculAidePersonnaliséeLogementFoyer: contributions_sociales.montant de aide_finale dans soit aide_finale_moins_crds_arrondie égal à - arrondi_argent de ((aide_finale -€ crds) -€ 0,50€) + arrondi de ((aide_finale - crds) - 0,50€) dans si - aide_finale_moins_crds_arrondie +€ crds >=€ 0€ + aide_finale_moins_crds_arrondie + crds >= 0€ alors - aide_finale_moins_crds_arrondie +€ crds + aide_finale_moins_crds_arrondie + crds sinon 0€ ``` @@ -3770,7 +3831,7 @@ Lorsque le montant mensuel de l'aide, calculé selon les modalités précédente champ d'application CalculAidePersonnaliséeLogementFoyer: définition traitement_aide_finale de aide_finale état montant_minimal égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans - si aide_finale <€ montant_minimal_aide_d823_24 + si aide_finale < montant_minimal_aide_d823_24 alors 0 € sinon aide_finale ``` @@ -3789,9 +3850,9 @@ champ d'application CalculAidePersonnaliséeLogementFoyer: définition condition_2_du_832_25 égal à selon type_logement_foyer sous forme -- FoyerJeunesTrvailleursOuMigrantsConventionnéL353_2Avant1995: - date_conventionnement >=@ |1990-09-30| + date_conventionnement >= |1990-09-30| -- RésidenceSociale: - date_conventionnement >=@ |1994-12-31| + date_conventionnement >= |1994-12-31| -- n'importe quel: faux ``` @@ -3802,15 +3863,15 @@ $$\textrm{K} = 0,95 - \frac{\textrm{R} - \textrm{r} \times \textrm{N}}{\textrm{c ```catala champ d'application CalculAidePersonnaliséeLogementFoyer: définition coefficient_prise_en_charge_d832_25 état formule égal à - soit dénominateur égal à ressources_ménage_arrondies -€ - coefficient_r_d832_25 *€ n_nombre_parts_d832_25 + soit dénominateur égal à ressources_ménage_arrondies - + coefficient_r_d832_25 * n_nombre_parts_d832_25 dans soit dénominateur égal à - si dénominateur <€ 0€ alors 0€ sinon dénominateur + si dénominateur < 0€ alors 0€ sinon dénominateur dans - 0,95 -. - (dénominateur /€ - (coefficient_multiplicateur_d832_25 *€ n_nombre_parts_d832_25) + 0,95 - + (dénominateur / + (coefficient_multiplicateur_d832_25 * n_nombre_parts_d832_25) ) ``` @@ -3822,11 +3883,11 @@ calcul le porte à une valeur supérieure à 0,95, il est considéré égal à 0 ```catala champ d'application CalculAidePersonnaliséeLogementFoyer: - définition coefficient_prise_en_charge_d832_25 état arrondi égal à - (arrondi_décimal de ((coefficient_prise_en_charge_d832_25 -. 0,005) - *. 100,0)) /. 100,0 + définition coefficient_prise_en_charge_d832_25 état coeff_arrondi égal à + (arrondi de ((coefficient_prise_en_charge_d832_25 - 0,005) + * 100,0)) / 100,0 définition coefficient_prise_en_charge_d832_25 état seuil égal à - si coefficient_prise_en_charge_d832_25 >=. 0,95 alors 0,95 sinon + si coefficient_prise_en_charge_d832_25 >= 0,95 alors 0,95 sinon coefficient_prise_en_charge_d832_25 ``` @@ -3866,7 +3927,7 @@ champ d'application CalculNombrePartLogementFoyer: sinon (si nombre_personnes_à_charge = 4 alors 4,3 sinon - ( 4,3 +. (0,5 *. (entier_vers_décimal de + ( 4,3 + (0,5 * (décimal de (nombre_personnes_à_charge - 4)))) )))) @@ -3891,9 +3952,9 @@ champ d'application CalculAidePersonnaliséeLogementFoyer: sous condition condition_2_du_832_25 conséquence égal à - 0,90 -. - (ressources_ménage_arrondies /€ - (coefficient_multiplicateur_d832_25 *€ n_nombre_parts_d832_25) + 0,90 - + (ressources_ménage_arrondies / + (coefficient_multiplicateur_d832_25 * n_nombre_parts_d832_25) ) ``` où : @@ -3904,17 +3965,17 @@ lorsque le calcul le porte à une valeur supérieure à 0,90, il est considéré ```catala champ d'application CalculAidePersonnaliséeLogementFoyer: - exception définition coefficient_prise_en_charge_d832_25 état arrondi + exception définition coefficient_prise_en_charge_d832_25 état coeff_arrondi sous condition condition_2_du_832_25 conséquence égal à - (arrondi_décimal de ((coefficient_prise_en_charge_d832_25 -. 0,005) - *. 100,0)) /. 100,0 + (arrondi de ((coefficient_prise_en_charge_d832_25 - 0,005) + * 100,0)) / 100,0 exception définition coefficient_prise_en_charge_d832_25 état seuil sous condition condition_2_du_832_25 conséquence égal à - si coefficient_prise_en_charge_d832_25 >=. 0,90 alors 0,90 sinon + si coefficient_prise_en_charge_d832_25 >= 0,90 alors 0,90 sinon coefficient_prise_en_charge_d832_25 ``` @@ -3954,7 +4015,7 @@ champ d'application CalculNombrePartLogementFoyer: sinon (si nombre_personnes_à_charge = 4 alors 4,3 sinon - ( 4,3 +. (0,5 *. (entier_vers_décimal de + ( 4,3 + (0,5 * (décimal de (nombre_personnes_à_charge - 4)))) )))) ``` @@ -3975,45 +4036,45 @@ nombre de parts " N ", le total étant divisé par douze. # à chaque étape de calcul. champ d'application CalculÉquivalenceLoyerMinimale: définition tranches_revenus_d832_26_multipliées égal à - application pour tranche dans tranches_revenus_d832_26 de TrancheRevenuDécimal { - -- haut: (selon tranche.TrancheRevenu.haut sous forme + -- haut: (selon tranche.haut sous forme -- LimiteTranche.Infini: LimiteTrancheDécimal.Infini -- LimiteTranche.Revenu de tranche_haut: LimiteTrancheDécimal.Revenu contenu - ((argent_vers_décimal de tranche_haut) *. n_nombre_parts_d832_25)) - -- bas: argent_vers_décimal de tranche.TrancheRevenu.bas *. + ((décimal de tranche_haut) * n_nombre_parts_d832_25)) + -- bas: décimal de tranche.bas * n_nombre_parts_d832_25 - -- taux: tranche.TrancheRevenu.taux + -- taux: tranche.taux } + pour tranche parmi tranches_revenus_d832_26 définition montant égal à soit ressources_ménage_arrondies égal à - argent_vers_décimal de ressources_ménage_arrondies + décimal de ressources_ménage_arrondies dans - décimal_vers_argent de ( - (((somme décimal pour tranche dans tranches_revenus_d832_26_multipliées de - (si - ressources_ménage_arrondies <=. tranche.TrancheRevenuDécimal.bas - alors 0,0 - sinon - (selon tranche.TrancheRevenuDécimal.haut sous forme - -- LimiteTrancheDécimal.Revenu de tranche_haut: - (si - ressources_ménage_arrondies >=. tranche_haut - alors - (tranche_haut -. tranche.TrancheRevenuDécimal.bas) *. - tranche.TrancheRevenuDécimal.taux + argent de ( + ((somme décimal de + ((si ressources_ménage_arrondies <= tranche.bas alors 0,0 sinon - ((ressources_ménage_arrondies -. - tranche.TrancheRevenuDécimal.bas) *. - tranche.TrancheRevenuDécimal.taux)) - -- LimiteTrancheDécimal.Infini: - (ressources_ménage_arrondies -. tranche.TrancheRevenuDécimal.bas) *. - tranche.TrancheRevenuDécimal.taux) - ))) +. - argent_vers_décimal de montant_forfaitaire_d832_26 *. - n_nombre_parts_d832_25) /. 12,0) + selon tranche.haut sous forme + -- LimiteTrancheDécimal.Revenu de tranche_haut: ( + si + ressources_ménage_arrondies >= tranche_haut + alors + (tranche_haut - tranche.bas) * + tranche.taux + sinon + (ressources_ménage_arrondies - tranche.bas) * + tranche.taux + ) + -- LimiteTrancheDécimal.Infini: + (ressources_ménage_arrondies - tranche.bas) * + tranche.taux)) + pour tranche parmi tranches_revenus_d832_26_multipliées) + + + décimal de montant_forfaitaire_d832_26 + * n_nombre_parts_d832_25) + / 12,0) ``` Toutefois, pour les logements-foyers de jeunes travailleurs et pour les résidences sociales @@ -4028,30 +4089,30 @@ champ d'application CalculÉquivalenceLoyerMinimale: condition_2_du_832_25 conséquence égal à soit ressources_ménage_arrondies égal à - argent_vers_décimal de ressources_ménage_arrondies + décimal de ressources_ménage_arrondies dans - décimal_vers_argent de ( - (((somme décimal pour tranche dans tranches_revenus_d832_26_multipliées de - (si - ressources_ménage_arrondies <=. tranche.TrancheRevenuDécimal.bas - alors 0,0 - sinon - (selon tranche.TrancheRevenuDécimal.haut sous forme - -- LimiteTrancheDécimal.Revenu de tranche_haut: - (si - ressources_ménage_arrondies >=. tranche_haut - alors - (tranche_haut -. tranche.TrancheRevenuDécimal.bas) *. - tranche.TrancheRevenuDécimal.taux - sinon - ((ressources_ménage_arrondies -. - tranche.TrancheRevenuDécimal.bas) *. - tranche.TrancheRevenuDécimal.taux)) - -- LimiteTrancheDécimal.Infini: - (ressources_ménage_arrondies -. tranche.TrancheRevenuDécimal.bas) *. - tranche.TrancheRevenuDécimal.taux) - ))) +. - argent_vers_décimal de montant_forfaitaire_d832_26) /. 12,0) + argent de ( + ((somme décimal de + ((si ressources_ménage_arrondies <= tranche.bas alors 0,0 + sinon + (selon tranche.haut sous forme + -- LimiteTrancheDécimal.Revenu de tranche_haut: ( + si + ressources_ménage_arrondies >= tranche_haut + alors + (tranche_haut - tranche.bas) * + tranche.taux + sinon + (ressources_ménage_arrondies - tranche.bas) * + tranche.taux + ) + -- LimiteTrancheDécimal.Infini: + (ressources_ménage_arrondies - tranche.bas) * + tranche.taux)) + pour tranche parmi tranches_revenus_d832_26_multipliées)) + + + décimal de montant_forfaitaire_d832_26) + / 12,0) ``` Les pourcentages et le coefficient " N " sont appliqués à la limite supérieure de l'intervalle @@ -4075,7 +4136,7 @@ l'aide est égal à la différence constatée. champ d'application CalculAidePersonnaliséeLogementFoyer: définition dépense_nette_minimale_d832_27 de aide_calculée_1_8_d832_24 égal à - équivalence_loyer_éligible -€ aide_calculée_1_8_d832_24 + équivalence_loyer_éligible - aide_calculée_1_8_d832_24 définition abattement_dépense_nette_minimale_d832_27 de aide_calculée_1_8_d832_24 @@ -4083,8 +4144,8 @@ champ d'application CalculAidePersonnaliséeLogementFoyer: soit dépense_nette_minimale égal à dépense_nette_minimale_d832_27 de aide_calculée_1_8_d832_24 dans - si dépense_nette_minimale <=€ montant_forfaitaire_d832_27 - alors montant_forfaitaire_d832_27 -€ dépense_nette_minimale + si dépense_nette_minimale <= montant_forfaitaire_d832_27 + alors montant_forfaitaire_d832_27 - dépense_nette_minimale sinon 0€ ``` @@ -4149,7 +4210,7 @@ payé dans la limite du loyer-plafond. champ d'application CalculAidePersonnaliséeLogementLocatif: définition loyer_principal état avec_réduction_meublé égal à si logement_meublé_d842_2 alors - loyer_principal *€ (2,0 /. 3,0) + loyer_principal * (2,0 / 3,0) sinon loyer_principal ``` @@ -4206,14 +4267,14 @@ du 3° de l'article L. 823-1 . champ d'application CalculAllocationLogementLocatif sous condition selon changement_logement_d842_4 sous forme -- Changement de infos: - loyer_principal >=€ infos.ancien_loyer_principal + loyer_principal >= infos.ancien_loyer_principal -- PasDeChangement: faux: exception définition aide_finale_formule égal à selon changement_logement_d842_4 sous forme -- Changement de infos: - loyer_principal -€ - (infos.ancien_loyer_principal -€ infos.ancienne_allocation_logement) + loyer_principal - + (infos.ancien_loyer_principal - infos.ancienne_allocation_logement) -- n'importe quel: 0 € # N'arrive pas # TODO juridique: confirmer cette ligne @@ -4320,9 +4381,9 @@ $$\textrm{Af} = \textrm{K} \times (\textrm{L} + \textrm{C}-\textrm{L0})$$ champ d'application CalculAllocationLogementAccessionPropriété: définition aide_finale_formule égal à ( - mensualité_éligible +€ montant_forfaitaire_charges -€ + mensualité_éligible + montant_forfaitaire_charges - mensualité_minimale - ) *€ coefficient_prise_en_charge + ) * coefficient_prise_en_charge ``` où : @@ -4359,7 +4420,7 @@ composition familiale ; ```catala champ d'application CalculAllocationLogementAccessionPropriété: définition mensualité_éligible égal à - si mensualité_principale >€ plafond_mensualité_d842_6 alors + si mensualité_principale > plafond_mensualité_d842_6 alors plafond_mensualité_d842_6 sinon mensualité_principale @@ -4395,10 +4456,10 @@ champ d'application CalculAllocationLogementAccessionPropriété: définition traitement_aide_finale de aide_finale état minoration_forfaitaire égal à - si aide_finale -€ montant_forfaitaire_d842_6 <€ 0€ alors + si aide_finale - montant_forfaitaire_d842_6 < 0€ alors 0 € sinon - (aide_finale -€ montant_forfaitaire_d842_6) + (aide_finale - montant_forfaitaire_d842_6) ``` Le montant ainsi obtenu est minoré d'un abattement au titre de la dépense nette minimale, @@ -4410,9 +4471,9 @@ champ d'application CalculAllocationLogementAccessionPropriété: égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans soit abattement égal à abattement_dépense_nette_minimale de aide_finale dans - si aide_finale <€ abattement + si aide_finale < abattement alors 0 € - sinon aide_finale -€ abattement + sinon aide_finale - abattement ``` Ce dernier résultat est diminué d'un montant représentatif des contributions sociales qui @@ -4426,12 +4487,12 @@ champ d'application CalculAllocationLogementAccessionPropriété: soit aide_finale égal à traitement_aide_finale de aide_finale dans soit crds égal à contributions_sociales.montant de aide_finale dans soit aide_finale_moins_crds_arrondie égal à - arrondi_argent de ((aide_finale -€ crds) -€ 0,50€) + arrondi de ((aide_finale - crds) - 0,50€) dans si - aide_finale_moins_crds_arrondie +€ crds >=€ 0€ + aide_finale_moins_crds_arrondie + crds >= 0€ alors - aide_finale_moins_crds_arrondie +€ crds + aide_finale_moins_crds_arrondie + crds sinon 0€ ``` @@ -4442,7 +4503,7 @@ par arrêté, il n'est pas procédé à son versement. champ d'application CalculAllocationLogementAccessionPropriété: définition traitement_aide_finale de aide_finale état montant_minimal égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans - si aide_finale <€ montant_minimal_aide_d842_6 + si aide_finale < montant_minimal_aide_d842_6 alors 0 € sinon aide_finale ``` @@ -4531,7 +4592,7 @@ champ d'application CalculAllocationLogementAccessionPropriété: calcul_plafond_mensualité_d842_6 de date_entrée_logement dans si - plafond_signature <€ plafond_entrée + plafond_signature < plafond_entrée alors plafond_entrée sinon plafond_signature ``` @@ -4574,7 +4635,7 @@ des charges, le montant mensuel de l'allocation calculé selon les dispositions ```catala champ d'application CalculAllocationLogementAccessionPropriété: définition dépense_nette_minimale de allocation_mensuelle égal à - charges_mensuelles_prêt +€ montant_forfaitaire_charges -€ + charges_mensuelles_prêt + montant_forfaitaire_charges - allocation_mensuelle ``` @@ -4589,9 +4650,9 @@ champ d'application CalculAllocationLogementAccessionPropriété: soit dépense_nette_minimale égal à dépense_nette_minimale de allocation_mensuelle dans si - dépense_nette_minimale <€ seuil_minimal_dépense_nette_minimale + dépense_nette_minimale < seuil_minimal_dépense_nette_minimale alors - seuil_minimal_dépense_nette_minimale -€ dépense_nette_minimale + seuil_minimal_dépense_nette_minimale - dépense_nette_minimale sinon 0 € @@ -4610,9 +4671,9 @@ champ d'application CalculAllocationLogementAccessionPropriété: (type_travaux_logement sous forme TypeTravauxLogementR842_5.PasDeTravaux ou type_travaux_logement sous forme ObjectifDécenceLogement ou type_travaux_logement sous forme AgrandirOuRendreHabitableD331_63) et - date_signature_prêt >=@ |1999-07-01| + date_signature_prêt >= |1999-07-01| conséquence égal à - ressources_ménage_arrondies *€ coefficient_d842_11 + ressources_ménage_arrondies * coefficient_d842_11 ``` Les ressources sont appréciées selon les modalités prévues à la section 2 du chapitre II @@ -4632,15 +4693,15 @@ de l'article R. 842-5 ; ```catala champ d'application CalculAllocationLogementAccessionPropriété: définition seuil_minimal_ressources_ménage sous condition - ((date_signature_prêt >=@ |1992-09-30| et - date_signature_prêt <=@ |1994-09-30|) ou - (date_signature_prêt >@ |1994-09-30| et + ((date_signature_prêt >= |1992-09-30| et + date_signature_prêt <= |1994-09-30|) ou + (date_signature_prêt > |1994-09-30| et (type_travaux_logement sous forme TypeTravauxLogementR842_5.PasDeTravaux ou type_travaux_logement sous forme ObjectifDécenceLogement ou type_travaux_logement sous forme AgrandirOuRendreHabitableD331_63) )) conséquence égal à - mensualité_principale *€ coefficient_d842_12 + mensualité_principale * coefficient_d842_12 ``` 2° A un montant forfaitaire, fixé par arrêté, s'agissant des prêts signés après le @@ -4650,7 +4711,7 @@ l'article R. 842-5 ; ```catala champ d'application CalculAllocationLogementAccessionPropriété: définition seuil_minimal_ressources_ménage sous condition - date_signature_prêt >@ |1994-09-30| et + date_signature_prêt > |1994-09-30| et type_travaux_logement sous forme PrévuDansListeR321_15 conséquence égal à montant_forfaitaire_d842_12 @@ -4662,10 +4723,10 @@ dans l'une des situations mentionnées aux articles R. 822-11 et R. 822-13 à R. ```catala champ d'application CalculAllocationLogementAccessionPropriété: définition ressources_ménage_arrondies état seuil égal à - si ressources_ménage_arrondies <=€ seuil_minimal_ressources_ménage alors + si ressources_ménage_arrondies <= seuil_minimal_ressources_ménage alors # Cette formule arrondit à la centaine d'euros supérieure. Essayez quelques # exemples pour vous en convaincre, dont 100 et 150. - (arrondi_argent de ((seuil_minimal_ressources_ménage +€ 49,99€) *€ 1%)) *€ + (arrondi de ((seuil_minimal_ressources_ménage + 49,99€) * 1%)) * 100,0 sinon ressources_ménage_arrondies @@ -4721,8 +4782,8 @@ $$\textrm{Af} = \textrm{K} \times (\textrm{L} + \textrm{C}-\textrm{L0})$$ ```catala champ d'application CalculAllocationLogementFoyer: définition aide_finale_formule égal à - (équivalence_loyer +€ - montant_forfaitaire_charges -€ loyer_minimal) *€ + (équivalence_loyer + + montant_forfaitaire_charges - loyer_minimal) * coefficient_prise_en_charge ``` @@ -4750,7 +4811,7 @@ champ d'application CalculAllocationLogement: définition ressources_ménage état avec_arrondi égal à # Cette formule arrondit à la centaine d'euros supérieure. Essayez quelques # exemples pour vous en convaincre, dont 100 et 150. - arrondi_argent de ((ressources_ménage *€ 1%) +€ 0,49€) *€ 100,0 + arrondi de ((ressources_ménage * 1%) + 0,49€) * 100,0 ``` 3° " L " est l'équivalence de loyer prise en compte, déterminée selon les dispositions @@ -4789,10 +4850,10 @@ Le montant ainsi calculé est minoré d'un montant fixé forfaitairement par arr champ d'application CalculAllocationLogementFoyer: définition traitement_aide_finale de aide_finale état minoration_forfaitaire égal à - si aide_finale -€ montant_forfaitaire_d842_15 <€ 0€ alors + si aide_finale - montant_forfaitaire_d842_15 < 0€ alors 0 € sinon - (aide_finale -€ montant_forfaitaire_d842_15) + (aide_finale - montant_forfaitaire_d842_15) ``` Ce résultat est minoré d'un abattement au titre de la dépense nette minimale. Les @@ -4805,9 +4866,9 @@ champ d'application CalculAllocationLogementFoyer: égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans soit abattement égal à abattement_dépense_nette_minimale de aide_finale dans - si aide_finale -€ abattement <€ 0€ + si aide_finale - abattement < 0€ alors 0 € - sinon aide_finale -€ abattement + sinon aide_finale - abattement ``` Si le montant obtenu par application des dispositions des alinéas précédents est @@ -4822,7 +4883,7 @@ champ d'application CalculAllocationLogementFoyer: définition traitement_aide_finale de aide_finale état redevance égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans - si aide_finale >€ redevance + si aide_finale > redevance alors redevance sinon aide_finale ``` @@ -4839,12 +4900,12 @@ champ d'application CalculAllocationLogementFoyer: soit aide_finale égal à traitement_aide_finale de aide_finale dans soit crds égal à contributions_sociales.montant de aide_finale dans soit aide_finale_moins_crds_arrondie égal à - arrondi_argent de ((aide_finale -€ crds) -€ 0,50€) + arrondi de ((aide_finale - crds) - 0,50€) dans si - aide_finale_moins_crds_arrondie +€ crds >=€ 0€ + aide_finale_moins_crds_arrondie + crds >= 0€ alors - aide_finale_moins_crds_arrondie +€ crds + aide_finale_moins_crds_arrondie + crds sinon 0€ ``` @@ -4856,7 +4917,7 @@ son versement. champ d'application CalculAllocationLogementFoyer: définition traitement_aide_finale de aide_finale état montant_minimal égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans - si aide_finale <€ montant_minimal_aide_d842_15 + si aide_finale < montant_minimal_aide_d842_15 alors 0 € sinon aide_finale ``` @@ -4900,7 +4961,7 @@ calculé selon les modalités précisées aux deuxième à neuvième alinéas du ```catala champ d'application CalculAllocationLogementFoyer: définition dépense_nette_minimale de allocation_mensuelle égal à - équivalence_loyer +€ montant_forfaitaire_charges -€ allocation_mensuelle + équivalence_loyer + montant_forfaitaire_charges - allocation_mensuelle ``` Lorsque sa valeur est inférieure à un montant fixé par arrêté, l'abattement sur @@ -4909,10 +4970,10 @@ le montant mensuel de l'aide est égal à la différence constatée. ```catala champ d'application CalculAllocationLogementFoyer: définition abattement_dépense_nette_minimale de allocation_mensuelle égal à - si dépense_nette_minimale de allocation_mensuelle <€ + si dépense_nette_minimale de allocation_mensuelle < montant_minimal_dépense_nette_d842_17 alors - montant_minimal_dépense_nette_d842_17 -€ + montant_minimal_dépense_nette_d842_17 - dépense_nette_minimale de allocation_mensuelle sinon 0€ diff --git a/examples/aides_logement/code_sécurité_sociale.catala_fr b/examples/aides_logement/code_sécurité_sociale.catala_fr index 43ff1f81..7ae55850 100644 --- a/examples/aides_logement/code_sécurité_sociale.catala_fr +++ b/examples/aides_logement/code_sécurité_sociale.catala_fr @@ -116,12 +116,12 @@ soixante-deux ans pour les assurés nés à compter du 1er janvier 1955. ```catala champ d'application OuvertureDroitsRetraite: définition âge_ouverture_droit sous condition - date_naissance_assuré >=@ |1955-01-01| + date_naissance_assuré >= |1955-01-01| conséquence égal à 62 an champ d'application ÉligibilitéAidesPersonnelleLogement: définition ouverture_droits_retraite.date_naissance_assuré égal à - demandeur.Demandeur.date_naissance + demandeur.date_naissance définition âge_l161_17_2_sécu égal à ouverture_droits_retraite.âge_ouverture_droit ``` @@ -160,7 +160,7 @@ de cinq années ; ```catala champ d'application ÉligibilitéAidesPersonnelleLogement: - définition âge_l351_8_1_sécu égal à âge_l161_17_2_sécu +^ 5 an + définition âge_l351_8_1_sécu égal à âge_l161_17_2_sécu + 5 an ``` 1° bis Les assurés ayant interrompu leur activité professionnelle en raison de @@ -253,7 +253,7 @@ L'âge prévu au second alinéa de l'article L. 161-17-2 est fixé à : ```catala champ d'application OuvertureDroitsRetraite: définition âge_ouverture_droit sous condition - date_naissance_assuré <@ |1951-07-01| + date_naissance_assuré < |1951-07-01| conséquence égal à 60 an ``` @@ -263,9 +263,9 @@ champ d'application OuvertureDroitsRetraite: ```catala champ d'application OuvertureDroitsRetraite: définition âge_ouverture_droit sous condition - date_naissance_assuré >=@ |1951-07-01| et - date_naissance_assuré <=@ |1951-12-31| - conséquence égal à 60 an +^ 4 mois + date_naissance_assuré >= |1951-07-01| et + date_naissance_assuré <= |1951-12-31| + conséquence égal à 60 an + 4 mois ``` 3° Soixante ans et neuf mois pour les assurés nés en 1952 ; @@ -274,7 +274,7 @@ champ d'application OuvertureDroitsRetraite: champ d'application OuvertureDroitsRetraite: définition âge_ouverture_droit sous condition accès_année de date_naissance_assuré = 1952 - conséquence égal à 60 an +^ 9 mois + conséquence égal à 60 an + 9 mois ``` 4° Soixante et un ans et deux mois pour les assurés nés en 1953 ; @@ -283,7 +283,7 @@ champ d'application OuvertureDroitsRetraite: champ d'application OuvertureDroitsRetraite: définition âge_ouverture_droit sous condition accès_année de date_naissance_assuré = 1953 - conséquence égal à 61 an +^ 2 mois + conséquence égal à 61 an + 2 mois ``` 5° Soixante et un ans et sept mois pour les assurés nés en 1954 ; @@ -292,7 +292,7 @@ champ d'application OuvertureDroitsRetraite: champ d'application OuvertureDroitsRetraite: définition âge_ouverture_droit sous condition accès_année de date_naissance_assuré = 1954 - conséquence égal à 61 an +^ 7 mois + conséquence égal à 61 an + 7 mois ``` 6° Soixante deux ans pour les assurés nés à compter du 1er janvier 1955. @@ -326,18 +326,18 @@ janvier 2019 et à 10 838,40 euros par an à compter du 1er janvier 2020 ; champ d'application ÉligibilitéAidesPersonnelleLogement: définition plafond_individuel_l815_9_sécu sous condition - date_courante >=@ |2018-01-04| et - date_courante <@ |2019-01-01| + date_courante >= |2018-01-04| et + date_courante < |2019-01-01| conséquence égal à 9 998,40€ définition plafond_individuel_l815_9_sécu sous condition - date_courante >=@ |2019-01-01| et - date_courante <@ |2020-01-01| + date_courante >= |2019-01-01| et + date_courante < |2020-01-01| conséquence égal à 10 418,40€ définition plafond_individuel_l815_9_sécu sous condition - date_courante >=@ |2020-01-04| et - date_courante <@ |2021-01-01| + date_courante >= |2020-01-04| et + date_courante < |2021-01-01| conséquence égal à 10 838,40€ ``` diff --git a/examples/aides_logement/prologue.catala_fr b/examples/aides_logement/prologue.catala_fr index 300faf97..c52c7a80 100644 --- a/examples/aides_logement/prologue.catala_fr +++ b/examples/aides_logement/prologue.catala_fr @@ -286,7 +286,7 @@ déclaration énumération ModeOccupationImpayé: déclaration champ d'application ÉligibilitéAidesPersonnelleLogement: entrée ménage contenu Ménage entrée demandeur contenu Demandeur - entrée sortie date_courante contenu date + entrée résultat date_courante contenu date # Différentes conditions pour l'éligibilité interne condition_prêt condition dépend de Prêt @@ -317,11 +317,11 @@ déclaration champ d'application ÉligibilitéAidesPersonnelleLogement: interne plafond_individuel_l815_9_sécu contenu argent ouverture_droits_retraite champ d'application OuvertureDroitsRetraite - sortie éligibilité condition - sortie nombre_personnes_à_charge_prises_en_compte contenu entier - sortie coefficents_enfants_garde_alternée_pris_en_compte contenu + résultat éligibilité condition + résultat nombre_personnes_à_charge_prises_en_compte contenu entier + résultat coefficents_enfants_garde_alternée_pris_en_compte contenu collection décimal - sortie condition_2_r823_4 condition dépend de PersonneÀCharge + résultat condition_2_r823_4 condition dépend de PersonneÀCharge champ d'application ÉligibilitéAidesPersonnelleLogement: # TODO informatique et juridique: trouver une meilleur place pour mettre @@ -334,22 +334,22 @@ champ d'application ÉligibilitéAidesPersonnelleLogement: définition nombre_personnes_à_charge_prises_en_compte égal à nombre de personnes_à_charge_prises_en_compte définition coefficents_enfants_garde_alternée_pris_en_compte égal à - application pour personne_à_charge dans ( - filtre pour personne_à_charge dans personnes_à_charge_prises_en_compte de - (selon personne_à_charge sous forme - -- AutrePersonneÀCharge: faux + ((selon personne_à_charge sous forme + -- AutrePersonneÀCharge: 0,0 -- EnfantÀCharge de enfant: ( - selon enfant.situation_garde_alternée sous forme - -- GardeAlternéeCoefficientPriseEnCharge: vrai - -- PasDeGardeAlternée: faux - )) - ) de (selon personne_à_charge sous forme - -- AutrePersonneÀCharge: 0,0 - -- EnfantÀCharge de enfant: ( - selon enfant.situation_garde_alternée sous forme - -- GardeAlternéeCoefficientPriseEnCharge de coeff: coeff - -- PasDeGardeAlternée: 0,0 - )) + selon enfant.situation_garde_alternée sous forme + -- GardeAlternéeCoefficientPriseEnCharge de coeff: coeff + -- PasDeGardeAlternée: 0,0 + )) + pour personne_à_charge parmi personnes_à_charge_prises_en_compte + tel que + (selon personne_à_charge sous forme + -- AutrePersonneÀCharge: faux + -- EnfantÀCharge de enfant: ( + selon enfant.situation_garde_alternée sous forme + -- GardeAlternéeCoefficientPriseEnCharge: vrai + -- PasDeGardeAlternée: faux + ))) ``` ### Éligibilité à l'aide personnalisée au logement @@ -358,7 +358,7 @@ champ d'application ÉligibilitéAidesPersonnelleLogement: déclaration champ d'application ÉligibilitéAidePersonnaliséeLogement: entrée ménage contenu Ménage entrée demandeur contenu Demandeur - entrée sortie date_courante contenu date + entrée résultat date_courante contenu date interne condition_logement_bailleur condition interne condition_logement_prêt condition @@ -367,9 +367,9 @@ déclaration champ d'application ÉligibilitéAidePersonnaliséeLogement: éligibilité_commune champ d'application ÉligibilitéAidesPersonnelleLogement - sortie éligibilité condition - sortie nombre_personnes_à_charge_prises_en_compte contenu entier - sortie coefficents_enfants_garde_alternée_pris_en_compte contenu + résultat éligibilité condition + résultat nombre_personnes_à_charge_prises_en_compte contenu entier + résultat coefficents_enfants_garde_alternée_pris_en_compte contenu collection décimal @@ -407,11 +407,11 @@ déclaration champ d'application ÉligibilitéAllocationLogement: éligibilité_commune champ d'application ÉligibilitéAidesPersonnelleLogement - sortie éligibilité contenu TypeÉligibilitéAllocationLogement + résultat éligibilité contenu TypeÉligibilitéAllocationLogement état dispositions_communes état l841_2 - sortie nombre_personnes_à_charge_prises_en_compte contenu entier - sortie coefficents_enfants_garde_alternée_pris_en_compte contenu + résultat nombre_personnes_à_charge_prises_en_compte contenu entier + résultat coefficents_enfants_garde_alternée_pris_en_compte contenu collection décimal champ d'application ÉligibilitéAllocationLogement: @@ -461,7 +461,7 @@ déclaration champ d'application ÉligibilitéPrimeDeDéménagement: base_mensuelle_allocations_familiales champ d'application BaseMensuelleAllocationsFamiliales - sortie montant_prime_déménagement contenu argent + résultat montant_prime_déménagement contenu argent champ d'application ÉligibilitéPrimeDeDéménagement: définition éligibilité_apl.ménage égal à ménage @@ -505,7 +505,7 @@ déclaration champ d'application RessourcesAidesPersonnelleLogement: base_mensuelle_allocations_familiales champ d'application BaseMensuelleAllocationsFamiliales - sortie ressources_prises_en_compte contenu argent + résultat ressources_prises_en_compte contenu argent ``` ### Calcul des contributions sociales s'appliquant aux aides personnelles au logement @@ -517,7 +517,7 @@ déclaration champ d'application ContributionsSocialesAidesPersonnelleLogement: interne taux_crds contenu décimal interne exonéré_csg condition - sortie montant contenu argent dépend de argent + résultat montant contenu argent dépend de argent ``` ### Calcul du montant de l'aide personnalisée au logement @@ -547,7 +547,7 @@ déclaration champ d'application CalculAidePersonnaliséeLogementLocatif: interne loyer_éligible contenu argent interne taux_loyer_éligible contenu décimal état formule - état arrondi + état taux_arrondi interne rapport_loyers contenu décimal interne loyer_référence contenu argent interne fraction_l832_3 contenu décimal @@ -558,18 +558,18 @@ déclaration champ d'application CalculAidePersonnaliséeLogementLocatif: 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 + résultat montant_forfaitaire_charges_d823_16 contenu argent + résultat plafond_loyer_d823_16_2 contenu argent + résultat participation_minimale contenu argent + résultat taux_composition_familiale contenu décimal + résultat participation_personnelle contenu argent contributions_sociales champ d'application ContributionsSocialesAidesPersonnelleLogement - sortie aide_finale_formule contenu argent + résultat aide_finale_formule contenu argent - sortie traitement_aide_finale contenu argent dépend de argent + résultat traitement_aide_finale contenu argent dépend de argent état diminué état minoration_forfaitaire état contributions_sociales_arrondi @@ -593,14 +593,14 @@ déclaration champ d'application CalculÉquivalenceLoyerMinimale: collection TrancheRevenuDécimal interne montant_forfaitaire_d832_26 contenu argent - sortie montant contenu argent + résultat montant contenu argent déclaration champ d'application CalculNombrePartLogementFoyer: entrée condition_2_du_832_25 contenu booléen entrée nombre_personnes_à_charge contenu entier entrée situation_familiale_calcul_apl contenu SituationFamilialeCalculAPL - sortie n_nombre_parts_d832_25 contenu décimal + résultat n_nombre_parts_d832_25 contenu décimal déclaration champ d'application CalculAidePersonnaliséeLogementFoyer: entrée type_logement_foyer contenu TypeLogementFoyer @@ -614,18 +614,18 @@ déclaration champ d'application CalculAidePersonnaliséeLogementFoyer: contexte condition_2_du_832_25 contenu booléen - sortie coefficient_multiplicateur_d832_25 contenu argent - sortie coefficient_r_d832_25 contenu argent - contexte sortie n_nombre_parts_d832_25 contenu décimal - sortie équivalence_loyer_éligible contenu argent - sortie plafond_équivalence_loyer_éligible contenu argent + résultat coefficient_multiplicateur_d832_25 contenu argent + résultat coefficient_r_d832_25 contenu argent + contexte résultat n_nombre_parts_d832_25 contenu décimal + résultat équivalence_loyer_éligible contenu argent + résultat plafond_équivalence_loyer_éligible contenu argent interne abattement_dépense_nette_minimale_d832_27 contenu argent dépend de argent interne dépense_nette_minimale_d832_27 contenu argent dépend de argent interne montant_forfaitaire_d832_24 contenu argent interne montant_forfaitaire_d832_27 contenu argent interne montant_minimal_aide_d823_24 contenu argent - sortie équivalence_loyer_minimale contenu argent + résultat équivalence_loyer_minimale contenu argent calcul_nombre_parts champ d'application CalculNombrePartLogementFoyer calcul_équivalence_loyer_minimale champ d'application @@ -633,13 +633,13 @@ déclaration champ d'application CalculAidePersonnaliséeLogementFoyer: contributions_sociales champ d'application ContributionsSocialesAidesPersonnelleLogement - sortie coefficient_prise_en_charge_d832_25 contenu décimal + résultat coefficient_prise_en_charge_d832_25 contenu décimal état formule - état arrondi + état coeff_arrondi état seuil - sortie aide_finale_formule contenu argent - sortie traitement_aide_finale contenu argent dépend de argent + résultat aide_finale_formule contenu argent + résultat traitement_aide_finale contenu argent dépend de argent état minoration_forfaitaire état abattement état contributions_sociales_arrondi @@ -656,7 +656,7 @@ déclaration champ d'application CalculNombrePartsAccessionPropriété: entrée nombre_personnes_à_charge contenu entier entrée situation_familiale_calcul_apl contenu SituationFamilialeCalculAPL - sortie n_nombre_parts_d832_11 contenu décimal + résultat n_nombre_parts_d832_11 contenu décimal déclaration champ d'application @@ -676,16 +676,16 @@ déclaration champ d'application entrée ancienneté_logement contenu NeufOuAncien entrée date_courante contenu date - sortie mensualité_éligible contenu argent - sortie mensualité_minimale contenu argent + résultat mensualité_éligible contenu argent + résultat 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 - sortie coefficient_prise_en_charge_d832_10 contenu décimal + résultat coefficient_prise_en_charge_d832_10 contenu décimal état formule - état arrondi + état coeff_arrondi état seuil interne dépense_nette_minimale_d832_10 contenu argent dépend de argent interne abattement_dépense_nette_minimale_d832_10 @@ -708,8 +708,8 @@ déclaration champ d'application contributions_sociales champ d'application ContributionsSocialesAidesPersonnelleLogement - sortie aide_finale_formule contenu argent - sortie traitement_aide_finale contenu argent dépend de argent + résultat aide_finale_formule contenu argent + résultat traitement_aide_finale contenu argent dépend de argent état minoration_forfaitaire état abattement état contributions_sociales_arrondi @@ -742,8 +742,8 @@ déclaration champ d'application CalculAidePersonnaliséeLogement: interne sous_calcul_traitement contenu Traitement_formule_aide_finale - sortie aide_finale_formule contenu argent - sortie traitement_aide_finale contenu argent dépend de argent + résultat aide_finale_formule contenu argent + résultat traitement_aide_finale contenu argent dépend de argent ``` ## Calcul du montant de l'allocation logement @@ -783,9 +783,9 @@ déclaration champ d'application CalculAllocationLogementLocatif: calcul_apl_locatif champ d'application CalculAidePersonnaliséeLogementLocatif - sortie aide_finale_formule contenu argent + résultat aide_finale_formule contenu argent - sortie traitement_aide_finale contenu argent dépend de argent + résultat traitement_aide_finale contenu argent dépend de argent champ d'application CalculAllocationLogementLocatif: définition calcul_apl_locatif.loyer_principal égal à @@ -873,9 +873,9 @@ déclaration champ d'application CalculAllocationLogementAccessionPropriété: calcul_équivalence_loyer_minimale champ d'application CalculÉquivalenceLoyerMinimale - sortie aide_finale_formule contenu argent + résultat aide_finale_formule contenu argent - sortie traitement_aide_finale contenu argent dépend de argent + résultat traitement_aide_finale contenu argent dépend de argent état minoration_forfaitaire état dépense_nette_minimale état contributions_sociales_arrondi @@ -927,10 +927,10 @@ déclaration champ d'application CalculAllocationLogementFoyer: interne montant_minimal_aide_d842_15 contenu argent interne montant_forfaitaire_d842_15 contenu argent interne montant_minimal_dépense_nette_d842_17 contenu argent - sortie coefficient_prise_en_charge contenu décimal - sortie équivalence_loyer contenu argent - sortie montant_forfaitaire_charges contenu argent - sortie loyer_minimal contenu argent + résultat coefficient_prise_en_charge contenu décimal + résultat équivalence_loyer contenu argent + résultat montant_forfaitaire_charges contenu argent + résultat loyer_minimal contenu argent calcul_nombre_parts champ d'application CalculNombrePartLogementFoyer calcul_apl_logement_foyer champ d'application @@ -940,8 +940,8 @@ déclaration champ d'application CalculAllocationLogementFoyer: calcul_équivalence_loyer_minimale champ d'application CalculÉquivalenceLoyerMinimale - sortie aide_finale_formule contenu argent - sortie traitement_aide_finale contenu argent dépend de argent + résultat aide_finale_formule contenu argent + résultat traitement_aide_finale contenu argent dépend de argent état minoration_forfaitaire état dépense_nette_minimale état redevance @@ -987,15 +987,15 @@ déclaration champ d'application CalculAllocationLogement: interne sous_calcul_traitement contenu Traitement_formule_aide_finale - sortie aide_finale_formule contenu argent - sortie traitement_aide_finale contenu argent dépend de argent + résultat aide_finale_formule contenu argent + résultat traitement_aide_finale contenu argent dépend de argent ``` ### Date d'ouverture des droits à la retraite ```catala-metadata déclaration champ d'application OuvertureDroitsRetraite: - sortie âge_ouverture_droit contenu durée + résultat âge_ouverture_droit contenu durée entrée date_naissance_assuré contenu date ``` @@ -1015,7 +1015,7 @@ déclaration champ d'application ImpayéDépenseLogement: interne dépense_logement_brute contenu DépenseLogement interne dépense_logement_nette contenu DépenseLogement - sortie montant_impayé contenu argent + résultat montant_impayé contenu argent ``` ## Calcul de l'aide au logement effective @@ -1049,10 +1049,10 @@ déclaration champ d'application CalculetteAidesAuLogement: calcul_allocation_logement champ d'application CalculAllocationLogement - sortie éligibilité contenu booléen - sortie aide_finale_formule contenu argent - sortie traitement_aide_finale contenu argent dépend de argent - sortie coefficents_enfants_garde_alternée_pris_en_compte contenu + résultat éligibilité contenu booléen + résultat aide_finale_formule contenu argent + résultat traitement_aide_finale contenu argent dépend de argent + résultat coefficents_enfants_garde_alternée_pris_en_compte contenu collection décimal champ d'application CalculetteAidesAuLogement: @@ -1122,8 +1122,8 @@ déclaration champ d'application CalculetteAidesAuLogementGardeAlternée: calculette champ d'application CalculetteAidesAuLogement calculette_sans_garde_alternée champ d'application CalculetteAidesAuLogement - sortie éligibilité contenu booléen - sortie aide_finale contenu argent + résultat éligibilité contenu booléen + résultat aide_finale contenu argent champ d'application CalculetteAidesAuLogementGardeAlternée: définition calculette.ménage égal à @@ -1155,16 +1155,15 @@ champ d'application CalculetteAidesAuLogementGardeAlternée: -- logement : ménage.logement -- personnes_à_charge : - filtre pour personne_à_charge dans - ménage.personnes_à_charge - de - (selon personne_à_charge sous forme - -- AutrePersonneÀCharge: vrai - -- EnfantÀCharge de enfant: ( - selon enfant.situation_garde_alternée sous forme - -- GardeAlternéeCoefficientPriseEnCharge: faux - -- PasDeGardeAlternée: vrai - )) + (personne_à_charge parmi ménage.personnes_à_charge + tel que + (selon personne_à_charge sous forme + -- AutrePersonneÀCharge: vrai + -- EnfantÀCharge de enfant: ( + selon enfant.situation_garde_alternée sous forme + -- GardeAlternéeCoefficientPriseEnCharge: faux + -- PasDeGardeAlternée: vrai + ))) -- nombre_autres_occupants_logement : ménage.nombre_autres_occupants_logement -- situation_familiale : diff --git a/examples/aides_logement/tests/tests_calcul_al_locatif.catala_fr b/examples/aides_logement/tests/tests_calcul_al_locatif.catala_fr index bd8ef8c7..f5306b9d 100644 --- a/examples/aides_logement/tests/tests_calcul_al_locatif.catala_fr +++ b/examples/aides_logement/tests/tests_calcul_al_locatif.catala_fr @@ -7,7 +7,7 @@ # https://www.ecologie.gouv.fr/sites/default/files/les_aides_personnelles_au_logement_element_de_calcul_septembre_2021.pdf déclaration champ d'application Exemple1 : calcul champ d'application CalculAllocationLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple1 : définition calcul.loyer_principal égal à 425 € @@ -39,7 +39,7 @@ champ d'application Exemple1 : # Transmis par DGALN/DHUP/FE4 le 12/07/2022 déclaration champ d'application Exemple2 : calcul champ d'application CalculAllocationLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple2 : définition calcul.loyer_principal égal à 425 € diff --git a/examples/aides_logement/tests/tests_calcul_al_logement_foyer.catala_fr b/examples/aides_logement/tests/tests_calcul_al_logement_foyer.catala_fr index eb429612..5809ba27 100644 --- a/examples/aides_logement/tests/tests_calcul_al_logement_foyer.catala_fr +++ b/examples/aides_logement/tests/tests_calcul_al_logement_foyer.catala_fr @@ -6,7 +6,7 @@ # Transmis par DGALN/DHUP/FE4 le 14/07/2022 déclaration champ d'application CasTest1 : calcul champ d'application CalculAllocationLogementFoyer - sortie montant contenu argent + résultat montant contenu argent champ d'application CasTest1: définition calcul.date_conventionnement égal à |2020-01-01| diff --git a/examples/aides_logement/tests/tests_calcul_apl_accession_propriete.catala_fr b/examples/aides_logement/tests/tests_calcul_apl_accession_propriete.catala_fr index acc14015..ddeadb84 100644 --- a/examples/aides_logement/tests/tests_calcul_apl_accession_propriete.catala_fr +++ b/examples/aides_logement/tests/tests_calcul_apl_accession_propriete.catala_fr @@ -7,7 +7,7 @@ # https://www.ecologie.gouv.fr/sites/default/files/les_aides_personnelles_au_logement_element_de_calcul_septembre_2021.pdf#page=45 déclaration champ d'application Exemple1: calcul champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple1: définition calcul.ressources_ménage_arrondies égal à 18 000 € @@ -42,7 +42,7 @@ champ d'application Exemple1: # https://www.ecologie.gouv.fr/sites/default/files/les_aides_personnelles_au_logement_element_de_calcul_septembre_2021.pdf#page=45 déclaration champ d'application Exemple2: calcul champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple2: définition calcul.ressources_ménage_arrondies égal à 19 000 € @@ -79,7 +79,7 @@ champ d'application Exemple2: # Transmis par DGALN/DHUP/FE4 le 14/07/2022 déclaration champ d'application Exemple3: calcul champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple3: définition calcul.ressources_ménage_arrondies égal à 18 000 € @@ -113,7 +113,7 @@ champ d'application Exemple3: # Transmis par DGALN/DHUP/FE4 le 14/07/2022 déclaration champ d'application Exemple4: calcul champ d'application CalculAidePersonnaliséeLogementAccessionPropriété - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple4: définition calcul.ressources_ménage_arrondies égal à 19 000 € diff --git a/examples/aides_logement/tests/tests_calcul_apl_locatif.catala_fr b/examples/aides_logement/tests/tests_calcul_apl_locatif.catala_fr index 1fc9c185..95796f28 100644 --- a/examples/aides_logement/tests/tests_calcul_apl_locatif.catala_fr +++ b/examples/aides_logement/tests/tests_calcul_apl_locatif.catala_fr @@ -5,7 +5,7 @@ ```catala déclaration champ d'application Exemple1 : calcul champ d'application CalculAidePersonnaliséeLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple1: définition montant égal à calcul.traitement_aide_finale de calcul.aide_finale_formule @@ -34,7 +34,7 @@ champ d'application Exemple1: ```catala déclaration champ d'application Exemple2 : calcul champ d'application CalculAidePersonnaliséeLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple2: définition montant égal à calcul.traitement_aide_finale de calcul.aide_finale_formule @@ -64,7 +64,7 @@ champ d'application Exemple2: ```catala déclaration champ d'application Exemple3 : calcul champ d'application CalculAidePersonnaliséeLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple3: définition montant égal à calcul.traitement_aide_finale de calcul.aide_finale_formule @@ -94,7 +94,7 @@ champ d'application Exemple3: ```catala déclaration champ d'application Exemple4 : calcul champ d'application CalculAidePersonnaliséeLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple4: définition montant égal à calcul.traitement_aide_finale de calcul.aide_finale_formule @@ -124,7 +124,7 @@ champ d'application Exemple4: ```catala déclaration champ d'application Exemple5 : calcul champ d'application CalculAidePersonnaliséeLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple5: définition montant égal à calcul.traitement_aide_finale de calcul.aide_finale_formule @@ -154,7 +154,7 @@ champ d'application Exemple5: ```catala déclaration champ d'application Exemple6 : calcul champ d'application CalculAidePersonnaliséeLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple6: définition montant égal à calcul.traitement_aide_finale de calcul.aide_finale_formule @@ -184,7 +184,7 @@ champ d'application Exemple6: ```catala déclaration champ d'application Exemple7 : calcul champ d'application CalculAidePersonnaliséeLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple7: définition montant égal à calcul.traitement_aide_finale de calcul.aide_finale_formule @@ -214,7 +214,7 @@ champ d'application Exemple7: ```catala déclaration champ d'application Exemple8 : calcul champ d'application CalculAidePersonnaliséeLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple8: définition montant égal à calcul.traitement_aide_finale de calcul.aide_finale_formule @@ -244,7 +244,7 @@ champ d'application Exemple8: ```catala déclaration champ d'application Exemple9 : calcul champ d'application CalculAidePersonnaliséeLogementLocatif - sortie montant contenu argent + résultat montant contenu argent champ d'application Exemple9: définition montant égal à diff --git a/examples/aides_logement/tests/tests_calcul_apl_logement_foyer.catala_fr b/examples/aides_logement/tests/tests_calcul_apl_logement_foyer.catala_fr index afe92e26..3542c512 100644 --- a/examples/aides_logement/tests/tests_calcul_apl_logement_foyer.catala_fr +++ b/examples/aides_logement/tests/tests_calcul_apl_logement_foyer.catala_fr @@ -5,7 +5,7 @@ ```catala déclaration champ d'application CasTest1 : calcul champ d'application CalculAidePersonnaliséeLogementFoyer - sortie montant contenu argent + résultat montant contenu argent champ d'application CasTest1: définition calcul.date_conventionnement égal à |2022-01-01| @@ -27,7 +27,7 @@ champ d'application CasTest1: déclaration champ d'application CasTest2 : calcul champ d'application CalculAllocationLogementFoyer - sortie montant contenu argent + résultat montant contenu argent champ d'application CasTest2: définition calcul.date_conventionnement égal à |2022-01-01| @@ -55,7 +55,7 @@ champ d'application CasTest2: # https://www.ecologie.gouv.fr/sites/default/files/les_aides_personnelles_au_logement_element_de_calcul_septembre_2021.pdf#page=34 déclaration champ d'application CasTest3 : calcul champ d'application CalculAidePersonnaliséeLogementFoyer - sortie montant contenu argent + résultat montant contenu argent champ d'application CasTest3: définition calcul.date_conventionnement égal à |2020-01-01| @@ -79,7 +79,7 @@ champ d'application CasTest3: # Transmis par DGALN/DHUP/FE4 le 14/07/2022 déclaration champ d'application CasTest4 : calcul champ d'application CalculAidePersonnaliséeLogementFoyer - sortie montant contenu argent + résultat montant contenu argent champ d'application CasTest4: définition calcul.date_conventionnement égal à |2020-01-01| @@ -104,7 +104,7 @@ champ d'application CasTest4: # Transmis par DGALN/DHUP/FE4 le 14/07/2022 déclaration champ d'application CasTest5 : calcul champ d'application CalculAidePersonnaliséeLogementFoyer - sortie montant contenu argent + résultat montant contenu argent champ d'application CasTest5: définition calcul.date_conventionnement égal à |2020-01-01| diff --git a/examples/aides_logement/tests/tests_calculette_globale.catala_fr b/examples/aides_logement/tests/tests_calculette_globale.catala_fr index fdfdf67b..a981995b 100644 --- a/examples/aides_logement/tests/tests_calculette_globale.catala_fr +++ b/examples/aides_logement/tests/tests_calculette_globale.catala_fr @@ -5,8 +5,8 @@ ```catala déclaration champ d'application Exemple1 : calculette champ d'application CalculetteAidesAuLogementGardeAlternée - sortie éligibilité contenu booléen - sortie montant_versé contenu argent + résultat éligibilité contenu booléen + résultat montant_versé contenu argent champ d'application Exemple1 : définition éligibilité égal à calculette.éligibilité diff --git a/examples/aides_logement/tests/tests_eligibilite_apl.catala_fr b/examples/aides_logement/tests/tests_eligibilite_apl.catala_fr index 459fb374..19066f06 100644 --- a/examples/aides_logement/tests/tests_eligibilite_apl.catala_fr +++ b/examples/aides_logement/tests/tests_eligibilite_apl.catala_fr @@ -5,7 +5,7 @@ ```catala déclaration champ d'application Exemple1 : éligibilité champ d'application ÉligibilitéAidePersonnaliséeLogement - sortie éligible contenu booléen + résultat éligible contenu booléen champ d'application Exemple1 : définition éligible égal à éligibilité.éligibilité @@ -83,7 +83,7 @@ champ d'application Exemple1 : déclaration champ d'application Exemple2 : éligibilité champ d'application ÉligibilitéAllocationLogement - sortie éligible contenu TypeÉligibilitéAllocationLogement + résultat éligible contenu TypeÉligibilitéAllocationLogement champ d'application Exemple2 : définition éligible égal à éligibilité.éligibilité @@ -154,7 +154,7 @@ champ d'application Exemple2 : # déclaration champ d'application Exemple2 : # éligibilité champ d'application ÉligibilitéAidesPersonnelleLogement -# sortie éligible contenu booléen +# résultat éligible contenu booléen # champ d'application Exemple2 : # définition éligible égal à éligibilité.éligibilité @@ -198,7 +198,7 @@ champ d'application Exemple2 : # déclaration champ d'application Exemple3 : # éligibilité champ d'application ÉligibilitéAidesPersonnelleLogement -# sortie éligible contenu booléen +# résultat éligible contenu booléen # champ d'application Exemple3 : # définition éligible égal à éligibilité.éligibilité diff --git a/examples/allocations_familiales/decrets_divers.catala_fr b/examples/allocations_familiales/decrets_divers.catala_fr index 56a65ebe..1402e0b2 100644 --- a/examples/allocations_familiales/decrets_divers.catala_fr +++ b/examples/allocations_familiales/decrets_divers.catala_fr @@ -20,16 +20,16 @@ sont supérieurs au plafond de base de 78 770 euros majoré de champ d'application AllocationsFamiliales : exception définition plafond_I_d521_3 sous condition - date_courante >=@ |2018-01-01| et date_courante <=@ |2018-12-31| - conséquence égal à 56 286 € +€ - 5 628 € *€ (entier_vers_décimal de + date_courante >= |2018-01-01| et date_courante <= |2018-12-31| + conséquence égal à 56 286 € + + 5 628 € * (décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale)) exception définition plafond_II_d521_3 sous condition - date_courante >=@ |2018-01-01| et date_courante <=@ |2018-12-31| - conséquence égal à 78 770 € +€ - 5 628 € *€ (entier_vers_décimal de + date_courante >= |2018-01-01| et date_courante <= |2018-12-31| + conséquence égal à 78 770 € + + 5 628 € * (décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale)) ``` @@ -53,16 +53,16 @@ base de 79 558 euros majoré de 5 684 euros par enfant à charge. champ d'application AllocationsFamiliales : exception définition plafond_I_d521_3 sous condition - date_courante >=@ |2019-01-01| et date_courante <=@ |2019-12-31| - conséquence égal à 56 849 € +€ - 5 684 € *€ (entier_vers_décimal de + date_courante >= |2019-01-01| et date_courante <= |2019-12-31| + conséquence égal à 56 849 € + + 5 684 € * (décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale)) exception définition plafond_II_d521_3 sous condition - date_courante >=@ |2019-01-01| et date_courante <=@ |2019-12-31| - conséquence égal à 79 558 € +€ - 5 684 € *€ (entier_vers_décimal de + date_courante >= |2019-01-01| et date_courante <= |2019-12-31| + conséquence égal à 79 558 € + + 5 684 € * (décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale)) ``` @@ -86,16 +86,16 @@ tranche est celle dont les revenus sont supérieurs au plafond de base de champ d'application AllocationsFamiliales : exception définition plafond_I_d521_3 sous condition - date_courante >=@ |2020-01-01| et date_courante <=@ |2020-12-31| - conséquence égal à 57 759 € +€ - 5 775 € *€ (entier_vers_décimal de + date_courante >= |2020-01-01| et date_courante <= |2020-12-31| + conséquence égal à 57 759 € + + 5 775 € * (décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale)) exception définition plafond_II_d521_3 sous condition - date_courante >=@ |2020-01-01| et date_courante <=@ |2020-12-31| - conséquence égal à 80 831 € +€ - 5 775 € *€ (entier_vers_décimal de + date_courante >= |2020-01-01| et date_courante <= |2020-12-31| + conséquence égal à 80 831 € + + 5 775 € * (décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale)) ``` @@ -113,9 +113,9 @@ décembre 2021. Il est majoré de 5 827 euros par enfant à charge. champ d'application AllocationsFamiliales : exception définition plafond_I_d521_3 sous condition - date_courante >=@ |2021-01-01| et date_courante <=@ |2021-12-31| - conséquence égal à 58 279 € +€ - 5 827 € *€ (entier_vers_décimal de + date_courante >= |2021-01-01| et date_courante <= |2021-12-31| + conséquence égal à 58 279 € + + 5 827 € * (décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale)) ``` @@ -129,9 +129,9 @@ décembre 2021. Il est majoré de 5 827 euros par enfant à charge. champ d'application AllocationsFamiliales : exception définition plafond_II_d521_3 sous condition - date_courante >=@ |2021-01-01| et date_courante <=@ |2021-12-31| - conséquence égal à 81 558 € +€ - 5 827 € *€ (entier_vers_décimal de + date_courante >= |2021-01-01| et date_courante <= |2021-12-31| + conséquence égal à 81 558 € + + 5 827 € * (décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale)) ``` @@ -149,9 +149,9 @@ prévue à l'article L. 551-1 du code de la sécurité sociale, ainsi qu'il suit champ d'application AllocationsFamiliales sous condition résidence = Mayotte: # La formule change à Mayotte par rapport au cas général. exception définition montant_initial_base égal à - montant_initial_base_premier_enfant +€ - montant_initial_base_deuxième_enfant +€ - montant_initial_base_troisième_enfant_mayotte +€ + montant_initial_base_premier_enfant + + montant_initial_base_deuxième_enfant + + montant_initial_base_troisième_enfant_mayotte + montant_initial_base_quatrième_enfant_et_plus_mayotte exception @@ -166,7 +166,7 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte : étiquette mayotte exception base définition montant_initial_base_premier_enfant égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 5,88 % + alors bmaf.montant * 5,88 % sinon 0 € ``` @@ -176,7 +176,7 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: étiquette mayotte exception base définition montant_initial_base_deuxième_enfant égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 32 % + alors bmaf.montant * 32 % sinon 0 € ``` @@ -185,7 +185,7 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: champ d'application AllocationsFamiliales : définition montant_initial_base_troisième_enfant_mayotte égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 16 % + alors bmaf.montant * 16 % sinon 0 € ``` @@ -194,8 +194,8 @@ champ d'application AllocationsFamiliales : champ d'application AllocationsFamiliales : définition montant_initial_base_quatrième_enfant_et_plus_mayotte égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 3 - alors (bmaf.montant *€ 4,63 %) *€ ( - entier_vers_décimal de + alors (bmaf.montant * 4,63 %) * ( + décimal de ((nombre de enfants_à_charge_droit_ouvert_prestation_familiale) - 3) ) sinon 0 € ``` @@ -248,92 +248,92 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: # Premier enfant exception mayotte définition montant_initial_base_premier_enfant sous condition - date_courante >=@ |2011-01-01| et date_courante <=@ |2011-12-31| et + date_courante >= |2011-01-01| et date_courante <= |2011-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 14,50 % + alors bmaf.montant * 14,50 % sinon 0 € exception mayotte définition montant_initial_base_premier_enfant sous condition - date_courante >=@ |2012-01-01| et date_courante <=@ |2012-12-31| et + date_courante >= |2012-01-01| et date_courante <= |2012-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 13,93 % + alors bmaf.montant * 13,93 % sinon 0 € exception mayotte définition montant_initial_base_premier_enfant sous condition - date_courante >=@ |2013-01-01| et date_courante <=@ |2013-12-31| et + date_courante >= |2013-01-01| et date_courante <= |2013-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 13,35 % + alors bmaf.montant * 13,35 % sinon 0 € exception mayotte définition montant_initial_base_premier_enfant sous condition - date_courante >=@ |2014-01-01| et date_courante <=@ |2014-12-31| et + date_courante >= |2014-01-01| et date_courante <= |2014-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 12,78 % + alors bmaf.montant * 12,78 % sinon 0 € exception mayotte définition montant_initial_base_premier_enfant sous condition - date_courante >=@ |2015-01-01| et date_courante <=@ |2015-12-31| et + date_courante >= |2015-01-01| et date_courante <= |2015-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 12,20 % + alors bmaf.montant * 12,20 % sinon 0 € exception mayotte définition montant_initial_base_premier_enfant sous condition - date_courante >=@ |2016-01-01| et date_courante <=@ |2016-12-31| et + date_courante >= |2016-01-01| et date_courante <= |2016-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 11,63 % + alors bmaf.montant * 11,63 % sinon 0 € exception mayotte définition montant_initial_base_premier_enfant sous condition - date_courante >=@ |2017-01-01| et date_courante <=@ |2017-12-31| et + date_courante >= |2017-01-01| et date_courante <= |2017-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 11,05 % + alors bmaf.montant * 11,05 % sinon 0 € exception mayotte définition montant_initial_base_premier_enfant sous condition - date_courante >=@ |2018-01-01| et date_courante <=@ |2018-12-31| et + date_courante >= |2018-01-01| et date_courante <= |2018-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 9,76 % + alors bmaf.montant * 9,76 % sinon 0 € exception mayotte définition montant_initial_base_premier_enfant sous condition - date_courante >=@ |2019-01-01| et date_courante <=@ |2019-12-31| et + date_courante >= |2019-01-01| et date_courante <= |2019-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 8,47 % + alors bmaf.montant * 8,47 % sinon 0 € exception mayotte définition montant_initial_base_premier_enfant sous condition - date_courante >=@ |2020-01-01| et date_courante <=@ |2020-12-31| et + date_courante >= |2020-01-01| et date_courante <= |2020-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 - alors bmaf.montant *€ 7,17% + alors bmaf.montant * 7,17% sinon 0 € exception mayotte définition montant_initial_base_premier_enfant @@ -347,162 +347,162 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: # Deuxième enfant exception mayotte définition montant_initial_base_deuxième_enfant sous condition - date_courante >=@ |2011-01-01| et date_courante <=@ |2011-12-31| + date_courante >= |2011-01-01| et date_courante <= |2011-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 23,2 % + alors bmaf.montant * 23,2 % sinon 0 € exception mayotte définition montant_initial_base_deuxième_enfant sous condition - date_courante >=@ |2012-01-01| et date_courante <=@ |2012-12-31| + date_courante >= |2012-01-01| et date_courante <= |2012-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 23,79 % + alors bmaf.montant * 23,79 % sinon 0 € exception mayotte définition montant_initial_base_deuxième_enfant sous condition - date_courante >=@ |2013-01-01| et date_courante <=@ |2013-12-31| + date_courante >= |2013-01-01| et date_courante <= |2013-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 24,37 % + alors bmaf.montant * 24,37 % sinon 0 € exception mayotte définition montant_initial_base_deuxième_enfant sous condition - date_courante >=@ |2014-01-01| et date_courante <=@ |2014-12-31| + date_courante >= |2014-01-01| et date_courante <= |2014-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 24,96 % + alors bmaf.montant * 24,96 % sinon 0 € exception mayotte définition montant_initial_base_deuxième_enfant sous condition - date_courante >=@ |2015-01-01| et date_courante <=@ |2015-12-31| + date_courante >= |2015-01-01| et date_courante <= |2015-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 25,55 % + alors bmaf.montant * 25,55 % sinon 0 € exception mayotte définition montant_initial_base_deuxième_enfant sous condition - date_courante >=@ |2016-01-01| et date_courante <=@ |2016-12-31| + date_courante >= |2016-01-01| et date_courante <= |2016-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 26,13 % + alors bmaf.montant * 26,13 % sinon 0 € exception mayotte définition montant_initial_base_deuxième_enfant sous condition - date_courante >=@ |2017-01-01| et date_courante <=@ |2017-12-31| + date_courante >= |2017-01-01| et date_courante <= |2017-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 26,72 % + alors bmaf.montant * 26,72 % sinon 0 € exception mayotte définition montant_initial_base_deuxième_enfant sous condition - date_courante >=@ |2018-01-01| et date_courante <=@ |2018-12-31| + date_courante >= |2018-01-01| et date_courante <= |2018-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 28,04 % + alors bmaf.montant * 28,04 % sinon 0 € exception mayotte définition montant_initial_base_deuxième_enfant sous condition - date_courante >=@ |2019-01-01| et date_courante <=@ |2019-12-31| + date_courante >= |2019-01-01| et date_courante <= |2019-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 29,36 % + alors bmaf.montant * 29,36 % sinon 0 € exception mayotte définition montant_initial_base_deuxième_enfant sous condition - date_courante >=@ |2020-01-01| et date_courante <=@ |2020-12-31| + date_courante >= |2020-01-01| et date_courante <= |2020-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 30,68 % + alors bmaf.montant * 30,68 % sinon 0 € # Troisième enfant exception définition montant_initial_base_troisième_enfant_mayotte sous condition - date_courante >=@ |2011-01-01| et date_courante <=@ |2011-12-31| + date_courante >= |2011-01-01| et date_courante <= |2011-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 4,63 % + alors bmaf.montant * 4,63 % sinon 0 € exception définition montant_initial_base_troisième_enfant_mayotte sous condition - date_courante >=@ |2012-01-01| et date_courante <=@ |2012-12-31| + date_courante >= |2012-01-01| et date_courante <= |2012-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 5,39 % + alors bmaf.montant * 5,39 % sinon 0 € exception définition montant_initial_base_troisième_enfant_mayotte sous condition - date_courante >=@ |2013-01-01| et date_courante <=@ |2013-12-31| + date_courante >= |2013-01-01| et date_courante <= |2013-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 6,15 % + alors bmaf.montant * 6,15 % sinon 0 € exception définition montant_initial_base_troisième_enfant_mayotte sous condition - date_courante >=@ |2014-01-01| et date_courante <=@ |2014-12-31| + date_courante >= |2014-01-01| et date_courante <= |2014-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 6,90 % + alors bmaf.montant * 6,90 % sinon 0 € exception définition montant_initial_base_troisième_enfant_mayotte sous condition - date_courante >=@ |2015-01-01| et date_courante <=@ |2015-12-31| + date_courante >= |2015-01-01| et date_courante <= |2015-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 7,66 % + alors bmaf.montant * 7,66 % sinon 0 € exception définition montant_initial_base_troisième_enfant_mayotte sous condition - date_courante >=@ |2016-01-01| et date_courante <=@ |2016-12-31| + date_courante >= |2016-01-01| et date_courante <= |2016-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 8,42 % + alors bmaf.montant * 8,42 % sinon 0 € exception définition montant_initial_base_troisième_enfant_mayotte sous condition - date_courante >=@ |2017-01-01| et date_courante <=@ |2017-12-31| + date_courante >= |2017-01-01| et date_courante <= |2017-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 9,18 % + alors bmaf.montant * 9,18 % sinon 0 € exception définition montant_initial_base_troisième_enfant_mayotte sous condition - date_courante >=@ |2018-01-01| et date_courante <=@ |2018-12-31| + date_courante >= |2018-01-01| et date_courante <= |2018-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 10,89 % + alors bmaf.montant * 10,89 % sinon 0 € exception définition montant_initial_base_troisième_enfant_mayotte sous condition - date_courante >=@ |2019-01-01| et date_courante <=@ |2019-12-31| + date_courante >= |2019-01-01| et date_courante <= |2019-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 12,59 % + alors bmaf.montant * 12,59 % sinon 0 € exception définition montant_initial_base_troisième_enfant_mayotte sous condition - date_courante >=@ |2020-01-01| et date_courante <=@ |2020-12-31| + date_courante >= |2020-01-01| et date_courante <= |2020-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors bmaf.montant *€ 14,30 % + alors bmaf.montant * 14,30 % sinon 0 € ``` diff --git a/examples/allocations_familiales/epilogue.catala_fr b/examples/allocations_familiales/epilogue.catala_fr index 2f8ba37c..553c7799 100644 --- a/examples/allocations_familiales/epilogue.catala_fr +++ b/examples/allocations_familiales/epilogue.catala_fr @@ -9,8 +9,10 @@ la fonction du bloc de code ci-dessous. ```catala-metadata champ d'application EnfantLePlusÂgé: - définition le_plus_âgé égal à - contenu minimum date initial Enfant { + définition le_plus_âgé égal à + potentiel_plus_âgé parmi enfants tel que + potentiel_plus_âgé.date_de_naissance est minimum + ou si collection vide alors Enfant { -- identifiant: -1 -- obligation_scolaire: Pendant -- rémuneration_mensuelle: 0€ @@ -19,7 +21,6 @@ champ d'application EnfantLePlusÂgé: -- a_déjà_ouvert_droit_aux_allocations_familiales: faux -- bénéficie_titre_personnel_aide_personnelle_logement: faux } - pour potentiel_plus_âgé dans enfants de potentiel_plus_âgé.date_de_naissance champ d'application AllocationsFamiliales: @@ -37,16 +38,16 @@ champ d'application AllocationsFamiliales: si droit_ouvert_base alors montant_avec_garde_alternée_base sinon 0€ définition montant_versé_majoration égal à si droit_ouvert_base alors - somme argent pour enfant dans enfants_à_charge de - montant_avec_garde_alternée_majoration de enfant + somme argent de (montant_avec_garde_alternée_majoration de enfant) + pour enfant parmi enfants_à_charge sinon 0€ définition montant_versé égal à si droit_ouvert_base alors - montant_versé_base +€ - montant_versé_majoration +€ - montant_versé_forfaitaire +€ - montant_versé_complément_pour_base_et_majoration +€ + montant_versé_base + + montant_versé_majoration + + montant_versé_forfaitaire + + montant_versé_complément_pour_base_et_majoration + montant_versé_complément_pour_forfaitaire sinon 0€ ``` @@ -76,7 +77,7 @@ déclaration champ d'application InterfaceAllocationsFamiliales: allocations_familiales champ d'application AllocationsFamiliales entrée i_ressources_ménage contenu argent entrée i_résidence contenu Collectivité - sortie i_montant_versé contenu argent + résultat i_montant_versé contenu argent entrée i_personne_charge_effective_permanente_est_parent condition entrée i_personne_charge_effective_permanente_remplit_titre_I condition entrée i_avait_enfant_à_charge_avant_1er_janvier_2012 condition @@ -113,21 +114,22 @@ particulières imposant une scolarité plus longue. ```catala champ d'application InterfaceAllocationsFamiliales: - définition enfants_à_charge égal à application pour enfant dans i_enfants de - Enfant { - -- identifiant : enfant.d_identifiant - -- rémuneration_mensuelle : enfant.d_rémuneration_mensuelle - -- date_de_naissance : enfant.d_date_de_naissance - -- prise_en_charge : enfant.d_prise_en_charge - -- obligation_scolaire : - (si enfant.d_date_de_naissance +@ 3 an >=@ i_date_courante alors - Avant - sinon (si enfant.d_date_de_naissance +@ 16 an >=@ i_date_courante alors - Pendant - sinon Après)) - -- a_déjà_ouvert_droit_aux_allocations_familiales: - enfant.d_a_déjà_ouvert_droit_aux_allocations_familiales - -- bénéficie_titre_personnel_aide_personnelle_logement: - enfant.d_bénéficie_titre_personnel_aide_personnelle_logement - } + définition enfants_à_charge égal à + (Enfant { + -- identifiant : enfant.d_identifiant + -- rémuneration_mensuelle : enfant.d_rémuneration_mensuelle + -- date_de_naissance : enfant.d_date_de_naissance + -- prise_en_charge : enfant.d_prise_en_charge + -- obligation_scolaire : + (si enfant.d_date_de_naissance + 3 an >= i_date_courante alors + Avant + sinon (si enfant.d_date_de_naissance + 16 an >= i_date_courante alors + Pendant + sinon Après)) + -- a_déjà_ouvert_droit_aux_allocations_familiales: + enfant.d_a_déjà_ouvert_droit_aux_allocations_familiales + -- bénéficie_titre_personnel_aide_personnelle_logement: + enfant.d_bénéficie_titre_personnel_aide_personnelle_logement + } + pour enfant parmi i_enfants) ``` diff --git a/examples/allocations_familiales/prologue.catala_fr b/examples/allocations_familiales/prologue.catala_fr index d23f0d6c..b5b1141b 100644 --- a/examples/allocations_familiales/prologue.catala_fr +++ b/examples/allocations_familiales/prologue.catala_fr @@ -54,11 +54,11 @@ déclaration énumération ÉlémentPrestationsFamiliales: ```catala-metadata déclaration champ d'application PrestationsFamiliales: - sortie droit_ouvert condition dépend de Enfant - sortie conditions_hors_âge condition dépend de Enfant + résultat droit_ouvert condition dépend de Enfant + résultat conditions_hors_âge condition dépend de Enfant interne plafond_l512_3_2 contenu argent - sortie âge_l512_3_2 contenu durée - sortie régime_outre_mer_l751_1 condition + résultat âge_l512_3_2 contenu durée + résultat régime_outre_mer_l751_1 condition entrée date_courante contenu date entrée prestation_courante contenu ÉlémentPrestationsFamiliales entrée résidence contenu Collectivité @@ -73,11 +73,11 @@ champ d'application PrestationsFamiliales: ```catala-metadata déclaration champ d'application AllocationFamilialesAvril2008: - sortie âge_minimum_alinéa_1_l521_3 contenu durée + résultat âge_minimum_alinéa_1_l521_3 contenu durée déclaration champ d'application EnfantLePlusÂgé: entrée enfants contenu collection Enfant - sortie le_plus_âgé contenu Enfant + résultat le_plus_âgé contenu Enfant déclaration champ d'application AllocationsFamiliales: @@ -97,7 +97,7 @@ déclaration champ d'application AllocationsFamiliales: interne prise_en_compte contenu PriseEnCompte dépend de Enfant interne versement contenu VersementAllocations dépend de Enfant - sortie montant_versé contenu argent + résultat montant_versé contenu argent # Variables liées à la base des allications familiales interne droit_ouvert_base condition diff --git a/examples/allocations_familiales/securite_sociale_D.catala_fr b/examples/allocations_familiales/securite_sociale_D.catala_fr index 646df930..8cc3b86b 100644 --- a/examples/allocations_familiales/securite_sociale_D.catala_fr +++ b/examples/allocations_familiales/securite_sociale_D.catala_fr @@ -16,7 +16,7 @@ est défini selon le barème suivant : # Composantes des allocations familiales champ d'application AllocationsFamiliales : définition montant_initial_base égal à - montant_initial_base_deuxième_enfant +€ + montant_initial_base_deuxième_enfant + montant_initial_base_troisième_enfant_et_plus définition montant_initial_majoration de enfant égal à @@ -32,18 +32,18 @@ b) 41 % pour le troisième enfant à charge et chacun des suivants. ```catala champ d'application AllocationsFamiliales sous condition - ressources_ménage <=€ plafond_I_d521_3: + ressources_ménage <= plafond_I_d521_3: étiquette base définition montant_initial_base_deuxième_enfant égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 32 % + alors bmaf.montant * 32 % sinon 0 € définition montant_initial_base_troisième_enfant_et_plus égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors (bmaf.montant *€ 41 %) *€ ( - entier_vers_décimal de + alors (bmaf.montant * 41 %) * ( + décimal de ((nombre de enfants_à_charge_droit_ouvert_prestation_familiale) - 2) ) sinon 0 € ``` @@ -53,13 +53,13 @@ prestations familiales ; ```catala champ d'application AllocationsFamiliales sous condition - ressources_ménage <=€ plafond_I_d521_3: + ressources_ménage <= plafond_I_d521_3: définition montant_initial_métropole_majoration de enfant sous condition droit_ouvert_majoration de enfant conséquence égal à - bmaf.montant *€ 16 % + bmaf.montant * 16 % ``` 2° Lorsque le ménage ou la personne a disposé d'un montant de ressources @@ -72,19 +72,19 @@ b) 20,5 % pour le troisième enfant à charge et chacun des suivants. ```catala champ d'application AllocationsFamiliales sous condition - (ressources_ménage >€ plafond_I_d521_3) et - (ressources_ménage <=€ plafond_II_d521_3): + (ressources_ménage > plafond_I_d521_3) et + (ressources_ménage <= plafond_II_d521_3): étiquette base définition montant_initial_base_deuxième_enfant égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 16 % + alors bmaf.montant * 16 % sinon 0 € définition montant_initial_base_troisième_enfant_et_plus égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors (bmaf.montant *€ 20,5 %) *€ ( - entier_vers_décimal de + alors (bmaf.montant * 20,5 %) * ( + décimal de ((nombre de enfants_à_charge_droit_ouvert_prestation_familiale) - 2) ) sinon 0 € ``` @@ -94,13 +94,13 @@ prestations familiales ; ```catala champ d'application AllocationsFamiliales sous condition - (ressources_ménage >€ plafond_I_d521_3) et - (ressources_ménage <=€ plafond_II_d521_3): + (ressources_ménage > plafond_I_d521_3) et + (ressources_ménage <= plafond_II_d521_3): définition montant_initial_métropole_majoration de enfant sous condition droit_ouvert_majoration de enfant conséquence égal à - bmaf.montant *€ 8 % + bmaf.montant * 8 % ``` 3° Lorsque le ménage ou la personne a disposé d'un montant de ressources @@ -112,17 +112,17 @@ b) 10,25 % pour le troisième enfant à charge et chacun des suivants. ```catala champ d'application AllocationsFamiliales sous condition - ressources_ménage >€ plafond_II_d521_3: + ressources_ménage > plafond_II_d521_3: étiquette base définition montant_initial_base_deuxième_enfant égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 - alors bmaf.montant *€ 8 % + alors bmaf.montant * 8 % sinon 0 € définition montant_initial_base_troisième_enfant_et_plus égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 - alors (bmaf.montant *€ 10,25 %) *€ ( - entier_vers_décimal de + alors (bmaf.montant * 10,25 %) * ( + décimal de ((nombre de enfants_à_charge_droit_ouvert_prestation_familiale) - 2) ) sinon 0 € ``` @@ -132,12 +132,12 @@ prestations familiales. ```catala champ d'application AllocationsFamiliales sous condition - ressources_ménage >€ plafond_II_d521_3: + ressources_ménage > plafond_II_d521_3: définition montant_initial_métropole_majoration de enfant sous condition droit_ouvert_majoration de enfant conséquence égal à - bmaf.montant *€ 4 % + bmaf.montant * 4 % ``` II.-En application du sixième alinéa de l'article L. 521-1, le montant @@ -162,20 +162,20 @@ champ d'application AllocationsFamiliales : exception définition complément_dégressif de allocation sous condition - (ressources_ménage >€ plafond_I_d521_3) et - (ressources_ménage <=€ plafond_I_d521_3 +€ allocation *€ 12,0 ) + (ressources_ménage > plafond_I_d521_3) et + (ressources_ménage <= plafond_I_d521_3 + allocation * 12,0 ) conséquence égal à - (plafond_I_d521_3 +€ allocation *€ 12,0 -€ ressources_ménage) *€ - (1,0 /. 12,0) + (plafond_I_d521_3 + allocation * 12,0 - ressources_ménage) * + (1,0 / 12,0) exception définition complément_dégressif de allocation sous condition - (ressources_ménage >€ plafond_II_d521_3) et - (ressources_ménage <=€ plafond_II_d521_3 +€ allocation *€ 12,0) + (ressources_ménage > plafond_II_d521_3) et + (ressources_ménage <= plafond_II_d521_3 + allocation * 12,0) conséquence égal à - (plafond_II_d521_3 +€ allocation *€ 12,0 -€ ressources_ménage) *€ - (1,0 /. 12,0) + (plafond_II_d521_3 + allocation * 12,0 - ressources_ménage) * + (1,0 / 12,0) # Dans les autres cas, le dépassement est nul définition complément_dégressif de allocations égal à 0 € @@ -187,7 +187,7 @@ champ d'application AllocationsFamiliales : sinon 0 € définition montant_base_complément_pour_base_et_majoration égal à - montant_versé_base +€ montant_versé_majoration + montant_versé_base + montant_versé_majoration ``` ####### Article D521-2|LEGIARTI000030680324 @@ -197,9 +197,10 @@ champ d'application AllocationsFamiliales : # forfaitaires distribuées à chaque enfant du ménage champ d'application AllocationsFamiliales : définition montant_versé_forfaitaire égal à - montant_versé_forfaitaire_par_enfant *€ - entier_vers_décimal de (nombre pour enfant dans enfants_à_charge de - droit_ouvert_forfaitaire de enfant) + montant_versé_forfaitaire_par_enfant * + décimal de + nombre de (enfant parmi enfants_à_charge + tel que droit_ouvert_forfaitaire de enfant) ``` I.-Le montant mensuel de l'allocation forfaitaire prévue au deuxième alinéa de @@ -217,9 +218,9 @@ de calcul des allocations familiales par enfant ; champ d'application AllocationsFamiliales : définition montant_versé_forfaitaire_par_enfant sous condition - ressources_ménage <=€ plafond_I_d521_3 + ressources_ménage <= plafond_I_d521_3 conséquence égal à - (bmaf.montant *€ 20,234 %) + (bmaf.montant * 20,234 %) ``` 2° Lorsque le ménage ou la personne a disposé d'un montant de ressources @@ -231,10 +232,10 @@ familiales par enfant ; ```catala champ d'application AllocationsFamiliales : définition montant_versé_forfaitaire_par_enfant sous condition - (ressources_ménage >€ plafond_I_d521_3) et - (ressources_ménage <=€ plafond_II_d521_3) + (ressources_ménage > plafond_I_d521_3) et + (ressources_ménage <= plafond_II_d521_3) conséquence égal à - (bmaf.montant *€ 10,117 %) + (bmaf.montant * 10,117 %) ``` 3° Lorsque le ménage ou la personne a disposé d'un montant de ressources @@ -245,9 +246,9 @@ des allocations familiales par enfant. ```catala champ d'application AllocationsFamiliales : définition montant_versé_forfaitaire_par_enfant sous condition - ressources_ménage >€ plafond_II_d521_3 + ressources_ménage > plafond_II_d521_3 conséquence égal à - (bmaf.montant *€ 5,059 %) + (bmaf.montant * 5,059 %) ``` II.-En application du sixième alinéa de l'article L. 521-1, le montant mensuel @@ -264,22 +265,22 @@ champ d'application AllocationsFamiliales : exception définition montant_versé_complément_pour_forfaitaire sous condition - (ressources_ménage >€ plafond_I_d521_3) et - (ressources_ménage <=€ plafond_I_d521_3 +€ - montant_versé_forfaitaire *€ 12,0 ) + (ressources_ménage > plafond_I_d521_3) et + (ressources_ménage <= plafond_I_d521_3 + + montant_versé_forfaitaire * 12,0 ) conséquence égal à - (plafond_I_d521_3 +€ montant_versé_forfaitaire *€ 12,0 - -€ ressources_ménage) *€ (1,0 /. 12,0) + (plafond_I_d521_3 + montant_versé_forfaitaire * 12,0 + - ressources_ménage) * (1,0 / 12,0) exception définition montant_versé_complément_pour_forfaitaire sous condition - (ressources_ménage >€ plafond_II_d521_3) et - (ressources_ménage <=€ plafond_II_d521_3 +€ - montant_versé_forfaitaire *€ 12,0) + (ressources_ménage > plafond_II_d521_3) et + (ressources_ménage <= plafond_II_d521_3 + + montant_versé_forfaitaire * 12,0) conséquence égal à - (plafond_II_d521_3 +€ montant_versé_forfaitaire *€ 12,0 - -€ ressources_ménage) *€ (1,0 /. 12,0) + (plafond_II_d521_3 + montant_versé_forfaitaire * 12,0 + - ressources_ménage) * (1,0 / 12,0) # Dans les autres cas, le dépassement est nul définition montant_versé_complément_pour_forfaitaire égal à 0 € @@ -300,8 +301,8 @@ I.-Le plafond prévu au 1° du I des articles D. 521-1 et D. 521-2 est fixé à ```catala champ d'application AllocationsFamiliales : - définition plafond_I_d521_3 égal à 55 950 € +€ - 5 595 € *€ (entier_vers_décimal de + définition plafond_I_d521_3 égal à 55 950 € + + 5 595 € * (décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale)) ``` @@ -310,8 +311,8 @@ II.-Le plafond prévu au 2° du I des articles D. 521-1 et D. 521-2 est fixé à ```catala champ d'application AllocationsFamiliales : - définition plafond_II_d521_3 égal à 78 300 € +€ - 5 595 € *€ (entier_vers_décimal de + définition plafond_II_d521_3 égal à 78 300 € + + 5 595 € * (décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale)) ``` @@ -364,7 +365,7 @@ champ d'application AllocationsFamiliales : prestations_familiales.régime_outre_mer_l751_1 et (nombre de enfants_à_charge_droit_ouvert_prestation_familiale = 1) conséquence égal à - bmaf.montant *€ 5,88 % + bmaf.montant * 5,88 % ``` informatique La majoration des allocations familiales pour un seul enfant à charge est @@ -378,17 +379,17 @@ champ d'application AllocationsFamiliales : (droit_ouvert_majoration de enfant) et prestations_familiales.régime_outre_mer_l751_1 et (nombre de enfants_à_charge_droit_ouvert_prestation_familiale = 1) et - (enfant.date_de_naissance +@ 11 an <=@ date_courante et - enfant.date_de_naissance +@ 16 an >@ date_courante) + (enfant.date_de_naissance + 11 an <= date_courante et + enfant.date_de_naissance + 16 an > date_courante) conséquence égal à - bmaf.montant *€ 3,69 % + bmaf.montant * 3,69 % exception définition montant_initial_majoration de enfant sous condition (droit_ouvert_majoration de enfant) et prestations_familiales.régime_outre_mer_l751_1 et (nombre de enfants_à_charge_droit_ouvert_prestation_familiale = 1) et - (enfant.date_de_naissance +@ 16 an <=@ date_courante) + (enfant.date_de_naissance + 16 an <= date_courante) conséquence égal à - bmaf.montant *€ 5,67 % + bmaf.montant * 5,67 % ``` diff --git a/examples/allocations_familiales/securite_sociale_L.catala_fr b/examples/allocations_familiales/securite_sociale_L.catala_fr index 21c6a747..3e9e8435 100644 --- a/examples/allocations_familiales/securite_sociale_L.catala_fr +++ b/examples/allocations_familiales/securite_sociale_L.catala_fr @@ -58,23 +58,23 @@ tout enfant dont la rémunération éventuelle n'excède pas un plafond. champ d'application PrestationsFamiliales : étiquette cas_base règle droit_ouvert de enfant sous condition enfant.obligation_scolaire sous forme Après et - (enfant.rémuneration_mensuelle <=€ plafond_l512_3_2) et - (enfant.date_de_naissance +@ âge_l512_3_2 >@ date_courante) + (enfant.rémuneration_mensuelle <= plafond_l512_3_2) et + (enfant.date_de_naissance + âge_l512_3_2 > date_courante) conséquence rempli # On définit les conditions hors âge d'abord car elles # sont référencées plus tard dans l'article L521-1 règle conditions_hors_âge de enfant sous condition - enfant.obligation_scolaire sous forme Avant ou - enfant.obligation_scolaire sous forme Pendant ou - enfant.obligation_scolaire sous forme Après et - (enfant.rémuneration_mensuelle <=€ plafond_l512_3_2) + (enfant.obligation_scolaire sous forme Avant ou + enfant.obligation_scolaire sous forme Pendant ou + enfant.obligation_scolaire sous forme Après) et + (enfant.rémuneration_mensuelle <= plafond_l512_3_2) conséquence rempli champ d'application AllocationsFamiliales: définition enfants_à_charge_droit_ouvert_prestation_familiale égal à - filtre pour enfant dans enfants_à_charge de - prestations_familiales.droit_ouvert de enfant + enfant parmi enfants_à_charge + tel que prestations_familiales.droit_ouvert de enfant ``` Toutefois, pour l'attribution du complément familial et de l'allocation @@ -120,8 +120,8 @@ champ d'application AllocationsFamiliales : # Puisqu'un enfant ne garde un âge donné que pour une période d'un an, # cette condition assure que l'allocation ne peut être distribuée que pour # un an. - ((enfant.date_de_naissance +@ prestations_familiales.âge_l512_3_2) -@ - date_courante <^ 365 jour) et + ((enfant.date_de_naissance + prestations_familiales.âge_l512_3_2) - + date_courante < 365 jour) et (enfant.a_déjà_ouvert_droit_aux_allocations_familiales) et (prestations_familiales.conditions_hors_âge de enfant) conséquence rempli @@ -298,7 +298,7 @@ champ d'application AllocationsFamiliales : règle droit_ouvert_majoration de enfant sous condition (non (est_enfant_le_plus_âgé de enfant)) et - (enfant.date_de_naissance +@ âge_minimum_alinéa_1_l521_3 de enfant <=@ + (enfant.date_de_naissance + âge_minimum_alinéa_1_l521_3 de enfant <= date_courante) conséquence rempli ``` @@ -314,7 +314,7 @@ champ d'application AllocationsFamiliales : sous condition (nombre de enfants_à_charge_droit_ouvert_prestation_familiale >= nombre_enfants_alinéa_2_l521_3) et - (enfant.date_de_naissance +@ âge_minimum_alinéa_1_l521_3 de enfant <=@ + (enfant.date_de_naissance + âge_minimum_alinéa_1_l521_3 de enfant <= date_courante) conséquence rempli ``` diff --git a/examples/allocations_familiales/securite_sociale_R.catala_fr b/examples/allocations_familiales/securite_sociale_R.catala_fr index 2cc2d527..1b5b1ab2 100644 --- a/examples/allocations_familiales/securite_sociale_R.catala_fr +++ b/examples/allocations_familiales/securite_sociale_R.catala_fr @@ -29,7 +29,7 @@ articles L. 141-1 à L. 141-9 du code du travail, multiplié par 169. ```catala champ d'application PrestationsFamiliales : définition plafond_l512_3_2 égal à - (smic.brut_horaire *€ 55 %) *€ 169,0 + (smic.brut_horaire * 55 %) * 169,0 ``` Pour ceux des enfants qui bénéficient d'avantages en nature, l'évaluation de ces @@ -80,7 +80,7 @@ champ d'application AllocationFamilialesAvril2008: champ d'application AllocationsFamiliales : exception définition âge_minimum_alinéa_1_l521_3 de enfant - sous condition (enfant.date_de_naissance +@ 11 an <=@ |2008-04-30|) + sous condition (enfant.date_de_naissance + 11 an <= |2008-04-30|) conséquence égal à version_avril_2008.âge_minimum_alinéa_1_l521_3 ``` @@ -123,11 +123,11 @@ d'enfants et le nombre total d'enfants. ```catala champ d'application AllocationsFamiliales : définition montant_avec_garde_alternée_base égal à - montant_initial_base *€ rapport_enfants_total_moyen + montant_initial_base * rapport_enfants_total_moyen définition rapport_enfants_total_moyen égal à si nombre_total_enfants = 0,0 alors 0,0 sinon - (nombre_moyen_enfants /. nombre_total_enfants) + (nombre_moyen_enfants / nombre_total_enfants) ``` Le nombre moyen d'enfants, pour chaque foyer, est obtenu en faisant la somme @@ -140,17 +140,15 @@ du nombre d'enfants à charge dans les conditions suivantes : ```catala champ d'application AllocationsFamiliales : définition nombre_moyen_enfants égal à - somme décimal pour enfant dans - enfants_à_charge_droit_ouvert_prestation_familiale - de ( - selon (prise_en_compte de enfant) sous forme - -- Complète : 1,0 - -- Partagée : 0,5 - # Pas directement dans cet article de loi, mais concerne le - # cas où l'enfant est pris en charge par les services sociaux et - # la part de l'allocation va également au service social - -- Zéro: 0,0 - ) + somme décimal de + ((selon (prise_en_compte de enfant) sous forme + -- Complète : 1,0 + -- Partagée : 0,5 + # Pas directement dans cet article de loi, mais concerne le + # cas où l'enfant est pris en charge par les services sociaux et + # la part de l'allocation va également au service social + -- Zéro: 0,0) + pour enfant parmi enfants_à_charge_droit_ouvert_prestation_familiale) ``` Le nombre total d'enfants, pour chaque foyer, est obtenu en faisant la somme du @@ -160,7 +158,7 @@ enfants à charge. ```catala champ d'application AllocationsFamiliales : définition nombre_total_enfants égal à - entier_vers_décimal de (nombre de + décimal de (nombre de enfants_à_charge_droit_ouvert_prestation_familiale) ``` @@ -186,7 +184,7 @@ alternée, le montant servi au titre de cette majoration est réduit de moitié. champ d'application AllocationsFamiliales : définition montant_avec_garde_alternée_majoration de enfant - égal à montant_initial_majoration de enfant *€ ( + égal à montant_initial_majoration de enfant * ( selon (prise_en_compte de enfant) sous forme -- Complète : 100% -- Partagée : 50% @@ -216,5 +214,5 @@ champ d'application PrestationsFamiliales : définition plafond_l512_3_2 sous condition régime_outre_mer_l751_1 conséquence égal à - (smic.brut_horaire *€ 55%) *€ 169,0 + (smic.brut_horaire * 55%) * 169,0 ``` diff --git a/examples/allocations_familiales/tests/tests_allocations_familiales.catala_fr b/examples/allocations_familiales/tests/tests_allocations_familiales.catala_fr index 0aede701..e2e0079c 100644 --- a/examples/allocations_familiales/tests/tests_allocations_familiales.catala_fr +++ b/examples/allocations_familiales/tests/tests_allocations_familiales.catala_fr @@ -4,11 +4,11 @@ ```catala déclaration champ d'application Données: - sortie enfant1 contenu EnfantEntrée - sortie enfant2 contenu EnfantEntrée - sortie enfant3 contenu EnfantEntrée - sortie enfant4 contenu EnfantEntrée - sortie enfant5 contenu EnfantEntrée + résultat enfant1 contenu EnfantEntrée + résultat enfant2 contenu EnfantEntrée + résultat enfant3 contenu EnfantEntrée + résultat enfant4 contenu EnfantEntrée + résultat enfant5 contenu EnfantEntrée champ d'application Données: définition enfant1 égal à EnfantEntrée { diff --git a/examples/allocations_familiales/tests/tests_ouverture_droits.catala_fr b/examples/allocations_familiales/tests/tests_ouverture_droits.catala_fr index 3016fd60..0bed2d8c 100644 --- a/examples/allocations_familiales/tests/tests_ouverture_droits.catala_fr +++ b/examples/allocations_familiales/tests/tests_ouverture_droits.catala_fr @@ -4,10 +4,10 @@ ```catala déclaration champ d'application Données: - sortie enfant1 contenu Enfant - sortie enfant2 contenu Enfant - sortie enfant3 contenu Enfant - sortie enfant4 contenu Enfant + résultat enfant1 contenu Enfant + résultat enfant2 contenu Enfant + résultat enfant3 contenu Enfant + résultat enfant4 contenu Enfant champ d'application Données: définition enfant1 égal à Enfant { diff --git a/examples/base_mensuelle_allocations_familiales/bmaf.catala_fr b/examples/base_mensuelle_allocations_familiales/bmaf.catala_fr index b4242bb7..22620fcf 100644 --- a/examples/base_mensuelle_allocations_familiales/bmaf.catala_fr +++ b/examples/base_mensuelle_allocations_familiales/bmaf.catala_fr @@ -3,7 +3,7 @@ ```catala-metadata déclaration champ d'application BaseMensuelleAllocationsFamiliales: entrée date_courante contenu date - sortie montant contenu argent + résultat montant contenu argent ``` ## Instruction ministérielle N°DSS/SD2B/2019/65 du 25 mars 2019 relative à la revalorisation au 1er avril 2019 des prestations familiales servies en métropole @@ -25,8 +25,8 @@ familiales, est ainsi porté de 411,92 € à 413,16 € au 1er avril 2019. champ d'application BaseMensuelleAllocationsFamiliales : définition montant sous condition - date_courante >=@ |2019-04-01| et - date_courante <@ |2020-04-01| + date_courante >= |2019-04-01| et + date_courante < |2020-04-01| conséquence égal à 413,16 € ``` @@ -45,8 +45,8 @@ est ainsi porté de 413,16 € à 414,4 € au 1er avril 2020. champ d'application BaseMensuelleAllocationsFamiliales : définition montant sous condition - date_courante >=@ |2020-04-01| et - date_courante <@ |2021-04-01| + date_courante >= |2020-04-01| et + date_courante < |2021-04-01| conséquence égal à 414,4 € ``` @@ -61,8 +61,8 @@ est donc porté de 414,4 € au 1er avril 2020 à 414,81 € au 1er avril 2021. champ d'application BaseMensuelleAllocationsFamiliales : définition montant sous condition - date_courante >=@ |2021-04-01| et - date_courante <@ |2022-04-01| + date_courante >= |2021-04-01| et + date_courante < |2022-04-01| conséquence égal à 414,81 € ``` @@ -79,7 +79,7 @@ de 414,81 € au 1er avril 2021 à 422,28 € au 1er avril 2022. champ d'application BaseMensuelleAllocationsFamiliales : définition montant sous condition - date_courante >=@ |2022-04-01| et - date_courante <@ |2023-04-01| + date_courante >= |2022-04-01| et + date_courante < |2023-04-01| conséquence égal à 422,28 € ``` diff --git a/examples/code_general_impots/Section_I_Dispositions_generales.catala_fr b/examples/code_general_impots/Section_I_Dispositions_generales.catala_fr index 5569a975..8cf5b78d 100644 --- a/examples/code_general_impots/Section_I_Dispositions_generales.catala_fr +++ b/examples/code_general_impots/Section_I_Dispositions_generales.catala_fr @@ -42,13 +42,13 @@ total dont sont retranchées les charges énumérées à l'article 156. ```catala champ d'application CalculImpôtSurLeRevenu: définition revenu_net_global égal à - détail_revenu_net_global.revenus_fonciers +€ - détail_revenu_net_global.bénéfices_industriels_commerciaux +€ - détail_revenu_net_global.rémunérations_dirigeants +€ - détail_revenu_net_global.bénéfices_agricoles +€ - détail_revenu_net_global.traitements_salaires +€ - détail_revenu_net_global.bénéfices_non_commerciaux +€ - détail_revenu_net_global.revenus_capitaux_mobiliers +€ + détail_revenu_net_global.revenus_fonciers + + détail_revenu_net_global.bénéfices_industriels_commerciaux + + détail_revenu_net_global.rémunérations_dirigeants + + détail_revenu_net_global.bénéfices_agricoles + + détail_revenu_net_global.traitements_salaires + + détail_revenu_net_global.bénéfices_non_commerciaux + + détail_revenu_net_global.revenus_capitaux_mobiliers + détail_revenu_net_global.plus_values ``` @@ -64,7 +64,7 @@ Celles dont le domicile fiscal est situé hors de France sont passibles de cet i champ d'application CalculImpôtSurLeRevenu: définition revenus égal à si domicile_fiscal = France alors - montants_sources_revenus.source_française +€ + montants_sources_revenus.source_française + montants_sources_revenus.source_étrangère sinon montants_sources_revenus.source_française diff --git a/examples/droit_successions/droit_successions.catala_fr b/examples/droit_successions/droit_successions.catala_fr index c7506681..118c404d 100644 --- a/examples/droit_successions/droit_successions.catala_fr +++ b/examples/droit_successions/droit_successions.catala_fr @@ -30,7 +30,7 @@ déclaration structure BienUsufruitRenteViagère: donnée prise_en_compte_pour_réserve_héréditaire contenu booléen déclaration champ d'application RéserveHéréditaire: - sortie quotité_réserve_héréditaire contenu décimal + résultat quotité_réserve_héréditaire contenu décimal entrée enfants contenu collection Enfant interne enfant_pris_en_compte_réserve_héréditaire contenu booléen dépend de Enfant interne enfants_réserve_héréditaire contenu collection Enfant @@ -38,8 +38,8 @@ déclaration champ d'application RéserveHéréditaire: entrée patrimoine_total contenu argent entrée biens_usufruit_rente_viagère contenu collection BienUsufruitRenteViagère - sortie patrimoine_assiette_réserve_héréditaire contenu argent - sortie montant_réserve_héréditaire contenu argent + résultat patrimoine_assiette_réserve_héréditaire contenu argent + résultat montant_réserve_héréditaire contenu argent ``` ######## Article 913 | LEGIARTI000006435557 @@ -53,15 +53,15 @@ ou un plus grand nombre. champ d'application RéserveHéréditaire: définition quotité_réserve_héréditaire sous condition nombre de enfants_réserve_héréditaire = 1 conséquence - égal à 1,0 /. 2,0 + égal à 1,0 / 2,0 définition quotité_réserve_héréditaire sous condition nombre de enfants_réserve_héréditaire = 2 conséquence - égal à 1,0 /. 3,0 + égal à 1,0 / 3,0 définition quotité_réserve_héréditaire sous condition nombre de enfants_réserve_héréditaire >= 3 conséquence - égal à 1,0 /. 4,0 + égal à 1,0 / 4,0 ``` L'enfant qui renonce à la succession n'est compris dans le nombre d'enfants @@ -76,7 +76,7 @@ champ d'application RéserveHéréditaire: sinon vrai définition enfants_réserve_héréditaire égal à - filtre pour enfant dans enfants de + enfant parmi enfants tel que (enfant_pris_en_compte_réserve_héréditaire de enfant) ``` @@ -100,7 +100,7 @@ conjoint survivant, non divorcé. champ d'application RéserveHéréditaire: définition quotité_réserve_héréditaire sous condition nombre de enfants_réserve_héréditaire = 0 et conjoint_survivant_non_divorcé - conséquence égal à 1,0 -. (3,0 /. 4,0) + conséquence égal à 1,0 - (3,0 / 4,0) ``` NOTA: @@ -130,10 +130,11 @@ disponible. ```catala champ d'application RéserveHéréditaire: définition patrimoine_assiette_réserve_héréditaire égal à - patrimoine_total -€ ( - somme argent pour bien dans biens_usufruit_rente_viagère de + patrimoine_total - ( + somme argent de (si bien.prise_en_compte_pour_réserve_héréditaire - alors 0 € sinon bien.valeur)) + alors 0 € sinon bien.valeur) + pour bien parmi biens_usufruit_rente_viagère) définition montant_réserve_héréditaire égal à - patrimoine_assiette_réserve_héréditaire *€ quotité_réserve_héréditaire + patrimoine_assiette_réserve_héréditaire * quotité_réserve_héréditaire ``` diff --git a/examples/droit_successions/tests/tests_droit_succession.catala_fr b/examples/droit_successions/tests/tests_droit_succession.catala_fr index 0cc9a173..f1aa25a9 100644 --- a/examples/droit_successions/tests/tests_droit_succession.catala_fr +++ b/examples/droit_successions/tests/tests_droit_succession.catala_fr @@ -4,7 +4,7 @@ ```catala déclaration champ d'application Enfants: - sortie base contenu Enfant dépend de entier + résultat base contenu Enfant dépend de entier champ d'application Enfants: définition base de identifiant égal à diff --git a/examples/hawaii_lfo/Title17-MotorAndOtherVehicles.catala_en b/examples/hawaii_lfo/Title17-MotorAndOtherVehicles.catala_en index 09469bfb..d4e0beea 100644 --- a/examples/hawaii_lfo/Title17-MotorAndOtherVehicles.catala_en +++ b/examples/hawaii_lfo/Title17-MotorAndOtherVehicles.catala_en @@ -55,10 +55,10 @@ declaration scope Penalty286_83_135: ```catala scope Penalty286_83_135: - rule fine_ok under condition min_fine <=$ fine and fine <=$ max_fine + rule fine_ok under condition min_fine <= fine and fine <= max_fine consequence fulfilled - rule days_ok under condition days <=^ max_days + rule days_ok under condition days <= max_days consequence fulfilled rule ok under condition fine_ok and days_ok @@ -120,7 +120,7 @@ scope Penalty286_83_135: definition priors_same_offense equals number for prior in defendant.priors of ( prior.violation = offense.violation and - prior.date_of +@ 5 year <=@ offense.date_of + prior.date_of + 5 year <= offense.date_of ) rule paragraph_b_applies under condition diff --git a/examples/polish_taxes/podatek_od_czynnosci_cywilnoprawnych/rozdzial_3.catala_pl b/examples/polish_taxes/podatek_od_czynnosci_cywilnoprawnych/rozdzial_3.catala_pl index 9a11a794..c11339a3 100644 --- a/examples/polish_taxes/podatek_od_czynnosci_cywilnoprawnych/rozdzial_3.catala_pl +++ b/examples/polish_taxes/podatek_od_czynnosci_cywilnoprawnych/rozdzial_3.catala_pl @@ -17,7 +17,7 @@ deklaracja zakres UmowaSprzedazy: zakres UmowaSprzedazy: definicja podatek wynosi - kwota *$ stawka_podatku + kwota * stawka_podatku zakres UmowaSprzedazy: etykieta a7_u1_p1_ppa @@ -48,7 +48,7 @@ deklaracja zakres UmowaZamianyLubDarowizny: zakres UmowaZamianyLubDarowizny: definicja podatek wynosi - kwota *$ stawka_podatku + kwota * stawka_podatku zakres UmowaZamianyLubDarowizny: etykieta a7_u1_p2_ppa @@ -75,7 +75,7 @@ deklaracja zakres OdplatneUzytkowanie: zakres OdplatneUzytkowanie: definicja podatek wynosi - kwota *$ stawka_podatku + kwota * stawka_podatku zakres OdplatneUzytkowanie: definicja stawka_podatku wynosi 1% @@ -91,7 +91,7 @@ deklaracja zakres PozyczkaLubDepozytNieprawidlowy: zakres PozyczkaLubDepozytNieprawidlowy: definicja podatek wynosi - kwota *$ stawka_podatku # TODO: extract somehow? + kwota * stawka_podatku # TODO: extract somehow? # this exists in every declaration zakres PozyczkaLubDepozytNieprawidlowy: @@ -112,7 +112,7 @@ deklaracja zakres Hipoteka: zakres Hipoteka: etykieta a7_u1_p7_ppa definicja podatek wynosi - kwota *$ stawka_podatku + kwota * stawka_podatku zakres Hipoteka: definicja stawka_podatku wynosi 0.1% @@ -138,7 +138,7 @@ deklaracja zakres UmowaSpolki: zakres UmowaSpolki: definicja podatek wynosi - kwota *$ stawka_podatku + kwota * stawka_podatku zakres UmowaSpolki: definicja stawka_podatku wynosi 0.5% diff --git a/examples/prestations_familiales/prologue.catala_fr b/examples/prestations_familiales/prologue.catala_fr index f549a3f8..457f1e22 100644 --- a/examples/prestations_familiales/prologue.catala_fr +++ b/examples/prestations_familiales/prologue.catala_fr @@ -37,11 +37,11 @@ déclaration énumération ÉlémentPrestationsFamiliales: -- AllocationJournalièrePresenceParentale déclaration champ d'application ÉligibilitéPrestationsFamiliales: - sortie droit_ouvert condition dépend de EnfantPrestationsFamiliales - sortie conditions_hors_âge condition dépend de EnfantPrestationsFamiliales + résultat droit_ouvert condition dépend de EnfantPrestationsFamiliales + résultat conditions_hors_âge condition dépend de EnfantPrestationsFamiliales interne plafond_l512_3_2 contenu argent - sortie âge_l512_3_2 contenu durée - sortie régime_outre_mer_l751_1 condition + résultat âge_l512_3_2 contenu durée + résultat régime_outre_mer_l751_1 condition entrée date_courante contenu date entrée prestation_courante contenu ÉlémentPrestationsFamiliales entrée résidence contenu Collectivité diff --git a/examples/prestations_familiales/sécurité_sociale_L.catala_fr b/examples/prestations_familiales/sécurité_sociale_L.catala_fr index 74317db7..6d2b26e0 100644 --- a/examples/prestations_familiales/sécurité_sociale_L.catala_fr +++ b/examples/prestations_familiales/sécurité_sociale_L.catala_fr @@ -53,8 +53,8 @@ ouvre droit aux prestations familiales : ```catala champ d'application ÉligibilitéPrestationsFamiliales : étiquette cas_base règle droit_ouvert de enfant sous condition - enfant.EnfantPrestationsFamiliales.obligation_scolaire sous forme Avant ou - enfant.EnfantPrestationsFamiliales.obligation_scolaire sous forme Pendant + enfant.obligation_scolaire sous forme Avant ou + enfant.obligation_scolaire sous forme Pendant conséquence rempli ``` @@ -64,20 +64,20 @@ dont la rémunération éventuelle n'excède pas un plafond. ```catala champ d'application ÉligibilitéPrestationsFamiliales : étiquette cas_base règle droit_ouvert de enfant sous condition - enfant.EnfantPrestationsFamiliales.obligation_scolaire sous forme Après et - (enfant.EnfantPrestationsFamiliales.rémuneration_mensuelle <=€ + enfant.obligation_scolaire sous forme Après et + (enfant.rémuneration_mensuelle <= plafond_l512_3_2) et - (enfant.EnfantPrestationsFamiliales.date_de_naissance +@ âge_l512_3_2 >@ + (enfant.date_de_naissance + âge_l512_3_2 > date_courante) conséquence rempli # On définit les conditions hors âge d'abord car elles # sont référencées plus tard dans l'article L521-1 règle conditions_hors_âge de enfant sous condition - enfant.EnfantPrestationsFamiliales.obligation_scolaire sous forme Avant ou - enfant.EnfantPrestationsFamiliales.obligation_scolaire sous forme Pendant ou - enfant.EnfantPrestationsFamiliales.obligation_scolaire sous forme Après et - (enfant.EnfantPrestationsFamiliales.rémuneration_mensuelle <=€ + (enfant.obligation_scolaire sous forme Avant ou + enfant.obligation_scolaire sous forme Pendant ou + enfant.obligation_scolaire sous forme Après) et + (enfant.rémuneration_mensuelle <= plafond_l512_3_2) conséquence rempli ``` diff --git a/examples/prestations_familiales/sécurité_sociale_R.catala_fr b/examples/prestations_familiales/sécurité_sociale_R.catala_fr index e5702112..9049ec8d 100644 --- a/examples/prestations_familiales/sécurité_sociale_R.catala_fr +++ b/examples/prestations_familiales/sécurité_sociale_R.catala_fr @@ -29,7 +29,7 @@ articles L. 141-1 à L. 141-9 du code du travail, multiplié par 169. ```catala champ d'application ÉligibilitéPrestationsFamiliales : définition plafond_l512_3_2 égal à - (smic.brut_horaire *€ 55 %) *€ 169,0 + (smic.brut_horaire * 55 %) * 169,0 ``` Pour ceux des enfants qui bénéficient d'avantages en nature, l'évaluation de ces @@ -61,5 +61,5 @@ champ d'application ÉligibilitéPrestationsFamiliales : définition plafond_l512_3_2 sous condition régime_outre_mer_l751_1 conséquence égal à - (smic.brut_horaire *€ 55%) *€ 169,0 + (smic.brut_horaire * 55%) * 169,0 ``` diff --git a/examples/prestations_familiales/tests/tests_ouverture_droits.catala_fr b/examples/prestations_familiales/tests/tests_ouverture_droits.catala_fr index cf7f02ff..d7f6e5fa 100644 --- a/examples/prestations_familiales/tests/tests_ouverture_droits.catala_fr +++ b/examples/prestations_familiales/tests/tests_ouverture_droits.catala_fr @@ -4,10 +4,10 @@ ```catala déclaration champ d'application Données: - sortie enfant1 contenu EnfantPrestationsFamiliales - sortie enfant2 contenu EnfantPrestationsFamiliales - sortie enfant3 contenu EnfantPrestationsFamiliales - sortie enfant4 contenu EnfantPrestationsFamiliales + résultat enfant1 contenu EnfantPrestationsFamiliales + résultat enfant2 contenu EnfantPrestationsFamiliales + résultat enfant3 contenu EnfantPrestationsFamiliales + résultat enfant4 contenu EnfantPrestationsFamiliales champ d'application Données: définition enfant1 égal à EnfantPrestationsFamiliales { diff --git a/examples/smic/smic.catala_fr b/examples/smic/smic.catala_fr index d0b6c93c..10031bc6 100644 --- a/examples/smic/smic.catala_fr +++ b/examples/smic/smic.catala_fr @@ -8,7 +8,7 @@ déclaration champ d'application Smic : entrée date_courante contenu date entrée résidence contenu Collectivité - sortie brut_horaire contenu argent + résultat brut_horaire contenu argent ``` ## Décret n° 2018-1173 du 19 décembre 2018 portant relèvement du salaire minimum de croissance @@ -26,7 +26,7 @@ son montant est porté à 10,03 € l'heure. ```catala champ d'application Smic : définition brut_horaire sous condition - date_courante >=@ |2019-01-01| et date_courante <=@ |2019-12-31| et ( + date_courante >= |2019-01-01| et date_courante <= |2019-12-31| et ( (résidence = Métropole) ou (résidence = Guadeloupe) ou (résidence = Guyane) ou @@ -44,7 +44,7 @@ champ d'application Smic : ```catala champ d'application Smic : définition brut_horaire sous condition - date_courante >=@ |2019-01-01| et date_courante <=@ |2019-12-31| et ( + date_courante >= |2019-01-01| et date_courante <= |2019-12-31| et ( (résidence = Mayotte) ) conséquence égal à 7,57 € @@ -65,7 +65,7 @@ son montant est porté à 10,15 € l'heure ; ```catala champ d'application Smic : définition brut_horaire sous condition - date_courante >=@ |2020-01-01| et date_courante <=@ |2020-12-31| et ( + date_courante >= |2020-01-01| et date_courante <= |2020-12-31| et ( (résidence = Métropole) ou (résidence = Guadeloupe) ou (résidence = Guyane) ou @@ -83,7 +83,7 @@ champ d'application Smic : ```catala champ d'application Smic : définition brut_horaire sous condition - date_courante >=@ |2020-01-01| et date_courante <=@ |2020-12-31| et ( + date_courante >= |2020-01-01| et date_courante <= |2020-12-31| et ( (résidence = Mayotte) ) conséquence égal à 7,66 € @@ -104,7 +104,7 @@ son montant est porté à 10,25 € l'heure ; ```catala champ d'application Smic : définition brut_horaire sous condition - date_courante >=@ |2021-01-01| et date_courante <=@ |2021-12-31| et ( + date_courante >= |2021-01-01| et date_courante <= |2021-12-31| et ( (résidence = Métropole) ou (résidence = Guadeloupe) ou (résidence = Guyane) ou @@ -122,7 +122,7 @@ champ d'application Smic : ```catala champ d'application Smic : définition brut_horaire sous condition - date_courante >=@ |2021-01-01| et date_courante <=@ |2021-12-31| et ( + date_courante >= |2021-01-01| et date_courante <= |2021-12-31| et ( (résidence = Mayotte) ) conséquence égal à 7,74 € @@ -143,7 +143,7 @@ porté à 10,57 euros l'heure. ```catala champ d'application Smic : définition brut_horaire sous condition - date_courante >=@ |2022-01-01| et date_courante <=@ |2022-04-30| et ( + date_courante >= |2022-01-01| et date_courante <= |2022-04-30| et ( (résidence = Métropole) ou (résidence = Guadeloupe) ou (résidence = Guyane) ou @@ -162,7 +162,7 @@ champ d'application Smic : ```catala champ d'application Smic : définition brut_horaire sous condition - date_courante >=@ |2022-01-01| et date_courante <=@ |2022-04-30| et ( + date_courante >= |2022-01-01| et date_courante <= |2022-04-30| et ( (résidence = Mayotte) ) conséquence égal à 7,98 € @@ -183,7 +183,7 @@ est porté à 10,85 € l'heure ; ```catala champ d'application Smic : définition brut_horaire sous condition - date_courante >=@ |2022-05-01| et date_courante <=@ |2022-12-31| et ( + date_courante >= |2022-05-01| et date_courante <= |2022-07-31| et ( (résidence = Métropole) ou (résidence = Guadeloupe) ou (résidence = Guyane) ou @@ -201,8 +201,87 @@ champ d'application Smic : ```catala champ d'application Smic : définition brut_horaire sous condition - date_courante >=@ |2022-05-01| et date_courante <=@ |2022-12-31| et ( + date_courante >= |2022-05-01| et date_courante <= |2022-07-31| et ( (résidence = Mayotte) ) conséquence égal à 8,19 € ``` + +## Arrêté du 29 juillet 2022 relatif au relèvement du salaire minimum de croissance + +### Article 2 | JORFARTI000046113526 + +En conséquence, à compter du 1er août 2022, pour les catégories de travailleurs +mentionnés à l'article L. 2211-1 du code du travail, le montant du salaire +minimum de croissance est relevé dans les conditions ci-après : + +1° En métropole, en Guadeloupe, en Guyane, en Martinique, à La Réunion, +à Saint-Barthélemy, à Saint-Martin et à Saint-Pierre-et-Miquelon, +son montant est porté à 11,07 € l'heure ; + +```catala +champ d'application Smic : + définition brut_horaire sous condition + date_courante >= |2022-08-01| et date_courante <= |2022-12-31| et ( + (résidence = Métropole) ou + (résidence = Guadeloupe) ou + (résidence = Guyane) ou + (résidence = Martinique) ou + (résidence = LaRéunion) ou + (résidence = SaintBarthélemy) ou + (résidence = SaintMartin) ou + (résidence = SaintPierreEtMiquelon) + ) + conséquence égal à 11,07 € +``` + +2° A Mayotte, son montant est fixé à 8,35 € l'heure. + +```catala +champ d'application Smic : + définition brut_horaire sous condition + date_courante >= |2022-08-01| et date_courante <= |2022-12-31| et ( + (résidence = Mayotte) + ) + conséquence égal à 8,35 € +``` + +## Décret n° 2022-1608 du 22 décembre 2022 portant relèvement du salaire minimum de croissance + +### Article 1 | JORFARTI000046780051 + + +A compter du 1er janvier 2023, pour les catégories de travailleurs mentionnés à +l'article L. 2211-1 du code du travail, le montant du salaire minimum de +croissance est relevé dans les conditions ci-après : + +1° En métropole, en Guadeloupe, en Guyane, en Martinique, à La Réunion, +à Saint-Barthélemy, à Saint-Martin et à Saint-Pierre-et-Miquelon, +son montant est porté à 11,27 euros l'heure ; + +```catala +champ d'application Smic : + définition brut_horaire sous condition + date_courante >= |2023-01-01| et date_courante <= |2023-12-31| et ( + (résidence = Métropole) ou + (résidence = Guadeloupe) ou + (résidence = Guyane) ou + (résidence = Martinique) ou + (résidence = LaRéunion) ou + (résidence = SaintBarthélemy) ou + (résidence = SaintMartin) ou + (résidence = SaintPierreEtMiquelon) + ) + conséquence égal à 11,27 € +``` + +2° A Mayotte, son montant est fixé à 8,51 euros l'heure. + +```catala +champ d'application Smic : + définition brut_horaire sous condition + date_courante >= |2023-01-01| et date_courante <= |2023-12-31| et ( + (résidence = Mayotte) + ) + conséquence égal à 8,51 € +``` \ No newline at end of file diff --git a/examples/tutorial_en/tutorial_en.catala_en b/examples/tutorial_en/tutorial_en.catala_en index 6e5d6ce5..d4070e94 100644 --- a/examples/tutorial_en/tutorial_en.catala_en +++ b/examples/tutorial_en/tutorial_en.catala_en @@ -167,7 +167,7 @@ individual's income over a year. ```catala scope IncomeTaxComputation: definition income_tax equals - individual.income *$ fixed_percentage + individual.income * fixed_percentage ``` In the code, we are defining inside our scope the amount of the income tax @@ -175,17 +175,13 @@ according to the formula described in the article. When defining formulas, you have access to all the usual arithmetic operators: addition "+", subtraction "-", multiplication "*" and division (slash). -However, in the Catala code, you can see that we use "*$" ("*€" in French, etc.) -to multiply the individual income by the fixed percentage. The $ suffix -indicates that we are performing a multiplication on an amount of money. -Indeed, in Catala, you have to keep track of what you are dealing with: -is it money ? Is it an integer? Using just "+" or "*" can be ambiguous -in terms of rounding, since money is usually rounded at the cent. So to -disambiguate, we suffix these operations with something that indicates the type -of what we manipulate. The suffixes are "$" for money, "." for decimals, "@" -for dates and the "^" symbol for durations. If you forget the suffix, the Catala type -checker will display an error message that will help you put it where it -belongs. +However, in the Catala code, you should be aware that these operators can behave +differently depending on the quantities considered: indeed, money for example is +rounded at the cent. The Catala compiler is able to automatically select the +appropriate operation: here it can detect that money is being multiplied by a +decimal which is a known operation that yields an amount of money, rounded at +the cent. Some other operations are not allowed, like multiplying two amounts of +money together, or adding two dates. Coming back to article 1, one question remains unknown: what is the value of the fixed percentage? Often, precise values are defined elsewhere in the @@ -314,11 +310,11 @@ scope TwoBracketsTaxComputation : # "income". The name of the parameter is your choice, and will not impact # things outside this part of the definition. You can choose another # name in another definition of "tax_formula". - if income <=$ brackets.breakpoint then - income *$ brackets.rate1 + if income <= brackets.breakpoint then + income * brackets.rate1 else ( - brackets.breakpoint *$ brackets.rate1 +$ - (income -$ brackets.breakpoint) *$ brackets.rate2 + brackets.breakpoint * brackets.rate1 + + (income - brackets.breakpoint) * brackets.rate2 ) # This is the formula for implementing a two-bracketstax system. ``` @@ -381,7 +377,7 @@ scope NewIncomeTaxComputation: # Here, we simply define a new conditional definition for "income tax" # that handles the special case. definition income_tax under condition - individual.income <=$ $10,000 + individual.income <= $10,000 consequence equals $0 # What, you think something might be wrong with this? Hmmm... We'll see # later! @@ -432,7 +428,7 @@ scope Test1: definition income_tax equals tax_computation.income_tax # Next, we retrieve the income tax value compute it by the subscope and # assert that it is equal to the expected value : - # ($230,000-$100,00)*40%+$100,000*20% = $72,000 + # ($230,000-100,000)*40%+100,000*20% = $72,000 assertion income_tax = $72,000 ``` @@ -499,7 +495,7 @@ scope NewIncomeTaxComputationFixed: # Then, you can declare the exception by referring back to the label exception article_5 definition income_tax under condition - individual.income <=$ $10,000 + individual.income <= $10,000 consequence equals $0 ``` @@ -591,8 +587,8 @@ scope Test5: } definition income_tax equals if normal_income_tax_computation_applies then - (NewIncomeTaxComputationFixed of { -- individual: individual }) - .NewIncomeTaxComputationFixed.income_tax + (output of NewIncomeTaxComputationFixed with + { -- individual: individual }).income_tax else $0 # Insert some other modes of computation here ``` @@ -658,7 +654,7 @@ scope BasisForFineDetermination : # an exceptional definition for income tax for people earning less than # $10,0000. definition tax_computation.income_tax under condition - individual.income <=$ $10,000 + individual.income <= $10,000 consequence equals $500 ``` @@ -695,13 +691,13 @@ declaration scope WealthTax: scope WealthTax: definition wealth state total equals total_wealth definition wealth state after_charity_deductions equals - wealth -$ # Here, "wealth" refers to the state "total" + wealth - # Here, "wealth" refers to the state "total" value_of_buildings_used_for_charity definition wealth state after_capping equals - if wealth >=$ $2,500,000 then $2,500,000 else wealth + if wealth >= $2,500,000 then $2,500,000 else wealth # Here, "wealth" refers to the state "after_charity_decuctions" - assertion wealth >$ $0 + assertion wealth > $0 # Outside of the definition of "wealth", "wealth" always refer to the final # state of the variable, here "after_capping". @@ -745,9 +741,9 @@ declaration scope IntegerValues: internal value2 content integer scope IntegerValues: - definition value1 under condition 12 - (5 * 3) < 65 consequence equals 45 / 9 + definition value1 under condition 12 - (5 * 3) < 65 consequence equals 45 * 9 # The / operators corresponds to an integer division that truncates towards 0. - definition value2 equals value1 * value1 * 65 / 100 + definition value2 equals value1 * value1 * 65 * 100 ``` ### Decimals @@ -763,10 +759,11 @@ declaration scope DecimalValues: scope DecimalValues: definition value1 under condition - 12.655465446655426 -. 0.45265426541654 <. 12.3554654652 consequence - equals (integer_to_decimal of 45) /. (integer_to_decimal of 9) - # The /. operators corresponds to an exact division. - definition value2 equals value1 *. value1 *. 65% + 12.655465446655426 - 0.45265426541654 < 12.3554654652 consequence + equals 45 / 9 + # The / operator corresponds to an exact division. The division of integers + # yields a decimal. + definition value2 equals value1 * value1 * 65% # Percentages are decimal numbers (0.65 here) ``` @@ -787,10 +784,10 @@ declaration scope MoneyValues: scope MoneyValues: definition value1 under condition - 12.655465446655426 -. 0.45265426541654 <. 12.3554654652 consequence - equals (integer_to_decimal of 45) /. (integer_to_decimal of 9) + 12.655465446655426 - 0.45265426541654 < 12.3554654652 consequence + equals (decimal of 45) / (decimal of 9) definition value2 equals - $1.00 *$ ((($6,520.23 -$ $320.45) *$ value1) /$ $45) + $1.00 * ((($6,520.23 - $320.45) * value1) / $45) ``` @@ -812,9 +809,9 @@ declaration scope DateValues: internal value2 content duration scope DateValues: - definition value1 equals |2000-01-01| +@ 1 year # yields |2001-01-01| + definition value1 equals |2000-01-01| + 1 year # yields |2001-01-01| definition value2 equals - (value1 -@ |1999-12-31|) +^ 45 day # 367 + 45 days (2000 is bissextile) + (value1 - |1999-12-31|) + 45 day # 367 + 45 days (2000 is bissextile) ``` ### Collections @@ -832,7 +829,7 @@ declaration scope CollectionValues: scope CollectionValues: definition value1 equals [45;-6;3;4;0;2155] - definition value2 equals sum integer for i in value1 of (i * i) + definition value2 equals sum integer of (i * i) for i among value1 # sum of squares ``` diff --git a/examples/tutoriel_fr/tutoriel_fr.catala_fr b/examples/tutoriel_fr/tutoriel_fr.catala_fr index 1d7d1c61..e0f1821e 100644 --- a/examples/tutoriel_fr/tutoriel_fr.catala_fr +++ b/examples/tutoriel_fr/tutoriel_fr.catala_fr @@ -122,7 +122,7 @@ déclaration champ d'application CalculImpôtRevenu: # cela ressemble à un paramètre de fonction en informatique. C'est la # donnée sur laquelle le champ d'application va intervenir interne pourcentage_fixe contenu décimal - sortie impôt_revenu contenu argent + résultat impôt_revenu contenu argent ``` Nous avons maintenant tout ce dont nous avons besoin pour annoter le contenu @@ -136,7 +136,7 @@ des revenus de la personne pour une année. ```catala champ d'application CalculImpôtRevenu: définition impôt_revenu égal à - personne.revenu *€ pourcentage_fixe + personne.revenu * pourcentage_fixe ``` Dans le code, nous définissons à l'intérieur de notre champ d'application @@ -145,22 +145,18 @@ Quand nous définissons des formules, vous avez accès à tous les opérateurs arithmétiques habituels : addition "+", soustraction "-", multiplication "*" et division (barre oblique). -Toutefois, dans le code Catala, vous pouvez voir que nous utilisons "*€" -pour multiplier les revenus d'une personne par le pourcentage fixe. Le -suffixe € inique que nous effectuons une multiplication sur une somme d'argent. -En effet, en Catala, vous devez rester conscient de la donnée manipulée : -est-ce de l'argent ? est-ce un entier ? Utiliser simple "+" ou "*" est ambigu -en termes d'arrondis car l'argent est habituellement arrondi au centime. -Ainsi, afin d'être clair, nous suffixons ces opérations avec quelque chose -qui indique le type de donnée manipulé. Les suffixes sont "€" pour de l'argent, -"." pour les décimales, arobase (comme dans les adresses mail) pour les dates et -le symbole chapeau pour les durées. Si vous oubliez le suffixe, le vérificateur -de types de Catala va afficher une message d'erreur afin de vous aider à le placer -comme il le faut. +Toutefois, dans le code Catala, ces opérateurs peuvent avoir un sens légèrement +différent suivant unités concernées. En effet, l'argent par exemple est arrondi +au centime. Le compilateur Catala sélectionne automatiquement l'opération +appropriée: ici, de l'argent est multiplié par un pourcentage (soit un nombre +décimal), ce qui est une opération connue dont le résultat est une quantité +d'argent, arrondie au centime. D'autres opérations sont rejetées, comme la +multiplication de deux quantités d'argent entre elles, ou l'addition de deux +dates. -Mais dans l'article 1, une question reste sans réponse: quelle est la valeur -de la pourcentage fixe? Souvent, des valeurs précises sont définis ailleurs -dans les sources législatives. Ici, supposons que nous avons: +Revenons à l'article 1, dont une question reste sans réponse: quelle est la +valeur de la pourcentage fixe? Souvent, des valeurs précises sont définis +ailleurs dans les sources législatives. Ici, supposons que nous avons: ### Article 2 @@ -224,7 +220,7 @@ déclaration structure DeuxTranches: déclaration champ d'application CalculImpôtDeuxTranches : entrée tranches contenu DeuxTranches - sortie formule_imposition contenu argent dépend de argent + résultat formule_imposition contenu argent dépend de argent ``` Et dans le code : @@ -238,11 +234,11 @@ par le taux de chaque branche. ```catala champ d'application CalculImpôtDeuxTranches : définition formule_imposition de revenu égal à - si revenu <=€ tranches.seuil alors - revenu *€ tranches.taux1 + si revenu <= tranches.seuil alors + revenu * tranches.taux1 sinon ( - tranches.seuil *€ tranches.taux1 +€ - (revenu -€ tranches.seuil) *€ tranches.taux2 + tranches.seuil * tranches.taux1 + + (revenu - tranches.seuil) * tranches.taux2 ) ``` @@ -266,7 +262,7 @@ déclaration champ d'application NouveauCalculImpôtRevenu: # pas une donnée mais plutôt un sous-champ d'application qui peut être # utilisé pour calculer des choses. entrée personne contenu Personne - sortie impôt_revenu contenu argent + résultat impôt_revenu contenu argent champ d'application NouveauCalculImpôtRevenu : définition deux_tranches.tranches égal à DeuxTranches { @@ -286,7 +282,7 @@ sur le revenu prévu à l'article 1. ```catala champ d'application NouveauCalculImpôtRevenu: définition impôt_revenu sous condition - personne.revenu <=€ 10 000€ + personne.revenu <= 10 000€ conséquence égal à 0€ ``` @@ -313,7 +309,7 @@ champ d'application : ```catala déclaration champ d'application Test1: calcul_impôt champ d'application NouveauCalculImpôtRevenu - sortie impôt_revenu contenu argent + résultat impôt_revenu contenu argent champ d'application Test1: définition @@ -340,7 +336,7 @@ Ce test devrait être bon. Maintenant étudions un test en échec : ```catala déclaration champ d'application Test2: calcul_impôt champ d'application NouveauCalculImpôtRevenu - sortie impôt_revenu contenu argent + résultat impôt_revenu contenu argent champ d'application Test2: définition calcul_impôt.personne égal à Personne { @@ -373,7 +369,7 @@ version correcte du champ d'application NouveauCalculImpotRevenu : déclaration champ d'application NouveauCalculImpôtRevenuCorrect: deux_tranches champ d'application CalculImpôtDeuxTranches entrée personne contenu Personne - sortie impôt_revenu contenu argent + résultat impôt_revenu contenu argent champ d'application NouveauCalculImpôtRevenuCorrect : définition deux_tranches.tranches égal à DeuxTranches { @@ -393,7 +389,7 @@ champ d'application NouveauCalculImpôtRevenuCorrect : # Puis, vous pouvez déclarez l'exception par référence à l'étiquette exception article_5 définition impôt_revenu sous condition - personne.revenu <=€ 10 000€ + personne.revenu <= 10 000€ conséquence égal à 0€ ``` @@ -402,7 +398,7 @@ Le test devrait désormais fonctionner : ```catala déclaration champ d'application Test3: calcul_impôt champ d'application NouveauCalculImpôtRevenuCorrect - sortie impôt_revenu contenu argent + résultat impôt_revenu contenu argent champ d'application Test3: définition calcul_impôt.personne égal à Personne { diff --git a/examples/us_tax_code/Ideas for pair programming.md b/examples/us_tax_code/Ideas for pair programming.md index ccd39dfa..398e9256 100644 --- a/examples/us_tax_code/Ideas for pair programming.md +++ b/examples/us_tax_code/Ideas for pair programming.md @@ -20,4 +20,4 @@ is very important and kind of the core of the formalization. * Formalizing helps you think way more about a statute than you thought you knew about it. Parallel with formalization -of traditional software. \ No newline at end of file +of traditional software. diff --git a/examples/us_tax_code/section_121.catala_en b/examples/us_tax_code/section_121.catala_en index 8af1e6aa..74978012 100644 --- a/examples/us_tax_code/section_121.catala_en +++ b/examples/us_tax_code/section_121.catala_en @@ -95,12 +95,12 @@ scope Section121TwoPersons: definition person1 equals match return_type with pattern -- SingleReturn of data_person1 : data_person1 - -- JointReturn of data_couple : data_couple.JointReturn.person1 + -- JointReturn of data_couple : data_couple.person1 -- SingleReturnSurvivingSpouse of data_single: data_single.return definition person2 equals match return_type with pattern -- SingleReturn of data_person2 : data_person2 - -- JointReturn of data_couple : data_couple.JointReturn.person2 + -- JointReturn of data_couple : data_couple.person2 -- SingleReturnSurvivingSpouse of data_single: data_single.return definition section121Person1.property_ownage equals person1.property_ownage @@ -176,24 +176,25 @@ scope Section121SinglePerson: # - either the 5 years mark is inside the period and we only # cound the half after 5 years definition aggregate_periods_from_last_five_years of periods equals - sum duration for period in periods of ( - if date_of_sale_or_exchange <=@ period.begin +@ 5 year then - period.end -@ period.begin - else (if date_of_sale_or_exchange >=@ period.end +@ 5 year then + sum duration of ( + if date_of_sale_or_exchange <= period.begin + 5 year then + period.end - period.begin + else (if date_of_sale_or_exchange >= period.end + 5 year then 0 day - else ((period.end +@ 5 year) -@ date_of_sale_or_exchange)) + else ((period.end + 5 year) - date_of_sale_or_exchange)) ) + for period among periods # Regulation 1.121-1(c)(1): 2 years = 730 days # Regulation 1.121-1(c)(1): the periods of ownage and usage # don't have to overlap rule requirements_ownership_met under condition - aggregate_periods_from_last_five_years of property_ownage >=^ 730 day + aggregate_periods_from_last_five_years of property_ownage >= 730 day consequence fulfilled rule requirements_usage_met under condition aggregate_periods_from_last_five_years of - property_usage_as_principal_residence >=^ 730 day + property_usage_as_principal_residence >= 730 day consequence fulfilled rule requirements_met under condition @@ -228,7 +229,7 @@ scope Section121SinglePerson: # the "_uncapped" version of the variable. But in the current # semantics we can't do that because we don't allow for recursion. definition income_excluded_from_gross_income equals - if income_excluded_from_gross_income_uncapped >=$ gain_cap then + if income_excluded_from_gross_income_uncapped >= gain_cap then gain_cap else income_excluded_from_gross_income_uncapped @@ -237,7 +238,7 @@ scope Section121TwoPersons: definition gain_cap equals section121Person1.gain_cap definition income_excluded_from_gross_income equals - if income_excluded_from_gross_income_uncapped >=$ gain_cap then + if income_excluded_from_gross_income_uncapped >= gain_cap then gain_cap else income_excluded_from_gross_income_uncapped @@ -271,7 +272,7 @@ respect to such property by reason of paragraph (3). ```catala scope Section121TwoPersons: rule section_121_b_2_A_condition under condition - (return_type with pattern JointReturn of data_couple) + (return_type with pattern JointReturn) and # i) (section121Person1.requirements_ownership_met or @@ -312,29 +313,29 @@ scope Section121TwoPasses under condition not (first_pass.section_121_b_2_A_condition): definition second_pass.gain_cap equals - first_pass.gain_cap_person_1 +$ + first_pass.gain_cap_person_1 + first_pass.gain_cap_person_2 definition period_merge.periods1 equals match return_type with pattern - -- JointReturn of joint_return: joint_return.JointReturn.person1.property_ownage + -- JointReturn of joint_return: joint_return.person1.property_ownage -- SingleReturnSurvivingSpouse of dead_spouse_info : [] # does not happen -- SingleReturn of return : [] # does not happen definition period_merge.periods2 equals match return_type with pattern - -- JointReturn of joint_return: joint_return.JointReturn.person2.property_ownage + -- JointReturn of joint_return: joint_return.person2.property_ownage -- SingleReturnSurvivingSpouse of dead_spouse_info : [] # does not happen -- SingleReturn of return : [] # does not happen definition second_pass.person1 equals PersonalData { -- property_ownage: period_merge.output_periods -- property_usage_as_principal_residence: - first_pass.JointReturn.person1.property_usage_as_principal_residence - -- other_section_121a_sale: first_pass.JointReturn.person1.other_section_121a_sale + first_pass.person1.property_usage_as_principal_residence + -- other_section_121a_sale: first_pass.person1.other_section_121a_sale } definition second_pass.person2 equals PersonalData { -- property_ownage: period_merge.output_periods -- property_usage_as_principal_residence: - first_pass.JointReturn.person2.property_usage_as_principal_residence - -- other_section_121a_sale: first_pass.JointReturn.person2.other_section_121a_sale + first_pass.person2.property_usage_as_principal_residence + -- other_section_121a_sale: first_pass.person2.other_section_121a_sale } ``` @@ -348,9 +349,9 @@ was any other sale or exchange by the taxpayer to which subsection (a) applied. ```catala scope Section121SinglePerson: rule section_121_b_3_applies under condition - (other_section_121a_sale with pattern - MostRecentSaleWhereSection121aApplied of other_sale) and - date_of_sale_or_exchange -@ other_sale.PreviousSaleWhereSection121aApplied.date_of_sale_or_exchange <=^ 2 year + other_section_121a_sale with pattern + MostRecentSaleWhereSection121aApplied of other_sale and + date_of_sale_or_exchange - other_sale.date_of_sale_or_exchange <= 2 year consequence fulfilled exception @@ -374,8 +375,8 @@ years after the date of death of such spouse and the requirements of paragraph ```catala scope Section121TwoPasses under condition return_type with pattern SingleReturnSurvivingSpouse of single_data and - single_data.date_of_spouse_death <@ date_of_sale_or_exchange and - date_of_sale_or_exchange <=@ single_data.date_of_spouse_death +@ 2 year + single_data.date_of_spouse_death < date_of_sale_or_exchange and + date_of_sale_or_exchange <= single_data.date_of_spouse_death + 2 year : definition first_pass.date_of_sale_or_exchange equals diff --git a/examples/us_tax_code/section_132.catala_en b/examples/us_tax_code/section_132.catala_en index 5c846b45..006b0d79 100644 --- a/examples/us_tax_code/section_132.catala_en +++ b/examples/us_tax_code/section_132.catala_en @@ -41,9 +41,9 @@ scope QualifiedEmployeeDiscount : definition qualified_employee_discount under condition is_property consequence equals - if employee_discount >$ - customer_price *$ gross_profit_percentage - then customer_price *$ gross_profit_percentage + if employee_discount > + customer_price * gross_profit_percentage + then customer_price * gross_profit_percentage else employee_discount ``` @@ -55,9 +55,9 @@ scope QualifiedEmployeeDiscount : definition qualified_employee_discount under condition is_services consequence equals - if employee_discount >$ - customer_price *$ 20% - then customer_price *$ 20% + if employee_discount > + customer_price * 20% + then customer_price * 20% else employee_discount scope QualifiedEmployeeDiscount under condition is_services: @@ -80,10 +80,10 @@ to customers over the aggregate cost of such property to the employer, is of ```catala scope QualifiedEmployeeDiscount under condition is_property: - assertion customer_price >=$ aggregate_cost + assertion customer_price >= aggregate_cost definition gross_profit_percentage equals - (customer_price -$ aggregate_cost) /$ customer_price + (customer_price - aggregate_cost) / customer_price ``` ##### (B) Determination of gross profit percentage @@ -113,10 +113,10 @@ employer to customers. ```catala scope QualifiedEmployeeDiscount: - assertion customer_price >=$ employee_price + assertion customer_price >= employee_price definition employee_discount equals - customer_price -$ employee_price + customer_price - employee_price ``` ##### (4) Qualified property or services diff --git a/flake.lock b/flake.lock index 43381179..cd2e2dd7 100644 --- a/flake.lock +++ b/flake.lock @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1668087632, - "narHash": "sha256-T/cUx44aYDuLMFfaiVpMdTjL4kpG7bh0VkN6JEM78/E=", + "lastModified": 1673631141, + "narHash": "sha256-AprpYQ5JvLS4wQG/ghm2UriZ9QZXvAwh1HlgA/6ZEVQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5f588eb4a958f1a526ed8da02d6ea1bea0047b9f", + "rev": "befc83905c965adfd33e5cae49acb0351f6e0404", "type": "github" }, "original": { diff --git a/french_law/catala_legifrance/api.ml b/french_law/catala_legifrance/api.ml index 7c44d8c3..ed8deb10 100644 --- a/french_law/catala_legifrance/api.ml +++ b/french_law/catala_legifrance/api.ml @@ -15,6 +15,7 @@ the License. *) open Lwt +open Catala_utils type access_token = string @@ -54,11 +55,11 @@ let get_token (client_id : string) (client_secret : string) : string = |> Yojson.Basic.Util.member "access_token" |> Yojson.Basic.Util.to_string in - Utils.Cli.debug_format "The LegiFrance API access token is %s" token; + Cli.debug_format "The LegiFrance API access token is %s" token; token end else begin - Utils.Cli.debug_format + Cli.debug_format "The API access token request went wrong ; status is %s and the body is\n\ %s" resp body; @@ -109,7 +110,7 @@ let run_request (request : (string * string t) t) : Yojson.Basic.t = if resp = "200 OK" then try body |> Yojson.Basic.from_string with | Yojson.Basic.Util.Type_error (msg, obj) -> - Utils.Cli.error_print + Cli.error_print "Error while parsing JSON answer from API: %s\n\ Specific JSON:\n\ %s\n\ @@ -128,10 +129,10 @@ let run_request (request : (string * string t) t) : Yojson.Basic.t = with Failure _ -> if n > 0 then ( Unix.sleep 2; - Utils.Cli.debug_format "Retrying request..."; + Cli.debug_format "Retrying request..."; try_n_times (n - 1)) else ( - Utils.Cli.error_print + Cli.error_print "The API request went wrong ; status is %s and the body is\n%s" resp body; exit (-1)) @@ -153,7 +154,7 @@ let parse_id (id : string) : article_id = else if Re.execp ceta_tex id then CETATEXT else if Re.execp jorf_rex id then JORFARTI else - Utils.Errors.raise_error + Errors.raise_error "LégiFrance ID \"%s\" does not correspond to an ID format recognized \ by the LégiFrance API" id @@ -161,7 +162,7 @@ let parse_id (id : string) : article_id = { id; typ } let retrieve_article (access_token : string) (obj : article_id) : article = - Utils.Cli.debug_format "Accessing article %s" obj.id; + Cli.debug_format "Accessing article %s" obj.id; { content = run_request @@ -179,7 +180,7 @@ let raise_article_parsing_error (json : Yojson.Basic.t) (msg : string) (obj : Yojson.Basic.t) = - Utils.Cli.error_print + Cli.error_print "Error while manipulating JSON answer from API: %s\n\ Specific JSON:\n\ %s\n\ @@ -190,13 +191,6 @@ let raise_article_parsing_error (Yojson.Basic.to_string json); exit 1 -type law_excerpt = Yojson.Basic.t - -let retrieve_law_excerpt (access_token : string) (text_id : string) : - law_excerpt = - run_request - (make_request access_token "consult/jorfPart" ["textCid", text_id]) - let get_article_id (article : article) : string = try article.content @@ -236,6 +230,18 @@ let get_article_text (article : article) : string = with Yojson.Basic.Util.Type_error (msg, obj) -> raise_article_parsing_error article.content msg obj +let get_article_title (article : article) : string = + try + article.content + |> Yojson.Basic.Util.member + (match article.typ with + | CETATEXT -> "text" + | LEGIARTI | JORFARTI -> "article") + |> Yojson.Basic.Util.member "titre" + |> Yojson.Basic.Util.to_string + with Yojson.Basic.Util.Type_error (msg, obj) -> + raise_article_parsing_error article.content msg obj + let get_article_expiration_date (article : article) : Unix.tm = try let article_id = get_article_id article in @@ -283,50 +289,3 @@ let get_article_new_version (article : article) : string = |> Yojson.Basic.Util.to_string with Yojson.Basic.Util.Type_error (msg, obj) -> raise_article_parsing_error article.content msg obj) - -let get_law_excerpt_title (json : law_excerpt) : string = - json |> Yojson.Basic.Util.member "title" |> Yojson.Basic.Util.to_string - -type law_excerpt_article = { id : string; num : string; content : string } - -let clean_html (s : string) : string = - let new_line = Re.Pcre.regexp "\\s*\\\\s*" in - let s = Re.Pcre.substitute ~rex:new_line ~subst:(fun _ -> "\n") s in - let tag = Re.Pcre.regexp "\\<[^\\>]+\\>" in - let s = Re.Pcre.substitute ~rex:tag ~subst:(fun _ -> "") s in - String.trim s - -let get_law_excerpt_articles (json : law_excerpt) : law_excerpt_article list = - let articles = - json |> Yojson.Basic.Util.member "articles" |> Yojson.Basic.Util.to_list - in - let articles = - List.sort - (fun a1 a2 -> - let a1_num = - int_of_string - (a1 |> Yojson.Basic.Util.member "num" |> Yojson.Basic.Util.to_string) - in - let a2_num = - int_of_string - (a2 |> Yojson.Basic.Util.member "num" |> Yojson.Basic.Util.to_string) - in - compare a1_num a2_num) - articles - in - List.map - (fun article -> - let article_id = - article |> Yojson.Basic.Util.member "id" |> Yojson.Basic.Util.to_string - in - let article_num = - article |> Yojson.Basic.Util.member "num" |> Yojson.Basic.Util.to_string - in - let article_content = - article - |> Yojson.Basic.Util.member "content" - |> Yojson.Basic.Util.to_string - |> clean_html - in - { id = article_id; num = article_num; content = article_content }) - articles diff --git a/french_law/catala_legifrance/api.mli b/french_law/catala_legifrance/api.mli index 0b2edb95..4cdc7d54 100644 --- a/french_law/catala_legifrance/api.mli +++ b/french_law/catala_legifrance/api.mli @@ -42,26 +42,12 @@ val retrieve_article : access_token -> article_id -> article (** [retrieve_article token article_id] returns the article from the LegiFrance API.*) -type law_excerpt - -val retrieve_law_excerpt : access_token -> string -> law_excerpt -(**[retrieve_law_excerpt token excerpt_id] returns a whole excerpt of a - legislative statute from the LegiFrance API. [excerpt_id] should be of the - form ["JORFTEXT000033736934"] *) - (**{2 Manipulating API objects}*) (**{3 Articles}*) val get_article_id : article -> string val get_article_text : article -> string +val get_article_title : article -> string val get_article_expiration_date : article -> Unix.tm val get_article_new_version : article -> string - -(**{3 Law excerpts}*) - -val get_law_excerpt_title : law_excerpt -> string - -type law_excerpt_article = { id : string; num : string; content : string } - -val get_law_excerpt_articles : law_excerpt -> law_excerpt_article list diff --git a/french_law/catala_legifrance/catala_legifrance.ml b/french_law/catala_legifrance/catala_legifrance.ml index dad14fe8..700afcbe 100644 --- a/french_law/catala_legifrance/catala_legifrance.ml +++ b/french_law/catala_legifrance/catala_legifrance.ml @@ -14,6 +14,8 @@ License for the specific language governing permissions and limitations under the License. *) +open Catala_utils + (** Main logic for interacting with LégiFrance when traversing Catala source files *) @@ -46,12 +48,12 @@ let check_article_expiration Some new_version else None in - Utils.Cli.warning_print + Cli.warning_print "%s %s has expired! Its expiration date is %s according to \ LégiFrance.%s" - (Utils.Marked.unmark law_heading.Surface.Ast.law_heading_name) - (Utils.Pos.to_string - (Utils.Marked.get_mark law_heading.Surface.Ast.law_heading_name)) + (Marked.unmark law_heading.Surface.Ast.law_heading_name) + (Pos.to_string + (Marked.get_mark law_heading.Surface.Ast.law_heading_name)) (Date.print_tm legifrance_expiration_date) (match new_version with | None -> "" @@ -61,7 +63,7 @@ let check_article_expiration else None type law_article_text = { - article_title : string * Utils.Pos.t; + article_title : string * Pos.t; text : string; new_version : Api.article_id option; current_version : Api.article_id option; @@ -110,7 +112,7 @@ let compare_to_versions (law_article_text : law_article_text) (access_token : Api.access_token) : unit = let print_diff msg diff = - Utils.Cli.warning_print "%s\n%s" msg + Cli.warning_print "%s\n%s" msg (String.concat "\n" (List.map (fun chunk -> @@ -138,7 +140,7 @@ let compare_to_versions "There is a diff between the source code version of %s %s and the \ text stored on LégiFrance:\n" (fst law_article_text.article_title) - (Utils.Pos.to_string (snd law_article_text.article_title))) + (Pos.to_string (snd law_article_text.article_title))) diff) | None -> () end; @@ -154,38 +156,27 @@ let compare_to_versions "Here is the diff between the current version of %s %s and what it \ will become in the future:\n" (fst law_article_text.article_title) - (Utils.Pos.to_string (snd law_article_text.article_title))) + (Pos.to_string (snd law_article_text.article_title))) diff) | None -> () (** Fill an [@@Include ...@@] tag inside the Catala source file with the legislative contents retrieved from LégiFrance *) let include_legislative_text - (id : string * Utils.Pos.t) + (id : string * Pos.t) (access_token : Api.access_token) : string = - let excerpt = Api.retrieve_law_excerpt access_token (fst id) in - let title = "#" ^ Api.get_law_excerpt_title excerpt in - let excerpts = Api.get_law_excerpt_articles excerpt in - let text_to_return = - String.concat "\n\n" - (List.map (fun article -> article.Api.content) excerpts) - in - let articles = - List.map - (fun article -> - Printf.sprintf "## Article %s|%s@\n%s" article.Api.num article.Api.id - article.Api.content) - excerpts - in - let to_insert = title ^ "\n\n" ^ String.concat "\n\n" articles in let pos = snd id in - Utils.Cli.debug_format "Position: %s" (Utils.Pos.to_string_short pos); - let file = Utils.Pos.get_file pos in - let include_line = Utils.Pos.get_end_line pos in + let id = Api.parse_id (fst id) in + let article = Api.retrieve_article access_token id in + let text_to_return = Api.get_article_text article in + let to_insert = text_to_return in + Cli.debug_format "Position: %s" (Pos.to_string_short pos); + let file = Pos.get_file pos in + let include_line = Pos.get_start_line pos in let ic = open_in file in let new_file = file ^ ".new" in - Utils.Cli.warning_print - "LégiFrance inclusion detected, writing new contents to %s" new_file; + Cli.warning_print "LégiFrance inclusion detected, writing new contents to %s" + new_file; let oc = open_out new_file in (* Pos.t lines start at 1 *) let counter = ref 1 in @@ -258,7 +249,11 @@ let driver (client_id : string) (client_secret : string) = try - if debug then Utils.Cli.debug_flag := true; + if debug then Cli.debug_flag := true; + if not (expiration || diff) then + Errors.raise_error + "You have to check at least something, see the list of options with \ + --help"; let access_token = Api.get_token client_id client_secret in (* LégiFrance is only supported for French texts *) let program = @@ -276,9 +271,9 @@ let driver item)) program.program_items; 0 - with Utils.Errors.StructuredError (msg, pos) -> + with Errors.StructuredError (msg, pos) -> let bt = Printexc.get_raw_backtrace () in - Utils.Cli.error_print "%s" (Utils.Errors.print_structured_error msg pos); + Cli.error_print "%s" (Errors.print_structured_error msg pos); if Printexc.backtrace_status () then Printexc.print_raw_backtrace stderr bt; -1 @@ -286,4 +281,5 @@ let driver let _ = Stdlib.exit @@ Cmdliner.Cmd.eval' - (Cmdliner.Cmd.v Cli.info (Cli.catala_legifrance_t driver)) + (Cmdliner.Cmd.v Legifrance_cli.info + (Legifrance_cli.catala_legifrance_t driver)) diff --git a/french_law/catala_legifrance/date.ml b/french_law/catala_legifrance/date.ml index fd53307c..a1f69895 100644 --- a/french_law/catala_legifrance/date.ml +++ b/french_law/catala_legifrance/date.ml @@ -14,6 +14,8 @@ License for the specific language governing permissions and limitations under the License. *) +open Catala_utils + (** Helper functions to interact with {!Unix.tm} dates *) type date_format = DDMMYYYY | ISO @@ -53,7 +55,7 @@ let parse_expiration_date (date_format : date_format) (expiration_date : string) Unix.tm_isdst = false; }) with _ -> - Utils.Errors.raise_error "Error while parsing expiration date argument (%s)" + Errors.raise_error "Error while parsing expiration date argument (%s)" expiration_date (** Prints an [Unix.tm] under the ISO formatting [YYYY-MM-DD] *) diff --git a/french_law/catala_legifrance/dune b/french_law/catala_legifrance/dune index 3e3018a6..61bff043 100644 --- a/french_law/catala_legifrance/dune +++ b/french_law/catala_legifrance/dune @@ -3,7 +3,7 @@ (package catala_legifrance) (libraries catala.surface - catala.utils + catala.catala_utils cmdliner cohttp lwt diff --git a/french_law/catala_legifrance/cli.ml b/french_law/catala_legifrance/legifrance_cli.ml similarity index 88% rename from french_law/catala_legifrance/cli.ml rename to french_law/catala_legifrance/legifrance_cli.ml index 3622df64..314eeee6 100644 --- a/french_law/catala_legifrance/cli.ml +++ b/french_law/catala_legifrance/legifrance_cli.ml @@ -17,6 +17,7 @@ (** Command line arguments specification of [legifrance_catala] *) open Cmdliner +open Catala_utils let file = Arg.( @@ -60,13 +61,14 @@ let client_id = Arg.( required & pos 1 (some string) None - & info [] ~docv:"CLIENT_ID" ~doc:"LegiFrance Oauth client id") + & info [] ~docv:"CLIENT_ID" ~doc:"LegiFrance PISTE API Oauth client id") let client_secret = Arg.( required & pos 2 (some string) None - & info [] ~docv:"CLIENT_SECRET" ~doc:"LegiFrance Oauth client secret") + & info [] ~docv:"CLIENT_SECRET" + ~doc:"LegiFrance PISTE API Oauth client secret") let debug = Arg.(value & flag & info ["d"; "debug"] ~doc:"Prints debug information") @@ -91,9 +93,8 @@ let info = `P "Denis Merigoux "; `S Manpage.s_bugs; `P - "Please file bug reports at \ - https://gitlab.inria.fr/verifisc/catala/issues"; + "Please file bug reports at https://github.com/CatalaLang/catala/issues"; ] in let exits = Cmd.Exit.defaults @ [Cmd.Exit.info ~doc:"on error" 1] in - Cmd.info "legifrance_catala" ~version:Utils.Cli.version ~doc ~exits ~man + Cmd.info "legifrance_catala" ~version:Cli.version ~doc ~exits ~man diff --git a/french_law/js/examples.js b/french_law/js/examples.js index 82db074d..a0fd7827 100644 --- a/french_law/js/examples.js +++ b/french_law/js/examples.js @@ -65,7 +65,6 @@ function run_computation_AL(log) { "logementEstChambre": false, "colocation": false, "ageesOuHandicapAdultesHebergeesOnereuxParticuliers": false, - "reductionLoyerSolidarite": 0, "logementMeubleD8422": false, "changementLogementD8424": { "kind": "PasDeChangement", @@ -131,7 +130,7 @@ function run_computation_AL(log) { "payload": null }, "conditionRattacheFoyerFiscalParentIfi": false, - "nombreEnfantsANaitreApresTroisiemeMoisGrossesse": 0, + "enfantANaitreApresQuatriemeMoisGrossesse": false, }, "demandeurIn": { "nationalite": { diff --git a/french_law/js/french_law.js b/french_law/js/french_law.js index 6db332fe..c8fa4e49 100644 --- a/french_law/js/french_law.js +++ b/french_law/js/french_law.js @@ -3,139 +3,139 @@ globalThis!=="object"&&(this?b():(a.defineProperty(a.prototype,"_T_",{configurable:true,get:b}),_T_));function b(){var b=this||self;b.globalThis=b;delete -a.prototype._T_}}(Object));(function(aH){"use strict";var -bui=aH,bul=typeof -module==="object"&&module.exports||aH,Am="38527",ij=1133,gO=857,cl="\xc3\x89ligibilit\xc3\xa9PrestationsFamiliales",Fe="Article L521-1",kk="Paragraphe 2 : Ouverture du droit et liquidation.",nl=365180284,Al="Changement",Fd="26714",Fc=163,Ak=1804,oU="SaintMartin",Aj=2165,gA=815,Ai="1015",jp=891,d4="Section 1 : Seuils de constitution d'un impay\xc3\xa9",Ah="559500",cz="Article 1",eV="aide_finale_formule",Ag="35630",gN=122,sc="Article 31",kM="50",bd="Unexpected '",ey=299,Fb="34700",jo=181,nk="Article 19",oT=862,kL=305,d$=128,kj="Avant",ri="identifiant",oS="Oui",Fa="43000",rh="Article D832-26",ex=683,ii=573,Af=383,eU=146,nj=">",oR=575,jn=153,oQ=1027,ih=1129,oP=1053,d_=297,oO="Article 17",ag="Section 2 : Accession \xc3\xa0 la propri\xc3\xa9t\xc3\xa9",jm=1062,eT="Chapitre 5 : Prestations familiales et prestations assimil\xc3\xa9es",Ae=3942,ni=933,oM=1125,oN="baseMensuelleAllocationsFamiliales",Ad="35762",jl=804,y="Calcul du montant de l'allocation logement",E$=358,Ac=4587,dR=2011,rg=2023,dQ=295,E_=462,ig="Article L841-1",rf="ServicesSociauxAllocationVerseeALaFamille",E9=1183,Aa="186000",Ab="Instruction interminist\xc3\xa9rielle no DSS/SD2B/2020/33 du 18 f\xc3\xa9vrier 2020 relative \xc3\xa0 la revalorisation au 1er avril 2020 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",z$="16.25",re="0.0315",ki="traitement_aide_finale_diminu\xc3\xa9",nh=1118,E8="\xc3\xa9ligibilit\xc3\xa9_commune.date_courante",z_="40758",oL="e",jk=313,ie="Autre",id=798,ng=4741,z8=1392,z9=1150,E7="Article L822-2",E6=3825,z7=3909,jj=421,f6="smic",z6="39445",ic=1071,bx="Article D842-6",nf=1052,z4=-43,z5="Neuf",z3=3097,ib=901,sb="Article 27",ji=897,E5="inf",E4="calculetteAidesAuLogementGardeAlternee",z2=4305,rd=306,z1="27365",E3="Circulaire interminist\xc3\xa9rielle N\xc2\xb0 DSS/SD2B/2017/352 du 22 d\xc3\xa9cembre 2017 relative \xc3\xa0 la revalorisation au 1er janvier 2018 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",ne=685,E2="41392",z0=1002,kK=111,nd=929,E1="Location",zZ="240400",rc=269,sa="Ordonnance n\xc2\xb0 96-50 du 24 janvier 1996 relative au remboursement de la dette sociale",gM=619,E0="33500",EZ=4836,kh="CalculNombrePartsAccessionPropri\xc3\xa9t\xc3\xa9",d3="Article D823-9",bD="traitement_aide_finale_minoration_forfaitaire",EY=1009,rb="\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x03\0\0\0\x86\0\xff\xff\x03\0\xff\xff\x86\0E\x01\x92\x019\0\xff\xffE\x01\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff}\0\x8a\0\xff\xff\0\0\xff\xff\0\0\x03\0\xa9\0\x86\0\xae\0\xff\xff\0\0\n\x01E\x01\x92\x01\f\x01\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x05\0s\0\0\0}\0\x81\0\x05\0\xec\x01\x88\0\xff\x01&\0\xff\xff\n\0\x88\0f\0:\0\0\0k\0f\0\xff\xff\x0b\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1d\0&\0\0\0o\0\xd0\0\xe9\0\xff\0\f\x01\x0f\0\x11\0<\0\x0b\0\n\0\0\0\x14\0\x18\0\x1f\0 \0\"\0\x16\0\x1a\0\0\0\x0e\0\x1b\0!\0\x12\0\x17\0\0\0\x10\0\x13\0#\0(\0$\0&\0\0\0)\0*\0+\0,\0-\0.\0:\0R\0\x0b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0'\0?\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0U\0\x8c\0<\0\r\0\x8f\0\x90\0\x91\x000\0\x93\x000\0\x94\0'\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x001\x001\x001\x001\x001\x001\x001\x001\x001\x001\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0A\0'\0\x95\0\x96\0\x9c\0?\0\x9d\x003\0\x9e\x003\0\x9f\x002\x003\x003\x003\x003\x003\x003\x003\x003\x003\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x005\x005\x005\x005\x005\x005\x005\x005\x005\x005\0\x9b\x002\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa1\0\xa2\0\x9b\0[\0A\0\0\x007\x007\x007\x007\x007\x007\x007\x007\x007\x007\x009\0D\0f\0k\0s\0\x83\0\x85\0\x85\0}\0\x8a\0\x85\0\xa3\0^\0\xa5\0D\0\xa6\0\xa7\0\xa8\0\xab\0o\0\xac\0\xad\0\xce\0\xcb\0\xcf\0\xd2\0\xd3\0:\0R\0\x85\0\xd4\0\xd5\0\xd6\0\xd7\0\xd9\0\x8c\0\xda\0a\0\xdb\0\xdc\0w\0\xdd\0\xde\0\xdf\0\x85\0[\0\xcb\0\"\x01>\x01\xe9\0\x98\0\x01\x01P\x01\xf7\0<\0\xfb\x006\x01:\x01Q\x01D\0)\x01R\x01S\x01\x06\x01\x1a\x01D\0w\0\x1e\x01\x0f\x01D\0^\0\x0f\x01T\x01U\x01V\x01G\x01X\x01D\0\xcb\x002\x01G\x01D\0Y\x01D\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0a\0L\x01w\0Z\x01?\0\x01\x01\\\x01G\0G\0G\0G\0G\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0\x98\0L\x01]\x01_\x01a\x01b\x01-\x01N\0N\0N\0N\0N\0N\0c\x01\x98\0d\x01G\0G\0G\0G\0G\0G\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\x14\x01L\x01A\0\x14\x01e\x01f\x01h\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0i\x01j\x01-\x01$\x01k\x01l\x01m\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0n\x01\x1a\x01y\x01\x9d\x01\x1e\x01\x9e\x01\x14\x01P\0P\0P\0P\0P\0P\0[\0\x9f\x01>\x01O\0O\0O\0O\0O\0O\0\xf7\0\xa0\x01\xfb\0\xa1\x01:\x01D\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0^\0P\0P\0P\0P\0P\0P\0V\0V\0V\0V\0V\0V\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0$\x01)\x01a\0\xa2\x01\xa3\x01w\0\x01\x01W\0W\0W\0W\0W\0W\0\xa5\x016\x01\x98\0V\0V\0V\0V\0V\0V\0\x06\x01\xa6\x01\xa7\x01\xa8\x01\x0f\x01\xa9\x01X\0X\0X\0X\0X\0X\0X\0X\0X\0X\x002\x01W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0_\0\x85\x01\xaa\x01\xab\x01\x9a\x01\x85\x01\xac\x01Y\0Y\0Y\0Y\0Y\0Y\0_\0\xb0\0\xad\x01X\0X\0X\0X\0X\0X\0-\x01\xae\x01\xaf\x01\xb0\0\xb0\x01\x9a\x01\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0z\x01Y\0Y\0Y\0Y\0Y\0Y\0\x94\x01\xb1\x01\x14\x01\xb2\x01b\0\x94\x01\xb3\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xd8\x01\xc1\x01_\0\x9a\x01\xd8\x01\xcd\x01b\0\xde\x01_\0\xcd\x01\xe5\x01\x01\x02_\0\xda\x01$\x01\xd7\x01\xd7\x01\x02\x02\xda\x01\xd7\x01_\0\x04\x02\x05\x02\xd8\x01_\0\x06\x02_\0_\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0\xd7\x01\x07\x02z\x01\b\x02\t\x02\n\x02\x0b\x02`\0`\0`\0`\0`\0`\0b\0\f\x02\xd7\x01\xf7\x01\r\x02\x0e\x02b\0\x0f\x02}\x01\x80\x01b\0\x10\x02\xdc\x01\x11\x02\xfb\x01\x12\x02\x13\x02\x14\x02b\0y\x01\x15\x02\xc2\x01b\0\x16\x02b\0b\0`\0`\0`\0`\0`\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xe7\x01\x17\x02\xee\x01\x18\x02\xfb\x01\xee\x01\x19\x02c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xf3\x01}\x01\x80\x01\xe0\x01\x1a\x02\xc5\x01\x1b\x02d\0d\0d\0d\0d\0d\0\x1c\x02\xc2\x01\x1d\x02c\0c\0c\0c\0c\0c\0\x1e\x02\x1f\x02 \x02\xc8\x01\xe7\x01\x85\x01e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xff\xffd\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xff\xff\xff\xff\xc5\x01\xb0\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb9\0\xff\xffe\0e\0e\0e\0e\0e\0\xc8\x01\xe0\x01\xff\xff\xb9\0\xcd\x01z\x01\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xc0\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc0\0\xc1\x01\xf7\x01\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc7\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xc7\0}\x01\x80\x01\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xcc\0\xc2\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe7\x01\xff\xff\xff\xff\xc7\0\xdc\x01\xee\x01\xfb\x01\xff\xff\xc7\0\xf3\x01\xff\xff\xcc\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xe1\0\xff\xff\xe1\0\xff\xff\xe0\x01\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xcd\0\xc5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcc\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xe4\0\xff\xff\xe4\0\xff\xff\xe3\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xff\xff\xe3\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xb9\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xff\xffM\x01\xff\xffM\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01\xff\xffM\x01\xff\xff\xff\xff\xc0\0\xff\xff\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0M\x01\xff\xff\xff\xff\xff\xff\xed\0\xc7\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xf2\0\xff\xff\xff\xff\xf0\0\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xed\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0B\x01B\x01\xff\xff\xff\xffB\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xffO\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01p\x01\xff\xffp\x01\xff\xffB\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01\xff\xff\xff\xffB\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xff\xff\xffr\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xffs\x01\xff\xffs\x01\xff\xffB\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\xff\xffr\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01\xff\xff~\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\x81\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x9b\x01\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01~\x01\xff\xff\xff\xffB\x01~\x01\x81\x01~\x01~\x01\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\x81\x01\x81\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xb8\x01\x8a\x01\xb8\x01\xff\xff\xff\xff\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x01\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xba\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\x8f\x01\xc6\x01\xff\xff\xc6\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xbb\x01\xff\xff\xbb\x01\xff\xff\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xc9\x01\xc9\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",EX="infinity",ia="2.5",EW="3663",d9="Chapitre IV : Impay\xc3\xa9s de d\xc3\xa9penses de logement",zY=2609,ew="examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr",zX="\\t",aB="examples/aides_logement/code_construction_legislatif.catala_fr",zW=1870,zV=330,EV=385,EU=3534,aL="Titre 2 : Prestations g\xc3\xa9n\xc3\xa9rales d'entretien",kJ=112,h_="1000",h$=1131,d2=563,ET=2252,c5="examples/aides_logement/code_s\xc3\xa9curit\xc3\xa9_sociale.catala_fr",kI=701,zU="210600",ES="Unexpected '%s' kind for the enumeration 'ElementPrestationsFamiliales.t'",zT=4744,zS="Couple",kg=687,nc="SaintPierreEtMiquelon",h9=110,ck="PrestationsFamiliales",jh=464,ER="\xc3\x89l\xc3\xa9mentPrestationsFamiliales",oK=679,EQ="214700",zR=2597,h8=615,dE="Calcul\xc3\x89quivalenceLoyerMinimale",oJ=554,EP="42926",jg=1096,zQ=-32,zP="39016",oI="AllocationLogementFamiliale",d1=1023,EO="interfaceAllocationsFamiliales",cg=561,nb="AllocationLogementSociale",EN=3766,zO="plafond_l512_3_2",jf=639,ra="Chapitre II : Des contributions pour le remboursement de la dette sociale.",h7=117,aS="examples/allocations_familiales/decrets_divers.catala_fr",zN=348,kH="compl\xc3\xa9ment_d\xc3\xa9gressif",q$="Livre VIII : Allocations aux personnes \xc3\xa2g\xc3\xa9es - Allocation aux adultes handicap\xc3\xa9s - Aides \xc3\xa0 l'emploi pour la garde des jeunes enfants - Protection compl\xc3\xa9mentaire en mati\xc3\xa8re de sant\xc3\xa9",EL="240200",EM="Assert_failure",r$="Section 1 : Secteur locatif ordinaire",EK="568400",r_="0.32",zM="40961",EJ=350,kG="Non",je=508,zL=185,kF="Article R824-2",EI=219,EH=1e14,zK="D331_76_1",oH="Article R521-3",zJ="17607",ab=2022,zI=3359,EF="34865",EG="Fatal error: exception %s\n",zH="261800",oG=865,kf=740,EE=2126,na="Article 2",ev=256,ED=4598,eu=558,h6=786,zG="Article L521-3",EC="Article R822-1",zF="45064",EB="taux_francs_vers_euros",aK="Archives l\xc3\xa9gislatives et r\xc3\xa9glementaires",kE="abattement_d\xc3\xa9pense_nette_minimale_d832_10",oF=699,EA="mensualit\xc3\xa9_\xc3\xa9ligible",jd=1075,m$="D\xc3\xa9cret n\xc2\xb0 2021-1741 du 22 d\xc3\xa9cembre 2021 portant rel\xc3\xa8vement du salaire minimum de croissance",r9="ENOENT",q_=288,q9="0.0006",h5=315,zE=3285,q7="EnfantLePlus\xc3\x82g\xc3\xa9",q8=259,m_=556,b3="examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr",Ez=885,zD="228000",Ey="ENOTEMPTY",r8="Article 13",Ex="calcul_apl_logement_foyer.nombre_personnes_\xc3\xa0_charge",zC="D331_59_8",Ev="Loyer",Ew="35947",zB=162,dP=564,zA="brut_horaire",Eu="x",zz="Sous-section 1 : Aides personnelles au logement",Et="calculAidePersonnaliseeLogementAccessionPropriete",m9=547,ke="Article D755-5",fQ=680,Es="Article D842-4",zy=4409,jc=791,d8=314,r7="%d",q6=810,zx="Z.of_substring_base: invalid digit",Er="ServicesSociauxAllocationVers\xc3\xa9e\xc3\x80LaFamille",h4=637,m8=285,zw="buffer.ml",e="Prologue : aides au logement",C="Secteur accession \xc3\xa0 la propri\xc3\xa9t\xc3\xa9",Ep="167600",Eq="39590",Eo=3405,f5=2008,q5="0.0179",zv=1089,En=1051,Em=4674,zt="245700",zu=1121,B="Prologue",m7="calcul_nombre_parts.nombre_personnes_\xc3\xa0_charge",El="Metropole",c4=100,kC="prise_en_compte_personne_\xc3\xa0_charge",kD=851,m6=702,zs=4243,h3=420,fl=300,h2=4380,Y="3",a6="Partie r\xc3\xa9glementaire - D\xc3\xa9crets simples",zr=230,oD=413,oE="169.",zp=2549,zq=0.5,oC=990,cS="Article D521-1",Ej="conventionn\xc3\xa9_livre_III_titre_V_chap_III",oB=622,Ek="sous_calcul_traitement",zo=374,h1=956,oA="Article D842-11",dO="Livre 7 : R\xc3\xa9gimes divers - Dispositions diverses",zn=2048,du=107,m4=161,m5=381,m3="Article D842-12",Ei=3977,jb=690,oz="prestations_familiales",kB="est_enfant_le_plus_\xc3\xa2g\xc3\xa9",zm="26440",h0=649,Eg=3901,Eh="201700",r6="Unix.Unix_error",zl=3631,hY=1060,hZ=1139,ja=3710,Ef="calculAidePersonnaliseeLogement",oy=553,hX=1088,zj=4150,zk="Stack_overflow",fe="condition_2_r823_4",a3="Sous-Section 2 : Conditions d'octroi de l'aide personnalis\xc3\xa9e au logement aux personnes r\xc3\xa9sidant dans un logement-foyer",aQ="\xc3\x89ligibilit\xc3\xa9AidesPersonnelleLogement",zi="/static/",q4=253,Ee=2791,Ed="Not_found",zg="1085",zh=235,q3="\x01\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\x009\0<\0\0\0<\0\0\0\0\0A\0\0\0A\0\0\0\0\0F\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0T\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0^\0\0\0\0\0a\0\xff\xff\xff\xffa\0\xff\xff\xff\xff\xff\xff\xff\xffh\0\0\0\0\0\0\0\0\0m\0\0\0\0\0\0\0q\0\0\0\0\0\0\0u\0\0\0\0\0\0\0y\0\0\0\0\0\0\0\0\0\0\0~\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\x8a\0\0\0\x8e\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x9a\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xb2\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xbb\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc2\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc9\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\0\0\0\0\0\0\xef\0\0\0\0\0\xff\xff\0\0\xf4\0\0\0\0\0\xff\xff\0\0\xf9\0\0\0\0\0\0\0\xfd\0\0\0\0\0\0\0\xff\xff\0\0\x03\x01\0\0\0\0\0\0\0\0\b\x01\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\x11\x01\0\0\0\0\0\0\0\0\x16\x01\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\0\0 \x01\0\0\0\0\0\0\xff\xff\0\0&\x01\0\0\0\0\0\0\0\0+\x01\0\0\0\0\0\0/\x01\0\0\0\0\0\0\0\x004\x01\0\0\0\0\0\x008\x01\0\0\0\0\0\0<\x01\0\0\0\0\0\0@\x01\0\0\0\0\0\0C\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0y\x01}\x01\0\0\0\0\x80\x01\xff\xff\xff\xff\x80\x01\xff\xff\xff\xff\xff\xff\xff\xff\x87\x01\0\0\0\0\0\0\0\0\x8c\x01\0\0\0\0\xff\xff\0\0\x90\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xc1\x01\xc5\x01\0\0\0\0\xc8\x01\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x01\0\0\0\0\0\0\0\0\xd4\x01\0\0\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xdc\x01\0\0\xff\xff\0\0\xe2\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xe9\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xf0\x01\0\0\0\0\0\0\0\0\xf5\x01\0\0\0\0\0\0\xf9\x01\0\0\0\0\0\0\xfc\x01\0\0\0\0\0\0\xff\xff\0\0\x02\x02\x04\x02\0\0\x05\x02\x06\x02\x07\x02\b\x02\t\x02\n\x02\x0b\x02\f\x02\r\x02\x0e\x02\x0f\x02\x10\x02\x11\x02\x12\x02\x13\x02\x14\x02\x15\x02\x16\x02\x17\x02\x18\x02\x19\x02\x1a\x02\x1b\x02\x1c\x02\x1d\x02\x1e\x02\x1f\x02 \x02!\x02\x03\x02",zf="41268",aW="examples/allocations_familiales/epilogue.catala_fr",ox=695,Ec="calcul_apl_logement_foyer.date_courante",ze=2184,Eb=3420,zd=2702,b8=848054398,D$=3496,ow="Mayotte",Ea="smic.date_courante",zc=260,ov="1224",D_="calcul_apl_locatif",dt="calcul_plafond_mensualit\xc3\xa9_d832_10_3",D9=4350,zb=4321,q2="rmdir",ou=696,i$=1069,D8=32752,za="33623",r5="19100",y$="37478",f4="calcul_nombre_parts",r4="Article 23",ot="Article R842-5",y_=1026,dj=149,bK="montant",d7="Article L521-2",b0="examples/allocations_familiales/../smic/smic.catala_fr",y7="calculAllocationLogementLocatif",y8="37906",y9="false",c3=849,os="Invalid integer: ",y6="PasDeChangement",bp="\xc3\x89ligibilit\xc3\xa9 \xc3\xa0 la prime de d\xc3\xa9m\xc3\xa9nagement",a7=106,D7=346,m2=186,dD=0x80,eS="Chapitre 1er : Dispositions relatives aux prestations",r3="Fatal error: exception ",or="\xc3\xa9ligibilit\xc3\xa9_commune",r2="0.0234",D6="43378",y5="calcul_apl_logement_foyer.date_conventionnement",hW=852,y4=1413,m1=1054,r1="25978",di=303,y3=2208,D4=493,D5=3541,D3="Section 2 : R\xc3\xa8gles de non-cumul",hV=3878,y2=1501,r0="_",y1="eligibilitePrimeDeDemenagement",m0=517,q1="compare: functional value",y0=444,bZ="0.",yX=114,yY="40928",yZ="19300",i_=3426,yW=3129,D2=1030,mZ=411,yV=3083,hU=978,yU="197700",yT="Invalid_argument",D1=656,q0=823,D0="EndCall([ ",oq="0.9",DY="Article R822-22",DZ="prise_en_charge",yS="calcul_aide_personnalis\xc3\xa9e_logement",DX=3024,DV="34301",DW="577500",yR="%ni",mY=949,fk=324,an=2020,DU="PersonneSeule",yQ=4110,op=559,qZ="0.0238",hT=4774,rZ="Article 9",DT="225100",DS="AutresPersonnes",dN="6",i9=495,yO="173600",yP=602,fP=858,n="0",ah="Section 3 : Logements-foyers",yN=3149,kd="Article L161-17-2",d="examples/aides_logement/prologue.catala_fr",DR="eligibiliteAidesPersonnelleLogement",eR=817,bc=248,yM=341,oo=322,yL=3856,i8=2007,DQ="208200",yH="Zone1",yI="Locataire",hS=301,yJ="R\xc3\xa8glement (CE) n\xc2\xb02866/98 du conseil du 31 d\xc3\xa9cembre 1998 concernant les taux de conversion entre l'euro et les monnaies des \xc3\x89tats membres adoptant l'euro",yK="37457",DO=4292,DP="562800",yG="535744",yF="235800",mX=555,bY=403,mW=930,DN="resetLog",yE="\xc3\xa2ge_l512_3_2",Q="AllocationsFamiliales",yD="situation_familiale_calcul_apl",qY="GardeAlterneeAllocataireUnique",DM="haut",yC=4334,kc=1024,yA="204761",yB="3.1",gL=802,mV=133,rY="35780",yz="calculAidePersonnaliseeLogementFoyer",yy=4750,hR=4771,kA=945,fO=366,fd=0xffffff,DL="34829",yw=524,yx=4179,mU=876,i7="Titre III: Titre III : Dispositions communes relatives au financement",DK="36378",at="Calculette globale",mT=286,DJ="149600",yv=3586,kz="Article R824-1",cR=1994,hQ=2010,bF="Prologue : prestations familiales",DI=1405,rX=2147483647,DH="774",on=689,yu=", characters ",f3=456,qX="180100",f2="BaseMensuelleAllocationsFamiliales",yt="prestations_familiales.r\xc3\xa9sidence",DG="819",bk="Chapitre IV : Calcul des allocations de logement en secteur accession",ys="AllocationJournali\xc3\xa8rePresenceParentale",yr=".0",DF="36733",om=4340,qW="AllocationFamilialesAvril2008",DE=3069,gK=693,eQ=855,DD="AllocationRentreeScolaire",yq="mensualit\xc3\xa9_minimale",ky="2.",mS=691,fj="5612",yp="Concubins",dy="calcul_plafond_mensualit\xc3\xa9_d842_6_avec_copropri\xc3\xa9t\xc3\xa9",DB="Montants revaloris\xc3\xa9s de l'allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",DC=4911,yo="SaintBarth\xc3\xa9lemy",Z="Partie l\xc3\xa9gislative",hP=2003,kb="Article R823-4",ym="32956",yn=1404,bm="examples/allocations_familiales/securite_sociale_D.catala_fr",yl="294500",DA=1504,qV="examples/aides_logement/../prestations_familiales/s\xc3\xa9curit\xc3\xa9_sociale_R.catala_fr",dM="RessourcesAidesPersonnelleLogement",f1="Montant des plafonds de ressources",bl="Annexe",yk=4664,eP="Section 1 : B\xc3\xa9n\xc3\xa9ficiaires",yj=2767,Dz="3524",yi="Article D832-27",Dy=2866,yh=3946,yg="Zone3",ka="500",yf=3218,fN=471,dC=2015,yd=2595,ye="40144",fi="prise_en_compte",yc=2261,Dx="223900",yb="ServicesSociauxAllocationVers\xc3\xa9eAuxServicesSociaux",Dw=138,ya="225500",ol=1998,w="Livre VIII : Aides personnelles au logement",hO=905,j$="caract\xc3\xa9ristiques_pr\xc3\xaat_l831_1_6",qU="nan",Dv="38892",x$="calculNombrePartLogementFoyer",mR=646,kx="Impay\xc3\xa9D\xc3\xa9penseLogement",x_=1904,bb="Calculette avec garde altern\xc3\xa9e",Du=0xdfff,hN="4.3",et="/",Dt=1913,rW="ENOTDIR",rV=1073741823,x8=4525,x9="\\r",rU="0.0068",rT=513,Ds="calcul_allocation_logement",x6="coefficient_prise_en_charge",mP=743,mQ=734,x7=206,x5=3811,kw="Article D161-2-1-9",ok="Guyane",oi="PasDeTravaux",oj=311,x4=2930,mO=255,Dr="Revenu",bC="droit_ouvert_majoration",E="Partie r\xc3\xa9glementaire",c2="Partie r\xc3\xa9glementaire - D\xc3\xa9crets en Conseil d'Etat",Dq=3133,x3="Chapitre 1er : G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s",Dp="Sous-section 4 : Prise en compte du patrimoine",i="D\xc3\xa9clarations des champs d'application",x2=4221,x1="End_of_file",Do="calcul_apl_logement_foyer.condition_2_du_832_25",xZ="calculAllocationLogementFoyer",x0=1313,j_="traitement_aide_finale_r\xc3\xa9duction_loyer_solidarit\xc3\xa9",fc="Chapitre V : Calcul de l'aide personnalis\xc3\xa9e au logement en secteur logement-foyer",i6="Article 24",qT="Failure",Dn="267871",i5=4776,Dm=4268,xY="167800",a2="CalculetteAidesAuLogement",xX=1367,X=684,mN=715,qS="\xff\xff\xff\xff\xff\xff\x11\0\xff\xff\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x13\0\x13\0\x13\0\x13\0\x13\0\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\t\0\xff\xff\t\0\xff\xff\xff\xff\x0e\0\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\0\x04\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\0\0\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\x03\0\x05\0\x05\0\x05\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x03\0\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\xff\xff\b\0\xff\xff\b\0\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",xW=0xdc00,xV="389618",oh="3.",i4=788,xU="185800",rR="0.0201",rS=1072,og=880,Dl="Sys_error",fM="Article D521-2",mM=703,rQ="nombre_personnes_\xc3\xa0_charge_prises_en_compte",es="Sous-section 4 : Assurance vieillesse",Dk="Printexc.handle_uncaught_exception",cQ="Article D832-24",oe=618,of="30500",hM=1079,xT="194810",mK=745,mL="int_of_string",O="examples/aides_logement/arrete_2019-09-27.catala_fr",xS="Chapitre Ier : Principes g\xc3\xa9n\xc3\xa9raux",Dj=4201,od="Article 37",xR="39340",xQ="name",cH=103,gJ=966,xP=447,i3=428,ae="Chapitre 2 : Modalit\xc3\xa9s de liquidation et de versement des allocations de logement",xN=3991,xO=4376,kv="traitement_aide_finale_redevance",dL=132,xM=" ])",Di="1.4",oc=698,mJ="31797",xL="19484",hL=4770,xK=3117,mI=988,cE="Article 7",Dh="%Li",mH=864,gz=591,ku=1014,xJ=2580,qR="r\xc3\xa9muneration_mensuelle",cZ=302,gy=960,xI=205,cD="Article 14",xH="34570",Dg=4790,qQ="date_de_naissance",f0=1090,mG="base_mensuelle_allocations_familiales",i2=795,i1=927,xG=4220,mF="_z",i0=2000,rP=1951,mE=860,eO=136,b2="Titre IV : Allocations de logement",xF="retrieveRawEvents",d6="InterfaceAllocationsFamiliales",mD=985,iZ=1077,j9="Pendant",qP="%a",gx=", ",fb="5422",xE=199,Df="17012",ob="calcul_\xc3\xa9quivalence_loyer_minimale.condition_2_du_832_25",c1=2018,xD="AllocationJournalierePresenceParentale",bR="Chapitre III : Calcul des aides personnelles au logement en secteur locatif",De="' kind for the enumeration 'ElementPrestationsFamiliales.t'",hK=682,fL=467,by="Prestations familiales",Db="Enfant\xc3\x80Charge",Dc="calculette",Dd="GardeAltern\xc3\xa9eAllocataireUnique",er="Article D823-16",Da="172500",C$="n_nombre_parts_d832_25",rO="Apres",xC=4125,hJ=1084,bB="examples/aides_logement/../prestations_familiales/prologue.catala_fr",xB=4316,C_="179800",fh=" ",xA=361,C8=3044,J="Secteur locatif",C9="Undefined_recursive_module",xz=3721,aj="output",xy="195500",C7="base_mensuelle_allocations_familiales.date_courante",qO="199900",cC=-976970511,xw="' kind for the enumeration 'SituationObligationScolaire.t'",xx="%.16g",C6="220100",oa=189,xv=4422,j8="droit_ouvert_forfaitaire",j7=620,xu="%i",qN="0.01",C5="262985",xt="409505",xs="LogementFoyer",C4="139700",n$="PrestationAccueilJeuneEnfant",C3="Article L822-4",n_=856,xr="41252",C1="0.1",C2="Allocation\xc3\x89ducationEnfantHandicap\xc3\xa9",rN=382,mC="5399",qM="2805",eq=123,hI=570,xq="calcul_apl_logement_foyer.type_logement_foyer",hG="0.0173",hH=806,K="Arr\xc3\xaat\xc3\xa9 du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de d\xc3\xa9m\xc3\xa9nagement",fK=159,xp="LocationAccession",iY=1067,mB=577,CZ=3855,C0=183,qL="a_d\xc3\xa9j\xc3\xa0_ouvert_droit_aux_allocations_familiales",iX=3874,CY="41338",ds=0xff,mA="Arr\xc3\xaat\xc3\xa9 du 19 avril 2022 relatif au rel\xc3\xa8vement du salaire minimum de croissance",CX=-12,mz="calcul_\xc3\xa9quivalence_loyer_minimale.ressources_m\xc3\xa9nage_arrondies",xo=4167,my=458,qK="Article 15",dc="0.75",j6="Titre 5 : Dispositions particuli\xc3\xa8res \xc3\xa0 la Guadeloupe, \xc3\xa0 la Guyane, \xc3\xa0 la Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy et \xc3\xa0 Saint-Martin",CW="22355",mx=3654863,CV="140800",n9=145,rM=175,rL="Chapitre 5 : Allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",ep=455,CU=1997,xn="163000",n8=991,j5="0.5",n7="Article R842-14",j4=641,xm="fd ",xl=2571,xj=1116,xk=3789,xi="41751",xh="181800",rK=409,xg="41316",bE="traitement_aide_finale_contributions_sociales_arrondi",xe=3750,hF=3428,xf="cat\xc3\xa9gorie_calcul_apl",xd="757",b_="Prise en compte des ressources pour les aides personnelles au logement",kt="coefficents_enfants_garde_altern\xc3\xa9e_pris_en_compte",hE=377,gw=1081,n6=848,fJ=2001,qJ="Compl\xc3\xa9mentFamilial",hD=793,xc=633,CT="smic.r\xc3\xa9sidence",ax="Livre 5 : Prestations familiales et prestations assimil\xc3\xa9es",fZ=1018,mw=108,CS="Article D832-18",mv=-2147483648,eN=2002,v="1",mu=1797,xb="Chapitre II : Dispositions applicables aux ressources",mt="Article R822-7",CR="42605",w_="VendeurQuandDemandeurAContratLocationAccession",w$="Article R755-0-2",xa=406,CQ="calculNombrePartsAccessionPropriete",CP="allocationFamilialesAvril2008",rJ=": Not a directory",w9="b",CN="18900",CO="Article D521-3",ms=4707,cP="CalculAidePersonnalis\xc3\xa9eLogement",w8="D331_63_64",dK=2012,CM=1794,CK="42469",CL="Out_of_memory",w7=4902,w6=3675,D="examples/aides_logement/code_construction_reglementaire.catala_fr",aa="4",rI="index out of bounds",mr=986,CI="27900",CJ=3481,iW=903,n5="_bigarr02",w5="31264",mq=881,CH=0xffffffff,hC=895,CG="LaR\xc3\xa9union",mp="Article L822-5",CF=4261,mo=574,CE="981600",w3=3771,w4=1151,hB=292,eo=0xffff,iV=2009,CD="%.17g",mn="calcul_\xc3\xa9quivalence_loyer_minimale.n_nombre_parts_d832_25",w2=400,qI=1148,c0="100.",CB="1.25",CC=143,w1=3990,w0="44729",eM="\xc3\xa2ge_minimum_alin\xc3\xa9a_1_l521_3",gv=963043957,gI=4387,N="5",mm=142,n4=741,cU=126,iU="AllocationSoutienFamilial",wZ=840,CA="SousLocataire",wY="34713",n3=628,bt="Section 1 : Calcul, liquidation et versement des aides",n2=124,wX="0.98",gu="Article L512-3",wV="633129",wW=422,iT=427,dh=150,wT=3267,wU="41440",ml=135,fY=899,dg="\xc3\x89ligibilit\xc3\xa9PrimeDeD\xc3\xa9m\xc3\xa9nagement",dx="Sous-section 2 : Calcul de l'aide en secteur locatif",j3=252,Cz="enfant_le_plus_\xc3\xa2g\xc3\xa9",G="examples/allocations_familiales/prologue.catala_fr",az="CalculAidePersonnalis\xc3\xa9eLogementFoyer",en=".",n1=147,Cy=0xf0,wS="eligibilitePrestationsFamiliales",cG="12.",b7=694,mk="Guadeloupe",wR=276,bi=116,n0="230500",wP=1482,wQ="enfantLePlusAge",nZ=576,mj=627,Cx=4723,df=365,hA=813,dJ=294,fg="traitement_aide_finale_montant_minimal",wO="impossible case",gH=1073,dI="examples/allocations_familiales/securite_sociale_R.catala_fr",wN=4822,hz=4381,iS=968,eL="R\xc3\xa8gles diverses",mi=500,Cw=-1080,Cv="18185",hy=638,wM="SaintBarthelemy",gG=1063,Cu=-1023,nY=859,gt="1272",wL="ressources_m\xc3\xa9nage_avec_arrondi",Cs="ouvertureDroitsRetraite",Ct="\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement",Cr="204700",rH="Article L755-12",wK="TravauxPourAcquisitionD832_15_1",Cq="Ancien",rG="lib/read.mll",gF="1229",Cp="Article premier",mh=501,aV="\xc3\x89ligibilit\xc3\xa9 \xc3\xa0 l'aide personnalis\xc3\xa9e au logement",Co=4423,gs=819,mg='"',Cn="Arr\xc3\xaat\xc3\xa9 du 14 d\xc3\xa9cembre 2020 relatif au montant des plafonds de ressources de certaines prestations familiales et aux tranches du bar\xc3\xa8me applicable au recouvrement des indus et \xc3\xa0 la saisie des prestations",mf="examples/aides_logement/../prestations_familiales/s\xc3\xa9curit\xc3\xa9_sociale_L.catala_fr",cO="CalculAllocationLogement",Cm="3539",rF="<",wH="208500",cc=931,wI="prestations_familiales.date_courante",wJ=0x800,wG=3915,me=617,md=182,wF=398,nX="\xc3\xa9ligibilit\xc3\xa9",wD="233000",wE=0.012,Cl=2781,wC="calculAidePersonnaliseeLogementLocatif",bP="Article 33",iR=719,Ck="M\xc3\xa9tropole",Ci="40696",Cj=209,wB=131,Ch="ressources_m\xc3\xa9nage_arrondies_seuil",wz=4028,wA=204,rE="Article D815-1",iP=834,iQ="conditions_hors_\xc3\xa2ge",eK="traitement_aide_finale_abattement",a_="Dispositions sp\xc3\xa9ciales relatives \xc3\xa0 Mayotte",wx=726928360,au=562,wy="221100",qH=165,ww="([^/]+)",mc=700,wv=4395,Cg="Article 39",rD=0xf,rC=809,wu="798",Cf="BailleurSocial",j2="montant_initial_m\xc3\xa9tropole_majoration",nW=372,cn=125,iN=3712,iO=907,hx=3876,wt="Division_by_zero",iM=1092,ws=1844,nV=520,iL=3714,qG="Article L832-3",rB=430,wq=708012133,wr=3892,Ce="SituationObligationScolaire",Cd=4076,Cb="AutrePersonne\xc3\x80Charge",nU=879,Cc="44440",Ca="AllocationJeuneEnfant",dB=2014,mb=1119,iK=1059,em=552,B_="22262",B$=3492,nT=659,B9="Article D842-17",nS=697,B8="Article L751-1",fX=503,B7=3305,ks=119,j1="montant_avec_garde_altern\xc3\xa9e_majoration",B6="70",eJ=412,dH=104,wo="calculette_sans_garde_altern\xc3\xa9e",wp="Instruction interminist\xc3\xa9rielle n\xc2\xb0DSS/2B/2022/82 du 28 mars 2022 relative \xc3\xa0 la revalorisation au 1er avril 2022 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",nR=321,wn="version_avril_2008",iJ=468,B5=279,wm="38361",nQ=714,B4=439,fI=2013,B2="ouverture_droits_retraite",B3=102,wl=4443,hw=800,hv="100000.",wk="18261",hu=101,nP="calcul_nombre_parts.situation_familiale_calcul_apl",B1=4507,iI=4778,B0="body",fH="Calcul des contributions sociales s'appliquant aux aides personnelles au logement",wj="Unexpected '%s' kind for the enumeration 'Collectivite.t'",wi=4212,rA="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x04\0\0\0\x03\0\x03\0\x86\0\0\0\x03\0\0\0\x86\0E\x01\x92\x01\xff\xff\0\0E\x01\x92\x01\0\0\0\0\0\0\0\0\x7f\0\x8b\0\0\0\x03\0\0\0\f\0\x03\0\xaa\0\x86\0\xaf\0\0\0\x07\0\x0b\x01E\x01\x92\x01\x0e\x01\r\x001\0\x05\0\n\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\x008\0v\0\x06\0\x81\0\x82\x009\0\xed\x01\x89\0\0\x021\0\0\x000\0\x8a\0j\0>\0\x0e\0n\0i\0\0\x001\0\x0f\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1e\x000\0\b\0r\0\xd1\0\xec\0\0\x01\r\x01\x1d\0\x16\0\xff\xff0\x000\0\x11\0\x15\0\x19\0 \0!\0#\0\x17\0\x1b\0\x10\0\x1f\0\x1c\0\"\0\x13\0\x18\0\x12\0\x1a\0\x14\0$\0)\0%\x000\0\t\0*\0+\0,\0-\0.\0/\0=\0U\x000\0&\0'\0'\0'\0'\0'\0'\0'\0'\0'\x001\0C\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0V\0\x8f\0\xff\xff(\0\x90\0\x91\0\x92\x007\0\x94\x007\0\x95\x000\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0\xff\xff0\0\x96\0\x97\0\xa1\0B\0\x9e\x005\0\x9f\x005\0\xa0\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\0\xa5\x003\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa2\0\xa3\0\xa6\0]\0\xff\xff\x02\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xff\xffM\0g\0l\0t\0\x84\0\x86\0\x87\0\x80\0\x8b\0\x86\0\xa4\0]\0\xab\0M\0\xa7\0\xa8\0\xa9\0\xac\0p\0\xad\0\xae\0\xd2\0\xe2\0\xd0\0\xd3\0\xd4\0;\0S\0\x86\0\xd5\0\xd6\0\xd7\0\xd8\0\xda\0\x8d\0\xdb\0]\0\xdc\0\xdd\0{\0\xde\0\xdf\0\xe0\0\x88\0_\0\xe1\0#\x01A\x01\xea\0\x9b\0\x05\x01a\x01\xfa\0\xff\xff\xfe\x009\x01=\x01_\x01M\0,\x01\\\x01X\x01\t\x01\x1d\x01L\0|\0!\x01\x12\x01K\0b\0\x13\x01U\x01V\x01W\x01x\x01Y\x01J\0\xe1\x005\x01y\x01I\0Z\x01H\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0b\0q\x01z\0[\x01@\0\x04\x01]\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\x9c\0p\x01^\x01`\x01b\x01c\x011\x01O\0O\0O\0O\0O\0O\0d\x01\x9d\0e\x01N\0N\0N\0N\0N\0N\0\xb7\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\x18\x01p\x01\xff\xff\x19\x01f\x01g\x01i\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0j\x01k\x010\x01(\x01l\x01m\x01n\x01P\0P\0P\0P\0P\0P\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0o\x01\x1b\x01\xff\xff\xab\x01\x1f\x01\xaa\x01\x17\x01Q\0Q\0Q\0Q\0Q\0Q\0\\\0\xa8\x01?\x01P\0P\0P\0P\0P\0P\0\xf8\0\xa5\x01\xfc\0\xa2\x01;\x01E\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0\xff\xffQ\0Q\0Q\0Q\0Q\0Q\0W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0'\x01*\x01\xff\xff\xa3\x01\xa4\x01x\0\x02\x01X\0X\0X\0X\0X\0X\0\xa6\x017\x01\x99\0W\0W\0W\0W\0W\0W\0\x07\x01\xa7\x01\xa4\x01\xa9\x01\x10\x01\xa4\x01Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\x003\x01X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0a\0\x89\x01\xa4\x01\xac\x01\xb9\x01\x88\x01\xad\x01Z\0Z\0Z\0Z\0Z\0Z\0a\0\xb3\0\xae\x01Y\0Y\0Y\0Y\0Y\0Y\0.\x01\xaf\x01\xb0\x01\xb4\0\xa4\x01\xb8\x01\xb5\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0|\x01Z\0Z\0Z\0Z\0Z\0Z\0\xc0\x01\xb2\x01\x15\x01\xb3\x01a\0\xc1\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xa4\x01\xd8\x01\xff\xffa\0\xb8\x01\xd8\x01\xd1\x01a\0\xdf\x01a\0\xd0\x01\xe6\x01\x03\x02a\0\xdb\x01%\x01\xd8\x01\xd9\x01\x03\x02\xdc\x01\xd8\x01a\0\x03\x02\x03\x02\xd8\x01a\0\x03\x02a\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xd8\x01\x03\x02~\x01\x03\x02\x03\x02\x03\x02\x03\x02c\0c\0c\0c\0c\0c\0a\0\x03\x02\xda\x01\xfa\x01\x03\x02\x03\x02a\0\x03\x02|\x01|\x01a\0\x03\x02\xdd\x01\x03\x02\xfd\x01\x03\x02\x03\x02\x03\x02a\0\xff\xff\x03\x02\xc4\x01a\0\x03\x02a\0`\0c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xeb\x01\x03\x02\xf1\x01\x03\x02\xff\x01\xf2\x01\x03\x02d\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xf6\x01\x81\x01\x81\x01\xe4\x01\x03\x02\xc4\x01\x03\x02e\0e\0e\0e\0e\0e\0\x03\x02\xc6\x01\x03\x02d\0d\0d\0d\0d\0d\0\x03\x02\x03\x02\x03\x02\xc4\x01\xea\x01\x86\x01a\0a\0a\0a\0a\0a\0a\0a\0a\0a\0\0\0e\0e\0e\0e\0e\0e\0a\0a\0a\0a\0a\0a\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\0\0\0\0\xc9\x01\xb1\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xbc\0\0\0a\0a\0a\0a\0a\0a\0\xc9\x01\xe3\x01\0\0\xbf\0\xce\x01{\x01\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xc3\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc6\0\xff\xff\xf8\x01\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xca\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xcd\0\xff\xff\xff\xff\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe2\0\xc3\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\x01\0\0\0\0\xce\0\xdd\x01\xef\x01\xfe\x01\0\0\xcf\0\xf4\x01\0\0\xe1\0\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\0\0\0\xe8\0\0\0\xe1\x01\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xd9\0\xff\xff\0\0\0\0\0\0\0\0\xe1\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\xe6\0\0\0\xe6\0\0\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\0\0\xe4\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xba\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\xf1\0\0\0q\x01\0\0M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01\0\0p\x01\0\0\0\0\xc1\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0p\x01\0\0\0\0\0\0\xf0\0\xc8\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\xf6\0\0\0\0\0\xf0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xee\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0E\x01F\x01\0\0\0\0E\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0E\x01\0\0N\x01\0\0\0\0\0\0\0\0h\x01I\x01\0\0\0\0\0\0\0\0O\x01\0\0G\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0H\x01\0\0\0\0\0\0\0\0\0\0\xf3\0\0\0\0\0\0\0\0\0\0\0\0\0P\x01w\x01\0\0w\x01\0\0Q\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\0\0J\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01S\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\x01\0\0\0\0s\x01\0\0\0\0T\x01\0\0\0\0u\x01\0\0u\x01\0\0K\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\0\0s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\xb9\x01\0\0\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xb8\x01\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\0\0\0\0D\x01\x80\x01\x80\x01\x80\x01\x7f\x01\0\0\x80\x01\0\0\0\0\xb8\x01\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\x80\x01\x7f\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\xbf\x01\x8e\x01\xbf\x01\0\0\0\0\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x92\x01\x93\x01\0\0\0\0\x92\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\x92\x01\0\0\x99\x01\0\0\0\0\0\0\0\0\xb1\x01\x96\x01\0\0\0\0\0\0\xc8\x01\x9c\x01\0\0\x94\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\x95\x01\0\0\0\0\0\0\0\0\0\0\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x9d\x01\0\0\0\0\0\0\0\0\x9e\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc8\x01\0\0\x97\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\xbb\x01\0\0\xa0\x01\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\x9f\x01\xc8\x01\0\0\xc8\x01\xc7\x01\0\0\xa1\x01\0\0\0\0\0\0\0\0\0\0\0\0\x98\x01\0\0\0\0\0\0\0\0\xbd\x01\0\0\xbd\x01\0\0\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\x91\x01\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\xc8\x01\xc7\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xd6\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd3\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",gE=1e7,fa=254,BY=3722,BZ="calcul_apl_logement_foyer.zone",wh=407,BX="6.",we=2628,wf=3676,wg="1003",dr="Article L841-2",BW=" : flags Open_text and Open_binary are not compatible",BU=779,BV=2596,d0="Article D832-15",el="Titre VI : Dispositions relatives aux prestations et aux soins - Contr\xc3\xb4le m\xc3\xa9dical - Tutelle aux prestations sociales",wd="43248",gD=1992,eI="examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr",wc="\\\\",u="Code de la construction et de l'habitation",wb="Instruction interministerielle no DSS/SD2B/2019/261 du 18 d\xc3\xa9cembre 2019 relative \xc3\xa0 la revalorisation au 1er janvier 2020 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",BT="Article 38",wa=2817,ma=188,BR=463,BS="0.04",v_="0.0226",v$=270,v9="192500",BQ="230700",v8="217600",nO=926,BP="0.0463",l$=4708,qF="GardeAlterneePartageAllocations",qE="\0\0\xec\xff\xed\xff\x03\0\xef\xff\x10\0\xf2\xff\xf3\xff\xf4\xff\xf5\xff\0\0\x1f\0\xf9\xffU\0\x01\0\0\0\0\0\x01\0\0\0\x01\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x01\0\x04\0\xfd\xff\x0b\0\xfc\xff\x03\0\x01\0\x03\0\x02\0\x03\0\0\0\xfb\xff\x15\0a\0\n\0\x16\0\x14\0\x10\0\x16\0\f\0\b\0\xfa\xffw\0\x81\0\x8b\0\xa1\0\xab\0\xb5\0\xc1\0\xd1\0\xf0\xff\x0b\0&\0\xfc\xffA\0\xfe\xff\xff\xffn\0\xfc\xff\xa3\0\xfe\xff\xff\xff\xea\0\xf7\xff\xf8\xff0\x01\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xffG\x01~\x01\x95\x01\xf9\xff'\0\xfd\xff\xfe\xff&\0\xbb\x01\xd2\x01\xf8\x01\x0f\x02\xff\xff\xdc\0\xfd\xff\xff\xff\xf5\0'\x02m\x02\x0e\x01X\x02\xa4\x02\xbb\x02\xe1\x02\r\0\xfc\xff\xfd\xff\xfe\xff\xff\xff\x0e\0\xfd\xff\xfe\xff\xff\xff\x1e\0\xfd\xff\xfe\xff\xff\xff\x0f\0\xfd\xff\xfe\xff\xff\xff\x11\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\x13\0\xfc\xff\xfd\xff\xfe\xff\x0f\0\xff\xff\x10\0\xff\xff\b\x01\x05\0\xfd\xff\x17\0\xfe\xff\x14\0\xff\xff.\0\xfd\xff\xfe\xff*\x004\x005\0\xff\xff5\x000\0[\0\\\0\xff\xff\x1b\x01\xfa\xff\xfb\xff\x89\0h\0Y\0X\0j\0\xff\xff\x8f\0\x89\0\xb1\0\xfe\xff\xb7\0\xa8\0\xa6\0\xb7\0\x02\0\xfd\xff\xb1\0\xac\0\xbb\0\x04\0\xfc\xff5\x02\xfb\xff\xfc\xff\xfd\xffg\x01\xff\xff\xf8\x02\xfe\xff\x06\x03\x1e\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff(\x032\x03J\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff=\x03T\x03l\x03\xf9\xff\xfa\xff\xfb\xff\xf4\0x\x03\x8e\x03\xb3\0\xc2\0\x0f\0\xff\xff\xbe\0\xbc\0\xbb\0\xc1\0\xb7\0\xb3\0\xfe\xff\xbf\0\xc9\0\xc8\0\xc4\0\xcb\0\xc1\0\xbd\0\xfd\xff\x9d\x03_\x03\xae\x03\xc4\x03\xce\x03\xd8\x03\xe4\x03\xef\x03<\0\xfd\xff\xfe\xff\xff\xff\f\x04\xfc\xff\xfd\xffW\x04\xff\xff\x91\x04\xfc\xff\xfd\xff\xdd\x04\xff\xff\xe5\0\xfd\xff\xfe\xff\xff\xff\xe7\0\xfd\xff\xfe\xff\xff\xff\x02\0\xff\xff\x12\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\"\x01\xfd\xff\xfe\xff\xff\xff\0\0\xff\xff\x03\0\xfe\xff\xff\xff&\x01\xfc\xff\xfd\xff\xfe\xff\xff\xffx\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\xd0\0\xfd\xff\xfe\xff\xff\xff\xd3\0\xfd\xff\xfe\xff\xff\xff\xbd\0\xff\xff\x8f\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\r\x01\xfd\xff\xfe\xff\xff\xff_\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff2\x01\xfd\xff\xfe\xff\xff\xff\x1a\x01\xfd\xff\xfe\xff\xff\xff\xe9\0\xfd\xff\xfe\xff\xff\xff\xde\0\xfd\xff\xfe\xff\xff\xffO\x05\xed\xff\xee\xff\n\0\xf0\xff,\x01\xf3\xff\xf4\xff\xf5\xff\xf6\xff=\x01\x02\x04\xf9\xff-\x05\xd1\0\xe4\0\xd3\0\xe8\0\xe1\0\xdf\0\xf0\0\xff\xff\xeb\0\xea\0\b\x01\xfe\xff\x04\x01\x17\x01\xfd\xff6\x01\xfc\xff\x1f\x01\x1d\x01 \x01'\x011\x01-\x01\xfb\xff9\x01R\x01P\x01N\x01T\x01J\x01V\x01\xfa\xffn\x05\f\x04{\x05\x9b\x05\xa5\x05\xb1\x05\xbb\x05\xc5\x05\xf1\xff\xc7\x01M\x02\xfd\xff\xff\xff\x9a\x02\xde\x05\xd1\x05\x9b\x02\xef\x055\x06L\x06r\x06\x10\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x98\x06\xfc\xff\xfd\xff\xe3\x06\xff\xffU\x07\xf4\xff\xf5\xff\x0b\0\xf7\xffL\x02\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\x1f\x02\xf3\x053\x07d\x01s\x01h\x01\x85\x01v\x01\x9a\x01\xab\x01\xff\xff\xad\x01\xb0\x01\xbf\x01\xb9\x01\xbb\x01\xfd\x01\xe6\x01\xe6\x01\xea\x01\xf7\x01\xed\x01\xea\x01\t\x02\x13\x02\x13\x02\x0f\x02\x15\x02\x0b\x02\x07\x02\x8e\x06\x98\x06t\x07\xaa\x07\xb4\x07\xbe\x07\xc8\x07\xd2\x07\xf8\xffx\x02\xa7\x02\xfd\xff\xff\xff\xd8\x02R\x07\xdc\x07\xec\x02\xf4\x07:\bQ\bw\bL\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x9d\b\xfc\xff\xfd\xff\xe8\b\xff\xff\x87\x02x\x02\xfd\xffd\x02\xfe\xff\xb6\x02\xff\xff\x0b\x02\xff\xff\xcc\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff.\x02\xff\xff\xb2\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x17\0\xff\xff\xb7\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\xbb\x02\xfd\xff\xfe\xff\xff\xffy\x02\xfd\xff\xfe\xff\xff\xff\xb8\x02\xfc\xff\xfd\xff\xfe\xff\x13\0\xff\xff\x8c\x01\x92\x01\xff\xff\x96\x01\x97\x01\x9a\x01\xa8\x01\xaa\x01\xab\x01\xac\x01\xad\x01\xb5\x01\xb8\x01\xb9\x01\xbb\x01\xbf\x01\xc1\x01\xc3\x01\xc4\x01\xc5\x01\xc8\x01\xcb\x01\xdf\x01\xe1\x01\xe4\x01\xf9\x01\xfb\x01\x02\x02\x04\x02\x0b\x02\f\x02\r\x02\0\0",nN="0.55",nM=109,de="droit_ouvert",F="Champs d'applications",v7=479,iH=952,v5=2655,v6=4250,v4=3880,bh="ContributionsSocialesAidesPersonnelleLogement",iG="Article D832-10",bj="Interface du programme",qD=-97,nL=944,aJ="examples/aides_logement/archives.catala_fr",iF=469,BO=3470,v3=281,BN=3313,v2="218700",qB="Article D823-20",qC="ServicesSociauxAllocationVerseeAuxServicesSociaux",kr="d\xc3\xa9pense_nette_minimale_d832_27",iE=195,ek="1.",fG=1015,ht=1094,v1="DecisionTaken(_)",v0="45200",db="d\xc3\xa9pense_nette_minimale",BM=3708,iD=954,qA="Titre I : Allocations aux personnes \xc3\xa2g\xc3\xa9es",j0="Livre I : G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s - Dispositions communes \xc3\xa0 tout ou partie des r\xc3\xa9gimes de base",vZ=4576,BL=2284,rz="Article D823-17",BK="Instruction minist\xc3\xa9rielle N\xc2\xb0DSS/SD2B/2019/65 du 25 mars 2019 relative \xc3\xa0 la revalorisation au 1er avril 2019 des prestations familiales servies en m\xc3\xa9tropole",iC=596,nK="AllocationLogement",vW=2901,vX="5186",vY="Unexpected '%s' kind for the enumeration 'SituationObligationScolaire.t'",hs=1065,fF=155,fW=518,BJ="calcul_apl_logement_foyer.situation_familiale_calcul_apl",vU="142303",l_=316,vV="37778",dZ=296,nJ=565,BI=1396,BH=215,dY="Article D832-11",vT="LaReunion",nI=947,vS=2121,BG="AgrandirOuRendreHabitableD331_63",aU="Montant du salaire minimum de croissance",l9=557,eH=621,qz="0.3",vR="true",a$="Chapitre II : Conditions g\xc3\xa9n\xc3\xa9rales d'attribution",fV=370,ac="Titre II : Dispositions communes aux aides personnelles au logement",BE="25116",BF=1177,jZ="Paragraphe 1 : Information et simplification des d\xc3\xa9marches des assur\xc3\xa9s.",qy="1500",vQ=" is too large for shifting.",BD="237200",nH=502,l7="242800",l8="Map.bal",ry="5208",BC="0.08",vP="@[",_="Titre III : Aide personnalis\xc3\xa9e au logement",BB="Apr\xc3\xa8s",vO=1185,$="Code de la s\xc3\xa9curit\xc3\xa9 sociale",BA="42892",l6=688,l5="ml_z_overflow",vN="1.8",By=807,Bz=3152,kq="contributions_sociales.date_courante",gC=850,l4=309,vM="calcul_apl_logement_foyer.redevance",Bx=-752863768,rw="202500",rx="Article D832-17",Bw=360,hr=3222,Bt="Article 10",iB=1144,Bu="allocationsFamiliales",Bv="Instruction interminist\xc3\xa9rielle n\xc2\xb0DSS/2B/2021/65 du 19 mars 2021 relative \xc3\xa0 la revalorisation au 1er avril 2021 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",vL="582700",nG=167,Br=274,Bs="4986",aM="CalculAidePersonnalis\xc3\xa9eLogementLocatif",Bq=433,nF=531,eG="abattement_d\xc3\xa9pense_nette_minimale",Bp="Sys_blocked_io",qx="b\xc3\xa9n\xc3\xa9ficie_titre_personnel_aide_personnelle_logement",cf="Articles valables du 1er octobre 2020 au 1er octobre 2021",gr="Chapitre 2 : Champ d'application",vK="0.0588",nE="Chapitre 2 : Champ d'application.",hq=4383,Bo=362,nD=457,Bn="49",V="\xc3\x89ligibilit\xc3\xa9 aux aides personnelles au logement",bs="Article D842-15",l3=246,fE=1016,vI="37900",vJ="%u",l2="Article L831-1",aD="Chapitre IV : Calcul de l'aide personnalis\xc3\xa9e au logement en secteur accession",fD="calcul_\xc3\xa9quivalence_loyer_minimale",fC=298,Bm="Article 40",b1="\xc3\x89ligibilit\xc3\xa9AidePersonnalis\xc3\xa9eLogement",vG=2236,vH="19402",jY=925,T="2",cy=127,nC=711,vD="Article 30",vE=4857,vF="@{",cb="Montant de la base mensuelle des allocations familiales",vC=" : flags Open_rdonly and Open_wronly are not compatible",vB="0.232",rv="OuvertureDroitsRetraite",vz="Zone2",vA="43505",Bl=3451,nB="D\xc3\xa9cret n\xc2\xb0 2019-1387 du 18 d\xc3\xa9cembre 2019 portant rel\xc3\xa8vement du salaire minimum de croissance",cF="-",Bk=336,hp=603,vx="n_nombre_parts_d832_11",vy=" : file already exists",vw=397,jX="EffectiveEtPermanente",vv=1780,Bi="calculAllocationLogementAccessionPropriete",Bj="41481",e$="0.0045",fB="Date d'ouverture des droits \xc3\xa0 la retraite",l1=866,vu=1099,Bh="retrieveEvents",vt="20165",Bg="2699",lZ=625,l0=644,vr="Infini",vs="prestationsFamiliales",fA="Article 43",vq="\\b",ad="Titre IV : Allocations de Logement",lY="Martinique",nA=404,cm="Article D832-25",vp=487,vo=12520,Bf="Collectivit\xc3\xa9",cT=401,Be="42228",ce="Quantification des impay\xc3\xa9s de d\xc3\xa9pense de logement",aI="Chapitre 1er : Allocations familiales",ho=2016,vn="AllocationEducationEnfantHandicape",Bd="832200",Bc="AllocationRentr\xc3\xa9eScolaire",iA=1000,U="CalculAllocationLogementAccessionPropri\xc3\xa9t\xc3\xa9",Bb=4081,W="",ru=737456202,iz="Sous-section 2 : Principes de neutralisation et d'abattement",Ba="^",A$=2673,lX="Section 2 : Prime de d\xc3\xa9m\xc3\xa9nagement",A_=1393,vm=1821,lW=746,hn=0x3f,A9="' kind for the enumeration 'Collectivite.t'",rt="184000",vl="251500",qw=334,vk=1853,dG="Article 16",A8="Article D842-9",vj="Match_failure",hm=716,ar=2021,iy="0.085",ko="d\xc3\xa9pense_nette_minimale_d832_10",kp="CalculNombrePartLogementFoyer",A7="35130",jW="montant_initial_majoration",ff="+",ix=1061,nz=4347,A6="1057",hl=425,A5="%li",cN=998,hk="Smic",A4="234600",A3="39051",vi="20900",ny="calcul_apl_logement_foyer",rs="208600",hj=431,qv=267,A2="impayeDepenseLogement",iw=962,A1="calcul_nombre_parts.condition_2_du_832_25",vh=0xe0,vg=3175,hi=1126,A0="20100",lV=882,AZ="D331_32",eF="contributions_sociales",fU=580,AY=3828,hh=250,vf="calcul_apl_logement_foyer.ressources_m\xc3\xa9nage_arrondies",M="Secteur logement-foyer",qu="Article L831-2",I="Allocations familiales",iv=893,nx=624,qt="0.027",ve=545,vc="\xc3\xa9ligibilit\xc3\xa9_commune.m\xc3\xa9nage",vd="allocations_familiales",rr=1255,iu="Article 8",bQ="examples/allocations_familiales/securite_sociale_L.catala_fr",lU=594,bw=2019,nw="Article R521-1",rq="jsError",eE=0x8000,jV=1055,bg="Chapitre Ier : Champ d'application",AX="Section 1 : Conditions relatives au b\xc3\xa9n\xc3\xa9ficiaire",it=964,AW="43074",lT=946,vb="6.55957",va="eligibiliteAidePersonnaliseeLogement",lS="Sous-section 1 : Modalit\xc3\xa9s g\xc3\xa9n\xc3\xa9rales de l'appr\xc3\xa9ciation des ressources",hg=371,fz=320,is=129,hf=958,u$="\n",kn="abattement_d\xc3\xa9pense_nette_minimale_d832_27",lR=497,af="Chapitre II : Modalit\xc3\xa9s de liquidation et de versement de l'aide personnalis\xc3\xa9e au logement",qs="3.7",fT=414,lQ=310,bJ="Tous secteurs",u_="Article 34",b6="calcul_plafond_mensualit\xc3\xa9_d842_6_base",ir=2005,AV=-48,qr="9",AU="1025",cd="camlinternalFormat.ml",eD=549,nv=312,u9=3221,nt=943,nu=148,AT="132000",qq="0.0185",u8="924600",km=713,cY=2017,AS="date_naissance",dd=317,am="CalculAidePersonnalis\xc3\xa9eLogementAccessionPropri\xc3\xa9t\xc3\xa9",lP="Article R822-2",AR=3199,d5="Titre 1 : Champ d'application - G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s",gq=1141,rp="obligation_scolaire",qp=1727,u7="EEXIST",eC=293,eB=550,u5=2156,u6=2560,ej=121,AQ="prestations_familiales.prestation_courante",u4=1222,AN=824,kl=1999,AO="\xc3\xa9ligibilit\xc3\xa9_commune.demandeur",AP="\\n",dq=120,lO="16",AL="23138",AM="Article D832-14",ro=512,u3=0x7ff0,u2="eligibiliteAllocationLogement",lN=928,bv="Articles valables du 1er octobre 2021 au 1er juillet 2022",ns=861,u1="montant_forfaitaire_charges",ei="traitement_aide_finale_d\xc3\xa9pense_nette_minimale",rn=177,uZ=4782,u0="0x",AK="Ascendant",lM="0.005",s="Calcul du montant de l'aide personnalis\xc3\xa9e au logement",he=499,lL="D\xc3\xa9cret n\xc2\xb0 2020-1598 du 16 d\xc3\xa9cembre 2020 portant rel\xc3\xa8vement du salaire minimum de croissance",nr=645,AJ="40888",uX="bas",uY="0.208",AI=2142,uW="210900",AG=4804,AH="219900",bA="traitement_aide_finale",uU="r\xc3\xa9gime_outre_mer_l751_1",ba=105,uV="Invalid function call ([ ",uT="Instruction interminist\xc3\xa9rielle n\xc2\xb0 DSS/SD2B/2018/279 du 17 d\xc3\xa9cembre 2018 relative \xc3\xa0 la revalorisation au 1er janvier 2019 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",eA=551,uS=4407,lK="Article R512-2",hd=1135,AF="31664",uR="44693",fS=454,hc="0.45",uQ=1165,qo="2710",gp=429,ai="input",uP="39839",uO=1745,AE="\xc3\xa9ligibilit\xc3\xa9_logement",qn="0.2",hb=157,dw=364,lJ="D\xc3\xa9cret n\xc2\xb0 2018-1173 du 19 d\xc3\xa9cembre 2018 portant rel\xc3\xa8vement du salaire minimum de croissance",uN=390,nq=498,fy="examples/aides_logement/autres_sources.catala_fr",iq=4780,uM="calculAllocationLogement",uL=1384,qm="mkdir",ip=379,uK=4080,go="Article L822-3",be="Chapitre III : Modalit\xc3\xa9s de liquidation et de versement",dF=1013,AD=3526,np=592,no=": No such file or directory",gn=378,fR="Chapitre VII : Calcul des allocations de logement en secteur logement-foyer",gB="Titre 5 : D\xc3\xa9partements d'outre-mer",lI=948,uJ="766",io=4385,cM="CalculetteAidesAuLogementGardeAltern\xc3\xa9e",uI=151,AC="calculetteAidesAuLogement",rm="Section 1 : Ouverture du droit et liquidation de l'allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",gm=1137,AB="Descendant",b9="\xc3\x89ligibilit\xc3\xa9AllocationLogement",a9="D\xc3\xa9cret n\xc2\xb02002-423 du 29 mars 2002 relatif aux prestations familiales \xc3\xa0 Mayotte",nn=220,nm=626,AA="\xc3\xa9ligibilit\xc3\xa9_apl",uH="taux",ql="Demandeur",cB="CalculAllocationLogementLocatif",rl=843,im=1046,Az="BeginCall([ ",Ay=4361,uG=332,jU="caract\xc3\xa9ristiques_pr\xc3\xaat_l831_1_1",Ax="GardeAltern\xc3\xa9ePartageAllocations",fx=932,aX="\xc3\x89pilogue",aq="CalculAllocationLogementFoyer",Aw="943900",Av="bmaf",At="calculEquivalenceLoyerMinimale",Au=4036,lH=2006,uE=3696,uF=3804,ha="0.95",Ar="contributionsSocialesAidesPersonnelleLogement",As="ressourcesAidesPersonnelleLogement",lG=863,cj=363,uC="Pervasives.do_at_exit",uD="utf8",Aq="222300",qk="ComplementFamilial",Ap="225000",uB=3736,uA="\xc3\xa9ligibilit\xc3\xa9_allocation_logement",rk="0.0283",uz=217,aN=854,rj="0.16",lF=643,a5="Article 18",il=418,Ao="36815",ez=134,ik=3220,uy=2756,g$=3425,dv="Section 2 : Conditions relatives aux ressources",An=4189,aG="\xc3\x89ligibilit\xc3\xa9 aux allocations de logement";function -bto(d,b,e,c,f){if(c<=b)for(var +a.prototype._T_}}(Object));(function(aL){"use strict";var +bzx=aL,bzA=typeof +module==="object"&&module.exports||aL,AW="38527",ip=1133,ru=424,AV=1650,gS=857,cq="\xc3\x89ligibilit\xc3\xa9PrestationsFamiliales",Gg="Article L521-1",kv="Paragraphe 2 : Ouverture du droit et liquidation.",nx=365180284,AU="Changement",Gf="26714",Ge=163,AT="redevance_in",o8="SaintMartin",gJ=815,AS="1015",ju=891,ec="Section 1 : Seuils de constitution d'un impay\xc3\xa9",AQ=4865,AR="559500",b6="Article 1",cX="aide_finale_formule",AP="35630",gR=122,ss="Article 31",kY="50",bg="Unexpected '",fY=299,Gd="34700",jt=181,nw="Article 19",o7=862,kX=305,js=4442,ei=128,ku="Avant",rt="identifiant",o6="Oui",Gb=1127,Gc="43000",rs="Article D832-26",eD=683,io=573,rr=383,eY=146,nv=">",o5=575,ge=153,Ga=1027,im=1129,o4=1053,eh=297,AO=4437,o3="Article 17",an="Section 2 : Accession \xc3\xa0 la propri\xc3\xa9t\xc3\xa9",F$="b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s_in",eX="Chapitre 5 : Prestations familiales et prestations assimil\xc3\xa9es",AM="local_habit\xc3\xa9_premi\xc3\xa8re_fois_b\xc3\xa9n\xc3\xa9ficiaire_in",nu=933,AN=3942,o1=1125,o2="baseMensuelleAllocationsFamiliales",AL="35762",aM="Archives de l'arr\xc3\xaat\xc3\xa9 du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de d\xc3\xa9m\xc3\xa9nagement",jr=804,A="Calcul du montant de l'allocation logement",F_=358,d2=2011,df=2023,d1=295,F9=462,il="Article L841-1",rq="ServicesSociauxAllocationVerseeALaFamille",AJ="186000",AK="Instruction interminist\xc3\xa9rielle no DSS/SD2B/2020/33 du 18 f\xc3\xa9vrier 2020 relative \xc3\xa0 la revalorisation au 1er avril 2020 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",AI="16.25",rp="0.0315",kt="traitement_aide_finale_diminu\xc3\xa9",ks=1118,jq=4835,F8="\xc3\xa9ligibilit\xc3\xa9_commune.date_courante",AH="40758",F7=3996,o0="e",oZ=313,ik="Autre",ij=798,AF=4382,AG=1150,F6="Article L822-2",jp=421,gd="smic",AD="39445",AE=3134,ii=1071,bD="Article D842-6",kr=1052,AB=-43,AC="Neuf",ih=901,sr="Article 27",jo=897,F5="inf",F4="calculetteAidesAuLogementGardeAlternee",AA="27365",F3="Circulaire interminist\xc3\xa9rielle N\xc2\xb0 DSS/SD2B/2017/352 du 22 d\xc3\xa9cembre 2017 relative \xc3\xa0 la revalorisation au 1er janvier 2018 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",nt=685,Az=4637,F2="41392",kW=111,ns=929,F1="Location",F0=4456,Ax="240400",Ay=269,sq=709,sp="Ordonnance n\xc2\xb0 96-50 du 24 janvier 1996 relative au remboursement de la dette sociale",jn=619,FZ="33500",kq="CalculNombrePartsAccessionPropri\xc3\xa9t\xc3\xa9",cp="Article D823-9",bI="traitement_aide_finale_minoration_forfaitaire",ro="\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x03\0\0\0\x86\0\xff\xff\x03\0\xff\xff\x86\0E\x01\x92\x019\0\xff\xffE\x01\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff}\0\x8a\0\xff\xff\0\0\xff\xff\0\0\x03\0\xa9\0\x86\0\xae\0\xff\xff\0\0\n\x01E\x01\x92\x01\f\x01\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x05\0s\0\0\0}\0\x81\0\x05\0\xec\x01\x88\0\xff\x01&\0\xff\xff\n\0\x88\0f\0:\0\0\0k\0f\0\xff\xff\x0b\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1d\0&\0\0\0o\0\xd0\0\xe9\0\xff\0\f\x01\x0f\0\x11\0<\0\x0b\0\n\0\0\0\x14\0\x18\0\x1f\0 \0\"\0\x16\0\x1a\0\0\0\x0e\0\x1b\0!\0\x12\0\x17\0\0\0\x10\0\x13\0#\0(\0$\0&\0\0\0)\0*\0+\0,\0-\0.\0:\0R\0\x0b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0'\0?\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0U\0\x8c\0<\0\r\0\x8f\0\x90\0\x91\x000\0\x93\x000\0\x94\0'\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x001\x001\x001\x001\x001\x001\x001\x001\x001\x001\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0A\0'\0\x95\0\x96\0\x9c\0?\0\x9d\x003\0\x9e\x003\0\x9f\x002\x003\x003\x003\x003\x003\x003\x003\x003\x003\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x005\x005\x005\x005\x005\x005\x005\x005\x005\x005\0\x9b\x002\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa1\0\xa2\0\x9b\0[\0A\0\0\x007\x007\x007\x007\x007\x007\x007\x007\x007\x007\x009\0D\0f\0k\0s\0\x83\0\x85\0\x85\0}\0\x8a\0\x85\0\xa3\0^\0\xa5\0D\0\xa6\0\xa7\0\xa8\0\xab\0o\0\xac\0\xad\0\xce\0\xcb\0\xcf\0\xd2\0\xd3\0:\0R\0\x85\0\xd4\0\xd5\0\xd6\0\xd7\0\xd9\0\x8c\0\xda\0a\0\xdb\0\xdc\0w\0\xdd\0\xde\0\xdf\0\x85\0[\0\xcb\0\"\x01>\x01\xe9\0\x98\0\x01\x01P\x01\xf7\0<\0\xfb\x006\x01:\x01Q\x01D\0)\x01R\x01S\x01\x06\x01\x1a\x01D\0w\0\x1e\x01\x0f\x01D\0^\0\x0f\x01T\x01U\x01V\x01G\x01X\x01D\0\xcb\x002\x01G\x01D\0Y\x01D\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0a\0L\x01w\0Z\x01?\0\x01\x01\\\x01G\0G\0G\0G\0G\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0\x98\0L\x01]\x01_\x01a\x01b\x01-\x01N\0N\0N\0N\0N\0N\0c\x01\x98\0d\x01G\0G\0G\0G\0G\0G\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\x14\x01L\x01A\0\x14\x01e\x01f\x01h\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0i\x01j\x01-\x01$\x01k\x01l\x01m\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0n\x01\x1a\x01y\x01\x9d\x01\x1e\x01\x9e\x01\x14\x01P\0P\0P\0P\0P\0P\0[\0\x9f\x01>\x01O\0O\0O\0O\0O\0O\0\xf7\0\xa0\x01\xfb\0\xa1\x01:\x01D\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0^\0P\0P\0P\0P\0P\0P\0V\0V\0V\0V\0V\0V\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0$\x01)\x01a\0\xa2\x01\xa3\x01w\0\x01\x01W\0W\0W\0W\0W\0W\0\xa5\x016\x01\x98\0V\0V\0V\0V\0V\0V\0\x06\x01\xa6\x01\xa7\x01\xa8\x01\x0f\x01\xa9\x01X\0X\0X\0X\0X\0X\0X\0X\0X\0X\x002\x01W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0_\0\x85\x01\xaa\x01\xab\x01\x9a\x01\x85\x01\xac\x01Y\0Y\0Y\0Y\0Y\0Y\0_\0\xb0\0\xad\x01X\0X\0X\0X\0X\0X\0-\x01\xae\x01\xaf\x01\xb0\0\xb0\x01\x9a\x01\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0z\x01Y\0Y\0Y\0Y\0Y\0Y\0\x94\x01\xb1\x01\x14\x01\xb2\x01b\0\x94\x01\xb3\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xd8\x01\xc1\x01_\0\x9a\x01\xd8\x01\xcd\x01b\0\xde\x01_\0\xcd\x01\xe5\x01\x01\x02_\0\xda\x01$\x01\xd7\x01\xd7\x01\x02\x02\xda\x01\xd7\x01_\0\x04\x02\x05\x02\xd8\x01_\0\x06\x02_\0_\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0\xd7\x01\x07\x02z\x01\b\x02\t\x02\n\x02\x0b\x02`\0`\0`\0`\0`\0`\0b\0\f\x02\xd7\x01\xf7\x01\r\x02\x0e\x02b\0\x0f\x02}\x01\x80\x01b\0\x10\x02\xdc\x01\x11\x02\xfb\x01\x12\x02\x13\x02\x14\x02b\0y\x01\x15\x02\xc2\x01b\0\x16\x02b\0b\0`\0`\0`\0`\0`\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xe7\x01\x17\x02\xee\x01\x18\x02\xfb\x01\xee\x01\x19\x02c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xf3\x01}\x01\x80\x01\xe0\x01\x1a\x02\xc5\x01\x1b\x02d\0d\0d\0d\0d\0d\0\x1c\x02\xc2\x01\x1d\x02c\0c\0c\0c\0c\0c\0\x1e\x02\x1f\x02 \x02\xc8\x01\xe7\x01\x85\x01e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xff\xffd\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xff\xff\xff\xff\xc5\x01\xb0\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb9\0\xff\xffe\0e\0e\0e\0e\0e\0\xc8\x01\xe0\x01\xff\xff\xb9\0\xcd\x01z\x01\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xc0\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc0\0\xc1\x01\xf7\x01\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc7\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xc7\0}\x01\x80\x01\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xcc\0\xc2\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe7\x01\xff\xff\xff\xff\xc7\0\xdc\x01\xee\x01\xfb\x01\xff\xff\xc7\0\xf3\x01\xff\xff\xcc\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xe1\0\xff\xff\xe1\0\xff\xff\xe0\x01\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xcd\0\xc5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcc\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xe4\0\xff\xff\xe4\0\xff\xff\xe3\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xff\xff\xe3\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xb9\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xff\xffM\x01\xff\xffM\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01\xff\xffM\x01\xff\xff\xff\xff\xc0\0\xff\xff\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0M\x01\xff\xff\xff\xff\xff\xff\xed\0\xc7\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xf2\0\xff\xff\xff\xff\xf0\0\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xed\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0B\x01B\x01\xff\xff\xff\xffB\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xffO\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01p\x01\xff\xffp\x01\xff\xffB\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01\xff\xff\xff\xffB\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xff\xff\xffr\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xffs\x01\xff\xffs\x01\xff\xffB\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\xff\xffr\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01\xff\xff~\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\x81\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x9b\x01\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01~\x01\xff\xff\xff\xffB\x01~\x01\x81\x01~\x01~\x01\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\x81\x01\x81\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xb8\x01\x8a\x01\xb8\x01\xff\xff\xff\xff\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x01\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xba\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\x8f\x01\xc6\x01\xff\xff\xc6\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xbb\x01\xff\xff\xbb\x01\xff\xff\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xc9\x01\xc9\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",FY="infinity",FX=1855,ig="2.5",FW="3663",Av=1134,Aw=278,eg="Chapitre IV : Impay\xc3\xa9s de d\xc3\xa9penses de logement",Au=3194,eC="examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr",At="\\t",FV=3953,aG="examples/aides_logement/code_construction_legislatif.catala_fr",Ar="situation_r822_11_13_17_in",As=330,FU=385,aP="Titre 2 : Prestations g\xc3\xa9n\xc3\xa9rales d'entretien",kV=112,id="1000",ie=1131,eb=563,c6="examples/aides_logement/code_s\xc3\xa9curit\xc3\xa9_sociale.catala_fr",kU=701,Aq="210600",FT="Unexpected '%s' kind for the enumeration 'ElementPrestationsFamiliales.t'",Ap="Couple",kp=687,nr="SaintPierreEtMiquelon",FS="loyer_minimal",ic=110,co="PrestationsFamiliales",oY=464,FR="\xc3\x89l\xc3\xa9mentPrestationsFamiliales",Ao=1103,oX=679,FQ="214700",ib=615,dP="Calcul\xc3\x89quivalenceLoyerMinimale",An=2083,oW=554,FP="42926",jm=1096,rn=265,Am=-32,nq=4408,Al="39016",oV="AllocationLogementFamiliale",ea=1023,FO="interfaceAllocationsFamiliales",cl=561,np="AllocationLogementSociale",FN=3766,Ak=1974,Aj="plafond_l512_3_2",jl=639,rm="Chapitre II : Des contributions pour le remboursement de la dette sociale.",aW="examples/allocations_familiales/decrets_divers.catala_fr",fX=117,Ai=348,kT="compl\xc3\xa9ment_d\xc3\xa9gressif",rl="Livre VIII : Allocations aux personnes \xc3\xa2g\xc3\xa9es - Allocation aux adultes handicap\xc3\xa9s - Aides \xc3\xa0 l'emploi pour la garde des jeunes enfants - Protection compl\xc3\xa9mentaire en mati\xc3\xa8re de sant\xc3\xa9",FL="240200",FM="Assert_failure",so="Section 1 : Secteur locatif ordinaire",FK="568400",sn="0.32",Ah="40961",FJ=350,kS="Non",jk=508,Ag=185,kR="Article R824-2",FI=219,FH=1e14,Af="D331_76_1",jj=3489,oU="Article R521-3",Ae="17607",ab=2022,FF="34865",FG="Fatal error: exception %s\n",Ad="261800",oT=865,ko=740,fW="Article 2",eB=256,dO=558,ia=786,Ac="Article L521-3",FE="Article R822-1",Ab="45064",FD="taux_francs_vers_euros",kQ="abattement_d\xc3\xa9pense_nette_minimale_d832_10",oS=699,sm="mensualit\xc3\xa9_\xc3\xa9ligible",gc=1075,no="D\xc3\xa9cret n\xc2\xb0 2021-1741 du 22 d\xc3\xa9cembre 2021 portant rel\xc3\xa8vement du salaire minimum de croissance",sl="ENOENT",FC=1395,rk="0.0006",h_=3935,h$=315,ri="EnfantLePlus\xc3\x82g\xc3\xa9",rj=259,nn=556,bw="examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr",Aa="228000",FB="ENOTEMPTY",z$="copropri\xc3\xa9t\xc3\xa9_in",sk="Article 13",FA="calcul_apl_logement_foyer.nombre_personnes_\xc3\xa0_charge",z_="D331_59_8",Fy="Loyer",Fz="35947",ji=3486,eW=564,z9="brut_horaire",z8=172,Fx="x",z7="Sous-section 1 : Aides personnelles au logement",Fw="calculAidePersonnaliseeLogementAccessionPropriete",h9=547,ci="Articles valables du 1er octobre 2020 au 31 septembre 2021",Fv=2641,kn="Article D755-5",fV=680,Fu="Article D842-4",jh=791,dE=314,sj="%d",rh=810,nm=4768,z6="Z.of_substring_base: invalid digit",Ft="ServicesSociauxAllocationVers\xc3\xa9e\xc3\x80LaFamille",Fs="logement_est_chambre_in",h8=637,nl=285,z5="buffer.ml",e="Prologue : aides au logement",D="Secteur accession \xc3\xa0 la propri\xc3\xa9t\xc3\xa9",Fq="167600",Fr="39590",Fp=3213,gQ=2008,rg="0.0179",Fo=2371,z4="245700",B="Prologue",z3=3366,nk="calcul_nombre_parts.nombre_personnes_\xc3\xa0_charge",Fn="Metropole",cd=100,Fm=2384,kO="prise_en_compte_personne_\xc3\xa0_charge",kP=851,nj=702,h7=420,fr=300,h6=4831,_="3",a9="Partie r\xc3\xa9glementaire - D\xc3\xa9crets simples",z2=230,oQ=413,Fl="835",oR="169.",z0="plafond_\xc3\xa9quivalence_loyer_\xc3\xa9ligible",z1=3900,zZ=0.5,kN=990,cU="Article D521-1",Fj="conventionn\xc3\xa9_livre_III_titre_V_chap_III",oP=622,Fk="sous_calcul_traitement",ni=4769,zY=374,h5=956,oO="Article D842-11",d0="Livre 7 : R\xc3\xa9gimes divers - Dispositions diverses",zX=4137,c3=107,nh=381,ng="Article D842-12",jg=690,oN="prestations_familiales",kM="est_enfant_le_plus_\xc3\xa2g\xc3\xa9",zW="26440",h4=649,Fi="201700",si="Unix.Unix_error",zV=3631,h3=1139,zU=284,Fg="calculAidePersonnaliseeLogement",oM=553,Fh=3970,h2=1088,zT="Stack_overflow",fk="condition_2_r823_4",a7="Sous-Section 2 : Conditions d'octroi de l'aide personnalis\xc3\xa9e au logement aux personnes r\xc3\xa9sidant dans un logement-foyer",Ff=3042,aU="\xc3\x89ligibilit\xc3\xa9AidesPersonnelleLogement",Fd=4089,Fe=4843,h1=3487,zS="/static/",rf=253,Fc="Not_found",zR="1085",rd=235,re="\x01\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\x009\0<\0\0\0<\0\0\0\0\0A\0\0\0A\0\0\0\0\0F\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0T\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0^\0\0\0\0\0a\0\xff\xff\xff\xffa\0\xff\xff\xff\xff\xff\xff\xff\xffh\0\0\0\0\0\0\0\0\0m\0\0\0\0\0\0\0q\0\0\0\0\0\0\0u\0\0\0\0\0\0\0y\0\0\0\0\0\0\0\0\0\0\0~\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\x8a\0\0\0\x8e\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x9a\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xb2\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xbb\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc2\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc9\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\0\0\0\0\0\0\xef\0\0\0\0\0\xff\xff\0\0\xf4\0\0\0\0\0\xff\xff\0\0\xf9\0\0\0\0\0\0\0\xfd\0\0\0\0\0\0\0\xff\xff\0\0\x03\x01\0\0\0\0\0\0\0\0\b\x01\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\x11\x01\0\0\0\0\0\0\0\0\x16\x01\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\0\0 \x01\0\0\0\0\0\0\xff\xff\0\0&\x01\0\0\0\0\0\0\0\0+\x01\0\0\0\0\0\0/\x01\0\0\0\0\0\0\0\x004\x01\0\0\0\0\0\x008\x01\0\0\0\0\0\0<\x01\0\0\0\0\0\0@\x01\0\0\0\0\0\0C\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0y\x01}\x01\0\0\0\0\x80\x01\xff\xff\xff\xff\x80\x01\xff\xff\xff\xff\xff\xff\xff\xff\x87\x01\0\0\0\0\0\0\0\0\x8c\x01\0\0\0\0\xff\xff\0\0\x90\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xc1\x01\xc5\x01\0\0\0\0\xc8\x01\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x01\0\0\0\0\0\0\0\0\xd4\x01\0\0\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xdc\x01\0\0\xff\xff\0\0\xe2\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xe9\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xf0\x01\0\0\0\0\0\0\0\0\xf5\x01\0\0\0\0\0\0\xf9\x01\0\0\0\0\0\0\xfc\x01\0\0\0\0\0\0\xff\xff\0\0\x02\x02\x04\x02\0\0\x05\x02\x06\x02\x07\x02\b\x02\t\x02\n\x02\x0b\x02\f\x02\r\x02\x0e\x02\x0f\x02\x10\x02\x11\x02\x12\x02\x13\x02\x14\x02\x15\x02\x16\x02\x17\x02\x18\x02\x19\x02\x1a\x02\x1b\x02\x1c\x02\x1d\x02\x1e\x02\x1f\x02 \x02!\x02\x03\x02",zQ="851",zP="41268",a0="examples/allocations_familiales/epilogue.catala_fr",oL=695,Fb="calcul_apl_logement_foyer.date_courante",ca=848054398,E$=3496,oK="Mayotte",Fa="smic.date_courante",zN=1841,zO=260,oJ="1224",E9="calcul_apl_locatif",E_=243,dz="calcul_plafond_mensualit\xc3\xa9_d832_10_3",h0=1049,rc="rmdir",oI=696,gb=1069,E7="participation_minimale",E8=32752,zM="33623",sh="19100",zL="37478",ga="calcul_nombre_parts",zK=3279,sg="Article 23",oH="Article R842-5",zJ=1026,dq=149,E6="taux_composition_familiale",bQ="montant",dZ="Article L521-2",bu="examples/allocations_familiales/../smic/smic.catala_fr",zG="calculAllocationLogementLocatif",zH="37906",zI="false",dp=849,oG="Invalid integer: ",zF="PasDeChangement",bv="\xc3\x89ligibilit\xc3\xa9 \xc3\xa0 la prime de d\xc3\xa9m\xc3\xa9nagement",a_=106,E5=346,hZ=186,dN=0x80,eV="Chapitre 1er : Dispositions relatives aux prestations",sf="Fatal error: exception ",zE=4211,oF="\xc3\xa9ligibilit\xc3\xa9_commune",se="0.0234",E4="43378",zD="calcul_apl_logement_foyer.date_conventionnement",hY=852,E3=234,zC=1413,hX=1054,sd="25978",dY=303,E1=493,E2=3541,E0="Section 2 : R\xc3\xa8gles de non-cumul",hW="zone_in",sc="_",zB="eligibilitePrimeDeDemenagement",hV=517,rb="compare: functional value",b5="0.",zy=114,zz="40928",zA="19300",nf=411,ne=978,zx="197700",zw="Invalid_argument",hU=4832,ra=823,EZ="EndCall([ ",oE="0.9",EX="Article R822-22",EY="prise_en_charge",zv="calcul_aide_personnalis\xc3\xa9e_logement",zu=249,EV="34301",EW="577500",zs=3941,zt="%ni",nd=949,fq=324,zr=2904,W=2020,zp=3783,zq=2430,EU="PersonneSeule",zo=1418,oD=559,q$="0.0238",sb="Article 9",ET="225100",ES="AutresPersonnes",dn="6",jf=495,zn="173600",fU=858,p="0",ap="Section 3 : Logements-foyers",zm="montant_forfaitaire_charges_d823_16",km="Article L161-17-2",d="examples/aides_logement/prologue.catala_fr",ER="eligibiliteAidesPersonnelleLogement",eU=817,bm=248,zk=1905,zl=3406,nc=341,oC=322,EQ=2370,zj=3856,je=2007,EP="208200",ze="Zone1",zf="Locataire",zg=2245,hT=301,zh="R\xc3\xa8glement (CE) n\xc2\xb02866/98 du conseil du 31 d\xc3\xa9cembre 1998 concernant les taux de conversion entre l'euro et les monnaies des \xc3\x89tats membres adoptant l'euro",zi="37457",EO="562800",zd="535744",EN=572,zb=4182,zc="235800",nb=555,b4=403,na=930,EM="resetLog",EL=4811,za="\xc3\xa2ge_l512_3_2",U="AllocationsFamiliales",y$="situation_familiale_calcul_apl",q_="GardeAlterneeAllocataireUnique",m$="D\xc3\xa9cret n\xc2\xb0 2022-1608 du 22 d\xc3\xa9cembre 2022 portant rel\xc3\xa8vement du salaire minimum de croissance",EJ="haut",EK=1215,gI=1024,y9="204761",y_="3.1",jd=802,m_=133,sa="35780",y7="calculAidePersonnaliseeLogementFoyer",y8=4470,EI=4484,oB=945,fi=366,fj=0xffffff,EH="34829",y5=524,y6=4805,m9=876,jc="Titre III: Titre III : Dispositions communes relatives au financement",EG="36378",ax="Calculette globale",hS=286,jb=3775,EF="149600",y4=3586,kL="Article R824-1",de=1994,EE=4568,hR=2010,bK="Prologue : prestations familiales",r$=2147483647,ED="774",oA=689,y3=", characters ",f$=456,q9="180100",f_="BaseMensuelleAllocationsFamiliales",y2="prestations_familiales.r\xc3\xa9sidence",EC="819",bn="Chapitre IV : Calcul des allocations de logement en secteur accession",y1="AllocationJournali\xc3\xa8rePresenceParentale",y0=".0",EB=4038,EA="36733",q8="AllocationFamilialesAvril2008",yZ=328,ja=693,eT=855,Ez="AllocationRentreeScolaire",q7="mensualit\xc3\xa9_minimale",kK="2.",m8=691,fp="5612",yY="Concubins",dD="calcul_plafond_mensualit\xc3\xa9_d842_6_avec_copropri\xc3\xa9t\xc3\xa9",yX="date_entr\xc3\xa9e_logement_in",r_="Montants revaloris\xc3\xa9s de l'allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",yW="SaintBarth\xc3\xa9lemy",aa="Partie l\xc3\xa9gislative",yV=357,hQ=2003,kl="Article R823-4",yU="32956",br="examples/allocations_familiales/securite_sociale_D.catala_fr",yT="294500",yS=3085,q6="examples/aides_logement/../prestations_familiales/s\xc3\xa9curit\xc3\xa9_sociale_R.catala_fr",dX="RessourcesAidesPersonnelleLogement",f9="Montant des plafonds de ressources",bq="Annexe",eS="Section 1 : B\xc3\xa9n\xc3\xa9ficiaires",Ey="3524",yR="Article D832-27",Ex=3553,yQ="Zone3",kk="500",fT=471,Ew=304,dM=2015,yP="40144",fo="prise_en_compte",yO=3144,Ev="223900",yN="ServicesSociauxAllocationVers\xc3\xa9eAuxServicesSociaux",Eu=138,yM="225500",oz=1998,x="Livre VIII : Aides personnelles au logement",hP=905,kj="caract\xc3\xa9ristiques_pr\xc3\xaat_l831_1_6",q5="nan",Et="38892",yL=1276,m7=4401,yJ="calculNombrePartLogementFoyer",m6=646,yK=4972,kJ="Impay\xc3\xa9D\xc3\xa9penseLogement",yI=3271,bf="Calculette avec garde altern\xc3\xa9e",Es=0xdfff,hO="4.3",eA="/",Er=4504,r9="ENOTDIR",r8=1073741823,Eq=1426,yH=273,yG="\\r",r7="0.0068",r6=513,Ep="calcul_allocation_logement",q4="coefficient_prise_en_charge",m4=743,m5=734,yF=206,Eo="1107",m3=3811,kI="Article D161-2-1-9",oy="Guyane",ow="PasDeTravaux",ox=311,m2=255,En="Revenu",bH="droit_ouvert_majoration",F="Partie r\xc3\xa9glementaire",c5="Partie r\xc3\xa9glementaire - D\xc3\xa9crets en Conseil d'Etat",yE=4918,Em="coefficient_r_d832_25",yD="Chapitre 1er : G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s",El="Sous-section 4 : Prise en compte du patrimoine",i="D\xc3\xa9clarations des champs d'application",yC="End_of_file",Ek="calcul_apl_logement_foyer.condition_2_du_832_25",yB="calculAllocationLogementFoyer",ki="traitement_aide_finale_r\xc3\xa9duction_loyer_solidarit\xc3\xa9",fh="Chapitre V : Calcul de l'aide personnalis\xc3\xa9e au logement en secteur logement-foyer",i$="Article 24",q3="Failure",Ej="267871",Ei=4018,yA="167800",a6="CalculetteAidesAuLogement",Eg=1865,Eh=1347,Y=684,m1=715,q2="\xff\xff\xff\xff\xff\xff\x11\0\xff\xff\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x13\0\x13\0\x13\0\x13\0\x13\0\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\t\0\xff\xff\t\0\xff\xff\xff\xff\x0e\0\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\0\x04\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\0\0\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\x03\0\x05\0\x05\0\x05\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x03\0\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\xff\xff\b\0\xff\xff\b\0\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",yz=0xdc00,yy="389618",ov="3.",i_=788,yx="185800",r5="0.0201",ou=880,Ef="Sys_error",yw=4003,fS="Article D521-2",Ee=3587,m0=703,Ed=3595,yv=2477,r4="nombre_personnes_\xc3\xa0_charge_prises_en_compte",ez="Sous-section 4 : Assurance vieillesse",Eb=3889,Ec="Printexc.handle_uncaught_exception",cT="Article D832-24",kH=618,ot="30500",hN=1079,yu="194810",mY=745,mZ="int_of_string",Q="examples/aides_logement/arrete_2019-09-27.catala_fr",yt="Chapitre Ier : Principes g\xc3\xa9n\xc3\xa9raux",os="Article 37",ys="39340",yr="name",cJ=103,i9=966,yq=447,i8=428,al="Chapitre 2 : Modalit\xc3\xa9s de liquidation et de versement des allocations de logement",kG="traitement_aide_finale_redevance",dW=132,yp=" ])",Ea="1.4",or=698,mX="31797",ym="type_travaux_logement_in",yn="19484",yo=3210,mW=988,yl=3850,cG="Article 7",D$="%Li",mV=864,D_=4067,gH=591,oq=1014,q1="r\xc3\xa9muneration_mensuelle",dy=302,hM=960,yk=205,cF="Article 14",yj="34570",q0="date_de_naissance",i7=1090,mU="base_mensuelle_allocations_familiales",i6=795,i5=927,mT="_z",i4=2000,r3=1951,mS=860,op="Arr\xc3\xaat\xc3\xa9 du 29 juillet 2022 relatif au rel\xc3\xa8vement du salaire minimum de croissance",yi=2269,yh=4109,eR=136,b8="Titre IV : Allocations de logement",D9=2566,yg="retrieveRawEvents",ef="InterfaceAllocationsFamiliales",mR=985,D8=4851,i3=1077,kh="Pendant",qZ="%a",gG=", ",fg="5422",yf=199,dm=2018,D7="17012",oo="calcul_\xc3\xa9quivalence_loyer_minimale.condition_2_du_832_25",ye="AllocationJournalierePresenceParentale",D6=3542,bX="Chapitre III : Calcul des aides personnelles au logement en secteur locatif",D5="' kind for the enumeration 'ElementPrestationsFamiliales.t'",hL=682,fR=467,bE="Prestations familiales",D2="Enfant\xc3\x80Charge",D3="calculette",D4="GardeAltern\xc3\xa9eAllocataireUnique",ey="Article D823-16",D1="172500",r2="n_nombre_parts_d832_25",r1="Apres",hK=1084,yd=359,bG="examples/aides_logement/../prestations_familiales/prologue.catala_fr",yc=2187,D0="179800",fn=" ",K="Secteur locatif",DZ="Undefined_recursive_module",yb=3721,ae="output",ya="195500",x$=1194,bB="Articles valables du 1er octobre 2021 au 30 juin 2022",DY="base_mensuelle_allocations_familiales.date_courante",qY="199900",x_=1424,cE=-976970511,x8="' kind for the enumeration 'SituationObligationScolaire.t'",x9="%.16g",DX="220100",on=189,x7=4422,kg="droit_ouvert_forfaitaire",kf=620,x6="%i",qX="0.01",DW="262985",x5="409505",x4="LogementFoyer",DV="139700",om="PrestationAccueilJeuneEnfant",DU="Article L822-4",ol=856,x3="41252",DR="0.1",DS="Allocation\xc3\x89ducationEnfantHandicap\xc3\xa9",DT=382,mQ="5399",qW="2805",ff=123,mP=570,x2="calcul_apl_logement_foyer.type_logement_foyer",hJ="0.0173",gF=806,L="Arr\xc3\xaat\xc3\xa9 du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de d\xc3\xa9m\xc3\xa9nagement",fQ=159,x1="LocationAccession",i2=1067,mO=577,DQ=183,qV="a_d\xc3\xa9j\xc3\xa0_ouvert_droit_aux_allocations_familiales",DP="41338",dx=0xff,x0=2217,mN="Arr\xc3\xaat\xc3\xa9 du 19 avril 2022 relatif au rel\xc3\xa8vement du salaire minimum de croissance",DO=-12,mM="calcul_\xc3\xa9quivalence_loyer_minimale.ressources_m\xc3\xa9nage_arrondies",xZ=3180,mL=458,xY=191,mK="Article 15",dd="0.75",ke="Titre 5 : Dispositions particuli\xc3\xa8res \xc3\xa0 la Guadeloupe, \xc3\xa0 la Guyane, \xc3\xa0 la Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy et \xc3\xa0 Saint-Martin",DN="22355",mJ=3654863,xX=2556,DM="140800",ok=145,r0="Chapitre 5 : Allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",ex=455,DL=1997,xW="163000",oj=991,kd="0.5",oi="Article R842-14",kc=641,xV="fd ",DK=2203,xU="41751",xT="181800",rZ=409,xQ="\xc3\xa9quivalence_loyer_\xc3\xa9ligible",xR=2448,xS="41316",DJ=4784,bJ="traitement_aide_finale_contributions_sociales_arrondi",xP="cat\xc3\xa9gorie_calcul_apl",xO="757",cc="Prise en compte des ressources pour les aides personnelles au logement",kF="coefficents_enfants_garde_altern\xc3\xa9e_pris_en_compte",hH=377,hI=1081,DI=1290,oh=848,fP=2001,qU="Compl\xc3\xa9mentFamilial",hG=793,xN=633,DH="smic.r\xc3\xa9sidence",xM=3260,az="Livre 5 : Prestations familiales et prestations assimil\xc3\xa9es",f8=1018,mI=108,DG="Article D832-18",mH=-2147483648,eQ=2002,z="1",xL="Chapitre II : Dispositions applicables aux ressources",mG="Article R822-7",DE=2676,DF="42605",xJ="VendeurQuandDemandeurAContratLocationAccession",xK="Article R755-0-2",qT=406,DD="calculNombrePartsAccessionPropriete",DC="allocationFamilialesAvril2008",rY=": Not a directory",xI="b",DA="18900",DB="Article D521-3",cS="CalculAidePersonnalis\xc3\xa9eLogement",xH="D331_63_64",dV=2012,Dz=4725,Dx="42469",Dy="Out_of_memory",xG=4897,E="examples/aides_logement/code_construction_reglementaire.catala_fr",ah="4",rX="index out of bounds",mF=986,xF=3886,Dv="27900",Dw=3481,i1=903,og="_bigarr02",Du=3178,xD=975,xE="31264",mE=881,Dt=0xffffffff,hF=4441,gE=895,Ds="LaR\xc3\xa9union",xC=3531,mD="Article L822-5",mC=574,Dr="981600",hD=3771,hE=292,ew=0xffff,gP=2009,Dq="%.17g",xA=1806,mB="calcul_\xc3\xa9quivalence_loyer_minimale.n_nombre_parts_d832_25",xB=400,xy=1965,xz=1148,c4="100.",xx=3226,Do="1.25",Dp=143,Dn=2705,xw="44729",xv=1310,eP="\xc3\xa2ge_minimum_alin\xc3\xa9a_1_l521_3",gD=963043957,P="5",mA=142,of=741,dl=126,i0="AllocationSoutienFamilial",xu=840,Dm="SousLocataire",xt="34713",xs=4197,oe=628,bb="Section 1 : Calcul, liquidation et versement des aides",kE=124,xr="0.98",gC="Article L512-3",Dl=2182,xp="633129",xq=422,iZ=427,dk=150,xo="41440",mz=135,iY=899,dj="\xc3\x89ligibilit\xc3\xa9PrimeDeD\xc3\xa9m\xc3\xa9nagement",dC="Sous-section 2 : Calcul de l'aide en secteur locatif",kb=252,Dk="enfant_le_plus_\xc3\xa2g\xc3\xa9",I="examples/allocations_familiales/prologue.catala_fr",au="CalculAidePersonnalis\xc3\xa9eLogementFoyer",ev=".",od=147,Dj=0xf0,xn="eligibilitePrestationsFamiliales",cI="12.",ch=694,my="Guadeloupe",xm=276,bp=116,oc="230500",xl="enfantLePlusAge",ob=576,mx=627,di=365,hC=813,xk=3954,fm="traitement_aide_finale_montant_minimal",dh=294,xj="impossible case",iX=1073,dU="examples/allocations_familiales/securite_sociale_R.catala_fr",f7=968,eO="R\xc3\xa8gles diverses",mw=500,Di=-1080,Dg="18185",Dh=4043,hB=638,xi="SaintBarthelemy",dB=1063,Df=-1023,Dd="type_logement_foyer_in",oa=859,De=221,gB="1272",xh="ressources_m\xc3\xa9nage_avec_arrondi",Db="ouvertureDroitsRetraite",Dc="\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement",iW=3773,Da="204700",rW="Article L755-12",xg="TravauxPourAcquisitionD832_15_1",C$="Ancien",rV="lib/read.mll",xf=4411,gO="1229",C_="Article premier",mv=501,aZ="\xc3\x89ligibilit\xc3\xa9 \xc3\xa0 l'aide personnalis\xc3\xa9e au logement",xe=2079,C9=1788,xd=4051,gA=819,mu='"',C8="Arr\xc3\xaat\xc3\xa9 du 14 d\xc3\xa9cembre 2020 relatif au montant des plafonds de ressources de certaines prestations familiales et aux tranches du bar\xc3\xa8me applicable au recouvrement des indus et \xc3\xa0 la saisie des prestations",mt="examples/aides_logement/../prestations_familiales/s\xc3\xa9curit\xc3\xa9_sociale_L.catala_fr",cR="CalculAllocationLogement",xc=231,hA=4448,C7="3539",rU="<",w$="208500",cg=931,xa="prestations_familiales.date_courante",xb=0x800,hz=617,ms=182,w_=398,rT=1152,C6=331,n$="\xc3\xa9ligibilit\xc3\xa9",w8="233000",w9=0.012,w7=2346,w6="calculAidePersonnaliseeLogementLocatif",bW="Article 33",iV=719,C5="M\xc3\xa9tropole",C3="40696",C4=209,w5=131,C2="ressources_m\xc3\xa9nage_arrondies_seuil",w4=204,rS="Article D815-1",iT=834,iU="conditions_hors_\xc3\xa2ge",eN="traitement_aide_finale_abattement",bc="Dispositions sp\xc3\xa9ciales relatives \xc3\xa0 Mayotte",w2=726928360,ay=562,w3="221100",qS=165,w1="([^/]+)",C1="plafond_loyer_d823_16_2",mr=700,C0="Article 39",rR=0xf,w0=4883,rQ=809,wZ="798",CZ="BailleurSocial",ka="montant_initial_m\xc3\xa9tropole_majoration",n_=372,cs=125,kD="ressources_m\xc3\xa9nage_arrondies_in",iS=907,wX=2950,wY="Division_by_zero",CY=2403,f6=1092,n9=520,CX=4171,qR="Article L832-3",wW=708012133,n8=3976,CW="SituationObligationScolaire",CU="AutrePersonne\xc3\x80Charge",n7=879,CV="44440",wV=3158,CT="AllocationJeuneEnfant",dL=2014,mq=1119,iR=1059,dK=552,CR="22262",CS=3797,hy="date_courante_in",n6=659,CQ="Article D842-17",n5=697,CP="Article L751-1",f5=503,rP=119,wU=2542,j$="montant_avec_garde_altern\xc3\xa9e_majoration",CN="70",CO=4091,eM=412,dT=104,wS="calculette_sans_garde_altern\xc3\xa9e",wT="Instruction interminist\xc3\xa9rielle n\xc2\xb0DSS/2B/2022/82 du 28 mars 2022 relative \xc3\xa0 la revalorisation au 1er avril 2022 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",n4=321,wR="version_avril_2008",iQ=468,wQ="38361",n3=714,CM=439,fe=2013,CK="ouverture_droits_retraite",CL=102,wP="mensualit\xc3\xa9_principale_in",hx=800,CJ="997500",hw="100000.",wO="18261",fO=101,n2="calcul_nombre_parts.situation_familiale_calcul_apl",CI="participation_personnelle",CH="body",fN="Calcul des contributions sociales s'appliquant aux aides personnelles au logement",wN="Unexpected '%s' kind for the enumeration 'Collectivite.t'",rO="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x04\0\0\0\x03\0\x03\0\x86\0\0\0\x03\0\0\0\x86\0E\x01\x92\x01\xff\xff\0\0E\x01\x92\x01\0\0\0\0\0\0\0\0\x7f\0\x8b\0\0\0\x03\0\0\0\f\0\x03\0\xaa\0\x86\0\xaf\0\0\0\x07\0\x0b\x01E\x01\x92\x01\x0e\x01\r\x001\0\x05\0\n\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\x008\0v\0\x06\0\x81\0\x82\x009\0\xed\x01\x89\0\0\x021\0\0\x000\0\x8a\0j\0>\0\x0e\0n\0i\0\0\x001\0\x0f\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1e\x000\0\b\0r\0\xd1\0\xec\0\0\x01\r\x01\x1d\0\x16\0\xff\xff0\x000\0\x11\0\x15\0\x19\0 \0!\0#\0\x17\0\x1b\0\x10\0\x1f\0\x1c\0\"\0\x13\0\x18\0\x12\0\x1a\0\x14\0$\0)\0%\x000\0\t\0*\0+\0,\0-\0.\0/\0=\0U\x000\0&\0'\0'\0'\0'\0'\0'\0'\0'\0'\x001\0C\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0V\0\x8f\0\xff\xff(\0\x90\0\x91\0\x92\x007\0\x94\x007\0\x95\x000\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0\xff\xff0\0\x96\0\x97\0\xa1\0B\0\x9e\x005\0\x9f\x005\0\xa0\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\0\xa5\x003\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa2\0\xa3\0\xa6\0]\0\xff\xff\x02\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xff\xffM\0g\0l\0t\0\x84\0\x86\0\x87\0\x80\0\x8b\0\x86\0\xa4\0]\0\xab\0M\0\xa7\0\xa8\0\xa9\0\xac\0p\0\xad\0\xae\0\xd2\0\xe2\0\xd0\0\xd3\0\xd4\0;\0S\0\x86\0\xd5\0\xd6\0\xd7\0\xd8\0\xda\0\x8d\0\xdb\0]\0\xdc\0\xdd\0{\0\xde\0\xdf\0\xe0\0\x88\0_\0\xe1\0#\x01A\x01\xea\0\x9b\0\x05\x01a\x01\xfa\0\xff\xff\xfe\x009\x01=\x01_\x01M\0,\x01\\\x01X\x01\t\x01\x1d\x01L\0|\0!\x01\x12\x01K\0b\0\x13\x01U\x01V\x01W\x01x\x01Y\x01J\0\xe1\x005\x01y\x01I\0Z\x01H\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0b\0q\x01z\0[\x01@\0\x04\x01]\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\x9c\0p\x01^\x01`\x01b\x01c\x011\x01O\0O\0O\0O\0O\0O\0d\x01\x9d\0e\x01N\0N\0N\0N\0N\0N\0\xb7\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\x18\x01p\x01\xff\xff\x19\x01f\x01g\x01i\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0j\x01k\x010\x01(\x01l\x01m\x01n\x01P\0P\0P\0P\0P\0P\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0o\x01\x1b\x01\xff\xff\xab\x01\x1f\x01\xaa\x01\x17\x01Q\0Q\0Q\0Q\0Q\0Q\0\\\0\xa8\x01?\x01P\0P\0P\0P\0P\0P\0\xf8\0\xa5\x01\xfc\0\xa2\x01;\x01E\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0\xff\xffQ\0Q\0Q\0Q\0Q\0Q\0W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0'\x01*\x01\xff\xff\xa3\x01\xa4\x01x\0\x02\x01X\0X\0X\0X\0X\0X\0\xa6\x017\x01\x99\0W\0W\0W\0W\0W\0W\0\x07\x01\xa7\x01\xa4\x01\xa9\x01\x10\x01\xa4\x01Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\x003\x01X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0a\0\x89\x01\xa4\x01\xac\x01\xb9\x01\x88\x01\xad\x01Z\0Z\0Z\0Z\0Z\0Z\0a\0\xb3\0\xae\x01Y\0Y\0Y\0Y\0Y\0Y\0.\x01\xaf\x01\xb0\x01\xb4\0\xa4\x01\xb8\x01\xb5\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0|\x01Z\0Z\0Z\0Z\0Z\0Z\0\xc0\x01\xb2\x01\x15\x01\xb3\x01a\0\xc1\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xa4\x01\xd8\x01\xff\xffa\0\xb8\x01\xd8\x01\xd1\x01a\0\xdf\x01a\0\xd0\x01\xe6\x01\x03\x02a\0\xdb\x01%\x01\xd8\x01\xd9\x01\x03\x02\xdc\x01\xd8\x01a\0\x03\x02\x03\x02\xd8\x01a\0\x03\x02a\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xd8\x01\x03\x02~\x01\x03\x02\x03\x02\x03\x02\x03\x02c\0c\0c\0c\0c\0c\0a\0\x03\x02\xda\x01\xfa\x01\x03\x02\x03\x02a\0\x03\x02|\x01|\x01a\0\x03\x02\xdd\x01\x03\x02\xfd\x01\x03\x02\x03\x02\x03\x02a\0\xff\xff\x03\x02\xc4\x01a\0\x03\x02a\0`\0c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xeb\x01\x03\x02\xf1\x01\x03\x02\xff\x01\xf2\x01\x03\x02d\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xf6\x01\x81\x01\x81\x01\xe4\x01\x03\x02\xc4\x01\x03\x02e\0e\0e\0e\0e\0e\0\x03\x02\xc6\x01\x03\x02d\0d\0d\0d\0d\0d\0\x03\x02\x03\x02\x03\x02\xc4\x01\xea\x01\x86\x01a\0a\0a\0a\0a\0a\0a\0a\0a\0a\0\0\0e\0e\0e\0e\0e\0e\0a\0a\0a\0a\0a\0a\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\0\0\0\0\xc9\x01\xb1\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xbc\0\0\0a\0a\0a\0a\0a\0a\0\xc9\x01\xe3\x01\0\0\xbf\0\xce\x01{\x01\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xc3\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc6\0\xff\xff\xf8\x01\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xca\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xcd\0\xff\xff\xff\xff\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe2\0\xc3\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\x01\0\0\0\0\xce\0\xdd\x01\xef\x01\xfe\x01\0\0\xcf\0\xf4\x01\0\0\xe1\0\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\0\0\0\xe8\0\0\0\xe1\x01\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xd9\0\xff\xff\0\0\0\0\0\0\0\0\xe1\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\xe6\0\0\0\xe6\0\0\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\0\0\xe4\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xba\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\xf1\0\0\0q\x01\0\0M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01\0\0p\x01\0\0\0\0\xc1\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0p\x01\0\0\0\0\0\0\xf0\0\xc8\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\xf6\0\0\0\0\0\xf0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xee\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0E\x01F\x01\0\0\0\0E\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0E\x01\0\0N\x01\0\0\0\0\0\0\0\0h\x01I\x01\0\0\0\0\0\0\0\0O\x01\0\0G\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0H\x01\0\0\0\0\0\0\0\0\0\0\xf3\0\0\0\0\0\0\0\0\0\0\0\0\0P\x01w\x01\0\0w\x01\0\0Q\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\0\0J\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01S\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\x01\0\0\0\0s\x01\0\0\0\0T\x01\0\0\0\0u\x01\0\0u\x01\0\0K\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\0\0s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\xb9\x01\0\0\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xb8\x01\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\0\0\0\0D\x01\x80\x01\x80\x01\x80\x01\x7f\x01\0\0\x80\x01\0\0\0\0\xb8\x01\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\x80\x01\x7f\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\xbf\x01\x8e\x01\xbf\x01\0\0\0\0\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x92\x01\x93\x01\0\0\0\0\x92\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\x92\x01\0\0\x99\x01\0\0\0\0\0\0\0\0\xb1\x01\x96\x01\0\0\0\0\0\0\xc8\x01\x9c\x01\0\0\x94\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\x95\x01\0\0\0\0\0\0\0\0\0\0\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x9d\x01\0\0\0\0\0\0\0\0\x9e\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc8\x01\0\0\x97\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\xbb\x01\0\0\xa0\x01\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\x9f\x01\xc8\x01\0\0\xc8\x01\xc7\x01\0\0\xa1\x01\0\0\0\0\0\0\0\0\0\0\0\0\x98\x01\0\0\0\0\0\0\0\0\xbd\x01\0\0\xbd\x01\0\0\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\x91\x01\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\xc8\x01\xc7\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xd6\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd3\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",gN=1e7,j_=254,CG="calcul_apl_logement_foyer.zone",qQ=407,CF="6.",wL=3676,wM="1003",dw="Article L841-2",CE=" : flags Open_text and Open_binary are not compatible",d$="Article D832-15",eu="Titre VI : Dispositions relatives aux prestations et aux soins - Contr\xc3\xb4le m\xc3\xa9dical - Tutelle aux prestations sociales",wK="43248",hv=4444,gM=1992,eL="examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr",wJ="\\\\",w="Code de la construction et de l'habitation",wI="Instruction interministerielle no DSS/SD2B/2019/261 du 18 d\xc3\xa9cembre 2019 relative \xc3\xa0 la revalorisation au 1er janvier 2020 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",CD="Article 38",wG=2297,wH=188,CA=463,CB=160,CC="0.04",wF="0.0226",qP=270,wE="192500",Cy=3346,Cz="230700",wD="217600",n1=926,Cx="0.0463",qO="GardeAlterneePartageAllocations",qN="\0\0\xec\xff\xed\xff\x03\0\xef\xff\x10\0\xf2\xff\xf3\xff\xf4\xff\xf5\xff\0\0\x1f\0\xf9\xffU\0\x01\0\0\0\0\0\x01\0\0\0\x01\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x01\0\x04\0\xfd\xff\x0b\0\xfc\xff\x03\0\x01\0\x03\0\x02\0\x03\0\0\0\xfb\xff\x15\0a\0\n\0\x16\0\x14\0\x10\0\x16\0\f\0\b\0\xfa\xffw\0\x81\0\x8b\0\xa1\0\xab\0\xb5\0\xc1\0\xd1\0\xf0\xff\x0b\0&\0\xfc\xffA\0\xfe\xff\xff\xffn\0\xfc\xff\xa3\0\xfe\xff\xff\xff\xea\0\xf7\xff\xf8\xff0\x01\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xffG\x01~\x01\x95\x01\xf9\xff'\0\xfd\xff\xfe\xff&\0\xbb\x01\xd2\x01\xf8\x01\x0f\x02\xff\xff\xdc\0\xfd\xff\xff\xff\xf5\0'\x02m\x02\x0e\x01X\x02\xa4\x02\xbb\x02\xe1\x02\r\0\xfc\xff\xfd\xff\xfe\xff\xff\xff\x0e\0\xfd\xff\xfe\xff\xff\xff\x1e\0\xfd\xff\xfe\xff\xff\xff\x0f\0\xfd\xff\xfe\xff\xff\xff\x11\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\x13\0\xfc\xff\xfd\xff\xfe\xff\x0f\0\xff\xff\x10\0\xff\xff\b\x01\x05\0\xfd\xff\x17\0\xfe\xff\x14\0\xff\xff.\0\xfd\xff\xfe\xff*\x004\x005\0\xff\xff5\x000\0[\0\\\0\xff\xff\x1b\x01\xfa\xff\xfb\xff\x89\0h\0Y\0X\0j\0\xff\xff\x8f\0\x89\0\xb1\0\xfe\xff\xb7\0\xa8\0\xa6\0\xb7\0\x02\0\xfd\xff\xb1\0\xac\0\xbb\0\x04\0\xfc\xff5\x02\xfb\xff\xfc\xff\xfd\xffg\x01\xff\xff\xf8\x02\xfe\xff\x06\x03\x1e\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff(\x032\x03J\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff=\x03T\x03l\x03\xf9\xff\xfa\xff\xfb\xff\xf4\0x\x03\x8e\x03\xb3\0\xc2\0\x0f\0\xff\xff\xbe\0\xbc\0\xbb\0\xc1\0\xb7\0\xb3\0\xfe\xff\xbf\0\xc9\0\xc8\0\xc4\0\xcb\0\xc1\0\xbd\0\xfd\xff\x9d\x03_\x03\xae\x03\xc4\x03\xce\x03\xd8\x03\xe4\x03\xef\x03<\0\xfd\xff\xfe\xff\xff\xff\f\x04\xfc\xff\xfd\xffW\x04\xff\xff\x91\x04\xfc\xff\xfd\xff\xdd\x04\xff\xff\xe5\0\xfd\xff\xfe\xff\xff\xff\xe7\0\xfd\xff\xfe\xff\xff\xff\x02\0\xff\xff\x12\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\"\x01\xfd\xff\xfe\xff\xff\xff\0\0\xff\xff\x03\0\xfe\xff\xff\xff&\x01\xfc\xff\xfd\xff\xfe\xff\xff\xffx\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\xd0\0\xfd\xff\xfe\xff\xff\xff\xd3\0\xfd\xff\xfe\xff\xff\xff\xbd\0\xff\xff\x8f\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\r\x01\xfd\xff\xfe\xff\xff\xff_\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff2\x01\xfd\xff\xfe\xff\xff\xff\x1a\x01\xfd\xff\xfe\xff\xff\xff\xe9\0\xfd\xff\xfe\xff\xff\xff\xde\0\xfd\xff\xfe\xff\xff\xffO\x05\xed\xff\xee\xff\n\0\xf0\xff,\x01\xf3\xff\xf4\xff\xf5\xff\xf6\xff=\x01\x02\x04\xf9\xff-\x05\xd1\0\xe4\0\xd3\0\xe8\0\xe1\0\xdf\0\xf0\0\xff\xff\xeb\0\xea\0\b\x01\xfe\xff\x04\x01\x17\x01\xfd\xff6\x01\xfc\xff\x1f\x01\x1d\x01 \x01'\x011\x01-\x01\xfb\xff9\x01R\x01P\x01N\x01T\x01J\x01V\x01\xfa\xffn\x05\f\x04{\x05\x9b\x05\xa5\x05\xb1\x05\xbb\x05\xc5\x05\xf1\xff\xc7\x01M\x02\xfd\xff\xff\xff\x9a\x02\xde\x05\xd1\x05\x9b\x02\xef\x055\x06L\x06r\x06\x10\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x98\x06\xfc\xff\xfd\xff\xe3\x06\xff\xffU\x07\xf4\xff\xf5\xff\x0b\0\xf7\xffL\x02\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\x1f\x02\xf3\x053\x07d\x01s\x01h\x01\x85\x01v\x01\x9a\x01\xab\x01\xff\xff\xad\x01\xb0\x01\xbf\x01\xb9\x01\xbb\x01\xfd\x01\xe6\x01\xe6\x01\xea\x01\xf7\x01\xed\x01\xea\x01\t\x02\x13\x02\x13\x02\x0f\x02\x15\x02\x0b\x02\x07\x02\x8e\x06\x98\x06t\x07\xaa\x07\xb4\x07\xbe\x07\xc8\x07\xd2\x07\xf8\xffx\x02\xa7\x02\xfd\xff\xff\xff\xd8\x02R\x07\xdc\x07\xec\x02\xf4\x07:\bQ\bw\bL\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x9d\b\xfc\xff\xfd\xff\xe8\b\xff\xff\x87\x02x\x02\xfd\xffd\x02\xfe\xff\xb6\x02\xff\xff\x0b\x02\xff\xff\xcc\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff.\x02\xff\xff\xb2\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x17\0\xff\xff\xb7\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\xbb\x02\xfd\xff\xfe\xff\xff\xffy\x02\xfd\xff\xfe\xff\xff\xff\xb8\x02\xfc\xff\xfd\xff\xfe\xff\x13\0\xff\xff\x8c\x01\x92\x01\xff\xff\x96\x01\x97\x01\x9a\x01\xa8\x01\xaa\x01\xab\x01\xac\x01\xad\x01\xb5\x01\xb8\x01\xb9\x01\xbb\x01\xbf\x01\xc1\x01\xc3\x01\xc4\x01\xc5\x01\xc8\x01\xcb\x01\xdf\x01\xe1\x01\xe4\x01\xf9\x01\xfb\x01\x02\x02\x04\x02\x0b\x02\f\x02\r\x02\0\0",n0="0.55",nZ=109,dg="droit_ouvert",H="Champs d'applications",wC=479,iP=952,bk="ContributionsSocialesAidesPersonnelleLogement",iO="Article D832-10",bl="Interface du programme",qM=-97,Cw=944,aO="examples/aides_logement/archives.catala_fr",iN=469,wB="218700",qK="Article D823-20",qL="ServicesSociauxAllocationVerseeAuxServicesSociaux",kC="d\xc3\xa9pense_nette_minimale_d832_27",iM=195,et="1.",fM=1015,hu=1094,wA=2372,wz="45200",dc="d\xc3\xa9pense_nette_minimale",iL=954,qJ="Titre I : Allocations aux personnes \xc3\xa2g\xc3\xa9es",wy=2226,j9="Livre I : G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s - Dispositions communes \xc3\xa0 tout ou partie des r\xc3\xa9gimes de base",rN="Article D823-17",Cv="Instruction minist\xc3\xa9rielle N\xc2\xb0DSS/SD2B/2019/65 du 25 mars 2019 relative \xc3\xa0 la revalorisation au 1er avril 2019 des prestations familiales servies en m\xc3\xa9tropole",iK=596,nY="AllocationLogement",ww="5186",wx="Unexpected '%s' kind for the enumeration 'SituationObligationScolaire.t'",dJ=1065,fL=155,f4=518,Cu="calcul_apl_logement_foyer.situation_familiale_calcul_apl",wu="142303",mp=316,wv="37778",d_=296,nX=565,nW=215,d9="Article D832-11",wt="LaReunion",kB=947,Ct="AgrandirOuRendreHabitableD331_63",aC="Montant du salaire minimum de croissance",mo=557,iJ=3283,ee=621,qI="0.3",ws="true",bd="Chapitre II : Conditions g\xc3\xa9n\xc3\xa9rales d'attribution",f3=370,ad="Titre II : Dispositions communes aux aides personnelles au logement",Cr=214,Cs="25116",j8="Paragraphe 1 : Information et simplification des d\xc3\xa9marches des assur\xc3\xa9s.",qH="1500",wr=" is too large for shifting.",Cq="237200",nV=502,mm="242800",mn="Map.bal",rM="5208",Cp="0.08",ht=4841,wq="@[",ag="Titre III : Aide personnalis\xc3\xa9e au logement",Co="Apr\xc3\xa8s",af="Code de la s\xc3\xa9curit\xc3\xa9 sociale",Cn="42892",ml=688,mk="ml_z_overflow",wp="1.8",Cm=807,kA="contributions_sociales.date_courante",kz=850,wo=307,mj=309,wn="calcul_apl_logement_foyer.redevance",Cl=-752863768,Ci=904,rK="202500",rL="Article D832-17",Cj=360,Ck=3088,Cf="Article 10",iI=1144,Cg="allocationsFamiliales",Ch="Instruction interminist\xc3\xa9rielle n\xc2\xb0DSS/2B/2021/65 du 19 mars 2021 relative \xc3\xa0 la revalorisation au 1er avril 2021 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",wm="582700",nU=167,Ce="4986",nT=274,aD="CalculAidePersonnalis\xc3\xa9eLogementLocatif",Cd=433,nS=531,eK="abattement_d\xc3\xa9pense_nette_minimale",Cb=3769,Cc="Sys_blocked_io",wl=450,qG="b\xc3\xa9n\xc3\xa9ficie_titre_personnel_aide_personnelle_logement",gz="Chapitre 2 : Champ d'application",wk="0.0588",nR="Chapitre 2 : Champ d'application.",rJ=362,wj=3757,iH=3939,wi=2592,iG=3281,nQ=457,Ca="49",wh=1882,Z="\xc3\x89ligibilit\xc3\xa9 aux aides personnelles au logement",bz="Article D842-15",B$=1010,iF="nombre_personnes_\xc3\xa0_charge_in",B_=3361,mi=246,fK=1016,wf="37900",wg="%u",B9=3316,mh="Article L831-1",mg="Chapitre IV : Calcul de l'aide personnalis\xc3\xa9e au logement en secteur accession",fJ="calcul_\xc3\xa9quivalence_loyer_minimale",fI=298,we=4273,B8="Article 40",b7="\xc3\x89ligibilit\xc3\xa9AidePersonnalis\xc3\xa9eLogement",wd="19402",mf=925,X="2",cQ=127,nP=711,wb="Article 30",wc="@{",cf="Montant de la base mensuelle des allocations familiales",wa=" : flags Open_rdonly and Open_wronly are not compatible",v$="0.232",rI="OuvertureDroitsRetraite",v9="Zone2",v_="43505",B7=3451,nO="D\xc3\xa9cret n\xc2\xb0 2019-1387 du 18 d\xc3\xa9cembre 2019 portant rel\xc3\xa8vement du salaire minimum de croissance",cH="-",B6=336,hs=603,B5="type_aide_in",v7="n_nombre_parts_d832_11",v8=" : file already exists",j7="EffectiveEtPermanente",v6="1127",B3="calculAllocationLogementAccessionPropriete",B4="41481",fd="0.0045",fH="Date d'ouverture des droits \xc3\xa0 la retraite",me=866,v5=1099,B2="retrieveEvents",v4="20165",hr=4837,iE="situation_familiale_calcul_apl_in",B1="2699",nN=4802,mc=625,md=644,v2="Infini",v3="prestationsFamiliales",fG="Article 43",v1="\\b",ak="Titre IV : Allocations de Logement",mb="Martinique",nM=404,cr="Article D832-25",v0=487,B0=2322,vZ=12520,BZ="Collectivit\xc3\xa9",cW=401,BY="42228",ck="Quantification des impay\xc3\xa9s de d\xc3\xa9pense de logement",aN="Chapitre 1er : Allocations familiales",hq=2016,vY="AllocationEducationEnfantHandicape",BX="832200",vX=1176,vW=1408,BW="AllocationRentr\xc3\xa9eScolaire",iD=1000,V="CalculAllocationLogementAccessionPropri\xc3\xa9t\xc3\xa9",$="",rH=737456202,iC="Sous-section 2 : Principes de neutralisation et d'abattement",BV="^",ma="Section 2 : Prime de d\xc3\xa9m\xc3\xa9nagement",j6=746,hp=0x3f,BU="' kind for the enumeration 'Collectivite.t'",vV=4281,rG="184000",vU="251500",j5=334,dS="Article 16",BT="Article D842-9",vT="Match_failure",vS=3130,ho=716,at=2021,vR=4735,vQ=2345,hn=4446,iB="0.085",kx="d\xc3\xa9pense_nette_minimale_d832_10",ky="CalculNombrePartLogementFoyer",vO=1241,vP=1436,BS="35130",j4="montant_initial_majoration",fl="+",BR=2996,iA=1061,BQ="1057",BP=179,hm=425,BO=4963,vN=3916,BN="%li",cP=998,hl="Smic",BL="colocation_in",BM="234600",vM=2313,vL="logement_meubl\xc3\xa9_d842_2_in",vK=4659,BK="39051",vJ="20900",nL="calcul_apl_logement_foyer",rF="208600",vI=267,hk=431,BJ="impayeDepenseLogement",iz=962,BI="calcul_nombre_parts.condition_2_du_832_25",vH=0xe0,l$=1126,BH="20100",l_=882,BG="D331_32",eJ="contributions_sociales",iy=580,BF="\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers_in",vG=225,hj=250,vF="calcul_apl_logement_foyer.ressources_m\xc3\xa9nage_arrondies",N="Secteur logement-foyer",qF="Article L831-2",J="Allocations familiales",ix=893,nK=624,qE="0.027",vD="\xc3\xa9ligibilit\xc3\xa9_commune.m\xc3\xa9nage",vE="allocations_familiales",rE=1255,iw="Article 8",bP="examples/allocations_familiales/securite_sociale_L.catala_fr",l9=594,vC=245,bC=2019,nJ="Article R521-1",rD="jsError",eI=0x8000,l8=1055,bj="Chapitre Ier : Champ d'application",BE="Section 1 : Conditions relatives au b\xc3\xa9n\xc3\xa9ficiaire",iv=964,BD="43074",l7=946,vB="6.55957",vA="eligibiliteAidePersonnaliseeLogement",l6="Sous-section 1 : Modalit\xc3\xa9s g\xc3\xa9n\xc3\xa9rales de l'appr\xc3\xa9ciation des ressources",vz=3964,l5=371,fF=320,iu=129,hi=958,vy="\n",kw="abattement_d\xc3\xa9pense_nette_minimale_d832_27",hh=497,am="Chapitre II : Modalit\xc3\xa9s de liquidation et de versement de l'aide personnalis\xc3\xa9e au logement",qD="3.7",BC=483,f2=414,l4=310,bO="Tous secteurs",vw="Article 34",b$="calcul_plafond_mensualit\xc3\xa9_d842_6_base",vx=1033,it=2005,BB=-48,qC="9",is=4839,vv=4141,BA="1025",cj="camlinternalFormat.ml",eH=549,nI=312,Bz=686,nG=943,nH=148,By="132000",qB="0.0185",vu="924600",nF=713,c2=2017,vt=1124,Bx="date_naissance",cV=317,l3="Article R822-2",aj="CalculAidePersonnalis\xc3\xa9eLogementAccessionPropri\xc3\xa9t\xc3\xa9",ed="Titre 1 : Champ d'application - G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s",hg=1141,rC="obligation_scolaire",vs="EEXIST",Bw="r\xc3\xa9duction_loyer_solidarit\xc3\xa9_in",f1=293,eG=550,es=121,Bv="prestations_familiales.prestation_courante",nE=1999,Br=824,Bs="\xc3\xa9ligibilit\xc3\xa9_commune.demandeur",Bt=1406,Bu="\\n",l2=1858,vr=4025,dv=120,l1="16",Bp="23138",Bq="Article D832-14",rB=512,vq=0x7ff0,vp="eligibiliteAllocationLogement",l0=928,nD=861,qA="montant_forfaitaire_charges",er="traitement_aide_finale_d\xc3\xa9pense_nette_minimale",rA=177,vn=228,vo="\xc3\xa9quivalence_loyer_minimale",vm="0x",Bo="Ascendant",lZ="0.005",Bn=3865,t="Calcul du montant de l'aide personnalis\xc3\xa9e au logement",lX=499,lY="D\xc3\xa9cret n\xc2\xb0 2020-1598 du 16 d\xc3\xa9cembre 2020 portant rel\xc3\xa8vement du salaire minimum de croissance",Bm=2531,nC=645,Bl="40888",vk="bas",vl="0.208",vj="date_conventionnement_in",Bk=2335,vi="210900",Bj="219900",aw="traitement_aide_finale",vg="r\xc3\xa9gime_outre_mer_l751_1",be=105,vh="Invalid function call ([ ",vf="Instruction interminist\xc3\xa9rielle n\xc2\xb0 DSS/SD2B/2018/279 du 17 d\xc3\xa9cembre 2018 relative \xc3\xa0 la revalorisation au 1er janvier 2019 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",eF=551,lW="Article R512-2",hf=1135,Bi="31664",bo="direct",ve="44693",f0=454,Bh=1520,he="0.45",qz="2710",rz=1914,gy=429,ac="input",vd="39839",Bg="\xc3\xa9ligibilit\xc3\xa9_logement",qy="0.2",fE=157,dR=364,lV="D\xc3\xa9cret n\xc2\xb0 2018-1173 du 19 d\xc3\xa9cembre 2018 portant rel\xc3\xa8vement du salaire minimum de croissance",vc=390,nB=498,Bf=4586,fc="examples/aides_logement/autres_sources.catala_fr",Be=283,vb="calculAllocationLogement",qx="mkdir",gL=379,gx="Article L822-3",va=4080,a4="Chapitre III : Modalit\xc3\xa9s de liquidation et de versement",dQ=1013,nA=592,nz=": No such file or directory",u$="\xc3\xa9quivalence_loyer",hd=378,u_=655,fZ="Chapitre VII : Calcul des allocations de logement en secteur logement-foyer",gK="Titre 5 : D\xc3\xa9partements d'outre-mer",lU=948,u9="766",u7=2355,u8=4648,cO="CalculetteAidesAuLogementGardeAltern\xc3\xa9e",u6=151,Bd="calculetteAidesAuLogement",ry="Section 1 : Ouverture du droit et liquidation de l'allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",fb=1137,Bc="Descendant",cb="\xc3\x89ligibilit\xc3\xa9AllocationLogement",ba="D\xc3\xa9cret n\xc2\xb02002-423 du 29 mars 2002 relatif aux prestations familiales \xc3\xa0 Mayotte",Bb=3832,ny=626,Ba="\xc3\xa9ligibilit\xc3\xa9_apl",u5="taux",qw="Demandeur",bh="CalculAllocationLogementLocatif",A$="BeginCall([ ",u4=332,rx=822,j3="caract\xc3\xa9ristiques_pr\xc3\xaat_l831_1_1",A_="GardeAltern\xc3\xa9ePartageAllocations",fD=932,A9="coefficient_multiplicateur_d832_25",ir=3937,a1="\xc3\x89pilogue",A8=1931,ao="CalculAllocationLogementFoyer",A7="943900",A6="bmaf",A4="calculEquivalenceLoyerMinimale",A5=4036,lT=2006,hc="0.95",A2="contributionsSocialesAidesPersonnelleLogement",A3="ressourcesAidesPersonnelleLogement",lS=863,cC=363,u2="Pervasives.do_at_exit",u3="utf8",A1="222300",qv="ComplementFamilial",A0="225000",u1=3736,AZ=2324,u0="date_signature_pr\xc3\xaat_in",uZ="\xc3\xa9ligibilit\xc3\xa9_allocation_logement",rw="0.0283",aR=854,rv="0.16",lR=643,aQ="Article 18",uY=3105,iq=418,AY="36815",eE=134,dA="Section 2 : Conditions relatives aux ressources",AX=2109,aK="\xc3\x89ligibilit\xc3\xa9 aux allocations de logement";function +byD(d,b,e,c,f){if(c<=b)for(var a=1;a<=f;a++)e[c+a]=d[b+a];else for(var a=f;a>=1;a--)e[c+a]=d[b+a];return 0}function -btp(b,d,c,e){for(var +byE(b,d,c,e){for(var a=0;a=b.l||b.t==2&&c>=b.c.length)){b.c=d.t==4?o8(d.c,e,c):e==0&&d.c.length==c?d.c:d.c.substr(e,c);b.t=b.c.length==b.l?0:2}else -if(b.t==2&&f==b.c.length){b.c+=d.t==4?o8(d.c,e,c):e==0&&d.c.length==c?d.c:d.c.substr(e,c);b.t=b.c.length==b.l?0:2}else{if(b.t!=4)oX(b);var +gg(d,e,b,f,c){if(c==0)return 0;if(f==0&&(c>=b.l||b.t==2&&c>=b.c.length)){b.c=d.t==4?pk(d.c,e,c):e==0&&d.c.length==c?d.c:d.c.substr(e,c);b.t=b.c.length==b.l?0:2}else +if(b.t==2&&f==b.c.length){b.c+=d.t==4?pk(d.c,e,c):e==0&&d.c.length==c?d.c:d.c.substr(e,c);b.t=b.c.length==b.l?0:2}else{if(b.t!=4)o$(b);var g=d.c,h=b.c;if(d.t==4)if(f<=e)for(var a=0;a=0;a--)h[f+a]=g[e+a];else{var i=Math.min(c,g.length-e);for(var a=0;a>=1;if(b==0)return d;a+=a;c++;if(c==9)a.slice(0,1)}}function -gP(a){if(a.t==2)a.c+=ju(a.l-a.c.length,"\0");else -a.c=o8(a.c,0,a.c.length);a.t=0}function -FO(a){if(a.length<24){for(var -b=0;bcy)return false;return true}else +fs(a){return a}function +ej(a,b,c,d,e){gg(fs(a),b,c,d,e);return 0}function +bzn(b,a){throw[0,b,a]}function +jz(b,a){if(b==0)return $;if(a.repeat)return a.repeat(b);var +d=$,c=0;for(;;){if(b&1)d+=a;b>>=1;if(b==0)return d;a+=a;c++;if(c==9)a.slice(0,1)}}function +gT(a){if(a.t==2)a.c+=jz(a.l-a.c.length,"\0");else +a.c=pk(a.c,0,a.c.length);a.t=0}function +GQ(a){if(a.length<24){for(var +b=0;bcQ)return false;return true}else return!/[^\x00-\x7f]/.test(a)}function -su(e){for(var -j=W,c=W,g,f,h,a,b=0,i=e.length;bro){c.substr(0,1);j+=c;c=W;j+=e.slice(b,d)}else -c+=e.slice(b,d);if(d==i)break;b=d}a=1;if(++b=0xd7ff&&a<0xe000)a=2}else{a=3;if(++b0x10ffff)a=3}}}}}if(a<4){b-=a;c+="\ufffd"}else -if(a>eo)c+=String.fromCharCode(0xd7c0+(a>>10),xW+(a&0x3FF));else -c+=String.fromCharCode(a);if(c.length>kc){c.substr(0,1);j+=c;c=W}}return j+c}function -eW(c,a,b){this.t=c;this.c=a;this.l=b}eW.prototype.toString=function(){switch(this.t){case -9:return this.c;default:gP(this);case -0:if(FO(this.c)){this.t=9;return this.c}this.t=8;case -8:return this.c}};eW.prototype.toUtf16=function(){var -a=this.toString();if(this.t==9)return a;return su(a)};eW.prototype.slice=function(){var +sK(e){for(var +j=$,c=$,g,f,h,a,b=0,i=e.length;brB){c.substr(0,1);j+=c;c=$;j+=e.slice(b,d)}else +c+=e.slice(b,d);if(d==i)break;b=d}a=1;if(++b=0xd7ff&&a<0xe000)a=2}else{a=3;if(++b0x10ffff)a=3}}}}}if(a<4){b-=a;c+="\ufffd"}else +if(a>ew)c+=String.fromCharCode(0xd7c0+(a>>10),yz+(a&0x3FF));else +c+=String.fromCharCode(a);if(c.length>gI){c.substr(0,1);j+=c;c=$}}return j+c}function +eZ(c,a,b){this.t=c;this.c=a;this.l=b}eZ.prototype.toString=function(){switch(this.t){case +9:return this.c;default:gT(this);case +0:if(GQ(this.c)){this.t=9;return this.c}this.t=8;case +8:return this.c}};eZ.prototype.toUtf16=function(){var +a=this.toString();if(this.t==9)return a;return sK(a)};eZ.prototype.slice=function(){var a=this.t==4?this.c.slice():this.c;return new -eW(this.t,a,this.l)};function -Fp(a){return new -eW(0,a,a.length)}function -a(a){return Fp(a)}function -sq(c,b){bt_(c,a(b))}var -bG=[0];function -bL(a){sq(bG.Invalid_argument,a)}function -Fn(){bL(rI)}function -bS(a,c,b){b&=ds;if(a.t!=4){if(c==a.c.length){a.c+=String.fromCharCode(b);if(c+1==a.l)a.t=0;return 0}oX(a)}a.c[c]=b;return 0}function -dS(b,a,c){if(a>>>0>=b.l)Fn();return bS(b,a,c)}function -kO(a,b){switch(a.t&6){default:if(b>=a.c.length)return 0;case +eZ(this.t,a,this.l)};function +Gr(a){return new +eZ(0,a,a.length)}function +a(a){return Gr(a)}function +sG(c,b){bzn(c,a(b))}var +bL=[0];function +bR(a){sG(bL.Invalid_argument,a)}function +Gp(){bR(rX)}function +bY(a,c,b){b&=dx;if(a.t!=4){if(c==a.c.length){a.c+=String.fromCharCode(b);if(c+1==a.l)a.t=0;return 0}o$(a)}a.c[c]=b;return 0}function +d3(b,a,c){if(a>>>0>=b.l)Gp();return bY(b,a,c)}function +k0(a,b){switch(a.t&6){default:if(b>=a.c.length)return 0;case 0:return a.c.charCodeAt(b);case 4:return a.c[b]}}function -dz(c,a){if(c.fun)return dz(c.fun,a);if(typeof +dF(c,a){if(c.fun)return dF(c.fun,a);if(typeof c!=="function")return c;var b=c.length|0;if(b===0)return c.apply(null,a);var e=a.length|0,d=b-e|0;if(d==0)return c.apply(null,a);else -if(d<0)return dz(c.apply(null,a.slice(0,b)),a.slice(b));else +if(d<0)return dF(c.apply(null,a.slice(0,b)),a.slice(b));else return function(){var e=arguments.length==0?1:arguments.length,d=new Array(a.length+e);for(var b=0;b>>0>=a.length-1)kN();return a}function -oV(a){if(isFinite(a)){if(Math.abs(a)>=2.2250738585072014e-308)return 0;if(a!=0)return 1;return 2}return isNaN(a)?4:3}function -btx(){return[0]}function -bT(a){if(a<0)bL("Bytes.create");return new -eW(a?2:9,W,a)}function -kW(a){throw a}function -jt(){kW(bG.Division_by_zero)}function -Fs(b,a){if(a==0)jt();return b/a|0}function -dT(a){a.t&6&&gP(a);return a.c}var -bun=Math.log2&&Math.log2(1.1235582092889474E+307)==1020;function -FN(a){if(bun)return Math.floor(Math.log2(a));var +b=0;b>>0>=a.length-1)kZ();return a}function +o9(a){if(isFinite(a)){if(Math.abs(a)>=2.2250738585072014e-308)return 0;if(a!=0)return 1;return 2}return isNaN(a)?4:3}function +byM(){return[0]}function +bZ(a){if(a<0)bR("Bytes.create");return new +eZ(a?2:9,$,a)}function +k8(a){throw a}function +jy(){k8(bL.Division_by_zero)}function +Gu(b,a){if(a==0)jy();return b/a|0}function +d4(a){a.t&6&&gT(a);return a.c}var +bzC=Math.log2&&Math.log2(1.1235582092889474E+307)==1020;function +GP(a){if(bzC)return Math.floor(Math.log2(a));var b=0;if(a==0)return-Infinity;if(a>=1)while(a>=2){a/=2;b++}else while(a<1){a*=2;b--}return b}function -sj(c){var -a=new(aH.Float32Array)(1);a[0]=c;var -b=new(aH.Int32Array)(a.buffer);return b[0]|0}var -Fz=Math.pow(2,-24);function -aP(b,c,a){this.lo=b&fd;this.mi=c&fd;this.hi=a&eo}aP.prototype.caml_custom="_j";aP.prototype.copy=function(){return new -aP(this.lo,this.mi,this.hi)};aP.prototype.ucompare=function(a){if(this.hi>a.hi)return 1;if(this.hia.mi)return 1;if(this.mia.lo)return 1;if(this.loc)return 1;if(ba.mi)return 1;if(this.mia.lo)return 1;if(this.loa.hi)return 1;if(this.hia.mi)return 1;if(this.mia.lo)return 1;if(this.loc)return 1;if(ba.mi)return 1;if(this.mia.lo)return 1;if(this.lo>24),c=-this.hi+(b>>24);return new -aP(a,b,c)};aP.prototype.add=function(a){var +aT(a,b,c)};aT.prototype.add=function(a){var b=this.lo+a.lo,c=this.mi+a.mi+(b>>24),d=this.hi+a.hi+(c>>24);return new -aP(b,c,d)};aP.prototype.sub=function(a){var +aT(b,c,d)};aT.prototype.sub=function(a){var b=this.lo-a.lo,c=this.mi-a.mi+(b>>24),d=this.hi-a.hi+(c>>24);return new -aP(b,c,d)};aP.prototype.mul=function(a){var -b=this.lo*a.lo,c=(b*Fz|0)+this.mi*a.lo+this.lo*a.mi,d=(c*Fz|0)+this.hi*a.lo+this.mi*a.mi+this.lo*a.hi;return new -aP(b,c,d)};aP.prototype.isZero=function(){return(this.lo|this.mi|this.hi)==0};aP.prototype.isNeg=function(){return this.hi<<16<0};aP.prototype.and=function(a){return new -aP(this.lo&a.lo,this.mi&a.mi,this.hi&a.hi)};aP.prototype.or=function(a){return new -aP(this.lo|a.lo,this.mi|a.mi,this.hi|a.hi)};aP.prototype.xor=function(a){return new -aP(this.lo^a.lo,this.mi^a.mi,this.hi^a.hi)};aP.prototype.shift_left=function(a){a=a&63;if(a==0)return this;if(a<24)return new -aP(this.lo<>24-a,this.hi<>24-a);if(a<48)return new -aP(0,this.lo<>48-a);return new -aP(0,0,this.lo<>a|this.mi<<24-a,this.mi>>a|this.hi<<24-a,this.hi>>a);if(a<48)return new -aP(this.mi>>a-24|this.hi<<48-a,this.hi>>a-24,0);return new -aP(this.hi>>a-48,0,0)};aP.prototype.shift_right=function(a){a=a&63;if(a==0)return this;var +aT(b,c,d)};aT.prototype.mul=function(a){var +b=this.lo*a.lo,c=(b*GB|0)+this.mi*a.lo+this.lo*a.mi,d=(c*GB|0)+this.hi*a.lo+this.mi*a.mi+this.lo*a.hi;return new +aT(b,c,d)};aT.prototype.isZero=function(){return(this.lo|this.mi|this.hi)==0};aT.prototype.isNeg=function(){return this.hi<<16<0};aT.prototype.and=function(a){return new +aT(this.lo&a.lo,this.mi&a.mi,this.hi&a.hi)};aT.prototype.or=function(a){return new +aT(this.lo|a.lo,this.mi|a.mi,this.hi|a.hi)};aT.prototype.xor=function(a){return new +aT(this.lo^a.lo,this.mi^a.mi,this.hi^a.hi)};aT.prototype.shift_left=function(a){a=a&63;if(a==0)return this;if(a<24)return new +aT(this.lo<>24-a,this.hi<>24-a);if(a<48)return new +aT(0,this.lo<>48-a);return new +aT(0,0,this.lo<>a|this.mi<<24-a,this.mi>>a|this.hi<<24-a,this.hi>>a);if(a<48)return new +aT(this.mi>>a-24|this.hi<<48-a,this.hi>>a-24,0);return new +aT(this.hi>>a-48,0,0)};aT.prototype.shift_right=function(a){a=a&63;if(a==0)return this;var c=this.hi<<16>>16;if(a<24)return new -aP(this.lo>>a|this.mi<<24-a,this.mi>>a|c<<24-a,this.hi<<16>>a>>>16);var +aT(this.lo>>a|this.mi<<24-a,this.mi>>a|c<<24-a,this.hi<<16>>a>>>16);var b=this.hi<<16>>31;if(a<48)return new -aP(this.mi>>a-24|this.hi<<48-a,this.hi<<16>>a-24>>16,b&eo);return new -aP(this.hi<<16>>a-32,b,b)};aP.prototype.lsl1=function(){this.hi=this.hi<<1|this.mi>>23;this.mi=(this.mi<<1|this.lo>>23)&fd;this.lo=this.lo<<1&fd};aP.prototype.lsr1=function(){this.lo=(this.lo>>>1|this.mi<<23)&fd;this.mi=(this.mi>>>1|this.hi<<23)&fd;this.hi=this.hi>>>1};aP.prototype.udivmod=function(e){var +aT(this.mi>>a-24|this.hi<<48-a,this.hi<<16>>a-24>>16,b&ew);return new +aT(this.hi<<16>>a-32,b,b)};aT.prototype.lsl1=function(){this.hi=this.hi<<1|this.mi>>23;this.mi=(this.mi<<1|this.lo>>23)&fj;this.lo=this.lo<<1&fj};aT.prototype.lsr1=function(){this.lo=(this.lo>>>1|this.mi<<23)&fj;this.mi=(this.mi>>>1|this.hi<<23)&fj;this.hi=this.hi>>>1};aT.prototype.udivmod=function(e){var c=0,b=this.copy(),a=e.copy(),d=new -aP(0,0,0);while(b.ucompare(a)>0){c++;a.lsl1()}while(c>=0){c--;d.lsl1();if(b.ucompare(a)>=0){d.lo++;b=b.sub(a)}a.lsr1()}return{quotient:d,modulus:b}};aP.prototype.div=function(a){var -b=this;if(a.isZero())jt();var -d=b.hi^a.hi;if(b.hi&eE)b=b.neg();if(a.hi&eE)a=a.neg();var -c=b.udivmod(a).quotient;if(d&eE)c=c.neg();return c};aP.prototype.mod=function(b){var -a=this;if(b.isZero())jt();var -d=a.hi;if(a.hi&eE)a=a.neg();if(b.hi&eE)b=b.neg();var -c=a.udivmod(b).modulus;if(d&eE)c=c.neg();return c};aP.prototype.toInt=function(){return this.lo|this.mi<<24};aP.prototype.toFloat=function(){return(this.hi<<16)*Math.pow(2,32)+this.mi*Math.pow(2,24)+this.lo};aP.prototype.toArray=function(){return[this.hi>>8,this.hi&ds,this.mi>>16,this.mi>>8&ds,this.mi&ds,this.lo>>16,this.lo>>8&ds,this.lo&ds]};aP.prototype.lo32=function(){return this.lo|(this.mi&ds)<<24};aP.prototype.hi32=function(){return this.mi>>>8&eo|this.hi<<16};function -f9(b,c,a){return new -aP(b,c,a)}function -o0(a){if(!isFinite(a)){if(isNaN(a))return f9(1,0,u3);return a>0?f9(0,0,u3):f9(0,0,0xfff0)}var -f=a==0&&1/a==-Infinity?eE:a>=0?0:eE;if(f)a=-a;var -b=FN(a)+d1;if(b<=0){b=0;a/=Math.pow(2,-y_)}else{a/=Math.pow(2,b-oQ);if(a<16){a*=2;b-=1}if(b==0)a/=2}var +aT(0,0,0);while(b.ucompare(a)>0){c++;a.lsl1()}while(c>=0){c--;d.lsl1();if(b.ucompare(a)>=0){d.lo++;b=b.sub(a)}a.lsr1()}return{quotient:d,modulus:b}};aT.prototype.div=function(a){var +b=this;if(a.isZero())jy();var +d=b.hi^a.hi;if(b.hi&eI)b=b.neg();if(a.hi&eI)a=a.neg();var +c=b.udivmod(a).quotient;if(d&eI)c=c.neg();return c};aT.prototype.mod=function(b){var +a=this;if(b.isZero())jy();var +d=a.hi;if(a.hi&eI)a=a.neg();if(b.hi&eI)b=b.neg();var +c=a.udivmod(b).modulus;if(d&eI)c=c.neg();return c};aT.prototype.toInt=function(){return this.lo|this.mi<<24};aT.prototype.toFloat=function(){return(this.hi<<16)*Math.pow(2,32)+this.mi*Math.pow(2,24)+this.lo};aT.prototype.toArray=function(){return[this.hi>>8,this.hi&dx,this.mi>>16,this.mi>>8&dx,this.mi&dx,this.lo>>16,this.lo>>8&dx,this.lo&dx]};aT.prototype.lo32=function(){return this.lo|(this.mi&dx)<<24};aT.prototype.hi32=function(){return this.mi>>>8&ew|this.hi<<16};function +gh(b,c,a){return new +aT(b,c,a)}function +pc(a){if(!isFinite(a)){if(isNaN(a))return gh(1,0,vq);return a>0?gh(0,0,vq):gh(0,0,0xfff0)}var +f=a==0&&1/a==-Infinity?eI:a>=0?0:eI;if(f)a=-a;var +b=GP(a)+ea;if(b<=0){b=0;a/=Math.pow(2,-zJ)}else{a/=Math.pow(2,b-Ga);if(a<16){a*=2;b-=1}if(b==0)a/=2}var d=Math.pow(2,24),c=a|0;a=(a-c)*d;var e=a|0;a=(a-e)*d;var -g=a|0;c=c&rD|f|b<<4;return f9(g,e,c)}function -kR(a){return a.toArray()}function -Fm(c,b,g){c.write(32,b.dims.length);c.write(32,b.kind|b.layout<<8);if(b.caml_custom==n5)for(var -a=0;a>4;if(c==2047)return(f|g|b&rD)==0?b&eE?-Infinity:Infinity:NaN;var -e=Math.pow(2,-24),a=(f*e+g)*e+(b&rD);if(c>0){a+=16;a*=Math.pow(2,c-oQ)}else -a*=Math.pow(2,-y_);if(b&eE)a=-a;return a}function -sd(b){var +a(e*Gm(c));return d}function +sA(c){var +a=new(aL.Int32Array)(1);a[0]=c;var +b=new(aL.Float32Array)(a.buffer);return b[0]}function +k2(a){return new +aT(a[7]<<0|a[6]<<8|a[5]<<16,a[4]<<0|a[3]<<8|a[2]<<16,a[1]<<0|a[0]<<8)}function +jx(d){var +f=d.lo,g=d.mi,b=d.hi,c=(b&0x7fff)>>4;if(c==2047)return(f|g|b&rR)==0?b&eI?-Infinity:Infinity:NaN;var +e=Math.pow(2,-24),a=(f*e+g)*e+(b&rR);if(c>0){a+=16;a*=Math.pow(2,c-Ga)}else +a*=Math.pow(2,-zJ);if(b&eI)a=-a;return a}function +st(b){var d=b.length,c=1;for(var -a=0;a>>24&ds|(a&eo)<<8,a>>>16&eo)}function -sl(a){return a.hi32()}function -sm(a){return a.lo32()}var -bts=n5;function -f7(c,d,b,a){this.kind=c;this.layout=d;this.dims=b;this.data=a}f7.prototype.caml_custom=bts;f7.prototype.offset=function(b){var +a=0;a>>24&dx|(a&ew)<<8,a>>>16&ew)}function +sB(a){return a.hi32()}function +sC(a){return a.lo32()}var +byH=og;function +gf(c,d,b,a){this.kind=c;this.layout=d;this.dims=b;this.data=a}gf.prototype.caml_custom=byH;gf.prototype.offset=function(b){var c=0;if(typeof b==="number")b=[b];if(!(b instanceof -Array))bL("bigarray.js: invalid offset");if(this.dims.length!=b.length)bL("Bigarray.get/set: bad number of dimensions");if(this.layout==0)for(var -a=0;a=this.dims[a])kN();c=c*this.dims[a]+b[a]}else +Array))bR("bigarray.js: invalid offset");if(this.dims.length!=b.length)bR("Bigarray.get/set: bad number of dimensions");if(this.layout==0)for(var +a=0;a=this.dims[a])kZ();c=c*this.dims[a]+b[a]}else for(var -a=this.dims.length-1;a>=0;a--){if(b[a]<1||b[a]>this.dims[a])kN();c=c*this.dims[a]+(b[a]-1)}return c};f7.prototype.get=function(a){switch(this.kind){case +a=this.dims.length-1;a>=0;a--){if(b[a]<1||b[a]>this.dims[a])kZ();c=c*this.dims[a]+(b[a]-1)}return c};gf.prototype.get=function(a){switch(this.kind){case 7:var -d=this.data[a*2+0],b=this.data[a*2+1];return Fy(d,b);case +d=this.data[a*2+0],b=this.data[a*2+1];return GA(d,b);case 10:case 11:var -e=this.data[a*2+0],c=this.data[a*2+1];return[fa,e,c];default:return this.data[a]}};f7.prototype.set=function(a,b){switch(this.kind){case -7:this.data[a*2+0]=sm(b);this.data[a*2+1]=sl(b);break;case +e=this.data[a*2+0],c=this.data[a*2+1];return[j_,e,c];default:return this.data[a]}};gf.prototype.set=function(a,b){switch(this.kind){case +7:this.data[a*2+0]=sC(b);this.data[a*2+1]=sB(b);break;case 10:case -11:this.data[a*2+0]=b[1];this.data[a*2+1]=b[2];break;default:this.data[a]=b;break}return 0};f7.prototype.fill=function(b){switch(this.kind){case +11:this.data[a*2+0]=b[1];this.data[a*2+1]=b[2];break;default:this.data[a]=b;break}return 0};gf.prototype.fill=function(b){switch(this.kind){case 7:var -c=sm(b),e=sl(b);if(c==e)this.data.fill(c);else +c=sC(b),e=sB(b);if(c==e)this.data.fill(c);else for(var a=0;ab.data[a])return 1}break}return 0};function -jq(c,d,b,a){this.kind=c;this.layout=d;this.dims=b;this.data=a}jq.prototype=new -f7();jq.prototype.offset=function(a){if(typeof +jv(c,d,b,a){this.kind=c;this.layout=d;this.dims=b;this.data=a}jv.prototype=new +gf();jv.prototype.offset=function(a){if(typeof a!=="number")if(a instanceof Array&&a.length==1)a=a[0];else -bL("Ml_Bigarray_c_1_1.offset");if(a<0||a>=this.dims[0])kN();return a};jq.prototype.get=function(a){return this.data[a]};jq.prototype.set=function(a,b){this.data[a]=b;return 0};jq.prototype.fill=function(a){this.data.fill(a);return 0};function -Fi(c,d,a,b){var -e=Fk(c);if(sd(a)*e!=b.length)bL("length doesn't match dims");if(d==0&&a.length==1&&e==1)return new -jq(c,d,a,b);return new -f7(c,d,a,b)}function -dk(b){if(!bG.Failure)bG.Failure=[bc,a(qT),-3];sq(bG.Failure,b)}function -Fj(b,v,r){var -i=b.read32s();if(i<0||i>16)dk("input_value: wrong number of bigarray dimensions");var -p=b.read32s(),j=p&ds,o=p>>8&1,h=[];if(r==n5)for(var +bR("Ml_Bigarray_c_1_1.offset");if(a<0||a>=this.dims[0])kZ();return a};jv.prototype.get=function(a){return this.data[a]};jv.prototype.set=function(a,b){this.data[a]=b;return 0};jv.prototype.fill=function(a){this.data.fill(a);return 0};function +Gk(c,d,a,b){var +e=Gm(c);if(st(a)*e!=b.length)bR("length doesn't match dims");if(d==0&&a.length==1&&e==1)return new +jv(c,d,a,b);return new +gf(c,d,a,b)}function +dr(b){if(!bL.Failure)bL.Failure=[bm,a(q3),-3];sG(bL.Failure,b)}function +Gl(b,v,r){var +i=b.read32s();if(i<0||i>16)dr("input_value: wrong number of bigarray dimensions");var +p=b.read32s(),j=p&dx,o=p>>8&1,h=[];if(r==og)for(var a=0;a>>32-15;a=ga(a,0x1b873593);b^=a;b=b<<13|b>>>32-13;return(b+(b<<2)|0)+(0xe6546b64|0)|0}function -btH(a,b){a=cq(a,sm(b));a=cq(a,sl(b));return a}function -sh(a,b){return btH(a,o0(b))}function -Fl(c){var -b=sd(c.dims),d=0;switch(c.kind){case +l=jx(k2(e));g.set(a,[j_,m,l])}break}v[0]=(4+i)*4;return Gk(j,o,h,f)}function +Gj(a,b,c){return a.compare(b,c)}function +gk(a,b){return Math.imul(a,b)}function +cv(b,a){a=gk(a,0xcc9e2d51|0);a=a<<15|a>>>32-15;a=gk(a,0x1b873593);b^=a;b=b<<13|b>>>32-13;return(b+(b<<2)|0)+(0xe6546b64|0)|0}function +byW(a,b){a=cv(a,sC(b));a=cv(a,sB(b));return a}function +sx(a,b){return byW(a,pc(b))}function +Gn(c){var +b=st(c.dims),d=0;switch(c.kind){case 2:case 3:case -12:if(b>ev)b=ev;var -e=0,a=0;for(a=0;a+4<=c.data.length;a+=4){e=c.data[a+0]|c.data[a+1]<<8|c.data[a+2]<<16|c.data[a+3]<<24;d=cq(d,e)}e=0;switch(b&3){case +12:if(b>eB)b=eB;var +e=0,a=0;for(a=0;a+4<=c.data.length;a+=4){e=c.data[a+0]|c.data[a+1]<<8|c.data[a+2]<<16|c.data[a+3]<<24;d=cv(d,e)}e=0;switch(b&3){case 3:e=c.data[a+2]<<16;case 2:e|=c.data[a+1]<<8;case -1:e|=c.data[a+0];d=cq(d,e)}break;case +1:e|=c.data[a+0];d=cv(d,e)}break;case 4:case -5:if(b>d$)b=d$;var -e=0,a=0;for(a=0;a+2<=c.data.length;a+=2){e=c.data[a+0]|c.data[a+1]<<16;d=cq(d,e)}if((b&1)!=0)d=cq(d,c.data[a]);break;case +5:if(b>ei)b=ei;var +e=0,a=0;for(a=0;a+2<=c.data.length;a+=2){e=c.data[a+0]|c.data[a+1]<<16;d=cv(d,e)}if((b&1)!=0)d=cv(d,c.data[a]);break;case 6:if(b>64)b=64;for(var -a=0;a64)b=64;for(var -a=0;a32)b=32;b*=2;for(var -a=0;a64)b=64;for(var -a=0;a32)b=32;for(var -a=0;a0?b(c,f,e):b(f,c,e);if(e&&a!=a)return d;if(+a!=+a)return+a;if((a|0)!=0)return a|0}return d}function -kS(a){return a +k4(a){return a instanceof -eW}function -o3(a){return kS(a)}function -Fr(a){if(typeof -a==="number")return iA;else -if(kS(a))return j3;else -if(o3(a))return 1252;else +eZ}function +pf(a){return k4(a)}function +Gt(a){if(typeof +a==="number")return iD;else +if(k4(a))return kb;else +if(pf(a))return 1252;else if(a instanceof -Array&&a[0]===a[0]>>>0&&a[0]<=mO){var -b=a[0]|0;return b==fa?0:b}else +Array&&a[0]===a[0]>>>0&&a[0]<=m2){var +b=a[0]|0;return b==j_?0:b}else if(a instanceof -String)return vo;else +String)return vZ;else if(typeof -a=="string")return vo;else +a=="string")return vZ;else if(a instanceof -Number)return iA;else -if(a&&a.caml_custom)return rr;else +Number)return iD;else +if(a&&a.caml_custom)return rE;else if(a&&a.compare)return 1256;else if(typeof a=="function")return 1247;else if(typeof a=="symbol")return 1251;return 1001}function -f_(a,b){if(ab.c?1:0}function -ss(a,b){return Fo(a,b)}function -oW(a,b,d){var +gi(a,b){if(ab.c?1:0}function +sI(a,b){return Gq(a,b)}function +o_(a,b,d){var e=[];for(;;){if(!(d&&a===b)){var -f=Fr(a);if(f==hh){a=a[1];continue}var -g=Fr(b);if(g==hh){b=b[1];continue}if(f!==g){if(f==iA){if(g==rr)return Fq(a,b,-1,d);return-1}if(g==iA){if(f==rr)return Fq(b,a,1,d);return 1}return fb)return 1;if(a!=b){if(!d)return NaN;if(a==a)return 1;if(b==b)return-1}break;case 1251:if(a!==b){if(!d)return NaN;return 1}break;case 1252:var -a=dT(a),b=dT(b);if(a!==b){if(ab)return 1}break;case +a=d4(a),b=d4(b);if(a!==b){if(ab)return 1}break;case 12520:var a=a.toString(),b=b.toString();if(a!==b){if(ab)return 1}break;case 246:case 254:default:if(a.length!=b.length)return a.length1)e.push(a,b,1);break}}if(e.length==0)return 0;var h=e.pop();b=e.pop();a=e.pop();if(h+10)if(c==0&&(b>=a.l||a.t==2&&b>=a.c.length))if(d==0){a.c=W;a.t=2}else{a.c=ju(b,String.fromCharCode(d));a.t=b==a.l?0:2}else{if(a.t!=4)oX(a);for(b+=c;c0&&b===b)return b;a=a.replace(/_/g,W);b=+a;if(a.length>0&&b===b||/^[+-]?nan$/i.test(a))return b;var +f(a,b){return+(o_(a,b,false)==0)}function +byO(a,c,b,d){if(b>0)if(c==0&&(b>=a.l||a.t==2&&b>=a.c.length))if(d==0){a.c=$;a.t=2}else{a.c=jz(b,String.fromCharCode(d));a.t=b==a.l?0:2}else{if(a.t!=4)o$(a);for(b+=c;c0&&b===b)return b;a=a.replace(/_/g,$);b=+a;if(a.length>0&&b===b||/^[+-]?nan$/i.test(a))return b;var c=/^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(a);if(c){var -d=c[3].replace(/0+$/,W),f=parseInt(c[1]+c[2]+d,16),e=(c[5]|0)-4*d.length;b=f*Math.pow(2,e);return b}if(/^\+?inf(inity)?$/i.test(a))return Infinity;if(/^-inf(inity)?$/i.test(a))return-Infinity;dk("float_of_string")}function -sp(d){d=dT(d);var -e=d.length;if(e>31)bL("format_int: format too long");var -a={justify:ff,signstyle:cF,filler:fh,alternate:false,base:0,signedconv:false,width:0,uppercase:false,sign:1,prec:-1,conv:"f"};for(var +d=c[3].replace(/0+$/,$),f=parseInt(c[1]+c[2]+d,16),e=(c[5]|0)-4*d.length;b=f*Math.pow(2,e);return b}if(/^\+?inf(inity)?$/i.test(a))return Infinity;if(/^-inf(inity)?$/i.test(a))return-Infinity;dr("float_of_string")}function +sF(d){d=d4(d);var +e=d.length;if(e>31)bR("format_int: format too long");var +a={justify:fl,signstyle:cH,filler:fn,alternate:false,base:0,signedconv:false,width:0,uppercase:false,sign:1,prec:-1,conv:"f"};for(var c=0;c=0&&b<=9){a.width=a.width*10+b;c++}c--;break;case".":a.prec=0;c++;while(b=d.charCodeAt(c)-48,b>=0&&b<=9){a.prec=a.prec*10+b;c++}c--;case"d":case"i":a.signedconv=true;case"u":a.base=10;break;case"x":a.base=16;break;case"X":a.base=16;a.uppercase=true;break;case"o":a.base=8;break;case"e":case"f":case"g":a.signedconv=true;a.conv=b;break;case"E":case"F":case"G":a.signedconv=true;a.uppercase=true;a.conv=b.toLowerCase();break}}return a}function -sf(b,f){if(b.uppercase)f=f.toUpperCase();var -e=f.length;if(b.signedconv&&(b.sign<0||b.signstyle!=cF))e++;if(b.alternate){if(b.base==8)e+=1;if(b.base==16)e+=2}var -c=W;if(b.justify==ff&&b.filler==fh)for(var -d=e;d=0&&b<=9){a.width=a.width*10+b;c++}c--;break;case".":a.prec=0;c++;while(b=d.charCodeAt(c)-48,b>=0&&b<=9){a.prec=a.prec*10+b;c++}c--;case"d":case"i":a.signedconv=true;case"u":a.base=10;break;case"x":a.base=16;break;case"X":a.base=16;a.uppercase=true;break;case"o":a.base=8;break;case"e":case"f":case"g":a.signedconv=true;a.conv=b;break;case"E":case"F":case"G":a.signedconv=true;a.uppercase=true;a.conv=b.toLowerCase();break}}return a}function +sv(b,f){if(b.uppercase)f=f.toUpperCase();var +e=f.length;if(b.signedconv&&(b.sign<0||b.signstyle!=cH))e++;if(b.alternate){if(b.base==8)e+=1;if(b.base==16)e+=2}var +c=$;if(b.justify==fl&&b.filler==fn)for(var +d=e;d20){c-=20;a/=Math.pow(10,c);a+=new -Array(c+1).join(n);if(b>0)a=a+en+new -Array(b+1).join(n);return a}else +c=parseInt(a.toString().split(fl)[1]);if(c>20){c-=20;a/=Math.pow(10,c);a+=new +Array(c+1).join(p);if(b>0)a=a+ev+new +Array(b+1).join(p);return a}else return a.toFixed(b)}}var -a,e=sp(i),d=e.prec<0?6:e.prec;if(c<0||c==0&&1/c==-Infinity){e.sign=-1;c=-c}if(isNaN(c)){a=qU;e.filler=fh}else -if(!isFinite(c)){a=E5;e.filler=fh}else +a,e=sF(i),d=e.prec<0?6:e.prec;if(c<0||c==0&&1/c==-Infinity){e.sign=-1;c=-c}if(isNaN(c)){a=q5;e.filler=fn}else +if(!isFinite(c)){a=F5;e.filler=fn}else switch(e.conv){case"e":var -a=c.toExponential(d),b=a.length;if(a.charAt(b-3)==oL)a=a.slice(0,b-1)+n+a.slice(b-1);break;case"f":a=j(c,d);break;case"g":d=d?d:1;a=c.toExponential(d-1);var -h=a.indexOf(oL),g=+a.slice(h+1);if(g<-4||c>=1e21||c.toFixed(0).length>d){var -b=h-1;while(a.charAt(b)==n)b--;if(a.charAt(b)==en)b--;a=a.slice(0,b+1)+a.slice(h);b=a.length;if(a.charAt(b-3)==oL)a=a.slice(0,b-1)+n+a.slice(b-1);break}else{var +a=c.toExponential(d),b=a.length;if(a.charAt(b-3)==o0)a=a.slice(0,b-1)+p+a.slice(b-1);break;case"f":a=j(c,d);break;case"g":d=d?d:1;a=c.toExponential(d-1);var +h=a.indexOf(o0),g=+a.slice(h+1);if(g<-4||c>=1e21||c.toFixed(0).length>d){var +b=h-1;while(a.charAt(b)==p)b--;if(a.charAt(b)==ev)b--;a=a.slice(0,b+1)+a.slice(h);b=a.length;if(a.charAt(b-3)==o0)a=a.slice(0,b-1)+p+a.slice(b-1);break}else{var f=d;if(g<0){f-=g+1;a=c.toFixed(f)}else while(a=c.toFixed(f),a.length>d+1)f--;if(f){var -b=a.length-1;while(a.charAt(b)==n)b--;if(a.charAt(b)==en)b--;a=a.slice(0,b+1)}}break}return sf(e,a)}function -oY(e,c){if(dT(e)==r7)return a(W+c);var -b=sp(e);if(c<0)if(b.signedconv){b.sign=-1;c=-c}else +b=a.length-1;while(a.charAt(b)==p)b--;if(a.charAt(b)==ev)b--;a=a.slice(0,b+1)}}break}return sv(e,a)}function +pa(e,c){if(d4(e)==sj)return a($+c);var +b=sF(e);if(c<0)if(b.signedconv){b.sign=-1;c=-c}else c>>>=0;var -d=c.toString(b.base);if(b.prec>=0){b.filler=fh;var -f=b.prec-d.length;if(f>0)d=ju(f,n)+d}return sf(b,d)}var -FG=0;function -cW(){return FG++}function -btB(a){if(a==0||!isFinite(a))return[0,a,0];var +d=c.toString(b.base);if(b.prec>=0){b.filler=fn;var +f=b.prec-d.length;if(f>0)d=jz(f,p)+d}return sv(b,d)}var +GI=0;function +cZ(){return GI++}function +byQ(a){if(a==0||!isFinite(a))return[0,a,0];var c=a<0;if(c)a=-a;var -b=Math.max(-d1,FN(a)+1);a*=Math.pow(2,-b);while(a=1){a*=zq;b++}if(c)a=-a;return[0,a,b]}function -eb(a){return a.toUtf16()}function -kX(){return typeof -aH.process!=="undefined"&&typeof -aH.process.versions!=="undefined"&&typeof -aH.process.versions.node!=="undefined"}function -buo(){function -a(a){if(a.charAt(0)===et)return[W,a.substring(1)];return}function +b=Math.max(-ea,GP(a)+1);a*=Math.pow(2,-b);while(a=1){a*=zZ;b++}if(c)a=-a;return[0,a,b]}function +ek(a){return a.toUtf16()}function +k9(){return typeof +aL.process!=="undefined"&&typeof +aL.process.versions!=="undefined"&&typeof +aL.process.versions.node!=="undefined"}function +bzD(){function +a(a){if(a.charAt(0)===eA)return[$,a.substring(1)];return}function b(c){var -g=/^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/,a=g.exec(c),b=a[1]||W,e=Boolean(b&&b.charAt(1)!==":");if(Boolean(a[2]||e)){var -d=a[1]||W,f=a[2]||W;return[d,c.substring(d.length+f.length)]}return}return kX()&&aH.process&&aH.process.platform?aH.process.platform==="win32"?b:a:a}var -sy=buo();function -FL(a){return a.slice(-1)!==et?a+et:a}if(kX()&&aH.process&&aH.process.cwd)var -kP=aH.process.cwd().replace(/\\/g,et);else +g=/^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/,a=g.exec(c),b=a[1]||$,e=Boolean(b&&b.charAt(1)!==":");if(Boolean(a[2]||e)){var +d=a[1]||$,f=a[2]||$;return[d,c.substring(d.length+f.length)]}return}return k9()&&aL.process&&aL.process.platform?aL.process.platform==="win32"?b:a:a}var +sO=bzD();function +GN(a){return a.slice(-1)!==eA?a+eA:a}if(k9()&&aL.process&&aL.process.cwd)var +k1=aL.process.cwd().replace(/\\/g,eA);else var -kP="/static";kP=FL(kP);function -btX(a){a=eb(a);if(!sy(a))a=kP+a;var -e=sy(a),d=e[1].split(et),b=[];for(var +k1="/static";k1=GN(k1);function +bza(a){a=ek(a);if(!sO(a))a=k1+a;var +e=sO(a),d=e[1].split(eA),b=[];for(var c=0;c1)b.pop();break;case".":break;default:b.push(d[c]);break}b.unshift(e[0]);b.orig=a;return b}function -buf(e){for(var -f=W,b=f,a,h,c=0,g=e.length;cro){b.substr(0,1);f+=b;b=W;f+=e.slice(c,d)}else -b+=e.slice(c,d);if(d==g)break;c=d}if(a>6);b+=String.fromCharCode(dD|a&hn)}else -if(a<0xd800||a>=Du)b+=String.fromCharCode(vh|a>>12,dD|a>>6&hn,dD|a&hn);else -if(a>=0xdbff||c+1==g||(h=e.charCodeAt(c+1))Du)b+="\xef\xbf\xbd";else{c++;a=(a<<10)+h-0x35fdc00;b+=String.fromCharCode(Cy|a>>18,dD|a>>12&hn,dD|a>>6&hn,dD|a&hn)}if(b.length>kc){b.substr(0,1);f+=b;b=W}}return f+b}function -btw(a){var -b=9;if(!FO(a))b=8,a=buf(a);return new -eW(b,a,a.length)}function -aO(a){return btw(a)}var -buF=["E2BIG","EACCES","EAGAIN","EBADF","EBUSY","ECHILD","EDEADLK","EDOM",u7,"EFAULT","EFBIG","EINTR","EINVAL","EIO","EISDIR","EMFILE","EMLINK","ENAMETOOLONG","ENFILE","ENODEV",r9,"ENOEXEC","ENOLCK","ENOMEM","ENOSPC","ENOSYS",rW,Ey,"ENOTTY","ENXIO","EPERM","EPIPE","ERANGE","EROFS","ESPIPE","ESRCH","EXDEV","EWOULDBLOCK","EINPROGRESS","EALREADY","ENOTSOCK","EDESTADDRREQ","EMSGSIZE","EPROTOTYPE","ENOPROTOOPT","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EOPNOTSUPP","EPFNOSUPPORT","EAFNOSUPPORT","EADDRINUSE","EADDRNOTAVAIL","ENETDOWN","ENETUNREACH","ENETRESET","ECONNABORTED","ECONNRESET","ENOBUFS","EISCONN","ENOTCONN","ESHUTDOWN","ETOOMANYREFS","ETIMEDOUT","ECONNREFUSED","EHOSTDOWN","EHOSTUNREACH","ELOOP","EOVERFLOW"];function -gT(d,f,e,a){var -b=buF.indexOf(d);if(b<0){if(a==null)a=-9999;b=[0,a]}var -c=[b,aO(f||W),aO(e||W)];return c}var -FE={};function -e0(a){return FE[a]}function -gS(b,a){throw[0,b].concat(a)}function -btv(a){return new -eW(4,a,a.length)}function -bq(a){sq(bG.Sys_error,a)}function -bt8(a){bq(a+no)}function -btu(b,a){if(a>>>0>=b.l)Fn();return kO(b,a)}function -dl(a){return a.l}function -Ff(){}function -co(a){this.data=a}co.prototype=new -Ff();co.prototype.truncate=function(a){var -b=this.data;this.data=bT(a|0);f8(b,0,this.data,0,a)};co.prototype.length=function(){return dl(this.data)};co.prototype.write=function(b,d,g,a){var +bzu(e){for(var +f=$,b=f,a,h,c=0,g=e.length;crB){b.substr(0,1);f+=b;b=$;f+=e.slice(c,d)}else +b+=e.slice(c,d);if(d==g)break;c=d}if(a>6);b+=String.fromCharCode(dN|a&hp)}else +if(a<0xd800||a>=Es)b+=String.fromCharCode(vH|a>>12,dN|a>>6&hp,dN|a&hp);else +if(a>=0xdbff||c+1==g||(h=e.charCodeAt(c+1))Es)b+="\xef\xbf\xbd";else{c++;a=(a<<10)+h-0x35fdc00;b+=String.fromCharCode(Dj|a>>18,dN|a>>12&hp,dN|a>>6&hp,dN|a&hp)}if(b.length>gI){b.substr(0,1);f+=b;b=$}}return f+b}function +byL(a){var +b=9;if(!GQ(a))b=8,a=bzu(a);return new +eZ(b,a,a.length)}function +aS(a){return byL(a)}var +bzU=["E2BIG","EACCES","EAGAIN","EBADF","EBUSY","ECHILD","EDEADLK","EDOM",vs,"EFAULT","EFBIG","EINTR","EINVAL","EIO","EISDIR","EMFILE","EMLINK","ENAMETOOLONG","ENFILE","ENODEV",sl,"ENOEXEC","ENOLCK","ENOMEM","ENOSPC","ENOSYS",r9,FB,"ENOTTY","ENXIO","EPERM","EPIPE","ERANGE","EROFS","ESPIPE","ESRCH","EXDEV","EWOULDBLOCK","EINPROGRESS","EALREADY","ENOTSOCK","EDESTADDRREQ","EMSGSIZE","EPROTOTYPE","ENOPROTOOPT","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EOPNOTSUPP","EPFNOSUPPORT","EAFNOSUPPORT","EADDRINUSE","EADDRNOTAVAIL","ENETDOWN","ENETUNREACH","ENETRESET","ECONNABORTED","ECONNRESET","ENOBUFS","EISCONN","ENOTCONN","ESHUTDOWN","ETOOMANYREFS","ETIMEDOUT","ECONNREFUSED","EHOSTDOWN","EHOSTUNREACH","ELOOP","EOVERFLOW"];function +gX(d,f,e,a){var +b=bzU.indexOf(d);if(b<0){if(a==null)a=-9999;b=[0,a]}var +c=[b,aS(f||$),aS(e||$)];return c}var +GG={};function +e3(a){return GG[a]}function +gW(b,a){throw[0,b].concat(a)}function +byK(a){return new +eZ(4,a,a.length)}function +bx(a){sG(bL.Sys_error,a)}function +bzl(a){bx(a+nz)}function +byJ(b,a){if(a>>>0>=b.l)Gp();return k0(b,a)}function +ds(a){return a.l}function +Gh(){}function +ct(a){this.data=a}ct.prototype=new +Gh();ct.prototype.truncate=function(a){var +b=this.data;this.data=bZ(a|0);gg(b,0,this.data,0,a)};ct.prototype.length=function(){return ds(this.data)};ct.prototype.write=function(b,d,g,a){var c=this.length();if(b+a>=c){var -e=bT(b+a),f=this.data;this.data=e;f8(f,0,this.data,0,c)}ea(d,g,this.data,b,a);return 0};co.prototype.read=function(c,a,d,b){var -e=this.length();f8(this.data,c,a,d,b);return 0};co.prototype.read_one=function(a){return btu(this.data,a)};co.prototype.close=function(){};co.prototype.constructor=co;function -cV(b,a){this.content={};this.root=b;this.lookupFun=a}cV.prototype.nm=function(a){return this.root+a};cV.prototype.create_dir_if_needed=function(d){var -c=d.split(et),b=W;for(var -a=0;a>1|1;if(h=0)}function -si(d,b){var -e=b.length,a,c;for(a=0;a+4<=e;a+=4){c=b.charCodeAt(a)|b.charCodeAt(a+1)<<8|b.charCodeAt(a+2)<<16|b.charCodeAt(a+3)<<24;d=cq(d,c)}c=0;switch(e&3){case +a=c}ph[d]=a+1;return h==b[a+1]?b[a]:0}function +Gz(a,b){return+(o_(a,b,false)>=0)}function +sy(d,b){var +e=b.length,a,c;for(a=0;a+4<=e;a+=4){c=b.charCodeAt(a)|b.charCodeAt(a+1)<<8|b.charCodeAt(a+2)<<16|b.charCodeAt(a+3)<<24;d=cv(d,c)}c=0;switch(e&3){case 3:c=b.charCodeAt(a+2)<<16;case 2:c|=b.charCodeAt(a+1)<<8;case -1:c|=b.charCodeAt(a);d=cq(d,c)}d^=e;return d}function -btI(a,b){return si(a,dT(b))}function -btF(d,b){var -e=b.length,a,c;for(a=0;a+4<=e;a+=4){c=b[a]|b[a+1]<<8|b[a+2]<<16|b[a+3]<<24;d=cq(d,c)}c=0;switch(e&3){case +1:c|=b.charCodeAt(a);d=cv(d,c)}d^=e;return d}function +byX(a,b){return sy(a,d4(b))}function +byU(d,b){var +e=b.length,a,c;for(a=0;a+4<=e;a+=4){c=b[a]|b[a+1]<<8|b[a+2]<<16|b[a+3]<<24;d=cv(d,c)}c=0;switch(e&3){case 3:c=b[a+2]<<16;case 2:c|=b[a+1]<<8;case -1:c|=b[a];d=cq(d,c)}d^=e;return d}function -FB(a){switch(a.t&6){default:gP(a);case +1:c|=b[a];d=cv(d,c)}d^=e;return d}function +GD(a){switch(a.t&6){default:gT(a);case 0:return a.c;case 4:return a.c}}function -btE(b,c){var -a=FB(c);return typeof -a==="string"?si(b,a):btF(b,a)}function -btG(a){a^=a>>>16;a=ga(a,0x85ebca6b|0);a^=a>>>13;a=ga(a,0xc2b2ae35|0);a^=a>>>16;return a}function -btD(j,l,n,m){var -f,g,h,d,c,b,a,e,i;d=l;if(d<0||d>ev)d=ev;c=j;b=n;f=[m];g=0;h=1;while(g0){a=f[g++];if(a&&a.caml_custom){if(jr[a.caml_custom]&&jr[a.caml_custom].hash){var -k=jr[a.caml_custom].hash(a);b=cq(b,k);c--}}else +byT(b,c){var +a=GD(c);return typeof +a==="string"?sy(b,a):byU(b,a)}function +byV(a){a^=a>>>16;a=gk(a,0x85ebca6b|0);a^=a>>>13;a=gk(a,0xc2b2ae35|0);a^=a>>>16;return a}function +byS(j,l,n,m){var +f,g,h,d,c,b,a,e,i;d=l;if(d<0||d>eB)d=eB;c=j;b=n;f=[m];g=0;h=1;while(g0){a=f[g++];if(a&&a.caml_custom){if(jw[a.caml_custom]&&jw[a.caml_custom].hash){var +k=jw[a.caml_custom].hash(a);b=cv(b,k);c--}}else if(a instanceof Array&&a[0]===(a[0]|0))switch(a[0]){case -248:b=cq(b,a[2]);c--;break;case +248:b=cv(b,a[2]);c--;break;case 250:f[--g]=a[1];break;default:var -o=a.length-1<<10|a[0];b=cq(b,o);for(e=1,i=a.length;e=d)break;f[h++]=a[e]}break}else -if(kS(a)){b=btE(b,a);c--}else -if(o3(a)){b=btI(b,a);c--}else +o=a.length-1<<10|a[0];b=cv(b,o);for(e=1,i=a.length;e=d)break;f[h++]=a[e]}break}else +if(k4(a)){b=byT(b,a);c--}else +if(pf(a)){b=byX(b,a);c--}else if(typeof -a==="string"){b=si(b,a);c--}else -if(a===(a|0)){b=cq(b,a+a+1);c--}else -if(a===+a){b=sh(b,a);c--}}b=btG(b);return b&0x3FFFFFFF}function -btJ(a,c,k){if(!isFinite(a)){if(isNaN(a))return aO(qU);return aO(a>0?EX:"-infinity")}var +a==="string"){b=sy(b,a);c--}else +if(a===(a|0)){b=cv(b,a+a+1);c--}else +if(a===+a){b=sx(b,a);c--}}b=byV(b);return b&0x3FFFFFFF}function +byY(a,c,k){if(!isFinite(a)){if(isNaN(a))return aS(q5);return aS(a>0?FY:"-infinity")}var i=a==0&&1/a==-Infinity?1:a>=0?0:1;if(i)a=-a;var d=0;if(a==0);else if(a<1)while(a<1&&d>-1022){a*=2;d--}else while(a>=2){a/=2;d++}var -j=d<0?W:ff,e=W;if(i)e=cF;else +j=d<0?$:fl,e=$;if(i)e=cH;else switch(k){case -43:e=ff;break;case -32:e=fh;break;default:break}if(c>=0&&c<13){var +43:e=fl;break;case +32:e=fn;break;default:break}if(c>=0&&c<13){var g=Math.pow(2,c*4);a=Math.round(a*g)/g}var b=a.toString(16);if(c>=0){var -h=b.indexOf(en);if(h<0)b+=en+ju(c,n);else{var -f=h+1+c;if(b.length>24&fd,a>>31&eo)}function -btU(a){return a.toInt()}function -btO(a){return+a.isNeg()}function -btR(a){return a.neg()}function -btM(g,c){var -a=sp(g);if(a.signedconv&&btO(c)){a.sign=-1;c=btR(c)}var -b=W,h=btS(a.base),f="0123456789abcdef";do{var -e=c.udivmod(h);c=e.quotient;b=f.charAt(btU(e.modulus))+b}while(!btP(c));if(a.prec>=0){a.filler=fh;var -d=a.prec-b.length;if(d>0)b=ju(d,n)+b}return sf(a,b)}function -btT(a,b){return a.or(b)}function -o1(a){return a.toFloat()}function -bt7(c){var -a=0,e=aE(c),b=10,d=1;if(e>0)switch(dV(c,a)){case +h=b.indexOf(ev);if(h<0)b+=ev+jz(c,p);else{var +f=h+1+c;if(b.length>24&fj,a>>31&ew)}function +by9(a){return a.toInt()}function +by3(a){return+a.isNeg()}function +by6(a){return a.neg()}function +by1(g,c){var +a=sF(g);if(a.signedconv&&by3(c)){a.sign=-1;c=by6(c)}var +b=$,h=by7(a.base),f="0123456789abcdef";do{var +e=c.udivmod(h);c=e.quotient;b=f.charAt(by9(e.modulus))+b}while(!by4(c));if(a.prec>=0){a.filler=fn;var +d=a.prec-b.length;if(d>0)b=jz(d,p)+b}return sv(a,b)}function +by8(a,b){return a.or(b)}function +pd(a){return a.toFloat()}function +bzk(c){var +a=0,e=aI(c),b=10,d=1;if(e>0)switch(d6(c,a)){case 45:a++;d=-1;break;case -43:a++;d=1;break}if(a+10)switch(dV(c,a)){case 66:b=2;a+=2;break;case 117:case 85:a+=2;break}return[a,d,b]}function -FH(a){if(a>=48&&a<=57)return a-48;if(a>=65&&a<=90)return a-55;if(a>=97&&a<=gN)return a-87;return-1}function -o2(f){var -h=bt7(f),c=h[0],i=h[1],d=h[2],g=aE(f),j=-1>>>0,e=c=d)dk(mL);var -a=b;for(c++;c=d)break;a=d*a+b;if(a>j)dk(mL)}if(c!=g)dk(mL);a=i*a;if(d==10&&(a|0)!=a)dk(mL);return a|0}function -f$(a){return a.slice(1)}function -gQ(c){var +GJ(a){if(a>=48&&a<=57)return a-48;if(a>=65&&a<=90)return a-55;if(a>=97&&a<=gR)return a-87;return-1}function +pe(f){var +h=bzk(f),c=h[0],i=h[1],d=h[2],g=aI(f),j=-1>>>0,e=c=d)dr(mZ);var +a=b;for(c++;c=d)break;a=d*a+b;if(a>j)dr(mZ)}if(c!=g)dr(mZ);a=i*a;if(d==10&&(a|0)!=a)dr(mZ);return a|0}function +gj(a){return a.slice(1)}function +gU(c){var d=c.length,b=new Array(d+1);b[0]=0;for(var a=0;a0){var c=new Array(b);for(var -a=0;ad1){a-=d1;b*=Math.pow(2,d1);if(a>d1){a-=d1;b*=Math.pow(2,d1)}}if(a<-d1){a+=d1;b*=Math.pow(2,-d1)}b*=Math.pow(2,a);return b}function -FA(a,b){return+(oW(a,b,false)<0)}function -kT(b){b=dT(b);var +a=0;aea){a-=ea;b*=Math.pow(2,ea);if(a>ea){a-=ea;b*=Math.pow(2,ea)}}if(a<-ea){a+=ea;b*=Math.pow(2,-ea)}b*=Math.pow(2,a);return b}function +GC(a,b){return+(o_(a,b,false)<0)}function +k5(b){b=d4(b);var d=b.length/2,c=new Array(d);for(var a=0;a>16;return c}function -sn(b,t,a){var -n=2,o=3,r=5,d=6,h=7,g=8,j=9,m=1,l=2,q=3,s=4,p=5;if(!b.lex_default){b.lex_base=kT(b[m]);b.lex_backtrk=kT(b[l]);b.lex_check=kT(b[p]);b.lex_trans=kT(b[s]);b.lex_default=kT(b[q])}var -e,c=t,k=Fg(a[n]);if(c>=0){a[h]=a[r]=a[d];a[g]=-1}else +sD(b,t,a){var +n=2,o=3,r=5,d=6,h=7,g=8,j=9,m=1,l=2,q=3,s=4,p=5;if(!b.lex_default){b.lex_base=k5(b[m]);b.lex_backtrk=k5(b[l]);b.lex_check=k5(b[p]);b.lex_trans=k5(b[s]);b.lex_default=k5(b[q])}var +e,c=t,k=Gi(a[n]);if(c>=0){a[h]=a[r]=a[d];a[g]=-1}else c=-c-1;for(;;){var f=b.lex_base[c];if(f<0)return-f-1;var i=b.lex_backtrk[c];if(i>=0){a[h]=a[d];a[g]=i}if(a[d]>=a[o])if(a[j]==0)return-c-1;else -e=ev;else{e=k[a[d]];a[d]++}if(b.lex_check[f+e]==c)c=b.lex_trans[f+e];else -c=b.lex_default[c];if(c<0){a[d]=a[h];if(a[g]==-1)dk("lexing: empty token");else +e=eB;else{e=k[a[d]];a[d]++}if(b.lex_check[f+e]==c)c=b.lex_trans[f+e];else +c=b.lex_default[c];if(c<0){a[d]=a[h];if(a[g]==-1)dr("lexing: empty token");else return a[g]}else -if(e==ev)a[j]=0}}function -eY(a,d){if(a<0)kN();var +if(e==eB)a[j]=0}}function +e1(a,d){if(a<0)kZ();var a=a+1|0,b=new Array(a);b[0]=0;for(var c=1;c>>32-b,c)}function g(c,b,d,e,h,f,g){return a(b&d|~b&e,c,b,h,f,g)}function @@ -749,41 +749,41 @@ h(d,b,e,c,h,f,g){return a(b&c|e&~c,d,b,h,f,g)}function i(c,b,d,e,h,f,g){return a(b^d^e,c,b,h,f,g)}function j(c,b,d,e,h,f,g){return a(d^(b|~e),c,b,h,f,g)}function k(f,n){var -e=n;f[e>>2]|=dD<<8*(e&3);for(e=(e&~0x3)+8;(e&0x3F)<60;e+=4)f[(e>>2)-1]=0;f[(e>>2)-1]=n<<3;f[e>>2]=n>>29&0x1FFFFFFF;var +e=n;f[e>>2]|=dN<<8*(e&3);for(e=(e&~0x3)+8;(e&0x3F)<60;e+=4)f[(e>>2)-1]=0;f[(e>>2)-1]=n<<3;f[e>>2]=n>>29&0x1FFFFFFF;var k=[0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476];for(e=0;e>8*m&0xFF;return o}return function(i,g,f){var -e=[],h=FB(i);if(typeof +e=[],h=GD(i);if(typeof h==="string"){var d=h;for(var a=0;a>2]=d.charCodeAt(b)|d.charCodeAt(b+1)<<8|d.charCodeAt(b+2)<<16|d.charCodeAt(b+3)<<24}for(;a>2]|=d.charCodeAt(a+g)<<8*(a&3)}else{var c=h;for(var a=0;a>2]=c[b]|c[b+1]<<8|c[b+2]<<16|c[b+3]<<24}for(;a>2]|=c[a+g]<<8*(a&3)}return buc(k(e,f))}}();function -btZ(c,b,a){return btY(fm(c),b,a)}function -bt0(){return 0}var -eZ=new +b=a+g;e[a>>2]=c[b]|c[b+1]<<8|c[b+2]<<16|c[b+3]<<24}for(;a>2]|=c[a+g]<<8*(a&3)}return bzr(k(e,f))}}();function +bzc(c,b,a){return bzb(fs(c),b,a)}function +bzd(){return 0}var +e2=new Array();function -gR(c){var -a=eZ[c];if(!a.opened)bq("Cannot flush a closed channel");if(!a.buffer||a.buffer==W)return 0;if(a.fd&&bG.fds[a.fd]&&bG.fds[a.fd].output){var -b=bG.fds[a.fd].output;switch(b.length){case -2:b(c,a.buffer);break;default:b(a.buffer)}}a.buffer=W;return 0}function -FJ(e,f){var -b=eZ[e],d=a(f),c=aE(d);b.file.write(b.offset,d,0,c);b.offset+=c;return 0}function -buj(a){var -a=su(a),b=aH;if(b.process&&b.process.stdout&&b.process.stdout.write)b.process.stderr.write(a);else{if(a.charCodeAt(a.length-1)==10)a=a.substr(0,a.length-1);var +gV(c){var +a=e2[c];if(!a.opened)bx("Cannot flush a closed channel");if(!a.buffer||a.buffer==$)return 0;if(a.fd&&bL.fds[a.fd]&&bL.fds[a.fd].output){var +b=bL.fds[a.fd].output;switch(b.length){case +2:b(c,a.buffer);break;default:b(a.buffer)}}a.buffer=$;return 0}function +GL(e,f){var +b=e2[e],d=a(f),c=aI(d);b.file.write(b.offset,d,0,c);b.offset+=c;return 0}function +bzy(a){var +a=sK(a),b=aL;if(b.process&&b.process.stdout&&b.process.stdout.write)b.process.stderr.write(a);else{if(a.charCodeAt(a.length-1)==10)a=a.substr(0,a.length-1);var c=b.console;c&&c.error&&c.error(a)}}function -buk(a){var -a=su(a),b=aH;if(b.process&&b.process.stdout&&b.process.stdout.write)b.process.stdout.write(a);else{if(a.charCodeAt(a.length-1)==10)a=a.substr(0,a.length-1);var +bzz(a){var +a=sK(a),b=aL;if(b.process&&b.process.stdout&&b.process.stdout.write)b.process.stdout.write(a);else{if(a.charCodeAt(a.length-1)==10)a=a.substr(0,a.length-1);var c=b.console;c&&c.log&&c.log(a)}}function -o9(c,e,d,a){if(bG.fds===undefined)bG.fds=new +pl(c,e,d,a){if(bL.fds===undefined)bL.fds=new Array();a=a?a:{};var -b={};b.file=d;b.offset=a.append?d.length():0;b.flags=a;b.output=e;bG.fds[c]=b;if(!bG.fd_last_idx||c>bG.fd_last_idx)bG.fd_last_idx=c;return c}function -buG(c,b,g){var +b={};b.file=d;b.offset=a.append?d.length():0;b.flags=a;b.output=e;bL.fds[c]=b;if(!bL.fd_last_idx||c>bL.fd_last_idx)bL.fd_last_idx=c;return c}function +bzV(c,b,g){var a={};while(b){switch(b[1]){case 0:a.rdonly=1;break;case 1:a.wronly=1;break;case @@ -793,93 +793,93 @@ a={};while(b){switch(b[1]){case 5:a.excl=1;break;case 6:a.binary=1;break;case 7:a.text=1;break;case -8:a.nonblock=1;break}b=b[2]}if(a.rdonly&&a.wronly)bq(dT(c)+vC);if(a.text&&a.binary)bq(dT(c)+BW);var -d=FU(c),e=d.device.open(d.rest,a),f=bG.fd_last_idx?bG.fd_last_idx:0;return o9(f+1,FJ,e,a)}o9(0,FJ,new -co(bT(0)));o9(1,buk,new -co(bT(0)));o9(2,buj,new -co(bT(0)));function -bt1(a){var -c=bG.fds[a];if(c.flags.wronly)bq(xm+a+" is writeonly");var -d=null;if(a==0&&kX()){var -e=require("fs");d=function(){return aO(e.readFileSync(0,uD))}}var -b={file:c.file,offset:c.offset,fd:a,opened:true,out:false,refill:d};eZ[b.fd]=b;return b.fd}function -FC(c){var -b=bG.fds[c];if(b.flags.rdonly)bq(xm+c+" is readonly");var -a={file:b.file,offset:b.offset,fd:c,opened:true,out:true,buffer:W};eZ[a.fd]=a;return a.fd}function -bt2(){var +8:a.nonblock=1;break}b=b[2]}if(a.rdonly&&a.wronly)bx(d4(c)+wa);if(a.text&&a.binary)bx(d4(c)+CE);var +d=GW(c),e=d.device.open(d.rest,a),f=bL.fd_last_idx?bL.fd_last_idx:0;return pl(f+1,GL,e,a)}pl(0,GL,new +ct(bZ(0)));pl(1,bzz,new +ct(bZ(0)));pl(2,bzy,new +ct(bZ(0)));function +bze(a){var +c=bL.fds[a];if(c.flags.wronly)bx(xV+a+" is writeonly");var +d=null;if(a==0&&k9()){var +e=require("fs");d=function(){return aS(e.readFileSync(0,u3))}}var +b={file:c.file,offset:c.offset,fd:a,opened:true,out:false,refill:d};e2[b.fd]=b;return b.fd}function +GE(c){var +b=bL.fds[c];if(b.flags.rdonly)bx(xV+c+" is readonly");var +a={file:b.file,offset:b.offset,fd:c,opened:true,out:true,buffer:$};e2[a.fd]=a;return a.fd}function +bzf(){var b=0;for(var -a=0;a>>0)return a[0];else -if(kS(a))return j3;else -if(o3(a))return j3;else +if(k4(a))return kb;else +if(pf(a))return kb;else if(a instanceof Function||typeof a=="function")return 247;else -if(a&&a.caml_custom)return mO;else -return iA}function -dU(b,c,a){if(a&&aH.toplevelReloc)b=aH.toplevelReloc(a);bG[b+1]=c;if(a)bG[a]=c}function -sr(a,b){FE[dT(a)]=b;return 0}function -bt$(a){a[2]=FG++;return a}function -btt(a,b){if(a===b)return 1;a.t&6&&gP(a);b.t&6&&gP(b);return a.c==b.c?1:0}function -o7(a,b){return btt(a,b)}function -bub(){bL(rI)}function -bu(b,a){if(a>>>0>=aE(b))bub();return dV(b,a)}function -L(a,b){return 1-o7(a,b)}function -bud(){return 0x7FFFFFFF/4|0}function -bt9(){kW(bG.Not_found)}function -FK(c){var -a=aH,b=eb(c);if(a.process&&a.process.env&&a.process.env[b]!=undefined)return aO(a.process.env[b]);if(aH.jsoo_static_env&&aH.jsoo_static_env[b])return aO(aH.jsoo_static_env[b]);bt9()}function -bue(){if(aH.crypto)if(typeof -aH.crypto.getRandomValues==="function"){var -a=new(aH.Uint32Array)(1);aH.crypto.getRandomValues(a);return[0,a[0]]}else -if(aH.crypto.randomBytes==="function"){var -b=aH.crypto.randomBytes(4),a=new(aH.Uint32Array)(b);return[0,a[0]]}var +if(a&&a.caml_custom)return m2;else +return iD}function +d5(b,c,a){if(a&&aL.toplevelReloc)b=aL.toplevelReloc(a);bL[b+1]=c;if(a)bL[a]=c}function +sH(a,b){GG[d4(a)]=b;return 0}function +bzo(a){a[2]=GI++;return a}function +byI(a,b){if(a===b)return 1;a.t&6&&gT(a);b.t&6&&gT(b);return a.c==b.c?1:0}function +pj(a,b){return byI(a,b)}function +bzq(){bR(rX)}function +bA(b,a){if(a>>>0>=aI(b))bzq();return d6(b,a)}function +M(a,b){return 1-pj(a,b)}function +bzs(){return 0x7FFFFFFF/4|0}function +bzm(){k8(bL.Not_found)}function +GM(c){var +a=aL,b=ek(c);if(a.process&&a.process.env&&a.process.env[b]!=undefined)return aS(a.process.env[b]);if(aL.jsoo_static_env&&aL.jsoo_static_env[b])return aS(aL.jsoo_static_env[b]);bzm()}function +bzt(){if(aL.crypto)if(typeof +aL.crypto.getRandomValues==="function"){var +a=new(aL.Uint32Array)(1);aL.crypto.getRandomValues(a);return[0,a[0]]}else +if(aL.crypto.randomBytes==="function"){var +b=aL.crypto.randomBytes(4),a=new(aL.Uint32Array)(b);return[0,a[0]]}var c=new -Date().getTime(),d=c^CH*Math.random();return[0,d]}function -st(a){var +Date().getTime(),d=c^Dt*Math.random();return[0,d]}function +sJ(a){var b=1;while(a&&a.joo_tramp){a=a.joo_tramp.apply(null,a.joo_args);b++}return a}function -cr(b,a){return{joo_tramp:b,joo_args:a}}function -FI(a){return a}function +cw(b,a){return{joo_tramp:b,joo_args:a}}function +GK(a){return a}function o(a){if(a instanceof -Array)return a;if(aH.RangeError&&a +Array)return a;if(aL.RangeError&&a instanceof -aH.RangeError&&a.message&&a.message.match(/maximum call stack/i))return FI(bG.Stack_overflow);if(aH.InternalError&&a +aL.RangeError&&a.message&&a.message.match(/maximum call stack/i))return GK(bL.Stack_overflow);if(aL.InternalError&&a instanceof -aH.InternalError&&a.message&&a.message.match(/too much recursion/i))return FI(bG.Stack_overflow);if(a +aL.InternalError&&a.message&&a.message.match(/too much recursion/i))return GK(bL.Stack_overflow);if(a instanceof -aH.Error&&e0(rq))return[0,e0(rq),a];return[0,bG.Failure,aO(String(a))]}var -ap=function(z){"use strict";var -f=gE,aa=7,s=9007199254740992,H=q(s),M="0123456789abcdefghijklmnopqrstuvwxyz",g=bui.BigInt,F=typeof +aL.Error&&e3(rD))return[0,e3(rD),a];return[0,bL.Failure,aS(String(a))]}var +as=function(y){"use strict";var +f=gN,aa=7,s=9007199254740992,H=q(s),M="0123456789abcdefghijklmnopqrstuvwxyz",g=bzx.BigInt,F=typeof g==="function";function d(a,b,c,f){if(typeof a==="undefined")return d[0];if(typeof b!=="undefined")return+b===10&&!c?e(a):ae(a,b,c,f);return e(a)}function -a(b,a){this.value=b;this.sign=a;this.isSmall=false;this.caml_custom=mF}a.prototype=Object.create(d.prototype);function -b(a){this.value=a;this.sign=a<0;this.isSmall=true;this.caml_custom=mF}b.prototype=Object.create(d.prototype);function -c(a){this.value=a;this.caml_custom=mF}c.prototype=Object.create(d.prototype);function +a(b,a){this.value=b;this.sign=a;this.isSmall=false;this.caml_custom=mT}a.prototype=Object.create(d.prototype);function +b(a){this.value=a;this.sign=a<0;this.isSmall=true;this.caml_custom=mT}b.prototype=Object.create(d.prototype);function +c(a){this.value=a;this.caml_custom=mT}c.prototype=Object.create(d.prototype);function l(a){return-s=0)c=x(e,f);else{c=x(f,e);d=!d}c=o(c);if(typeof +c;if(o(e,f)>=0)c=w(e,f);else{c=w(f,e);d=!d}c=n(c);if(typeof c==="number"){if(d)c=-c;return new b(c)}return new a(c,d)}function E(h,l,k){var j=h.length,c=new -Array(j),i=-l,g=f,e,d;for(e=0;e0){e[b++]=a%c;a=Math.floor(a/c)}return e}function -X(c,b){var +W(c,b){var a=[];while(b-->0)a.push(0);return a.concat(c)}function C(b,c){var a=Math.max(b.length,c.length);if(a<=30)return L(b,c);a=Math.ceil(a/2);var -f=b.slice(a),d=b.slice(0,a),i=c.slice(a),h=c.slice(0,a),e=C(d,h),g=C(f,i),k=C(t(d,f),t(h,i)),j=t(t(e,X(x(x(k,e),g),a)),X(g,2*a));m(j);return j}function -aj(a,b){return-(wE*a)-wE*b+0.000015*a*b>0}a.prototype.multiply=function(j){var +f=b.slice(a),d=b.slice(0,a),i=c.slice(a),h=c.slice(0,a),e=C(d,h),g=C(f,i),k=C(t(d,f),t(h,i)),j=t(t(e,W(w(w(k,e),g),a)),W(g,2*a));m(j);return j}function +aj(a,b){return-(w9*a)-w9*b+0.000015*a*b>0}a.prototype.multiply=function(j){var h=e(j),c=this.value,b=h.value,i=this.sign!==h.sign,g;if(h.isSmall){if(b===0)return d[0];if(b===1)return this;if(b===-1)return this.negate();g=Math.abs(b);if(g=0;d--){j=g-1;if(b[d+h]!==l)j=Math.floor((b[d+h]*g+b[d+h-1])/l);c=0;e=0;m=i.length;for(a=0;a=0;d--){j=g-1;if(b[d+h]!==l)j=Math.floor((b[d+h]*g+b[d+h-1])/l);c=0;e=0;m=i.length;for(a=0;ah)d=(d+1)*i;c=Math.ceil(d/n);do{j=u(b,c);if(p(j,a)<=0)break;c--}while(c);e.push(c);a=x(a,j)}e.reverse();return[o(e),o(a)]}function +l=k.length,h=b.length,e=[],a=[],i=f,c,g,d,p,j;while(l){a.unshift(k[--l]);m(a);if(o(a,b)<0){e.push(0);continue}g=a.length;d=a[g-1]*i+a[g-2];p=b[h-1]*i+b[h-2];if(g>h)d=(d+1)*i;c=Math.ceil(d/p);do{j=u(b,c);if(o(j,a)<=0)break;c--}while(c);e.push(c);a=w(a,j)}e.reverse();return[n(e),n(a)]}function O(i,e){var g=i.length,h=B(g),j=f,a,d,b,c;b=0;for(a=g-1;a>=0;--a){c=b*j+i[a];d=r(c/e);b=c-d*e;h[a]=d|0}return[h,b|0]}function i(h,w){var @@ -976,14 +976,14 @@ l=h.value,i=j.value,g;if(i===0)throw new Error("Cannot divide by zero");if(h.isSmall){if(j.isSmall)return[new b(r(l/i)),new b(l%i)];return[d[0],h]}if(j.isSmall){if(i===1)return[h,d[0]];if(i==-1)return[h.negate(),d[0]];var -s=Math.abs(i);if(sc.length?1:-1;for(var +o(b,c){if(b.length!==c.length)return b.length>c.length?1:-1;for(var a=b.length-1;a>=0;a--)if(b[a]!==c[a])return b[a]>c[a]?1:-1;return 0}a.prototype.compareAbs=function(d){var -a=e(d),b=this.value,c=a.value;if(a.isSmall)return 1;return p(b,c)};b.prototype.compareAbs=function(d){var +a=e(d),b=this.value,c=a.value;if(a.isSmall)return 1;return o(b,c)};b.prototype.compareAbs=function(d){var c=e(d),b=Math.abs(this.value),a=c.value;if(c.isSmall){a=Math.abs(a);return b===a?0:b>a?1:-1}return-1};c.prototype.compareAbs=function(c){var a=this.value,b=e(c).value;a=a>=0?a:-a;b=b>=0?b:-b;return a===b?0:a>b?1:-1};a.prototype.compare=function(b){if(b===Infinity)return-1;if(b===-Infinity)return 1;var -a=e(b),c=this.value,d=a.value;if(this.sign!==a.sign)return a.sign?1:-1;if(a.isSmall)return this.sign?-1:1;return p(c,d)*(this.sign?-1:1)};a.prototype.compareTo=a.prototype.compare;b.prototype.compare=function(c){if(c===Infinity)return-1;if(c===-Infinity)return 1;var +a=e(b),c=this.value,d=a.value;if(this.sign!==a.sign)return a.sign?1:-1;if(a.isSmall)return this.sign?-1:1;return o(c,d)*(this.sign?-1:1)};a.prototype.compareTo=a.prototype.compare;b.prototype.compare=function(c){if(c===Infinity)return-1;if(c===-Infinity)return 1;var b=e(c),a=this.value,d=b.value;if(b.isSmall)return a==d?0:a>d?1:-1;if(a<0!==b.sign)return a<0?-1:1;return a<0?1:-1};b.prototype.compareTo=b.prototype.compare;c.prototype.compare=function(a){if(a===Infinity)return-1;if(a===-Infinity)return 1;var b=this.value,c=e(a).value;return b===c?0:b>c?1:-1};c.prototype.compareTo=c.prototype.compare;a.prototype.equals=function(a){return this.compare(a)===0};c.prototype.eq=c.prototype.equals=b.prototype.eq=b.prototype.equals=a.prototype.eq=a.prototype.equals;a.prototype.notEquals=function(a){return this.compare(a)!==0};c.prototype.neq=c.prototype.notEquals=b.prototype.neq=b.prototype.notEquals=a.prototype.neq=a.prototype.notEquals;a.prototype.greater=function(a){return this.compare(a)>0};c.prototype.gt=c.prototype.greater=b.prototype.gt=b.prototype.greater=a.prototype.gt=a.prototype.greater;a.prototype.lesser=function(a){return this.compare(a)<0};c.prototype.lt=c.prototype.lesser=b.prototype.lt=b.prototype.lesser=a.prototype.lt=a.prototype.lesser;a.prototype.greaterOrEquals=function(a){return this.compare(a)>=0};c.prototype.geq=c.prototype.greaterOrEquals=b.prototype.geq=b.prototype.greaterOrEquals=a.prototype.geq=a.prototype.greaterOrEquals;a.prototype.lesserOrEquals=function(a){return this.compare(a)<=0};c.prototype.leq=c.prototype.lesserOrEquals=b.prototype.leq=b.prototype.lesserOrEquals=a.prototype.leq=a.prototype.lesserOrEquals;a.prototype.isEven=function(){return(this.value[0]&1)===0};b.prototype.isEven=function(){return(this.value&1)===0};c.prototype.isEven=function(){return(this.value&g(1))===g(0)};a.prototype.isOdd=function(){return(this.value[0]&1)===1};b.prototype.isOdd=function(){return(this.value&1)===1};c.prototype.isOdd=function(){return(this.value&g(1))===g(1)};a.prototype.isPositive=function(){return!this.sign};b.prototype.isPositive=function(){return this.value>0};c.prototype.isPositive=b.prototype.isPositive;a.prototype.isNegative=function(){return this.sign};b.prototype.isNegative=function(){return this.value<0};c.prototype.isNegative=b.prototype.isNegative;a.prototype.isUnit=function(){return false};b.prototype.isUnit=function(){return Math.abs(this.value)===1};c.prototype.isUnit=function(){return this.abs().value===g(1)};a.prototype.isZero=function(){return false};b.prototype.isZero=function(){return this.value===0};c.prototype.isZero=function(){return this.value===g(0)};a.prototype.isDivisibleBy=function(b){var a=e(b);if(a.isZero())return false;if(a.isUnit())return true;if(a.compareAbs(2)===0)return this.isEven();return this.mod(a).isZero()};c.prototype.isDivisibleBy=b.prototype.isDivisibleBy=a.prototype.isDivisibleBy;function R(b){var a=b.abs();if(a.isUnit())return false;if(a.equals(2)||a.equals(3)||a.equals(5))return true;if(a.isEven()||a.isDivisibleBy(3)||a.isDivisibleBy(5))return false;if(a.lesser(49))return true}function J(d,e){var -g=d.prev(),c=g,h=0,f,i,b,a;while(c.isEven())c=c.divide(2),h++;next:for(b=0;b=w){b=b.multiply(j);a-=w-1}return b.multiply(h[a])};c.prototype.shiftLeft=b.prototype.shiftLeft=a.prototype.shiftLeft;a.prototype.shiftRight=function(d){var -a,b=e(d).toJSNumber();if(!Y(b))throw new -Error(String(b)+vQ);if(b<0)return this.shiftLeft(-b);var -c=this;while(b>=w){if(c.isZero()||c.isNegative()&&c.isUnit())return c;a=i(c,j);c=a[1].isNegative()?a[0].prev():a[0];b-=w-1}a=i(c,h[b]);return a[1].isNegative()?a[0].prev():a[0]};c.prototype.shiftRight=b.prototype.shiftRight=a.prototype.shiftRight;function +v=h.length,j=h[v-1];function +X(a){return Math.abs(a)<=f}a.prototype.shiftLeft=function(c){var +a=e(c).toJSNumber();if(!X(a))throw new +Error(String(a)+wr);if(a<0)return this.shiftRight(-a);var +b=this;if(b.isZero())return b;while(a>=v){b=b.multiply(j);a-=v-1}return b.multiply(h[a])};c.prototype.shiftLeft=b.prototype.shiftLeft=a.prototype.shiftLeft;a.prototype.shiftRight=function(d){var +a,b=e(d).toJSNumber();if(!X(b))throw new +Error(String(b)+wr);if(b<0)return this.shiftLeft(-b);var +c=this;while(b>=v){if(c.isZero()||c.isNegative()&&c.isUnit())return c;a=i(c,j);c=a[1].isNegative()?a[0].prev():a[0];b-=v-1}a=i(c,h[b]);return a[1].isNegative()?a[0].prev():a[0]};c.prototype.shiftRight=b.prototype.shiftRight=a.prototype.shiftRight;function I(h,a,q){a=e(a);var m=h.isNegative(),p=a.isNegative(),l=m?h.not():h,o=p?a.not():a,b=0,c=0,k=null,n=null,f=[];while(!l.isZero()||!o.isZero()){k=i(l,j);b=k[1].toJSNumber();if(m)b=j-1-b;n=i(o,j);c=n[1].toJSNumber();if(p)c=j-1-c;l=k[0];o=n[0];f.push(q(b,c))}var -g=q(m?1:0,p?1:0)!==0?ap(-1):ap(0);for(var -d=f.length-1;d>=0;d-=1)g=g.multiply(j).add(ap(f[d]));return g}a.prototype.not=function(){return this.negate().prev()};c.prototype.not=b.prototype.not=a.prototype.not;a.prototype.and=function(a){return I(this,a,function(a,b){return a&b})};c.prototype.and=b.prototype.and=a.prototype.and;a.prototype.or=function(a){return I(this,a,function(a,b){return a|b})};c.prototype.or=b.prototype.or=a.prototype.or;a.prototype.xor=function(a){return I(this,a,function(a,b){return a^b})};c.prototype.xor=b.prototype.xor=a.prototype.xor;var -G=1<<30,$=(f&-f)*(f&-f)|G;function +g=q(m?1:0,p?1:0)!==0?as(-1):as(0);for(var +d=f.length-1;d>=0;d-=1)g=g.multiply(j).add(as(f[d]));return g}a.prototype.not=function(){return this.negate().prev()};c.prototype.not=b.prototype.not=a.prototype.not;a.prototype.and=function(a){return I(this,a,function(a,b){return a&b})};c.prototype.and=b.prototype.and=a.prototype.and;a.prototype.or=function(a){return I(this,a,function(a,b){return a|b})};c.prototype.or=b.prototype.or=a.prototype.or;a.prototype.xor=function(a){return I(this,a,function(a,b){return a^b})};c.prototype.xor=b.prototype.xor=a.prototype.xor;var +G=1<<30,_=(f&-f)*(f&-f)|G;function D(c){var a=c.value,b=typeof a==="number"?a|G:typeof -a==="bigint"?a|g(G):a[0]+a[1]*f|$;return b&-b}function +a==="bigint"?a|g(G):a[0]+a[1]*f|_;return b&-b}function Q(b,a){if(a.compareTo(b)<=0){var -f=Q(b,a.square(a)),d=f.p,c=f.e,e=d.multiply(a);return e.compareTo(b)<=0?{p:e,e:c*2+1}:{p:d,e:c*2}}return{p:ap(1),e:0}}a.prototype.bitLength=function(){var -a=this;if(a.compareTo(ap(0))<0)a=a.negate().subtract(ap(1));if(a.compareTo(ap(0))===0)return ap(0);return ap(Q(a,ap(2)).e).add(ap(1))};c.prototype.bitLength=b.prototype.bitLength=a.prototype.bitLength;function +f=Q(b,a.square(a)),d=f.p,c=f.e,e=d.multiply(a);return e.compareTo(b)<=0?{p:e,e:c*2+1}:{p:d,e:c*2}}return{p:as(1),e:0}}a.prototype.bitLength=function(){var +a=this;if(a.compareTo(as(0))<0)a=a.negate().subtract(as(1));if(a.compareTo(as(0))===0)return as(0);return as(Q(a,as(2)).e).add(as(1))};c.prototype.bitLength=b.prototype.bitLength=a.prototype.bitLength;function S(a,b){a=e(a);b=e(b);return a.greater(b)?a:b}function K(a,b){a=e(a);b=e(b);return a.lesser(b)?a:b}function P(a,b){a=e(a).abs();b=e(b).abs();if(a.equals(b))return a;if(a.isZero())return b;if(b.isZero())return a;var @@ -1067,54 +1067,54 @@ c=d[1],f,g;while(a.isEven()&&b.isEven()){f=K(D(a),D(b));a=a.divide(f);b=b.divide ad(a,b){a=e(a).abs();b=e(b).abs();return a.divide(P(a,b)).multiply(b)}function ag(a,b){a=e(a);b=e(b);var g=K(a,b),n=S(a,b),h=n.subtract(g).add(1);if(h.isSmall)return g.add(Math.floor(Math.random()*h));var -j=y(h,f).value,l=[],k=true;for(var +j=x(h,f).value,l=[],k=true;for(var c=0;c=i){if(c===v&&i===1)continue;throw new -Error(c+" is not a valid digit in base "+g+en)}}g=e(g);var -h=[],j=b[0]===cF;for(a=j?1:0;a=i){if(c===z&&i===1)continue;throw new +Error(c+" is not a valid digit in base "+g+ev)}}g=e(g);var +h=[],j=b[0]===cH;for(a=j?1:0;a=0;a--){b=b.add(e[a].times(c));c=c.times(f)}return g?b.negate():b}function -ah(b,a){a=a||M;if(b=0){e=c.divmod(b);c=e.quotient;var d=e.remainder;if(d.isNegative()){d=b.minus(d).abs();c=c.next()}g.push(d.toJSNumber())}g.push(c.toJSNumber());return{value:g.reverse(),isNegative:f}}function -_(d,c,b){var -a=y(d,c);return(a.isNegative?cF:W)+a.value.map(function(a){return ah(a,b)}).join(W)}a.prototype.toArray=function(a){return y(this,a)};b.prototype.toArray=function(a){return y(this,a)};c.prototype.toArray=function(a){return y(this,a)};a.prototype.toString=function(a,f){if(a===z)a=10;if(a!==10)return _(this,a,f);var +Z(d,c,b){var +a=x(d,c);return(a.isNegative?cH:$)+a.value.map(function(a){return ah(a,b)}).join($)}a.prototype.toArray=function(a){return x(this,a)};b.prototype.toArray=function(a){return x(this,a)};c.prototype.toArray=function(a){return x(this,a)};a.prototype.toString=function(a,f){if(a===y)a=10;if(a!==10)return Z(this,a,f);var d=this.value,c=d.length,e=String(d[--c]),h="0000000",b;while(--c>=0){b=String(d[c]);e+=h.slice(b.length)+b}var -g=this.sign?cF:W;return g+e};b.prototype.toString=function(a,b){if(a===z)a=10;if(a!=10)return _(this,a,b);return String(this.value)};c.prototype.toString=b.prototype.toString;c.prototype.toJSON=a.prototype.toJSON=b.prototype.toJSON=function(){return this.toString()};a.prototype.valueOf=function(){return parseInt(this.toString(),10)};a.prototype.toJSNumber=a.prototype.valueOf;b.prototype.valueOf=function(){return this.value};b.prototype.toJSNumber=b.prototype.valueOf;c.prototype.valueOf=c.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};function +g=this.sign?cH:$;return g+e};b.prototype.toString=function(a,b){if(a===y)a=10;if(a!=10)return Z(this,a,b);return String(this.value)};c.prototype.toString=b.prototype.toString;c.prototype.toJSON=a.prototype.toJSON=b.prototype.toJSON=function(){return this.toString()};a.prototype.valueOf=function(){return parseInt(this.toString(),10)};a.prototype.toJSNumber=a.prototype.valueOf;b.prototype.valueOf=function(){return this.value};b.prototype.toJSNumber=b.prototype.valueOf;c.prototype.valueOf=c.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};function V(d){if(l(+d)){var -o=+d;if(o===r(o))return F?new -c(g(o)):new -b(o);throw new -Error(os+d)}var -s=d[0]===cF;if(s)d=d.slice(1);var +n=+d;if(n===r(n))return F?new +c(g(n)):new +b(n);throw new +Error(oG+d)}var +s=d[0]===cH;if(s)d=d.slice(1);var h=d.split(/e/i);if(h.length>2)throw new -Error(os+h.join(oL));if(h.length===2){var -e=h[1];if(e[0]===ff)e=e.slice(1);e=+e;if(e!==r(e)||!l(e))throw new -Error(os+e+" is not a valid exponent.");var -f=h[0],i=f.indexOf(en);if(i>=0){e-=f.length-i-1;f=f.slice(0,i)+f.slice(i+1)}if(e<0)throw new +Error(oG+h.join(o0));if(h.length===2){var +e=h[1];if(e[0]===fl)e=e.slice(1);e=+e;if(e!==r(e)||!l(e))throw new +Error(oG+e+" is not a valid exponent.");var +f=h[0],i=f.indexOf(ev);if(i>=0){e-=f.length-i-1;f=f.slice(0,i)+f.slice(i+1)}if(e<0)throw new Error("Cannot include negative exponent part for integers");f+=new -Array(e+1).join(n);d=f}var +Array(e+1).join(p);d=f}var t=/^([0-9][0-9]*)$/.test(d);if(!t)throw new -Error(os+d);if(F)return new -c(g(s?cF+d:d));var -q=[],j=d.length,p=aa,k=j-p;while(j>0){q.push(+d.slice(k,j));k-=p;if(k<0)k=0;j-=p}m(q);return new +Error(oG+d);if(F)return new +c(g(s?cH+d:d));var +q=[],j=d.length,o=aa,k=j-o;while(j>0){q.push(+d.slice(k,j));k-=o;if(k<0)k=0;j-=o}m(q);return new a(q,s)}function af(a){if(F)return new c(g(a));if(l(a)){if(a!==r(a))throw new @@ -1125,295 +1125,295 @@ a==="number")return af(a);if(typeof a==="string")return V(a);if(typeof a==="bigint")return new c(a);return a}for(var -k=0;k0)d[-k]=e(-k)}d.one=d[1];d.zero=d[0];d.minusOne=d[-1];d.max=S;d.min=K;d.gcd=P;d.lcm=ad;d.isInstance=function(d){return d +k=0;k0)d[-k]=e(-k)}d.one=d[1];d.zero=d[0];d.minusOne=d[-1];d.max=S;d.min=K;d.gcd=P;d.lcm=ad;d.isInstance=function(d){return d instanceof a||d instanceof b||d instanceof c};d.randBetween=ag;d.fromArray=function(b,a,c){return U(b.map(e),e(a||10),c)};return d}();function -cJ(a){var -b=a.toJSNumber()|0;if(a.equals(ap(b)))return b;return a}function -FP(a){return cJ(ap(a).abs())}function -FQ(a,b){return cJ(ap(a).add(ap(b)))}function -ec(a,b){return ap(a).compare(ap(b))}function -jw(b,a){a=ap(a);if(a.equals(ap(0)))jt();return cJ(ap(b).divide(ap(a)))}function -buB(b,a){a=ap(a);if(a.equals(ap(0)))jt();return cJ(ap(b).mod(a))}function -sv(a,b){return[0,jw(a,b),buB(a,b)]}function -FR(a,b){return jw(a,b)}function -bup(a,b){return ap(a).equals(ap(b))?1:0}function -c6(a){return ap(a).compare(ap.zero)}function -sx(a,b){return cJ(ap(a).subtract(ap(b)))}function -buq(a,b){var -c=c6(a),d=c6(b);if(c*d<0)if(!ap(a).mod(ap(b)).equals(ap(0)))return sx(jw(a,b),ap(1));return jw(a,b)}function -bus(a,b){return cJ(ap.gcd(ap(a),ap(b)).abs())}function -bug(c,e,g){e=ap(e);var +cL(a){var +b=a.toJSNumber()|0;if(a.equals(as(b)))return b;return a}function +GR(a){return cL(as(a).abs())}function +GS(a,b){return cL(as(a).add(as(b)))}function +el(a,b){return as(a).compare(as(b))}function +jB(b,a){a=as(a);if(a.equals(as(0)))jy();return cL(as(b).divide(as(a)))}function +bzQ(b,a){a=as(a);if(a.equals(as(0)))jy();return cL(as(b).mod(a))}function +sL(a,b){return[0,jB(a,b),bzQ(a,b)]}function +GT(a,b){return jB(a,b)}function +bzE(a,b){return as(a).equals(as(b))?1:0}function +c7(a){return as(a).compare(as.zero)}function +sN(a,b){return cL(as(a).subtract(as(b)))}function +bzF(a,b){var +c=c7(a),d=c7(b);if(c*d<0)if(!as(a).mod(as(b)).equals(as(0)))return sN(jB(a,b),as(1));return jB(a,b)}function +bzH(a,b){return cL(as.gcd(as(a),as(b)).abs())}function +bzv(c,e,g){e=as(e);var a=e.toArray(Math.pow(2,32));c.write(8,a.isNegative?1:0);var f=a.value.length,d=f*4;c.write(32,d);for(var -b=f-1;b>=0;b--){c.write(8,a.value[b]>>>0&ds);c.write(8,a.value[b]>>>8&ds);c.write(8,a.value[b]>>>16&ds);c.write(8,a.value[b]>>>24&ds)}g[0]=4*(1+((d+3)/4|0));g[1]=8*(1+((d+7)/8|0))}function -buh(b,g){var +b=f-1;b>=0;b--){c.write(8,a.value[b]>>>0&dx);c.write(8,a.value[b]>>>8&dx);c.write(8,a.value[b]>>>16&dx);c.write(8,a.value[b]>>>24&dx)}g[0]=4*(1+((d+3)/4|0));g[1]=8*(1+((d+7)/8|0))}function +bzw(b,g){var e;switch(b.read8u()){case 1:e=true;break;case -0:e=false;break;default:dk("input_value: z (malformed input)")}var -f=b.read32u(),c=ap(0);for(var +0:e=false;break;default:dr("input_value: z (malformed input)")}var +f=b.read32u(),c=as(0);for(var d=0;d>>0);c=a.shiftLeft(d*32).add(c)}if(e)c=c.negate();g[0]=f+4;return cJ(c)}function -but(d){var -b=ap(d).toArray(Math.pow(2,32)),a=0;for(var -c=0;c>>0);c=a.shiftLeft(d*32).add(c)}if(e)c=c.negate();g[0]=f+4;return cL(c)}function +bzI(d){var +b=as(d).toArray(Math.pow(2,32)),a=0;for(var +c=0;c=48&&a<=57)return a-48;if(a>=97&&a<=B3)return a-97+10;if(a>=65&&a<=70)return a-65+10}var -d=0;if(a[d]==ff)a=a.substring(1);else -if(a[d]==cF)d++;if(a[d]==r0)bL(zx);a=a.replace(/_/g,W);if(a==cF||a==W)a=n;for(;d=c)bL(zx)}return cJ(ap(a,c))}function -gU(d,a,b,c){a=dT(a);if(b!=0||c!=a.length){if(a.length-b=0?1:0}function -o_(a){a=ap(a);if(!bur(a))kW(e0(l5));var -b=ap(CH),d=a.and(b).toJSNumber(),c=a.shiftRight(32).and(b).toJSNumber(),e=Fy(d,c);return e}function -btW(a){switch(a[2]){case-8:case-11:case-12:return 1;default:return 0}}function -btA(b){var -a=W;if(b[0]==0){a+=b[1][1];if(b.length==3&&b[2][0]==0&&btW(b[1]))var +if(e==Fx||e=="X")c=16;else +if(e==xI||e=="B")c=2;if(c!=10){a=a.substring(b+1);if(g==-1)a=cH+a}}}}function +h(a){if(a>=48&&a<=57)return a-48;if(a>=97&&a<=CL)return a-97+10;if(a>=65&&a<=70)return a-65+10}var +d=0;if(a[d]==fl)a=a.substring(1);else +if(a[d]==cH)d++;if(a[d]==sc)bR(z6);a=a.replace(/_/g,$);if(a==cH||a==$)a=p;for(;d=c)bR(z6)}return cL(as(a,c))}function +gY(d,a,b,c){a=d4(a);if(b!=0||c!=a.length){if(a.length-b=0?1:0}function +pm(a){a=as(a);if(!bzG(a))k8(e3(mk));var +b=as(Dt),d=a.and(b).toJSNumber(),c=a.shiftRight(32).and(b).toJSNumber(),e=GA(d,c);return e}function +by$(a){switch(a[2]){case-8:case-11:case-12:return 1;default:return 0}}function +byP(b){var +a=$;if(b[0]==0){a+=b[1][1];if(b.length==3&&b[2][0]==0&&by$(b[1]))var e=b[2],f=1;else var f=2,e=b;a+="(";for(var -d=f;df)a+=gx;var +d=f;df)a+=gG;var c=e[d];if(typeof c=="number")a+=c.toString();else if(c instanceof -eW)a+=mg+c.toString()+mg;else +eZ)a+=mu+c.toString()+mu;else if(typeof -c=="string")a+=mg+c.toString()+mg;else -a+=r0}a+=")"}else -if(b[0]==bc)a+=b[1];return a}function -Ft(a){if(a +c=="string")a+=mu+c.toString()+mu;else +a+=sc}a+=")"}else +if(b[0]==bm)a+=b[1];return a}function +Gv(a){if(a instanceof -Array&&(a[0]==0||a[0]==bc)){var -c=e0(Dk);if(c)c(a,false);else{var -d=btA(a),b=e0(uC);if(b)b(0);aH.console.error(r3+d+u$)}}else +Array&&(a[0]==0||a[0]==bm)){var +c=e3(Ec);if(c)c(a,false);else{var +d=byP(a),b=e3(u2);if(b)b(0);aL.console.error(sf+d+vy)}}else throw a}function -bua(){var -a=aH;if(a.process&&a.process.on)a.process.on("uncaughtException",function(b,c){Ft(b);a.process.exit(2)});else -if(a.addEventListener)a.addEventListener("error",function(a){if(a.error)Ft(a.error)})}bua();function -q(a,b){return a.length==1?a(b):dz(a,[b])}function -al(a,b,c){return a.length==2?a(b,c):dz(a,[b,c])}function -cx(a,b,c,d){return a.length==3?a(b,c,d):dz(a,[b,c,d])}function -ux(a,b,c,d,e){return a.length==4?a(b,c,d,e):dz(a,[b,c,d,e])}function -qj(a,b,c,d,e,f){return a.length==5?a(b,c,d,e,f):dz(a,[b,c,d,e,f])}function -btn(a,b,c,d,e,f,g){return a.length==6?a(b,c,d,e,f,g):dz(a,[b,c,d,e,f,g])}function -btm(a,b,c,d,e,f,g,h){return a.length==7?a(b,c,d,e,f,g,h):dz(a,[b,c,d,e,f,g,h])}btC();var -pa=[bc,a(CL),-1],sD=[bc,a(Dl),-2],kY=[bc,a(qT),-3],sz=[bc,a(yT),-4],pb=[bc,a(wt),-6],cA=[bc,a(Ed),-7],sB=[bc,a(vj),-8],sC=[bc,a(zk),-9],bn=[bc,a(EM),-11],sE=[bc,a(C9),CX],btk=[4,0,0,0,[12,45,[4,0,0,0,0]]],pr=[0,[11,a('File "'),[2,0,[11,a('", line '),[4,0,0,0,[11,a(yu),[4,0,0,0,[12,45,[4,0,0,0,[11,a(": "),[2,0,0]]]]]]]]]],a('File "%s", line %d, characters %d-%d: %s')],btl=[4,0,0,0,[12,46,0]],uw=[0,a("eventsManager"),a("computeAllocationsFamiliales"),a("computeAidesAuLogement")];dU(11,sE,C9);dU(10,bn,EM);dU(9,[bc,a(Bp),-10],Bp);dU(8,sC,zk);dU(7,sB,vj);dU(6,cA,Ed);dU(5,pb,wt);dU(4,[bc,a(x1),-5],x1);dU(3,sz,yT);dU(2,kY,qT);dU(1,sD,Dl);dU(0,pa,CL);var -F8=a("output_substring"),F5=a("%.12g"),F4=a(en),F2=a(vR),F3=a(y9),FV=a("Stdlib.Exit"),FX=f9(0,0,D8),FY=f9(0,0,65520),FZ=f9(1,0,D8),F_=a("CamlinternalLazy.Undefined"),Gd=a(wc),Ge=a("\\'"),Gf=a(vq),Gg=a(zX),Gh=a(AP),Gi=a(x9),Gc=a("Char.chr"),Gl=a("nth"),Gm=a("List.nth"),Gk=a("tl"),Gj=a("hd"),Gp=a("String.blit / Bytes.blit_string"),Go=a("Bytes.blit"),Gn=a("String.sub / Bytes.sub"),Gu=a("String.contains_from / Bytes.contains_from"),Gr=a(W),Gq=a("String.concat"),Gx=a("Array.blit"),Gw=a("Array.fill"),GC=a("Map.remove_min_elt"),GD=[0,0,0,0],GE=[0,a("map.ml"),w2,10],GF=[0,0,0],Gy=a(l8),Gz=a(l8),GA=a(l8),GB=a(l8),GG=a("Stdlib.Queue.Empty"),GM=a("Buffer.add_substring/add_subbytes"),GL=a("Buffer.add: cannot grow buffer"),GK=[0,a(zw),93,2],GJ=[0,a(zw),94,2],GI=a("Buffer.sub"),GV=a("%c"),GW=a("%s"),GX=a(xu),GY=a(A5),GZ=a(yR),G0=a(Dh),G1=a("%f"),G2=a("%B"),G3=a("%{"),G4=a("%}"),G5=a("%("),G6=a("%)"),G7=a(qP),G8=a("%t"),G9=a("%?"),G_=a("%r"),G$=a("%_r"),Ha=[0,a(cd),gC,23],Hl=[0,a(cd),814,21],Hd=[0,a(cd),gA,21],Hm=[0,a(cd),818,21],He=[0,a(cd),gs,21],Hn=[0,a(cd),822,19],Hf=[0,a(cd),q0,19],Ho=[0,a(cd),826,22],Hg=[0,a(cd),827,22],Hp=[0,a(cd),831,30],Hh=[0,a(cd),832,30],Hj=[0,a(cd),836,26],Hb=[0,a(cd),837,26],Hk=[0,a(cd),846,28],Hc=[0,a(cd),847,28],Hi=[0,a(cd),kD,23],Is=a(vJ),Iq=[0,a(cd),1558,4],Ir=a("Printf: bad conversion %["),It=[0,a(cd),1626,39],Iu=[0,a(cd),1649,31],Iv=[0,a(cd),1650,31],Iw=a("Printf: bad conversion %_"),Ix=a(vF),Iy=a(vP),Iz=a(vF),IA=a(vP),IE=[0,[11,a("invalid box description "),[3,0,0]],a("invalid box description %S")],IC=a(W),ID=[0,0,4],IF=a(W),IG=a(w9),IH=a("h"),II=a("hov"),IJ=a("hv"),IK=a("v"),Io=a(qU),Im=a("neg_infinity"),In=a(EX),Il=a(en),Ig=[0,cH],H6=a("%+nd"),H7=a("% nd"),H9=a("%+ni"),H_=a("% ni"),H$=a("%nx"),Ia=a("%#nx"),Ib=a("%nX"),Ic=a("%#nX"),Id=a("%no"),Ie=a("%#no"),H5=a("%nd"),H8=a(yR),If=a("%nu"),HT=a("%+ld"),HU=a("% ld"),HW=a("%+li"),HX=a("% li"),HY=a("%lx"),HZ=a("%#lx"),H0=a("%lX"),H1=a("%#lX"),H2=a("%lo"),H3=a("%#lo"),HS=a("%ld"),HV=a(A5),H4=a("%lu"),HG=a("%+Ld"),HH=a("% Ld"),HJ=a("%+Li"),HK=a("% Li"),HL=a("%Lx"),HM=a("%#Lx"),HN=a("%LX"),HO=a("%#LX"),HP=a("%Lo"),HQ=a("%#Lo"),HF=a("%Ld"),HI=a(Dh),HR=a("%Lu"),Ht=a("%+d"),Hu=a("% d"),Hw=a("%+i"),Hx=a("% i"),Hy=a("%x"),Hz=a("%#x"),HA=a("%X"),HB=a("%#X"),HC=a("%o"),HD=a("%#o"),Hs=a(r7),Hv=a(xu),HE=a(vJ),GN=a("@]"),GO=a("@}"),GP=a("@?"),GQ=a("@\n"),GR=a("@."),GS=a("@@"),GT=a("@%"),GU=a("@"),Hq=a("CamlinternalFormat.Type_mismatch"),IO=a(W),IP=[0,[11,a(gx),[2,0,[2,0,0]]],a(", %s%s")],Jc=[0,[11,a(r3),[2,0,[12,10,0]]],a(EG)],Jd=[0,[11,a("Fatal error in uncaught exception handler: exception "),[2,0,[12,10,0]]],a("Fatal error in uncaught exception handler: exception %s\n")],Jb=a("Fatal error: out of memory in uncaught exception handler"),I$=[0,[11,a(r3),[2,0,[12,10,0]]],a(EG)],I7=[0,[2,0,[12,10,0]],a("%s\n")],IZ=a("Raised at"),I0=a("Re-raised at"),I1=a("Raised by primitive operation at"),I2=a("Called from"),I3=a(" (inlined)"),I5=a(W),I4=[0,[2,0,[12,32,[2,0,[11,a(' in file "'),[2,0,[12,34,[2,0,[11,a(", line "),[4,0,0,0,[11,a(yu),btk]]]]]]]]]],a('%s %s in file "%s"%s, line %d, characters %d-%d')],I6=[0,[2,0,[11,a(" unknown location"),0]],a("%s unknown location")],IU=a("Out of memory"),IV=a("Stack overflow"),IW=a("Pattern matching failed"),IX=a("Assertion failed"),IY=a("Undefined recursive module"),IQ=[0,[12,40,[2,0,[2,0,[12,41,0]]]],a("(%s%s)")],IR=a(W),IS=a(W),IT=[0,[12,40,[2,0,[12,41,0]]],a("(%s)")],IN=[0,[4,0,0,0,0],a(r7)],IL=[0,[3,0,0],a("%S")],IM=a(r0),I8=[0,a(W),a("(Cannot print locations:\n bytecode executable program file not found)"),a("(Cannot print locations:\n bytecode executable program file appears to be corrupt)"),a("(Cannot print locations:\n bytecode executable program file has wrong magic number)"),a("(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)")],Je=a(Eu),Js=[0,0],bti=a("OCAMLRUNPARAM"),btg=a("CAMLRUNPARAM"),Jf=a(W),JS=[3,0,3],JT=a(en),JN=a(nj),JO=a("<\/"),JP=a(W),JJ=a(nj),JK=a(rF),JL=a(W),JH=a("\n"),JD=a(W),JE=a(W),JF=a(W),JG=a(W),JC=[0,a(W)],Jy=a(W),Jz=a(W),JA=a(W),JB=a(W),Jw=[0,a(W),0,a(W)],Jv=a(W),Ju=a("Stdlib.Format.String_tag"),J4=a(W),J$=[0,a("lib/dates.ml"),226,2],J_=[0,[4,0,[0,2,4],0,[12,45,[4,0,[0,2,2],0,[12,45,[4,0,[0,2,2],0,0]]]]],a("%04d-%02d-%02d")],J8=[0,[12,91,[4,0,0,0,[11,a(" years, "),[4,0,0,0,[11,a(" months, "),[4,0,0,0,[11,a(" days]"),0]]]]]]],a("[%d years, %d months, %d days]")],J5=a("Dates_calc.Dates.InvalidDate"),J6=a("Dates_calc.Dates.AmbiguousComputation"),Ke=f9(1,0,0),Ka=a("Z.Overflow"),Kb=a(l5),Ki=a(W),Kj=a("+inf"),Kk=a("-inf"),Kl=a(E5),Km=a("undef"),Ko=[0,a("q.ml"),486,25],Kn=a("Q.of_string: invalid digit"),Kg=a(wO),Kf=a(wO),Ks=a("Buf.extend: reached Sys.max_string_length"),K2=[0,a(rG),72,32],KZ=[0,a(rG),72,32],KY=a("Root is not an object or array"),KU=a("NaN value not allowed in standard JSON"),KV=[0,[8,[0,0,3],0,[0,16],0],a(xx)],KX=[0,[8,[0,0,3],0,[0,17],0],a(CD)],KW=a(yr),KS=a("Infinity value not allowed in standard JSON"),KT=a("-Infinity value not allowed in standard JSON"),KO=a("NaN"),KP=[0,[8,[0,0,3],0,[0,16],0],a(xx)],KR=[0,[8,[0,0,3],0,[0,17],0],a(CD)],KQ=a(yr),KM=a("Infinity"),KN=a("-Infinity"),KJ=a(vR),KK=a(y9),KI=a("null"),KC=a(vq),KD=a(zX),KE=a(AP),KF=a("\\f"),KG=a(x9),KH=a('\\"'),KB=a(wc),KA=[0,[11,a("src="),[3,0,[11,a(" start="),[4,3,0,0,[11,a(" len="),[4,3,0,0,[12,10,[10,0]]]]]]]],a("src=%S start=%i len=%i\n%!")],Ky=a("\\u00"),Kv=[0,a(rG),72,32],Kt=a("Yojson.Json_error"),Kx=[0,a(qE),a(qS),a(q3),a(rA),a(rb),a(W),a(W),a(W),a(W),a(W),a(W)],K1=[0,a(qE),a(qS),a(q3),a(rA),a(rb),a(W),a(W),a(W),a(W),a(W),a(W)],K4=[0,a(qE),a(qS),a(q3),a(rA),a(rb),a(W),a(W),a(W),a(W),a(W),a(W)],LX=a("unreachable due to the [is_subscope_call] test"),LZ=a("unreachable due to the [is_subscope_input_var_def] test"),L0=a("]"),L1=a("["),L2=a(" ]): expected variable definition (function output), found: "),L3=a(gx),L4=a(uV),L5=a(" ]): expected variable definition (function output), found: end of tokens"),L6=a(gx),L7=a(uV),LY=a("Unexpected event: "),L9=a("Missing function output variable definition."),L8=a("Invalid start of function call."),LW=a(ai),LV=a(aj),L_=[0,[11,a("An error occurred while parsing raw events: "),[2,0,[12,10,0]]],a("An error occurred while parsing raw events: %s\n")],LL=a(xM),LM=a(gx),LN=[0,[11,a(Az),0],a(Az)],LO=a(xM),LP=a(gx),LQ=[0,[11,a(D0),0],a(D0)],LR=a(gx),LS=[0,[11,a("VariableDefinition([ "),[2,0,[11,a(" ], "),[2,0,[12,41,0]]]]],a("VariableDefinition([ %s ], %s)")],LT=[0,[11,a(v1),0],a(v1)],Lv=[0,cC,a("VarComputation")],Lw=[0,cC,a("FunCall")],Lx=a(B0),Ly=a("inputs"),Lz=a(xQ),LA=[0,cC,a("SubScopeCall")],LB=a("fun_calls"),LC=a("value"),LD=a(xQ),LE=a("pos"),LF=a(aj),LG=a(B0),LH=a(ai),LI=a("fun_name"),Lk=[0,b8,[0,[0,cC,a("Unit")],0]],Ll=[0,b8,[0,[0,cC,a("Unembeddable")],0]],Lm=[0,cC,a("Bool")],Ln=[0,cC,a("Money")],Lo=[0,cC,a("Integer")],Lp=[0,cC,a("Decimal")],Lq=[0,cC,a("Date")],Lr=[0,cC,a("Duration")],Ls=[0,cC,a("Enum")],Lt=[0,cC,a("Struct")],Lu=[0,cC,a("Array")],Lj=[0,[15,0],a(qP)],Li=[0,[15,0],a(qP)],K6=a("law_headings"),K7=a("end_column"),K8=a("end_line"),K9=a("start_column"),K_=a("start_line"),K$=a("filename"),La=a("Runtime_ocaml.Runtime.EmptyError"),Lb=a("Runtime_ocaml.Runtime.AssertionFailed"),Lc=a("Runtime_ocaml.Runtime.ConflictError"),Ld=a("Runtime_ocaml.Runtime.UncomparableDurations"),Lf=a("Runtime_ocaml.Runtime.ImpossibleDate"),Lh=a("Runtime_ocaml.Runtime.NoValueProvided"),L$=a("Jsoo_runtime.Error.Exn"),Ma=a(rq),Ms=[0,[2,0,[11,a(" in file "),[2,0,[11,a(", position "),[4,0,0,0,[12,58,[4,0,0,0,[11,a("--"),[4,0,0,0,[12,58,btl]]]]]]]]]],a("%s in file %s, position %d:%d--%d:%d.")],Mt=a("No rule applies in the given context to give a value to the variable"),Mu=a("A conflict happened between two rules giving a value to the variable"),Mv=a("A failure happened in the assertion"),Ml=a("Begin call"),Mm=a("End call"),Mn=a("Variable definition"),Mo=a("Decision taken"),Mj=a(W),Mh=a("date_of_jsoo: invalid date"),Mf=[0,a(xF),a(Bh),a(DN)],Mg=[0,a(xF),a(DN),a(Bh)],_H=[0,a(aW),89,14,89,29,[0,a(bj),[0,a(aX),0]]],_A=[0,a(aW),c4,18,c4,64,[0,a(bj),[0,a(aX),0]]],_B=[0,a(aW),99,5,99,72,[0,a(bj),[0,a(aX),0]]],_z=[0,a(aW),99,5,99,72,[0,a(bj),[0,a(aX),0]]],_v=[0,a(aW),86,14,86,53,[0,a(bj),[0,a(aX),0]]],_r=[0,a(aW),85,14,85,50,[0,a(bj),[0,a(aX),0]]],_n=[0,a(aW),88,14,88,46,[0,a(bj),[0,a(aX),0]]],_j=[0,a(aW),87,14,87,54,[0,a(bj),[0,a(aX),0]]],_e=[0,a(aW),96,18,96,72,[0,a(bj),[0,a(aX),0]]],_f=[0,a(aW),95,5,95,80,[0,a(bj),[0,a(aX),0]]],_d=[0,a(aW),95,5,95,80,[0,a(bj),[0,a(aX),0]]],Z_=[0,a(aW),92,18,92,67,[0,a(bj),[0,a(aX),0]]],Z$=[0,a(aW),91,5,91,75,[0,a(bj),[0,a(aX),0]]],Z9=[0,a(aW),91,5,91,75,[0,a(bj),[0,a(aX),0]]],Z5=[0,a(aW),bi,14,bi,30,[0,a("Article L131-1"),[0,a(bj),[0,a(aX),0]]]],Z2=[0,0],Z3=[1,0],Z4=[2,0],Z6=[0,a(aW),75,11,75,27,[0,a(bj),[0,a(aX),0]]],Z1=[0,a(aW),75,11,75,27,[0,a(bj),[0,a(aX),0]]],Z7=[0,a(d6),[0,a("enfants_\xc3\xa0_charge"),0]],_a=[0,a(aW),91,5,91,75,[0,a(bj),[0,a(aX),0]]],_b=[0,a(d6),[0,a("allocations_familiales.personne_charge_effective_permanente_est_parent"),0]],Z8=[0,a(aW),91,5,91,75,[0,a(bj),[0,a(aX),0]]],_g=[0,a(aW),95,5,95,80,[0,a(bj),[0,a(aX),0]]],_h=[0,a(d6),[0,a("allocations_familiales.personne_charge_effective_permanente_remplit_titre_I"),0]],_c=[0,a(aW),95,5,95,80,[0,a(bj),[0,a(aX),0]]],_k=[0,a(aW),87,14,87,54,[0,a(bj),[0,a(aX),0]]],_l=[0,a(d6),[0,a("allocations_familiales.ressources_m\xc3\xa9nage"),0]],_i=[0,a(aW),87,14,87,54,[0,a(bj),[0,a(aX),0]]],_o=[0,a(aW),88,14,88,46,[0,a(bj),[0,a(aX),0]]],_p=[0,a(d6),[0,a("allocations_familiales.r\xc3\xa9sidence"),0]],_m=[0,a(aW),88,14,88,46,[0,a(bj),[0,a(aX),0]]],_s=[0,a(aW),85,14,85,50,[0,a(bj),[0,a(aX),0]]],_t=[0,a(d6),[0,a("allocations_familiales.date_courante"),0]],_q=[0,a(aW),85,14,85,50,[0,a(bj),[0,a(aX),0]]],_w=[0,a(aW),86,14,86,53,[0,a(bj),[0,a(aX),0]]],_x=[0,a(d6),[0,a("allocations_familiales.enfants_\xc3\xa0_charge"),0]],_u=[0,a(aW),86,14,86,53,[0,a(bj),[0,a(aX),0]]],_C=[0,a(aW),99,5,99,72,[0,a(bj),[0,a(aX),0]]],_D=[0,a(d6),[0,a("allocations_familiales.avait_enfant_\xc3\xa0_charge_avant_1er_janvier_2012"),0]],_y=[0,a(aW),99,5,99,72,[0,a(bj),[0,a(aX),0]]],_E=[0,a(d6),[0,a(vd),[0,a(Q),0]]],_F=[0,a(d6),[0,a(vd),[0,a(Q),0]]],_I=[0,a(aW),79,10,79,25,[0,a(bj),[0,a(aX),0]]],_G=[0,a(aW),79,10,79,25,[0,a(bj),[0,a(aX),0]]],_J=[0,a(d6),[0,a("i_montant_vers\xc3\xa9"),0]],ZW=[0,a(aW),44,14,44,27,[0,a(eL),[0,a(aX),0]]],ZV=a(n),ZR=[0,a(bm),C0,14,C0,62,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],ZM=[0,a(Q),[0,a(kH),[0,a(ai),0]]],ZN=[0,a(Q),[0,a(kH),0]],ZO=[0,a(Q),[0,a(kH),[0,a(aj),0]]],ZP=[0,a(Q),[0,a(kH),0]],ZQ=a(n),ZI=[0,a(bm),oa,14,oa,61,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],ZE=[0,a(aW),38,14,38,38,[0,a(eL),[0,a(aX),0]]],Zz=[0,a(Q),[0,a(j1),[0,a(ai),0]]],ZA=[0,a(Q),[0,a(j1),0]],ZB=[0,a(Q),[0,a(j1),[0,a(aj),0]]],ZC=[0,a(Q),[0,a(j1),0]],Zy=a(n),ZD=a(n),Zu=[0,a(aW),36,14,36,32,[0,a(eL),[0,a(aX),0]]],Zt=a(n),Zp=[0,a(dI),ma,5,ma,43,[0,a("Article R521-4"),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],Ze=[0,a(Q),[0,a(fi),[0,a(ai),0]]],Zf=[0,a(Q),[0,a(fi),0]],Zg=[0,a(Q),[0,a(fi),[0,a(aj),0]]],Zh=[0,a(Q),[0,a(fi),0]],Zi=a(ek),Zn=a(j5),Zo=a(bZ),Zj=[0,a(Q),[0,a(jW),[0,a(ai),0]]],Zk=[0,a(Q),[0,a(jW),0]],Zl=[0,a(Q),[0,a(jW),[0,a(aj),0]]],Zm=[0,a(Q),[0,a(jW),0]],Zq=[0,a(G),d$,11,d$,49,[0,a(I),[0,a(F),[0,a(B),0]]]],Zd=[0,a(G),d$,11,d$,49,[0,a(I),[0,a(F),[0,a(B),0]]]],Za=[0,a(dI),cn,14,cn,46,[0,a(oH),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],Y5=a(cG),Y6=[0,a(bm),qv,5,rc,42,[0,a(fM),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Y2=a(cG),Y3=a(ek),Y4=a(cG),Y7=[0,a(G),eO,11,eO,52,[0,a(I),[0,a(F),[0,a(B),0]]]],YZ=a(cG),Y0=[0,a(bm),277,5,B5,41,[0,a(fM),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],YW=a(cG),YX=a(ek),YY=a(cG),Y1=[0,a(G),eO,11,eO,52,[0,a(I),[0,a(F),[0,a(B),0]]]],Y8=[0,a(G),eO,11,eO,52,[0,a(I),[0,a(F),[0,a(B),0]]]],YV=[0,a(bm),m8,14,m8,55,[0,a(fM),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],YU=a(n),YJ=[0,a(Q),[0,a(bC),[0,a(ai),0]]],YK=[0,a(Q),[0,a(bC),0]],YL=[0,a(Q),[0,a(bC),[0,a(aj),0]]],YM=[0,a(Q),[0,a(bC),0]],YN=a(v),YO=[0,a(bm),gn,5,rN,57,[0,a(ke),[0,a(eT),[0,a(gB),[0,a(dO),[0,a(a6),[0,a($),0]]]]]]],YI=a("0.0369"),YP=[0,a(G),cy,11,cy,37,[0,a(I),[0,a(F),[0,a(B),0]]]],YB=[0,a(Q),[0,a(bC),[0,a(ai),0]]],YC=[0,a(Q),[0,a(bC),0]],YD=[0,a(Q),[0,a(bC),[0,a(aj),0]]],YE=[0,a(Q),[0,a(bC),0]],YF=a(v),YG=[0,a(bm),388,5,391,58,[0,a(ke),[0,a(eT),[0,a(gB),[0,a(dO),[0,a(a6),[0,a($),0]]]]]]],YA=a("0.0567"),YH=[0,a(G),cy,11,cy,37,[0,a(I),[0,a(F),[0,a(B),0]]]],YQ=[0,a(G),cy,11,cy,37,[0,a(I),[0,a(F),[0,a(B),0]]]],Yz=[0,a(bm),22,14,22,40,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Yv=[0,a(Q),[0,a(j2),[0,a(ai),0]]],Yw=[0,a(Q),[0,a(j2),0]],Yx=[0,a(Q),[0,a(j2),[0,a(aj),0]]],Yy=[0,a(Q),[0,a(j2),0]],YR=[0,a(G),cy,11,cy,37,[0,a(I),[0,a(F),[0,a(B),0]]]],Yu=[0,a(G),cy,11,cy,37,[0,a(I),[0,a(F),[0,a(B),0]]]],Yo=a(v),Yp=[0,a(bm),355,5,356,69,[0,a(ke),[0,a(eT),[0,a(gB),[0,a(dO),[0,a(a6),[0,a($),0]]]]]]],Yq=[0,a(G),dH,11,dH,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Yl=[8,0],Ym=[0,a(aS),uI,24,uI,44,[0,a(cE),[0,a(a9),[0,a(a_),0]]]],Yn=[0,a(G),dH,11,dH,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Yr=[0,a(G),dH,11,dH,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Yk=[0,a(bm),18,14,18,34,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Yg=[0,a(bm),xE,14,xE,39,[0,a(fM),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Yb=[0,a(Q),[0,a(j8),[0,a(ai),0]]],Yc=[0,a(Q),[0,a(j8),0]],Yd=[0,a(Q),[0,a(j8),[0,a(aj),0]]],Ye=[0,a(Q),[0,a(j8),0]],Yf=a(v),Ya=a(n),X3=[0,a(Q),[0,a(bC),[0,a(ai),0]]],X4=[0,a(Q),[0,a(bC),0]],X5=[0,a(Q),[0,a(bC),[0,a(aj),0]]],X6=[0,a(Q),[0,a(bC),0]],X7=[0,a(bm),60,5,60,38,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],X2=a(rj),X8=[0,a(G),cU,11,cU,47,[0,a(I),[0,a(F),[0,a(B),0]]]],XW=[0,a(Q),[0,a(bC),[0,a(ai),0]]],XX=[0,a(Q),[0,a(bC),0]],XY=[0,a(Q),[0,a(bC),[0,a(aj),0]]],XZ=[0,a(Q),[0,a(bC),0]],X0=[0,a(bm),hu,5,hu,38,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],XV=a(BC),X1=[0,a(G),cU,11,cU,47,[0,a(I),[0,a(F),[0,a(B),0]]]],XP=[0,a(Q),[0,a(bC),[0,a(ai),0]]],XQ=[0,a(Q),[0,a(bC),0]],XR=[0,a(Q),[0,a(bC),[0,a(aj),0]]],XS=[0,a(Q),[0,a(bC),0]],XT=[0,a(bm),Dw,5,Dw,38,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],XO=a(BS),XU=[0,a(G),cU,11,cU,47,[0,a(I),[0,a(F),[0,a(B),0]]]],XI=[0,a(Q),[0,a(bC),[0,a(ai),0]]],XJ=[0,a(Q),[0,a(bC),0]],XK=[0,a(Q),[0,a(bC),[0,a(aj),0]]],XL=[0,a(Q),[0,a(bC),0]],XM=[0,a(aW),27,5,27,44,[0,a(eL),[0,a(aX),0]]],XH=a(n),XN=[0,a(G),cU,11,cU,47,[0,a(I),[0,a(F),[0,a(B),0]]]],X9=[0,a(G),cU,11,cU,47,[0,a(I),[0,a(F),[0,a(B),0]]]],XG=[0,a(G),cU,11,cU,47,[0,a(I),[0,a(F),[0,a(B),0]]]],XD=[0,a(dI),d$,14,d$,41,[0,a(oH),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],XB=a(bZ),XC=a(bZ),Xt=[8,0],Xu=[0,a(aS),EJ,5,EJ,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Xq=a(v),Xr=a(vB),Xs=a(n),Xv=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Xn=[8,0],Xo=[0,a(aS),E$,5,E$,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Xk=a(v),Xl=a("0.2379"),Xm=a(n),Xp=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Xh=[8,0],Xi=[0,a(aS),fO,5,fO,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Xe=a(v),Xf=a("0.2437"),Xg=a(n),Xj=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Xb=[8,0],Xc=[0,a(aS),zo,5,zo,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],W_=a(v),W$=a("0.2496"),Xa=a(n),Xd=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],W7=[8,0],W8=[0,a(aS),rN,5,rN,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],W4=a(v),W5=a("0.2555"),W6=a(n),W9=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],W1=[8,0],W2=[0,a(aS),uN,5,uN,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],WY=a(v),WZ=a("0.2613"),W0=a(n),W3=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],WV=[8,0],WW=[0,a(aS),wF,5,wF,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],WS=a(v),WT=a("0.2672"),WU=a(n),WX=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],WP=[8,0],WQ=[0,a(aS),xa,5,xa,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],WM=a(v),WN=a("0.2804"),WO=a(n),WR=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],WJ=[8,0],WK=[0,a(aS),fT,5,fT,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],WG=a(v),WH=a("0.2936"),WI=a(n),WL=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],WD=[8,0],WE=[0,a(aS),wW,5,wW,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],WA=a(v),WB=a("0.3068"),WC=a(n),WF=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Xw=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Wy=[8,0],Wz=[0,a(aS),rn,14,rn,50,[0,a(cE),[0,a(a9),[0,a(a_),0]]]],Wv=a(v),Ww=a(r_),Wx=a(n),Xx=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Ws=[0,a(bm),38,14,38,50,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Wp=a(v),Wq=a(r_),Wr=a(n),Wt=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Wn=[0,a(bm),79,14,79,50,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Wk=a(v),Wl=a(rj),Wm=a(n),Wo=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Wi=[0,a(bm),h7,14,h7,50,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Wf=a(v),Wg=a(BC),Wh=a(n),Wj=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Wu=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Wa=[0,a(bm),43,14,43,59,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],V8=a(T),V9=a(T),V_=a("0.41"),V$=a(n),Wb=[0,a(G),du,11,du,56,[0,a(I),[0,a(F),[0,a(B),0]]]],V6=[0,a(bm),84,14,84,59,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],V2=a(T),V3=a(T),V4=a("0.205"),V5=a(n),V7=[0,a(G),du,11,du,56,[0,a(I),[0,a(F),[0,a(B),0]]]],V0=[0,a(bm),gN,14,gN,59,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],VW=a(T),VX=a(T),VY=a("0.1025"),VZ=a(n),V1=[0,a(G),du,11,du,56,[0,a(I),[0,a(F),[0,a(B),0]]]],VR=[0,a(bm),nn,5,nn,43,[0,a(fM),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],VQ=a("0.20234"),VS=[0,a(G),ej,11,ej,47,[0,a(I),[0,a(F),[0,a(B),0]]]],VO=[0,a(bm),234,5,zh,46,[0,a(fM),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],VN=a("0.10117"),VP=[0,a(G),ej,11,ej,47,[0,a(I),[0,a(F),[0,a(B),0]]]],VL=[0,a(bm),bc,5,bc,43,[0,a(fM),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],VK=a("0.05059"),VM=[0,a(G),ej,11,ej,47,[0,a(I),[0,a(F),[0,a(B),0]]]],VD=a(cG),VE=[0,a(bm),qH,5,166,68,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],VA=a(cG),VB=a(ek),VC=a(cG),VF=[0,a(G),ez,11,ez,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Vx=a(cG),Vy=[0,a(bm),174,5,rM,68,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Vu=a(cG),Vv=a(ek),Vw=a(cG),Vz=[0,a(G),ez,11,ez,31,[0,a(I),[0,a(F),[0,a(B),0]]]],VG=[0,a(G),ez,11,ez,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Vt=[0,a(bm),jo,14,jo,34,[0,a(cS),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Vs=a(n),VH=[0,a(G),ez,11,ez,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Vr=[0,a(G),ez,11,ez,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Vi=[0,a(Q),[0,a(eM),[0,a(ai),0]]],Vj=[0,a(Q),[0,a(eM),0]],Vk=[0,a(Q),[0,a(eM),[0,a(aj),0]]],Vl=[0,a(Q),[0,a(eM),0]],Vm=[0,a(bQ),h5,5,318,21,[0,a(zG),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],Vn=[0,a(G),cn,11,cn,34,[0,a(I),[0,a(F),[0,a(B),0]]]],U$=[0,a(Q),[0,a(kB),[0,a(ai),0]]],Va=[0,a(Q),[0,a(kB),0]],Vb=[0,a(Q),[0,a(kB),[0,a(aj),0]]],Vc=[0,a(Q),[0,a(kB),0]],Vd=[0,a(Q),[0,a(eM),[0,a(ai),0]]],Ve=[0,a(Q),[0,a(eM),0]],Vf=[0,a(Q),[0,a(eM),[0,a(aj),0]]],Vg=[0,a(Q),[0,a(eM),0]],Vh=[0,a(bQ),fl,5,cZ,21,[0,a(zG),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],Vo=[0,a(G),cn,11,cn,34,[0,a(I),[0,a(F),[0,a(B),0]]]],U_=[0,a(G),cn,11,cn,34,[0,a(I),[0,a(F),[0,a(B),0]]]],Vp=[0,a(G),cn,11,cn,34,[0,a(I),[0,a(F),[0,a(B),0]]]],U9=[0,a(G),cn,11,cn,34,[0,a(I),[0,a(F),[0,a(B),0]]]],U0=[8,0],U1=a(v),U2=[0,a(aS),fK,6,fK,71,[0,a(cE),[0,a(a9),[0,a(a_),0]]]],U3=[0,a(G),cH,11,cH,28,[0,a(I),[0,a(F),[0,a(B),0]]]],UY=a(v),UZ=[0,a(bQ),rK,5,410,72,[0,a(rH),[0,a(eT),[0,a(j6),[0,a(dO),[0,a(Z),[0,a($),0]]]]]]],U4=[0,a(G),cH,11,cH,28,[0,a(I),[0,a(F),[0,a(B),0]]]],U5=[0,a(G),cH,11,cH,28,[0,a(I),[0,a(F),[0,a(B),0]]]],UW=a(T),UX=[0,a(bQ),hu,5,hu,70,[0,a(Fe),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],U6=[0,a(G),cH,11,cH,28,[0,a(I),[0,a(F),[0,a(B),0]]]],UV=[0,a(G),cH,11,cH,28,[0,a(I),[0,a(F),[0,a(B),0]]]],UN=[8,0],UO=[0,a(aS),251,5,j3,53,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],UK=a(n),UL=a("0.145"),UM=a(n),UP=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],UH=[8,0],UI=[0,a(aS),zc,5,261,53,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],UE=a(n),UF=a("0.1393"),UG=a(n),UJ=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],UB=[8,0],UC=[0,a(aS),rc,5,v$,53,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Uy=a(n),Uz=a("0.1335"),UA=a(n),UD=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],Uv=[8,0],Uw=[0,a(aS),278,5,B5,53,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Us=a(n),Ut=a("0.1278"),Uu=a(n),Ux=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],Up=[8,0],Uq=[0,a(aS),287,5,q_,53,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Um=a(n),Un=a("0.122"),Uo=a(n),Ur=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],Uj=[8,0],Uk=[0,a(aS),dZ,5,d_,53,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Ug=a(n),Uh=a("0.1163"),Ui=a(n),Ul=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],Ud=[8,0],Ue=[0,a(aS),kL,5,rd,53,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Ua=a(n),Ub=a("0.1105"),Uc=a(n),Uf=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],T9=[8,0],T_=[0,a(aS),d8,5,h5,53,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],T6=a(n),T7=a("0.0976"),T8=a(n),T$=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],T3=[8,0],T4=[0,a(aS),323,5,fk,53,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],T0=a(n),T1=a("0.0847"),T2=a(n),T5=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],TX=[8,0],TY=[0,a(aS),uG,5,333,53,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],TU=a(n),TV=a("0.0717"),TW=a(n),TZ=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],TR=[8,0],TS=[0,a(aS),yM,5,yM,49,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],TO=a(n),TP=a("5728"),TQ=a(n),TT=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],UQ=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],TM=[8,0],TN=[0,a(aS),nG,14,nG,49,[0,a(cE),[0,a(a9),[0,a(a_),0]]]],TJ=a(n),TK=a(vK),TL=a(n),UR=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],TG=a(v),TH=[0,a(bm),dw,5,df,71,[0,a(ke),[0,a(eT),[0,a(gB),[0,a(dO),[0,a(a6),[0,a($),0]]]]]]],TF=a(vK),TI=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],TE=[0,a(bm),xA,29,xA,64,[0,a(ke),[0,a(eT),[0,a(gB),[0,a(dO),[0,a(a6),[0,a($),0]]]]]]],TD=a(n),Tz=[0,a(dI),mm,14,mm,34,[0,a(oH),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],Ts=[0,a(Q),[0,a(fi),[0,a(ai),0]]],Tt=[0,a(Q),[0,a(fi),0]],Tu=[0,a(Q),[0,a(fi),[0,a(aj),0]]],Tv=[0,a(Q),[0,a(fi),0]],Tw=a(ek),Tx=a(j5),Ty=a(bZ),Tr=a(bZ),Tn=[0,a(dI),zB,14,zB,34,[0,a(oH),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],Tg=[8,0],Th=[0,a(aS),hj,5,hj,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Td=a(T),Te=a(BP),Tf=a(n),Ti=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],Ta=[8,0],Tb=[0,a(aS),B4,5,B4,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],S9=a(T),S_=a("0.0539"),S$=a(n),Tc=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],S6=[8,0],S7=[0,a(aS),xP,5,xP,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],S3=a(T),S4=a("0.0615"),S5=a(n),S8=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],S0=[8,0],S1=[0,a(aS),ep,5,ep,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],SX=a(T),SY=a("0.069"),SZ=a(n),S2=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],SU=[8,0],SV=[0,a(aS),BR,5,BR,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],SR=a(T),SS=a("0.0766"),ST=a(n),SW=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],SO=[8,0],SP=[0,a(aS),fN,5,fN,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],SL=a(T),SM=a("0.0842"),SN=a(n),SQ=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],SI=[8,0],SJ=[0,a(aS),v7,5,v7,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],SF=a(T),SG=a("0.0918"),SH=a(n),SK=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],SC=[8,0],SD=[0,a(aS),vp,5,vp,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Sz=a(T),SA=a("0.1089"),SB=a(n),SE=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],Sw=[8,0],Sx=[0,a(aS),i9,5,i9,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],St=a(T),Su=a("0.1259"),Sv=a(n),Sy=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],Sq=[8,0],Sr=[0,a(aS),fX,5,fX,69,[0,a(bl),[0,a(a9),[0,a(a_),0]]]],Sn=a(T),So=a("0.143"),Sp=a(n),Ss=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],Tj=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],Sm=[0,a(aS),m2,14,m2,59,[0,a(cE),[0,a(a9),[0,a(a_),0]]]],Sj=a(T),Sk=a(rj),Sl=a(n),Sf=[0,a(aS),iE,14,iE,67,[0,a(cE),[0,a(a9),[0,a(a_),0]]]],Sb=a(Y),Sc=a(Y),Sd=a(BP),Se=a(n),R6=a(v),R7=[0,a(bQ),423,6,424,72,[0,a(rH),[0,a(eT),[0,a(j6),[0,a(dO),[0,a(Z),[0,a($),0]]]]]]],R8=[0,a(G),dq,11,dq,35,[0,a(I),[0,a(F),[0,a(B),0]]]],R1=[0,a(ck),[0,a(iQ),[0,a(ai),0]]],R2=[0,a(ck),[0,a(iQ),0]],R3=[0,a(ck),[0,a(iQ),[0,a(aj),0]]],R4=[0,a(ck),[0,a(iQ),0]],R5=[0,a(bQ),ks,5,cU,59,[0,a(Fe),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],R9=[0,a(G),dq,11,dq,35,[0,a(I),[0,a(F),[0,a(B),0]]]],R0=[0,a(G),dq,11,dq,35,[0,a(I),[0,a(F),[0,a(B),0]]]],R_=[0,a(G),dq,11,dq,35,[0,a(I),[0,a(F),[0,a(B),0]]]],RZ=[0,a(G),dq,11,dq,35,[0,a(I),[0,a(F),[0,a(B),0]]]],RT=a(v),RU=[0,a(bQ),gp,5,rB,71,[0,a(rH),[0,a(eT),[0,a(j6),[0,a(dO),[0,a(Z),[0,a($),0]]]]]]],RV=[0,a(G),dL,11,dL,34,[0,a(I),[0,a(F),[0,a(B),0]]]],RS=[0,a(aW),30,9,30,32,[0,a(eL),[0,a(aX),0]]],RW=[0,a(G),dL,11,dL,34,[0,a(I),[0,a(F),[0,a(B),0]]]],RR=[0,a(G),dL,11,dL,34,[0,a(I),[0,a(F),[0,a(B),0]]]],RL=[0,a(aS),23,5,23,69,[0,a(E3),[0,a(f1),0]]],RJ=a(DP),RK=a("5628600"),RM=[0,a(G),dj,11,dj,27,[0,a(I),[0,a(F),[0,a(B),0]]]],RH=[0,a(aS),56,5,56,69,[0,a(uT),[0,a(f1),0]]],RF=a(EK),RG=a("5684900"),RI=[0,a(G),dj,11,dj,27,[0,a(I),[0,a(F),[0,a(B),0]]]],RD=[0,a(aS),89,5,89,69,[0,a(wb),[0,a(f1),0]]],RB=a(DW),RC=a("5775900"),RE=[0,a(G),dj,11,dj,27,[0,a(I),[0,a(F),[0,a(B),0]]]],Rz=[0,a(aS),bi,5,bi,69,[0,a(cz),[0,a(Cn),[0,a(f1),0]]]],Rx=a(vL),Ry=a("5827900"),RA=[0,a(G),dj,11,dj,27,[0,a(I),[0,a(F),[0,a(B),0]]]],RN=[0,a(G),dj,11,dj,27,[0,a(I),[0,a(F),[0,a(B),0]]]],Rw=[0,a(bm),di,14,di,30,[0,a(CO),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Ru=a(Ah),Rv=a("5595000"),Ro=[0,a(aS),30,5,30,69,[0,a(E3),[0,a(f1),0]]],Rm=a(DP),Rn=a("7877000"),Rp=[0,a(G),dh,11,dh,28,[0,a(I),[0,a(F),[0,a(B),0]]]],Rk=[0,a(aS),63,5,63,69,[0,a(uT),[0,a(f1),0]]],Ri=a(EK),Rj=a("7955800"),Rl=[0,a(G),dh,11,dh,28,[0,a(I),[0,a(F),[0,a(B),0]]]],Rg=[0,a(aS),96,5,96,69,[0,a(wb),[0,a(f1),0]]],Re=a(DW),Rf=a("8083100"),Rh=[0,a(G),dh,11,dh,28,[0,a(I),[0,a(F),[0,a(B),0]]]],Rc=[0,a(aS),dL,5,dL,69,[0,a(cz),[0,a(Cn),[0,a(f1),0]]]],Ra=a(vL),Rb=a("8155800"),Rd=[0,a(G),dh,11,dh,28,[0,a(I),[0,a(F),[0,a(B),0]]]],Rq=[0,a(G),dh,11,dh,28,[0,a(I),[0,a(F),[0,a(B),0]]]],Q$=[0,a(bm),jk,14,jk,31,[0,a(CO),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Q9=a(Ah),Q_=a("7830000"),Q5=[0,a(aW),33,14,33,36,[0,a(eL),[0,a(aX),0]]],Q6=[0,a(G),nu,11,nu,33,[0,a(I),[0,a(F),[0,a(B),0]]]],Q4=[0,a(G),nu,11,nu,33,[0,a(I),[0,a(F),[0,a(B),0]]]],Q1=[0,a(bQ),75,14,75,64,[0,a(gu),[0,a(gr),[0,a(d5),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],QX=[0,a(ck),[0,a(de),[0,a(ai),0]]],QY=[0,a(ck),[0,a(de),0]],QZ=[0,a(ck),[0,a(de),[0,a(aj),0]]],Q0=[0,a(ck),[0,a(de),0]],QS=[0,a(dI),83,19,83,69,[0,a(nw),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],QT=[0,a(G),eU,11,eU,38,[0,a(I),[0,a(F),[0,a(B),0]]]],QR=[0,a(dI),56,14,56,41,[0,a(nw),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],QU=[0,a(G),eU,11,eU,38,[0,a(I),[0,a(F),[0,a(B),0]]]],QQ=[0,a(G),eU,11,eU,38,[0,a(I),[0,a(F),[0,a(B),0]]]],QL=[0,a(aW),32,14,32,40,[0,a(eL),[0,a(aX),0]]],QF=[0,a(G),hb,14,hb,46,[0,a(I),[0,a(F),[0,a(B),0]]]],QB=[0,a(G),jn,14,jn,56,[0,a(I),[0,a(F),[0,a(B),0]]]],QA=[1,0],Qw=[0,a(G),fF,14,fF,50,[0,a(I),[0,a(F),[0,a(B),0]]]],Qq=[0,a(G),fK,14,fK,32,[0,a(I),[0,a(F),[0,a(B),0]]]],Qk=[0,a(dI),64,14,64,44,[0,a(nw),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],Qj=a(Y),Qf=[0,a(bm),eC,14,eC,35,[0,a(fM),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(a6),[0,a($),0]]]]]]],Qe=a(Y),P$=[0,a(bQ),q8,5,zc,56,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],P_=[1,0],Qa=[0,a(G),98,11,98,20,[0,a(I),[0,a(F),[0,a(B),0]]]],P5=[0,a(bQ),v$,5,271,48,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],P4=[0,0],P6=[0,a(G),98,11,98,20,[0,a(I),[0,a(F),[0,a(B),0]]]],P3=[0,a(bQ),EI,5,EI,70,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],P2=[0,0],P7=[0,a(G),98,11,98,20,[0,a(I),[0,a(F),[0,a(B),0]]]],P1=[0,a(bQ),Cj,5,Cj,69,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],P0=[0,0],P8=[0,a(G),98,11,98,20,[0,a(I),[0,a(F),[0,a(B),0]]]],PZ=[0,a(bQ),oa,5,oa,60,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],PY=[0,0],P9=[0,a(G),98,11,98,20,[0,a(I),[0,a(F),[0,a(B),0]]]],Qb=[0,a(G),98,11,98,20,[0,a(I),[0,a(F),[0,a(B),0]]]],PX=[0,a(G),98,11,98,20,[0,a(I),[0,a(F),[0,a(B),0]]]],PT=[0,a(bQ),BH,5,BH,70,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],PS=[1,0],PU=[0,a(G),97,11,97,26,[0,a(I),[0,a(F),[0,a(B),0]]]],PQ=[0,a(bQ),fa,5,mO,56,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],PP=[2,0],PR=[0,a(G),97,11,97,26,[0,a(I),[0,a(F),[0,a(B),0]]]],PL=[0,a(bQ),264,5,265,48,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],PK=[0,0],PM=[0,a(G),97,11,97,26,[0,a(I),[0,a(F),[0,a(B),0]]]],PJ=[0,a(bQ),xI,5,xI,69,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],PI=[0,0],PN=[0,a(G),97,11,97,26,[0,a(I),[0,a(F),[0,a(B),0]]]],PH=[0,a(bQ),zL,5,zL,60,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],PG=[0,0],PO=[0,a(G),97,11,97,26,[0,a(I),[0,a(F),[0,a(B),0]]]],PV=[0,a(G),97,11,97,26,[0,a(I),[0,a(F),[0,a(B),0]]]],PF=[0,a(G),97,11,97,26,[0,a(I),[0,a(F),[0,a(B),0]]]],PW=[0,a(Q),[0,a(fi),0]],Qc=[0,a(Q),[0,a("versement"),0]],Qg=[0,a(G),n9,11,n9,32,[0,a(I),[0,a(F),[0,a(B),0]]]],Qd=[0,a(G),n9,11,n9,32,[0,a(I),[0,a(F),[0,a(B),0]]]],Qh=[0,a(Q),[0,a("nombre_enfants_l521_1"),0]],Ql=[0,a(G),n1,11,n1,41,[0,a(I),[0,a(F),[0,a(B),0]]]],Qi=[0,a(G),n1,11,n1,41,[0,a(I),[0,a(F),[0,a(B),0]]]],Qm=[0,a(Q),[0,a("nombre_enfants_alin\xc3\xa9a_2_l521_3"),0]],Qn=[0,a(Q),[0,a(wn),[0,a(qW),0]]],Qo=[0,a(Q),[0,a(wn),[0,a(qW),0]]],Qr=[0,a(G),fK,14,fK,32,[0,a(I),[0,a(F),[0,a(B),0]]]],Qs=[0,a(Q),[0,a("bmaf.date_courante"),0]],Qp=[0,a(G),fK,14,fK,32,[0,a(I),[0,a(F),[0,a(B),0]]]],Qt=[0,a(Q),[0,a(Av),[0,a(f2),0]]],Qu=[0,a(Q),[0,a(Av),[0,a(f2),0]]],Qx=[0,a(G),fF,14,fF,50,[0,a(I),[0,a(F),[0,a(B),0]]]],Qy=[0,a(Q),[0,a(wI),0]],Qv=[0,a(G),fF,14,fF,50,[0,a(I),[0,a(F),[0,a(B),0]]]],QC=[0,a(G),jn,14,jn,56,[0,a(I),[0,a(F),[0,a(B),0]]]],QD=[0,a(Q),[0,a(AQ),0]],Qz=[0,a(G),jn,14,jn,56,[0,a(I),[0,a(F),[0,a(B),0]]]],QG=[0,a(G),hb,14,hb,46,[0,a(I),[0,a(F),[0,a(B),0]]]],QH=[0,a(Q),[0,a(yt),0]],QE=[0,a(G),hb,14,hb,46,[0,a(I),[0,a(F),[0,a(B),0]]]],QI=[0,a(Q),[0,a(oz),[0,a(ck),0]]],QJ=[0,a(Q),[0,a(oz),[0,a(ck),0]]],QM=[0,a(aW),32,14,32,40,[0,a(eL),[0,a(aX),0]]],QN=[0,a(Q),[0,a("enfant_le_plus_\xc3\xa2g\xc3\xa9.enfants"),0]],QK=[0,a(aW),32,14,32,40,[0,a(eL),[0,a(aX),0]]],QO=[0,a(Q),[0,a(Cz),[0,a(q7),0]]],QP=[0,a(Q),[0,a(Cz),[0,a(q7),0]]],QV=[0,a(Q),[0,a(eM),0]],Q2=[0,a(G),95,11,95,61,[0,a(I),[0,a(F),[0,a(B),0]]]],QW=[0,a(G),95,11,95,61,[0,a(I),[0,a(F),[0,a(B),0]]]],Q3=[0,a(Q),[0,a("enfants_\xc3\xa0_charge_droit_ouvert_prestation_familiale"),0]],Q7=[0,a(Q),[0,a(kB),0]],Rr=[0,a(G),dh,11,dh,28,[0,a(I),[0,a(F),[0,a(B),0]]]],Q8=[0,a(G),dh,11,dh,28,[0,a(I),[0,a(F),[0,a(B),0]]]],Rs=[0,a(Q),[0,a("plafond_II_d521_3"),0]],RO=[0,a(G),dj,11,dj,27,[0,a(I),[0,a(F),[0,a(B),0]]]],Rt=[0,a(G),dj,11,dj,27,[0,a(I),[0,a(F),[0,a(B),0]]]],RP=[0,a(Q),[0,a("plafond_I_d521_3"),0]],RX=[0,a(G),dL,11,dL,34,[0,a(I),[0,a(F),[0,a(B),0]]]],RQ=[0,a(G),dL,11,dL,34,[0,a(I),[0,a(F),[0,a(B),0]]]],RY=[0,a(Q),[0,a("droit_ouvert_compl\xc3\xa9ment"),0]],R$=[0,a(Q),[0,a(j8),0]],Sg=[0,a(G),h7,11,h7,64,[0,a(I),[0,a(F),[0,a(B),0]]]],Sa=[0,a(G),h7,11,h7,64,[0,a(I),[0,a(F),[0,a(B),0]]]],Sh=[0,a(Q),[0,a("montant_initial_base_quatri\xc3\xa8me_enfant_et_plus_mayotte"),0]],Tk=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],Si=[0,a(G),bi,11,bi,56,[0,a(I),[0,a(F),[0,a(B),0]]]],Tl=[0,a(Q),[0,a("montant_initial_base_troisi\xc3\xa8me_enfant_mayotte"),0]],To=[0,a(G),h9,11,h9,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Tm=[0,a(G),h9,11,h9,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Tp=[0,a(Q),[0,a("nombre_total_enfants"),0]],TA=[0,a(G),nM,11,nM,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Tq=[0,a(G),nM,11,nM,31,[0,a(I),[0,a(F),[0,a(B),0]]]],TB=[0,a(Q),[0,a("nombre_moyen_enfants"),0]],US=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],TC=[0,a(G),ba,11,ba,46,[0,a(I),[0,a(F),[0,a(B),0]]]],UT=[0,a(Q),[0,a("montant_initial_base_premier_enfant"),0]],U7=[0,a(G),cH,11,cH,28,[0,a(I),[0,a(F),[0,a(B),0]]]],UU=[0,a(G),cH,11,cH,28,[0,a(I),[0,a(F),[0,a(B),0]]]],U8=[0,a(Q),[0,a("droit_ouvert_base"),0]],Vq=[0,a(Q),[0,a(bC),0]],VI=[0,a(Q),[0,a(kH),0]],VT=[0,a(G),ej,11,ej,47,[0,a(I),[0,a(F),[0,a(B),0]]]],VJ=[0,a(G),ej,11,ej,47,[0,a(I),[0,a(F),[0,a(B),0]]]],VU=[0,a(Q),[0,a("montant_vers\xc3\xa9_forfaitaire_par_enfant"),0]],Wc=[0,a(G),du,11,du,56,[0,a(I),[0,a(F),[0,a(B),0]]]],VV=[0,a(G),du,11,du,56,[0,a(I),[0,a(F),[0,a(B),0]]]],Wd=[0,a(Q),[0,a("montant_initial_base_troisi\xc3\xa8me_enfant_et_plus"),0]],Xy=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],We=[0,a(G),a7,11,a7,47,[0,a(I),[0,a(F),[0,a(B),0]]]],Xz=[0,a(Q),[0,a("montant_initial_base_deuxi\xc3\xa8me_enfant"),0]],XE=[0,a(G),mw,11,mw,38,[0,a(I),[0,a(F),[0,a(B),0]]]],XA=[0,a(G),mw,11,mw,38,[0,a(I),[0,a(F),[0,a(B),0]]]],XF=[0,a(Q),[0,a("rapport_enfants_total_moyen"),0]],X_=[0,a(Q),[0,a(j2),0]],Yh=[0,a(G),gN,11,gN,36,[0,a(I),[0,a(F),[0,a(B),0]]]],X$=[0,a(G),gN,11,gN,36,[0,a(I),[0,a(F),[0,a(B),0]]]],Yi=[0,a(Q),[0,a("montant_vers\xc3\xa9_forfaitaire"),0]],Ys=[0,a(G),dH,11,dH,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Yj=[0,a(G),dH,11,dH,31,[0,a(I),[0,a(F),[0,a(B),0]]]],Yt=[0,a(Q),[0,a("montant_initial_base"),0]],YS=[0,a(Q),[0,a(jW),0]],Y9=[0,a(G),eO,11,eO,52,[0,a(I),[0,a(F),[0,a(B),0]]]],YT=[0,a(G),eO,11,eO,52,[0,a(I),[0,a(F),[0,a(B),0]]]],Y_=[0,a(Q),[0,a("montant_vers\xc3\xa9_compl\xc3\xa9ment_pour_forfaitaire"),0]],Zb=[0,a(G),kK,11,kK,43,[0,a(I),[0,a(F),[0,a(B),0]]]],Y$=[0,a(G),kK,11,kK,43,[0,a(I),[0,a(F),[0,a(B),0]]]],Zc=[0,a(Q),[0,a("montant_avec_garde_altern\xc3\xa9e_base"),0]],Zr=[0,a(Q),[0,a(j1),0]],Zv=[0,a(G),kJ,11,kJ,29,[0,a(I),[0,a(F),[0,a(B),0]]]],Zs=[0,a(G),kJ,11,kJ,29,[0,a(I),[0,a(F),[0,a(B),0]]]],Zw=[0,a(Q),[0,a("montant_vers\xc3\xa9_base"),0]],ZF=[0,a(G),is,11,is,35,[0,a(I),[0,a(F),[0,a(B),0]]]],Zx=[0,a(G),is,11,is,35,[0,a(I),[0,a(F),[0,a(B),0]]]],ZG=[0,a(Q),[0,a("montant_vers\xc3\xa9_majoration"),0]],ZJ=[0,a(G),mV,11,mV,58,[0,a(I),[0,a(F),[0,a(B),0]]]],ZH=[0,a(G),mV,11,mV,58,[0,a(I),[0,a(F),[0,a(B),0]]]],ZK=[0,a(Q),[0,a("montant_base_compl\xc3\xa9ment_pour_base_et_majoration"),0]],ZS=[0,a(G),ml,11,ml,59,[0,a(I),[0,a(F),[0,a(B),0]]]],ZL=[0,a(G),ml,11,ml,59,[0,a(I),[0,a(F),[0,a(B),0]]]],ZT=[0,a(Q),[0,a("montant_vers\xc3\xa9_compl\xc3\xa9ment_pour_base_et_majoration"),0]],ZX=[0,a(G),c4,10,c4,23,[0,a(I),[0,a(F),[0,a(B),0]]]],ZU=[0,a(G),c4,10,c4,23,[0,a(I),[0,a(F),[0,a(B),0]]]],ZY=[0,a(Q),[0,a("montant_vers\xc3\xa9"),0]],ZZ=[0,a(bQ),231,5,zh,6,[0,a(d7),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],PA=[0,a("examples/allocations_familiales/autres_codes.catala_fr"),24,5,24,63,[0,a("Article L821-3"),[0,a(zz),[0,a(D3),[0,a(xS),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]]]],PB=[0,a(G),57,10,57,22,[0,a(by),[0,a(F),[0,a(B),0]]]],Pw=[0,a(bQ),60,5,62,64,[0,a(gu),[0,a(gr),[0,a(d5),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],Px=[0,a(G),57,10,57,22,[0,a(by),[0,a(F),[0,a(B),0]]]],Pv=[0,a(bQ),49,5,50,50,[0,a(gu),[0,a(gr),[0,a(d5),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],Py=[0,a(G),57,10,57,22,[0,a(by),[0,a(F),[0,a(B),0]]]],Pz=[0,a(G),57,10,57,22,[0,a(by),[0,a(F),[0,a(B),0]]]],PC=[0,a(G),57,10,57,22,[0,a(by),[0,a(F),[0,a(B),0]]]],Pu=[0,a(G),57,10,57,22,[0,a(by),[0,a(F),[0,a(B),0]]]],PD=[0,a(G),57,10,57,22,[0,a(by),[0,a(F),[0,a(B),0]]]],Pt=[0,a(G),57,10,57,22,[0,a(by),[0,a(F),[0,a(B),0]]]],Pp=[0,a(bQ),68,5,71,57,[0,a(gu),[0,a(gr),[0,a(d5),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],Pq=[0,a(G),58,10,58,29,[0,a(by),[0,a(F),[0,a(B),0]]]],Po=[0,a(G),58,10,58,29,[0,a(by),[0,a(F),[0,a(B),0]]]],Pr=[0,a(G),58,10,58,29,[0,a(by),[0,a(F),[0,a(B),0]]]],Pn=[0,a(G),58,10,58,29,[0,a(by),[0,a(F),[0,a(B),0]]]],Pj=[0,a(dI),uz,18,uz,41,[0,a(w$),[0,a(eT),[0,a(gB),[0,a(dO),[0,a(c2),[0,a($),0]]]]]]],Ph=a(oE),Pi=a(nN),Pk=[0,a(G),59,11,59,27,[0,a(by),[0,a(F),[0,a(B),0]]]],Pg=[0,a(dI),31,14,31,30,[0,a(lK),[0,a(nE),[0,a(d5),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],Pe=a(oE),Pf=a(nN),O5=[0,0],O7=[1,0],O8=[2,0],O9=[3,0],O_=[4,0],O$=[5,0],O6=[0,a(bQ),357,5,Bo,30,[0,a(B8),[0,a(x3),[0,a(j6),[0,a(dO),[0,a(Z),[0,a($),0]]]]]]],Pa=[0,a(G),61,10,61,33,[0,a(by),[0,a(F),[0,a(B),0]]]],O4=[0,a(G),61,10,61,33,[0,a(by),[0,a(F),[0,a(B),0]]]],OY=[0,a(G),68,14,68,28,[0,a(by),[0,a(F),[0,a(B),0]]]],OU=[0,a(G),69,14,69,32,[0,a(by),[0,a(F),[0,a(B),0]]]],OQ=[0,a(dI),21,14,21,26,[0,a(lK),[0,a(nE),[0,a(d5),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],OR=[0,a(G),60,10,60,22,[0,a(by),[0,a(F),[0,a(B),0]]]],OP=[0,a(G),60,10,60,22,[0,a(by),[0,a(F),[0,a(B),0]]]],OS=[0,a(ck),[0,a(yE),0]],OV=[0,a(G),69,14,69,32,[0,a(by),[0,a(F),[0,a(B),0]]]],OW=[0,a(ck),[0,a(Ea),0]],OT=[0,a(G),69,14,69,32,[0,a(by),[0,a(F),[0,a(B),0]]]],OZ=[0,a(G),68,14,68,28,[0,a(by),[0,a(F),[0,a(B),0]]]],O0=[0,a(ck),[0,a(CT),0]],OX=[0,a(G),68,14,68,28,[0,a(by),[0,a(F),[0,a(B),0]]]],O1=[0,a(ck),[0,a(f6),[0,a(hk),0]]],O2=[0,a(ck),[0,a(f6),[0,a(hk),0]]],Pb=[0,a(G),61,10,61,33,[0,a(by),[0,a(F),[0,a(B),0]]]],O3=[0,a(G),61,10,61,33,[0,a(by),[0,a(F),[0,a(B),0]]]],Pc=[0,a(ck),[0,a(uU),0]],Pl=[0,a(G),59,11,59,27,[0,a(by),[0,a(F),[0,a(B),0]]]],Pd=[0,a(G),59,11,59,27,[0,a(by),[0,a(F),[0,a(B),0]]]],Pm=[0,a(ck),[0,a(zO),0]],Ps=[0,a(ck),[0,a(iQ),0]],PE=[0,a(ck),[0,a(de),0]],OL=[0,a(ew),28,5,29,34,[0,a(BK),[0,a(cb),0]]],OK=a(xg),OM=[0,a(ew),6,10,6,17,[0,a(cb),0]],OI=[0,a(ew),48,5,49,34,[0,a(Ab),[0,a(cb),0]]],OH=a(wU),OJ=[0,a(ew),6,10,6,17,[0,a(cb),0]],OF=[0,a(ew),64,5,65,34,[0,a(Bv),[0,a(cb),0]]],OE=a(Bj),OG=[0,a(ew),6,10,6,17,[0,a(cb),0]],OC=[0,a(ew),82,5,83,34,[0,a(wp),[0,a(cb),0]]],OB=a(Be),OD=[0,a(ew),6,10,6,17,[0,a(cb),0]],ON=[0,a(ew),6,10,6,17,[0,a(cb),0]],OA=[0,a(ew),6,10,6,17,[0,a(cb),0]],OO=[0,a(f2),[0,a(bK),0]],Oo=[6,0],Oq=[0,0],Or=[1,0],Os=[2,0],Ot=[3,0],Ou=[4,0],Ov=[5,0],Ow=[7,0],Op=[0,a(b0),29,5,38,6,[0,a(cz),[0,a(lJ),[0,a(aU),0]]]],On=a(wg),Ox=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],Ok=[8,0],Ol=[0,a(b0),47,5,49,6,[0,a(cz),[0,a(lJ),[0,a(aU),0]]]],Oj=a(xd),Om=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],N$=[6,0],Ob=[0,0],Oc=[1,0],Od=[2,0],Oe=[3,0],Of=[4,0],Og=[5,0],Oh=[7,0],Oa=[0,a(b0),68,5,77,6,[0,a(cz),[0,a(nB),[0,a(aU),0]]]],N_=a(Ai),Oi=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],N7=[8,0],N8=[0,a(b0),86,5,88,6,[0,a(cz),[0,a(nB),[0,a(aU),0]]]],N6=a(uJ),N9=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],NW=[6,0],NY=[0,0],NZ=[1,0],N0=[2,0],N1=[3,0],N2=[4,0],N3=[5,0],N4=[7,0],NX=[0,a(b0),du,5,bi,6,[0,a(cz),[0,a(lL),[0,a(aU),0]]]],NV=a(AU),N5=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],NS=[8,0],NT=[0,a(b0),cn,5,cy,6,[0,a(cz),[0,a(lL),[0,a(aU),0]]]],NR=a(DH),NU=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],NH=[6,0],NJ=[0,0],NK=[1,0],NL=[2,0],NM=[3,0],NN=[4,0],NO=[5,0],NP=[7,0],NI=[0,a(b0),eU,5,fF,6,[0,a(cz),[0,a(m$),[0,a(aU),0]]]],NG=a(A6),NQ=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],ND=[8,0],NE=[0,a(b0),qH,5,nG,6,[0,a(cz),[0,a(m$),[0,a(aU),0]]]],NC=a(wu),NF=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],Ns=[6,0],Nu=[0,0],Nv=[1,0],Nw=[2,0],Nx=[3,0],Ny=[4,0],Nz=[5,0],NA=[7,0],Nt=[0,a(b0),m2,5,iE,6,[0,a(na),[0,a(mA),[0,a(aU),0]]]],Nr=a(zg),NB=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],No=[8,0],Np=[0,a(b0),wA,5,x7,6,[0,a(na),[0,a(mA),[0,a(aU),0]]]],Nn=a(DG),Nq=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],Oy=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],Nm=[0,a(b0),11,10,11,22,[0,a(B),[0,a(aU),0]]],Oz=[0,a(hk),[0,a(zA),0]],Nj=[0,a(aW),12,14,12,25,[0,a(eL),[0,a(aX),0]]],Nf=[2,0],Ng=a(n),Nh=[1,0],Ni=a("-1"),Nk=[0,a(G),80,10,80,21,[0,a(I),[0,a(F),[0,a(B),0]]]],Ne=[0,a(G),80,10,80,21,[0,a(I),[0,a(F),[0,a(B),0]]]],Nl=[0,a(q7),[0,a("le_plus_\xc3\xa2g\xc3\xa9"),0]],Nb=[0,a(dI),78,14,78,41,[0,a(nw),[0,a(aI),[0,a(aL),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],Nc=[0,a(G),76,10,76,37,[0,a(I),[0,a(F),[0,a(B),0]]]],Na=[0,a(G),76,10,76,37,[0,a(I),[0,a(F),[0,a(B),0]]]],Nd=[0,a(qW),[0,a(eM),0]],M4=a(qx),M5=a(qL),M6=a(DZ),M7=a(qQ),M8=a(qR),M9=a(rp),M_=a(ri),M$=[0,a("Enfant"),0],MU=a(mk),MW=a(ok),MX=a(lY),MY=a(CG),MZ=a(yo),M0=a(oU),M1=a(Ck),M2=a(nc),M3=a(ow),MV=[0,a(Bf),0],ML=a(n$),MN=a(Q),MO=a(qJ),MP=a(nK),MQ=a(C2),MR=a(iU),MS=a(Bc),MT=a(ys),MM=[0,a(ER),0],MG=a("Compl\xc3\xa8te"),MI=a("Partag\xc3\xa9e"),MJ=a("Z\xc3\xa9ro"),MH=[0,a("PriseEnCompte"),0],MC=a(kj),ME=a(j9),MF=a(BB),MD=[0,a(Ce),0],Mw=a(Ax),My=a(Dd),Mz=a(jX),MA=a(Er),MB=a(yb),Mx=[0,a("PriseEnCharge"),0],$J=a(W),$j=a(mk),$k=a(ok),$l=a(vT),$m=a(lY),$n=a(ow),$o=a(El),$p=a(wM),$q=a(oU),$r=a(nc),$t=[7,0],$u=[5,0],$v=[4,0],$w=[6,0],$x=[8,0],$y=[2,0],$z=[3,0],$A=[1,0],$B=[0,0],$s=[0,[11,a(bd),[2,0,[11,a(A9),0]]],a(wj)],_4=a(vn),_5=a(xD),_6=a(nK),_7=a(DD),_8=a(iU),_9=a(Q),__=a(qk),_$=a(n$),$b=[0,0],$c=[2,0],$d=[1,0],$e=[5,0],$f=[6,0],$g=[3,0],$h=[7,0],$i=[4,0],$a=[0,[11,a(bd),[2,0,[11,a(De),0]]],a(ES)],_X=a(rO),_Y=a(kj),_Z=a(j9),_1=[1,0],_2=[0,0],_3=[2,0],_0=[0,[11,a(bd),[2,0,[11,a(xw),0]]],a(vY)],_M=a(jX),_N=a(qY),_O=a(qF),_P=a(rf),_Q=a(qC),_S=[4,0],_T=[3,0],_U=[0,0],_V=[1,0],_W=[2,0],_R=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'PriseEnCharge.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'PriseEnCharge.t'")],_K=[0,a(Bu),a(oN),a(f6),a(CP),a(EO),a(vs),a(wQ)],_L=[0,a(f6),a(vs),a(EO),a(wQ),a(oN),a(Bu),a(CP)],$R=a("AllocationsFamilialesLib"),boO=[0,a(fy),fa,14,fa,25,[0,a("Conseil d'\xc3\x89tat, 5\xc3\xa8me - 4\xc3\xa8me chambres r\xc3\xa9unies, 21/07/2017, 398563"),0]],boH=a(n),boI=a(n),boN=a(bZ),boJ=[0,a(a2),[0,a(bA),[0,a(ai),0]]],boK=[0,a(a2),[0,a(bA),0]],boL=[0,a(a2),[0,a(bA),[0,a(aj),0]]],boM=[0,a(a2),[0,a(bA),0]],boD=[0,a(d),qI,14,qI,63,[0,a(bb),[0,a(e),0]]],boz=[0,a(d),BF,14,BF,25,[0,a(bb),[0,a(e),0]]],bot=[0,a(d),iB,5,iB,70,[0,a(bb),[0,a(e),0]]],bop=[0,a(d),gq,14,gq,58,[0,a(bb),[0,a(e),0]]],bol=[0,a(d),hZ,14,hZ,54,[0,a(bb),[0,a(e),0]]],boh=[0,a(d),gm,14,gm,51,[0,a(bb),[0,a(e),0]]],bob=[0,a(d),hd,14,hd,59,[0,a(bb),[0,a(e),0]]],bn9=[0,a(d),ij,14,ij,38,[0,a(bb),[0,a(e),0]]],bn5=[0,a(d),h$,14,h$,34,[0,a(bb),[0,a(e),0]]],bn1=[0,a(d),ih,14,ih,31,[0,a(bb),[0,a(e),0]]],bnX=[0,a(d),z9,14,z9,48,[0,a(bb),[0,a(e),0]]],bnY=[0,a(d),nh,11,nh,45,[0,a(bb),[0,a(e),0]]],bnW=[0,a(d),nh,11,nh,45,[0,a(bb),[0,a(e),0]]],bnZ=[0,a(cM),[0,a("m\xc3\xa9nage_sans_enfants_garde_altern\xc3\xa9e"),0]],bn2=[0,a(d),ih,14,ih,31,[0,a(bb),[0,a(e),0]]],bn3=[0,a(cM),[0,a("calculette.m\xc3\xa9nage"),0]],bn0=[0,a(d),ih,14,ih,31,[0,a(bb),[0,a(e),0]]],bn6=[0,a(d),h$,14,h$,34,[0,a(bb),[0,a(e),0]]],bn7=[0,a(cM),[0,a("calculette.demandeur"),0]],bn4=[0,a(d),h$,14,h$,34,[0,a(bb),[0,a(e),0]]],bn_=[0,a(d),ij,14,ij,38,[0,a(bb),[0,a(e),0]]],bn$=[0,a(cM),[0,a("calculette.date_courante"),0]],bn8=[0,a(d),ij,14,ij,38,[0,a(bb),[0,a(e),0]]],boc=[0,a(d),hd,14,hd,59,[0,a(bb),[0,a(e),0]]],bod=[0,a(cM),[0,a("calculette.ressources_m\xc3\xa9nage_prises_en_compte"),0]],boa=[0,a(d),hd,14,hd,59,[0,a(bb),[0,a(e),0]]],boe=[0,a(cM),[0,a(Dc),[0,a(a2),0]]],bof=[0,a(cM),[0,a(Dc),[0,a(a2),0]]],boi=[0,a(d),gm,14,gm,51,[0,a(bb),[0,a(e),0]]],boj=[0,a(cM),[0,a("calculette_sans_garde_altern\xc3\xa9e.m\xc3\xa9nage"),0]],bog=[0,a(d),gm,14,gm,51,[0,a(bb),[0,a(e),0]]],bom=[0,a(d),hZ,14,hZ,54,[0,a(bb),[0,a(e),0]]],bon=[0,a(cM),[0,a("calculette_sans_garde_altern\xc3\xa9e.demandeur"),0]],bok=[0,a(d),hZ,14,hZ,54,[0,a(bb),[0,a(e),0]]],boq=[0,a(d),gq,14,gq,58,[0,a(bb),[0,a(e),0]]],bor=[0,a(cM),[0,a("calculette_sans_garde_altern\xc3\xa9e.date_courante"),0]],boo=[0,a(d),gq,14,gq,58,[0,a(bb),[0,a(e),0]]],bou=[0,a(d),iB,5,iB,70,[0,a(bb),[0,a(e),0]]],bov=[0,a(cM),[0,a("calculette_sans_garde_altern\xc3\xa9e.ressources_m\xc3\xa9nage_prises_en_compte"),0]],bos=[0,a(d),iB,5,iB,70,[0,a(bb),[0,a(e),0]]],bow=[0,a(cM),[0,a(wo),[0,a(a2),0]]],box=[0,a(cM),[0,a(wo),[0,a(a2),0]]],boA=[0,a(d),oM,10,oM,21,[0,a(bb),[0,a(e),0]]],boy=[0,a(d),oM,10,oM,21,[0,a(bb),[0,a(e),0]]],boB=[0,a(cM),[0,a(nX),0]],boE=[0,a(d),mb,11,mb,60,[0,a(bb),[0,a(e),0]]],boC=[0,a(d),mb,11,mb,60,[0,a(bb),[0,a(e),0]]],boF=[0,a(cM),[0,a(kt),0]],boP=[0,a(d),hi,10,hi,21,[0,a(bb),[0,a(e),0]]],boG=[0,a(d),hi,10,hi,21,[0,a(bb),[0,a(e),0]]],boQ=[0,a(cM),[0,a("aide_finale"),0]],bnS=[0,a(aB),rS,14,rS,33,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bnR=a(n),bnJ=[0,a(cO),[0,a(bA),[0,a(ai),0]]],bnK=[0,a(cO),[0,a(bA),0]],bnL=[0,a(cO),[0,a(bA),[0,a(aj),0]]],bnM=[0,a(cO),[0,a(bA),0]],bnN=[0,a(cP),[0,a(bA),[0,a(ai),0]]],bnO=[0,a(cP),[0,a(bA),0]],bnP=[0,a(cP),[0,a(bA),[0,a(aj),0]]],bnQ=[0,a(cP),[0,a(bA),0]],bnF=[0,a(aB),zv,14,zv,36,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bnx=[0,a(cP),[0,a(bA),[0,a(ai),0]]],bny=[0,a(cP),[0,a(bA),0]],bnz=[0,a(cP),[0,a(bA),[0,a(aj),0]]],bnA=[0,a(cP),[0,a(bA),0]],bnB=[0,a(cO),[0,a(bA),[0,a(ai),0]]],bnC=[0,a(cO),[0,a(bA),0]],bnD=[0,a(cO),[0,a(bA),[0,a(aj),0]]],bnE=[0,a(cO),[0,a(bA),0]],bnG=[0,a(d),m1,10,m1,32,[0,a(at),[0,a(e),0]]],bnw=[0,a(d),m1,10,m1,32,[0,a(at),[0,a(e),0]]],bnt=[0,a(aB),En,14,En,25,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bnp=[0,a(d),vu,14,vu,63,[0,a(at),[0,a(e),0]]],bnj=[0,a(d),ht,14,ht,62,[0,a(at),[0,a(e),0]]],bnf=[0,a(d),f0,14,f0,53,[0,a(at),[0,a(e),0]]],bnb=[0,a(d),hJ,5,hJ,65,[0,a(at),[0,a(e),0]]],bm9=[0,a(d),hM,14,hM,68,[0,a(at),[0,a(e),0]]],bm5=[0,a(d),jd,14,jd,66,[0,a(at),[0,a(e),0]]],bm1=[0,a(aB),hY,14,hY,58,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bm0=[0,0],bmW=[0,a(d),ic,14,ic,64,[0,a(at),[0,a(e),0]]],bmQ=[0,a(aB),jm,14,jm,50,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bmN=[2,0],bmO=[1,0],bmP=[2,0],bmJ=[0,a(d),jg,14,jg,54,[0,a(at),[0,a(e),0]]],bmF=[0,a(d),iM,14,iM,45,[0,a(at),[0,a(e),0]]],bmB=[0,a(d),hX,14,hX,66,[0,a(at),[0,a(e),0]]],bmx=[0,a(d),gw,14,gw,60,[0,a(at),[0,a(e),0]]],bmt=[0,a(d),iZ,14,iZ,58,[0,a(at),[0,a(e),0]]],bmp=[0,a(d),gH,14,gH,56,[0,a(at),[0,a(e),0]]],bmj=[0,a(d),iY,14,iY,67,[0,a(at),[0,a(e),0]]],bmf=[0,a(d),gG,14,gG,63,[0,a(at),[0,a(e),0]]],bmb=[0,a(d),iK,14,iK,60,[0,a(at),[0,a(e),0]]],bl7=[0,a(aB),im,5,im,74,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bl3=[0,a(d),hs,14,hs,55,[0,a(at),[0,a(e),0]]],blZ=[0,a(d),ix,14,ix,52,[0,a(at),[0,a(e),0]]],blV=[0,a(d),i$,14,i$,59,[0,a(at),[0,a(e),0]]],blW=[0,a(d),i$,14,i$,59,[0,a(at),[0,a(e),0]]],blX=[0,a(a2),[0,a("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.date_courante"),0]],blU=[0,a(d),i$,14,i$,59,[0,a(at),[0,a(e),0]]],bl0=[0,a(d),ix,14,ix,52,[0,a(at),[0,a(e),0]]],bl1=[0,a(a2),[0,a("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.m\xc3\xa9nage"),0]],blY=[0,a(d),ix,14,ix,52,[0,a(at),[0,a(e),0]]],bl4=[0,a(d),hs,14,hs,55,[0,a(at),[0,a(e),0]]],bl5=[0,a(a2),[0,a("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.demandeur"),0]],bl2=[0,a(d),hs,14,hs,55,[0,a(at),[0,a(e),0]]],bl8=[0,a(aB),im,5,im,74,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bl9=[0,a(a2),[0,a("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.b\xc3\xa9n\xc3\xa9ficie_aide_personnalis\xc3\xa9e_logement"),0]],bl6=[0,a(aB),im,5,im,74,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bl_=[0,a(a2),[0,a(uA),[0,a(b9),0]]],bl$=[0,a(a2),[0,a(uA),[0,a(b9),0]]],bmc=[0,a(d),iK,14,iK,60,[0,a(at),[0,a(e),0]]],bmd=[0,a(a2),[0,a("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.m\xc3\xa9nage"),0]],bma=[0,a(d),iK,14,iK,60,[0,a(at),[0,a(e),0]]],bmg=[0,a(d),gG,14,gG,63,[0,a(at),[0,a(e),0]]],bmh=[0,a(a2),[0,a("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.demandeur"),0]],bme=[0,a(d),gG,14,gG,63,[0,a(at),[0,a(e),0]]],bmk=[0,a(d),iY,14,iY,67,[0,a(at),[0,a(e),0]]],bml=[0,a(a2),[0,a("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.date_courante"),0]],bmi=[0,a(d),iY,14,iY,67,[0,a(at),[0,a(e),0]]],bmm=[0,a(a2),[0,a(Ct),[0,a(b1),0]]],bmn=[0,a(a2),[0,a(Ct),[0,a(b1),0]]],bmq=[0,a(d),gH,14,gH,56,[0,a(at),[0,a(e),0]]],bmr=[0,a(a2),[0,a("calcul_allocation_logement.mode_occupation"),0]],bmo=[0,a(d),gH,14,gH,56,[0,a(at),[0,a(e),0]]],bmu=[0,a(d),iZ,14,iZ,58,[0,a(at),[0,a(e),0]]],bmv=[0,a(a2),[0,a("calcul_allocation_logement.ressources_m\xc3\xa9nage_sans_arrondi"),0]],bms=[0,a(d),iZ,14,iZ,58,[0,a(at),[0,a(e),0]]],bmy=[0,a(d),gw,14,gw,60,[0,a(at),[0,a(e),0]]],bmz=[0,a(a2),[0,a("calcul_allocation_logement.situation_familiale"),0]],bmw=[0,a(d),gw,14,gw,60,[0,a(at),[0,a(e),0]]],bmC=[0,a(d),hX,14,hX,66,[0,a(at),[0,a(e),0]]],bmD=[0,a(a2),[0,a("calcul_allocation_logement.nombre_personnes_\xc3\xa0_charge"),0]],bmA=[0,a(d),hX,14,hX,66,[0,a(at),[0,a(e),0]]],bmG=[0,a(d),iM,14,iM,45,[0,a(at),[0,a(e),0]]],bmH=[0,a(a2),[0,a("calcul_allocation_logement.zone"),0]],bmE=[0,a(d),iM,14,iM,45,[0,a(at),[0,a(e),0]]],bmK=[0,a(d),jg,14,jg,54,[0,a(at),[0,a(e),0]]],bmL=[0,a(a2),[0,a("calcul_allocation_logement.date_courante"),0]],bmI=[0,a(d),jg,14,jg,54,[0,a(at),[0,a(e),0]]],bmR=[0,a(aB),jm,14,jm,50,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bmS=[0,a(a2),[0,a("calcul_allocation_logement.type_aide"),0]],bmM=[0,a(aB),jm,14,jm,50,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bmT=[0,a(a2),[0,a(Ds),[0,a(cO),0]]],bmU=[0,a(a2),[0,a(Ds),[0,a(cO),0]]],bmX=[0,a(d),ic,14,ic,64,[0,a(at),[0,a(e),0]]],bmY=[0,a(a2),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.mode_occupation"),0]],bmV=[0,a(d),ic,14,ic,64,[0,a(at),[0,a(e),0]]],bm2=[0,a(aB),hY,14,hY,58,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bm3=[0,a(a2),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.type_aide"),0]],bmZ=[0,a(aB),hY,14,hY,58,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bm6=[0,a(d),jd,14,jd,66,[0,a(at),[0,a(e),0]]],bm7=[0,a(a2),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.ressources_m\xc3\xa9nage_sans_arrondi"),0]],bm4=[0,a(d),jd,14,jd,66,[0,a(at),[0,a(e),0]]],bm_=[0,a(d),hM,14,hM,68,[0,a(at),[0,a(e),0]]],bm$=[0,a(a2),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.situation_familiale"),0]],bm8=[0,a(d),hM,14,hM,68,[0,a(at),[0,a(e),0]]],bnc=[0,a(d),hJ,5,hJ,65,[0,a(at),[0,a(e),0]]],bnd=[0,a(a2),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.nombre_personnes_\xc3\xa0_charge"),0]],bna=[0,a(d),hJ,5,hJ,65,[0,a(at),[0,a(e),0]]],bng=[0,a(d),f0,14,f0,53,[0,a(at),[0,a(e),0]]],bnh=[0,a(a2),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.zone"),0]],bne=[0,a(d),f0,14,f0,53,[0,a(at),[0,a(e),0]]],bnk=[0,a(d),ht,14,ht,62,[0,a(at),[0,a(e),0]]],bnl=[0,a(a2),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.date_courante"),0]],bni=[0,a(d),ht,14,ht,62,[0,a(at),[0,a(e),0]]],bnm=[0,a(a2),[0,a(yS),[0,a(cP),0]]],bnn=[0,a(a2),[0,a(yS),[0,a(cP),0]]],bnq=[0,a(d),jV,10,jV,59,[0,a(at),[0,a(e),0]]],bno=[0,a(d),jV,10,jV,59,[0,a(at),[0,a(e),0]]],bnr=[0,a(a2),[0,a(kt),0]],bnu=[0,a(d),nf,10,nf,21,[0,a(at),[0,a(e),0]]],bns=[0,a(d),nf,10,nf,21,[0,a(at),[0,a(e),0]]],bnv=[0,a(a2),[0,a(nX),0]],bnH=[0,a(a2),[0,a(bA),0]],bnT=[0,a(d),oP,10,oP,29,[0,a(at),[0,a(e),0]]],bnI=[0,a(d),oP,10,oP,29,[0,a(at),[0,a(e),0]]],bnU=[0,a(a2),[0,a(eV),0]],blR=[0,a(D),z8,14,z8,33,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],blN=[0,a(D),A_,14,A_,36,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],blO=[0,a(d),n8,10,n8,32,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],blM=[0,a(d),n8,10,n8,32,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],blJ=[0,a(D),wP,14,wP,36,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],blE=a(n),blF=a(n),blD=[0,a(D),y2,16,DA,39,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],blH=a(n),blI=a(n),blG=[0,a(D),1529,16,1532,39,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],blz=[0,a(O),88,14,88,44,[0,a(cE),[0,a(bR),[0,a(K),0]]]],blt=[0,0],blu=[1,0],blv=[1,0],blw=[1,0],blx=[0,0],bly=[1,0],blp=[0,a(D),yy,14,yy,31,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],blm=a(c0),bln=a(Bn),blo=a(qN),bli=[0,a(D),uL,14,uL,34,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],blj=[0,a(d),mD,11,mD,31,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],blh=[0,a(d),mD,11,mD,31,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],blk=[0,a(cO),[0,a(xf),0]],blq=[0,a(d),hU,10,hU,22,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],bll=[0,a(d),hU,10,hU,22,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],blr=[0,a(cO),[0,a(wL),0]],blA=[0,a(d),mr,11,mr,41,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],bls=[0,a(d),mr,11,mr,41,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],blB=[0,a(cO),[0,a(yD),0]],blK=[0,a(d),mI,11,mI,33,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],blC=[0,a(d),mI,11,mI,33,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],blL=[0,a(cO),[0,a(Ek),0]],blP=[0,a(cO),[0,a(bA),0]],blS=[0,a(d),oC,10,oC,29,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],blQ=[0,a(d),oC,10,oC,29,[0,a(bJ),[0,a(M),[0,a(y),[0,a(e),0]]]]],blT=[0,a(cO),[0,a(eV),0]],blc=[0,a(aB),zu,5,zu,73,[0,a("Article L841-3"),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],blb=[2,0],bld=[0,a(d),eJ,10,eJ,16,[0,a(aG),[0,a(i),[0,a(e),0]]]],bk$=[0,a(aB),1134,5,gm,28,[0,a("Article L841-4"),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bk_=[0,0],bla=[0,a(d),eJ,10,eJ,16,[0,a(aG),[0,a(i),[0,a(e),0]]]],ble=[0,a(d),eJ,10,eJ,16,[0,a(aG),[0,a(i),[0,a(e),0]]]],bk9=[0,a(aB),D2,14,D2,25,[0,a(dr),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bk5=[0,0],bk6=[0,0],bk7=[1,0],bk8=[2,0],bkV=a(n),bkW=[0,a(aB),999,5,1003,29,[0,a(ig),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bkX=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bkQ=a(v),bkO=a(v),bkP=a(n),bkR=[0,a(aB),976,5,987,12,[0,a(ig),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bkS=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bkI=[0,a(aQ),[0,a(fe),[0,a(ai),0]]],bkJ=[0,a(aQ),[0,a(fe),0]],bkK=[0,a(aQ),[0,a(fe),[0,a(aj),0]]],bkL=[0,a(aQ),[0,a(fe),0]],bkM=a(v),bkG=a(v),bkH=a(n),bkN=[0,a(aB),959,5,gy,72,[0,a(ig),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bkT=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bkU=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bkY=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bky=[2,0],bkE=[0,0],bkz=[0,a(cl),[0,a(de),[0,a(ai),0]]],bkA=[0,a(cl),[0,a(de),0]],bkB=[0,a(cl),[0,a(de),[0,a(aj),0]]],bkC=[0,a(cl),[0,a(de),0]],bkD=a(v),bkw=a(n),bkx=a(n),bkF=[0,a(aB),921,5,kA,29,[0,a(ig),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bkZ=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bko=[2,0],bku=[0,0],bkp=[0,a(cl),[0,a(de),[0,a(ai),0]]],bkq=[0,a(cl),[0,a(de),0]],bkr=[0,a(cl),[0,a(de),[0,a(aj),0]]],bks=[0,a(cl),[0,a(de),0]],bkt=a(v),bkm=a(v),bkn=a(n),bkv=[0,a(aB),889,5,910,11,[0,a(ig),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bk0=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bkh=[0,0],bki=[1,0],bkj=[3,0],bkk=[4,0],bkl=[0,a(aB),870,5,874,52,[0,a(ig),[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bk1=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bkg=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bkc=[0,a(aB),wZ,14,wZ,25,[0,a(bg),[0,a(b2),[0,a(w),[0,a(Z),[0,a(u),0]]]]]],bkb=[0,0],bka=[2,0],bj8=[0,a(d),hj,14,hj,56,[0,a(aG),[0,a(i),[0,a(e),0]]]],bj4=[0,a(d),Bq,14,Bq,63,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjY=[0,a(D),l$,9,l$,55,[0,a(n7),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bjZ=[0,a(D),l$,9,l$,55,[0,a(n7),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bj0=[0,a(b9),[0,a("\xc3\xa9ligibilit\xc3\xa9_commune.condition_logement_surface"),0]],bjV=[0,a(D),ms,9,ms,68,[0,a(n7),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bjW=[0,a(D),ms,9,ms,68,[0,a(n7),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bjX=[0,a(b9),[0,a("\xc3\xa9ligibilit\xc3\xa9_commune.condition_logement_r\xc3\xa9sidence_principale"),0]],bjS=[0,a(d),gp,14,gp,47,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjO=[0,a(d),i3,14,i3,43,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjK=[0,a(d),iT,14,iT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjB=[0,a(D),4303,5,4308,28,[0,a(ot),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bjC=[0,a(d),cT,11,cT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjA=[0,a(D),4286,5,4291,28,[0,a(ot),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bjD=[0,a(d),cT,11,cT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjz=[0,a(D),4269,5,4276,28,[0,a(ot),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bjE=[0,a(d),cT,11,cT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjF=[0,a(d),cT,11,cT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjy=[0,a(D),4239,5,4241,28,[0,a(ot),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bjG=[0,a(d),cT,11,cT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjx=[0,a(d),cT,11,cT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjr=[0,a(d),hl,14,hl,46,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjq=[6,0],bjm=[0,a(d),jj,14,jj,56,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjl=[1,0],bjh=[0,a(d),h3,14,h3,50,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjd=[0,a(D),yQ,14,yQ,28,[0,a("Article D841-1"),[0,a("Chapitre 1 : Champ d'application"),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]],bje=[0,a(d),nA,11,nA,25,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjc=[0,a(d),nA,11,nA,25,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjf=[0,a(b9),[0,a("dur\xc3\xa9e_l841_1_3"),0]],bji=[0,a(d),h3,14,h3,50,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjj=[0,a(b9),[0,a(wI),0]],bjg=[0,a(d),h3,14,h3,50,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjn=[0,a(d),jj,14,jj,56,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjo=[0,a(b9),[0,a(AQ),0]],bjk=[0,a(d),jj,14,jj,56,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjs=[0,a(d),hl,14,hl,46,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjt=[0,a(b9),[0,a(yt),0]],bjp=[0,a(d),hl,14,hl,46,[0,a(aG),[0,a(i),[0,a(e),0]]]],bju=[0,a(b9),[0,a(oz),[0,a(cl),0]]],bjv=[0,a(b9),[0,a(oz),[0,a(cl),0]]],bjH=[0,a(d),cT,11,cT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjw=[0,a(d),cT,11,cT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjI=[0,a(b9),[0,a("condition_accession_propri\xc3\xa9t\xc3\xa9"),0]],bjL=[0,a(d),iT,14,iT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjM=[0,a(b9),[0,a(vc),0]],bjJ=[0,a(d),iT,14,iT,40,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjP=[0,a(d),i3,14,i3,43,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjQ=[0,a(b9),[0,a(AO),0]],bjN=[0,a(d),i3,14,i3,43,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjT=[0,a(d),gp,14,gp,47,[0,a(aG),[0,a(i),[0,a(e),0]]]],bjU=[0,a(b9),[0,a(E8),0]],bjR=[0,a(d),gp,14,gp,47,[0,a(aG),[0,a(i),[0,a(e),0]]]],bj1=[0,a(b9),[0,a(or),[0,a(aQ),0]]],bj2=[0,a(b9),[0,a(or),[0,a(aQ),0]]],bj5=[0,a(d),fT,10,fT,59,[0,a(aG),[0,a(i),[0,a(e),0]]]],bj3=[0,a(d),fT,10,fT,59,[0,a(aG),[0,a(i),[0,a(e),0]]]],bj6=[0,a(b9),[0,a(kt),0]],bj9=[0,a(d),oD,10,oD,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bj7=[0,a(d),oD,10,oD,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bj_=[0,a(b9),[0,a(rQ),0]],bkd=[0,a(d),mZ,10,mZ,31,[0,a(aG),[0,a(i),[0,a(e),0]]]],bj$=[0,a(d),mZ,10,mZ,31,[0,a(aG),[0,a(i),[0,a(e),0]]]],bke=[0,a(b9),[0,a("\xc3\xa9ligibilit\xc3\xa9_dispositions_communes"),0]],bk2=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bkf=[0,a(d),bY,11,bY,52,[0,a(aG),[0,a(i),[0,a(e),0]]]],bk3=[0,a(b9),[0,a("\xc3\xa9ligibilit\xc3\xa9_allocation_logement_familiale"),0]],blf=[0,a(d),eJ,10,eJ,16,[0,a(aG),[0,a(i),[0,a(e),0]]]],bk4=[0,a(d),eJ,10,eJ,16,[0,a(aG),[0,a(i),[0,a(e),0]]]],blg=[0,a(b9),[0,a("\xc3\xa9ligibilit\xc3\xa9_l841_2"),0]],bi_=[0,a(aB),gz,5,593,36,[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]],bi$=[0,a(d),fV,10,fV,21,[0,a(aV),[0,a(i),[0,a(e),0]]]],bi9=[0,a(d),fV,10,fV,21,[0,a(aV),[0,a(i),[0,a(e),0]]]],bi5=[0,a(d),m5,14,m5,56,[0,a(aV),[0,a(i),[0,a(e),0]]]],bi1=[0,a(d),Af,14,Af,63,[0,a(aV),[0,a(i),[0,a(e),0]]]],biR=[0,a(D),3632,5,3637,30,[0,a("Article R832-21"),[0,a("Sous-Section 1 : Conditions d'assimilation des logements-foyers aux logements \xc3\xa0 usage locatif"),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],biS=[0,a(d),cj,11,cj,38,[0,a(aV),[0,a(i),[0,a(e),0]]]],biN=[0,a(b1),[0,a(j$),[0,a(ai),0]]],biO=[0,a(b1),[0,a(j$),0]],biP=[0,a(b1),[0,a(j$),[0,a(aj),0]]],biQ=[0,a(b1),[0,a(j$),0]],biM=[0,a(aB),kI,5,704,30,[0,a(l2),[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],biT=[0,a(d),cj,11,cj,38,[0,a(aV),[0,a(i),[0,a(e),0]]]],biL=[0,a(aB),X,5,kg,30,[0,a(l2),[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],biU=[0,a(d),cj,11,cj,38,[0,a(aV),[0,a(i),[0,a(e),0]]]],biK=[0,a(aB),j4,5,650,30,[0,a(l2),[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],biV=[0,a(d),cj,11,cj,38,[0,a(aV),[0,a(i),[0,a(e),0]]]],biG=[0,a(b1),[0,a(jU),[0,a(ai),0]]],biH=[0,a(b1),[0,a(jU),0]],biI=[0,a(b1),[0,a(jU),[0,a(aj),0]]],biJ=[0,a(b1),[0,a(jU),0]],biF=[0,a(aB),j7,5,623,30,[0,a(l2),[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],biW=[0,a(d),cj,11,cj,38,[0,a(aV),[0,a(i),[0,a(e),0]]]],biX=[0,a(d),cj,11,cj,38,[0,a(aV),[0,a(i),[0,a(e),0]]]],biE=[0,a(d),cj,11,cj,38,[0,a(aV),[0,a(i),[0,a(e),0]]]],biy=[0,a(d),ip,14,ip,47,[0,a(aV),[0,a(i),[0,a(e),0]]]],biu=[0,a(d),gn,14,gn,43,[0,a(aV),[0,a(i),[0,a(e),0]]]],biq=[0,a(d),hE,14,hE,40,[0,a(aV),[0,a(i),[0,a(e),0]]]],bij=[0,a(aB),kf,5,753,30,[0,a(qu),[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bik=[0,a(d),dw,11,dw,34,[0,a(aV),[0,a(i),[0,a(e),0]]]],bii=[0,a(aB),721,5,726,30,[0,a(qu),[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bil=[0,a(d),dw,11,dw,34,[0,a(aV),[0,a(i),[0,a(e),0]]]],bih=[0,a(aB),hm,31,hm,54,[0,a(qu),[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bim=[0,a(d),dw,11,dw,34,[0,a(aV),[0,a(i),[0,a(e),0]]]],big=[0,a(d),dw,11,dw,34,[0,a(aV),[0,a(i),[0,a(e),0]]]],bic=[0,a(d),fO,11,fO,41,[0,a(aV),[0,a(i),[0,a(e),0]]]],bid=[0,a(d),fO,11,fO,41,[0,a(aV),[0,a(i),[0,a(e),0]]]],bib=[0,a(d),fO,11,fO,41,[0,a(aV),[0,a(i),[0,a(e),0]]]],bh7=[0,a(D),2960,5,2963,46,[0,a("Article R832-7"),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bh8=[0,a(d),df,11,df,41,[0,a(aV),[0,a(i),[0,a(e),0]]]],bh6=[0,a(D),2925,5,2927,47,[0,a("Article R832-5"),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bh9=[0,a(d),df,11,df,41,[0,a(aV),[0,a(i),[0,a(e),0]]]],bh_=[0,a(d),df,11,df,41,[0,a(aV),[0,a(i),[0,a(e),0]]]],bh5=[0,a(d),df,11,df,41,[0,a(aV),[0,a(i),[0,a(e),0]]]],bh$=[0,a(d),df,11,df,41,[0,a(aV),[0,a(i),[0,a(e),0]]]],bh4=[0,a(d),df,11,df,41,[0,a(aV),[0,a(i),[0,a(e),0]]]],bia=[0,a(b1),[0,a(jU),0]],bie=[0,a(b1),[0,a(j$),0]],bin=[0,a(d),dw,11,dw,34,[0,a(aV),[0,a(i),[0,a(e),0]]]],bif=[0,a(d),dw,11,dw,34,[0,a(aV),[0,a(i),[0,a(e),0]]]],bio=[0,a(b1),[0,a("condition_logement_pr\xc3\xaat"),0]],bir=[0,a(d),hE,14,hE,40,[0,a(aV),[0,a(i),[0,a(e),0]]]],bis=[0,a(b1),[0,a(vc),0]],bip=[0,a(d),hE,14,hE,40,[0,a(aV),[0,a(i),[0,a(e),0]]]],biv=[0,a(d),gn,14,gn,43,[0,a(aV),[0,a(i),[0,a(e),0]]]],biw=[0,a(b1),[0,a(AO),0]],bit=[0,a(d),gn,14,gn,43,[0,a(aV),[0,a(i),[0,a(e),0]]]],biz=[0,a(d),ip,14,ip,47,[0,a(aV),[0,a(i),[0,a(e),0]]]],biA=[0,a(b1),[0,a(E8),0]],bix=[0,a(d),ip,14,ip,47,[0,a(aV),[0,a(i),[0,a(e),0]]]],biB=[0,a(b1),[0,a(or),[0,a(aQ),0]]],biC=[0,a(b1),[0,a(or),[0,a(aQ),0]]],biY=[0,a(d),cj,11,cj,38,[0,a(aV),[0,a(i),[0,a(e),0]]]],biD=[0,a(d),cj,11,cj,38,[0,a(aV),[0,a(i),[0,a(e),0]]]],biZ=[0,a(b1),[0,a("condition_logement_bailleur"),0]],bi2=[0,a(d),nW,10,nW,59,[0,a(aV),[0,a(i),[0,a(e),0]]]],bi0=[0,a(d),nW,10,nW,59,[0,a(aV),[0,a(i),[0,a(e),0]]]],bi3=[0,a(b1),[0,a(kt),0]],bi6=[0,a(d),hg,10,hg,52,[0,a(aV),[0,a(i),[0,a(e),0]]]],bi4=[0,a(d),hg,10,hg,52,[0,a(aV),[0,a(i),[0,a(e),0]]]],bi7=[0,a(b1),[0,a(rQ),0]],bja=[0,a(d),fV,10,fV,21,[0,a(aV),[0,a(i),[0,a(e),0]]]],bi8=[0,a(d),fV,10,fV,21,[0,a(aV),[0,a(i),[0,a(e),0]]]],bjb=[0,a(b1),[0,a(nX),0]],bh1=[0,a(D),zn,14,zn,40,[0,a("Article D823-22"),[0,a(lX),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bhW=[0,a(aB),d2,5,566,43,[0,a("Article L823-8"),[0,a(be),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],bhX=[0,a(d),f3,11,f3,31,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhV=[0,a(d),f3,11,f3,31,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhR=[0,a(O),xv,14,xv,29,[0,a("Article 45"),[0,a("Chapitre VIII : Prime de d\xc3\xa9m\xc3\xa9nagement"),[0,a(K),0]]]],bhO=a(v),bhK=a(v),bhI=a(Y),bhJ=a(n),bhL=a(qn),bhM=a(Y),bhN=a(n),bhQ=a(n),bhP=a("2.4"),bhD=[0,a(D),f5,6,c1,77,[0,a(qB),[0,a(lX),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bhE=[0,a(d),ep,11,ep,41,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhC=[0,a(d),ep,11,ep,41,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhw=[0,a(d),iF,14,iF,43,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhs=[0,a(d),iJ,14,iJ,39,[0,a(bp),[0,a(i),[0,a(e),0]]]],bho=[0,a(d),fL,14,fL,36,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhi=[0,a(d),fN,14,fN,65,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhc=a(v),bha=a(Y),bhb=a(n),bhd=[0,a(D),kl,5,2004,77,[0,a(qB),[0,a(lX),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bhe=[0,a(d),fS,11,fS,32,[0,a(bp),[0,a(i),[0,a(e),0]]]],bg$=[0,a(d),fS,11,fS,32,[0,a(bp),[0,a(i),[0,a(e),0]]]],bg7=[0,a(D),ab,14,ab,47,[0,a(qB),[0,a(lX),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bg8=[0,a(d),nD,11,nD,44,[0,a(bp),[0,a(i),[0,a(e),0]]]],bg6=[0,a(d),nD,11,nD,44,[0,a(bp),[0,a(i),[0,a(e),0]]]],bg9=[0,a(dg),[0,a("d\xc3\xa9lai_apr\xc3\xa8s_emm\xc3\xa9nagement_l823_8_2"),0]],bhf=[0,a(d),fS,11,fS,32,[0,a(bp),[0,a(i),[0,a(e),0]]]],bg_=[0,a(d),fS,11,fS,32,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhg=[0,a(dg),[0,a("condition_rang_enfant"),0]],bhj=[0,a(d),fN,14,fN,65,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhk=[0,a(dg),[0,a(C7),0]],bhh=[0,a(d),fN,14,fN,65,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhl=[0,a(dg),[0,a(mG),[0,a(f2),0]]],bhm=[0,a(dg),[0,a(mG),[0,a(f2),0]]],bhp=[0,a(d),fL,14,fL,36,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhq=[0,a(dg),[0,a("\xc3\xa9ligibilit\xc3\xa9_apl.m\xc3\xa9nage"),0]],bhn=[0,a(d),fL,14,fL,36,[0,a(bp),[0,a(i),[0,a(e),0]]]],bht=[0,a(d),iJ,14,iJ,39,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhu=[0,a(dg),[0,a("\xc3\xa9ligibilit\xc3\xa9_apl.demandeur"),0]],bhr=[0,a(d),iJ,14,iJ,39,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhx=[0,a(d),iF,14,iF,43,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhy=[0,a(dg),[0,a("\xc3\xa9ligibilit\xc3\xa9_apl.date_courante"),0]],bhv=[0,a(d),iF,14,iF,43,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhz=[0,a(dg),[0,a(AA),[0,a(aQ),0]]],bhA=[0,a(dg),[0,a(AA),[0,a(aQ),0]]],bhF=[0,a(d),ep,11,ep,41,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhB=[0,a(d),ep,11,ep,41,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhG=[0,a(dg),[0,a("condition_p\xc3\xa9riode_d\xc3\xa9m\xc3\xa9nagement"),0]],bhS=[0,a(d),my,11,my,26,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhH=[0,a(d),my,11,my,26,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhT=[0,a(dg),[0,a("plafond_d823_22"),0]],bhY=[0,a(d),f3,11,f3,31,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhU=[0,a(d),f3,11,f3,31,[0,a(bp),[0,a(i),[0,a(e),0]]]],bhZ=[0,a(dg),[0,a(AE),0]],bh2=[0,a(d),jh,10,jh,36,[0,a(bp),[0,a(i),[0,a(e),0]]]],bh0=[0,a(d),jh,10,jh,36,[0,a(bp),[0,a(i),[0,a(e),0]]]],bh3=[0,a(dg),[0,a("montant_prime_d\xc3\xa9m\xc3\xa9nagement"),0]],bg2=[0,a(D),yn,14,yn,33,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bgY=[0,a(D),DI,14,DI,36,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bgZ=[0,a(d),lW,10,lW,32,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bgX=[0,a(d),lW,10,lW,32,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bgU=[0,a(D),y4,14,y4,36,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bgS=a(n),bgT=a(n),bgR=[0,a(D),1432,16,1435,39,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bgN=[0,a(O),78,14,78,44,[0,a(cE),[0,a(bR),[0,a(K),0]]]],bgH=[0,0],bgI=[1,0],bgJ=[1,0],bgK=[1,0],bgL=[0,0],bgM=[1,0],bgD=[0,a(D),Dt,14,Dt,31,[0,a(rz),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],bgA=a(c0),bgB=a(Bn),bgC=a(qN),bgw=[0,a(D),BI,14,BI,34,[0,a(d3),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bgx=[0,a(d),kf,11,kf,31,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bgv=[0,a(d),kf,11,kf,31,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bgy=[0,a(cP),[0,a(xf),0]],bgE=[0,a(d),mQ,10,mQ,22,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bgz=[0,a(d),mQ,10,mQ,22,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bgF=[0,a(cP),[0,a(wL),0]],bgO=[0,a(d),n4,11,n4,41,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bgG=[0,a(d),n4,11,n4,41,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bgP=[0,a(cP),[0,a(yD),0]],bgV=[0,a(d),mP,11,mP,33,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bgQ=[0,a(d),mP,11,mP,33,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bgW=[0,a(cP),[0,a(Ek),0]],bg0=[0,a(cP),[0,a(bA),0]],bg3=[0,a(d),mK,10,mK,29,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bg1=[0,a(d),mK,10,mK,29,[0,a(bJ),[0,a(s),[0,a(i),[0,a(e),0]]]]],bg4=[0,a(cP),[0,a(eV),0]],bgs=[0,a(D),wl,14,wl,36,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bgn=[0,a(U),[0,a(bE),[0,a(ai),0]]],bgo=[0,a(U),[0,a(bE),0]],bgp=[0,a(U),[0,a(bE),[0,a(aj),0]]],bgq=[0,a(U),[0,a(bE),0]],bgr=a(n),bgt=[0,a(d),lV,10,lV,25,[0,a(C),[0,a(y),[0,a(e),0]]]],bgm=[0,a(d),lV,10,lV,25,[0,a(C),[0,a(y),[0,a(e),0]]]],bgj=[0,a(D),Co,14,Co,36,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bf_=[0,a(U),[0,a(ei),[0,a(ai),0]]],bf$=[0,a(U),[0,a(ei),0]],bga=[0,a(U),[0,a(ei),[0,a(aj),0]]],bgb=[0,a(U),[0,a(ei),0]],bgc=[0,a(bh),[0,a(bK),[0,a(ai),0]]],bgd=[0,a(bh),[0,a(bK),0]],bge=[0,a(bh),[0,a(bK),[0,a(aj),0]]],bgf=[0,a(bh),[0,a(bK),0]],bgg=a(kM),bgh=a(n),bgi=a(n),bgk=[0,a(d),mq,10,mq,40,[0,a(C),[0,a(y),[0,a(e),0]]]],bf9=[0,a(d),mq,10,mq,40,[0,a(C),[0,a(y),[0,a(e),0]]]],bf6=[0,a(D),zy,14,zy,36,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfX=[0,a(U),[0,a(bD),[0,a(ai),0]]],bfY=[0,a(U),[0,a(bD),0]],bfZ=[0,a(U),[0,a(bD),[0,a(aj),0]]],bf0=[0,a(U),[0,a(bD),0]],bf1=[0,a(U),[0,a(eG),[0,a(ai),0]]],bf2=[0,a(U),[0,a(eG),0]],bf3=[0,a(U),[0,a(eG),[0,a(aj),0]]],bf4=[0,a(U),[0,a(eG),0]],bf5=a(n),bf7=[0,a(d),og,10,og,32,[0,a(C),[0,a(y),[0,a(e),0]]]],bfW=[0,a(d),og,10,og,32,[0,a(C),[0,a(y),[0,a(e),0]]]],bfT=[0,a(D),zb,14,zb,33,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfP=[0,a(D),Ac,14,Ac,47,[0,a(oA),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfK=[0,a(U),[0,a(db),[0,a(ai),0]]],bfL=[0,a(U),[0,a(db),0]],bfM=[0,a(U),[0,a(db),[0,a(aj),0]]],bfN=[0,a(U),[0,a(db),0]],bfO=a(n),bfQ=[0,a(d),ns,11,ns,44,[0,a(C),[0,a(y),[0,a(e),0]]]],bfJ=[0,a(d),ns,11,ns,44,[0,a(C),[0,a(y),[0,a(e),0]]]],bfG=[0,a(D),D9,14,D9,41,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfC=[0,a(D),xO,14,xO,33,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfy=[0,a(D),Ay,14,Ay,33,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bft=[0,a(D),4610,7,4613,45,[0,a(oA),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfu=[0,a(d),gO,11,gO,47,[0,a(C),[0,a(y),[0,a(e),0]]]],bfs=[0,a(D),ED,14,ED,50,[0,a(oA),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfm=[0,a(D),nz,14,nz,62,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfn=[0,a(D),nz,14,nz,62,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfo=[0,a(U),[0,a("calcul_apl_logement_foyer.n_nombre_parts_d832_25"),0]],bfj=[0,a(D),om,14,om,61,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfk=[0,a(D),om,14,om,61,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bfl=[0,a(U),[0,a(Do),0]],bfg=[0,a(d),hC,14,hC,49,[0,a(C),[0,a(y),[0,a(e),0]]]],bff=a(n),bfb=[0,a(d),hO,14,hO,53,[0,a(C),[0,a(y),[0,a(e),0]]]],be9=[0,a(d),iW,14,iW,44,[0,a(C),[0,a(y),[0,a(e),0]]]],be5=[0,a(d),ib,14,ib,70,[0,a(C),[0,a(y),[0,a(e),0]]]],be1=[0,a(d),fY,14,fY,65,[0,a(C),[0,a(y),[0,a(e),0]]]],beX=[0,a(d),ji,14,ji,67,[0,a(C),[0,a(y),[0,a(e),0]]]],beT=[0,a(d),iv,14,iv,61,[0,a(C),[0,a(y),[0,a(e),0]]]],beP=[0,a(d),jp,14,jp,59,[0,a(C),[0,a(y),[0,a(e),0]]]],beO=[3,0],beI=[0,a(D),hq,14,hq,70,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],beE=[0,a(D),h2,14,h2,69,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],beA=[0,a(D),hz,14,hz,75,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bev=[0,a(D),x8,5,x8,44,[0,a(A8),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],ben=[0,a(U),[0,a(dy),[0,a(ai),0]]],beo=[0,a(U),[0,a(dy),0]],bep=[0,a(U),[0,a(dy),[0,a(aj),0]]],beq=[0,a(U),[0,a(dy),0]],ber=[0,a(U),[0,a(dy),[0,a(ai),0]]],bes=[0,a(U),[0,a(dy),0]],bet=[0,a(U),[0,a(dy),[0,a(aj),0]]],beu=[0,a(U),[0,a(dy),0]],bew=[0,a(d),hW,11,hW,36,[0,a(C),[0,a(y),[0,a(e),0]]]],bem=[0,a(D),B1,14,B1,39,[0,a(A8),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bei=[0,a(U),[0,a(dy),[0,a(ai),0]]],bej=[0,a(U),[0,a(dy),0]],bek=[0,a(U),[0,a(dy),[0,a(aj),0]]],bel=[0,a(U),[0,a(dy),0]],bed=[0,a(D),Em,5,Em,28,[0,a(m3),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bee=[0,a(d),iP,10,iP,15,[0,a(C),[0,a(y),[0,a(e),0]]]],bec=[0,a(D),yk,14,yk,41,[0,a(m3),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bd$=a(c0),bea=a(qN),beb=a("4999"),bd4=[0,a(aJ),fU,24,fU,56,[0,a(od),[0,a(bv),[0,a(aK),0]]]],bdV=a(dc),bdW=[0,a(U),[0,a(b6),[0,a(ai),0]]],bdX=[0,a(U),[0,a(b6),0]],bdY=[0,a(U),[0,a(b6),[0,a(aj),0]]],bdZ=[0,a(U),[0,a(b6),0]],bd0=[0,a(U),[0,a(b6),[0,a(ai),0]]],bd1=[0,a(U),[0,a(b6),0]],bd2=[0,a(U),[0,a(b6),[0,a(aj),0]]],bd3=[0,a(U),[0,a(b6),0]],bd5=[0,a(d),eQ,10,eQ,26,[0,a(C),[0,a(y),[0,a(e),0]]]],bdU=[0,a(O),Dj,24,Dj,56,[0,a(od),[0,a(bk),[0,a(K),0]]]],bdL=a(dc),bdM=[0,a(U),[0,a(b6),[0,a(ai),0]]],bdN=[0,a(U),[0,a(b6),0]],bdO=[0,a(U),[0,a(b6),[0,a(aj),0]]],bdP=[0,a(U),[0,a(b6),0]],bdQ=[0,a(U),[0,a(b6),[0,a(ai),0]]],bdR=[0,a(U),[0,a(b6),0]],bdS=[0,a(U),[0,a(b6),[0,a(aj),0]]],bdT=[0,a(U),[0,a(b6),0]],bd6=[0,a(d),eQ,10,eQ,26,[0,a(C),[0,a(y),[0,a(e),0]]]],bd7=[0,a(d),eQ,10,eQ,26,[0,a(C),[0,a(y),[0,a(e),0]]]],bdK=[0,a(O),xC,14,xC,46,[0,a(bP),[0,a(bk),[0,a(K),0]]]],bdG=[0,a(U),[0,a(b6),[0,a(ai),0]]],bdH=[0,a(U),[0,a(b6),0]],bdI=[0,a(U),[0,a(b6),[0,a(aj),0]]],bdJ=[0,a(U),[0,a(b6),0]],bd8=[0,a(d),eQ,10,eQ,26,[0,a(C),[0,a(y),[0,a(e),0]]]],bdF=[0,a(d),eQ,10,eQ,26,[0,a(C),[0,a(y),[0,a(e),0]]]],bdC=[0,a(D),vZ,15,vZ,37,[0,a(oA),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bdD=[0,a(d),mE,11,mE,33,[0,a(C),[0,a(y),[0,a(e),0]]]],bdB=[0,a(d),mE,11,mE,33,[0,a(C),[0,a(y),[0,a(e),0]]]],bdx=[0,a(D),4635,6,4641,6,[0,a(m3),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bdy=[0,a(d),fP,11,fP,42,[0,a(C),[0,a(y),[0,a(e),0]]]],bdv=[0,a(D),4653,5,4654,59,[0,a(m3),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],bdw=[0,a(d),fP,11,fP,42,[0,a(C),[0,a(y),[0,a(e),0]]]],bdq=[0,a(O),yW,5,yW,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],bcG=a(n),bcH=a("158700"),bcI=a("191300"),bcJ=a(v),bcK=a("205500"),bcL=a(T),bcM=a("211300"),bcN=a(Y),bcO=a("217100"),bcP=a(aa),bcQ=a("222900"),bcR=a(N),bcS=a(zD),bcT=a(N),bcU=a("19800"),bcV=a(zD),bcW=a(n),bcX=a("139300"),bcY=a("170600"),bcZ=a(v),bc0=a("184700"),bc1=a(T),bc2=a("191200"),bc3=a(Y),bc4=a(yU),bc5=a(aa),bc6=a("204200"),bc7=a(N),bc8=a(v2),bc9=a(N),bc_=a(r5),bc$=a(v2),bda=a(n),bdb=a("130600"),bdc=a("158400"),bdd=a(v),bde=a("172600"),bdf=a(T),bdg=a(C_),bdh=a(Y),bdi=a("187000"),bdj=a(aa),bdk=a("194200"),bdl=a(N),bdm=a(rs),bdn=a(N),bdo=a("18200"),bdp=a(rs),bdr=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],bcE=[0,a(O),vg,5,vg,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],bbU=a(n),bbV=a("160400"),bbW=a("193400"),bbX=a(v),bbY=a("207800"),bbZ=a(T),bb0=a("213700"),bb1=a(Y),bb2=a("219600"),bb3=a(aa),bb4=a(ya),bb5=a(N),bb6=a(n0),bb7=a(N),bb8=a("20000"),bb9=a(n0),bb_=a(n),bb$=a(CV),bca=a(Da),bcb=a(v),bcc=a("186700"),bcd=a(T),bce=a("193300"),bcf=a(Y),bcg=a(qO),bch=a(aa),bci=a("206500"),bcj=a(N),bck=a(wy),bcl=a(N),bcm=a(yZ),bcn=a(wy),bco=a(n),bcp=a(AT),bcq=a(qX),bcr=a(v),bcs=a("174500"),bct=a(T),bcu=a(xh),bcv=a(Y),bcw=a("189100"),bcx=a(aa),bcy=a("196400"),bcz=a(N),bcA=a(uW),bcB=a(N),bcC=a("18400"),bcD=a(uW),bcF=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],bbS=[0,a(O),u9,5,u9,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],ba8=a(n),ba9=a("163300"),ba_=a("196900"),ba$=a(v),bba=a("211600"),bbb=a(T),bbc=a(v8),bbd=a(Y),bbe=a("223600"),bbf=a(aa),bbg=a("229600"),bbh=a(N),bbi=a(A4),bbj=a(N),bbk=a("20400"),bbl=a(A4),bbm=a(n),bbn=a("143300"),bbo=a("175600"),bbp=a(v),bbq=a("190100"),bbr=a(T),bbs=a("196600"),bbt=a(Y),bbu=a("203500"),bbv=a(aa),bbw=a("210200"),bbx=a(N),bby=a(DT),bbz=a(N),bbA=a("19600"),bbB=a(DT),bbC=a(n),bbD=a("134400"),bbE=a(xn),bbF=a(v),bbG=a("177700"),bbH=a(T),bbI=a("185100"),bbJ=a(Y),bbK=a(v9),bbL=a(aa),bbM=a(qO),bbN=a(N),bbO=a(EQ),bbP=a(N),bbQ=a("18700"),bbR=a(EQ),bbT=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],ba6=[0,a(O),wT,5,wT,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],bak=a(n),bal=a("167200"),bam=a("201600"),ban=a(v),bao=a("216700"),bap=a(T),baq=a("222800"),bar=a(Y),bas=a("229000"),bat=a(aa),bau=a("235100"),bav=a(N),baw=a(EL),bax=a(N),bay=a(vi),baz=a(EL),baA=a(n),baB=a("146700"),baC=a(C_),baD=a(v),baE=a("194700"),baF=a(T),baG=a("201500"),baH=a(Y),baI=a("208400"),baJ=a(aa),baK=a("215200"),baL=a(N),baM=a(n0),baN=a(N),baO=a(A0),baP=a(n0),baQ=a(n),baR=a("137600"),baS=a("166900"),baT=a(v),baU=a("182000"),baV=a(T),baW=a("189500"),baX=a(Y),baY=a("197100"),baZ=a(aa),ba0=a(Cr),ba1=a(N),ba2=a(AH),ba3=a(N),ba4=a(r5),ba5=a(AH),ba7=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],bai=[0,a(O),BN,5,BN,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a$y=a(n),a$z=a("167400"),a$A=a("201800"),a$B=a(v),a$C=a("216900"),a$D=a(T),a$E=a("223000"),a$F=a(Y),a$G=a("229200"),a$H=a(aa),a$I=a("235300"),a$J=a(N),a$K=a(zZ),a$L=a(N),a$M=a(vi),a$N=a(zZ),a$O=a(n),a$P=a("146800"),a$Q=a("180000"),a$R=a(v),a$S=a("194900"),a$T=a(T),a$U=a(Eh),a$V=a(Y),a$W=a(rs),a$X=a(aa),a$Y=a("215400"),a$Z=a(N),a$0=a(BQ),a$1=a(N),a$2=a(A0),a$3=a(BQ),a$4=a(n),a$5=a("137700"),a$6=a("167100"),a$7=a(v),a$8=a("182200"),a$9=a(T),a$_=a("189700"),a$$=a(Y),baa=a("197300"),bab=a(aa),bac=a("204900"),bad=a(N),bae=a(C6),baf=a(N),bag=a(r5),bah=a(C6),baj=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a$w=[0,a(O),zI,5,zI,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a_M=a(n),a_N=a("169100"),a_O=a("203800"),a_P=a(v),a_Q=a("219100"),a_R=a(T),a_S=a("225200"),a_T=a(Y),a_U=a("231500"),a_V=a(aa),a_W=a("237700"),a_X=a(N),a_Y=a(l7),a_Z=a(N),a_0=a("21100"),a_1=a(l7),a_2=a(n),a_3=a("148300"),a_4=a(xh),a_5=a(v),a_6=a("196800"),a_7=a(T),a_8=a("203700"),a_9=a(Y),a__=a("210700"),a_$=a(aa),a$a=a(v8),a$b=a(N),a$c=a(wD),a$d=a(N),a$e=a("20300"),a$f=a(wD),a$g=a(n),a$h=a("139100"),a$i=a("168800"),a$j=a(v),a$k=a(rt),a$l=a(T),a$m=a("191600"),a$n=a(Y),a$o=a("199300"),a$p=a(aa),a$q=a("206900"),a$r=a(N),a$s=a(Aq),a$t=a(N),a$u=a(yZ),a$v=a(Aq),a$x=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a_K=[0,a(O),Eo,5,Eo,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a90=a(n),a91=a("171100"),a92=a("206200"),a93=a(v),a94=a("221700"),a95=a(T),a96=a("227900"),a97=a(Y),a98=a("234300"),a99=a(aa),a9_=a("240600"),a9$=a(N),a_a=a(zt),a_b=a(N),a_c=a("21400"),a_d=a(zt),a_e=a(n),a_f=a("150100"),a_g=a(rt),a_h=a(v),a_i=a("199200"),a_j=a(T),a_k=a("206100"),a_l=a(Y),a_m=a("213200"),a_n=a(aa),a_o=a("220200"),a_p=a(N),a_q=a(yF),a_r=a(N),a_s=a("20500"),a_t=a(yF),a_u=a(n),a_v=a(CV),a_w=a("170800"),a_x=a(v),a_y=a("186200"),a_z=a(T),a_A=a("193900"),a_B=a(Y),a_C=a(Eh),a_D=a(aa),a_E=a("209400"),a_F=a(N),a_G=a(Ap),a_H=a(N),a_I=a("19500"),a_J=a(Ap),a_L=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a9Y=[0,a(O),Bl,5,Bl,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a9c=a(n),a9d=a("26084"),a9e=a("31435"),a9f=a(v),a9g=a("33798"),a9h=a(T),a9i=a("34743"),a9j=a(Y),a9k=a("35719"),a9l=a(aa),a9m=a("36679"),a9n=a(N),a9o=a(yK),a9p=a(N),a9q=a("3262"),a9r=a(yK),a9s=a(n),a9t=a("22883"),a9u=a("28051"),a9v=a(v),a9w=a("30368"),a9x=a(T),a9y=a("31420"),a9z=a(Y),a9A=a("32502"),a9B=a(aa),a9C=a("33569"),a9D=a(N),a9E=a(Ew),a9F=a(N),a9G=a("3125"),a9H=a(Ew),a9I=a(n),a9J=a("21465"),a9K=a("26038"),a9L=a(v),a9M=a("28386"),a9N=a(T),a9O=a("29560"),a9P=a(Y),a9Q=a("30749"),a9R=a(aa),a9S=a("31923"),a9T=a(N),a9U=a(DV),a9V=a(N),a9W=a("2973"),a9X=a(DV),a9Z=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a9a=[0,a(O),D$,5,D$,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a8q=a(n),a8r=a("26397"),a8s=a("31812"),a8t=a(v),a8u=a("34204"),a8v=a(T),a8w=a("35160"),a8x=a(Y),a8y=a("36148"),a8z=a(aa),a8A=a("37119"),a8B=a(N),a8C=a(y8),a8D=a(N),a8E=a("3301"),a8F=a(y8),a8G=a(n),a8H=a("23158"),a8I=a("28388"),a8J=a(v),a8K=a("30732"),a8L=a(T),a8M=a(mJ),a8N=a(Y),a8O=a("32892"),a8P=a(aa),a8Q=a("33972"),a8R=a(N),a8S=a(DK),a8T=a(N),a8U=a("3163"),a8V=a(DK),a8W=a(n),a8X=a("21723"),a8Y=a("26350"),a8Z=a(v),a80=a("28727"),a81=a(T),a82=a("29915"),a83=a(Y),a84=a("31118"),a85=a(aa),a86=a("32306"),a87=a(N),a88=a(wY),a89=a(N),a8_=a("3009"),a8$=a(wY),a9b=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a8o=[0,a(O),D5,5,D5,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a7E=a(n),a7F=a(Fd),a7G=a("32194"),a7H=a(v),a7I=a("34614"),a7J=a(T),a7K=a("35582"),a7L=a(Y),a7M=a("36582"),a7N=a(aa),a7O=a("37564"),a7P=a(N),a7Q=a(wm),a7R=a(N),a7S=a("3341"),a7T=a(wm),a7U=a(n),a7V=a("23436"),a7W=a("28729"),a7X=a(v),a7Y=a("31101"),a7Z=a(T),a70=a("32179"),a71=a(Y),a72=a("33287"),a73=a(aa),a74=a("34380"),a75=a(N),a76=a(Ao),a77=a(N),a78=a("3201"),a79=a(Ao),a7_=a(n),a7$=a("21984"),a8a=a("26666"),a8b=a(v),a8c=a("29072"),a8d=a(T),a8e=a("30274"),a8f=a(Y),a8g=a("31491"),a8h=a(aa),a8i=a("32694"),a8j=a(N),a8k=a(A7),a8l=a(N),a8m=a("3045"),a8n=a(A7),a8p=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a7C=[0,a(O),yv,5,yv,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a6S=a(n),a6T=a("27195"),a6U=a("32773"),a6V=a(v),a6W=a("35237"),a6X=a(T),a6Y=a("36222"),a6Z=a(Y),a60=a("37240"),a61=a(aa),a62=a("38240"),a63=a(N),a64=a(A3),a65=a(N),a66=a("3401"),a67=a(A3),a68=a(n),a69=a("23858"),a6_=a("29246"),a6$=a(v),a7a=a("31661"),a7b=a(T),a7c=a("32758"),a7d=a(Y),a7e=a("33886"),a7f=a(aa),a7g=a("34999"),a7h=a(N),a7i=a(y$),a7j=a(N),a7k=a("3259"),a7l=a(y$),a7m=a(n),a7n=a("22380"),a7o=a("27146"),a7p=a(v),a7q=a("29595"),a7r=a(T),a7s=a("30819"),a7t=a(Y),a7u=a("32058"),a7v=a(aa),a7w=a("33282"),a7x=a(N),a7y=a(Ad),a7z=a(N),a7A=a("3100"),a7B=a(Ad),a7D=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a6Q=[0,a(O),zl,5,zl,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a56=a(n),a57=a("27956"),a58=a("33691"),a59=a(v),a5_=a("36224"),a5$=a(T),a6a=a("37236"),a6b=a(Y),a6c=a("38283"),a6d=a(aa),a6e=a("39311"),a6f=a(N),a6g=a(ye),a6h=a(N),a6i=a("3496"),a6j=a(ye),a6k=a(n),a6l=a("24526"),a6m=a("30065"),a6n=a(v),a6o=a("32548"),a6p=a(T),a6q=a("33675"),a6r=a(Y),a6s=a(EF),a6t=a(aa),a6u=a("35979"),a6v=a(N),a6w=a(Am),a6x=a(N),a6y=a("3350"),a6z=a(Am),a6A=a(n),a6B=a("23007"),a6C=a("27906"),a6D=a(v),a6E=a("30424"),a6F=a(T),a6G=a("31682"),a6H=a(Y),a6I=a(ym),a6J=a(aa),a6K=a("34214"),a6L=a(N),a6M=a(DF),a6N=a(N),a6O=a("3187"),a6P=a(DF),a6R=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a54=[0,a(O),wf,5,wf,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a5i=a(n),a5j=a("28728"),a5k=a("34621"),a5l=a(v),a5m=a("37224"),a5n=a(T),a5o=a("38264"),a5p=a(Y),a5q=a(xR),a5r=a(aa),a5s=a("40396"),a5t=a(N),a5u=a(xr),a5v=a(N),a5w=a("3592"),a5x=a(xr),a5y=a(n),a5z=a("25203"),a5A=a("30895"),a5B=a(v),a5C=a("33446"),a5D=a(T),a5E=a("34604"),a5F=a(Y),a5G=a("35796"),a5H=a(aa),a5I=a("36972"),a5J=a(N),a5K=a(Eq),a5L=a(N),a5M=a("3442"),a5N=a(Eq),a5O=a(n),a5P=a("23642"),a5Q=a("28676"),a5R=a(v),a5S=a(w5),a5T=a(T),a5U=a("32556"),a5V=a(Y),a5W=a("33866"),a5X=a(aa),a5Y=a("35158"),a5Z=a(N),a50=a(vV),a51=a(N),a52=a("3275"),a53=a(vV),a55=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a5g=[0,a(O),xz,5,xz,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a4w=a(n),a4x=a("29575"),a4y=a("35642"),a4z=a(v),a4A=a("38322"),a4B=a(T),a4C=a("39393"),a4D=a(Y),a4E=a("40501"),a4F=a(aa),a4G=a("41588"),a4H=a(N),a4I=a(CK),a4J=a(N),a4K=a("3698"),a4L=a(CK),a4M=a(n),a4N=a("25946"),a4O=a("31806"),a4P=a(v),a4Q=a("34433"),a4R=a(T),a4S=a("35625"),a4T=a(Y),a4U=a("36852"),a4V=a(aa),a4W=a("38063"),a4X=a(N),a4Y=a(z_),a4Z=a(N),a40=a("3544"),a41=a(z_),a42=a(n),a43=a("24339"),a44=a("29522"),a45=a(v),a46=a("32186"),a47=a(T),a48=a("33516"),a49=a(Y),a4_=a(EF),a4$=a(aa),a5a=a("36195"),a5b=a(N),a5c=a(Dv),a5d=a(N),a5e=a("3372"),a5f=a(Dv),a5h=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a4u=[0,a(O),EN,5,EN,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a3K=a(n),a3L=a("29670"),a3M=a("35757"),a3N=a(v),a3O=a("38445"),a3P=a(T),a3Q=a("39519"),a3R=a(Y),a3S=a("40601"),a3T=a(aa),a3U=a("41721"),a3V=a(N),a3W=a(CR),a3X=a(N),a3Y=a("3710"),a3Z=a(CR),a30=a(n),a31=a("26029"),a32=a("31908"),a33=a(v),a34=a("34643"),a35=a(T),a36=a("35739"),a37=a(Y),a38=a("36970"),a39=a(aa),a3_=a("38185"),a3$=a(N),a4a=a(AJ),a4b=a(N),a4c=a("3555"),a4d=a(AJ),a4e=a(n),a4f=a("24417"),a4g=a("29616"),a4h=a(v),a4i=a("32289"),a4j=a(T),a4k=a(za),a4l=a(Y),a4m=a("34977"),a4n=a(aa),a4o=a("36311"),a4p=a(N),a4q=a(zP),a4r=a(N),a4s=a("3383"),a4t=a(zP),a4v=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a3I=[0,a(O),x5,5,x5,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a2Y=a(n),a2Z=a("29996"),a20=a("36149"),a21=a(v),a22=a("38868"),a23=a(T),a24=a("39954"),a25=a(Y),a26=a("41078"),a27=a(aa),a28=a("42180"),a29=a(N),a2_=a(AW),a2$=a(N),a3a=a("3751"),a3b=a(AW),a3c=a(n),a3d=a("26315"),a3e=a("32259"),a3f=a(v),a3g=a("34923"),a3h=a(T),a3i=a("36132"),a3j=a(Y),a3k=a("37373"),a3l=a(aa),a3m=a("38605"),a3n=a(N),a3o=a(CY),a3p=a(N),a3q=a("3594"),a3r=a(CY),a3s=a(n),a3t=a("24686"),a3u=a("29942"),a3v=a(v),a3w=a("32644"),a3x=a(T),a3y=a("33993"),a3z=a(Y),a3A=a("35362"),a3B=a(aa),a3C=a("36710"),a3D=a(N),a3E=a(z6),a3F=a(N),a3G=a("3420"),a3H=a(z6),a3J=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a2W=[0,a(O),yL,5,yL,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a2a=a(n),a2b=a("30296"),a2c=a("36510"),a2d=a(v),a2e=a("39257"),a2f=a(T),a2g=a("40354"),a2h=a(Y),a2i=a("41489"),a2j=a(aa),a2k=a("42602"),a2l=a(N),a2m=a(vA),a2n=a(N),a2o=a("3789"),a2p=a(vA),a2q=a(n),a2r=a("26578"),a2s=a("32582"),a2t=a(v),a2u=a("35272"),a2v=a(T),a2w=a("36493"),a2x=a(Y),a2y=a("37751"),a2z=a(aa),a2A=a("38991"),a2B=a(N),a2C=a(xi),a2D=a(N),a2E=a("3630"),a2F=a(xi),a2G=a(n),a2H=a("24933"),a2I=a("30241"),a2J=a(v),a2K=a("32970"),a2L=a(T),a2M=a("34333"),a2N=a(Y),a2O=a("35716"),a2P=a(aa),a2Q=a("37077"),a2R=a(N),a2S=a(uP),a2T=a(N),a2U=a("3454"),a2V=a(uP),a2X=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a1_=[0,a(O),Eg,5,Eg,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a1o=a(n),a1p=a("30947"),a1q=a("37295"),a1r=a(v),a1s=a("40101"),a1t=a(T),a1u=a("41222"),a1v=a(Y),a1w=a("42381"),a1x=a(aa),a1y=a("43518"),a1z=a(N),a1A=a(Cc),a1B=a(N),a1C=a("3870"),a1D=a(Cc),a1E=a(n),a1F=a("27149"),a1G=a("33283"),a1H=a(v),a1I=a("36030"),a1J=a(T),a1K=a("37278"),a1L=a(Y),a1M=a("38563"),a1N=a(aa),a1O=a("39829"),a1P=a(N),a1Q=a("42649"),a1R=a(N),a1S=a("3708"),a1T=a("42659"),a1U=a(n),a1V=a("25469"),a1W=a("30891"),a1X=a(v),a1Y=a("33679"),a1Z=a(T),a10=a("35071"),a11=a(Y),a12=a("36484"),a13=a(aa),a14=a("37874"),a15=a(N),a16=a(Ci),a17=a(N),a18=a("3528"),a19=a(Ci),a1$=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a1m=[0,a(O),yh,5,yh,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],a0C=a(n),a0D=a("31123"),a0E=a("37508"),a0F=a(v),a0G=a("40330"),a0H=a(T),a0I=a("41457"),a0J=a(Y),a0K=a("42623"),a0L=a(aa),a0M=a("43766"),a0N=a(N),a0O=a(uR),a0P=a(N),a0Q=a("3892"),a0R=a(uR),a0S=a(n),a0T=a("27304"),a0U=a("33473"),a0V=a(v),a0W=a("36235"),a0X=a(T),a0Y=a("37490"),a0Z=a(Y),a00=a("38783"),a01=a(aa),a02=a("40056"),a03=a(N),a04=a(BA),a05=a(N),a06=a("3729"),a07=a(BA),a08=a(n),a09=a("25614"),a0_=a("31067"),a0$=a(v),a1a=a("33871"),a1b=a(T),a1c=a("35271"),a1d=a(Y),a1e=a("36692"),a1f=a(aa),a1g=a("38090"),a1h=a(N),a1i=a(yY),a1j=a(N),a1k=a("3548"),a1l=a(yY),a1n=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],a0A=[0,a(O),xN,5,xN,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],aZQ=a(n),aZR=a("31148"),aZS=a("37538"),aZT=a(v),aZU=a("40362"),aZV=a(T),aZW=a("41490"),aZX=a(Y),aZY=a("42657"),aZZ=a(aa),aZ0=a("43801"),aZ1=a(N),aZ2=a(w0),aZ3=a(N),aZ4=a("3895"),aZ5=a(w0),aZ6=a(n),aZ7=a("27326"),aZ8=a(E0),aZ9=a(v),aZ_=a("36264"),aZ$=a(T),a0a=a("37520"),a0b=a(Y),a0c=a("38814"),a0d=a(aa),a0e=a("40088"),a0f=a(N),a0g=a(EP),a0h=a(N),a0i=a("3732"),a0j=a(EP),a0k=a(n),a0l=a("25634"),a0m=a("31092"),a0n=a(v),a0o=a("33898"),a0p=a(T),a0q=a("35299"),a0r=a(Y),a0s=a("36721"),a0t=a(aa),a0u=a("38120"),a0v=a(N),a0w=a(zM),a0x=a(N),a0y=a("3551"),a0z=a(zM),a0B=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],aZO=[0,a(O),Au,5,Au,64,[0,a(bP),[0,a(bk),[0,a(K),0]]]],aY4=a(n),aY5=a("31382"),aY6=a("37820"),aY7=a(v),aY8=a("40665"),aY9=a(T),aY_=a("41801"),aY$=a(Y),aZa=a("42977"),aZb=a(aa),aZc=a("44130"),aZd=a(N),aZe=a(zF),aZf=a(N),aZg=a("3924"),aZh=a(zF),aZi=a(n),aZj=a("27531"),aZk=a("33751"),aZl=a(v),aZm=a("36536"),aZn=a(T),aZo=a("37801"),aZp=a(Y),aZq=a("39105"),aZr=a(aa),aZs=a("40389"),aZt=a(N),aZu=a(wd),aZv=a(N),aZw=a("3760"),aZx=a(wd),aZy=a(n),aZz=a("25826"),aZA=a("31325"),aZB=a(v),aZC=a("34152"),aZD=a(T),aZE=a("35564"),aZF=a(Y),aZG=a("36996"),aZH=a(aa),aZI=a("38406"),aZJ=a(N),aZK=a(zf),aZL=a(N),aZM=a("3578"),aZN=a(zf),aZP=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],aY2=[0,a(O),Bb,5,Bb,33,[0,a(bP),[0,a(bk),[0,a(K),0]]]],aYg=a(n),aYh=a("31476"),aYi=a("37933"),aYj=a(v),aYk=a("40787"),aYl=a(T),aYm=a("41927"),aYn=a(Y),aYo=a("43106"),aYp=a(aa),aYq=a("44262"),aYr=a(N),aYs=a(v0),aYt=a(N),aYu=a("3936"),aYv=a(v0),aYw=a(n),aYx=a("27614"),aYy=a("33853"),aYz=a(v),aYA=a("36646"),aYB=a(T),aYC=a("37915"),aYD=a(Y),aYE=a("39222"),aYF=a(aa),aYG=a("40510"),aYH=a(N),aYI=a(D6),aYJ=a(N),aYK=a("3771"),aYL=a(D6),aYM=a(n),aYN=a("25904"),aYO=a("31419"),aYP=a(v),aYQ=a("34255"),aYR=a(T),aYS=a("35670"),aYT=a(Y),aYU=a("37107"),aYV=a(aa),aYW=a("38521"),aYX=a(N),aYY=a(E2),aYZ=a(N),aY0=a("3588"),aY1=a(E2),aY3=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],bds=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],aYf=[0,a(d),aN,10,aN,14,[0,a(C),[0,a(y),[0,a(e),0]]]],aYc=[0,a(D),wv,14,wv,36,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aYa=a(n),aYb=a(n),aYd=[0,a(d),nU,10,nU,32,[0,a(C),[0,a(y),[0,a(e),0]]]],aX$=[0,a(d),nU,10,nU,32,[0,a(C),[0,a(y),[0,a(e),0]]]],aX6=[0,a(aJ),yP,5,yP,16,[0,a(od),[0,a(bv),[0,a(aK),0]]]],aX3=a(gF),aX4=a(qo),aX5=a(fb),aX7=[0,a(d),c3,11,c3,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aX2=[0,a(aJ),dP,43,dP,70,[0,a(u_),[0,a(bv),[0,a(aK),0]]]],aXY=a(n),aXZ=a(fb),aX0=a(gF),aX1=a(fb),aX8=[0,a(d),c3,11,c3,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aXV=[0,a(O),x2,5,x2,16,[0,a(od),[0,a(bk),[0,a(K),0]]]],aXS=a(gt),aXT=a(qM),aXU=a(fj),aXW=[0,a(d),c3,11,c3,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aXR=[0,a(O),xo,31,xo,58,[0,a(u_),[0,a(bk),[0,a(K),0]]]],aXN=a(n),aXO=a(fj),aXP=a(gt),aXQ=a(fj),aXX=[0,a(d),c3,11,c3,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aXM=[0,a(d),c3,47,c3,53,[0,a(C),[0,a(y),[0,a(e),0]]]],aXG=[0,a(d),iO,14,iO,50,[0,a(C),[0,a(y),[0,a(e),0]]]],aXA=[0,a(D),gI,14,gI,64,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aXw=[0,a(D),io,14,io,59,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aXs=[0,a(O),CF,14,CF,33,[0,a(Cg),[0,a(bk),[0,a(K),0]]]],aXr=a(z$),aXn=[0,a(O),v6,14,v6,33,[0,a(BT),[0,a(bk),[0,a(K),0]]]],aXm=a(r2),aXi=[0,a(O),Dm,14,Dm,41,[0,a(Cg),[0,a(bk),[0,a(K),0]]]],aXh=a("390000"),aXd=[0,a(O),zs,14,zs,41,[0,a(BT),[0,a(bk),[0,a(K),0]]]],aXc=a(qy),aW_=[0,a(O),An,14,An,41,[0,a("Article 36"),[0,a(bk),[0,a(K),0]]]],aW9=a(h_),aW5=[0,a(fy),cZ,14,cZ,36,[0,a(Cp),[0,a(yJ),0]]],aW3=a(vb),aW4=a(ek),aWZ=[0,a(O),yx,14,yx,40,[0,a("Article 35"),[0,a(bk),[0,a(K),0]]]],aWY=a(ka),aW0=[0,a(d),n_,11,n_,37,[0,a(C),[0,a(y),[0,a(e),0]]]],aWX=[0,a(d),n_,11,n_,37,[0,a(C),[0,a(y),[0,a(e),0]]]],aW1=[0,a(U),[0,a("montant_forfaitaire_d842_6"),0]],aW6=[0,a(d),nY,11,nY,33,[0,a(C),[0,a(y),[0,a(e),0]]]],aW2=[0,a(d),nY,11,nY,33,[0,a(C),[0,a(y),[0,a(e),0]]]],aW7=[0,a(U),[0,a(EB),0]],aW$=[0,a(d),oT,11,oT,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aW8=[0,a(d),oT,11,oT,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aXa=[0,a(U),[0,a("montant_minimal_aide_d842_6"),0]],aXe=[0,a(d),lG,11,lG,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aXb=[0,a(d),lG,11,lG,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aXf=[0,a(U),[0,a("montant_forfaitaire_d842_11"),0]],aXj=[0,a(d),mH,11,mH,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aXg=[0,a(d),mH,11,mH,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aXk=[0,a(U),[0,a("montant_forfaitaire_d842_12"),0]],aXo=[0,a(d),oG,11,oG,30,[0,a(C),[0,a(y),[0,a(e),0]]]],aXl=[0,a(d),oG,11,oG,30,[0,a(C),[0,a(y),[0,a(e),0]]]],aXp=[0,a(U),[0,a("coefficient_d842_11"),0]],aXt=[0,a(d),l1,11,l1,30,[0,a(C),[0,a(y),[0,a(e),0]]]],aXq=[0,a(d),l1,11,l1,30,[0,a(C),[0,a(y),[0,a(e),0]]]],aXu=[0,a(U),[0,a("coefficient_d842_12"),0]],aXx=[0,a(D),io,14,io,59,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aXy=[0,a(U),[0,a(m7),0]],aXv=[0,a(D),io,14,io,59,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aXB=[0,a(D),gI,14,gI,64,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aXC=[0,a(U),[0,a(nP),0]],aXz=[0,a(D),gI,14,gI,64,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aXD=[0,a(U),[0,a(f4),[0,a(kh),0]]],aXE=[0,a(U),[0,a(f4),[0,a(kh),0]]],aXH=[0,a(d),iO,14,iO,50,[0,a(C),[0,a(y),[0,a(e),0]]]],aXI=[0,a(U),[0,a(kq),0]],aXF=[0,a(d),iO,14,iO,50,[0,a(C),[0,a(y),[0,a(e),0]]]],aXJ=[0,a(U),[0,a(eF),[0,a(bh),0]]],aXK=[0,a(U),[0,a(eF),[0,a(bh),0]]],aX9=[0,a(d),c3,11,c3,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aXL=[0,a(d),c3,11,c3,38,[0,a(C),[0,a(y),[0,a(e),0]]]],aX_=[0,a(U),[0,a(u1),0]],aYe=[0,a(U),[0,a(bD),0]],bdt=[0,a(U),[0,a(b6),0]],bdz=[0,a(d),fP,11,fP,42,[0,a(C),[0,a(y),[0,a(e),0]]]],bdu=[0,a(d),fP,11,fP,42,[0,a(C),[0,a(y),[0,a(e),0]]]],bdA=[0,a(U),[0,a("seuil_minimal_ressources_m\xc3\xa9nage"),0]],bdE=[0,a(U),[0,a(db),0]],bd9=[0,a(U),[0,a(dy),0]],bef=[0,a(d),iP,10,iP,15,[0,a(C),[0,a(y),[0,a(e),0]]]],bd_=[0,a(d),iP,10,iP,15,[0,a(C),[0,a(y),[0,a(e),0]]]],beg=[0,a(U),[0,a(Ch),0]],bex=[0,a(d),hW,11,hW,36,[0,a(C),[0,a(y),[0,a(e),0]]]],beh=[0,a(d),hW,11,hW,36,[0,a(C),[0,a(y),[0,a(e),0]]]],bey=[0,a(U),[0,a("plafond_mensualit\xc3\xa9_d842_6"),0]],beB=[0,a(D),hz,14,hz,75,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],beC=[0,a(U),[0,a(mz),0]],bez=[0,a(D),hz,14,hz,75,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],beF=[0,a(D),h2,14,h2,69,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],beG=[0,a(U),[0,a(ob),0]],beD=[0,a(D),h2,14,h2,69,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],beJ=[0,a(D),hq,14,hq,70,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],beK=[0,a(U),[0,a(mn),0]],beH=[0,a(D),hq,14,hq,70,[0,a(bx),[0,a(ag),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],beL=[0,a(U),[0,a(fD),[0,a(dE),0]]],beM=[0,a(U),[0,a(fD),[0,a(dE),0]]],beQ=[0,a(d),jp,14,jp,59,[0,a(C),[0,a(y),[0,a(e),0]]]],beR=[0,a(U),[0,a(xq),0]],beN=[0,a(d),jp,14,jp,59,[0,a(C),[0,a(y),[0,a(e),0]]]],beU=[0,a(d),iv,14,iv,61,[0,a(C),[0,a(y),[0,a(e),0]]]],beV=[0,a(U),[0,a(y5),0]],beS=[0,a(d),iv,14,iv,61,[0,a(C),[0,a(y),[0,a(e),0]]]],beY=[0,a(d),ji,14,ji,67,[0,a(C),[0,a(y),[0,a(e),0]]]],beZ=[0,a(U),[0,a(vf),0]],beW=[0,a(d),ji,14,ji,67,[0,a(C),[0,a(y),[0,a(e),0]]]],be2=[0,a(d),fY,14,fY,65,[0,a(C),[0,a(y),[0,a(e),0]]]],be3=[0,a(U),[0,a(Ex),0]],be0=[0,a(d),fY,14,fY,65,[0,a(C),[0,a(y),[0,a(e),0]]]],be6=[0,a(d),ib,14,ib,70,[0,a(C),[0,a(y),[0,a(e),0]]]],be7=[0,a(U),[0,a(BJ),0]],be4=[0,a(d),ib,14,ib,70,[0,a(C),[0,a(y),[0,a(e),0]]]],be_=[0,a(d),iW,14,iW,44,[0,a(C),[0,a(y),[0,a(e),0]]]],be$=[0,a(U),[0,a(BZ),0]],be8=[0,a(d),iW,14,iW,44,[0,a(C),[0,a(y),[0,a(e),0]]]],bfc=[0,a(d),hO,14,hO,53,[0,a(C),[0,a(y),[0,a(e),0]]]],bfd=[0,a(U),[0,a(Ec),0]],bfa=[0,a(d),hO,14,hO,53,[0,a(C),[0,a(y),[0,a(e),0]]]],bfh=[0,a(d),hC,14,hC,49,[0,a(C),[0,a(y),[0,a(e),0]]]],bfi=[0,a(U),[0,a(vM),0]],bfe=[0,a(d),hC,14,hC,49,[0,a(C),[0,a(y),[0,a(e),0]]]],bfp=[0,a(U),[0,a(ny),[0,a(az),0]]],bfq=[0,a(U),[0,a(ny),[0,a(az),0]]],bfv=[0,a(d),gO,11,gO,47,[0,a(C),[0,a(y),[0,a(e),0]]]],bfr=[0,a(d),gO,11,gO,47,[0,a(C),[0,a(y),[0,a(e),0]]]],bfw=[0,a(U),[0,a("seuil_minimal_d\xc3\xa9pense_nette_minimale"),0]],bfz=[0,a(d),n6,11,n6,30,[0,a(C),[0,a(y),[0,a(e),0]]]],bfx=[0,a(d),n6,11,n6,30,[0,a(C),[0,a(y),[0,a(e),0]]]],bfA=[0,a(U),[0,a(EA),0]],bfD=[0,a(d),gC,11,gC,30,[0,a(C),[0,a(y),[0,a(e),0]]]],bfB=[0,a(d),gC,11,gC,30,[0,a(C),[0,a(y),[0,a(e),0]]]],bfE=[0,a(U),[0,a(yq),0]],bfH=[0,a(d),kD,11,kD,38,[0,a(C),[0,a(y),[0,a(e),0]]]],bfF=[0,a(d),kD,11,kD,38,[0,a(C),[0,a(y),[0,a(e),0]]]],bfI=[0,a(U),[0,a(x6),0]],bfR=[0,a(U),[0,a(eG),0]],bfU=[0,a(d),mU,10,mU,29,[0,a(C),[0,a(y),[0,a(e),0]]]],bfS=[0,a(d),mU,10,mU,29,[0,a(C),[0,a(y),[0,a(e),0]]]],bfV=[0,a(U),[0,a(eV),0]],bf8=[0,a(U),[0,a(ei),0]],bgl=[0,a(U),[0,a(bE),0]],bgu=[0,a(U),[0,a(fg),0]],aWU=[0,a(D),vE,14,vE,36,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aWP=[0,a(aq),[0,a(bE),[0,a(ai),0]]],aWQ=[0,a(aq),[0,a(bE),0]],aWR=[0,a(aq),[0,a(bE),[0,a(aj),0]]],aWS=[0,a(aq),[0,a(bE),0]],aWT=a(n),aWV=[0,a(d),mY,10,mY,25,[0,a(M),[0,a(y),[0,a(e),0]]]],aWO=[0,a(d),mY,10,mY,25,[0,a(M),[0,a(y),[0,a(e),0]]]],aWL=[0,a(D),EZ,14,EZ,36,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aWA=[0,a(aq),[0,a(kv),[0,a(ai),0]]],aWB=[0,a(aq),[0,a(kv),0]],aWC=[0,a(aq),[0,a(kv),[0,a(aj),0]]],aWD=[0,a(aq),[0,a(kv),0]],aWE=[0,a(bh),[0,a(bK),[0,a(ai),0]]],aWF=[0,a(bh),[0,a(bK),0]],aWG=[0,a(bh),[0,a(bK),[0,a(aj),0]]],aWH=[0,a(bh),[0,a(bK),0]],aWI=a(kM),aWJ=a(n),aWK=a(n),aWM=[0,a(d),lI,10,lI,40,[0,a(M),[0,a(y),[0,a(e),0]]]],aWz=[0,a(d),lI,10,lI,40,[0,a(M),[0,a(y),[0,a(e),0]]]],aWw=[0,a(D),wN,14,wN,36,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aWs=[0,a(aq),[0,a(ei),[0,a(ai),0]]],aWt=[0,a(aq),[0,a(ei),0]],aWu=[0,a(aq),[0,a(ei),[0,a(aj),0]]],aWv=[0,a(aq),[0,a(ei),0]],aWx=[0,a(d),nI,10,nI,19,[0,a(M),[0,a(y),[0,a(e),0]]]],aWr=[0,a(d),nI,10,nI,19,[0,a(M),[0,a(y),[0,a(e),0]]]],aWo=[0,a(D),AG,14,AG,36,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aWe=[0,a(aq),[0,a(bD),[0,a(ai),0]]],aWf=[0,a(aq),[0,a(bD),0]],aWg=[0,a(aq),[0,a(bD),[0,a(aj),0]]],aWh=[0,a(aq),[0,a(bD),0]],aWi=[0,a(aq),[0,a(eG),[0,a(ai),0]]],aWj=[0,a(aq),[0,a(eG),0]],aWk=[0,a(aq),[0,a(eG),[0,a(aj),0]]],aWl=[0,a(aq),[0,a(eG),0]],aWm=a(n),aWn=a(n),aWp=[0,a(d),lT,10,lT,32,[0,a(M),[0,a(y),[0,a(e),0]]]],aWd=[0,a(d),lT,10,lT,32,[0,a(M),[0,a(y),[0,a(e),0]]]],aWa=[0,a(D),Cx,14,Cx,33,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aV8=[0,a(D),DC,14,DC,47,[0,a(B9),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVZ=[0,a(aq),[0,a(db),[0,a(ai),0]]],aV0=[0,a(aq),[0,a(db),0]],aV1=[0,a(aq),[0,a(db),[0,a(aj),0]]],aV2=[0,a(aq),[0,a(db),0]],aV3=[0,a(aq),[0,a(db),[0,a(ai),0]]],aV4=[0,a(aq),[0,a(db),0]],aV5=[0,a(aq),[0,a(db),[0,a(aj),0]]],aV6=[0,a(aq),[0,a(db),0]],aV7=a(n),aV9=[0,a(d),nO,11,nO,44,[0,a(M),[0,a(y),[0,a(e),0]]]],aVY=[0,a(d),nO,11,nO,44,[0,a(M),[0,a(y),[0,a(e),0]]]],aVV=[0,a(D),uZ,14,uZ,27,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVR=[0,a(D),w7,14,w7,36,[0,a(B9),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVS=[0,a(d),jY,11,jY,33,[0,a(M),[0,a(y),[0,a(e),0]]]],aVQ=[0,a(d),jY,11,jY,33,[0,a(M),[0,a(y),[0,a(e),0]]]],aVN=[0,a(D),zT,14,zT,41,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVH=[0,a(D),iq,14,iq,70,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVD=[0,a(D),hL,14,hL,69,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVz=[0,a(D),hR,14,hR,75,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVv=[0,a(D),Dg,14,Dg,36,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVt=a(n),aVu=a(n),aVw=[0,a(d),kA,10,kA,32,[0,a(M),[0,a(y),[0,a(e),0]]]],aVs=[0,a(d),kA,10,kA,32,[0,a(M),[0,a(y),[0,a(e),0]]]],aVo=[0,a(O),yC,6,yC,79,[0,a(fA),[0,a(fR),[0,a(K),0]]]],aVm=a("8708"),aVn=a("13559"),aVp=[0,a(d),cc,10,cc,27,[0,a(M),[0,a(y),[0,a(e),0]]]],aVk=[0,a(O),4369,6,4370,38,[0,a(fA),[0,a(fR),[0,a(K),0]]]],aVi=a("21362"),aVj=a("33196"),aVl=[0,a(d),cc,10,cc,27,[0,a(M),[0,a(y),[0,a(e),0]]]],aVf=[0,a(O),gI,6,4388,24,[0,a(fA),[0,a(fR),[0,a(K),0]]]],aVd=a(zJ),aVe=a(z1),aVg=[0,a(d),cc,10,cc,27,[0,a(M),[0,a(y),[0,a(e),0]]]],aVc=[0,a(O),4351,6,4352,46,[0,a(fA),[0,a(fR),[0,a(K),0]]]],aVa=a(zJ),aVb=a(z1),aVh=[0,a(d),cc,10,cc,27,[0,a(M),[0,a(y),[0,a(e),0]]]],aU_=[0,a(aJ),D1,6,D1,79,[0,a(fA),[0,a(bv),[0,a(aK),0]]]],aU8=a("8414"),aU9=a("13100"),aU$=[0,a(d),cc,10,cc,27,[0,a(M),[0,a(y),[0,a(e),0]]]],aU6=[0,a(aJ),gK,6,b7,38,[0,a(fA),[0,a(bv),[0,a(aK),0]]]],aU4=a("20640"),aU5=a("32073"),aU7=[0,a(d),cc,10,cc,27,[0,a(M),[0,a(y),[0,a(e),0]]]],aU1=[0,a(aJ),712,6,km,24,[0,a(fA),[0,a(bv),[0,a(aK),0]]]],aUZ=a(Df),aU0=a(zm),aU2=[0,a(d),cc,10,cc,27,[0,a(M),[0,a(y),[0,a(e),0]]]],aUY=[0,a(aJ),674,6,675,46,[0,a(fA),[0,a(bv),[0,a(aK),0]]]],aUW=a(Df),aUX=a(zm),aU3=[0,a(d),cc,10,cc,27,[0,a(M),[0,a(y),[0,a(e),0]]]],aUR=[0,a(O),DO,14,DO,41,[0,a(Bm),[0,a(fR),[0,a(K),0]]]],aUN=a(n),aUO=a(fj),aUP=a(gt),aUQ=a(fj),aUS=[0,a(d),fx,10,fx,37,[0,a(M),[0,a(y),[0,a(e),0]]]],aUL=[0,a(aJ),xc,14,xc,41,[0,a(Bm),[0,a(bv),[0,a(aK),0]]]],aUH=a(n),aUI=a(fb),aUJ=a(gF),aUK=a(fb),aUM=[0,a(d),fx,10,fx,37,[0,a(M),[0,a(y),[0,a(e),0]]]],aUB=[0,a(D),ng,14,ng,61,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aUC=[0,a(D),ng,14,ng,61,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aUD=[0,a(aq),[0,a(Do),0]],aUy=[0,a(d),h1,14,h1,49,[0,a(M),[0,a(y),[0,a(e),0]]]],aUu=[0,a(d),gJ,14,gJ,53,[0,a(M),[0,a(y),[0,a(e),0]]]],aUq=[0,a(d),it,14,it,44,[0,a(M),[0,a(y),[0,a(e),0]]]],aUm=[0,a(d),iw,14,iw,70,[0,a(M),[0,a(y),[0,a(e),0]]]],aUi=[0,a(d),gy,14,gy,65,[0,a(M),[0,a(y),[0,a(e),0]]]],aUe=[0,a(d),hf,14,hf,67,[0,a(M),[0,a(y),[0,a(e),0]]]],aUa=[0,a(d),iD,14,iD,61,[0,a(M),[0,a(y),[0,a(e),0]]]],aT8=[0,a(d),iH,14,iH,59,[0,a(M),[0,a(y),[0,a(e),0]]]],aT2=[0,a(d),iS,14,iS,50,[0,a(M),[0,a(y),[0,a(e),0]]]],aTW=[0,a(D),i5,14,i5,64,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTS=[0,a(D),hT,14,hT,59,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTO=[0,a(D),iI,14,iI,55,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTK=[0,a(O),uS,14,uS,51,[0,a("Article 44"),[0,a(fR),[0,a(K),0]]]],aTJ=a(qy),aTF=[0,a(O),z2,14,z2,41,[0,a("Article 41"),[0,a(fR),[0,a(K),0]]]],aTE=a(ka),aTA=[0,a(O),xB,14,xB,42,[0,a("Article 42"),[0,a(fR),[0,a(K),0]]]],aTz=a(h_),aTB=[0,a(d),i1,11,i1,39,[0,a(M),[0,a(y),[0,a(e),0]]]],aTy=[0,a(d),i1,11,i1,39,[0,a(M),[0,a(y),[0,a(e),0]]]],aTC=[0,a(aq),[0,a("montant_minimal_aide_d842_15"),0]],aTG=[0,a(d),lN,11,lN,38,[0,a(M),[0,a(y),[0,a(e),0]]]],aTD=[0,a(d),lN,11,lN,38,[0,a(M),[0,a(y),[0,a(e),0]]]],aTH=[0,a(aq),[0,a("montant_forfaitaire_d842_15"),0]],aTL=[0,a(d),nd,11,nd,48,[0,a(M),[0,a(y),[0,a(e),0]]]],aTI=[0,a(d),nd,11,nd,48,[0,a(M),[0,a(y),[0,a(e),0]]]],aTM=[0,a(aq),[0,a("montant_minimal_d\xc3\xa9pense_nette_d842_17"),0]],aTP=[0,a(D),iI,14,iI,55,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTQ=[0,a(aq),[0,a(A1),0]],aTN=[0,a(D),iI,14,iI,55,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTT=[0,a(D),hT,14,hT,59,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTU=[0,a(aq),[0,a(m7),0]],aTR=[0,a(D),hT,14,hT,59,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTX=[0,a(D),i5,14,i5,64,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTY=[0,a(aq),[0,a(nP),0]],aTV=[0,a(D),i5,14,i5,64,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTZ=[0,a(aq),[0,a(f4),[0,a(kp),0]]],aT0=[0,a(aq),[0,a(f4),[0,a(kp),0]]],aT3=[0,a(d),iS,14,iS,50,[0,a(M),[0,a(y),[0,a(e),0]]]],aT4=[0,a(aq),[0,a(kq),0]],aT1=[0,a(d),iS,14,iS,50,[0,a(M),[0,a(y),[0,a(e),0]]]],aT5=[0,a(aq),[0,a(eF),[0,a(bh),0]]],aT6=[0,a(aq),[0,a(eF),[0,a(bh),0]]],aT9=[0,a(d),iH,14,iH,59,[0,a(M),[0,a(y),[0,a(e),0]]]],aT_=[0,a(aq),[0,a(xq),0]],aT7=[0,a(d),iH,14,iH,59,[0,a(M),[0,a(y),[0,a(e),0]]]],aUb=[0,a(d),iD,14,iD,61,[0,a(M),[0,a(y),[0,a(e),0]]]],aUc=[0,a(aq),[0,a(y5),0]],aT$=[0,a(d),iD,14,iD,61,[0,a(M),[0,a(y),[0,a(e),0]]]],aUf=[0,a(d),hf,14,hf,67,[0,a(M),[0,a(y),[0,a(e),0]]]],aUg=[0,a(aq),[0,a(vf),0]],aUd=[0,a(d),hf,14,hf,67,[0,a(M),[0,a(y),[0,a(e),0]]]],aUj=[0,a(d),gy,14,gy,65,[0,a(M),[0,a(y),[0,a(e),0]]]],aUk=[0,a(aq),[0,a(Ex),0]],aUh=[0,a(d),gy,14,gy,65,[0,a(M),[0,a(y),[0,a(e),0]]]],aUn=[0,a(d),iw,14,iw,70,[0,a(M),[0,a(y),[0,a(e),0]]]],aUo=[0,a(aq),[0,a(BJ),0]],aUl=[0,a(d),iw,14,iw,70,[0,a(M),[0,a(y),[0,a(e),0]]]],aUr=[0,a(d),it,14,it,44,[0,a(M),[0,a(y),[0,a(e),0]]]],aUs=[0,a(aq),[0,a(BZ),0]],aUp=[0,a(d),it,14,it,44,[0,a(M),[0,a(y),[0,a(e),0]]]],aUv=[0,a(d),gJ,14,gJ,53,[0,a(M),[0,a(y),[0,a(e),0]]]],aUw=[0,a(aq),[0,a(Ec),0]],aUt=[0,a(d),gJ,14,gJ,53,[0,a(M),[0,a(y),[0,a(e),0]]]],aUz=[0,a(d),h1,14,h1,49,[0,a(M),[0,a(y),[0,a(e),0]]]],aUA=[0,a(aq),[0,a(vM),0]],aUx=[0,a(d),h1,14,h1,49,[0,a(M),[0,a(y),[0,a(e),0]]]],aUE=[0,a(aq),[0,a(ny),[0,a(az),0]]],aUF=[0,a(aq),[0,a(ny),[0,a(az),0]]],aUT=[0,a(d),fx,10,fx,37,[0,a(M),[0,a(y),[0,a(e),0]]]],aUG=[0,a(d),fx,10,fx,37,[0,a(M),[0,a(y),[0,a(e),0]]]],aUU=[0,a(aq),[0,a(u1),0]],aVq=[0,a(d),cc,10,cc,27,[0,a(M),[0,a(y),[0,a(e),0]]]],aUV=[0,a(d),cc,10,cc,27,[0,a(M),[0,a(y),[0,a(e),0]]]],aVr=[0,a(aq),[0,a("\xc3\xa9quivalence_loyer"),0]],aVx=[0,a(aq),[0,a(bD),0]],aVA=[0,a(D),hR,14,hR,75,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVB=[0,a(aq),[0,a(mz),0]],aVy=[0,a(D),hR,14,hR,75,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVE=[0,a(D),hL,14,hL,69,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVF=[0,a(aq),[0,a(ob),0]],aVC=[0,a(D),hL,14,hL,69,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVI=[0,a(D),iq,14,iq,70,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVJ=[0,a(aq),[0,a(mn),0]],aVG=[0,a(D),iq,14,iq,70,[0,a(bs),[0,a(ah),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aVK=[0,a(aq),[0,a(fD),[0,a(dE),0]]],aVL=[0,a(aq),[0,a(fD),[0,a(dE),0]]],aVO=[0,a(d),mW,10,mW,37,[0,a(M),[0,a(y),[0,a(e),0]]]],aVM=[0,a(d),mW,10,mW,37,[0,a(M),[0,a(y),[0,a(e),0]]]],aVP=[0,a(aq),[0,a(x6),0]],aVT=[0,a(aq),[0,a(db),0]],aVW=[0,a(d),ni,10,ni,23,[0,a(M),[0,a(y),[0,a(e),0]]]],aVU=[0,a(d),ni,10,ni,23,[0,a(M),[0,a(y),[0,a(e),0]]]],aVX=[0,a(aq),[0,a("loyer_minimal"),0]],aV_=[0,a(aq),[0,a(eG),0]],aWb=[0,a(d),nt,10,nt,29,[0,a(M),[0,a(y),[0,a(e),0]]]],aV$=[0,a(d),nt,10,nt,29,[0,a(M),[0,a(y),[0,a(e),0]]]],aWc=[0,a(aq),[0,a(eV),0]],aWq=[0,a(aq),[0,a(ei),0]],aWy=[0,a(aq),[0,a(kv),0]],aWN=[0,a(aq),[0,a(bE),0]],aWW=[0,a(aq),[0,a(fg),0]],aTu=[0,a(D),wi,24,wi,43,[0,a(Es),[0,a(r$),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTt=a(n),aTv=[0,a(d),h6,10,h6,29,[0,a(J),[0,a(y),[0,a(e),0]]]],aTs=[0,a(d),q0,14,q0,33,[0,a(J),[0,a(y),[0,a(e),0]]]],aTn=[0,a(D),xG,24,xG,46,[0,a(Es),[0,a(r$),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aTo=[0,a(d),i4,10,i4,32,[0,a(J),[0,a(y),[0,a(e),0]]]],aTm=[0,a(d),AN,14,AN,36,[0,a(J),[0,a(y),[0,a(e),0]]]],aTi=[0,a(aM),[0,a(fg),[0,a(ai),0]]],aTj=[0,a(aM),[0,a(fg),0]],aTk=[0,a(aM),[0,a(fg),[0,a(aj),0]]],aTl=[0,a(aM),[0,a(fg),0]],aTp=[0,a(d),i4,10,i4,32,[0,a(J),[0,a(y),[0,a(e),0]]]],aTh=[0,a(d),i4,10,i4,32,[0,a(J),[0,a(y),[0,a(e),0]]]],aTc=[0,a(d),gs,14,gs,55,[0,a(J),[0,a(y),[0,a(e),0]]]],aS_=[0,a(d),eR,14,eR,59,[0,a(J),[0,a(y),[0,a(e),0]]]],aS6=[0,a(d),gA,14,gA,43,[0,a(J),[0,a(y),[0,a(e),0]]]],aS2=[0,a(d),hA,14,hA,42,[0,a(J),[0,a(y),[0,a(e),0]]]],aSY=[0,a(d),rC,5,q6,63,[0,a(J),[0,a(y),[0,a(e),0]]]],aSU=[0,a(d),hH,14,hH,53,[0,a(J),[0,a(y),[0,a(e),0]]]],aSQ=[0,a(d),jl,14,jl,37,[0,a(J),[0,a(y),[0,a(e),0]]]],aSM=[0,a(d),gL,14,gL,63,[0,a(J),[0,a(y),[0,a(e),0]]]],aSI=[0,a(d),hw,14,hw,58,[0,a(J),[0,a(y),[0,a(e),0]]]],aSE=[0,a(d),id,14,id,46,[0,a(J),[0,a(y),[0,a(e),0]]]],aSA=[0,a(d),i2,14,i2,78,[0,a(J),[0,a(y),[0,a(e),0]]]],aSw=[0,a(d),hD,14,hD,60,[0,a(J),[0,a(y),[0,a(e),0]]]],aSs=[0,a(d),jc,14,jc,48,[0,a(J),[0,a(y),[0,a(e),0]]]],aSt=[0,a(d),jc,14,jc,48,[0,a(J),[0,a(y),[0,a(e),0]]]],aSu=[0,a(cB),[0,a("calcul_apl_locatif.loyer_principal_base"),0]],aSr=[0,a(d),jc,14,jc,48,[0,a(J),[0,a(y),[0,a(e),0]]]],aSx=[0,a(d),hD,14,hD,60,[0,a(J),[0,a(y),[0,a(e),0]]]],aSy=[0,a(cB),[0,a("calcul_apl_locatif.ressources_m\xc3\xa9nage_arrondies"),0]],aSv=[0,a(d),hD,14,hD,60,[0,a(J),[0,a(y),[0,a(e),0]]]],aSB=[0,a(d),i2,14,i2,78,[0,a(J),[0,a(y),[0,a(e),0]]]],aSC=[0,a(cB),[0,a("calcul_apl_locatif.b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s"),0]],aSz=[0,a(d),i2,14,i2,78,[0,a(J),[0,a(y),[0,a(e),0]]]],aSF=[0,a(d),id,14,id,46,[0,a(J),[0,a(y),[0,a(e),0]]]],aSG=[0,a(cB),[0,a("calcul_apl_locatif.date_courante"),0]],aSD=[0,a(d),id,14,id,46,[0,a(J),[0,a(y),[0,a(e),0]]]],aSJ=[0,a(d),hw,14,hw,58,[0,a(J),[0,a(y),[0,a(e),0]]]],aSK=[0,a(cB),[0,a("calcul_apl_locatif.nombre_personnes_\xc3\xa0_charge"),0]],aSH=[0,a(d),hw,14,hw,58,[0,a(J),[0,a(y),[0,a(e),0]]]],aSN=[0,a(d),gL,14,gL,63,[0,a(J),[0,a(y),[0,a(e),0]]]],aSO=[0,a(cB),[0,a("calcul_apl_locatif.situation_familiale_calcul_apl"),0]],aSL=[0,a(d),gL,14,gL,63,[0,a(J),[0,a(y),[0,a(e),0]]]],aSR=[0,a(d),jl,14,jl,37,[0,a(J),[0,a(y),[0,a(e),0]]]],aSS=[0,a(cB),[0,a("calcul_apl_locatif.zone"),0]],aSP=[0,a(d),jl,14,jl,37,[0,a(J),[0,a(y),[0,a(e),0]]]],aSV=[0,a(d),hH,14,hH,53,[0,a(J),[0,a(y),[0,a(e),0]]]],aSW=[0,a(cB),[0,a("calcul_apl_locatif.logement_est_chambre"),0]],aST=[0,a(d),hH,14,hH,53,[0,a(J),[0,a(y),[0,a(e),0]]]],aSZ=[0,a(d),rC,5,q6,63,[0,a(J),[0,a(y),[0,a(e),0]]]],aS0=[0,a(cB),[0,a("calcul_apl_locatif.\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers"),0]],aSX=[0,a(d),rC,5,q6,63,[0,a(J),[0,a(y),[0,a(e),0]]]],aS3=[0,a(d),hA,14,hA,42,[0,a(J),[0,a(y),[0,a(e),0]]]],aS4=[0,a(cB),[0,a("calcul_apl_locatif.type_aide"),0]],aS1=[0,a(d),hA,14,hA,42,[0,a(J),[0,a(y),[0,a(e),0]]]],aS7=[0,a(d),gA,14,gA,43,[0,a(J),[0,a(y),[0,a(e),0]]]],aS8=[0,a(cB),[0,a("calcul_apl_locatif.colocation"),0]],aS5=[0,a(d),gA,14,gA,43,[0,a(J),[0,a(y),[0,a(e),0]]]],aS$=[0,a(d),eR,14,eR,59,[0,a(J),[0,a(y),[0,a(e),0]]]],aTa=[0,a(cB),[0,a("calcul_apl_locatif.r\xc3\xa9duction_loyer_solidarit\xc3\xa9"),0]],aS9=[0,a(d),eR,14,eR,59,[0,a(J),[0,a(y),[0,a(e),0]]]],aTd=[0,a(d),gs,14,gs,55,[0,a(J),[0,a(y),[0,a(e),0]]]],aTe=[0,a(cB),[0,a("calcul_apl_locatif.logement_meubl\xc3\xa9_d842_2"),0]],aTb=[0,a(d),gs,14,gs,55,[0,a(J),[0,a(y),[0,a(e),0]]]],aTf=[0,a(cB),[0,a(D_),[0,a(aM),0]]],aTg=[0,a(cB),[0,a(D_),[0,a(aM),0]]],aTq=[0,a(cB),[0,a(bA),0]],aTw=[0,a(d),h6,10,h6,29,[0,a(J),[0,a(y),[0,a(e),0]]]],aTr=[0,a(d),h6,10,h6,29,[0,a(J),[0,a(y),[0,a(e),0]]]],aTx=[0,a(cB),[0,a(eV),0]],aSl=[0,a(mf),67,5,71,21,[0,a(gu),[0,a(gr),[0,a(d5),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],aSm=[0,a(bB),40,10,40,22,[0,a(bF),0]],aSk=[0,a(mf),56,5,57,78,[0,a(gu),[0,a(gr),[0,a(d5),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],aSn=[0,a(bB),40,10,40,22,[0,a(bF),0]],aSo=[0,a(bB),40,10,40,22,[0,a(bF),0]],aSj=[0,a(bB),40,10,40,22,[0,a(bF),0]],aSp=[0,a(bB),40,10,40,22,[0,a(bF),0]],aSi=[0,a(bB),40,10,40,22,[0,a(bF),0]],aSe=[0,a(mf),77,5,81,24,[0,a(gu),[0,a(gr),[0,a(d5),[0,a(ax),[0,a(Z),[0,a($),0]]]]]]],aSf=[0,a(bB),41,10,41,29,[0,a(bF),0]],aSd=[0,a(bB),41,10,41,29,[0,a(bF),0]],aSg=[0,a(bB),41,10,41,29,[0,a(bF),0]],aSc=[0,a(bB),41,10,41,29,[0,a(bF),0]],aR_=[0,a(qV),62,18,62,41,[0,a(w$),[0,a(eT),[0,a(gB),[0,a(dO),[0,a(c2),[0,a($),0]]]]]]],aR8=a(oE),aR9=a(nN),aR$=[0,a(bB),42,11,42,27,[0,a(bF),0]],aR7=[0,a(qV),31,14,31,30,[0,a(lK),[0,a(nE),[0,a(d5),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],aR5=a(oE),aR6=a(nN),aRU=[0,0],aRW=[1,0],aRX=[2,0],aRY=[3,0],aRZ=[4,0],aR0=[5,0],aRV=[0,a(mf),cU,5,wB,30,[0,a(B8),[0,a(x3),[0,a(j6),[0,a(dO),[0,a(Z),[0,a($),0]]]]]]],aR1=[0,a(bB),44,10,44,33,[0,a(bF),0]],aRT=[0,a(bB),44,10,44,33,[0,a(bF),0]],aRN=[0,a(bB),51,14,51,28,[0,a(bF),0]],aRJ=[0,a(bB),52,14,52,32,[0,a(bF),0]],aRF=[0,a(qV),21,14,21,26,[0,a(lK),[0,a(nE),[0,a(d5),[0,a(ax),[0,a(c2),[0,a($),0]]]]]]],aRG=[0,a(bB),43,10,43,22,[0,a(bF),0]],aRE=[0,a(bB),43,10,43,22,[0,a(bF),0]],aRH=[0,a(cl),[0,a(yE),0]],aRK=[0,a(bB),52,14,52,32,[0,a(bF),0]],aRL=[0,a(cl),[0,a(Ea),0]],aRI=[0,a(bB),52,14,52,32,[0,a(bF),0]],aRO=[0,a(bB),51,14,51,28,[0,a(bF),0]],aRP=[0,a(cl),[0,a(CT),0]],aRM=[0,a(bB),51,14,51,28,[0,a(bF),0]],aRQ=[0,a(cl),[0,a(f6),[0,a(hk),0]]],aRR=[0,a(cl),[0,a(f6),[0,a(hk),0]]],aR2=[0,a(bB),44,10,44,33,[0,a(bF),0]],aRS=[0,a(bB),44,10,44,33,[0,a(bF),0]],aR3=[0,a(cl),[0,a(uU),0]],aSa=[0,a(bB),42,11,42,27,[0,a(bF),0]],aR4=[0,a(bB),42,11,42,27,[0,a(bF),0]],aSb=[0,a(cl),[0,a(zO),0]],aSh=[0,a(cl),[0,a(iQ),0]],aSq=[0,a(cl),[0,a(de),0]],aRz=[0,a(D),rK,14,rK,32,[0,a(mt),[0,a(iz),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aRx=a(cG),aRy=a(n),aRs=[0,a(D),aN,6,gO,35,[0,a("Article R822-20"),[0,a("Sous-section 3 : Montant forfaitaire de ressources applicable aux \xc3\xa9tudiants"),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aRt=[0,a(d),je,10,je,37,[0,a(b_),[0,a(i),[0,a(e),0]]]],aRr=[0,a(D),n2,14,n2,41,[0,a(lP),[0,a(lS),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aRn=[0,a(D),E_,14,E_,32,[0,a("Article R822-8"),[0,a(iz),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aRm=a(n),aRg=[0,a(D),il,14,il,65,[0,a(mt),[0,a(iz),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aRc=[0,a(D),yw,14,yw,33,[0,a("Article R822-10"),[0,a(iz),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aQ5=a(n),aQ6=a(n),aQ$=a(T),aRa=a("90100"),aRb=a("135000"),aQ7=a(n),aQ8=a(n),aQ9=a(n),aQ_=a(n),aQ1=[0,a(D),is,14,is,62,[0,a(lP),[0,a(lS),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aQ0=a(n),aQW=[0,a(d),fX,51,fX,57,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQS=[0,a(O),11,14,11,41,[0,a("Article 3"),[0,a(xb),[0,a(K),0]]]],aQR=a("9500"),aQN=[0,a(O),21,14,21,41,[0,a("Article 4"),[0,a(xb),[0,a(K),0]]]],aQM=a("258900"),aQI=[0,a(d),D4,46,D4,52,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQJ=[0,a(d),i9,10,i9,15,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQH=[0,a(d),i9,10,i9,15,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQK=[0,a(dM),[0,a(Ch),0]],aQO=[0,a(d),he,11,he,38,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQL=[0,a(d),he,11,he,38,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQP=[0,a(dM),[0,a("montant_forfaitaire_r_822_8"),0]],aQT=[0,a(d),mh,11,mh,38,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQQ=[0,a(d),mh,11,mh,38,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQU=[0,a(dM),[0,a("montant_forfaitaire_r_822_7"),0]],aQX=[0,a(d),fX,11,fX,42,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQV=[0,a(d),fX,11,fX,42,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQY=[0,a(dM),[0,a("ressources_forfaitaires_r822_20"),0]],aQ2=[0,a(d),lR,11,lR,59,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQZ=[0,a(d),lR,11,lR,59,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQ3=[0,a(dM),[0,a("ressources_personnes_vivant_habituellement_foyer"),0]],aRd=[0,a(d),nH,11,nH,30,[0,a(b_),[0,a(i),[0,a(e),0]]]],aQ4=[0,a(d),nH,11,nH,30,[0,a(b_),[0,a(i),[0,a(e),0]]]],aRe=[0,a(dM),[0,a("abattement_r_822_10"),0]],aRh=[0,a(D),il,14,il,65,[0,a(mt),[0,a(iz),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aRi=[0,a(dM),[0,a(C7),0]],aRf=[0,a(D),il,14,il,65,[0,a(mt),[0,a(iz),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aRj=[0,a(dM),[0,a(mG),[0,a(f2),0]]],aRk=[0,a(dM),[0,a(mG),[0,a(f2),0]]],aRo=[0,a(d),nq,11,nq,29,[0,a(b_),[0,a(i),[0,a(e),0]]]],aRl=[0,a(d),nq,11,nq,29,[0,a(b_),[0,a(i),[0,a(e),0]]]],aRp=[0,a(dM),[0,a("abattement_r_822_8"),0]],aRu=[0,a(d),je,10,je,37,[0,a(b_),[0,a(i),[0,a(e),0]]]],aRq=[0,a(d),je,10,je,37,[0,a(b_),[0,a(i),[0,a(e),0]]]],aRv=[0,a(dM),[0,a("ressources_prises_en_compte"),0]],aRA=[0,a(d),mi,11,mi,29,[0,a(b_),[0,a(i),[0,a(e),0]]]],aRw=[0,a(d),mi,11,mi,29,[0,a(b_),[0,a(i),[0,a(e),0]]]],aRB=[0,a(dM),[0,a("abattement_r_822_7"),0]],aRC=[0,a(D),mm,13,CC,74,[0,a(lP),[0,a(lS),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aRD=[0,a(D),mm,13,CC,74,[0,a(lP),[0,a(lS),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aQx=[0,a(d),qw,14,qw,56,[0,a(V),[0,a(i),[0,a(e),0]]]],aQt=[0,a(d),Bk,14,Bk,63,[0,a(V),[0,a(i),[0,a(e),0]]]],aQr=a(bZ),aQs=a(bZ),aQn=[0,a(D),hi,14,hi,49,[0,a(kb),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aQj=[0,a(aQ),[0,a(kC),[0,a(ai),0]]],aQk=[0,a(aQ),[0,a(kC),0]],aQl=[0,a(aQ),[0,a(kC),[0,a(aj),0]]],aQm=[0,a(aQ),[0,a(kC),0]],aQd=a(CB),aQc=[0,a(D),1202,4,1208,49,[0,a(kb),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aQe=[0,a(d),di,11,di,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aP9=[0,a(aQ),[0,a(fe),[0,a(ai),0]]],aP_=[0,a(aQ),[0,a(fe),0]],aP$=[0,a(aQ),[0,a(fe),[0,a(aj),0]]],aQa=[0,a(aQ),[0,a(fe),0]],aQb=[0,a(D),E9,5,E9,44,[0,a(kb),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aQf=[0,a(d),di,11,di,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aP7=[0,a(D),1138,5,gq,44,[0,a(kb),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aP8=[0,a(d),di,11,di,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aP6=[0,a(d),di,11,di,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aQg=[0,a(d),di,11,di,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aP5=[0,a(d),di,11,di,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aP0=[0,0],aP1=a(CB),aPZ=[0,a(D),1162,5,1178,10,[0,a(kb),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aP2=[0,a(d),fk,10,fk,28,[0,a(V),[0,a(i),[0,a(e),0]]]],aPY=[0,a(d),fk,10,fk,28,[0,a(V),[0,a(i),[0,a(e),0]]]],aP3=[0,a(d),fk,10,fk,28,[0,a(V),[0,a(i),[0,a(e),0]]]],aPX=[0,a(d),fk,10,fk,28,[0,a(V),[0,a(i),[0,a(e),0]]]],aPT=[0,a(d),zV,5,uG,25,[0,a(V),[0,a(i),[0,a(e),0]]]],aPU=[0,a(d),fz,10,fz,21,[0,a(V),[0,a(i),[0,a(e),0]]]],aPS=[0,a(d),fz,10,fz,21,[0,a(V),[0,a(i),[0,a(e),0]]]],aPO=[0,a(c5),Fc,14,Fc,31,[0,a("Article L351-8"),[0,a("Section 5 : Taux et montant de la pension"),[0,a("Chapitre 1er : Ouverture du droit, liquidation et calcul des pensions de retraite"),[0,a("Titre V : Assurance vieillesse - Assurance veuvage"),[0,a("Livre III : Dispositions relatives aux assurances sociales et \xc3\xa0 diverses cat\xc3\xa9gories de personnes rattach\xc3\xa9es au r\xc3\xa9gime g\xc3\xa9n\xc3\xa9rale"),[0,a(Z),[0,a($),0]]]]]]]],aPI=[0,a(aB),72,5,73,52,[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]],aPJ=[0,a(d),cZ,11,cZ,31,[0,a(V),[0,a(i),[0,a(e),0]]]],aPH=[0,a(aB),65,5,68,52,[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]],aPK=[0,a(d),cZ,11,cZ,31,[0,a(V),[0,a(i),[0,a(e),0]]]],aPG=[0,a(d),cZ,11,cZ,31,[0,a(V),[0,a(i),[0,a(e),0]]]],aPz=[0,a(aB),mT,18,mT,75,[0,a(mp),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aPy=a(n),aPA=[0,a(d),d8,11,d8,36,[0,a(V),[0,a(i),[0,a(e),0]]]],aPv=[4,0],aPw=[5,0],aPx=[0,a(aB),qv,18,rc,45,[0,a(mp),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aPu=a(n),aPB=[0,a(d),d8,11,d8,36,[0,a(V),[0,a(i),[0,a(e),0]]]],aPt=[0,a(D),nL,5,nL,59,[0,a(DY),[0,a(Dp),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aPC=[0,a(d),d8,11,d8,36,[0,a(V),[0,a(i),[0,a(e),0]]]],aPs=[0,a(aB),hh,33,hh,58,[0,a(mp),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aPr=a(n),aPn=[0,a(c5),cn,14,cn,32,[0,a(kd),[0,a(jZ),[0,a(es),[0,a(eP),[0,a(eS),[0,a(el),[0,a(i7),[0,a(Z),[0,a($),0]]]]]]]]]],aPi=[0,a(aB),EV,18,EV,44,[0,a("Article L822-10"),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aPj=[0,a(d),fl,11,fl,58,[0,a(V),[0,a(i),[0,a(e),0]]]],aPh=[0,a(d),fl,11,fl,58,[0,a(V),[0,a(i),[0,a(e),0]]]],aPa=a(bZ),aO$=a(bZ),aO_=[0,a(aB),171,5,rn,66,[0,a(go),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aPb=[0,a(d),dQ,11,dQ,45,[0,a(V),[0,a(i),[0,a(e),0]]]],aO9=[0,a(aB),156,5,158,30,[0,a(go),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aPc=[0,a(d),dQ,11,dQ,45,[0,a(V),[0,a(i),[0,a(e),0]]]],aO8=[0,a(aB),cn,5,wB,33,[0,a(E7),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aPd=[0,a(d),dQ,11,dQ,45,[0,a(V),[0,a(i),[0,a(e),0]]]],aO7=[0,a(d),dQ,11,dQ,45,[0,a(V),[0,a(i),[0,a(e),0]]]],aO1=[0,a(aB),203,5,208,39,[0,a(C3),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aO2=[0,a(d),dZ,11,dZ,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aO0=[0,a(aB),197,5,198,34,[0,a(C3),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aO3=[0,a(d),dZ,11,dZ,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aOZ=[0,a(d),dZ,11,dZ,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aOU=[0,a(c5),329,5,zV,35,[0,a(rE),[0,a(rm),[0,a(rL),[0,a(qA),[0,a(q$),[0,a(a6),[0,a($),0]]]]]]]],aOT=a("999840"),aOV=[0,a(d),dd,11,dd,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aOR=[0,a(c5),qw,5,335,35,[0,a(rE),[0,a(rm),[0,a(rL),[0,a(qA),[0,a(q$),[0,a(a6),[0,a($),0]]]]]]]],aOQ=a("1041840"),aOS=[0,a(d),dd,11,dd,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aOO=[0,a(c5),339,5,340,35,[0,a(rE),[0,a(rm),[0,a(rL),[0,a(qA),[0,a(q$),[0,a(a6),[0,a($),0]]]]]]]],aON=a("1083840"),aOP=[0,a(d),dd,11,dd,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aOL=[0,a(fy),60,5,61,34,[0,a('Circulaire de la CNAV 2022-3 du 11/01/2022 "Revalorisation \xc3\xa0 compter du 1er janvier 2022"'),[0,a(DB),0]]],aOK=a("1100144"),aOM=[0,a(d),dd,11,dd,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aOI=[0,a(fy),93,5,94,34,[0,a('Circulaire de la CNAV 2021-1 du 11/01/2021 "Revalorisation \xc3\xa0 compter du 1er janvier 2021"'),[0,a(DB),0]]],aOH=a("1088175"),aOJ=[0,a(d),dd,11,dd,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aOC=[0,a(aB),du,5,h9,67,[0,a(E7),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aOD=[0,a(d),eC,11,eC,32,[0,a(V),[0,a(i),[0,a(e),0]]]],aOB=[0,a(d),eC,11,eC,32,[0,a(V),[0,a(i),[0,a(e),0]]]],aOx=[0,a(aB),l3,14,l3,40,[0,a(mp),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aOr=[0,a(c5),eq,14,eq,61,[0,a(kd),[0,a(jZ),[0,a(es),[0,a(eP),[0,a(eS),[0,a(el),[0,a(i7),[0,a(Z),[0,a($),0]]]]]]]]]],aOl=[0,a(aB),46,5,46,41,[0,a("Article L821-2"),[0,a(zz),[0,a(D3),[0,a(xS),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]]]],aOm=[0,a(d),dJ,12,dJ,51,[0,a(V),[0,a(i),[0,a(e),0]]]],aOk=[0,a(d),dJ,12,dJ,51,[0,a(V),[0,a(i),[0,a(e),0]]]],aOn=[0,a(d),dJ,12,dJ,51,[0,a(V),[0,a(i),[0,a(e),0]]]],aN0=a(v),aOa=a(T),aOb=a(T),aOc=a(T),aOd=a(v),aOe=a(T),aN1=a(qr),aN2=a(qr),aN7=a(lO),aN8=a(lO),aN9=a(lO),aN_=a(qr),aN$=a(lO),aN3=a(B6),aN4=a("8"),aN5=a(B6),aN6=[0,a(D),1035,5,gG,65,[0,a("Article R822-25"),[0,a("Section 3 : Conditions relatives au logement"),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aOf=[0,a(d),d_,12,d_,38,[0,a(V),[0,a(i),[0,a(e),0]]]],aNZ=[0,a(d),d_,12,d_,38,[0,a(V),[0,a(i),[0,a(e),0]]]],aOg=[0,a(d),d_,12,d_,38,[0,a(V),[0,a(i),[0,a(e),0]]]],aNU=[0,a(aB),D7,18,D7,67,[0,a("Article L822-8"),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aNV=[0,a(d),fC,11,fC,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aNT=[0,a(d),fC,11,fC,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aNO=[0,a(aB),Bw,18,Bw,61,[0,a("Article L822-9"),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aNP=[0,a(d),ey,11,ey,58,[0,a(V),[0,a(i),[0,a(e),0]]]],aNN=[0,a(d),ey,11,ey,58,[0,a(V),[0,a(i),[0,a(e),0]]]],aNJ=[0,a(aB),eU,14,eU,43,[0,a(go),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aNF=[0,a(D),i1,14,i1,37,[0,a(DY),[0,a(Dp),[0,a(dv),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aNE=a("3000000"),aNA=[0,a(D),a7,14,a7,41,[0,a(EC),[0,a(AX),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aNz=a(C1),aNv=[0,a(D),ba,14,ba,42,[0,a(EC),[0,a(AX),[0,a(a$),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aNu=a(C1),aNq=[0,a(d),hS,11,hS,48,[0,a(V),[0,a(i),[0,a(e),0]]]],aNm=[0,a(d),hB,11,hB,25,[0,a(V),[0,a(i),[0,a(e),0]]]],aNn=[0,a(d),hB,11,hB,25,[0,a(V),[0,a(i),[0,a(e),0]]]],aNl=[0,a(d),hB,11,hB,25,[0,a(V),[0,a(i),[0,a(e),0]]]],aNo=[0,a(aQ),[0,a("condition_pr\xc3\xaat"),0]],aNr=[0,a(d),hS,11,hS,48,[0,a(V),[0,a(i),[0,a(e),0]]]],aNp=[0,a(d),hS,11,hS,48,[0,a(V),[0,a(i),[0,a(e),0]]]],aNs=[0,a(aQ),[0,a("condition_peuplement_logement_l822_10"),0]],aNw=[0,a(d),oj,11,oj,39,[0,a(V),[0,a(i),[0,a(e),0]]]],aNt=[0,a(d),oj,11,oj,39,[0,a(V),[0,a(i),[0,a(e),0]]]],aNx=[0,a(aQ),[0,a("seuil_l822_3_parts_propri\xc3\xa9t\xc3\xa9"),0]],aNB=[0,a(d),nv,11,nv,38,[0,a(V),[0,a(i),[0,a(e),0]]]],aNy=[0,a(d),nv,11,nv,38,[0,a(V),[0,a(i),[0,a(e),0]]]],aNC=[0,a(aQ),[0,a("seuil_l822_3_parts_usufruit"),0]],aNG=[0,a(d),jk,11,jk,34,[0,a(V),[0,a(i),[0,a(e),0]]]],aND=[0,a(d),jk,11,jk,34,[0,a(V),[0,a(i),[0,a(e),0]]]],aNH=[0,a(aQ),[0,a("seuil_l822_5_patrimoine"),0]],aNK=[0,a(d),lQ,11,lQ,40,[0,a(V),[0,a(i),[0,a(e),0]]]],aNI=[0,a(d),lQ,11,lQ,40,[0,a(V),[0,a(i),[0,a(e),0]]]],aNL=[0,a(aQ),[0,a("usufruit_ou_propri\xc3\xa9t\xc3\xa9_famille"),0]],aNQ=[0,a(d),ey,11,ey,58,[0,a(V),[0,a(i),[0,a(e),0]]]],aNM=[0,a(d),ey,11,ey,58,[0,a(V),[0,a(i),[0,a(e),0]]]],aNR=[0,a(aQ),[0,a("condition_non_ouverture_l822_9_decence_logement"),0]],aNW=[0,a(d),fC,11,fC,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aNS=[0,a(d),fC,11,fC,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aNX=[0,a(aQ),[0,a("condition_non_ouverture_l822_8"),0]],aOh=[0,a(d),d_,12,d_,38,[0,a(V),[0,a(i),[0,a(e),0]]]],aNY=[0,a(d),d_,12,d_,38,[0,a(V),[0,a(i),[0,a(e),0]]]],aOi=[0,a(aQ),[0,a("condition_logement_surface"),0]],aOo=[0,a(d),dJ,12,dJ,51,[0,a(V),[0,a(i),[0,a(e),0]]]],aOj=[0,a(d),dJ,12,dJ,51,[0,a(V),[0,a(i),[0,a(e),0]]]],aOp=[0,a(aQ),[0,a("condition_logement_r\xc3\xa9sidence_principale"),0]],aOs=[0,a(c5),eq,14,eq,61,[0,a(kd),[0,a(jZ),[0,a(es),[0,a(eP),[0,a(eS),[0,a(el),[0,a(i7),[0,a(Z),[0,a($),0]]]]]]]]]],aOt=[0,a(aQ),[0,a("ouverture_droits_retraite.date_naissance_assur\xc3\xa9"),0]],aOq=[0,a(c5),eq,14,eq,61,[0,a(kd),[0,a(jZ),[0,a(es),[0,a(eP),[0,a(eS),[0,a(el),[0,a(i7),[0,a(Z),[0,a($),0]]]]]]]]]],aOu=[0,a(aQ),[0,a(B2),[0,a(rv),0]]],aOv=[0,a(aQ),[0,a(B2),[0,a(rv),0]]],aOy=[0,a(d),l4,11,l4,37,[0,a(V),[0,a(i),[0,a(e),0]]]],aOw=[0,a(d),l4,11,l4,37,[0,a(V),[0,a(i),[0,a(e),0]]]],aOz=[0,a(aQ),[0,a("patrimoine_total_demandeur"),0]],aOE=[0,a(d),eC,11,eC,32,[0,a(V),[0,a(i),[0,a(e),0]]]],aOA=[0,a(d),eC,11,eC,32,[0,a(V),[0,a(i),[0,a(e),0]]]],aOF=[0,a(aQ),[0,a("condition_nationalit\xc3\xa9"),0]],aOW=[0,a(d),dd,11,dd,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aOG=[0,a(d),dd,11,dd,41,[0,a(V),[0,a(i),[0,a(e),0]]]],aOX=[0,a(aQ),[0,a("plafond_individuel_l815_9_s\xc3\xa9cu"),0]],aO4=[0,a(d),dZ,11,dZ,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aOY=[0,a(d),dZ,11,dZ,44,[0,a(V),[0,a(i),[0,a(e),0]]]],aO5=[0,a(aQ),[0,a("condition_logement_location_tiers"),0]],aPe=[0,a(d),dQ,11,dQ,45,[0,a(V),[0,a(i),[0,a(e),0]]]],aO6=[0,a(d),dQ,11,dQ,45,[0,a(V),[0,a(i),[0,a(e),0]]]],aPf=[0,a(aQ),[0,a("condition_logement_mode_occupation"),0]],aPk=[0,a(d),fl,11,fl,58,[0,a(V),[0,a(i),[0,a(e),0]]]],aPg=[0,a(d),fl,11,fl,58,[0,a(V),[0,a(i),[0,a(e),0]]]],aPl=[0,a(aQ),[0,a("condition_ouverture_l822_10_peuplement_logement"),0]],aPo=[0,a(d),l_,11,l_,29,[0,a(V),[0,a(i),[0,a(e),0]]]],aPm=[0,a(d),l_,11,l_,29,[0,a(V),[0,a(i),[0,a(e),0]]]],aPp=[0,a(aQ),[0,a("\xc3\xa2ge_l161_17_2_s\xc3\xa9cu"),0]],aPD=[0,a(d),d8,11,d8,36,[0,a(V),[0,a(i),[0,a(e),0]]]],aPq=[0,a(d),d8,11,d8,36,[0,a(V),[0,a(i),[0,a(e),0]]]],aPE=[0,a(aQ),[0,a("patrimoine_pris_en_compte"),0]],aPL=[0,a(d),cZ,11,cZ,31,[0,a(V),[0,a(i),[0,a(e),0]]]],aPF=[0,a(d),cZ,11,cZ,31,[0,a(V),[0,a(i),[0,a(e),0]]]],aPM=[0,a(aQ),[0,a(AE),0]],aPP=[0,a(d),h5,11,h5,28,[0,a(V),[0,a(i),[0,a(e),0]]]],aPN=[0,a(d),h5,11,h5,28,[0,a(V),[0,a(i),[0,a(e),0]]]],aPQ=[0,a(aQ),[0,a("\xc3\xa2ge_l351_8_1_s\xc3\xa9cu"),0]],aPV=[0,a(d),fz,10,fz,21,[0,a(V),[0,a(i),[0,a(e),0]]]],aPR=[0,a(d),fz,10,fz,21,[0,a(V),[0,a(i),[0,a(e),0]]]],aPW=[0,a(aQ),[0,a(nX),0]],aP4=[0,a(aQ),[0,a(fe),0]],aQh=[0,a(aQ),[0,a(kC),0]],aQo=[0,a(d),kL,11,kL,46,[0,a(V),[0,a(i),[0,a(e),0]]]],aQi=[0,a(d),kL,11,kL,46,[0,a(V),[0,a(i),[0,a(e),0]]]],aQp=[0,a(aQ),[0,a("personnes_\xc3\xa0_charge_prises_en_compte"),0]],aQu=[0,a(d),oo,10,oo,59,[0,a(V),[0,a(i),[0,a(e),0]]]],aQq=[0,a(d),oo,10,oo,59,[0,a(V),[0,a(i),[0,a(e),0]]]],aQv=[0,a(aQ),[0,a(kt),0]],aQy=[0,a(d),nR,10,nR,52,[0,a(V),[0,a(i),[0,a(e),0]]]],aQw=[0,a(d),nR,10,nR,52,[0,a(V),[0,a(i),[0,a(e),0]]]],aQz=[0,a(aQ),[0,a(rQ),0]],aQB=a(qn),aQA=[0,a(aB),md,13,md,48,[0,a(go),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aQF=[0,a(aB),md,13,md,48,[0,a(go),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aQD=a(qn),aQC=[0,a(aB),jo,13,jo,49,[0,a(go),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aQE=[0,a(aB),jo,13,jo,49,[0,a(go),[0,a(a$),[0,a(ac),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aNi=[0,a(D),xK,14,xK,36,[0,a(iG),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aNd=[0,a(am),[0,a(bE),[0,a(ai),0]]],aNe=[0,a(am),[0,a(bE),0]],aNf=[0,a(am),[0,a(bE),[0,a(aj),0]]],aNg=[0,a(am),[0,a(bE),0]],aNh=a(n),aNj=[0,a(d),hm,10,hm,25,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aNc=[0,a(d),hm,10,hm,25,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aM$=[0,a(D),DX,14,DX,33,[0,a(iG),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aM9=a(n),aM_=a(n),aM5=[0,a(D),z3,14,z3,36,[0,a(iG),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aMU=[0,a(am),[0,a(eK),[0,a(ai),0]]],aMV=[0,a(am),[0,a(eK),0]],aMW=[0,a(am),[0,a(eK),[0,a(aj),0]]],aMX=[0,a(am),[0,a(eK),0]],aMY=[0,a(bh),[0,a(bK),[0,a(ai),0]]],aMZ=[0,a(bh),[0,a(bK),0]],aM0=[0,a(bh),[0,a(bK),[0,a(aj),0]]],aM1=[0,a(bh),[0,a(bK),0]],aM2=a(kM),aM3=a(n),aM4=a(n),aM6=[0,a(d),mN,10,mN,40,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMT=[0,a(d),mN,10,mN,40,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMQ=[0,a(D),Bz,14,Bz,49,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aMO=a(ha),aMP=a(ha),aMK=[0,a(D),C8,14,C8,33,[0,a(iG),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aMG=[0,a(D),yV,14,yV,36,[0,a(iG),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aMw=[0,a(am),[0,a(bD),[0,a(ai),0]]],aMx=[0,a(am),[0,a(bD),0]],aMy=[0,a(am),[0,a(bD),[0,a(aj),0]]],aMz=[0,a(am),[0,a(bD),0]],aMA=[0,a(am),[0,a(kE),[0,a(ai),0]]],aMB=[0,a(am),[0,a(kE),0]],aMC=[0,a(am),[0,a(kE),[0,a(aj),0]]],aMD=[0,a(am),[0,a(kE),0]],aME=a(n),aMF=a(n),aMH=[0,a(d),nQ,10,nQ,20,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMv=[0,a(d),nQ,10,nQ,20,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMs=[0,a(D),yN,14,yN,49,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aMp=a(c0),aMq=a(c0),aMr=a(lM),aMk=[0,a(D),3365,5,3377,77,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aMi=a(cG),aMj=a(bZ),aMl=[0,a(d),fQ,10,fQ,29,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMg=[0,a(D),Eb,5,Eb,75,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aMh=[0,a(d),fQ,10,fQ,29,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aL$=[0,a(aJ),uQ,14,uQ,42,[0,a(i6),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],aL_=a(dc),aMa=[0,a(d),ex,10,ex,25,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aL9=[0,a(aJ),y0,14,y0,42,[0,a(i6),[0,a(bv),[0,a(aK),0]]]],aL8=a(dc),aMb=[0,a(d),ex,10,ex,25,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aL7=[0,a(O),zY,14,zY,42,[0,a(i6),[0,a(aD),[0,a(K),0]]]],aL6=a(dc),aMc=[0,a(d),ex,10,ex,25,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aL2=[0,a(D),B$,14,B$,55,[0,a(rx),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLX=[0,a(am),[0,a(ko),[0,a(ai),0]]],aLY=[0,a(am),[0,a(ko),0]],aLZ=[0,a(am),[0,a(ko),[0,a(aj),0]]],aL0=[0,a(am),[0,a(ko),0]],aL1=a(n),aL3=[0,a(d),mS,11,mS,52,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLW=[0,a(d),mS,11,mS,52,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLT=[0,a(D),Dq,14,Dq,49,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLS=a(ha),aLM=[0,a(D),hF,14,hF,70,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLI=[0,a(D),g$,14,g$,69,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLE=[0,a(D),i_,14,i_,75,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLz=[0,a(D),B7,5,B7,44,[0,a(AM),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLr=[0,a(am),[0,a(dt),[0,a(ai),0]]],aLs=[0,a(am),[0,a(dt),0]],aLt=[0,a(am),[0,a(dt),[0,a(aj),0]]],aLu=[0,a(am),[0,a(dt),0]],aLv=[0,a(am),[0,a(dt),[0,a(ai),0]]],aLw=[0,a(am),[0,a(dt),0]],aLx=[0,a(am),[0,a(dt),[0,a(aj),0]]],aLy=[0,a(am),[0,a(dt),0]],aLA=[0,a(d),hK,10,hK,14,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLq=[0,a(D),zE,14,zE,42,[0,a(AM),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLm=[0,a(am),[0,a(dt),[0,a(ai),0]]],aLn=[0,a(am),[0,a(dt),0]],aLo=[0,a(am),[0,a(dt),[0,a(aj),0]]],aLp=[0,a(am),[0,a(dt),0]],aLh=[0,a(D),BO,5,BO,41,[0,a(rx),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLi=[0,a(d),jb,11,jb,41,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLg=[0,a(D),CJ,14,CJ,44,[0,a(rx),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLj=[0,a(d),jb,11,jb,41,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLf=[0,a(d),jb,11,jb,41,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLc=[0,a(D),yf,14,yf,36,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aK9=[0,a(O),616,5,gM,33,[0,a(oO),[0,a(aD),[0,a(K),0]]]],aKR=a(n),aKS=a(wH),aKT=a(vl),aKU=a(v),aKV=a(Fa),aKW=a(yl),aKX=a(n),aKY=a(Aa),aKZ=a(Dx),aK0=a(v),aK1=a(vI),aK2=a(zH),aK3=a(n),aK4=a(yO),aK5=a(DQ),aK6=a(v),aK7=a("35600"),aK8=a(l7),aK_=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aKP=[0,a(O),705,5,707,33,[0,a(oO),[0,a(aD),[0,a(K),0]]]],aKx=a(n),aKy=a(rt),aKz=a("220000"),aKA=a(v),aKB=a("38000"),aKC=a("260000"),aKD=a(n),aKE=a("164200"),aKF=a(yU),aKG=a(v),aKH=a(E0),aKI=a("231200"),aKJ=a(n),aKK=a("153200"),aKL=a("183700"),aKM=a(v),aKN=a(of),aKO=a("214200"),aKQ=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aKv=[0,a(O),748,5,750,33,[0,a(oO),[0,a(aD),[0,a(K),0]]]],aKd=a(n),aKe=a("148100"),aKf=a("178700"),aKg=a(v),aKh=a("30600"),aKi=a("209300"),aKj=a(n),aKk=a(AT),aKl=a("158900"),aKm=a(v),aKn=a("26900"),aKo=a(xU),aKp=a(n),aKq=a("123300"),aKr=a("147900"),aKs=a(v),aKt=a("24600"),aKu=a(Da),aKw=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aKb=[0,a(O),799,5,gL,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aJV=a(n),aJW=a(wH),aJX=a(vl),aJY=a(v),aJZ=a(Fa),aJ0=a(yl),aJ1=a(n),aJ2=a(Aa),aJ3=a(Dx),aJ4=a(v),aJ5=a(vI),aJ6=a(zH),aJ7=a(n),aJ8=a(yO),aJ9=a(DQ),aJ_=a(v),aJ$=a("34600"),aKa=a(l7),aKc=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aJS=[0,a(O),rl,5,c3,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aJA=a(n),aJB=a(xY),aJC=a(rw),aJD=a(v),aJE=a(Fb),aJF=a(BD),aJG=a(n),aJH=a(DJ),aJI=a(qX),aJJ=a(v),aJK=a(of),aJL=a(zU),aJM=a(n),aJN=a(C4),aJO=a(Ep),aJP=a(v),aJQ=a(CI),aJR=a(xy),aJT=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aJz=[0,a(O),660,5,663,33,[0,a(oO),[0,a(aD),[0,a(K),0]]]],aJh=a(n),aJi=a(xY),aJj=a(rw),aJk=a(v),aJl=a(Fb),aJm=a(BD),aJn=a(n),aJo=a(DJ),aJp=a(qX),aJq=a(v),aJr=a(of),aJs=a(zU),aJt=a(n),aJu=a(C4),aJv=a(Ep),aJw=a(v),aJx=a(CI),aJy=a(xy),aJU=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aJf=[0,a(O),890,5,896,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aI$=a(n),aJa=a("86900"),aJb=a("97100"),aJc=a(v),aJd=a("10200"),aJe=a("107300"),aJg=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aI9=[0,a(O),922,5,jY,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aIR=a(n),aIS=a("198100"),aIT=a("239000"),aIU=a(v),aIV=a("40900"),aIW=a("279900"),aIX=a(n),aIY=a("176800"),aIZ=a("212800"),aI0=a(v),aI1=a("36000"),aI2=a("248800"),aI3=a(n),aI4=a("165000"),aI5=a("197900"),aI6=a(v),aI7=a("32900"),aI8=a("230800"),aI_=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aIP=[0,a(O),gJ,5,969,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aIx=a(n),aIy=a("159500"),aIz=a(v9),aIA=a(v),aIB=a("33000"),aIC=a(ya),aID=a(n),aIE=a("142200"),aIF=a("171200"),aIG=a(v),aIH=a("29000"),aII=a("200200"),aIJ=a(n),aIK=a("132800"),aIL=a("159300"),aIM=a(v),aIN=a("26500"),aIO=a(xU),aIQ=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aIv=[0,a(O),1011,5,ku,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aId=a(n),aIe=a("200100"),aIf=a("141400"),aIg=a(v),aIh=a("41300"),aIi=a("182700"),aIj=a(n),aIk=a("178600"),aIl=a("215000"),aIm=a(v),aIn=a("36400"),aIo=a("251400"),aIp=a(n),aIq=a("166700"),aIr=a(qO),aIs=a(v),aIt=a("33200"),aIu=a("233100"),aIw=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aIb=[0,a(O),jV,5,1058,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aHV=a(n),aHW=a("161100"),aHX=a("194400"),aHY=a(v),aHZ=a("33300"),aH0=a("227700"),aH1=a(n),aH2=a("143600"),aH3=a("172900"),aH4=a(v),aH5=a("29300"),aH6=a("202200"),aH7=a(n),aH8=a("134100"),aH9=a("160900"),aH_=a(v),aH$=a("26800"),aIa=a("187700"),aIc=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aHT=[0,a(O),1102,5,1105,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aHB=a(n),aHC=a(rw),aHD=a("244300"),aHE=a(v),aHF=a("41800"),aHG=a("286100"),aHH=a(n),aHI=a("180700"),aHJ=a("217500"),aHK=a(v),aHL=a("36800"),aHM=a("254300"),aHN=a(n),aHO=a("168700"),aHP=a("202300"),aHQ=a(v),aHR=a("33600"),aHS=a("235900"),aHU=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aHz=[0,a(O),1145,5,qI,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aHh=a(n),aHi=a("30871"),aHj=a("37243"),aHk=a(v),aHl=a("6372"),aHm=a("43615"),aHn=a(n),aHo=a("27548"),aHp=a("33148"),aHq=a(v),aHr=a("5610"),aHs=a("38768"),aHt=a(n),aHu=a("25718"),aHv=a("30840"),aHw=a(v),aHx=a("5122"),aHy=a("35962"),aHA=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aHf=[0,a(O),1191,5,1194,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aGZ=a(n),aG0=a(xn),aG1=a("196700"),aG2=a(v),aG3=a("33700"),aG4=a("230400"),aG5=a(n),aG6=a("145300"),aG7=a("175000"),aG8=a(v),aG9=a("29700"),aG_=a(Cr),aG$=a(n),aHa=a("135700"),aHb=a("162800"),aHc=a(v),aHd=a("27100"),aHe=a("189900"),aHg=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aGX=[0,a(O),1234,5,1237,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aGF=a(n),aGG=a("24849"),aGH=a("29987"),aGI=a(v),aGJ=a("5138"),aGK=a("35125"),aGL=a(n),aGM=a("22151"),aGN=a("26679"),aGO=a(v),aGP=a("4528"),aGQ=a("31207"),aGR=a(n),aGS=a("20687"),aGT=a("24818"),aGU=a(v),aGV=a("4131"),aGW=a("28949"),aGY=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aGD=[0,a(O),1279,5,1282,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aGl=a(n),aGm=a("31241"),aGn=a("37689"),aGo=a(v),aGp=a("6448"),aGq=a("44137"),aGr=a(n),aGs=a("27879"),aGt=a("33556"),aGu=a(v),aGv=a("5677"),aGw=a("39233"),aGx=a(n),aGy=a("26027"),aGz=a("31210"),aGA=a(v),aGB=a("5183"),aGC=a("36393"),aGE=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aGj=[0,a(O),1323,5,1326,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aF3=a(n),aF4=a("25147"),aF5=a("30347"),aF6=a(v),aF7=a("5200"),aF8=a("35547"),aF9=a(n),aF_=a("22417"),aF$=a("26999"),aGa=a(v),aGb=a("4582"),aGc=a("31581"),aGd=a(n),aGe=a("20935"),aGf=a(BE),aGg=a(v),aGh=a("4181"),aGi=a("29297"),aGk=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aF1=[0,a(O),1368,5,1371,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aFJ=a(n),aFK=a("31616"),aFL=a("38141"),aFM=a(v),aFN=a("6525"),aFO=a("44666"),aFP=a(n),aFQ=a("28214"),aFR=a("33959"),aFS=a(v),aFT=a("5745"),aFU=a("39704"),aFV=a(n),aFW=a("26339"),aFX=a("31584"),aFY=a(v),aFZ=a("5245"),aF0=a("36829"),aF2=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aFH=[0,a(O),1412,5,1415,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aFp=a(n),aFq=a("25449"),aFr=a("30711"),aFs=a(v),aFt=a("5262"),aFu=a("35973"),aFv=a(n),aFw=a("22686"),aFx=a("27323"),aFy=a(v),aFz=a("4637"),aFA=a("31960"),aFB=a(n),aFC=a("21186"),aFD=a("25417"),aFE=a(v),aFF=a("4231"),aFG=a("29648"),aFI=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aFn=[0,a(O),1457,5,1460,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aE7=a(n),aE8=a("32185"),aE9=a("38827"),aE_=a(v),aE$=a("6642"),aFa=a("45469"),aFb=a(n),aFc=a("28722"),aFd=a(xH),aFe=a(v),aFf=a("5848"),aFg=a("40418"),aFh=a(n),aFi=a("26813"),aFj=a("32152"),aFk=a(v),aFl=a("5339"),aFm=a("37491"),aFo=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aE5=[0,a(O),y2,5,DA,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aEN=a(n),aEO=a("25907"),aEP=a(w5),aEQ=a(v),aER=a("5357"),aES=a("36621"),aET=a(n),aEU=a("23094"),aEV=a("27814"),aEW=a(v),aEX=a("4720"),aEY=a("32534"),aEZ=a(n),aE0=a("21567"),aE1=a("25874"),aE2=a(v),aE3=a("4307"),aE4=a("30181"),aE6=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aEL=[0,a(O),1546,5,1549,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aEt=a(n),aEu=a("33086"),aEv=a("39914"),aEw=a(v),aEx=a("6828"),aEy=a("46742"),aEz=a(n),aEA=a("29526"),aEB=a("35538"),aEC=a(v),aED=a("6012"),aEE=a("41550"),aEF=a(n),aEG=a("27564"),aEH=a("33052"),aEI=a(v),aEJ=a("5488"),aEK=a("38541"),aEM=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aEr=[0,a(O),1590,5,1593,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aD$=a(n),aEa=a("26632"),aEb=a("32139"),aEc=a(v),aEd=a("5507"),aEe=a("37646"),aEf=a(n),aEg=a("23741"),aEh=a("28593"),aEi=a(v),aEj=a("4852"),aEk=a("33445"),aEl=a(n),aEm=a("22171"),aEn=a("36598"),aEo=a(v),aEp=a("4428"),aEq=a("31026"),aEs=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aD9=[0,a(O),1635,5,1638,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aDR=a(n),aDS=a("33999"),aDT=a("41016"),aDU=a(v),aDV=a("7016"),aDW=a("48032"),aDX=a(n),aDY=a("30341"),aDZ=a("36519"),aD0=a(v),aD1=a("6178"),aD2=a("42697"),aD3=a(n),aD4=a("28325"),aD5=a("33964"),aD6=a(v),aD7=a("5639"),aD8=a("39605"),aD_=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aDP=[0,a(O),1679,5,1682,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aDx=a(n),aDy=a("27367"),aDz=a("33026"),aDA=a(v),aDB=a("5659"),aDC=a("38685"),aDD=a(n),aDE=a("24396"),aDF=a("29382"),aDG=a(v),aDH=a(Bs),aDI=a("34368"),aDJ=a(n),aDK=a("22783"),aDL=a("27332"),aDM=a(v),aDN=a("4550"),aDO=a("31882"),aDQ=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aDv=[0,a(O),1724,5,qp,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aDd=a(n),aDe=a("35002"),aDf=a("42226"),aDg=a(v),aDh=a("7223"),aDi=a("49449"),aDj=a(n),aDk=a("31236"),aDl=a("37596"),aDm=a(v),aDn=a("6360"),aDo=a("43957"),aDp=a(n),aDq=a("29161"),aDr=a("34966"),aDs=a(v),aDt=a("5805"),aDu=a("40773"),aDw=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aDb=[0,a(O),1768,5,1771,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aCV=a(n),aCW=a("28174"),aCX=a("34000"),aCY=a(v),aCZ=a("5826"),aC0=a("39826"),aC1=a(n),aC2=a(BE),aC3=a("30249"),aC4=a(v),aC5=a("5133"),aC6=a("35382"),aC7=a(n),aC8=a("23455"),aC9=a("28138"),aC_=a(v),aC$=a("4684"),aDa=a("32823"),aDc=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aCT=[0,a(O),1813,5,1816,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aCB=a(n),aCC=a("35114"),aCD=a("42361"),aCE=a(v),aCF=a("7246"),aCG=a("49607"),aCH=a(n),aCI=a("31336"),aCJ=a("37716"),aCK=a(v),aCL=a("6380"),aCM=a("44098"),aCN=a(n),aCO=a("29254"),aCP=a("35078"),aCQ=a(v),aCR=a("5824"),aCS=a("40903"),aCU=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aCz=[0,a(O),1857,5,1860,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aCh=a(n),aCi=a("28264"),aCj=a("34109"),aCk=a(v),aCl=a("5845"),aCm=a("39953"),aCn=a(n),aCo=a("25196"),aCp=a("30346"),aCq=a(v),aCr=a("5149"),aCs=a("35495"),aCt=a(n),aCu=a("23530"),aCv=a("28228"),aCw=a(v),aCx=a("4699"),aCy=a("32928"),aCA=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aCf=[0,a(O),1902,5,1905,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aBZ=a(n),aB0=a("35500"),aB1=a("42827"),aB2=a(v),aB3=a("7326"),aB4=a("50153"),aB5=a(n),aB6=a("31681"),aB7=a("38131"),aB8=a(v),aB9=a("6450"),aB_=a("44583"),aB$=a(n),aCa=a("29576"),aCb=a("35464"),aCc=a(v),aCd=a("5888"),aCe=a("41353"),aCg=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aBX=[0,a(O),1946,5,1949,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aBF=a(n),aBG=a("28575"),aBH=a("34484"),aBI=a(v),aBJ=a("5909"),aBK=a("40392"),aBL=a(n),aBM=a("25473"),aBN=a("30680"),aBO=a(v),aBP=a("5206"),aBQ=a("35885"),aBR=a(n),aBS=a("23789"),aBT=a("28539"),aBU=a(v),aBV=a("4751"),aBW=a("33290"),aBY=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aBD=[0,a(O),1991,5,cR,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aBl=a(n),aBm=a("35855"),aBn=a("43255"),aBo=a(v),aBp=a("7399"),aBq=a("50655"),aBr=a(n),aBs=a("31998"),aBt=a("38512"),aBu=a(v),aBv=a("6515"),aBw=a("45029"),aBx=a(n),aBy=a("29872"),aBz=a("35819"),aBA=a(v),aBB=a("5947"),aBC=a("41767"),aBE=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aBj=[0,a(O),2036,5,2039,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aA3=a(n),aA4=a("28861"),aA5=a(DL),aA6=a(v),aA7=a("5968"),aA8=a("40796"),aA9=a(n),aA_=a("25728"),aA$=a("30987"),aBa=a(v),aBb=a("5258"),aBc=a("36244"),aBd=a(n),aBe=a("24027"),aBf=a("28824"),aBg=a(v),aBh=a("4799"),aBi=a(za),aBk=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aA1=[0,a(O),2081,5,2084,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aAJ=a(n),aAK=a("36626"),aAL=a("44185"),aAM=a(v),aAN=a("7558"),aAO=a("51744"),aAP=a(n),aAQ=a("32686"),aAR=a(xR),aAS=a(v),aAT=a("6655"),aAU=a("45997"),aAV=a(n),aAW=a("30514"),aAX=a("36589"),aAY=a(v),aAZ=a("6075"),aA0=a("42665"),aA2=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aAH=[0,a(O),2125,5,2128,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],aAp=a(n),aAq=a("29482"),aAr=a("35578"),aAs=a(v),aAt=a("6096"),aAu=a("41673"),aAv=a(n),aAw=a("26281"),aAx=a("31653"),aAy=a(v),aAz=a("5371"),aAA=a("37023"),aAB=a(n),aAC=a("24544"),aAD=a("29444"),aAE=a(v),aAF=a("4902"),aAG=a("34346"),aAI=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aAn=[0,a(O),2170,5,2173,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],az7=a(n),az8=a("36835"),az9=a("44437"),az_=a(v),az$=a("7601"),aAa=a("52039"),aAb=a(n),aAc=a("32872"),aAd=a("39564"),aAe=a(v),aAf=a("6693"),aAg=a("46259"),aAh=a(n),aAi=a("30688"),aAj=a("36798"),aAk=a(v),aAl=a("6110"),aAm=a("42908"),aAo=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],az5=[0,a(O),2214,5,2217,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],azN=a(n),azO=a("29650"),azP=a("35781"),azQ=a(v),azR=a("6131"),azS=a("41911"),azT=a(n),azU=a("26431"),azV=a("31833"),azW=a(v),azX=a("5402"),azY=a("37234"),azZ=a(n),az0=a("24684"),az1=a("29612"),az2=a(v),az3=a("4930"),az4=a("34542"),az6=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],azL=[0,a(O),2259,5,2262,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],azt=a(n),azu=a("36864"),azv=a("44473"),azw=a(v),azx=a("7607"),azy=a("52081"),azz=a(n),azA=a("32898"),azB=a("39596"),azC=a(v),azD=a("6698"),azE=a("46296"),azF=a(n),azG=a("30713"),azH=a("36827"),azI=a(v),azJ=a("6115"),azK=a("42942"),azM=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],azr=[0,a(O),2303,5,2306,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],ay$=a(n),aza=a("29674"),azb=a("35810"),azc=a(v),azd=a("6136"),aze=a("41945"),azf=a(n),azg=a("26452"),azh=a("31858"),azi=a(v),azj=a("5406"),azk=a("37264"),azl=a(n),azm=a("24704"),azn=a("29636"),azo=a(v),azp=a("4934"),azq=a(xH),azs=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],ay9=[0,a(O),2348,5,2351,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],ayR=a(n),ayS=a("37140"),ayT=a("44807"),ayU=a(v),ayV=a("7664"),ayW=a("52472"),ayX=a(n),ayY=a("33145"),ayZ=a("39893"),ay0=a(v),ay1=a("6748"),ay2=a("46643"),ay3=a(n),ay4=a("30943"),ay5=a("37103"),ay6=a(v),ay7=a("6161"),ay8=a("43264"),ay_=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],ayP=[0,a(O),2392,5,2395,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],ayx=a(n),ayy=a("29897"),ayz=a("36079"),ayA=a(v),ayB=a("6182"),ayC=a("42260"),ayD=a(n),ayE=a("26650"),ayF=a("32097"),ayG=a(v),ayH=a("5447"),ayI=a("37543"),ayJ=a(n),ayK=a("24889"),ayL=a("29858"),ayM=a(v),ayN=a("4971"),ayO=a(DL),ayQ=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],ayv=[0,a(O),2437,5,2439,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],ayd=a(n),aye=a("37252"),ayf=a("44941"),ayg=a(v),ayh=a("7687"),ayi=a("52629"),ayj=a(n),ayk=a("33244"),ayl=a("40013"),aym=a(v),ayn=a("6768"),ayo=a("46783"),ayp=a(n),ayq=a("31036"),ayr=a("37215"),ays=a(v),ayt=a("6179"),ayu=a("43394"),ayw=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],ayb=[0,a(O),2480,5,2482,36,[0,a(a5),[0,a(aD),[0,a(K),0]]]],axV=a(n),axW=a("29986"),axX=a("36187"),axY=a(v),axZ=a("6201"),ax0=a("42386"),ax1=a(n),ax2=a("26730"),ax3=a("32193"),ax4=a(v),ax5=a("5463"),ax6=a("37656"),ax7=a(n),ax8=a("24964"),ax9=a("29948"),ax_=a(v),ax$=a(Bs),aya=a("34934"),ayc=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aK$=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axU=[0,a(d),X,11,X,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axQ=[0,a(D),EU,5,EU,28,[0,a(CS),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],axR=[0,a(d),gK,11,gK,41,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axP=[0,a(D),AD,14,AD,44,[0,a(CS),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],axL=[0,a(D),DE,14,DE,36,[0,a(iG),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],axJ=a(n),axK=a(n),axM=[0,a(d),km,10,km,32,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axI=[0,a(d),km,10,km,32,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axD=[0,a(O),we,7,we,18,[0,a(i6),[0,a(aD),[0,a(K),0]]]],axA=a(gt),axB=a(qM),axC=a(fj),axE=[0,a(d),b7,11,b7,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axy=[0,a(aJ),jh,7,jh,18,[0,a(i6),[0,a(bv),[0,a(aK),0]]]],axv=a(gF),axw=a(qo),axx=a(fb),axz=[0,a(d),b7,11,b7,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axt=[0,a(aJ),vO,7,vO,18,[0,a(i6),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],axq=a(ov),axr=a(Bg),axs=a(mC),axu=[0,a(d),b7,11,b7,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axF=[0,a(d),b7,11,b7,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axn=[0,a(O),zp,29,zp,64,[0,a(nk),[0,a(aD),[0,a(K),0]]]],axl=a(gt),axm=a(fj),axo=[0,a(d),b7,11,b7,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axj=[0,a(aJ),rB,29,rB,64,[0,a(nk),[0,a(bv),[0,a(aK),0]]]],axh=a(gF),axi=a(fb),axk=[0,a(d),b7,11,b7,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axf=[0,a(aJ),w4,29,w4,64,[0,a(nk),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],axd=a(ov),axe=a(mC),axg=[0,a(d),b7,11,b7,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axp=[0,a(d),b7,11,b7,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aw9=[0,a(d),iR,14,iR,50,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aw5=[0,a(O),v5,14,v5,50,[0,a("Article 25"),[0,a(aD),[0,a(K),0]]]],aw0=a(v_),aw1=a(r2),aw2=a("0.0172"),aw3=a(v_),aw4=a(r2),awU=[0,a(D),hr,14,hr,64,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],awQ=[0,a(D),ik,14,ik,59,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],awM=[0,a(fy),ey,14,ey,36,[0,a(Cp),[0,a(yJ),0]]],awK=a(vb),awL=a(ek),awG=[0,a(O),zR,14,zR,47,[0,a(r4),[0,a(aD),[0,a(K),0]]]],awF=a("0.416"),awB=[0,a(O),BV,14,BV,47,[0,a(r4),[0,a(aD),[0,a(K),0]]]],awA=a(uY),aww=[0,a(O),yd,14,yd,47,[0,a(r4),[0,a(aD),[0,a(K),0]]]],awv=a("560085"),awr=[0,a(O),A$,14,A$,48,[0,a("Article 26"),[0,a(aD),[0,a(K),0]]]],awq=a(z$),awm=[0,a(O),xJ,15,xJ,49,[0,a("Article 22"),[0,a(aD),[0,a(K),0]]]],awl=a("2211133"),awh=[0,a(O),xl,14,xl,42,[0,a("Article 21"),[0,a(aD),[0,a(K),0]]]],awg=a(h_),awc=[0,a(O),u6,14,u6,41,[0,a("Article 20"),[0,a(aD),[0,a(K),0]]]],awb=a(ka),awd=[0,a(d),ox,11,ox,38,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awa=[0,a(d),ox,11,ox,38,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awe=[0,a(am),[0,a("montant_forfaitaire_d832_10"),0]],awi=[0,a(d),ou,11,ou,39,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awf=[0,a(d),ou,11,ou,39,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awj=[0,a(am),[0,a("montant_minimal_aide_d832_10"),0]],awn=[0,a(d),oc,11,oc,45,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awk=[0,a(d),oc,11,oc,45,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awo=[0,a(am),[0,a("coefficient_multiplicateur_d832_11"),0]],aws=[0,a(d),oF,11,oF,45,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awp=[0,a(d),oF,11,oF,45,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awt=[0,a(am),[0,a("coefficient_multiplicateur_d832_18"),0]],awx=[0,a(d),mc,11,mc,44,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awu=[0,a(d),mc,11,mc,44,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awy=[0,a(am),[0,a("montant_limite_tranches_d832_15_1"),0]],awC=[0,a(d),kI,11,kI,44,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awz=[0,a(d),kI,11,kI,44,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awD=[0,a(am),[0,a("taux_tranche_inf\xc3\xa9rieure_d832_15_1"),0]],awH=[0,a(d),m6,11,m6,44,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awE=[0,a(d),m6,11,m6,44,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awI=[0,a(am),[0,a("taux_tranche_sup\xc3\xa9rieure_d832_15_1"),0]],awN=[0,a(d),mM,11,mM,33,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awJ=[0,a(d),mM,11,mM,33,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awO=[0,a(am),[0,a(EB),0]],awR=[0,a(D),ik,14,ik,59,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],awS=[0,a(am),[0,a(m7),0]],awP=[0,a(D),ik,14,ik,59,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],awV=[0,a(D),hr,14,hr,64,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],awW=[0,a(am),[0,a(nP),0]],awT=[0,a(D),hr,14,hr,64,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],awX=[0,a(am),[0,a(f4),[0,a(kh),0]]],awY=[0,a(am),[0,a(f4),[0,a(kh),0]]],aw6=[0,a(d),nS,11,nS,47,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],awZ=[0,a(d),nS,11,nS,47,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aw7=[0,a(am),[0,a("coefficient_multiplicateur_d832_17_3"),0]],aw_=[0,a(d),iR,14,iR,50,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aw$=[0,a(am),[0,a(kq),0]],aw8=[0,a(d),iR,14,iR,50,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axa=[0,a(am),[0,a(eF),[0,a(bh),0]]],axb=[0,a(am),[0,a(eF),[0,a(bh),0]]],axG=[0,a(d),b7,11,b7,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axc=[0,a(d),b7,11,b7,46,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axH=[0,a(am),[0,a("montant_forfaitaire_charges_d832_10"),0]],axN=[0,a(am),[0,a(bD),0]],axS=[0,a(d),gK,11,gK,41,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axO=[0,a(d),gK,11,gK,41,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],axT=[0,a(am),[0,a("ressources_m\xc3\xa9nage_avec_d832_18"),0]],aLa=[0,a(am),[0,a(dt),0]],aLd=[0,a(d),ne,11,ne,33,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLb=[0,a(d),ne,11,ne,33,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLe=[0,a(am),[0,a(vx),0]],aLk=[0,a(am),[0,a(ko),0]],aLB=[0,a(d),hK,10,hK,14,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLl=[0,a(d),hK,10,hK,14,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLC=[0,a(am),[0,a("plafond_mensualit\xc3\xa9_d832_10_3_base"),0]],aLF=[0,a(D),i_,14,i_,75,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLG=[0,a(am),[0,a(mz),0]],aLD=[0,a(D),i_,14,i_,75,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLJ=[0,a(D),g$,14,g$,69,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLK=[0,a(am),[0,a(ob),0]],aLH=[0,a(D),g$,14,g$,69,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLN=[0,a(D),hF,14,hF,70,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLO=[0,a(am),[0,a(mn),0]],aLL=[0,a(D),hF,14,hF,70,[0,a(d0),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aLP=[0,a(am),[0,a(fD),[0,a(dE),0]]],aLQ=[0,a(am),[0,a(fD),[0,a(dE),0]]],aLU=[0,a(d),kg,10,kg,17,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLR=[0,a(d),kg,10,kg,17,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aLV=[0,a(am),[0,a("coefficient_prise_en_charge_d832_10_formule"),0]],aL4=[0,a(am),[0,a(kE),0]],aMd=[0,a(d),ex,10,ex,25,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aL5=[0,a(d),ex,10,ex,25,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMe=[0,a(am),[0,a("plafond_mensualit\xc3\xa9_d832_10_3_copropri\xc3\xa9taires"),0]],aMm=[0,a(d),fQ,10,fQ,29,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMf=[0,a(d),fQ,10,fQ,29,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMn=[0,a(am),[0,a(yq),0]],aMt=[0,a(d),l6,10,l6,17,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMo=[0,a(d),l6,10,l6,17,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMu=[0,a(am),[0,a("coefficient_prise_en_charge_d832_10_arrondi"),0]],aMI=[0,a(am),[0,a(eK),0]],aML=[0,a(d),oK,10,oK,29,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMJ=[0,a(d),oK,10,oK,29,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMM=[0,a(am),[0,a(EA),0]],aMR=[0,a(d),on,10,on,15,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMN=[0,a(d),on,10,on,15,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aMS=[0,a(am),[0,a("coefficient_prise_en_charge_d832_10_seuil"),0]],aM7=[0,a(am),[0,a(bE),0]],aNa=[0,a(d),nC,10,nC,29,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aM8=[0,a(d),nC,10,nC,29,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],aNb=[0,a(am),[0,a(eV),0]],aNk=[0,a(am),[0,a(fg),0]],av9=[0,a(D),w3,14,w3,36,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],av4=[0,a(az),[0,a(bE),[0,a(ai),0]]],av5=[0,a(az),[0,a(bE),0]],av6=[0,a(az),[0,a(bE),[0,a(aj),0]]],av7=[0,a(az),[0,a(bE),0]],av8=a(n),av_=[0,a(d),mR,10,mR,25,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],av3=[0,a(d),mR,10,mR,25,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],av0=[0,a(D),w6,14,w6,33,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],avY=a(n),avZ=a(n),avU=[0,a(D),xe,14,xe,36,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],avJ=[0,a(az),[0,a(eK),[0,a(ai),0]]],avK=[0,a(az),[0,a(eK),0]],avL=[0,a(az),[0,a(eK),[0,a(aj),0]]],avM=[0,a(az),[0,a(eK),0]],avN=[0,a(bh),[0,a(bK),[0,a(ai),0]]],avO=[0,a(bh),[0,a(bK),0]],avP=[0,a(bh),[0,a(bK),[0,a(aj),0]]],avQ=[0,a(bh),[0,a(bK),0]],avR=a(kM),avS=a(n),avT=a(n),avV=[0,a(d),nr,10,nr,40,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],avI=[0,a(d),nr,10,nr,40,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],avE=[0,a(D),wG,5,wG,26,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],avC=a(oq),avD=a(oq),avF=[0,a(d),jf,10,jf,15,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],avB=[0,a(D),AY,14,AY,49,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],avz=a(ha),avA=a(ha),avv=[0,a(D),uB,14,uB,36,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],avl=[0,a(az),[0,a(bD),[0,a(ai),0]]],avm=[0,a(az),[0,a(bD),0]],avn=[0,a(az),[0,a(bD),[0,a(aj),0]]],avo=[0,a(az),[0,a(bD),0]],avp=[0,a(az),[0,a(kn),[0,a(ai),0]]],avq=[0,a(az),[0,a(kn),0]],avr=[0,a(az),[0,a(kn),[0,a(aj),0]]],avs=[0,a(az),[0,a(kn),0]],avt=a(n),avu=a(n),avw=[0,a(d),l0,10,l0,20,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],avk=[0,a(d),l0,10,l0,20,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],avg=[0,a(D),z7,5,z7,26,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],avd=a(c0),ave=a(c0),avf=a(lM),avh=[0,a(d),hy,10,hy,17,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],avc=[0,a(D),E6,14,E6,49,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],au$=a(c0),ava=a(c0),avb=a(lM),au7=[0,a(D),BM,14,BM,40,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],au3=[0,a(D),uK,14,uK,55,[0,a(yi),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auY=[0,a(az),[0,a(kr),[0,a(ai),0]]],auZ=[0,a(az),[0,a(kr),0]],au0=[0,a(az),[0,a(kr),[0,a(aj),0]]],au1=[0,a(az),[0,a(kr),0]],au2=a(n),au4=[0,a(d),oB,11,oB,52,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],auX=[0,a(d),oB,11,oB,52,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],auT=[0,a(D),wr,5,wr,26,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auS=a(oq),auU=[0,a(d),h4,10,h4,17,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],auR=[0,a(D),uF,14,uF,49,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auO=a(n),auP=a(n),auQ=a(ha),auI=[0,a(D),iL,14,iL,70,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auE=[0,a(D),ja,14,ja,69,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auA=[0,a(D),iN,14,iN,75,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auw=[0,a(D),Cd,14,Cd,44,[0,a(yi),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aux=[0,a(d),nx,11,nx,41,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],auv=[0,a(d),nx,11,nx,41,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aur=[0,a(D),v4,14,v4,36,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aus=[0,a(d),gM,19,gM,41,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aun=[0,a(D),uE,14,uE,40,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auj=[0,a(O),Ee,14,Ee,48,[0,a(vD),[0,a(fc),[0,a(K),0]]]],auh=a("2142091"),aui=a("1339340"),aud=[0,a(O),x4,14,x4,41,[0,a("Article 32"),[0,a(fc),[0,a(K),0]]]],aub=a(qy),auc=a("2668"),at7=[0,a(D),hx,14,hx,64,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],at3=[0,a(D),iX,14,iX,59,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],atZ=[0,a(D),hV,14,hV,55,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],atV=[0,a(D),BY,14,BY,36,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],atT=a(n),atU=a(n),atW=[0,a(d),lF,10,lF,32,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],atS=[0,a(d),lF,10,lF,32,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],atO=[0,a(O),zd,14,zd,48,[0,a(sb),[0,a(fc),[0,a(K),0]]]],ate=a(n),atf=a("46192"),atg=a("54152"),ath=a(v),ati=a("57741"),atj=a(T),atk=a("61794"),atl=a(Y),atm=a("65862"),atn=a(aa),ato=a("7368"),atp=a("71039"),atq=a(n),atr=a("42242"),ats=a("49299"),att=a(v),atu=a("52565"),atv=a(T),atw=a("56268"),atx=a(Y),aty=a("59957"),atz=a(aa),atA=a("6659"),atB=a("63887"),atC=a(n),atD=a("40096"),atE=a("46634"),atF=a(v),atG=a("49475"),atH=a(T),atI=a("52740"),atJ=a(Y),atK=a("56004"),atL=a(aa),atM=a("6180"),atN=a("59675"),atP=[0,a(d),eH,10,eH,44,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],atc=[0,a(aJ),he,14,he,48,[0,a(sb),[0,a(bv),[0,a(aK),0]]]],asE=a(n),asF=a("44630"),asG=a("52321"),asH=a(v),asI=a("55788"),asJ=a(T),asK=a("59704"),asL=a(Y),asM=a("63635"),asN=a(aa),asO=a("7119"),asP=a("68637"),asQ=a(n),asR=a("40814"),asS=a("47632"),asT=a(v),asU=a("50787"),asV=a(T),asW=a("54365"),asX=a(Y),asY=a("57929"),asZ=a(aa),as0=a("6434"),as1=a("61727"),as2=a(n),as3=a("38740"),as4=a("45057"),as5=a(v),as6=a("47802"),as7=a(T),as8=a("50957"),as9=a(Y),as_=a("54110"),as$=a(aa),ata=a("5971"),atb=a("57657"),atd=[0,a(d),eH,10,eH,44,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],asC=[0,a(aJ),u4,14,u4,48,[0,a(sb),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],ar4=a(n),ar5=a("44443"),ar6=a("52101"),ar7=a(v),ar8=a("55555"),ar9=a(T),ar_=a("59454"),ar$=a(Y),asa=a("63369"),asb=a(aa),asc=a("7089"),asd=a("68350"),ase=a(n),asf=a("40643"),asg=a("47433"),ash=a(v),asi=a("50575"),asj=a(T),ask=a("54138"),asl=a(Y),asm=a("57687"),asn=a(aa),aso=a("6407"),asp=a("61469"),asq=a(n),asr=a("38578"),ass=a("44869"),ast=a(v),asu=a("47602"),asv=a(T),asw=a("50744"),asx=a(Y),asy=a("53884"),asz=a(aa),asA=a("5946"),asB=a("57416"),asD=[0,a(d),eH,10,eH,44,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arY=[0,a(d),h0,14,h0,50,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arT=[0,a(D),xk,14,xk,35,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],arU=[0,a(d),h8,12,h8,33,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arP=[0,a(O),yj,14,yj,42,[0,a("Article 29"),[0,a(fc),[0,a(K),0]]]],arO=a(h_),arK=[0,a(O),uy,14,uy,41,[0,a("Article 28"),[0,a(fc),[0,a(K),0]]]],arJ=a(ka),arF=[0,a(O),Cl,14,Cl,35,[0,a(vD),[0,a(fc),[0,a(K),0]]]],arE=a("121726"),arG=[0,a(d),oe,10,oe,31,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arD=[0,a(d),oe,10,oe,31,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arH=[0,a(az),[0,a("coefficient_r_d832_25"),0]],arL=[0,a(d),lZ,11,lZ,38,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arI=[0,a(d),lZ,11,lZ,38,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arM=[0,a(az),[0,a("montant_forfaitaire_d832_24"),0]],arQ=[0,a(d),mj,11,mj,39,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arN=[0,a(d),mj,11,mj,39,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arR=[0,a(az),[0,a("montant_minimal_aide_d823_24"),0]],arV=[0,a(d),h8,12,h8,33,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arS=[0,a(d),h8,12,h8,33,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],arW=[0,a(az),[0,a("condition_2_du_832_25"),0]],arZ=[0,a(d),h0,14,h0,50,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],ar0=[0,a(az),[0,a(kq),0]],arX=[0,a(d),h0,14,h0,50,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],ar1=[0,a(az),[0,a(eF),[0,a(bh),0]]],ar2=[0,a(az),[0,a(eF),[0,a(bh),0]]],atQ=[0,a(d),eH,10,eH,44,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],ar3=[0,a(d),eH,10,eH,44,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],atR=[0,a(az),[0,a("plafond_\xc3\xa9quivalence_loyer_\xc3\xa9ligible"),0]],atX=[0,a(az),[0,a(bD),0]],at0=[0,a(D),hV,14,hV,55,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],at1=[0,a(az),[0,a(A1),0]],atY=[0,a(D),hV,14,hV,55,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],at4=[0,a(D),iX,14,iX,59,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],at5=[0,a(az),[0,a(m7),0]],at2=[0,a(D),iX,14,iX,59,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],at8=[0,a(D),hx,14,hx,64,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],at9=[0,a(az),[0,a(nP),0]],at6=[0,a(D),hx,14,hx,64,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],at_=[0,a(az),[0,a(f4),[0,a(kp),0]]],at$=[0,a(az),[0,a(f4),[0,a(kp),0]]],aue=[0,a(d),nm,11,nm,38,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aua=[0,a(d),nm,11,nm,38,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],auf=[0,a(az),[0,a("montant_forfaitaire_d832_27"),0]],auk=[0,a(d),me,10,me,44,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aug=[0,a(d),me,10,me,44,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aul=[0,a(az),[0,a("coefficient_multiplicateur_d832_25"),0]],auo=[0,a(d),j7,10,j7,36,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aum=[0,a(d),j7,10,j7,36,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aup=[0,a(az),[0,a("\xc3\xa9quivalence_loyer_\xc3\xa9ligible"),0]],aut=[0,a(d),gM,19,gM,41,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],auq=[0,a(d),gM,19,gM,41,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],auu=[0,a(az),[0,a(C$),0]],auy=[0,a(az),[0,a(kr),0]],auB=[0,a(D),iN,14,iN,75,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auC=[0,a(az),[0,a(mz),0]],auz=[0,a(D),iN,14,iN,75,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auF=[0,a(D),ja,14,ja,69,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auG=[0,a(az),[0,a(ob),0]],auD=[0,a(D),ja,14,ja,69,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auJ=[0,a(D),iL,14,iL,70,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auK=[0,a(az),[0,a(mn),0]],auH=[0,a(D),iL,14,iL,70,[0,a(cQ),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],auL=[0,a(az),[0,a(fD),[0,a(dE),0]]],auM=[0,a(az),[0,a(fD),[0,a(dE),0]]],auV=[0,a(d),h4,10,h4,17,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],auN=[0,a(d),h4,10,h4,17,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],auW=[0,a(az),[0,a("coefficient_prise_en_charge_d832_25_formule"),0]],au5=[0,a(az),[0,a(kn),0]],au8=[0,a(d),n3,10,n3,36,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],au6=[0,a(d),n3,10,n3,36,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],au9=[0,a(az),[0,a("\xc3\xa9quivalence_loyer_minimale"),0]],avi=[0,a(d),hy,10,hy,17,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],au_=[0,a(d),hy,10,hy,17,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],avj=[0,a(az),[0,a("coefficient_prise_en_charge_d832_25_arrondi"),0]],avx=[0,a(az),[0,a(eK),0]],avG=[0,a(d),jf,10,jf,15,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],avy=[0,a(d),jf,10,jf,15,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],avH=[0,a(az),[0,a("coefficient_prise_en_charge_d832_25_seuil"),0]],avW=[0,a(az),[0,a(bE),0]],av1=[0,a(d),j4,10,j4,29,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],avX=[0,a(d),j4,10,j4,29,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],av2=[0,a(az),[0,a(eV),0]],av$=[0,a(az),[0,a(fg),0]],art=[0,a(D),qp,14,qp,33,[0,a(er),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],arr=a(n),ars=a(n),arn=[0,a(D),zW,14,zW,39,[0,a(rz),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],arl=a(n),arm=a(n),arh=[0,a(D),vk,14,vk,36,[0,a(er),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],arc=[0,a(aM),[0,a(j_),[0,a(ai),0]]],ard=[0,a(aM),[0,a(j_),0]],are=[0,a(aM),[0,a(j_),[0,a(aj),0]]],arf=[0,a(aM),[0,a(j_),0]],arg=a(n),ari=[0,a(d),mB,10,mB,25,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],arb=[0,a(d),mB,10,mB,25,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aq_=[0,a(D),x_,14,x_,42,[0,a(rz),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aq6=[0,a(aB),By,14,By,36,[0,a(qG),[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aq0=[0,a(aM),[0,a(bE),[0,a(ai),0]]],aq1=[0,a(aM),[0,a(bE),0]],aq2=[0,a(aM),[0,a(bE),[0,a(aj),0]]],aq3=[0,a(aM),[0,a(bE),0]],aq4=a(n),aq5=a(n),aq7=[0,a(d),nZ,10,nZ,36,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqZ=[0,a(d),nZ,10,nZ,36,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqT=[0,a(aJ),EY,14,EY,33,[0,a(cD),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],aqR=a(hv),aqS=a(hv),aqU=[0,a(d),eB,10,eB,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqQ=[0,a(aJ),q_,14,q_,33,[0,a(cD),[0,a(bv),[0,a(aK),0]]]],aqO=a(hv),aqP=a(hv),aqV=[0,a(d),eB,10,eB,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqN=[0,a(O),fT,14,fT,33,[0,a(cD),[0,a(bR),[0,a(K),0]]]],aqL=a(hv),aqM=a(hv),aqW=[0,a(d),eB,10,eB,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqH=[0,a(D),vm,14,vm,36,[0,a(er),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aqw=[0,a(aM),[0,a(bD),[0,a(ai),0]]],aqx=[0,a(aM),[0,a(bD),0]],aqy=[0,a(aM),[0,a(bD),[0,a(aj),0]]],aqz=[0,a(aM),[0,a(bD),0]],aqA=[0,a(bh),[0,a(bK),[0,a(ai),0]]],aqB=[0,a(bh),[0,a(bK),0]],aqC=[0,a(bh),[0,a(bK),[0,a(aj),0]]],aqD=[0,a(bh),[0,a(bK),0]],aqE=a(kM),aqF=a(n),aqG=a(n),aqI=[0,a(d),oR,10,oR,40,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqv=[0,a(d),oR,10,oR,40,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqp=[0,a(aJ),z0,14,z0,33,[0,a(cD),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],aqd=a(hc),aqe=a(bZ),aqf=a(hc),aqg=a(dc),aqh=a(e$),aqi=a(e$),aqj=a(dc),aqk=a(dc),aql=a(rU),aqm=a(qz),aqn=a(e$),aqo=a(bZ),aqq=[0,a(d),eD,10,eD,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqc=[0,a(aJ),v3,14,v3,33,[0,a(cD),[0,a(bv),[0,a(aK),0]]]],ap2=a(hc),ap3=a(bZ),ap4=a(hc),ap5=a(dc),ap6=a(e$),ap7=a(e$),ap8=a(dc),ap9=a(dc),ap_=a(rU),ap$=a(qz),aqa=a(e$),aqb=a(bZ),aqr=[0,a(d),eD,10,eD,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ap1=[0,a(O),wh,14,wh,33,[0,a(cD),[0,a(bR),[0,a(K),0]]]],apP=a(hc),apQ=a(bZ),apR=a(hc),apS=a(dc),apT=a(e$),apU=a(e$),apV=a(dc),apW=a(dc),apX=a(rU),apY=a(qz),apZ=a(e$),ap0=a(bZ),aqs=[0,a(d),eD,10,eD,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],apL=[0,a(D),Ak,14,Ak,36,[0,a(er),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],apF=[0,a(aM),[0,a(ki),[0,a(ai),0]]],apG=[0,a(aM),[0,a(ki),0]],apH=[0,a(aM),[0,a(ki),[0,a(aj),0]]],apI=[0,a(aM),[0,a(ki),0]],apJ=a(n),apK=a(n),apM=[0,a(d),mo,10,mo,32,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],apE=[0,a(d),mo,10,mo,32,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],apy=[0,a(aJ),hU,14,hU,28,[0,a(cD),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],apw=a(c0),apx=a(c0),apz=[0,a(d),eA,11,eA,25,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],apv=[0,a(aJ),fa,14,fa,28,[0,a(cD),[0,a(bv),[0,a(aK),0]]]],apt=a(c0),apu=a(c0),apA=[0,a(d),eA,11,eA,25,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aps=[0,a(O),m5,14,m5,28,[0,a(cD),[0,a(bR),[0,a(K),0]]]],apq=a(c0),apr=a(c0),apB=[0,a(d),eA,11,eA,25,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],apl=[0,a(O),cZ,14,cZ,36,[0,a(r8),[0,a(bR),[0,a(K),0]]]],aph=a(EW),api=a(iy),apj=a(iy),apk=a(EW),apm=[0,a(d),d2,10,d2,32,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],apf=[0,a(aJ),rM,14,rM,36,[0,a(r8),[0,a(bv),[0,a(aK),0]]]],apb=a(Cm),apc=a(iy),apd=a(iy),ape=a(Cm),apg=[0,a(d),d2,10,d2,32,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ao$=[0,a(aJ),fY,14,fY,36,[0,a(r8),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],ao7=a(Dz),ao8=a(iy),ao9=a(iy),ao_=a(Dz),apa=[0,a(d),d2,10,d2,32,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ao2=[0,a(D),CM,5,CM,50,[0,a(er),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],ao3=[0,a(d),ii,10,ii,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ao1=[0,a(D),vv,14,vv,36,[0,a(er),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],ao0=a(n),ao4=[0,a(d),ii,10,ii,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoZ=[0,a(d),ii,10,ii,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoW=[0,a(D),uO,14,uO,28,[0,a(er),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aoS=[0,a(O),q4,14,q4,42,[0,a(Bt),[0,a(bR),[0,a(K),0]]]],aoP=a("3.4"),aoQ=a(ia),aoR=a(ia),aoL=[0,a(O),q8,14,q8,41,[0,a(Bt),[0,a(bR),[0,a(K),0]]]],aoI=a("4."),aoJ=a(yB),aoK=a(yB),aoE=[0,a(D),zj,14,zj,29,[0,a("Article D842-2"),[0,a(r$),[0,a(ae),[0,a(ad),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],aoC=a(oh),aoD=a(ky),aow=[0,a(O),hI,29,hI,64,[0,a(dG),[0,a(bR),[0,a(K),0]]]],aot=a(gt),aou=a(qM),aov=a(fj),aox=[0,a(d),cg,10,cg,45,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aor=[0,a(aJ),vw,29,vw,64,[0,a(dG),[0,a(bv),[0,a(aK),0]]]],aoo=a(gF),aop=a(qo),aoq=a(fb),aos=[0,a(d),cg,10,cg,45,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aom=[0,a(aJ),xj,29,xj,64,[0,a(dG),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],aoj=a(ov),aok=a(Bg),aol=a(mC),aon=[0,a(d),cg,10,cg,45,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoy=[0,a(d),cg,10,cg,45,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aog=[0,a(O),zr,29,zr,64,[0,a(rZ),[0,a(bR),[0,a(K),0]]]],aoe=a(gt),aof=a(fj),aoh=[0,a(d),cg,10,cg,45,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoc=[0,a(aJ),m4,29,m4,64,[0,a(rZ),[0,a(bv),[0,a(aK),0]]]],aoa=a(gF),aob=a(fb),aod=[0,a(d),cg,10,cg,45,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],an_=[0,a(aJ),Ez,29,Ez,64,[0,a(rZ),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],an8=a(ov),an9=a(mC),an$=[0,a(d),cg,10,cg,45,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoi=[0,a(d),cg,10,cg,45,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],an1=a(n),an2=[0,a(O),527,5,528,34,[0,a(dG),[0,a(bR),[0,a(K),0]]]],anY=a(AL),anZ=a(vt),an0=a(CN),an3=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],anV=a(n),anW=[0,a(O),536,5,537,34,[0,a(dG),[0,a(bR),[0,a(K),0]]]],anS=a("27905"),anT=a("24683"),anU=a("22911"),anX=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],anP=a(v),anQ=[0,a(O),ve,5,ve,35,[0,a(dG),[0,a(bR),[0,a(K),0]]]],anG=a(v),anH=a("4576"),anI=a("31539"),anJ=a(v),anK=a("4043"),anL=a("27774"),anM=a(v),anN=a("3682"),anO=a("25689"),anR=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],anD=a(n),anE=[0,a(aJ),353,5,354,34,[0,a(dG),[0,a(bv),[0,a(aK),0]]]],anA=a(CW),anB=a(xL),anC=a(wk),anF=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],anx=a(n),any=[0,a(aJ),Bo,5,cj,34,[0,a(dG),[0,a(bv),[0,a(aK),0]]]],anu=a("26962"),anv=a("23848"),anw=a("22136"),anz=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],anr=a(v),ans=[0,a(aJ),hg,5,hg,35,[0,a(dG),[0,a(bv),[0,a(aK),0]]]],ani=a(v),anj=a("4421"),ank=a("30473"),anl=a(v),anm=a("3906"),ann=a("26835"),ano=a(v),anp=a("3557"),anq=a("24821"),ant=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],anf=a(n),ang=[0,a(aJ),rS,5,gH,34,[0,a(dG),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],anc=a(B_),and=a(vH),ane=a(Cv),anh=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],am$=a(n),ana=[0,a(aJ),gw,5,1082,34,[0,a(dG),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],am8=a("26849"),am9=a("23748"),am_=a("22044"),anb=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],am5=a(v),am6=[0,a(aJ),f0,5,f0,35,[0,a(dG),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],amW=a(v),amX=a("4403"),amY=a("30345"),amZ=a(v),am0=a("3890"),am1=a("26723"),am2=a(v),am3=a("3542"),am4=a("24717"),am7=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],an4=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],amS=[0,a(O),iE,5,iE,61,[0,a(iu),[0,a(bR),[0,a(K),0]]]],amP=a(AL),amQ=a(vt),amR=a(CN),amT=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],amN=[0,a(aJ),cU,5,cU,61,[0,a(iu),[0,a(bv),[0,a(aK),0]]]],amK=a(CW),amL=a(xL),amM=a(wk),amO=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],amI=[0,a(aJ),gC,5,gC,61,[0,a(iu),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],amF=a(B_),amG=a(vH),amH=a(Cv),amJ=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],amU=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],amC=[0,a(O),ma,14,ma,37,[0,a(iu),[0,a(bR),[0,a(K),0]]]],amz=a("27765"),amA=a("24198"),amB=a("22680"),amD=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],amx=[0,a(aJ),ks,14,ks,37,[0,a(iu),[0,a(bv),[0,a(aK),0]]]],amu=a("26826"),amv=a("23380"),amw=a("21913"),amy=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ams=[0,a(aJ),rl,14,rl,37,[0,a(iu),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],amp=a(Fd),amq=a("23282"),amr=a("21821"),amt=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],amE=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],amV=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aml=a(n),amm=[0,a(O),dH,5,ba,34,[0,a(cE),[0,a(bR),[0,a(K),0]]]],ami=a("30850"),amj=a("26887"),amk=a("25200"),amn=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],amf=a(n),amg=[0,a(O),yX,5,115,34,[0,a(cE),[0,a(bR),[0,a(K),0]]]],amc=a("37207"),amd=a("32910"),ame=a("30548"),amh=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],al$=a(v),ama=[0,a(O),n2,5,n2,35,[0,a(cE),[0,a(bR),[0,a(K),0]]]],al2=a(v),al3=a("6101"),al4=a("42052"),al5=a(v),al6=a("5390"),al7=a("37032"),al8=a(v),al9=a("4909"),al_=a("34252"),amb=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],alZ=a(n),al0=[0,a(aJ),34,5,35,34,[0,a(cE),[0,a(bv),[0,a(aK),0]]]],alW=a("29807"),alX=a(r1),alY=a("24348"),al1=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],alT=a(n),alU=[0,a(aJ),44,5,45,34,[0,a(cE),[0,a(bv),[0,a(aK),0]]]],alQ=a("35949"),alR=a(mJ),alS=a("29515"),alV=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],alN=a(v),alO=[0,a(aJ),54,5,54,35,[0,a(cE),[0,a(bv),[0,a(aK),0]]]],alE=a(v),alF=a("5895"),alG=a("40630"),alH=a(v),alI=a(ry),alJ=a(rY),alK=a(v),alL=a("4743"),alM=a("33094"),alP=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],alB=a(n),alC=[0,a(aJ),759,5,760,34,[0,a(cE),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],aly=a("29682"),alz=a("25859"),alA=a("24246"),alD=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],alv=a(n),alw=[0,a(aJ),769,5,770,34,[0,a(cE),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],als=a("35799"),alt=a(AF),alu=a("29392"),alx=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],alp=a(v),alq=[0,a(aJ),BU,5,BU,35,[0,a(cE),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],alg=a(v),alh=a("5870"),ali=a("40460"),alj=a(v),alk=a(vX),all=a(Ag),alm=a(v),aln=a("4723"),alo=a(ym),alr=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],amo=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],alc=[0,a(O),mT,14,mT,42,[0,a("Article 12"),[0,a(bR),[0,a(K),0]]]],ak$=a(n),ala=a(h_),alb=a(h_),ak5=[0,a(aJ),rd,14,rd,29,[0,a(cD),[0,a(bv),[0,a(aK),0]]]],akZ=a(n),ak0=a(r1),ak1=a(mJ),ak2=a(v),ak3=a(ry),ak4=a(rY),ak6=[0,a(d),em,11,em,26,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],akY=[0,a(O),hj,14,hj,29,[0,a(cD),[0,a(bR),[0,a(K),0]]]],akS=a(n),akT=a(r1),akU=a(mJ),akV=a(v),akW=a(ry),akX=a(rY),ak7=[0,a(d),em,11,em,26,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],akQ=[0,a(aJ),oQ,14,oQ,29,[0,a(cD),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],akK=a(n),akL=a("25869"),akM=a(AF),akN=a(v),akO=a(vX),akP=a(Ag),akR=[0,a(d),em,11,em,26,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],akF=[0,a(O),fL,14,fL,44,[0,a(qK),[0,a(bR),[0,a(K),0]]]],akn=a(n),ako=a("487000"),akp=a("697700"),akq=a(v),akr=a(Bd),aks=a(T),akt=a("850900"),aku=a(Y),akv=a("883400"),akw=a(aa),akx=a("916300"),aky=a(N),akz=a("948800"),akA=a(dN),akB=a(CE),akC=a(dN),akD=a("32300"),akE=a(CE),akG=[0,a(d),eu,11,eu,41,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],akl=[0,a(aJ),x0,14,x0,44,[0,a(qK),[0,a("Articles valables du 1er janvier 2022 au 1er juillet 2022"),[0,a(aK),0]]]],aj5=a(n),aj6=a("468300"),aj7=a("670900"),aj8=a(v),aj9=a("800200"),aj_=a(T),aj$=a("819200"),aka=a(Y),akb=a("849500"),akc=a(aa),akd=a("881100"),ake=a(N),akf=a("912400"),akg=a(dN),akh=a(Aw),aki=a(dN),akj=a("31100"),akk=a(Aw),akm=[0,a(d),eu,11,eu,41,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aj3=[0,a(aJ),xX,14,xX,44,[0,a(qK),[0,a(K),[0,a("Articles valables du 1er janvier 2020 au 1er janvier 2022"),[0,a(aK),0]]]]],ajL=a(n),ajM=a("458800"),ajN=a("657200"),ajO=a(v),ajP=a("783900"),ajQ=a(T),ajR=a("801500"),ajS=a(Y),ajT=a(Bd),ajU=a(aa),ajV=a("863100"),ajW=a(N),ajX=a("893800"),ajY=a(dN),ajZ=a(u8),aj0=a(dN),aj1=a(of),aj2=a(u8),aj4=[0,a(d),eu,11,eu,41,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ajE=[0,a(aJ),nL,14,nL,40,[0,a(cD),[0,a(K),[0,a(cf),[0,a(aK),0]]]]],ajm=a(n),ajn=a(rk),ajo=a(re),ajp=a(v),ajq=a(qt),ajr=a(T),ajs=a(qZ),ajt=a(Y),aju=a(rR),ajv=a(aa),ajw=a(qq),ajx=a(N),ajy=a(q5),ajz=a(dN),ajA=a(hG),ajB=a(dN),ajC=a(q9),ajD=a(hG),ajF=[0,a(d),dP,10,dP,36,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ajl=[0,a(aJ),nn,14,nn,40,[0,a(cD),[0,a(bv),[0,a(aK),0]]]],ai5=a(n),ai6=a(rk),ai7=a(re),ai8=a(v),ai9=a(qt),ai_=a(T),ai$=a(qZ),aja=a(Y),ajb=a(rR),ajc=a(aa),ajd=a(qq),aje=a(N),ajf=a(q5),ajg=a(dN),ajh=a(hG),aji=a(dN),ajj=a(q9),ajk=a(hG),ajG=[0,a(d),dP,10,dP,36,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ai4=[0,a(O),zN,14,zN,40,[0,a(cD),[0,a(bR),[0,a(K),0]]]],aiM=a(n),aiN=a(rk),aiO=a(re),aiP=a(v),aiQ=a(qt),aiR=a(T),aiS=a(qZ),aiT=a(Y),aiU=a(rR),aiV=a(aa),aiW=a(qq),aiX=a(N),aiY=a(q5),aiZ=a(dN),ai0=a(hG),ai1=a(dN),ai2=a(q9),ai3=a(hG),ajH=[0,a(d),dP,10,dP,36,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aiG=[0,a(d),fU,14,fU,50,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aiC=[0,a(O),Br,14,Br,41,[0,a("Article 11"),[0,a(bR),[0,a(K),0]]]],aiB=a(ka),aix=[0,a(D),ws,14,ws,29,[0,a(er),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aiw=a(wX),aiy=[0,a(d),oy,11,oy,26,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aiv=[0,a(d),oy,11,oy,26,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aiz=[0,a(aM),[0,a("fraction_l832_3"),0]],aiD=[0,a(d),m_,11,m_,38,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aiA=[0,a(d),m_,11,m_,38,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aiE=[0,a(aM),[0,a("montant_forfaitaire_d823_16"),0]],aiH=[0,a(d),fU,14,fU,50,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aiI=[0,a(aM),[0,a(kq),0]],aiF=[0,a(d),fU,14,fU,50,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aiJ=[0,a(aM),[0,a(eF),[0,a(bh),0]]],aiK=[0,a(aM),[0,a(eF),[0,a(bh),0]]],ajI=[0,a(d),dP,10,dP,36,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aiL=[0,a(d),dP,10,dP,36,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ajJ=[0,a(aM),[0,a("taux_composition_familiale"),0]],akH=[0,a(d),eu,11,eu,41,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ajK=[0,a(d),eu,11,eu,41,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],akI=[0,a(aM),[0,a("abattement_forfaitaire_d823_17"),0]],ak8=[0,a(d),em,11,em,26,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],akJ=[0,a(d),em,11,em,26,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ak9=[0,a(aM),[0,a("loyer_r\xc3\xa9f\xc3\xa9rence"),0]],ald=[0,a(d),l9,11,l9,39,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ak_=[0,a(d),l9,11,l9,39,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ale=[0,a(aM),[0,a("montant_minimal_aide_d823_16"),0]],an5=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],alf=[0,a(d),au,10,au,33,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],an6=[0,a(aM),[0,a("plafond_loyer_d823_16_2"),0]],aoz=[0,a(d),cg,10,cg,45,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],an7=[0,a(d),cg,10,cg,45,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoA=[0,a(aM),[0,a("montant_forfaitaire_charges_d823_16"),0]],aoF=[0,a(d),nF,10,nF,31,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoB=[0,a(d),nF,10,nF,31,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoG=[0,a(aM),[0,a("loyer_principal_avec_r\xc3\xa9duction_meubl\xc3\xa9"),0]],aoM=[0,a(d),mX,11,mX,38,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoH=[0,a(d),mX,11,mX,38,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoN=[0,a(aM),[0,a("plafond_suppression_d823_16"),0]],aoT=[0,a(d),oJ,11,oJ,39,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoO=[0,a(d),oJ,11,oJ,39,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoU=[0,a(aM),[0,a("plafond_d\xc3\xa9gressivit\xc3\xa9_d823_16"),0]],aoX=[0,a(d),m9,11,m9,25,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoV=[0,a(d),m9,11,m9,25,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aoY=[0,a(aM),[0,a("loyer_\xc3\xa9ligible"),0]],ao5=[0,a(aM),[0,a(ki),0]],apn=[0,a(d),d2,10,d2,32,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ao6=[0,a(d),d2,10,d2,32,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],apo=[0,a(aM),[0,a("participation_minimale"),0]],apC=[0,a(d),eA,11,eA,25,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],app=[0,a(d),eA,11,eA,25,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],apD=[0,a(aM),[0,a("rapport_loyers"),0]],apN=[0,a(aM),[0,a(bD),0]],aqt=[0,a(d),eD,10,eD,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],apO=[0,a(d),eD,10,eD,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqu=[0,a(aM),[0,a("taux_loyer_\xc3\xa9ligible_formule"),0]],aqJ=[0,a(aM),[0,a(bE),0]],aqX=[0,a(d),eB,10,eB,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqK=[0,a(d),eB,10,eB,17,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aqY=[0,a(aM),[0,a("taux_loyer_\xc3\xa9ligible_arrondi"),0]],aq8=[0,a(aM),[0,a(j_),0]],aq$=[0,a(d),op,11,op,39,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],aq9=[0,a(d),op,11,op,39,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ara=[0,a(aM),[0,a("taux_prise_compte_ressources"),0]],arj=[0,a(aM),[0,a(fg),0]],aro=[0,a(d),nJ,10,nJ,35,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],ark=[0,a(d),nJ,10,nJ,35,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],arp=[0,a(aM),[0,a("participation_personnelle"),0]],aru=[0,a(d),hI,10,hI,29,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],arq=[0,a(d),hI,10,hI,29,[0,a(J),[0,a(s),[0,a(i),[0,a(e),0]]]]],arv=[0,a(aM),[0,a(eV),0]],arx=a(ia),arw=[0,a(D),mu,13,mu,76,[0,a(er),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],arC=[0,a(D),mu,13,mu,76,[0,a(er),[0,a(dx),[0,a(bt),[0,a(be),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],arz=a(oq),arA=a(wX),ary=[0,a(aB),eR,13,eR,63,[0,a(qG),[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],arB=[0,a(aB),eR,13,eR,63,[0,a(qG),[0,a(bg),[0,a(_),[0,a(w),[0,a(Z),[0,a(u),0]]]]]]],aij=[6,0],ail=[0,0],aim=[1,0],ain=[2,0],aio=[3,0],aip=[4,0],aiq=[5,0],air=[7,0],aik=[0,a(b3),29,5,38,6,[0,a(cz),[0,a(lJ),[0,a(aU),0]]]],aii=a(wg),ais=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],aif=[8,0],aig=[0,a(b3),47,5,49,6,[0,a(cz),[0,a(lJ),[0,a(aU),0]]]],aie=a(xd),aih=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],ah6=[6,0],ah8=[0,0],ah9=[1,0],ah_=[2,0],ah$=[3,0],aia=[4,0],aib=[5,0],aic=[7,0],ah7=[0,a(b3),68,5,77,6,[0,a(cz),[0,a(nB),[0,a(aU),0]]]],ah5=a(Ai),aid=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],ah2=[8,0],ah3=[0,a(b3),86,5,88,6,[0,a(cz),[0,a(nB),[0,a(aU),0]]]],ah1=a(uJ),ah4=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],ahR=[6,0],ahT=[0,0],ahU=[1,0],ahV=[2,0],ahW=[3,0],ahX=[4,0],ahY=[5,0],ahZ=[7,0],ahS=[0,a(b3),du,5,bi,6,[0,a(cz),[0,a(lL),[0,a(aU),0]]]],ahQ=a(AU),ah0=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],ahN=[8,0],ahO=[0,a(b3),cn,5,cy,6,[0,a(cz),[0,a(lL),[0,a(aU),0]]]],ahM=a(DH),ahP=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],ahC=[6,0],ahE=[0,0],ahF=[1,0],ahG=[2,0],ahH=[3,0],ahI=[4,0],ahJ=[5,0],ahK=[7,0],ahD=[0,a(b3),eU,5,fF,6,[0,a(cz),[0,a(m$),[0,a(aU),0]]]],ahB=a(A6),ahL=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],ahy=[8,0],ahz=[0,a(b3),qH,5,nG,6,[0,a(cz),[0,a(m$),[0,a(aU),0]]]],ahx=a(wu),ahA=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],ahn=[6,0],ahp=[0,0],ahq=[1,0],ahr=[2,0],ahs=[3,0],aht=[4,0],ahu=[5,0],ahv=[7,0],aho=[0,a(b3),m2,5,iE,6,[0,a(na),[0,a(mA),[0,a(aU),0]]]],ahm=a(zg),ahw=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],ahj=[8,0],ahk=[0,a(b3),wA,5,x7,6,[0,a(na),[0,a(mA),[0,a(aU),0]]]],ahi=a(DG),ahl=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],ait=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],ahh=[0,a(b3),11,10,11,22,[0,a(B),[0,a(aU),0]]],aiu=[0,a(hk),[0,a(zA),0]],ahd=[0,a(eI),28,5,29,34,[0,a(BK),[0,a(cb),0]]],ahc=a(xg),ahe=[0,a(eI),6,10,6,17,[0,a(cb),0]],aha=[0,a(eI),48,5,49,34,[0,a(Ab),[0,a(cb),0]]],ag$=a(wU),ahb=[0,a(eI),6,10,6,17,[0,a(cb),0]],ag9=[0,a(eI),64,5,65,34,[0,a(Bv),[0,a(cb),0]]],ag8=a(Bj),ag_=[0,a(eI),6,10,6,17,[0,a(cb),0]],ag6=[0,a(eI),82,5,83,34,[0,a(wp),[0,a(cb),0]]],ag5=a(Be),ag7=[0,a(eI),6,10,6,17,[0,a(cb),0]],ahf=[0,a(eI),6,10,6,17,[0,a(cb),0]],ag4=[0,a(eI),6,10,6,17,[0,a(cb),0]],ahg=[0,a(f2),[0,a(bK),0]],agZ=[0,a(D),ze,14,ze,28,[0,a(kF),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],agY=a(n),ag0=[0,a(d),fZ,10,fZ,24,[0,a(ce),[0,a(y),[0,a(e),0]]]],agX=[0,a(D),vS,14,vS,28,[0,a(kz),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],agW=a(n),ag1=[0,a(d),fZ,10,fZ,24,[0,a(ce),[0,a(y),[0,a(e),0]]]],agR=[0,a(D),EE,20,EE,55,[0,a(kz),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],agO=a(n),agP=a(n),agQ=a(ky),agS=[0,a(d),dF,11,dF,43,[0,a(ce),[0,a(y),[0,a(e),0]]]],agM=[0,a(D),AI,20,AI,51,[0,a(kz),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],agJ=a(n),agK=a(n),agL=a(ky),agN=[0,a(d),dF,11,dF,43,[0,a(ce),[0,a(y),[0,a(e),0]]]],agH=[0,a(D),y3,7,y3,42,[0,a(kF),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],agD=a(BX),agE=a(ek),agF=a(ky),agG=a(n),agI=[0,a(d),dF,11,dF,43,[0,a(ce),[0,a(y),[0,a(e),0]]]],agB=[0,a(D),vG,7,vG,51,[0,a(kF),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],agx=a(BX),agy=a(ek),agz=a(ky),agA=a(n),agC=[0,a(d),dF,11,dF,43,[0,a(ce),[0,a(y),[0,a(e),0]]]],ags=[0,a(D),Aj,14,Aj,36,[0,a(kz),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],agt=[0,a(d),fE,11,fE,33,[0,a(ce),[0,a(y),[0,a(e),0]]]],agq=[0,a(D),yc,14,yc,36,[0,a(kF),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],agp=a(cG),agr=[0,a(d),fE,11,fE,33,[0,a(ce),[0,a(y),[0,a(e),0]]]],agj=[0,a(D),ET,14,ET,36,[0,a(kF),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],agk=[0,a(d),fG,11,fG,33,[0,a(ce),[0,a(y),[0,a(e),0]]]],agi=[0,a(D),u5,14,u5,36,[0,a(kz),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],agl=[0,a(d),fG,11,fG,33,[0,a(ce),[0,a(y),[0,a(e),0]]]],age=[0,a(D),BL,14,BL,36,[0,a("Article R824-3"),[0,a(d4),[0,a(d9),[0,a(ac),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],af$=[0,0],aga=[1,0],agb=[1,0],agc=[0,0],agd=[0,0],agf=[0,a(d),ku,11,ku,33,[0,a(ce),[0,a(y),[0,a(e),0]]]],af_=[0,a(d),ku,11,ku,33,[0,a(ce),[0,a(y),[0,a(e),0]]]],agg=[0,a(kx),[0,a("mode_occupation_impay\xc3\xa9"),0]],agm=[0,a(d),fG,11,fG,33,[0,a(ce),[0,a(y),[0,a(e),0]]]],agh=[0,a(d),fG,11,fG,33,[0,a(ce),[0,a(y),[0,a(e),0]]]],agn=[0,a(kx),[0,a("d\xc3\xa9pense_logement_brute"),0]],agu=[0,a(d),fE,11,fE,33,[0,a(ce),[0,a(y),[0,a(e),0]]]],ago=[0,a(d),fE,11,fE,33,[0,a(ce),[0,a(y),[0,a(e),0]]]],agv=[0,a(kx),[0,a("d\xc3\xa9pense_logement_nette"),0]],agT=[0,a(d),dF,11,dF,43,[0,a(ce),[0,a(y),[0,a(e),0]]]],agw=[0,a(d),dF,11,dF,43,[0,a(ce),[0,a(y),[0,a(e),0]]]],agU=[0,a(kx),[0,a("seuil_impay\xc3\xa9_d\xc3\xa9pense_de_logement"),0]],ag2=[0,a(d),fZ,10,fZ,24,[0,a(ce),[0,a(y),[0,a(e),0]]]],agV=[0,a(d),fZ,10,fZ,24,[0,a(ce),[0,a(y),[0,a(e),0]]]],ag3=[0,a(kx),[0,a("montant_impay\xc3\xa9"),0]],af5=[0,a(c5),ks,5,ks,43,[0,a(kd),[0,a(jZ),[0,a(es),[0,a(eP),[0,a(eS),[0,a(el),[0,a(i7),[0,a(Z),[0,a($),0]]]]]]]]]],af6=[0,a(d),cN,10,cN,29,[0,a(fB),[0,a(y),[0,a(e),0]]]],af3=[0,a(c5),ev,5,ev,42,[0,a(kw),[0,a(kk),[0,a(es),[0,a(eP),[0,a(eS),[0,a(el),[0,a(j0),[0,a(a6),[0,a($),0]]]]]]]]]],af4=[0,a(d),cN,10,cN,29,[0,a(fB),[0,a(y),[0,a(e),0]]]],af1=[0,a(c5),266,5,qv,43,[0,a(kw),[0,a(kk),[0,a(es),[0,a(eP),[0,a(eS),[0,a(el),[0,a(j0),[0,a(a6),[0,a($),0]]]]]]]]]],af2=[0,a(d),cN,10,cN,29,[0,a(fB),[0,a(y),[0,a(e),0]]]],afY=a("1952"),afZ=[0,a(c5),wR,5,wR,48,[0,a(kw),[0,a(kk),[0,a(es),[0,a(eP),[0,a(eS),[0,a(el),[0,a(j0),[0,a(a6),[0,a($),0]]]]]]]]]],af0=[0,a(d),cN,10,cN,29,[0,a(fB),[0,a(y),[0,a(e),0]]]],afV=a("1953"),afW=[0,a(c5),m8,5,m8,48,[0,a(kw),[0,a(kk),[0,a(es),[0,a(eP),[0,a(eS),[0,a(el),[0,a(j0),[0,a(a6),[0,a($),0]]]]]]]]]],afX=[0,a(d),cN,10,cN,29,[0,a(fB),[0,a(y),[0,a(e),0]]]],afS=a("1954"),afT=[0,a(c5),dJ,5,dJ,48,[0,a(kw),[0,a(kk),[0,a(es),[0,a(eP),[0,a(eS),[0,a(el),[0,a(j0),[0,a(a6),[0,a($),0]]]]]]]]]],afU=[0,a(d),cN,10,cN,29,[0,a(fB),[0,a(y),[0,a(e),0]]]],af7=[0,a(d),cN,10,cN,29,[0,a(fB),[0,a(y),[0,a(e),0]]]],afR=[0,a(d),cN,10,cN,29,[0,a(fB),[0,a(y),[0,a(e),0]]]],af8=[0,a(rv),[0,a("\xc3\xa2ge_ouverture_droit"),0]],afO=[0,a(D),AR,14,AR,36,[0,a(dY),[0,a(ag),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]],afA=a(n),afB=a(Di),afC=a(vN),afD=a(v),afE=a(ia),afF=a(T),afG=a(oh),afH=a(Y),afI=a(qs),afJ=a(aa),afK=a(hN),afL=a(aa),afM=a(j5),afN=a(hN),afP=[0,a(d),nT,10,nT,32,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],afz=[0,a(d),nT,10,nT,32,[0,a(C),[0,a(s),[0,a(i),[0,a(e),0]]]]],afQ=[0,a(kh),[0,a(vx),0]],afv=[0,a(D),Ae,5,Ae,26,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],afh=a(n),afi=a("1.2"),afj=a("1.5"),afk=a(v),afl=a(ia),afm=a(T),afn=a(oh),afo=a(Y),afp=a(qs),afq=a(aa),afr=a(hN),afs=a(aa),aft=a(j5),afu=a(hN),afw=[0,a(d),hp,10,hp,32,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],afg=[0,a(D),CZ,14,CZ,36,[0,a(cm),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],ae4=a(n),ae5=a(Di),ae6=a(vN),ae7=a(v),ae8=a(ia),ae9=a(T),ae_=a(oh),ae$=a(Y),afa=a(qs),afb=a(aa),afc=a(hN),afd=a(aa),afe=a(j5),aff=a(hN),afx=[0,a(d),hp,10,hp,32,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],ae3=[0,a(d),hp,10,hp,32,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],afy=[0,a(kp),[0,a(C$),0]],aeZ=[0,a(D),wz,5,wz,26,[0,a(rh),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aeY=a(bZ),aeW=a(cG),aeX=a(bZ),ae0=[0,a(d),iC,10,iC,17,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aeV=[0,a(D),w1,14,w1,21,[0,a(rh),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aeU=a(bZ),aeS=a(cG),aeT=a(bZ),aeO=[0,a(D),Ei,14,Ei,50,[0,a(rh),[0,a(a3),[0,a(ah),[0,a(af),[0,a(_),[0,a(w),[0,a(E),[0,a(u),0]]]]]]]]],aeN=[1,0],aeI=[0,a(O),Dy,5,Dy,26,[0,a(sc),[0,a(fc),[0,a(K),0]]]],aet=a("0.328"),aeu=a(xt),aev=[1,0],aew=a(vB),aex=a(C5),aey=a(xt),aez=a(uY),aeA=a(yA),aeB=a(C5),aeC=a("0.024"),aeD=a(vU),aeE=a(yA),aeF=a(bZ),aeG=a(n),aeH=a(vU),aeJ=[0,a(d),gz,11,gz,35,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aes=[0,a(O),wa,14,wa,38,[0,a(sc),[0,a(fc),[0,a(K),0]]]],aea=a("0.48"),aeb=a(wV),aec=[1,0],aed=a(r_),aee=a(yG),aef=a(wV),aeg=a("0.264"),aeh=a(xV),aei=a(yG),aej=a("0.216"),aek=a(Dn),ael=a(xV),aem=a("0.104"),aen=a(xT),aeo=a(Dn),aep=a(BS),aeq=a(n),aer=a(xT),ad8=[0,a(O),vW,14,vW,41,[0,a(sc),[0,a(fc),[0,a(K),0]]]],ad6=a("7632"),ad7=a("4557"),ad9=[0,a(d),lU,11,lU,38,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],ad5=[0,a(d),lU,11,lU,38,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],ad_=[0,a(dE),[0,a("montant_forfaitaire_d832_26"),0]],aeK=[0,a(d),gz,11,gz,35,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],ad$=[0,a(d),gz,11,gz,35,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aeL=[0,a(dE),[0,a("tranches_revenus_d832_26"),0]],aeP=[0,a(d),np,11,np,47,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aeM=[0,a(d),np,11,np,47,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aeQ=[0,a(dE),[0,a("tranches_revenus_d832_26_multipli\xc3\xa9es"),0]],ae1=[0,a(d),iC,10,iC,17,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],aeR=[0,a(d),iC,10,iC,17,[0,a(M),[0,a(s),[0,a(i),[0,a(e),0]]]]],ae2=[0,a(dE),[0,a(bK),0]],ad1=[0,a(fy),eq,5,eq,35,[0,a(cD),[0,a(ra),[0,a(sa),0]]]],ad2=[0,a(d),nV,10,nV,17,[0,a(fH),[0,a(i),[0,a(e),0]]]],ad0=[0,a(d),nV,10,nV,17,[0,a(fH),[0,a(i),[0,a(e),0]]]],adX=[0,a(fy),m4,39,m4,69,[0,a(nk),[0,a(ra),[0,a(sa),0]]]],adW=a(lM),adR=[0,a(c5),37,9,37,20,[0,a("Article L136-1-3"),[0,a("Section 1 : De la contribution sociale sur les revenus d'activit\xc3\xa9 et sur les revenus de remplacement"),[0,a("Chapitre 6 : Contribution sociale g\xc3\xa9n\xc3\xa9ralis\xc3\xa9e"),[0,a(i7),[0,a(Z),[0,a($),0]]]]]]],adS=[0,a(d),fW,11,fW,22,[0,a(fH),[0,a(i),[0,a(e),0]]]],adQ=[0,a(d),fW,11,fW,22,[0,a(fH),[0,a(i),[0,a(e),0]]]],adT=[0,a(d),fW,11,fW,22,[0,a(fH),[0,a(i),[0,a(e),0]]]],adP=[0,a(d),fW,11,fW,22,[0,a(fH),[0,a(i),[0,a(e),0]]]],adU=[0,a(bh),[0,a("exon\xc3\xa9r\xc3\xa9_csg"),0]],adY=[0,a(d),m0,11,m0,20,[0,a(fH),[0,a(i),[0,a(e),0]]]],adV=[0,a(d),m0,11,m0,20,[0,a(fH),[0,a(i),[0,a(e),0]]]],adZ=[0,a(bh),[0,a("taux_crds"),0]],ad3=[0,a(bh),[0,a(bK),0]],ad4=[0,a(fy),cy,13,cy,24,[0,a(cD),[0,a(ra),[0,a(sa),0]]]],adH=a("enfant_\xc3\xa0_na\xc3\xaetre_apr\xc3\xa8s_quatri\xc3\xa8me_mois_grossesse"),adI=a("condition_rattach\xc3\xa9_foyer_fiscal_parent_ifi"),adJ=a("situation_familiale"),adK=a("nombre_autres_occupants_logement"),adL=a("personnes_\xc3\xa0_charge"),adM=a("logement"),adN=a("prestations_re\xc3\xa7ues"),adO=[0,a("M\xc3\xa9nage"),0],adx=a("zone"),ady=a("surface_m_carr\xc3\xa9s"),adz=a("logement_decent_l89_462"),adA=a("usufruit"),adB=a("lou\xc3\xa9_ou_sous_lou\xc3\xa9_\xc3\xa0_des_tiers"),adC=a("propri\xc3\xa9taire"),adD=a("mode_occupation"),adE=a("est_ehpad_ou_maison_autonomie_l313_12_asf"),adF=a("r\xc3\xa9sidence_principale"),adG=[0,a("Logement"),0],adr=a(yI),adt=a("R\xc3\xa9sidentLogementFoyer"),adu=a("AccessionPropri\xc3\xa9t\xc3\xa9LocalUsageExclusifHabitation"),adv=a(CA),adw=a(xp),ads=[0,a("ModeOccupation"),0],adn=a(E1),adp=a("AccessionPropri\xc3\xa9t\xc3\xa9"),adq=a(xs),ado=[0,a("Cat\xc3\xa9gorieCalculAPL"),0],ade=a("changement_logement_d842_4"),adf=a("logement_meubl\xc3\xa9_d842_2"),adg=a("\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers"),adh=a("colocation"),adi=a("logement_est_chambre"),adj=a("b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s"),adk=a("loyer_principal"),adl=a("bailleur"),adm=[0,a(E1),0],ac$=a("personne_h\xc3\xa9berg\xc3\xa9e_centre_soin_l_L162_22_3_s\xc3\xa9curit\xc3\xa9_sociale"),ada=a("patrimoine"),adb=a("nationalit\xc3\xa9"),adc=a(AS),add=[0,a(ql),0],ac8=a(Db),ac_=a(Cb),ac9=[0,a("Personne\xc3\x80Charge"),0],acW=a("pr\xc3\xaat"),acX=a("anciennet\xc3\xa9_logement"),acY=a("situation_r822_11_13_17"),acZ=a("copropri\xc3\xa9t\xc3\xa9"),ac0=a("local_habit\xc3\xa9_premi\xc3\xa8re_fois_b\xc3\xa9n\xc3\xa9ficiaire"),ac1=a("type_travaux_logement_r842_5"),ac2=a("type_travaux_logement_d832_15"),ac3=a("date_entr\xc3\xa9e_logement"),ac4=a("charges_mensuelles_pr\xc3\xaat"),ac5=a("mensualit\xc3\xa9_principale"),ac6=a("logement_situ\xc3\xa9_commune_d\xc3\xa9s\xc3\xa9quilibre_l831_2"),ac7=[0,a("Propri\xc3\xa9taire"),0],acT=a(Al),acV=a(y6),acU=[0,a("ChangementLogementD842_4"),0],acQ=a("Fran\xc3\xa7aise"),acS=a("\xc3\x89trang\xc3\xa8re"),acR=[0,a("Nationalit\xc3\xa9"),0],acN=a(kG),acP=a(oS),acO=[0,a("Lou\xc3\xa9OuSousLou\xc3\xa9\xc3\x80DesTiers"),0],acJ=a(Cf),acL=a("BailleurPriv\xc3\xa9AvecConventionnementSocial"),acM=a("BailleurPriv\xc3\xa9"),acK=[0,a("TypeBailleur"),0],acB=a("situation_garde_altern\xc3\xa9e"),acC=a(rp),acD=a(qR),acE=a(qQ),acF=a(qL),acG=a(qx),acH=a(ri),acI=[0,a(Db),0],act=a(qx),acu=a(qL),acv=a(DZ),acw=a(qQ),acx=a(qR),acy=a(rp),acz=a(ri),acA=[0,a("EnfantPrestationsFamiliales"),0],acl=a("cat\xc3\xa9gorie_\xc3\xa9quivalence_loyer_d842_16"),acm=a("redevance"),acn=a("construit_application_loi_1957_12_III"),aco=a("date_conventionnement"),acp=a(Ej),acq=a("remplit_conditions_r832_21"),acr=a("type"),acs=[0,a(xs),0],acd=a("titulaire_allocation_personne_\xc3\xa2g\xc3\xa9e"),ace=a("b\xc3\xa9n\xc3\xa9ficiaire_l161_19_l351_8_l643_3_s\xc3\xa9cu"),acf=a("incapacit\xc3\xa9_80_pourcent_ou_restriction_emploi"),acg=a("parent\xc3\xa9"),ach=a("ascendant_descendant_collat\xc3\xa9ral_deuxi\xc3\xa8me_troisi\xc3\xa8me_degr\xc3\xa9"),aci=a("ressources"),acj=a(AS),ack=[0,a(Cb),0],ab$=a(uH),aca=a(uX),acb=a(DM),acc=[0,a("TrancheRevenuD\xc3\xa9cimal"),0],ab6=a(uH),ab7=a(uX),ab8=a(DM),ab9=[0,a("TrancheRevenu"),0],ab2=a(z5),ab4=a(Cq),ab3=[0,a("NeufOuAncien"),0],abY=a("titulaire_pr\xc3\xaat"),abZ=a("date_signature"),ab0=a("type_pr\xc3\xaat"),ab1=[0,a("Pr\xc3\xaat"),0],abV=a("ancienne_allocation_logement"),abW=a("ancien_loyer_principal"),abX=[0,a("InfosChangementLogementD842_4"),0],abS=a(bA),abT=a(eV),abU=[0,a("Traitement_formule_aide_finale"),0],abQ=a("satisfait_conditions_l512_2_code_s\xc3\xa9curit\xc3\xa9_sociale"),abR=[0,a("Conditions\xc3\x89trangers"),0],abN=a("ne_produisant_pas_revenu_p\xc3\xa9riode_r822_3_3_r822_4"),abO=a("produisant_revenu_p\xc3\xa9riode_r822_3_3_r822_4"),abP=[0,a("Patrimoine"),0],abK=a("conforme_article_l442_1"),abL=a("date_naissance_personne_sous_location"),abM=[0,a("PersonneSousLocation"),0],abI=a("conventionn\xc3\xa9_livre_III_titre_II_chap_I_sec_3"),abJ=[0,a("ConventionANHA"),0],abF=a("r\xc3\xa9duction_loyer_solidarit\xc3\xa9_per\xc3\xa7ue"),abG=a(Ej),abH=[0,a("ConventionBailleurSocial"),0],abw=a(n$),aby=a(Q),abz=a(qJ),abA=a(nK),abB=a(C2),abC=a(iU),abD=a(Bc),abE=a(ys),abx=[0,a(ER),0],abr=a(kj),abt=a(j9),abu=a(BB),abs=[0,a(Ce),0],abl=a(Ax),abn=a(Dd),abo=a(jX),abp=a(Er),abq=a(yb),abm=[0,a("PriseEnChargeEnfant"),0],abb=a(mk),abd=a(ok),abe=a(lY),abf=a(CG),abg=a(yo),abh=a(oU),abi=a(Ck),abj=a(nc),abk=a(ow),abc=[0,a(Bf),0],aa_=a(DU),aba=a(zS),aa$=[0,a("SituationFamilialeCalculAPL"),0],aa5=a("\xc3\x89tudiantLog\xc3\xa9EnChambreCROUS"),aa7=a("\xc3\x89tudiantLog\xc3\xa9EnChambreCROUSR\xc3\xa9habilit\xc3\xa9e"),aa8=a("Personnes\xc3\x82g\xc3\xa9esSelon3DeD842_16"),aa9=a(DS),aa6=[0,a("Cat\xc3\xa9gorie\xc3\x89quivalenceLoyerAllocationLogementFoyer"),0],aa0=a("LogementPersonnes\xc3\x82g\xc3\xa9esOuHandicap\xc3\xa9es"),aa2=a("R\xc3\xa9sidenceSociale"),aa3=a("FoyerJeunesTrvailleursOuMigrantsConventionn\xc3\xa9L353_2Avant1995"),aa4=a(ie),aa1=[0,a("TypeLogementFoyer"),0],aaT=a("C\xc3\xa9libataire"),aaV=a("Mari\xc3\xa9s"),aaW=a("Pacs\xc3\xa9s"),aaX=a(yp),aaY=a("C\xc3\xa9libataireS\xc3\xa9par\xc3\xa9DeFait"),aaZ=a("ConcubinageDontS\xc3\xa9par\xc3\xa9DeFait"),aaU=[0,a("SituationFamiliale"),0],aaP=a("AidePersonnalis\xc3\xa9eLogement"),aaR=a(oI),aaS=a(nb),aaQ=[0,a("TypeAidesPersonnelleLogement"),0],aaL=a("Pas\xc3\x89ligible"),aaN=a(oI),aaO=a(nb),aaM=[0,a("Type\xc3\x89ligibilit\xc3\xa9AllocationLogement"),0],aaI=a("Impay\xc3\xa9Loyer"),aaK=a("Impay\xc3\xa9Pr\xc3\xaat"),aaJ=[0,a("ModeOccupationImpay\xc3\xa9"),0],aaD=a("TotalAnnuel\xc3\x89ch\xc3\xa9ances"),aaF=a("Mensualit\xc3\xa9"),aaG=a(Ev),aaE=[0,a("D\xc3\xa9penseLogement"),0],aaz=a(yH),aaB=a(vz),aaC=a(yg),aaA=[0,a("ZoneDHabitation"),0],aav=a(AK),aax=a(AB),aay=a("Collat\xc3\xa9ralDeuxi\xc3\xa8meTroisi\xc3\xa8meDegr\xc3\xa9"),aaw=[0,a("Parent\xc3\xa9"),0],aas=a("PasDeGardeAltern\xc3\xa9e"),aau=a("GardeAltern\xc3\xa9eCoefficientPriseEnCharge"),aat=[0,a("SituationGardeAltern\xc3\xa9e"),0],aap=a("DemandeurOuConjointOuParentOuViaPartsSoci\xc3\xa9t\xc3\xa9s"),aar=a(ie),aaq=[0,a("ParentOuAutre"),0],aai=a(Q),aak=a(qJ),aal=a(Ca),aam=a(iU),aan=a("AllocationSoutienEnfantHandicap\xc3\xa9"),aao=a("AllocationAdulteHandicap\xc3\xa9"),aaj=[0,a("PrestationRe\xc3\xa7ue"),0],aae=a(Dr),aag=a(vr),aaf=[0,a("LimiteTrancheD\xc3\xa9cimal"),0],aab=a(Dr),aad=a(vr),aac=[0,a("LimiteTranche"),0],$_=a(oS),aaa=a(kG),$$=[0,a("Am\xc3\xa9lior\xc3\xa9ParOccupant"),0],$5=a("ObjectifD\xc3\xa9cenceLogement"),$7=a("Pr\xc3\xa9vuDansListeR321_15"),$8=a(BG),$9=a(oi),$6=[0,a("TypeTravauxLogementR842_5"),0],$1=a(wK),$3=a("TravauxSurLogementD\xc3\xa9j\xc3\xa0AcquisD832_15_2"),$4=a(oi),$2=[0,a("TypeTravauxLogementD832_15"),0],$Y=a(ql),$0=a(w_),$Z=[0,a("TitulairePr\xc3\xaat"),0],$S=a(AZ),$U=a(w8),$V=a(zC),$W=a(zK),$X=a(ie),$T=[0,a("TypePr\xc3\xaat"),0],bsO=a(W),bso=a("The function 'n_nombre_parts_d832_25_in' translation isn't yet supported..."),bsp=a("The function 'condition_2_du_832_25_in' translation isn't yet supported..."),bsm=a("The function 'condition_logement_surface_in' translation isn't yet supported..."),bsn=a("The function 'condition_logement_residence_principale_in' translation isn't yet supported..."),bsg=a("AccessionProprieteLocalUsageExclusifHabitation"),bsh=a(yI),bsi=a(xp),bsj=a("ResidentLogementFoyer"),bsk=a(CA),bsl=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'ModeOccupation.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'ModeOccupation.t'")],bsd=a("AutrePersonneACharge"),bse=a("EnfantACharge"),bsf=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'PersonneACharge.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'PersonneACharge.t'")],br$=a(Al),bsa=a(y6),bsc=[1,0],bsb=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'ChangementLogementD8424.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'ChangementLogementD8424.t'")],br7=a("Etrangere"),br8=a("Francaise"),br_=[0,0],br9=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'Nationalite.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'Nationalite.t'")],br3=a(kG),br4=a(oS),br6=[0,0],br5=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'LoueOuSousLoueADesTiers.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'LoueOuSousLoueADesTiers.t'")],brY=a("BailleurPrive"),brZ=a("BailleurPriveAvecConventionnementSocial"),br0=a(Cf),br2=[2,0],br1=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'TypeBailleur.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypeBailleur.t'")],brU=a("MoinsDeTroisEnfants"),brV=a("PlusDeTroisEnfants"),brX=[0,0],brW=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'DateNaissanceTroisiemeOuDernierPlusEnfant.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'DateNaissanceTroisiemeOuDernierPlusEnfant.t'")],brQ=a(Cq),brR=a(z5),brT=[0,0],brS=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'NeufOuAncien.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'NeufOuAncien.t'")],brz=a(vn),brA=a(xD),brB=a(nK),brC=a(DD),brD=a(iU),brE=a(Q),brF=a(qk),brG=a(n$),brI=[0,0],brJ=[2,0],brK=[1,0],brL=[5,0],brM=[6,0],brN=[3,0],brO=[7,0],brP=[4,0],brH=[0,[11,a(bd),[2,0,[11,a(De),0]]],a(ES)],brs=a(rO),brt=a(kj),bru=a(j9),brw=[1,0],brx=[0,0],bry=[2,0],brv=[0,[11,a(bd),[2,0,[11,a(xw),0]]],a(vY)],brh=a(jX),bri=a(qY),brj=a(qF),brk=a(rf),brl=a(qC),brn=[4,0],bro=[3,0],brp=[0,0],brq=[1,0],brr=[2,0],brm=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'PriseEnChargeEnfant.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'PriseEnChargeEnfant.t'")],bq0=a(mk),bq1=a(ok),bq2=a(vT),bq3=a(lY),bq4=a(ow),bq5=a(El),bq6=a(wM),bq7=a(oU),bq8=a(nc),bq_=[7,0],bq$=[5,0],bra=[4,0],brb=[6,0],brc=[8,0],brd=[2,0],bre=[3,0],brf=[1,0],brg=[0,0],bq9=[0,[11,a(bd),[2,0,[11,a(A9),0]]],a(wj)],bqV=a(zS),bqW=a(DU),bqY=[0,0],bqZ=[1,0],bqX=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'SituationFamilialeCalculAPL.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'SituationFamilialeCalculAPL.t'")],bqM=a(DS),bqN=a("EtudiantLogeEnChambreCROUS"),bqO=a("EtudiantLogeEnChambreCROUSRehabilitee"),bqP=a("PersonnesAgeesSelon3DeD842_16"),bqR=[2,0],bqS=[1,0],bqT=[0,0],bqU=[3,0],bqQ=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'CategorieEquivalenceLoyerAllocationLogementFoyer.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'CategorieEquivalenceLoyerAllocationLogementFoyer.t'")],bqD=a(ie),bqE=a("FoyerJeunesTrvailleursOuMigrantsConventionneL353_2Avant1995"),bqF=a("LogementPersonnesAgeesOuHandicapees"),bqG=a("ResidenceSociale"),bqI=[1,0],bqJ=[0,0],bqK=[2,0],bqL=[3,0],bqH=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'TypeLogementFoyer.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypeLogementFoyer.t'")],bqr=a("Celibataire"),bqs=a("CelibataireSepareDeFait"),bqt=a("ConcubinageDontSepareDeFait"),bqu=a(yp),bqv=a("Maries"),bqw=a("Pacses"),bqy=[2,0],bqz=[3,0],bqA=[5,0],bqB=[4,0],bqC=[0,0],bqx=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'SituationFamiliale.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'SituationFamiliale.t'")],bqk=a("AidePersonnaliseeLogement"),bql=a(oI),bqm=a(nb),bqo=[2,0],bqp=[1,0],bqq=[0,0],bqn=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'TypeAidesPersonnelleLogement.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypeAidesPersonnelleLogement.t'")],bqg=a(Ev),bqh=a("Mensualite"),bqi=a("TotalAnnuelEcheances"),bqj=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'DepenseLogement.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'DepenseLogement.t'")],bp$=a("Bailleur"),bqa=a("Beneficiaire"),bqb=a("EtablissementHabilite"),bqd=[2,0],bqe=[1,0],bqf=[0,0],bqc=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'VersementA.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'VersementA.t'")],bp7=a(kG),bp8=a("OuiAvecLoyerOuCharges"),bp_=[1,0],bp9=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'PaiementLogementDistinctProfessionnel.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'PaiementLogementDistinctProfessionnel.t'")],bp0=a(yH),bp1=a(vz),bp2=a(yg),bp4=[2,0],bp5=[1,0],bp6=[0,0],bp3=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'ZoneDHabitation.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'ZoneDHabitation.t'")],bpU=a("ApresPremierJourMoisCivilTroisiemeMoisDeGrossesse"),bpV=a("AvantPremierJourMoisCivilTroisiemeMoisDeGrossesse"),bpW=a("DateDeNaissance"),bpY=[1,0],bpZ=[2,0],bpX=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'DateDeNaissanceOuMoisDeGrossesse.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'DateDeNaissanceOuMoisDeGrossesse.t'")],bpN=a(AK),bpO=a("CollateralDeuxiemeTroisiemeDegre"),bpP=a(AB),bpR=[1,0],bpS=[2,0],bpT=[0,0],bpQ=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'Parente.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'Parente.t'")],bpJ=a("GardeAlterneeCoefficientPriseEnCharge"),bpK=a("PasDeGardeAlternee"),bpM=[0,0],bpL=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'SituationGardeAlternee.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'SituationGardeAlternee.t'")],bpF=a(ie),bpG=a("DemandeurOuConjointOuParentOuViaPartsSocietes"),bpI=[1,0],bpH=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'ParentOuAutre.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'ParentOuAutre.t'")],bps=a("AllocationAdulteHandicape"),bpt=a(Ca),bpu=a("AllocationSoutienEnfantHandicape"),bpv=a(iU),bpw=a(Q),bpx=a(qk),bpz=[1,0],bpA=[0,0],bpB=[3,0],bpC=[4,0],bpD=[2,0],bpE=[5,0],bpy=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'PrestationRecue.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'PrestationRecue.t'")],bpn=a(kG),bpo=a(oS),bpq=[0,0],bpr=[1,0],bpp=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'AmelioreParOccupant.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'AmelioreParOccupant.t'")],bpe=a(BG),bpf=a("ObjectifDecenceLogement"),bpg=a(oi),bph=a("PrevuDansListeR321_15"),bpj=[1,0],bpk=[3,0],bpl=[0,0],bpm=[2,0],bpi=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'TypeTravauxLogementR8425.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypeTravauxLogementR8425.t'")],bo9=a(oi),bo_=a(wK),bo$=a("TravauxSurLogementDejaAcquisD832_15_2"),bpb=[1,0],bpc=[0,0],bpd=[2,0],bpa=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'TypeTravauxLogementD83215.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypeTravauxLogementD83215.t'")],bo4=a(ql),bo5=a(w_),bo7=[1,0],bo8=[0,0],bo6=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'TitulairePret.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TitulairePret.t'")],boT=a(ie),boU=a(AZ),boV=a(zC),boW=a(w8),boX=a(zK),boZ=[3,0],bo0=[1,0],bo1=[2,0],bo2=[0,0],bo3=[4,0],boY=[0,[11,a(bd),[2,0,[11,a("' kind for the enumeration 'TypePret.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypePret.t'")],boR=[0,a(Et),a(y7),a(DR),a(As),a(wS),a(oN),a(f6),a(Ar),a(yz),a(va),a(CQ),a(xZ),a(AC),a(x$),a(Ef),a(Cs),a(A2),a(y1),a(E4),a(Bi),a(u2),a(wC),a(At),a(uM)],boS=[0,a(f6),a(As),a(Cs),a(A2),a(y1),a(wS),a(u2),a(DR),a(va),a(Ar),a(E4),a(AC),a(CQ),a(x$),a(At),a(y7),a(xZ),a(Bi),a(uM),a(wC),a(yz),a(Et),a(Ef),a(oN)],btb=a("AidesLogementLib"),btd=a(W);function -bH(a){if(typeof +bzp(){var +a=aL;if(a.process&&a.process.on)a.process.on("uncaughtException",function(b,c){Gv(b);a.process.exit(2)});else +if(a.addEventListener)a.addEventListener("error",function(a){if(a.error)Gv(a.error)})}bzp();function +r(a,b){return a.length==1?a(b):dF(a,[b])}function +aq(a,b,c){return a.length==2?a(b,c):dF(a,[b,c])}function +cB(a,b,c,d){return a.length==3?a(b,c,d):dF(a,[b,c,d])}function +uX(a,b,c,d,e){return a.length==4?a(b,c,d,e):dF(a,[b,c,d,e])}function +lQ(a,b,c,d,e,f){return a.length==5?a(b,c,d,e,f):dF(a,[b,c,d,e,f])}function +byC(a,b,c,d,e,f,g){return a.length==6?a(b,c,d,e,f,g):dF(a,[b,c,d,e,f,g])}function +byB(a,b,c,d,e,f,g,h){return a.length==7?a(b,c,d,e,f,g,h):dF(a,[b,c,d,e,f,g,h])}byR();var +po=[bm,a(Dy),-1],sT=[bm,a(Ef),-2],k_=[bm,a(q3),-3],sP=[bm,a(zw),-4],pp=[bm,a(wY),-6],cD=[bm,a(Fc),-7],sR=[bm,a(vT),-8],sS=[bm,a(zT),-9],bs=[bm,a(FM),-11],sU=[bm,a(DZ),DO],byy=[4,0,0,0,[12,45,[4,0,0,0,0]]],pF=[0,[11,a('File "'),[2,0,[11,a('", line '),[4,0,0,0,[11,a(y3),[4,0,0,0,[12,45,[4,0,0,0,[11,a(": "),[2,0,0]]]]]]]]]],a('File "%s", line %d, characters %d-%d: %s')],byz=[12,41,0],byA=[4,0,0,0,[12,46,0]],uW=[0,a("eventsManager"),a("computeAllocationsFamiliales"),a("computeAidesAuLogement")];d5(11,sU,DZ);d5(10,bs,FM);d5(9,[bm,a(Cc),-10],Cc);d5(8,sS,zT);d5(7,sR,vT);d5(6,cD,Fc);d5(5,pp,wY);d5(4,[bm,a(yC),-5],yC);d5(3,sP,zw);d5(2,k_,q3);d5(1,sT,Ef);d5(0,po,Dy);var +G_=a("output_substring"),G7=a("%.12g"),G6=a(ev),G4=a(ws),G5=a(zI),GX=a("Stdlib.Exit"),GZ=gh(0,0,E8),G0=gh(0,0,65520),G1=gh(1,0,E8),Ha=a("CamlinternalLazy.Undefined"),Hf=a(wJ),Hg=a("\\'"),Hh=a(v1),Hi=a(At),Hj=a(Bu),Hk=a(yG),He=a("Char.chr"),Hn=a("nth"),Ho=a("List.nth"),Hm=a("tl"),Hl=a("hd"),Hr=a("String.blit / Bytes.blit_string"),Hq=a("Bytes.blit"),Hp=a("String.sub / Bytes.sub"),Hw=a("String.contains_from / Bytes.contains_from"),Ht=a($),Hs=a("String.concat"),Hz=a("Array.blit"),Hy=a("Array.fill"),HE=a("Map.remove_min_elt"),HF=[0,0,0,0],HG=[0,a("map.ml"),xB,10],HH=[0,0,0],HA=a(mn),HB=a(mn),HC=a(mn),HD=a(mn),HI=a("Stdlib.Queue.Empty"),HO=a("Buffer.add_substring/add_subbytes"),HN=a("Buffer.add: cannot grow buffer"),HM=[0,a(z5),93,2],HL=[0,a(z5),94,2],HK=a("Buffer.sub"),HX=a("%c"),HY=a("%s"),HZ=a(x6),H0=a(BN),H1=a(zt),H2=a(D$),H3=a("%f"),H4=a("%B"),H5=a("%{"),H6=a("%}"),H7=a("%("),H8=a("%)"),H9=a(qZ),H_=a("%t"),H$=a("%?"),Ia=a("%r"),Ib=a("%_r"),Ic=[0,a(cj),kz,23],In=[0,a(cj),814,21],If=[0,a(cj),gJ,21],Io=[0,a(cj),818,21],Ig=[0,a(cj),gA,21],Ip=[0,a(cj),rx,19],Ih=[0,a(cj),ra,19],Iq=[0,a(cj),826,22],Ii=[0,a(cj),827,22],Ir=[0,a(cj),831,30],Ij=[0,a(cj),832,30],Il=[0,a(cj),836,26],Id=[0,a(cj),837,26],Im=[0,a(cj),846,28],Ie=[0,a(cj),847,28],Ik=[0,a(cj),kP,23],Ju=a(wg),Js=[0,a(cj),1558,4],Jt=a("Printf: bad conversion %["),Jv=[0,a(cj),1626,39],Jw=[0,a(cj),1649,31],Jx=[0,a(cj),AV,31],Jy=a("Printf: bad conversion %_"),Jz=a(wc),JA=a(wq),JB=a(wc),JC=a(wq),JG=[0,[11,a("invalid box description "),[3,0,0]],a("invalid box description %S")],JE=a($),JF=[0,0,4],JH=a($),JI=a(xI),JJ=a("h"),JK=a("hov"),JL=a("hv"),JM=a("v"),Jq=a(q5),Jo=a("neg_infinity"),Jp=a(FY),Jn=a(ev),Ji=[0,cJ],I8=a("%+nd"),I9=a("% nd"),I$=a("%+ni"),Ja=a("% ni"),Jb=a("%nx"),Jc=a("%#nx"),Jd=a("%nX"),Je=a("%#nX"),Jf=a("%no"),Jg=a("%#no"),I7=a("%nd"),I_=a(zt),Jh=a("%nu"),IV=a("%+ld"),IW=a("% ld"),IY=a("%+li"),IZ=a("% li"),I0=a("%lx"),I1=a("%#lx"),I2=a("%lX"),I3=a("%#lX"),I4=a("%lo"),I5=a("%#lo"),IU=a("%ld"),IX=a(BN),I6=a("%lu"),II=a("%+Ld"),IJ=a("% Ld"),IL=a("%+Li"),IM=a("% Li"),IN=a("%Lx"),IO=a("%#Lx"),IP=a("%LX"),IQ=a("%#LX"),IR=a("%Lo"),IS=a("%#Lo"),IH=a("%Ld"),IK=a(D$),IT=a("%Lu"),Iv=a("%+d"),Iw=a("% d"),Iy=a("%+i"),Iz=a("% i"),IA=a("%x"),IB=a("%#x"),IC=a("%X"),ID=a("%#X"),IE=a("%o"),IF=a("%#o"),Iu=a(sj),Ix=a(x6),IG=a(wg),HP=a("@]"),HQ=a("@}"),HR=a("@?"),HS=a("@\n"),HT=a("@."),HU=a("@@"),HV=a("@%"),HW=a("@"),Is=a("CamlinternalFormat.Type_mismatch"),JQ=a($),JR=[0,[11,a(gG),[2,0,[2,0,0]]],a(", %s%s")],Ke=[0,[11,a(sf),[2,0,[12,10,0]]],a(FG)],Kf=[0,[11,a("Fatal error in uncaught exception handler: exception "),[2,0,[12,10,0]]],a("Fatal error in uncaught exception handler: exception %s\n")],Kd=a("Fatal error: out of memory in uncaught exception handler"),Kb=[0,[11,a(sf),[2,0,[12,10,0]]],a(FG)],J9=[0,[2,0,[12,10,0]],a("%s\n")],J1=a("Raised at"),J2=a("Re-raised at"),J3=a("Raised by primitive operation at"),J4=a("Called from"),J5=a(" (inlined)"),J7=a($),J6=[0,[2,0,[12,32,[2,0,[11,a(' in file "'),[2,0,[12,34,[2,0,[11,a(", line "),[4,0,0,0,[11,a(y3),byy]]]]]]]]]],a('%s %s in file "%s"%s, line %d, characters %d-%d')],J8=[0,[2,0,[11,a(" unknown location"),0]],a("%s unknown location")],JW=a("Out of memory"),JX=a("Stack overflow"),JY=a("Pattern matching failed"),JZ=a("Assertion failed"),J0=a("Undefined recursive module"),JS=[0,[12,40,[2,0,[2,0,[12,41,0]]]],a("(%s%s)")],JT=a($),JU=a($),JV=[0,[12,40,[2,0,[12,41,0]]],a("(%s)")],JP=[0,[4,0,0,0,0],a(sj)],JN=[0,[3,0,0],a("%S")],JO=a(sc),J_=[0,a($),a("(Cannot print locations:\n bytecode executable program file not found)"),a("(Cannot print locations:\n bytecode executable program file appears to be corrupt)"),a("(Cannot print locations:\n bytecode executable program file has wrong magic number)"),a("(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)")],Kg=a(Fx),Ku=[0,0],byw=a("OCAMLRUNPARAM"),byu=a("CAMLRUNPARAM"),Kh=a($),KU=[3,0,3],KV=a(ev),KP=a(nv),KQ=a("<\/"),KR=a($),KL=a(nv),KM=a(rU),KN=a($),KJ=a("\n"),KF=a($),KG=a($),KH=a($),KI=a($),KE=[0,a($)],KA=a($),KB=a($),KC=a($),KD=a($),Ky=[0,a($),0,a($)],Kx=a($),Kw=a("Stdlib.Format.String_tag"),K6=a($),Lb=[0,a("lib/dates.ml"),226,2],La=[0,[4,0,[0,2,4],0,[12,45,[4,0,[0,2,2],0,[12,45,[4,0,[0,2,2],0,0]]]]],a("%04d-%02d-%02d")],K_=[0,[12,91,[4,0,0,0,[11,a(" years, "),[4,0,0,0,[11,a(" months, "),[4,0,0,0,[11,a(" days]"),0]]]]]]],a("[%d years, %d months, %d days]")],K7=a("Dates_calc.Dates.InvalidDate"),K8=a("Dates_calc.Dates.AmbiguousComputation"),Lg=gh(1,0,0),Lc=a("Z.Overflow"),Ld=a(mk),Lk=a($),Ll=a("+inf"),Lm=a("-inf"),Ln=a(F5),Lo=a("undef"),Lq=[0,a("q.ml"),486,25],Lp=a("Q.of_string: invalid digit"),Li=a(xj),Lh=a(xj),Lu=a("Buf.extend: reached Sys.max_string_length"),L4=[0,a(rV),72,32],L1=[0,a(rV),72,32],L0=a("Root is not an object or array"),LW=a("NaN value not allowed in standard JSON"),LX=[0,[8,[0,0,3],0,[0,16],0],a(x9)],LZ=[0,[8,[0,0,3],0,[0,17],0],a(Dq)],LY=a(y0),LU=a("Infinity value not allowed in standard JSON"),LV=a("-Infinity value not allowed in standard JSON"),LQ=a("NaN"),LR=[0,[8,[0,0,3],0,[0,16],0],a(x9)],LT=[0,[8,[0,0,3],0,[0,17],0],a(Dq)],LS=a(y0),LO=a("Infinity"),LP=a("-Infinity"),LL=a(ws),LM=a(zI),LK=a("null"),LE=a(v1),LF=a(At),LG=a(Bu),LH=a("\\f"),LI=a(yG),LJ=a('\\"'),LD=a(wJ),LC=[0,[11,a("src="),[3,0,[11,a(" start="),[4,3,0,0,[11,a(" len="),[4,3,0,0,[12,10,[10,0]]]]]]]],a("src=%S start=%i len=%i\n%!")],LA=a("\\u00"),Lx=[0,a(rV),72,32],Lv=a("Yojson.Json_error"),Lz=[0,a(qN),a(q2),a(re),a(rO),a(ro),a($),a($),a($),a($),a($),a($)],L3=[0,a(qN),a(q2),a(re),a(rO),a(ro),a($),a($),a($),a($),a($),a($)],L6=[0,a(qN),a(q2),a(re),a(rO),a(ro),a($),a($),a($),a($),a($),a($)],MZ=a("unreachable due to the [is_subscope_call] test"),M1=a("unreachable due to the [is_subscope_input_var_def] test"),M2=a("]"),M3=a("["),M4=a(" ]): expected variable definition (function output), found: "),M5=a(gG),M6=a(vh),M7=a(" ]): expected variable definition (function output), found: end of tokens"),M8=a(gG),M9=a(vh),M0=a("Unexpected event: "),M$=a("Missing function output variable definition."),M_=a("Invalid start of function call."),MY=a(ac),MX=a(ae),Na=[0,[11,a("An error occurred while parsing raw events: "),[2,0,[12,10,0]]],a("An error occurred while parsing raw events: %s\n")],MN=a(yp),MO=a(gG),MP=[0,[11,a(A$),0],a(A$)],MQ=a(yp),MR=a(gG),MS=[0,[11,a(EZ),0],a(EZ)],MT=a(gG),MU=[0,[11,a("VariableDefinition([ "),[2,0,[11,a(" ], "),[2,0,[12,41,0]]]]],a("VariableDefinition([ %s ], %s)")],MV=[0,[11,a("DecisionTaken("),[2,0,[12,58,[4,0,0,0,[12,46,[4,0,0,0,[12,45,[4,0,0,0,[12,46,[4,0,0,0,byz]]]]]]]]]],a("DecisionTaken(%s:%d.%d-%d.%d)")],Mx=[0,cE,a("VarComputation")],My=[0,cE,a("FunCall")],Mz=a(CH),MA=a("inputs"),MB=a(yr),MC=[0,cE,a("SubScopeCall")],MD=a("fun_calls"),ME=a("value"),MF=a(yr),MG=a("pos"),MH=a(ae),MI=a(CH),MJ=a(ac),MK=a("fun_name"),Mm=[0,ca,[0,[0,cE,a("Unit")],0]],Mn=[0,ca,[0,[0,cE,a("Unembeddable")],0]],Mo=[0,cE,a("Bool")],Mp=[0,cE,a("Money")],Mq=[0,cE,a("Integer")],Mr=[0,cE,a("Decimal")],Ms=[0,cE,a("Date")],Mt=[0,cE,a("Duration")],Mu=[0,cE,a("Enum")],Mv=[0,cE,a("Struct")],Mw=[0,cE,a("Array")],Ml=[0,[15,0],a(qZ)],Mk=[0,[15,0],a(qZ)],L8=a("law_headings"),L9=a("end_column"),L_=a("end_line"),L$=a("start_column"),Ma=a("start_line"),Mb=a("filename"),Mc=a("Runtime_ocaml.Runtime.EmptyError"),Md=a("Runtime_ocaml.Runtime.AssertionFailed"),Me=a("Runtime_ocaml.Runtime.ConflictError"),Mf=a("Runtime_ocaml.Runtime.UncomparableDurations"),Mh=a("Runtime_ocaml.Runtime.ImpossibleDate"),Mj=a("Runtime_ocaml.Runtime.NoValueProvided"),Nb=a("Jsoo_runtime.Error.Exn"),Nc=a(rD),Nu=[0,[2,0,[11,a(" in file "),[2,0,[11,a(", position "),[4,0,0,0,[12,58,[4,0,0,0,[11,a("--"),[4,0,0,0,[12,58,byA]]]]]]]]]],a("%s in file %s, position %d:%d--%d:%d.")],Nv=a("No rule applies in the given context to give a value to the variable"),Nw=a("A conflict happened between two rules giving a value to the variable"),Nx=a("A failure happened in the assertion"),Nn=a("Begin call"),No=a("End call"),Np=a("Variable definition"),Nq=a("Decision taken"),Nl=a($),Nj=a("date_of_jsoo: invalid date"),Nh=[0,a(yg),a(B2),a(EM)],Ni=[0,a(yg),a(EM),a(B2)],aaa=[0,a(a0),90,14,90,29,[0,a(bl),[0,a(a1),0]]],$5=[0,a(a0),fO,18,fO,64,[0,a(bl),[0,a(a1),0]]],$6=[0,a(a0),cd,5,cd,72,[0,a(bl),[0,a(a1),0]]],$4=[0,a(a0),cd,5,cd,72,[0,a(bl),[0,a(a1),0]]],$0=[0,a(a0),87,14,87,53,[0,a(bl),[0,a(a1),0]]],$W=[0,a(a0),86,14,86,50,[0,a(bl),[0,a(a1),0]]],$S=[0,a(a0),89,14,89,46,[0,a(bl),[0,a(a1),0]]],$O=[0,a(a0),88,14,88,54,[0,a(bl),[0,a(a1),0]]],$J=[0,a(a0),97,18,97,72,[0,a(bl),[0,a(a1),0]]],$K=[0,a(a0),96,5,96,80,[0,a(bl),[0,a(a1),0]]],$I=[0,a(a0),96,5,96,80,[0,a(bl),[0,a(a1),0]]],$D=[0,a(a0),93,18,93,67,[0,a(bl),[0,a(a1),0]]],$E=[0,a(a0),92,5,92,75,[0,a(bl),[0,a(a1),0]]],$C=[0,a(a0),92,5,92,75,[0,a(bl),[0,a(a1),0]]],$y=[0,a(a0),fX,14,fX,30,[0,a("Article L131-1"),[0,a(bl),[0,a(a1),0]]]],$v=[0,0],$w=[1,0],$x=[2,0],$z=[0,a(a0),76,11,76,27,[0,a(bl),[0,a(a1),0]]],$u=[0,a(a0),76,11,76,27,[0,a(bl),[0,a(a1),0]]],$A=[0,a(ef),[0,a("enfants_\xc3\xa0_charge"),0]],$F=[0,a(a0),92,5,92,75,[0,a(bl),[0,a(a1),0]]],$G=[0,a(ef),[0,a("allocations_familiales.personne_charge_effective_permanente_est_parent"),0]],$B=[0,a(a0),92,5,92,75,[0,a(bl),[0,a(a1),0]]],$L=[0,a(a0),96,5,96,80,[0,a(bl),[0,a(a1),0]]],$M=[0,a(ef),[0,a("allocations_familiales.personne_charge_effective_permanente_remplit_titre_I"),0]],$H=[0,a(a0),96,5,96,80,[0,a(bl),[0,a(a1),0]]],$P=[0,a(a0),88,14,88,54,[0,a(bl),[0,a(a1),0]]],$Q=[0,a(ef),[0,a("allocations_familiales.ressources_m\xc3\xa9nage"),0]],$N=[0,a(a0),88,14,88,54,[0,a(bl),[0,a(a1),0]]],$T=[0,a(a0),89,14,89,46,[0,a(bl),[0,a(a1),0]]],$U=[0,a(ef),[0,a("allocations_familiales.r\xc3\xa9sidence"),0]],$R=[0,a(a0),89,14,89,46,[0,a(bl),[0,a(a1),0]]],$X=[0,a(a0),86,14,86,50,[0,a(bl),[0,a(a1),0]]],$Y=[0,a(ef),[0,a("allocations_familiales.date_courante"),0]],$V=[0,a(a0),86,14,86,50,[0,a(bl),[0,a(a1),0]]],$1=[0,a(a0),87,14,87,53,[0,a(bl),[0,a(a1),0]]],$2=[0,a(ef),[0,a("allocations_familiales.enfants_\xc3\xa0_charge"),0]],$Z=[0,a(a0),87,14,87,53,[0,a(bl),[0,a(a1),0]]],$7=[0,a(a0),cd,5,cd,72,[0,a(bl),[0,a(a1),0]]],$8=[0,a(ef),[0,a("allocations_familiales.avait_enfant_\xc3\xa0_charge_avant_1er_janvier_2012"),0]],$3=[0,a(a0),cd,5,cd,72,[0,a(bl),[0,a(a1),0]]],$9=[0,a(ef),[0,a(vE),[0,a(U),0]]],$_=[0,a(ef),[0,a(vE),[0,a(U),0]]],aab=[0,a(a0),80,12,80,27,[0,a(bl),[0,a(a1),0]]],$$=[0,a(a0),80,12,80,27,[0,a(bl),[0,a(a1),0]]],aac=[0,a(ef),[0,a("i_montant_vers\xc3\xa9"),0]],$o=[0,a(a0),45,14,45,27,[0,a(eO),[0,a(a1),0]]],$n=a(p),$j=[0,a(br),DQ,14,DQ,62,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],$e=[0,a(U),[0,a(kT),[0,a(ac),0]]],$f=[0,a(U),[0,a(kT),0]],$g=[0,a(U),[0,a(kT),[0,a(ae),0]]],$h=[0,a(U),[0,a(kT),0]],$i=a(p),$a=[0,a(br),on,14,on,61,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],_8=[0,a(a0),39,14,39,38,[0,a(eO),[0,a(a1),0]]],_2=[0,a(U),[0,a(j$),[0,a(ac),0]]],_3=[0,a(U),[0,a(j$),0]],_4=[0,a(U),[0,a(j$),[0,a(ae),0]]],_5=[0,a(U),[0,a(j$),0]],_6=a(p),_7=a(p),_Y=[0,a(a0),37,14,37,32,[0,a(eO),[0,a(a1),0]]],_X=a(p),_T=[0,a(dU),hZ,5,hZ,43,[0,a("Article R521-4"),[0,a(aN),[0,a(aP),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],_I=[0,a(U),[0,a(fo),[0,a(ac),0]]],_J=[0,a(U),[0,a(fo),0]],_K=[0,a(U),[0,a(fo),[0,a(ae),0]]],_L=[0,a(U),[0,a(fo),0]],_M=a(et),_R=a(kd),_S=a(b5),_N=[0,a(U),[0,a(j4),[0,a(ac),0]]],_O=[0,a(U),[0,a(j4),0]],_P=[0,a(U),[0,a(j4),[0,a(ae),0]]],_Q=[0,a(U),[0,a(j4),0]],_U=[0,a(I),ei,11,ei,49,[0,a(J),[0,a(H),[0,a(B),0]]]],_H=[0,a(I),ei,11,ei,49,[0,a(J),[0,a(H),[0,a(B),0]]]],_E=[0,a(dU),cs,14,cs,46,[0,a(oU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],_x=a(cI),_y=[0,a(br),268,5,qP,41,[0,a(fS),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],_u=a(cI),_v=a(et),_w=a(cI),_z=[0,a(I),eR,11,eR,52,[0,a(J),[0,a(H),[0,a(B),0]]]],_r=a(cI),_s=[0,a(br),Aw,5,280,40,[0,a(fS),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],_o=a(cI),_p=a(et),_q=a(cI),_t=[0,a(I),eR,11,eR,52,[0,a(J),[0,a(H),[0,a(B),0]]]],_A=[0,a(I),eR,11,eR,52,[0,a(J),[0,a(H),[0,a(B),0]]]],_n=[0,a(br),hS,14,hS,55,[0,a(fS),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],_m=a(p),_b=a(z),_c=[0,a(U),[0,a(bH),[0,a(ac),0]]],_d=[0,a(U),[0,a(bH),0]],_e=[0,a(U),[0,a(bH),[0,a(ae),0]]],_f=[0,a(U),[0,a(bH),0]],_g=[0,a(br),gL,5,rr,55,[0,a(kn),[0,a(eX),[0,a(gK),[0,a(d0),[0,a(a9),[0,a(af),0]]]]]]],_a=a("0.0369"),_h=[0,a(I),cQ,11,cQ,37,[0,a(J),[0,a(H),[0,a(B),0]]]],Z5=a(z),Z6=[0,a(U),[0,a(bH),[0,a(ac),0]]],Z7=[0,a(U),[0,a(bH),0]],Z8=[0,a(U),[0,a(bH),[0,a(ae),0]]],Z9=[0,a(U),[0,a(bH),0]],Z_=[0,a(br),389,5,392,56,[0,a(kn),[0,a(eX),[0,a(gK),[0,a(d0),[0,a(a9),[0,a(af),0]]]]]]],Z4=a("0.0567"),Z$=[0,a(I),cQ,11,cQ,37,[0,a(J),[0,a(H),[0,a(B),0]]]],_i=[0,a(I),cQ,11,cQ,37,[0,a(J),[0,a(H),[0,a(B),0]]]],Z3=[0,a(br),22,14,22,40,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],ZZ=[0,a(U),[0,a(ka),[0,a(ac),0]]],Z0=[0,a(U),[0,a(ka),0]],Z1=[0,a(U),[0,a(ka),[0,a(ae),0]]],Z2=[0,a(U),[0,a(ka),0]],_j=[0,a(I),cQ,11,cQ,37,[0,a(J),[0,a(H),[0,a(B),0]]]],ZY=[0,a(I),cQ,11,cQ,37,[0,a(J),[0,a(H),[0,a(B),0]]]],ZS=a(z),ZT=[0,a(br),356,5,yV,69,[0,a(kn),[0,a(eX),[0,a(gK),[0,a(d0),[0,a(a9),[0,a(af),0]]]]]]],ZU=[0,a(I),dT,11,dT,31,[0,a(J),[0,a(H),[0,a(B),0]]]],ZP=[8,0],ZQ=[0,a(aW),u6,24,u6,44,[0,a(cG),[0,a(ba),[0,a(bc),0]]]],ZR=[0,a(I),dT,11,dT,31,[0,a(J),[0,a(H),[0,a(B),0]]]],ZV=[0,a(I),dT,11,dT,31,[0,a(J),[0,a(H),[0,a(B),0]]]],ZO=[0,a(br),18,14,18,34,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],ZK=[0,a(br),yf,14,yf,39,[0,a(fS),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],ZG=[0,a(U),[0,a(kg),[0,a(ac),0]]],ZH=[0,a(U),[0,a(kg),0]],ZI=[0,a(U),[0,a(kg),[0,a(ae),0]]],ZJ=[0,a(U),[0,a(kg),0]],Zx=[0,a(U),[0,a(bH),[0,a(ac),0]]],Zy=[0,a(U),[0,a(bH),0]],Zz=[0,a(U),[0,a(bH),[0,a(ae),0]]],ZA=[0,a(U),[0,a(bH),0]],ZB=[0,a(br),60,5,60,38,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],Zw=a(rv),ZC=[0,a(I),dl,11,dl,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Zq=[0,a(U),[0,a(bH),[0,a(ac),0]]],Zr=[0,a(U),[0,a(bH),0]],Zs=[0,a(U),[0,a(bH),[0,a(ae),0]]],Zt=[0,a(U),[0,a(bH),0]],Zu=[0,a(br),fO,5,fO,38,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],Zp=a(Cp),Zv=[0,a(I),dl,11,dl,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Zj=[0,a(U),[0,a(bH),[0,a(ac),0]]],Zk=[0,a(U),[0,a(bH),0]],Zl=[0,a(U),[0,a(bH),[0,a(ae),0]]],Zm=[0,a(U),[0,a(bH),0]],Zn=[0,a(br),Eu,5,Eu,38,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],Zi=a(CC),Zo=[0,a(I),dl,11,dl,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Zc=[0,a(U),[0,a(bH),[0,a(ac),0]]],Zd=[0,a(U),[0,a(bH),0]],Ze=[0,a(U),[0,a(bH),[0,a(ae),0]]],Zf=[0,a(U),[0,a(bH),0]],Zg=[0,a(a0),28,5,28,44,[0,a(eO),[0,a(a1),0]]],Zb=a(p),Zh=[0,a(I),dl,11,dl,47,[0,a(J),[0,a(H),[0,a(B),0]]]],ZD=[0,a(I),dl,11,dl,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Za=[0,a(I),dl,11,dl,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Y9=[0,a(dU),ei,14,ei,41,[0,a(oU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],Y7=a(b5),Y8=a(b5),YZ=[8,0],Y0=[0,a(aW),FJ,5,FJ,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],YW=a(z),YX=a(v$),YY=a(p),Y1=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],YT=[8,0],YU=[0,a(aW),F_,5,F_,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],YQ=a(z),YR=a("0.2379"),YS=a(p),YV=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],YN=[8,0],YO=[0,a(aW),fi,5,fi,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],YK=a(z),YL=a("0.2437"),YM=a(p),YP=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],YH=[8,0],YI=[0,a(aW),zY,5,zY,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],YE=a(z),YF=a("0.2496"),YG=a(p),YJ=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],YB=[8,0],YC=[0,a(aW),DT,5,DT,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Yy=a(z),Yz=a("0.2555"),YA=a(p),YD=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Yv=[8,0],Yw=[0,a(aW),vc,5,vc,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Ys=a(z),Yt=a("0.2613"),Yu=a(p),Yx=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Yp=[8,0],Yq=[0,a(aW),w_,5,w_,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Ym=a(z),Yn=a("0.2672"),Yo=a(p),Yr=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Yj=[8,0],Yk=[0,a(aW),qT,5,qT,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Yg=a(z),Yh=a("0.2804"),Yi=a(p),Yl=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Yd=[8,0],Ye=[0,a(aW),f2,5,f2,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Ya=a(z),Yb=a("0.2936"),Yc=a(p),Yf=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],X9=[8,0],X_=[0,a(aW),xq,5,xq,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],X6=a(z),X7=a("0.3068"),X8=a(p),X$=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Y2=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],X4=[8,0],X5=[0,a(aW),rA,14,rA,50,[0,a(cG),[0,a(ba),[0,a(bc),0]]]],X1=a(z),X2=a(sn),X3=a(p),Y3=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],XY=[0,a(br),38,14,38,50,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],XV=a(z),XW=a(sn),XX=a(p),XZ=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],XT=[0,a(br),79,14,79,50,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],XQ=a(z),XR=a(rv),XS=a(p),XU=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],XO=[0,a(br),fX,14,fX,50,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],XL=a(z),XM=a(Cp),XN=a(p),XP=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],X0=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],XG=[0,a(br),43,14,43,59,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],XC=a(X),XD=a(X),XE=a("0.41"),XF=a(p),XH=[0,a(I),c3,11,c3,56,[0,a(J),[0,a(H),[0,a(B),0]]]],XA=[0,a(br),84,14,84,59,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],Xw=a(X),Xx=a(X),Xy=a("0.205"),Xz=a(p),XB=[0,a(I),c3,11,c3,56,[0,a(J),[0,a(H),[0,a(B),0]]]],Xu=[0,a(br),gR,14,gR,59,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],Xq=a(X),Xr=a(X),Xs=a("0.1025"),Xt=a(p),Xv=[0,a(I),c3,11,c3,56,[0,a(J),[0,a(H),[0,a(B),0]]]],Xl=[0,a(br),De,5,De,42,[0,a(fS),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],Xk=a("0.20234"),Xm=[0,a(I),es,11,es,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Xi=[0,a(br),rd,5,236,45,[0,a(fS),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],Xh=a("0.10117"),Xj=[0,a(I),es,11,es,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Xf=[0,a(br),zu,5,zu,42,[0,a(fS),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],Xe=a("0.05059"),Xg=[0,a(I),es,11,es,47,[0,a(J),[0,a(H),[0,a(B),0]]]],W9=a(cI),W_=[0,a(br),qS,5,166,65,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],W6=a(cI),W7=a(et),W8=a(cI),W$=[0,a(I),eE,11,eE,31,[0,a(J),[0,a(H),[0,a(B),0]]]],W3=a(cI),W4=[0,a(br),174,5,175,65,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],W0=a(cI),W1=a(et),W2=a(cI),W5=[0,a(I),eE,11,eE,31,[0,a(J),[0,a(H),[0,a(B),0]]]],Xa=[0,a(I),eE,11,eE,31,[0,a(J),[0,a(H),[0,a(B),0]]]],WZ=[0,a(br),jt,14,jt,34,[0,a(cU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],WY=a(p),Xb=[0,a(I),eE,11,eE,31,[0,a(J),[0,a(H),[0,a(B),0]]]],WX=[0,a(I),eE,11,eE,31,[0,a(J),[0,a(H),[0,a(B),0]]]],WO=[0,a(U),[0,a(eP),[0,a(ac),0]]],WP=[0,a(U),[0,a(eP),0]],WQ=[0,a(U),[0,a(eP),[0,a(ae),0]]],WR=[0,a(U),[0,a(eP),0]],WS=[0,a(bP),h$,5,318,21,[0,a(Ac),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],WT=[0,a(I),cs,11,cs,34,[0,a(J),[0,a(H),[0,a(B),0]]]],WF=[0,a(U),[0,a(eP),[0,a(ac),0]]],WG=[0,a(U),[0,a(eP),0]],WH=[0,a(U),[0,a(eP),[0,a(ae),0]]],WI=[0,a(U),[0,a(eP),0]],WJ=[0,a(U),[0,a(kM),[0,a(ac),0]]],WK=[0,a(U),[0,a(kM),0]],WL=[0,a(U),[0,a(kM),[0,a(ae),0]]],WM=[0,a(U),[0,a(kM),0]],WN=[0,a(bP),fr,5,dy,21,[0,a(Ac),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],WU=[0,a(I),cs,11,cs,34,[0,a(J),[0,a(H),[0,a(B),0]]]],WE=[0,a(I),cs,11,cs,34,[0,a(J),[0,a(H),[0,a(B),0]]]],WV=[0,a(I),cs,11,cs,34,[0,a(J),[0,a(H),[0,a(B),0]]]],WD=[0,a(I),cs,11,cs,34,[0,a(J),[0,a(H),[0,a(B),0]]]],Wu=a(z),Wv=[8,0],Ww=[0,a(aW),fQ,6,fQ,71,[0,a(cG),[0,a(ba),[0,a(bc),0]]]],Wx=[0,a(I),cJ,11,cJ,28,[0,a(J),[0,a(H),[0,a(B),0]]]],Ws=a(z),Wt=[0,a(bP),rZ,5,410,72,[0,a(rW),[0,a(eX),[0,a(ke),[0,a(d0),[0,a(aa),[0,a(af),0]]]]]]],Wy=[0,a(I),cJ,11,cJ,28,[0,a(J),[0,a(H),[0,a(B),0]]]],Wz=[0,a(I),cJ,11,cJ,28,[0,a(J),[0,a(H),[0,a(B),0]]]],Wq=a(X),Wr=[0,a(bP),fO,5,fO,70,[0,a(Gg),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],WA=[0,a(I),cJ,11,cJ,28,[0,a(J),[0,a(H),[0,a(B),0]]]],Wp=[0,a(I),cJ,11,cJ,28,[0,a(J),[0,a(H),[0,a(B),0]]]],Wh=[8,0],Wi=[0,a(aW),251,5,kb,53,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],We=a(p),Wf=a("0.145"),Wg=a(p),Wj=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],Wb=[8,0],Wc=[0,a(aW),zO,5,261,53,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],V_=a(p),V$=a("0.1393"),Wa=a(p),Wd=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],V7=[8,0],V8=[0,a(aW),Ay,5,qP,53,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],V4=a(p),V5=a("0.1335"),V6=a(p),V9=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],V1=[8,0],V2=[0,a(aW),Aw,5,279,53,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],VY=a(p),VZ=a("0.1278"),V0=a(p),V3=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],VV=[8,0],VW=[0,a(aW),287,5,288,53,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],VS=a(p),VT=a("0.122"),VU=a(p),VX=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],VP=[8,0],VQ=[0,a(aW),d_,5,eh,53,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],VM=a(p),VN=a("0.1163"),VO=a(p),VR=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],VJ=[8,0],VK=[0,a(aW),kX,5,306,53,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],VG=a(p),VH=a("0.1105"),VI=a(p),VL=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],VD=[8,0],VE=[0,a(aW),dE,5,h$,53,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],VA=a(p),VB=a("0.0976"),VC=a(p),VF=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],Vx=[8,0],Vy=[0,a(aW),323,5,fq,53,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Vu=a(p),Vv=a("0.0847"),Vw=a(p),Vz=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],Vr=[8,0],Vs=[0,a(aW),u4,5,333,53,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Vo=a(p),Vp=a("0.0717"),Vq=a(p),Vt=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],Vl=[8,0],Vm=[0,a(aW),nc,5,nc,49,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Vi=a(p),Vj=a("5728"),Vk=a(p),Vn=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],Wk=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],Vg=[8,0],Vh=[0,a(aW),nU,14,nU,49,[0,a(cG),[0,a(ba),[0,a(bc),0]]]],Vd=a(p),Ve=a(wk),Vf=a(p),Wl=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],Va=a(z),Vb=[0,a(br),di,5,fi,71,[0,a(kn),[0,a(eX),[0,a(gK),[0,a(d0),[0,a(a9),[0,a(af),0]]]]]]],U$=a(wk),Vc=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],U_=[0,a(br),rJ,29,rJ,64,[0,a(kn),[0,a(eX),[0,a(gK),[0,a(d0),[0,a(a9),[0,a(af),0]]]]]]],U9=a(p),U5=[0,a(dU),mA,14,mA,34,[0,a(oU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],UX=[0,a(U),[0,a(fo),[0,a(ac),0]]],UY=[0,a(U),[0,a(fo),0]],UZ=[0,a(U),[0,a(fo),[0,a(ae),0]]],U0=[0,a(U),[0,a(fo),0]],U1=a(et),U2=a(kd),U3=a(b5),U4=a(b5),UT=[0,a(dU),CB,14,CB,34,[0,a(oU),[0,a(aN),[0,a(aP),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],UM=[8,0],UN=[0,a(aW),hk,5,hk,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],UJ=a(X),UK=a(Cx),UL=a(p),UO=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],UG=[8,0],UH=[0,a(aW),CM,5,CM,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],UD=a(X),UE=a("0.0539"),UF=a(p),UI=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],UA=[8,0],UB=[0,a(aW),yq,5,yq,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Ux=a(X),Uy=a("0.0615"),Uz=a(p),UC=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],Uu=[8,0],Uv=[0,a(aW),ex,5,ex,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Ur=a(X),Us=a("0.069"),Ut=a(p),Uw=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],Uo=[8,0],Up=[0,a(aW),CA,5,CA,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Ul=a(X),Um=a("0.0766"),Un=a(p),Uq=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],Ui=[8,0],Uj=[0,a(aW),fT,5,fT,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],Uf=a(X),Ug=a("0.0842"),Uh=a(p),Uk=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],Uc=[8,0],Ud=[0,a(aW),wC,5,wC,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],T$=a(X),Ua=a("0.0918"),Ub=a(p),Ue=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],T8=[8,0],T9=[0,a(aW),v0,5,v0,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],T5=a(X),T6=a("0.1089"),T7=a(p),T_=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],T2=[8,0],T3=[0,a(aW),jf,5,jf,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],TZ=a(X),T0=a("0.1259"),T1=a(p),T4=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],TW=[8,0],TX=[0,a(aW),f5,5,f5,67,[0,a(bq),[0,a(ba),[0,a(bc),0]]]],TT=a(X),TU=a("0.143"),TV=a(p),TY=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],UP=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],TS=[0,a(aW),hZ,14,hZ,59,[0,a(cG),[0,a(ba),[0,a(bc),0]]]],TP=a(X),TQ=a(rv),TR=a(p),TL=[0,a(aW),iM,14,iM,67,[0,a(cG),[0,a(ba),[0,a(bc),0]]]],TH=a(_),TI=a(_),TJ=a(Cx),TK=a(p),TA=a(z),TB=[0,a(bP),423,6,ru,72,[0,a(rW),[0,a(eX),[0,a(ke),[0,a(d0),[0,a(aa),[0,a(af),0]]]]]]],TC=[0,a(I),dv,11,dv,35,[0,a(J),[0,a(H),[0,a(B),0]]]],Tv=[0,a(co),[0,a(iU),[0,a(ac),0]]],Tw=[0,a(co),[0,a(iU),0]],Tx=[0,a(co),[0,a(iU),[0,a(ae),0]]],Ty=[0,a(co),[0,a(iU),0]],Tz=[0,a(bP),rP,5,dl,59,[0,a(Gg),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],TD=[0,a(I),dv,11,dv,35,[0,a(J),[0,a(H),[0,a(B),0]]]],Tu=[0,a(I),dv,11,dv,35,[0,a(J),[0,a(H),[0,a(B),0]]]],TE=[0,a(I),dv,11,dv,35,[0,a(J),[0,a(H),[0,a(B),0]]]],Tt=[0,a(I),dv,11,dv,35,[0,a(J),[0,a(H),[0,a(B),0]]]],Tn=a(z),To=[0,a(bP),gy,5,430,71,[0,a(rW),[0,a(eX),[0,a(ke),[0,a(d0),[0,a(aa),[0,a(af),0]]]]]]],Tp=[0,a(I),dW,11,dW,34,[0,a(J),[0,a(H),[0,a(B),0]]]],Tm=[0,a(a0),31,9,31,32,[0,a(eO),[0,a(a1),0]]],Tq=[0,a(I),dW,11,dW,34,[0,a(J),[0,a(H),[0,a(B),0]]]],Tl=[0,a(I),dW,11,dW,34,[0,a(J),[0,a(H),[0,a(B),0]]]],Tf=[0,a(aW),23,5,23,67,[0,a(F3),[0,a(f9),0]]],Td=a(EO),Te=a("5628600"),Tg=[0,a(I),dq,11,dq,27,[0,a(J),[0,a(H),[0,a(B),0]]]],Tb=[0,a(aW),56,5,56,67,[0,a(vf),[0,a(f9),0]]],S$=a(FK),Ta=a("5684900"),Tc=[0,a(I),dq,11,dq,27,[0,a(J),[0,a(H),[0,a(B),0]]]],S9=[0,a(aW),89,5,89,67,[0,a(wI),[0,a(f9),0]]],S7=a(EW),S8=a("5775900"),S_=[0,a(I),dq,11,dq,27,[0,a(J),[0,a(H),[0,a(B),0]]]],S5=[0,a(aW),bp,5,bp,67,[0,a(b6),[0,a(C8),[0,a(f9),0]]]],S3=a(wm),S4=a("5827900"),S6=[0,a(I),dq,11,dq,27,[0,a(J),[0,a(H),[0,a(B),0]]]],Th=[0,a(I),dq,11,dq,27,[0,a(J),[0,a(H),[0,a(B),0]]]],S2=[0,a(br),Ew,14,Ew,30,[0,a(DB),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],S0=a(AR),S1=a("5595000"),SU=[0,a(aW),30,5,30,67,[0,a(F3),[0,a(f9),0]]],SS=a(EO),ST=a("7877000"),SV=[0,a(I),dk,11,dk,28,[0,a(J),[0,a(H),[0,a(B),0]]]],SQ=[0,a(aW),63,5,63,67,[0,a(vf),[0,a(f9),0]]],SO=a(FK),SP=a("7955800"),SR=[0,a(I),dk,11,dk,28,[0,a(J),[0,a(H),[0,a(B),0]]]],SM=[0,a(aW),96,5,96,67,[0,a(wI),[0,a(f9),0]]],SK=a(EW),SL=a("8083100"),SN=[0,a(I),dk,11,dk,28,[0,a(J),[0,a(H),[0,a(B),0]]]],SI=[0,a(aW),dW,5,dW,67,[0,a(b6),[0,a(C8),[0,a(f9),0]]]],SG=a(wm),SH=a("8155800"),SJ=[0,a(I),dk,11,dk,28,[0,a(J),[0,a(H),[0,a(B),0]]]],SW=[0,a(I),dk,11,dk,28,[0,a(J),[0,a(H),[0,a(B),0]]]],SF=[0,a(br),dE,14,dE,31,[0,a(DB),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],SD=a(AR),SE=a("7830000"),Sz=[0,a(a0),34,14,34,36,[0,a(eO),[0,a(a1),0]]],SA=[0,a(I),nH,11,nH,33,[0,a(J),[0,a(H),[0,a(B),0]]]],Sy=[0,a(I),nH,11,nH,33,[0,a(J),[0,a(H),[0,a(B),0]]]],Sv=[0,a(bP),75,14,75,64,[0,a(gC),[0,a(gz),[0,a(ed),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Sr=[0,a(co),[0,a(dg),[0,a(ac),0]]],Ss=[0,a(co),[0,a(dg),0]],St=[0,a(co),[0,a(dg),[0,a(ae),0]]],Su=[0,a(co),[0,a(dg),0]],Sm=[0,a(dU),83,19,83,67,[0,a(nJ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],Sn=[0,a(I),eY,11,eY,38,[0,a(J),[0,a(H),[0,a(B),0]]]],Sl=[0,a(dU),56,14,56,41,[0,a(nJ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],So=[0,a(I),eY,11,eY,38,[0,a(J),[0,a(H),[0,a(B),0]]]],Sk=[0,a(I),eY,11,eY,38,[0,a(J),[0,a(H),[0,a(B),0]]]],Sf=[0,a(a0),33,14,33,40,[0,a(eO),[0,a(a1),0]]],R$=[0,a(I),fE,14,fE,46,[0,a(J),[0,a(H),[0,a(B),0]]]],R7=[0,a(I),ge,14,ge,56,[0,a(J),[0,a(H),[0,a(B),0]]]],R6=[1,0],R2=[0,a(I),fL,14,fL,50,[0,a(J),[0,a(H),[0,a(B),0]]]],RW=[0,a(I),fQ,14,fQ,32,[0,a(J),[0,a(H),[0,a(B),0]]]],RQ=[0,a(dU),64,14,64,44,[0,a(nJ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],RP=a(_),RL=[0,a(br),dh,14,dh,35,[0,a(fS),[0,a(aN),[0,a(aP),[0,a(az),[0,a(a9),[0,a(af),0]]]]]]],RK=a(_),RF=[0,a(bP),rj,5,zO,56,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],RE=[1,0],RG=[0,a(I),98,11,98,20,[0,a(J),[0,a(H),[0,a(B),0]]]],Rz=[0,a(bP),qP,5,271,48,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Ry=[0,0],RA=[0,a(I),98,11,98,20,[0,a(J),[0,a(H),[0,a(B),0]]]],Rx=[0,a(bP),FI,5,FI,70,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Rw=[0,0],RB=[0,a(I),98,11,98,20,[0,a(J),[0,a(H),[0,a(B),0]]]],Rv=[0,a(bP),C4,5,C4,69,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Ru=[0,0],RC=[0,a(I),98,11,98,20,[0,a(J),[0,a(H),[0,a(B),0]]]],Rt=[0,a(bP),on,5,on,60,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Rs=[0,0],RD=[0,a(I),98,11,98,20,[0,a(J),[0,a(H),[0,a(B),0]]]],RH=[0,a(I),98,11,98,20,[0,a(J),[0,a(H),[0,a(B),0]]]],Rr=[0,a(I),98,11,98,20,[0,a(J),[0,a(H),[0,a(B),0]]]],Rn=[0,a(bP),nW,5,nW,70,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Rm=[1,0],Ro=[0,a(I),97,11,97,26,[0,a(J),[0,a(H),[0,a(B),0]]]],Rk=[0,a(bP),j_,5,m2,56,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Rj=[2,0],Rl=[0,a(I),97,11,97,26,[0,a(J),[0,a(H),[0,a(B),0]]]],Rf=[0,a(bP),264,5,rn,48,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Re=[0,0],Rg=[0,a(I),97,11,97,26,[0,a(J),[0,a(H),[0,a(B),0]]]],Rd=[0,a(bP),yk,5,yk,69,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Rc=[0,0],Rh=[0,a(I),97,11,97,26,[0,a(J),[0,a(H),[0,a(B),0]]]],Rb=[0,a(bP),Ag,5,Ag,60,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Ra=[0,0],Ri=[0,a(I),97,11,97,26,[0,a(J),[0,a(H),[0,a(B),0]]]],Rp=[0,a(I),97,11,97,26,[0,a(J),[0,a(H),[0,a(B),0]]]],Q$=[0,a(I),97,11,97,26,[0,a(J),[0,a(H),[0,a(B),0]]]],Rq=[0,a(U),[0,a(fo),0]],RI=[0,a(U),[0,a("versement"),0]],RM=[0,a(I),ok,11,ok,32,[0,a(J),[0,a(H),[0,a(B),0]]]],RJ=[0,a(I),ok,11,ok,32,[0,a(J),[0,a(H),[0,a(B),0]]]],RN=[0,a(U),[0,a("nombre_enfants_l521_1"),0]],RR=[0,a(I),od,11,od,41,[0,a(J),[0,a(H),[0,a(B),0]]]],RO=[0,a(I),od,11,od,41,[0,a(J),[0,a(H),[0,a(B),0]]]],RS=[0,a(U),[0,a("nombre_enfants_alin\xc3\xa9a_2_l521_3"),0]],RT=[0,a(U),[0,a(wR),[0,a(q8),0]]],RU=[0,a(U),[0,a(wR),[0,a(q8),0]]],RX=[0,a(I),fQ,14,fQ,32,[0,a(J),[0,a(H),[0,a(B),0]]]],RY=[0,a(U),[0,a("bmaf.date_courante"),0]],RV=[0,a(I),fQ,14,fQ,32,[0,a(J),[0,a(H),[0,a(B),0]]]],RZ=[0,a(U),[0,a(A6),[0,a(f_),0]]],R0=[0,a(U),[0,a(A6),[0,a(f_),0]]],R3=[0,a(I),fL,14,fL,50,[0,a(J),[0,a(H),[0,a(B),0]]]],R4=[0,a(U),[0,a(xa),0]],R1=[0,a(I),fL,14,fL,50,[0,a(J),[0,a(H),[0,a(B),0]]]],R8=[0,a(I),ge,14,ge,56,[0,a(J),[0,a(H),[0,a(B),0]]]],R9=[0,a(U),[0,a(Bv),0]],R5=[0,a(I),ge,14,ge,56,[0,a(J),[0,a(H),[0,a(B),0]]]],Sa=[0,a(I),fE,14,fE,46,[0,a(J),[0,a(H),[0,a(B),0]]]],Sb=[0,a(U),[0,a(y2),0]],R_=[0,a(I),fE,14,fE,46,[0,a(J),[0,a(H),[0,a(B),0]]]],Sc=[0,a(U),[0,a(oN),[0,a(co),0]]],Sd=[0,a(U),[0,a(oN),[0,a(co),0]]],Sg=[0,a(a0),33,14,33,40,[0,a(eO),[0,a(a1),0]]],Sh=[0,a(U),[0,a("enfant_le_plus_\xc3\xa2g\xc3\xa9.enfants"),0]],Se=[0,a(a0),33,14,33,40,[0,a(eO),[0,a(a1),0]]],Si=[0,a(U),[0,a(Dk),[0,a(ri),0]]],Sj=[0,a(U),[0,a(Dk),[0,a(ri),0]]],Sp=[0,a(U),[0,a(eP),0]],Sw=[0,a(I),95,11,95,61,[0,a(J),[0,a(H),[0,a(B),0]]]],Sq=[0,a(I),95,11,95,61,[0,a(J),[0,a(H),[0,a(B),0]]]],Sx=[0,a(U),[0,a("enfants_\xc3\xa0_charge_droit_ouvert_prestation_familiale"),0]],SB=[0,a(U),[0,a(kM),0]],SX=[0,a(I),dk,11,dk,28,[0,a(J),[0,a(H),[0,a(B),0]]]],SC=[0,a(I),dk,11,dk,28,[0,a(J),[0,a(H),[0,a(B),0]]]],SY=[0,a(U),[0,a("plafond_II_d521_3"),0]],Ti=[0,a(I),dq,11,dq,27,[0,a(J),[0,a(H),[0,a(B),0]]]],SZ=[0,a(I),dq,11,dq,27,[0,a(J),[0,a(H),[0,a(B),0]]]],Tj=[0,a(U),[0,a("plafond_I_d521_3"),0]],Tr=[0,a(I),dW,11,dW,34,[0,a(J),[0,a(H),[0,a(B),0]]]],Tk=[0,a(I),dW,11,dW,34,[0,a(J),[0,a(H),[0,a(B),0]]]],Ts=[0,a(U),[0,a("droit_ouvert_compl\xc3\xa9ment"),0]],TF=[0,a(U),[0,a(kg),0]],TM=[0,a(I),fX,11,fX,64,[0,a(J),[0,a(H),[0,a(B),0]]]],TG=[0,a(I),fX,11,fX,64,[0,a(J),[0,a(H),[0,a(B),0]]]],TN=[0,a(U),[0,a("montant_initial_base_quatri\xc3\xa8me_enfant_et_plus_mayotte"),0]],UQ=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],TO=[0,a(I),bp,11,bp,56,[0,a(J),[0,a(H),[0,a(B),0]]]],UR=[0,a(U),[0,a("montant_initial_base_troisi\xc3\xa8me_enfant_mayotte"),0]],UU=[0,a(I),ic,11,ic,31,[0,a(J),[0,a(H),[0,a(B),0]]]],US=[0,a(I),ic,11,ic,31,[0,a(J),[0,a(H),[0,a(B),0]]]],UV=[0,a(U),[0,a("nombre_total_enfants"),0]],U6=[0,a(I),nZ,11,nZ,31,[0,a(J),[0,a(H),[0,a(B),0]]]],UW=[0,a(I),nZ,11,nZ,31,[0,a(J),[0,a(H),[0,a(B),0]]]],U7=[0,a(U),[0,a("nombre_moyen_enfants"),0]],Wm=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],U8=[0,a(I),be,11,be,46,[0,a(J),[0,a(H),[0,a(B),0]]]],Wn=[0,a(U),[0,a("montant_initial_base_premier_enfant"),0]],WB=[0,a(I),cJ,11,cJ,28,[0,a(J),[0,a(H),[0,a(B),0]]]],Wo=[0,a(I),cJ,11,cJ,28,[0,a(J),[0,a(H),[0,a(B),0]]]],WC=[0,a(U),[0,a("droit_ouvert_base"),0]],WW=[0,a(U),[0,a(bH),0]],Xc=[0,a(U),[0,a(kT),0]],Xn=[0,a(I),es,11,es,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Xd=[0,a(I),es,11,es,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Xo=[0,a(U),[0,a("montant_vers\xc3\xa9_forfaitaire_par_enfant"),0]],XI=[0,a(I),c3,11,c3,56,[0,a(J),[0,a(H),[0,a(B),0]]]],Xp=[0,a(I),c3,11,c3,56,[0,a(J),[0,a(H),[0,a(B),0]]]],XJ=[0,a(U),[0,a("montant_initial_base_troisi\xc3\xa8me_enfant_et_plus"),0]],Y4=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],XK=[0,a(I),a_,11,a_,47,[0,a(J),[0,a(H),[0,a(B),0]]]],Y5=[0,a(U),[0,a("montant_initial_base_deuxi\xc3\xa8me_enfant"),0]],Y_=[0,a(I),mI,11,mI,38,[0,a(J),[0,a(H),[0,a(B),0]]]],Y6=[0,a(I),mI,11,mI,38,[0,a(J),[0,a(H),[0,a(B),0]]]],Y$=[0,a(U),[0,a("rapport_enfants_total_moyen"),0]],ZE=[0,a(U),[0,a(ka),0]],ZL=[0,a(I),gR,11,gR,36,[0,a(J),[0,a(H),[0,a(B),0]]]],ZF=[0,a(I),gR,11,gR,36,[0,a(J),[0,a(H),[0,a(B),0]]]],ZM=[0,a(U),[0,a("montant_vers\xc3\xa9_forfaitaire"),0]],ZW=[0,a(I),dT,11,dT,31,[0,a(J),[0,a(H),[0,a(B),0]]]],ZN=[0,a(I),dT,11,dT,31,[0,a(J),[0,a(H),[0,a(B),0]]]],ZX=[0,a(U),[0,a("montant_initial_base"),0]],_k=[0,a(U),[0,a(j4),0]],_B=[0,a(I),eR,11,eR,52,[0,a(J),[0,a(H),[0,a(B),0]]]],_l=[0,a(I),eR,11,eR,52,[0,a(J),[0,a(H),[0,a(B),0]]]],_C=[0,a(U),[0,a("montant_vers\xc3\xa9_compl\xc3\xa9ment_pour_forfaitaire"),0]],_F=[0,a(I),kW,11,kW,43,[0,a(J),[0,a(H),[0,a(B),0]]]],_D=[0,a(I),kW,11,kW,43,[0,a(J),[0,a(H),[0,a(B),0]]]],_G=[0,a(U),[0,a("montant_avec_garde_altern\xc3\xa9e_base"),0]],_V=[0,a(U),[0,a(j$),0]],_Z=[0,a(I),kV,11,kV,29,[0,a(J),[0,a(H),[0,a(B),0]]]],_W=[0,a(I),kV,11,kV,29,[0,a(J),[0,a(H),[0,a(B),0]]]],_0=[0,a(U),[0,a("montant_vers\xc3\xa9_base"),0]],_9=[0,a(I),iu,11,iu,35,[0,a(J),[0,a(H),[0,a(B),0]]]],_1=[0,a(I),iu,11,iu,35,[0,a(J),[0,a(H),[0,a(B),0]]]],__=[0,a(U),[0,a("montant_vers\xc3\xa9_majoration"),0]],$b=[0,a(I),m_,11,m_,58,[0,a(J),[0,a(H),[0,a(B),0]]]],_$=[0,a(I),m_,11,m_,58,[0,a(J),[0,a(H),[0,a(B),0]]]],$c=[0,a(U),[0,a("montant_base_compl\xc3\xa9ment_pour_base_et_majoration"),0]],$k=[0,a(I),mz,11,mz,59,[0,a(J),[0,a(H),[0,a(B),0]]]],$d=[0,a(I),mz,11,mz,59,[0,a(J),[0,a(H),[0,a(B),0]]]],$l=[0,a(U),[0,a("montant_vers\xc3\xa9_compl\xc3\xa9ment_pour_base_et_majoration"),0]],$p=[0,a(I),cd,12,cd,25,[0,a(J),[0,a(H),[0,a(B),0]]]],$m=[0,a(I),cd,12,cd,25,[0,a(J),[0,a(H),[0,a(B),0]]]],$q=[0,a(U),[0,a("montant_vers\xc3\xa9"),0]],$r=[0,a(bP),xc,5,rd,6,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],$s=[0,a(bP),xc,5,rd,6,[0,a(dZ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Q6=[0,a("examples/allocations_familiales/autres_codes.catala_fr"),24,5,24,63,[0,a("Article L821-3"),[0,a(z7),[0,a(E0),[0,a(yt),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]]]],Q7=[0,a(I),57,12,57,24,[0,a(bE),[0,a(H),[0,a(B),0]]]],Q2=[0,a(bP),60,5,62,62,[0,a(gC),[0,a(gz),[0,a(ed),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Q3=[0,a(I),57,12,57,24,[0,a(bE),[0,a(H),[0,a(B),0]]]],Q1=[0,a(bP),49,5,50,50,[0,a(gC),[0,a(gz),[0,a(ed),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],Q4=[0,a(I),57,12,57,24,[0,a(bE),[0,a(H),[0,a(B),0]]]],Q5=[0,a(I),57,12,57,24,[0,a(bE),[0,a(H),[0,a(B),0]]]],Q8=[0,a(I),57,12,57,24,[0,a(bE),[0,a(H),[0,a(B),0]]]],Q0=[0,a(I),57,12,57,24,[0,a(bE),[0,a(H),[0,a(B),0]]]],Q9=[0,a(I),57,12,57,24,[0,a(bE),[0,a(H),[0,a(B),0]]]],QZ=[0,a(I),57,12,57,24,[0,a(bE),[0,a(H),[0,a(B),0]]]],QV=[0,a(bP),68,5,71,56,[0,a(gC),[0,a(gz),[0,a(ed),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],QW=[0,a(I),58,12,58,31,[0,a(bE),[0,a(H),[0,a(B),0]]]],QU=[0,a(I),58,12,58,31,[0,a(bE),[0,a(H),[0,a(B),0]]]],QX=[0,a(I),58,12,58,31,[0,a(bE),[0,a(H),[0,a(B),0]]]],QT=[0,a(I),58,12,58,31,[0,a(bE),[0,a(H),[0,a(B),0]]]],QP=[0,a(dU),nW,18,nW,41,[0,a(xK),[0,a(eX),[0,a(gK),[0,a(d0),[0,a(c5),[0,a(af),0]]]]]]],QN=a(oR),QO=a(n0),QQ=[0,a(I),59,11,59,27,[0,a(bE),[0,a(H),[0,a(B),0]]]],QM=[0,a(dU),31,14,31,30,[0,a(lW),[0,a(nR),[0,a(ed),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],QK=a(oR),QL=a(n0),Qz=[5,0],QA=[4,0],QB=[3,0],QC=[2,0],QD=[1,0],QE=[0,0],QF=[0,a(bP),yV,5,rJ,30,[0,a(CP),[0,a(yD),[0,a(ke),[0,a(d0),[0,a(aa),[0,a(af),0]]]]]]],QG=[0,a(I),61,12,61,35,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qy=[0,a(I),61,12,61,35,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qs=[0,a(I),68,14,68,28,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qo=[0,a(I),69,14,69,32,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qk=[0,a(dU),21,14,21,26,[0,a(lW),[0,a(nR),[0,a(ed),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],Ql=[0,a(I),60,12,60,24,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qj=[0,a(I),60,12,60,24,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qm=[0,a(co),[0,a(za),0]],Qp=[0,a(I),69,14,69,32,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qq=[0,a(co),[0,a(Fa),0]],Qn=[0,a(I),69,14,69,32,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qt=[0,a(I),68,14,68,28,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qu=[0,a(co),[0,a(DH),0]],Qr=[0,a(I),68,14,68,28,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qv=[0,a(co),[0,a(gd),[0,a(hl),0]]],Qw=[0,a(co),[0,a(gd),[0,a(hl),0]]],QH=[0,a(I),61,12,61,35,[0,a(bE),[0,a(H),[0,a(B),0]]]],Qx=[0,a(I),61,12,61,35,[0,a(bE),[0,a(H),[0,a(B),0]]]],QI=[0,a(co),[0,a(vg),0]],QR=[0,a(I),59,11,59,27,[0,a(bE),[0,a(H),[0,a(B),0]]]],QJ=[0,a(I),59,11,59,27,[0,a(bE),[0,a(H),[0,a(B),0]]]],QS=[0,a(co),[0,a(Aj),0]],QY=[0,a(co),[0,a(iU),0]],Q_=[0,a(co),[0,a(dg),0]],Qf=[0,a(eC),28,5,29,33,[0,a(Cv),[0,a(cf),0]]],Qe=a(xS),Qg=[0,a(eC),6,12,6,19,[0,a(cf),0]],Qc=[0,a(eC),48,5,49,33,[0,a(AK),[0,a(cf),0]]],Qb=a(xo),Qd=[0,a(eC),6,12,6,19,[0,a(cf),0]],P$=[0,a(eC),64,5,65,33,[0,a(Ch),[0,a(cf),0]]],P_=a(B4),Qa=[0,a(eC),6,12,6,19,[0,a(cf),0]],P8=[0,a(eC),82,5,83,33,[0,a(wT),[0,a(cf),0]]],P7=a(BY),P9=[0,a(eC),6,12,6,19,[0,a(cf),0]],Qh=[0,a(eC),6,12,6,19,[0,a(cf),0]],P6=[0,a(eC),6,12,6,19,[0,a(cf),0]],Qi=[0,a(f_),[0,a(bQ),0]],PU=[7,0],PV=[5,0],PW=[4,0],PX=[3,0],PY=[2,0],PZ=[1,0],P0=[0,0],P1=[6,0],P2=[0,a(bu),29,5,38,6,[0,a(b6),[0,a(lV),[0,a(aC),0]]]],PT=a(wM),P3=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],PQ=[8,0],PR=[0,a(bu),47,5,49,6,[0,a(b6),[0,a(lV),[0,a(aC),0]]]],PP=a(xO),PS=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],PF=[7,0],PG=[5,0],PH=[4,0],PI=[3,0],PJ=[2,0],PK=[1,0],PL=[0,0],PM=[6,0],PN=[0,a(bu),68,5,77,6,[0,a(b6),[0,a(nO),[0,a(aC),0]]]],PE=a(AS),PO=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],PB=[8,0],PC=[0,a(bu),86,5,88,6,[0,a(b6),[0,a(nO),[0,a(aC),0]]]],PA=a(u9),PD=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],Pq=[7,0],Pr=[5,0],Ps=[4,0],Pt=[3,0],Pu=[2,0],Pv=[1,0],Pw=[0,0],Px=[6,0],Py=[0,a(bu),c3,5,bp,6,[0,a(b6),[0,a(lY),[0,a(aC),0]]]],Pp=a(BA),Pz=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],Pm=[8,0],Pn=[0,a(bu),cs,5,cQ,6,[0,a(b6),[0,a(lY),[0,a(aC),0]]]],Pl=a(ED),Po=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],Pb=[7,0],Pc=[5,0],Pd=[4,0],Pe=[3,0],Pf=[2,0],Pg=[1,0],Ph=[0,0],Pi=[6,0],Pj=[0,a(bu),eY,5,fL,6,[0,a(b6),[0,a(no),[0,a(aC),0]]]],Pa=a(BQ),Pk=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],O9=[8,0],O_=[0,a(bu),qS,5,nU,6,[0,a(b6),[0,a(no),[0,a(aC),0]]]],O8=a(wZ),O$=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],OY=[7,0],OZ=[5,0],O0=[4,0],O1=[3,0],O2=[2,0],O3=[1,0],O4=[0,0],O5=[6,0],O6=[0,a(bu),hZ,5,iM,6,[0,a(fW),[0,a(mN),[0,a(aC),0]]]],OX=a(zR),O7=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],OU=[8,0],OV=[0,a(bu),w4,5,yF,6,[0,a(fW),[0,a(mN),[0,a(aC),0]]]],OT=a(EC),OW=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],OJ=[7,0],OK=[5,0],OL=[4,0],OM=[3,0],ON=[2,0],OO=[1,0],OP=[0,0],OQ=[6,0],OR=[0,a(bu),vG,5,E3,6,[0,a(fW),[0,a(op),[0,a(aC),0]]]],OI=a(Eo),OS=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],OF=[8,0],OG=[0,a(bu),E_,5,vC,6,[0,a(fW),[0,a(op),[0,a(aC),0]]]],OE=a(Fl),OH=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],Ou=[7,0],Ov=[5,0],Ow=[4,0],Ox=[3,0],Oy=[2,0],Oz=[1,0],OA=[0,0],OB=[6,0],OC=[0,a(bu),rn,5,nT,6,[0,a(b6),[0,a(m$),[0,a(aC),0]]]],Ot=a(v6),OD=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],Oq=[8,0],Or=[0,a(bu),Be,5,nl,6,[0,a(b6),[0,a(m$),[0,a(aC),0]]]],Op=a(zQ),Os=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],P4=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],Oo=[0,a(bu),11,12,11,24,[0,a(B),[0,a(aC),0]]],P5=[0,a(hl),[0,a(z9),0]],Ol=[0,a(a0),12,14,12,25,[0,a(eO),[0,a(a1),0]]],Oh=[2,0],Oi=a(p),Oj=[1,0],Ok=a("-1"),Om=[0,a(I),80,12,80,23,[0,a(J),[0,a(H),[0,a(B),0]]]],Og=[0,a(I),80,12,80,23,[0,a(J),[0,a(H),[0,a(B),0]]]],On=[0,a(ri),[0,a("le_plus_\xc3\xa2g\xc3\xa9"),0]],Od=[0,a(dU),78,14,78,41,[0,a(nJ),[0,a(aN),[0,a(aP),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],Oe=[0,a(I),76,12,76,39,[0,a(J),[0,a(H),[0,a(B),0]]]],Oc=[0,a(I),76,12,76,39,[0,a(J),[0,a(H),[0,a(B),0]]]],Of=[0,a(q8),[0,a(eP),0]],N6=a(qG),N7=a(qV),N8=a(EY),N9=a(q0),N_=a(q1),N$=a(rC),Oa=a(rt),Ob=[0,a("Enfant"),0],NW=a(my),NY=a(oy),NZ=a(mb),N0=a(Ds),N1=a(yW),N2=a(o8),N3=a(C5),N4=a(nr),N5=a(oK),NX=[0,a(BZ),0],NN=a(om),NP=a(U),NQ=a(qU),NR=a(nY),NS=a(DS),NT=a(i0),NU=a(BW),NV=a(y1),NO=[0,a(FR),0],NI=a("Compl\xc3\xa8te"),NK=a("Partag\xc3\xa9e"),NL=a("Z\xc3\xa9ro"),NJ=[0,a("PriseEnCompte"),0],NE=a(ku),NG=a(kh),NH=a(Co),NF=[0,a(CW),0],Ny=a(A_),NA=a(D4),NB=a(j7),NC=a(Ft),ND=a(yN),Nz=[0,a("PriseEnCharge"),0],abc=a($),aaO=a(my),aaP=a(oy),aaQ=a(wt),aaR=a(mb),aaS=a(oK),aaT=a(Fn),aaU=a(xi),aaV=a(o8),aaW=a(nr),aaY=[7,0],aaZ=[5,0],aa0=[4,0],aa1=[6,0],aa2=[8,0],aa3=[2,0],aa4=[3,0],aa5=[1,0],aa6=[0,0],aaX=[0,[11,a(bg),[2,0,[11,a(BU),0]]],a(wN)],aax=a(vY),aay=a(ye),aaz=a(nY),aaA=a(Ez),aaB=a(i0),aaC=a(U),aaD=a(qv),aaE=a(om),aaG=[0,0],aaH=[2,0],aaI=[1,0],aaJ=[5,0],aaK=[6,0],aaL=[3,0],aaM=[7,0],aaN=[4,0],aaF=[0,[11,a(bg),[2,0,[11,a(D5),0]]],a(FT)],aaq=a(r1),aar=a(ku),aas=a(kh),aau=[1,0],aav=[0,0],aaw=[2,0],aat=[0,[11,a(bg),[2,0,[11,a(x8),0]]],a(wx)],aaf=a(j7),aag=a(q_),aah=a(qO),aai=a(rq),aaj=a(qL),aal=[4,0],aam=[3,0],aan=[0,0],aao=[1,0],aap=[2,0],aak=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'PriseEnCharge.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'PriseEnCharge.t'")],aad=[0,a(Cg),a(o2),a(gd),a(DC),a(FO),a(v3),a(xl)],aae=[0,a(gd),a(v3),a(FO),a(xl),a(o2),a(Cg),a(DC)],abk=a("AllocationsFamilialesLib"),bt2=[0,a(fc),zU,14,zU,25,[0,a("Conseil d'\xc3\x89tat, 5\xc3\xa8me - 4\xc3\xa8me chambres r\xc3\xa9unies, 21/07/2017, 398563"),0]],btV=a(p),btW=a(p),bt1=a(b5),btX=[0,a(a6),[0,a(aw),[0,a(ac),0]]],btY=[0,a(a6),[0,a(aw),0]],btZ=[0,a(a6),[0,a(aw),[0,a(ae),0]]],bt0=[0,a(a6),[0,a(aw),0]],btR=[0,a(d),xz,14,xz,63,[0,a(bf),[0,a(e),0]]],btN=[0,a(d),vX,14,vX,25,[0,a(bf),[0,a(e),0]]],btH=[0,a(d),iI,5,iI,70,[0,a(bf),[0,a(e),0]]],btD=[0,a(d),hg,14,hg,58,[0,a(bf),[0,a(e),0]]],btz=[0,a(d),h3,14,h3,54,[0,a(bf),[0,a(e),0]]],btv=[0,a(d),fb,14,fb,51,[0,a(bf),[0,a(e),0]]],btp=[0,a(d),hf,14,hf,59,[0,a(bf),[0,a(e),0]]],btl=[0,a(d),ip,14,ip,38,[0,a(bf),[0,a(e),0]]],bth=[0,a(d),ie,14,ie,34,[0,a(bf),[0,a(e),0]]],btd=[0,a(d),im,14,im,31,[0,a(bf),[0,a(e),0]]],bs$=[0,a(d),AG,14,AG,48,[0,a(bf),[0,a(e),0]]],bta=[0,a(d),ks,11,ks,45,[0,a(bf),[0,a(e),0]]],bs_=[0,a(d),ks,11,ks,45,[0,a(bf),[0,a(e),0]]],btb=[0,a(cO),[0,a("m\xc3\xa9nage_sans_enfants_garde_altern\xc3\xa9e"),0]],bte=[0,a(d),im,14,im,31,[0,a(bf),[0,a(e),0]]],btf=[0,a(cO),[0,a("calculette.m\xc3\xa9nage"),0]],btc=[0,a(d),im,14,im,31,[0,a(bf),[0,a(e),0]]],bti=[0,a(d),ie,14,ie,34,[0,a(bf),[0,a(e),0]]],btj=[0,a(cO),[0,a("calculette.demandeur"),0]],btg=[0,a(d),ie,14,ie,34,[0,a(bf),[0,a(e),0]]],btm=[0,a(d),ip,14,ip,38,[0,a(bf),[0,a(e),0]]],btn=[0,a(cO),[0,a("calculette.date_courante"),0]],btk=[0,a(d),ip,14,ip,38,[0,a(bf),[0,a(e),0]]],btq=[0,a(d),hf,14,hf,59,[0,a(bf),[0,a(e),0]]],btr=[0,a(cO),[0,a("calculette.ressources_m\xc3\xa9nage_prises_en_compte"),0]],bto=[0,a(d),hf,14,hf,59,[0,a(bf),[0,a(e),0]]],bts=[0,a(cO),[0,a(D3),[0,a(a6),0]]],btt=[0,a(cO),[0,a(D3),[0,a(a6),0]]],btw=[0,a(d),fb,14,fb,51,[0,a(bf),[0,a(e),0]]],btx=[0,a(cO),[0,a("calculette_sans_garde_altern\xc3\xa9e.m\xc3\xa9nage"),0]],btu=[0,a(d),fb,14,fb,51,[0,a(bf),[0,a(e),0]]],btA=[0,a(d),h3,14,h3,54,[0,a(bf),[0,a(e),0]]],btB=[0,a(cO),[0,a("calculette_sans_garde_altern\xc3\xa9e.demandeur"),0]],bty=[0,a(d),h3,14,h3,54,[0,a(bf),[0,a(e),0]]],btE=[0,a(d),hg,14,hg,58,[0,a(bf),[0,a(e),0]]],btF=[0,a(cO),[0,a("calculette_sans_garde_altern\xc3\xa9e.date_courante"),0]],btC=[0,a(d),hg,14,hg,58,[0,a(bf),[0,a(e),0]]],btI=[0,a(d),iI,5,iI,70,[0,a(bf),[0,a(e),0]]],btJ=[0,a(cO),[0,a("calculette_sans_garde_altern\xc3\xa9e.ressources_m\xc3\xa9nage_prises_en_compte"),0]],btG=[0,a(d),iI,5,iI,70,[0,a(bf),[0,a(e),0]]],btK=[0,a(cO),[0,a(wS),[0,a(a6),0]]],btL=[0,a(cO),[0,a(wS),[0,a(a6),0]]],btO=[0,a(d),o1,12,o1,23,[0,a(bf),[0,a(e),0]]],btM=[0,a(d),o1,12,o1,23,[0,a(bf),[0,a(e),0]]],btP=[0,a(cO),[0,a(n$),0]],btS=[0,a(d),mq,11,mq,60,[0,a(bf),[0,a(e),0]]],btQ=[0,a(d),mq,11,mq,60,[0,a(bf),[0,a(e),0]]],btT=[0,a(cO),[0,a(kF),0]],bt3=[0,a(d),l$,12,l$,23,[0,a(bf),[0,a(e),0]]],btU=[0,a(d),l$,12,l$,23,[0,a(bf),[0,a(e),0]]],bt4=[0,a(cO),[0,a("aide_finale"),0]],bs6=[0,a(aG),gc,14,gc,33,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bsX=a(p),bsY=[0,a(cR),[0,a(aw),[0,a(ac),0]]],bsZ=[0,a(cR),[0,a(aw),0]],bs0=[0,a(cR),[0,a(aw),[0,a(ae),0]]],bs1=[0,a(cR),[0,a(aw),0]],bs2=[0,a(cS),[0,a(aw),[0,a(ac),0]]],bs3=[0,a(cS),[0,a(aw),0]],bs4=[0,a(cS),[0,a(aw),[0,a(ae),0]]],bs5=[0,a(cS),[0,a(aw),0]],bsT=[0,a(aG),f6,14,f6,36,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bsL=[0,a(cS),[0,a(aw),[0,a(ac),0]]],bsM=[0,a(cS),[0,a(aw),0]],bsN=[0,a(cS),[0,a(aw),[0,a(ae),0]]],bsO=[0,a(cS),[0,a(aw),0]],bsP=[0,a(cR),[0,a(aw),[0,a(ac),0]]],bsQ=[0,a(cR),[0,a(aw),0]],bsR=[0,a(cR),[0,a(aw),[0,a(ae),0]]],bsS=[0,a(cR),[0,a(aw),0]],bsU=[0,a(d),hX,12,hX,34,[0,a(ax),[0,a(e),0]]],bsK=[0,a(d),hX,12,hX,34,[0,a(ax),[0,a(e),0]]],bsH=[0,a(aG),hX,14,hX,25,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bsD=[0,a(d),v5,14,v5,63,[0,a(ax),[0,a(e),0]]],bsx=[0,a(d),hu,14,hu,62,[0,a(ax),[0,a(e),0]]],bst=[0,a(d),i7,14,i7,53,[0,a(ax),[0,a(e),0]]],bsp=[0,a(d),hK,5,hK,65,[0,a(ax),[0,a(e),0]]],bsl=[0,a(d),hN,14,hN,68,[0,a(ax),[0,a(e),0]]],bsh=[0,a(d),gc,14,gc,66,[0,a(ax),[0,a(e),0]]],bsd=[0,a(aG),dB,14,dB,58,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bsc=[0,0],br_=[0,a(d),ii,14,ii,64,[0,a(ax),[0,a(e),0]]],br4=[0,a(aG),dJ,14,dJ,50,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],br1=[2,0],br2=[1,0],br3=[2,0],brX=[0,a(d),jm,14,jm,54,[0,a(ax),[0,a(e),0]]],brT=[0,a(d),f6,14,f6,45,[0,a(ax),[0,a(e),0]]],brP=[0,a(d),h2,14,h2,66,[0,a(ax),[0,a(e),0]]],brL=[0,a(d),hI,14,hI,60,[0,a(ax),[0,a(e),0]]],brH=[0,a(d),i3,14,i3,58,[0,a(ax),[0,a(e),0]]],brD=[0,a(d),iX,14,iX,56,[0,a(ax),[0,a(e),0]]],brx=[0,a(d),i2,14,i2,67,[0,a(ax),[0,a(e),0]]],brt=[0,a(d),dB,14,dB,63,[0,a(ax),[0,a(e),0]]],brp=[0,a(d),iR,14,iR,60,[0,a(ax),[0,a(e),0]]],brj=[0,a(aG),h0,5,h0,74,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],brf=[0,a(d),dJ,14,dJ,55,[0,a(ax),[0,a(e),0]]],brb=[0,a(d),iA,14,iA,52,[0,a(ax),[0,a(e),0]]],bq9=[0,a(d),gb,14,gb,59,[0,a(ax),[0,a(e),0]]],bq_=[0,a(d),gb,14,gb,59,[0,a(ax),[0,a(e),0]]],bq$=[0,a(a6),[0,a("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.date_courante"),0]],bq8=[0,a(d),gb,14,gb,59,[0,a(ax),[0,a(e),0]]],brc=[0,a(d),iA,14,iA,52,[0,a(ax),[0,a(e),0]]],brd=[0,a(a6),[0,a("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.m\xc3\xa9nage"),0]],bra=[0,a(d),iA,14,iA,52,[0,a(ax),[0,a(e),0]]],brg=[0,a(d),dJ,14,dJ,55,[0,a(ax),[0,a(e),0]]],brh=[0,a(a6),[0,a("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.demandeur"),0]],bre=[0,a(d),dJ,14,dJ,55,[0,a(ax),[0,a(e),0]]],brk=[0,a(aG),h0,5,h0,74,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],brl=[0,a(a6),[0,a("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.b\xc3\xa9n\xc3\xa9ficie_aide_personnalis\xc3\xa9e_logement"),0]],bri=[0,a(aG),h0,5,h0,74,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],brm=[0,a(a6),[0,a(uZ),[0,a(cb),0]]],brn=[0,a(a6),[0,a(uZ),[0,a(cb),0]]],brq=[0,a(d),iR,14,iR,60,[0,a(ax),[0,a(e),0]]],brr=[0,a(a6),[0,a("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.m\xc3\xa9nage"),0]],bro=[0,a(d),iR,14,iR,60,[0,a(ax),[0,a(e),0]]],bru=[0,a(d),dB,14,dB,63,[0,a(ax),[0,a(e),0]]],brv=[0,a(a6),[0,a("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.demandeur"),0]],brs=[0,a(d),dB,14,dB,63,[0,a(ax),[0,a(e),0]]],bry=[0,a(d),i2,14,i2,67,[0,a(ax),[0,a(e),0]]],brz=[0,a(a6),[0,a("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.date_courante"),0]],brw=[0,a(d),i2,14,i2,67,[0,a(ax),[0,a(e),0]]],brA=[0,a(a6),[0,a(Dc),[0,a(b7),0]]],brB=[0,a(a6),[0,a(Dc),[0,a(b7),0]]],brE=[0,a(d),iX,14,iX,56,[0,a(ax),[0,a(e),0]]],brF=[0,a(a6),[0,a("calcul_allocation_logement.mode_occupation"),0]],brC=[0,a(d),iX,14,iX,56,[0,a(ax),[0,a(e),0]]],brI=[0,a(d),i3,14,i3,58,[0,a(ax),[0,a(e),0]]],brJ=[0,a(a6),[0,a("calcul_allocation_logement.ressources_m\xc3\xa9nage_sans_arrondi"),0]],brG=[0,a(d),i3,14,i3,58,[0,a(ax),[0,a(e),0]]],brM=[0,a(d),hI,14,hI,60,[0,a(ax),[0,a(e),0]]],brN=[0,a(a6),[0,a("calcul_allocation_logement.situation_familiale"),0]],brK=[0,a(d),hI,14,hI,60,[0,a(ax),[0,a(e),0]]],brQ=[0,a(d),h2,14,h2,66,[0,a(ax),[0,a(e),0]]],brR=[0,a(a6),[0,a("calcul_allocation_logement.nombre_personnes_\xc3\xa0_charge"),0]],brO=[0,a(d),h2,14,h2,66,[0,a(ax),[0,a(e),0]]],brU=[0,a(d),f6,14,f6,45,[0,a(ax),[0,a(e),0]]],brV=[0,a(a6),[0,a("calcul_allocation_logement.zone"),0]],brS=[0,a(d),f6,14,f6,45,[0,a(ax),[0,a(e),0]]],brY=[0,a(d),jm,14,jm,54,[0,a(ax),[0,a(e),0]]],brZ=[0,a(a6),[0,a("calcul_allocation_logement.date_courante"),0]],brW=[0,a(d),jm,14,jm,54,[0,a(ax),[0,a(e),0]]],br5=[0,a(aG),dJ,14,dJ,50,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],br6=[0,a(a6),[0,a("calcul_allocation_logement.type_aide"),0]],br0=[0,a(aG),dJ,14,dJ,50,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],br7=[0,a(a6),[0,a(Ep),[0,a(cR),0]]],br8=[0,a(a6),[0,a(Ep),[0,a(cR),0]]],br$=[0,a(d),ii,14,ii,64,[0,a(ax),[0,a(e),0]]],bsa=[0,a(a6),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.mode_occupation"),0]],br9=[0,a(d),ii,14,ii,64,[0,a(ax),[0,a(e),0]]],bse=[0,a(aG),dB,14,dB,58,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bsf=[0,a(a6),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.type_aide"),0]],bsb=[0,a(aG),dB,14,dB,58,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bsi=[0,a(d),gc,14,gc,66,[0,a(ax),[0,a(e),0]]],bsj=[0,a(a6),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.ressources_m\xc3\xa9nage_sans_arrondi"),0]],bsg=[0,a(d),gc,14,gc,66,[0,a(ax),[0,a(e),0]]],bsm=[0,a(d),hN,14,hN,68,[0,a(ax),[0,a(e),0]]],bsn=[0,a(a6),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.situation_familiale"),0]],bsk=[0,a(d),hN,14,hN,68,[0,a(ax),[0,a(e),0]]],bsq=[0,a(d),hK,5,hK,65,[0,a(ax),[0,a(e),0]]],bsr=[0,a(a6),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.nombre_personnes_\xc3\xa0_charge"),0]],bso=[0,a(d),hK,5,hK,65,[0,a(ax),[0,a(e),0]]],bsu=[0,a(d),i7,14,i7,53,[0,a(ax),[0,a(e),0]]],bsv=[0,a(a6),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.zone"),0]],bss=[0,a(d),i7,14,i7,53,[0,a(ax),[0,a(e),0]]],bsy=[0,a(d),hu,14,hu,62,[0,a(ax),[0,a(e),0]]],bsz=[0,a(a6),[0,a("calcul_aide_personnalis\xc3\xa9e_logement.date_courante"),0]],bsw=[0,a(d),hu,14,hu,62,[0,a(ax),[0,a(e),0]]],bsA=[0,a(a6),[0,a(zv),[0,a(cS),0]]],bsB=[0,a(a6),[0,a(zv),[0,a(cS),0]]],bsE=[0,a(d),l8,12,l8,61,[0,a(ax),[0,a(e),0]]],bsC=[0,a(d),l8,12,l8,61,[0,a(ax),[0,a(e),0]]],bsF=[0,a(a6),[0,a(kF),0]],bsI=[0,a(d),kr,12,kr,23,[0,a(ax),[0,a(e),0]]],bsG=[0,a(d),kr,12,kr,23,[0,a(ax),[0,a(e),0]]],bsJ=[0,a(a6),[0,a(n$),0]],bsV=[0,a(a6),[0,a(aw),0]],bs7=[0,a(d),o4,12,o4,31,[0,a(ax),[0,a(e),0]]],bsW=[0,a(d),o4,12,o4,31,[0,a(ax),[0,a(e),0]]],bs8=[0,a(a6),[0,a(cX),0]],bq5=[0,a(E),Bt,14,Bt,33,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bq1=[0,a(E),vW,14,vW,36,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bq2=[0,a(d),oj,12,oj,34,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bq0=[0,a(d),oj,12,oj,34,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bqX=[0,a(E),Bh,14,Bh,36,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bqQ=[0,a(V),[0,a(aw),[0,a(ac),0]]],bqR=[0,a(V),[0,a(aw),0]],bqS=[0,a(V),[0,a(aw),[0,a(ae),0]]],bqT=[0,a(V),[0,a(aw),0]],bqF=[0,a(bh),[0,a(aw),[0,a(ac),0]]],bqG=[0,a(bh),[0,a(aw),0]],bqH=[0,a(bh),[0,a(aw),[0,a(ae),0]]],bqI=[0,a(bh),[0,a(aw),0]],bqv=[0,a(V),[0,a(aw),[0,a(ac),0]]],bqw=[0,a(V),[0,a(aw),0]],bqx=[0,a(V),[0,a(aw),[0,a(ae),0]]],bqy=[0,a(V),[0,a(aw),0]],bqm=[0,a(ao),[0,a(aw),[0,a(ac),0]]],bqn=[0,a(ao),[0,a(aw),0]],bqo=[0,a(ao),[0,a(aw),[0,a(ae),0]]],bqp=[0,a(ao),[0,a(aw),0]],bqb=[0,a(bh),[0,a(aw),[0,a(ac),0]]],bqc=[0,a(bh),[0,a(aw),0]],bqd=[0,a(bh),[0,a(aw),[0,a(ae),0]]],bqe=[0,a(bh),[0,a(aw),0]],bqi=a(p),bqj=a(p),bp_=[0,a(E),1539,16,1542,39,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bp$=[0,a(bh),[0,a(bo),[0,a(ac),0]]],bqa=[0,a(bh),[0,a(bo),0]],bqf=[0,a(E),1524,9,1545,10,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bqg=[0,a(bh),[0,a(bo),[0,a(ae),0]]],bqh=[0,a(bh),[0,a(bo),0]],bqk=[0,a(ao),[0,a(bo),[0,a(ac),0]]],bql=[0,a(ao),[0,a(bo),0]],bqq=[0,a(E),1588,9,1599,10,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bqr=[0,a(ao),[0,a(bo),[0,a(ae),0]]],bqs=[0,a(ao),[0,a(bo),0]],bqt=[0,a(V),[0,a(bo),[0,a(ac),0]]],bqu=[0,a(V),[0,a(bo),0]],bqz=[0,a(E),1609,10,1624,11,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bqA=[0,a(V),[0,a(bo),[0,a(ae),0]]],bqB=[0,a(V),[0,a(bo),0]],bqM=a(p),bqN=a(p),bqC=[0,a(E),1571,16,1574,39,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bqD=[0,a(bh),[0,a(bo),[0,a(ac),0]]],bqE=[0,a(bh),[0,a(bo),0]],bqJ=[0,a(E),1556,9,1577,10,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bqK=[0,a(bh),[0,a(bo),[0,a(ae),0]]],bqL=[0,a(bh),[0,a(bo),0]],bqO=[0,a(V),[0,a(bo),[0,a(ac),0]]],bqP=[0,a(V),[0,a(bo),0]],bqU=[0,a(E),1636,10,1651,11,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bqV=[0,a(V),[0,a(bo),[0,a(ae),0]]],bqW=[0,a(V),[0,a(bo),0]],bp6=[0,a(Q),88,14,88,44,[0,a(cG),[0,a(bX),[0,a(L),0]]]],bp0=[0,0],bp1=[1,0],bp2=[1,0],bp3=[1,0],bp4=[0,0],bp5=[1,0],bpW=[0,a(E),EL,14,EL,31,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bpT=a(c4),bpU=a(Ca),bpV=a(qX),bpP=[0,a(E),FC,14,FC,34,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bpQ=[0,a(d),mR,11,mR,31,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bpO=[0,a(d),mR,11,mR,31,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bpR=[0,a(cR),[0,a(xP),0]],bpX=[0,a(d),ne,10,ne,22,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bpS=[0,a(d),ne,10,ne,22,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bpY=[0,a(cR),[0,a(xh),0]],bp7=[0,a(d),mF,11,mF,41,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bpZ=[0,a(d),mF,11,mF,41,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bp8=[0,a(cR),[0,a(y$),0]],bqY=[0,a(d),mW,11,mW,33,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bp9=[0,a(d),mW,11,mW,33,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bqZ=[0,a(cR),[0,a(Fk),0]],bq3=[0,a(cR),[0,a(aw),0]],bq6=[0,a(d),kN,12,kN,31,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bq4=[0,a(d),kN,12,kN,31,[0,a(bO),[0,a(N),[0,a(A),[0,a(e),0]]]]],bq7=[0,a(cR),[0,a(cX),0]],bpJ=[0,a(aG),vt,5,vt,73,[0,a("Article L841-3"),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bpI=[2,0],bpK=[0,a(d),eM,10,eM,16,[0,a(aK),[0,a(i),[0,a(e),0]]]],bpG=[0,a(aG),fb,5,1140,28,[0,a("Article L841-4"),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bpF=[0,0],bpH=[0,a(d),eM,10,eM,16,[0,a(aK),[0,a(i),[0,a(e),0]]]],bpL=[0,a(d),eM,10,eM,16,[0,a(aK),[0,a(i),[0,a(e),0]]]],bpE=[0,a(aG),vx,14,vx,25,[0,a(dw),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bpA=[0,0],bpB=[0,0],bpC=[1,0],bpD=[2,0],bpq=a(p),bpr=[0,a(aG),1002,5,1006,29,[0,a(il),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bps=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],bpl=a(z),bpm=[0,a(aG),979,5,kN,13,[0,a(il),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bpn=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],bpg=[0,a(aU),[0,a(fk),[0,a(ac),0]]],bph=[0,a(aU),[0,a(fk),0]],bpi=[0,a(aU),[0,a(fk),[0,a(ae),0]]],bpj=[0,a(aU),[0,a(fk),0]],bpf=a(z),bpk=[0,a(aG),961,5,963,9,[0,a(il),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bpo=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],bpp=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],bpt=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],bo_=[2,0],bpd=[0,0],bo$=[0,a(cq),[0,a(dg),[0,a(ac),0]]],bpa=[0,a(cq),[0,a(dg),0]],bpb=[0,a(cq),[0,a(dg),[0,a(ae),0]]],bpc=[0,a(cq),[0,a(dg),0]],bo9=a(p),bpe=[0,a(aG),922,5,kB,29,[0,a(il),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bpu=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],bo2=[2,0],bo7=[0,0],bo3=[0,a(cq),[0,a(dg),[0,a(ac),0]]],bo4=[0,a(cq),[0,a(dg),0]],bo5=[0,a(cq),[0,a(dg),[0,a(ae),0]]],bo6=[0,a(cq),[0,a(dg),0]],bo1=a(z),bo8=[0,a(aG),890,5,911,8,[0,a(il),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bpv=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],boW=[4,0],boX=[3,0],boY=[1,0],boZ=[0,0],bo0=[0,a(aG),870,5,875,6,[0,a(il),[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bpw=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],boV=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],boR=[0,a(aG),xu,14,xu,25,[0,a(bj),[0,a(b8),[0,a(x),[0,a(aa),[0,a(w),0]]]]]],boP=[0,0],boQ=[2,0],boL=[0,a(d),hk,14,hk,56,[0,a(aK),[0,a(i),[0,a(e),0]]]],boH=[0,a(d),Cd,14,Cd,63,[0,a(aK),[0,a(i),[0,a(e),0]]]],boB=[0,a(E),ni,9,ni,55,[0,a(oi),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],boC=[0,a(E),ni,9,ni,55,[0,a(oi),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],boD=[0,a(cb),[0,a("\xc3\xa9ligibilit\xc3\xa9_commune.condition_logement_surface"),0]],boy=[0,a(E),nm,9,nm,68,[0,a(oi),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],boz=[0,a(E),nm,9,nm,68,[0,a(oi),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],boA=[0,a(cb),[0,a("\xc3\xa9ligibilit\xc3\xa9_commune.condition_logement_r\xc3\xa9sidence_principale"),0]],bov=[0,a(d),gy,14,gy,47,[0,a(aK),[0,a(i),[0,a(e),0]]]],bor=[0,a(d),i8,14,i8,43,[0,a(aK),[0,a(i),[0,a(e),0]]]],bon=[0,a(d),iZ,14,iZ,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],boe=[0,a(E),4364,5,4369,28,[0,a(oH),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bof=[0,a(d),cW,11,cW,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],bod=[0,a(E),4347,5,4352,28,[0,a(oH),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bog=[0,a(d),cW,11,cW,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],boc=[0,a(E),4330,5,4337,28,[0,a(oH),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],boh=[0,a(d),cW,11,cW,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],boi=[0,a(d),cW,11,cW,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],bob=[0,a(E),4300,5,4302,28,[0,a(oH),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],boj=[0,a(d),cW,11,cW,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],boa=[0,a(d),cW,11,cW,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],bn6=[0,a(d),hm,14,hm,46,[0,a(aK),[0,a(i),[0,a(e),0]]]],bn5=[6,0],bn1=[0,a(d),jp,14,jp,56,[0,a(aK),[0,a(i),[0,a(e),0]]]],bn0=[1,0],bnW=[0,a(d),h7,14,h7,50,[0,a(aK),[0,a(i),[0,a(e),0]]]],bnS=[0,a(E),CX,14,CX,28,[0,a("Article D841-1"),[0,a("Chapitre 1 : Champ d'application"),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]],bnT=[0,a(d),nM,11,nM,25,[0,a(aK),[0,a(i),[0,a(e),0]]]],bnR=[0,a(d),nM,11,nM,25,[0,a(aK),[0,a(i),[0,a(e),0]]]],bnU=[0,a(cb),[0,a("dur\xc3\xa9e_l841_1_3"),0]],bnX=[0,a(d),h7,14,h7,50,[0,a(aK),[0,a(i),[0,a(e),0]]]],bnY=[0,a(cb),[0,a(xa),0]],bnV=[0,a(d),h7,14,h7,50,[0,a(aK),[0,a(i),[0,a(e),0]]]],bn2=[0,a(d),jp,14,jp,56,[0,a(aK),[0,a(i),[0,a(e),0]]]],bn3=[0,a(cb),[0,a(Bv),0]],bnZ=[0,a(d),jp,14,jp,56,[0,a(aK),[0,a(i),[0,a(e),0]]]],bn7=[0,a(d),hm,14,hm,46,[0,a(aK),[0,a(i),[0,a(e),0]]]],bn8=[0,a(cb),[0,a(y2),0]],bn4=[0,a(d),hm,14,hm,46,[0,a(aK),[0,a(i),[0,a(e),0]]]],bn9=[0,a(cb),[0,a(oN),[0,a(cq),0]]],bn_=[0,a(cb),[0,a(oN),[0,a(cq),0]]],bok=[0,a(d),cW,11,cW,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],bn$=[0,a(d),cW,11,cW,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],bol=[0,a(cb),[0,a("condition_accession_propri\xc3\xa9t\xc3\xa9"),0]],boo=[0,a(d),iZ,14,iZ,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],bop=[0,a(cb),[0,a(vD),0]],bom=[0,a(d),iZ,14,iZ,40,[0,a(aK),[0,a(i),[0,a(e),0]]]],bos=[0,a(d),i8,14,i8,43,[0,a(aK),[0,a(i),[0,a(e),0]]]],bot=[0,a(cb),[0,a(Bs),0]],boq=[0,a(d),i8,14,i8,43,[0,a(aK),[0,a(i),[0,a(e),0]]]],bow=[0,a(d),gy,14,gy,47,[0,a(aK),[0,a(i),[0,a(e),0]]]],box=[0,a(cb),[0,a(F8),0]],bou=[0,a(d),gy,14,gy,47,[0,a(aK),[0,a(i),[0,a(e),0]]]],boE=[0,a(cb),[0,a(oF),[0,a(aU),0]]],boF=[0,a(cb),[0,a(oF),[0,a(aU),0]]],boI=[0,a(d),f2,12,f2,61,[0,a(aK),[0,a(i),[0,a(e),0]]]],boG=[0,a(d),f2,12,f2,61,[0,a(aK),[0,a(i),[0,a(e),0]]]],boJ=[0,a(cb),[0,a(kF),0]],boM=[0,a(d),oQ,12,oQ,54,[0,a(aK),[0,a(i),[0,a(e),0]]]],boK=[0,a(d),oQ,12,oQ,54,[0,a(aK),[0,a(i),[0,a(e),0]]]],boN=[0,a(cb),[0,a(r4),0]],boS=[0,a(d),nf,10,nf,31,[0,a(aK),[0,a(i),[0,a(e),0]]]],boO=[0,a(d),nf,10,nf,31,[0,a(aK),[0,a(i),[0,a(e),0]]]],boT=[0,a(cb),[0,a("\xc3\xa9ligibilit\xc3\xa9_dispositions_communes"),0]],bpx=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],boU=[0,a(d),b4,11,b4,52,[0,a(aK),[0,a(i),[0,a(e),0]]]],bpy=[0,a(cb),[0,a("\xc3\xa9ligibilit\xc3\xa9_allocation_logement_familiale"),0]],bpM=[0,a(d),eM,10,eM,16,[0,a(aK),[0,a(i),[0,a(e),0]]]],bpz=[0,a(d),eM,10,eM,16,[0,a(aK),[0,a(i),[0,a(e),0]]]],bpN=[0,a(cb),[0,a("\xc3\xa9ligibilit\xc3\xa9_l841_2"),0]],bnN=[0,a(aG),gH,5,593,36,[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]],bnO=[0,a(d),f3,12,f3,23,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnM=[0,a(d),f3,12,f3,23,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnI=[0,a(d),nh,14,nh,56,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnE=[0,a(d),rr,14,rr,63,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnu=[0,a(E),3693,5,3698,30,[0,a("Article R832-21"),[0,a("Sous-Section 1 : Conditions d'assimilation des logements-foyers aux logements \xc3\xa0 usage locatif"),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],bnv=[0,a(d),cC,11,cC,38,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnq=[0,a(b7),[0,a(kj),[0,a(ac),0]]],bnr=[0,a(b7),[0,a(kj),0]],bns=[0,a(b7),[0,a(kj),[0,a(ae),0]]],bnt=[0,a(b7),[0,a(kj),0]],bnp=[0,a(aG),kU,5,704,30,[0,a(mh),[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bnw=[0,a(d),cC,11,cC,38,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bno=[0,a(aG),Y,5,kp,30,[0,a(mh),[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bnx=[0,a(d),cC,11,cC,38,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnn=[0,a(aG),kc,5,650,30,[0,a(mh),[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bny=[0,a(d),cC,11,cC,38,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnj=[0,a(b7),[0,a(j3),[0,a(ac),0]]],bnk=[0,a(b7),[0,a(j3),0]],bnl=[0,a(b7),[0,a(j3),[0,a(ae),0]]],bnm=[0,a(b7),[0,a(j3),0]],bni=[0,a(aG),kf,5,623,30,[0,a(mh),[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bnz=[0,a(d),cC,11,cC,38,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnA=[0,a(d),cC,11,cC,38,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnh=[0,a(d),cC,11,cC,38,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnb=[0,a(d),gL,14,gL,47,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bm9=[0,a(d),hd,14,hd,43,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bm5=[0,a(d),hH,14,hH,40,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmY=[0,a(aG),ko,5,753,30,[0,a(qF),[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bmZ=[0,a(d),dR,11,dR,34,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmX=[0,a(aG),721,5,726,30,[0,a(qF),[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bm0=[0,a(d),dR,11,dR,34,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmW=[0,a(aG),ho,31,ho,54,[0,a(qF),[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bm1=[0,a(d),dR,11,dR,34,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmV=[0,a(d),dR,11,dR,34,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmR=[0,a(d),fi,11,fi,41,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmS=[0,a(d),fi,11,fi,41,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmQ=[0,a(d),fi,11,fi,41,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmK=[0,a(E),3021,5,3024,41,[0,a("Article R832-7"),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bmL=[0,a(d),di,11,di,41,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmJ=[0,a(E),2986,5,2988,42,[0,a("Article R832-5"),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bmM=[0,a(d),di,11,di,41,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmN=[0,a(d),di,11,di,41,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmI=[0,a(d),di,11,di,41,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmO=[0,a(d),di,11,di,41,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmH=[0,a(d),di,11,di,41,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmP=[0,a(b7),[0,a(j3),0]],bmT=[0,a(b7),[0,a(kj),0]],bm2=[0,a(d),dR,11,dR,34,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bmU=[0,a(d),dR,11,dR,34,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bm3=[0,a(b7),[0,a("condition_logement_pr\xc3\xaat"),0]],bm6=[0,a(d),hH,14,hH,40,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bm7=[0,a(b7),[0,a(vD),0]],bm4=[0,a(d),hH,14,hH,40,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bm_=[0,a(d),hd,14,hd,43,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bm$=[0,a(b7),[0,a(Bs),0]],bm8=[0,a(d),hd,14,hd,43,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnc=[0,a(d),gL,14,gL,47,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnd=[0,a(b7),[0,a(F8),0]],bna=[0,a(d),gL,14,gL,47,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bne=[0,a(b7),[0,a(oF),[0,a(aU),0]]],bnf=[0,a(b7),[0,a(oF),[0,a(aU),0]]],bnB=[0,a(d),cC,11,cC,38,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bng=[0,a(d),cC,11,cC,38,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnC=[0,a(b7),[0,a("condition_logement_bailleur"),0]],bnF=[0,a(d),n_,12,n_,61,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnD=[0,a(d),n_,12,n_,61,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnG=[0,a(b7),[0,a(kF),0]],bnJ=[0,a(d),l5,12,l5,54,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnH=[0,a(d),l5,12,l5,54,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnK=[0,a(b7),[0,a(r4),0]],bnP=[0,a(d),f3,12,f3,23,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnL=[0,a(d),f3,12,f3,23,[0,a(aZ),[0,a(i),[0,a(e),0]]]],bnQ=[0,a(b7),[0,a(n$),0]],bmE=[0,a(E),AX,14,AX,40,[0,a("Article D823-22"),[0,a(ma),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bmz=[0,a(aG),eb,5,566,42,[0,a("Article L823-8"),[0,a(a4),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],bmA=[0,a(d),f$,11,f$,31,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmy=[0,a(d),f$,11,f$,31,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmu=[0,a(Q),xs,14,xs,29,[0,a("Article 45"),[0,a("Chapitre VIII : Prime de d\xc3\xa9m\xc3\xa9nagement"),[0,a(L),0]]]],bmp=a(_),bmq=a(qy),bmr=a(_),bmt=a(p),bms=a("2.4"),bmk=[0,a(E),2069,6,xe,75,[0,a(qK),[0,a(ma),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bml=[0,a(d),ex,11,ex,41,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmj=[0,a(d),ex,11,ex,41,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmd=[0,a(d),iN,14,iN,43,[0,a(bv),[0,a(i),[0,a(e),0]]]],bl$=[0,a(d),iQ,14,iQ,39,[0,a(bv),[0,a(i),[0,a(e),0]]]],bl7=[0,a(d),fR,14,fR,36,[0,a(bv),[0,a(i),[0,a(e),0]]]],bl1=[0,a(d),fT,14,fT,65,[0,a(bv),[0,a(i),[0,a(e),0]]]],blV=a(_),blW=[0,a(E),2060,5,2065,77,[0,a(qK),[0,a(ma),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],blX=[0,a(d),f0,11,f0,32,[0,a(bv),[0,a(i),[0,a(e),0]]]],blU=[0,a(d),f0,11,f0,32,[0,a(bv),[0,a(i),[0,a(e),0]]]],blQ=[0,a(E),An,14,An,47,[0,a(qK),[0,a(ma),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],blR=[0,a(d),nQ,11,nQ,44,[0,a(bv),[0,a(i),[0,a(e),0]]]],blP=[0,a(d),nQ,11,nQ,44,[0,a(bv),[0,a(i),[0,a(e),0]]]],blS=[0,a(dj),[0,a("d\xc3\xa9lai_apr\xc3\xa8s_emm\xc3\xa9nagement_l823_8_2"),0]],blY=[0,a(d),f0,11,f0,32,[0,a(bv),[0,a(i),[0,a(e),0]]]],blT=[0,a(d),f0,11,f0,32,[0,a(bv),[0,a(i),[0,a(e),0]]]],blZ=[0,a(dj),[0,a("condition_rang_enfant"),0]],bl2=[0,a(d),fT,14,fT,65,[0,a(bv),[0,a(i),[0,a(e),0]]]],bl3=[0,a(dj),[0,a(DY),0]],bl0=[0,a(d),fT,14,fT,65,[0,a(bv),[0,a(i),[0,a(e),0]]]],bl4=[0,a(dj),[0,a(mU),[0,a(f_),0]]],bl5=[0,a(dj),[0,a(mU),[0,a(f_),0]]],bl8=[0,a(d),fR,14,fR,36,[0,a(bv),[0,a(i),[0,a(e),0]]]],bl9=[0,a(dj),[0,a("\xc3\xa9ligibilit\xc3\xa9_apl.m\xc3\xa9nage"),0]],bl6=[0,a(d),fR,14,fR,36,[0,a(bv),[0,a(i),[0,a(e),0]]]],bma=[0,a(d),iQ,14,iQ,39,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmb=[0,a(dj),[0,a("\xc3\xa9ligibilit\xc3\xa9_apl.demandeur"),0]],bl_=[0,a(d),iQ,14,iQ,39,[0,a(bv),[0,a(i),[0,a(e),0]]]],bme=[0,a(d),iN,14,iN,43,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmf=[0,a(dj),[0,a("\xc3\xa9ligibilit\xc3\xa9_apl.date_courante"),0]],bmc=[0,a(d),iN,14,iN,43,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmg=[0,a(dj),[0,a(Ba),[0,a(aU),0]]],bmh=[0,a(dj),[0,a(Ba),[0,a(aU),0]]],bmm=[0,a(d),ex,11,ex,41,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmi=[0,a(d),ex,11,ex,41,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmn=[0,a(dj),[0,a("condition_p\xc3\xa9riode_d\xc3\xa9m\xc3\xa9nagement"),0]],bmv=[0,a(d),mL,11,mL,26,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmo=[0,a(d),mL,11,mL,26,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmw=[0,a(dj),[0,a("plafond_d823_22"),0]],bmB=[0,a(d),f$,11,f$,31,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmx=[0,a(d),f$,11,f$,31,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmC=[0,a(dj),[0,a(Bg),0]],bmF=[0,a(d),oY,12,oY,38,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmD=[0,a(d),oY,12,oY,38,[0,a(bv),[0,a(i),[0,a(e),0]]]],bmG=[0,a(dj),[0,a("montant_prime_d\xc3\xa9m\xc3\xa9nagement"),0]],blL=[0,a(E),x_,14,x_,33,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],blH=[0,a(E),Eq,14,Eq,36,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],blI=[0,a(d),j6,12,j6,34,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],blG=[0,a(d),j6,12,j6,34,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],blD=[0,a(E),vP,14,vP,36,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],blw=[0,a(au),[0,a(aw),[0,a(ac),0]]],blx=[0,a(au),[0,a(aw),0]],bly=[0,a(au),[0,a(aw),[0,a(ae),0]]],blz=[0,a(au),[0,a(aw),0]],bln=[0,a(aj),[0,a(aw),[0,a(ac),0]]],blo=[0,a(aj),[0,a(aw),0]],blp=[0,a(aj),[0,a(aw),[0,a(ae),0]]],blq=[0,a(aj),[0,a(aw),0]],blc=[0,a(aD),[0,a(aw),[0,a(ac),0]]],bld=[0,a(aD),[0,a(aw),0]],ble=[0,a(aD),[0,a(aw),[0,a(ae),0]]],blf=[0,a(aD),[0,a(aw),0]],blj=a(p),blk=a(p),bk$=[0,a(E),1455,16,1458,39,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bla=[0,a(aD),[0,a(bo),[0,a(ac),0]]],blb=[0,a(aD),[0,a(bo),0]],blg=[0,a(E),1440,9,1460,10,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],blh=[0,a(aD),[0,a(bo),[0,a(ae),0]]],bli=[0,a(aD),[0,a(bo),0]],bll=[0,a(aj),[0,a(bo),[0,a(ac),0]]],blm=[0,a(aj),[0,a(bo),0]],blr=[0,a(E),1491,10,1507,11,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bls=[0,a(aj),[0,a(bo),[0,a(ae),0]]],blt=[0,a(aj),[0,a(bo),0]],blu=[0,a(au),[0,a(bo),[0,a(ac),0]]],blv=[0,a(au),[0,a(bo),0]],blA=[0,a(E),1471,9,1480,10,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],blB=[0,a(au),[0,a(bo),[0,a(ae),0]]],blC=[0,a(au),[0,a(bo),0]],bk7=[0,a(Q),78,14,78,44,[0,a(cG),[0,a(bX),[0,a(L),0]]]],bk1=[0,0],bk2=[1,0],bk3=[1,0],bk4=[1,0],bk5=[0,0],bk6=[1,0],bkX=[0,a(E),Ak,14,Ak,31,[0,a(rN),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],bkU=a(c4),bkV=a(Ca),bkW=a(qX),bkQ=[0,a(E),zC,14,zC,34,[0,a(cp),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bkR=[0,a(d),ko,11,ko,31,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],bkP=[0,a(d),ko,11,ko,31,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],bkS=[0,a(cS),[0,a(xP),0]],bkY=[0,a(d),m5,10,m5,22,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],bkT=[0,a(d),m5,10,m5,22,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],bkZ=[0,a(cS),[0,a(xh),0]],bk8=[0,a(d),of,11,of,41,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],bk0=[0,a(d),of,11,of,41,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],bk9=[0,a(cS),[0,a(y$),0]],blE=[0,a(d),m4,11,m4,33,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],bk_=[0,a(d),m4,11,m4,33,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],blF=[0,a(cS),[0,a(Fk),0]],blJ=[0,a(cS),[0,a(aw),0]],blM=[0,a(d),mY,12,mY,31,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],blK=[0,a(d),mY,12,mY,31,[0,a(bO),[0,a(t),[0,a(i),[0,a(e),0]]]]],blN=[0,a(cS),[0,a(cX),0]],bkM=[0,a(E),Er,14,Er,36,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bkH=[0,a(V),[0,a(bJ),[0,a(ac),0]]],bkI=[0,a(V),[0,a(bJ),0]],bkJ=[0,a(V),[0,a(bJ),[0,a(ae),0]]],bkK=[0,a(V),[0,a(bJ),0]],bkL=a(p),bkN=[0,a(d),l_,10,l_,25,[0,a(D),[0,a(A),[0,a(e),0]]]],bkG=[0,a(d),l_,10,l_,25,[0,a(D),[0,a(A),[0,a(e),0]]]],bkD=[0,a(E),EI,14,EI,36,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bks=[0,a(V),[0,a(er),[0,a(ac),0]]],bkt=[0,a(V),[0,a(er),0]],bku=[0,a(V),[0,a(er),[0,a(ae),0]]],bkv=[0,a(V),[0,a(er),0]],bkw=[0,a(bk),[0,a(bQ),[0,a(ac),0]]],bkx=[0,a(bk),[0,a(bQ),0]],bky=[0,a(bk),[0,a(bQ),[0,a(ae),0]]],bkz=[0,a(bk),[0,a(bQ),0]],bkA=a(kY),bkB=a(p),bkC=a(p),bkE=[0,a(d),mE,10,mE,40,[0,a(D),[0,a(A),[0,a(e),0]]]],bkr=[0,a(d),mE,10,mE,40,[0,a(D),[0,a(A),[0,a(e),0]]]],bko=[0,a(E),y8,14,y8,36,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bkf=[0,a(V),[0,a(bI),[0,a(ac),0]]],bkg=[0,a(V),[0,a(bI),0]],bkh=[0,a(V),[0,a(bI),[0,a(ae),0]]],bki=[0,a(V),[0,a(bI),0]],bkj=[0,a(V),[0,a(eK),[0,a(ac),0]]],bkk=[0,a(V),[0,a(eK),0]],bkl=[0,a(V),[0,a(eK),[0,a(ae),0]]],bkm=[0,a(V),[0,a(eK),0]],bkn=a(p),bkp=[0,a(d),ou,10,ou,32,[0,a(D),[0,a(A),[0,a(e),0]]]],bke=[0,a(d),ou,10,ou,32,[0,a(D),[0,a(A),[0,a(e),0]]]],bkb=[0,a(E),AF,14,AF,33,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bj9=[0,a(E),u8,14,u8,47,[0,a(oO),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bj4=[0,a(V),[0,a(dc),[0,a(ac),0]]],bj5=[0,a(V),[0,a(dc),0]],bj6=[0,a(V),[0,a(dc),[0,a(ae),0]]],bj7=[0,a(V),[0,a(dc),0]],bj8=a(p),bj_=[0,a(d),nD,11,nD,44,[0,a(D),[0,a(A),[0,a(e),0]]]],bj3=[0,a(d),nD,11,nD,44,[0,a(D),[0,a(A),[0,a(e),0]]]],bj0=[0,a(E),xf,14,xf,41,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bjW=[0,a(E),AO,14,AO,33,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bjS=[0,a(E),x7,14,x7,33,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bjN=[0,a(E),4671,7,4674,44,[0,a(oO),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bjO=[0,a(d),gS,11,gS,47,[0,a(D),[0,a(A),[0,a(e),0]]]],bjM=[0,a(E),vK,14,vK,50,[0,a(oO),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bjG=[0,a(E),nq,14,nq,62,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bjH=[0,a(E),nq,14,nq,62,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bjI=[0,a(V),[0,a("calcul_apl_logement_foyer.n_nombre_parts_d832_25"),0]],bjD=[0,a(E),m7,14,m7,61,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bjE=[0,a(E),m7,14,m7,61,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bjF=[0,a(V),[0,a(Ek),0]],bjA=[0,a(d),gE,14,gE,49,[0,a(D),[0,a(A),[0,a(e),0]]]],bjz=a(p),bjv=[0,a(d),hP,14,hP,53,[0,a(D),[0,a(A),[0,a(e),0]]]],bjr=[0,a(d),i1,14,i1,44,[0,a(D),[0,a(A),[0,a(e),0]]]],bjn=[0,a(d),ih,14,ih,70,[0,a(D),[0,a(A),[0,a(e),0]]]],bjj=[0,a(d),iY,14,iY,65,[0,a(D),[0,a(A),[0,a(e),0]]]],bjf=[0,a(d),jo,14,jo,67,[0,a(D),[0,a(A),[0,a(e),0]]]],bjb=[0,a(d),ix,14,ix,61,[0,a(D),[0,a(A),[0,a(e),0]]]],bi9=[0,a(d),ju,14,ju,59,[0,a(D),[0,a(A),[0,a(e),0]]]],bi8=[3,0],bi2=[0,a(E),hv,14,hv,70,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],biY=[0,a(E),hF,14,hF,69,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],biU=[0,a(E),js,14,js,75,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],biP=[0,a(E),Bf,5,Bf,44,[0,a(BT),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],biH=[0,a(V),[0,a(dD),[0,a(ac),0]]],biI=[0,a(V),[0,a(dD),0]],biJ=[0,a(V),[0,a(dD),[0,a(ae),0]]],biK=[0,a(V),[0,a(dD),0]],biL=[0,a(V),[0,a(dD),[0,a(ac),0]]],biM=[0,a(V),[0,a(dD),0]],biN=[0,a(V),[0,a(dD),[0,a(ae),0]]],biO=[0,a(V),[0,a(dD),0]],biQ=[0,a(d),hY,11,hY,36,[0,a(D),[0,a(A),[0,a(e),0]]]],biG=[0,a(E),EE,14,EE,39,[0,a(BT),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],biC=[0,a(V),[0,a(dD),[0,a(ac),0]]],biD=[0,a(V),[0,a(dD),0]],biE=[0,a(V),[0,a(dD),[0,a(ae),0]]],biF=[0,a(V),[0,a(dD),0]],bix=[0,a(E),vR,5,vR,28,[0,a(ng),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],biy=[0,a(d),iT,10,iT,15,[0,a(D),[0,a(A),[0,a(e),0]]]],biw=[0,a(E),Dz,14,Dz,41,[0,a(ng),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bit=a(c4),biu=a(qX),biv=a("4999"),bim=[0,a(aO),xN,24,xN,56,[0,a(os),[0,a(bB),[0,a(aM),0]]]],bid=a(dd),bie=[0,a(V),[0,a(b$),[0,a(ac),0]]],bif=[0,a(V),[0,a(b$),0]],big=[0,a(V),[0,a(b$),[0,a(ae),0]]],bih=[0,a(V),[0,a(b$),0]],bii=[0,a(V),[0,a(b$),[0,a(ac),0]]],bij=[0,a(V),[0,a(b$),0]],bik=[0,a(V),[0,a(b$),[0,a(ae),0]]],bil=[0,a(V),[0,a(b$),0]],bin=[0,a(d),eT,10,eT,26,[0,a(D),[0,a(A),[0,a(e),0]]]],bic=[0,a(Q),n8,24,n8,56,[0,a(os),[0,a(bn),[0,a(L),0]]]],bh5=a(dd),bh6=[0,a(V),[0,a(b$),[0,a(ac),0]]],bh7=[0,a(V),[0,a(b$),0]],bh8=[0,a(V),[0,a(b$),[0,a(ae),0]]],bh9=[0,a(V),[0,a(b$),0]],bh_=[0,a(V),[0,a(b$),[0,a(ac),0]]],bh$=[0,a(V),[0,a(b$),0]],bia=[0,a(V),[0,a(b$),[0,a(ae),0]]],bib=[0,a(V),[0,a(b$),0]],bio=[0,a(d),eT,10,eT,26,[0,a(D),[0,a(A),[0,a(e),0]]]],bip=[0,a(d),eT,10,eT,26,[0,a(D),[0,a(A),[0,a(e),0]]]],bh4=[0,a(Q),z1,14,z1,46,[0,a(bW),[0,a(bn),[0,a(L),0]]]],bh0=[0,a(V),[0,a(b$),[0,a(ac),0]]],bh1=[0,a(V),[0,a(b$),0]],bh2=[0,a(V),[0,a(b$),[0,a(ae),0]]],bh3=[0,a(V),[0,a(b$),0]],biq=[0,a(d),eT,10,eT,26,[0,a(D),[0,a(A),[0,a(e),0]]]],bhZ=[0,a(d),eT,10,eT,26,[0,a(D),[0,a(A),[0,a(e),0]]]],bhW=[0,a(E),Az,15,Az,37,[0,a(oO),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bhX=[0,a(d),mS,11,mS,33,[0,a(D),[0,a(A),[0,a(e),0]]]],bhV=[0,a(d),mS,11,mS,33,[0,a(D),[0,a(A),[0,a(e),0]]]],bhR=[0,a(E),4696,6,4702,6,[0,a(ng),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bhS=[0,a(d),fU,11,fU,42,[0,a(D),[0,a(A),[0,a(e),0]]]],bhP=[0,a(E),4714,5,4715,59,[0,a(ng),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bhQ=[0,a(d),fU,11,fU,42,[0,a(D),[0,a(A),[0,a(e),0]]]],bhK=[0,a(Q),zr,5,zr,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],bg0=a(p),bg1=a("158700"),bg2=a("191300"),bg3=a(z),bg4=a("205500"),bg5=a(X),bg6=a("211300"),bg7=a(_),bg8=a("217100"),bg9=a(ah),bg_=a("222900"),bg$=a(P),bha=a(Aa),bhb=a(P),bhc=a("19800"),bhd=a(Aa),bhe=a(p),bhf=a("139300"),bhg=a("170600"),bhh=a(z),bhi=a("184700"),bhj=a(X),bhk=a("191200"),bhl=a(_),bhm=a(zx),bhn=a(ah),bho=a("204200"),bhp=a(P),bhq=a(wB),bhr=a(P),bhs=a(sh),bht=a(wB),bhu=a(p),bhv=a("130600"),bhw=a("158400"),bhx=a(z),bhy=a("172600"),bhz=a(X),bhA=a(D0),bhB=a(_),bhC=a("187000"),bhD=a(ah),bhE=a("194200"),bhF=a(P),bhG=a(rF),bhH=a(P),bhI=a("18200"),bhJ=a(rF),bhL=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],bgY=[0,a(Q),wX,5,wX,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],bgc=a(p),bgd=a("160400"),bge=a("193400"),bgf=a(z),bgg=a("207800"),bgh=a(X),bgi=a("213700"),bgj=a(_),bgk=a("219600"),bgl=a(ah),bgm=a(yM),bgn=a(P),bgo=a(oc),bgp=a(P),bgq=a("20000"),bgr=a(oc),bgs=a(p),bgt=a(DM),bgu=a(D1),bgv=a(z),bgw=a("186700"),bgx=a(X),bgy=a("193300"),bgz=a(_),bgA=a(qY),bgB=a(ah),bgC=a("206500"),bgD=a(P),bgE=a(w3),bgF=a(P),bgG=a(zA),bgH=a(w3),bgI=a(p),bgJ=a(By),bgK=a(q9),bgL=a(z),bgM=a("174500"),bgN=a(X),bgO=a(xT),bgP=a(_),bgQ=a("189100"),bgR=a(ah),bgS=a("196400"),bgT=a(P),bgU=a(vi),bgV=a(P),bgW=a("18400"),bgX=a(vi),bgZ=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],bga=[0,a(Q),BR,5,BR,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],bfq=a(p),bfr=a("163300"),bfs=a("196900"),bft=a(z),bfu=a("211600"),bfv=a(X),bfw=a(wD),bfx=a(_),bfy=a("223600"),bfz=a(ah),bfA=a("229600"),bfB=a(P),bfC=a(BM),bfD=a(P),bfE=a("20400"),bfF=a(BM),bfG=a(p),bfH=a("143300"),bfI=a("175600"),bfJ=a(z),bfK=a("190100"),bfL=a(X),bfM=a("196600"),bfN=a(_),bfO=a("203500"),bfP=a(ah),bfQ=a("210200"),bfR=a(P),bfS=a(ET),bfT=a(P),bfU=a("19600"),bfV=a(ET),bfW=a(p),bfX=a("134400"),bfY=a(xW),bfZ=a(z),bf0=a("177700"),bf1=a(X),bf2=a("185100"),bf3=a(_),bf4=a(wE),bf5=a(ah),bf6=a(qY),bf7=a(P),bf8=a(FQ),bf9=a(P),bf_=a("18700"),bf$=a(FQ),bgb=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],bfo=[0,a(Q),Ff,5,Ff,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],beE=a(p),beF=a("167200"),beG=a("201600"),beH=a(z),beI=a("216700"),beJ=a(X),beK=a("222800"),beL=a(_),beM=a("229000"),beN=a(ah),beO=a("235100"),beP=a(P),beQ=a(FL),beR=a(P),beS=a(vJ),beT=a(FL),beU=a(p),beV=a("146700"),beW=a(D0),beX=a(z),beY=a("194700"),beZ=a(X),be0=a("201500"),be1=a(_),be2=a("208400"),be3=a(ah),be4=a("215200"),be5=a(P),be6=a(oc),be7=a(P),be8=a(BH),be9=a(oc),be_=a(p),be$=a("137600"),bfa=a("166900"),bfb=a(z),bfc=a("182000"),bfd=a(X),bfe=a("189500"),bff=a(_),bfg=a("197100"),bfh=a(ah),bfi=a(Da),bfj=a(P),bfk=a(Bj),bfl=a(P),bfm=a(sh),bfn=a(Bj),bfp=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],beC=[0,a(Q),Ck,5,Ck,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],bdS=a(p),bdT=a("167400"),bdU=a("201800"),bdV=a(z),bdW=a("216900"),bdX=a(X),bdY=a("223000"),bdZ=a(_),bd0=a("229200"),bd1=a(ah),bd2=a("235300"),bd3=a(P),bd4=a(Ax),bd5=a(P),bd6=a(vJ),bd7=a(Ax),bd8=a(p),bd9=a("146800"),bd_=a("180000"),bd$=a(z),bea=a("194900"),beb=a(X),bec=a(Fi),bed=a(_),bee=a(rF),bef=a(ah),beg=a("215400"),beh=a(P),bei=a(Cz),bej=a(P),bek=a(BH),bel=a(Cz),bem=a(p),ben=a("137700"),beo=a("167100"),bep=a(z),beq=a("182200"),ber=a(X),bes=a("189700"),bet=a(_),beu=a("197300"),bev=a(ah),bew=a("204900"),bex=a(P),bey=a(DX),bez=a(P),beA=a(sh),beB=a(DX),beD=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],bdQ=[0,a(Q),AE,5,AE,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],bc6=a(p),bc7=a("169100"),bc8=a("203800"),bc9=a(z),bc_=a("219100"),bc$=a(X),bda=a("225200"),bdb=a(_),bdc=a("231500"),bdd=a(ah),bde=a("237700"),bdf=a(P),bdg=a(mm),bdh=a(P),bdi=a("21100"),bdj=a(mm),bdk=a(p),bdl=a("148300"),bdm=a(xT),bdn=a(z),bdo=a("196800"),bdp=a(X),bdq=a("203700"),bdr=a(_),bds=a("210700"),bdt=a(ah),bdu=a(wD),bdv=a(P),bdw=a(w8),bdx=a(P),bdy=a("20300"),bdz=a(w8),bdA=a(p),bdB=a("139100"),bdC=a("168800"),bdD=a(z),bdE=a(rG),bdF=a(X),bdG=a("191600"),bdH=a(_),bdI=a("199300"),bdJ=a(ah),bdK=a("206900"),bdL=a(P),bdM=a(A1),bdN=a(P),bdO=a(zA),bdP=a(A1),bdR=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],bc4=[0,a(Q),xZ,5,xZ,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],bci=a(p),bcj=a("171100"),bck=a("206200"),bcl=a(z),bcm=a("221700"),bcn=a(X),bco=a("227900"),bcp=a(_),bcq=a("234300"),bcr=a(ah),bcs=a("240600"),bct=a(P),bcu=a(z4),bcv=a(P),bcw=a("21400"),bcx=a(z4),bcy=a(p),bcz=a("150100"),bcA=a(rG),bcB=a(z),bcC=a("199200"),bcD=a(X),bcE=a("206100"),bcF=a(_),bcG=a("213200"),bcH=a(ah),bcI=a("220200"),bcJ=a(P),bcK=a(zc),bcL=a(P),bcM=a("20500"),bcN=a(zc),bcO=a(p),bcP=a(DM),bcQ=a("170800"),bcR=a(z),bcS=a("186200"),bcT=a(X),bcU=a("193900"),bcV=a(_),bcW=a(Fi),bcX=a(ah),bcY=a("209400"),bcZ=a(P),bc0=a(A0),bc1=a(P),bc2=a("19500"),bc3=a(A0),bc5=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],bcg=[0,a(Q),xx,5,xx,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],bbw=a(p),bbx=a("26084"),bby=a("31435"),bbz=a(z),bbA=a("33798"),bbB=a(X),bbC=a("34743"),bbD=a(_),bbE=a("35719"),bbF=a(ah),bbG=a("36679"),bbH=a(P),bbI=a(zi),bbJ=a(P),bbK=a("3262"),bbL=a(zi),bbM=a(p),bbN=a("22883"),bbO=a("28051"),bbP=a(z),bbQ=a("30368"),bbR=a(X),bbS=a("31420"),bbT=a(_),bbU=a("32502"),bbV=a(ah),bbW=a("33569"),bbX=a(P),bbY=a(Fz),bbZ=a(P),bb0=a("3125"),bb1=a(Fz),bb2=a(p),bb3=a("21465"),bb4=a("26038"),bb5=a(z),bb6=a("28386"),bb7=a(X),bb8=a("29560"),bb9=a(_),bb_=a("30749"),bb$=a(ah),bca=a("31923"),bcb=a(P),bcc=a(EV),bcd=a(P),bce=a("2973"),bcf=a(EV),bch=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],bbu=[0,a(Q),yI,5,yI,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],baK=a(p),baL=a("26397"),baM=a("31812"),baN=a(z),baO=a("34204"),baP=a(X),baQ=a("35160"),baR=a(_),baS=a("36148"),baT=a(ah),baU=a("37119"),baV=a(P),baW=a(zH),baX=a(P),baY=a("3301"),baZ=a(zH),ba0=a(p),ba1=a("23158"),ba2=a("28388"),ba3=a(z),ba4=a("30732"),ba5=a(X),ba6=a(mX),ba7=a(_),ba8=a("32892"),ba9=a(ah),ba_=a("33972"),ba$=a(P),bba=a(EG),bbb=a(P),bbc=a("3163"),bbd=a(EG),bbe=a(p),bbf=a("21723"),bbg=a("26350"),bbh=a(z),bbi=a("28727"),bbj=a(X),bbk=a("29915"),bbl=a(_),bbm=a("31118"),bbn=a(ah),bbo=a("32306"),bbp=a(P),bbq=a(xt),bbr=a(P),bbs=a("3009"),bbt=a(xt),bbv=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],baI=[0,a(Q),B9,5,B9,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a$Y=a(p),a$Z=a(Gf),a$0=a("32194"),a$1=a(z),a$2=a("34614"),a$3=a(X),a$4=a("35582"),a$5=a(_),a$6=a("36582"),a$7=a(ah),a$8=a("37564"),a$9=a(P),a$_=a(wQ),a$$=a(P),baa=a("3341"),bab=a(wQ),bac=a(p),bad=a("23436"),bae=a("28729"),baf=a(z),bag=a("31101"),bah=a(X),bai=a("32179"),baj=a(_),bak=a("33287"),bal=a(ah),bam=a("34380"),ban=a(P),bao=a(AY),bap=a(P),baq=a("3201"),bar=a(AY),bas=a(p),bat=a("21984"),bau=a("26666"),bav=a(z),baw=a("29072"),bax=a(X),bay=a("30274"),baz=a(_),baA=a("31491"),baB=a(ah),baC=a("32694"),baD=a(P),baE=a(BS),baF=a(P),baG=a("3045"),baH=a(BS),baJ=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a$W=[0,a(Q),B_,5,B_,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a$a=a(p),a$b=a("27195"),a$c=a("32773"),a$d=a(z),a$e=a("35237"),a$f=a(X),a$g=a("36222"),a$h=a(_),a$i=a("37240"),a$j=a(ah),a$k=a("38240"),a$l=a(P),a$m=a(BK),a$n=a(P),a$o=a("3401"),a$p=a(BK),a$q=a(p),a$r=a("23858"),a$s=a("29246"),a$t=a(z),a$u=a("31661"),a$v=a(X),a$w=a("32758"),a$x=a(_),a$y=a("33886"),a$z=a(ah),a$A=a("34999"),a$B=a(P),a$C=a(zL),a$D=a(P),a$E=a("3259"),a$F=a(zL),a$G=a(p),a$H=a("22380"),a$I=a("27146"),a$J=a(z),a$K=a("29595"),a$L=a(X),a$M=a("30819"),a$N=a(_),a$O=a("32058"),a$P=a(ah),a$Q=a("33282"),a$R=a(P),a$S=a(AL),a$T=a(P),a$U=a("3100"),a$V=a(AL),a$X=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a__=[0,a(Q),zl,5,zl,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a_o=a(p),a_p=a("27956"),a_q=a("33691"),a_r=a(z),a_s=a("36224"),a_t=a(X),a_u=a("37236"),a_v=a(_),a_w=a("38283"),a_x=a(ah),a_y=a("39311"),a_z=a(P),a_A=a(yP),a_B=a(P),a_C=a("3496"),a_D=a(yP),a_E=a(p),a_F=a("24526"),a_G=a("30065"),a_H=a(z),a_I=a("32548"),a_J=a(X),a_K=a("33675"),a_L=a(_),a_M=a(FF),a_N=a(ah),a_O=a("35979"),a_P=a(P),a_Q=a(AW),a_R=a(P),a_S=a("3350"),a_T=a(AW),a_U=a(p),a_V=a("23007"),a_W=a("27906"),a_X=a(z),a_Y=a("30424"),a_Z=a(X),a_0=a("31682"),a_1=a(_),a_2=a(yU),a_3=a(ah),a_4=a("34214"),a_5=a(P),a_6=a(EA),a_7=a(P),a_8=a("3187"),a_9=a(EA),a_$=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a_m=[0,a(Q),B7,5,B7,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a9C=a(p),a9D=a("28728"),a9E=a("34621"),a9F=a(z),a9G=a("37224"),a9H=a(X),a9I=a("38264"),a9J=a(_),a9K=a(ys),a9L=a(ah),a9M=a("40396"),a9N=a(P),a9O=a(x3),a9P=a(P),a9Q=a("3592"),a9R=a(x3),a9S=a(p),a9T=a("25203"),a9U=a("30895"),a9V=a(z),a9W=a("33446"),a9X=a(X),a9Y=a("34604"),a9Z=a(_),a90=a("35796"),a91=a(ah),a92=a("36972"),a93=a(P),a94=a(Fr),a95=a(P),a96=a("3442"),a97=a(Fr),a98=a(p),a99=a("23642"),a9_=a("28676"),a9$=a(z),a_a=a(xE),a_b=a(X),a_c=a("32556"),a_d=a(_),a_e=a("33866"),a_f=a(ah),a_g=a("35158"),a_h=a(P),a_i=a(wv),a_j=a(P),a_k=a("3275"),a_l=a(wv),a_n=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a9A=[0,a(Q),E$,5,E$,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a8Q=a(p),a8R=a("29575"),a8S=a("35642"),a8T=a(z),a8U=a("38322"),a8V=a(X),a8W=a("39393"),a8X=a(_),a8Y=a("40501"),a8Z=a(ah),a80=a("41588"),a81=a(P),a82=a(Dx),a83=a(P),a84=a("3698"),a85=a(Dx),a86=a(p),a87=a("25946"),a88=a("31806"),a89=a(z),a8_=a("34433"),a8$=a(X),a9a=a("35625"),a9b=a(_),a9c=a("36852"),a9d=a(ah),a9e=a("38063"),a9f=a(P),a9g=a(AH),a9h=a(P),a9i=a("3544"),a9j=a(AH),a9k=a(p),a9l=a("24339"),a9m=a("29522"),a9n=a(z),a9o=a("32186"),a9p=a(X),a9q=a("33516"),a9r=a(_),a9s=a(FF),a9t=a(ah),a9u=a("36195"),a9v=a(P),a9w=a(Et),a9x=a(P),a9y=a("3372"),a9z=a(Et),a9B=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a8O=[0,a(Q),E2,5,E2,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a74=a(p),a75=a("29670"),a76=a("35757"),a77=a(z),a78=a("38445"),a79=a(X),a7_=a("39519"),a7$=a(_),a8a=a("40601"),a8b=a(ah),a8c=a("41721"),a8d=a(P),a8e=a(DF),a8f=a(P),a8g=a("3710"),a8h=a(DF),a8i=a(p),a8j=a("26029"),a8k=a("31908"),a8l=a(z),a8m=a("34643"),a8n=a(X),a8o=a("35739"),a8p=a(_),a8q=a("36970"),a8r=a(ah),a8s=a("38185"),a8t=a(P),a8u=a(Bl),a8v=a(P),a8w=a("3555"),a8x=a(Bl),a8y=a(p),a8z=a("24417"),a8A=a("29616"),a8B=a(z),a8C=a("32289"),a8D=a(X),a8E=a(zM),a8F=a(_),a8G=a("34977"),a8H=a(ah),a8I=a("36311"),a8J=a(P),a8K=a(Al),a8L=a(P),a8M=a("3383"),a8N=a(Al),a8P=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a72=[0,a(Q),y4,5,y4,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a7g=a(p),a7h=a("29996"),a7i=a("36149"),a7j=a(z),a7k=a("38868"),a7l=a(X),a7m=a("39954"),a7n=a(_),a7o=a("41078"),a7p=a(ah),a7q=a("42180"),a7r=a(P),a7s=a(BD),a7t=a(P),a7u=a("3751"),a7v=a(BD),a7w=a(p),a7x=a("26315"),a7y=a("32259"),a7z=a(z),a7A=a("34923"),a7B=a(X),a7C=a("36132"),a7D=a(_),a7E=a("37373"),a7F=a(ah),a7G=a("38605"),a7H=a(P),a7I=a(DP),a7J=a(P),a7K=a("3594"),a7L=a(DP),a7M=a(p),a7N=a("24686"),a7O=a("29942"),a7P=a(z),a7Q=a("32644"),a7R=a(X),a7S=a("33993"),a7T=a(_),a7U=a("35362"),a7V=a(ah),a7W=a("36710"),a7X=a(P),a7Y=a(AD),a7Z=a(P),a70=a("3420"),a71=a(AD),a73=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a7e=[0,a(Q),zV,5,zV,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a6u=a(p),a6v=a("30296"),a6w=a("36510"),a6x=a(z),a6y=a("39257"),a6z=a(X),a6A=a("40354"),a6B=a(_),a6C=a("41489"),a6D=a(ah),a6E=a("42602"),a6F=a(P),a6G=a(v_),a6H=a(P),a6I=a("3789"),a6J=a(v_),a6K=a(p),a6L=a("26578"),a6M=a("32582"),a6N=a(z),a6O=a("35272"),a6P=a(X),a6Q=a("36493"),a6R=a(_),a6S=a("37751"),a6T=a(ah),a6U=a("38991"),a6V=a(P),a6W=a(xU),a6X=a(P),a6Y=a("3630"),a6Z=a(xU),a60=a(p),a61=a("24933"),a62=a("30241"),a63=a(z),a64=a("32970"),a65=a(X),a66=a("34333"),a67=a(_),a68=a("35716"),a69=a(ah),a6_=a("37077"),a6$=a(P),a7a=a(vd),a7b=a(P),a7c=a("3454"),a7d=a(vd),a7f=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a6s=[0,a(Q),wL,5,wL,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a5I=a(p),a5J=a("30947"),a5K=a("37295"),a5L=a(z),a5M=a("40101"),a5N=a(X),a5O=a("41222"),a5P=a(_),a5Q=a("42381"),a5R=a(ah),a5S=a("43518"),a5T=a(P),a5U=a(CV),a5V=a(P),a5W=a("3870"),a5X=a(CV),a5Y=a(p),a5Z=a("27149"),a50=a("33283"),a51=a(z),a52=a("36030"),a53=a(X),a54=a("37278"),a55=a(_),a56=a("38563"),a57=a(ah),a58=a("39829"),a59=a(P),a5_=a("42649"),a5$=a(P),a6a=a("3708"),a6b=a("42659"),a6c=a(p),a6d=a("25469"),a6e=a("30891"),a6f=a(z),a6g=a("33679"),a6h=a(X),a6i=a("35071"),a6j=a(_),a6k=a("36484"),a6l=a(ah),a6m=a("37874"),a6n=a(P),a6o=a(C3),a6p=a(P),a6q=a("3528"),a6r=a(C3),a6t=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a5G=[0,a(Q),yb,5,yb,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a4W=a(p),a4X=a("31123"),a4Y=a("37508"),a4Z=a(z),a40=a("40330"),a41=a(X),a42=a("41457"),a43=a(_),a44=a("42623"),a45=a(ah),a46=a("43766"),a47=a(P),a48=a(ve),a49=a(P),a4_=a("3892"),a4$=a(ve),a5a=a(p),a5b=a("27304"),a5c=a("33473"),a5d=a(z),a5e=a("36235"),a5f=a(X),a5g=a("37490"),a5h=a(_),a5i=a("38783"),a5j=a(ah),a5k=a("40056"),a5l=a(P),a5m=a(Cn),a5n=a(P),a5o=a("3729"),a5p=a(Cn),a5q=a(p),a5r=a("25614"),a5s=a("31067"),a5t=a(z),a5u=a("33871"),a5v=a(X),a5w=a("35271"),a5x=a(_),a5y=a("36692"),a5z=a(ah),a5A=a("38090"),a5B=a(P),a5C=a(zz),a5D=a(P),a5E=a("3548"),a5F=a(zz),a5H=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a4U=[0,a(Q),FN,5,FN,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a3_=a(p),a3$=a("31148"),a4a=a("37538"),a4b=a(z),a4c=a("40362"),a4d=a(X),a4e=a("41490"),a4f=a(_),a4g=a("42657"),a4h=a(ah),a4i=a("43801"),a4j=a(P),a4k=a(xw),a4l=a(P),a4m=a("3895"),a4n=a(xw),a4o=a(p),a4p=a("27326"),a4q=a(FZ),a4r=a(z),a4s=a("36264"),a4t=a(X),a4u=a("37520"),a4v=a(_),a4w=a("38814"),a4x=a(ah),a4y=a("40088"),a4z=a(P),a4A=a(FP),a4B=a(P),a4C=a("3732"),a4D=a(FP),a4E=a(p),a4F=a("25634"),a4G=a("31092"),a4H=a(z),a4I=a("33898"),a4J=a(X),a4K=a("35299"),a4L=a(_),a4M=a("36721"),a4N=a(ah),a4O=a("38120"),a4P=a(P),a4Q=a(Ah),a4R=a(P),a4S=a("3551"),a4T=a(Ah),a4V=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a38=[0,a(Q),m3,5,m3,62,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a3m=a(p),a3n=a("31382"),a3o=a("37820"),a3p=a(z),a3q=a("40665"),a3r=a(X),a3s=a("41801"),a3t=a(_),a3u=a("42977"),a3v=a(ah),a3w=a("44130"),a3x=a(P),a3y=a(Ab),a3z=a(P),a3A=a("3924"),a3B=a(Ab),a3C=a(p),a3D=a("27531"),a3E=a("33751"),a3F=a(z),a3G=a("36536"),a3H=a(X),a3I=a("37801"),a3J=a(_),a3K=a("39105"),a3L=a(ah),a3M=a("40389"),a3N=a(P),a3O=a(wK),a3P=a(P),a3Q=a("3760"),a3R=a(wK),a3S=a(p),a3T=a("25826"),a3U=a("31325"),a3V=a(z),a3W=a("34152"),a3X=a(X),a3Y=a("35564"),a3Z=a(_),a30=a("36996"),a31=a(ah),a32=a("38406"),a33=a(P),a34=a(zP),a35=a(P),a36=a("3578"),a37=a(zP),a39=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a3k=[0,a(Q),zj,5,zj,32,[0,a(bW),[0,a(bn),[0,a(L),0]]]],a2A=a(p),a2B=a("31476"),a2C=a("37933"),a2D=a(z),a2E=a("40787"),a2F=a(X),a2G=a("41927"),a2H=a(_),a2I=a("43106"),a2J=a(ah),a2K=a("44262"),a2L=a(P),a2M=a(wz),a2N=a(P),a2O=a("3936"),a2P=a(wz),a2Q=a(p),a2R=a("27614"),a2S=a("33853"),a2T=a(z),a2U=a("36646"),a2V=a(X),a2W=a("37915"),a2X=a(_),a2Y=a("39222"),a2Z=a(ah),a20=a("40510"),a21=a(P),a22=a(E4),a23=a(P),a24=a("3771"),a25=a(E4),a26=a(p),a27=a("25904"),a28=a("31419"),a29=a(z),a2_=a("34255"),a2$=a(X),a3a=a("35670"),a3b=a(_),a3c=a("37107"),a3d=a(ah),a3e=a("38521"),a3f=a(P),a3g=a(F2),a3h=a(P),a3i=a("3588"),a3j=a(F2),a3l=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],bhM=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a2z=[0,a(d),aR,10,aR,14,[0,a(D),[0,a(A),[0,a(e),0]]]],a2w=[0,a(E),F0,14,F0,36,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a2u=a(p),a2v=a(p),a2x=[0,a(d),n7,10,n7,32,[0,a(D),[0,a(A),[0,a(e),0]]]],a2t=[0,a(d),n7,10,n7,32,[0,a(D),[0,a(A),[0,a(e),0]]]],a2o=[0,a(aO),u_,5,u_,16,[0,a(os),[0,a(bB),[0,a(aM),0]]]],a2l=a(gO),a2m=a(qz),a2n=a(fg),a2p=[0,a(d),dp,11,dp,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a2k=[0,a(aO),hz,43,hz,70,[0,a(vw),[0,a(bB),[0,a(aM),0]]]],a2g=a(p),a2h=a(fg),a2i=a(gO),a2j=a(fg),a2q=[0,a(d),dp,11,dp,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a2d=[0,a(Q),F7,5,F7,16,[0,a(os),[0,a(bn),[0,a(L),0]]]],a2a=a(gB),a2b=a(qW),a2c=a(fp),a2e=[0,a(d),dp,11,dp,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a1$=[0,a(Q),AN,31,AN,58,[0,a(vw),[0,a(bn),[0,a(L),0]]]],a17=a(p),a18=a(fp),a19=a(gB),a1_=a(fp),a2f=[0,a(d),dp,11,dp,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a16=[0,a(d),dp,47,dp,53,[0,a(D),[0,a(A),[0,a(e),0]]]],a10=[0,a(d),iS,14,iS,50,[0,a(D),[0,a(A),[0,a(e),0]]]],a1U=[0,a(E),hA,14,hA,64,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a1Q=[0,a(E),hn,14,hn,59,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a1M=[0,a(Q),A5,14,A5,33,[0,a(C0),[0,a(bn),[0,a(L),0]]]],a1L=a(AI),a1H=[0,a(Q),vr,14,vr,33,[0,a(CD),[0,a(bn),[0,a(L),0]]]],a1G=a(se),a1C=[0,a(Q),Dh,14,Dh,41,[0,a(C0),[0,a(bn),[0,a(L),0]]]],a1B=a("390000"),a1x=[0,a(Q),Ei,14,Ei,41,[0,a(CD),[0,a(bn),[0,a(L),0]]]],a1w=a(qH),a1s=[0,a(Q),vz,14,vz,41,[0,a("Article 36"),[0,a(bn),[0,a(L),0]]]],a1r=a(id),a1n=[0,a(fc),C6,14,C6,36,[0,a(C_),[0,a(zh),0]]],a1l=a(vB),a1m=a(et),a1h=[0,a(Q),xk,14,xk,40,[0,a("Article 35"),[0,a(bn),[0,a(L),0]]]],a1g=a(kk),a1i=[0,a(d),ol,11,ol,37,[0,a(D),[0,a(A),[0,a(e),0]]]],a1f=[0,a(d),ol,11,ol,37,[0,a(D),[0,a(A),[0,a(e),0]]]],a1j=[0,a(V),[0,a("montant_forfaitaire_d842_6"),0]],a1o=[0,a(d),oa,11,oa,33,[0,a(D),[0,a(A),[0,a(e),0]]]],a1k=[0,a(d),oa,11,oa,33,[0,a(D),[0,a(A),[0,a(e),0]]]],a1p=[0,a(V),[0,a(FD),0]],a1t=[0,a(d),o7,11,o7,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a1q=[0,a(d),o7,11,o7,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a1u=[0,a(V),[0,a("montant_minimal_aide_d842_6"),0]],a1y=[0,a(d),lS,11,lS,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a1v=[0,a(d),lS,11,lS,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a1z=[0,a(V),[0,a("montant_forfaitaire_d842_11"),0]],a1D=[0,a(d),mV,11,mV,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a1A=[0,a(d),mV,11,mV,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a1E=[0,a(V),[0,a("montant_forfaitaire_d842_12"),0]],a1I=[0,a(d),oT,11,oT,30,[0,a(D),[0,a(A),[0,a(e),0]]]],a1F=[0,a(d),oT,11,oT,30,[0,a(D),[0,a(A),[0,a(e),0]]]],a1J=[0,a(V),[0,a("coefficient_d842_11"),0]],a1N=[0,a(d),me,11,me,30,[0,a(D),[0,a(A),[0,a(e),0]]]],a1K=[0,a(d),me,11,me,30,[0,a(D),[0,a(A),[0,a(e),0]]]],a1O=[0,a(V),[0,a("coefficient_d842_12"),0]],a1R=[0,a(E),hn,14,hn,59,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a1S=[0,a(V),[0,a(nk),0]],a1P=[0,a(E),hn,14,hn,59,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a1V=[0,a(E),hA,14,hA,64,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a1W=[0,a(V),[0,a(n2),0]],a1T=[0,a(E),hA,14,hA,64,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a1X=[0,a(V),[0,a(ga),[0,a(kq),0]]],a1Y=[0,a(V),[0,a(ga),[0,a(kq),0]]],a11=[0,a(d),iS,14,iS,50,[0,a(D),[0,a(A),[0,a(e),0]]]],a12=[0,a(V),[0,a(kA),0]],a1Z=[0,a(d),iS,14,iS,50,[0,a(D),[0,a(A),[0,a(e),0]]]],a13=[0,a(V),[0,a(eJ),[0,a(bk),0]]],a14=[0,a(V),[0,a(eJ),[0,a(bk),0]]],a2r=[0,a(d),dp,11,dp,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a15=[0,a(d),dp,11,dp,38,[0,a(D),[0,a(A),[0,a(e),0]]]],a2s=[0,a(V),[0,a(qA),0]],a2y=[0,a(V),[0,a(bI),0]],bhN=[0,a(V),[0,a(b$),0]],bhT=[0,a(d),fU,11,fU,42,[0,a(D),[0,a(A),[0,a(e),0]]]],bhO=[0,a(d),fU,11,fU,42,[0,a(D),[0,a(A),[0,a(e),0]]]],bhU=[0,a(V),[0,a("seuil_minimal_ressources_m\xc3\xa9nage"),0]],bhY=[0,a(V),[0,a(dc),0]],bir=[0,a(V),[0,a(dD),0]],biz=[0,a(d),iT,10,iT,15,[0,a(D),[0,a(A),[0,a(e),0]]]],bis=[0,a(d),iT,10,iT,15,[0,a(D),[0,a(A),[0,a(e),0]]]],biA=[0,a(V),[0,a(C2),0]],biR=[0,a(d),hY,11,hY,36,[0,a(D),[0,a(A),[0,a(e),0]]]],biB=[0,a(d),hY,11,hY,36,[0,a(D),[0,a(A),[0,a(e),0]]]],biS=[0,a(V),[0,a("plafond_mensualit\xc3\xa9_d842_6"),0]],biV=[0,a(E),js,14,js,75,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],biW=[0,a(V),[0,a(mM),0]],biT=[0,a(E),js,14,js,75,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],biZ=[0,a(E),hF,14,hF,69,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bi0=[0,a(V),[0,a(oo),0]],biX=[0,a(E),hF,14,hF,69,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bi3=[0,a(E),hv,14,hv,70,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bi4=[0,a(V),[0,a(mB),0]],bi1=[0,a(E),hv,14,hv,70,[0,a(bD),[0,a(an),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],bi5=[0,a(V),[0,a(fJ),[0,a(dP),0]]],bi6=[0,a(V),[0,a(fJ),[0,a(dP),0]]],bi_=[0,a(d),ju,14,ju,59,[0,a(D),[0,a(A),[0,a(e),0]]]],bi$=[0,a(V),[0,a(x2),0]],bi7=[0,a(d),ju,14,ju,59,[0,a(D),[0,a(A),[0,a(e),0]]]],bjc=[0,a(d),ix,14,ix,61,[0,a(D),[0,a(A),[0,a(e),0]]]],bjd=[0,a(V),[0,a(zD),0]],bja=[0,a(d),ix,14,ix,61,[0,a(D),[0,a(A),[0,a(e),0]]]],bjg=[0,a(d),jo,14,jo,67,[0,a(D),[0,a(A),[0,a(e),0]]]],bjh=[0,a(V),[0,a(vF),0]],bje=[0,a(d),jo,14,jo,67,[0,a(D),[0,a(A),[0,a(e),0]]]],bjk=[0,a(d),iY,14,iY,65,[0,a(D),[0,a(A),[0,a(e),0]]]],bjl=[0,a(V),[0,a(FA),0]],bji=[0,a(d),iY,14,iY,65,[0,a(D),[0,a(A),[0,a(e),0]]]],bjo=[0,a(d),ih,14,ih,70,[0,a(D),[0,a(A),[0,a(e),0]]]],bjp=[0,a(V),[0,a(Cu),0]],bjm=[0,a(d),ih,14,ih,70,[0,a(D),[0,a(A),[0,a(e),0]]]],bjs=[0,a(d),i1,14,i1,44,[0,a(D),[0,a(A),[0,a(e),0]]]],bjt=[0,a(V),[0,a(CG),0]],bjq=[0,a(d),i1,14,i1,44,[0,a(D),[0,a(A),[0,a(e),0]]]],bjw=[0,a(d),hP,14,hP,53,[0,a(D),[0,a(A),[0,a(e),0]]]],bjx=[0,a(V),[0,a(Fb),0]],bju=[0,a(d),hP,14,hP,53,[0,a(D),[0,a(A),[0,a(e),0]]]],bjB=[0,a(d),gE,14,gE,49,[0,a(D),[0,a(A),[0,a(e),0]]]],bjC=[0,a(V),[0,a(wn),0]],bjy=[0,a(d),gE,14,gE,49,[0,a(D),[0,a(A),[0,a(e),0]]]],bjJ=[0,a(V),[0,a(nL),[0,a(au),0]]],bjK=[0,a(V),[0,a(nL),[0,a(au),0]]],bjP=[0,a(d),gS,11,gS,47,[0,a(D),[0,a(A),[0,a(e),0]]]],bjL=[0,a(d),gS,11,gS,47,[0,a(D),[0,a(A),[0,a(e),0]]]],bjQ=[0,a(V),[0,a("seuil_minimal_d\xc3\xa9pense_nette_minimale"),0]],bjT=[0,a(d),oh,11,oh,30,[0,a(D),[0,a(A),[0,a(e),0]]]],bjR=[0,a(d),oh,11,oh,30,[0,a(D),[0,a(A),[0,a(e),0]]]],bjU=[0,a(V),[0,a(sm),0]],bjX=[0,a(d),kz,11,kz,30,[0,a(D),[0,a(A),[0,a(e),0]]]],bjV=[0,a(d),kz,11,kz,30,[0,a(D),[0,a(A),[0,a(e),0]]]],bjY=[0,a(V),[0,a(q7),0]],bj1=[0,a(d),kP,11,kP,38,[0,a(D),[0,a(A),[0,a(e),0]]]],bjZ=[0,a(d),kP,11,kP,38,[0,a(D),[0,a(A),[0,a(e),0]]]],bj2=[0,a(V),[0,a(q4),0]],bj$=[0,a(V),[0,a(eK),0]],bkc=[0,a(d),m9,12,m9,31,[0,a(D),[0,a(A),[0,a(e),0]]]],bka=[0,a(d),m9,12,m9,31,[0,a(D),[0,a(A),[0,a(e),0]]]],bkd=[0,a(V),[0,a(cX),0]],bkq=[0,a(V),[0,a(er),0]],bkF=[0,a(V),[0,a(bJ),0]],bkO=[0,a(V),[0,a(fm),0]],a1c=[0,a(E),yE,14,yE,36,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a09=[0,a(ao),[0,a(bJ),[0,a(ac),0]]],a0_=[0,a(ao),[0,a(bJ),0]],a0$=[0,a(ao),[0,a(bJ),[0,a(ae),0]]],a1a=[0,a(ao),[0,a(bJ),0]],a1b=a(p),a1d=[0,a(d),nd,10,nd,25,[0,a(N),[0,a(A),[0,a(e),0]]]],a08=[0,a(d),nd,10,nd,25,[0,a(N),[0,a(A),[0,a(e),0]]]],a05=[0,a(E),xG,14,xG,36,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a0U=[0,a(ao),[0,a(kG),[0,a(ac),0]]],a0V=[0,a(ao),[0,a(kG),0]],a0W=[0,a(ao),[0,a(kG),[0,a(ae),0]]],a0X=[0,a(ao),[0,a(kG),0]],a0Y=[0,a(bk),[0,a(bQ),[0,a(ac),0]]],a0Z=[0,a(bk),[0,a(bQ),0]],a00=[0,a(bk),[0,a(bQ),[0,a(ae),0]]],a01=[0,a(bk),[0,a(bQ),0]],a02=a(kY),a03=a(p),a04=a(p),a06=[0,a(d),lU,10,lU,40,[0,a(N),[0,a(A),[0,a(e),0]]]],a0T=[0,a(d),lU,10,lU,40,[0,a(N),[0,a(A),[0,a(e),0]]]],a0Q=[0,a(E),w0,14,w0,36,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a0M=[0,a(ao),[0,a(er),[0,a(ac),0]]],a0N=[0,a(ao),[0,a(er),0]],a0O=[0,a(ao),[0,a(er),[0,a(ae),0]]],a0P=[0,a(ao),[0,a(er),0]],a0R=[0,a(d),kB,10,kB,19,[0,a(N),[0,a(A),[0,a(e),0]]]],a0L=[0,a(d),kB,10,kB,19,[0,a(N),[0,a(A),[0,a(e),0]]]],a0I=[0,a(E),AQ,14,AQ,36,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a0y=[0,a(ao),[0,a(bI),[0,a(ac),0]]],a0z=[0,a(ao),[0,a(bI),0]],a0A=[0,a(ao),[0,a(bI),[0,a(ae),0]]],a0B=[0,a(ao),[0,a(bI),0]],a0C=[0,a(ao),[0,a(eK),[0,a(ac),0]]],a0D=[0,a(ao),[0,a(eK),0]],a0E=[0,a(ao),[0,a(eK),[0,a(ae),0]]],a0F=[0,a(ao),[0,a(eK),0]],a0G=a(p),a0H=a(p),a0J=[0,a(d),l7,10,l7,32,[0,a(N),[0,a(A),[0,a(e),0]]]],a0x=[0,a(d),l7,10,l7,32,[0,a(N),[0,a(A),[0,a(e),0]]]],a0u=[0,a(E),DJ,14,DJ,33,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a0q=[0,a(E),yK,14,yK,47,[0,a(CQ),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a0h=[0,a(ao),[0,a(dc),[0,a(ac),0]]],a0i=[0,a(ao),[0,a(dc),0]],a0j=[0,a(ao),[0,a(dc),[0,a(ae),0]]],a0k=[0,a(ao),[0,a(dc),0]],a0l=[0,a(ao),[0,a(dc),[0,a(ac),0]]],a0m=[0,a(ao),[0,a(dc),0]],a0n=[0,a(ao),[0,a(dc),[0,a(ae),0]]],a0o=[0,a(ao),[0,a(dc),0]],a0p=a(p),a0r=[0,a(d),n1,11,n1,44,[0,a(N),[0,a(A),[0,a(e),0]]]],a0g=[0,a(d),n1,11,n1,44,[0,a(N),[0,a(A),[0,a(e),0]]]],a0d=[0,a(E),Fe,14,Fe,27,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZ$=[0,a(E),BO,14,BO,36,[0,a(CQ),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],a0a=[0,a(d),mf,11,mf,33,[0,a(N),[0,a(A),[0,a(e),0]]]],aZ_=[0,a(d),mf,11,mf,33,[0,a(N),[0,a(A),[0,a(e),0]]]],aZ7=[0,a(E),y6,14,y6,41,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZ1=[0,a(E),ht,14,ht,70,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZX=[0,a(E),h6,14,h6,69,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZT=[0,a(E),hU,14,hU,75,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZP=[0,a(E),D8,14,D8,36,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZN=a(p),aZO=a(p),aZQ=[0,a(d),oB,10,oB,32,[0,a(N),[0,a(A),[0,a(e),0]]]],aZM=[0,a(d),oB,10,oB,32,[0,a(N),[0,a(A),[0,a(e),0]]]],aZI=[0,a(Q),yh,6,yh,79,[0,a(fG),[0,a(fZ),[0,a(L),0]]]],aZG=a("8708"),aZH=a("13559"),aZJ=[0,a(d),cg,12,cg,29,[0,a(N),[0,a(A),[0,a(e),0]]]],aZE=[0,a(Q),4144,6,4145,38,[0,a(fG),[0,a(fZ),[0,a(L),0]]]],aZC=a("21362"),aZD=a("33196"),aZF=[0,a(d),cg,12,cg,29,[0,a(N),[0,a(A),[0,a(e),0]]]],aZz=[0,a(Q),4162,6,4163,24,[0,a(fG),[0,a(fZ),[0,a(L),0]]]],aZx=a(Ae),aZy=a(AA),aZA=[0,a(d),cg,12,cg,29,[0,a(N),[0,a(A),[0,a(e),0]]]],aZw=[0,a(Q),4126,6,4127,46,[0,a(fG),[0,a(fZ),[0,a(L),0]]]],aZu=a(Ae),aZv=a(AA),aZB=[0,a(d),cg,12,cg,29,[0,a(N),[0,a(A),[0,a(e),0]]]],aZs=[0,a(aO),sq,6,sq,79,[0,a(fG),[0,a(bB),[0,a(aM),0]]]],aZq=a("8414"),aZr=a("13100"),aZt=[0,a(d),cg,12,cg,29,[0,a(N),[0,a(A),[0,a(e),0]]]],aZo=[0,a(aO),j6,6,747,38,[0,a(fG),[0,a(bB),[0,a(aM),0]]]],aZm=a("20640"),aZn=a("32073"),aZp=[0,a(d),cg,12,cg,29,[0,a(N),[0,a(A),[0,a(e),0]]]],aZj=[0,a(aO),765,6,766,24,[0,a(fG),[0,a(bB),[0,a(aM),0]]]],aZh=a(D7),aZi=a(zW),aZk=[0,a(d),cg,12,cg,29,[0,a(N),[0,a(A),[0,a(e),0]]]],aZg=[0,a(aO),727,6,728,46,[0,a(fG),[0,a(bB),[0,a(aM),0]]]],aZe=a(D7),aZf=a(zW),aZl=[0,a(d),cg,12,cg,29,[0,a(N),[0,a(A),[0,a(e),0]]]],aY$=[0,a(Q),D_,14,D_,41,[0,a(B8),[0,a(fZ),[0,a(L),0]]]],aY7=a(p),aY8=a(fp),aY9=a(gB),aY_=a(fp),aZa=[0,a(d),fD,12,fD,39,[0,a(N),[0,a(A),[0,a(e),0]]]],aY5=[0,a(aO),Bz,14,Bz,41,[0,a(B8),[0,a(bB),[0,a(aM),0]]]],aY1=a(p),aY2=a(fg),aY3=a(gO),aY4=a(fg),aY6=[0,a(d),fD,12,fD,39,[0,a(N),[0,a(A),[0,a(e),0]]]],aYV=[0,a(E),nN,14,nN,61,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aYW=[0,a(E),nN,14,nN,61,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aYX=[0,a(ao),[0,a(Ek),0]],aYS=[0,a(d),h5,14,h5,49,[0,a(N),[0,a(A),[0,a(e),0]]]],aYO=[0,a(d),i9,14,i9,53,[0,a(N),[0,a(A),[0,a(e),0]]]],aYK=[0,a(d),iv,14,iv,44,[0,a(N),[0,a(A),[0,a(e),0]]]],aYG=[0,a(d),iz,14,iz,70,[0,a(N),[0,a(A),[0,a(e),0]]]],aYC=[0,a(d),hM,14,hM,65,[0,a(N),[0,a(A),[0,a(e),0]]]],aYy=[0,a(d),hi,14,hi,67,[0,a(N),[0,a(A),[0,a(e),0]]]],aYu=[0,a(d),iL,14,iL,61,[0,a(N),[0,a(A),[0,a(e),0]]]],aYq=[0,a(d),iP,14,iP,59,[0,a(N),[0,a(A),[0,a(e),0]]]],aYk=[0,a(d),f7,14,f7,50,[0,a(N),[0,a(A),[0,a(e),0]]]],aYe=[0,a(E),hr,14,hr,64,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aYa=[0,a(E),jq,14,jq,59,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aX8=[0,a(E),is,14,is,55,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aX4=[0,a(Q),zb,14,zb,51,[0,a("Article 44"),[0,a(fZ),[0,a(L),0]]]],aX3=a(qH),aXZ=[0,a(Q),va,14,va,41,[0,a("Article 41"),[0,a(fZ),[0,a(L),0]]]],aXY=a(kk),aXU=[0,a(Q),CO,14,CO,42,[0,a("Article 42"),[0,a(fZ),[0,a(L),0]]]],aXT=a(id),aXV=[0,a(d),i5,11,i5,39,[0,a(N),[0,a(A),[0,a(e),0]]]],aXS=[0,a(d),i5,11,i5,39,[0,a(N),[0,a(A),[0,a(e),0]]]],aXW=[0,a(ao),[0,a("montant_minimal_aide_d842_15"),0]],aX0=[0,a(d),l0,11,l0,38,[0,a(N),[0,a(A),[0,a(e),0]]]],aXX=[0,a(d),l0,11,l0,38,[0,a(N),[0,a(A),[0,a(e),0]]]],aX1=[0,a(ao),[0,a("montant_forfaitaire_d842_15"),0]],aX5=[0,a(d),ns,11,ns,48,[0,a(N),[0,a(A),[0,a(e),0]]]],aX2=[0,a(d),ns,11,ns,48,[0,a(N),[0,a(A),[0,a(e),0]]]],aX6=[0,a(ao),[0,a("montant_minimal_d\xc3\xa9pense_nette_d842_17"),0]],aX9=[0,a(E),is,14,is,55,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aX_=[0,a(ao),[0,a(BI),0]],aX7=[0,a(E),is,14,is,55,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aYb=[0,a(E),jq,14,jq,59,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aYc=[0,a(ao),[0,a(nk),0]],aX$=[0,a(E),jq,14,jq,59,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aYf=[0,a(E),hr,14,hr,64,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aYg=[0,a(ao),[0,a(n2),0]],aYd=[0,a(E),hr,14,hr,64,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aYh=[0,a(ao),[0,a(ga),[0,a(ky),0]]],aYi=[0,a(ao),[0,a(ga),[0,a(ky),0]]],aYl=[0,a(d),f7,14,f7,50,[0,a(N),[0,a(A),[0,a(e),0]]]],aYm=[0,a(ao),[0,a(kA),0]],aYj=[0,a(d),f7,14,f7,50,[0,a(N),[0,a(A),[0,a(e),0]]]],aYn=[0,a(ao),[0,a(eJ),[0,a(bk),0]]],aYo=[0,a(ao),[0,a(eJ),[0,a(bk),0]]],aYr=[0,a(d),iP,14,iP,59,[0,a(N),[0,a(A),[0,a(e),0]]]],aYs=[0,a(ao),[0,a(x2),0]],aYp=[0,a(d),iP,14,iP,59,[0,a(N),[0,a(A),[0,a(e),0]]]],aYv=[0,a(d),iL,14,iL,61,[0,a(N),[0,a(A),[0,a(e),0]]]],aYw=[0,a(ao),[0,a(zD),0]],aYt=[0,a(d),iL,14,iL,61,[0,a(N),[0,a(A),[0,a(e),0]]]],aYz=[0,a(d),hi,14,hi,67,[0,a(N),[0,a(A),[0,a(e),0]]]],aYA=[0,a(ao),[0,a(vF),0]],aYx=[0,a(d),hi,14,hi,67,[0,a(N),[0,a(A),[0,a(e),0]]]],aYD=[0,a(d),hM,14,hM,65,[0,a(N),[0,a(A),[0,a(e),0]]]],aYE=[0,a(ao),[0,a(FA),0]],aYB=[0,a(d),hM,14,hM,65,[0,a(N),[0,a(A),[0,a(e),0]]]],aYH=[0,a(d),iz,14,iz,70,[0,a(N),[0,a(A),[0,a(e),0]]]],aYI=[0,a(ao),[0,a(Cu),0]],aYF=[0,a(d),iz,14,iz,70,[0,a(N),[0,a(A),[0,a(e),0]]]],aYL=[0,a(d),iv,14,iv,44,[0,a(N),[0,a(A),[0,a(e),0]]]],aYM=[0,a(ao),[0,a(CG),0]],aYJ=[0,a(d),iv,14,iv,44,[0,a(N),[0,a(A),[0,a(e),0]]]],aYP=[0,a(d),i9,14,i9,53,[0,a(N),[0,a(A),[0,a(e),0]]]],aYQ=[0,a(ao),[0,a(Fb),0]],aYN=[0,a(d),i9,14,i9,53,[0,a(N),[0,a(A),[0,a(e),0]]]],aYT=[0,a(d),h5,14,h5,49,[0,a(N),[0,a(A),[0,a(e),0]]]],aYU=[0,a(ao),[0,a(wn),0]],aYR=[0,a(d),h5,14,h5,49,[0,a(N),[0,a(A),[0,a(e),0]]]],aYY=[0,a(ao),[0,a(nL),[0,a(au),0]]],aYZ=[0,a(ao),[0,a(nL),[0,a(au),0]]],aZb=[0,a(d),fD,12,fD,39,[0,a(N),[0,a(A),[0,a(e),0]]]],aY0=[0,a(d),fD,12,fD,39,[0,a(N),[0,a(A),[0,a(e),0]]]],aZc=[0,a(ao),[0,a(qA),0]],aZK=[0,a(d),cg,12,cg,29,[0,a(N),[0,a(A),[0,a(e),0]]]],aZd=[0,a(d),cg,12,cg,29,[0,a(N),[0,a(A),[0,a(e),0]]]],aZL=[0,a(ao),[0,a(u$),0]],aZR=[0,a(ao),[0,a(bI),0]],aZU=[0,a(E),hU,14,hU,75,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZV=[0,a(ao),[0,a(mM),0]],aZS=[0,a(E),hU,14,hU,75,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZY=[0,a(E),h6,14,h6,69,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZZ=[0,a(ao),[0,a(oo),0]],aZW=[0,a(E),h6,14,h6,69,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZ2=[0,a(E),ht,14,ht,70,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZ3=[0,a(ao),[0,a(mB),0]],aZ0=[0,a(E),ht,14,ht,70,[0,a(bz),[0,a(ap),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aZ4=[0,a(ao),[0,a(fJ),[0,a(dP),0]]],aZ5=[0,a(ao),[0,a(fJ),[0,a(dP),0]]],aZ8=[0,a(d),na,12,na,39,[0,a(N),[0,a(A),[0,a(e),0]]]],aZ6=[0,a(d),na,12,na,39,[0,a(N),[0,a(A),[0,a(e),0]]]],aZ9=[0,a(ao),[0,a(q4),0]],a0b=[0,a(ao),[0,a(dc),0]],a0e=[0,a(d),nu,12,nu,25,[0,a(N),[0,a(A),[0,a(e),0]]]],a0c=[0,a(d),nu,12,nu,25,[0,a(N),[0,a(A),[0,a(e),0]]]],a0f=[0,a(ao),[0,a(FS),0]],a0s=[0,a(ao),[0,a(eK),0]],a0v=[0,a(d),nG,12,nG,31,[0,a(N),[0,a(A),[0,a(e),0]]]],a0t=[0,a(d),nG,12,nG,31,[0,a(N),[0,a(A),[0,a(e),0]]]],a0w=[0,a(ao),[0,a(cX),0]],a0K=[0,a(ao),[0,a(er),0]],a0S=[0,a(ao),[0,a(kG),0]],a07=[0,a(ao),[0,a(bJ),0]],a1e=[0,a(ao),[0,a(fm),0]],aXO=[0,a(E),we,24,we,43,[0,a(Fu),[0,a(so),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aXN=a(p),aXP=[0,a(d),ia,12,ia,31,[0,a(K),[0,a(A),[0,a(e),0]]]],aXM=[0,a(d),ra,14,ra,33,[0,a(K),[0,a(A),[0,a(e),0]]]],aXH=[0,a(E),vV,24,vV,46,[0,a(Fu),[0,a(so),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aXI=[0,a(d),i_,12,i_,34,[0,a(K),[0,a(A),[0,a(e),0]]]],aXG=[0,a(d),Br,14,Br,36,[0,a(K),[0,a(A),[0,a(e),0]]]],aXC=[0,a(aD),[0,a(fm),[0,a(ac),0]]],aXD=[0,a(aD),[0,a(fm),0]],aXE=[0,a(aD),[0,a(fm),[0,a(ae),0]]],aXF=[0,a(aD),[0,a(fm),0]],aXJ=[0,a(d),i_,12,i_,34,[0,a(K),[0,a(A),[0,a(e),0]]]],aXB=[0,a(d),i_,12,i_,34,[0,a(K),[0,a(A),[0,a(e),0]]]],aXw=[0,a(d),gA,14,gA,55,[0,a(K),[0,a(A),[0,a(e),0]]]],aXs=[0,a(d),eU,14,eU,59,[0,a(K),[0,a(A),[0,a(e),0]]]],aXo=[0,a(d),gJ,14,gJ,43,[0,a(K),[0,a(A),[0,a(e),0]]]],aXk=[0,a(d),hC,14,hC,42,[0,a(K),[0,a(A),[0,a(e),0]]]],aXg=[0,a(d),rQ,5,rh,63,[0,a(K),[0,a(A),[0,a(e),0]]]],aXc=[0,a(d),gF,14,gF,53,[0,a(K),[0,a(A),[0,a(e),0]]]],aW_=[0,a(d),jr,14,jr,37,[0,a(K),[0,a(A),[0,a(e),0]]]],aW6=[0,a(d),jd,14,jd,63,[0,a(K),[0,a(A),[0,a(e),0]]]],aW2=[0,a(d),hx,14,hx,58,[0,a(K),[0,a(A),[0,a(e),0]]]],aWY=[0,a(d),ij,14,ij,46,[0,a(K),[0,a(A),[0,a(e),0]]]],aWU=[0,a(d),i6,14,i6,78,[0,a(K),[0,a(A),[0,a(e),0]]]],aWQ=[0,a(d),hG,14,hG,60,[0,a(K),[0,a(A),[0,a(e),0]]]],aWM=[0,a(d),jh,14,jh,48,[0,a(K),[0,a(A),[0,a(e),0]]]],aWN=[0,a(d),jh,14,jh,48,[0,a(K),[0,a(A),[0,a(e),0]]]],aWO=[0,a(bh),[0,a("calcul_apl_locatif.loyer_principal_base"),0]],aWL=[0,a(d),jh,14,jh,48,[0,a(K),[0,a(A),[0,a(e),0]]]],aWR=[0,a(d),hG,14,hG,60,[0,a(K),[0,a(A),[0,a(e),0]]]],aWS=[0,a(bh),[0,a("calcul_apl_locatif.ressources_m\xc3\xa9nage_arrondies"),0]],aWP=[0,a(d),hG,14,hG,60,[0,a(K),[0,a(A),[0,a(e),0]]]],aWV=[0,a(d),i6,14,i6,78,[0,a(K),[0,a(A),[0,a(e),0]]]],aWW=[0,a(bh),[0,a("calcul_apl_locatif.b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s"),0]],aWT=[0,a(d),i6,14,i6,78,[0,a(K),[0,a(A),[0,a(e),0]]]],aWZ=[0,a(d),ij,14,ij,46,[0,a(K),[0,a(A),[0,a(e),0]]]],aW0=[0,a(bh),[0,a("calcul_apl_locatif.date_courante"),0]],aWX=[0,a(d),ij,14,ij,46,[0,a(K),[0,a(A),[0,a(e),0]]]],aW3=[0,a(d),hx,14,hx,58,[0,a(K),[0,a(A),[0,a(e),0]]]],aW4=[0,a(bh),[0,a("calcul_apl_locatif.nombre_personnes_\xc3\xa0_charge"),0]],aW1=[0,a(d),hx,14,hx,58,[0,a(K),[0,a(A),[0,a(e),0]]]],aW7=[0,a(d),jd,14,jd,63,[0,a(K),[0,a(A),[0,a(e),0]]]],aW8=[0,a(bh),[0,a("calcul_apl_locatif.situation_familiale_calcul_apl"),0]],aW5=[0,a(d),jd,14,jd,63,[0,a(K),[0,a(A),[0,a(e),0]]]],aW$=[0,a(d),jr,14,jr,37,[0,a(K),[0,a(A),[0,a(e),0]]]],aXa=[0,a(bh),[0,a("calcul_apl_locatif.zone"),0]],aW9=[0,a(d),jr,14,jr,37,[0,a(K),[0,a(A),[0,a(e),0]]]],aXd=[0,a(d),gF,14,gF,53,[0,a(K),[0,a(A),[0,a(e),0]]]],aXe=[0,a(bh),[0,a("calcul_apl_locatif.logement_est_chambre"),0]],aXb=[0,a(d),gF,14,gF,53,[0,a(K),[0,a(A),[0,a(e),0]]]],aXh=[0,a(d),rQ,5,rh,63,[0,a(K),[0,a(A),[0,a(e),0]]]],aXi=[0,a(bh),[0,a("calcul_apl_locatif.\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers"),0]],aXf=[0,a(d),rQ,5,rh,63,[0,a(K),[0,a(A),[0,a(e),0]]]],aXl=[0,a(d),hC,14,hC,42,[0,a(K),[0,a(A),[0,a(e),0]]]],aXm=[0,a(bh),[0,a("calcul_apl_locatif.type_aide"),0]],aXj=[0,a(d),hC,14,hC,42,[0,a(K),[0,a(A),[0,a(e),0]]]],aXp=[0,a(d),gJ,14,gJ,43,[0,a(K),[0,a(A),[0,a(e),0]]]],aXq=[0,a(bh),[0,a("calcul_apl_locatif.colocation"),0]],aXn=[0,a(d),gJ,14,gJ,43,[0,a(K),[0,a(A),[0,a(e),0]]]],aXt=[0,a(d),eU,14,eU,59,[0,a(K),[0,a(A),[0,a(e),0]]]],aXu=[0,a(bh),[0,a("calcul_apl_locatif.r\xc3\xa9duction_loyer_solidarit\xc3\xa9"),0]],aXr=[0,a(d),eU,14,eU,59,[0,a(K),[0,a(A),[0,a(e),0]]]],aXx=[0,a(d),gA,14,gA,55,[0,a(K),[0,a(A),[0,a(e),0]]]],aXy=[0,a(bh),[0,a("calcul_apl_locatif.logement_meubl\xc3\xa9_d842_2"),0]],aXv=[0,a(d),gA,14,gA,55,[0,a(K),[0,a(A),[0,a(e),0]]]],aXz=[0,a(bh),[0,a(E9),[0,a(aD),0]]],aXA=[0,a(bh),[0,a(E9),[0,a(aD),0]]],aXK=[0,a(bh),[0,a(aw),0]],aXQ=[0,a(d),ia,12,ia,31,[0,a(K),[0,a(A),[0,a(e),0]]]],aXL=[0,a(d),ia,12,ia,31,[0,a(K),[0,a(A),[0,a(e),0]]]],aXR=[0,a(bh),[0,a(cX),0]],aWF=[0,a(mt),67,5,71,21,[0,a(gC),[0,a(gz),[0,a(ed),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],aWG=[0,a(bG),40,12,40,24,[0,a(bK),0]],aWE=[0,a(mt),56,5,57,50,[0,a(gC),[0,a(gz),[0,a(ed),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],aWH=[0,a(bG),40,12,40,24,[0,a(bK),0]],aWI=[0,a(bG),40,12,40,24,[0,a(bK),0]],aWD=[0,a(bG),40,12,40,24,[0,a(bK),0]],aWJ=[0,a(bG),40,12,40,24,[0,a(bK),0]],aWC=[0,a(bG),40,12,40,24,[0,a(bK),0]],aWy=[0,a(mt),77,5,81,24,[0,a(gC),[0,a(gz),[0,a(ed),[0,a(az),[0,a(aa),[0,a(af),0]]]]]]],aWz=[0,a(bG),41,12,41,31,[0,a(bK),0]],aWx=[0,a(bG),41,12,41,31,[0,a(bK),0]],aWA=[0,a(bG),41,12,41,31,[0,a(bK),0]],aWw=[0,a(bG),41,12,41,31,[0,a(bK),0]],aWs=[0,a(q6),62,18,62,41,[0,a(xK),[0,a(eX),[0,a(gK),[0,a(d0),[0,a(c5),[0,a(af),0]]]]]]],aWq=a(oR),aWr=a(n0),aWt=[0,a(bG),42,11,42,27,[0,a(bK),0]],aWp=[0,a(q6),31,14,31,30,[0,a(lW),[0,a(nR),[0,a(ed),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],aWn=a(oR),aWo=a(n0),aWc=[5,0],aWd=[4,0],aWe=[3,0],aWf=[2,0],aWg=[1,0],aWh=[0,0],aWi=[0,a(mt),dl,5,w5,30,[0,a(CP),[0,a(yD),[0,a(ke),[0,a(d0),[0,a(aa),[0,a(af),0]]]]]]],aWj=[0,a(bG),44,12,44,35,[0,a(bK),0]],aWb=[0,a(bG),44,12,44,35,[0,a(bK),0]],aV7=[0,a(bG),51,14,51,28,[0,a(bK),0]],aV3=[0,a(bG),52,14,52,32,[0,a(bK),0]],aVZ=[0,a(q6),21,14,21,26,[0,a(lW),[0,a(nR),[0,a(ed),[0,a(az),[0,a(c5),[0,a(af),0]]]]]]],aV0=[0,a(bG),43,12,43,24,[0,a(bK),0]],aVY=[0,a(bG),43,12,43,24,[0,a(bK),0]],aV1=[0,a(cq),[0,a(za),0]],aV4=[0,a(bG),52,14,52,32,[0,a(bK),0]],aV5=[0,a(cq),[0,a(Fa),0]],aV2=[0,a(bG),52,14,52,32,[0,a(bK),0]],aV8=[0,a(bG),51,14,51,28,[0,a(bK),0]],aV9=[0,a(cq),[0,a(DH),0]],aV6=[0,a(bG),51,14,51,28,[0,a(bK),0]],aV_=[0,a(cq),[0,a(gd),[0,a(hl),0]]],aV$=[0,a(cq),[0,a(gd),[0,a(hl),0]]],aWk=[0,a(bG),44,12,44,35,[0,a(bK),0]],aWa=[0,a(bG),44,12,44,35,[0,a(bK),0]],aWl=[0,a(cq),[0,a(vg),0]],aWu=[0,a(bG),42,11,42,27,[0,a(bK),0]],aWm=[0,a(bG),42,11,42,27,[0,a(bK),0]],aWv=[0,a(cq),[0,a(Aj),0]],aWB=[0,a(cq),[0,a(iU),0]],aWK=[0,a(cq),[0,a(dg),0]],aVT=[0,a(E),rZ,14,rZ,32,[0,a(mG),[0,a(iC),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aVR=a(cI),aVS=a(p),aVM=[0,a(E),aR,6,gS,35,[0,a("Article R822-20"),[0,a("Sous-section 3 : Montant forfaitaire de ressources applicable aux \xc3\xa9tudiants"),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aVN=[0,a(d),jk,12,jk,39,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVL=[0,a(E),kE,14,kE,41,[0,a(l3),[0,a(l6),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aVH=[0,a(E),F9,14,F9,32,[0,a("Article R822-8"),[0,a(iC),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aVG=a(p),aVA=[0,a(E),iq,14,iq,65,[0,a(mG),[0,a(iC),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aVw=[0,a(E),y5,14,y5,33,[0,a("Article R822-10"),[0,a(iC),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aVn=a(p),aVo=a(p),aVt=a(X),aVu=a("90100"),aVv=a("135000"),aVp=a(p),aVq=a(p),aVr=a(p),aVs=a(p),aVj=[0,a(E),iu,14,iu,62,[0,a(l3),[0,a(l6),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aVi=a(p),aVe=[0,a(d),f5,51,f5,57,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVa=[0,a(Q),11,14,11,41,[0,a("Article 3"),[0,a(xL),[0,a(L),0]]]],aU$=a("9500"),aU7=[0,a(Q),21,14,21,41,[0,a("Article 4"),[0,a(xL),[0,a(L),0]]]],aU6=a("258900"),aU2=[0,a(d),E1,46,E1,52,[0,a(cc),[0,a(i),[0,a(e),0]]]],aU3=[0,a(d),jf,10,jf,15,[0,a(cc),[0,a(i),[0,a(e),0]]]],aU1=[0,a(d),jf,10,jf,15,[0,a(cc),[0,a(i),[0,a(e),0]]]],aU4=[0,a(dX),[0,a(C2),0]],aU8=[0,a(d),lX,11,lX,38,[0,a(cc),[0,a(i),[0,a(e),0]]]],aU5=[0,a(d),lX,11,lX,38,[0,a(cc),[0,a(i),[0,a(e),0]]]],aU9=[0,a(dX),[0,a("montant_forfaitaire_r_822_8"),0]],aVb=[0,a(d),mv,11,mv,38,[0,a(cc),[0,a(i),[0,a(e),0]]]],aU_=[0,a(d),mv,11,mv,38,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVc=[0,a(dX),[0,a("montant_forfaitaire_r_822_7"),0]],aVf=[0,a(d),f5,11,f5,42,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVd=[0,a(d),f5,11,f5,42,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVg=[0,a(dX),[0,a("ressources_forfaitaires_r822_20"),0]],aVk=[0,a(d),hh,11,hh,59,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVh=[0,a(d),hh,11,hh,59,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVl=[0,a(dX),[0,a("ressources_personnes_vivant_habituellement_foyer"),0]],aVx=[0,a(d),nV,11,nV,30,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVm=[0,a(d),nV,11,nV,30,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVy=[0,a(dX),[0,a("abattement_r_822_10"),0]],aVB=[0,a(E),iq,14,iq,65,[0,a(mG),[0,a(iC),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aVC=[0,a(dX),[0,a(DY),0]],aVz=[0,a(E),iq,14,iq,65,[0,a(mG),[0,a(iC),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aVD=[0,a(dX),[0,a(mU),[0,a(f_),0]]],aVE=[0,a(dX),[0,a(mU),[0,a(f_),0]]],aVI=[0,a(d),nB,11,nB,29,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVF=[0,a(d),nB,11,nB,29,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVJ=[0,a(dX),[0,a("abattement_r_822_8"),0]],aVO=[0,a(d),jk,12,jk,39,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVK=[0,a(d),jk,12,jk,39,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVP=[0,a(dX),[0,a("ressources_prises_en_compte"),0]],aVU=[0,a(d),mw,11,mw,29,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVQ=[0,a(d),mw,11,mw,29,[0,a(cc),[0,a(i),[0,a(e),0]]]],aVV=[0,a(dX),[0,a("abattement_r_822_7"),0]],aVW=[0,a(E),mA,13,Dp,74,[0,a(l3),[0,a(l6),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aVX=[0,a(E),mA,13,Dp,74,[0,a(l3),[0,a(l6),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aUR=[0,a(d),j5,14,j5,56,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUN=[0,a(d),B6,14,B6,63,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUL=a(b5),aUM=a(b5),aUH=[0,a(E),fb,14,fb,49,[0,a(kl),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aUD=[0,a(aU),[0,a(kO),[0,a(ac),0]]],aUE=[0,a(aU),[0,a(kO),0]],aUF=[0,a(aU),[0,a(kO),[0,a(ae),0]]],aUG=[0,a(aU),[0,a(kO),0]],aUx=a(Do),aUw=[0,a(E),1213,4,1219,48,[0,a(kl),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aUy=[0,a(d),dY,11,dY,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUr=[0,a(aU),[0,a(fk),[0,a(ac),0]]],aUs=[0,a(aU),[0,a(fk),0]],aUt=[0,a(aU),[0,a(fk),[0,a(ae),0]]],aUu=[0,a(aU),[0,a(fk),0]],aUv=[0,a(E),x$,5,x$,44,[0,a(kl),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aUz=[0,a(d),dY,11,dY,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUp=[0,a(E),1149,5,rT,44,[0,a(kl),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aUq=[0,a(d),dY,11,dY,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUo=[0,a(d),dY,11,dY,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUA=[0,a(d),dY,11,dY,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUn=[0,a(d),dY,11,dY,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUi=a(Do),aUj=[0,0],aUh=[0,a(E),1173,5,1189,10,[0,a(kl),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aUk=[0,a(d),fq,12,fq,30,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUg=[0,a(d),fq,12,fq,30,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUl=[0,a(d),fq,12,fq,30,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUf=[0,a(d),fq,12,fq,30,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUb=[0,a(d),As,5,u4,25,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUc=[0,a(d),fF,12,fF,23,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUa=[0,a(d),fF,12,fF,23,[0,a(Z),[0,a(i),[0,a(e),0]]]],aT8=[0,a(c6),Ge,14,Ge,31,[0,a("Article L351-8"),[0,a("Section 5 : Taux et montant de la pension"),[0,a("Chapitre 1er : Ouverture du droit, liquidation et calcul des pensions de retraite"),[0,a("Titre V : Assurance vieillesse - Assurance veuvage"),[0,a("Livre III : Dispositions relatives aux assurances sociales et \xc3\xa0 diverses cat\xc3\xa9gories de personnes rattach\xc3\xa9es au r\xc3\xa9gime g\xc3\xa9n\xc3\xa9rale"),[0,a(aa),[0,a(af),0]]]]]]]],aT2=[0,a(aG),72,5,73,52,[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]],aT3=[0,a(d),dy,11,dy,31,[0,a(Z),[0,a(i),[0,a(e),0]]]],aT1=[0,a(aG),65,5,68,52,[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]],aT4=[0,a(d),dy,11,dy,31,[0,a(Z),[0,a(i),[0,a(e),0]]]],aT0=[0,a(d),dy,11,dy,31,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTT=[0,a(aG),hS,18,hS,75,[0,a(mD),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aTS=a(p),aTU=[0,a(d),dE,11,dE,36,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTP=[5,0],aTQ=[4,0],aTR=[0,a(aG),vI,18,Ay,45,[0,a(mD),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aTO=a(p),aTV=[0,a(d),dE,11,dE,36,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTN=[0,a(E),Cw,5,Cw,58,[0,a(EX),[0,a(El),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aTW=[0,a(d),dE,11,dE,36,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTM=[0,a(aG),hj,33,hj,58,[0,a(mD),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aTL=a(p),aTH=[0,a(c6),cs,14,cs,32,[0,a(km),[0,a(j8),[0,a(ez),[0,a(eS),[0,a(eV),[0,a(eu),[0,a(jc),[0,a(aa),[0,a(af),0]]]]]]]]]],aTC=[0,a(aG),FU,18,FU,44,[0,a("Article L822-10"),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aTD=[0,a(d),fr,11,fr,58,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTB=[0,a(d),fr,11,fr,58,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTu=a(b5),aTt=a(b5),aTs=[0,a(aG),171,5,rA,65,[0,a(gx),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aTv=[0,a(d),d1,11,d1,45,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTr=[0,a(aG),156,5,158,30,[0,a(gx),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aTw=[0,a(d),d1,11,d1,45,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTq=[0,a(aG),cs,5,w5,33,[0,a(F6),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aTx=[0,a(d),d1,11,d1,45,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTp=[0,a(d),d1,11,d1,45,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTj=[0,a(aG),203,5,208,39,[0,a(DU),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aTk=[0,a(d),d_,11,d_,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTi=[0,a(aG),197,5,198,34,[0,a(DU),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aTl=[0,a(d),d_,11,d_,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTh=[0,a(d),d_,11,d_,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTc=[0,a(c6),329,5,As,34,[0,a(rS),[0,a(ry),[0,a(r0),[0,a(qJ),[0,a(rl),[0,a(a9),[0,a(af),0]]]]]]]],aTb=a("999840"),aTd=[0,a(d),cV,11,cV,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aS$=[0,a(c6),j5,5,335,34,[0,a(rS),[0,a(ry),[0,a(r0),[0,a(qJ),[0,a(rl),[0,a(a9),[0,a(af),0]]]]]]]],aS_=a("1041840"),aTa=[0,a(d),cV,11,cV,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aS8=[0,a(c6),339,5,340,34,[0,a(rS),[0,a(ry),[0,a(r0),[0,a(qJ),[0,a(rl),[0,a(a9),[0,a(af),0]]]]]]]],aS7=a("1083840"),aS9=[0,a(d),cV,11,cV,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aS5=[0,a(fc),58,5,59,33,[0,a('Circulaire de la CNAV 2023-3 du 09/01/2022 "Revalorisation \xc3\xa0 compter du 1er janvier 2023"'),[0,a(r_),0]]],aS4=a("1153302"),aS6=[0,a(d),cV,11,cV,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aS2=[0,a(fc),90,5,91,33,[0,a('Circulaire de la CNAV 2022-3 du 11/01/2022 "Revalorisation \xc3\xa0 compter du 1er janvier 2022"'),[0,a(r_),0]]],aS1=a("1100144"),aS3=[0,a(d),cV,11,cV,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSZ=[0,a(fc),ff,5,kE,33,[0,a('Circulaire de la CNAV 2021-1 du 11/01/2021 "Revalorisation \xc3\xa0 compter du 1er janvier 2021"'),[0,a(r_),0]]],aSY=a("1088175"),aS0=[0,a(d),cV,11,cV,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aST=[0,a(aG),c3,5,ic,67,[0,a(F6),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aSU=[0,a(d),f1,11,f1,32,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSS=[0,a(d),f1,11,f1,32,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSO=[0,a(aG),mi,14,mi,40,[0,a(mD),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aSI=[0,a(c6),ff,14,ff,61,[0,a(km),[0,a(j8),[0,a(ez),[0,a(eS),[0,a(eV),[0,a(eu),[0,a(jc),[0,a(aa),[0,a(af),0]]]]]]]]]],aSC=[0,a(aG),46,5,46,41,[0,a("Article L821-2"),[0,a(z7),[0,a(E0),[0,a(yt),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]]]],aSD=[0,a(d),dh,12,dh,51,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSB=[0,a(d),dh,12,dh,51,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSE=[0,a(d),dh,12,dh,51,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSf=a(z),aSr=a(X),aSs=a(X),aSt=a(X),aSu=a(z),aSv=a(X),aSg=a(qC),aSh=a(qC),aSm=a(l1),aSn=a(l1),aSo=a(l1),aSp=a(qC),aSq=a(l1),aSi=a("8"),aSj=a(CN),aSk=a(CN),aSl=[0,a(E),1035,5,dB,65,[0,a("Article R822-25"),[0,a("Section 3 : Conditions relatives au logement"),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aSw=[0,a(d),eh,12,eh,38,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSe=[0,a(d),eh,12,eh,38,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSx=[0,a(d),eh,12,eh,38,[0,a(Z),[0,a(i),[0,a(e),0]]]],aR$=[0,a(aG),E5,18,E5,67,[0,a("Article L822-8"),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aSa=[0,a(d),fI,11,fI,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aR_=[0,a(d),fI,11,fI,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aR5=[0,a(aG),Cj,18,Cj,61,[0,a("Article L822-9"),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aR6=[0,a(d),fY,11,fY,58,[0,a(Z),[0,a(i),[0,a(e),0]]]],aR4=[0,a(d),fY,11,fY,58,[0,a(Z),[0,a(i),[0,a(e),0]]]],aR0=[0,a(aG),eY,14,eY,43,[0,a(gx),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aRW=[0,a(E),i5,14,i5,37,[0,a(EX),[0,a(El),[0,a(dA),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aRV=a("3000000"),aRR=[0,a(E),a_,14,a_,41,[0,a(FE),[0,a(BE),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aRQ=a(DR),aRM=[0,a(E),be,14,be,42,[0,a(FE),[0,a(BE),[0,a(bd),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aRL=a(DR),aRH=[0,a(d),hT,11,hT,48,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRD=[0,a(d),hE,11,hE,25,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRE=[0,a(d),hE,11,hE,25,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRC=[0,a(d),hE,11,hE,25,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRF=[0,a(aU),[0,a("condition_pr\xc3\xaat"),0]],aRI=[0,a(d),hT,11,hT,48,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRG=[0,a(d),hT,11,hT,48,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRJ=[0,a(aU),[0,a("condition_peuplement_logement_l822_10"),0]],aRN=[0,a(d),ox,11,ox,39,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRK=[0,a(d),ox,11,ox,39,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRO=[0,a(aU),[0,a("seuil_l822_3_parts_propri\xc3\xa9t\xc3\xa9"),0]],aRS=[0,a(d),nI,11,nI,38,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRP=[0,a(d),nI,11,nI,38,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRT=[0,a(aU),[0,a("seuil_l822_3_parts_usufruit"),0]],aRX=[0,a(d),oZ,11,oZ,34,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRU=[0,a(d),oZ,11,oZ,34,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRY=[0,a(aU),[0,a("seuil_l822_5_patrimoine"),0]],aR1=[0,a(d),l4,11,l4,40,[0,a(Z),[0,a(i),[0,a(e),0]]]],aRZ=[0,a(d),l4,11,l4,40,[0,a(Z),[0,a(i),[0,a(e),0]]]],aR2=[0,a(aU),[0,a("usufruit_ou_propri\xc3\xa9t\xc3\xa9_famille"),0]],aR7=[0,a(d),fY,11,fY,58,[0,a(Z),[0,a(i),[0,a(e),0]]]],aR3=[0,a(d),fY,11,fY,58,[0,a(Z),[0,a(i),[0,a(e),0]]]],aR8=[0,a(aU),[0,a("condition_non_ouverture_l822_9_decence_logement"),0]],aSb=[0,a(d),fI,11,fI,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aR9=[0,a(d),fI,11,fI,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSc=[0,a(aU),[0,a("condition_non_ouverture_l822_8"),0]],aSy=[0,a(d),eh,12,eh,38,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSd=[0,a(d),eh,12,eh,38,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSz=[0,a(aU),[0,a("condition_logement_surface"),0]],aSF=[0,a(d),dh,12,dh,51,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSA=[0,a(d),dh,12,dh,51,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSG=[0,a(aU),[0,a("condition_logement_r\xc3\xa9sidence_principale"),0]],aSJ=[0,a(c6),ff,14,ff,61,[0,a(km),[0,a(j8),[0,a(ez),[0,a(eS),[0,a(eV),[0,a(eu),[0,a(jc),[0,a(aa),[0,a(af),0]]]]]]]]]],aSK=[0,a(aU),[0,a("ouverture_droits_retraite.date_naissance_assur\xc3\xa9"),0]],aSH=[0,a(c6),ff,14,ff,61,[0,a(km),[0,a(j8),[0,a(ez),[0,a(eS),[0,a(eV),[0,a(eu),[0,a(jc),[0,a(aa),[0,a(af),0]]]]]]]]]],aSL=[0,a(aU),[0,a(CK),[0,a(rI),0]]],aSM=[0,a(aU),[0,a(CK),[0,a(rI),0]]],aSP=[0,a(d),mj,11,mj,37,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSN=[0,a(d),mj,11,mj,37,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSQ=[0,a(aU),[0,a("patrimoine_total_demandeur"),0]],aSV=[0,a(d),f1,11,f1,32,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSR=[0,a(d),f1,11,f1,32,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSW=[0,a(aU),[0,a("condition_nationalit\xc3\xa9"),0]],aTe=[0,a(d),cV,11,cV,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aSX=[0,a(d),cV,11,cV,41,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTf=[0,a(aU),[0,a("plafond_individuel_l815_9_s\xc3\xa9cu"),0]],aTm=[0,a(d),d_,11,d_,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTg=[0,a(d),d_,11,d_,44,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTn=[0,a(aU),[0,a("condition_logement_location_tiers"),0]],aTy=[0,a(d),d1,11,d1,45,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTo=[0,a(d),d1,11,d1,45,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTz=[0,a(aU),[0,a("condition_logement_mode_occupation"),0]],aTE=[0,a(d),fr,11,fr,58,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTA=[0,a(d),fr,11,fr,58,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTF=[0,a(aU),[0,a("condition_ouverture_l822_10_peuplement_logement"),0]],aTI=[0,a(d),mp,11,mp,29,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTG=[0,a(d),mp,11,mp,29,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTJ=[0,a(aU),[0,a("\xc3\xa2ge_l161_17_2_s\xc3\xa9cu"),0]],aTX=[0,a(d),dE,11,dE,36,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTK=[0,a(d),dE,11,dE,36,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTY=[0,a(aU),[0,a("patrimoine_pris_en_compte"),0]],aT5=[0,a(d),dy,11,dy,31,[0,a(Z),[0,a(i),[0,a(e),0]]]],aTZ=[0,a(d),dy,11,dy,31,[0,a(Z),[0,a(i),[0,a(e),0]]]],aT6=[0,a(aU),[0,a(Bg),0]],aT9=[0,a(d),h$,11,h$,28,[0,a(Z),[0,a(i),[0,a(e),0]]]],aT7=[0,a(d),h$,11,h$,28,[0,a(Z),[0,a(i),[0,a(e),0]]]],aT_=[0,a(aU),[0,a("\xc3\xa2ge_l351_8_1_s\xc3\xa9cu"),0]],aUd=[0,a(d),fF,12,fF,23,[0,a(Z),[0,a(i),[0,a(e),0]]]],aT$=[0,a(d),fF,12,fF,23,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUe=[0,a(aU),[0,a(n$),0]],aUm=[0,a(aU),[0,a(fk),0]],aUB=[0,a(aU),[0,a(kO),0]],aUI=[0,a(d),kX,11,kX,46,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUC=[0,a(d),kX,11,kX,46,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUJ=[0,a(aU),[0,a("personnes_\xc3\xa0_charge_prises_en_compte"),0]],aUO=[0,a(d),oC,12,oC,61,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUK=[0,a(d),oC,12,oC,61,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUP=[0,a(aU),[0,a(kF),0]],aUS=[0,a(d),n4,12,n4,54,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUQ=[0,a(d),n4,12,n4,54,[0,a(Z),[0,a(i),[0,a(e),0]]]],aUT=[0,a(aU),[0,a(r4),0]],aUV=a(qy),aUU=[0,a(aG),ms,13,ms,47,[0,a(gx),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aUZ=[0,a(aG),ms,13,ms,47,[0,a(gx),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aUX=a(qy),aUW=[0,a(aG),jt,13,jt,48,[0,a(gx),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aUY=[0,a(aG),jt,13,jt,48,[0,a(gx),[0,a(bd),[0,a(ad),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],aRz=[0,a(E),Du,14,Du,36,[0,a(iO),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aRu=[0,a(aj),[0,a(bJ),[0,a(ac),0]]],aRv=[0,a(aj),[0,a(bJ),0]],aRw=[0,a(aj),[0,a(bJ),[0,a(ae),0]]],aRx=[0,a(aj),[0,a(bJ),0]],aRy=a(p),aRA=[0,a(d),ho,10,ho,25,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aRt=[0,a(d),ho,10,ho,25,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aRq=[0,a(E),yS,14,yS,33,[0,a(iO),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aRo=a(p),aRp=a(p),aRk=[0,a(E),wV,14,wV,36,[0,a(iO),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aQ$=[0,a(aj),[0,a(eN),[0,a(ac),0]]],aRa=[0,a(aj),[0,a(eN),0]],aRb=[0,a(aj),[0,a(eN),[0,a(ae),0]]],aRc=[0,a(aj),[0,a(eN),0]],aRd=[0,a(bk),[0,a(bQ),[0,a(ac),0]]],aRe=[0,a(bk),[0,a(bQ),0]],aRf=[0,a(bk),[0,a(bQ),[0,a(ae),0]]],aRg=[0,a(bk),[0,a(bQ),0]],aRh=a(kY),aRi=a(p),aRj=a(p),aRl=[0,a(d),m1,10,m1,40,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQ_=[0,a(d),m1,10,m1,40,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQ7=[0,a(E),Fp,14,Fp,49,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aQ5=a(hc),aQ6=a(hc),aQ1=[0,a(E),uY,14,uY,33,[0,a(iO),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aQX=[0,a(E),yO,14,yO,36,[0,a(iO),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aQN=[0,a(aj),[0,a(bI),[0,a(ac),0]]],aQO=[0,a(aj),[0,a(bI),0]],aQP=[0,a(aj),[0,a(bI),[0,a(ae),0]]],aQQ=[0,a(aj),[0,a(bI),0]],aQR=[0,a(aj),[0,a(kQ),[0,a(ac),0]]],aQS=[0,a(aj),[0,a(kQ),0]],aQT=[0,a(aj),[0,a(kQ),[0,a(ae),0]]],aQU=[0,a(aj),[0,a(kQ),0]],aQV=a(p),aQW=a(p),aQY=[0,a(d),n3,10,n3,20,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQM=[0,a(d),n3,10,n3,20,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQJ=[0,a(E),yo,14,yo,49,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aQG=a(c4),aQH=a(c4),aQI=a(lZ),aQB=[0,a(E),3426,5,3438,77,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aQz=a(cI),aQA=a(b5),aQC=[0,a(d),fV,12,fV,31,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQx=[0,a(E),Dw,5,Dw,75,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aQy=[0,a(d),fV,12,fV,31,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQq=[0,a(aO),DI,14,DI,42,[0,a(i$),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],aQp=a(dd),aQr=[0,a(d),eD,10,eD,25,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQo=[0,a(aO),hh,14,hh,42,[0,a(i$),[0,a(bB),[0,a(aM),0]]]],aQn=a(dd),aQs=[0,a(d),eD,10,eD,25,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQm=[0,a(Q),Fm,14,Fm,42,[0,a(i$),[0,a(aQ),[0,a(L),0]]]],aQl=a(dd),aQt=[0,a(d),eD,10,eD,25,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQh=[0,a(E),Ex,14,Ex,55,[0,a(rL),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aQc=[0,a(aj),[0,a(kx),[0,a(ac),0]]],aQd=[0,a(aj),[0,a(kx),0]],aQe=[0,a(aj),[0,a(kx),[0,a(ae),0]]],aQf=[0,a(aj),[0,a(kx),0]],aQg=a(p),aQi=[0,a(d),m8,11,m8,52,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQb=[0,a(d),m8,11,m8,52,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aP_=[0,a(E),Au,14,Au,49,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aP9=a(hc),aP3=[0,a(E),jj,14,jj,70,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aPZ=[0,a(E),ji,14,ji,69,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aPV=[0,a(E),h1,14,h1,75,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aPQ=[0,a(E),z3,5,z3,44,[0,a(Bq),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aPI=[0,a(aj),[0,a(dz),[0,a(ac),0]]],aPJ=[0,a(aj),[0,a(dz),0]],aPK=[0,a(aj),[0,a(dz),[0,a(ae),0]]],aPL=[0,a(aj),[0,a(dz),0]],aPM=[0,a(aj),[0,a(dz),[0,a(ac),0]]],aPN=[0,a(aj),[0,a(dz),0]],aPO=[0,a(aj),[0,a(dz),[0,a(ae),0]]],aPP=[0,a(aj),[0,a(dz),0]],aPR=[0,a(d),hL,10,hL,14,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPH=[0,a(E),Cy,14,Cy,42,[0,a(Bq),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aPD=[0,a(aj),[0,a(dz),[0,a(ac),0]]],aPE=[0,a(aj),[0,a(dz),0]],aPF=[0,a(aj),[0,a(dz),[0,a(ae),0]]],aPG=[0,a(aj),[0,a(dz),0]],aPy=[0,a(E),xC,5,xC,40,[0,a(rL),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aPz=[0,a(d),jg,11,jg,41,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPx=[0,a(E),D6,14,D6,44,[0,a(rL),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aPA=[0,a(d),jg,11,jg,41,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPw=[0,a(d),jg,11,jg,41,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPt=[0,a(E),zK,14,zK,36,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aPn=[0,a(Q),gF,5,812,36,[0,a(aQ),[0,a(L),0]]],aPh=a(p),aPi=a("86900"),aPj=a("97100"),aPk=a(z),aPl=a("10200"),aPm=a("107300"),aPo=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPe=[0,a(Q),kr,5,1056,36,[0,a(aQ),[0,a(L),0]]],aOY=a(p),aOZ=a(w$),aO0=a(vU),aO1=a(z),aO2=a(Gc),aO3=a(yT),aO4=a(p),aO5=a(AJ),aO6=a(Ev),aO7=a(z),aO8=a(wf),aO9=a(Ad),aO_=a(p),aO$=a(zn),aPa=a(EP),aPb=a(z),aPc=a("34600"),aPd=a(mm),aPf=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aOW=[0,a(Q),1085,5,1089,36,[0,a(aQ),[0,a(L),0]]],aOE=a(p),aOF=a(yA),aOG=a(rK),aOH=a(z),aOI=a(Gd),aOJ=a(Cq),aOK=a(p),aOL=a(EF),aOM=a(q9),aON=a(z),aOO=a(ot),aOP=a(Aq),aOQ=a(p),aOR=a(DV),aOS=a(Fq),aOT=a(z),aOU=a(Dv),aOV=a(ya),aOX=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aOC=[0,a(Q),ks,5,1122,36,[0,a(aQ),[0,a(L),0]]],aOk=a(p),aOl=a("198100"),aOm=a("239000"),aOn=a(z),aOo=a("40900"),aOp=a("279900"),aOq=a(p),aOr=a("176800"),aOs=a("212800"),aOt=a(z),aOu=a("36000"),aOv=a("248800"),aOw=a(p),aOx=a("165000"),aOy=a("197900"),aOz=a(z),aOA=a("32900"),aOB=a("230800"),aOD=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aOi=[0,a(Q),1151,5,1155,36,[0,a(aQ),[0,a(L),0]]],aN2=a(p),aN3=a("159500"),aN4=a(wE),aN5=a(z),aN6=a("33000"),aN7=a(yM),aN8=a(p),aN9=a("142200"),aN_=a("171200"),aN$=a(z),aOa=a("29000"),aOb=a("200200"),aOc=a(p),aOd=a("132800"),aOe=a("159300"),aOf=a(z),aOg=a("26500"),aOh=a(yx),aOj=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aN0=[0,a(Q),1184,5,1188,36,[0,a(aQ),[0,a(L),0]]],aNI=a(p),aNJ=a("200100"),aNK=a("141400"),aNL=a(z),aNM=a("41300"),aNN=a("182700"),aNO=a(p),aNP=a("178600"),aNQ=a("215000"),aNR=a(z),aNS=a("36400"),aNT=a("251400"),aNU=a(p),aNV=a("166700"),aNW=a(qY),aNX=a(z),aNY=a("33200"),aNZ=a("233100"),aN1=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aNG=[0,a(Q),1217,5,1221,36,[0,a(aQ),[0,a(L),0]]],aNo=a(p),aNp=a("161100"),aNq=a("194400"),aNr=a(z),aNs=a("33300"),aNt=a("227700"),aNu=a(p),aNv=a("143600"),aNw=a("172900"),aNx=a(z),aNy=a("29300"),aNz=a("202200"),aNA=a(p),aNB=a("134100"),aNC=a("160900"),aND=a(z),aNE=a("26800"),aNF=a("187700"),aNH=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aNm=[0,a(Q),1250,5,1254,36,[0,a(aQ),[0,a(L),0]]],aM6=a(p),aM7=a(rK),aM8=a("244300"),aM9=a(z),aM_=a("41800"),aM$=a("286100"),aNa=a(p),aNb=a("180700"),aNc=a("217500"),aNd=a(z),aNe=a("36800"),aNf=a("254300"),aNg=a(p),aNh=a("168700"),aNi=a("202300"),aNj=a(z),aNk=a("33600"),aNl=a("235900"),aNn=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aM4=[0,a(Q),1283,5,1287,36,[0,a(aQ),[0,a(L),0]]],aMM=a(p),aMN=a("30871"),aMO=a("37243"),aMP=a(z),aMQ=a("6372"),aMR=a("43615"),aMS=a(p),aMT=a("27548"),aMU=a("33148"),aMV=a(z),aMW=a("5610"),aMX=a("38768"),aMY=a(p),aMZ=a("25718"),aM0=a("30840"),aM1=a(z),aM2=a("5122"),aM3=a("35962"),aM5=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aMK=[0,a(Q),1316,5,1320,36,[0,a(aQ),[0,a(L),0]]],aMs=a(p),aMt=a(xW),aMu=a("196700"),aMv=a(z),aMw=a("33700"),aMx=a("230400"),aMy=a(p),aMz=a("145300"),aMA=a("175000"),aMB=a(z),aMC=a("29700"),aMD=a(Da),aME=a(p),aMF=a("135700"),aMG=a("162800"),aMH=a(z),aMI=a("27100"),aMJ=a("189900"),aML=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aMq=[0,a(Q),1349,5,1353,36,[0,a(aQ),[0,a(L),0]]],aL_=a(p),aL$=a("24849"),aMa=a("29987"),aMb=a(z),aMc=a("5138"),aMd=a("35125"),aMe=a(p),aMf=a("22151"),aMg=a("26679"),aMh=a(z),aMi=a("4528"),aMj=a("31207"),aMk=a(p),aMl=a("20687"),aMm=a("24818"),aMn=a(z),aMo=a("4131"),aMp=a("28949"),aMr=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aL8=[0,a(Q),1382,5,1386,36,[0,a(aQ),[0,a(L),0]]],aLQ=a(p),aLR=a("31241"),aLS=a("37689"),aLT=a(z),aLU=a("6448"),aLV=a("44137"),aLW=a(p),aLX=a("27879"),aLY=a("33556"),aLZ=a(z),aL0=a("5677"),aL1=a("39233"),aL2=a(p),aL3=a("26027"),aL4=a("31210"),aL5=a(z),aL6=a("5183"),aL7=a("36393"),aL9=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aLO=[0,a(Q),1415,5,1419,36,[0,a(aQ),[0,a(L),0]]],aLw=a(p),aLx=a("25147"),aLy=a("30347"),aLz=a(z),aLA=a("5200"),aLB=a("35547"),aLC=a(p),aLD=a("22417"),aLE=a("26999"),aLF=a(z),aLG=a("4582"),aLH=a("31581"),aLI=a(p),aLJ=a("20935"),aLK=a(Cs),aLL=a(z),aLM=a("4181"),aLN=a("29297"),aLP=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aLu=[0,a(Q),1448,5,1452,36,[0,a(aQ),[0,a(L),0]]],aLc=a(p),aLd=a("31616"),aLe=a("38141"),aLf=a(z),aLg=a("6525"),aLh=a("44666"),aLi=a(p),aLj=a("28214"),aLk=a("33959"),aLl=a(z),aLm=a("5745"),aLn=a("39704"),aLo=a(p),aLp=a("26339"),aLq=a("31584"),aLr=a(z),aLs=a("5245"),aLt=a("36829"),aLv=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aLa=[0,a(Q),1481,5,1485,36,[0,a(aQ),[0,a(L),0]]],aKU=a(p),aKV=a("25449"),aKW=a("30711"),aKX=a(z),aKY=a("5262"),aKZ=a("35973"),aK0=a(p),aK1=a("22686"),aK2=a("27323"),aK3=a(z),aK4=a("4637"),aK5=a("31960"),aK6=a(p),aK7=a("21186"),aK8=a("25417"),aK9=a(z),aK_=a("4231"),aK$=a("29648"),aLb=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aKS=[0,a(Q),1514,5,1518,36,[0,a(aQ),[0,a(L),0]]],aKA=a(p),aKB=a("32185"),aKC=a("38827"),aKD=a(z),aKE=a("6642"),aKF=a("45469"),aKG=a(p),aKH=a("28722"),aKI=a(yj),aKJ=a(z),aKK=a("5848"),aKL=a("40418"),aKM=a(p),aKN=a("26813"),aKO=a("32152"),aKP=a(z),aKQ=a("5339"),aKR=a("37491"),aKT=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aKy=[0,a(Q),1547,5,1551,36,[0,a(aQ),[0,a(L),0]]],aKg=a(p),aKh=a("25907"),aKi=a(xE),aKj=a(z),aKk=a("5357"),aKl=a("36621"),aKm=a(p),aKn=a("23094"),aKo=a("27814"),aKp=a(z),aKq=a("4720"),aKr=a("32534"),aKs=a(p),aKt=a("21567"),aKu=a("25874"),aKv=a(z),aKw=a("4307"),aKx=a("30181"),aKz=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aKe=[0,a(Q),1580,5,1584,36,[0,a(aQ),[0,a(L),0]]],aJY=a(p),aJZ=a("33086"),aJ0=a("39914"),aJ1=a(z),aJ2=a("6828"),aJ3=a("46742"),aJ4=a(p),aJ5=a("29526"),aJ6=a("35538"),aJ7=a(z),aJ8=a("6012"),aJ9=a("41550"),aJ_=a(p),aJ$=a("27564"),aKa=a("33052"),aKb=a(z),aKc=a("5488"),aKd=a("38541"),aKf=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aJW=[0,a(Q),1613,5,1617,36,[0,a(aQ),[0,a(L),0]]],aJE=a(p),aJF=a("26632"),aJG=a("32139"),aJH=a(z),aJI=a("5507"),aJJ=a("37646"),aJK=a(p),aJL=a("23741"),aJM=a("28593"),aJN=a(z),aJO=a("4852"),aJP=a("33445"),aJQ=a(p),aJR=a("22171"),aJS=a("36598"),aJT=a(z),aJU=a("4428"),aJV=a("31026"),aJX=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aJC=[0,a(Q),1646,5,AV,36,[0,a(aQ),[0,a(L),0]]],aJk=a(p),aJl=a("33999"),aJm=a("41016"),aJn=a(z),aJo=a("7016"),aJp=a("48032"),aJq=a(p),aJr=a("30341"),aJs=a("36519"),aJt=a(z),aJu=a("6178"),aJv=a("42697"),aJw=a(p),aJx=a("28325"),aJy=a("33964"),aJz=a(z),aJA=a("5639"),aJB=a("39605"),aJD=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aJi=[0,a(Q),1679,5,1683,36,[0,a(aQ),[0,a(L),0]]],aI2=a(p),aI3=a("27367"),aI4=a("33026"),aI5=a(z),aI6=a("5659"),aI7=a("38685"),aI8=a(p),aI9=a("24396"),aI_=a("29382"),aI$=a(z),aJa=a(Ce),aJb=a("34368"),aJc=a(p),aJd=a("22783"),aJe=a("27332"),aJf=a(z),aJg=a("4550"),aJh=a("31882"),aJj=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aI0=[0,a(Q),1712,5,1716,36,[0,a(aQ),[0,a(L),0]]],aII=a(p),aIJ=a("35002"),aIK=a("42226"),aIL=a(z),aIM=a("7223"),aIN=a("49449"),aIO=a(p),aIP=a("31236"),aIQ=a("37596"),aIR=a(z),aIS=a("6360"),aIT=a("43957"),aIU=a(p),aIV=a("29161"),aIW=a("34966"),aIX=a(z),aIY=a("5805"),aIZ=a("40773"),aI1=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aIG=[0,a(Q),1745,5,1749,36,[0,a(aQ),[0,a(L),0]]],aIo=a(p),aIp=a("28174"),aIq=a("34000"),aIr=a(z),aIs=a("5826"),aIt=a("39826"),aIu=a(p),aIv=a(Cs),aIw=a("30249"),aIx=a(z),aIy=a("5133"),aIz=a("35382"),aIA=a(p),aIB=a("23455"),aIC=a("28138"),aID=a(z),aIE=a("4684"),aIF=a("32823"),aIH=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aIm=[0,a(Q),1778,5,1782,36,[0,a(aQ),[0,a(L),0]]],aH6=a(p),aH7=a("35114"),aH8=a("42361"),aH9=a(z),aH_=a("7246"),aH$=a("49607"),aIa=a(p),aIb=a("31336"),aIc=a("37716"),aId=a(z),aIe=a("6380"),aIf=a("44098"),aIg=a(p),aIh=a("29254"),aIi=a("35078"),aIj=a(z),aIk=a("5824"),aIl=a("40903"),aIn=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aH4=[0,a(Q),1811,5,1815,36,[0,a(aQ),[0,a(L),0]]],aHM=a(p),aHN=a("28264"),aHO=a("34109"),aHP=a(z),aHQ=a("5845"),aHR=a("39953"),aHS=a(p),aHT=a("25196"),aHU=a("30346"),aHV=a(z),aHW=a("5149"),aHX=a("35495"),aHY=a(p),aHZ=a("23530"),aH0=a("28228"),aH1=a(z),aH2=a("4699"),aH3=a("32928"),aH5=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aHK=[0,a(Q),1844,5,1848,36,[0,a(aQ),[0,a(L),0]]],aHs=a(p),aHt=a("35500"),aHu=a("42827"),aHv=a(z),aHw=a("7326"),aHx=a("50153"),aHy=a(p),aHz=a("31681"),aHA=a("38131"),aHB=a(z),aHC=a("6450"),aHD=a("44583"),aHE=a(p),aHF=a("29576"),aHG=a("35464"),aHH=a(z),aHI=a("5888"),aHJ=a("41353"),aHL=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aHq=[0,a(Q),1877,5,1881,36,[0,a(aQ),[0,a(L),0]]],aG_=a(p),aG$=a("28575"),aHa=a("34484"),aHb=a(z),aHc=a("5909"),aHd=a("40392"),aHe=a(p),aHf=a("25473"),aHg=a("30680"),aHh=a(z),aHi=a("5206"),aHj=a("35885"),aHk=a(p),aHl=a("23789"),aHm=a("28539"),aHn=a(z),aHo=a("4751"),aHp=a("33290"),aHr=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aG8=[0,a(Q),1910,5,rz,36,[0,a(aQ),[0,a(L),0]]],aGQ=a(p),aGR=a("35855"),aGS=a("43255"),aGT=a(z),aGU=a("7399"),aGV=a("50655"),aGW=a(p),aGX=a("31998"),aGY=a("38512"),aGZ=a(z),aG0=a("6515"),aG1=a("45029"),aG2=a(p),aG3=a("29872"),aG4=a("35819"),aG5=a(z),aG6=a("5947"),aG7=a("41767"),aG9=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aGO=[0,a(Q),1943,5,1947,36,[0,a(aQ),[0,a(L),0]]],aGw=a(p),aGx=a("28861"),aGy=a(EH),aGz=a(z),aGA=a("5968"),aGB=a("40796"),aGC=a(p),aGD=a("25728"),aGE=a("30987"),aGF=a(z),aGG=a("5258"),aGH=a("36244"),aGI=a(p),aGJ=a("24027"),aGK=a("28824"),aGL=a(z),aGM=a("4799"),aGN=a(zM),aGP=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aGu=[0,a(Q),1976,5,1980,36,[0,a(aQ),[0,a(L),0]]],aGc=a(p),aGd=a("36626"),aGe=a("44185"),aGf=a(z),aGg=a("7558"),aGh=a("51744"),aGi=a(p),aGj=a("32686"),aGk=a(ys),aGl=a(z),aGm=a("6655"),aGn=a("45997"),aGo=a(p),aGp=a("30514"),aGq=a("36589"),aGr=a(z),aGs=a("6075"),aGt=a("42665"),aGv=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aGa=[0,a(Q),gP,5,fe,36,[0,a(aQ),[0,a(L),0]]],aFU=a(p),aFV=a("29482"),aFW=a("35578"),aFX=a(z),aFY=a("6096"),aFZ=a("41673"),aF0=a(p),aF1=a("26281"),aF2=a("31653"),aF3=a(z),aF4=a("5371"),aF5=a("37023"),aF6=a(p),aF7=a("24544"),aF8=a("29444"),aF9=a(z),aF_=a("4902"),aF$=a("34346"),aGb=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aFS=[0,a(Q),2042,5,2046,36,[0,a(aQ),[0,a(L),0]]],aFA=a(p),aFB=a("36835"),aFC=a("44437"),aFD=a(z),aFE=a("7601"),aFF=a("52039"),aFG=a(p),aFH=a("32872"),aFI=a("39564"),aFJ=a(z),aFK=a("6693"),aFL=a("46259"),aFM=a(p),aFN=a("30688"),aFO=a("36798"),aFP=a(z),aFQ=a("6110"),aFR=a("42908"),aFT=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aFy=[0,a(Q),2075,5,xe,36,[0,a(aQ),[0,a(L),0]]],aFg=a(p),aFh=a("29650"),aFi=a("35781"),aFj=a(z),aFk=a("6131"),aFl=a("41911"),aFm=a(p),aFn=a("26431"),aFo=a("31833"),aFp=a(z),aFq=a("5402"),aFr=a("37234"),aFs=a(p),aFt=a("24684"),aFu=a("29612"),aFv=a(z),aFw=a("4930"),aFx=a("34542"),aFz=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aFe=[0,a(Q),2108,5,2112,36,[0,a(aQ),[0,a(L),0]]],aEY=a(p),aEZ=a("36864"),aE0=a("44473"),aE1=a(z),aE2=a("7607"),aE3=a("52081"),aE4=a(p),aE5=a("32898"),aE6=a("39596"),aE7=a(z),aE8=a("6698"),aE9=a("46296"),aE_=a(p),aE$=a("30713"),aFa=a("36827"),aFb=a(z),aFc=a("6115"),aFd=a("42942"),aFf=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aEW=[0,a(Q),2141,5,2145,36,[0,a(aQ),[0,a(L),0]]],aEE=a(p),aEF=a("29674"),aEG=a("35810"),aEH=a(z),aEI=a("6136"),aEJ=a("41945"),aEK=a(p),aEL=a("26452"),aEM=a("31858"),aEN=a(z),aEO=a("5406"),aEP=a("37264"),aEQ=a(p),aER=a("24704"),aES=a("29636"),aET=a(z),aEU=a("4934"),aEV=a(yj),aEX=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aEC=[0,a(Q),2174,5,2178,36,[0,a(aQ),[0,a(L),0]]],aEk=a(p),aEl=a("37140"),aEm=a("44807"),aEn=a(z),aEo=a("7664"),aEp=a("52472"),aEq=a(p),aEr=a("33145"),aEs=a("39893"),aEt=a(z),aEu=a("6748"),aEv=a("46643"),aEw=a(p),aEx=a("30943"),aEy=a("37103"),aEz=a(z),aEA=a("6161"),aEB=a("43264"),aED=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aEi=[0,a(Q),2207,5,2211,36,[0,a(aQ),[0,a(L),0]]],aD2=a(p),aD3=a("29897"),aD4=a("36079"),aD5=a(z),aD6=a("6182"),aD7=a("42260"),aD8=a(p),aD9=a("26650"),aD_=a("32097"),aD$=a(z),aEa=a("5447"),aEb=a("37543"),aEc=a(p),aEd=a("24889"),aEe=a("29858"),aEf=a(z),aEg=a("4971"),aEh=a(EH),aEj=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aD0=[0,a(Q),2240,5,2243,36,[0,a(aQ),[0,a(L),0]]],aDI=a(p),aDJ=a("37252"),aDK=a("44941"),aDL=a(z),aDM=a("7687"),aDN=a("52629"),aDO=a(p),aDP=a("33244"),aDQ=a("40013"),aDR=a(z),aDS=a("6768"),aDT=a("46783"),aDU=a(p),aDV=a("31036"),aDW=a("37215"),aDX=a(z),aDY=a("6179"),aDZ=a("43394"),aD1=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aDG=[0,a(Q),2272,5,2275,36,[0,a(aQ),[0,a(L),0]]],aDo=a(p),aDp=a("29986"),aDq=a("36187"),aDr=a(z),aDs=a("6201"),aDt=a("42386"),aDu=a(p),aDv=a("26730"),aDw=a("32193"),aDx=a(z),aDy=a("5463"),aDz=a("37656"),aDA=a(p),aDB=a("24964"),aDC=a("29948"),aDD=a(z),aDE=a(Ce),aDF=a("34934"),aDH=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPg=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPp=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aDl=[0,a(Q),kH,5,ee,33,[0,a(o3),[0,a(mg),[0,a(L),0]]]],aC5=a(p),aC6=a(w$),aC7=a(vU),aC8=a(z),aC9=a(Gc),aC_=a(yT),aC$=a(p),aDa=a(AJ),aDb=a(Ev),aDc=a(z),aDd=a(wf),aDe=a(Ad),aDf=a(p),aDg=a(zn),aDh=a(EP),aDi=a(z),aDj=a("35600"),aDk=a(mm),aDm=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aC3=[0,a(Q),662,5,665,33,[0,a(o3),[0,a(mg),[0,a(L),0]]]],aCL=a(p),aCM=a(yA),aCN=a(rK),aCO=a(z),aCP=a(Gd),aCQ=a(Cq),aCR=a(p),aCS=a(EF),aCT=a(q9),aCU=a(z),aCV=a(ot),aCW=a(Aq),aCX=a(p),aCY=a(DV),aCZ=a(Fq),aC0=a(z),aC1=a(Dv),aC2=a(ya),aC4=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aCJ=[0,a(Q),707,5,sq,33,[0,a(o3),[0,a(mg),[0,a(L),0]]]],aCr=a(p),aCs=a(rG),aCt=a("220000"),aCu=a(z),aCv=a("38000"),aCw=a("260000"),aCx=a(p),aCy=a("164200"),aCz=a(zx),aCA=a(z),aCB=a(FZ),aCC=a("231200"),aCD=a(p),aCE=a("153200"),aCF=a("183700"),aCG=a(z),aCH=a(ot),aCI=a("214200"),aCK=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aCp=[0,a(Q),750,5,752,33,[0,a(o3),[0,a(mg),[0,a(L),0]]]],aB9=a(p),aB_=a("148100"),aB$=a("178700"),aCa=a(z),aCb=a("30600"),aCc=a("209300"),aCd=a(p),aCe=a(By),aCf=a("158900"),aCg=a(z),aCh=a("26900"),aCi=a(yx),aCj=a(p),aCk=a("123300"),aCl=a("147900"),aCm=a(z),aCn=a("24600"),aCo=a(D1),aCq=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aDn=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aB8=[0,a(d),Y,3,Y,76,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPq=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aB7=[0,a(d),Y,11,Y,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aB3=[0,a(E),Ed,5,Ed,28,[0,a(DG),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aB4=[0,a(d),ja,11,ja,41,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aB2=[0,a(E),Ee,14,Ee,44,[0,a(DG),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aBY=[0,a(E),vS,14,vS,36,[0,a(iO),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aBW=a(p),aBX=a(p),aBZ=[0,a(d),nF,10,nF,32,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBV=[0,a(d),nF,10,nF,32,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBQ=[0,a(Q),CY,7,CY,18,[0,a(i$),[0,a(aQ),[0,a(L),0]]]],aBN=a(gB),aBO=a(qW),aBP=a(fp),aBR=[0,a(d),ch,11,ch,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBL=[0,a(aO),hV,7,hV,18,[0,a(i$),[0,a(bB),[0,a(aM),0]]]],aBI=a(gO),aBJ=a(qz),aBK=a(fg),aBM=[0,a(d),ch,11,ch,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBG=[0,a(aO),xv,7,xv,18,[0,a(i$),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],aBD=a(oJ),aBE=a(B1),aBF=a(mQ),aBH=[0,a(d),ch,11,ch,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBS=[0,a(d),ch,11,ch,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBA=[0,a(Q),AZ,29,AZ,64,[0,a(nw),[0,a(aQ),[0,a(L),0]]]],aBy=a(gB),aBz=a(fp),aBB=[0,a(d),ch,11,ch,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBw=[0,a(aO),BC,29,BC,64,[0,a(nw),[0,a(bB),[0,a(aM),0]]]],aBu=a(gO),aBv=a(fg),aBx=[0,a(d),ch,11,ch,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBs=[0,a(aO),yL,29,yL,64,[0,a(nw),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],aBq=a(oJ),aBr=a(mQ),aBt=[0,a(d),ch,11,ch,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBC=[0,a(d),ch,11,ch,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBk=[0,a(d),iV,14,iV,50,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBg=[0,a(Q),zq,14,zq,50,[0,a("Article 25"),[0,a(aQ),[0,a(L),0]]]],aBb=a(wF),aBc=a(se),aBd=a("0.0172"),aBe=a(wF),aBf=a(se),aA7=[0,a(E),iJ,14,iJ,64,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aA3=[0,a(E),iG,14,iG,59,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aAZ=[0,a(fc),yZ,14,yZ,36,[0,a(C_),[0,a(zh),0]]],aAX=a(vB),aAY=a(et),aAT=[0,a(Q),wA,14,wA,47,[0,a(sg),[0,a(aQ),[0,a(L),0]]]],aAS=a("0.416"),aAO=[0,a(Q),Fo,14,Fo,47,[0,a(sg),[0,a(aQ),[0,a(L),0]]]],aAN=a(vl),aAJ=[0,a(Q),EQ,14,EQ,47,[0,a(sg),[0,a(aQ),[0,a(L),0]]]],aAI=a("560085"),aAE=[0,a(Q),xR,14,xR,48,[0,a("Article 26"),[0,a(aQ),[0,a(L),0]]]],aAD=a(AI),aAz=[0,a(Q),u7,15,u7,49,[0,a("Article 22"),[0,a(aQ),[0,a(L),0]]]],aAy=a("2211133"),aAu=[0,a(Q),w7,14,w7,42,[0,a("Article 21"),[0,a(aQ),[0,a(L),0]]]],aAt=a(id),aAp=[0,a(Q),Bk,14,Bk,41,[0,a("Article 20"),[0,a(aQ),[0,a(L),0]]]],aAo=a(kk),aAq=[0,a(d),oL,11,oL,38,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAn=[0,a(d),oL,11,oL,38,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAr=[0,a(aj),[0,a("montant_forfaitaire_d832_10"),0]],aAv=[0,a(d),oI,11,oI,39,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAs=[0,a(d),oI,11,oI,39,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAw=[0,a(aj),[0,a("montant_minimal_aide_d832_10"),0]],aAA=[0,a(d),or,11,or,45,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAx=[0,a(d),or,11,or,45,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAB=[0,a(aj),[0,a("coefficient_multiplicateur_d832_11"),0]],aAF=[0,a(d),oS,11,oS,45,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAC=[0,a(d),oS,11,oS,45,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAG=[0,a(aj),[0,a("coefficient_multiplicateur_d832_18"),0]],aAK=[0,a(d),mr,11,mr,44,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAH=[0,a(d),mr,11,mr,44,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAL=[0,a(aj),[0,a("montant_limite_tranches_d832_15_1"),0]],aAP=[0,a(d),kU,11,kU,44,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAM=[0,a(d),kU,11,kU,44,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAQ=[0,a(aj),[0,a("taux_tranche_inf\xc3\xa9rieure_d832_15_1"),0]],aAU=[0,a(d),nj,11,nj,44,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAR=[0,a(d),nj,11,nj,44,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAV=[0,a(aj),[0,a("taux_tranche_sup\xc3\xa9rieure_d832_15_1"),0]],aA0=[0,a(d),m0,11,m0,33,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAW=[0,a(d),m0,11,m0,33,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aA1=[0,a(aj),[0,a(FD),0]],aA4=[0,a(E),iG,14,iG,59,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aA5=[0,a(aj),[0,a(nk),0]],aA2=[0,a(E),iG,14,iG,59,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aA8=[0,a(E),iJ,14,iJ,64,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aA9=[0,a(aj),[0,a(n2),0]],aA6=[0,a(E),iJ,14,iJ,64,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aA_=[0,a(aj),[0,a(ga),[0,a(kq),0]]],aA$=[0,a(aj),[0,a(ga),[0,a(kq),0]]],aBh=[0,a(d),n5,11,n5,47,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBa=[0,a(d),n5,11,n5,47,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBi=[0,a(aj),[0,a("coefficient_multiplicateur_d832_17_3"),0]],aBl=[0,a(d),iV,14,iV,50,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBm=[0,a(aj),[0,a(kA),0]],aBj=[0,a(d),iV,14,iV,50,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBn=[0,a(aj),[0,a(eJ),[0,a(bk),0]]],aBo=[0,a(aj),[0,a(eJ),[0,a(bk),0]]],aBT=[0,a(d),ch,11,ch,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBp=[0,a(d),ch,11,ch,46,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aBU=[0,a(aj),[0,a("montant_forfaitaire_charges_d832_10"),0]],aB0=[0,a(aj),[0,a(bI),0]],aB5=[0,a(d),ja,11,ja,41,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aB1=[0,a(d),ja,11,ja,41,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aB6=[0,a(aj),[0,a("ressources_m\xc3\xa9nage_avec_d832_18"),0]],aPr=[0,a(aj),[0,a(dz),0]],aPu=[0,a(d),nt,11,nt,33,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPs=[0,a(d),nt,11,nt,33,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPv=[0,a(aj),[0,a(v7),0]],aPB=[0,a(aj),[0,a(kx),0]],aPS=[0,a(d),hL,10,hL,14,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPC=[0,a(d),hL,10,hL,14,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aPT=[0,a(aj),[0,a("plafond_mensualit\xc3\xa9_d832_10_3_base"),0]],aPW=[0,a(E),h1,14,h1,75,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aPX=[0,a(aj),[0,a(mM),0]],aPU=[0,a(E),h1,14,h1,75,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aP0=[0,a(E),ji,14,ji,69,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aP1=[0,a(aj),[0,a(oo),0]],aPY=[0,a(E),ji,14,ji,69,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aP4=[0,a(E),jj,14,jj,70,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aP5=[0,a(aj),[0,a(mB),0]],aP2=[0,a(E),jj,14,jj,70,[0,a(d$),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aP6=[0,a(aj),[0,a(fJ),[0,a(dP),0]]],aP7=[0,a(aj),[0,a(fJ),[0,a(dP),0]]],aP$=[0,a(d),kp,10,kp,17,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aP8=[0,a(d),kp,10,kp,17,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQa=[0,a(aj),[0,a("coefficient_prise_en_charge_d832_10_formule"),0]],aQj=[0,a(aj),[0,a(kQ),0]],aQu=[0,a(d),eD,10,eD,25,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQk=[0,a(d),eD,10,eD,25,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQv=[0,a(aj),[0,a("plafond_mensualit\xc3\xa9_d832_10_3_copropri\xc3\xa9taires"),0]],aQD=[0,a(d),fV,12,fV,31,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQw=[0,a(d),fV,12,fV,31,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQE=[0,a(aj),[0,a(q7),0]],aQK=[0,a(d),ml,10,ml,23,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQF=[0,a(d),ml,10,ml,23,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQL=[0,a(aj),[0,a("coefficient_prise_en_charge_d832_10_coeff_arrondi"),0]],aQZ=[0,a(aj),[0,a(eN),0]],aQ2=[0,a(d),oX,12,oX,31,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQ0=[0,a(d),oX,12,oX,31,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQ3=[0,a(aj),[0,a(sm),0]],aQ8=[0,a(d),oA,10,oA,15,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQ4=[0,a(d),oA,10,oA,15,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aQ9=[0,a(aj),[0,a("coefficient_prise_en_charge_d832_10_seuil"),0]],aRm=[0,a(aj),[0,a(bJ),0]],aRr=[0,a(d),nP,12,nP,31,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aRn=[0,a(d),nP,12,nP,31,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],aRs=[0,a(aj),[0,a(cX),0]],aRB=[0,a(aj),[0,a(fm),0]],aAk=[0,a(E),Bb,14,Bb,36,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aAf=[0,a(au),[0,a(bJ),[0,a(ac),0]]],aAg=[0,a(au),[0,a(bJ),0]],aAh=[0,a(au),[0,a(bJ),[0,a(ae),0]]],aAi=[0,a(au),[0,a(bJ),0]],aAj=a(p),aAl=[0,a(d),m6,10,m6,25,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAe=[0,a(d),m6,10,m6,25,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAb=[0,a(E),u1,14,u1,33,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],az$=a(p),aAa=a(p),az7=[0,a(E),m3,14,m3,36,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],azW=[0,a(au),[0,a(eN),[0,a(ac),0]]],azX=[0,a(au),[0,a(eN),0]],azY=[0,a(au),[0,a(eN),[0,a(ae),0]]],azZ=[0,a(au),[0,a(eN),0]],az0=[0,a(bk),[0,a(bQ),[0,a(ac),0]]],az1=[0,a(bk),[0,a(bQ),0]],az2=[0,a(bk),[0,a(bQ),[0,a(ae),0]]],az3=[0,a(bk),[0,a(bQ),0]],az4=a(kY),az5=a(p),az6=a(p),az8=[0,a(d),nC,10,nC,40,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azV=[0,a(d),nC,10,nC,40,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azR=[0,a(E),n8,5,n8,26,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],azP=a(oE),azQ=a(oE),azS=[0,a(d),jl,10,jl,15,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azO=[0,a(E),Eb,14,Eb,49,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],azM=a(hc),azN=a(hc),azI=[0,a(E),CS,14,CS,36,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],azy=[0,a(au),[0,a(bI),[0,a(ac),0]]],azz=[0,a(au),[0,a(bI),0]],azA=[0,a(au),[0,a(bI),[0,a(ae),0]]],azB=[0,a(au),[0,a(bI),0]],azC=[0,a(au),[0,a(kw),[0,a(ac),0]]],azD=[0,a(au),[0,a(kw),0]],azE=[0,a(au),[0,a(kw),[0,a(ae),0]]],azF=[0,a(au),[0,a(kw),0]],azG=a(p),azH=a(p),azJ=[0,a(d),md,10,md,20,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azx=[0,a(d),md,10,md,20,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azt=[0,a(E),Fh,5,Fh,26,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],azq=a(c4),azr=a(c4),azs=a(lZ),azu=[0,a(d),hB,10,hB,23,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azp=[0,a(E),xF,14,xF,49,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],azm=a(c4),azn=a(c4),azo=a(lZ),azi=[0,a(E),Cb,14,Cb,40,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aze=[0,a(E),vv,14,vv,55,[0,a(yR),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ay$=[0,a(au),[0,a(kC),[0,a(ac),0]]],aza=[0,a(au),[0,a(kC),0]],azb=[0,a(au),[0,a(kC),[0,a(ae),0]]],azc=[0,a(au),[0,a(kC),0]],azd=a(p),azf=[0,a(d),oP,11,oP,52,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ay_=[0,a(d),oP,11,oP,52,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ay6=[0,a(E),FV,5,FV,26,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ay5=a(oE),ay7=[0,a(d),h8,10,h8,17,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ay4=[0,a(E),Bn,14,Bn,49,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ay1=a(p),ay2=a(p),ay3=a(hc),ayV=[0,a(E),jb,14,jb,70,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayR=[0,a(E),hD,14,hD,69,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayN=[0,a(E),iW,14,iW,75,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayJ=[0,a(E),zX,14,zX,44,[0,a(yR),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayK=[0,a(d),nK,11,nK,41,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ayI=[0,a(d),nK,11,nK,41,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ayE=[0,a(E),zs,14,zs,36,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayF=[0,a(d),jn,21,jn,43,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ayA=[0,a(E),wj,14,wj,40,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayw=[0,a(Q),D9,14,D9,48,[0,a(wb),[0,a(fh),[0,a(L),0]]]],ayu=a("2142091"),ayv=a("1339340"),ayq=[0,a(Q),Dn,14,Dn,41,[0,a("Article 32"),[0,a(fh),[0,a(L),0]]]],ayo=a(qH),ayp=a("2668"),ayi=[0,a(E),ir,14,ir,64,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aye=[0,a(E),h_,14,h_,59,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aya=[0,a(E),iH,14,iH,55,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ax8=[0,a(E),zp,14,zp,36,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ax6=a(p),ax7=a(p),ax9=[0,a(d),lR,10,lR,32,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ax5=[0,a(d),lR,10,lR,32,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ax1=[0,a(Q),yv,14,yv,48,[0,a(sr),[0,a(fh),[0,a(L),0]]]],axr=a(p),axs=a("46192"),axt=a("54152"),axu=a(z),axv=a("57741"),axw=a(X),axx=a("61794"),axy=a(_),axz=a("65862"),axA=a(ah),axB=a("7368"),axC=a("71039"),axD=a(p),axE=a("42242"),axF=a("49299"),axG=a(z),axH=a("52565"),axI=a(X),axJ=a("56268"),axK=a(_),axL=a("59957"),axM=a(ah),axN=a("6659"),axO=a("63887"),axP=a(p),axQ=a("40096"),axR=a("46634"),axS=a(z),axT=a("49475"),axU=a(X),axV=a("52740"),axW=a(_),axX=a("56004"),axY=a(ah),axZ=a("6180"),ax0=a("59675"),ax2=[0,a(d),ee,12,ee,46,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],axp=[0,a(aO),dK,14,dK,48,[0,a(sr),[0,a(bB),[0,a(aM),0]]]],awR=a(p),awS=a("44630"),awT=a("52321"),awU=a(z),awV=a("55788"),awW=a(X),awX=a("59704"),awY=a(_),awZ=a("63635"),aw0=a(ah),aw1=a("7119"),aw2=a("68637"),aw3=a(p),aw4=a("40814"),aw5=a("47632"),aw6=a(z),aw7=a("50787"),aw8=a(X),aw9=a("54365"),aw_=a(_),aw$=a("57929"),axa=a(ah),axb=a("6434"),axc=a("61727"),axd=a(p),axe=a("38740"),axf=a("45057"),axg=a(z),axh=a("47802"),axi=a(X),axj=a("50957"),axk=a(_),axl=a("54110"),axm=a(ah),axn=a("5971"),axo=a("57657"),axq=[0,a(d),ee,12,ee,46,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],awP=[0,a(aO),Eh,14,Eh,48,[0,a(sr),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],awf=a(p),awg=a("44443"),awh=a("52101"),awi=a(z),awj=a("55555"),awk=a(X),awl=a("59454"),awm=a(_),awn=a("63369"),awo=a(ah),awp=a("7089"),awq=a("68350"),awr=a(p),aws=a("40643"),awt=a("47433"),awu=a(z),awv=a("50575"),aww=a(X),awx=a("54138"),awy=a(_),awz=a("57687"),awA=a(ah),awB=a("6407"),awC=a("61469"),awD=a(p),awE=a("38578"),awF=a("44869"),awG=a(z),awH=a("47602"),awI=a(X),awJ=a("50744"),awK=a(_),awL=a("53884"),awM=a(ah),awN=a("5946"),awO=a("57416"),awQ=[0,a(d),ee,12,ee,46,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],av$=[0,a(d),h4,14,h4,50,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],av6=[0,a(E),yl,14,yl,35,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],av7=[0,a(d),ib,12,ib,33,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],av2=[0,a(Q),wU,14,wU,42,[0,a("Article 29"),[0,a(fh),[0,a(L),0]]]],av1=a(id),avX=[0,a(Q),Bm,14,Bm,41,[0,a("Article 28"),[0,a(fh),[0,a(L),0]]]],avW=a(kk),avS=[0,a(Q),xX,14,xX,35,[0,a(wb),[0,a(fh),[0,a(L),0]]]],avR=a("121726"),avT=[0,a(d),kH,12,kH,33,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],avQ=[0,a(d),kH,12,kH,33,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],avU=[0,a(au),[0,a(Em),0]],avY=[0,a(d),mc,11,mc,38,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],avV=[0,a(d),mc,11,mc,38,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],avZ=[0,a(au),[0,a("montant_forfaitaire_d832_24"),0]],av3=[0,a(d),mx,11,mx,39,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],av0=[0,a(d),mx,11,mx,39,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],av4=[0,a(au),[0,a("montant_minimal_aide_d823_24"),0]],av8=[0,a(d),ib,12,ib,33,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],av5=[0,a(d),ib,12,ib,33,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],av9=[0,a(au),[0,a("condition_2_du_832_25"),0]],awa=[0,a(d),h4,14,h4,50,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],awb=[0,a(au),[0,a(kA),0]],av_=[0,a(d),h4,14,h4,50,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],awc=[0,a(au),[0,a(eJ),[0,a(bk),0]]],awd=[0,a(au),[0,a(eJ),[0,a(bk),0]]],ax3=[0,a(d),ee,12,ee,46,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],awe=[0,a(d),ee,12,ee,46,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ax4=[0,a(au),[0,a(z0),0]],ax_=[0,a(au),[0,a(bI),0]],ayb=[0,a(E),iH,14,iH,55,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayc=[0,a(au),[0,a(BI),0]],ax$=[0,a(E),iH,14,iH,55,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayf=[0,a(E),h_,14,h_,59,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayg=[0,a(au),[0,a(nk),0]],ayd=[0,a(E),h_,14,h_,59,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayj=[0,a(E),ir,14,ir,64,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayk=[0,a(au),[0,a(n2),0]],ayh=[0,a(E),ir,14,ir,64,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayl=[0,a(au),[0,a(ga),[0,a(ky),0]]],aym=[0,a(au),[0,a(ga),[0,a(ky),0]]],ayr=[0,a(d),ny,11,ny,38,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ayn=[0,a(d),ny,11,ny,38,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ays=[0,a(au),[0,a("montant_forfaitaire_d832_27"),0]],ayx=[0,a(d),hz,12,hz,46,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ayt=[0,a(d),hz,12,hz,46,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ayy=[0,a(au),[0,a(A9),0]],ayB=[0,a(d),kf,12,kf,38,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ayz=[0,a(d),kf,12,kf,38,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ayC=[0,a(au),[0,a(xQ),0]],ayG=[0,a(d),jn,21,jn,43,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ayD=[0,a(d),jn,21,jn,43,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ayH=[0,a(au),[0,a(r2),0]],ayL=[0,a(au),[0,a(kC),0]],ayO=[0,a(E),iW,14,iW,75,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayP=[0,a(au),[0,a(mM),0]],ayM=[0,a(E),iW,14,iW,75,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayS=[0,a(E),hD,14,hD,69,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayT=[0,a(au),[0,a(oo),0]],ayQ=[0,a(E),hD,14,hD,69,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayW=[0,a(E),jb,14,jb,70,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayX=[0,a(au),[0,a(mB),0]],ayU=[0,a(E),jb,14,jb,70,[0,a(cT),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ayY=[0,a(au),[0,a(fJ),[0,a(dP),0]]],ayZ=[0,a(au),[0,a(fJ),[0,a(dP),0]]],ay8=[0,a(d),h8,10,h8,17,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ay0=[0,a(d),h8,10,h8,17,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ay9=[0,a(au),[0,a("coefficient_prise_en_charge_d832_25_formule"),0]],azg=[0,a(au),[0,a(kw),0]],azj=[0,a(d),oe,12,oe,38,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azh=[0,a(d),oe,12,oe,38,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azk=[0,a(au),[0,a(vo),0]],azv=[0,a(d),hB,10,hB,23,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azl=[0,a(d),hB,10,hB,23,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azw=[0,a(au),[0,a("coefficient_prise_en_charge_d832_25_coeff_arrondi"),0]],azK=[0,a(au),[0,a(eN),0]],azT=[0,a(d),jl,10,jl,15,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azL=[0,a(d),jl,10,jl,15,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],azU=[0,a(au),[0,a("coefficient_prise_en_charge_d832_25_seuil"),0]],az9=[0,a(au),[0,a(bJ),0]],aAc=[0,a(d),kc,12,kc,31,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],az_=[0,a(d),kc,12,kc,31,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],aAd=[0,a(au),[0,a(cX),0]],aAm=[0,a(au),[0,a(fm),0]],avG=[0,a(E),C9,14,C9,33,[0,a(ey),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],avE=a(p),avF=a(p),avA=[0,a(E),A8,14,A8,39,[0,a(rN),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],avy=a(p),avz=a(p),avu=[0,a(E),rz,14,rz,36,[0,a(ey),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],avp=[0,a(aD),[0,a(ki),[0,a(ac),0]]],avq=[0,a(aD),[0,a(ki),0]],avr=[0,a(aD),[0,a(ki),[0,a(ae),0]]],avs=[0,a(aD),[0,a(ki),0]],avt=a(p),avv=[0,a(d),mO,10,mO,25,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],avo=[0,a(d),mO,10,mO,25,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],avl=[0,a(E),xy,14,xy,42,[0,a(rN),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],avh=[0,a(aG),Cm,14,Cm,36,[0,a(qR),[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],avb=[0,a(aD),[0,a(bJ),[0,a(ac),0]]],avc=[0,a(aD),[0,a(bJ),0]],avd=[0,a(aD),[0,a(bJ),[0,a(ae),0]]],ave=[0,a(aD),[0,a(bJ),0]],avf=a(p),avg=a(p),avi=[0,a(d),ob,10,ob,36,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ava=[0,a(d),ob,10,ob,36,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],au6=[0,a(aO),Av,14,Av,33,[0,a(cF),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],au4=a(hw),au5=a(hw),au7=[0,a(d),eG,10,eG,22,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],au3=[0,a(aO),nc,14,nc,33,[0,a(cF),[0,a(bB),[0,a(aM),0]]]],au1=a(hw),au2=a(hw),au8=[0,a(d),eG,10,eG,22,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],au0=[0,a(Q),f2,14,f2,33,[0,a(cF),[0,a(bX),[0,a(L),0]]]],auY=a(hw),auZ=a(hw),au9=[0,a(d),eG,10,eG,22,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],auU=[0,a(E),wh,14,wh,36,[0,a(ey),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],auJ=[0,a(aD),[0,a(bI),[0,a(ac),0]]],auK=[0,a(aD),[0,a(bI),0]],auL=[0,a(aD),[0,a(bI),[0,a(ae),0]]],auM=[0,a(aD),[0,a(bI),0]],auN=[0,a(bk),[0,a(bQ),[0,a(ac),0]]],auO=[0,a(bk),[0,a(bQ),0]],auP=[0,a(bk),[0,a(bQ),[0,a(ae),0]]],auQ=[0,a(bk),[0,a(bQ),0]],auR=a(kY),auS=a(p),auT=a(p),auV=[0,a(d),o5,10,o5,40,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],auI=[0,a(d),o5,10,o5,40,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],auC=[0,a(aO),Gb,14,Gb,33,[0,a(cF),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],auq=a(he),aur=a(b5),aus=a(dd),aut=a(he),auu=a(fd),auv=a(fd),auw=a(dd),aux=a(dd),auy=a(r7),auz=a(qI),auA=a(fd),auB=a(b5),auD=[0,a(d),eH,10,eH,17,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aup=[0,a(aO),j5,14,j5,33,[0,a(cF),[0,a(bB),[0,a(aM),0]]]],aud=a(he),aue=a(b5),auf=a(dd),aug=a(he),auh=a(fd),aui=a(fd),auj=a(dd),auk=a(dd),aul=a(r7),aum=a(qI),aun=a(fd),auo=a(b5),auE=[0,a(d),eH,10,eH,17,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],auc=[0,a(Q),qQ,14,qQ,33,[0,a(cF),[0,a(bX),[0,a(L),0]]]],at2=a(he),at3=a(b5),at4=a(dd),at5=a(he),at6=a(fd),at7=a(fd),at8=a(dd),at9=a(dd),at_=a(r7),at$=a(qI),aua=a(fd),aub=a(b5),auF=[0,a(d),eH,10,eH,17,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atY=[0,a(E),Eg,14,Eg,36,[0,a(ey),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],atS=[0,a(aD),[0,a(kt),[0,a(ac),0]]],atT=[0,a(aD),[0,a(kt),0]],atU=[0,a(aD),[0,a(kt),[0,a(ae),0]]],atV=[0,a(aD),[0,a(kt),0]],atW=a(p),atX=a(p),atZ=[0,a(d),mC,10,mC,32,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atR=[0,a(d),mC,10,mC,32,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atL=[0,a(aO),Ao,14,Ao,28,[0,a(cF),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],atJ=a(c4),atK=a(c4),atM=[0,a(d),eF,11,eF,25,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atI=[0,a(aO),wo,14,wo,28,[0,a(cF),[0,a(bB),[0,a(aM),0]]]],atG=a(c4),atH=a(c4),atN=[0,a(d),eF,11,eF,25,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atF=[0,a(Q),nh,14,nh,28,[0,a(cF),[0,a(bX),[0,a(L),0]]]],atD=a(c4),atE=a(c4),atO=[0,a(d),eF,11,eF,25,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aty=[0,a(Q),dy,14,dy,36,[0,a(sk),[0,a(bX),[0,a(L),0]]]],atu=a(FW),atv=a(iB),atw=a(iB),atx=a(FW),atz=[0,a(d),eb,12,eb,34,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ats=[0,a(aO),vn,14,vn,36,[0,a(sk),[0,a(bB),[0,a(aM),0]]]],ato=a(C7),atp=a(iB),atq=a(iB),atr=a(C7),att=[0,a(d),eb,12,eb,34,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atm=[0,a(aO),gI,14,gI,36,[0,a(sk),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],ati=a(Ey),atj=a(iB),atk=a(iB),atl=a(Ey),atn=[0,a(d),eb,12,eb,34,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atd=[0,a(E),FX,5,FX,50,[0,a(ey),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ate=[0,a(d),io,10,io,17,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atc=[0,a(E),zN,14,zN,36,[0,a(ey),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],atb=a(p),atf=[0,a(d),io,10,io,17,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ata=[0,a(d),io,10,io,17,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],as9=[0,a(E),xA,14,xA,28,[0,a(ey),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],as5=[0,a(Q),rf,14,rf,42,[0,a(Cf),[0,a(bX),[0,a(L),0]]]],as2=a("3.4"),as3=a(ig),as4=a(ig),asY=[0,a(Q),rj,14,rj,41,[0,a(Cf),[0,a(bX),[0,a(L),0]]]],asV=a("4."),asW=a(y_),asX=a(y_),asR=[0,a(E),zE,14,zE,29,[0,a("Article D842-2"),[0,a(so),[0,a(al),[0,a(ak),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],asP=a(ov),asQ=a(kK),asJ=[0,a(Q),EN,29,EN,64,[0,a(dS),[0,a(bX),[0,a(L),0]]]],asG=a(gB),asH=a(qW),asI=a(fp),asK=[0,a(d),cl,12,cl,47,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asE=[0,a(aO),wl,29,wl,64,[0,a(dS),[0,a(bB),[0,a(aM),0]]]],asB=a(gO),asC=a(qz),asD=a(fg),asF=[0,a(d),cl,12,cl,47,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asz=[0,a(aO),vO,29,vO,64,[0,a(dS),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],asw=a(oJ),asx=a(B1),asy=a(mQ),asA=[0,a(d),cl,12,cl,47,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asL=[0,a(d),cl,12,cl,47,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ast=[0,a(Q),z2,29,z2,64,[0,a(sb),[0,a(bX),[0,a(L),0]]]],asr=a(gB),ass=a(fp),asu=[0,a(d),cl,12,cl,47,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asp=[0,a(aO),Cr,29,Cr,64,[0,a(sb),[0,a(bB),[0,a(aM),0]]]],asn=a(gO),aso=a(fg),asq=[0,a(d),cl,12,cl,47,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asl=[0,a(aO),B$,29,B$,64,[0,a(sb),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],asj=a(oJ),ask=a(mQ),asm=[0,a(d),cl,12,cl,47,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asv=[0,a(d),cl,12,cl,47,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asc=a(p),asd=[0,a(Q),529,5,530,34,[0,a(dS),[0,a(bX),[0,a(L),0]]]],ar$=a(Bp),asa=a(v4),asb=a(DA),ase=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ar8=a(p),ar9=[0,a(Q),538,5,539,34,[0,a(dS),[0,a(bX),[0,a(L),0]]]],ar5=a("27905"),ar6=a("24683"),ar7=a("22911"),ar_=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ar2=a(z),ar3=[0,a(Q),h9,5,h9,35,[0,a(dS),[0,a(bX),[0,a(L),0]]]],arT=a(z),arU=a("4576"),arV=a("31539"),arW=a(z),arX=a("4043"),arY=a("27774"),arZ=a(z),ar0=a("3682"),ar1=a("25689"),ar4=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],arQ=a(p),arR=[0,a(aO),qT,5,qQ,34,[0,a(dS),[0,a(bB),[0,a(aM),0]]]],arN=a(DN),arO=a(yn),arP=a(wO),arS=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],arK=a(p),arL=[0,a(aO),415,5,416,34,[0,a(dS),[0,a(bB),[0,a(aM),0]]]],arH=a("26962"),arI=a("23848"),arJ=a("22136"),arM=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],arE=a(z),arF=[0,a(aO),ru,5,ru,35,[0,a(dS),[0,a(bB),[0,a(aM),0]]]],arv=a(z),arw=a("4421"),arx=a("30473"),ary=a(z),arz=a("3906"),arA=a("26835"),arB=a(z),arC=a("3557"),arD=a("24821"),arG=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ars=a(p),art=[0,a(aO),1197,5,1198,34,[0,a(dS),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],arp=a(CR),arq=a(wd),arr=a(Dg),aru=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],arm=a(p),arn=[0,a(aO),1206,5,1207,34,[0,a(dS),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],arj=a("26849"),ark=a("23748"),arl=a("22044"),aro=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],arg=a(z),arh=[0,a(aO),EK,5,EK,35,[0,a(dS),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],aq9=a(z),aq_=a("4403"),aq$=a("30345"),ara=a(z),arb=a("3890"),arc=a("26723"),ard=a(z),are=a("3542"),arf=a("24717"),ari=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asf=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aq5=[0,a(Q),iM,5,iM,61,[0,a(iw),[0,a(bX),[0,a(L),0]]]],aq2=a(Bp),aq3=a(v4),aq4=a(DA),aq6=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aq0=[0,a(aO),BP,5,BP,61,[0,a(iw),[0,a(bB),[0,a(aM),0]]]],aqX=a(DN),aqY=a(yn),aqZ=a(wO),aq1=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aqV=[0,a(aO),xD,5,xD,61,[0,a(iw),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],aqS=a(CR),aqT=a(wd),aqU=a(Dg),aqW=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aq7=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aqP=[0,a(Q),wH,14,wH,37,[0,a(iw),[0,a(bX),[0,a(L),0]]]],aqM=a("27765"),aqN=a("24198"),aqO=a("22680"),aqQ=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aqK=[0,a(aO),z8,14,z8,37,[0,a(iw),[0,a(bB),[0,a(aM),0]]]],aqH=a("26826"),aqI=a("23380"),aqJ=a("21913"),aqL=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aqF=[0,a(aO),f7,14,f7,37,[0,a(iw),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],aqC=a(Gf),aqD=a("23282"),aqE=a("21821"),aqG=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aqR=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aq8=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aqy=a(p),aqz=[0,a(Q),dT,5,be,34,[0,a(cG),[0,a(bX),[0,a(L),0]]]],aqv=a("30850"),aqw=a("26887"),aqx=a("25200"),aqA=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aqs=a(p),aqt=[0,a(Q),zy,5,115,34,[0,a(cG),[0,a(bX),[0,a(L),0]]]],aqp=a("37207"),aqq=a("32910"),aqr=a("30548"),aqu=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aqm=a(z),aqn=[0,a(Q),kE,5,kE,35,[0,a(cG),[0,a(bX),[0,a(L),0]]]],aqd=a(z),aqe=a("6101"),aqf=a("42052"),aqg=a(z),aqh=a("5390"),aqi=a("37032"),aqj=a(z),aqk=a("4909"),aql=a("34252"),aqo=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aqa=a(p),aqb=[0,a(aO),87,5,88,34,[0,a(cG),[0,a(bB),[0,a(aM),0]]]],ap9=a("29807"),ap_=a(sd),ap$=a("24348"),aqc=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ap6=a(p),ap7=[0,a(aO),97,5,98,34,[0,a(cG),[0,a(bB),[0,a(aM),0]]]],ap3=a("35949"),ap4=a(mX),ap5=a("29515"),ap8=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ap0=a(z),ap1=[0,a(aO),c3,5,c3,35,[0,a(cG),[0,a(bB),[0,a(aM),0]]]],apR=a(z),apS=a("5895"),apT=a("40630"),apU=a(z),apV=a(rM),apW=a(sa),apX=a(z),apY=a("4743"),apZ=a("33094"),ap2=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],apO=a(p),apP=[0,a(aO),884,5,885,34,[0,a(cG),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],apL=a("29682"),apM=a("25859"),apN=a("24246"),apQ=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],apI=a(p),apJ=[0,a(aO),894,5,gE,34,[0,a(cG),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],apF=a("35799"),apG=a(Bi),apH=a("29392"),apK=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],apC=a(z),apD=[0,a(aO),Ci,5,Ci,35,[0,a(cG),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],apt=a(z),apu=a("5870"),apv=a("40460"),apw=a(z),apx=a(ww),apy=a(AP),apz=a(z),apA=a("4723"),apB=a(yU),apE=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aqB=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],app=[0,a(Q),hS,14,hS,42,[0,a("Article 12"),[0,a(bX),[0,a(L),0]]]],apm=a(p),apn=a(id),apo=a(id),apg=[0,a(aO),yd,14,yd,29,[0,a(cF),[0,a(bB),[0,a(aM),0]]]],apa=a(p),apb=a(sd),apc=a(mX),apd=a(z),ape=a(rM),apf=a(sa),aph=[0,a(d),dK,11,dK,26,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ao$=[0,a(Q),hk,14,hk,29,[0,a(cF),[0,a(bX),[0,a(L),0]]]],ao5=a(p),ao6=a(sd),ao7=a(mX),ao8=a(z),ao9=a(rM),ao_=a(sa),api=[0,a(d),dK,11,dK,26,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ao3=[0,a(aO),rT,14,rT,29,[0,a(cF),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],aoX=a(p),aoY=a("25869"),aoZ=a(Bi),ao0=a(z),ao1=a(ww),ao2=a(AP),ao4=[0,a(d),dK,11,dK,26,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aoS=[0,a(Q),fR,14,fR,44,[0,a(mK),[0,a(bX),[0,a(L),0]]]],aoA=a(p),aoB=a("494900"),aoC=a("709000"),aoD=a(z),aoE=a("845600"),aoF=a(X),aoG=a("864600"),aoH=a(_),aoI=a("897700"),aoJ=a(ah),aoK=a("931100"),aoL=a(P),aoM=a("964200"),aoN=a(dn),aoO=a(CJ),aoP=a(dn),aoQ=a("32800"),aoR=a(CJ),aoT=[0,a(d),dO,11,dO,41,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aoy=[0,a(aO),27,14,27,44,[0,a(mK),[0,a("Articles valables du 1er juillet 2022 au 31 d\xc3\xa9cembre 2022"),[0,a(aM),0]]]],aog=a(p),aoh=a("487000"),aoi=a("697700"),aoj=a(z),aok=a(BX),aol=a(X),aom=a("850900"),aon=a(_),aoo=a("883400"),aop=a(ah),aoq=a("916300"),aor=a(P),aos=a("948800"),aot=a(dn),aou=a(Dr),aov=a(dn),aow=a("32300"),aox=a(Dr),aoz=[0,a(d),dO,11,dO,41,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aoe=[0,a(aO),rx,14,rx,44,[0,a(mK),[0,a("Articles valables du 1er janvier 2022 au 30 juin 2022"),[0,a(aM),0]]]],anY=a(p),anZ=a("468300"),an0=a("670900"),an1=a(z),an2=a("800200"),an3=a(X),an4=a("819200"),an5=a(_),an6=a("849500"),an7=a(ah),an8=a("881100"),an9=a(P),an_=a("912400"),an$=a(dn),aoa=a(A7),aob=a(dn),aoc=a("31100"),aod=a(A7),aof=[0,a(d),dO,11,dO,41,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],anW=[0,a(aO),zo,14,zo,44,[0,a(mK),[0,a("Articles valables du 1er janvier 2020 au 31 d\xc3\xa9cembre 2021"),[0,a(aM),0]]]],anE=a(p),anF=a("458800"),anG=a("657200"),anH=a(z),anI=a("783900"),anJ=a(X),anK=a("801500"),anL=a(_),anM=a(BX),anN=a(ah),anO=a("863100"),anP=a(P),anQ=a("893800"),anR=a(dn),anS=a(vu),anT=a(dn),anU=a(ot),anV=a(vu),anX=[0,a(d),dO,11,dO,41,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],anx=[0,a(aO),gb,14,gb,40,[0,a(cF),[0,a(L),[0,a(ci),[0,a(aM),0]]]]],anf=a(p),ang=a(rw),anh=a(rp),ani=a(z),anj=a(qE),ank=a(X),anl=a(q$),anm=a(_),ann=a(r5),ano=a(ah),anp=a(qB),anq=a(P),anr=a(rg),ans=a(dn),ant=a(hJ),anu=a(dn),anv=a(rk),anw=a(hJ),any=[0,a(d),eW,12,eW,38,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ane=[0,a(aO),yH,14,yH,40,[0,a(cF),[0,a(bB),[0,a(aM),0]]]],amY=a(p),amZ=a(rw),am0=a(rp),am1=a(z),am2=a(qE),am3=a(X),am4=a(q$),am5=a(_),am6=a(r5),am7=a(ah),am8=a(qB),am9=a(P),am_=a(rg),am$=a(dn),ana=a(hJ),anb=a(dn),anc=a(rk),and=a(hJ),anz=[0,a(d),eW,12,eW,38,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],amX=[0,a(Q),Ai,14,Ai,40,[0,a(cF),[0,a(bX),[0,a(L),0]]]],amF=a(p),amG=a(rw),amH=a(rp),amI=a(z),amJ=a(qE),amK=a(X),amL=a(q$),amM=a(_),amN=a(r5),amO=a(ah),amP=a(qB),amQ=a(P),amR=a(rg),amS=a(dn),amT=a(hJ),amU=a(dn),amV=a(rk),amW=a(hJ),anA=[0,a(d),eW,12,eW,38,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],amz=[0,a(d),iy,14,iy,50,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],amv=[0,a(Q),nT,14,nT,41,[0,a("Article 11"),[0,a(bX),[0,a(L),0]]]],amu=a(kk),amq=[0,a(E),zk,14,zk,29,[0,a(ey),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],amp=a(xr),amr=[0,a(d),oM,11,oM,26,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],amo=[0,a(d),oM,11,oM,26,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ams=[0,a(aD),[0,a("fraction_l832_3"),0]],amw=[0,a(d),nn,11,nn,38,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],amt=[0,a(d),nn,11,nn,38,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],amx=[0,a(aD),[0,a("montant_forfaitaire_d823_16"),0]],amA=[0,a(d),iy,14,iy,50,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],amB=[0,a(aD),[0,a(kA),0]],amy=[0,a(d),iy,14,iy,50,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],amC=[0,a(aD),[0,a(eJ),[0,a(bk),0]]],amD=[0,a(aD),[0,a(eJ),[0,a(bk),0]]],anB=[0,a(d),eW,12,eW,38,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],amE=[0,a(d),eW,12,eW,38,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],anC=[0,a(aD),[0,a(E6),0]],aoU=[0,a(d),dO,11,dO,41,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],anD=[0,a(d),dO,11,dO,41,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aoV=[0,a(aD),[0,a("abattement_forfaitaire_d823_17"),0]],apj=[0,a(d),dK,11,dK,26,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aoW=[0,a(d),dK,11,dK,26,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],apk=[0,a(aD),[0,a("loyer_r\xc3\xa9f\xc3\xa9rence"),0]],apq=[0,a(d),mo,11,mo,39,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],apl=[0,a(d),mo,11,mo,39,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],apr=[0,a(aD),[0,a("montant_minimal_aide_d823_16"),0]],asg=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],aps=[0,a(d),ay,12,ay,35,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ash=[0,a(aD),[0,a(C1),0]],asM=[0,a(d),cl,12,cl,47,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asi=[0,a(d),cl,12,cl,47,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asN=[0,a(aD),[0,a(zm),0]],asS=[0,a(d),nS,10,nS,31,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asO=[0,a(d),nS,10,nS,31,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asT=[0,a(aD),[0,a("loyer_principal_avec_r\xc3\xa9duction_meubl\xc3\xa9"),0]],asZ=[0,a(d),nb,11,nb,38,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],asU=[0,a(d),nb,11,nb,38,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],as0=[0,a(aD),[0,a("plafond_suppression_d823_16"),0]],as6=[0,a(d),oW,11,oW,39,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],as1=[0,a(d),oW,11,oW,39,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],as7=[0,a(aD),[0,a("plafond_d\xc3\xa9gressivit\xc3\xa9_d823_16"),0]],as_=[0,a(d),h9,11,h9,25,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],as8=[0,a(d),h9,11,h9,25,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],as$=[0,a(aD),[0,a("loyer_\xc3\xa9ligible"),0]],atg=[0,a(aD),[0,a(kt),0]],atA=[0,a(d),eb,12,eb,34,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],ath=[0,a(d),eb,12,eb,34,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atB=[0,a(aD),[0,a(E7),0]],atP=[0,a(d),eF,11,eF,25,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atC=[0,a(d),eF,11,eF,25,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],atQ=[0,a(aD),[0,a("rapport_loyers"),0]],at0=[0,a(aD),[0,a(bI),0]],auG=[0,a(d),eH,10,eH,17,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],at1=[0,a(d),eH,10,eH,17,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],auH=[0,a(aD),[0,a("taux_loyer_\xc3\xa9ligible_formule"),0]],auW=[0,a(aD),[0,a(bJ),0]],au_=[0,a(d),eG,10,eG,22,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],auX=[0,a(d),eG,10,eG,22,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],au$=[0,a(aD),[0,a("taux_loyer_\xc3\xa9ligible_taux_arrondi"),0]],avj=[0,a(aD),[0,a(ki),0]],avm=[0,a(d),oD,11,oD,39,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],avk=[0,a(d),oD,11,oD,39,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],avn=[0,a(aD),[0,a("taux_prise_compte_ressources"),0]],avw=[0,a(aD),[0,a(fm),0]],avB=[0,a(d),nX,12,nX,37,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],avx=[0,a(d),nX,12,nX,37,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],avC=[0,a(aD),[0,a(CI),0]],avH=[0,a(d),mP,12,mP,31,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],avD=[0,a(d),mP,12,mP,31,[0,a(K),[0,a(t),[0,a(i),[0,a(e),0]]]]],avI=[0,a(aD),[0,a(cX),0]],avK=a(ig),avJ=[0,a(E),l2,13,l2,74,[0,a(ey),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],avP=[0,a(E),l2,13,l2,74,[0,a(ey),[0,a(dC),[0,a(bb),[0,a(a4),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],avM=a(xr),avN=a(oE),avL=[0,a(aG),eU,13,eU,61,[0,a(qR),[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],avO=[0,a(aG),eU,13,eU,61,[0,a(qR),[0,a(bj),[0,a(ag),[0,a(x),[0,a(aa),[0,a(w),0]]]]]]],amc=[7,0],amd=[5,0],ame=[4,0],amf=[3,0],amg=[2,0],amh=[1,0],ami=[0,0],amj=[6,0],amk=[0,a(bw),29,5,38,6,[0,a(b6),[0,a(lV),[0,a(aC),0]]]],amb=a(wM),aml=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],al_=[8,0],al$=[0,a(bw),47,5,49,6,[0,a(b6),[0,a(lV),[0,a(aC),0]]]],al9=a(xO),ama=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],alZ=[7,0],al0=[5,0],al1=[4,0],al2=[3,0],al3=[2,0],al4=[1,0],al5=[0,0],al6=[6,0],al7=[0,a(bw),68,5,77,6,[0,a(b6),[0,a(nO),[0,a(aC),0]]]],alY=a(AS),al8=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],alV=[8,0],alW=[0,a(bw),86,5,88,6,[0,a(b6),[0,a(nO),[0,a(aC),0]]]],alU=a(u9),alX=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],alK=[7,0],alL=[5,0],alM=[4,0],alN=[3,0],alO=[2,0],alP=[1,0],alQ=[0,0],alR=[6,0],alS=[0,a(bw),c3,5,bp,6,[0,a(b6),[0,a(lY),[0,a(aC),0]]]],alJ=a(BA),alT=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],alG=[8,0],alH=[0,a(bw),cs,5,cQ,6,[0,a(b6),[0,a(lY),[0,a(aC),0]]]],alF=a(ED),alI=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],alv=[7,0],alw=[5,0],alx=[4,0],aly=[3,0],alz=[2,0],alA=[1,0],alB=[0,0],alC=[6,0],alD=[0,a(bw),eY,5,fL,6,[0,a(b6),[0,a(no),[0,a(aC),0]]]],alu=a(BQ),alE=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],alr=[8,0],als=[0,a(bw),qS,5,nU,6,[0,a(b6),[0,a(no),[0,a(aC),0]]]],alq=a(wZ),alt=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],alg=[7,0],alh=[5,0],ali=[4,0],alj=[3,0],alk=[2,0],all=[1,0],alm=[0,0],aln=[6,0],alo=[0,a(bw),hZ,5,iM,6,[0,a(fW),[0,a(mN),[0,a(aC),0]]]],alf=a(zR),alp=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],alc=[8,0],ald=[0,a(bw),w4,5,yF,6,[0,a(fW),[0,a(mN),[0,a(aC),0]]]],alb=a(EC),ale=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],ak3=[7,0],ak4=[5,0],ak5=[4,0],ak6=[3,0],ak7=[2,0],ak8=[1,0],ak9=[0,0],ak_=[6,0],ak$=[0,a(bw),vG,5,E3,6,[0,a(fW),[0,a(op),[0,a(aC),0]]]],ak2=a(Eo),ala=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],akZ=[8,0],ak0=[0,a(bw),E_,5,vC,6,[0,a(fW),[0,a(op),[0,a(aC),0]]]],akY=a(Fl),ak1=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],akO=[7,0],akP=[5,0],akQ=[4,0],akR=[3,0],akS=[2,0],akT=[1,0],akU=[0,0],akV=[6,0],akW=[0,a(bw),rn,5,nT,6,[0,a(b6),[0,a(m$),[0,a(aC),0]]]],akN=a(v6),akX=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],akK=[8,0],akL=[0,a(bw),Be,5,nl,6,[0,a(b6),[0,a(m$),[0,a(aC),0]]]],akJ=a(zQ),akM=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],amm=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],akI=[0,a(bw),11,12,11,24,[0,a(B),[0,a(aC),0]]],amn=[0,a(hl),[0,a(z9),0]],akE=[0,a(eL),28,5,29,33,[0,a(Cv),[0,a(cf),0]]],akD=a(xS),akF=[0,a(eL),6,12,6,19,[0,a(cf),0]],akB=[0,a(eL),48,5,49,33,[0,a(AK),[0,a(cf),0]]],akA=a(xo),akC=[0,a(eL),6,12,6,19,[0,a(cf),0]],aky=[0,a(eL),64,5,65,33,[0,a(Ch),[0,a(cf),0]]],akx=a(B4),akz=[0,a(eL),6,12,6,19,[0,a(cf),0]],akv=[0,a(eL),82,5,83,33,[0,a(wT),[0,a(cf),0]]],aku=a(BY),akw=[0,a(eL),6,12,6,19,[0,a(cf),0]],akG=[0,a(eL),6,12,6,19,[0,a(cf),0]],akt=[0,a(eL),6,12,6,19,[0,a(cf),0]],akH=[0,a(f_),[0,a(bQ),0]],ako=[0,a(E),zg,14,zg,28,[0,a(kR),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],akn=a(p),akp=[0,a(d),f8,12,f8,26,[0,a(ck),[0,a(A),[0,a(e),0]]]],akm=[0,a(E),Dl,14,Dl,28,[0,a(kL),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],akl=a(p),akq=[0,a(d),f8,12,f8,26,[0,a(ck),[0,a(A),[0,a(e),0]]]],akg=[0,a(E),yc,20,yc,55,[0,a(kL),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],akd=a(p),ake=a(p),akf=a(kK),akh=[0,a(d),dQ,11,dQ,43,[0,a(ck),[0,a(A),[0,a(e),0]]]],akb=[0,a(E),DK,20,DK,51,[0,a(kL),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aj_=a(p),aj$=a(p),aka=a(kK),akc=[0,a(d),dQ,11,dQ,43,[0,a(ck),[0,a(A),[0,a(e),0]]]],aj8=[0,a(E),yi,7,yi,42,[0,a(kR),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],aj4=a(CF),aj5=a(et),aj6=a(kK),aj7=a(p),aj9=[0,a(d),dQ,11,dQ,43,[0,a(ck),[0,a(A),[0,a(e),0]]]],aj2=[0,a(E),wG,7,wG,51,[0,a(kR),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],ajY=a(CF),ajZ=a(et),aj0=a(kK),aj1=a(p),aj3=[0,a(d),dQ,11,dQ,43,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajT=[0,a(E),wy,14,wy,36,[0,a(kL),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],ajU=[0,a(d),fK,11,fK,33,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajR=[0,a(E),B0,14,B0,36,[0,a(kR),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],ajQ=a(cI),ajS=[0,a(d),fK,11,fK,33,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajK=[0,a(E),vM,14,vM,36,[0,a(kR),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],ajL=[0,a(d),fM,11,fM,33,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajJ=[0,a(E),x0,14,x0,36,[0,a(kL),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],ajM=[0,a(d),fM,11,fM,33,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajF=[0,a(E),vQ,14,vQ,36,[0,a("Article R824-3"),[0,a(ec),[0,a(eg),[0,a(ad),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],ajA=[0,0],ajB=[1,0],ajC=[1,0],ajD=[0,0],ajE=[0,0],ajG=[0,a(d),oq,11,oq,33,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajz=[0,a(d),oq,11,oq,33,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajH=[0,a(kJ),[0,a("mode_occupation_impay\xc3\xa9"),0]],ajN=[0,a(d),fM,11,fM,33,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajI=[0,a(d),fM,11,fM,33,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajO=[0,a(kJ),[0,a("d\xc3\xa9pense_logement_brute"),0]],ajV=[0,a(d),fK,11,fK,33,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajP=[0,a(d),fK,11,fK,33,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajW=[0,a(kJ),[0,a("d\xc3\xa9pense_logement_nette"),0]],aki=[0,a(d),dQ,11,dQ,43,[0,a(ck),[0,a(A),[0,a(e),0]]]],ajX=[0,a(d),dQ,11,dQ,43,[0,a(ck),[0,a(A),[0,a(e),0]]]],akj=[0,a(kJ),[0,a("seuil_impay\xc3\xa9_d\xc3\xa9pense_de_logement"),0]],akr=[0,a(d),f8,12,f8,26,[0,a(ck),[0,a(A),[0,a(e),0]]]],akk=[0,a(d),f8,12,f8,26,[0,a(ck),[0,a(A),[0,a(e),0]]]],aks=[0,a(kJ),[0,a("montant_impay\xc3\xa9"),0]],aju=[0,a(c6),rP,5,rP,42,[0,a(km),[0,a(j8),[0,a(ez),[0,a(eS),[0,a(eV),[0,a(eu),[0,a(jc),[0,a(aa),[0,a(af),0]]]]]]]]]],ajv=[0,a(d),cP,12,cP,31,[0,a(fH),[0,a(A),[0,a(e),0]]]],ajs=[0,a(c6),eB,5,eB,41,[0,a(kI),[0,a(kv),[0,a(ez),[0,a(eS),[0,a(eV),[0,a(eu),[0,a(j9),[0,a(a9),[0,a(af),0]]]]]]]]]],ajt=[0,a(d),cP,12,cP,31,[0,a(fH),[0,a(A),[0,a(e),0]]]],ajq=[0,a(c6),266,5,vI,42,[0,a(kI),[0,a(kv),[0,a(ez),[0,a(eS),[0,a(eV),[0,a(eu),[0,a(j9),[0,a(a9),[0,a(af),0]]]]]]]]]],ajr=[0,a(d),cP,12,cP,31,[0,a(fH),[0,a(A),[0,a(e),0]]]],ajn=a("1952"),ajo=[0,a(c6),xm,5,xm,48,[0,a(kI),[0,a(kv),[0,a(ez),[0,a(eS),[0,a(eV),[0,a(eu),[0,a(j9),[0,a(a9),[0,a(af),0]]]]]]]]]],ajp=[0,a(d),cP,12,cP,31,[0,a(fH),[0,a(A),[0,a(e),0]]]],ajk=a("1953"),ajl=[0,a(c6),nl,5,nl,48,[0,a(kI),[0,a(kv),[0,a(ez),[0,a(eS),[0,a(eV),[0,a(eu),[0,a(j9),[0,a(a9),[0,a(af),0]]]]]]]]]],ajm=[0,a(d),cP,12,cP,31,[0,a(fH),[0,a(A),[0,a(e),0]]]],ajh=a("1954"),aji=[0,a(c6),dh,5,dh,48,[0,a(kI),[0,a(kv),[0,a(ez),[0,a(eS),[0,a(eV),[0,a(eu),[0,a(j9),[0,a(a9),[0,a(af),0]]]]]]]]]],ajj=[0,a(d),cP,12,cP,31,[0,a(fH),[0,a(A),[0,a(e),0]]]],ajw=[0,a(d),cP,12,cP,31,[0,a(fH),[0,a(A),[0,a(e),0]]]],ajg=[0,a(d),cP,12,cP,31,[0,a(fH),[0,a(A),[0,a(e),0]]]],ajx=[0,a(rI),[0,a("\xc3\xa2ge_ouverture_droit"),0]],ajd=[0,a(E),xM,14,xM,36,[0,a(d9),[0,a(an),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]],ai1=a(p),ai2=a(Ea),ai3=a(wp),ai4=a(z),ai5=a(ig),ai6=a(X),ai7=a(ov),ai8=a(_),ai9=a(qD),ai_=a(ah),ai$=a(hO),aja=a(ah),ajb=a(kd),ajc=a(hO),aje=[0,a(d),n6,12,n6,34,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],ai0=[0,a(d),n6,12,n6,34,[0,a(D),[0,a(t),[0,a(i),[0,a(e),0]]]]],ajf=[0,a(kq),[0,a(v7),0]],aiW=[0,a(E),yw,5,yw,26,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aiI=a(p),aiJ=a("1.2"),aiK=a("1.5"),aiL=a(z),aiM=a(ig),aiN=a(X),aiO=a(ov),aiP=a(_),aiQ=a(qD),aiR=a(ah),aiS=a(hO),aiT=a(ah),aiU=a(kd),aiV=a(hO),aiX=[0,a(d),hs,12,hs,34,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],aiH=[0,a(E),vN,14,vN,36,[0,a(cr),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],ait=a(p),aiu=a(Ea),aiv=a(wp),aiw=a(z),aix=a(ig),aiy=a(X),aiz=a(ov),aiA=a(_),aiB=a(qD),aiC=a(ah),aiD=a(hO),aiE=a(ah),aiF=a(kd),aiG=a(hO),aiY=[0,a(d),hs,12,hs,34,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ais=[0,a(d),hs,12,hs,34,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],aiZ=[0,a(ky),[0,a(r2),0]],aio=[0,a(E),Fd,5,Fd,26,[0,a(rs),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aim=a(b5),ail=a(cI),ain=a(b5),aip=[0,a(d),iK,12,iK,19,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],aik=[0,a(E),xd,14,xd,21,[0,a(rs),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aii=a(b5),aih=a(cI),aij=a(b5),aid=[0,a(E),EB,14,EB,50,[0,a(rs),[0,a(a7),[0,a(ap),[0,a(am),[0,a(ag),[0,a(x),[0,a(F),[0,a(w),0]]]]]]]]],aic=[1,0],ah9=[0,a(Q),Fv,5,Fv,26,[0,a(ss),[0,a(fh),[0,a(L),0]]]],ahU=a("0.328"),ahV=a(x5),ahW=[1,0],ahX=a(v$),ahY=a(DW),ahZ=a(x5),ah0=a(vl),ah1=a(y9),ah2=a(DW),ah3=a("0.024"),ah4=a(wu),ah5=a(y9),ah6=a(b5),ah7=a(p),ah8=a(wu),ah_=[0,a(d),gH,11,gH,35,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ahT=[0,a(Q),wi,14,wi,38,[0,a(ss),[0,a(fh),[0,a(L),0]]]],ahB=a("0.48"),ahC=a(xp),ahD=[1,0],ahE=a(sn),ahF=a(zd),ahG=a(xp),ahH=a("0.264"),ahI=a(yy),ahJ=a(zd),ahK=a("0.216"),ahL=a(Ej),ahM=a(yy),ahN=a("0.104"),ahO=a(yu),ahP=a(Ej),ahQ=a(CC),ahR=a(p),ahS=a(yu),ahx=[0,a(Q),DE,14,DE,41,[0,a(ss),[0,a(fh),[0,a(L),0]]]],ahv=a("7632"),ahw=a("4557"),ahy=[0,a(d),l9,11,l9,38,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ahu=[0,a(d),l9,11,l9,38,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ahz=[0,a(dP),[0,a("montant_forfaitaire_d832_26"),0]],ah$=[0,a(d),gH,11,gH,35,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],ahA=[0,a(d),gH,11,gH,35,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],aia=[0,a(dP),[0,a("tranches_revenus_d832_26"),0]],aie=[0,a(d),nA,11,nA,47,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],aib=[0,a(d),nA,11,nA,47,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],aif=[0,a(dP),[0,a("tranches_revenus_d832_26_multipli\xc3\xa9es"),0]],aiq=[0,a(d),iK,12,iK,19,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],aig=[0,a(d),iK,12,iK,19,[0,a(N),[0,a(t),[0,a(i),[0,a(e),0]]]]],air=[0,a(dP),[0,a(bQ),0]],ahq=[0,a(fc),ge,5,ge,34,[0,a(cF),[0,a(rm),[0,a(sp),0]]]],ahr=[0,a(d),n9,12,n9,19,[0,a(fN),[0,a(i),[0,a(e),0]]]],ahp=[0,a(d),n9,12,n9,19,[0,a(fN),[0,a(i),[0,a(e),0]]]],ahm=[0,a(fc),xY,39,xY,68,[0,a(nw),[0,a(rm),[0,a(sp),0]]]],ahl=a(lZ),ahg=[0,a(c6),37,9,37,20,[0,a("Article L136-1-3"),[0,a("Section 1 : De la contribution sociale sur les revenus d'activit\xc3\xa9 et sur les revenus de remplacement"),[0,a("Chapitre 6 : Contribution sociale g\xc3\xa9n\xc3\xa9ralis\xc3\xa9e"),[0,a(jc),[0,a(aa),[0,a(af),0]]]]]]],ahh=[0,a(d),f4,11,f4,22,[0,a(fN),[0,a(i),[0,a(e),0]]]],ahf=[0,a(d),f4,11,f4,22,[0,a(fN),[0,a(i),[0,a(e),0]]]],ahi=[0,a(d),f4,11,f4,22,[0,a(fN),[0,a(i),[0,a(e),0]]]],ahe=[0,a(d),f4,11,f4,22,[0,a(fN),[0,a(i),[0,a(e),0]]]],ahj=[0,a(bk),[0,a("exon\xc3\xa9r\xc3\xa9_csg"),0]],ahn=[0,a(d),hV,11,hV,20,[0,a(fN),[0,a(i),[0,a(e),0]]]],ahk=[0,a(d),hV,11,hV,20,[0,a(fN),[0,a(i),[0,a(e),0]]]],aho=[0,a(bk),[0,a("taux_crds"),0]],ahs=[0,a(bk),[0,a(bQ),0]],aht=[0,a(fc),fE,13,fE,24,[0,a(cF),[0,a(rm),[0,a(sp),0]]]],ag6=a("cat\xc3\xa9gorie_\xc3\xa9quivalence_loyer_d842_16_in"),ag7=a(hy),ag8=a(hW),ag9=a(iE),ag_=a(iF),ag$=a(kD),aha=a(AT),ahb=a(vj),ahc=a(Dd),ahd=[0,a("CalculAllocationLogementFoyer_in"),0],agR=a(z$),agS=a("charges_mensuelles_pr\xc3\xaat_in"),agT=a(yX),agU=a(AM),agV=a(ym),agW=a(u0),agX=a(Ar),agY=a(wP),agZ=a(hy),ag0=a(hW),ag1=a(iE),ag2=a(iF),ag3=a("ressources_m\xc3\xa9nage_arrondies_base_in"),ag4=[0,a("CalculAllocationLogementAccessionPropri\xc3\xa9t\xc3\xa9_in"),0],agC=a("changement_logement_d842_4_in"),agD=a(vL),agE=a(Bw),agF=a(BL),agG=a(B5),agH=a(BF),agI=a(Fs),agJ=a(hW),agK=a(iE),agL=a(iF),agM=a(hy),agN=a(F$),agO=a(kD),agP=a("loyer_principal_in"),agQ=[0,a("CalculAllocationLogementLocatif_in"),0],agn=a(hy),ago=a("anciennet\xc3\xa9_logement_in"),agp=a("type_pr\xc3\xaat_in"),agq=a(hW),agr=a(Ar),ags=a(z$),agt=a(yX),agu=a(AM),agv=a(u0),agw=a(ym),agx=a(iE),agy=a(iF),agz=a(kD),agA=a(wP),agB=[0,a("CalculAidePersonnalis\xc3\xa9eLogementAccessionPropri\xc3\xa9t\xc3\xa9_in"),0],agb=a("n_nombre_parts_d832_25_in"),agc=a("condition_2_du_832_25_in"),agd=a(AT),age=a(hy),agf=a(hW),agg=a(iE),agh=a(iF),agi=a(kD),agj=a(vj),agk=a(Dd),agl=[0,a("CalculAidePersonnalis\xc3\xa9eLogementFoyer_in"),0],afY=a(vL),afZ=a(Bw),af0=a(BL),af1=a(B5),af2=a(BF),af3=a(Fs),af4=a(hW),af5=a(iE),af6=a(iF),af7=a(hy),af8=a(F$),af9=a(kD),af_=a("loyer_principal_base_in"),af$=[0,a("CalculAidePersonnalis\xc3\xa9eLogementLocatif_in"),0],afP=a("enfant_\xc3\xa0_na\xc3\xaetre_apr\xc3\xa8s_quatri\xc3\xa8me_mois_grossesse"),afQ=a("condition_rattach\xc3\xa9_foyer_fiscal_parent_ifi"),afR=a("situation_familiale"),afS=a("nombre_autres_occupants_logement"),afT=a("personnes_\xc3\xa0_charge"),afU=a("logement"),afV=a("prestations_re\xc3\xa7ues"),afW=[0,a("M\xc3\xa9nage"),0],afF=a("zone"),afG=a("surface_m_carr\xc3\xa9s"),afH=a("logement_decent_l89_462"),afI=a("usufruit"),afJ=a("lou\xc3\xa9_ou_sous_lou\xc3\xa9_\xc3\xa0_des_tiers"),afK=a("propri\xc3\xa9taire"),afL=a("mode_occupation"),afM=a("est_ehpad_ou_maison_autonomie_l313_12_asf"),afN=a("r\xc3\xa9sidence_principale"),afO=[0,a("Logement"),0],afz=a(zf),afB=a("R\xc3\xa9sidentLogementFoyer"),afC=a("AccessionPropri\xc3\xa9t\xc3\xa9LocalUsageExclusifHabitation"),afD=a(Dm),afE=a(x1),afA=[0,a("ModeOccupation"),0],afv=a(F1),afx=a("AccessionPropri\xc3\xa9t\xc3\xa9"),afy=a(x4),afw=[0,a("Cat\xc3\xa9gorieCalculAPL"),0],afm=a("changement_logement_d842_4"),afn=a("logement_meubl\xc3\xa9_d842_2"),afo=a("\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers"),afp=a("colocation"),afq=a("logement_est_chambre"),afr=a("b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s"),afs=a("loyer_principal"),aft=a("bailleur"),afu=[0,a(F1),0],afh=a("personne_h\xc3\xa9berg\xc3\xa9e_centre_soin_l_L162_22_3_s\xc3\xa9curit\xc3\xa9_sociale"),afi=a("patrimoine"),afj=a("nationalit\xc3\xa9"),afk=a(Bx),afl=[0,a(qw),0],afe=a(D2),afg=a(CU),aff=[0,a("Personne\xc3\x80Charge"),0],ae4=a("pr\xc3\xaat"),ae5=a("anciennet\xc3\xa9_logement"),ae6=a("situation_r822_11_13_17"),ae7=a("copropri\xc3\xa9t\xc3\xa9"),ae8=a("local_habit\xc3\xa9_premi\xc3\xa8re_fois_b\xc3\xa9n\xc3\xa9ficiaire"),ae9=a("type_travaux_logement_r842_5"),ae_=a("type_travaux_logement_d832_15"),ae$=a("date_entr\xc3\xa9e_logement"),afa=a("charges_mensuelles_pr\xc3\xaat"),afb=a("mensualit\xc3\xa9_principale"),afc=a("logement_situ\xc3\xa9_commune_d\xc3\xa9s\xc3\xa9quilibre_l831_2"),afd=[0,a("Propri\xc3\xa9taire"),0],ae1=a(AU),ae3=a(zF),ae2=[0,a("ChangementLogementD842_4"),0],aeY=a("Fran\xc3\xa7aise"),ae0=a("\xc3\x89trang\xc3\xa8re"),aeZ=[0,a("Nationalit\xc3\xa9"),0],aeV=a(kS),aeX=a(o6),aeW=[0,a("Lou\xc3\xa9OuSousLou\xc3\xa9\xc3\x80DesTiers"),0],aeR=a(CZ),aeT=a("BailleurPriv\xc3\xa9AvecConventionnementSocial"),aeU=a("BailleurPriv\xc3\xa9"),aeS=[0,a("TypeBailleur"),0],aeJ=a("situation_garde_altern\xc3\xa9e"),aeK=a(rC),aeL=a(q1),aeM=a(q0),aeN=a(qV),aeO=a(qG),aeP=a(rt),aeQ=[0,a(D2),0],aeB=a(qG),aeC=a(qV),aeD=a(EY),aeE=a(q0),aeF=a(q1),aeG=a(rC),aeH=a(rt),aeI=[0,a("EnfantPrestationsFamiliales"),0],aet=a("cat\xc3\xa9gorie_\xc3\xa9quivalence_loyer_d842_16"),aeu=a("redevance"),aev=a("construit_application_loi_1957_12_III"),aew=a("date_conventionnement"),aex=a(Fj),aey=a("remplit_conditions_r832_21"),aez=a("type"),aeA=[0,a(x4),0],ael=a("titulaire_allocation_personne_\xc3\xa2g\xc3\xa9e"),aem=a("b\xc3\xa9n\xc3\xa9ficiaire_l161_19_l351_8_l643_3_s\xc3\xa9cu"),aen=a("incapacit\xc3\xa9_80_pourcent_ou_restriction_emploi"),aeo=a("parent\xc3\xa9"),aep=a("ascendant_descendant_collat\xc3\xa9ral_deuxi\xc3\xa8me_troisi\xc3\xa8me_degr\xc3\xa9"),aeq=a("ressources"),aer=a(Bx),aes=[0,a(CU),0],aeh=a(u5),aei=a(vk),aej=a(EJ),aek=[0,a("TrancheRevenuD\xc3\xa9cimal"),0],aec=a(u5),aed=a(vk),aee=a(EJ),aef=[0,a("TrancheRevenu"),0],ad_=a(AC),aea=a(C$),ad$=[0,a("NeufOuAncien"),0],ad6=a("titulaire_pr\xc3\xaat"),ad7=a("date_signature"),ad8=a("type_pr\xc3\xaat"),ad9=[0,a("Pr\xc3\xaat"),0],adZ=a(aw),ad0=a(cX),ad1=a(FS),ad2=a(qA),ad3=a(u$),ad4=a(q4),ad5=[0,a(ao),0],adV=a(aw),adW=a(cX),adX=[0,a(V),0],adS=a(aw),adT=a(cX),adU=[0,a(bh),0],adP=a("ancienne_allocation_logement"),adQ=a("ancien_loyer_principal"),adR=[0,a("InfosChangementLogementD842_4"),0],adM=a(aw),adN=a(cX),adO=[0,a("Traitement_formule_aide_finale"),0],adG=a(aw),adH=a(cX),adI=a("coefficient_prise_en_charge_d832_10"),adJ=a(q7),adK=a(sm),adL=[0,a(aj),0],adv=a(aw),adw=a(cX),adx=a("coefficient_prise_en_charge_d832_25"),ady=a(vo),adz=a(z0),adA=a(xQ),adB=a(r2),adC=a(Em),adD=a(A9),adE=[0,a(au),0],adm=a(aw),adn=a(cX),ado=a(CI),adp=a(E6),adq=a(E7),adr=a(C1),ads=a(zm),adt=[0,a(aD),0],adj=a("satisfait_conditions_l512_2_code_s\xc3\xa9curit\xc3\xa9_sociale"),adk=[0,a("Conditions\xc3\x89trangers"),0],adg=a("ne_produisant_pas_revenu_p\xc3\xa9riode_r822_3_3_r822_4"),adh=a("produisant_revenu_p\xc3\xa9riode_r822_3_3_r822_4"),adi=[0,a("Patrimoine"),0],add=a("conforme_article_l442_1"),ade=a("date_naissance_personne_sous_location"),adf=[0,a("PersonneSousLocation"),0],adb=a("conventionn\xc3\xa9_livre_III_titre_II_chap_I_sec_3"),adc=[0,a("ConventionANHA"),0],ac_=a("r\xc3\xa9duction_loyer_solidarit\xc3\xa9_per\xc3\xa7ue"),ac$=a(Fj),ada=[0,a("ConventionBailleurSocial"),0],ac1=a(om),ac3=a(U),ac4=a(qU),ac5=a(nY),ac6=a(DS),ac7=a(i0),ac8=a(BW),ac9=a(y1),ac2=[0,a(FR),0],acW=a(ku),acY=a(kh),acZ=a(Co),acX=[0,a(CW),0],acQ=a(A_),acS=a(D4),acT=a(j7),acU=a(Ft),acV=a(yN),acR=[0,a("PriseEnChargeEnfant"),0],acG=a(my),acI=a(oy),acJ=a(mb),acK=a(Ds),acL=a(yW),acM=a(o8),acN=a(C5),acO=a(nr),acP=a(oK),acH=[0,a(BZ),0],acD=a(EU),acF=a(Ap),acE=[0,a("SituationFamilialeCalculAPL"),0],acy=a("\xc3\x89tudiantLog\xc3\xa9EnChambreCROUS"),acA=a("\xc3\x89tudiantLog\xc3\xa9EnChambreCROUSR\xc3\xa9habilit\xc3\xa9e"),acB=a("Personnes\xc3\x82g\xc3\xa9esSelon3DeD842_16"),acC=a(ES),acz=[0,a("Cat\xc3\xa9gorie\xc3\x89quivalenceLoyerAllocationLogementFoyer"),0],act=a("LogementPersonnes\xc3\x82g\xc3\xa9esOuHandicap\xc3\xa9es"),acv=a("R\xc3\xa9sidenceSociale"),acw=a("FoyerJeunesTrvailleursOuMigrantsConventionn\xc3\xa9L353_2Avant1995"),acx=a(ik),acu=[0,a("TypeLogementFoyer"),0],acm=a("C\xc3\xa9libataire"),aco=a("Mari\xc3\xa9s"),acp=a("Pacs\xc3\xa9s"),acq=a(yY),acr=a("C\xc3\xa9libataireS\xc3\xa9par\xc3\xa9DeFait"),acs=a("ConcubinageDontS\xc3\xa9par\xc3\xa9DeFait"),acn=[0,a("SituationFamiliale"),0],aci=a("AidePersonnalis\xc3\xa9eLogement"),ack=a(oV),acl=a(np),acj=[0,a("TypeAidesPersonnelleLogement"),0],ace=a("Pas\xc3\x89ligible"),acg=a(oV),ach=a(np),acf=[0,a("Type\xc3\x89ligibilit\xc3\xa9AllocationLogement"),0],acb=a("Impay\xc3\xa9Loyer"),acd=a("Impay\xc3\xa9Pr\xc3\xaat"),acc=[0,a("ModeOccupationImpay\xc3\xa9"),0],ab8=a("TotalAnnuel\xc3\x89ch\xc3\xa9ances"),ab_=a("Mensualit\xc3\xa9"),ab$=a(Fy),ab9=[0,a("D\xc3\xa9penseLogement"),0],ab4=a(ze),ab6=a(v9),ab7=a(yQ),ab5=[0,a("ZoneDHabitation"),0],ab0=a(Bo),ab2=a(Bc),ab3=a("Collat\xc3\xa9ralDeuxi\xc3\xa8meTroisi\xc3\xa8meDegr\xc3\xa9"),ab1=[0,a("Parent\xc3\xa9"),0],abX=a("PasDeGardeAltern\xc3\xa9e"),abZ=a("GardeAltern\xc3\xa9eCoefficientPriseEnCharge"),abY=[0,a("SituationGardeAltern\xc3\xa9e"),0],abU=a("DemandeurOuConjointOuParentOuViaPartsSoci\xc3\xa9t\xc3\xa9s"),abW=a(ik),abV=[0,a("ParentOuAutre"),0],abN=a(U),abP=a(qU),abQ=a(CT),abR=a(i0),abS=a("AllocationSoutienEnfantHandicap\xc3\xa9"),abT=a("AllocationAdulteHandicap\xc3\xa9"),abO=[0,a("PrestationRe\xc3\xa7ue"),0],abJ=a(En),abL=a(v2),abK=[0,a("LimiteTrancheD\xc3\xa9cimal"),0],abG=a(En),abI=a(v2),abH=[0,a("LimiteTranche"),0],abD=a(o6),abF=a(kS),abE=[0,a("Am\xc3\xa9lior\xc3\xa9ParOccupant"),0],aby=a("ObjectifD\xc3\xa9cenceLogement"),abA=a("Pr\xc3\xa9vuDansListeR321_15"),abB=a(Ct),abC=a(ow),abz=[0,a("TypeTravauxLogementR842_5"),0],abu=a(xg),abw=a("TravauxSurLogementD\xc3\xa9j\xc3\xa0AcquisD832_15_2"),abx=a(ow),abv=[0,a("TypeTravauxLogementD832_15"),0],abr=a(qw),abt=a(xJ),abs=[0,a("TitulairePr\xc3\xaat"),0],abl=a(BG),abn=a(xH),abo=a(z_),abp=a(Af),abq=a(ik),abm=[0,a("TypePr\xc3\xaat"),0],bx2=a($),bxC=a("The function 'n_nombre_parts_d832_25_in' translation isn't yet supported..."),bxD=a("The function 'condition_2_du_832_25_in' translation isn't yet supported..."),bxA=a("The function 'condition_logement_surface_in' translation isn't yet supported..."),bxB=a("The function 'condition_logement_residence_principale_in' translation isn't yet supported..."),bxu=a("AccessionProprieteLocalUsageExclusifHabitation"),bxv=a(zf),bxw=a(x1),bxx=a("ResidentLogementFoyer"),bxy=a(Dm),bxz=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'ModeOccupation.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'ModeOccupation.t'")],bxr=a("AutrePersonneACharge"),bxs=a("EnfantACharge"),bxt=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'PersonneACharge.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'PersonneACharge.t'")],bxn=a(AU),bxo=a(zF),bxq=[1,0],bxp=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'ChangementLogementD8424.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'ChangementLogementD8424.t'")],bxj=a("Etrangere"),bxk=a("Francaise"),bxm=[0,0],bxl=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'Nationalite.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'Nationalite.t'")],bxf=a(kS),bxg=a(o6),bxi=[0,0],bxh=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'LoueOuSousLoueADesTiers.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'LoueOuSousLoueADesTiers.t'")],bxa=a("BailleurPrive"),bxb=a("BailleurPriveAvecConventionnementSocial"),bxc=a(CZ),bxe=[2,0],bxd=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'TypeBailleur.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypeBailleur.t'")],bw8=a("MoinsDeTroisEnfants"),bw9=a("PlusDeTroisEnfants"),bw$=[0,0],bw_=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'DateNaissanceTroisiemeOuDernierPlusEnfant.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'DateNaissanceTroisiemeOuDernierPlusEnfant.t'")],bw4=a(C$),bw5=a(AC),bw7=[0,0],bw6=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'NeufOuAncien.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'NeufOuAncien.t'")],bwN=a(vY),bwO=a(ye),bwP=a(nY),bwQ=a(Ez),bwR=a(i0),bwS=a(U),bwT=a(qv),bwU=a(om),bwW=[0,0],bwX=[2,0],bwY=[1,0],bwZ=[5,0],bw0=[6,0],bw1=[3,0],bw2=[7,0],bw3=[4,0],bwV=[0,[11,a(bg),[2,0,[11,a(D5),0]]],a(FT)],bwG=a(r1),bwH=a(ku),bwI=a(kh),bwK=[1,0],bwL=[0,0],bwM=[2,0],bwJ=[0,[11,a(bg),[2,0,[11,a(x8),0]]],a(wx)],bwv=a(j7),bww=a(q_),bwx=a(qO),bwy=a(rq),bwz=a(qL),bwB=[4,0],bwC=[3,0],bwD=[0,0],bwE=[1,0],bwF=[2,0],bwA=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'PriseEnChargeEnfant.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'PriseEnChargeEnfant.t'")],bwc=a(my),bwd=a(oy),bwe=a(wt),bwf=a(mb),bwg=a(oK),bwh=a(Fn),bwi=a(xi),bwj=a(o8),bwk=a(nr),bwm=[7,0],bwn=[5,0],bwo=[4,0],bwp=[6,0],bwq=[8,0],bwr=[2,0],bws=[3,0],bwt=[1,0],bwu=[0,0],bwl=[0,[11,a(bg),[2,0,[11,a(BU),0]]],a(wN)],bv9=a(Ap),bv_=a(EU),bwa=[0,0],bwb=[1,0],bv$=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'SituationFamilialeCalculAPL.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'SituationFamilialeCalculAPL.t'")],bv0=a(ES),bv1=a("EtudiantLogeEnChambreCROUS"),bv2=a("EtudiantLogeEnChambreCROUSRehabilitee"),bv3=a("PersonnesAgeesSelon3DeD842_16"),bv5=[2,0],bv6=[1,0],bv7=[0,0],bv8=[3,0],bv4=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'CategorieEquivalenceLoyerAllocationLogementFoyer.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'CategorieEquivalenceLoyerAllocationLogementFoyer.t'")],bvR=a(ik),bvS=a("FoyerJeunesTrvailleursOuMigrantsConventionneL353_2Avant1995"),bvT=a("LogementPersonnesAgeesOuHandicapees"),bvU=a("ResidenceSociale"),bvW=[1,0],bvX=[0,0],bvY=[2,0],bvZ=[3,0],bvV=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'TypeLogementFoyer.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypeLogementFoyer.t'")],bvF=a("Celibataire"),bvG=a("CelibataireSepareDeFait"),bvH=a("ConcubinageDontSepareDeFait"),bvI=a(yY),bvJ=a("Maries"),bvK=a("Pacses"),bvM=[2,0],bvN=[3,0],bvO=[5,0],bvP=[4,0],bvQ=[0,0],bvL=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'SituationFamiliale.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'SituationFamiliale.t'")],bvy=a("AidePersonnaliseeLogement"),bvz=a(oV),bvA=a(np),bvC=[2,0],bvD=[1,0],bvE=[0,0],bvB=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'TypeAidesPersonnelleLogement.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypeAidesPersonnelleLogement.t'")],bvu=a(Fy),bvv=a("Mensualite"),bvw=a("TotalAnnuelEcheances"),bvx=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'DepenseLogement.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'DepenseLogement.t'")],bvn=a("Bailleur"),bvo=a("Beneficiaire"),bvp=a("EtablissementHabilite"),bvr=[2,0],bvs=[1,0],bvt=[0,0],bvq=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'VersementA.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'VersementA.t'")],bvj=a(kS),bvk=a("OuiAvecLoyerOuCharges"),bvm=[1,0],bvl=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'PaiementLogementDistinctProfessionnel.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'PaiementLogementDistinctProfessionnel.t'")],bvc=a(ze),bvd=a(v9),bve=a(yQ),bvg=[2,0],bvh=[1,0],bvi=[0,0],bvf=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'ZoneDHabitation.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'ZoneDHabitation.t'")],bu8=a("ApresPremierJourMoisCivilTroisiemeMoisDeGrossesse"),bu9=a("AvantPremierJourMoisCivilTroisiemeMoisDeGrossesse"),bu_=a("DateDeNaissance"),bva=[1,0],bvb=[2,0],bu$=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'DateDeNaissanceOuMoisDeGrossesse.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'DateDeNaissanceOuMoisDeGrossesse.t'")],bu1=a(Bo),bu2=a("CollateralDeuxiemeTroisiemeDegre"),bu3=a(Bc),bu5=[1,0],bu6=[2,0],bu7=[0,0],bu4=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'Parente.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'Parente.t'")],buX=a("GardeAlterneeCoefficientPriseEnCharge"),buY=a("PasDeGardeAlternee"),bu0=[0,0],buZ=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'SituationGardeAlternee.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'SituationGardeAlternee.t'")],buT=a(ik),buU=a("DemandeurOuConjointOuParentOuViaPartsSocietes"),buW=[1,0],buV=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'ParentOuAutre.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'ParentOuAutre.t'")],buG=a("AllocationAdulteHandicape"),buH=a(CT),buI=a("AllocationSoutienEnfantHandicape"),buJ=a(i0),buK=a(U),buL=a(qv),buN=[1,0],buO=[0,0],buP=[3,0],buQ=[4,0],buR=[2,0],buS=[5,0],buM=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'PrestationRecue.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'PrestationRecue.t'")],buB=a(kS),buC=a(o6),buE=[0,0],buF=[1,0],buD=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'AmelioreParOccupant.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'AmelioreParOccupant.t'")],bus=a(Ct),but=a("ObjectifDecenceLogement"),buu=a(ow),buv=a("PrevuDansListeR321_15"),bux=[1,0],buy=[3,0],buz=[0,0],buA=[2,0],buw=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'TypeTravauxLogementR8425.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypeTravauxLogementR8425.t'")],bul=a(ow),bum=a(xg),bun=a("TravauxSurLogementDejaAcquisD832_15_2"),bup=[1,0],buq=[0,0],bur=[2,0],buo=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'TypeTravauxLogementD83215.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypeTravauxLogementD83215.t'")],bug=a(qw),buh=a(xJ),buj=[1,0],buk=[0,0],bui=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'TitulairePret.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TitulairePret.t'")],bt7=a(ik),bt8=a(BG),bt9=a(z_),bt_=a(xH),bt$=a(Af),bub=[3,0],buc=[1,0],bud=[2,0],bue=[0,0],buf=[4,0],bua=[0,[11,a(bg),[2,0,[11,a("' kind for the enumeration 'TypePret.t'"),0]]],a("Unexpected '%s' kind for the enumeration 'TypePret.t'")],bt5=[0,a(Fw),a(zG),a(ER),a(A3),a(xn),a(o2),a(gd),a(A2),a(y7),a(vA),a(DD),a(yB),a(Bd),a(yJ),a(Fg),a(Db),a(BJ),a(zB),a(F4),a(B3),a(vp),a(w6),a(A4),a(vb)],bt6=[0,a(gd),a(A3),a(Db),a(BJ),a(zB),a(xn),a(vp),a(ER),a(vA),a(A2),a(F4),a(Bd),a(DD),a(yJ),a(A4),a(zG),a(yB),a(B3),a(vb),a(w6),a(y7),a(Fw),a(Fg),a(o2)],byp=a("AidesLogementLib"),byr=a($);function +bM(a){if(typeof a==="number")return 0;else switch(a[0]){case -0:return[0,bH(a[1])];case -1:return[1,bH(a[1])];case -2:return[2,bH(a[1])];case -3:return[3,bH(a[1])];case -4:return[4,bH(a[1])];case -5:return[5,bH(a[1])];case -6:return[6,bH(a[1])];case -7:return[7,bH(a[1])];case +0:return[0,bM(a[1])];case +1:return[1,bM(a[1])];case +2:return[2,bM(a[1])];case +3:return[3,bM(a[1])];case +4:return[4,bM(a[1])];case +5:return[5,bM(a[1])];case +6:return[6,bM(a[1])];case +7:return[7,bM(a[1])];case 8:var -c=a[1];return[8,c,bH(a[2])];case +c=a[1];return[8,c,bM(a[2])];case 9:var -b=a[1];return[9,b,b,bH(a[3])];case -10:return[10,bH(a[1])];case -11:return[11,bH(a[1])];case -12:return[12,bH(a[1])];case -13:return[13,bH(a[1])];default:return[14,bH(a[1])]}}function -cK(a,b){if(typeof +b=a[1];return[9,b,b,bM(a[3])];case +10:return[10,bM(a[1])];case +11:return[11,bM(a[1])];case +12:return[12,bM(a[1])];case +13:return[13,bM(a[1])];default:return[14,bM(a[1])]}}function +cM(a,b){if(typeof a==="number")return b;else switch(a[0]){case -0:return[0,cK(a[1],b)];case -1:return[1,cK(a[1],b)];case -2:return[2,cK(a[1],b)];case -3:return[3,cK(a[1],b)];case -4:return[4,cK(a[1],b)];case -5:return[5,cK(a[1],b)];case -6:return[6,cK(a[1],b)];case -7:return[7,cK(a[1],b)];case +0:return[0,cM(a[1],b)];case +1:return[1,cM(a[1],b)];case +2:return[2,cM(a[1],b)];case +3:return[3,cM(a[1],b)];case +4:return[4,cM(a[1],b)];case +5:return[5,cM(a[1],b)];case +6:return[6,cM(a[1],b)];case +7:return[7,cM(a[1],b)];case 8:var -c=a[1];return[8,c,cK(a[2],b)];case +c=a[1];return[8,c,cM(a[2],b)];case 9:var -d=a[2],e=a[1];return[9,e,d,cK(a[3],b)];case -10:return[10,cK(a[1],b)];case -11:return[11,cK(a[1],b)];case -12:return[12,cK(a[1],b)];case -13:return[13,cK(a[1],b)];default:return[14,cK(a[1],b)]}}function -bz(a,b){if(typeof +d=a[2],e=a[1];return[9,e,d,cM(a[3],b)];case +10:return[10,cM(a[1],b)];case +11:return[11,cM(a[1],b)];case +12:return[12,cM(a[1],b)];case +13:return[13,cM(a[1],b)];default:return[14,cM(a[1],b)]}}function +bF(a,b){if(typeof a==="number")return b;else switch(a[0]){case -0:return[0,bz(a[1],b)];case -1:return[1,bz(a[1],b)];case +0:return[0,bF(a[1],b)];case +1:return[1,bF(a[1],b)];case 2:var -c=a[1];return[2,c,bz(a[2],b)];case +c=a[1];return[2,c,bF(a[2],b)];case 3:var -d=a[1];return[3,d,bz(a[2],b)];case +d=a[1];return[3,d,bF(a[2],b)];case 4:var -e=a[3],f=a[2],g=a[1];return[4,g,f,e,bz(a[4],b)];case +e=a[3],f=a[2],g=a[1];return[4,g,f,e,bF(a[4],b)];case 5:var -h=a[3],i=a[2],j=a[1];return[5,j,i,h,bz(a[4],b)];case +h=a[3],i=a[2],j=a[1];return[5,j,i,h,bF(a[4],b)];case 6:var -k=a[3],l=a[2],m=a[1];return[6,m,l,k,bz(a[4],b)];case +k=a[3],l=a[2],m=a[1];return[6,m,l,k,bF(a[4],b)];case 7:var -n=a[3],o=a[2],p=a[1];return[7,p,o,n,bz(a[4],b)];case +n=a[3],o=a[2],p=a[1];return[7,p,o,n,bF(a[4],b)];case 8:var -q=a[3],r=a[2],s=a[1];return[8,s,r,q,bz(a[4],b)];case +q=a[3],r=a[2],s=a[1];return[8,s,r,q,bF(a[4],b)];case 9:var -t=a[1];return[9,t,bz(a[2],b)];case -10:return[10,bz(a[1],b)];case +t=a[1];return[9,t,bF(a[2],b)];case +10:return[10,bF(a[1],b)];case 11:var -u=a[1];return[11,u,bz(a[2],b)];case +u=a[1];return[11,u,bF(a[2],b)];case 12:var -v=a[1];return[12,v,bz(a[2],b)];case +v=a[1];return[12,v,bF(a[2],b)];case 13:var -w=a[2],x=a[1];return[13,x,w,bz(a[3],b)];case +w=a[2],x=a[1];return[13,x,w,bF(a[3],b)];case 14:var -y=a[2],z=a[1];return[14,z,y,bz(a[3],b)];case -15:return[15,bz(a[1],b)];case -16:return[16,bz(a[1],b)];case +y=a[2],z=a[1];return[14,z,y,bF(a[3],b)];case +15:return[15,bF(a[1],b)];case +16:return[16,bF(a[1],b)];case 17:var -A=a[1];return[17,A,bz(a[2],b)];case +A=a[1];return[17,A,bF(a[2],b)];case 18:var -B=a[1];return[18,B,bz(a[2],b)];case -19:return[19,bz(a[1],b)];case +B=a[1];return[18,B,bF(a[2],b)];case +19:return[19,bF(a[1],b)];case 20:var -C=a[2],D=a[1];return[20,D,C,bz(a[3],b)];case +C=a[2],D=a[1];return[20,D,C,bF(a[3],b)];case 21:var -E=a[1];return[21,E,bz(a[2],b)];case -22:return[22,bz(a[1],b)];case +E=a[1];return[21,E,bF(a[2],b)];case +22:return[22,bF(a[1],b)];case 23:var -F=a[1];return[23,F,bz(a[2],b)];default:var -G=a[2],H=a[1];return[24,H,G,bz(a[3],b)]}}function -o$(a,c,b){return a[1]===c?(a[1]=b,1):0}function -aC(a){throw[0,kY,a]}function -bU(a){throw[0,sz,a]}var -sA=[bc,FV,cW(0)];function -sF(b,a){return Fx(b,a)?b:a}function -gb(a){return 0<=a?a:-a|0}var -sG=js(FX),sH=js(FY),FW=rX,F0=js(FZ);function -bM(d,c){var -a=aE(d),e=aE(c),b=bT(a+e|0);ea(d,0,b,0,a);ea(c,0,b,a,e);return cI(b)}function -F1(a){return a?F2:F3}bt1(0);var -F6=FC(1),ed=FC(2);function -F7(b){function +F=a[1];return[23,F,bF(a[2],b)];default:var +G=a[2],H=a[1];return[24,H,G,bF(a[3],b)]}}function +pn(a,c,b){return a[1]===c?(a[1]=b,1):0}function +aH(a){throw[0,k_,a]}function +b0(a){throw[0,sP,a]}var +sQ=[bm,GX,cZ(0)];function +sV(b,a){return Gz(b,a)?b:a}function +gl(a){return 0<=a?a:-a|0}var +sW=jx(GZ),sX=jx(G0),GY=r$,G2=jx(G1);function +bS(d,c){var +a=aI(d),e=aI(c),b=bZ(a+e|0);ej(d,0,b,0,a);ej(c,0,b,a,e);return cK(b)}function +G3(a){return a?G4:G5}bze(0);var +G8=GE(1),em=GE(2);function +G9(b){function a(b){var a=b;for(;;){if(a){var -c=a[2],d=a[1];try{gR(d)}catch(a){a=o(a);if(a[1]!==sD)throw a;var +c=a[2],d=a[1];try{gV(d)}catch(a){a=o(a);if(a[1]!==sT)throw a;var e=a}var -a=c;continue}return 0}}return a(bt2(0))}function -jx(b,a){return so(b,a,0,aE(a))}function -sI(a){jx(ed,a);FD(ed,10);return gR(ed)}var -pc=[0,F7];function -F9(c){for(;;){var -a=pc[1],d=[0,1],b=1-o$(pc,a,function(a,b){return function(d){if(o$(a,1,0))q(c,0);return q(b,0)}}(d,a));if(b)continue;return b}}function -pd(a){return q(pc[1],0)}sr(a(uC),pd);var -pe=bud(0),fn=(4*pe|0)-1|0,F$=[bc,F_,cW(0)];function -Ga(a){throw F$}function -Gb(a){var -c=a[1];a[1]=Ga;try{var -b=q(c,0);bt6(a,b);return b}catch(b){b=o(b);a[1]=function(a){throw b};throw b}}function -pf(b,c,g){var -a=q(c,0);if(a){var -d=a[2],e=a[1],f=function(a){return pf(b,d,a)};return[0,q(b,e),f]}return 0}function -sJ(d,c){var +a=c;continue}return 0}}return a(bzf(0))}function +jC(b,a){return sE(b,a,0,aI(a))}function +sY(a){jC(em,a);GF(em,10);return gV(em)}var +pq=[0,G9];function +G$(c){for(;;){var +a=pq[1],d=[0,1],b=1-pn(pq,a,function(a,b){return function(d){if(pn(a,1,0))r(c,0);return r(b,0)}}(d,a));if(b)continue;return b}}function +pr(a){return r(pq[1],0)}sH(a(u2),pr);var +ps=bzs(0),ft=(4*ps|0)-1|0,Hb=[bm,Ha,cZ(0)];function +Hc(a){throw Hb}function +Hd(a){var +c=a[1];a[1]=Hc;try{var +b=r(c,0);bzj(a,b);return b}catch(b){b=o(b);a[1]=function(a){throw b};throw b}}function +pt(b,c,g){var +a=r(c,0);if(a){var +d=a[2],e=a[1],f=function(a){return pt(b,d,a)};return[0,r(b,e),f]}return 0}function +sZ(d,c){var b=c;for(;;){var -a=q(b,0);if(a){var -e=a[2];q(d,a[1]);var +a=r(b,0);if(a){var +e=a[2];r(d,a[1]);var b=e;continue}return 0}}function -sK(a){if(0<=a&&!(mO>>0))e=1}else +f=0;if(1>>0))e=1}else if(65<=d)e=1}else{var -f=0;if(32!==d)if(43<=d)switch(d+z4|0){case +f=0;if(32!==d)if(43<=d)switch(d+AB|0){case 5:if(a<(c+2|0)&&1>>0){if(33>>0)p=1}else +n=d6(k,j)+Am|0,p=0;if(59>>0){if(33>>0)p=1}else if(2===n)p=1;if(!p){var j=j+1|0;continue}var -e=fm(k),a=[0,0],t=dl(e)-1|0,y=0;if(!(t<0)){var +e=fs(k),a=[0,0],t=ds(e)-1|0,y=0;if(!(t<0)){var i=y;for(;;){var -f=kO(e,i),g=0;if(32<=f){var +f=k0(e,i),g=0;if(32<=f){var l=f-34|0,q=0;if(58>>0){if(93<=l)q=1}else if(56>>0){g=1;q=1}if(!q){var m=1;g=2}}else @@ -2124,254 +2124,254 @@ m=4;break;case 1:var m=2;break}a[1]=a[1]+m|0;var B=i+1|0;if(t!==i){var -i=B;continue}break}}if(a[1]===dl(e)){var -r=dl(e),s=bT(r);f8(e,0,s,0,r);var +i=B;continue}break}}if(a[1]===ds(e)){var +r=ds(e),s=bZ(r);gg(e,0,s,0,r);var v=s}else{var -b=bT(a[1]);a[1]=0;var -u=dl(e)-1|0,z=0;if(!(u<0)){var +b=bZ(a[1]);a[1]=0;var +u=ds(e)-1|0,z=0;if(!(u<0)){var h=z;for(;;){var -c=kO(e,h),d=0;if(35<=c)if(92===c)d=2;else -if(cy<=c)d=1;else +c=k0(e,h),d=0;if(35<=c)if(92===c)d=2;else +if(cQ<=c)d=1;else d=3;else if(32<=c)if(34<=c)d=2;else d=3;else if(14<=c)d=1;else switch(c){case -8:bS(b,a[1],92);a[1]++;bS(b,a[1],98);break;case -9:bS(b,a[1],92);a[1]++;bS(b,a[1],bi);break;case -10:bS(b,a[1],92);a[1]++;bS(b,a[1],h9);break;case -13:bS(b,a[1],92);a[1]++;bS(b,a[1],yX);break;default:d=1}switch(d){case -1:bS(b,a[1],92);a[1]++;bS(b,a[1],48+(c/c4|0)|0);a[1]++;bS(b,a[1],48+((c/10|0)%10|0)|0);a[1]++;bS(b,a[1],48+(c%10|0)|0);break;case -2:bS(b,a[1],92);a[1]++;bS(b,a[1],c);break;case -3:bS(b,a[1],c);break}a[1]++;var +8:bY(b,a[1],92);a[1]++;bY(b,a[1],98);break;case +9:bY(b,a[1],92);a[1]++;bY(b,a[1],bp);break;case +10:bY(b,a[1],92);a[1]++;bY(b,a[1],ic);break;case +13:bY(b,a[1],92);a[1]++;bY(b,a[1],zy);break;default:d=1}switch(d){case +1:bY(b,a[1],92);a[1]++;bY(b,a[1],48+(c/cd|0)|0);a[1]++;bY(b,a[1],48+((c/10|0)%10|0)|0);a[1]++;bY(b,a[1],48+(c%10|0)|0);break;case +2:bY(b,a[1],92);a[1]++;bY(b,a[1],c);break;case +3:bY(b,a[1],c);break}a[1]++;var A=h+1|0;if(u!==h){var h=A;continue}break}}var v=b}var -o=cI(v)}var -w=aE(o),x=gc(w+2|0,34);ea(o,0,x,1,w);return cI(x)}}function -sU(d,f){var -g=gb(f),e=Ig[1];switch(d[2]){case +o=cK(v)}var +w=aI(o),x=gm(w+2|0,34);ej(o,0,x,1,w);return cK(x)}}function +s_(d,f){var +g=gl(f),e=Ji[1];switch(d[2]){case 0:var -b=B3;break;case +b=CL;break;case 1:var -b=hu;break;case +b=fO;break;case 2:var b=69;break;case 3:var -b=cH;break;case +b=cJ;break;case 4:var b=71;break;case 5:var b=e;break;case 6:var -b=dH;break;case +b=dT;break;case 7:var b=72;break;default:var b=70}var -c=sQ(16);gY(c,37);switch(d[1]){case +c=s6(16);g2(c,37);switch(d[1]){case 0:break;case -1:gY(c,43);break;default:gY(c,32)}if(8<=d[2])gY(c,35);gY(c,46);ct(c,a(W+g));gY(c,b);return sS(c)}function -k5(m,a){if(13<=m){var -g=[0,0],h=aE(a)-1|0,n=0;if(!(h<0)){var -c=n;for(;;){if(!(9>>0))g[1]++;var +1:g2(c,43);break;default:g2(c,32)}if(8<=d[2])g2(c,35);g2(c,46);cx(c,a($+g));g2(c,b);return s8(c)}function +lf(m,a){if(13<=m){var +g=[0,0],h=aI(a)-1|0,n=0;if(!(h<0)){var +c=n;for(;;){if(!(9>>0))g[1]++;var q=c+1|0;if(h!==c){var c=q;continue}break}}var -i=g[1],j=bT(aE(a)+((i-1|0)/3|0)|0),k=[0,0],d=function(a){dS(j,k[1],a);k[1]++;return 0},e=[0,((i-1|0)%3|0)+1|0],l=aE(a)-1|0,o=0;if(!(l<0)){var +i=g[1],j=bZ(aI(a)+((i-1|0)/3|0)|0),k=[0,0],d=function(a){d3(j,k[1],a);k[1]++;return 0},e=[0,((i-1|0)%3|0)+1|0],l=aI(a)-1|0,o=0;if(!(l<0)){var b=o;for(;;){var -f=dV(a,b);if(9>>0)d(f);else{if(0===e[1]){d(95);e[1]=3}e[1]+=-1;d(f)}var +f=d6(a,b);if(9>>0)d(f);else{if(0===e[1]){d(95);e[1]=3}e[1]+=-1;d(f)}var p=b+1|0;if(l!==b){var -b=p;continue}break}}return cI(j)}return a}function -Ih(b,c){switch(b){case +b=p;continue}break}}return cK(j)}return a}function +Jj(b,c){switch(b){case 1:var -a=Ht;break;case +a=Iv;break;case 2:var -a=Hu;break;case +a=Iw;break;case 4:var -a=Hw;break;case +a=Iy;break;case 5:var -a=Hx;break;case +a=Iz;break;case 6:var -a=Hy;break;case +a=IA;break;case 7:var -a=Hz;break;case +a=IB;break;case 8:var -a=HA;break;case +a=IC;break;case 9:var -a=HB;break;case +a=ID;break;case 10:var -a=HC;break;case +a=IE;break;case 11:var -a=HD;break;case +a=IF;break;case 0:case 13:var -a=Hs;break;case +a=Iu;break;case 3:case 14:var -a=Hv;break;default:var -a=HE}return k5(b,oY(a,c))}function -Ii(b,c){switch(b){case +a=Ix;break;default:var +a=IG}return lf(b,pa(a,c))}function +Jk(b,c){switch(b){case 1:var -a=HT;break;case +a=IV;break;case 2:var -a=HU;break;case +a=IW;break;case 4:var -a=HW;break;case +a=IY;break;case 5:var -a=HX;break;case +a=IZ;break;case 6:var -a=HY;break;case +a=I0;break;case 7:var -a=HZ;break;case +a=I1;break;case 8:var -a=H0;break;case +a=I2;break;case 9:var -a=H1;break;case +a=I3;break;case 10:var -a=H2;break;case +a=I4;break;case 11:var -a=H3;break;case +a=I5;break;case 0:case 13:var -a=HS;break;case +a=IU;break;case 3:case 14:var -a=HV;break;default:var -a=H4}return k5(b,oY(a,c))}function -Ij(b,c){switch(b){case +a=IX;break;default:var +a=I6}return lf(b,pa(a,c))}function +Jl(b,c){switch(b){case 1:var -a=H6;break;case +a=I8;break;case 2:var -a=H7;break;case +a=I9;break;case 4:var -a=H9;break;case +a=I$;break;case 5:var -a=H_;break;case +a=Ja;break;case 6:var -a=H$;break;case +a=Jb;break;case 7:var -a=Ia;break;case +a=Jc;break;case 8:var -a=Ib;break;case +a=Jd;break;case 9:var -a=Ic;break;case +a=Je;break;case 10:var -a=Id;break;case +a=Jf;break;case 11:var -a=Ie;break;case +a=Jg;break;case 0:case 13:var -a=H5;break;case +a=I7;break;case 3:case 14:var -a=H8;break;default:var -a=If}return k5(b,oY(a,c))}function -Ik(b,c){switch(b){case +a=I_;break;default:var +a=Jh}return lf(b,pa(a,c))}function +Jm(b,c){switch(b){case 1:var -a=HG;break;case +a=II;break;case 2:var -a=HH;break;case +a=IJ;break;case 4:var -a=HJ;break;case +a=IL;break;case 5:var -a=HK;break;case +a=IM;break;case 6:var -a=HL;break;case +a=IN;break;case 7:var -a=HM;break;case +a=IO;break;case 8:var -a=HN;break;case +a=IP;break;case 9:var -a=HO;break;case +a=IQ;break;case 10:var -a=HP;break;case +a=IR;break;case 11:var -a=HQ;break;case +a=IS;break;case 0:case 13:var -a=HF;break;case +a=IH;break;case 3:case 14:var -a=HI;break;default:var -a=HR}return k5(b,btM(a,c))}function -e2(c,i,b){function +a=IK;break;default:var +a=IT}return lf(b,by1(a,c))}function +e5(c,i,b){function j(d){switch(c[1]){case 0:var a=45;break;case 1:var a=43;break;default:var -a=32}return btJ(b,i,a)}function +a=32}return byY(b,i,a)}function q(c){var -a=oV(b);return 3===a?b<0.?Im:In:4<=a?Io:c}switch(c[2]){case +a=o9(b);return 3===a?b<0.?Jo:Jp:4<=a?Jq:c}switch(c[2]){case 5:var -e=sg(sU(c,i),b),d=0,u=aE(e);for(;;){if(d===u)var +e=sw(s_(c,i),b),d=0,u=aI(e);for(;;){if(d===u)var p=0;else{var -k=bu(e,d)-46|0,l=0;if(23>>0){if(55===k)l=1}else +k=bA(e,d)-46|0,l=0;if(23>>0){if(55===k)l=1}else if(21>>0)l=1;if(!l){var d=d+1|0;continue}var p=1}var -v=p?e:bM(e,Il);return q(v)}case +v=p?e:bS(e,Jn);return q(v)}case 6:return j(0);case 7:var -h=fm(j(0)),f=dl(h);if(0===f)var +h=fs(j(0)),f=ds(h);if(0===f)var o=h;else{var -m=bT(f),n=f-1|0,r=0;if(!(n<0)){var +m=bZ(f),n=f-1|0,r=0;if(!(n<0)){var a=r;for(;;){var -g=kO(h,a),s=25>>0?g:g+zQ|0;bS(m,a,s);var +g=k0(h,a),s=25>>0?g:g+Am|0;bY(m,a,s);var t=a+1|0;if(n!==a){var a=t;continue}break}}var -o=m}return cI(o);case -8:return q(j(0));default:return sg(sU(c,i),b)}}function -jT(d,x,w,v){var +o=m}return cK(o);case +8:return q(j(0));default:return sw(s_(c,i),b)}}function +j2(d,x,w,v){var b=x,a=w,c=v;for(;;)if(typeof -c==="number")return q(b,a);else +c==="number")return r(b,a);else switch(c[0]){case 0:var -y=c[1];return function(c){return a8(b,[5,a,c],y)};case +y=c[1];return function(c){return a$(b,[5,a,c],y)};case 1:var z=c[1];return function(c){var e=0;if(40<=c)if(92===c)var -d=Gd;else -if(cy<=c)e=1;else +d=Hf;else +if(cQ<=c)e=1;else e=2;else if(32<=c)if(39<=c)var -d=Ge;else +d=Hg;else e=2;else if(14<=c)e=1;else switch(c){case 8:var -d=Gf;break;case +d=Hh;break;case 9:var -d=Gg;break;case +d=Hi;break;case 10:var -d=Gh;break;case +d=Hj;break;case 13:var -d=Gi;break;default:e=1}switch(e){case +d=Hk;break;default:e=1}switch(e){case 1:var -f=bT(4);bS(f,0,92);bS(f,1,48+(c/c4|0)|0);bS(f,2,48+((c/10|0)%10|0)|0);bS(f,3,48+(c%10|0)|0);var -d=cI(f);break;case +f=bZ(4);bY(f,0,92);bY(f,1,48+(c/cd|0)|0);bY(f,2,48+((c/10|0)%10|0)|0);bY(f,3,48+(c%10|0)|0);var +d=cK(f);break;case 2:var -g=bT(1);bS(g,0,c);var -d=cI(g);break}var -h=aE(d),i=gc(h+2|0,39);ea(d,0,i,1,h);return a8(b,[4,a,cI(i)],z)};case +g=bZ(1);bY(g,0,c);var +d=cK(g);break}var +h=aI(d),i=gm(h+2|0,39);ej(d,0,i,1,h);return a$(b,[4,a,cK(i)],z)};case 2:var -A=c[2],B=c[1];return pp(b,a,A,B,function(a){return a});case -3:return pp(b,a,c[2],c[1],Hr);case -4:return k6(b,a,c[4],c[2],c[3],Ih,c[1]);case -5:return k6(b,a,c[4],c[2],c[3],Ii,c[1]);case -6:return k6(b,a,c[4],c[2],c[3],Ij,c[1]);case -7:return k6(b,a,c[4],c[2],c[3],Ik,c[1]);case +A=c[2],B=c[1];return pD(b,a,A,B,function(a){return a});case +3:return pD(b,a,c[2],c[1],It);case +4:return lg(b,a,c[4],c[2],c[3],Jj,c[1]);case +5:return lg(b,a,c[4],c[2],c[3],Jk,c[1]);case +6:return lg(b,a,c[4],c[2],c[3],Jl,c[1]);case +7:return lg(b,a,c[4],c[2],c[3],Jm,c[1]);case 8:var g=c[4],h=c[3],i=c[2],f=c[1];if(typeof i==="number"){if(typeof -h==="number")return h?function(d,c){return a8(b,[4,a,e2(f,d,c)],g)}:function(c){return a8(b,[4,a,e2(f,pn(f),c)],g)};var -S=h[1];return function(c){return a8(b,[4,a,e2(f,S,c)],g)}}else{if(0===i[0]){var +h==="number")return h?function(d,c){return a$(b,[4,a,e5(f,d,c)],g)}:function(c){return a$(b,[4,a,e5(f,pB(f),c)],g)};var +S=h[1];return function(c){return a$(b,[4,a,e5(f,S,c)],g)}}else{if(0===i[0]){var l=i[2],m=i[1];if(typeof -h==="number")return h?function(d,c){return a8(b,[4,a,c8(m,l,e2(f,d,c))],g)}:function(c){return a8(b,[4,a,c8(m,l,e2(f,pn(f),c))],g)};var -T=h[1];return function(c){return a8(b,[4,a,c8(m,l,e2(f,T,c))],g)}}var +h==="number")return h?function(d,c){return a$(b,[4,a,c9(m,l,e5(f,d,c))],g)}:function(c){return a$(b,[4,a,c9(m,l,e5(f,pB(f),c))],g)};var +T=h[1];return function(c){return a$(b,[4,a,c9(m,l,e5(f,T,c))],g)}}var n=i[1];if(typeof -h==="number")return h?function(e,d,c){return a8(b,[4,a,c8(n,e,e2(f,d,c))],g)}:function(d,c){return a8(b,[4,a,c8(n,d,e2(f,pn(f),c))],g)};var -U=h[1];return function(d,c){return a8(b,[4,a,c8(n,d,e2(f,U,c))],g)}}case -9:return pp(b,a,c[2],c[1],F1);case +h==="number")return h?function(e,d,c){return a$(b,[4,a,c9(n,e,e5(f,d,c))],g)}:function(d,c){return a$(b,[4,a,c9(n,d,e5(f,pB(f),c))],g)};var +U=h[1];return function(d,c){return a$(b,[4,a,c9(n,d,e5(f,U,c))],g)}}case +9:return pD(b,a,c[2],c[1],G3);case 10:var a=[7,a],c=c[1];continue;case 11:var @@ -2379,445 +2379,445 @@ a=[2,a,c[1]],c=c[2];continue;case 12:var a=[3,a,c[1]],c=c[2];continue;case 13:var -C=c[3],D=c[2],o=sQ(16);po(o,D);var -u=sS(o);return function(c){return a8(b,[4,a,u],C)};case +C=c[3],D=c[2],o=s6(16);pC(o,D);var +u=s8(o);return function(c){return a$(b,[4,a,u],C)};case 14:var E=c[3],F=c[2];return function(d){var -e=d[1],c=br(e,bH(b4(F)));if(typeof -c[2]==="number")return a8(b,a,bz(c[1],E));throw ch};case +e=d[1],c=by(e,bM(b9(F)));if(typeof +c[2]==="number")return a$(b,a,bF(c[1],E));throw cm};case 15:var -G=c[1];return function(d,c){return a8(b,[6,a,function(a){return al(d,a,c)}],G)};case +G=c[1];return function(d,c){return a$(b,[6,a,function(a){return aq(d,a,c)}],G)};case 16:var -H=c[1];return function(c){return a8(b,[6,a,c],H)};case +H=c[1];return function(c){return a$(b,[6,a,c],H)};case 17:var a=[0,a,c[1]],c=c[2];continue;case 18:var k=c[1];if(0===k[0]){var -I=c[2],J=k[1][1],K=0,b=function(b,c,d){return function(a){return a8(c,[1,b,[0,a]],d)}}(a,b,I),a=K,c=J;continue}var -L=c[2],M=k[1][1],N=0,b=function(b,c,d){return function(a){return a8(c,[1,b,[1,a]],d)}}(a,b,L),a=N,c=M;continue;case -19:throw[0,bn,Iq];case +I=c[2],J=k[1][1],K=0,b=function(b,c,d){return function(a){return a$(c,[1,b,[0,a]],d)}}(a,b,I),a=K,c=J;continue}var +L=c[2],M=k[1][1],N=0,b=function(b,c,d){return function(a){return a$(c,[1,b,[1,a]],d)}}(a,b,L),a=N,c=M;continue;case +19:throw[0,bs,Js];case 20:var -O=c[3],P=[8,a,Ir];return function(a){return a8(b,P,O)};case +O=c[3],P=[8,a,Jt];return function(a){return a$(b,P,O)};case 21:var -Q=c[2];return function(c){return a8(b,[4,a,oY(Is,c)],Q)};case +Q=c[2];return function(c){return a$(b,[4,a,pa(Ju,c)],Q)};case 22:var -R=c[1];return function(c){return a8(b,[5,a,c],R)};case +R=c[1];return function(c){return a$(b,[5,a,c],R)};case 23:var e=c[2],j=c[1];if(typeof j==="number")switch(j){case -0:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case -1:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case -2:throw[0,bn,It];default:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e])}else +0:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case +1:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case +2:throw[0,bs,Jv];default:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e])}else switch(j[0]){case -0:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case -1:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case -2:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case -3:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case -4:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case -5:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case -6:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case -7:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case -8:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);case +0:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case +1:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case +2:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case +3:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case +4:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case +5:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case +6:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case +7:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case +8:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);case 9:var -t=j[2];return d<50?qi(d+1|0,b,a,t,e):cr(qi,[0,b,a,t,e]);case -10:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e]);default:return d<50?bo(d+1|0,b,a,e):cr(bo,[0,b,a,e])}default:var -p=c[3],r=c[1],s=q(c[2],0);return d<50?qh(d+1|0,b,a,p,r,s):cr(qh,[0,b,a,p,r,s])}}function -qi(e,d,c,a,b){if(typeof -a==="number")return e<50?bo(e+1|0,d,c,b):cr(bo,[0,d,c,b]);else +t=j[2];return d<50?qu(d+1|0,b,a,t,e):cw(qu,[0,b,a,t,e]);case +10:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e]);default:return d<50?bt(d+1|0,b,a,e):cw(bt,[0,b,a,e])}default:var +p=c[3],q=c[1],s=r(c[2],0);return d<50?qt(d+1|0,b,a,p,q,s):cw(qt,[0,b,a,p,q,s])}}function +qu(e,d,c,a,b){if(typeof +a==="number")return e<50?bt(e+1|0,d,c,b):cw(bt,[0,d,c,b]);else switch(a[0]){case 0:var -f=a[1];return function(a){return dm(d,c,f,b)};case +f=a[1];return function(a){return dt(d,c,f,b)};case 1:var -g=a[1];return function(a){return dm(d,c,g,b)};case +g=a[1];return function(a){return dt(d,c,g,b)};case 2:var -h=a[1];return function(a){return dm(d,c,h,b)};case +h=a[1];return function(a){return dt(d,c,h,b)};case 3:var -i=a[1];return function(a){return dm(d,c,i,b)};case +i=a[1];return function(a){return dt(d,c,i,b)};case 4:var -j=a[1];return function(a){return dm(d,c,j,b)};case +j=a[1];return function(a){return dt(d,c,j,b)};case 5:var -k=a[1];return function(a){return dm(d,c,k,b)};case +k=a[1];return function(a){return dt(d,c,k,b)};case 6:var -l=a[1];return function(a){return dm(d,c,l,b)};case +l=a[1];return function(a){return dt(d,c,l,b)};case 7:var -m=a[1];return function(a){return dm(d,c,m,b)};case +m=a[1];return function(a){return dt(d,c,m,b)};case 8:var -n=a[2];return function(a){return dm(d,c,n,b)};case +n=a[2];return function(a){return dt(d,c,n,b)};case 9:var -o=a[3],p=a[2],q=ca(b4(a[1]),p);return function(a){return dm(d,c,cK(q,o),b)};case +o=a[3],p=a[2],q=ce(b9(a[1]),p);return function(a){return dt(d,c,cM(q,o),b)};case 10:var -r=a[1];return function(e,a){return dm(d,c,r,b)};case +r=a[1];return function(e,a){return dt(d,c,r,b)};case 11:var -s=a[1];return function(a){return dm(d,c,s,b)};case +s=a[1];return function(a){return dt(d,c,s,b)};case 12:var -t=a[1];return function(a){return dm(d,c,t,b)};case -13:throw[0,bn,Iu];default:throw[0,bn,Iv]}}function -bo(d,b,e,a){var -c=[8,e,Iw];return d<50?jT(d+1|0,b,c,a):cr(jT,[0,b,c,a])}function -qh(g,b,e,a,d,c){if(d){var -h=d[1];return function(d){return Ip(b,e,a,h,q(c,d))}}var -f=[4,e,c];return g<50?jT(g+1|0,b,f,a):cr(jT,[0,b,f,a])}function -a8(a,b,c){return st(jT(0,a,b,c))}function -dm(a,b,c,d){return st(qi(0,a,b,c,d))}function -Ip(a,b,c,d,e){return st(qh(0,a,b,c,d,e))}function -pp(e,d,c,a,b){if(typeof -a==="number")return function(a){return a8(e,[4,d,q(b,a)],c)};else{if(0===a[0]){var -f=a[2],g=a[1];return function(a){return a8(e,[4,d,c8(g,f,q(b,a))],c)}}var -h=a[1];return function(f,a){return a8(e,[4,d,c8(h,f,q(b,a))],c)}}}function -k6(f,e,d,g,c,b,a){if(typeof +t=a[1];return function(a){return dt(d,c,t,b)};case +13:throw[0,bs,Jw];default:throw[0,bs,Jx]}}function +bt(d,b,e,a){var +c=[8,e,Jy];return d<50?j2(d+1|0,b,c,a):cw(j2,[0,b,c,a])}function +qt(g,b,e,a,d,c){if(d){var +h=d[1];return function(d){return Jr(b,e,a,h,r(c,d))}}var +f=[4,e,c];return g<50?j2(g+1|0,b,f,a):cw(j2,[0,b,f,a])}function +a$(a,b,c){return sJ(j2(0,a,b,c))}function +dt(a,b,c,d){return sJ(qu(0,a,b,c,d))}function +Jr(a,b,c,d,e){return sJ(qt(0,a,b,c,d,e))}function +pD(e,d,c,a,b){if(typeof +a==="number")return function(a){return a$(e,[4,d,r(b,a)],c)};else{if(0===a[0]){var +f=a[2],g=a[1];return function(a){return a$(e,[4,d,c9(g,f,r(b,a))],c)}}var +h=a[1];return function(f,a){return a$(e,[4,d,c9(h,f,r(b,a))],c)}}}function +lg(f,e,d,g,c,b,a){if(typeof g==="number"){if(typeof -c==="number")return c?function(g,c){return a8(f,[4,e,gZ(g,al(b,a,c))],d)}:function(c){return a8(f,[4,e,al(b,a,c)],d)};var -k=c[1];return function(c){return a8(f,[4,e,gZ(k,al(b,a,c))],d)}}else{if(0===g[0]){var +c==="number")return c?function(g,c){return a$(f,[4,e,g3(g,aq(b,a,c))],d)}:function(c){return a$(f,[4,e,aq(b,a,c)],d)};var +k=c[1];return function(c){return a$(f,[4,e,g3(k,aq(b,a,c))],d)}}else{if(0===g[0]){var h=g[2],i=g[1];if(typeof -c==="number")return c?function(g,c){return a8(f,[4,e,c8(i,h,gZ(g,al(b,a,c)))],d)}:function(c){return a8(f,[4,e,c8(i,h,al(b,a,c))],d)};var -l=c[1];return function(c){return a8(f,[4,e,c8(i,h,gZ(l,al(b,a,c)))],d)}}var +c==="number")return c?function(g,c){return a$(f,[4,e,c9(i,h,g3(g,aq(b,a,c)))],d)}:function(c){return a$(f,[4,e,c9(i,h,aq(b,a,c))],d)};var +l=c[1];return function(c){return a$(f,[4,e,c9(i,h,g3(l,aq(b,a,c)))],d)}}var j=g[1];if(typeof -c==="number")return c?function(h,g,c){return a8(f,[4,e,c8(j,h,gZ(g,al(b,a,c)))],d)}:function(g,c){return a8(f,[4,e,c8(j,g,al(b,a,c))],d)};var -m=c[1];return function(g,c){return a8(f,[4,e,c8(j,g,gZ(m,al(b,a,c)))],d)}}}function -e3(b,e){var +c==="number")return c?function(h,g,c){return a$(f,[4,e,c9(j,h,g3(g,aq(b,a,c)))],d)}:function(g,c){return a$(f,[4,e,c9(j,g,aq(b,a,c))],d)};var +m=c[1];return function(g,c){return a$(f,[4,e,c9(j,g,g3(m,aq(b,a,c)))],d)}}}function +e6(b,e){var a=e;for(;;)if(typeof a==="number")return 0;else switch(a[0]){case 0:var -f=a[1],g=sT(a[2]);e3(b,f);return jx(b,g);case +f=a[1],g=s9(a[2]);e6(b,f);return jC(b,g);case 1:var c=a[2],d=a[1];if(0===c[0]){var -h=c[1];e3(b,d);jx(b,Ix);var +h=c[1];e6(b,d);jC(b,Jz);var a=h;continue}var -i=c[1];e3(b,d);jx(b,Iy);var +i=c[1];e6(b,d);jC(b,JA);var a=i;continue;case 6:var -l=a[2];e3(b,a[1]);return q(l,b);case -7:e3(b,a[1]);return gR(b);case +l=a[2];e6(b,a[1]);return r(l,b);case +7:e6(b,a[1]);return gV(b);case 8:var -m=a[2];e3(b,a[1]);return bU(m);case +m=a[2];e6(b,a[1]);return b0(m);case 2:case 4:var -j=a[2];e3(b,a[1]);return jx(b,j);default:var -k=a[2];e3(b,a[1]);return FD(b,k)}}function -e4(b,f){var +j=a[2];e6(b,a[1]);return jC(b,j);default:var +k=a[2];e6(b,a[1]);return GF(b,k)}}function +e7(b,f){var a=f;for(;;)if(typeof a==="number")return 0;else switch(a[0]){case 0:var -g=a[1],h=sT(a[2]);e4(b,g);return jE(b,h);case +g=a[1],h=s9(a[2]);e7(b,g);return jK(b,h);case 1:var d=a[2],e=a[1];if(0===d[0]){var -i=d[1];e4(b,e);jE(b,Iz);var +i=d[1];e7(b,e);jK(b,JB);var a=i;continue}var -j=d[1];e4(b,e);jE(b,IA);var +j=d[1];e7(b,e);jK(b,JC);var a=j;continue;case 6:var -m=a[2];e4(b,a[1]);return jE(b,q(m,0));case +m=a[2];e7(b,a[1]);return jK(b,r(m,0));case 7:var a=a[1];continue;case 8:var -n=a[2];e4(b,a[1]);return bU(n);case +n=a[2];e7(b,a[1]);return b0(n);case 2:case 4:var -k=a[2];e4(b,a[1]);return jE(b,k);default:var -l=a[2];e4(b,a[1]);var -c=b[2];if(b[3]<=c)pm(b,1);bS(b[1],c,l);b[2]=c+1|0;return 0}}function -IB(a){if(o7(a,IC))return ID;var -d=aE(a);function +k=a[2];e7(b,a[1]);return jK(b,k);default:var +l=a[2];e7(b,a[1]);var +c=b[2];if(b[3]<=c)pA(b,1);bY(b[1],c,l);b[2]=c+1|0;return 0}}function +JD(a){if(pj(a,JE))return JF;var +d=aI(a);function f(d){var -c=IE[1],b=k2(ev);return q(a8(function(a){e4(b,a);return aC(k3(b))},0,c),a)}function +c=JG[1],b=lc(eB);return r(a$(function(a){e7(b,a);return aH(ld(b))},0,c),a)}function g(e){var b=e;for(;;){if(b===d)return b;var -c=bu(a,b);if(9!==c&&32!==c)return b;var +c=bA(a,b);if(9!==c&&32!==c)return b;var b=b+1|0;continue}}function m(e,c){var -b=c;for(;;){if(b===d)return b;if(25>>0)return b;var +b=c;for(;;){if(b===d)return b;if(25>>0)return b;var b=b+1|0;continue}}function n(g,f){var b=f;for(;;){if(b===d)return b;var -c=bu(a,b),e=0;if(48<=c){if(!(58<=c))e=1}else +c=bA(a,b),e=0;if(48<=c){if(!(58<=c))e=1}else if(45===c)e=1;if(e){var b=b+1|0;continue}return b}}var -e=g(0),j=m(e,e),b=gV(a,e,j-e|0),c=g(j),h=n(c,c);if(c===h)var +e=g(0),j=m(e,e),b=gZ(a,e,j-e|0),c=g(j),h=n(c,c);if(c===h)var i=0;else try{var -p=o2(gV(a,c,h-c|0)),i=p}catch(a){a=o(a);if(a[1]!==kY)throw a;var +p=pe(gZ(a,c,h-c|0)),i=p}catch(a){a=o(a);if(a[1]!==k_)throw a;var i=f(0)}if(g(h)!==d)f(0);var -l=0;if(L(b,IF)&&L(b,IG))var -k=L(b,IH)?L(b,II)?L(b,IJ)?L(b,IK)?f(0):1:2:3:0;else +l=0;if(M(b,JH)&&M(b,JI))var +k=M(b,JJ)?M(b,JK)?M(b,JL)?M(b,JM)?f(0):1:2:3:0;else l=1;if(l)var k=4;return[0,i,k]}function -sV(d,c){var -a=c[1],b=0;return a8(function(a){e3(d,a);return 0},b,a)}function -jG(a){return sV(ed,a)}function -aF(b){var -a=b[1];return a8(function(b){var -a=k2(64);e4(a,b);return k3(a)},0,a)}var -pq=[0,0];function -ps(h,g){var +s$(d,c){var +a=c[1],b=0;return a$(function(a){e6(d,a);return 0},b,a)}function +jM(a){return s$(em,a)}function +aJ(b){var +a=b[1];return a$(function(b){var +a=lc(64);e7(a,b);return ld(a)},0,a)}var +pE=[0,0];function +pG(h,g){var a=h[1+g];if(1-(typeof -a==="number"?1:0)){if(kV(a)===j3)return q(aF(IL),a);if(kV(a)===q4){var -c=sg(F5,a),b=0,f=aE(c);for(;;){if(f<=b)return bM(c,F4);var -d=bu(c,b),e=0;if(48<=d){if(!(58<=d))e=1}else +a==="number"?1:0)){if(k7(a)===kb)return r(aJ(JN),a);if(k7(a)===rf){var +c=sw(G7,a),b=0,f=aI(c);for(;;){if(f<=b)return bS(c,G6);var +d=bA(c,b),e=0;if(48<=d){if(!(58<=d))e=1}else if(45===d)e=1;if(e){var -b=b+1|0;continue}return c}}return IM}return q(aF(IN),a)}function -sW(b,a){if(b.length-1<=a)return IO;var -c=sW(b,a+1|0),d=ps(b,a);return al(aF(IP),d,c)}function -pt(a){function +b=b+1|0;continue}return c}}return JO}return r(aJ(JP),a)}function +ta(b,a){if(b.length-1<=a)return JQ;var +c=ta(b,a+1|0),d=pG(b,a);return aq(aJ(JR),d,c)}function +pH(a){function n(e){var b=e;for(;;){if(b){var f=b[2],g=b[1];try{var -d=0,c=q(g,a);d=1}catch(a){}if(d&&c)return[0,c[1]];var +d=0,c=r(g,a);d=1}catch(a){}if(d&&c)return[0,c[1]];var b=f;continue}return 0}}var -g=n(pq[1]);if(g)return g[1];if(a===pa)return IU;if(a===sC)return IV;if(a[1]===sB){var -c=a[2],h=c[3],o=c[2],p=c[1];return qj(aF(pr),p,o,h,h+5|0,IW)}if(a[1]===bn){var -d=a[2],i=d[3],r=d[2],s=d[1];return qj(aF(pr),s,r,i,i+6|0,IX)}if(a[1]===sE){var -e=a[2],j=e[3],t=e[2],u=e[1];return qj(aF(pr),u,t,j,j+6|0,IY)}if(0===kV(a)){var +g=n(pE[1]);if(g)return g[1];if(a===po)return JW;if(a===sS)return JX;if(a[1]===sR){var +c=a[2],h=c[3],o=c[2],p=c[1];return lQ(aJ(pF),p,o,h,h+5|0,JY)}if(a[1]===bs){var +d=a[2],i=d[3],q=d[2],s=d[1];return lQ(aJ(pF),s,q,i,i+6|0,JZ)}if(a[1]===sU){var +e=a[2],j=e[3],t=e[2],u=e[1];return lQ(aJ(pF),u,t,j,j+6|0,J0)}if(0===k7(a)){var f=a.length-1,v=a[1][1];if(2>>0)var -k=sW(a,2),l=ps(a,1),b=al(aF(IQ),l,k);else +k=ta(a,2),l=pG(a,1),b=aq(aJ(JS),l,k);else switch(f){case 0:var -b=IR;break;case +b=JT;break;case 1:var -b=IS;break;default:var -m=ps(a,1),b=q(aF(IT),m)}return bM(v,b)}return a[1]}function -pu(t,s){var -d=btx(s),f=d.length-1-1|0,o=0;if(!(f<0)){var +b=JU;break;default:var +m=pG(a,1),b=r(aJ(JV),m)}return bS(v,b)}return a[1]}function +pI(t,s){var +d=byM(s),f=d.length-1-1|0,o=0;if(!(f<0)){var b=o;for(;;){var -a=a0(d,b)[1+b],e=function(a){return function(b){return b?0===a?IZ:I0:0===a?I1:I2}}(b);if(0===a[0])var -g=a[5],h=a[4],i=a[3],j=a[6]?I3:I5,k=a[2],l=a[7],m=e(a[1]),c=[0,btm(aF(I4),m,l,k,j,i,h,g)];else +a=aY(d,b)[1+b],e=function(a){return function(b){return b?0===a?J1:J2:0===a?J3:J4}}(b);if(0===a[0])var +g=a[5],h=a[4],i=a[3],j=a[6]?J5:J7,k=a[2],l=a[7],m=e(a[1]),c=[0,byB(aJ(J6),m,l,k,j,i,h,g)];else if(a[1])var c=0;else var -n=e(0),c=[0,q(aF(I6),n)];if(c){var -p=c[1];q(sV(t,I7),p)}var -r=b+1|0;if(f!==b){var -b=r;continue}break}}return 0}function -sX(c){for(;;){var -a=pq[1],b=1-o$(pq,a,[0,c,a]);if(b)continue;return b}}var -I9=I8.slice();function -I_(d,c){var -e=pt(d);q(jG(I$),e);pu(ed,c);var -a=bt0(0);if(a<0){var -b=gb(a);sI(a0(I9,b)[1+b])}return gR(ed)}var -Ja=[0];sr(a(Dk),function(d,h){try{try{var -b=h?Ja:Fv(0);try{pd(0)}catch(a){}try{var -a=I_(d,b),c=a}catch(a){a=o(a);var -f=pt(d);q(jG(Jc),f);pu(ed,b);var -g=pt(a);q(jG(Jd),g);pu(ed,Fv(0));var -c=gR(ed)}var -e=c}catch(a){a=o(a);if(a!==pa)throw a;var -e=sI(Jb)}return e}catch(a){return 0}});function -k7(a){var +n=e(0),c=[0,r(aJ(J8),n)];if(c){var +p=c[1];r(s$(t,J9),p)}var +q=b+1|0;if(f!==b){var +b=q;continue}break}}return 0}function +tb(c){for(;;){var +a=pE[1],b=1-pn(pE,a,[0,c,a]);if(b)continue;return b}}var +J$=J_.slice();function +Ka(d,c){var +e=pH(d);r(jM(Kb),e);pI(em,c);var +a=bzd(0);if(a<0){var +b=gl(a);sY(aY(J$,b)[1+b])}return gV(em)}var +Kc=[0];sH(a(Ec),function(d,h){try{try{var +b=h?Kc:Gx(0);try{pr(0)}catch(a){}try{var +a=Ka(d,b),c=a}catch(a){a=o(a);var +f=pH(d);r(jM(Ke),f);pI(em,b);var +g=pH(a);r(jM(Kf),g);pI(em,Gx(0));var +c=gV(em)}var +e=c}catch(a){a=o(a);if(a!==po)throw a;var +e=sY(Kd)}return e}catch(a){return 0}});function +lh(a){var b=a.length-1<4?1:0,c=b||(a[4]<0?1:0);return c}function -e5(a){a[4]=-a[4]|0;return 0}try{var -btj=FK(bti),sZ=btj}catch(a){a=o(a);if(a!==cA)throw a;try{var -bth=FK(btg),sY=bth}catch(a){a=o(a);if(a!==cA)throw a;var -sY=Jf}var -sZ=sY}pi(sZ,82);var -k8=[l3,function(w){var -m=bue(0),c=[0,eY(55,0),0],i=0===m.length-1?[0,0]:m,j=i.length-1,b=0;for(;;){a0(c[1],b)[1+b]=b;var +e8(a){a[4]=-a[4]|0;return 0}try{var +byx=GM(byw),td=byx}catch(a){a=o(a);if(a!==cD)throw a;try{var +byv=GM(byu),tc=byv}catch(a){a=o(a);if(a!==cD)throw a;var +tc=Kh}var +td=tc}pw(td,82);var +li=[mi,function(w){var +m=bzt(0),c=[0,e1(55,0),0],i=0===m.length-1?[0,0]:m,j=i.length-1,b=0;for(;;){aY(c[1],b)[1+b]=b;var v=b+1|0;if(54!==b){var b=v;continue}var -g=[0,Je],k=54+pg(55,j)|0,r=0;if(!(k<0)){var +g=[0,Kg],k=54+pu(55,j)|0,r=0;if(!(k<0)){var d=r;for(;;){var -e=d%55|0,l=bt4(d,j),s=a0(i,l)[1+l],h=bM(g[1],a(W+s));g[1]=btZ(h,0,aE(h));var -f=g[1],n=bu(f,3)<<24,o=bu(f,2)<<16,p=bu(f,1)<<8,q=((bu(f,0)+p|0)+o|0)+n|0,t=(a0(c[1],e)[1+e]^q)&rV;a0(c[1],e)[1+e]=t;var +e=d%55|0,l=bzh(d,j),s=aY(i,l)[1+l],h=bS(g[1],a($+s));g[1]=bzc(h,0,aI(h));var +f=g[1],n=bA(f,3)<<24,o=bA(f,2)<<16,p=bA(f,1)<<8,q=((bA(f,0)+p|0)+o|0)+n|0,t=(aY(c[1],e)[1+e]^q)&r8;aY(c[1],e)[1+e]=t;var u=d+1|0;if(k!==d){var d=u;continue}break}}c[2]=0;return c}}];function -s0(a){var +te(a){var c=0>>25|0)&31)|0)&rV,g=a[2];a0(a[1],g)[1+g]=f;var +h=k7(li),a=hj===h?li[1]:mi===h?Hd(li):li;a[2]=(a[2]+1|0)%55|0;var +c=a[2],d=aY(a[1],c)[1+c],e=(a[2]+24|0)%55|0,f=(aY(a[1],e)[1+e]+(d^(d>>>25|0)&31)|0)&r8,g=a[2];aY(a[1],g)[1+g]=f;var i=f}else var -i=0;return[0,0,eY(b,0),i,b]}}return[0,g,s0,Jg,Ji,c,h,i,j,k,d,l,Jk,Jm,Jn,Jj,Jo,pv,Jp,Jq,m,e,function(b){var +i=0;return[0,0,e1(b,0),i,b]}}return[0,g,te,Ki,Kk,c,h,i,j,k,d,l,Km,Ko,Kp,Kl,Kq,pJ,Kr,Ks,m,e,function(b){var a=g(16);e(a,b);return a}]}var -pw=[bc,Ju,cW(0)];function -Jt(a){return btD(10,c4,0,a)}var -k9=0,s3=-1;function -jH(a,b){a[13]=a[13]+b[3]|0;return sP(b,a[28])}var -s4=1000000010;function -px(b,a){return cx(b[17],a,0,aE(a))}function -k_(a){return q(a[19],0)}function -s5(a,c,b){a[9]=a[9]-c|0;px(a,b);a[11]=0;return 0}function -k$(c,a){var -b=L(a,Jv);return b?s5(c,aE(a),a):b}function -ge(a,b,e){var -f=b[3],g=b[2];k$(a,b[1]);k_(a);a[11]=1;var -c=(a[6]-e|0)+g|0,d=a[8],h=d<=c?d:c;a[10]=h;a[9]=a[6]-a[10]|0;q(a[21],a[10]);return k$(a,f)}function -s6(b,a){return ge(b,Jw,a)}function -g0(a,b){var -c=b[2],d=b[3];k$(a,b[1]);a[9]=a[9]-c|0;q(a[20],c);return k$(a,d)}function -Jx(a,i,b){if(typeof +pK=[bm,Kw,cZ(0)];function +Kv(a){return byS(10,cd,0,a)}var +lj=0,th=-1;function +jN(a,b){a[13]=a[13]+b[3]|0;return s5(b,a[28])}var +ti=1000000010;function +pL(b,a){return cB(b[17],a,0,aI(a))}function +lk(a){return r(a[19],0)}function +tj(a,c,b){a[9]=a[9]-c|0;pL(a,b);a[11]=0;return 0}function +ll(c,a){var +b=M(a,Kx);return b?tj(c,aI(a),a):b}function +go(a,b,e){var +f=b[3],g=b[2];ll(a,b[1]);lk(a);a[11]=1;var +c=(a[6]-e|0)+g|0,d=a[8],h=d<=c?d:c;a[10]=h;a[9]=a[6]-a[10]|0;r(a[21],a[10]);return ll(a,f)}function +tk(b,a){return go(b,Ky,a)}function +g4(a,b){var +c=b[2],d=b[3];ll(a,b[1]);a[9]=a[9]-c|0;r(a[20],c);return ll(a,d)}function +Kz(a,i,b){if(typeof b==="number")switch(b){case 0:var -s=gX(a[3]);if(s){var +s=g1(a[3]);if(s){var t=s[1][1],u=function(b,a){if(a){var -c=a[1],d=a[2];return FA(b,c)?[0,b,a]:[0,c,u(b,d)]}return[0,b,0]};t[1]=u(a[6]-a[9]|0,t[1]);return 0}return 0;case -1:gW(a[2]);return 0;case -2:gW(a[3]);return 0;case +c=a[1],d=a[2];return GC(b,c)?[0,b,a]:[0,c,u(b,d)]}return[0,b,0]};t[1]=u(a[6]-a[9]|0,t[1]);return 0}return 0;case +1:g0(a[2]);return 0;case +2:g0(a[3]);return 0;case 3:var -v=gX(a[2]);return v?s6(a,v[1][2]):k_(a);case +v=g1(a[2]);return v?tk(a,v[1][2]):lk(a);case 4:var w=a[10]!==(a[6]-a[9]|0)?1:0;if(w){var e=a[28],g=e[2];if(g){var m=g[1];if(g[2]){var J=g[2];e[1]=e[1]-1|0;e[2]=J;var -h=[0,m]}else{pl(e);var +h=[0,m]}else{pz(e);var h=[0,m]}}else var h=0;if(h){var -r=h[1],L=r[1];a[12]=a[12]-r[3]|0;a[9]=a[9]+L|0;return 0}return 0}return w;default:var -x=gW(a[5]);return x?px(a,q(a[25],x[1])):0}else +q=h[1],L=q[1];a[12]=a[12]-q[3]|0;a[9]=a[9]+L|0;return 0}return 0}return w;default:var +x=g0(a[5]);return x?pL(a,r(a[25],x[1])):0}else switch(b[0]){case -0:return s5(a,i,b[1]);case +0:return tj(a,i,b[1]);case 1:var -c=b[2],f=b[1],y=c[1],M=c[2],z=gX(a[2]);if(z){var +c=b[2],f=b[1],y=c[1],M=c[2],z=g1(a[2]);if(z){var A=z[1],d=A[2];switch(A[1]){case -0:return g0(a,f);case -1:return ge(a,c,d);case -2:return ge(a,c,d);case -3:return a[9]<(i+aE(y)|0)?ge(a,c,d):g0(a,f);case -4:return a[11]?g0(a,f):a[9]<(i+aE(y)|0)?ge(a,c,d):((a[6]-d|0)+M|0)>>0))s6(a,p)}else -k_(a)}var -S=a[9]-R|0,T=1===H?1:a[9]>>0))tk(a,p)}else +lk(a)}var +S=a[9]-R|0,T=1===H?1:a[9]>>0)throw pH;switch(a){case +d=0===(a%4|0)?1:0,c=d?0!==(a%cd|0)?1:0:d;return c}function +lw(c,b){var +a=c-1|0;if(11>>0)throw pV;switch(a){case 1:return b?29:28;case 3:case 5:case 8:case 10:return 30;default:return 31}}function -pJ(a){try{var +pX(a){try{var b=1<=a[3]?1:0;if(b)var -d=lj(a[1]),e=lk(a[2],d),c=a[3]<=e?1:0;else +d=lv(a[1]),e=lw(a[2],d),c=a[3]<=e?1:0;else var -c=b;return c}catch(a){a=o(a);if(a===pH)return 0;throw a}}function -tq(d,c,b){var -a=[0,d,c,b];if(pJ(a))return a;throw pH}function -ll(f,e,d){var +c=b;return c}catch(a){a=o(a);if(a===pV)return 0;throw a}}function +tG(d,c,b){var +a=[0,d,c,b];if(pX(a))return a;throw pV}function +lx(f,e,d){var b=f,a=d;for(;;){var c=e+a|0;if(1<=c&&!(12>a===b?c:FT(b,a)}return FT(b,a)}function -ts(a){return typeof -a==="number"?a:buE(a)}var -e6=0,lp=1,Kc=-1;function -tt(a){return gU(0,a,0,aE(a))}function -Kd(b,a){return gU(b,a,0,aE(a))}function -pK(a){if(typeof +c=b<>a===b?c:GV(b,a)}return GV(b,a)}function +tI(a){return typeof +a==="number"?a:bzT(a)}var +e9=0,lB=1,Le=-1;function +tJ(a){return gY(0,a,0,aI(a))}function +Lf(b,a){return gY(b,a,0,aI(a))}function +pY(a){if(typeof a==="number")return a;var -e=sw(a);if(63>g;f=1}if(!f)var -c=buC(a,b);var -i=bup(a,fq(c,b)),d=o_(c),h=i?d:btT(d,Ke);return o4(o1(h),b)}return o1(o_(a))}function -g2(a,b){if(a!==0&&b!==1){var -c=bus(a,b);if(c===1)return[0,a,b];var -d=tr(b,c);return[0,tr(a,c),d]}return[0,a,lp]}function -tu(b,a){var -c=c6(a);if(0===c)return[0,c6(b),e6];if(0>>0))switch(b){case +c=bzR(a,b);var +i=bzE(a,fw(c,b)),d=pm(c),h=i?d:by8(d,Lg);return pg(pd(h),b)}return pd(pm(a))}function +g6(a,b){if(a!==0&&b!==1){var +c=bzH(a,b);if(c===1)return[0,a,b];var +d=tH(b,c);return[0,tH(a,c),d]}return[0,a,lB]}function +tK(b,a){var +c=c7(a);if(0===c)return[0,c7(b),e9];if(0>>0))switch(b){case 0:return 2;case 1:break;default:return 1}return 3}return a[1]===0?0:4}function -pL(d,c){var -e=gg(d),b=gg(c),a=0;switch(e){case +pZ(d,c){var +e=gq(d),b=gq(c),a=0;switch(e){case 1:var j=b-1|0;if(!(2>>0))switch(j){case 0:a=2;break;case @@ -3196,31 +3196,31 @@ g=0;if(!(4<=e))switch(e){case 0:break;case 2:g=1;break;default:g=2}var h=0;switch(g){case -0:if(2!==b){if(f(d[2],c[2]))return ec(d[1],c[1]);var -l=cL(c[1],d[2]);return ec(cL(d[1],c[2]),l)}h=1;break;case +0:if(2!==b){if(f(d[2],c[2]))return el(d[1],c[1]);var +l=cN(c[1],d[2]);return el(cN(d[1],c[2]),l)}h=1;break;case 1:break;default:h=1}if(h)return 1}return-1}function -tx(a){var -b=a[2];return[0,gf(a[1]),b]}function -ty(c,a,b){if(a[2]===b[2]){var -d=a[2];return g2(al(c,a[1],b[1]),d)}var -e=cL(a[2],b[2]),f=cL(b[1],a[2]);return g2(al(c,cL(a[1],b[2]),f),e)}function -jL(b,a){if(b[2]!==0&&a[2]!==0){var -c=cL(b[2],a[2]);return g2(cL(b[1],a[1]),c)}return[0,ga(c6(b[1]),c6(a[1])),e6]}function -pM(b,a){if(0<=c6(a[1]))return jL(b,[0,a[2],a[1]]);var -c=gf(a[1]);return jL(b,[0,gf(a[2]),c])}function -pN(a){switch(a){case +tN(a){var +b=a[2];return[0,gp(a[1]),b]}function +tO(c,a,b){if(a[2]===b[2]){var +d=a[2];return g6(aq(c,a[1],b[1]),d)}var +e=cN(a[2],b[2]),f=cN(b[1],a[2]);return g6(aq(c,cN(a[1],b[2]),f),e)}function +jR(b,a){if(b[2]!==0&&a[2]!==0){var +c=cN(b[2],a[2]);return g6(cN(b[1],a[1]),c)}return[0,gk(c7(b[1]),c7(a[1])),e9]}function +p0(b,a){if(0<=c7(a[1]))return jR(b,[0,a[2],a[1]]);var +c=gp(a[1]);return jR(b,[0,gp(a[2]),c])}function +p1(a){switch(a){case 0:return 2;case 1:return 8;case 2:return 10;default:return 16}}function -pO(e,d,c,b){var -a=d;for(;;){if(c<=a)return 0;if(q(b,bu(e,a)))return[0,a];var +p2(e,d,c,b){var +a=d;for(;;){if(c<=a)return 0;if(r(b,bA(e,a)))return[0,a];var a=a+1|0;continue}}var -pP=[0,-1];function -Kh(a){if(L(a,Ki)){if(L(a,Kj)){if(!L(a,Kk))return lr;if(L(a,Kl)){if(L(a,Km))try{var -k=Gs(a,47),X=gU(0,a,k+1|0,(aE(a)-k|0)-1|0),Y=tu(gU(0,a,0,k),X);return Y}catch(k){k=o(k);if(k===cA){var -i=aE(a),x=0;if(i<1)var +p3=[0,-1];function +Lj(a){if(M(a,Lk)){if(M(a,Ll)){if(!M(a,Lm))return lD;if(M(a,Ln)){if(M(a,Lo))try{var +k=Hu(a,47),X=gY(0,a,k+1|0,(aI(a)-k|0)-1|0),Y=tK(gY(0,a,0,k),X);return Y}catch(k){k=o(k);if(k===cD){var +i=aI(a),x=0;if(i<1)var s=[0,0,x];else{var -N=bu(a,0)+z4|0,Q=0;if(!(2>>0)){var +N=bA(a,0)+AB|0,Q=0;if(!(2>>0)){var R=0;switch(N){case 0:var P=[0,0,1];break;case @@ -3231,10 +3231,10 @@ O=[0,0,x];var s=O}var c=s[2];if(i<(c+2|0))var t=[0,2,c];else{var -W=bu(a,c),g=bu(a,c+1|0),r=0;if(48===W){var +W=bA(a,c),g=bA(a,c+1|0),r=0;if(48===W){var h=0;if(89<=g){if(98===g)h=2;else -if(kK===g)h=1;else -if(dq!==g){r=1;h=3}}else +if(kW===g)h=1;else +if(dv!==g){r=1;h=3}}else if(66===g)h=2;else if(79===g)h=1;else if(!(88<=g)){r=1;h=3}switch(h){case @@ -3247,226 +3247,227 @@ q=[0,0,c+2|0]}}else r=1;if(r)var q=[0,2,c];var t=q}var -d=t[2],b=t[1],S=2===b?function(a){if(69!==a&&hu!==a)return 0;return 1}:3<=b?function(a){if(80!==a&&kJ!==a)return 0;return 1}:function(a){return 0},y=pO(a,d,i,S);if(y)var -z=y[1],A=z+1|0,e=z,B=ts(gU(10,a,A,i-A|0));else +d=t[2],b=t[1],S=2===b?function(a){if(69!==a&&fO!==a)return 0;return 1}:3<=b?function(a){if(80!==a&&kV!==a)return 0;return 1}:function(a){return 0},y=p2(a,d,i,S);if(y)var +z=y[1],A=z+1|0,e=z,B=tI(gY(10,a,A,i-A|0));else var e=i,B=0;if(2<=b){var -C=pO(a,d,e,function(a){return 46===a?1:0});if(C){var +C=p2(a,d,e,function(a){return 46===a?1:0});if(C){var u=C[1];if(2===b)var -D=1;else{if(!(3<=b))throw[0,bn,Ko];var +D=1;else{if(!(3<=b))throw[0,bs,Lq];var D=4}var F=u+1|0,G=e-1|0,E=0;if(G>>4|0));dS(h,g+5|0,tB(e&15));c[1]=a+1|0;break}}var +1:lE(b,d,c[1],a-c[1]|0);var +g=tP(b,6),h=b[1];d7(LA,0,h,g,4);d3(h,g+4|0,tR(e>>>4|0));d3(h,g+5|0,tR(e&15));c[1]=a+1|0;break}}var l=a+1|0;if(i!==a){var -a=l;continue}break}}Kz(d,c,b);return bI(b,34)},tC=function(a,b){return dX(a,KI)},tD=function(b,a){var -c=a?KJ:KK;return dX(b,c)},KL=sF(10,11),pT=function(c,b,a){if(0===a)return b;var -d=pT(c,b,a/10|0);dS(c,d,sK(gb(a%10|0)+48|0));return d+1|0},tE=function(a,b){pR(a,KL);if(0>>1|0;Kp[1]++;continue}}(globalThis)); +c=ls(0,a);c[1+b]=d;return c};lr(a);qs[1]=m}return r(qs[1],[0,g,d,e,f])},bys=function(a){return bi(function(a){return t9(function(b){return uV(a).aideFinale})})},byt=function(a){return bi(function(a){return t9(function(b){return ug(a).iMontantVerse})})};Ng(function(c,b,a,d){return{"eventsManager":c,"computeAllocationsFamiliales":ar(b),"computeAidesAuLogement":ar(a)}}(Nt,byt,bys,byq));pr(0);return}p3[1]=p3[1]>>>1|0;Lr[1]++;continue}}(globalThis)); diff --git a/french_law/ocaml/bench.ml b/french_law/ocaml/bench.ml index 44e73e97..94ea9d4b 100644 --- a/french_law/ocaml/bench.ml +++ b/french_law/ocaml/bench.ml @@ -71,7 +71,7 @@ let format_prise_en_charge (fmt : Format.formatter) (g : AF.PriseEnCharge.t) : let num_successful = ref 0 let total_amount = ref 0. -let run_test () = +let run_test_allocations_familiales () = let num_children = Random.int 7 in let children = Array.init num_children random_children in let income = Random.int 100000 in @@ -115,19 +115,134 @@ let run_test () = exit (-1) | Runtime.AssertionFailed _ -> () +let aides_logement_input : + Law_source.Aides_logement.CalculetteAidesAuLogementGardeAlterneeIn.t = + { + menage_in = + { + prestations_recues = Array.of_list []; + logement = + { + residence_principale = true; + est_ehpad_ou_maison_autonomie_l313_12_asf = false; + mode_occupation = + Law_source.Aides_logement.ModeOccupation.Locataire + { + bailleur = + Law_source.Aides_logement.TypeBailleur.BailleurPrive (); + beneficiaire_aide_adulte_ou_enfant_handicapes = false; + logement_est_chambre = false; + colocation = false; + agees_ou_handicap_adultes_hebergees_onereux_particuliers = + false; + logement_meuble_d842_2 = false; + changement_logement_d842_4 = + Law_source.Aides_logement.ChangementLogementD8424 + .PasDeChangement + (); + loyer_principal = Runtime.money_of_units_int 450; + }; + proprietaire = Law_source.Aides_logement.ParentOuAutre.Autre (); + loue_ou_sous_loue_a_des_tiers = + Law_source.Aides_logement.LoueOuSousLoueADesTiers.Non (); + usufruit = Law_source.Aides_logement.ParentOuAutre.Autre (); + logement_decent_l89_462 = true; + surface_m_carres = Runtime.integer_of_int 65; + zone = Law_source.Aides_logement.ZoneDHabitation.Zone2 (); + }; + personnes_a_charge = + Array.of_list + [ + Law_source.Aides_logement.PersonneACharge.EnfantACharge + { + beneficie_titre_personnel_aide_personnelle_logement = false; + a_deja_ouvert_droit_aux_allocations_familiales = true; + remuneration_mensuelle = Runtime.money_of_units_int 0; + obligation_scolaire = + Law_source.Aides_logement.SituationObligationScolaire + .Pendant + (); + situation_garde_alternee = + Law_source.Aides_logement.SituationGardeAlternee + .PasDeGardeAlternee + (); + date_de_naissance = Runtime.date_of_numbers 2015 1 1; + identifiant = Runtime.integer_of_int 0; + }; + Law_source.Aides_logement.PersonneACharge.EnfantACharge + { + beneficie_titre_personnel_aide_personnelle_logement = false; + a_deja_ouvert_droit_aux_allocations_familiales = true; + remuneration_mensuelle = Runtime.money_of_units_int 0; + obligation_scolaire = + Law_source.Aides_logement.SituationObligationScolaire + .Pendant + (); + situation_garde_alternee = + Law_source.Aides_logement.SituationGardeAlternee + .PasDeGardeAlternee + (); + date_de_naissance = Runtime.date_of_numbers 2016 1 1; + identifiant = Runtime.integer_of_int 1; + }; + ]; + nombre_autres_occupants_logement = Runtime.integer_of_int 0; + situation_familiale = + Law_source.Aides_logement.SituationFamiliale.Concubins (); + condition_rattache_foyer_fiscal_parent_ifi = false; + enfant_a_naitre_apres_quatrieme_mois_grossesse = false; + }; + demandeur_in = + { + nationalite = Law_source.Aides_logement.Nationalite.Francaise (); + patrimoine = + { + produisant_revenu_periode_r822_3_3_r822_4 = + Runtime.money_of_units_int 0; + ne_produisant_pas_revenu_periode_r822_3_3_r822_4 = + Runtime.money_of_units_int 0; + }; + personne_hebergee_centre_soin_l_L162_22_3_securite_sociale = false; + date_naissance = Runtime.date_of_numbers 1992 1 1; + }; + date_courante_in = Runtime.date_of_numbers 2022 5 1; + ressources_menage_prises_en_compte_in = Runtime.money_of_units_int 11500; + } + +let run_test_aides_logement () = + try + ignore + (Law_source.Aides_logement.calculette_aides_au_logement_garde_alternee + aides_logement_input) + with + | (Runtime.NoValueProvided _ | Runtime.ConflictError _) as err -> + Format.printf "%s" + (match err with + | Runtime.NoValueProvided _ -> "No value provided somewhere!" + | Runtime.ConflictError _ -> "Conflict error!" + | _ -> failwith "impossible"); + exit (-1) + | Runtime.AssertionFailed _ -> () + let _bench = Random.init (int_of_float (Unix.time ())); let num_iter = 10000 in let _ = Benchmark.latency1 ~style:Auto ~name:"Allocations familiales" - (Int64.of_int num_iter) run_test () + (Int64.of_int num_iter) run_test_allocations_familiales () in Printf.printf - "Successful computations: %d (%.2f%%)\n\ - Total benefits awarded: %.2f€ (mean %.2f€)\n" + "Successful\n\ + \ computations: %d (%.2f%%)\n\ + \ Total benefits awarded: %.2f€ (mean %.2f€)\n" !num_successful (Float.mul (Float.div (float_of_int !num_successful) (float_of_int num_iter)) 100.) !total_amount - (Float.div !total_amount (float_of_int !num_successful)) + (Float.div !total_amount (float_of_int !num_successful)); + let _ = + Benchmark.latency1 ~style:Auto ~name:"Aides au logement" + (Int64.of_int num_iter) run_test_aides_logement () + in + Printf.printf "Successful\n" diff --git a/french_law/ocaml/law_source/aides_logement.ml b/french_law/ocaml/law_source/aides_logement.ml index d9fda3ad..234a8463 100644 --- a/french_law/ocaml/law_source/aides_logement.ml +++ b/french_law/ocaml/law_source/aides_logement.ml @@ -2118,11 +2118,11 @@ let contributions_sociales_aides_personnelle_logement (contributions_sociales_ai "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/autres_sources.catala_fr"; - start_line=161; start_column=39; end_line=161; end_column=69; + start_line=191; start_column=39; end_line=191; end_column=68; law_headings=["Article 19"; "Chapitre II : Des contributions pour le remboursement de la dette sociale."; "Ordonnance n° 96-50 du 24 janvier 1996 relative au remboursement de la dette sociale"]} - (date_courante_ >=@ (date_of_numbers (2020) (1) (1))))) + (o_gte_dat_dat date_courante_ (date_of_numbers (2020) (1) (1))))) (fun (_: unit) -> decimal_of_string "0.005")) with EmptyError -> (raise (NoValueProvided @@ -2139,45 +2139,46 @@ let contributions_sociales_aides_personnelle_logement (contributions_sociales_ai try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=520; start_column=10; end_line=520; end_column=17; + start_line=520; start_column=12; end_line=520; end_column=19; law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/autres_sources.catala_fr"; - start_line=123; start_column=5; - end_line=123; end_column=35; + start_line=153; start_column=5; + end_line=153; end_column=34; law_headings=["Article 14"; "Chapitre II : Des contributions pour le remboursement de la dette sociale."; "Ordonnance n° 96-50 du 24 janvier 1996 relative au remboursement de la dette sociale"]} - (date_courante_ >=@ (date_of_numbers (2018) (9) (1))))) - (fun (_: unit) -> param_ *$ taux_crds_)) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2018) (9) (1))))) + (fun (_: unit) -> o_mult_mon_rat param_ taux_crds_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=520; start_column=10; end_line=520; end_column=17; + start_line=520; start_column=12; end_line=520; end_column=19; law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]}))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=520; start_column=10; end_line=520; end_column=17; + start_line=520; start_column=12; end_line=520; end_column=19; law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in let _: unit = if (try exonere_csg_ with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/autres_sources.catala_fr"; - start_line=127; start_column=13; - end_line=127; end_column=24; + start_line=157; start_column=13; + end_line=157; end_column=24; law_headings=["Article 14"; "Chapitre II : Des contributions pour le remboursement de la dette sociale."; "Ordonnance n° 96-50 du 24 janvier 1996 relative au remboursement de la dette sociale"]}))) then () else raise (AssertionFailed {filename = "examples/aides_logement/autres_sources.catala_fr"; - start_line=127; start_column=13; - end_line=127; end_column=24; + start_line=157; start_column=13; + end_line=157; end_column=24; law_headings=["Article 14"; "Chapitre II : Des contributions pour le remboursement de la dette sociale."; "Ordonnance n° 96-50 du 24 janvier 1996 relative au remboursement de la dette sociale"]}) in @@ -2200,7 +2201,7 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2901; start_column=14; end_line=2901; end_column=41; + start_line=2676; start_column=14; end_line=2676; end_column=41; law_headings=["Article 31"; "Chapitre V : Calcul de l'aide personnalisée au logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -2238,67 +2239,71 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2866; start_column=5; - end_line=2866; end_column=26; + start_line=2641; start_column=5; + end_line=2641; end_column=26; law_headings=["Article 31"; "Chapitre V : Calcul de l'aide personnalisée au logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} condition_2_du_832_25_)) (fun (_: unit) -> - [|{TrancheRevenu.haut = - (LimiteTranche.Revenu (money_of_cents_string - "142303")); - TrancheRevenu.bas = (money_of_cents_string "0"); - TrancheRevenu.taux = (decimal_of_string "0.")}; - {TrancheRevenu.haut = - (LimiteTranche.Revenu (money_of_cents_string - "204761")); - TrancheRevenu.bas = (money_of_cents_string "142303"); - TrancheRevenu.taux = (decimal_of_string "0.024")}; - {TrancheRevenu.haut = - (LimiteTranche.Revenu (money_of_cents_string - "262985")); - TrancheRevenu.bas = (money_of_cents_string "204761"); - TrancheRevenu.taux = (decimal_of_string "0.208")}; - {TrancheRevenu.haut = - (LimiteTranche.Revenu (money_of_cents_string - "409505")); - TrancheRevenu.bas = (money_of_cents_string "262985"); - TrancheRevenu.taux = (decimal_of_string "0.232")}; - {TrancheRevenu.haut = (LimiteTranche.Infini ()); - TrancheRevenu.bas = (money_of_cents_string "409505"); - TrancheRevenu.taux = (decimal_of_string "0.328")}|]))|]) + [|({TrancheRevenu.haut = + (LimiteTranche.Revenu (money_of_cents_string + "142303")); + TrancheRevenu.bas = (money_of_cents_string "0"); + TrancheRevenu.taux = (decimal_of_string "0.")}); + ({TrancheRevenu.haut = + (LimiteTranche.Revenu (money_of_cents_string + "204761")); + TrancheRevenu.bas = (money_of_cents_string + "142303"); + TrancheRevenu.taux = (decimal_of_string "0.024")}); + ({TrancheRevenu.haut = + (LimiteTranche.Revenu (money_of_cents_string + "262985")); + TrancheRevenu.bas = (money_of_cents_string + "204761"); + TrancheRevenu.taux = (decimal_of_string "0.208")}); + ({TrancheRevenu.haut = + (LimiteTranche.Revenu (money_of_cents_string + "409505")); + TrancheRevenu.bas = (money_of_cents_string + "262985"); + TrancheRevenu.taux = (decimal_of_string "0.232")}); + ({TrancheRevenu.haut = (LimiteTranche.Infini ()); + TrancheRevenu.bas = (money_of_cents_string + "409505"); + TrancheRevenu.taux = (decimal_of_string "0.328")})|]))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2817; start_column=14; end_line=2817; end_column=38; + start_line=2592; start_column=14; end_line=2592; end_column=38; law_headings=["Article 31"; "Chapitre V : Calcul de l'aide personnalisée au logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} true)) (fun (_: unit) -> - [|{TrancheRevenu.haut = - (LimiteTranche.Revenu (money_of_cents_string "194810")); - TrancheRevenu.bas = (money_of_cents_string "0"); - TrancheRevenu.taux = (decimal_of_string "0.04")}; - {TrancheRevenu.haut = - (LimiteTranche.Revenu (money_of_cents_string "267871")); - TrancheRevenu.bas = (money_of_cents_string "194810"); - TrancheRevenu.taux = (decimal_of_string "0.104")}; - {TrancheRevenu.haut = - (LimiteTranche.Revenu (money_of_cents_string "389618")); - TrancheRevenu.bas = (money_of_cents_string "267871"); - TrancheRevenu.taux = (decimal_of_string "0.216")}; - {TrancheRevenu.haut = - (LimiteTranche.Revenu (money_of_cents_string "535744")); - TrancheRevenu.bas = (money_of_cents_string "389618"); - TrancheRevenu.taux = (decimal_of_string "0.264")}; - {TrancheRevenu.haut = - (LimiteTranche.Revenu (money_of_cents_string "633129")); - TrancheRevenu.bas = (money_of_cents_string "535744"); - TrancheRevenu.taux = (decimal_of_string "0.32")}; - {TrancheRevenu.haut = (LimiteTranche.Infini ()); - TrancheRevenu.bas = (money_of_cents_string "633129"); - TrancheRevenu.taux = (decimal_of_string "0.48")}|])) + [|({TrancheRevenu.haut = + (LimiteTranche.Revenu (money_of_cents_string "194810")); + TrancheRevenu.bas = (money_of_cents_string "0"); + TrancheRevenu.taux = (decimal_of_string "0.04")}); + ({TrancheRevenu.haut = + (LimiteTranche.Revenu (money_of_cents_string "267871")); + TrancheRevenu.bas = (money_of_cents_string "194810"); + TrancheRevenu.taux = (decimal_of_string "0.104")}); + ({TrancheRevenu.haut = + (LimiteTranche.Revenu (money_of_cents_string "389618")); + TrancheRevenu.bas = (money_of_cents_string "267871"); + TrancheRevenu.taux = (decimal_of_string "0.216")}); + ({TrancheRevenu.haut = + (LimiteTranche.Revenu (money_of_cents_string "535744")); + TrancheRevenu.bas = (money_of_cents_string "389618"); + TrancheRevenu.taux = (decimal_of_string "0.264")}); + ({TrancheRevenu.haut = + (LimiteTranche.Revenu (money_of_cents_string "633129")); + TrancheRevenu.bas = (money_of_cents_string "535744"); + TrancheRevenu.taux = (decimal_of_string "0.32")}); + ({TrancheRevenu.haut = (LimiteTranche.Infini ()); + TrancheRevenu.bas = (money_of_cents_string "633129"); + TrancheRevenu.taux = (decimal_of_string "0.48")})|])) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -2321,7 +2326,7 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3977; start_column=14; end_line=3977; end_column=50; + start_line=4038; start_column=14; end_line=4038; end_column=50; law_headings=["Article D832-26"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -2332,19 +2337,20 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - Array.map - (fun (tranche_: _) -> + o_map + (fun (tranche_: TrancheRevenu.t) -> {TrancheRevenuDecimal.haut = (match (tranche_.TrancheRevenu.haut) with | LimiteTranche.Revenu tranche_haut_ -> (LimiteTrancheDecimal.Revenu - ((decimal_of_money tranche_haut_) *& + (o_mult_rat_rat (o_torat_mon tranche_haut_) n_nombre_parts_d832_25_)) | LimiteTranche.Infini _ -> (LimiteTrancheDecimal.Infini ())); TrancheRevenuDecimal.bas = - ((decimal_of_money (tranche_.TrancheRevenu.bas)) *& + (o_mult_rat_rat + (o_torat_mon (tranche_.TrancheRevenu.bas)) n_nombre_parts_d832_25_); TrancheRevenuDecimal.taux = (tranche_.TrancheRevenu.taux)}) tranches_revenus_d832_26_)) @@ -2361,7 +2367,7 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=596; start_column=10; end_line=596; end_column=17; + start_line=596; start_column=12; end_line=596; end_column=19; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -2369,16 +2375,16 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=596; start_column=10; - end_line=596; end_column=17; + start_line=596; start_column=12; + end_line=596; end_column=19; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4028; start_column=5; - end_line=4028; end_column=26; + start_line=4089; start_column=5; + end_line=4089; end_column=26; law_headings=["Article D832-26"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -2389,45 +2395,54 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal "Code de la construction et de l'habitation"]} condition_2_du_832_25_)) (fun (_: unit) -> - (let ressources_menage_arrondies_ : _ = - (decimal_of_money ressources_menage_arrondies_) + (let ressources_menage_arrondies_ : decimal = + (o_torat_mon ressources_menage_arrondies_) in - (money_of_decimal - (((Array.fold_left - (fun (acc_: decimal) (tranche_: _) -> - acc_ +& - ( if - (ressources_menage_arrondies_ <=& - (tranche_.TrancheRevenuDecimal.bas)) - then (decimal_of_string "0.") else - (match - (tranche_.TrancheRevenuDecimal.haut) - with - | LimiteTrancheDecimal.Revenu tranche_haut_ -> - ( if - (ressources_menage_arrondies_ >=& - tranche_haut_) then - ((tranche_haut_ -& - (tranche_.TrancheRevenuDecimal.bas)) - *& - (tranche_.TrancheRevenuDecimal.taux)) - else - ((ressources_menage_arrondies_ -& - (tranche_.TrancheRevenuDecimal.bas)) - *& - (tranche_.TrancheRevenuDecimal.taux))) - | LimiteTrancheDecimal.Infini _ -> - ((ressources_menage_arrondies_ -& - (tranche_.TrancheRevenuDecimal.bas)) - *& - (tranche_.TrancheRevenuDecimal.taux))))) - (decimal_of_string "0.") - tranches_revenus_d832_26_multipliees_) +& - (decimal_of_money montant_forfaitaire_d832_26_)) - /& (decimal_of_string "12."))))))|]) + (o_tomoney_rat + (o_div_rat_rat + (o_add_rat_rat + (o_reduce + (fun (sum1_: decimal) (sum2_: decimal) -> + o_add_rat_rat sum1_ sum2_) + (decimal_of_string "0.") + (o_map + (fun (tranche_: TrancheRevenuDecimal.t) -> + if + (o_lte_rat_rat + ressources_menage_arrondies_ + (tranche_.TrancheRevenuDecimal.bas)) + then (decimal_of_string "0.") else + (match + (tranche_.TrancheRevenuDecimal.haut) + with + | LimiteTrancheDecimal.Revenu tranche_haut_ -> + ( if + (o_gte_rat_rat + ressources_menage_arrondies_ + tranche_haut_) then + (o_mult_rat_rat + (o_sub_rat_rat + tranche_haut_ + (tranche_.TrancheRevenuDecimal.bas)) + (tranche_.TrancheRevenuDecimal.taux)) + else + (o_mult_rat_rat + (o_sub_rat_rat + ressources_menage_arrondies_ + (tranche_.TrancheRevenuDecimal.bas)) + (tranche_.TrancheRevenuDecimal.taux))) + | LimiteTrancheDecimal.Infini _ -> + (o_mult_rat_rat + (o_sub_rat_rat + ressources_menage_arrondies_ + (tranche_.TrancheRevenuDecimal.bas)) + (tranche_.TrancheRevenuDecimal.taux)))) + tranches_revenus_d832_26_multipliees_)) + (o_torat_mon montant_forfaitaire_d832_26_)) + (decimal_of_string "12."))))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3990; start_column=14; end_line=3990; end_column=21; + start_line=4051; start_column=14; end_line=4051; end_column=21; law_headings=["Article D832-26"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -2438,44 +2453,53 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let ressources_menage_arrondies_ : _ = - (decimal_of_money ressources_menage_arrondies_) + (let ressources_menage_arrondies_ : decimal = + (o_torat_mon ressources_menage_arrondies_) in - (money_of_decimal - (((Array.fold_left - (fun (acc_: decimal) (tranche_: _) -> - acc_ +& - ( if - (ressources_menage_arrondies_ <=& - (tranche_.TrancheRevenuDecimal.bas)) then - (decimal_of_string "0.") else - (match (tranche_.TrancheRevenuDecimal.haut) - with - | LimiteTrancheDecimal.Revenu tranche_haut_ -> - ( if - (ressources_menage_arrondies_ >=& - tranche_haut_) then - ((tranche_haut_ -& - (tranche_.TrancheRevenuDecimal.bas)) - *& - (tranche_.TrancheRevenuDecimal.taux)) - else - ((ressources_menage_arrondies_ -& - (tranche_.TrancheRevenuDecimal.bas)) - *& - (tranche_.TrancheRevenuDecimal.taux))) - | LimiteTrancheDecimal.Infini _ -> - ((ressources_menage_arrondies_ -& - (tranche_.TrancheRevenuDecimal.bas)) *& - (tranche_.TrancheRevenuDecimal.taux))))) - (decimal_of_string "0.") - tranches_revenus_d832_26_multipliees_) +& - ((decimal_of_money montant_forfaitaire_d832_26_) *& - n_nombre_parts_d832_25_)) /& (decimal_of_string "12.")))))) + (o_tomoney_rat + (o_div_rat_rat + (o_add_rat_rat + (o_reduce + (fun (sum1_: decimal) (sum2_: decimal) -> + o_add_rat_rat sum1_ sum2_) + (decimal_of_string "0.") + (o_map + (fun (tranche_: TrancheRevenuDecimal.t) -> + if + (o_lte_rat_rat ressources_menage_arrondies_ + (tranche_.TrancheRevenuDecimal.bas)) then + (decimal_of_string "0.") else + (match (tranche_.TrancheRevenuDecimal.haut) + with + | LimiteTrancheDecimal.Revenu tranche_haut_ -> + ( if + (o_gte_rat_rat + ressources_menage_arrondies_ + tranche_haut_) then + (o_mult_rat_rat + (o_sub_rat_rat tranche_haut_ + (tranche_.TrancheRevenuDecimal.bas)) + (tranche_.TrancheRevenuDecimal.taux)) + else + (o_mult_rat_rat + (o_sub_rat_rat + ressources_menage_arrondies_ + (tranche_.TrancheRevenuDecimal.bas)) + (tranche_.TrancheRevenuDecimal.taux))) + | LimiteTrancheDecimal.Infini _ -> + (o_mult_rat_rat + (o_sub_rat_rat + ressources_menage_arrondies_ + (tranche_.TrancheRevenuDecimal.bas)) + (tranche_.TrancheRevenuDecimal.taux)))) + tranches_revenus_d832_26_multipliees_)) + (o_mult_rat_rat + (o_torat_mon montant_forfaitaire_d832_26_) + n_nombre_parts_d832_25_)) (decimal_of_string "12.")))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=596; start_column=10; end_line=596; end_column=17; + start_line=596; start_column=12; end_line=596; end_column=19; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -2492,7 +2516,7 @@ let calcul_nombre_part_logement_foyer (calcul_nombre_part_logement_foyer_in: Cal try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=603; start_column=10; end_line=603; end_column=32; + start_line=603; start_column=12; end_line=603; end_column=34; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -2500,16 +2524,16 @@ let calcul_nombre_part_logement_foyer (calcul_nombre_part_logement_foyer_in: Cal ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=603; start_column=10; - end_line=603; end_column=32; + start_line=603; start_column=12; + end_line=603; end_column=34; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3942; start_column=5; - end_line=3942; end_column=26; + start_line=4003; start_column=5; + end_line=4003; end_column=26; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -2521,8 +2545,8 @@ let calcul_nombre_part_logement_foyer (calcul_nombre_part_logement_foyer_in: Cal condition_2_du_832_25_)) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -2530,27 +2554,30 @@ let calcul_nombre_part_logement_foyer (calcul_nombre_part_logement_foyer_in: Cal | SituationFamilialeCalculAPL.Couple _ -> (decimal_of_string "1.5")) else ( if - (nombre_personnes_a_charge_ = (integer_of_string + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (decimal_of_string "2.5") else ( if - (nombre_personnes_a_charge_ = (integer_of_string - "2")) then (decimal_of_string "3.") else + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (decimal_of_string "3.") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (decimal_of_string "3.7") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (decimal_of_string "4.3") else - ((decimal_of_string "4.3") +& - ((decimal_of_string "0.5") *& - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_rat_rat (decimal_of_string "4.3") + (o_mult_rat_rat + (decimal_of_string "0.5") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "4")))))))))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3855; start_column=14; end_line=3855; end_column=36; + start_line=3916; start_column=14; end_line=3916; end_column=36; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -2561,32 +2588,34 @@ let calcul_nombre_part_logement_foyer (calcul_nombre_part_logement_foyer_in: Cal "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - if (nombre_personnes_a_charge_ = (integer_of_string "0")) then + if (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) + then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> (decimal_of_string "1.4") | SituationFamilialeCalculAPL.Couple _ -> (decimal_of_string "1.8")) else - ( if (nombre_personnes_a_charge_ = (integer_of_string "1")) + ( if (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (decimal_of_string "2.5") else - ( if (nombre_personnes_a_charge_ = (integer_of_string "2")) + ( if + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (decimal_of_string "3.") else ( if - (nombre_personnes_a_charge_ = (integer_of_string "3")) - then (decimal_of_string "3.7") else + (o_eq nombre_personnes_a_charge_ (integer_of_string + "3")) then (decimal_of_string "3.7") else ( if - (nombre_personnes_a_charge_ = (integer_of_string + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (decimal_of_string "4.3") else - ((decimal_of_string "4.3") +& - ((decimal_of_string "0.5") *& - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_rat_rat (decimal_of_string "4.3") + (o_mult_rat_rat (decimal_of_string "0.5") + (o_torat_int + (o_sub_int_int nombre_personnes_a_charge_ (integer_of_string "4"))))))))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=603; start_column=10; end_line=603; end_column=32; + start_line=603; start_column=12; end_line=603; end_column=34; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -2603,14 +2632,14 @@ let calcul_nombre_parts_accession_propriete (calcul_nombre_parts_accession_propr try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=659; start_column=10; end_line=659; end_column=32; + start_line=659; start_column=12; end_line=659; end_column=34; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3199; start_column=14; end_line=3199; end_column=36; + start_line=3260; start_column=14; end_line=3260; end_column=36; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -2620,32 +2649,34 @@ let calcul_nombre_parts_accession_propriete (calcul_nombre_parts_accession_propr "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - if (nombre_personnes_a_charge_ = (integer_of_string "0")) then + if (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) + then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> (decimal_of_string "1.4") | SituationFamilialeCalculAPL.Couple _ -> (decimal_of_string "1.8")) else - ( if (nombre_personnes_a_charge_ = (integer_of_string "1")) + ( if (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (decimal_of_string "2.5") else - ( if (nombre_personnes_a_charge_ = (integer_of_string "2")) + ( if + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (decimal_of_string "3.") else ( if - (nombre_personnes_a_charge_ = (integer_of_string "3")) - then (decimal_of_string "3.7") else + (o_eq nombre_personnes_a_charge_ (integer_of_string + "3")) then (decimal_of_string "3.7") else ( if - (nombre_personnes_a_charge_ = (integer_of_string + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (decimal_of_string "4.3") else - ((decimal_of_string "4.3") +& - ((decimal_of_string "0.5") *& - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_rat_rat (decimal_of_string "4.3") + (o_mult_rat_rat (decimal_of_string "0.5") + (o_torat_int + (o_sub_int_int nombre_personnes_a_charge_ (integer_of_string "4"))))))))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=659; start_column=10; end_line=659; end_column=32; + start_line=659; start_column=12; end_line=659; end_column=34; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -2660,22 +2691,22 @@ let ouverture_droits_retraite (ouverture_droits_retraite_in: OuvertureDroitsRetr try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=998; start_column=10; end_line=998; end_column=29; + start_line=998; start_column=12; end_line=998; end_column=31; law_headings=["Date d'ouverture des droits à la retraite"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=998; start_column=10; - end_line=998; end_column=29; + start_line=998; start_column=12; + end_line=998; end_column=31; law_headings=["Date d'ouverture des droits à la retraite"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_sécurité_sociale.catala_fr"; start_line=119; start_column=5; - end_line=119; end_column=43; + end_line=119; end_column=42; law_headings=["Article L161-17-2"; "Paragraphe 1 : Information et simplification des démarches des assurés."; "Sous-section 4 : Assurance vieillesse"; @@ -2685,21 +2716,21 @@ let ouverture_droits_retraite (ouverture_droits_retraite_in: OuvertureDroitsRetr "Titre III: Titre III : Dispositions communes relatives au financement"; "Partie législative"; "Code de la sécurité sociale"]} - (date_naissance_assure_ >=@ + (o_gte_dat_dat date_naissance_assure_ (date_of_numbers (1955) (1) (1))))) (fun (_: unit) -> duration_of_numbers (62) (0) (0))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=998; start_column=10; - end_line=998; end_column=29; + start_line=998; start_column=12; + end_line=998; end_column=31; law_headings=["Date d'ouverture des droits à la retraite"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_sécurité_sociale.catala_fr"; start_line=256; start_column=5; - end_line=256; end_column=42; + end_line=256; end_column=41; law_headings=["Article D161-2-1-9"; "Paragraphe 2 : Ouverture du droit et liquidation."; "Sous-section 4 : Assurance vieillesse"; @@ -2709,21 +2740,21 @@ let ouverture_droits_retraite (ouverture_droits_retraite_in: OuvertureDroitsRetr "Livre I : Généralités - Dispositions communes à tout ou partie des régimes de base"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (date_naissance_assure_ <@ + (o_lt_dat_dat date_naissance_assure_ (date_of_numbers (1951) (7) (1))))) (fun (_: unit) -> duration_of_numbers (60) (0) (0))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=998; start_column=10; - end_line=998; end_column=29; + start_line=998; start_column=12; + end_line=998; end_column=31; law_headings=["Date d'ouverture des droits à la retraite"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_sécurité_sociale.catala_fr"; start_line=266; start_column=5; - end_line=267; end_column=43; + end_line=267; end_column=42; law_headings=["Article D161-2-1-9"; "Paragraphe 2 : Ouverture du droit et liquidation."; "Sous-section 4 : Assurance vieillesse"; @@ -2733,18 +2764,19 @@ let ouverture_droits_retraite (ouverture_droits_retraite_in: OuvertureDroitsRetr "Livre I : Généralités - Dispositions communes à tout ou partie des régimes de base"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((date_naissance_assure_ >=@ - (date_of_numbers (1951) (7) (1))) && - (date_naissance_assure_ <=@ + (o_and + (o_gte_dat_dat date_naissance_assure_ + (date_of_numbers (1951) (7) (1))) + (o_lte_dat_dat date_naissance_assure_ (date_of_numbers (1951) (12) (31)))))) (fun (_: unit) -> - (duration_of_numbers (60) (0) (0)) +^ + o_add_dur_dur (duration_of_numbers (60) (0) (0)) (duration_of_numbers (0) (4) (0)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=998; start_column=10; - end_line=998; end_column=29; + start_line=998; start_column=12; + end_line=998; end_column=31; law_headings=["Date d'ouverture des droits à la retraite"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) @@ -2761,16 +2793,16 @@ let ouverture_droits_retraite (ouverture_droits_retraite_in: OuvertureDroitsRetr "Livre I : Généralités - Dispositions communes à tout ou partie des régimes de base"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((year_of_date date_naissance_assure_) = + (o_eq (o_getYear date_naissance_assure_) (integer_of_string "1952")))) (fun (_: unit) -> - (duration_of_numbers (60) (0) (0)) +^ + o_add_dur_dur (duration_of_numbers (60) (0) (0)) (duration_of_numbers (0) (9) (0)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=998; start_column=10; - end_line=998; end_column=29; + start_line=998; start_column=12; + end_line=998; end_column=31; law_headings=["Date d'ouverture des droits à la retraite"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) @@ -2787,16 +2819,16 @@ let ouverture_droits_retraite (ouverture_droits_retraite_in: OuvertureDroitsRetr "Livre I : Généralités - Dispositions communes à tout ou partie des régimes de base"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((year_of_date date_naissance_assure_) = + (o_eq (o_getYear date_naissance_assure_) (integer_of_string "1953")))) (fun (_: unit) -> - (duration_of_numbers (61) (0) (0)) +^ + o_add_dur_dur (duration_of_numbers (61) (0) (0)) (duration_of_numbers (0) (2) (0)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=998; start_column=10; - end_line=998; end_column=29; + start_line=998; start_column=12; + end_line=998; end_column=31; law_headings=["Date d'ouverture des droits à la retraite"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) @@ -2813,16 +2845,16 @@ let ouverture_droits_retraite (ouverture_droits_retraite_in: OuvertureDroitsRetr "Livre I : Généralités - Dispositions communes à tout ou partie des régimes de base"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((year_of_date date_naissance_assure_) = + (o_eq (o_getYear date_naissance_assure_) (integer_of_string "1954")))) (fun (_: unit) -> - (duration_of_numbers (61) (0) (0)) +^ + o_add_dur_dur (duration_of_numbers (61) (0) (0)) (duration_of_numbers (0) (7) (0))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=998; start_column=10; end_line=998; end_column=29; + start_line=998; start_column=12; end_line=998; end_column=31; law_headings=["Date d'ouverture des droits à la retraite"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -2847,7 +2879,7 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2284; start_column=14; end_line=2284; end_column=36; + start_line=2345; start_column=14; end_line=2345; end_column=36; law_headings=["Article R824-3"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -2905,8 +2937,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2252; start_column=14; - end_line=2252; end_column=36; + start_line=2313; start_column=14; + end_line=2313; end_column=36; law_headings=["Article R824-2"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -2921,8 +2953,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn (fun (_: unit) -> depense_logement_))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2156; start_column=14; - end_line=2156; end_column=36; + start_line=2217; start_column=14; + end_line=2217; end_column=36; law_headings=["Article R824-1"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -2963,8 +2995,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2165; start_column=14; - end_line=2165; end_column=36; + start_line=2226; start_column=14; + end_line=2226; end_column=36; law_headings=["Article R824-1"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -2985,7 +3017,7 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn (DepenseLogement.Mensualite mensualite_) | DepenseLogement.Loyer montant_loyer_ -> (DepenseLogement.Loyer - (montant_loyer_ -$ montant_apl_)))); + (o_sub_mon_mon montant_loyer_ montant_apl_)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -2996,8 +3028,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2261; start_column=14; - end_line=2261; end_column=36; + start_line=2322; start_column=14; + end_line=2322; end_column=36; law_headings=["Article R824-2"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3014,11 +3046,12 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn with | DepenseLogement.TotalAnnuelEcheances total_echeances_ -> (DepenseLogement.TotalAnnuelEcheances - (total_echeances_ -$ - (montant_apl_ *$ (decimal_of_string "12.")))) + (o_sub_mon_mon total_echeances_ + (o_mult_mon_rat montant_apl_ + (decimal_of_string "12.")))) | DepenseLogement.Mensualite mensualite_ -> (DepenseLogement.Mensualite - (mensualite_ -$ montant_apl_)) + (o_sub_mon_mon mensualite_ montant_apl_)) | DepenseLogement.Loyer loyer_ -> (DepenseLogement.Loyer loyer_)))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) @@ -3049,8 +3082,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2126; start_column=20; - end_line=2126; end_column=55; + start_line=2187; start_column=20; + end_line=2187; end_column=55; law_headings=["Article R824-1"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3058,10 +3091,11 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - ((match mode_occupation_impaye_ - with - | ModeOccupationImpaye.ImpayeLoyer _ -> true - | ModeOccupationImpaye.ImpayePret _ -> false) && + (o_and + (match mode_occupation_impaye_ + with + | ModeOccupationImpaye.ImpayeLoyer _ -> true + | ModeOccupationImpaye.ImpayePret _ -> false) (match aide_versee_ with | VersementA.Bailleur _ -> false @@ -3075,7 +3109,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn | DepenseLogement.Mensualite _ -> (money_of_cents_string "0") | DepenseLogement.Loyer loyer_brut_ -> - ((loyer_brut_ +$ montant_charges_) *$ + (o_mult_mon_rat + (o_add_mon_mon loyer_brut_ montant_charges_) (decimal_of_string "2.")))); (fun (_: unit) -> handle_default @@ -3087,8 +3122,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2142; start_column=20; - end_line=2142; end_column=51; + start_line=2203; start_column=20; + end_line=2203; end_column=51; law_headings=["Article R824-1"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3096,10 +3131,11 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - ((match mode_occupation_impaye_ - with - | ModeOccupationImpaye.ImpayeLoyer _ -> true - | ModeOccupationImpaye.ImpayePret _ -> false) && + (o_and + (match mode_occupation_impaye_ + with + | ModeOccupationImpaye.ImpayeLoyer _ -> true + | ModeOccupationImpaye.ImpayePret _ -> false) (match aide_versee_ with | VersementA.Bailleur _ -> true @@ -3113,7 +3149,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn | DepenseLogement.Mensualite _ -> (money_of_cents_string "0") | DepenseLogement.Loyer loyer_net_ -> - ((loyer_net_ +$ montant_charges_) *$ + (o_mult_mon_rat + (o_add_mon_mon loyer_net_ montant_charges_) (decimal_of_string "2.")))); (fun (_: unit) -> handle_default @@ -3125,8 +3162,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2208; start_column=7; - end_line=2208; end_column=42; + start_line=2269; start_column=7; + end_line=2269; end_column=42; law_headings=["Article R824-2"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3134,10 +3171,11 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - ((match mode_occupation_impaye_ - with - | ModeOccupationImpaye.ImpayeLoyer _ -> false - | ModeOccupationImpaye.ImpayePret _ -> true) && + (o_and + (match mode_occupation_impaye_ + with + | ModeOccupationImpaye.ImpayeLoyer _ -> false + | ModeOccupationImpaye.ImpayePret _ -> true) (match aide_versee_ with | VersementA.Bailleur _ -> false @@ -3147,11 +3185,12 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn match depense_logement_brute_ with | DepenseLogement.TotalAnnuelEcheances echeance_pret_brute_ -> - (echeance_pret_brute_ *$ - ((decimal_of_string "1.") /& + (o_mult_mon_rat echeance_pret_brute_ + (o_div_rat_rat (decimal_of_string "1.") (decimal_of_string "6."))) | DepenseLogement.Mensualite mensualite_brute_ -> - (mensualite_brute_ *$ (decimal_of_string "2.")) + (o_mult_mon_rat mensualite_brute_ + (decimal_of_string "2.")) | DepenseLogement.Loyer _ -> (money_of_cents_string "0"))); (fun (_: unit) -> handle_default @@ -3163,8 +3202,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2236; start_column=7; - end_line=2236; end_column=51; + start_line=2297; start_column=7; + end_line=2297; end_column=51; law_headings=["Article R824-2"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3172,10 +3211,11 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - ((match mode_occupation_impaye_ - with - | ModeOccupationImpaye.ImpayeLoyer _ -> false - | ModeOccupationImpaye.ImpayePret _ -> true) && + (o_and + (match mode_occupation_impaye_ + with + | ModeOccupationImpaye.ImpayeLoyer _ -> false + | ModeOccupationImpaye.ImpayePret _ -> true) (match aide_versee_ with | VersementA.Bailleur _ -> false @@ -3185,11 +3225,12 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn match depense_logement_nette_ with | DepenseLogement.TotalAnnuelEcheances echeance_pret_nette_ -> - (echeance_pret_nette_ *$ - ((decimal_of_string "1.") /& + (o_mult_mon_rat echeance_pret_nette_ + (o_div_rat_rat (decimal_of_string "1.") (decimal_of_string "6."))) | DepenseLogement.Mensualite mensualite_nette_ -> - (mensualite_nette_ *$ (decimal_of_string "2.")) + (o_mult_mon_rat mensualite_nette_ + (decimal_of_string "2.")) | DepenseLogement.Loyer _ -> (money_of_cents_string "0")))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with @@ -3204,31 +3245,31 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1018; start_column=10; end_line=1018; end_column=24; + start_line=1018; start_column=12; end_line=1018; end_column=26; law_headings=["Quantification des impayés de dépense de logement"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1018; start_column=10; - end_line=1018; end_column=24; + start_line=1018; start_column=12; + end_line=1018; end_column=26; law_headings=["Quantification des impayés de dépense de logement"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1018; start_column=10; - end_line=1018; end_column=24; + start_line=1018; start_column=12; + end_line=1018; end_column=26; law_headings=["Quantification des impayés de dépense de logement"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2184; start_column=14; - end_line=2184; end_column=28; + start_line=2245; start_column=14; + end_line=2245; end_column=28; law_headings=["Article R824-2"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3242,13 +3283,13 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn | ModeOccupationImpaye.ImpayePret _ -> true))) (fun (_: unit) -> if - (montant_dette_ >=$ + (o_gte_mon_mon montant_dette_ seuil_impaye_depense_de_logement_) then montant_dette_ else (money_of_cents_string "0")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2121; start_column=14; - end_line=2121; end_column=28; + start_line=2182; start_column=14; + end_line=2182; end_column=28; law_headings=["Article R824-1"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3262,13 +3303,14 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn | ModeOccupationImpaye.ImpayePret _ -> false))) (fun (_: unit) -> if - (montant_dette_ >=$ seuil_impaye_depense_de_logement_) - then montant_dette_ else (money_of_cents_string "0")))|]) + (o_gte_mon_mon montant_dette_ + seuil_impaye_depense_de_logement_) then + montant_dette_ else (money_of_cents_string "0")))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1018; start_column=10; end_line=1018; end_column=24; + start_line=1018; start_column=12; end_line=1018; end_column=26; law_headings=["Quantification des impayés de dépense de logement"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -3281,73 +3323,85 @@ let base_mensuelle_allocations_familiales (base_mensuelle_allocations_familiales try (handle_default {filename = "examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; start_line=28; start_column=5; - end_line=29; end_column=34; + end_line=29; end_column=33; law_headings=["Instruction ministérielle N°DSS/SD2B/2019/65 du 25 mars 2019 relative à la revalorisation au 1er avril 2019 des prestations familiales servies en métropole"; "Montant de la base mensuelle des allocations familiales"]} - ((date_courante_ >=@ (date_of_numbers (2019) (4) (1))) && - (date_courante_ <@ (date_of_numbers (2020) (4) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (4) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2020) (4) (1)))))) (fun (_: unit) -> money_of_cents_string "41316")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; start_line=48; start_column=5; - end_line=49; end_column=34; + end_line=49; end_column=33; law_headings=["Instruction interministérielle no DSS/SD2B/2020/33 du 18 février 2020 relative à la revalorisation au 1er avril 2020 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"; "Montant de la base mensuelle des allocations familiales"]} - ((date_courante_ >=@ (date_of_numbers (2020) (4) (1))) && - (date_courante_ <@ (date_of_numbers (2021) (4) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (4) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (4) (1)))))) (fun (_: unit) -> money_of_cents_string "41440")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; start_line=64; start_column=5; - end_line=65; end_column=34; + end_line=65; end_column=33; law_headings=["Instruction interministérielle n°DSS/2B/2021/65 du 19 mars 2021 relative à la revalorisation au 1er avril 2021 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"; "Montant de la base mensuelle des allocations familiales"]} - ((date_courante_ >=@ (date_of_numbers (2021) (4) (1))) && - (date_courante_ <@ (date_of_numbers (2022) (4) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (4) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (4) (1)))))) (fun (_: unit) -> money_of_cents_string "41481")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; start_line=82; start_column=5; - end_line=83; end_column=34; + end_line=83; end_column=33; law_headings=["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"; "Montant de la base mensuelle des allocations familiales"]} - ((date_courante_ >=@ (date_of_numbers (2022) (4) (1))) && - (date_courante_ <@ (date_of_numbers (2023) (4) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (4) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2023) (4) (1)))))) (fun (_: unit) -> money_of_cents_string "42228"))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]})))) in {BaseMensuelleAllocationsFamiliales.montant = montant_} @@ -3359,14 +3413,14 @@ let smic (smic_in: SmicIn.t) : Smic.t = try (handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; end_line=11; end_column=22; + start_line=11; start_column=12; end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -3377,31 +3431,40 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2018-1173 du 19 décembre 2018 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2019) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2019) (12) (31))) && - ((residence_ = (Collectivite.Metropole ())) || - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = - (Collectivite.Martinique ())) || - ((residence_ = - (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) - || - ((residence_ = - (Collectivite.SaintMartin ())) - || - (residence_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2019) (12) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ (Collectivite.SaintPierreEtMiquelon ()))))))))))))) (fun (_: unit) -> money_of_cents_string "1003")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -3412,16 +3475,19 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2018-1173 du 19 décembre 2018 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2019) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2019) (12) (31))) && - (residence_ = (Collectivite.Mayotte ())))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2019) (12) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) (fun (_: unit) -> money_of_cents_string "757")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -3432,31 +3498,40 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2019-1387 du 18 décembre 2019 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2020) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2020) (12) (31))) && - ((residence_ = (Collectivite.Metropole ())) || - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = - (Collectivite.Martinique ())) || - ((residence_ = - (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) - || - ((residence_ = - (Collectivite.SaintMartin ())) - || - (residence_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2020) (12) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ (Collectivite.SaintPierreEtMiquelon ()))))))))))))) (fun (_: unit) -> money_of_cents_string "1015")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -3467,16 +3542,19 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2019-1387 du 18 décembre 2019 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2020) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2020) (12) (31))) && - (residence_ = (Collectivite.Mayotte ())))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2020) (12) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) (fun (_: unit) -> money_of_cents_string "766")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -3487,31 +3565,40 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2020-1598 du 16 décembre 2020 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2021) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2021) (12) (31))) && - ((residence_ = (Collectivite.Metropole ())) || - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = - (Collectivite.Martinique ())) || - ((residence_ = - (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) - || - ((residence_ = - (Collectivite.SaintMartin ())) - || - (residence_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2021) (12) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ (Collectivite.SaintPierreEtMiquelon ()))))))))))))) (fun (_: unit) -> money_of_cents_string "1025")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -3522,16 +3609,19 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2020-1598 du 16 décembre 2020 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2021) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2021) (12) (31))) && - (residence_ = (Collectivite.Mayotte ())))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2021) (12) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) (fun (_: unit) -> money_of_cents_string "774")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -3542,31 +3632,40 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2021-1741 du 22 décembre 2021 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2022) (1) (1))) && - ((date_courante_ <=@ (date_of_numbers (2022) (4) (30))) - && - ((residence_ = (Collectivite.Metropole ())) || - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = - (Collectivite.Martinique ())) || - ((residence_ = - (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) - || - ((residence_ = - (Collectivite.SaintMartin ())) - || - (residence_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (4) (30))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ (Collectivite.SaintPierreEtMiquelon ()))))))))))))) (fun (_: unit) -> money_of_cents_string "1057")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -3577,15 +3676,19 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2021-1741 du 22 décembre 2021 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2022) (1) (1))) && - ((date_courante_ <=@ (date_of_numbers (2022) (4) (30))) - && (residence_ = (Collectivite.Mayotte ())))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (4) (30))) + (o_eq residence_ (Collectivite.Mayotte ())))))) (fun (_: unit) -> money_of_cents_string "798")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -3596,31 +3699,40 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 2"; "Arrêté du 19 avril 2022 relatif au relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2022) (5) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2022) (12) (31))) && - ((residence_ = (Collectivite.Metropole ())) || - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = - (Collectivite.Martinique ())) || - ((residence_ = - (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) - || - ((residence_ = - (Collectivite.SaintMartin ())) - || - (residence_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (5) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ (Collectivite.SaintPierreEtMiquelon ()))))))))))))) (fun (_: unit) -> money_of_cents_string "1085")); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -3631,16 +3743,153 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 2"; "Arrêté du 19 avril 2022 relatif au relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2022) (5) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2022) (12) (31))) && - (residence_ = (Collectivite.Mayotte ())))))) - (fun (_: unit) -> money_of_cents_string "819"))|]) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (5) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) + (fun (_: unit) -> money_of_cents_string "819")); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; + start_line=11; start_column=12; + end_line=11; end_column=24; + law_headings=["Prologue"; + "Montant du salaire minimum de croissance"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; + start_line=225; start_column=5; + end_line=234; end_column=6; + law_headings=["Article 2"; + "Arrêté du 29 juillet 2022 relatif au relèvement du salaire minimum de croissance"; + "Montant du salaire minimum de croissance"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (8) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (12) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ + (Collectivite.SaintPierreEtMiquelon + ()))))))))))))) + (fun (_: unit) -> money_of_cents_string "1107")); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; + start_line=11; start_column=12; + end_line=11; end_column=24; + law_headings=["Prologue"; + "Montant du salaire minimum de croissance"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; + start_line=243; start_column=5; + end_line=245; end_column=6; + law_headings=["Article 2"; + "Arrêté du 29 juillet 2022 relatif au relèvement du salaire minimum de croissance"; + "Montant du salaire minimum de croissance"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (8) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (12) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) + (fun (_: unit) -> money_of_cents_string "835")); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; + start_line=11; start_column=12; + end_line=11; end_column=24; + law_headings=["Prologue"; + "Montant du salaire minimum de croissance"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; + start_line=265; start_column=5; + end_line=274; end_column=6; + law_headings=["Article 1"; + "Décret n° 2022-1608 du 22 décembre 2022 portant relèvement du salaire minimum de croissance"; + "Montant du salaire minimum de croissance"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2023) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2023) (12) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ + (Collectivite.SaintPierreEtMiquelon + ()))))))))))))) + (fun (_: unit) -> money_of_cents_string "1127")); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; + start_line=11; start_column=12; + end_line=11; end_column=24; + law_headings=["Prologue"; + "Montant du salaire minimum de croissance"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; + start_line=283; start_column=5; + end_line=285; end_column=6; + law_headings=["Article 1"; + "Décret n° 2022-1608 du 22 décembre 2022 portant relèvement du salaire minimum de croissance"; + "Montant du salaire minimum de croissance"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2023) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2023) (12) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) + (fun (_: unit) -> money_of_cents_string "851"))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; end_line=11; end_column=22; + start_line=11; start_column=12; end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]})))) in {Smic.brut_horaire = brut_horaire_} @@ -3671,7 +3920,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1844; start_column=14; end_line=1844; end_column=29; + start_line=1905; start_column=14; end_line=1905; end_column=29; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -3748,8 +3997,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ["CalculAidePersonnaliséeLogementLocatif"; "contributions_sociales"; "ContributionsSocialesAidesPersonnelleLogement"] contributions_sociales_aides_personnelle_logement) - {ContributionsSocialesAidesPersonnelleLogementIn.date_courante_in = - contributions_sociales_dot_date_courante_})) in + ({ContributionsSocialesAidesPersonnelleLogementIn.date_courante_in = + contributions_sociales_dot_date_courante_}))) in let contributions_sociales_dot_montant_: money -> money = result_.ContributionsSocialesAidesPersonnelleLogement.montant in let taux_composition_familiale_: decimal = (log_variable_definition ["CalculAidePersonnaliséeLogementLocatif"; "taux_composition_familiale"] @@ -3757,7 +4006,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=564; start_column=10; end_line=564; end_column=36; + start_line=564; start_column=12; end_line=564; end_column=38; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -3765,8 +4014,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=564; start_column=10; - end_line=564; end_column=36; + start_line=564; start_column=12; + end_line=564; end_column=38; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -3774,8 +4023,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=564; start_column=10; - end_line=564; end_column=36; + start_line=564; start_column=12; + end_line=564; end_column=38; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -3783,8 +4032,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=564; start_column=10; - end_line=564; end_column=36; + start_line=564; start_column=12; + end_line=564; end_column=38; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -3792,19 +4041,20 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=944; start_column=14; - end_line=944; end_column=40; + start_line=1069; start_column=14; + end_line=1069; end_column=40; law_headings=["Article 14"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2021) (10) (1)))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with @@ -3813,61 +4063,65 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme | SituationFamilialeCalculAPL.Couple _ -> (decimal_of_string "0.0315")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (decimal_of_string "0.027") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (decimal_of_string "0.0238") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "3")) then (decimal_of_string "0.0201") else ( if - (nombre_personnes_a_charge_ - = (integer_of_string - "4")) then + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then (decimal_of_string "0.0185") else ( if - (nombre_personnes_a_charge_ - = (integer_of_string + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) then (decimal_of_string "0.0179") else ( if - (nombre_personnes_a_charge_ - = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "6")) then (decimal_of_string "0.0173") else - ((decimal_of_string "0.0173") - -& - ((decimal_of_string "0.0006") - *& - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + (o_sub_rat_rat + (decimal_of_string "0.0173") + (o_mult_rat_rat + (decimal_of_string "0.0006") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "6")))))))))))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=220; start_column=14; - end_line=220; end_column=40; + start_line=273; start_column=14; + end_line=273; end_column=40; law_headings=["Article 14"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with @@ -3876,39 +4130,40 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme | SituationFamilialeCalculAPL.Couple _ -> (decimal_of_string "0.0315")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (decimal_of_string "0.027") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (decimal_of_string "0.0238") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (decimal_of_string "0.0201") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (decimal_of_string "0.0185") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "5")) then (decimal_of_string "0.0179") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "6")) then (decimal_of_string "0.0173") else - ((decimal_of_string "0.0173") - -& - ((decimal_of_string "0.0006") - *& - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + (o_sub_rat_rat + (decimal_of_string "0.0173") + (o_mult_rat_rat + (decimal_of_string "0.0006") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "6")))))))))))))|]) (fun (_: unit) -> (log_decision_taken @@ -3918,11 +4173,12 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 14"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -3930,38 +4186,41 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme | SituationFamilialeCalculAPL.Couple _ -> (decimal_of_string "0.0315")) else ( if - (nombre_personnes_a_charge_ = (integer_of_string + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (decimal_of_string "0.027") else ( if - (nombre_personnes_a_charge_ = (integer_of_string - "2")) then (decimal_of_string "0.0238") else + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (decimal_of_string "0.0238") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (decimal_of_string "0.0201") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (decimal_of_string "0.0185") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "5")) then (decimal_of_string "0.0179") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "6")) then (decimal_of_string "0.0173") else - ((decimal_of_string "0.0173") -& - ((decimal_of_string "0.0006") *& - (decimal_of_integer - (nombre_personnes_a_charge_ - -! (integer_of_string - "6")))))))))))))|]) + (o_sub_rat_rat + (decimal_of_string "0.0173") + (o_mult_rat_rat + (decimal_of_string "0.0006") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string "6")))))))))))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=564; start_column=10; end_line=564; end_column=36; + start_line=564; start_column=12; end_line=564; end_column=38; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -3993,11 +4252,74 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 15"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2023) (1) (1))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "494900") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "709000")) else + ( if + (o_eq nombre_personnes_a_charge_ (integer_of_string + "1")) then (money_of_cents_string "845600") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "864600") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "897700") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "931100") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "5")) then + (money_of_cents_string "964200") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "6")) then + (money_of_cents_string "997500") else + (o_add_mon_mon (money_of_cents_string + "997500") + (o_mult_mon_rat + (money_of_cents_string "32800") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string "6"))))))))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=558; start_column=11; + end_line=558; end_column=41; + law_headings=["Secteur locatif"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/archives.catala_fr"; + start_line=27; start_column=14; + end_line=27; end_column=44; + law_headings=["Article 15"; + "Articles valables du 1er juillet 2022 au 31 décembre 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (12) (31)))))) + (fun (_: unit) -> + if + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -4005,35 +4327,36 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "697700")) else ( if - (nombre_personnes_a_charge_ = (integer_of_string + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "832200") else ( if - (nombre_personnes_a_charge_ = (integer_of_string - "2")) then (money_of_cents_string "850900") - else + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "850900") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "883400") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (money_of_cents_string "916300") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string "948800") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "6")) then (money_of_cents_string "981600") else - ((money_of_cents_string "981600") +$ - ((money_of_cents_string "32300") - *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! (integer_of_string - "6"))))))))))))); + (o_add_mon_mon (money_of_cents_string + "981600") + (o_mult_mon_rat + (money_of_cents_string "32300") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string "6"))))))))))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -4045,17 +4368,20 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1313; start_column=14; - end_line=1313; end_column=44; + start_line=822; start_column=14; + end_line=822; end_column=44; law_headings=["Article 15"; - "Articles valables du 1er janvier 2022 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ (date_of_numbers (2022) (1) (1))) && - (date_courante_ <@ (date_of_numbers (2022) (7) (1)))))) + "Articles valables du 1er janvier 2022 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (1) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -4063,35 +4389,36 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "670900")) else ( if - (nombre_personnes_a_charge_ = (integer_of_string + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "800200") else ( if - (nombre_personnes_a_charge_ = (integer_of_string - "2")) then (money_of_cents_string "819200") - else + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "819200") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "849500") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (money_of_cents_string "881100") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string "912400") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "6")) then (money_of_cents_string "943900") else - ((money_of_cents_string "943900") +$ - ((money_of_cents_string "31100") - *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! (integer_of_string - "6"))))))))))))); + (o_add_mon_mon (money_of_cents_string + "943900") + (o_mult_mon_rat + (money_of_cents_string "31100") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string "6"))))))))))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -4103,18 +4430,20 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1367; start_column=14; - end_line=1367; end_column=44; + start_line=1418; start_column=14; + end_line=1418; end_column=44; law_headings=["Article 15"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er janvier 2020 au 1er janvier 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ <@ (date_of_numbers (2022) (1) (1))) && - (date_courante_ >=@ (date_of_numbers (2020) (1) (1)))))) + "Articles valables du 1er janvier 2020 au 31 décembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (1) (1))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1)))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -4122,35 +4451,36 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "657200")) else ( if - (nombre_personnes_a_charge_ = (integer_of_string + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "783900") else ( if - (nombre_personnes_a_charge_ = (integer_of_string - "2")) then (money_of_cents_string "801500") - else + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "801500") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "832200") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (money_of_cents_string "863100") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string "893800") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "6")) then (money_of_cents_string "924600") else - ((money_of_cents_string "924600") +$ - ((money_of_cents_string "30500") - *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! (integer_of_string - "6")))))))))))))|]) + (o_add_mon_mon (money_of_cents_string + "924600") + (o_mult_mon_rat + (money_of_cents_string "30500") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string "6")))))))))))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided @@ -4192,18 +4522,19 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=306; start_column=14; - end_line=306; end_column=29; + start_line=359; start_column=14; + end_line=359; end_column=29; law_headings=["Article 14"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with @@ -4211,10 +4542,12 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (money_of_cents_string "25978") | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "31797")) else - ((money_of_cents_string "35780") +$ - ((money_of_cents_string "5208") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "35780") + (o_mult_mon_rat (money_of_cents_string + "5208") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1")))))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; @@ -4223,21 +4556,22 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 14"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> (money_of_cents_string "25978") | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "31797")) else - ((money_of_cents_string "35780") +$ - ((money_of_cents_string "5208") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "35780") + (o_mult_mon_rat (money_of_cents_string "5208") + (o_torat_int + (o_sub_int_int nombre_personnes_a_charge_ (integer_of_string "1"))))))); (fun (_: unit) -> handle_default @@ -4250,29 +4584,31 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1027; start_column=14; - end_line=1027; end_column=29; + start_line=1152; start_column=14; + end_line=1152; end_column=29; law_headings=["Article 14"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ (date_of_numbers (2020) (10) (1))) - && - (date_courante_ <@ (date_of_numbers (2021) (10) (1)))))) + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1)))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> (money_of_cents_string "25869") | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "31664")) else - ((money_of_cents_string "35630") +$ - ((money_of_cents_string "5186") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "35630") + (o_mult_mon_rat (money_of_cents_string "5186") + (o_torat_int + (o_sub_int_int nombre_personnes_a_charge_ (integer_of_string "1")))))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with @@ -4324,7 +4660,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; end_line=562; end_column=33; + start_line=562; start_column=12; end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4332,8 +4668,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4341,8 +4677,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4350,21 +4686,24 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=527; start_column=5; - end_line=528; end_column=34; + start_line=529; start_column=5; + end_line=530; end_column=34; law_headings=["Article 16"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && - colocation_) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - true - | SituationFamilialeCalculAPL.Couple _ -> - false) && - (nombre_personnes_a_charge_ = + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + colocation_) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + true + | SituationFamilialeCalculAPL.Couple _ -> + false) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -4378,8 +4717,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4387,21 +4726,24 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=536; start_column=5; - end_line=537; end_column=34; + start_line=538; start_column=5; + end_line=539; end_column=34; law_headings=["Article 16"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && - colocation_) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - false - | SituationFamilialeCalculAPL.Couple _ -> - true) && - (nombre_personnes_a_charge_ = + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + colocation_) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + false + | SituationFamilialeCalculAPL.Couple _ -> + true) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -4415,8 +4757,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4424,42 +4766,53 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=545; start_column=5; - end_line=545; end_column=35; + start_line=547; start_column=5; + end_line=547; end_column=35; law_headings=["Article 16"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && - colocation_) && - (nombre_personnes_a_charge_ >=! + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + colocation_) + (o_gte_int_int nombre_personnes_a_charge_ (integer_of_string "1"))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> - ((money_of_cents_string "31539") +$ - ((money_of_cents_string "4576") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "31539") + (o_mult_mon_rat (money_of_cents_string + "4576") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone2 _ -> - ((money_of_cents_string "27774") +$ - ((money_of_cents_string "4043") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "27774") + (o_mult_mon_rat (money_of_cents_string + "4043") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone3 _ -> - ((money_of_cents_string "25689") +$ - ((money_of_cents_string "3682") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "25689") + (o_mult_mon_rat (money_of_cents_string + "3682") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4467,23 +4820,27 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=353; start_column=5; - end_line=354; end_column=34; + start_line=406; start_column=5; + end_line=407; end_column=34; law_headings=["Article 16"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - ((date_courante_ <@ - (date_of_numbers (2022) (7) (1))) && - colocation_)) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - true - | SituationFamilialeCalculAPL.Couple _ -> - false) && - (nombre_personnes_a_charge_ = + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + colocation_)) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + true + | SituationFamilialeCalculAPL.Couple _ -> + false) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -4497,8 +4854,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4506,23 +4863,27 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=362; start_column=5; - end_line=363; end_column=34; + start_line=415; start_column=5; + end_line=416; end_column=34; law_headings=["Article 16"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - ((date_courante_ <@ - (date_of_numbers (2022) (7) (1))) && - colocation_)) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - false - | SituationFamilialeCalculAPL.Couple _ -> - true) && - (nombre_personnes_a_charge_ = + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + colocation_)) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + false + | SituationFamilialeCalculAPL.Couple _ -> + true) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -4536,8 +4897,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4545,44 +4906,56 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=371; start_column=5; - end_line=371; end_column=35; + start_line=424; start_column=5; + end_line=424; end_column=35; law_headings=["Article 16"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - ((date_courante_ <@ - (date_of_numbers (2022) (7) (1))) && - colocation_)) && - (nombre_personnes_a_charge_ >=! + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + colocation_)) + (o_gte_int_int nombre_personnes_a_charge_ (integer_of_string "1"))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> - ((money_of_cents_string "30473") +$ - ((money_of_cents_string "4421") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "30473") + (o_mult_mon_rat (money_of_cents_string + "4421") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone2 _ -> - ((money_of_cents_string "26835") +$ - ((money_of_cents_string "3906") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "26835") + (o_mult_mon_rat (money_of_cents_string + "3906") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone3 _ -> - ((money_of_cents_string "24821") +$ - ((money_of_cents_string "3557") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "24821") + (o_mult_mon_rat (money_of_cents_string + "3557") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4590,24 +4963,28 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1072; start_column=5; - end_line=1073; end_column=34; + start_line=1197; start_column=5; + end_line=1198; end_column=34; law_headings=["Article 16"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - (((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - ((date_courante_ >=@ - (date_of_numbers (2020) (10) (1))) && - colocation_)) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - true - | SituationFamilialeCalculAPL.Couple _ -> - false) && - (nombre_personnes_a_charge_ = + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + colocation_)) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + true + | SituationFamilialeCalculAPL.Couple _ -> + false) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -4621,8 +4998,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4630,24 +5007,28 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1081; start_column=5; - end_line=1082; end_column=34; + start_line=1206; start_column=5; + end_line=1207; end_column=34; law_headings=["Article 16"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - (((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - ((date_courante_ >=@ - (date_of_numbers (2020) (10) (1))) && - colocation_)) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - false - | SituationFamilialeCalculAPL.Couple _ -> - true) && - (nombre_personnes_a_charge_ = + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + colocation_)) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + false + | SituationFamilialeCalculAPL.Couple _ -> + true) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -4661,8 +5042,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4670,46 +5051,58 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1090; start_column=5; - end_line=1090; end_column=35; + start_line=1215; start_column=5; + end_line=1215; end_column=35; law_headings=["Article 16"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - (((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - ((date_courante_ >=@ - (date_of_numbers (2020) (10) (1))) && - colocation_)) && - (nombre_personnes_a_charge_ >=! + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + colocation_)) + (o_gte_int_int nombre_personnes_a_charge_ (integer_of_string "1"))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> - ((money_of_cents_string "30345") +$ - ((money_of_cents_string "4403") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "30345") + (o_mult_mon_rat (money_of_cents_string + "4403") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone2 _ -> - ((money_of_cents_string "26723") +$ - ((money_of_cents_string "3890") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "26723") + (o_mult_mon_rat (money_of_cents_string + "3890") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone3 _ -> - ((money_of_cents_string "24717") +$ - ((money_of_cents_string "3542") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "24717") + (o_mult_mon_rat (money_of_cents_string + "3542") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1")))))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4717,8 +5110,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4726,8 +5119,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4740,9 +5133,11 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 8"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && - logement_est_chambre_) && + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + logement_est_chambre_) agees_ou_handicap_adultes_hebergees_onereux_particuliers_))) (fun (_: unit) -> match zone_ @@ -4756,8 +5151,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4765,17 +5160,19 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=126; start_column=5; - end_line=126; end_column=61; + start_line=179; start_column=5; + end_line=179; end_column=61; law_headings=["Article 8"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) - && - ((date_courante_ <@ - (date_of_numbers (2022) (7) (1))) - && logement_est_chambre_)) && + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + logement_est_chambre_)) agees_ou_handicap_adultes_hebergees_onereux_particuliers_))) (fun (_: unit) -> match zone_ @@ -4789,8 +5186,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4798,18 +5195,20 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=850; start_column=5; - end_line=850; end_column=61; + start_line=975; start_column=5; + end_line=975; end_column=61; law_headings=["Article 8"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - (((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) - && - ((date_courante_ >=@ - (date_of_numbers (2020) (10) (1))) - && logement_est_chambre_)) && + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + logement_est_chambre_)) agees_ou_handicap_adultes_hebergees_onereux_particuliers_))) (fun (_: unit) -> match zone_ @@ -4826,8 +5225,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4835,8 +5234,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4849,8 +5248,9 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 8"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) logement_est_chambre_))) (fun (_: unit) -> match zone_ @@ -4864,8 +5264,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4873,15 +5273,17 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=119; start_column=14; - end_line=119; end_column=37; + start_line=172; start_column=14; + end_line=172; end_column=37; law_headings=["Article 8"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - ((date_courante_ <@ - (date_of_numbers (2022) (7) (1))) && + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) logement_est_chambre_)))) (fun (_: unit) -> match zone_ @@ -4895,8 +5297,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4904,16 +5306,18 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=843; start_column=14; - end_line=843; end_column=37; + start_line=968; start_column=14; + end_line=968; end_column=37; law_headings=["Article 8"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - ((date_courante_ >=@ - (date_of_numbers (2020) (10) (1))) && + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) logement_est_chambre_)))) (fun (_: unit) -> match zone_ @@ -4930,7 +5334,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; end_line=562; end_column=33; + start_line=562; start_column=12; end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4938,8 +5342,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4952,15 +5356,17 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 7"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - true - | SituationFamilialeCalculAPL.Couple _ -> false) - && - (nombre_personnes_a_charge_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + true + | SituationFamilialeCalculAPL.Couple _ -> + false) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -4974,8 +5380,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -4988,15 +5394,17 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 7"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - false - | SituationFamilialeCalculAPL.Couple _ -> true) - && - (nombre_personnes_a_charge_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + false + | SituationFamilialeCalculAPL.Couple _ -> + true) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -5010,8 +5418,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5024,36 +5432,43 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 7"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && - (nombre_personnes_a_charge_ >=! + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) + (o_gte_int_int nombre_personnes_a_charge_ (integer_of_string "1"))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> - ((money_of_cents_string "42052") +$ - ((money_of_cents_string "6101") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "42052") + (o_mult_mon_rat (money_of_cents_string + "6101") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone2 _ -> - ((money_of_cents_string "37032") +$ - ((money_of_cents_string "5390") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "37032") + (o_mult_mon_rat (money_of_cents_string + "5390") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone3 _ -> - ((money_of_cents_string "34252") +$ - ((money_of_cents_string "4909") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "34252") + (o_mult_mon_rat (money_of_cents_string + "4909") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5061,22 +5476,25 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=34; start_column=5; - end_line=35; end_column=34; + start_line=87; start_column=5; + end_line=88; end_column=34; law_headings=["Article 7"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ - (date_of_numbers (2022) (7) (1)))) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - true - | SituationFamilialeCalculAPL.Couple _ -> false) - && - (nombre_personnes_a_charge_ = + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + true + | SituationFamilialeCalculAPL.Couple _ -> + false) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -5090,8 +5508,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5099,22 +5517,25 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=44; start_column=5; - end_line=45; end_column=34; + start_line=97; start_column=5; + end_line=98; end_column=34; law_headings=["Article 7"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ - (date_of_numbers (2022) (7) (1)))) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - false - | SituationFamilialeCalculAPL.Couple _ -> true) - && - (nombre_personnes_a_charge_ = + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + false + | SituationFamilialeCalculAPL.Couple _ -> + true) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -5128,8 +5549,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5137,43 +5558,51 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=54; start_column=5; - end_line=54; end_column=35; + start_line=107; start_column=5; + end_line=107; end_column=35; law_headings=["Article 7"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ - (date_of_numbers (2022) (7) (1)))) && - (nombre_personnes_a_charge_ >=! + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))) + (o_gte_int_int nombre_personnes_a_charge_ (integer_of_string "1"))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> - ((money_of_cents_string "40630") +$ - ((money_of_cents_string "5895") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "40630") + (o_mult_mon_rat (money_of_cents_string + "5895") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone2 _ -> - ((money_of_cents_string "35780") +$ - ((money_of_cents_string "5208") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "35780") + (o_mult_mon_rat (money_of_cents_string + "5208") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone3 _ -> - ((money_of_cents_string "33094") +$ - ((money_of_cents_string "4743") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "33094") + (o_mult_mon_rat (money_of_cents_string + "4743") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5181,23 +5610,26 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=759; start_column=5; - end_line=760; end_column=34; + start_line=884; start_column=5; + end_line=885; end_column=34; law_headings=["Article 7"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - (((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ >=@ - (date_of_numbers (2020) (10) (1)))) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - true - | SituationFamilialeCalculAPL.Couple _ -> false) - && - (nombre_personnes_a_charge_ = + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1)))) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + true + | SituationFamilialeCalculAPL.Couple _ -> + false) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -5211,8 +5643,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5220,23 +5652,26 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=769; start_column=5; - end_line=770; end_column=34; + start_line=894; start_column=5; + end_line=895; end_column=34; law_headings=["Article 7"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - (((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ >=@ - (date_of_numbers (2020) (10) (1)))) && - ((match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - false - | SituationFamilialeCalculAPL.Couple _ -> true) - && - (nombre_personnes_a_charge_ = + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1)))) + (o_and + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + false + | SituationFamilialeCalculAPL.Couple _ -> + true) + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")))))) (fun (_: unit) -> match zone_ @@ -5250,8 +5685,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; - end_line=562; end_column=33; + start_line=562; start_column=12; + end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5259,44 +5694,52 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=779; start_column=5; - end_line=779; end_column=35; + start_line=904; start_column=5; + end_line=904; end_column=35; law_headings=["Article 7"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - (((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ >=@ - (date_of_numbers (2020) (10) (1)))) && - (nombre_personnes_a_charge_ >=! + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1)))) + (o_gte_int_int nombre_personnes_a_charge_ (integer_of_string "1"))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> - ((money_of_cents_string "40460") +$ - ((money_of_cents_string "5870") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "40460") + (o_mult_mon_rat (money_of_cents_string + "5870") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone2 _ -> - ((money_of_cents_string "35630") +$ - ((money_of_cents_string "5186") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "35630") + (o_mult_mon_rat (money_of_cents_string + "5186") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1"))))) | ZoneDHabitation.Zone3 _ -> - ((money_of_cents_string "32956") +$ - ((money_of_cents_string "4723") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string "32956") + (o_mult_mon_rat (money_of_cents_string + "4723") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "1")))))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=562; start_column=10; end_line=562; end_column=33; + start_line=562; start_column=12; end_line=562; end_column=35; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5307,7 +5750,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=561; start_column=10; end_line=561; end_column=45; + start_line=561; start_column=12; end_line=561; end_column=47; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5315,8 +5758,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=561; start_column=10; - end_line=561; end_column=45; + start_line=561; start_column=12; + end_line=561; end_column=47; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5324,8 +5767,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=561; start_column=10; - end_line=561; end_column=45; + start_line=561; start_column=12; + end_line=561; end_column=47; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5333,29 +5776,30 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=570; start_column=29; - end_line=570; end_column=64; + start_line=572; start_column=29; + end_line=572; end_column=64; law_headings=["Article 16"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) colocation_))) (fun (_: unit) -> - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "2805") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "5612")) +$ - ((money_of_cents_string "1272") *$ - (decimal_of_integer - nombre_personnes_a_charge_)))); + o_add_mon_mon + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "2805") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "5612")) + (o_mult_mon_rat (money_of_cents_string "1272") + (o_torat_int nombre_personnes_a_charge_)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=561; start_column=10; - end_line=561; end_column=45; + start_line=561; start_column=12; + end_line=561; end_column=47; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5363,31 +5807,33 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=397; start_column=29; - end_line=397; end_column=64; + start_line=450; start_column=29; + end_line=450; end_column=64; law_headings=["Article 16"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - ((date_courante_ <@ - (date_of_numbers (2022) (7) (1))) && + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) colocation_)))) (fun (_: unit) -> - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "2710") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "5422")) +$ - ((money_of_cents_string "1229") *$ - (decimal_of_integer - nombre_personnes_a_charge_)))); + o_add_mon_mon + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "2710") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "5422")) + (o_mult_mon_rat (money_of_cents_string "1229") + (o_torat_int nombre_personnes_a_charge_)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=561; start_column=10; - end_line=561; end_column=45; + start_line=561; start_column=12; + end_line=561; end_column=47; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5395,33 +5841,35 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1116; start_column=29; - end_line=1116; end_column=64; + start_line=1241; start_column=29; + end_line=1241; end_column=64; law_headings=["Article 16"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - ((date_courante_ >=@ - (date_of_numbers (2020) (10) (1))) && + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) colocation_)))) (fun (_: unit) -> - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "2699") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "5399")) +$ - ((money_of_cents_string "1224") *$ - (decimal_of_integer - nombre_personnes_a_charge_))))|]) + o_add_mon_mon + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "2699") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "5399")) + (o_mult_mon_rat (money_of_cents_string "1224") + (o_torat_int nombre_personnes_a_charge_))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) (fun (_: unit) -> true) (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=561; start_column=10; end_line=561; end_column=45; + start_line=561; start_column=12; end_line=561; end_column=47; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5429,8 +5877,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=561; start_column=10; - end_line=561; end_column=45; + start_line=561; start_column=12; + end_line=561; end_column=47; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5443,16 +5891,17 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 9"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> - (money_of_cents_string "5612") +$ - ((money_of_cents_string "1272") *$ - (decimal_of_integer nombre_personnes_a_charge_)))); + o_add_mon_mon (money_of_cents_string "5612") + (o_mult_mon_rat (money_of_cents_string "1272") + (o_torat_int nombre_personnes_a_charge_)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=561; start_column=10; - end_line=561; end_column=45; + start_line=561; start_column=12; + end_line=561; end_column=47; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5460,24 +5909,25 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=161; start_column=29; - end_line=161; end_column=64; + start_line=214; start_column=29; + end_line=214; end_column=64; law_headings=["Article 9"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> - (money_of_cents_string "5422") +$ - ((money_of_cents_string "1229") *$ - (decimal_of_integer nombre_personnes_a_charge_)))); + o_add_mon_mon (money_of_cents_string "5422") + (o_mult_mon_rat (money_of_cents_string "1229") + (o_torat_int nombre_personnes_a_charge_)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=561; start_column=10; - end_line=561; end_column=45; + start_line=561; start_column=12; + end_line=561; end_column=47; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5485,25 +5935,26 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=885; start_column=29; - end_line=885; end_column=64; + start_line=1010; start_column=29; + end_line=1010; end_column=64; law_headings=["Article 9"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ >=@ + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_gte_dat_dat date_courante_ (date_of_numbers (2020) (10) (1)))))) (fun (_: unit) -> - (money_of_cents_string "5399") +$ - ((money_of_cents_string "1224") *$ - (decimal_of_integer nombre_personnes_a_charge_))))|]) + o_add_mon_mon (money_of_cents_string "5399") + (o_mult_mon_rat (money_of_cents_string "1224") + (o_torat_int nombre_personnes_a_charge_))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=561; start_column=10; end_line=561; end_column=45; + start_line=561; start_column=12; end_line=561; end_column=47; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5521,7 +5972,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4150; start_column=14; end_line=4150; end_column=29; + start_line=4211; start_column=14; end_line=4211; end_column=29; law_headings=["Article D842-2"; "Section 1 : Secteur locatif ordinaire"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -5532,9 +5983,9 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme true)) (fun (_: unit) -> if logement_meuble_d842_2_ then - (loyer_principal_base_ *$ - ((decimal_of_string "2.") /& (decimal_of_string "3."))) else - loyer_principal_base_)) + (o_mult_mon_rat loyer_principal_base_ + (o_div_rat_rat (decimal_of_string "2.") + (decimal_of_string "3."))) else loyer_principal_base_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -5565,11 +6016,14 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme match zone_ with | ZoneDHabitation.Zone1 _ -> - (plafond_loyer_d823_16_2_ *$ (decimal_of_string "4.")) + (o_mult_mon_rat plafond_loyer_d823_16_2_ + (decimal_of_string "4.")) | ZoneDHabitation.Zone2 _ -> - (plafond_loyer_d823_16_2_ *$ (decimal_of_string "3.1")) + (o_mult_mon_rat plafond_loyer_d823_16_2_ + (decimal_of_string "3.1")) | ZoneDHabitation.Zone3 _ -> - (plafond_loyer_d823_16_2_ *$ (decimal_of_string "3.1")))) + (o_mult_mon_rat plafond_loyer_d823_16_2_ + (decimal_of_string "3.1")))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -5600,11 +6054,14 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme match zone_ with | ZoneDHabitation.Zone1 _ -> - (plafond_loyer_d823_16_2_ *$ (decimal_of_string "3.4")) + (o_mult_mon_rat plafond_loyer_d823_16_2_ + (decimal_of_string "3.4")) | ZoneDHabitation.Zone2 _ -> - (plafond_loyer_d823_16_2_ *$ (decimal_of_string "2.5")) + (o_mult_mon_rat plafond_loyer_d823_16_2_ + (decimal_of_string "2.5")) | ZoneDHabitation.Zone3 _ -> - (plafond_loyer_d823_16_2_ *$ (decimal_of_string "2.5")))) + (o_mult_mon_rat plafond_loyer_d823_16_2_ + (decimal_of_string "2.5")))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -5626,7 +6083,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1745; start_column=14; end_line=1745; end_column=28; + start_line=1806; start_column=14; end_line=1806; end_column=28; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5638,7 +6095,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme true)) (fun (_: unit) -> if - (loyer_principal_avec_reduction_meuble_ >$ + (o_gt_mon_mon loyer_principal_avec_reduction_meuble_ plafond_loyer_d823_16_2_) then plafond_loyer_d823_16_2_ else loyer_principal_avec_reduction_meuble_)) with @@ -5674,8 +6131,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1794; start_column=5; - end_line=1794; end_column=50; + start_line=1855; start_column=5; + end_line=1855; end_column=50; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5688,8 +6145,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: unit) -> param_))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1780; start_column=14; - end_line=1780; end_column=36; + start_line=1841; start_column=14; + end_line=1841; end_column=36; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5701,17 +6158,19 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme true)) (fun (_: unit) -> if - (loyer_principal_avec_reduction_meuble_ >$ + (o_gt_mon_mon loyer_principal_avec_reduction_meuble_ plafond_suppression_d823_16_) then (money_of_cents_string "0") else ( if - (loyer_principal_avec_reduction_meuble_ >$ + (o_gt_mon_mon loyer_principal_avec_reduction_meuble_ plafond_degressivite_d823_16_) then - (param_ -$ - (param_ *$ - ((loyer_principal_avec_reduction_meuble_ -$ - plafond_degressivite_d823_16_) /$ - (plafond_suppression_d823_16_ -$ + (o_sub_mon_mon param_ + (o_mult_mon_rat param_ + (o_div_mon_mon + (o_sub_mon_mon + loyer_principal_avec_reduction_meuble_ + plafond_degressivite_d823_16_) + (o_sub_mon_mon plafond_suppression_d823_16_ plafond_degressivite_d823_16_)))) else param_))) with @@ -5736,7 +6195,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=563; start_column=10; end_line=563; end_column=32; + start_line=563; start_column=12; end_line=563; end_column=34; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5744,8 +6203,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=563; start_column=10; - end_line=563; end_column=32; + start_line=563; start_column=12; + end_line=563; end_column=34; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5757,80 +6216,95 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 13"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> if - (((loyer_eligible_ +$ - montant_forfaitaire_charges_d823_16_) *$ - (decimal_of_string "0.085")) >=$ + (o_gte_mon_mon + (o_mult_mon_rat + (o_add_mon_mon loyer_eligible_ + montant_forfaitaire_charges_d823_16_) + (decimal_of_string "0.085")) (money_of_cents_string "3663")) then - ((loyer_eligible_ +$ - montant_forfaitaire_charges_d823_16_) *$ + (o_mult_mon_rat + (o_add_mon_mon loyer_eligible_ + montant_forfaitaire_charges_d823_16_) (decimal_of_string "0.085")) else (money_of_cents_string "3663"))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=563; start_column=10; - end_line=563; end_column=32; + start_line=563; start_column=12; + end_line=563; end_column=34; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=175; start_column=14; - end_line=175; end_column=36; + start_line=228; start_column=14; + end_line=228; end_column=36; law_headings=["Article 13"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ (date_of_numbers (2021) (10) (1))) - && - (date_courante_ <@ (date_of_numbers (2022) (7) (1)))))) + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> if - (((loyer_eligible_ +$ - montant_forfaitaire_charges_d823_16_) *$ - (decimal_of_string "0.085")) >=$ + (o_gte_mon_mon + (o_mult_mon_rat + (o_add_mon_mon loyer_eligible_ + montant_forfaitaire_charges_d823_16_) + (decimal_of_string "0.085")) (money_of_cents_string "3539")) then - ((loyer_eligible_ +$ - montant_forfaitaire_charges_d823_16_) *$ + (o_mult_mon_rat + (o_add_mon_mon loyer_eligible_ + montant_forfaitaire_charges_d823_16_) (decimal_of_string "0.085")) else (money_of_cents_string "3539"))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=563; start_column=10; - end_line=563; end_column=32; + start_line=563; start_column=12; + end_line=563; end_column=34; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=899; start_column=14; - end_line=899; end_column=36; + start_line=1024; start_column=14; + end_line=1024; end_column=36; law_headings=["Article 13"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ <@ (date_of_numbers (2021) (10) (1))) && - (date_courante_ >=@ (date_of_numbers (2020) (10) (1)))))) + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1)))))) (fun (_: unit) -> if - (((loyer_eligible_ +$ - montant_forfaitaire_charges_d823_16_) *$ - (decimal_of_string "0.085")) >=$ + (o_gte_mon_mon + (o_mult_mon_rat + (o_add_mon_mon loyer_eligible_ + montant_forfaitaire_charges_d823_16_) + (decimal_of_string "0.085")) (money_of_cents_string "3524")) then - ((loyer_eligible_ +$ - montant_forfaitaire_charges_d823_16_) *$ + (o_mult_mon_rat + (o_add_mon_mon loyer_eligible_ + montant_forfaitaire_charges_d823_16_) (decimal_of_string "0.085")) else (money_of_cents_string "3524")))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=563; start_column=10; end_line=563; end_column=32; + start_line=563; start_column=12; end_line=563; end_column=34; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -5876,36 +6350,44 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=978; start_column=14; - end_line=978; end_column=28; + start_line=1103; start_column=14; + end_line=1103; end_column=28; law_headings=["Article 14"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2021) (10) (1)))))) (fun (_: unit) -> - (decimal_round - ((loyer_eligible_ /$ loyer_reference_) - *& (decimal_of_string "100."))) /& + o_div_rat_rat + (o_round_rat + (o_mult_rat_rat + (o_div_mon_mon loyer_eligible_ + loyer_reference_) + (decimal_of_string "100."))) (decimal_of_string "100.")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=254; start_column=14; - end_line=254; end_column=28; + start_line=307; start_column=14; + end_line=307; end_column=28; law_headings=["Article 14"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> - (decimal_round - ((loyer_eligible_ /$ loyer_reference_) *& - (decimal_of_string "100."))) /& + o_div_rat_rat + (o_round_rat + (o_mult_rat_rat + (o_div_mon_mon loyer_eligible_ + loyer_reference_) + (decimal_of_string "100."))) (decimal_of_string "100.")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; @@ -5914,11 +6396,14 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 14"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> - (decimal_round - ((loyer_eligible_ /$ loyer_reference_) *& - (decimal_of_string "100."))) /& + o_div_rat_rat + (o_round_rat + (o_mult_rat_rat + (o_div_mon_mon loyer_eligible_ loyer_reference_) + (decimal_of_string "100."))) (decimal_of_string "100.")))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with @@ -5944,8 +6429,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1804; start_column=14; - end_line=1804; end_column=36; + start_line=1865; start_column=14; + end_line=1865; end_column=36; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5956,7 +6441,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementLocatif"; "traitement_aide_finale_diminué"] ((log_variable_definition @@ -5972,10 +6457,12 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (embed_money) param_))))))) in ( if - ((aide_finale_ -$ montant_forfaitaire_d823_16_) >=$ + (o_gte_mon_mon + (o_sub_mon_mon aide_finale_ + montant_forfaitaire_d823_16_) (money_of_cents_string "0")) then - (aide_finale_ -$ montant_forfaitaire_d823_16_) else - (money_of_cents_string "0"))))) + (o_sub_mon_mon aide_finale_ montant_forfaitaire_d823_16_) + else (money_of_cents_string "0"))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -6033,72 +6520,84 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1002; start_column=14; - end_line=1002; end_column=33; + start_line=1127; start_column=14; + end_line=1127; end_column=33; law_headings=["Article 14"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2021) (10) (1)))))) (fun (_: unit) -> if - (rapport_loyers_ <& + (o_lt_rat_rat rapport_loyers_ (decimal_of_string "0.45")) then (decimal_of_string "0.") else ( if - ((rapport_loyers_ >=& - (decimal_of_string "0.45")) && - (rapport_loyers_ <& + (o_and + (o_gte_rat_rat rapport_loyers_ + (decimal_of_string "0.45")) + (o_lt_rat_rat rapport_loyers_ (decimal_of_string "0.75"))) then - ((decimal_of_string "0.0045") *& - (rapport_loyers_ -& + (o_mult_rat_rat + (decimal_of_string "0.0045") + (o_sub_rat_rat rapport_loyers_ (decimal_of_string "0.0045"))) else ( if - (rapport_loyers_ >=& + (o_gte_rat_rat rapport_loyers_ (decimal_of_string "0.75")) then - (((decimal_of_string "0.0045") *& - (decimal_of_string "0.3")) +& - ((decimal_of_string "0.0068") - *& - (rapport_loyers_ -& + (o_add_rat_rat + (o_mult_rat_rat + (decimal_of_string "0.0045") + (decimal_of_string "0.3")) + (o_mult_rat_rat + (decimal_of_string "0.0068") + (o_sub_rat_rat + rapport_loyers_ (decimal_of_string "0.75")))) else (decimal_of_string "0.")))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=281; start_column=14; - end_line=281; end_column=33; + start_line=334; start_column=14; + end_line=334; end_column=33; law_headings=["Article 14"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> if - (rapport_loyers_ <& (decimal_of_string "0.45")) - then (decimal_of_string "0.") else + (o_lt_rat_rat rapport_loyers_ + (decimal_of_string "0.45")) then + (decimal_of_string "0.") else ( if - ((rapport_loyers_ >=& - (decimal_of_string "0.45")) && - (rapport_loyers_ <& + (o_and + (o_gte_rat_rat rapport_loyers_ + (decimal_of_string "0.45")) + (o_lt_rat_rat rapport_loyers_ (decimal_of_string "0.75"))) then - ((decimal_of_string "0.0045") *& - (rapport_loyers_ -& + (o_mult_rat_rat (decimal_of_string "0.0045") + (o_sub_rat_rat rapport_loyers_ (decimal_of_string "0.0045"))) else ( if - (rapport_loyers_ >=& + (o_gte_rat_rat rapport_loyers_ (decimal_of_string "0.75")) then - (((decimal_of_string "0.0045") *& - (decimal_of_string "0.3")) +& - ((decimal_of_string "0.0068") *& - (rapport_loyers_ -& + (o_add_rat_rat + (o_mult_rat_rat + (decimal_of_string "0.0045") + (decimal_of_string "0.3")) + (o_mult_rat_rat + (decimal_of_string "0.0068") + (o_sub_rat_rat rapport_loyers_ (decimal_of_string "0.75")))) else (decimal_of_string "0.")))))|]) (fun (_: unit) -> (log_decision_taken @@ -6108,24 +6607,30 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 14"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> - if (rapport_loyers_ <& (decimal_of_string "0.45")) then + if + (o_lt_rat_rat rapport_loyers_ + (decimal_of_string "0.45")) then (decimal_of_string "0.") else ( if - ((rapport_loyers_ >=& (decimal_of_string "0.45")) && - (rapport_loyers_ <& (decimal_of_string "0.75"))) - then - ((decimal_of_string "0.0045") *& - (rapport_loyers_ -& (decimal_of_string "0.0045"))) - else + (o_and + (o_gte_rat_rat rapport_loyers_ + (decimal_of_string "0.45")) + (o_lt_rat_rat rapport_loyers_ + (decimal_of_string "0.75"))) then + (o_mult_rat_rat (decimal_of_string "0.0045") + (o_sub_rat_rat rapport_loyers_ + (decimal_of_string "0.0045"))) else ( if - (rapport_loyers_ >=& (decimal_of_string "0.75")) - then - (((decimal_of_string "0.0045") *& - (decimal_of_string "0.3")) +& - ((decimal_of_string "0.0068") *& - (rapport_loyers_ -& + (o_gte_rat_rat rapport_loyers_ + (decimal_of_string "0.75")) then + (o_add_rat_rat + (o_mult_rat_rat (decimal_of_string "0.0045") + (decimal_of_string "0.3")) + (o_mult_rat_rat (decimal_of_string "0.0068") + (o_sub_rat_rat rapport_loyers_ (decimal_of_string "0.75")))) else (decimal_of_string "0.")))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) @@ -6153,8 +6658,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1821; start_column=14; - end_line=1821; end_column=36; + start_line=1882; start_column=14; + end_line=1882; end_column=36; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -6165,7 +6670,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementLocatif"; "traitement_aide_finale_minoration_forfaitaire"] ((log_variable_definition @@ -6180,7 +6685,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "traitement_aide_finale_minoration_forfaitaire"; "input"] (embed_money) param_))))))) in - (let crds_ : _ = ((log_end_call + (let crds_ : money = ((log_end_call ["ContributionsSocialesAidesPersonnelleLogement"; "montant"] ((log_variable_definition ["ContributionsSocialesAidesPersonnelleLogement"; @@ -6191,16 +6696,17 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ["ContributionsSocialesAidesPersonnelleLogement"; "montant"; "input"] (embed_money) aide_finale_))))))) in - (let aide_finale_moins_crds_arrondie_ : _ = - (money_round - ((aide_finale_ -$ crds_) -$ (money_of_cents_string - "50"))) + (let aide_finale_moins_crds_arrondie_ : money = + (o_round_mon + (o_sub_mon_mon (o_sub_mon_mon aide_finale_ crds_) + (money_of_cents_string "50"))) in ( if - ((aide_finale_moins_crds_arrondie_ +$ crds_) >=$ + (o_gte_mon_mon + (o_add_mon_mon aide_finale_moins_crds_arrondie_ crds_) (money_of_cents_string "0")) then - (aide_finale_moins_crds_arrondie_ +$ crds_) else - (money_of_cents_string "0"))))))) + (o_add_mon_mon aide_finale_moins_crds_arrondie_ crds_) + else (money_of_cents_string "0"))))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -6217,13 +6723,13 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in - let taux_loyer_eligible_arrondi_: decimal = (log_variable_definition + let taux_loyer_eligible_taux_arrondi_: decimal = (log_variable_definition ["CalculAidePersonnaliséeLogementLocatif"; - "taux_loyer_éligible_arrondi"] (embed_decimal) ( + "taux_loyer_éligible_taux_arrondi"] (embed_decimal) ( try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=550; start_column=10; end_line=550; end_column=17; + start_line=550; start_column=10; end_line=550; end_column=22; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -6232,7 +6738,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme handle_default {filename = "examples/aides_logement/prologue.catala_fr"; start_line=550; start_column=10; - end_line=550; end_column=17; + end_line=550; end_column=22; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -6241,7 +6747,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme handle_default {filename = "examples/aides_logement/prologue.catala_fr"; start_line=550; start_column=10; - end_line=550; end_column=17; + end_line=550; end_column=22; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -6250,7 +6756,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme handle_default {filename = "examples/aides_logement/prologue.catala_fr"; start_line=550; start_column=10; - end_line=550; end_column=17; + end_line=550; end_column=22; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -6258,36 +6764,41 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1009; start_column=14; - end_line=1009; end_column=33; + start_line=1134; start_column=14; + end_line=1134; end_column=33; law_headings=["Article 14"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2021) (10) (1)))))) (fun (_: unit) -> - (decimal_round - (taux_loyer_eligible_formule_ *& - (decimal_of_string "100000."))) /& + o_div_rat_rat + (o_round_rat + (o_mult_rat_rat + taux_loyer_eligible_formule_ + (decimal_of_string "100000."))) (decimal_of_string "100000.")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=288; start_column=14; - end_line=288; end_column=33; + start_line=341; start_column=14; + end_line=341; end_column=33; law_headings=["Article 14"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> - (decimal_round - (taux_loyer_eligible_formule_ *& - (decimal_of_string "100000."))) /& + o_div_rat_rat + (o_round_rat + (o_mult_rat_rat taux_loyer_eligible_formule_ + (decimal_of_string "100000."))) (decimal_of_string "100000.")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; @@ -6296,17 +6807,19 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme law_headings=["Article 14"; "Chapitre III : Calcul des aides personnelles au logement en secteur locatif"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> - (decimal_round - (taux_loyer_eligible_formule_ *& - (decimal_of_string "100000."))) /& + o_div_rat_rat + (o_round_rat + (o_mult_rat_rat taux_loyer_eligible_formule_ + (decimal_of_string "100000."))) (decimal_of_string "100000.")))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=550; start_column=10; end_line=550; end_column=17; + start_line=550; start_column=10; end_line=550; end_column=22; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -6336,7 +6849,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementLocatif"; "traitement_aide_finale_contributions_sociales_arrondi"] ((log_variable_definition @@ -6352,12 +6865,14 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "input"] (embed_money) param_))))))) in ( if - ((aide_finale_ -$ - (reduction_loyer_solidarite_ *$ fraction_l832_3_)) - >=$ (money_of_cents_string "0")) then - (aide_finale_ -$ - (reduction_loyer_solidarite_ *$ fraction_l832_3_)) - else (money_of_cents_string "0"))))) + (o_gte_mon_mon + (o_sub_mon_mon aide_finale_ + (o_mult_mon_rat reduction_loyer_solidarite_ + fraction_l832_3_)) (money_of_cents_string "0")) + then + (o_sub_mon_mon aide_finale_ + (o_mult_mon_rat reduction_loyer_solidarite_ + fraction_l832_3_)) else (money_of_cents_string "0"))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -6387,7 +6902,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1904; start_column=14; end_line=1904; end_column=42; + start_line=1965; start_column=14; end_line=1965; end_column=42; law_headings=["Article D823-17"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -6398,7 +6913,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - taux_composition_familiale_ +& taux_loyer_eligible_arrondi_)) + o_add_rat_rat taux_composition_familiale_ + taux_loyer_eligible_taux_arrondi_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -6422,8 +6938,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1853; start_column=14; - end_line=1853; end_column=36; + start_line=1914; start_column=14; + end_line=1914; end_column=36; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -6434,7 +6950,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementLocatif"; "traitement_aide_finale_réduction_loyer_solidarité"] ((log_variable_definition @@ -6449,8 +6965,9 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "traitement_aide_finale_réduction_loyer_solidarité"; "input"] (embed_money) param_))))))) in - ( if (aide_finale_ <$ montant_minimal_aide_d823_16_) then - (money_of_cents_string "0") else aide_finale_)))) + ( if + (o_lt_mon_mon aide_finale_ montant_minimal_aide_d823_16_) + then (money_of_cents_string "0") else aide_finale_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -6473,14 +6990,14 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=565; start_column=10; end_line=565; end_column=35; + start_line=565; start_column=12; end_line=565; end_column=37; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1870; start_column=14; end_line=1870; end_column=39; + start_line=1931; start_column=14; end_line=1931; end_column=39; law_headings=["Article D823-17"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -6491,22 +7008,23 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let participation_ressources_ : _ = - ((ressources_menage_arrondies_ -$ - abattement_forfaitaire_d823_17_) *$ + (let participation_ressources_ : money = + (o_mult_mon_rat + (o_sub_mon_mon ressources_menage_arrondies_ + abattement_forfaitaire_d823_17_) taux_prise_compte_ressources_) in - (let participation_ressources_ : _ = + (let participation_ressources_ : money = ( if - (participation_ressources_ <$ (money_of_cents_string "0")) - then (money_of_cents_string "0") else - participation_ressources_) + (o_lt_mon_mon participation_ressources_ + (money_of_cents_string "0")) then + (money_of_cents_string "0") else participation_ressources_) in - (participation_minimale_ +$ participation_ressources_))))) + (o_add_mon_mon participation_minimale_ participation_ressources_))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=565; start_column=10; end_line=565; end_column=35; + start_line=565; start_column=12; end_line=565; end_column=37; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -6517,14 +7035,14 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=570; start_column=10; end_line=570; end_column=29; + start_line=570; start_column=12; end_line=570; end_column=31; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1727; start_column=14; end_line=1727; end_column=33; + start_line=1788; start_column=14; end_line=1788; end_column=33; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -6535,29 +7053,32 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = - ((loyer_eligible_ +$ montant_forfaitaire_charges_d823_16_) -$ + (let aide_finale_ : money = + (o_sub_mon_mon + (o_add_mon_mon loyer_eligible_ + montant_forfaitaire_charges_d823_16_) participation_personnelle_) in - ( if (aide_finale_ <$ (money_of_cents_string "0")) then + ( if (o_lt_mon_mon aide_finale_ (money_of_cents_string "0")) then (money_of_cents_string "0") else aide_finale_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=570; start_column=10; end_line=570; end_column=29; + start_line=570; start_column=12; end_line=570; end_column=31; law_headings=["Secteur locatif"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in let _: unit = if ( try - (plafond_degressivite_d823_16_ >=$ - (plafond_loyer_d823_16_2_ *$ (decimal_of_string "2.5"))) + (o_gte_mon_mon plafond_degressivite_d823_16_ + (o_mult_mon_rat plafond_loyer_d823_16_2_ + (decimal_of_string "2.5"))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1797; start_column=13; - end_line=1797; end_column=76; + start_line=1858; start_column=13; + end_line=1858; end_column=74; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -6568,8 +7089,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Code de la construction et de l'habitation"]}))) then () else raise (AssertionFailed {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1797; start_column=13; - end_line=1797; end_column=76; + start_line=1858; start_column=13; + end_line=1858; end_column=74; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -6580,13 +7101,16 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Code de la construction et de l'habitation"]}) in let _: unit = if ( try - ((fraction_l832_3_ >=& (decimal_of_string "0.9")) && - (fraction_l832_3_ <=& (decimal_of_string "0.98"))) + (o_and + (o_gte_rat_rat fraction_l832_3_ + (decimal_of_string "0.9")) + (o_lte_rat_rat fraction_l832_3_ + (decimal_of_string "0.98"))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; start_line=817; start_column=13; - end_line=817; end_column=63; + end_line=817; end_column=61; law_headings=["Article L832-3"; "Chapitre Ier : Champ d'application"; "Titre III : Aide personnalisée au logement"; @@ -6596,7 +7120,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme then () else raise (AssertionFailed {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; start_line=817; start_column=13; - end_line=817; end_column=63; + end_line=817; end_column=61; law_headings=["Article L832-3"; "Chapitre Ier : Champ d'application"; "Titre III : Aide personnalisée au logement"; @@ -6635,14 +7159,14 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=618; start_column=10; end_line=618; end_column=31; + start_line=618; start_column=12; end_line=618; end_column=33; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2781; start_column=14; end_line=2781; end_column=35; + start_line=2556; start_column=14; end_line=2556; end_column=35; law_headings=["Article 30"; "Chapitre V : Calcul de l'aide personnalisée au logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -6650,7 +7174,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=618; start_column=10; end_line=618; end_column=31; + start_line=618; start_column=12; end_line=618; end_column=33; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -6668,7 +7192,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2756; start_column=14; end_line=2756; end_column=41; + start_line=2531; start_column=14; end_line=2531; end_column=41; law_headings=["Article 28"; "Chapitre V : Calcul de l'aide personnalisée au logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -6694,7 +7218,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2767; start_column=14; end_line=2767; end_column=42; + start_line=2542; start_column=14; end_line=2542; end_column=42; law_headings=["Article 29"; "Chapitre V : Calcul de l'aide personnalisée au logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -6730,8 +7254,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3789; start_column=14; - end_line=3789; end_column=35; + start_line=3850; start_column=14; + end_line=3850; end_column=35; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6747,10 +7271,10 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement | TypeLogementFoyer.LogementPersonnesAgeesOuHandicapees _ -> false | TypeLogementFoyer.ResidenceSociale _ -> - (date_conventionnement_ >=@ + (o_gte_dat_dat date_conventionnement_ (date_of_numbers (1994) (12) (31))) | TypeLogementFoyer.FoyerJeunesTrvailleursOuMigrantsConventionneL353_2Avant1995 _ -> - (date_conventionnement_ >=@ + (o_gte_dat_dat date_conventionnement_ (date_of_numbers (1990) (9) (30))) | TypeLogementFoyer.Autre _ -> false))) with @@ -6794,8 +7318,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement ["CalculAidePersonnaliséeLogementFoyer"; "contributions_sociales"; "ContributionsSocialesAidesPersonnelleLogement"] contributions_sociales_aides_personnelle_logement) - {ContributionsSocialesAidesPersonnelleLogementIn.date_courante_in = - contributions_sociales_dot_date_courante_})) in + ({ContributionsSocialesAidesPersonnelleLogementIn.date_courante_in = + contributions_sociales_dot_date_courante_}))) in let contributions_sociales_dot_montant_: money -> money = result_.ContributionsSocialesAidesPersonnelleLogement.montant in let plafond_equivalence_loyer_eligible_: money = (log_variable_definition ["CalculAidePersonnaliséeLogementFoyer"; @@ -6803,7 +7327,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=621; start_column=10; end_line=621; end_column=44; + start_line=621; start_column=12; end_line=621; end_column=46; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -6811,27 +7335,28 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=621; start_column=10; - end_line=621; end_column=44; + start_line=621; start_column=12; + end_line=621; end_column=46; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2702; start_column=14; - end_line=2702; end_column=48; + start_line=2477; start_column=14; + end_line=2477; end_column=48; law_headings=["Article 27"; "Chapitre V : Calcul de l'aide personnalisée au logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = (integer_of_string - "0")) then + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -6839,26 +7364,29 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "54152")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "57741") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "61794") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "65862") else - ((money_of_cents_string "71039") +$ - ((money_of_cents_string "7368") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "71039") + (o_mult_mon_rat (money_of_cents_string + "7368") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "4"))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = (integer_of_string - "0")) then + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -6866,26 +7394,29 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "49299")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "52565") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "56268") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "59957") else - ((money_of_cents_string "63887") +$ - ((money_of_cents_string "6659") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "63887") + (o_mult_mon_rat (money_of_cents_string + "6659") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "4"))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = (integer_of_string - "0")) then + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -6893,48 +7424,53 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "46634")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "49475") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "52740") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "56004") else - ((money_of_cents_string "59675") +$ - ((money_of_cents_string "6180") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "59675") + (o_mult_mon_rat (money_of_cents_string + "6180") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "4"))))))))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=621; start_column=10; - end_line=621; end_column=44; + start_line=621; start_column=12; + end_line=621; end_column=46; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=499; start_column=14; - end_line=499; end_column=48; + start_line=552; start_column=14; + end_line=552; end_column=48; law_headings=["Article 27"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ (date_of_numbers (2021) (10) (1))) - && - (date_courante_ <@ (date_of_numbers (2022) (7) (1)))))) + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = (integer_of_string - "0")) then + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -6942,26 +7478,29 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "52321")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "55788") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "59704") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "63635") else - ((money_of_cents_string "68637") +$ - ((money_of_cents_string "7119") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "68637") + (o_mult_mon_rat (money_of_cents_string + "7119") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "4"))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = (integer_of_string - "0")) then + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -6969,26 +7508,29 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "47632")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "50787") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "54365") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "57929") else - ((money_of_cents_string "61727") +$ - ((money_of_cents_string "6434") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "61727") + (o_mult_mon_rat (money_of_cents_string + "6434") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "4"))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = (integer_of_string - "0")) then + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -6996,48 +7538,54 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "45057")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "47802") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "50957") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "54110") else - ((money_of_cents_string "57657") +$ - ((money_of_cents_string "5971") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "57657") + (o_mult_mon_rat (money_of_cents_string + "5971") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "4"))))))))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=621; start_column=10; - end_line=621; end_column=44; + start_line=621; start_column=12; + end_line=621; end_column=46; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1222; start_column=14; - end_line=1222; end_column=48; + start_line=1347; start_column=14; + end_line=1347; end_column=48; law_headings=["Article 27"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ <@ (date_of_numbers (2021) (10) (1))) && - (date_courante_ >=@ (date_of_numbers (2020) (10) (1)))))) + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1)))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = (integer_of_string - "0")) then + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -7045,26 +7593,29 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "52101")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "55555") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "59454") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "63369") else - ((money_of_cents_string "68350") +$ - ((money_of_cents_string "7089") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "68350") + (o_mult_mon_rat (money_of_cents_string + "7089") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "4"))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = (integer_of_string - "0")) then + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -7072,26 +7623,29 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "47433")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "50575") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "54138") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "57687") else - ((money_of_cents_string "61469") +$ - ((money_of_cents_string "6407") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "61469") + (o_mult_mon_rat (money_of_cents_string + "6407") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "4"))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = (integer_of_string - "0")) then + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> @@ -7099,27 +7653,30 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "44869")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "47602") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "50744") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "53884") else - ((money_of_cents_string "57416") +$ - ((money_of_cents_string "5946") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! + (o_add_mon_mon (money_of_cents_string + "57416") + (o_mult_mon_rat (money_of_cents_string + "5946") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "4")))))))))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=621; start_column=10; end_line=621; end_column=44; + start_line=621; start_column=12; end_line=621; end_column=46; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -7139,8 +7696,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3722; start_column=14; - end_line=3722; end_column=36; + start_line=3783; start_column=14; + end_line=3783; end_column=36; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7152,9 +7709,10 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement true)) (fun (_: unit) -> if - ((param_ -$ montant_forfaitaire_d832_24_) >=$ + (o_gte_mon_mon + (o_sub_mon_mon param_ montant_forfaitaire_d832_24_) (money_of_cents_string "0")) then - (param_ -$ montant_forfaitaire_d832_24_) else + (o_sub_mon_mon param_ montant_forfaitaire_d832_24_) else (money_of_cents_string "0"))) with EmptyError -> (raise (NoValueProvided @@ -7178,7 +7736,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "calcul_nombre_parts.condition_2_du_832_25"] (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3878; start_column=14; end_line=3878; end_column=55; + start_line=3939; start_column=14; end_line=3939; end_column=55; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7190,7 +7748,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3878; start_column=14; end_line=3878; end_column=55; + start_line=3939; start_column=14; end_line=3939; end_column=55; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7203,7 +7761,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3878; start_column=14; end_line=3878; end_column=55; + start_line=3939; start_column=14; end_line=3939; end_column=55; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7218,7 +7776,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "calcul_nombre_parts.nombre_personnes_à_charge"] (embed_integer) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3874; start_column=14; end_line=3874; end_column=59; + start_line=3935; start_column=14; end_line=3935; end_column=59; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7230,7 +7788,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3874; start_column=14; end_line=3874; end_column=59; + start_line=3935; start_column=14; end_line=3935; end_column=59; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7243,7 +7801,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3874; start_column=14; end_line=3874; end_column=59; + start_line=3935; start_column=14; end_line=3935; end_column=59; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7259,7 +7817,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement (embed_situation_familiale_calcul_a_p_l) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3876; start_column=14; end_line=3876; end_column=64; + start_line=3937; start_column=14; end_line=3937; end_column=64; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7271,7 +7829,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3876; start_column=14; end_line=3876; end_column=64; + start_line=3937; start_column=14; end_line=3937; end_column=64; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7284,7 +7842,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3876; start_column=14; end_line=3876; end_column=64; + start_line=3937; start_column=14; end_line=3937; end_column=64; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7298,12 +7856,12 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "CalculNombrePartLogementFoyer"] ((log_begin_call ["CalculAidePersonnaliséeLogementFoyer"; "calcul_nombre_parts"; "CalculNombrePartLogementFoyer"] calcul_nombre_part_logement_foyer) - {CalculNombrePartLogementFoyerIn.condition_2_du_832_25_in = - calcul_nombre_parts_dot_condition_2_du_832_25_; - CalculNombrePartLogementFoyerIn.nombre_personnes_a_charge_in = - calcul_nombre_parts_dot_nombre_personnes_a_charge_; - CalculNombrePartLogementFoyerIn.situation_familiale_calcul_apl_in = - calcul_nombre_parts_dot_situation_familiale_calcul_apl_})) in + ({CalculNombrePartLogementFoyerIn.condition_2_du_832_25_in = + calcul_nombre_parts_dot_condition_2_du_832_25_; + CalculNombrePartLogementFoyerIn.nombre_personnes_a_charge_in = + calcul_nombre_parts_dot_nombre_personnes_a_charge_; + CalculNombrePartLogementFoyerIn.situation_familiale_calcul_apl_in = + calcul_nombre_parts_dot_situation_familiale_calcul_apl_}))) in let calcul_nombre_parts_dot_n_nombre_parts_d832_25_: decimal = result_.CalculNombrePartLogementFoyer.n_nombre_parts_d832_25 in let montant_forfaitaire_d832_27_: money = (log_variable_definition ["CalculAidePersonnaliséeLogementFoyer"; "montant_forfaitaire_d832_27"] @@ -7318,7 +7876,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2930; start_column=14; end_line=2930; end_column=41; + start_line=2705; start_column=14; end_line=2705; end_column=41; law_headings=["Article 32"; "Chapitre V : Calcul de l'aide personnalisée au logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -7340,14 +7898,14 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=617; start_column=10; end_line=617; end_column=44; + start_line=617; start_column=12; end_line=617; end_column=46; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2791; start_column=14; end_line=2791; end_column=48; + start_line=2566; start_column=14; end_line=2566; end_column=48; law_headings=["Article 30"; "Chapitre V : Calcul de l'aide personnalisée au logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -7358,7 +7916,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=617; start_column=10; end_line=617; end_column=44; + start_line=617; start_column=12; end_line=617; end_column=46; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -7369,14 +7927,14 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=620; start_column=10; end_line=620; end_column=36; + start_line=620; start_column=12; end_line=620; end_column=38; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3696; start_column=14; end_line=3696; end_column=40; + start_line=3757; start_column=14; end_line=3757; end_column=40; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7387,12 +7945,13 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - if (redevance_ >=$ plafond_equivalence_loyer_eligible_) then - plafond_equivalence_loyer_eligible_ else redevance_)) + if + (o_gte_mon_mon redevance_ plafond_equivalence_loyer_eligible_) + then plafond_equivalence_loyer_eligible_ else redevance_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=620; start_column=10; end_line=620; end_column=36; + start_line=620; start_column=12; end_line=620; end_column=38; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -7403,7 +7962,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=619; start_column=19; end_line=619; end_column=41; + start_line=619; start_column=21; end_line=619; end_column=43; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -7413,15 +7972,15 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=619; start_column=19; end_line=619; end_column=41; + start_line=619; start_column=21; end_line=619; end_column=43; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3880; start_column=14; - end_line=3880; end_column=36; + start_line=3941; start_column=14; + end_line=3941; end_column=36; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7436,7 +7995,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=619; start_column=19; end_line=619; end_column=41; + start_line=619; start_column=21; end_line=619; end_column=43; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -7456,8 +8015,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4076; start_column=14; - end_line=4076; end_column=44; + start_line=4137; start_column=14; + end_line=4137; end_column=44; law_headings=["Article D832-27"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7467,7 +8026,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Partie réglementaire"; "Code de la construction et de l'habitation"]} true)) - (fun (_: unit) -> equivalence_loyer_eligible_ -$ param_)) + (fun (_: unit) -> + o_sub_mon_mon equivalence_loyer_eligible_ param_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -7491,7 +8051,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement (embed_money) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3712; start_column=14; end_line=3712; end_column=75; + start_line=3773; start_column=14; end_line=3773; end_column=75; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7503,7 +8063,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3712; start_column=14; end_line=3712; end_column=75; + start_line=3773; start_column=14; end_line=3773; end_column=75; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7516,7 +8076,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3712; start_column=14; end_line=3712; end_column=75; + start_line=3773; start_column=14; end_line=3773; end_column=75; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7532,7 +8092,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3710; start_column=14; end_line=3710; end_column=69; + start_line=3771; start_column=14; end_line=3771; end_column=69; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7544,7 +8104,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3710; start_column=14; end_line=3710; end_column=69; + start_line=3771; start_column=14; end_line=3771; end_column=69; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7557,7 +8117,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3710; start_column=14; end_line=3710; end_column=69; + start_line=3771; start_column=14; end_line=3771; end_column=69; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7573,7 +8133,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement (embed_decimal) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3714; start_column=14; end_line=3714; end_column=70; + start_line=3775; start_column=14; end_line=3775; end_column=70; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7585,7 +8145,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3714; start_column=14; end_line=3714; end_column=70; + start_line=3775; start_column=14; end_line=3775; end_column=70; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7598,7 +8158,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3714; start_column=14; end_line=3714; end_column=70; + start_line=3775; start_column=14; end_line=3775; end_column=70; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7614,12 +8174,12 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement ["CalculAidePersonnaliséeLogementFoyer"; "calcul_équivalence_loyer_minimale"; "CalculÉquivalenceLoyerMinimale"] calcul_equivalence_loyer_minimale) - {CalculEquivalenceLoyerMinimaleIn.ressources_menage_arrondies_in = - calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_; - CalculEquivalenceLoyerMinimaleIn.condition_2_du_832_25_in = - calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_; - CalculEquivalenceLoyerMinimaleIn.n_nombre_parts_d832_25_in = - calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_})) in + ({CalculEquivalenceLoyerMinimaleIn.ressources_menage_arrondies_in = + calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_; + CalculEquivalenceLoyerMinimaleIn.condition_2_du_832_25_in = + calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_; + CalculEquivalenceLoyerMinimaleIn.n_nombre_parts_d832_25_in = + calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_}))) in let calcul_equivalence_loyer_minimale_dot_montant_: money = result_.CalculEquivalenceLoyerMinimale.montant in let coefficient_prise_en_charge_d832_25_formule_: decimal = (log_variable_definition ["CalculAidePersonnaliséeLogementFoyer"; @@ -7643,8 +8203,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3892; start_column=5; - end_line=3892; end_column=26; + start_line=3953; start_column=5; + end_line=3953; end_column=26; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7655,13 +8215,13 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Code de la construction et de l'habitation"]} condition_2_du_832_25_)) (fun (_: unit) -> - (decimal_of_string "0.9") -& - (ressources_menage_arrondies_ /$ - (coefficient_multiplicateur_d832_25_ *$ + o_sub_rat_rat (decimal_of_string "0.9") + (o_div_mon_mon ressources_menage_arrondies_ + (o_mult_mon_rat coefficient_multiplicateur_d832_25_ n_nombre_parts_d832_25_))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3804; start_column=14; end_line=3804; end_column=49; + start_line=3865; start_column=14; end_line=3865; end_column=49; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7672,17 +8232,18 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let denominateur_ : _ = - (ressources_menage_arrondies_ -$ - (coefficient_r_d832_25_ *$ n_nombre_parts_d832_25_)) + (let denominateur_ : money = + (o_sub_mon_mon ressources_menage_arrondies_ + (o_mult_mon_rat coefficient_r_d832_25_ + n_nombre_parts_d832_25_)) in - (let denominateur_ : _ = - ( if (denominateur_ <$ (money_of_cents_string "0")) then - (money_of_cents_string "0") else denominateur_) + (let denominateur_ : money = + ( if (o_lt_mon_mon denominateur_ (money_of_cents_string "0")) + then (money_of_cents_string "0") else denominateur_) in - ((decimal_of_string "0.95") -& - (denominateur_ /$ - (coefficient_multiplicateur_d832_25_ *$ + (o_sub_rat_rat (decimal_of_string "0.95") + (o_div_mon_mon denominateur_ + (o_mult_mon_rat coefficient_multiplicateur_d832_25_ n_nombre_parts_d832_25_))))))) with EmptyError -> (raise (NoValueProvided @@ -7707,8 +8268,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4080; start_column=14; - end_line=4080; end_column=55; + start_line=4141; start_column=14; + end_line=4141; end_column=55; law_headings=["Article D832-27"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7719,7 +8280,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let depense_nette_minimale_ : _ = ((log_end_call + (let depense_nette_minimale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementFoyer"; "dépense_nette_minimale_d832_27"] ((log_variable_definition @@ -7735,10 +8296,11 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement (embed_money) param_))))))) in ( if - (depense_nette_minimale_ <=$ montant_forfaitaire_d832_27_) - then - (montant_forfaitaire_d832_27_ -$ depense_nette_minimale_) - else (money_of_cents_string "0"))))) + (o_lte_mon_mon depense_nette_minimale_ + montant_forfaitaire_d832_27_) then + (o_sub_mon_mon montant_forfaitaire_d832_27_ + depense_nette_minimale_) else + (money_of_cents_string "0"))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -7761,14 +8323,14 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=628; start_column=10; end_line=628; end_column=36; + start_line=628; start_column=12; end_line=628; end_column=38; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3708; start_column=14; end_line=3708; end_column=40; + start_line=3769; start_column=14; end_line=3769; end_column=40; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7782,18 +8344,18 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=628; start_column=10; end_line=628; end_column=36; + start_line=628; start_column=12; end_line=628; end_column=38; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in - let coefficient_prise_en_charge_d832_25_arrondi_: decimal = (log_variable_definition + let coefficient_prise_en_charge_d832_25_coeff_arrondi_: decimal = (log_variable_definition ["CalculAidePersonnaliséeLogementFoyer"; - "coefficient_prise_en_charge_d832_25_arrondi"] (embed_decimal) ( + "coefficient_prise_en_charge_d832_25_coeff_arrondi"] (embed_decimal) ( try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=638; start_column=10; end_line=638; end_column=17; + start_line=638; start_column=10; end_line=638; end_column=23; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -7802,15 +8364,15 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement handle_default {filename = "examples/aides_logement/prologue.catala_fr"; start_line=638; start_column=10; - end_line=638; end_column=17; + end_line=638; end_column=23; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3909; start_column=5; - end_line=3909; end_column=26; + start_line=3970; start_column=5; + end_line=3970; end_column=26; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7821,14 +8383,17 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Code de la construction et de l'habitation"]} condition_2_du_832_25_)) (fun (_: unit) -> - (decimal_round - ((coefficient_prise_en_charge_d832_25_formule_ -& - (decimal_of_string "0.005")) *& - (decimal_of_string "100."))) /& + o_div_rat_rat + (o_round_rat + (o_mult_rat_rat + (o_sub_rat_rat + coefficient_prise_en_charge_d832_25_formule_ + (decimal_of_string "0.005")) + (decimal_of_string "100."))) (decimal_of_string "100.")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3825; start_column=14; end_line=3825; end_column=49; + start_line=3886; start_column=14; end_line=3886; end_column=49; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7839,14 +8404,17 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (decimal_round - ((coefficient_prise_en_charge_d832_25_formule_ -& - (decimal_of_string "0.005")) *& (decimal_of_string "100."))) - /& (decimal_of_string "100."))) + o_div_rat_rat + (o_round_rat + (o_mult_rat_rat + (o_sub_rat_rat + coefficient_prise_en_charge_d832_25_formule_ + (decimal_of_string "0.005")) + (decimal_of_string "100."))) (decimal_of_string "100."))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=638; start_column=10; end_line=638; end_column=17; + start_line=638; start_column=10; end_line=638; end_column=23; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -7866,8 +8434,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3736; start_column=14; - end_line=3736; end_column=36; + start_line=3797; start_column=14; + end_line=3797; end_column=36; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7878,7 +8446,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementFoyer"; "traitement_aide_finale_minoration_forfaitaire"] ((log_variable_definition @@ -7893,8 +8461,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "traitement_aide_finale_minoration_forfaitaire"; "input"] (embed_money) param_))))))) in - (let aide_finale_ : _ = - (aide_finale_ -$ ((log_end_call + (let aide_finale_ : money = + (o_sub_mon_mon aide_finale_ ((log_end_call ["CalculAidePersonnaliséeLogementFoyer"; "abattement_dépense_nette_minimale_d832_27"] ((log_variable_definition @@ -7909,8 +8477,9 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "abattement_dépense_nette_minimale_d832_27"; "input"] (embed_money) aide_finale_)))))))) in - ( if (aide_finale_ >=$ (money_of_cents_string "0")) then - aide_finale_ else (money_of_cents_string "0")))))) + ( if + (o_gte_mon_mon aide_finale_ (money_of_cents_string "0")) + then aide_finale_ else (money_of_cents_string "0")))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -7949,8 +8518,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3915; start_column=5; - end_line=3915; end_column=26; + start_line=3976; start_column=5; + end_line=3976; end_column=26; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7962,13 +8531,14 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement condition_2_du_832_25_)) (fun (_: unit) -> if - (coefficient_prise_en_charge_d832_25_arrondi_ >=& + (o_gte_rat_rat + coefficient_prise_en_charge_d832_25_coeff_arrondi_ (decimal_of_string "0.9")) then (decimal_of_string "0.9") else - coefficient_prise_en_charge_d832_25_arrondi_))|]) + coefficient_prise_en_charge_d832_25_coeff_arrondi_))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3828; start_column=14; end_line=3828; end_column=49; + start_line=3889; start_column=14; end_line=3889; end_column=49; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7980,9 +8550,10 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement true)) (fun (_: unit) -> if - (coefficient_prise_en_charge_d832_25_arrondi_ >=& + (o_gte_rat_rat + coefficient_prise_en_charge_d832_25_coeff_arrondi_ (decimal_of_string "0.95")) then (decimal_of_string "0.95") - else coefficient_prise_en_charge_d832_25_arrondi_)) + else coefficient_prise_en_charge_d832_25_coeff_arrondi_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -8007,8 +8578,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3750; start_column=14; - end_line=3750; end_column=36; + start_line=3811; start_column=14; + end_line=3811; end_column=36; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -8019,7 +8590,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementFoyer"; "traitement_aide_finale_abattement"] ((log_variable_definition @@ -8034,7 +8605,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "traitement_aide_finale_abattement"; "input"] (embed_money) param_))))))) in - (let crds_ : _ = ((log_end_call + (let crds_ : money = ((log_end_call ["ContributionsSocialesAidesPersonnelleLogement"; "montant"] ((log_variable_definition ["ContributionsSocialesAidesPersonnelleLogement"; @@ -8045,16 +8616,17 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement ["ContributionsSocialesAidesPersonnelleLogement"; "montant"; "input"] (embed_money) aide_finale_))))))) in - (let aide_finale_moins_crds_arrondie_ : _ = - (money_round - ((aide_finale_ -$ crds_) -$ (money_of_cents_string - "50"))) + (let aide_finale_moins_crds_arrondie_ : money = + (o_round_mon + (o_sub_mon_mon (o_sub_mon_mon aide_finale_ crds_) + (money_of_cents_string "50"))) in ( if - ((aide_finale_moins_crds_arrondie_ +$ crds_) >=$ + (o_gte_mon_mon + (o_add_mon_mon aide_finale_moins_crds_arrondie_ crds_) (money_of_cents_string "0")) then - (aide_finale_moins_crds_arrondie_ +$ crds_) else - (money_of_cents_string "0"))))))) + (o_add_mon_mon aide_finale_moins_crds_arrondie_ crds_) + else (money_of_cents_string "0"))))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -8077,14 +8649,14 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=641; start_column=10; end_line=641; end_column=29; + start_line=641; start_column=12; end_line=641; end_column=31; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3675; start_column=14; end_line=3675; end_column=33; + start_line=3736; start_column=14; end_line=3736; end_column=33; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -8095,16 +8667,18 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = - ((equivalence_loyer_eligible_ -$ equivalence_loyer_minimale_) - *$ coefficient_prise_en_charge_d832_25_seuil_) + (let aide_finale_ : money = + (o_mult_mon_rat + (o_sub_mon_mon equivalence_loyer_eligible_ + equivalence_loyer_minimale_) + coefficient_prise_en_charge_d832_25_seuil_) in - ( if (aide_finale_ <$ (money_of_cents_string "0")) then + ( if (o_lt_mon_mon aide_finale_ (money_of_cents_string "0")) then (money_of_cents_string "0") else aide_finale_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=641; start_column=10; end_line=641; end_column=29; + start_line=641; start_column=12; end_line=641; end_column=31; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -8124,8 +8698,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3771; start_column=14; - end_line=3771; end_column=36; + start_line=3832; start_column=14; + end_line=3832; end_column=36; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -8136,7 +8710,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementFoyer"; "traitement_aide_finale_contributions_sociales_arrondi"] ((log_variable_definition @@ -8151,8 +8725,9 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "traitement_aide_finale_contributions_sociales_arrondi"; "input"] (embed_money) param_))))))) in - ( if (aide_finale_ <$ montant_minimal_aide_d823_24_) then - (money_of_cents_string "0") else aide_finale_)))) + ( if + (o_lt_mon_mon aide_finale_ montant_minimal_aide_d823_24_) + then (money_of_cents_string "0") else aide_finale_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -8216,9 +8791,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2560; start_column=14; end_line=2560; end_column=41; - law_headings=["Article 20"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2335; start_column=14; end_line=2335; end_column=41; + law_headings=["Article 20"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} true)) (fun (_: unit) -> money_of_cents_string "500")) with @@ -8242,9 +8816,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2571; start_column=14; end_line=2571; end_column=42; - law_headings=["Article 21"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2346; start_column=14; end_line=2346; end_column=42; + law_headings=["Article 21"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} true)) (fun (_: unit) -> money_of_cents_string "1000")) with @@ -8268,9 +8841,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2580; start_column=15; end_line=2580; end_column=49; - law_headings=["Article 22"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2355; start_column=15; end_line=2355; end_column=49; + law_headings=["Article 22"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} true)) (fun (_: unit) -> money_of_cents_string "2211133")) with @@ -8294,9 +8866,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2673; start_column=14; end_line=2673; end_column=48; - law_headings=["Article 26"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2448; start_column=14; end_line=2448; end_column=48; + law_headings=["Article 26"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} true)) (fun (_: unit) -> decimal_of_string "16.25")) with @@ -8320,9 +8891,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2595; start_column=14; end_line=2595; end_column=47; - law_headings=["Article 23"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2370; start_column=14; end_line=2370; end_column=47; + law_headings=["Article 23"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} true)) (fun (_: unit) -> money_of_cents_string "560085")) with @@ -8346,9 +8916,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2596; start_column=14; end_line=2596; end_column=47; - law_headings=["Article 23"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2371; start_column=14; end_line=2371; end_column=47; + law_headings=["Article 23"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} true)) (fun (_: unit) -> decimal_of_string "0.208")) with @@ -8372,9 +8941,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2597; start_column=14; end_line=2597; end_column=47; - law_headings=["Article 23"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2372; start_column=14; end_line=2372; end_column=47; + law_headings=["Article 23"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} true)) (fun (_: unit) -> decimal_of_string "0.416")) with @@ -8398,12 +8966,13 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/autres_sources.catala_fr"; - start_line=299; start_column=14; end_line=299; end_column=36; + start_line=328; start_column=14; end_line=328; end_column=36; law_headings=["Article premier"; "Règlement (CE) n°2866/98 du conseil du 31 décembre 1998 concernant les taux de conversion entre l'euro et les monnaies des États membres adoptant l'euro"]} true)) (fun (_: unit) -> - (decimal_of_string "1.") /& (decimal_of_string "6.55957"))) + o_div_rat_rat (decimal_of_string "1.") + (decimal_of_string "6.55957"))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -8418,7 +8987,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "calcul_nombre_parts.nombre_personnes_à_charge"] (embed_integer) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3220; start_column=14; end_line=3220; end_column=59; + start_line=3281; start_column=14; end_line=3281; end_column=59; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8429,7 +8998,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3220; start_column=14; end_line=3220; end_column=59; + start_line=3281; start_column=14; end_line=3281; end_column=59; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8441,7 +9010,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3220; start_column=14; end_line=3220; end_column=59; + start_line=3281; start_column=14; end_line=3281; end_column=59; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8456,7 +9025,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna (embed_situation_familiale_calcul_a_p_l) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3222; start_column=14; end_line=3222; end_column=64; + start_line=3283; start_column=14; end_line=3283; end_column=64; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8467,7 +9036,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3222; start_column=14; end_line=3222; end_column=64; + start_line=3283; start_column=14; end_line=3283; end_column=64; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8479,7 +9048,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3222; start_column=14; end_line=3222; end_column=64; + start_line=3283; start_column=14; end_line=3283; end_column=64; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8494,10 +9063,10 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ["CalculAidePersonnaliséeLogementAccessionPropriété"; "calcul_nombre_parts"; "CalculNombrePartsAccessionPropriété"] calcul_nombre_parts_accession_propriete) - {CalculNombrePartsAccessionProprieteIn.nombre_personnes_a_charge_in = - calcul_nombre_parts_dot_nombre_personnes_a_charge_; - CalculNombrePartsAccessionProprieteIn.situation_familiale_calcul_apl_in = - calcul_nombre_parts_dot_situation_familiale_calcul_apl_})) in + ({CalculNombrePartsAccessionProprieteIn.nombre_personnes_a_charge_in = + calcul_nombre_parts_dot_nombre_personnes_a_charge_; + CalculNombrePartsAccessionProprieteIn.situation_familiale_calcul_apl_in = + calcul_nombre_parts_dot_situation_familiale_calcul_apl_}))) in let calcul_nombre_parts_dot_n_nombre_parts_d832_11_: decimal = result_.CalculNombrePartsAccessionPropriete.n_nombre_parts_d832_11 in let coefficient_multiplicateur_d832_17_3_: decimal = (log_variable_definition ["CalculAidePersonnaliséeLogementAccessionPropriété"; @@ -8512,9 +9081,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2655; start_column=14; end_line=2655; end_column=50; - law_headings=["Article 25"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2430; start_column=14; end_line=2430; end_column=50; + law_headings=["Article 25"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} true)) (fun (_: unit) -> @@ -8522,7 +9090,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna with | NeufOuAncien.Neuf _ -> ( if - (date_signature_pret_ <=@ + (o_lte_dat_dat date_signature_pret_ (date_of_numbers (1998) (10) (1))) then (decimal_of_string "0.0226") else (decimal_of_string "0.0234")) @@ -8532,7 +9100,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna | AmelioreParOccupant.Oui _ -> (decimal_of_string "0.0172") | AmelioreParOccupant.Non _ -> ( if - (date_signature_pret_ <=@ + (o_lte_dat_dat date_signature_pret_ (date_of_numbers (1998) (10) (1))) then (decimal_of_string "0.0226") else (decimal_of_string "0.0234"))))) @@ -8579,8 +9147,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "contributions_sociales"; "ContributionsSocialesAidesPersonnelleLogement"] contributions_sociales_aides_personnelle_logement) - {ContributionsSocialesAidesPersonnelleLogementIn.date_courante_in = - contributions_sociales_dot_date_courante_})) in + ({ContributionsSocialesAidesPersonnelleLogementIn.date_courante_in = + contributions_sociales_dot_date_courante_}))) in let contributions_sociales_dot_montant_: money -> money = result_.ContributionsSocialesAidesPersonnelleLogement.montant in let montant_forfaitaire_charges_d832_10_: money = (log_variable_definition ["CalculAidePersonnaliséeLogementAccessionPropriété"; @@ -8614,24 +9182,24 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2628; start_column=7; - end_line=2628; end_column=18; - law_headings=["Article 24"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2403; start_column=7; + end_line=2403; end_column=18; + law_headings=["Article 24"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) copropriete_))) (fun (_: unit) -> - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "2805") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "5612")) +$ - ((money_of_cents_string "1272") *$ - (decimal_of_integer - nombre_personnes_a_charge_)))); + o_add_mon_mon + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "2805") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "5612")) + (o_mult_mon_rat (money_of_cents_string "1272") + (o_torat_int nombre_personnes_a_charge_)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -8644,26 +9212,28 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=464; start_column=7; - end_line=464; end_column=18; + start_line=517; start_column=7; + end_line=517; end_column=18; law_headings=["Article 24"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ - (date_of_numbers (2022) (7) (1)))) && + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))) copropriete_))) (fun (_: unit) -> - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "2710") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "5422")) +$ - ((money_of_cents_string "1229") *$ - (decimal_of_integer - nombre_personnes_a_charge_)))); + o_add_mon_mon + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "2710") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "5422")) + (o_mult_mon_rat (money_of_cents_string "1229") + (o_torat_int nombre_personnes_a_charge_)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -8676,27 +9246,29 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1185; start_column=7; - end_line=1185; end_column=18; + start_line=1310; start_column=7; + end_line=1310; end_column=18; law_headings=["Article 24"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - (((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ >=@ - (date_of_numbers (2020) (10) (1)))) && + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1)))) copropriete_))) (fun (_: unit) -> - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "2699") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "5399")) +$ - ((money_of_cents_string "1224") *$ - (decimal_of_integer - nombre_personnes_a_charge_))))|]) + o_add_mon_mon + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "2699") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "5399")) + (o_mult_mon_rat (money_of_cents_string "1224") + (o_torat_int nombre_personnes_a_charge_))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) (fun (_: unit) -> true) (fun (_: unit) -> @@ -8719,16 +9291,16 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2549; start_column=29; - end_line=2549; end_column=64; - law_headings=["Article 19"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2324; start_column=29; + end_line=2324; end_column=64; + law_headings=["Article 19"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> - (money_of_cents_string "5612") +$ - ((money_of_cents_string "1272") *$ - (decimal_of_integer nombre_personnes_a_charge_)))); + o_add_mon_mon (money_of_cents_string "5612") + (o_mult_mon_rat (money_of_cents_string "1272") + (o_torat_int nombre_personnes_a_charge_)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -8741,19 +9313,20 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=430; start_column=29; - end_line=430; end_column=64; + start_line=483; start_column=29; + end_line=483; end_column=64; law_headings=["Article 19"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> - (money_of_cents_string "5422") +$ - ((money_of_cents_string "1229") *$ - (decimal_of_integer nombre_personnes_a_charge_)))); + o_add_mon_mon (money_of_cents_string "5422") + (o_mult_mon_rat (money_of_cents_string "1229") + (o_torat_int nombre_personnes_a_charge_)))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -8766,20 +9339,21 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1151; start_column=29; - end_line=1151; end_column=64; + start_line=1276; start_column=29; + end_line=1276; end_column=64; law_headings=["Article 19"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ >=@ + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_gte_dat_dat date_courante_ (date_of_numbers (2020) (10) (1)))))) (fun (_: unit) -> - (money_of_cents_string "5399") +$ - ((money_of_cents_string "1224") *$ - (decimal_of_integer nombre_personnes_a_charge_))))|]) + o_add_mon_mon (money_of_cents_string "5399") + (o_mult_mon_rat (money_of_cents_string "1224") + (o_torat_int nombre_personnes_a_charge_))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))) with EmptyError -> (raise (NoValueProvided @@ -8804,8 +9378,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3069; start_column=14; - end_line=3069; end_column=36; + start_line=3130; start_column=14; + end_line=3130; end_column=36; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8816,9 +9390,10 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna true)) (fun (_: unit) -> if - ((param_ -$ montant_forfaitaire_d832_10_) >=$ + (o_gte_mon_mon + (o_sub_mon_mon param_ montant_forfaitaire_d832_10_) (money_of_cents_string "0")) then - (param_ -$ montant_forfaitaire_d832_10_) else + (o_sub_mon_mon param_ montant_forfaitaire_d832_10_) else (money_of_cents_string "0"))) with EmptyError -> (raise (NoValueProvided @@ -8858,8 +9433,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3534; start_column=5; - end_line=3534; end_column=28; + start_line=3595; start_column=5; + end_line=3595; end_column=28; law_headings=["Article D832-18"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8871,7 +9446,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna (fun (_: unit) -> ressources_menage_arrondies_))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3526; start_column=14; end_line=3526; end_column=44; + start_line=3587; start_column=14; end_line=3587; end_column=44; law_headings=["Article D832-18"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8882,11 +9457,12 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna true)) (fun (_: unit) -> if - (ressources_menage_arrondies_ <=$ - (mensualite_principale_ *$ + (o_lte_mon_mon ressources_menage_arrondies_ + (o_mult_mon_rat mensualite_principale_ coefficient_multiplicateur_d832_18_)) then - (mensualite_principale_ *$ coefficient_multiplicateur_d832_18_) - else ressources_menage_arrondies_)) + (o_mult_mon_rat mensualite_principale_ + coefficient_multiplicateur_d832_18_) else + ressources_menage_arrondies_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -8917,313 +9493,4654 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=616; start_column=5; - end_line=619; end_column=33; - law_headings=["Article 17"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (1992) (6) (30))) && - ((param_ <@ (date_of_numbers (1994) (11) (27))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> true - | TypePret.D331_63_64 _ -> false - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) + ([|(fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=806; start_column=5; + end_line=812; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2023) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1992) (6) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> false + | NeufOuAncien.Ancien ameliore_par_occupant_ -> + (match ameliore_par_occupant_ + with + | AmelioreParOccupant.Oui _ -> + true + | AmelioreParOccupant.Non _ -> + false)) + (match type_pret_ + with + | TypePret.D331_32 _ -> false + | TypePret.D331_63_64 _ -> true + | TypePret.D331_59_8 _ -> false + | TypePret.D331_76_1 _ -> false + | TypePret.Autre _ -> false)))))) + (fun (_: unit) -> + o_mult_mon_rat + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "86900") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "97100")) + else + (o_add_mon_mon (money_of_cents_string + "107300") + (o_mult_mon_rat + (money_of_cents_string "10200") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string "1")))))) + taux_francs_vers_euros_))|]) + (fun (_: unit) -> true) (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "208500") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "251500")) else - ((money_of_cents_string "294500") +$ - ((money_of_cents_string "43000") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "186000") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "223900")) else - ((money_of_cents_string "261800") +$ - ((money_of_cents_string "37900") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "173600") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "208200")) else - ((money_of_cents_string "242800") +$ - ((money_of_cents_string "35600") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=705; start_column=5; - end_line=707; end_column=33; - law_headings=["Article 17"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (1994) (11) (27))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> true - | TypePret.D331_63_64 _ -> false - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false))))) - (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "184000") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "220000")) else - ((money_of_cents_string "260000") +$ - ((money_of_cents_string "38000") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "164200") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "197700")) else - ((money_of_cents_string "231200") +$ - ((money_of_cents_string "33500") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "153200") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "183700")) else - ((money_of_cents_string "214200") +$ - ((money_of_cents_string "30500") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=748; start_column=5; - end_line=750; end_column=33; - law_headings=["Article 17"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (1994) (11) (27))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> true - | TypePret.D331_63_64 _ -> false - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false))))) - (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "148100") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "178700")) else - ((money_of_cents_string "209300") +$ - ((money_of_cents_string "30600") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "132000") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "158900")) else - ((money_of_cents_string "185800") +$ - ((money_of_cents_string "26900") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "123300") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "147900")) else - ((money_of_cents_string "172500") +$ - ((money_of_cents_string "24600") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=799; start_column=5; - end_line=802; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (1992) (6) (30))) && - ((param_ <@ (date_of_numbers (1994) (11) (27))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "208500") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "251500")) else - ((money_of_cents_string "294500") +$ - ((money_of_cents_string "43000") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "186000") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "223900")) else - ((money_of_cents_string "261800") +$ - ((money_of_cents_string "37900") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "173600") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "208200")) else - ((money_of_cents_string "242800") +$ - ((money_of_cents_string "34600") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([|(fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1052; start_column=5; + end_line=1056; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1992) (6) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (1994) (11) (27))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "208500") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "251500")) else + (o_add_mon_mon + (money_of_cents_string + "294500") + (o_mult_mon_rat + (money_of_cents_string + "43000") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "186000") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "223900")) else + (o_add_mon_mon + (money_of_cents_string + "261800") + (o_mult_mon_rat + (money_of_cents_string + "37900") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "173600") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "208200")) else + (o_add_mon_mon + (money_of_cents_string + "242800") + (o_mult_mon_rat + (money_of_cents_string + "34600") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1085; start_column=5; + end_line=1089; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1992) (6) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (1994) (11) (27))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "167800") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "202500")) else + (o_add_mon_mon + (money_of_cents_string + "237200") + (o_mult_mon_rat + (money_of_cents_string + "34700") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "149600") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "180100")) else + (o_add_mon_mon + (money_of_cents_string + "210600") + (o_mult_mon_rat + (money_of_cents_string + "30500") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "139700") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "167600")) else + (o_add_mon_mon + (money_of_cents_string + "195500") + (o_mult_mon_rat + (money_of_cents_string + "27900") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1118; start_column=5; + end_line=1122; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1994) (11) (27))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2000) (6) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "198100") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "239000")) else + (o_add_mon_mon + (money_of_cents_string + "279900") + (o_mult_mon_rat + (money_of_cents_string + "40900") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "176800") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "212800")) else + (o_add_mon_mon + (money_of_cents_string + "248800") + (o_mult_mon_rat + (money_of_cents_string + "36000") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "165000") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "197900")) else + (o_add_mon_mon + (money_of_cents_string + "230800") + (o_mult_mon_rat + (money_of_cents_string + "32900") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1151; start_column=5; + end_line=1155; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1994) (11) (27))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2000) (6) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "159500") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "192500")) else + (o_add_mon_mon + (money_of_cents_string + "225500") + (o_mult_mon_rat + (money_of_cents_string + "33000") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "142200") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "171200")) else + (o_add_mon_mon + (money_of_cents_string + "200200") + (o_mult_mon_rat + (money_of_cents_string + "29000") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "132800") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "159300")) else + (o_add_mon_mon + (money_of_cents_string + "185800") + (o_mult_mon_rat + (money_of_cents_string + "26500") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1184; start_column=5; + end_line=1188; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2000) (6) (30))) + (o_and + (o_lte_dat_dat param_ + (date_of_numbers (2001) (6) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "200100") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "141400")) else + (o_add_mon_mon + (money_of_cents_string + "182700") + (o_mult_mon_rat + (money_of_cents_string + "41300") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "178600") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "215000")) else + (o_add_mon_mon + (money_of_cents_string + "251400") + (o_mult_mon_rat + (money_of_cents_string + "36400") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "166700") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "199900")) else + (o_add_mon_mon + (money_of_cents_string + "233100") + (o_mult_mon_rat + (money_of_cents_string + "33200") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1217; start_column=5; + end_line=1221; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2000) (6) (30))) + (o_and + (o_lte_dat_dat param_ + (date_of_numbers (2001) (6) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "161100") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "194400")) else + (o_add_mon_mon + (money_of_cents_string + "227700") + (o_mult_mon_rat + (money_of_cents_string + "33300") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "143600") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "172900")) else + (o_add_mon_mon + (money_of_cents_string + "202200") + (o_mult_mon_rat + (money_of_cents_string + "29300") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "134100") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "160900")) else + (o_add_mon_mon + (money_of_cents_string + "187700") + (o_mult_mon_rat + (money_of_cents_string + "26800") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1250; start_column=5; + end_line=1254; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2001) (7) (1))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2001) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "202500") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "244300")) else + (o_add_mon_mon + (money_of_cents_string + "286100") + (o_mult_mon_rat + (money_of_cents_string + "41800") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "180700") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "217500")) else + (o_add_mon_mon + (money_of_cents_string + "254300") + (o_mult_mon_rat + (money_of_cents_string + "36800") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "168700") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "202300")) else + (o_add_mon_mon + (money_of_cents_string + "235900") + (o_mult_mon_rat + (money_of_cents_string + "33600") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1283; start_column=5; + end_line=1287; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2002) (1) (1))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2002) (6) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "30871") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "37243")) else + (o_add_mon_mon + (money_of_cents_string + "43615") + (o_mult_mon_rat + (money_of_cents_string + "6372") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "27548") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "33148")) else + (o_add_mon_mon + (money_of_cents_string + "38768") + (o_mult_mon_rat + (money_of_cents_string + "5610") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "25718") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "30840")) else + (o_add_mon_mon + (money_of_cents_string + "35962") + (o_mult_mon_rat + (money_of_cents_string + "5122") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1316; start_column=5; + end_line=1320; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2001) (7) (1))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2001) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "163000") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "196700")) else + (o_add_mon_mon + (money_of_cents_string + "230400") + (o_mult_mon_rat + (money_of_cents_string + "33700") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "145300") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "175000")) else + (o_add_mon_mon + (money_of_cents_string + "204700") + (o_mult_mon_rat + (money_of_cents_string + "29700") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "0")) + then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "135700") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "162800")) else + (o_add_mon_mon + (money_of_cents_string + "189900") + (o_mult_mon_rat + (money_of_cents_string + "27100") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1349; start_column=5; + end_line=1353; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2002) (1) (1))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2002) (6) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "24849") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "29987")) else + (o_add_mon_mon + (money_of_cents_string + "35125") + (o_mult_mon_rat + (money_of_cents_string + "5138") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "22151") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "26679")) else + (o_add_mon_mon + (money_of_cents_string + "31207") + (o_mult_mon_rat + (money_of_cents_string + "4528") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "20687") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "24818")) else + (o_add_mon_mon + (money_of_cents_string + "28949") + (o_mult_mon_rat + (money_of_cents_string + "4131") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1382; start_column=5; + end_line=1386; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2002) (6) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2003) (6) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "31241") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "37689")) else + (o_add_mon_mon + (money_of_cents_string + "44137") + (o_mult_mon_rat + (money_of_cents_string + "6448") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "27879") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "33556")) else + (o_add_mon_mon + (money_of_cents_string + "39233") + (o_mult_mon_rat + (money_of_cents_string + "5677") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "26027") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "31210")) else + (o_add_mon_mon + (money_of_cents_string + "36393") + (o_mult_mon_rat + (money_of_cents_string + "5183") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1415; start_column=5; + end_line=1419; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2002) (6) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2003) (6) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "25147") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "30347")) else + (o_add_mon_mon + (money_of_cents_string + "35547") + (o_mult_mon_rat + (money_of_cents_string + "5200") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "22417") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "26999")) else + (o_add_mon_mon + (money_of_cents_string + "31581") + (o_mult_mon_rat + (money_of_cents_string + "4582") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "20935") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "25116")) else + (o_add_mon_mon + (money_of_cents_string + "29297") + (o_mult_mon_rat + (money_of_cents_string + "4181") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1448; start_column=5; + end_line=1452; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2003) (6) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2005) (8) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "31616") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "38141")) else + (o_add_mon_mon + (money_of_cents_string + "44666") + (o_mult_mon_rat + (money_of_cents_string + "6525") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "28214") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "33959")) else + (o_add_mon_mon + (money_of_cents_string + "39704") + (o_mult_mon_rat + (money_of_cents_string + "5745") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "26339") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "31584")) else + (o_add_mon_mon + (money_of_cents_string + "36829") + (o_mult_mon_rat + (money_of_cents_string + "5245") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1481; start_column=5; + end_line=1485; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2003) (6) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2005) (8) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "25449") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "30711")) else + (o_add_mon_mon + (money_of_cents_string + "35973") + (o_mult_mon_rat + (money_of_cents_string + "5262") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "22686") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "27323")) else + (o_add_mon_mon + (money_of_cents_string + "31960") + (o_mult_mon_rat + (money_of_cents_string + "4637") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "21186") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "25417")) else + (o_add_mon_mon + (money_of_cents_string + "29648") + (o_mult_mon_rat + (money_of_cents_string + "4231") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1514; start_column=5; + end_line=1518; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2005) (8) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2006) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "32185") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "38827")) else + (o_add_mon_mon + (money_of_cents_string + "45469") + (o_mult_mon_rat + (money_of_cents_string + "6642") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "28722") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "34570")) else + (o_add_mon_mon + (money_of_cents_string + "40418") + (o_mult_mon_rat + (money_of_cents_string + "5848") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "26813") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "32152")) else + (o_add_mon_mon + (money_of_cents_string + "37491") + (o_mult_mon_rat + (money_of_cents_string + "5339") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1547; start_column=5; + end_line=1551; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2005) (8) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2006) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "25907") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "31264")) else + (o_add_mon_mon + (money_of_cents_string + "36621") + (o_mult_mon_rat + (money_of_cents_string + "5357") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "23094") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "27814")) else + (o_add_mon_mon + (money_of_cents_string + "32534") + (o_mult_mon_rat + (money_of_cents_string + "4720") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "21567") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "25874")) else + (o_add_mon_mon + (money_of_cents_string + "30181") + (o_mult_mon_rat + (money_of_cents_string + "4307") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1580; start_column=5; + end_line=1584; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2006) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2007) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "33086") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "39914")) else + (o_add_mon_mon + (money_of_cents_string + "46742") + (o_mult_mon_rat + (money_of_cents_string + "6828") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "29526") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "35538")) else + (o_add_mon_mon + (money_of_cents_string + "41550") + (o_mult_mon_rat + (money_of_cents_string + "6012") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "27564") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "33052")) else + (o_add_mon_mon + (money_of_cents_string + "38541") + (o_mult_mon_rat + (money_of_cents_string + "5488") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1613; start_column=5; + end_line=1617; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2006) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2007) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "26632") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "32139")) else + (o_add_mon_mon + (money_of_cents_string + "37646") + (o_mult_mon_rat + (money_of_cents_string + "5507") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "23741") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "28593")) else + (o_add_mon_mon + (money_of_cents_string + "33445") + (o_mult_mon_rat + (money_of_cents_string + "4852") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "22171") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "36598")) else + (o_add_mon_mon + (money_of_cents_string + "31026") + (o_mult_mon_rat + (money_of_cents_string + "4428") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1646; start_column=5; + end_line=1650; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2007) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2008) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "33999") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "41016")) else + (o_add_mon_mon + (money_of_cents_string + "48032") + (o_mult_mon_rat + (money_of_cents_string + "7016") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "30341") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "36519")) else + (o_add_mon_mon + (money_of_cents_string + "42697") + (o_mult_mon_rat + (money_of_cents_string + "6178") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "28325") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "33964")) else + (o_add_mon_mon + (money_of_cents_string + "39605") + (o_mult_mon_rat + (money_of_cents_string + "5639") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1679; start_column=5; + end_line=1683; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2007) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2008) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "27367") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "33026")) else + (o_add_mon_mon + (money_of_cents_string + "38685") + (o_mult_mon_rat + (money_of_cents_string + "5659") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "24396") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "29382")) else + (o_add_mon_mon + (money_of_cents_string + "34368") + (o_mult_mon_rat + (money_of_cents_string + "4986") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "22783") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "27332")) else + (o_add_mon_mon + (money_of_cents_string + "31882") + (o_mult_mon_rat + (money_of_cents_string + "4550") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1712; start_column=5; + end_line=1716; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2008) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2009) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "35002") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "42226")) else + (o_add_mon_mon + (money_of_cents_string + "49449") + (o_mult_mon_rat + (money_of_cents_string + "7223") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "31236") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "37596")) else + (o_add_mon_mon + (money_of_cents_string + "43957") + (o_mult_mon_rat + (money_of_cents_string + "6360") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "29161") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "34966")) else + (o_add_mon_mon + (money_of_cents_string + "40773") + (o_mult_mon_rat + (money_of_cents_string + "5805") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1745; start_column=5; + end_line=1749; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2008) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2009) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "28174") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "34000")) else + (o_add_mon_mon + (money_of_cents_string + "39826") + (o_mult_mon_rat + (money_of_cents_string + "5826") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "25116") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "30249")) else + (o_add_mon_mon + (money_of_cents_string + "35382") + (o_mult_mon_rat + (money_of_cents_string + "5133") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "23455") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "28138")) else + (o_add_mon_mon + (money_of_cents_string + "32823") + (o_mult_mon_rat + (money_of_cents_string + "4684") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1778; start_column=5; + end_line=1782; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2009) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2010) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "35114") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "42361")) else + (o_add_mon_mon + (money_of_cents_string + "49607") + (o_mult_mon_rat + (money_of_cents_string + "7246") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "31336") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "37716")) else + (o_add_mon_mon + (money_of_cents_string + "44098") + (o_mult_mon_rat + (money_of_cents_string + "6380") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "29254") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "35078")) else + (o_add_mon_mon + (money_of_cents_string + "40903") + (o_mult_mon_rat + (money_of_cents_string + "5824") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1811; start_column=5; + end_line=1815; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2009) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2010) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "28264") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "34109")) else + (o_add_mon_mon + (money_of_cents_string + "39953") + (o_mult_mon_rat + (money_of_cents_string + "5845") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "25196") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "30346")) else + (o_add_mon_mon + (money_of_cents_string + "35495") + (o_mult_mon_rat + (money_of_cents_string + "5149") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "23530") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "28228")) else + (o_add_mon_mon + (money_of_cents_string + "32928") + (o_mult_mon_rat + (money_of_cents_string + "4699") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1844; start_column=5; + end_line=1848; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2010) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2011) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "35500") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "42827")) else + (o_add_mon_mon + (money_of_cents_string + "50153") + (o_mult_mon_rat + (money_of_cents_string + "7326") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "31681") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "38131")) else + (o_add_mon_mon + (money_of_cents_string + "44583") + (o_mult_mon_rat + (money_of_cents_string + "6450") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "29576") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "35464")) else + (o_add_mon_mon + (money_of_cents_string + "41353") + (o_mult_mon_rat + (money_of_cents_string + "5888") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1877; start_column=5; + end_line=1881; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2010) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2011) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "28575") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "34484")) else + (o_add_mon_mon + (money_of_cents_string + "40392") + (o_mult_mon_rat + (money_of_cents_string + "5909") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "25473") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "30680")) else + (o_add_mon_mon + (money_of_cents_string + "35885") + (o_mult_mon_rat + (money_of_cents_string + "5206") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "23789") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "28539")) else + (o_add_mon_mon + (money_of_cents_string + "33290") + (o_mult_mon_rat + (money_of_cents_string + "4751") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1910; start_column=5; + end_line=1914; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2011) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2012) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "35855") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "43255")) else + (o_add_mon_mon + (money_of_cents_string + "50655") + (o_mult_mon_rat + (money_of_cents_string + "7399") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "31998") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "38512")) else + (o_add_mon_mon + (money_of_cents_string + "45029") + (o_mult_mon_rat + (money_of_cents_string + "6515") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "29872") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "35819")) else + (o_add_mon_mon + (money_of_cents_string + "41767") + (o_mult_mon_rat + (money_of_cents_string + "5947") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1943; start_column=5; + end_line=1947; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2011) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2012) (12) (31))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "28861") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "34829")) else + (o_add_mon_mon + (money_of_cents_string + "40796") + (o_mult_mon_rat + (money_of_cents_string + "5968") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "25728") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "30987")) else + (o_add_mon_mon + (money_of_cents_string + "36244") + (o_mult_mon_rat + (money_of_cents_string + "5258") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "24027") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "28824")) else + (o_add_mon_mon + (money_of_cents_string + "33623") + (o_mult_mon_rat + (money_of_cents_string + "4799") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=1976; start_column=5; + end_line=1980; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2012) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2014) (9) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "36626") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "44185")) else + (o_add_mon_mon + (money_of_cents_string + "51744") + (o_mult_mon_rat + (money_of_cents_string + "7558") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "32686") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "39340")) else + (o_add_mon_mon + (money_of_cents_string + "45997") + (o_mult_mon_rat + (money_of_cents_string + "6655") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "30514") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "36589")) else + (o_add_mon_mon + (money_of_cents_string + "42665") + (o_mult_mon_rat + (money_of_cents_string + "6075") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=2009; start_column=5; + end_line=2013; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2012) (12) (31))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2014) (9) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "29482") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "35578")) else + (o_add_mon_mon + (money_of_cents_string + "41673") + (o_mult_mon_rat + (money_of_cents_string + "6096") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "26281") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "31653")) else + (o_add_mon_mon + (money_of_cents_string + "37023") + (o_mult_mon_rat + (money_of_cents_string + "5371") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "24544") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "29444")) else + (o_add_mon_mon + (money_of_cents_string + "34346") + (o_mult_mon_rat + (money_of_cents_string + "4902") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=2042; start_column=5; + end_line=2046; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2014) (9) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2015) (9) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "36835") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "44437")) else + (o_add_mon_mon + (money_of_cents_string + "52039") + (o_mult_mon_rat + (money_of_cents_string + "7601") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "32872") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "39564")) else + (o_add_mon_mon + (money_of_cents_string + "46259") + (o_mult_mon_rat + (money_of_cents_string + "6693") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "30688") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "36798")) else + (o_add_mon_mon + (money_of_cents_string + "42908") + (o_mult_mon_rat + (money_of_cents_string + "6110") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=2075; start_column=5; + end_line=2079; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2014) (9) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2015) (9) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "29650") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "35781")) else + (o_add_mon_mon + (money_of_cents_string + "41911") + (o_mult_mon_rat + (money_of_cents_string + "6131") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "26431") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "31833")) else + (o_add_mon_mon + (money_of_cents_string + "37234") + (o_mult_mon_rat + (money_of_cents_string + "5402") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "24684") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "29612")) else + (o_add_mon_mon + (money_of_cents_string + "34542") + (o_mult_mon_rat + (money_of_cents_string + "4930") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=2108; start_column=5; + end_line=2112; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2015) (9) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2017) (9) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "36864") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "44473")) else + (o_add_mon_mon + (money_of_cents_string + "52081") + (o_mult_mon_rat + (money_of_cents_string + "7607") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "32898") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "39596")) else + (o_add_mon_mon + (money_of_cents_string + "46296") + (o_mult_mon_rat + (money_of_cents_string + "6698") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "30713") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "36827")) else + (o_add_mon_mon + (money_of_cents_string + "42942") + (o_mult_mon_rat + (money_of_cents_string + "6115") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=2141; start_column=5; + end_line=2145; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2015) (9) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2017) (9) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "29674") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "35810")) else + (o_add_mon_mon + (money_of_cents_string + "41945") + (o_mult_mon_rat + (money_of_cents_string + "6136") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "26452") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "31858")) else + (o_add_mon_mon + (money_of_cents_string + "37264") + (o_mult_mon_rat + (money_of_cents_string + "5406") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "24704") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "29636")) else + (o_add_mon_mon + (money_of_cents_string + "34570") + (o_mult_mon_rat + (money_of_cents_string + "4934") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=2174; start_column=5; + end_line=2178; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2017) (9) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2019) (9) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "37140") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "44807")) else + (o_add_mon_mon + (money_of_cents_string + "52472") + (o_mult_mon_rat + (money_of_cents_string + "7664") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "33145") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "39893")) else + (o_add_mon_mon + (money_of_cents_string + "46643") + (o_mult_mon_rat + (money_of_cents_string + "6748") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "30943") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "37103")) else + (o_add_mon_mon + (money_of_cents_string + "43264") + (o_mult_mon_rat + (money_of_cents_string + "6161") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=2207; start_column=5; + end_line=2211; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2017) (9) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (2019) (9) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> + false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> + false))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "29897") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "36079")) else + (o_add_mon_mon + (money_of_cents_string + "42260") + (o_mult_mon_rat + (money_of_cents_string + "6182") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "26650") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "32097")) else + (o_add_mon_mon + (money_of_cents_string + "37543") + (o_mult_mon_rat + (money_of_cents_string + "5447") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "24889") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "29858")) else + (o_add_mon_mon + (money_of_cents_string + "34829") + (o_mult_mon_rat + (money_of_cents_string + "4971") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=2240; start_column=5; + end_line=2243; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2019) (9) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> true + | NeufOuAncien.Ancien _ -> + false) + (match type_pret_ + with + | TypePret.D331_32 _ -> false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> false)))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "37252") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "44941")) else + (o_add_mon_mon + (money_of_cents_string + "52629") + (o_mult_mon_rat + (money_of_cents_string + "7687") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "33244") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "40013")) else + (o_add_mon_mon + (money_of_cents_string + "46783") + (o_mult_mon_rat + (money_of_cents_string + "6768") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "31036") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "37215")) else + (o_add_mon_mon + (money_of_cents_string + "43394") + (o_mult_mon_rat + (money_of_cents_string + "6179") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=2272; start_column=5; + end_line=2275; end_column=36; + law_headings=["Article 18"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (10) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2019) (9) (30))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) + (match type_pret_ + with + | TypePret.D331_32 _ -> false + | TypePret.D331_63_64 _ -> + true + | TypePret.D331_59_8 _ -> + false + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> false)))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "29986") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "36187")) else + (o_add_mon_mon + (money_of_cents_string + "42386") + (o_mult_mon_rat + (money_of_cents_string + "6201") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "26730") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "32193")) else + (o_add_mon_mon + (money_of_cents_string + "37656") + (o_mult_mon_rat + (money_of_cents_string + "5463") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "24964") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "29948")) else + (o_add_mon_mon + (money_of_cents_string + "34934") + (o_mult_mon_rat + (money_of_cents_string + "4986") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))))|]) + (fun (_: unit) -> false) + (fun (_: unit) -> raise EmptyError))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -9245,3050 +14162,447 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=843; start_column=5; - end_line=849; end_column=36; - law_headings=["Article 18"; + start_line=618; start_column=5; + end_line=621; end_column=33; + law_headings=["Article 17"; "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ - (date_of_numbers (1992) (6) (30))) && - ((param_ <@ - (date_of_numbers (1994) (11) (27))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien ameliore_par_occupant_ -> - (match ameliore_par_occupant_ - with - | AmelioreParOccupant.Oui _ -> - false - | AmelioreParOccupant.Non _ -> - true)) && + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1992) (6) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (1994) (11) (27))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> true + | NeufOuAncien.Ancien _ -> false) (match type_pret_ with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true + | TypePret.D331_32 _ -> true + | TypePret.D331_63_64 _ -> false | TypePret.D331_59_8 _ -> false | TypePret.D331_76_1 _ -> false | TypePret.Autre _ -> false)))))) (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match - situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "208500") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "251500")) else + (o_add_mon_mon (money_of_cents_string - "167800") - | SituationFamilialeCalculAPL.Couple _ -> + "294500") + (o_mult_mon_rat + (money_of_cents_string + "43000") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "186000") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "223900")) else + (o_add_mon_mon (money_of_cents_string - "202500")) else - ((money_of_cents_string "237200") +$ - ((money_of_cents_string "34700") - *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! (integer_of_string - "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match - situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> + "261800") + (o_mult_mon_rat + (money_of_cents_string + "37900") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "173600") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "208200")) else + (o_add_mon_mon (money_of_cents_string - "149600") - | SituationFamilialeCalculAPL.Couple _ -> + "242800") + (o_mult_mon_rat + (money_of_cents_string + "35600") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=662; start_column=5; + end_line=665; end_column=33; + law_headings=["Article 17"; + "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1992) (6) (30))) + (o_and + (o_lt_dat_dat param_ + (date_of_numbers (1994) (11) (27))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> false + | NeufOuAncien.Ancien _ -> true) + (match type_pret_ + with + | TypePret.D331_32 _ -> true + | TypePret.D331_63_64 _ -> false + | TypePret.D331_59_8 _ -> false + | TypePret.D331_76_1 _ -> false + | TypePret.Autre _ -> false)))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "167800") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "202500")) else + (o_add_mon_mon (money_of_cents_string - "180100")) else - ((money_of_cents_string "210600") +$ - ((money_of_cents_string "30500") - *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! (integer_of_string - "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match - situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> + "237200") + (o_mult_mon_rat + (money_of_cents_string + "34700") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "149600") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "180100")) else + (o_add_mon_mon (money_of_cents_string - "139700") - | SituationFamilialeCalculAPL.Couple _ -> + "210600") + (o_mult_mon_rat + (money_of_cents_string + "30500") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "139700") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "167600")) else + (o_add_mon_mon (money_of_cents_string - "167600")) else - ((money_of_cents_string "195500") +$ - ((money_of_cents_string "27900") - *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! (integer_of_string - "1"))))))) *$ + "195500") + (o_mult_mon_rat + (money_of_cents_string + "27900") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=707; start_column=5; + end_line=709; end_column=33; + law_headings=["Article 17"; + "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1994) (11) (27))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> true + | NeufOuAncien.Ancien _ -> false) + (match type_pret_ + with + | TypePret.D331_32 _ -> true + | TypePret.D331_63_64 _ -> false + | TypePret.D331_59_8 _ -> false + | TypePret.D331_76_1 _ -> false + | TypePret.Autre _ -> false))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "184000") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "220000")) else + (o_add_mon_mon + (money_of_cents_string + "260000") + (o_mult_mon_rat + (money_of_cents_string + "38000") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "164200") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "197700")) else + (o_add_mon_mon + (money_of_cents_string + "231200") + (o_mult_mon_rat + (money_of_cents_string + "33500") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "153200") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "183700")) else + (o_add_mon_mon + (money_of_cents_string + "214200") + (o_mult_mon_rat + (money_of_cents_string + "30500") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=11; + end_line=684; end_column=46; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=750; start_column=5; + end_line=752; end_column=33; + law_headings=["Article 17"; + "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1994) (11) (27))) + (o_and + (match anciennete_logement_ + with + | NeufOuAncien.Neuf _ -> false + | NeufOuAncien.Ancien _ -> true) + (match type_pret_ + with + | TypePret.D331_32 _ -> true + | TypePret.D331_63_64 _ -> false + | TypePret.D331_59_8 _ -> false + | TypePret.D331_76_1 _ -> false + | TypePret.Autre _ -> false))))) + (fun (_: unit) -> + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "148100") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "178700")) else + (o_add_mon_mon + (money_of_cents_string + "209300") + (o_mult_mon_rat + (money_of_cents_string + "30600") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "132000") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "158900")) else + (o_add_mon_mon + (money_of_cents_string + "185800") + (o_mult_mon_rat + (money_of_cents_string + "26900") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1")))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match + situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string + "123300") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string + "147900")) else + (o_add_mon_mon + (money_of_cents_string + "172500") + (o_mult_mon_rat + (money_of_cents_string + "24600") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "1"))))))) taux_francs_vers_euros_))|]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=660; start_column=5; - end_line=663; end_column=33; - law_headings=["Article 17"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (1992) (6) (30))) && - ((param_ <@ (date_of_numbers (1994) (11) (27))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> true - | TypePret.D331_63_64 _ -> false - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "167800") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "202500")) else - ((money_of_cents_string "237200") +$ - ((money_of_cents_string "34700") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "149600") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "180100")) else - ((money_of_cents_string "210600") +$ - ((money_of_cents_string "30500") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "139700") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "167600")) else - ((money_of_cents_string "195500") +$ - ((money_of_cents_string "27900") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=890; start_column=5; - end_line=896; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (1992) (6) (30))) && - ((param_ <@ (date_of_numbers (1994) (11) (27))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien ameliore_par_occupant_ -> - (match ameliore_par_occupant_ - with - | AmelioreParOccupant.Oui _ -> true - | AmelioreParOccupant.Non _ -> false)) - && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - ( if - (nombre_personnes_a_charge_ = (integer_of_string - "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "86900") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "97100")) else - ((money_of_cents_string "107300") +$ - ((money_of_cents_string "10200") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=922; start_column=5; - end_line=925; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (1994) (11) (27))) && - ((param_ <@ (date_of_numbers (2000) (6) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "198100") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "239000")) else - ((money_of_cents_string "279900") +$ - ((money_of_cents_string "40900") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "176800") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "212800")) else - ((money_of_cents_string "248800") +$ - ((money_of_cents_string "36000") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "165000") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "197900")) else - ((money_of_cents_string "230800") +$ - ((money_of_cents_string "32900") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=966; start_column=5; - end_line=969; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (1994) (11) (27))) && - ((param_ <@ (date_of_numbers (2000) (6) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "159500") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "192500")) else - ((money_of_cents_string "225500") +$ - ((money_of_cents_string "33000") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "142200") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "171200")) else - ((money_of_cents_string "200200") +$ - ((money_of_cents_string "29000") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "132800") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "159300")) else - ((money_of_cents_string "185800") +$ - ((money_of_cents_string "26500") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1011; start_column=5; - end_line=1014; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2000) (6) (30))) && - ((param_ <=@ (date_of_numbers (2001) (6) (30))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "200100") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "141400")) else - ((money_of_cents_string "182700") +$ - ((money_of_cents_string "41300") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "178600") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "215000")) else - ((money_of_cents_string "251400") +$ - ((money_of_cents_string "36400") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "166700") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "199900")) else - ((money_of_cents_string "233100") +$ - ((money_of_cents_string "33200") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1055; start_column=5; - end_line=1058; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2000) (6) (30))) && - ((param_ <=@ (date_of_numbers (2001) (6) (30))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "161100") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "194400")) else - ((money_of_cents_string "227700") +$ - ((money_of_cents_string "33300") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "143600") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "172900")) else - ((money_of_cents_string "202200") +$ - ((money_of_cents_string "29300") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "134100") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "160900")) else - ((money_of_cents_string "187700") +$ - ((money_of_cents_string "26800") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1102; start_column=5; - end_line=1105; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2001) (7) (1))) && - ((param_ <@ (date_of_numbers (2001) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "202500") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "244300")) else - ((money_of_cents_string "286100") +$ - ((money_of_cents_string "41800") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "180700") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "217500")) else - ((money_of_cents_string "254300") +$ - ((money_of_cents_string "36800") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "168700") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "202300")) else - ((money_of_cents_string "235900") +$ - ((money_of_cents_string "33600") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1145; start_column=5; - end_line=1148; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2002) (1) (1))) && - ((param_ <@ (date_of_numbers (2002) (6) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "30871") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "37243")) else - ((money_of_cents_string "43615") +$ - ((money_of_cents_string "6372") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "27548") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33148")) else - ((money_of_cents_string "38768") +$ - ((money_of_cents_string "5610") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25718") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30840")) else - ((money_of_cents_string "35962") +$ - ((money_of_cents_string "5122") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1191; start_column=5; - end_line=1194; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2001) (7) (1))) && - ((param_ <@ (date_of_numbers (2001) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "163000") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "196700")) else - ((money_of_cents_string "230400") +$ - ((money_of_cents_string "33700") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "145300") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "175000")) else - ((money_of_cents_string "204700") +$ - ((money_of_cents_string "29700") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "135700") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "162800")) else - ((money_of_cents_string "189900") +$ - ((money_of_cents_string "27100") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))) *$ - taux_francs_vers_euros_)); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1234; start_column=5; - end_line=1237; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2002) (1) (1))) && - ((param_ <@ (date_of_numbers (2002) (6) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24849") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29987")) else - ((money_of_cents_string "35125") +$ - ((money_of_cents_string "5138") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "22151") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "26679")) else - ((money_of_cents_string "31207") +$ - ((money_of_cents_string "4528") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "20687") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "24818")) else - ((money_of_cents_string "28949") +$ - ((money_of_cents_string "4131") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1279; start_column=5; - end_line=1282; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2002) (6) (30))) && - ((param_ <@ (date_of_numbers (2003) (6) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "31241") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "37689")) else - ((money_of_cents_string "44137") +$ - ((money_of_cents_string "6448") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "27879") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33556")) else - ((money_of_cents_string "39233") +$ - ((money_of_cents_string "5677") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26027") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31210")) else - ((money_of_cents_string "36393") +$ - ((money_of_cents_string "5183") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1323; start_column=5; - end_line=1326; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2002) (6) (30))) && - ((param_ <@ (date_of_numbers (2003) (6) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25147") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30347")) else - ((money_of_cents_string "35547") +$ - ((money_of_cents_string "5200") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "22417") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "26999")) else - ((money_of_cents_string "31581") +$ - ((money_of_cents_string "4582") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "20935") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "25116")) else - ((money_of_cents_string "29297") +$ - ((money_of_cents_string "4181") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1368; start_column=5; - end_line=1371; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2003) (6) (30))) && - ((param_ <@ (date_of_numbers (2005) (8) (31))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "31616") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "38141")) else - ((money_of_cents_string "44666") +$ - ((money_of_cents_string "6525") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "28214") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33959")) else - ((money_of_cents_string "39704") +$ - ((money_of_cents_string "5745") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26339") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31584")) else - ((money_of_cents_string "36829") +$ - ((money_of_cents_string "5245") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1412; start_column=5; - end_line=1415; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2003) (6) (30))) && - ((param_ <@ (date_of_numbers (2005) (8) (31))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25449") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30711")) else - ((money_of_cents_string "35973") +$ - ((money_of_cents_string "5262") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "22686") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "27323")) else - ((money_of_cents_string "31960") +$ - ((money_of_cents_string "4637") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "21186") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "25417")) else - ((money_of_cents_string "29648") +$ - ((money_of_cents_string "4231") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1457; start_column=5; - end_line=1460; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2005) (8) (31))) && - ((param_ <@ (date_of_numbers (2006) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "32185") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "38827")) else - ((money_of_cents_string "45469") +$ - ((money_of_cents_string "6642") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "28722") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "34570")) else - ((money_of_cents_string "40418") +$ - ((money_of_cents_string "5848") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26813") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "32152")) else - ((money_of_cents_string "37491") +$ - ((money_of_cents_string "5339") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1501; start_column=5; - end_line=1504; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2005) (8) (31))) && - ((param_ <@ (date_of_numbers (2006) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25907") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31264")) else - ((money_of_cents_string "36621") +$ - ((money_of_cents_string "5357") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "23094") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "27814")) else - ((money_of_cents_string "32534") +$ - ((money_of_cents_string "4720") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "21567") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "25874")) else - ((money_of_cents_string "30181") +$ - ((money_of_cents_string "4307") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1546; start_column=5; - end_line=1549; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2006) (12) (31))) && - ((param_ <@ (date_of_numbers (2007) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "33086") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "39914")) else - ((money_of_cents_string "46742") +$ - ((money_of_cents_string "6828") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29526") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "35538")) else - ((money_of_cents_string "41550") +$ - ((money_of_cents_string "6012") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "27564") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33052")) else - ((money_of_cents_string "38541") +$ - ((money_of_cents_string "5488") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1590; start_column=5; - end_line=1593; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2006) (12) (31))) && - ((param_ <@ (date_of_numbers (2007) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26632") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "32139")) else - ((money_of_cents_string "37646") +$ - ((money_of_cents_string "5507") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "23741") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "28593")) else - ((money_of_cents_string "33445") +$ - ((money_of_cents_string "4852") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "22171") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "36598")) else - ((money_of_cents_string "31026") +$ - ((money_of_cents_string "4428") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1635; start_column=5; - end_line=1638; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2007) (12) (31))) && - ((param_ <@ (date_of_numbers (2008) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "33999") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "41016")) else - ((money_of_cents_string "48032") +$ - ((money_of_cents_string "7016") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "30341") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "36519")) else - ((money_of_cents_string "42697") +$ - ((money_of_cents_string "6178") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "28325") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33964")) else - ((money_of_cents_string "39605") +$ - ((money_of_cents_string "5639") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1679; start_column=5; - end_line=1682; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2007) (12) (31))) && - ((param_ <@ (date_of_numbers (2008) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "27367") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33026")) else - ((money_of_cents_string "38685") +$ - ((money_of_cents_string "5659") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24396") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29382")) else - ((money_of_cents_string "34368") +$ - ((money_of_cents_string "4986") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "22783") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "27332")) else - ((money_of_cents_string "31882") +$ - ((money_of_cents_string "4550") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1724; start_column=5; - end_line=1727; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2008) (12) (31))) && - ((param_ <@ (date_of_numbers (2009) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "35002") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "42226")) else - ((money_of_cents_string "49449") +$ - ((money_of_cents_string "7223") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "31236") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "37596")) else - ((money_of_cents_string "43957") +$ - ((money_of_cents_string "6360") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29161") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "34966")) else - ((money_of_cents_string "40773") +$ - ((money_of_cents_string "5805") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1768; start_column=5; - end_line=1771; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2008) (12) (31))) && - ((param_ <@ (date_of_numbers (2009) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "28174") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "34000")) else - ((money_of_cents_string "39826") +$ - ((money_of_cents_string "5826") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25116") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30249")) else - ((money_of_cents_string "35382") +$ - ((money_of_cents_string "5133") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "23455") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "28138")) else - ((money_of_cents_string "32823") +$ - ((money_of_cents_string "4684") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1813; start_column=5; - end_line=1816; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2009) (12) (31))) && - ((param_ <@ (date_of_numbers (2010) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "35114") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "42361")) else - ((money_of_cents_string "49607") +$ - ((money_of_cents_string "7246") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "31336") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "37716")) else - ((money_of_cents_string "44098") +$ - ((money_of_cents_string "6380") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29254") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "35078")) else - ((money_of_cents_string "40903") +$ - ((money_of_cents_string "5824") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1857; start_column=5; - end_line=1860; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2009) (12) (31))) && - ((param_ <@ (date_of_numbers (2010) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "28264") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "34109")) else - ((money_of_cents_string "39953") +$ - ((money_of_cents_string "5845") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25196") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30346")) else - ((money_of_cents_string "35495") +$ - ((money_of_cents_string "5149") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "23530") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "28228")) else - ((money_of_cents_string "32928") +$ - ((money_of_cents_string "4699") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1902; start_column=5; - end_line=1905; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2010) (12) (31))) && - ((param_ <@ (date_of_numbers (2011) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "35500") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "42827")) else - ((money_of_cents_string "50153") +$ - ((money_of_cents_string "7326") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "31681") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "38131")) else - ((money_of_cents_string "44583") +$ - ((money_of_cents_string "6450") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29576") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "35464")) else - ((money_of_cents_string "41353") +$ - ((money_of_cents_string "5888") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1946; start_column=5; - end_line=1949; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2010) (12) (31))) && - ((param_ <@ (date_of_numbers (2011) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "28575") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "34484")) else - ((money_of_cents_string "40392") +$ - ((money_of_cents_string "5909") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25473") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30680")) else - ((money_of_cents_string "35885") +$ - ((money_of_cents_string "5206") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "23789") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "28539")) else - ((money_of_cents_string "33290") +$ - ((money_of_cents_string "4751") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=1991; start_column=5; - end_line=1994; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2011) (12) (31))) && - ((param_ <@ (date_of_numbers (2012) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "35855") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "43255")) else - ((money_of_cents_string "50655") +$ - ((money_of_cents_string "7399") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "31998") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "38512")) else - ((money_of_cents_string "45029") +$ - ((money_of_cents_string "6515") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29872") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "35819")) else - ((money_of_cents_string "41767") +$ - ((money_of_cents_string "5947") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2036; start_column=5; - end_line=2039; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2011) (12) (31))) && - ((param_ <@ (date_of_numbers (2012) (12) (31))) - && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "28861") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "34829")) else - ((money_of_cents_string "40796") +$ - ((money_of_cents_string "5968") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25728") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30987")) else - ((money_of_cents_string "36244") +$ - ((money_of_cents_string "5258") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24027") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "28824")) else - ((money_of_cents_string "33623") +$ - ((money_of_cents_string "4799") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2081; start_column=5; - end_line=2084; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2012) (12) (31))) && - ((param_ <@ (date_of_numbers (2014) (9) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "36626") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "44185")) else - ((money_of_cents_string "51744") +$ - ((money_of_cents_string "7558") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "32686") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "39340")) else - ((money_of_cents_string "45997") +$ - ((money_of_cents_string "6655") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "30514") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "36589")) else - ((money_of_cents_string "42665") +$ - ((money_of_cents_string "6075") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2125; start_column=5; - end_line=2128; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2012) (12) (31))) && - ((param_ <@ (date_of_numbers (2014) (9) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29482") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "35578")) else - ((money_of_cents_string "41673") +$ - ((money_of_cents_string "6096") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26281") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31653")) else - ((money_of_cents_string "37023") +$ - ((money_of_cents_string "5371") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24544") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29444")) else - ((money_of_cents_string "34346") +$ - ((money_of_cents_string "4902") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2170; start_column=5; - end_line=2173; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2014) (9) (30))) && - ((param_ <@ (date_of_numbers (2015) (9) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "36835") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "44437")) else - ((money_of_cents_string "52039") +$ - ((money_of_cents_string "7601") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "32872") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "39564")) else - ((money_of_cents_string "46259") +$ - ((money_of_cents_string "6693") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "30688") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "36798")) else - ((money_of_cents_string "42908") +$ - ((money_of_cents_string "6110") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2214; start_column=5; - end_line=2217; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2014) (9) (30))) && - ((param_ <@ (date_of_numbers (2015) (9) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29650") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "35781")) else - ((money_of_cents_string "41911") +$ - ((money_of_cents_string "6131") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26431") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31833")) else - ((money_of_cents_string "37234") +$ - ((money_of_cents_string "5402") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24684") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29612")) else - ((money_of_cents_string "34542") +$ - ((money_of_cents_string "4930") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2259; start_column=5; - end_line=2262; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2015) (9) (30))) && - ((param_ <@ (date_of_numbers (2017) (9) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "36864") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "44473")) else - ((money_of_cents_string "52081") +$ - ((money_of_cents_string "7607") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "32898") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "39596")) else - ((money_of_cents_string "46296") +$ - ((money_of_cents_string "6698") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "30713") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "36827")) else - ((money_of_cents_string "42942") +$ - ((money_of_cents_string "6115") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2303; start_column=5; - end_line=2306; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2015) (9) (30))) && - ((param_ <@ (date_of_numbers (2017) (9) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29674") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "35810")) else - ((money_of_cents_string "41945") +$ - ((money_of_cents_string "6136") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26452") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31858")) else - ((money_of_cents_string "37264") +$ - ((money_of_cents_string "5406") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24704") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29636")) else - ((money_of_cents_string "34570") +$ - ((money_of_cents_string "4934") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2348; start_column=5; - end_line=2351; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2017) (9) (30))) && - ((param_ <@ (date_of_numbers (2019) (9) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "37140") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "44807")) else - ((money_of_cents_string "52472") +$ - ((money_of_cents_string "7664") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "33145") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "39893")) else - ((money_of_cents_string "46643") +$ - ((money_of_cents_string "6748") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "30943") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "37103")) else - ((money_of_cents_string "43264") +$ - ((money_of_cents_string "6161") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2392; start_column=5; - end_line=2395; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2017) (9) (30))) && - ((param_ <@ (date_of_numbers (2019) (9) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29897") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "36079")) else - ((money_of_cents_string "42260") +$ - ((money_of_cents_string "6182") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26650") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "32097")) else - ((money_of_cents_string "37543") +$ - ((money_of_cents_string "5447") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24889") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29858")) else - ((money_of_cents_string "34829") +$ - ((money_of_cents_string "4971") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2437; start_column=5; - end_line=2439; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2019) (9) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> true - | NeufOuAncien.Ancien _ -> false) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "37252") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "44941")) else - ((money_of_cents_string "52629") +$ - ((money_of_cents_string "7687") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "33244") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "40013")) else - ((money_of_cents_string "46783") +$ - ((money_of_cents_string "6768") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "31036") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "37215")) else - ((money_of_cents_string "43394") +$ - ((money_of_cents_string "6179") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=684; start_column=11; - end_line=684; end_column=46; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'aide personnalisée au logement"; - "Déclarations des champs d'application"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2480; start_column=5; - end_line=2482; end_column=36; - law_headings=["Article 18"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((param_ >=@ (date_of_numbers (2019) (9) (30))) && - ((match anciennete_logement_ - with - | NeufOuAncien.Neuf _ -> false - | NeufOuAncien.Ancien _ -> true) && - (match type_pret_ - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> true - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29986") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "36187")) else - ((money_of_cents_string "42386") +$ - ((money_of_cents_string "6201") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26730") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "32193")) else - ((money_of_cents_string "37656") +$ - ((money_of_cents_string "5463") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1")))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24964") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29948")) else - ((money_of_cents_string "34934") +$ - ((money_of_cents_string "4986") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ -! - (integer_of_string "1"))))))))|]) - (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) + (fun (_: unit) -> false) + (fun (_: unit) -> raise EmptyError))|]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=684; start_column=3; + end_line=684; end_column=76; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'aide personnalisée au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} false)) + (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -12318,7 +14632,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3218; start_column=14; end_line=3218; end_column=36; + start_line=3279; start_column=14; end_line=3279; end_column=36; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12361,8 +14675,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3470; start_column=5; - end_line=3470; end_column=41; + start_line=3531; start_column=5; + end_line=3531; end_column=40; law_headings=["Article D832-17"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12370,15 +14684,16 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - (date_signature_pret_ >=@ + (o_gte_dat_dat date_signature_pret_ (date_of_numbers (1999) (6) (30))))) (fun (_: unit) -> - (mensualite_principale_ +$ - montant_forfaitaire_charges_d832_10_) -$ param_))|]) + o_sub_mon_mon + (o_add_mon_mon mensualite_principale_ + montant_forfaitaire_charges_d832_10_) param_))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3481; start_column=14; - end_line=3481; end_column=44; + start_line=3542; start_column=14; + end_line=3542; end_column=44; law_headings=["Article D832-17"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12386,7 +14701,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - true)) (fun (_: unit) -> mensualite_principale_ -$ param_)) + true)) + (fun (_: unit) -> o_sub_mon_mon mensualite_principale_ param_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -12425,8 +14741,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3305; start_column=5; - end_line=3305; end_column=44; + start_line=3366; start_column=5; + end_line=3366; end_column=44; law_headings=["Article D832-14"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12436,7 +14752,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Code de la construction et de l'habitation"]} local_habite_premiere_fois_beneficiaire_)) (fun (_: unit) -> - (let plafond_signature_ : _ = ((log_end_call + (let plafond_signature_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementAccessionPropriété"; "calcul_plafond_mensualité_d832_10_3"] ((log_variable_definition @@ -12451,7 +14767,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "calcul_plafond_mensualité_d832_10_3"; "input"] (embed_date) date_signature_pret_))))))) in - (let plafond_entree_ : _ = ((log_end_call + (let plafond_entree_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementAccessionPropriété"; "calcul_plafond_mensualité_d832_10_3"] ((log_variable_definition @@ -12466,11 +14782,11 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "calcul_plafond_mensualité_d832_10_3"; "input"] (embed_date) date_entree_logement_))))))) in - ( if (plafond_signature_ <$ plafond_entree_) then - plafond_entree_ else plafond_signature_)))))|]) + ( if (o_lt_mon_mon plafond_signature_ plafond_entree_) + then plafond_entree_ else plafond_signature_)))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3285; start_column=14; end_line=3285; end_column=42; + start_line=3346; start_column=14; end_line=3346; end_column=42; law_headings=["Article D832-14"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12507,7 +14823,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna (embed_money) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3426; start_column=14; end_line=3426; end_column=75; + start_line=3487; start_column=14; end_line=3487; end_column=75; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12518,7 +14834,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3426; start_column=14; end_line=3426; end_column=75; + start_line=3487; start_column=14; end_line=3487; end_column=75; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12530,7 +14846,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3426; start_column=14; end_line=3426; end_column=75; + start_line=3487; start_column=14; end_line=3487; end_column=75; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12545,7 +14861,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3425; start_column=14; end_line=3425; end_column=69; + start_line=3486; start_column=14; end_line=3486; end_column=69; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12556,7 +14872,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3425; start_column=14; end_line=3425; end_column=69; + start_line=3486; start_column=14; end_line=3486; end_column=69; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12568,7 +14884,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3425; start_column=14; end_line=3425; end_column=69; + start_line=3486; start_column=14; end_line=3486; end_column=69; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12583,7 +14899,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna (embed_decimal) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3428; start_column=14; end_line=3428; end_column=70; + start_line=3489; start_column=14; end_line=3489; end_column=70; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12594,7 +14910,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3428; start_column=14; end_line=3428; end_column=70; + start_line=3489; start_column=14; end_line=3489; end_column=70; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12606,7 +14922,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3428; start_column=14; end_line=3428; end_column=70; + start_line=3489; start_column=14; end_line=3489; end_column=70; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12621,12 +14937,12 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ["CalculAidePersonnaliséeLogementAccessionPropriété"; "calcul_équivalence_loyer_minimale"; "CalculÉquivalenceLoyerMinimale"] calcul_equivalence_loyer_minimale) - {CalculEquivalenceLoyerMinimaleIn.ressources_menage_arrondies_in = - calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_; - CalculEquivalenceLoyerMinimaleIn.condition_2_du_832_25_in = - calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_; - CalculEquivalenceLoyerMinimaleIn.n_nombre_parts_d832_25_in = - calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_})) in + ({CalculEquivalenceLoyerMinimaleIn.ressources_menage_arrondies_in = + calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_; + CalculEquivalenceLoyerMinimaleIn.condition_2_du_832_25_in = + calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_; + CalculEquivalenceLoyerMinimaleIn.n_nombre_parts_d832_25_in = + calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_}))) in let calcul_equivalence_loyer_minimale_dot_montant_: money = result_.CalculEquivalenceLoyerMinimale.montant in let coefficient_prise_en_charge_d832_10_formule_: decimal = (log_variable_definition ["CalculAidePersonnaliséeLogementAccessionPropriété"; @@ -12641,7 +14957,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3133; start_column=14; end_line=3133; end_column=49; + start_line=3194; start_column=14; end_line=3194; end_column=49; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12651,9 +14967,9 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (decimal_of_string "0.95") -& - (ressources_menage_arrondies_ /$ - (coefficient_multiplicateur_d832_11_ *$ + o_sub_rat_rat (decimal_of_string "0.95") + (o_div_mon_mon ressources_menage_arrondies_ + (o_mult_mon_rat coefficient_multiplicateur_d832_11_ n_nombre_parts_d832_11_)))) with EmptyError -> (raise (NoValueProvided @@ -12678,8 +14994,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3492; start_column=14; - end_line=3492; end_column=55; + start_line=3553; start_column=14; + end_line=3553; end_column=55; law_headings=["Article D832-17"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12689,7 +15005,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let depense_nette_minimale_ : _ = ((log_end_call + (let depense_nette_minimale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementAccessionPropriété"; "dépense_nette_minimale_d832_10"] ((log_variable_definition @@ -12705,11 +15021,12 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna (embed_money) param_))))))) in ( if - (depense_nette_minimale_ <=$ - (ressources_menage_avec_d832_18_ *$ + (o_lte_mon_mon depense_nette_minimale_ + (o_mult_mon_rat ressources_menage_avec_d832_18_ coefficient_multiplicateur_d832_17_3_)) then - ((ressources_menage_avec_d832_18_ *$ - coefficient_multiplicateur_d832_17_3_) -$ + (o_sub_mon_mon + (o_mult_mon_rat ressources_menage_avec_d832_18_ + coefficient_multiplicateur_d832_17_3_) depense_nette_minimale_) else (money_of_cents_string "0"))))) with @@ -12769,48 +15086,52 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=1165; start_column=14; - end_line=1165; end_column=42; + start_line=1290; start_column=14; + end_line=1290; end_column=42; law_headings=["Article 24"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"; - "Articles valables du 1er octobre 2020 au 1er octobre 2021"; - "Archives législatives et réglementaires"]} - ((date_courante_ <@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ >=@ + "Articles valables du 1er octobre 2020 au 31 septembre 2021"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_gte_dat_dat date_courante_ (date_of_numbers (2020) (10) (1)))))) (fun (_: unit) -> if copropriete_ then - (plafond_mensualite_d832_10_3_base_ *$ + (o_mult_mon_rat + plafond_mensualite_d832_10_3_base_ (decimal_of_string "0.75")) else plafond_mensualite_d832_10_3_base_))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=444; start_column=14; - end_line=444; end_column=42; + start_line=497; start_column=14; + end_line=497; end_column=42; law_headings=["Article 24"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> if copropriete_ then - (plafond_mensualite_d832_10_3_base_ *$ + (o_mult_mon_rat + plafond_mensualite_d832_10_3_base_ (decimal_of_string "0.75")) else plafond_mensualite_d832_10_3_base_))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=2609; start_column=14; - end_line=2609; end_column=42; - law_headings=["Article 24"; - "Chapitre IV : Calcul de l'aide personnalisée au logement en secteur accession"; + start_line=2384; start_column=14; + end_line=2384; end_column=42; + law_headings=["Article 24"; "Article 18"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> if copropriete_ then - (plafond_mensualite_d832_10_3_base_ *$ + (o_mult_mon_rat plafond_mensualite_d832_10_3_base_ (decimal_of_string "0.75")) else plafond_mensualite_d832_10_3_base_))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) @@ -12828,7 +15149,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=680; start_column=10; end_line=680; end_column=29; + start_line=680; start_column=12; end_line=680; end_column=31; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -12836,16 +15157,16 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=680; start_column=10; - end_line=680; end_column=29; + start_line=680; start_column=12; + end_line=680; end_column=31; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3365; start_column=5; - end_line=3377; end_column=77; + start_line=3426; start_column=5; + end_line=3438; end_column=77; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12853,13 +15174,14 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - ((match type_travaux_logement_ - with - | TypeTravauxLogementD83215.TravauxPourAcquisitionD832_15_1 _ -> - true - | TypeTravauxLogementD83215.TravauxSurLogementDejaAcquisD832_15_2 _ -> - false - | TypeTravauxLogementD83215.PasDeTravaux _ -> false) || + (o_or + (match type_travaux_logement_ + with + | TypeTravauxLogementD83215.TravauxPourAcquisitionD832_15_1 _ -> + true + | TypeTravauxLogementD83215.TravauxSurLogementDejaAcquisD832_15_2 _ -> + false + | TypeTravauxLogementD83215.PasDeTravaux _ -> false) (match type_travaux_logement_ with | TypeTravauxLogementD83215.TravauxPourAcquisitionD832_15_1 _ -> @@ -12868,45 +15190,54 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna false | TypeTravauxLogementD83215.PasDeTravaux _ -> true)))) (fun (_: unit) -> - (let ressources_menage_arrondies_ : _ = - (decimal_of_money ressources_menage_arrondies_) + (let ressources_menage_arrondies_ : decimal = + (o_torat_mon ressources_menage_arrondies_) in - (let montant_limite_tranches_d832_15_1_ : _ = - (decimal_of_money montant_limite_tranches_d832_15_1_) + (let montant_limite_tranches_d832_15_1_ : decimal = + (o_torat_mon montant_limite_tranches_d832_15_1_) in - (money_of_decimal - ((( if - (ressources_menage_arrondies_ >=& - (montant_limite_tranches_d832_15_1_ *& - n_nombre_parts_d832_11_)) then - ((ressources_menage_arrondies_ -& - (montant_limite_tranches_d832_15_1_ *& - n_nombre_parts_d832_11_)) *& - taux_tranche_superieure_d832_15_1_) else - (decimal_of_string "0.")) +& - ( if - (ressources_menage_arrondies_ <=& - (montant_limite_tranches_d832_15_1_ *& - n_nombre_parts_d832_11_)) then - (ressources_menage_arrondies_ *& - taux_tranche_inferieure_d832_15_1_) else - ((montant_limite_tranches_d832_15_1_ *& - n_nombre_parts_d832_11_) *& - taux_tranche_inferieure_d832_15_1_))) /& + (o_tomoney_rat + (o_div_rat_rat + (o_add_rat_rat + ( if + (o_gte_rat_rat ressources_menage_arrondies_ + (o_mult_rat_rat + montant_limite_tranches_d832_15_1_ + n_nombre_parts_d832_11_)) then + (o_mult_rat_rat + (o_sub_rat_rat + ressources_menage_arrondies_ + (o_mult_rat_rat + montant_limite_tranches_d832_15_1_ + n_nombre_parts_d832_11_)) + taux_tranche_superieure_d832_15_1_) else + (decimal_of_string "0.")) + ( if + (o_lte_rat_rat ressources_menage_arrondies_ + (o_mult_rat_rat + montant_limite_tranches_d832_15_1_ + n_nombre_parts_d832_11_)) then + (o_mult_rat_rat ressources_menage_arrondies_ + taux_tranche_inferieure_d832_15_1_) else + (o_mult_rat_rat + (o_mult_rat_rat + montant_limite_tranches_d832_15_1_ + n_nombre_parts_d832_11_) + taux_tranche_inferieure_d832_15_1_))) (decimal_of_string "12."))))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=680; start_column=10; - end_line=680; end_column=29; + start_line=680; start_column=12; + end_line=680; end_column=31; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3420; start_column=5; - end_line=3420; end_column=75; + start_line=3481; start_column=5; + end_line=3481; end_column=75; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12927,25 +15258,25 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=680; start_column=10; end_line=680; end_column=29; + start_line=680; start_column=12; end_line=680; end_column=31; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in - let coefficient_prise_en_charge_d832_10_arrondi_: decimal = (log_variable_definition + let coefficient_prise_en_charge_d832_10_coeff_arrondi_: decimal = (log_variable_definition ["CalculAidePersonnaliséeLogementAccessionPropriété"; - "coefficient_prise_en_charge_d832_10_arrondi"] (embed_decimal) ( + "coefficient_prise_en_charge_d832_10_coeff_arrondi"] (embed_decimal) ( try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=688; start_column=10; end_line=688; end_column=17; + start_line=688; start_column=10; end_line=688; end_column=23; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3149; start_column=14; end_line=3149; end_column=49; + start_line=3210; start_column=14; end_line=3210; end_column=49; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12955,14 +15286,17 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (decimal_round - ((coefficient_prise_en_charge_d832_10_formule_ -& - (decimal_of_string "0.005")) *& (decimal_of_string "100."))) - /& (decimal_of_string "100."))) + o_div_rat_rat + (o_round_rat + (o_mult_rat_rat + (o_sub_rat_rat + coefficient_prise_en_charge_d832_10_formule_ + (decimal_of_string "0.005")) + (decimal_of_string "100."))) (decimal_of_string "100."))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=688; start_column=10; end_line=688; end_column=17; + start_line=688; start_column=10; end_line=688; end_column=23; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -12982,8 +15316,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3083; start_column=14; - end_line=3083; end_column=36; + start_line=3144; start_column=14; + end_line=3144; end_column=36; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12993,7 +15327,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementAccessionPropriété"; "traitement_aide_finale_minoration_forfaitaire"] ((log_variable_definition @@ -13008,8 +15342,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "traitement_aide_finale_minoration_forfaitaire"; "input"] (embed_money) param_))))))) in - (let aide_finale_ : _ = - (aide_finale_ -$ ((log_end_call + (let aide_finale_ : money = + (o_sub_mon_mon aide_finale_ ((log_end_call ["CalculAidePersonnaliséeLogementAccessionPropriété"; "abattement_dépense_nette_minimale_d832_10"] ((log_variable_definition @@ -13024,8 +15358,9 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "abattement_dépense_nette_minimale_d832_10"; "input"] (embed_money) aide_finale_)))))))) in - ( if (aide_finale_ >=$ (money_of_cents_string "0")) then - aide_finale_ else (money_of_cents_string "0")))))) + ( if + (o_gte_mon_mon aide_finale_ (money_of_cents_string "0")) + then aide_finale_ else (money_of_cents_string "0")))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -13048,14 +15383,14 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=679; start_column=10; end_line=679; end_column=29; + start_line=679; start_column=12; end_line=679; end_column=31; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3044; start_column=14; end_line=3044; end_column=33; + start_line=3105; start_column=14; end_line=3105; end_column=33; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -13066,14 +15401,14 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna true)) (fun (_: unit) -> if - (mensualite_principale_ >$ + (o_gt_mon_mon mensualite_principale_ plafond_mensualite_d832_10_3_coproprietaires_) then plafond_mensualite_d832_10_3_coproprietaires_ else mensualite_principale_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=679; start_column=10; end_line=679; end_column=29; + start_line=679; start_column=12; end_line=679; end_column=31; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -13091,7 +15426,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3152; start_column=14; end_line=3152; end_column=49; + start_line=3213; start_column=14; end_line=3213; end_column=49; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -13102,9 +15437,10 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna true)) (fun (_: unit) -> if - (coefficient_prise_en_charge_d832_10_arrondi_ >=& + (o_gte_rat_rat + coefficient_prise_en_charge_d832_10_coeff_arrondi_ (decimal_of_string "0.95")) then (decimal_of_string "0.95") - else coefficient_prise_en_charge_d832_10_arrondi_)) + else coefficient_prise_en_charge_d832_10_coeff_arrondi_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -13129,8 +15465,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3097; start_column=14; - end_line=3097; end_column=36; + start_line=3158; start_column=14; + end_line=3158; end_column=36; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -13140,7 +15476,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementAccessionPropriété"; "traitement_aide_finale_abattement"] ((log_variable_definition @@ -13155,7 +15491,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "traitement_aide_finale_abattement"; "input"] (embed_money) param_))))))) in - (let crds_ : _ = ((log_end_call + (let crds_ : money = ((log_end_call ["ContributionsSocialesAidesPersonnelleLogement"; "montant"] ((log_variable_definition ["ContributionsSocialesAidesPersonnelleLogement"; @@ -13166,16 +15502,17 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ["ContributionsSocialesAidesPersonnelleLogement"; "montant"; "input"] (embed_money) aide_finale_))))))) in - (let aide_finale_moins_crds_arrondie_ : _ = - (money_round - ((aide_finale_ -$ crds_) -$ (money_of_cents_string - "50"))) + (let aide_finale_moins_crds_arrondie_ : money = + (o_round_mon + (o_sub_mon_mon (o_sub_mon_mon aide_finale_ crds_) + (money_of_cents_string "50"))) in ( if - ((aide_finale_moins_crds_arrondie_ +$ crds_) >=$ + (o_gte_mon_mon + (o_add_mon_mon aide_finale_moins_crds_arrondie_ crds_) (money_of_cents_string "0")) then - (aide_finale_moins_crds_arrondie_ +$ crds_) else - (money_of_cents_string "0"))))))) + (o_add_mon_mon aide_finale_moins_crds_arrondie_ crds_) + else (money_of_cents_string "0"))))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -13198,14 +15535,14 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=711; start_column=10; end_line=711; end_column=29; + start_line=711; start_column=12; end_line=711; end_column=31; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3024; start_column=14; end_line=3024; end_column=33; + start_line=3085; start_column=14; end_line=3085; end_column=33; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -13215,18 +15552,20 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = - (((mensualite_eligible_ +$ - montant_forfaitaire_charges_d832_10_) -$ - mensualite_minimale_) *$ + (let aide_finale_ : money = + (o_mult_mon_rat + (o_sub_mon_mon + (o_add_mon_mon mensualite_eligible_ + montant_forfaitaire_charges_d832_10_) + mensualite_minimale_) coefficient_prise_en_charge_d832_10_seuil_) in - ( if (aide_finale_ <$ (money_of_cents_string "0")) then + ( if (o_lt_mon_mon aide_finale_ (money_of_cents_string "0")) then (money_of_cents_string "0") else aide_finale_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=711; start_column=10; end_line=711; end_column=29; + start_line=711; start_column=12; end_line=711; end_column=31; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -13246,8 +15585,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3117; start_column=14; - end_line=3117; end_column=36; + start_line=3178; start_column=14; + end_line=3178; end_column=36; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -13257,7 +15596,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAidePersonnaliséeLogementAccessionPropriété"; "traitement_aide_finale_contributions_sociales_arrondi"] ((log_variable_definition @@ -13272,8 +15611,9 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "traitement_aide_finale_contributions_sociales_arrondi"; "input"] (embed_money) param_))))))) in - ( if (aide_finale_ <$ montant_minimal_aide_d832_10_) then - (money_of_cents_string "0") else aide_finale_)))) + ( if + (o_lt_mon_mon aide_finale_ montant_minimal_aide_d832_10_) + then (money_of_cents_string "0") else aide_finale_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -13471,11 +15811,12 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (match ((menage_.Menage.logement).Logement.proprietaire) - with - | ParentOuAutre.DemandeurOuConjointOuParentOuViaPartsSocietes parts_ -> - true - | ParentOuAutre.Autre _ -> false) || + o_or + (match ((menage_.Menage.logement).Logement.proprietaire) + with + | ParentOuAutre.DemandeurOuConjointOuParentOuViaPartsSocietes parts_ -> + true + | ParentOuAutre.Autre _ -> false) (match ((menage_.Menage.logement).Logement.usufruit) with | ParentOuAutre.DemandeurOuConjointOuParentOuViaPartsSocietes parts_ -> @@ -13516,7 +15857,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - (not + (o_not ((menage_.Menage.logement).Logement.logement_decent_l89_462)))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken @@ -13616,58 +15957,63 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - (let nombre_personnes_logement_ : _ = - (((match (menage_.Menage.situation_familiale) - with - | SituationFamiliale.Celibataire _ -> - (integer_of_string "1") - | SituationFamiliale.Maries _ -> - (integer_of_string "2") - | SituationFamiliale.Pacses _ -> - (integer_of_string "2") - | SituationFamiliale.Concubins _ -> - (integer_of_string "2") - | SituationFamiliale.CelibataireSepareDeFait _ -> - (integer_of_string "1") - | SituationFamiliale.ConcubinageDontSepareDeFait _ -> - (integer_of_string "2")) +! - (menage_.Menage.nombre_autres_occupants_logement)) - +! - (array_length - (menage_.Menage.personnes_a_charge))) + (let nombre_personnes_logement_ : integer = + (o_add_int_int + (o_add_int_int + (match (menage_.Menage.situation_familiale) + with + | SituationFamiliale.Celibataire _ -> + (integer_of_string "1") + | SituationFamiliale.Maries _ -> + (integer_of_string "2") + | SituationFamiliale.Pacses _ -> + (integer_of_string "2") + | SituationFamiliale.Concubins _ -> + (integer_of_string "2") + | SituationFamiliale.CelibataireSepareDeFait _ -> + (integer_of_string "1") + | SituationFamiliale.ConcubinageDontSepareDeFait _ -> + (integer_of_string "2")) + (menage_.Menage.nombre_autres_occupants_logement)) + (o_length (menage_.Menage.personnes_a_charge))) in (let condition_logement_surface_minimale_sans_seuil_m_carres_ - : _ = - ((match (menage_.Menage.situation_familiale) - with - | SituationFamiliale.Celibataire _ -> - (integer_of_string "9") - | SituationFamiliale.Maries _ -> - (integer_of_string "16") - | SituationFamiliale.Pacses _ -> - (integer_of_string "16") - | SituationFamiliale.Concubins _ -> - (integer_of_string "16") - | SituationFamiliale.CelibataireSepareDeFait _ -> - (integer_of_string "9") - | SituationFamiliale.ConcubinageDontSepareDeFait _ -> - (integer_of_string "16")) +! - (((menage_.Menage.nombre_autres_occupants_logement) - +! - (array_length - (menage_.Menage.personnes_a_charge))) - *! (integer_of_string "9"))) + : integer = + (o_add_int_int + (match (menage_.Menage.situation_familiale) + with + | SituationFamiliale.Celibataire _ -> + (integer_of_string "9") + | SituationFamiliale.Maries _ -> + (integer_of_string "16") + | SituationFamiliale.Pacses _ -> + (integer_of_string "16") + | SituationFamiliale.Concubins _ -> + (integer_of_string "16") + | SituationFamiliale.CelibataireSepareDeFait _ -> + (integer_of_string "9") + | SituationFamiliale.ConcubinageDontSepareDeFait _ -> + (integer_of_string "16")) + (o_mult_int_int + (o_add_int_int + (menage_.Menage.nombre_autres_occupants_logement) + (o_length + (menage_.Menage.personnes_a_charge))) + (integer_of_string "9"))) in ( if - ((condition_logement_surface_minimale_sans_seuil_m_carres_ - >=! (integer_of_string "70")) && - (nombre_personnes_logement_ >=! + (o_and + (o_gte_int_int + condition_logement_surface_minimale_sans_seuil_m_carres_ + (integer_of_string "70")) + (o_gte_int_int nombre_personnes_logement_ (integer_of_string "8"))) then - (((menage_.Menage.logement).Logement.surface_m_carres) - >=! (integer_of_string "70")) else - (((menage_.Menage.logement).Logement.surface_m_carres) - >=! + (o_gte_int_int + ((menage_.Menage.logement).Logement.surface_m_carres) + (integer_of_string "70")) else + (o_gte_int_int + ((menage_.Menage.logement).Logement.surface_m_carres) condition_logement_surface_minimale_sans_seuil_m_carres_)))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken @@ -13789,8 +16135,8 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "OuvertureDroitsRetraite"] ((log_begin_call ["ÉligibilitéAidesPersonnelleLogement"; "ouverture_droits_retraite"; "OuvertureDroitsRetraite"] ouverture_droits_retraite) - {OuvertureDroitsRetraiteIn.date_naissance_assure_in = - ouverture_droits_retraite_dot_date_naissance_assure_})) in + ({OuvertureDroitsRetraiteIn.date_naissance_assure_in = + ouverture_droits_retraite_dot_date_naissance_assure_}))) in let ouverture_droits_retraite_dot_age_ouverture_droit_: duration = result_.OuvertureDroitsRetraite.age_ouverture_droit in let patrimoine_total_demandeur_: money = (log_variable_definition ["ÉligibilitéAidesPersonnelleLogement"; "patrimoine_total_demandeur"] @@ -13813,8 +16159,8 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - ((demandeur_.Demandeur.patrimoine).Patrimoine.produisant_revenu_periode_r822_3_3_r822_4) - +$ + o_add_mon_mon + ((demandeur_.Demandeur.patrimoine).Patrimoine.produisant_revenu_periode_r822_3_3_r822_4) ((demandeur_.Demandeur.patrimoine).Patrimoine.ne_produisant_pas_revenu_periode_r822_3_3_r822_4))) with EmptyError -> (raise (NoValueProvided @@ -13892,7 +16238,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_sécurité_sociale.catala_fr"; start_line=329; start_column=5; - end_line=330; end_column=35; + end_line=330; end_column=34; law_headings=["Article D815-1"; "Section 1 : Ouverture du droit et liquidation de l'allocation de solidarité aux personnes âgées"; "Chapitre 5 : Allocation de solidarité aux personnes âgées"; @@ -13900,8 +16246,11 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Livre VIII : Allocations aux personnes âgées - Allocation aux adultes handicapés - Aides à l'emploi pour la garde des jeunes enfants - Protection complémentaire en matière de santé"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((date_courante_ >=@ (date_of_numbers (2018) (1) (4))) && - (date_courante_ <@ (date_of_numbers (2019) (1) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2018) (1) (4))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1)))))) (fun (_: unit) -> money_of_cents_string "999840")); (fun (_: unit) -> handle_default @@ -13914,7 +16263,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_sécurité_sociale.catala_fr"; start_line=334; start_column=5; - end_line=335; end_column=35; + end_line=335; end_column=34; law_headings=["Article D815-1"; "Section 1 : Ouverture du droit et liquidation de l'allocation de solidarité aux personnes âgées"; "Chapitre 5 : Allocation de solidarité aux personnes âgées"; @@ -13922,8 +16271,11 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Livre VIII : Allocations aux personnes âgées - Allocation aux adultes handicapés - Aides à l'emploi pour la garde des jeunes enfants - Protection complémentaire en matière de santé"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((date_courante_ >=@ (date_of_numbers (2019) (1) (1))) && - (date_courante_ <@ (date_of_numbers (2020) (1) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1)))))) (fun (_: unit) -> money_of_cents_string "1041840")); (fun (_: unit) -> handle_default @@ -13936,7 +16288,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_sécurité_sociale.catala_fr"; start_line=339; start_column=5; - end_line=340; end_column=35; + end_line=340; end_column=34; law_headings=["Article D815-1"; "Section 1 : Ouverture du droit et liquidation de l'allocation de solidarité aux personnes âgées"; "Chapitre 5 : Allocation de solidarité aux personnes âgées"; @@ -13944,8 +16296,11 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Livre VIII : Allocations aux personnes âgées - Allocation aux adultes handicapés - Aides à l'emploi pour la garde des jeunes enfants - Protection complémentaire en matière de santé"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((date_courante_ >=@ (date_of_numbers (2020) (1) (4))) && - (date_courante_ <@ (date_of_numbers (2021) (1) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (4))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (1) (1)))))) (fun (_: unit) -> money_of_cents_string "1083840")); (fun (_: unit) -> handle_default @@ -13957,12 +16312,35 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/autres_sources.catala_fr"; - start_line=60; start_column=5; - end_line=61; end_column=34; + start_line=58; start_column=5; + end_line=59; end_column=33; + law_headings=["Circulaire de la CNAV 2023-3 du 09/01/2022 \"Revalorisation à compter du 1er janvier 2023\""; + "Montants revalorisés de l'allocation de solidarité aux personnes âgées"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2023) (1) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2024) (1) (1)))))) + (fun (_: unit) -> money_of_cents_string "1153302")); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=317; start_column=11; + end_line=317; end_column=41; + law_headings=["Éligibilité aux aides personnelles au logement"; + "Déclarations des champs d'application"; + "Prologue : aides au logement"]} ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/autres_sources.catala_fr"; + start_line=90; start_column=5; + end_line=91; end_column=33; law_headings=["Circulaire de la CNAV 2022-3 du 11/01/2022 \"Revalorisation à compter du 1er janvier 2022\""; "Montants revalorisés de l'allocation de solidarité aux personnes âgées"]} - ((date_courante_ >=@ (date_of_numbers (2022) (1) (1))) && - (date_courante_ <@ (date_of_numbers (2023) (1) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (1) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2023) (1) (1)))))) (fun (_: unit) -> money_of_cents_string "1100144")); (fun (_: unit) -> handle_default @@ -13974,12 +16352,15 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/autres_sources.catala_fr"; - start_line=93; start_column=5; - end_line=94; end_column=34; + start_line=123; start_column=5; + end_line=124; end_column=33; law_headings=["Circulaire de la CNAV 2021-1 du 11/01/2021 \"Revalorisation à compter du 1er janvier 2021\""; "Montants revalorisés de l'allocation de solidarité aux personnes âgées"]} - ((date_courante_ >=@ (date_of_numbers (2021) (1) (1))) && - (date_courante_ <@ (date_of_numbers (2022) (1) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (1) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (1) (1)))))) (fun (_: unit) -> money_of_cents_string "1088175"))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with @@ -14031,9 +16412,12 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme with | LoueOuSousLoueADesTiers.Non _ -> true | LoueOuSousLoueADesTiers.Oui personne_ -> - ((((personne_.PersonneSousLocation.date_naissance_personne_sous_location) - +@ (duration_of_numbers (30) (0) (0))) - >@ date_courante_) || + (o_or + (o_gt_dat_dat + (o_add_dat_dur + (personne_.PersonneSousLocation.date_naissance_personne_sous_location) + (duration_of_numbers (30) (0) (0))) + date_courante_) (personne_.PersonneSousLocation.conforme_article_l442_1))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken @@ -14104,29 +16488,32 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; start_line=171; start_column=5; - end_line=177; end_column=66; + end_line=177; end_column=65; law_headings=["Article L822-3"; "Chapitre II : Conditions générales d'attribution"; "Titre II : Dispositions communes aux aides personnelles au logement"; "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - (usufruit_ou_propriete_famille_ && - (((match - ((menage_.Menage.logement).Logement.proprietaire) - with - | ParentOuAutre.DemandeurOuConjointOuParentOuViaPartsSocietes parts_ -> - parts_ - | ParentOuAutre.Autre _ -> - (decimal_of_string "0.")) <& - seuil_l822_3_parts_propriete_) && - ((match - ((menage_.Menage.logement).Logement.usufruit) - with - | ParentOuAutre.DemandeurOuConjointOuParentOuViaPartsSocietes parts_ -> - parts_ - | ParentOuAutre.Autre _ -> - (decimal_of_string "0.")) <& + (o_and usufruit_ou_propriete_famille_ + (o_and + (o_lt_rat_rat + (match + ((menage_.Menage.logement).Logement.proprietaire) + with + | ParentOuAutre.DemandeurOuConjointOuParentOuViaPartsSocietes parts_ -> + parts_ + | ParentOuAutre.Autre _ -> + (decimal_of_string "0.")) + seuil_l822_3_parts_propriete_) + (o_lt_rat_rat + (match + ((menage_.Menage.logement).Logement.usufruit) + with + | ParentOuAutre.DemandeurOuConjointOuParentOuViaPartsSocietes parts_ -> + parts_ + | ParentOuAutre.Autre _ -> + (decimal_of_string "0.")) seuil_l822_3_parts_usufruit_))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken @@ -14315,13 +16702,15 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - (Array.fold_left - (fun (acc_: bool) (prestation_: _) -> - acc_ || - ((prestation_ = - (PrestationRecue.AllocationSoutienEnfantHandicape - ())) || - (prestation_ = + (o_fold + (fun (acc_: bool) + (prestation_: PrestationRecue.t) -> + o_or acc_ + (o_or + (o_eq prestation_ + (PrestationRecue.AllocationSoutienEnfantHandicape + ())) + (o_eq prestation_ (PrestationRecue.AllocationAdulteHandicape ())))) false (menage_.Menage.prestations_recues)))) @@ -14329,7 +16718,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; start_line=944; start_column=5; - end_line=944; end_column=59; + end_line=944; end_column=58; law_headings=["Article R822-22"; "Sous-section 4 : Prise en compte du patrimoine"; "Section 2 : Conditions relatives aux ressources"; @@ -14338,7 +16727,8 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - (patrimoine_total_demandeur_ >=$ seuil_l822_5_patrimoine_))) + (o_gte_mon_mon patrimoine_total_demandeur_ + seuil_l822_5_patrimoine_))) (fun (_: unit) -> (demandeur_.Demandeur.patrimoine).Patrimoine.ne_produisant_pas_revenu_periode_r822_3_3_r822_4))|]) (fun (_: unit) -> (log_decision_taken @@ -14352,9 +16742,10 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - if (patrimoine_total_demandeur_ >$ seuil_l822_5_patrimoine_) - then patrimoine_total_demandeur_ else - (money_of_cents_string "0"))) + if + (o_gt_mon_mon patrimoine_total_demandeur_ + seuil_l822_5_patrimoine_) then patrimoine_total_demandeur_ + else (money_of_cents_string "0"))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -14398,7 +16789,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - (condition_non_ouverture_l822_8_ || + (o_or condition_non_ouverture_l822_8_ condition_non_ouverture_l822_9_decence_logement_))) (fun (_: unit) -> false))|]) (fun (_: unit) -> (log_decision_taken @@ -14410,9 +16801,9 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - (condition_logement_residence_principale_ && - (condition_logement_mode_occupation_ && - (condition_logement_location_tiers_ && + (o_and condition_logement_residence_principale_ + (o_and condition_logement_mode_occupation_ + (o_and condition_logement_location_tiers_ condition_ouverture_l822_10_peuplement_logement_))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken @@ -14450,7 +16841,8 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Partie législative"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - age_l161_17_2_secu_ +^ (duration_of_numbers (5) (0) (0)))) + o_add_dur_dur age_l161_17_2_secu_ + (duration_of_numbers (5) (0) (0)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -14463,15 +16855,15 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=320; start_column=10; end_line=320; end_column=21; + start_line=320; start_column=12; end_line=320; end_column=23; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=320; start_column=10; - end_line=320; end_column=21; + start_line=320; start_column=12; + end_line=320; end_column=23; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) @@ -14482,12 +16874,12 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} - (condition_nationalite_ && - (condition_logement_mode_occupation_ && + (o_and condition_nationalite_ + (o_and condition_logement_mode_occupation_ eligibilite_logement_)))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=320; start_column=10; end_line=320; end_column=21; + start_line=320; start_column=12; end_line=320; end_column=23; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} true)) @@ -14495,7 +16887,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=320; start_column=10; end_line=320; end_column=21; + start_line=320; start_column=12; end_line=320; end_column=23; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in @@ -14507,23 +16899,23 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=324; start_column=10; end_line=324; end_column=28; + start_line=324; start_column=12; end_line=324; end_column=30; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=324; start_column=10; - end_line=324; end_column=28; + start_line=324; start_column=12; + end_line=324; end_column=30; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1162; start_column=5; - end_line=1178; end_column=10; + start_line=1173; start_column=5; + end_line=1189; end_column=10; law_headings=["Article R823-4"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -14535,30 +16927,41 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme with | PersonneACharge.EnfantACharge enfant_ -> false | PersonneACharge.AutrePersonneACharge parent_ -> - (((parent_.AutrePersonneACharge.parente) = - (Parente.Ascendant ())) && - (((parent_.AutrePersonneACharge.ressources) - <=$ - (plafond_individuel_l815_9_secu_ *$ - (decimal_of_string "1.25"))) && - (((((parent_.AutrePersonneACharge.date_naissance) - +@ age_l351_8_1_secu_) <=@ - date_courante_) || - ((parent_.AutrePersonneACharge.titulaire_allocation_personne_agee) - && - (((parent_.AutrePersonneACharge.date_naissance) - +@ - (duration_of_numbers (65) (0) (0))) - <=@ date_courante_))) || - ((((parent_.AutrePersonneACharge.date_naissance) - +@ age_l161_17_2_secu_) <=@ - date_courante_) && + (o_and + (o_eq (parent_.AutrePersonneACharge.parente) + (Parente.Ascendant ())) + (o_and + (o_lte_mon_mon + (parent_.AutrePersonneACharge.ressources) + (o_mult_mon_rat + plafond_individuel_l815_9_secu_ + (decimal_of_string "1.25"))) + (o_or + (o_or + (o_lte_dat_dat + (o_add_dat_dur + (parent_.AutrePersonneACharge.date_naissance) + age_l351_8_1_secu_) + date_courante_) + (o_and + (parent_.AutrePersonneACharge.titulaire_allocation_personne_agee) + (o_lte_dat_dat + (o_add_dat_dur + (parent_.AutrePersonneACharge.date_naissance) + (duration_of_numbers (65) (0) (0))) + date_courante_))) + (o_and + (o_lte_dat_dat + (o_add_dat_dur + (parent_.AutrePersonneACharge.date_naissance) + age_l161_17_2_secu_) + date_courante_) (parent_.AutrePersonneACharge.beneficiaire_l161_19_l351_8_l643_3_secu)))))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=324; start_column=10; - end_line=324; end_column=28; + start_line=324; start_column=12; + end_line=324; end_column=30; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} true)) @@ -14566,14 +16969,14 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=324; start_column=10; end_line=324; end_column=28; + start_line=324; start_column=12; end_line=324; end_column=30; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]}))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=324; start_column=10; end_line=324; end_column=28; + start_line=324; start_column=12; end_line=324; end_column=30; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in @@ -14608,8 +17011,8 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1202; start_column=4; - end_line=1208; end_column=49; + start_line=1213; start_column=4; + end_line=1219; end_column=48; law_headings=["Article R823-4"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -14622,17 +17025,18 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme | PersonneACharge.EnfantACharge enfant_ -> false | PersonneACharge.AutrePersonneACharge parent_ -> - ((parent_.AutrePersonneACharge.incapacite_80_pourcent_ou_restriction_emploi) - && - ((parent_.AutrePersonneACharge.ressources) - <=$ - (plafond_individuel_l815_9_secu_ - *$ (decimal_of_string "1.25"))))))) + (o_and + (parent_.AutrePersonneACharge.incapacite_80_pourcent_ou_restriction_emploi) + (o_lte_mon_mon + (parent_.AutrePersonneACharge.ressources) + (o_mult_mon_rat + plafond_individuel_l815_9_secu_ + (decimal_of_string "1.25"))))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1183; start_column=5; - end_line=1183; end_column=44; + start_line=1194; start_column=5; + end_line=1194; end_column=44; law_headings=["Article R823-4"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -14664,8 +17068,8 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1138; start_column=5; - end_line=1141; end_column=44; + start_line=1149; start_column=5; + end_line=1152; end_column=44; law_headings=["Article R823-4"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -14676,8 +17080,10 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme (match param_ with | PersonneACharge.EnfantACharge enfant_ -> - (((enfant_.EnfantACharge.date_de_naissance) +@ - (duration_of_numbers (21) (0) (0))) >@ + (o_gt_dat_dat + (o_add_dat_dur + (enfant_.EnfantACharge.date_de_naissance) + (duration_of_numbers (21) (0) (0))) date_courante_) | PersonneACharge.AutrePersonneACharge parent_ -> false))) (fun (_: unit) -> true))|]) @@ -14716,7 +17122,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1126; start_column=14; end_line=1126; end_column=49; + start_line=1137; start_column=14; end_line=1137; end_column=49; law_headings=["Article R823-4"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -14726,8 +17132,8 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - array_filter - (fun (personne_a_charge_: _) -> (log_end_call + o_filter + (fun (personne_a_charge_: PersonneACharge.t) -> (log_end_call ["ÉligibilitéAidesPersonnelleLogement"; "prise_en_compte_personne_à_charge"] ((log_variable_definition @@ -14756,7 +17162,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=322; start_column=10; end_line=322; end_column=59; + start_line=322; start_column=12; end_line=322; end_column=61; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) @@ -14767,8 +17173,8 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Déclarations des champs d'application"; "Prologue : aides au logement"]} true)) (fun (_: unit) -> - Array.map - (fun (personne_a_charge_: _) -> + o_map + (fun (personne_a_charge_: PersonneACharge.t) -> match personne_a_charge_ with | PersonneACharge.EnfantACharge enfant_ -> @@ -14780,8 +17186,8 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme coeff_) | PersonneACharge.AutrePersonneACharge _ -> (decimal_of_string "0.")) - (array_filter - (fun (personne_a_charge_: _) -> + (o_filter + (fun (personne_a_charge_: PersonneACharge.t) -> match personne_a_charge_ with | PersonneACharge.EnfantACharge enfant_ -> @@ -14797,7 +17203,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=322; start_column=10; end_line=322; end_column=59; + start_line=322; start_column=12; end_line=322; end_column=61; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in @@ -14807,7 +17213,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=321; start_column=10; end_line=321; end_column=52; + start_line=321; start_column=12; end_line=321; end_column=54; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) @@ -14817,23 +17223,23 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} true)) - (fun (_: unit) -> array_length personnes_a_charge_prises_en_compte_)) + (fun (_: unit) -> o_length personnes_a_charge_prises_en_compte_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=321; start_column=10; end_line=321; end_column=52; + start_line=321; start_column=12; end_line=321; end_column=54; law_headings=["Éligibilité aux aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in let _: unit = if ( try - (seuil_l822_3_parts_usufruit_ <& + (o_lt_rat_rat seuil_l822_3_parts_usufruit_ (decimal_of_string "0.2")) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; start_line=182; start_column=13; - end_line=182; end_column=48; + end_line=182; end_column=47; law_headings=["Article L822-3"; "Chapitre II : Conditions générales d'attribution"; "Titre II : Dispositions communes aux aides personnelles au logement"; @@ -14843,7 +17249,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme then () else raise (AssertionFailed {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; start_line=182; start_column=13; - end_line=182; end_column=48; + end_line=182; end_column=47; law_headings=["Article L822-3"; "Chapitre II : Conditions générales d'attribution"; "Titre II : Dispositions communes aux aides personnelles au logement"; @@ -14852,13 +17258,13 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme "Code de la construction et de l'habitation"]}) in let _: unit = if ( try - (seuil_l822_3_parts_propriete_ <& + (o_lt_rat_rat seuil_l822_3_parts_propriete_ (decimal_of_string "0.2")) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; start_line=181; start_column=13; - end_line=181; end_column=49; + end_line=181; end_column=48; law_headings=["Article L822-3"; "Chapitre II : Conditions générales d'attribution"; "Titre II : Dispositions communes aux aides personnelles au logement"; @@ -14868,7 +17274,7 @@ let eligibilite_aides_personnelle_logement (eligibilite_aides_personnelle_logeme then () else raise (AssertionFailed {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; start_line=181; start_column=13; - end_line=181; end_column=49; + end_line=181; end_column=48; law_headings=["Article L822-3"; "Chapitre II : Conditions générales d'attribution"; "Titre II : Dispositions communes aux aides personnelles au logement"; @@ -15018,12 +17424,13 @@ let ressources_aides_personnelle_logement (ressources_aides_personnelle_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - Array.fold_left - (fun (acc_: money) (personne_: _) -> - acc_ +$ - (personne_.PersonneVivantHabituellementAuFoyer.ressources)) + o_reduce + (fun (sum1_: money) (sum2_: money) -> o_add_mon_mon sum1_ sum2_) (money_of_cents_string "0") - personnes_vivant_habituellement_foyer_)) + (o_map + (fun (personne_: PersonneVivantHabituellementAuFoyer.t) -> + personne_.PersonneVivantHabituellementAuFoyer.ressources) + personnes_vivant_habituellement_foyer_))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -15054,12 +17461,12 @@ let ressources_aides_personnelle_logement (ressources_aides_personnelle_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let abattement_ : _ = + (let abattement_ : money = ( if - ((array_length personnes_a_charge_) = (integer_of_string + (o_eq (o_length personnes_a_charge_) (integer_of_string "0")) then (money_of_cents_string "0") else ( if - ((array_length personnes_a_charge_) <=! + (o_lte_int_int (o_length personnes_a_charge_) (integer_of_string "2")) then (money_of_cents_string "90100") else (money_of_cents_string "135000"))) @@ -15128,8 +17535,8 @@ let ressources_aides_personnelle_logement (ressources_aides_personnelle_logement "base_mensuelle_allocations_familiales"; "BaseMensuelleAllocationsFamiliales"] base_mensuelle_allocations_familiales) - {BaseMensuelleAllocationsFamilialesIn.date_courante_in = - base_mensuelle_allocations_familiales_dot_date_courante_})) in + ({BaseMensuelleAllocationsFamilialesIn.date_courante_in = + base_mensuelle_allocations_familiales_dot_date_courante_}))) in let base_mensuelle_allocations_familiales_dot_montant_: money = result_.BaseMensuelleAllocationsFamiliales.montant in let abattement_r_822_8_: money = (log_variable_definition ["RessourcesAidesPersonnelleLogement"; "abattement_r_822_8"] @@ -15173,15 +17580,15 @@ let ressources_aides_personnelle_logement (ressources_aides_personnelle_logement try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=508; start_column=10; end_line=508; end_column=37; + start_line=508; start_column=12; end_line=508; end_column=39; law_headings=["Prise en compte des ressources pour les aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=508; start_column=10; - end_line=508; end_column=37; + start_line=508; start_column=12; + end_line=508; end_column=39; law_headings=["Prise en compte des ressources pour les aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) @@ -15197,23 +17604,25 @@ let ressources_aides_personnelle_logement (ressources_aides_personnelle_logement "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - (((match mode_occupation_ - with - | ModeOccupation.Locataire _ -> true - | ModeOccupation.ResidentLogementFoyer _ -> false - | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation _ -> - false - | ModeOccupation.SousLocataire _ -> false - | ModeOccupation.LocationAccession _ -> false) || - (match mode_occupation_ - with - | ModeOccupation.Locataire _ -> false - | ModeOccupation.ResidentLogementFoyer _ -> true - | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation _ -> - false - | ModeOccupation.SousLocataire _ -> false - | ModeOccupation.LocationAccession _ -> false)) && - (condition_age_bourse_enseignement_superieur_ && + (o_and + (o_or + (match mode_occupation_ + with + | ModeOccupation.Locataire _ -> true + | ModeOccupation.ResidentLogementFoyer _ -> false + | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation _ -> + false + | ModeOccupation.SousLocataire _ -> false + | ModeOccupation.LocationAccession _ -> false) + (match mode_occupation_ + with + | ModeOccupation.Locataire _ -> false + | ModeOccupation.ResidentLogementFoyer _ -> true + | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation _ -> + false + | ModeOccupation.SousLocataire _ -> false + | ModeOccupation.LocationAccession _ -> false)) + (o_and condition_age_bourse_enseignement_superieur_ demandeur_poursuit_des_etudes_)))) (fun (_: unit) -> ressources_forfaitaires_r822_20_))|]) (fun (_: unit) -> (log_decision_taken @@ -15229,12 +17638,13 @@ let ressources_aides_personnelle_logement (ressources_aides_personnelle_logement "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (ressources_demandeur_ +$ ressources_conjoint_) +$ + o_add_mon_mon + (o_add_mon_mon ressources_demandeur_ ressources_conjoint_) ressources_personnes_vivant_habituellement_foyer_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=508; start_column=10; end_line=508; end_column=37; + start_line=508; start_column=12; end_line=508; end_column=39; law_headings=["Prise en compte des ressources pour les aides personnelles au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in @@ -15262,10 +17672,13 @@ let ressources_aides_personnelle_logement (ressources_aides_personnelle_logement true)) (fun (_: unit) -> if - (demandeur_exerce_activite_remuneree_ && - (conjoint_exerce_activite_remuneree_ && - ((ressources_demandeur_ +$ ressources_conjoint_) >=$ - (base_mensuelle_allocations_familiales_dot_montant_ *$ + (o_and demandeur_exerce_activite_remuneree_ + (o_and conjoint_exerce_activite_remuneree_ + (o_gte_mon_mon + (o_add_mon_mon ressources_demandeur_ + ressources_conjoint_) + (o_mult_mon_rat + base_mensuelle_allocations_familiales_dot_montant_ (decimal_of_string "12."))))) then montant_forfaitaire_r_822_7_ else (money_of_cents_string "0"))) with @@ -15277,9 +17690,10 @@ let ressources_aides_personnelle_logement (ressources_aides_personnelle_logement "Prologue : aides au logement"]})))) in let _: unit = if ( try - (Array.fold_left - (fun (acc_: bool) (personne_: _) -> - acc_ && + (o_fold + (fun (acc_: bool) + (personne_: PersonneVivantHabituellementAuFoyer.t) -> + o_and acc_ (personne_.PersonneVivantHabituellementAuFoyer.duree_residence_durant_periode_r_822_3_1_superieure_a_6_mois)) true personnes_vivant_habituellement_foyer_) with @@ -15320,7 +17734,7 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E try (handle_default {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=43; start_column=10; end_line=43; end_column=22; + start_line=43; start_column=12; end_line=43; end_column=24; law_headings=["Prologue : prestations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/../prestations_familiales/sécurité_sociale_R.catala_fr"; @@ -15335,7 +17749,7 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=43; start_column=10; end_line=43; end_column=22; + start_line=43; start_column=12; end_line=43; end_column=24; law_headings=["Prologue : prestations familiales"]})))) in let smic_dot_date_courante_: date = try ((log_variable_definition @@ -15376,8 +17790,8 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E let result_: Smic.t = (log_end_call ["ÉligibilitéPrestationsFamiliales"; "smic"; "Smic"] ((log_begin_call ["ÉligibilitéPrestationsFamiliales"; "smic"; "Smic"] smic) - {SmicIn.date_courante_in = smic_dot_date_courante_; - SmicIn.residence_in = smic_dot_residence_})) in + ({SmicIn.date_courante_in = smic_dot_date_courante_; + SmicIn.residence_in = smic_dot_residence_}))) in let smic_dot_brut_horaire_: money = result_.Smic.brut_horaire in let regime_outre_mer_l751_1_: bool = (log_variable_definition ["ÉligibilitéPrestationsFamiliales"; "régime_outre_mer_l751_1"] @@ -15385,13 +17799,13 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E try (handle_default {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=44; start_column=10; end_line=44; end_column=33; + start_line=44; start_column=12; end_line=44; end_column=35; law_headings=["Prologue : prestations familiales"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=44; start_column=10; - end_line=44; end_column=33; + start_line=44; start_column=12; + end_line=44; end_column=35; law_headings=["Prologue : prestations familiales"]} ( [||]) (fun (_: unit) -> (log_decision_taken @@ -15404,24 +17818,27 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E "Livre 7 : Régimes divers - Dispositions diverses"; "Partie législative"; "Code de la sécurité sociale"]} - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = (Collectivite.Martinique ())) || - ((residence_ = (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) || - (residence_ = + (o_or (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ (Collectivite.Martinique ())) + (o_or + (o_eq residence_ (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy ())) + (o_eq residence_ (Collectivite.SaintMartin ()))))))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=44; start_column=10; end_line=44; end_column=33; + start_line=44; start_column=12; end_line=44; end_column=35; law_headings=["Prologue : prestations familiales"]} true)) (fun (_: unit) -> false)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=44; start_column=10; end_line=44; end_column=33; + start_line=44; start_column=12; end_line=44; end_column=35; law_headings=["Prologue : prestations familiales"]})))) in let plafond_l512_3_2_: money = (log_variable_definition ["ÉligibilitéPrestationsFamiliales"; "plafond_l512_3_2"] (embed_money) @@ -15450,7 +17867,9 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E "Code de la sécurité sociale"]} regime_outre_mer_l751_1_)) (fun (_: unit) -> - (smic_dot_brut_horaire_ *$ (decimal_of_string "0.55")) *$ + o_mult_mon_rat + (o_mult_mon_rat smic_dot_brut_horaire_ + (decimal_of_string "0.55")) (decimal_of_string "169.")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/../prestations_familiales/sécurité_sociale_R.catala_fr"; @@ -15462,8 +17881,9 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E "Partie réglementaire - Décrets en Conseil d'Etat"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - (smic_dot_brut_horaire_ *$ (decimal_of_string "0.55")) *$ - (decimal_of_string "169."))) + o_mult_mon_rat + (o_mult_mon_rat smic_dot_brut_horaire_ + (decimal_of_string "0.55")) (decimal_of_string "169."))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; @@ -15477,13 +17897,13 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E try (handle_default {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=41; start_column=10; end_line=41; end_column=29; + start_line=41; start_column=12; end_line=41; end_column=31; law_headings=["Prologue : prestations familiales"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=41; start_column=10; - end_line=41; end_column=29; + start_line=41; start_column=12; + end_line=41; end_column=31; law_headings=["Prologue : prestations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken @@ -15496,48 +17916,53 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E "Livre 5 : Prestations familiales et prestations assimilées"; "Partie législative"; "Code de la sécurité sociale"]} - (((match - (param_.EnfantPrestationsFamiliales.obligation_scolaire) - with - | SituationObligationScolaire.Avant _ -> true - | SituationObligationScolaire.Pendant _ -> false - | SituationObligationScolaire.Apres _ -> false) - || - ((match - (param_.EnfantPrestationsFamiliales.obligation_scolaire) - with - | SituationObligationScolaire.Avant _ -> false - | SituationObligationScolaire.Pendant _ -> - true - | SituationObligationScolaire.Apres _ -> false) - || - (match - (param_.EnfantPrestationsFamiliales.obligation_scolaire) - with - | SituationObligationScolaire.Avant _ -> - false - | SituationObligationScolaire.Pendant _ -> - false - | SituationObligationScolaire.Apres _ -> - true))) && - ((param_.EnfantPrestationsFamiliales.remuneration_mensuelle) - <=$ plafond_l512_3_2_)))) - (fun (_: unit) -> true))|]) + (o_and + (o_or + (match + (param_.EnfantPrestationsFamiliales.obligation_scolaire) + with + | SituationObligationScolaire.Avant _ -> true + | SituationObligationScolaire.Pendant _ -> + false + | SituationObligationScolaire.Apres _ -> + false) + (o_or + (match + (param_.EnfantPrestationsFamiliales.obligation_scolaire) + with + | SituationObligationScolaire.Avant _ -> + false + | SituationObligationScolaire.Pendant _ -> + true + | SituationObligationScolaire.Apres _ -> + false) + (match + (param_.EnfantPrestationsFamiliales.obligation_scolaire) + with + | SituationObligationScolaire.Avant _ -> + false + | SituationObligationScolaire.Pendant _ -> + false + | SituationObligationScolaire.Apres _ -> + true))) + (o_lte_mon_mon + (param_.EnfantPrestationsFamiliales.remuneration_mensuelle) + plafond_l512_3_2_)))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=41; start_column=10; - end_line=41; end_column=29; + start_line=41; start_column=12; + end_line=41; end_column=31; law_headings=["Prologue : prestations familiales"]} true)) (fun (_: unit) -> false)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=41; start_column=10; end_line=41; end_column=29; + start_line=41; start_column=12; end_line=41; end_column=31; law_headings=["Prologue : prestations familiales"]}))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=41; start_column=10; end_line=41; end_column=29; + start_line=41; start_column=12; end_line=41; end_column=31; law_headings=["Prologue : prestations familiales"]})))) in let droit_ouvert_: EnfantPrestationsFamiliales.t -> bool = (log_variable_definition ["ÉligibilitéPrestationsFamiliales"; "droit_ouvert"] (unembeddable) ( @@ -15546,25 +17971,25 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E try (handle_default {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=40; start_column=10; end_line=40; end_column=22; + start_line=40; start_column=12; end_line=40; end_column=24; law_headings=["Prologue : prestations familiales"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=40; start_column=10; - end_line=40; end_column=22; + start_line=40; start_column=12; + end_line=40; end_column=24; law_headings=["Prologue : prestations familiales"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=40; start_column=10; - end_line=40; end_column=22; + start_line=40; start_column=12; + end_line=40; end_column=24; law_headings=["Prologue : prestations familiales"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=40; start_column=10; - end_line=40; end_column=22; + start_line=40; start_column=12; + end_line=40; end_column=24; law_headings=["Prologue : prestations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken @@ -15577,40 +18002,46 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E "Livre 5 : Prestations familiales et prestations assimilées"; "Partie législative"; "Code de la sécurité sociale"]} - ((match - (param_.EnfantPrestationsFamiliales.obligation_scolaire) - with - | SituationObligationScolaire.Avant _ -> - false - | SituationObligationScolaire.Pendant _ -> - false - | SituationObligationScolaire.Apres _ -> - true) && - (((param_.EnfantPrestationsFamiliales.remuneration_mensuelle) - <=$ plafond_l512_3_2_) && - (((param_.EnfantPrestationsFamiliales.date_de_naissance) - +@ age_l512_3_2_) >@ + (o_and + (match + (param_.EnfantPrestationsFamiliales.obligation_scolaire) + with + | SituationObligationScolaire.Avant _ -> + false + | SituationObligationScolaire.Pendant _ -> + false + | SituationObligationScolaire.Apres _ -> + true) + (o_and + (o_lte_mon_mon + (param_.EnfantPrestationsFamiliales.remuneration_mensuelle) + plafond_l512_3_2_) + (o_gt_dat_dat + (o_add_dat_dur + (param_.EnfantPrestationsFamiliales.date_de_naissance) + age_l512_3_2_) date_courante_))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/../prestations_familiales/sécurité_sociale_L.catala_fr"; start_line=56; start_column=5; - end_line=57; end_column=78; + end_line=57; end_column=50; law_headings=["Article L512-3"; "Chapitre 2 : Champ d'application"; "Titre 1 : Champ d'application - Généralités"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie législative"; "Code de la sécurité sociale"]} - ((match - (param_.EnfantPrestationsFamiliales.obligation_scolaire) - with - | SituationObligationScolaire.Avant _ -> - true - | SituationObligationScolaire.Pendant _ -> - false - | SituationObligationScolaire.Apres _ -> - false) || + (o_or + (match + (param_.EnfantPrestationsFamiliales.obligation_scolaire) + with + | SituationObligationScolaire.Avant _ -> + true + | SituationObligationScolaire.Pendant _ -> + false + | SituationObligationScolaire.Apres _ -> + false) (match (param_.EnfantPrestationsFamiliales.obligation_scolaire) with @@ -15624,19 +18055,19 @@ let eligibilite_prestations_familiales (eligibilite_prestations_familiales_in: E (fun (_: unit) -> raise EmptyError))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=40; start_column=10; - end_line=40; end_column=22; + start_line=40; start_column=12; + end_line=40; end_column=24; law_headings=["Prologue : prestations familiales"]} true)) (fun (_: unit) -> false)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=40; start_column=10; end_line=40; end_column=22; + start_line=40; start_column=12; end_line=40; end_column=24; law_headings=["Prologue : prestations familiales"]}))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/../prestations_familiales/prologue.catala_fr"; - start_line=40; start_column=10; end_line=40; end_column=22; + start_line=40; start_column=12; end_line=40; end_column=24; law_headings=["Prologue : prestations familiales"]})))) in {EligibilitePrestationsFamiliales.droit_ouvert = droit_ouvert_; EligibilitePrestationsFamiliales.conditions_hors_age = @@ -15982,32 +18413,32 @@ let calcul_allocation_logement_locatif (calcul_allocation_logement_locatif_in: C ["CalculAllocationLogementLocatif"; "calcul_apl_locatif"; "CalculAidePersonnaliséeLogementLocatif"] calcul_aide_personnalisee_logement_locatif) - {CalculAidePersonnaliseeLogementLocatifIn.loyer_principal_base_in = - calcul_apl_locatif_dot_loyer_principal_base_; - CalculAidePersonnaliseeLogementLocatifIn.ressources_menage_arrondies_in = - calcul_apl_locatif_dot_ressources_menage_arrondies_; - CalculAidePersonnaliseeLogementLocatifIn.beneficiaire_aide_adulte_ou_enfant_handicapes_in = - calcul_apl_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_; - CalculAidePersonnaliseeLogementLocatifIn.date_courante_in = - calcul_apl_locatif_dot_date_courante_; - CalculAidePersonnaliseeLogementLocatifIn.nombre_personnes_a_charge_in = - calcul_apl_locatif_dot_nombre_personnes_a_charge_; - CalculAidePersonnaliseeLogementLocatifIn.situation_familiale_calcul_apl_in = - calcul_apl_locatif_dot_situation_familiale_calcul_apl_; - CalculAidePersonnaliseeLogementLocatifIn.zone_in = - calcul_apl_locatif_dot_zone_; - CalculAidePersonnaliseeLogementLocatifIn.logement_est_chambre_in = - calcul_apl_locatif_dot_logement_est_chambre_; - CalculAidePersonnaliseeLogementLocatifIn.agees_ou_handicap_adultes_hebergees_onereux_particuliers_in = - calcul_apl_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_; - CalculAidePersonnaliseeLogementLocatifIn.type_aide_in = - calcul_apl_locatif_dot_type_aide_; - CalculAidePersonnaliseeLogementLocatifIn.colocation_in = - calcul_apl_locatif_dot_colocation_; - CalculAidePersonnaliseeLogementLocatifIn.reduction_loyer_solidarite_in = - calcul_apl_locatif_dot_reduction_loyer_solidarite_; - CalculAidePersonnaliseeLogementLocatifIn.logement_meuble_d842_2_in = - calcul_apl_locatif_dot_logement_meuble_d842_2_})) in + ({CalculAidePersonnaliseeLogementLocatifIn.loyer_principal_base_in = + calcul_apl_locatif_dot_loyer_principal_base_; + CalculAidePersonnaliseeLogementLocatifIn.ressources_menage_arrondies_in = + calcul_apl_locatif_dot_ressources_menage_arrondies_; + CalculAidePersonnaliseeLogementLocatifIn.beneficiaire_aide_adulte_ou_enfant_handicapes_in = + calcul_apl_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_; + CalculAidePersonnaliseeLogementLocatifIn.date_courante_in = + calcul_apl_locatif_dot_date_courante_; + CalculAidePersonnaliseeLogementLocatifIn.nombre_personnes_a_charge_in = + calcul_apl_locatif_dot_nombre_personnes_a_charge_; + CalculAidePersonnaliseeLogementLocatifIn.situation_familiale_calcul_apl_in = + calcul_apl_locatif_dot_situation_familiale_calcul_apl_; + CalculAidePersonnaliseeLogementLocatifIn.zone_in = + calcul_apl_locatif_dot_zone_; + CalculAidePersonnaliseeLogementLocatifIn.logement_est_chambre_in = + calcul_apl_locatif_dot_logement_est_chambre_; + CalculAidePersonnaliseeLogementLocatifIn.agees_ou_handicap_adultes_hebergees_onereux_particuliers_in = + calcul_apl_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_; + CalculAidePersonnaliseeLogementLocatifIn.type_aide_in = + calcul_apl_locatif_dot_type_aide_; + CalculAidePersonnaliseeLogementLocatifIn.colocation_in = + calcul_apl_locatif_dot_colocation_; + CalculAidePersonnaliseeLogementLocatifIn.reduction_loyer_solidarite_in = + calcul_apl_locatif_dot_reduction_loyer_solidarite_; + CalculAidePersonnaliseeLogementLocatifIn.logement_meuble_d842_2_in = + calcul_apl_locatif_dot_logement_meuble_d842_2_}))) in let calcul_apl_locatif_dot_montant_forfaitaire_charges_d823_16_: money = result_.CalculAidePersonnaliseeLogementLocatif.montant_forfaitaire_charges_d823_16 in let calcul_apl_locatif_dot_plafond_loyer_d823_16_2_: money = result_.CalculAidePersonnaliseeLogementLocatif.plafond_loyer_d823_16_2 in let calcul_apl_locatif_dot_participation_minimale_: money = result_.CalculAidePersonnaliseeLogementLocatif.participation_minimale in @@ -16024,23 +18455,23 @@ let calcul_allocation_logement_locatif (calcul_allocation_logement_locatif_in: C try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=788; start_column=10; end_line=788; end_column=32; + start_line=788; start_column=12; end_line=788; end_column=34; law_headings=["Secteur locatif"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=788; start_column=10; - end_line=788; end_column=32; + start_line=788; start_column=12; + end_line=788; end_column=34; law_headings=["Secteur locatif"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4220; start_column=24; - end_line=4220; end_column=46; + start_line=4281; start_column=24; + end_line=4281; end_column=46; law_headings=["Article D842-4"; "Section 1 : Secteur locatif ordinaire"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16051,7 +18482,7 @@ let calcul_allocation_logement_locatif (calcul_allocation_logement_locatif_in: C (match changement_logement_d842_4_ with | ChangementLogementD8424.Changement infos_ -> - (loyer_principal_ >=$ + (o_gte_mon_mon loyer_principal_ (infos_.InfosChangementLogementD8424.ancien_loyer_principal)) | ChangementLogementD8424.PasDeChangement _ -> false))) (fun (_: unit) -> param_))|]) @@ -16079,14 +18510,14 @@ let calcul_allocation_logement_locatif (calcul_allocation_logement_locatif_in: C with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=788; start_column=10; end_line=788; end_column=32; + start_line=788; start_column=12; end_line=788; end_column=34; law_headings=["Secteur locatif"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]}))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=788; start_column=10; end_line=788; end_column=32; + start_line=788; start_column=12; end_line=788; end_column=34; law_headings=["Secteur locatif"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -16096,22 +18527,22 @@ let calcul_allocation_logement_locatif (calcul_allocation_logement_locatif_in: C try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=786; start_column=10; end_line=786; end_column=29; + start_line=786; start_column=12; end_line=786; end_column=31; law_headings=["Secteur locatif"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=786; start_column=10; - end_line=786; end_column=29; + start_line=786; start_column=12; + end_line=786; end_column=31; law_headings=["Secteur locatif"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4212; start_column=24; - end_line=4212; end_column=43; + start_line=4273; start_column=24; + end_line=4273; end_column=43; law_headings=["Article D842-4"; "Section 1 : Secteur locatif ordinaire"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16122,16 +18553,16 @@ let calcul_allocation_logement_locatif (calcul_allocation_logement_locatif_in: C (match changement_logement_d842_4_ with | ChangementLogementD8424.Changement infos_ -> - (loyer_principal_ >=$ + (o_gte_mon_mon loyer_principal_ (infos_.InfosChangementLogementD8424.ancien_loyer_principal)) | ChangementLogementD8424.PasDeChangement _ -> false))) (fun (_: unit) -> match changement_logement_d842_4_ with | ChangementLogementD8424.Changement infos_ -> - (loyer_principal_ -$ - ((infos_.InfosChangementLogementD8424.ancien_loyer_principal) - -$ + (o_sub_mon_mon loyer_principal_ + (o_sub_mon_mon + (infos_.InfosChangementLogementD8424.ancien_loyer_principal) (infos_.InfosChangementLogementD8424.ancienne_allocation_logement))) | ChangementLogementD8424.PasDeChangement _ -> (money_of_cents_string "0")))|]) @@ -16145,7 +18576,7 @@ let calcul_allocation_logement_locatif (calcul_allocation_logement_locatif_in: C with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=786; start_column=10; end_line=786; end_column=29; + start_line=786; start_column=12; end_line=786; end_column=31; law_headings=["Secteur locatif"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -16175,7 +18606,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4316; start_column=14; end_line=4316; end_column=42; + start_line=4091; start_column=14; end_line=4091; end_column=42; law_headings=["Article 42"; "Chapitre VII : Calcul des allocations de logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -16199,7 +18630,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4305; start_column=14; end_line=4305; end_column=41; + start_line=4080; start_column=14; end_line=4080; end_column=41; law_headings=["Article 41"; "Chapitre VII : Calcul des allocations de logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -16223,7 +18654,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4407; start_column=14; end_line=4407; end_column=51; + start_line=4182; start_column=14; end_line=4182; end_column=51; law_headings=["Article 44"; "Chapitre VII : Calcul des allocations de logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -16241,7 +18672,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "calcul_nombre_parts.condition_2_du_832_25"] (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4778; start_column=14; end_line=4778; end_column=55; + start_line=4839; start_column=14; end_line=4839; end_column=55; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -16251,7 +18682,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4778; start_column=14; end_line=4778; end_column=55; + start_line=4839; start_column=14; end_line=4839; end_column=55; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16263,7 +18694,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4778; start_column=14; end_line=4778; end_column=55; + start_line=4839; start_column=14; end_line=4839; end_column=55; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -16276,7 +18707,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "calcul_nombre_parts.nombre_personnes_à_charge"] (embed_integer) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4774; start_column=14; end_line=4774; end_column=59; + start_line=4835; start_column=14; end_line=4835; end_column=59; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -16286,7 +18717,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4774; start_column=14; end_line=4774; end_column=59; + start_line=4835; start_column=14; end_line=4835; end_column=59; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16298,7 +18729,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4774; start_column=14; end_line=4774; end_column=59; + start_line=4835; start_column=14; end_line=4835; end_column=59; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -16312,7 +18743,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (embed_situation_familiale_calcul_a_p_l) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4776; start_column=14; end_line=4776; end_column=64; + start_line=4837; start_column=14; end_line=4837; end_column=64; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -16322,7 +18753,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4776; start_column=14; end_line=4776; end_column=64; + start_line=4837; start_column=14; end_line=4837; end_column=64; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16334,7 +18765,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4776; start_column=14; end_line=4776; end_column=64; + start_line=4837; start_column=14; end_line=4837; end_column=64; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -16346,12 +18777,12 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "CalculNombrePartLogementFoyer"] ((log_begin_call ["CalculAllocationLogementFoyer"; "calcul_nombre_parts"; "CalculNombrePartLogementFoyer"] calcul_nombre_part_logement_foyer) - {CalculNombrePartLogementFoyerIn.condition_2_du_832_25_in = - calcul_nombre_parts_dot_condition_2_du_832_25_; - CalculNombrePartLogementFoyerIn.nombre_personnes_a_charge_in = - calcul_nombre_parts_dot_nombre_personnes_a_charge_; - CalculNombrePartLogementFoyerIn.situation_familiale_calcul_apl_in = - calcul_nombre_parts_dot_situation_familiale_calcul_apl_})) in + ({CalculNombrePartLogementFoyerIn.condition_2_du_832_25_in = + calcul_nombre_parts_dot_condition_2_du_832_25_; + CalculNombrePartLogementFoyerIn.nombre_personnes_a_charge_in = + calcul_nombre_parts_dot_nombre_personnes_a_charge_; + CalculNombrePartLogementFoyerIn.situation_familiale_calcul_apl_in = + calcul_nombre_parts_dot_situation_familiale_calcul_apl_}))) in let calcul_nombre_parts_dot_n_nombre_parts_d832_25_: decimal = result_.CalculNombrePartLogementFoyer.n_nombre_parts_d832_25 in let contributions_sociales_dot_date_courante_: date = try ((log_variable_definition @@ -16383,8 +18814,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ["CalculAllocationLogementFoyer"; "contributions_sociales"; "ContributionsSocialesAidesPersonnelleLogement"] contributions_sociales_aides_personnelle_logement) - {ContributionsSocialesAidesPersonnelleLogementIn.date_courante_in = - contributions_sociales_dot_date_courante_})) in + ({ContributionsSocialesAidesPersonnelleLogementIn.date_courante_in = + contributions_sociales_dot_date_courante_}))) in let contributions_sociales_dot_montant_: money -> money = result_.ContributionsSocialesAidesPersonnelleLogement.montant in let calcul_apl_logement_foyer_dot_type_logement_foyer_: TypeLogementFoyer.t = try ((log_variable_definition @@ -16588,7 +19019,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "calcul_apl_logement_foyer.condition_2_du_832_25"] (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4741; start_column=14; end_line=4741; end_column=61; + start_line=4802; start_column=14; end_line=4802; end_column=61; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -16598,7 +19029,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4741; start_column=14; end_line=4741; end_column=61; + start_line=4802; start_column=14; end_line=4802; end_column=61; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16618,26 +19049,26 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ["CalculAllocationLogementFoyer"; "calcul_apl_logement_foyer"; "CalculAidePersonnaliséeLogementFoyer"] calcul_aide_personnalisee_logement_foyer) - {CalculAidePersonnaliseeLogementFoyerIn.type_logement_foyer_in = - calcul_apl_logement_foyer_dot_type_logement_foyer_; - CalculAidePersonnaliseeLogementFoyerIn.date_conventionnement_in = - calcul_apl_logement_foyer_dot_date_conventionnement_; - CalculAidePersonnaliseeLogementFoyerIn.ressources_menage_arrondies_in = - calcul_apl_logement_foyer_dot_ressources_menage_arrondies_; - CalculAidePersonnaliseeLogementFoyerIn.nombre_personnes_a_charge_in = - calcul_apl_logement_foyer_dot_nombre_personnes_a_charge_; - CalculAidePersonnaliseeLogementFoyerIn.situation_familiale_calcul_apl_in = - calcul_apl_logement_foyer_dot_situation_familiale_calcul_apl_; - CalculAidePersonnaliseeLogementFoyerIn.zone_in = - calcul_apl_logement_foyer_dot_zone_; - CalculAidePersonnaliseeLogementFoyerIn.date_courante_in = - calcul_apl_logement_foyer_dot_date_courante_; - CalculAidePersonnaliseeLogementFoyerIn.redevance_in = - calcul_apl_logement_foyer_dot_redevance_; - CalculAidePersonnaliseeLogementFoyerIn.condition_2_du_832_25_in = - calcul_apl_logement_foyer_dot_condition_2_du_832_25_; - CalculAidePersonnaliseeLogementFoyerIn.n_nombre_parts_d832_25_in = - calcul_apl_logement_foyer_dot_n_nombre_parts_d832_25_})) in + ({CalculAidePersonnaliseeLogementFoyerIn.type_logement_foyer_in = + calcul_apl_logement_foyer_dot_type_logement_foyer_; + CalculAidePersonnaliseeLogementFoyerIn.date_conventionnement_in = + calcul_apl_logement_foyer_dot_date_conventionnement_; + CalculAidePersonnaliseeLogementFoyerIn.ressources_menage_arrondies_in = + calcul_apl_logement_foyer_dot_ressources_menage_arrondies_; + CalculAidePersonnaliseeLogementFoyerIn.nombre_personnes_a_charge_in = + calcul_apl_logement_foyer_dot_nombre_personnes_a_charge_; + CalculAidePersonnaliseeLogementFoyerIn.situation_familiale_calcul_apl_in = + calcul_apl_logement_foyer_dot_situation_familiale_calcul_apl_; + CalculAidePersonnaliseeLogementFoyerIn.zone_in = + calcul_apl_logement_foyer_dot_zone_; + CalculAidePersonnaliseeLogementFoyerIn.date_courante_in = + calcul_apl_logement_foyer_dot_date_courante_; + CalculAidePersonnaliseeLogementFoyerIn.redevance_in = + calcul_apl_logement_foyer_dot_redevance_; + CalculAidePersonnaliseeLogementFoyerIn.condition_2_du_832_25_in = + calcul_apl_logement_foyer_dot_condition_2_du_832_25_; + CalculAidePersonnaliseeLogementFoyerIn.n_nombre_parts_d832_25_in = + calcul_apl_logement_foyer_dot_n_nombre_parts_d832_25_}))) in let calcul_apl_logement_foyer_dot_coefficient_multiplicateur_d832_25_: money = result_.CalculAidePersonnaliseeLogementFoyer.coefficient_multiplicateur_d832_25 in let calcul_apl_logement_foyer_dot_coefficient_r_d832_25_: money = result_.CalculAidePersonnaliseeLogementFoyer.coefficient_r_d832_25 in let calcul_apl_logement_foyer_dot_n_nombre_parts_d832_25_: decimal = result_.CalculAidePersonnaliseeLogementFoyer.n_nombre_parts_d832_25 in @@ -16654,63 +19085,66 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=932; start_column=10; end_line=932; end_column=37; + start_line=932; start_column=12; end_line=932; end_column=39; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=932; start_column=10; - end_line=932; end_column=37; + start_line=932; start_column=12; + end_line=932; end_column=39; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4292; start_column=14; - end_line=4292; end_column=41; + start_line=4067; start_column=14; + end_line=4067; end_column=41; law_headings=["Article 40"; "Chapitre VII : Calcul des allocations de logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then (money_of_cents_string "5612") else - ((money_of_cents_string "5612") +$ - ((money_of_cents_string "1272") *$ - (decimal_of_integer nombre_personnes_a_charge_))))); + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (money_of_cents_string "5612") else + (o_add_mon_mon (money_of_cents_string "5612") + (o_mult_mon_rat (money_of_cents_string "1272") + (o_torat_int nombre_personnes_a_charge_))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=932; start_column=10; - end_line=932; end_column=37; + start_line=932; start_column=12; + end_line=932; end_column=39; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=633; start_column=14; - end_line=633; end_column=41; + start_line=686; start_column=14; + end_line=686; end_column=41; law_headings=["Article 40"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ (date_of_numbers (2021) (10) (1))) - && - (date_courante_ <@ (date_of_numbers (2022) (7) (1)))))) + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then (money_of_cents_string "5422") else - ((money_of_cents_string "5422") +$ - ((money_of_cents_string "1229") *$ - (decimal_of_integer nombre_personnes_a_charge_)))))|]) + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (money_of_cents_string "5422") else + (o_add_mon_mon (money_of_cents_string "5422") + (o_mult_mon_rat (money_of_cents_string "1229") + (o_torat_int nombre_personnes_a_charge_)))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=932; start_column=10; end_line=932; end_column=37; + start_line=932; start_column=12; end_line=932; end_column=39; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -16719,26 +19153,28 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=931; start_column=10; end_line=931; end_column=27; + start_line=931; start_column=12; end_line=931; end_column=29; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=931; start_column=10; - end_line=931; end_column=27; + start_line=931; start_column=12; + end_line=931; end_column=29; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4334; start_column=6; - end_line=4334; end_column=79; + start_line=4109; start_column=6; + end_line=4109; end_column=79; law_headings=["Article 43"; "Chapitre VII : Calcul des allocations de logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ (date_of_numbers (2022) (7) (1))) && + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) (match categorie_equivalence_loyer_d842_16_ with | CategorieEquivalenceLoyerAllocationLogementFoyer.EtudiantLogeEnChambreCROUS _ -> @@ -16759,19 +19195,21 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=931; start_column=10; - end_line=931; end_column=27; + start_line=931; start_column=12; + end_line=931; end_column=29; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4369; start_column=6; - end_line=4370; end_column=38; + start_line=4144; start_column=6; + end_line=4145; end_column=38; law_headings=["Article 43"; "Chapitre VII : Calcul des allocations de logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ (date_of_numbers (2022) (7) (1))) && + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) (match categorie_equivalence_loyer_d842_16_ with | CategorieEquivalenceLoyerAllocationLogementFoyer.EtudiantLogeEnChambreCROUS _ -> @@ -16792,29 +19230,30 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=931; start_column=10; - end_line=931; end_column=27; + start_line=931; start_column=12; + end_line=931; end_column=29; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=931; start_column=10; - end_line=931; end_column=27; + start_line=931; start_column=12; + end_line=931; end_column=29; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4387; start_column=6; - end_line=4388; end_column=24; + start_line=4162; start_column=6; + end_line=4163; end_column=24; law_headings=["Article 43"; "Chapitre VII : Calcul des allocations de logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) (match categorie_equivalence_loyer_d842_16_ with | CategorieEquivalenceLoyerAllocationLogementFoyer.EtudiantLogeEnChambreCROUS _ -> @@ -16834,12 +19273,14 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (money_of_cents_string "27365")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4351; start_column=6; - end_line=4352; end_column=46; + start_line=4126; start_column=6; + end_line=4127; end_column=46; law_headings=["Article 43"; "Chapitre VII : Calcul des allocations de logement en secteur logement-foyer"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ (date_of_numbers (2022) (7) (1))) && + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) (match categorie_equivalence_loyer_d842_16_ with | CategorieEquivalenceLoyerAllocationLogementFoyer.EtudiantLogeEnChambreCROUS _ -> @@ -16860,22 +19301,24 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=931; start_column=10; - end_line=931; end_column=27; + start_line=931; start_column=12; + end_line=931; end_column=29; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=656; start_column=6; - end_line=656; end_column=79; + start_line=709; start_column=6; + end_line=709; end_column=79; law_headings=["Article 43"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ (date_of_numbers (2021) (10) (1))) - && - (date_courante_ <@ (date_of_numbers (2022) (7) (1)))) - && + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))) (match categorie_equivalence_loyer_d842_16_ with | CategorieEquivalenceLoyerAllocationLogementFoyer.EtudiantLogeEnChambreCROUS _ -> @@ -16896,22 +19339,24 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=931; start_column=10; - end_line=931; end_column=27; + start_line=931; start_column=12; + end_line=931; end_column=29; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=693; start_column=6; - end_line=694; end_column=38; + start_line=746; start_column=6; + end_line=747; end_column=38; law_headings=["Article 43"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ (date_of_numbers (2021) (10) (1))) - && - (date_courante_ <@ (date_of_numbers (2022) (7) (1)))) - && + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))) (match categorie_equivalence_loyer_d842_16_ with | CategorieEquivalenceLoyerAllocationLogementFoyer.EtudiantLogeEnChambreCROUS _ -> @@ -16932,31 +19377,33 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=931; start_column=10; - end_line=931; end_column=27; + start_line=931; start_column=12; + end_line=931; end_column=29; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=931; start_column=10; - end_line=931; end_column=27; + start_line=931; start_column=12; + end_line=931; end_column=29; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=712; start_column=6; - end_line=713; end_column=24; + start_line=765; start_column=6; + end_line=766; end_column=24; law_headings=["Article 43"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ - (date_of_numbers (2022) (7) (1)))) && + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))) (match categorie_equivalence_loyer_d842_16_ with | CategorieEquivalenceLoyerAllocationLogementFoyer.EtudiantLogeEnChambreCROUS _ -> @@ -16976,15 +19423,17 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (money_of_cents_string "26440")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=674; start_column=6; - end_line=675; end_column=46; + start_line=727; start_column=6; + end_line=728; end_column=46; law_headings=["Article 43"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ (date_of_numbers (2021) (10) (1))) - && - (date_courante_ <@ (date_of_numbers (2022) (7) (1)))) - && + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))) (match categorie_equivalence_loyer_d842_16_ with | CategorieEquivalenceLoyerAllocationLogementFoyer.EtudiantLogeEnChambreCROUS _ -> @@ -17006,7 +19455,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=931; start_column=10; end_line=931; end_column=27; + start_line=931; start_column=12; end_line=931; end_column=29; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -17024,8 +19473,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4790; start_column=14; - end_line=4790; end_column=36; + start_line=4851; start_column=14; + end_line=4851; end_column=36; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17036,10 +19485,11 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu true)) (fun (_: unit) -> if - ((param_ -$ montant_forfaitaire_d842_15_) <$ + (o_lt_mon_mon + (o_sub_mon_mon param_ montant_forfaitaire_d842_15_) (money_of_cents_string "0")) then (money_of_cents_string "0") else - (param_ -$ montant_forfaitaire_d842_15_))) + (o_sub_mon_mon param_ montant_forfaitaire_d842_15_))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -17061,7 +19511,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (embed_money) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4771; start_column=14; end_line=4771; end_column=75; + start_line=4832; start_column=14; end_line=4832; end_column=75; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -17071,7 +19521,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4771; start_column=14; end_line=4771; end_column=75; + start_line=4832; start_column=14; end_line=4832; end_column=75; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17083,7 +19533,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4771; start_column=14; end_line=4771; end_column=75; + start_line=4832; start_column=14; end_line=4832; end_column=75; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -17097,7 +19547,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4770; start_column=14; end_line=4770; end_column=69; + start_line=4831; start_column=14; end_line=4831; end_column=69; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -17107,7 +19557,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4770; start_column=14; end_line=4770; end_column=69; + start_line=4831; start_column=14; end_line=4831; end_column=69; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17119,7 +19569,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4770; start_column=14; end_line=4770; end_column=69; + start_line=4831; start_column=14; end_line=4831; end_column=69; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -17133,7 +19583,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (embed_decimal) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4780; start_column=14; end_line=4780; end_column=70; + start_line=4841; start_column=14; end_line=4841; end_column=70; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -17143,7 +19593,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4780; start_column=14; end_line=4780; end_column=70; + start_line=4841; start_column=14; end_line=4841; end_column=70; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17156,7 +19606,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4780; start_column=14; end_line=4780; end_column=70; + start_line=4841; start_column=14; end_line=4841; end_column=70; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -17168,12 +19618,12 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "CalculÉquivalenceLoyerMinimale"] ((log_begin_call ["CalculAllocationLogementFoyer"; "calcul_équivalence_loyer_minimale"; "CalculÉquivalenceLoyerMinimale"] calcul_equivalence_loyer_minimale) - {CalculEquivalenceLoyerMinimaleIn.ressources_menage_arrondies_in = - calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_; - CalculEquivalenceLoyerMinimaleIn.condition_2_du_832_25_in = - calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_; - CalculEquivalenceLoyerMinimaleIn.n_nombre_parts_d832_25_in = - calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_})) in + ({CalculEquivalenceLoyerMinimaleIn.ressources_menage_arrondies_in = + calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_; + CalculEquivalenceLoyerMinimaleIn.condition_2_du_832_25_in = + calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_; + CalculEquivalenceLoyerMinimaleIn.n_nombre_parts_d832_25_in = + calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_}))) in let calcul_equivalence_loyer_minimale_dot_montant_: money = result_.CalculEquivalenceLoyerMinimale.montant in let coefficient_prise_en_charge_: decimal = (log_variable_definition ["CalculAllocationLogementFoyer"; "coefficient_prise_en_charge"] @@ -17181,13 +19631,13 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=930; start_column=10; end_line=930; end_column=37; + start_line=930; start_column=12; end_line=930; end_column=39; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4744; start_column=14; end_line=4744; end_column=41; + start_line=4805; start_column=14; end_line=4805; end_column=41; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17201,7 +19651,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=930; start_column=10; end_line=930; end_column=37; + start_line=930; start_column=12; end_line=930; end_column=39; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -17219,8 +19669,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4902; start_column=14; - end_line=4902; end_column=36; + start_line=4963; start_column=14; + end_line=4963; end_column=36; law_headings=["Article D842-17"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17230,8 +19680,9 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (equivalence_loyer_ +$ montant_forfaitaire_charges_) -$ - param_)) + o_sub_mon_mon + (o_add_mon_mon equivalence_loyer_ + montant_forfaitaire_charges_) param_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -17251,13 +19702,13 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=933; start_column=10; end_line=933; end_column=23; + start_line=933; start_column=12; end_line=933; end_column=25; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4782; start_column=14; end_line=4782; end_column=27; + start_line=4843; start_column=14; end_line=4843; end_column=27; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17270,7 +19721,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=933; start_column=10; end_line=933; end_column=23; + start_line=933; start_column=12; end_line=933; end_column=25; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -17288,8 +19739,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4911; start_column=14; - end_line=4911; end_column=47; + start_line=4972; start_column=14; + end_line=4972; end_column=47; law_headings=["Article D842-17"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17300,7 +19751,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu true)) (fun (_: unit) -> if - (((log_end_call + (o_lt_mon_mon ((log_end_call ["CalculAllocationLogementFoyer"; "dépense_nette_minimale"] ((log_variable_definition ["CalculAllocationLogementFoyer"; @@ -17311,9 +19762,10 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ((log_variable_definition ["CalculAllocationLogementFoyer"; "dépense_nette_minimale"; "input"] (embed_money) - param_))))))) <$ montant_minimal_depense_nette_d842_17_) + param_))))))) montant_minimal_depense_nette_d842_17_) then - (montant_minimal_depense_nette_d842_17_ -$ ((log_end_call + (o_sub_mon_mon montant_minimal_depense_nette_d842_17_ + ((log_end_call ["CalculAllocationLogementFoyer"; "dépense_nette_minimale"] ((log_variable_definition ["CalculAllocationLogementFoyer"; @@ -17344,13 +19796,13 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=943; start_column=10; end_line=943; end_column=29; + start_line=943; start_column=12; end_line=943; end_column=31; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4723; start_column=14; end_line=4723; end_column=33; + start_line=4784; start_column=14; end_line=4784; end_column=33; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17360,12 +19812,15 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - ((equivalence_loyer_ +$ montant_forfaitaire_charges_) -$ - loyer_minimal_) *$ coefficient_prise_en_charge_)) + o_mult_mon_rat + (o_sub_mon_mon + (o_add_mon_mon equivalence_loyer_ + montant_forfaitaire_charges_) loyer_minimal_) + coefficient_prise_en_charge_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=943; start_column=10; end_line=943; end_column=29; + start_line=943; start_column=12; end_line=943; end_column=31; law_headings=["Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -17383,8 +19838,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4804; start_column=14; - end_line=4804; end_column=36; + start_line=4865; start_column=14; + end_line=4865; end_column=36; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17394,7 +19849,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAllocationLogementFoyer"; "traitement_aide_finale_minoration_forfaitaire"] ((log_variable_definition @@ -17409,7 +19864,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "traitement_aide_finale_minoration_forfaitaire"; "input"] (embed_money) param_))))))) in - (let abattement_ : _ = ((log_end_call + (let abattement_ : money = ((log_end_call ["CalculAllocationLogementFoyer"; "abattement_dépense_nette_minimale"] ((log_variable_definition @@ -17425,9 +19880,10 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu (embed_money) aide_finale_))))))) in ( if - ((aide_finale_ -$ abattement_) <$ (money_of_cents_string - "0")) then (money_of_cents_string "0") else - (aide_finale_ -$ abattement_)))))) + (o_lt_mon_mon (o_sub_mon_mon aide_finale_ abattement_) + (money_of_cents_string "0")) then + (money_of_cents_string "0") else + (o_sub_mon_mon aide_finale_ abattement_)))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -17456,8 +19912,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4822; start_column=14; - end_line=4822; end_column=36; + start_line=4883; start_column=14; + end_line=4883; end_column=36; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17467,7 +19923,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAllocationLogementFoyer"; "traitement_aide_finale_dépense_nette_minimale"] ((log_variable_definition @@ -17482,8 +19938,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "traitement_aide_finale_dépense_nette_minimale"; "input"] (embed_money) param_))))))) in - ( if (aide_finale_ >$ redevance_) then redevance_ else - aide_finale_)))) + ( if (o_gt_mon_mon aide_finale_ redevance_) then redevance_ + else aide_finale_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -17513,8 +19969,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4836; start_column=14; - end_line=4836; end_column=36; + start_line=4897; start_column=14; + end_line=4897; end_column=36; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17524,7 +19980,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAllocationLogementFoyer"; "traitement_aide_finale_redevance"] ((log_variable_definition @@ -17539,7 +19995,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "traitement_aide_finale_redevance"; "input"] (embed_money) param_))))))) in - (let crds_ : _ = ((log_end_call + (let crds_ : money = ((log_end_call ["ContributionsSocialesAidesPersonnelleLogement"; "montant"] ((log_variable_definition ["ContributionsSocialesAidesPersonnelleLogement"; @@ -17550,16 +20006,17 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu ["ContributionsSocialesAidesPersonnelleLogement"; "montant"; "input"] (embed_money) aide_finale_))))))) in - (let aide_finale_moins_crds_arrondie_ : _ = - (money_round - ((aide_finale_ -$ crds_) -$ (money_of_cents_string - "50"))) + (let aide_finale_moins_crds_arrondie_ : money = + (o_round_mon + (o_sub_mon_mon (o_sub_mon_mon aide_finale_ crds_) + (money_of_cents_string "50"))) in ( if - ((aide_finale_moins_crds_arrondie_ +$ crds_) >=$ + (o_gte_mon_mon + (o_add_mon_mon aide_finale_moins_crds_arrondie_ crds_) (money_of_cents_string "0")) then - (aide_finale_moins_crds_arrondie_ +$ crds_) else - (money_of_cents_string "0"))))))) + (o_add_mon_mon aide_finale_moins_crds_arrondie_ crds_) + else (money_of_cents_string "0"))))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -17588,8 +20045,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4857; start_column=14; - end_line=4857; end_column=36; + start_line=4918; start_column=14; + end_line=4918; end_column=36; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17599,7 +20056,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAllocationLogementFoyer"; "traitement_aide_finale_contributions_sociales_arrondi"] ((log_variable_definition @@ -17614,8 +20071,9 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "traitement_aide_finale_contributions_sociales_arrondi"; "input"] (embed_money) param_))))))) in - ( if (aide_finale_ <$ montant_minimal_aide_d842_15_) then - (money_of_cents_string "0") else aide_finale_)))) + ( if + (o_lt_mon_mon aide_finale_ montant_minimal_aide_d842_15_) + then (money_of_cents_string "0") else aide_finale_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -17666,7 +20124,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4179; start_column=14; end_line=4179; end_column=40; + start_line=3954; start_column=14; end_line=3954; end_column=40; law_headings=["Article 35"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -17690,12 +20148,13 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/autres_sources.catala_fr"; - start_line=302; start_column=14; end_line=302; end_column=36; + start_line=331; start_column=14; end_line=331; end_column=36; law_headings=["Article premier"; "Règlement (CE) n°2866/98 du conseil du 31 décembre 1998 concernant les taux de conversion entre l'euro et les monnaies des États membres adoptant l'euro"]} true)) (fun (_: unit) -> - (decimal_of_string "1.") /& (decimal_of_string "6.55957"))) + o_div_rat_rat (decimal_of_string "1.") + (decimal_of_string "6.55957"))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -17715,7 +20174,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4189; start_column=14; end_line=4189; end_column=41; + start_line=3964; start_column=14; end_line=3964; end_column=41; law_headings=["Article 36"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -17739,7 +20198,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4243; start_column=14; end_line=4243; end_column=41; + start_line=4018; start_column=14; end_line=4018; end_column=41; law_headings=["Article 38"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -17763,7 +20222,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4268; start_column=14; end_line=4268; end_column=41; + start_line=4043; start_column=14; end_line=4043; end_column=41; law_headings=["Article 39"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -17787,7 +20246,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4250; start_column=14; end_line=4250; end_column=33; + start_line=4025; start_column=14; end_line=4025; end_column=33; law_headings=["Article 38"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -17811,7 +20270,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4261; start_column=14; end_line=4261; end_column=33; + start_line=4036; start_column=14; end_line=4036; end_column=33; law_headings=["Article 39"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} @@ -17829,7 +20288,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "calcul_nombre_parts.nombre_personnes_à_charge"] (embed_integer) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4385; start_column=14; end_line=4385; end_column=59; + start_line=4446; start_column=14; end_line=4446; end_column=59; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17840,7 +20299,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4385; start_column=14; end_line=4385; end_column=59; + start_line=4446; start_column=14; end_line=4446; end_column=59; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17852,7 +20311,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4385; start_column=14; end_line=4385; end_column=59; + start_line=4446; start_column=14; end_line=4446; end_column=59; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17867,7 +20326,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (embed_situation_familiale_calcul_a_p_l) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4387; start_column=14; end_line=4387; end_column=64; + start_line=4448; start_column=14; end_line=4448; end_column=64; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17878,7 +20337,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4387; start_column=14; end_line=4387; end_column=64; + start_line=4448; start_column=14; end_line=4448; end_column=64; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17890,7 +20349,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4387; start_column=14; end_line=4387; end_column=64; + start_line=4448; start_column=14; end_line=4448; end_column=64; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -17904,10 +20363,10 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ["CalculAllocationLogementAccessionPropriété"; "calcul_nombre_parts"; "CalculNombrePartsAccessionPropriété"] calcul_nombre_parts_accession_propriete) - {CalculNombrePartsAccessionProprieteIn.nombre_personnes_a_charge_in = - calcul_nombre_parts_dot_nombre_personnes_a_charge_; - CalculNombrePartsAccessionProprieteIn.situation_familiale_calcul_apl_in = - calcul_nombre_parts_dot_situation_familiale_calcul_apl_})) in + ({CalculNombrePartsAccessionProprieteIn.nombre_personnes_a_charge_in = + calcul_nombre_parts_dot_nombre_personnes_a_charge_; + CalculNombrePartsAccessionProprieteIn.situation_familiale_calcul_apl_in = + calcul_nombre_parts_dot_situation_familiale_calcul_apl_}))) in let calcul_nombre_parts_dot_n_nombre_parts_d832_11_: decimal = result_.CalculNombrePartsAccessionPropriete.n_nombre_parts_d832_11 in let contributions_sociales_dot_date_courante_: date = try ((log_variable_definition @@ -17941,8 +20400,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "contributions_sociales"; "ContributionsSocialesAidesPersonnelleLogement"] contributions_sociales_aides_personnelle_logement) - {ContributionsSocialesAidesPersonnelleLogementIn.date_courante_in = - contributions_sociales_dot_date_courante_})) in + ({ContributionsSocialesAidesPersonnelleLogementIn.date_courante_in = + contributions_sociales_dot_date_courante_}))) in let contributions_sociales_dot_montant_: money -> money = result_.ContributionsSocialesAidesPersonnelleLogement.montant in let montant_forfaitaire_charges_: money = (log_variable_definition ["CalculAllocationLogementAccessionPropriété"; @@ -17973,43 +20432,47 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=602; start_column=5; - end_line=602; end_column=16; + start_line=655; start_column=5; + end_line=655; end_column=16; law_headings=["Article 37"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - (((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) && - (date_courante_ <@ - (date_of_numbers (2022) (7) (1)))) && + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))) copropriete_))) (fun (_: unit) -> - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "2710") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "5422")) +$ - ((money_of_cents_string "1229") *$ - (decimal_of_integer - nombre_personnes_a_charge_))))|]) + o_add_mon_mon + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "2710") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "5422")) + (o_mult_mon_rat (money_of_cents_string "1229") + (o_torat_int nombre_personnes_a_charge_))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=564; start_column=43; - end_line=564; end_column=70; + start_line=617; start_column=43; + end_line=617; end_column=70; law_headings=["Article 34"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ (date_of_numbers (2021) (10) (1))) - && - (date_courante_ <@ (date_of_numbers (2022) (7) (1)))))) + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then (money_of_cents_string "5422") else - ((money_of_cents_string "5422") +$ - ((money_of_cents_string "1229") *$ - (decimal_of_integer nombre_personnes_a_charge_))))); + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (money_of_cents_string "5422") else + (o_add_mon_mon (money_of_cents_string "5422") + (o_mult_mon_rat (money_of_cents_string "1229") + (o_torat_int nombre_personnes_a_charge_))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -18029,39 +20492,41 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4221; start_column=5; - end_line=4221; end_column=16; + start_line=3996; start_column=5; + end_line=3996; end_column=16; law_headings=["Article 37"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2022) (7) (1))) && + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))) copropriete_))) (fun (_: unit) -> - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "2805") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "5612")) +$ - ((money_of_cents_string "1272") *$ - (decimal_of_integer - nombre_personnes_a_charge_))))|]) + o_add_mon_mon + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "2805") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "5612")) + (o_mult_mon_rat (money_of_cents_string "1272") + (o_torat_int nombre_personnes_a_charge_))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4167; start_column=31; - end_line=4167; end_column=58; + start_line=3942; start_column=31; + end_line=3942; end_column=58; law_headings=["Article 34"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2022) (7) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> if - (nombre_personnes_a_charge_ = (integer_of_string "0")) - then (money_of_cents_string "5612") else - ((money_of_cents_string "5612") +$ - ((money_of_cents_string "1272") *$ - (decimal_of_integer nombre_personnes_a_charge_)))))|]) + (o_eq nombre_personnes_a_charge_ (integer_of_string + "0")) then (money_of_cents_string "5612") else + (o_add_mon_mon (money_of_cents_string "5612") + (o_mult_mon_rat (money_of_cents_string "1272") + (o_torat_int nombre_personnes_a_charge_)))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/prologue.catala_fr"; start_line=849; start_column=47; end_line=849; end_column=53; @@ -18090,8 +20555,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4395; start_column=14; - end_line=4395; end_column=36; + start_line=4456; start_column=14; + end_line=4456; end_column=36; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -18102,10 +20567,11 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a true)) (fun (_: unit) -> if - ((param_ -$ montant_forfaitaire_d842_6_) <$ + (o_lt_mon_mon + (o_sub_mon_mon param_ montant_forfaitaire_d842_6_) (money_of_cents_string "0")) then (money_of_cents_string "0") else - (param_ -$ montant_forfaitaire_d842_6_))) + (o_sub_mon_mon param_ montant_forfaitaire_d842_6_))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -18143,148 +20609,174 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=3129; start_column=5; - end_line=3129; end_column=64; + start_line=2904; start_column=5; + end_line=2904; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (1992) (7) (1))) && - (param_ <@ (date_of_numbers (1994) (7) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1992) (7) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (1994) (7) (1))))))) (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "158700") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "191300")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "205500") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "211300") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "217100") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "222900") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "228000") else - ((money_of_cents_string - "228000") +$ - ((money_of_cents_string - "19800") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "139300") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "170600")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "184700") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "191200") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "197700") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "204200") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "218700") else - ((money_of_cents_string - "218700") +$ - ((money_of_cents_string - "19100") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "130600") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "158400")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "172600") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "179800") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "187000") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "194200") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "208600") else - ((money_of_cents_string - "208600") +$ - ((money_of_cents_string - "18200") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5")))))))))))) - *$ taux_francs_vers_euros_)); + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "158700") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "191300")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "205500") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "211300") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "217100") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "222900") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "228000") else + (o_add_mon_mon + (money_of_cents_string + "228000") + (o_mult_mon_rat + (money_of_cents_string + "19800") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "139300") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "170600")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "184700") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "191200") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "197700") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "204200") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "218700") else + (o_add_mon_mon + (money_of_cents_string + "218700") + (o_mult_mon_rat + (money_of_cents_string + "19100") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "130600") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "158400")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "172600") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "179800") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "187000") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "194200") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "208600") else + (o_add_mon_mon + (money_of_cents_string + "208600") + (o_mult_mon_rat + (money_of_cents_string + "18200") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5")))))))))))) + taux_francs_vers_euros_)); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -18296,148 +20788,174 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=3175; start_column=5; - end_line=3175; end_column=64; + start_line=2950; start_column=5; + end_line=2950; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (1994) (7) (1))) && - (param_ <@ (date_of_numbers (1997) (7) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1994) (7) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (1997) (7) (1))))))) (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "160400") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "193400")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "207800") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "213700") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "219600") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "225500") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "230500") else - ((money_of_cents_string - "230500") +$ - ((money_of_cents_string - "20000") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "140800") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "172500")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "186700") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "193300") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "199900") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "206500") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "221100") else - ((money_of_cents_string - "221100") +$ - ((money_of_cents_string - "19300") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "132000") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "180100")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "174500") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "181800") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "189100") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "196400") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "210900") else - ((money_of_cents_string - "210900") +$ - ((money_of_cents_string - "18400") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5")))))))))))) - *$ taux_francs_vers_euros_)); + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "160400") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "193400")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "207800") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "213700") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "219600") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "225500") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "230500") else + (o_add_mon_mon + (money_of_cents_string + "230500") + (o_mult_mon_rat + (money_of_cents_string + "20000") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "140800") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "172500")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "186700") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "193300") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "199900") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "206500") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "221100") else + (o_add_mon_mon + (money_of_cents_string + "221100") + (o_mult_mon_rat + (money_of_cents_string + "19300") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "132000") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "180100")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "174500") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "181800") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "189100") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "196400") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "210900") else + (o_add_mon_mon + (money_of_cents_string + "210900") + (o_mult_mon_rat + (money_of_cents_string + "18400") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5")))))))))))) + taux_francs_vers_euros_)); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -18449,148 +20967,174 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=3221; start_column=5; - end_line=3221; end_column=64; + start_line=2996; start_column=5; + end_line=2996; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (1997) (7) (1))) && - (param_ <@ (date_of_numbers (1998) (7) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1997) (7) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (1998) (7) (1))))))) (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "163300") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "196900")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "211600") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "217600") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "223600") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "229600") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "234600") else - ((money_of_cents_string - "234600") +$ - ((money_of_cents_string - "20400") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "143300") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "175600")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "190100") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "196600") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "203500") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "210200") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "225100") else - ((money_of_cents_string - "225100") +$ - ((money_of_cents_string - "19600") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "134400") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "163000")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "177700") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "185100") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "192500") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "199900") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "214700") else - ((money_of_cents_string - "214700") +$ - ((money_of_cents_string - "18700") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5")))))))))))) - *$ taux_francs_vers_euros_)); + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "163300") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "196900")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "211600") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "217600") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "223600") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "229600") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "234600") else + (o_add_mon_mon + (money_of_cents_string + "234600") + (o_mult_mon_rat + (money_of_cents_string + "20400") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "143300") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "175600")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "190100") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "196600") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "203500") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "210200") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "225100") else + (o_add_mon_mon + (money_of_cents_string + "225100") + (o_mult_mon_rat + (money_of_cents_string + "19600") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "134400") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "163000")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "177700") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "185100") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "192500") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "199900") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "214700") else + (o_add_mon_mon + (money_of_cents_string + "214700") + (o_mult_mon_rat + (money_of_cents_string + "18700") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5")))))))))))) + taux_francs_vers_euros_)); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -18602,148 +21146,174 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=3267; start_column=5; - end_line=3267; end_column=64; + start_line=3042; start_column=5; + end_line=3042; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (1998) (7) (1))) && - (param_ <@ (date_of_numbers (1999) (7) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1998) (7) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (1999) (7) (1))))))) (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "167200") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "201600")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "216700") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "222800") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "229000") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "235100") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "240200") else - ((money_of_cents_string - "240200") +$ - ((money_of_cents_string - "20900") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "146700") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "179800")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "194700") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "201500") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "208400") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "215200") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "230500") else - ((money_of_cents_string - "230500") +$ - ((money_of_cents_string - "20100") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "137600") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "166900")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "182000") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "189500") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "197100") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "204700") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "219900") else - ((money_of_cents_string - "219900") +$ - ((money_of_cents_string - "19100") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5")))))))))))) - *$ taux_francs_vers_euros_)); + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "167200") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "201600")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "216700") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "222800") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "229000") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "235100") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "240200") else + (o_add_mon_mon + (money_of_cents_string + "240200") + (o_mult_mon_rat + (money_of_cents_string + "20900") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "146700") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "179800")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "194700") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "201500") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "208400") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "215200") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "230500") else + (o_add_mon_mon + (money_of_cents_string + "230500") + (o_mult_mon_rat + (money_of_cents_string + "20100") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "137600") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "166900")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "182000") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "189500") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "197100") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "204700") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "219900") else + (o_add_mon_mon + (money_of_cents_string + "219900") + (o_mult_mon_rat + (money_of_cents_string + "19100") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5")))))))))))) + taux_francs_vers_euros_)); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -18755,148 +21325,174 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=3313; start_column=5; - end_line=3313; end_column=64; + start_line=3088; start_column=5; + end_line=3088; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (1999) (7) (1))) && - (param_ <@ (date_of_numbers (2000) (7) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (1999) (7) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2000) (7) (1))))))) (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "167400") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "201800")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "216900") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "223000") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "229200") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "235300") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "240400") else - ((money_of_cents_string - "240400") +$ - ((money_of_cents_string - "20900") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "146800") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "180000")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "194900") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "201700") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "208600") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "215400") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "230700") else - ((money_of_cents_string - "230700") +$ - ((money_of_cents_string - "20100") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "137700") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "167100")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "182200") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "189700") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "197300") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "204900") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "220100") else - ((money_of_cents_string - "220100") +$ - ((money_of_cents_string - "19100") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5")))))))))))) - *$ taux_francs_vers_euros_)); + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "167400") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "201800")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "216900") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "223000") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "229200") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "235300") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "240400") else + (o_add_mon_mon + (money_of_cents_string + "240400") + (o_mult_mon_rat + (money_of_cents_string + "20900") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "146800") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "180000")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "194900") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "201700") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "208600") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "215400") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "230700") else + (o_add_mon_mon + (money_of_cents_string + "230700") + (o_mult_mon_rat + (money_of_cents_string + "20100") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "137700") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "167100")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "182200") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "189700") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "197300") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "204900") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "220100") else + (o_add_mon_mon + (money_of_cents_string + "220100") + (o_mult_mon_rat + (money_of_cents_string + "19100") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5")))))))))))) + taux_francs_vers_euros_)); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -18908,148 +21504,174 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=3359; start_column=5; - end_line=3359; end_column=64; + start_line=3134; start_column=5; + end_line=3134; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2000) (7) (1))) && - (param_ <@ (date_of_numbers (2001) (7) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2000) (7) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2001) (7) (1))))))) (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "169100") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "203800")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "219100") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "225200") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "231500") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "237700") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "242800") else - ((money_of_cents_string - "242800") +$ - ((money_of_cents_string - "21100") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "148300") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "181800")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "196800") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "203700") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "210700") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "217600") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "233000") else - ((money_of_cents_string - "233000") +$ - ((money_of_cents_string - "20300") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "139100") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "168800")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "184000") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "191600") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "199300") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "206900") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "222300") else - ((money_of_cents_string - "222300") +$ - ((money_of_cents_string - "19300") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5")))))))))))) - *$ taux_francs_vers_euros_)); + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "169100") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "203800")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "219100") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "225200") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "231500") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "237700") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "242800") else + (o_add_mon_mon + (money_of_cents_string + "242800") + (o_mult_mon_rat + (money_of_cents_string + "21100") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "148300") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "181800")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "196800") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "203700") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "210700") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "217600") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "233000") else + (o_add_mon_mon + (money_of_cents_string + "233000") + (o_mult_mon_rat + (money_of_cents_string + "20300") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "139100") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "168800")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "184000") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "191600") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "199300") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "206900") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "222300") else + (o_add_mon_mon + (money_of_cents_string + "222300") + (o_mult_mon_rat + (money_of_cents_string + "19300") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5")))))))))))) + taux_francs_vers_euros_)); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -19061,148 +21683,984 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=3405; start_column=5; - end_line=3405; end_column=64; + start_line=3180; start_column=5; + end_line=3180; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2001) (7) (1))) && - (param_ <@ (date_of_numbers (2002) (1) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2001) (7) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2002) (1) (1))))))) (fun (_: unit) -> - (match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "171100") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "206200")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "221700") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "227900") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "234300") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "240600") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "245700") else - ((money_of_cents_string - "245700") +$ - ((money_of_cents_string - "21400") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "150100") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "184000")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "199200") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "206100") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "213200") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "220200") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "235800") else - ((money_of_cents_string - "235800") +$ - ((money_of_cents_string - "20500") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "140800") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "170800")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "186200") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "193900") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "201700") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "209400") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "225000") else - ((money_of_cents_string - "225000") +$ - ((money_of_cents_string - "19500") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5")))))))))))) - *$ taux_francs_vers_euros_)); + o_mult_mon_rat + (match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "171100") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "206200")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "221700") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "227900") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "234300") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "240600") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "245700") else + (o_add_mon_mon + (money_of_cents_string + "245700") + (o_mult_mon_rat + (money_of_cents_string + "21400") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "150100") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "184000")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "199200") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "206100") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "213200") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "220200") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "235800") else + (o_add_mon_mon + (money_of_cents_string + "235800") + (o_mult_mon_rat + (money_of_cents_string + "20500") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "140800") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "170800")) + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "186200") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "193900") + else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "201700") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "4")) + then + (money_of_cents_string + "209400") else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "225000") else + (o_add_mon_mon + (money_of_cents_string + "225000") + (o_mult_mon_rat + (money_of_cents_string + "19500") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5")))))))))))) + taux_francs_vers_euros_)); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=854; start_column=10; + end_line=854; end_column=14; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'allocation logement"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=3226; start_column=5; + end_line=3226; end_column=62; + law_headings=["Article 33"; + "Chapitre IV : Calcul des allocations de logement en secteur accession"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2002) (1) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2002) (7) (1))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "26084") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "31435")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "33798") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "34743") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "35719") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "36679") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "37457") else + (o_add_mon_mon + (money_of_cents_string + "37457") + (o_mult_mon_rat + (money_of_cents_string + "3262") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "22883") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "28051")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "30368") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "31420") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "32502") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "33569") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "35947") else + (o_add_mon_mon + (money_of_cents_string + "35947") + (o_mult_mon_rat + (money_of_cents_string + "3125") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "21465") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "26038")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "28386") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "29560") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "30749") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "31923") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "34301") else + (o_add_mon_mon + (money_of_cents_string + "34301") + (o_mult_mon_rat + (money_of_cents_string + "2973") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=854; start_column=10; + end_line=854; end_column=14; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'allocation logement"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=3271; start_column=5; + end_line=3271; end_column=62; + law_headings=["Article 33"; + "Chapitre IV : Calcul des allocations de logement en secteur accession"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2002) (7) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2003) (7) (1))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "26397") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "31812")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "34204") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "35160") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "36148") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "37119") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "37906") else + (o_add_mon_mon + (money_of_cents_string + "37906") + (o_mult_mon_rat + (money_of_cents_string + "3301") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "23158") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "28388")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "30732") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "31797") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "32892") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "33972") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "36378") else + (o_add_mon_mon + (money_of_cents_string + "36378") + (o_mult_mon_rat + (money_of_cents_string + "3163") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "21723") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "26350")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "28727") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "29915") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "31118") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "32306") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "34713") else + (o_add_mon_mon + (money_of_cents_string + "34713") + (o_mult_mon_rat + (money_of_cents_string + "3009") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=854; start_column=10; + end_line=854; end_column=14; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'allocation logement"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=3316; start_column=5; + end_line=3316; end_column=62; + law_headings=["Article 33"; + "Chapitre IV : Calcul des allocations de logement en secteur accession"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2003) (7) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2005) (9) (1))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "26714") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "32194")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "34614") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "35582") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "36582") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "37564") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "38361") else + (o_add_mon_mon + (money_of_cents_string + "38361") + (o_mult_mon_rat + (money_of_cents_string + "3341") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "23436") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "28729")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "31101") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "32179") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "33287") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "34380") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "36815") else + (o_add_mon_mon + (money_of_cents_string + "36815") + (o_mult_mon_rat + (money_of_cents_string + "3201") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "21984") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "26666")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "29072") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "30274") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "31491") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "32694") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "35130") else + (o_add_mon_mon + (money_of_cents_string + "35130") + (o_mult_mon_rat + (money_of_cents_string + "3045") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=854; start_column=10; + end_line=854; end_column=14; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'allocation logement"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=3361; start_column=5; + end_line=3361; end_column=62; + law_headings=["Article 33"; + "Chapitre IV : Calcul des allocations de logement en secteur accession"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2005) (9) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2007) (1) (1))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "27195") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "32773")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "35237") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "36222") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "37240") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "38240") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "39051") else + (o_add_mon_mon + (money_of_cents_string + "39051") + (o_mult_mon_rat + (money_of_cents_string + "3401") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "23858") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "29246")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "31661") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "32758") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "33886") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "34999") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "37478") else + (o_add_mon_mon + (money_of_cents_string + "37478") + (o_mult_mon_rat + (money_of_cents_string + "3259") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "22380") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "27146")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "29595") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "30819") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "32058") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "33282") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "35762") else + (o_add_mon_mon + (money_of_cents_string + "35762") + (o_mult_mon_rat + (money_of_cents_string + "3100") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))))); + (fun (_: unit) -> + handle_default + {filename = "examples/aides_logement/prologue.catala_fr"; + start_line=854; start_column=10; + end_line=854; end_column=14; + law_headings=["Secteur accession à la propriété"; + "Calcul du montant de l'allocation logement"; + "Prologue : aides au logement"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; + start_line=3406; start_column=5; + end_line=3406; end_column=62; + law_headings=["Article 33"; + "Chapitre IV : Calcul des allocations de logement en secteur accession"; + "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2007) (1) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2008) (1) (1))))))) + (fun (_: unit) -> + match zone_ + with + | ZoneDHabitation.Zone1 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "27956") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "33691")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "36224") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "37236") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "38283") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "39311") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "40144") else + (o_add_mon_mon + (money_of_cents_string + "40144") + (o_mult_mon_rat + (money_of_cents_string + "3496") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone2 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "24526") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "30065")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "32548") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "33675") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "34865") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "35979") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "38527") else + (o_add_mon_mon + (money_of_cents_string + "38527") + (o_mult_mon_rat + (money_of_cents_string + "3350") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))) + | ZoneDHabitation.Zone3 _ -> + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "0")) then + (match situation_familiale_calcul_apl_ + with + | SituationFamilialeCalculAPL.PersonneSeule _ -> + (money_of_cents_string "23007") + | SituationFamilialeCalculAPL.Couple _ -> + (money_of_cents_string "27906")) else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "1")) then + (money_of_cents_string "30424") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "2")) then + (money_of_cents_string "31682") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "3")) then + (money_of_cents_string "32956") else + ( if + (o_eq nombre_personnes_a_charge_ + (integer_of_string "4")) then + (money_of_cents_string "34214") + else + ( if + (o_eq + nombre_personnes_a_charge_ + (integer_of_string "5")) + then + (money_of_cents_string + "36733") else + (o_add_mon_mon + (money_of_cents_string + "36733") + (o_mult_mon_rat + (money_of_cents_string + "3187") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ + (integer_of_string + "5"))))))))))))); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -19215,141 +22673,154 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; start_line=3451; start_column=5; - end_line=3451; end_column=64; + end_line=3451; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2002) (1) (1))) && - (param_ <@ (date_of_numbers (2002) (7) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2008) (1) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2009) (1) (1))))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26084") + (money_of_cents_string "28728") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31435")) else + (money_of_cents_string "34621")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "33798") else + (money_of_cents_string "37224") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "34743") else + (money_of_cents_string "38264") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "35719") else + (money_of_cents_string "39340") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "36679") + (money_of_cents_string "40396") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "37457") else - ((money_of_cents_string - "37457") +$ - ((money_of_cents_string - "3262") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "41252") else + (o_add_mon_mon + (money_of_cents_string + "41252") + (o_mult_mon_rat + (money_of_cents_string + "3592") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "22883") + (money_of_cents_string "25203") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "28051")) else + (money_of_cents_string "30895")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "30368") else + (money_of_cents_string "33446") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "31420") else + (money_of_cents_string "34604") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "32502") else + (money_of_cents_string "35796") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "33569") + (money_of_cents_string "36972") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "35947") else - ((money_of_cents_string - "35947") +$ - ((money_of_cents_string - "3125") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "39590") else + (o_add_mon_mon + (money_of_cents_string + "39590") + (o_mult_mon_rat + (money_of_cents_string + "3442") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "21465") + (money_of_cents_string "23642") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "26038")) else + (money_of_cents_string "28676")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "28386") else + (money_of_cents_string "31264") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "29560") else + (money_of_cents_string "32556") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "30749") else + (money_of_cents_string "33866") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "31923") + (money_of_cents_string "35158") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "34301") else - ((money_of_cents_string - "34301") +$ - ((money_of_cents_string - "2973") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "37778") else + (o_add_mon_mon + (money_of_cents_string + "37778") + (o_mult_mon_rat + (money_of_cents_string + "3275") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))))); (fun (_: unit) -> @@ -19364,141 +22835,154 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; start_line=3496; start_column=5; - end_line=3496; end_column=64; + end_line=3496; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2002) (7) (1))) && - (param_ <@ (date_of_numbers (2003) (7) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2009) (1) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2010) (1) (1))))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26397") + (money_of_cents_string "29575") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31812")) else + (money_of_cents_string "35642")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "34204") else + (money_of_cents_string "38322") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "35160") else + (money_of_cents_string "39393") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "36148") else + (money_of_cents_string "40501") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "37119") + (money_of_cents_string "41588") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "37906") else - ((money_of_cents_string - "37906") +$ - ((money_of_cents_string - "3301") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "42469") else + (o_add_mon_mon + (money_of_cents_string + "42469") + (o_mult_mon_rat + (money_of_cents_string + "3698") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "23158") + (money_of_cents_string "25946") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "28388")) else + (money_of_cents_string "31806")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "30732") else + (money_of_cents_string "34433") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "31797") else + (money_of_cents_string "35625") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "32892") else + (money_of_cents_string "36852") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "33972") + (money_of_cents_string "38063") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "36378") else - ((money_of_cents_string - "36378") +$ - ((money_of_cents_string - "3163") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "40758") else + (o_add_mon_mon + (money_of_cents_string + "40758") + (o_mult_mon_rat + (money_of_cents_string + "3544") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "21723") + (money_of_cents_string "24339") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "26350")) else + (money_of_cents_string "29522")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "28727") else + (money_of_cents_string "32186") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "29915") else + (money_of_cents_string "33516") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "31118") else + (money_of_cents_string "34865") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "32306") + (money_of_cents_string "36195") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "34713") else - ((money_of_cents_string - "34713") +$ - ((money_of_cents_string - "3009") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "38892") else + (o_add_mon_mon + (money_of_cents_string + "38892") + (o_mult_mon_rat + (money_of_cents_string + "3372") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))))); (fun (_: unit) -> @@ -19513,141 +22997,154 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; start_line=3541; start_column=5; - end_line=3541; end_column=64; + end_line=3541; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2003) (7) (1))) && - (param_ <@ (date_of_numbers (2005) (9) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2010) (1) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2011) (1) (1))))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26714") + (money_of_cents_string "29670") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "32194")) else + (money_of_cents_string "35757")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "34614") else + (money_of_cents_string "38445") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "35582") else + (money_of_cents_string "39519") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "36582") else + (money_of_cents_string "40601") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "37564") + (money_of_cents_string "41721") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "38361") else - ((money_of_cents_string - "38361") +$ - ((money_of_cents_string - "3341") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "42605") else + (o_add_mon_mon + (money_of_cents_string + "42605") + (o_mult_mon_rat + (money_of_cents_string + "3710") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "23436") + (money_of_cents_string "26029") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "28729")) else + (money_of_cents_string "31908")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "31101") else + (money_of_cents_string "34643") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "32179") else + (money_of_cents_string "35739") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "33287") else + (money_of_cents_string "36970") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "34380") + (money_of_cents_string "38185") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "36815") else - ((money_of_cents_string - "36815") +$ - ((money_of_cents_string - "3201") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "40888") else + (o_add_mon_mon + (money_of_cents_string + "40888") + (o_mult_mon_rat + (money_of_cents_string + "3555") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "21984") + (money_of_cents_string "24417") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "26666")) else + (money_of_cents_string "29616")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "29072") else + (money_of_cents_string "32289") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "30274") else + (money_of_cents_string "33623") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "31491") else + (money_of_cents_string "34977") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "32694") + (money_of_cents_string "36311") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "35130") else - ((money_of_cents_string - "35130") +$ - ((money_of_cents_string - "3045") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "39016") else + (o_add_mon_mon + (money_of_cents_string + "39016") + (o_mult_mon_rat + (money_of_cents_string + "3383") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))))); (fun (_: unit) -> @@ -19662,141 +23159,154 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; start_line=3586; start_column=5; - end_line=3586; end_column=64; + end_line=3586; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2005) (9) (1))) && - (param_ <@ (date_of_numbers (2007) (1) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2011) (1) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2012) (1) (1))))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "27195") + (money_of_cents_string "29996") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "32773")) else + (money_of_cents_string "36149")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "35237") else + (money_of_cents_string "38868") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "36222") else + (money_of_cents_string "39954") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "37240") else + (money_of_cents_string "41078") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "38240") + (money_of_cents_string "42180") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "39051") else - ((money_of_cents_string - "39051") +$ - ((money_of_cents_string - "3401") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "43074") else + (o_add_mon_mon + (money_of_cents_string + "43074") + (o_mult_mon_rat + (money_of_cents_string + "3751") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "23858") + (money_of_cents_string "26315") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29246")) else + (money_of_cents_string "32259")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "31661") else + (money_of_cents_string "34923") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "32758") else + (money_of_cents_string "36132") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "33886") else + (money_of_cents_string "37373") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "34999") + (money_of_cents_string "38605") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "37478") else - ((money_of_cents_string - "37478") +$ - ((money_of_cents_string - "3259") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "41338") else + (o_add_mon_mon + (money_of_cents_string + "41338") + (o_mult_mon_rat + (money_of_cents_string + "3594") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "22380") + (money_of_cents_string "24686") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "27146")) else + (money_of_cents_string "29942")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "29595") else + (money_of_cents_string "32644") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "30819") else + (money_of_cents_string "33993") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "32058") else + (money_of_cents_string "35362") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "33282") + (money_of_cents_string "36710") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "35762") else - ((money_of_cents_string - "35762") +$ - ((money_of_cents_string - "3100") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "39445") else + (o_add_mon_mon + (money_of_cents_string + "39445") + (o_mult_mon_rat + (money_of_cents_string + "3420") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))))); (fun (_: unit) -> @@ -19811,141 +23321,154 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; start_line=3631; start_column=5; - end_line=3631; end_column=64; + end_line=3631; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2007) (1) (1))) && - (param_ <@ (date_of_numbers (2008) (1) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2012) (1) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2013) (1) (1))))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "27956") + (money_of_cents_string "30296") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33691")) else + (money_of_cents_string "36510")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "36224") else + (money_of_cents_string "39257") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "37236") else + (money_of_cents_string "40354") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "38283") else + (money_of_cents_string "41489") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "39311") + (money_of_cents_string "42602") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "40144") else - ((money_of_cents_string - "40144") +$ - ((money_of_cents_string - "3496") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "43505") else + (o_add_mon_mon + (money_of_cents_string + "43505") + (o_mult_mon_rat + (money_of_cents_string + "3789") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24526") + (money_of_cents_string "26578") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30065")) else + (money_of_cents_string "32582")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "32548") else + (money_of_cents_string "35272") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "33675") else + (money_of_cents_string "36493") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "34865") else + (money_of_cents_string "37751") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "35979") + (money_of_cents_string "38991") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "38527") else - ((money_of_cents_string - "38527") +$ - ((money_of_cents_string - "3350") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "41751") else + (o_add_mon_mon + (money_of_cents_string + "41751") + (o_mult_mon_rat + (money_of_cents_string + "3630") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "23007") + (money_of_cents_string "24933") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "27906")) else + (money_of_cents_string "30241")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "30424") else + (money_of_cents_string "32970") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "31682") else + (money_of_cents_string "34333") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "32956") else + (money_of_cents_string "35716") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "34214") + (money_of_cents_string "37077") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "36733") else - ((money_of_cents_string - "36733") +$ - ((money_of_cents_string - "3187") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "39839") else + (o_add_mon_mon + (money_of_cents_string + "39839") + (o_mult_mon_rat + (money_of_cents_string + "3454") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))))); (fun (_: unit) -> @@ -19960,141 +23483,154 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; start_line=3676; start_column=5; - end_line=3676; end_column=64; + end_line=3676; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2008) (1) (1))) && - (param_ <@ (date_of_numbers (2009) (1) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2013) (1) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2014) (10) (1))))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "28728") + (money_of_cents_string "30947") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "34621")) else + (money_of_cents_string "37295")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "37224") else + (money_of_cents_string "40101") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "38264") else + (money_of_cents_string "41222") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "39340") else + (money_of_cents_string "42381") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "40396") + (money_of_cents_string "43518") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "41252") else - ((money_of_cents_string - "41252") +$ - ((money_of_cents_string - "3592") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "44440") else + (o_add_mon_mon + (money_of_cents_string + "44440") + (o_mult_mon_rat + (money_of_cents_string + "3870") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25203") + (money_of_cents_string "27149") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30895")) else + (money_of_cents_string "33283")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "33446") else + (money_of_cents_string "36030") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "34604") else + (money_of_cents_string "37278") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "35796") else + (money_of_cents_string "38563") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "36972") + (money_of_cents_string "39829") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "39590") else - ((money_of_cents_string - "39590") +$ - ((money_of_cents_string - "3442") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "42649") else + (o_add_mon_mon + (money_of_cents_string + "42659") + (o_mult_mon_rat + (money_of_cents_string + "3708") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "23642") + (money_of_cents_string "25469") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "28676")) else + (money_of_cents_string "30891")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "31264") else + (money_of_cents_string "33679") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "32556") else + (money_of_cents_string "35071") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "33866") else + (money_of_cents_string "36484") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "35158") + (money_of_cents_string "37874") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "37778") else - ((money_of_cents_string - "37778") +$ - ((money_of_cents_string - "3275") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "40696") else + (o_add_mon_mon + (money_of_cents_string + "40696") + (o_mult_mon_rat + (money_of_cents_string + "3528") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))))); (fun (_: unit) -> @@ -20109,141 +23645,154 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; start_line=3721; start_column=5; - end_line=3721; end_column=64; + end_line=3721; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2009) (1) (1))) && - (param_ <@ (date_of_numbers (2010) (1) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2014) (10) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2015) (10) (1))))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29575") + (money_of_cents_string "31123") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "35642")) else + (money_of_cents_string "37508")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "38322") else + (money_of_cents_string "40330") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "39393") else + (money_of_cents_string "41457") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "40501") else + (money_of_cents_string "42623") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "41588") + (money_of_cents_string "43766") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "42469") else - ((money_of_cents_string - "42469") +$ - ((money_of_cents_string - "3698") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "44693") else + (o_add_mon_mon + (money_of_cents_string + "44693") + (o_mult_mon_rat + (money_of_cents_string + "3892") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25946") + (money_of_cents_string "27304") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31806")) else + (money_of_cents_string "33473")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "34433") else + (money_of_cents_string "36235") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "35625") else + (money_of_cents_string "37490") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "36852") else + (money_of_cents_string "38783") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "38063") + (money_of_cents_string "40056") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "40758") else - ((money_of_cents_string - "40758") +$ - ((money_of_cents_string - "3544") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "42892") else + (o_add_mon_mon + (money_of_cents_string + "42892") + (o_mult_mon_rat + (money_of_cents_string + "3729") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24339") + (money_of_cents_string "25614") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29522")) else + (money_of_cents_string "31067")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "32186") else + (money_of_cents_string "33871") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "33516") else + (money_of_cents_string "35271") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "34865") else + (money_of_cents_string "36692") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "36195") + (money_of_cents_string "38090") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "38892") else - ((money_of_cents_string - "38892") +$ - ((money_of_cents_string - "3372") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "40928") else + (o_add_mon_mon + (money_of_cents_string + "40928") + (o_mult_mon_rat + (money_of_cents_string + "3548") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))))); (fun (_: unit) -> @@ -20258,141 +23807,154 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; start_line=3766; start_column=5; - end_line=3766; end_column=64; + end_line=3766; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2010) (1) (1))) && - (param_ <@ (date_of_numbers (2011) (1) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2015) (10) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2017) (10) (1))))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29670") + (money_of_cents_string "31148") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "35757")) else + (money_of_cents_string "37538")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "38445") else + (money_of_cents_string "40362") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "39519") else + (money_of_cents_string "41490") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "40601") else + (money_of_cents_string "42657") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "41721") + (money_of_cents_string "43801") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "42605") else - ((money_of_cents_string - "42605") +$ - ((money_of_cents_string - "3710") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "44729") else + (o_add_mon_mon + (money_of_cents_string + "44729") + (o_mult_mon_rat + (money_of_cents_string + "3895") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26029") + (money_of_cents_string "27326") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31908")) else + (money_of_cents_string "33500")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "34643") else + (money_of_cents_string "36264") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "35739") else + (money_of_cents_string "37520") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "36970") else + (money_of_cents_string "38814") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "38185") + (money_of_cents_string "40088") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "40888") else - ((money_of_cents_string - "40888") +$ - ((money_of_cents_string - "3555") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "42926") else + (o_add_mon_mon + (money_of_cents_string + "42926") + (o_mult_mon_rat + (money_of_cents_string + "3732") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24417") + (money_of_cents_string "25634") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29616")) else + (money_of_cents_string "31092")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "32289") else + (money_of_cents_string "33898") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "33623") else + (money_of_cents_string "35299") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "34977") else + (money_of_cents_string "36721") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "36311") + (money_of_cents_string "38120") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "39016") else - ((money_of_cents_string - "39016") +$ - ((money_of_cents_string - "3383") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "40961") else + (o_add_mon_mon + (money_of_cents_string + "40961") + (o_mult_mon_rat + (money_of_cents_string + "3551") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))))); (fun (_: unit) -> @@ -20407,141 +23969,154 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; start_line=3811; start_column=5; - end_line=3811; end_column=64; + end_line=3811; end_column=62; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2011) (1) (1))) && - (param_ <@ (date_of_numbers (2012) (1) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_gte_dat_dat param_ + (date_of_numbers (2017) (10) (1))) + (o_lt_dat_dat param_ + (date_of_numbers (2019) (10) (1))))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "29996") + (money_of_cents_string "31382") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "36149")) else + (money_of_cents_string "37820")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "38868") else + (money_of_cents_string "40665") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "39954") else + (money_of_cents_string "41801") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "41078") else + (money_of_cents_string "42977") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "42180") + (money_of_cents_string "44130") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "43074") else - ((money_of_cents_string - "43074") +$ - ((money_of_cents_string - "3751") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "45064") else + (o_add_mon_mon + (money_of_cents_string + "45064") + (o_mult_mon_rat + (money_of_cents_string + "3924") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26315") + (money_of_cents_string "27531") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "32259")) else + (money_of_cents_string "33751")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "34923") else + (money_of_cents_string "36536") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "36132") else + (money_of_cents_string "37801") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "37373") else + (money_of_cents_string "39105") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "38605") + (money_of_cents_string "40389") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "41338") else - ((money_of_cents_string - "41338") +$ - ((money_of_cents_string - "3594") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "43248") else + (o_add_mon_mon + (money_of_cents_string + "43248") + (o_mult_mon_rat + (money_of_cents_string + "3760") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24686") + (money_of_cents_string "25826") | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "29942")) else + (money_of_cents_string "31325")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then - (money_of_cents_string "32644") else + (money_of_cents_string "34152") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then - (money_of_cents_string "33993") else + (money_of_cents_string "35564") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then - (money_of_cents_string "35362") else + (money_of_cents_string "36996") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then - (money_of_cents_string "36710") + (money_of_cents_string "38406") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string - "39445") else - ((money_of_cents_string - "39445") +$ - ((money_of_cents_string - "3420") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + "41268") else + (o_add_mon_mon + (money_of_cents_string + "41268") + (o_mult_mon_rat + (money_of_cents_string + "3578") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))))); (fun (_: unit) -> @@ -20556,767 +24131,21 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; start_line=3856; start_column=5; - end_line=3856; end_column=64; + end_line=3856; end_column=32; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2012) (1) (1))) && - (param_ <@ (date_of_numbers (2013) (1) (1))))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_gte_dat_dat param_ + (date_of_numbers (2019) (10) (1)))))) (fun (_: unit) -> match zone_ with | ZoneDHabitation.Zone1 _ -> ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "30296") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "36510")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "39257") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "40354") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "41489") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "42602") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "43505") else - ((money_of_cents_string - "43505") +$ - ((money_of_cents_string - "3789") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "26578") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "32582")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "35272") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "36493") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "37751") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "38991") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "41751") else - ((money_of_cents_string - "41751") +$ - ((money_of_cents_string - "3630") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "24933") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30241")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "32970") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "34333") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "35716") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "37077") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "39839") else - ((money_of_cents_string - "39839") +$ - ((money_of_cents_string - "3454") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=854; start_column=10; - end_line=854; end_column=14; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'allocation logement"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=3901; start_column=5; - end_line=3901; end_column=64; - law_headings=["Article 33"; - "Chapitre IV : Calcul des allocations de logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2013) (1) (1))) && - (param_ <@ (date_of_numbers (2014) (10) (1))))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "30947") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "37295")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "40101") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "41222") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "42381") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "43518") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "44440") else - ((money_of_cents_string - "44440") +$ - ((money_of_cents_string - "3870") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "27149") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33283")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "36030") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "37278") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "38563") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "39829") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "42649") else - ((money_of_cents_string - "42659") +$ - ((money_of_cents_string - "3708") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25469") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "30891")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "33679") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "35071") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "36484") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "37874") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "40696") else - ((money_of_cents_string - "40696") +$ - ((money_of_cents_string - "3528") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=854; start_column=10; - end_line=854; end_column=14; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'allocation logement"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=3946; start_column=5; - end_line=3946; end_column=64; - law_headings=["Article 33"; - "Chapitre IV : Calcul des allocations de logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2014) (10) (1))) - && - (param_ <@ (date_of_numbers (2015) (10) (1))))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "31123") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "37508")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "40330") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "41457") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "42623") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "43766") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "44693") else - ((money_of_cents_string - "44693") +$ - ((money_of_cents_string - "3892") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "27304") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33473")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "36235") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "37490") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "38783") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "40056") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "42892") else - ((money_of_cents_string - "42892") +$ - ((money_of_cents_string - "3729") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25614") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31067")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "33871") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "35271") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "36692") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "38090") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "40928") else - ((money_of_cents_string - "40928") +$ - ((money_of_cents_string - "3548") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=854; start_column=10; - end_line=854; end_column=14; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'allocation logement"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=3991; start_column=5; - end_line=3991; end_column=64; - law_headings=["Article 33"; - "Chapitre IV : Calcul des allocations de logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2015) (10) (1))) - && - (param_ <@ (date_of_numbers (2017) (10) (1))))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "31148") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "37538")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "40362") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "41490") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "42657") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "43801") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "44729") else - ((money_of_cents_string - "44729") +$ - ((money_of_cents_string - "3895") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "27326") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33500")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "36264") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "37520") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "38814") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "40088") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "42926") else - ((money_of_cents_string - "42926") +$ - ((money_of_cents_string - "3732") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25634") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31092")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "33898") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "35299") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "36721") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "38120") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "40961") else - ((money_of_cents_string - "40961") +$ - ((money_of_cents_string - "3551") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=854; start_column=10; - end_line=854; end_column=14; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'allocation logement"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4036; start_column=5; - end_line=4036; end_column=64; - law_headings=["Article 33"; - "Chapitre IV : Calcul des allocations de logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - ((param_ >=@ (date_of_numbers (2017) (10) (1))) - && - (param_ <@ (date_of_numbers (2019) (10) (1))))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "31382") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "37820")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "40665") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "41801") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "42977") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "44130") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "45064") else - ((money_of_cents_string - "45064") +$ - ((money_of_cents_string - "3924") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone2 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "27531") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "33751")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "36536") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "37801") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "39105") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "40389") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "43248") else - ((money_of_cents_string - "43248") +$ - ((money_of_cents_string - "3760") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))) - | ZoneDHabitation.Zone3 _ -> - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "0")) then - (match situation_familiale_calcul_apl_ - with - | SituationFamilialeCalculAPL.PersonneSeule _ -> - (money_of_cents_string "25826") - | SituationFamilialeCalculAPL.Couple _ -> - (money_of_cents_string "31325")) else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "1")) then - (money_of_cents_string "34152") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "2")) then - (money_of_cents_string "35564") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "3")) then - (money_of_cents_string "36996") else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "4")) then - (money_of_cents_string "38406") - else - ( if - (nombre_personnes_a_charge_ = - (integer_of_string "5")) - then - (money_of_cents_string - "41268") else - ((money_of_cents_string - "41268") +$ - ((money_of_cents_string - "3578") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! - (integer_of_string - "5"))))))))))))); - (fun (_: unit) -> - handle_default - {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=854; start_column=10; - end_line=854; end_column=14; - law_headings=["Secteur accession à la propriété"; - "Calcul du montant de l'allocation logement"; - "Prologue : aides au logement"]} - ([||]) - (fun (_: unit) -> (log_decision_taken - {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4081; start_column=5; - end_line=4081; end_column=33; - law_headings=["Article 33"; - "Chapitre IV : Calcul des allocations de logement en secteur accession"; - "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - (param_ >=@ (date_of_numbers (2019) (10) (1)))))) - (fun (_: unit) -> - match zone_ - with - | ZoneDHabitation.Zone1 _ -> - ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with @@ -21325,40 +24154,43 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "37933")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "40787") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "41927") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "43106") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (money_of_cents_string "44262") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string "45200") else - ((money_of_cents_string - "45200") +$ - ((money_of_cents_string - "3936") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + (o_add_mon_mon + (money_of_cents_string + "45200") + (o_mult_mon_rat + (money_of_cents_string + "3936") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone2 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with @@ -21367,40 +24199,43 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "33853")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "36646") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "37915") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "39222") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (money_of_cents_string "40510") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string "43378") else - ((money_of_cents_string - "43378") +$ - ((money_of_cents_string - "3771") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + (o_add_mon_mon + (money_of_cents_string + "43378") + (o_mult_mon_rat + (money_of_cents_string + "3771") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5"))))))))))) | ZoneDHabitation.Zone3 _ -> ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "0")) then (match situation_familiale_calcul_apl_ with @@ -21409,35 +24244,38 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a | SituationFamilialeCalculAPL.Couple _ -> (money_of_cents_string "31419")) else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "1")) then (money_of_cents_string "34255") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "2")) then (money_of_cents_string "35670") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "3")) then (money_of_cents_string "37107") else ( if - (nombre_personnes_a_charge_ = + (o_eq nombre_personnes_a_charge_ (integer_of_string "4")) then (money_of_cents_string "38521") else ( if - (nombre_personnes_a_charge_ = + (o_eq + nombre_personnes_a_charge_ (integer_of_string "5")) then (money_of_cents_string "41392") else - ((money_of_cents_string - "41392") +$ - ((money_of_cents_string - "3588") *$ - (decimal_of_integer - (nombre_personnes_a_charge_ - -! + (o_add_mon_mon + (money_of_cents_string + "41392") + (o_mult_mon_rat + (money_of_cents_string + "3588") + (o_torat_int + (o_sub_int_int + nombre_personnes_a_charge_ (integer_of_string "5")))))))))))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) @@ -21475,8 +24313,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4635; start_column=6; - end_line=4641; end_column=6; + start_line=4696; start_column=6; + end_line=4702; end_column=6; law_headings=["Article D842-12"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21484,32 +24322,37 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - (((date_signature_pret_ >=@ - (date_of_numbers (1992) (9) (30))) && - (date_signature_pret_ <=@ - (date_of_numbers (1994) (9) (30)))) || - ((date_signature_pret_ >@ - (date_of_numbers (1994) (9) (30))) && - ((match type_travaux_logement_ - with - | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> - false - | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> - false - | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> - false - | TypeTravauxLogementR8425.PasDeTravaux _ -> true) - || - ((match type_travaux_logement_ - with - | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> - true - | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> - false - | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> - false - | TypeTravauxLogementR8425.PasDeTravaux _ -> - false) || + (o_or + (o_and + (o_gte_dat_dat date_signature_pret_ + (date_of_numbers (1992) (9) (30))) + (o_lte_dat_dat date_signature_pret_ + (date_of_numbers (1994) (9) (30)))) + (o_and + (o_gt_dat_dat date_signature_pret_ + (date_of_numbers (1994) (9) (30))) + (o_or + (match type_travaux_logement_ + with + | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> + false + | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> + false + | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> + false + | TypeTravauxLogementR8425.PasDeTravaux _ -> + true) + (o_or + (match type_travaux_logement_ + with + | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> + true + | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> + false + | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> + false + | TypeTravauxLogementR8425.PasDeTravaux _ -> + false) (match type_travaux_logement_ with | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> @@ -21521,7 +24364,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a | TypeTravauxLogementR8425.PasDeTravaux _ -> false))))))) (fun (_: unit) -> - mensualite_principale_ *$ coefficient_d842_12_)); + o_mult_mon_rat mensualite_principale_ + coefficient_d842_12_)); (fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; @@ -21532,8 +24376,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4653; start_column=5; - end_line=4654; end_column=59; + start_line=4714; start_column=5; + end_line=4715; end_column=59; law_headings=["Article D842-12"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21541,8 +24385,9 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - ((date_signature_pret_ >@ - (date_of_numbers (1994) (9) (30))) && + (o_and + (o_gt_dat_dat date_signature_pret_ + (date_of_numbers (1994) (9) (30))) (match type_travaux_logement_ with | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> @@ -21575,8 +24420,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4576; start_column=15; - end_line=4576; end_column=37; + start_line=4637; start_column=15; + end_line=4637; end_column=37; law_headings=["Article D842-11"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21586,8 +24431,9 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (charges_mensuelles_pret_ +$ montant_forfaitaire_charges_) - -$ param_)) + o_sub_mon_mon + (o_add_mon_mon charges_mensuelles_pret_ + montant_forfaitaire_charges_) param_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -21642,19 +24488,19 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/archives.catala_fr"; - start_line=580; start_column=24; - end_line=580; end_column=56; + start_line=633; start_column=24; + end_line=633; end_column=56; law_headings=["Article 37"; - "Articles valables du 1er octobre 2021 au 1er juillet 2022"; - "Archives législatives et réglementaires"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (10) (1))) - && - (date_courante_ <@ + "Articles valables du 1er octobre 2021 au 30 juin 2022"; + "Archives de l'arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (10) (1))) + (o_lt_dat_dat date_courante_ (date_of_numbers (2022) (7) (1)))))) (fun (_: unit) -> if copropriete_ then - (((log_end_call + (o_mult_mon_rat ((log_end_call ["CalculAllocationLogementAccessionPropriété"; "calcul_plafond_mensualité_d842_6_base"] ((log_variable_definition @@ -21669,7 +24515,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ["CalculAllocationLogementAccessionPropriété"; "calcul_plafond_mensualité_d842_6_base"; "input"] (embed_date) - param_))))))) *$ + param_))))))) (decimal_of_string "0.75")) else ((log_end_call @@ -21690,16 +24536,16 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a param_)))))))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4201; start_column=24; - end_line=4201; end_column=56; + start_line=3976; start_column=24; + end_line=3976; end_column=56; law_headings=["Article 37"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ + (o_gte_dat_dat date_courante_ (date_of_numbers (2022) (7) (1))))) (fun (_: unit) -> if copropriete_ then - (((log_end_call + (o_mult_mon_rat ((log_end_call ["CalculAllocationLogementAccessionPropriété"; "calcul_plafond_mensualité_d842_6_base"] ((log_variable_definition @@ -21714,7 +24560,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ["CalculAllocationLogementAccessionPropriété"; "calcul_plafond_mensualité_d842_6_base"; "input"] (embed_date) param_))))))) - *$ (decimal_of_string "0.75")) else + (decimal_of_string "0.75")) else ((log_end_call ["CalculAllocationLogementAccessionPropriété"; "calcul_plafond_mensualité_d842_6_base"] @@ -21734,12 +24580,13 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> raise EmptyError))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4125; start_column=14; - end_line=4125; end_column=46; + start_line=3900; start_column=14; + end_line=3900; end_column=46; law_headings=["Article 33"; "Chapitre IV : Calcul des allocations de logement en secteur accession"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} - (date_courante_ >=@ (date_of_numbers (2020) (1) (1))))) + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))))) (fun (_: unit) -> (log_end_call ["CalculAllocationLogementAccessionPropriété"; "calcul_plafond_mensualité_d842_6_base"] @@ -21788,8 +24635,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4674; start_column=5; - end_line=4674; end_column=28; + start_line=4735; start_column=5; + end_line=4735; end_column=28; law_headings=["Article D842-12"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21801,7 +24648,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: unit) -> ressources_menage_arrondies_base_))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4664; start_column=14; end_line=4664; end_column=41; + start_line=4725; start_column=14; end_line=4725; end_column=41; law_headings=["Article D842-12"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21812,12 +24659,14 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a true)) (fun (_: unit) -> if - (ressources_menage_arrondies_base_ <=$ + (o_lte_mon_mon ressources_menage_arrondies_base_ seuil_minimal_ressources_menage_) then - ((money_round - ((seuil_minimal_ressources_menage_ +$ - (money_of_cents_string "4999")) *$ - (decimal_of_string "0.01"))) *$ + (o_mult_mon_rat + (o_round_mon + (o_mult_mon_rat + (o_add_mon_mon seuil_minimal_ressources_menage_ + (money_of_cents_string "4999")) + (decimal_of_string "0.01"))) (decimal_of_string "100.")) else ressources_menage_arrondies_base_)) with @@ -21847,8 +24696,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4525; start_column=5; - end_line=4525; end_column=44; + start_line=4586; start_column=5; + end_line=4586; end_column=44; law_headings=["Article D842-9"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21858,7 +24707,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Code de la construction et de l'habitation"]} local_habite_premiere_fois_beneficiaire_)) (fun (_: unit) -> - (let plafond_signature_ : _ = ((log_end_call + (let plafond_signature_ : money = ((log_end_call ["CalculAllocationLogementAccessionPropriété"; "calcul_plafond_mensualité_d842_6_avec_copropriété"] ((log_variable_definition @@ -21873,7 +24722,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "calcul_plafond_mensualité_d842_6_avec_copropriété"; "input"] (embed_date) date_signature_pret_))))))) in - (let plafond_entree_ : _ = ((log_end_call + (let plafond_entree_ : money = ((log_end_call ["CalculAllocationLogementAccessionPropriété"; "calcul_plafond_mensualité_d842_6_avec_copropriété"] ((log_variable_definition @@ -21888,11 +24737,11 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "calcul_plafond_mensualité_d842_6_avec_copropriété"; "input"] (embed_date) date_entree_logement_))))))) in - ( if (plafond_signature_ <$ plafond_entree_) then - plafond_entree_ else plafond_signature_)))))|]) + ( if (o_lt_mon_mon plafond_signature_ plafond_entree_) + then plafond_entree_ else plafond_signature_)))))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4507; start_column=14; end_line=4507; end_column=39; + start_line=4568; start_column=14; end_line=4568; end_column=39; law_headings=["Article D842-9"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21929,7 +24778,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (embed_money) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4381; start_column=14; end_line=4381; end_column=75; + start_line=4442; start_column=14; end_line=4442; end_column=75; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21940,7 +24789,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4381; start_column=14; end_line=4381; end_column=75; + start_line=4442; start_column=14; end_line=4442; end_column=75; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21952,7 +24801,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4381; start_column=14; end_line=4381; end_column=75; + start_line=4442; start_column=14; end_line=4442; end_column=75; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21967,7 +24816,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4380; start_column=14; end_line=4380; end_column=69; + start_line=4441; start_column=14; end_line=4441; end_column=69; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21978,7 +24827,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4380; start_column=14; end_line=4380; end_column=69; + start_line=4441; start_column=14; end_line=4441; end_column=69; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21990,7 +24839,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4380; start_column=14; end_line=4380; end_column=69; + start_line=4441; start_column=14; end_line=4441; end_column=69; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22005,7 +24854,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (embed_decimal) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4383; start_column=14; end_line=4383; end_column=70; + start_line=4444; start_column=14; end_line=4444; end_column=70; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22016,7 +24865,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4383; start_column=14; end_line=4383; end_column=70; + start_line=4444; start_column=14; end_line=4444; end_column=70; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22029,7 +24878,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4383; start_column=14; end_line=4383; end_column=70; + start_line=4444; start_column=14; end_line=4444; end_column=70; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22044,12 +24893,12 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ["CalculAllocationLogementAccessionPropriété"; "calcul_équivalence_loyer_minimale"; "CalculÉquivalenceLoyerMinimale"] calcul_equivalence_loyer_minimale) - {CalculEquivalenceLoyerMinimaleIn.ressources_menage_arrondies_in = - calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_; - CalculEquivalenceLoyerMinimaleIn.condition_2_du_832_25_in = - calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_; - CalculEquivalenceLoyerMinimaleIn.n_nombre_parts_d832_25_in = - calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_})) in + ({CalculEquivalenceLoyerMinimaleIn.ressources_menage_arrondies_in = + calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_; + CalculEquivalenceLoyerMinimaleIn.condition_2_du_832_25_in = + calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_; + CalculEquivalenceLoyerMinimaleIn.n_nombre_parts_d832_25_in = + calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_}))) in let calcul_equivalence_loyer_minimale_dot_montant_: money = result_.CalculEquivalenceLoyerMinimale.montant in let calcul_apl_logement_foyer_dot_type_logement_foyer_: TypeLogementFoyer.t = try ((log_variable_definition @@ -22253,7 +25102,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "calcul_apl_logement_foyer.condition_2_du_832_25"] (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4340; start_column=14; end_line=4340; end_column=61; + start_line=4401; start_column=14; end_line=4401; end_column=61; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22264,7 +25113,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4340; start_column=14; end_line=4340; end_column=61; + start_line=4401; start_column=14; end_line=4401; end_column=61; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22279,7 +25128,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "calcul_apl_logement_foyer.n_nombre_parts_d832_25"] (embed_decimal) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4347; start_column=14; end_line=4347; end_column=62; + start_line=4408; start_column=14; end_line=4408; end_column=62; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22290,7 +25139,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4347; start_column=14; end_line=4347; end_column=62; + start_line=4408; start_column=14; end_line=4408; end_column=62; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22307,26 +25156,26 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ["CalculAllocationLogementAccessionPropriété"; "calcul_apl_logement_foyer"; "CalculAidePersonnaliséeLogementFoyer"] calcul_aide_personnalisee_logement_foyer) - {CalculAidePersonnaliseeLogementFoyerIn.type_logement_foyer_in = - calcul_apl_logement_foyer_dot_type_logement_foyer_; - CalculAidePersonnaliseeLogementFoyerIn.date_conventionnement_in = - calcul_apl_logement_foyer_dot_date_conventionnement_; - CalculAidePersonnaliseeLogementFoyerIn.ressources_menage_arrondies_in = - calcul_apl_logement_foyer_dot_ressources_menage_arrondies_; - CalculAidePersonnaliseeLogementFoyerIn.nombre_personnes_a_charge_in = - calcul_apl_logement_foyer_dot_nombre_personnes_a_charge_; - CalculAidePersonnaliseeLogementFoyerIn.situation_familiale_calcul_apl_in = - calcul_apl_logement_foyer_dot_situation_familiale_calcul_apl_; - CalculAidePersonnaliseeLogementFoyerIn.zone_in = - calcul_apl_logement_foyer_dot_zone_; - CalculAidePersonnaliseeLogementFoyerIn.date_courante_in = - calcul_apl_logement_foyer_dot_date_courante_; - CalculAidePersonnaliseeLogementFoyerIn.redevance_in = - calcul_apl_logement_foyer_dot_redevance_; - CalculAidePersonnaliseeLogementFoyerIn.condition_2_du_832_25_in = - calcul_apl_logement_foyer_dot_condition_2_du_832_25_; - CalculAidePersonnaliseeLogementFoyerIn.n_nombre_parts_d832_25_in = - calcul_apl_logement_foyer_dot_n_nombre_parts_d832_25_})) in + ({CalculAidePersonnaliseeLogementFoyerIn.type_logement_foyer_in = + calcul_apl_logement_foyer_dot_type_logement_foyer_; + CalculAidePersonnaliseeLogementFoyerIn.date_conventionnement_in = + calcul_apl_logement_foyer_dot_date_conventionnement_; + CalculAidePersonnaliseeLogementFoyerIn.ressources_menage_arrondies_in = + calcul_apl_logement_foyer_dot_ressources_menage_arrondies_; + CalculAidePersonnaliseeLogementFoyerIn.nombre_personnes_a_charge_in = + calcul_apl_logement_foyer_dot_nombre_personnes_a_charge_; + CalculAidePersonnaliseeLogementFoyerIn.situation_familiale_calcul_apl_in = + calcul_apl_logement_foyer_dot_situation_familiale_calcul_apl_; + CalculAidePersonnaliseeLogementFoyerIn.zone_in = + calcul_apl_logement_foyer_dot_zone_; + CalculAidePersonnaliseeLogementFoyerIn.date_courante_in = + calcul_apl_logement_foyer_dot_date_courante_; + CalculAidePersonnaliseeLogementFoyerIn.redevance_in = + calcul_apl_logement_foyer_dot_redevance_; + CalculAidePersonnaliseeLogementFoyerIn.condition_2_du_832_25_in = + calcul_apl_logement_foyer_dot_condition_2_du_832_25_; + CalculAidePersonnaliseeLogementFoyerIn.n_nombre_parts_d832_25_in = + calcul_apl_logement_foyer_dot_n_nombre_parts_d832_25_}))) in let calcul_apl_logement_foyer_dot_coefficient_multiplicateur_d832_25_: money = result_.CalculAidePersonnaliseeLogementFoyer.coefficient_multiplicateur_d832_25 in let calcul_apl_logement_foyer_dot_coefficient_r_d832_25_: money = result_.CalculAidePersonnaliseeLogementFoyer.coefficient_r_d832_25 in let calcul_apl_logement_foyer_dot_n_nombre_parts_d832_25_: decimal = result_.CalculAidePersonnaliseeLogementFoyer.n_nombre_parts_d832_25 in @@ -22357,8 +25206,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4610; start_column=7; - end_line=4613; end_column=45; + start_line=4671; start_column=7; + end_line=4674; end_column=44; law_headings=["Article D842-11"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22366,43 +25215,46 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - (((match type_travaux_logement_ - with - | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> - false - | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> - false - | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> - false - | TypeTravauxLogementR8425.PasDeTravaux _ -> true) || - ((match type_travaux_logement_ - with - | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> - true - | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> - false - | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> - false - | TypeTravauxLogementR8425.PasDeTravaux _ -> false) - || - (match type_travaux_logement_ - with - | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> - false - | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> - false - | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> - true - | TypeTravauxLogementR8425.PasDeTravaux _ -> - false))) && - (date_signature_pret_ >=@ + (o_and + (o_or + (match type_travaux_logement_ + with + | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> + false + | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> + false + | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> + false + | TypeTravauxLogementR8425.PasDeTravaux _ -> true) + (o_or + (match type_travaux_logement_ + with + | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> + true + | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> + false + | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> + false + | TypeTravauxLogementR8425.PasDeTravaux _ -> + false) + (match type_travaux_logement_ + with + | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> + false + | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> + false + | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> + true + | TypeTravauxLogementR8425.PasDeTravaux _ -> + false))) + (o_gte_dat_dat date_signature_pret_ (date_of_numbers (1999) (7) (1)))))) (fun (_: unit) -> - ressources_menage_arrondies_seuil_ *$ + o_mult_mon_rat ressources_menage_arrondies_seuil_ coefficient_d842_11_))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4598; start_column=14; end_line=4598; end_column=50; + start_line=4659; start_column=14; end_line=4659; end_column=50; law_headings=["Article D842-11"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22430,7 +25282,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4361; start_column=14; end_line=4361; end_column=33; + start_line=4422; start_column=14; end_line=4422; end_column=33; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22440,8 +25292,9 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - if (mensualite_principale_ >$ plafond_mensualite_d842_6_) then - plafond_mensualite_d842_6_ else mensualite_principale_)) + if + (o_gt_mon_mon mensualite_principale_ plafond_mensualite_d842_6_) + then plafond_mensualite_d842_6_ else mensualite_principale_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -22461,7 +25314,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4376; start_column=14; end_line=4376; end_column=33; + start_line=4437; start_column=14; end_line=4437; end_column=33; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22490,7 +25343,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4350; start_column=14; end_line=4350; end_column=41; + start_line=4411; start_column=14; end_line=4411; end_column=41; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22522,8 +25375,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4587; start_column=14; - end_line=4587; end_column=47; + start_line=4648; start_column=14; + end_line=4648; end_column=47; law_headings=["Article D842-11"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22533,7 +25386,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let depense_nette_minimale_ : _ = ((log_end_call + (let depense_nette_minimale_ : money = ((log_end_call ["CalculAllocationLogementAccessionPropriété"; "dépense_nette_minimale"] ((log_variable_definition ["CalculAllocationLogementAccessionPropriété"; @@ -22547,9 +25400,9 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a param_))))))) in ( if - (depense_nette_minimale_ <$ + (o_lt_mon_mon depense_nette_minimale_ seuil_minimal_depense_nette_minimale_) then - (seuil_minimal_depense_nette_minimale_ -$ + (o_sub_mon_mon seuil_minimal_depense_nette_minimale_ depense_nette_minimale_) else (money_of_cents_string "0"))))) with @@ -22572,13 +25425,13 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=876; start_column=10; end_line=876; end_column=29; + start_line=876; start_column=12; end_line=876; end_column=31; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4321; start_column=14; end_line=4321; end_column=33; + start_line=4382; start_column=14; end_line=4382; end_column=33; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22588,12 +25441,15 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - ((mensualite_eligible_ +$ montant_forfaitaire_charges_) -$ - mensualite_minimale_) *$ coefficient_prise_en_charge_)) + o_mult_mon_rat + (o_sub_mon_mon + (o_add_mon_mon mensualite_eligible_ + montant_forfaitaire_charges_) mensualite_minimale_) + coefficient_prise_en_charge_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=876; start_column=10; end_line=876; end_column=29; + start_line=876; start_column=12; end_line=876; end_column=31; law_headings=["Secteur accession à la propriété"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -22611,8 +25467,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4409; start_column=14; - end_line=4409; end_column=36; + start_line=4470; start_column=14; + end_line=4470; end_column=36; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22622,7 +25478,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAllocationLogementAccessionPropriété"; "traitement_aide_finale_minoration_forfaitaire"] ((log_variable_definition @@ -22637,7 +25493,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "traitement_aide_finale_minoration_forfaitaire"; "input"] (embed_money) param_))))))) in - (let abattement_ : _ = ((log_end_call + (let abattement_ : money = ((log_end_call ["CalculAllocationLogementAccessionPropriété"; "abattement_dépense_nette_minimale"] ((log_variable_definition @@ -22652,9 +25508,9 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "abattement_dépense_nette_minimale"; "input"] (embed_money) aide_finale_))))))) in - ( if (aide_finale_ <$ abattement_) then + ( if (o_lt_mon_mon aide_finale_ abattement_) then (money_of_cents_string "0") else - (aide_finale_ -$ abattement_)))))) + (o_sub_mon_mon aide_finale_ abattement_)))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -22684,8 +25540,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4423; start_column=14; - end_line=4423; end_column=36; + start_line=4484; start_column=14; + end_line=4484; end_column=36; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22695,7 +25551,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAllocationLogementAccessionPropriété"; "traitement_aide_finale_dépense_nette_minimale"] ((log_variable_definition @@ -22710,7 +25566,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "traitement_aide_finale_dépense_nette_minimale"; "input"] (embed_money) param_))))))) in - (let crds_ : _ = ((log_end_call + (let crds_ : money = ((log_end_call ["ContributionsSocialesAidesPersonnelleLogement"; "montant"] ((log_variable_definition ["ContributionsSocialesAidesPersonnelleLogement"; @@ -22721,16 +25577,17 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a ["ContributionsSocialesAidesPersonnelleLogement"; "montant"; "input"] (embed_money) aide_finale_))))))) in - (let aide_finale_moins_crds_arrondie_ : _ = - (money_round - ((aide_finale_ -$ crds_) -$ (money_of_cents_string - "50"))) + (let aide_finale_moins_crds_arrondie_ : money = + (o_round_mon + (o_sub_mon_mon (o_sub_mon_mon aide_finale_ crds_) + (money_of_cents_string "50"))) in ( if - ((aide_finale_moins_crds_arrondie_ +$ crds_) >=$ + (o_gte_mon_mon + (o_add_mon_mon aide_finale_moins_crds_arrondie_ crds_) (money_of_cents_string "0")) then - (aide_finale_moins_crds_arrondie_ +$ crds_) else - (money_of_cents_string "0"))))))) + (o_add_mon_mon aide_finale_moins_crds_arrondie_ crds_) + else (money_of_cents_string "0"))))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -22759,8 +25616,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4443; start_column=14; - end_line=4443; end_column=36; + start_line=4504; start_column=14; + end_line=4504; end_column=36; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -22770,7 +25627,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_ : _ = ((log_end_call + (let aide_finale_ : money = ((log_end_call ["CalculAllocationLogementAccessionPropriété"; "traitement_aide_finale_contributions_sociales_arrondi"] ((log_variable_definition @@ -22785,8 +25642,9 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "traitement_aide_finale_contributions_sociales_arrondi"; "input"] (embed_money) param_))))))) in - ( if (aide_finale_ <$ montant_minimal_aide_d842_6_) then - (money_of_cents_string "0") else aide_finale_)))) + ( if + (o_lt_mon_mon aide_finale_ montant_minimal_aide_d842_6_) + then (money_of_cents_string "0") else aide_finale_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -22827,7 +25685,7 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1396; start_column=14; end_line=1396; end_column=34; + start_line=1413; start_column=14; end_line=1413; end_column=34; law_headings=["Article D823-9"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -22870,7 +25728,7 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1913; start_column=14; end_line=1913; end_column=31; + start_line=1974; start_column=14; end_line=1974; end_column=31; law_headings=["Article D823-17"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -22881,10 +25739,12 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (money_round - ((ressources_menage_sans_arrondi_ *$ - (decimal_of_string "0.01")) +$ (money_of_cents_string - "49"))) *$ (decimal_of_string "100."))) + o_mult_mon_rat + (o_round_mon + (o_add_mon_mon + (o_mult_mon_rat ressources_menage_sans_arrondi_ + (decimal_of_string "0.01")) (money_of_cents_string + "49"))) (decimal_of_string "100."))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -22947,7 +25807,7 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1413; start_column=14; end_line=1413; end_column=36; + start_line=1436; start_column=14; end_line=1436; end_column=36; law_headings=["Article D823-9"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -22960,536 +25820,710 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C match categorie_calcul_apl_ with | CategorieCalculAPL.Location location_ -> - (let traitement_formule_ : _ = - (calcul_aide_personnalisee_logement_locatif - {CalculAidePersonnaliseeLogementLocatifIn.loyer_principal_base_in = - (try (location_.Location.loyer_principal) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1423; start_column=31; - end_line=1423; end_column=55; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.ressources_menage_arrondies_in = - (try ressources_menage_avec_arrondi_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1418; start_column=43; - end_line=1418; end_column=60; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.beneficiaire_aide_adulte_ou_enfant_handicapes_in = - ( - try - (location_.Location.beneficiaire_aide_adulte_ou_enfant_handicapes) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1425; start_column=15; - end_line=1425; end_column=69; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.date_courante_in = - (try date_courante_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1421; start_column=29; - end_line=1421; end_column=42; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.nombre_personnes_a_charge_in = - (try nombre_personnes_a_charge_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1419; start_column=41; - end_line=1419; end_column=66; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.situation_familiale_calcul_apl_in = - (try situation_familiale_calcul_apl_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1422; start_column=46; - end_line=1422; end_column=76; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.zone_in = ( - try zone_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1420; start_column=20; - end_line=1420; end_column=24; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.logement_est_chambre_in = - ( - try (location_.Location.logement_est_chambre) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1426; start_column=36; - end_line=1426; end_column=65; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.agees_ou_handicap_adultes_hebergees_onereux_particuliers_in = - ( - try - (location_.Location.agees_ou_handicap_adultes_hebergees_onereux_particuliers) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1429; start_column=15; - end_line=1429; end_column=80; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.type_aide_in = - (try type_aide_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1430; start_column=25; - end_line=1430; end_column=34; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.colocation_in = - (try (location_.Location.colocation) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1427; start_column=26; - end_line=1427; end_column=45; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.reduction_loyer_solidarite_in = - ( - try - (match (location_.Location.bailleur) - with - | TypeBailleur.BailleurSocial bailleur_ -> - (bailleur_.ConventionBailleurSocial.reduction_loyer_solidarite_percue) - | TypeBailleur.BailleurPriveAvecConventionnementSocial _ -> - (money_of_cents_string "0") - | TypeBailleur.BailleurPrive _ -> - (money_of_cents_string "0")) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1432; start_column=16; - end_line=1435; end_column=39; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementLocatifIn.logement_meuble_d842_2_in = - ( - try (location_.Location.logement_meuble_d842_2) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1436; start_column=38; - end_line=1436; end_column=69; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]})))}) + (let traitement_formule_ : + CalculAidePersonnaliseeLogementLocatif.t = + (let result_ : CalculAidePersonnaliseeLogementLocatif.t = + ((log_begin_call + ["CalculAidePersonnaliséeLogementLocatif"; "direct"] + calcul_aide_personnalisee_logement_locatif) + ((log_variable_definition + ["CalculAidePersonnaliséeLogementLocatif"; "direct"; + "input"] + (embed_calcul_aide_personnalisee_logement_locatif_in) + ({CalculAidePersonnaliseeLogementLocatifIn.loyer_principal_base_in = + (try (location_.Location.loyer_principal) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1446; start_column=31; + end_line=1446; end_column=55; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.ressources_menage_arrondies_in = + (try ressources_menage_avec_arrondi_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1441; start_column=43; + end_line=1441; end_column=60; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.beneficiaire_aide_adulte_ou_enfant_handicapes_in = + ( + try + (location_.Location.beneficiaire_aide_adulte_ou_enfant_handicapes) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1448; start_column=15; + end_line=1448; end_column=69; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.date_courante_in = + (try date_courante_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1444; start_column=29; + end_line=1444; end_column=42; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.nombre_personnes_a_charge_in = + (try nombre_personnes_a_charge_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1442; start_column=41; + end_line=1442; end_column=66; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.situation_familiale_calcul_apl_in = + (try situation_familiale_calcul_apl_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1445; start_column=46; + end_line=1445; end_column=76; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.zone_in = + (try zone_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1443; start_column=20; + end_line=1443; end_column=24; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.logement_est_chambre_in = + ( + try (location_.Location.logement_est_chambre) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1449; start_column=36; + end_line=1449; end_column=65; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.agees_ou_handicap_adultes_hebergees_onereux_particuliers_in = + ( + try + (location_.Location.agees_ou_handicap_adultes_hebergees_onereux_particuliers) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1452; start_column=15; + end_line=1452; end_column=80; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.type_aide_in = + (try type_aide_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1453; start_column=25; + end_line=1453; end_column=34; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.colocation_in = + (try (location_.Location.colocation) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1450; start_column=26; + end_line=1450; end_column=45; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.reduction_loyer_solidarite_in = + ( + try + (match (location_.Location.bailleur) + with + | TypeBailleur.BailleurSocial bailleur_ -> + (bailleur_.ConventionBailleurSocial.reduction_loyer_solidarite_percue) + | TypeBailleur.BailleurPriveAvecConventionnementSocial _ -> + (money_of_cents_string "0") + | TypeBailleur.BailleurPrive _ -> + (money_of_cents_string "0")) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1455; start_column=16; + end_line=1458; end_column=39; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementLocatifIn.logement_meuble_d842_2_in = + ( + try (location_.Location.logement_meuble_d842_2) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1459; start_column=38; + end_line=1459; end_column=69; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]})))})))) + in + (let result_ : CalculAidePersonnaliseeLogementLocatif.t = + ({CalculAidePersonnaliseeLogementLocatif.montant_forfaitaire_charges_d823_16 = + (result_.CalculAidePersonnaliseeLogementLocatif.montant_forfaitaire_charges_d823_16); + CalculAidePersonnaliseeLogementLocatif.plafond_loyer_d823_16_2 = + (result_.CalculAidePersonnaliseeLogementLocatif.plafond_loyer_d823_16_2); + CalculAidePersonnaliseeLogementLocatif.participation_minimale = + (result_.CalculAidePersonnaliseeLogementLocatif.participation_minimale); + CalculAidePersonnaliseeLogementLocatif.taux_composition_familiale = + (result_.CalculAidePersonnaliseeLogementLocatif.taux_composition_familiale); + CalculAidePersonnaliseeLogementLocatif.participation_personnelle = + (result_.CalculAidePersonnaliseeLogementLocatif.participation_personnelle); + CalculAidePersonnaliseeLogementLocatif.aide_finale_formule = + (result_.CalculAidePersonnaliseeLogementLocatif.aide_finale_formule); + CalculAidePersonnaliseeLogementLocatif.traitement_aide_finale = + (fun (param_: money) -> (log_end_call + ["CalculAidePersonnaliséeLogementLocatif"; + "traitement_aide_finale"] + ((log_variable_definition + ["CalculAidePersonnaliséeLogementLocatif"; + "traitement_aide_finale"; "output"] + (embed_money) ((log_begin_call + ["CalculAidePersonnaliséeLogementLocatif"; + "traitement_aide_finale"] + (result_.CalculAidePersonnaliseeLogementLocatif.traitement_aide_finale)) + ((log_variable_definition + ["CalculAidePersonnaliséeLogementLocatif"; + "traitement_aide_finale"; "input"] + (embed_money) param_)))))))}) in + ((log_end_call + ["CalculAidePersonnaliséeLogementLocatif"; "direct"] + ((log_variable_definition + ["CalculAidePersonnaliséeLogementLocatif"; "direct"; + "output"] + (embed_calcul_aide_personnalisee_logement_locatif) + ( if + ((log_decision_taken + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1440; start_column=9; + end_line=1460; end_column=10; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]} + true)) then result_ else (raise EmptyError)))))))) in - {TraitementFormuleAideFinale.aide_finale_formule = - (traitement_formule_.CalculAidePersonnaliseeLogementLocatif.aide_finale_formule); - TraitementFormuleAideFinale.traitement_aide_finale = - (traitement_formule_.CalculAidePersonnaliseeLogementLocatif.traitement_aide_finale)}) + ({TraitementFormuleAideFinale.aide_finale_formule = + (traitement_formule_.CalculAidePersonnaliseeLogementLocatif.aide_finale_formule); + TraitementFormuleAideFinale.traitement_aide_finale = + (traitement_formule_.CalculAidePersonnaliseeLogementLocatif.traitement_aide_finale)})) | CategorieCalculAPL.AccessionPropriete proprietaire_ -> - (let traitement_formule_ : _ = - (calcul_aide_personnalisee_logement_accession_propriete - {CalculAidePersonnaliseeLogementAccessionProprieteIn.mensualite_principale_in = - ( - try - (proprietaire_.Proprietaire.mensualite_principale) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1466; start_column=38; - end_line=1466; end_column=72; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.ressources_menage_arrondies_in = - (try ressources_menage_avec_arrondi_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1461; start_column=44; - end_line=1461; end_column=61; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.nombre_personnes_a_charge_in = - (try nombre_personnes_a_charge_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1462; start_column=42; - end_line=1462; end_column=67; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.situation_familiale_calcul_apl_in = - (try situation_familiale_calcul_apl_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1465; start_column=47; - end_line=1465; end_column=77; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.type_travaux_logement_in = - ( - try - (proprietaire_.Proprietaire.type_travaux_logement_d832_15) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1467; start_column=38; - end_line=1467; end_column=80; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.date_signature_pret_in = - ( - try - ((proprietaire_.Proprietaire.pret).Pret.date_signature) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1468; start_column=36; - end_line=1468; end_column=68; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.local_habite_premiere_fois_beneficiaire_in = - ( - try - (proprietaire_.Proprietaire.local_habite_premiere_fois_beneficiaire) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1469; start_column=56; - end_line=1469; end_column=108; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.date_entree_logement_in = - ( - try - (proprietaire_.Proprietaire.date_entree_logement) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1470; start_column=37; - end_line=1470; end_column=70; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.copropriete_in = - (try (proprietaire_.Proprietaire.copropriete) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1471; start_column=28; - end_line=1471; end_column=52; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.situation_r822_11_13_17_in = - ( - try - (proprietaire_.Proprietaire.situation_r822_11_13_17) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1472; start_column=40; - end_line=1472; end_column=76; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.zone_in = - (try zone_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1463; start_column=21; - end_line=1463; end_column=25; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.type_pret_in = - ( - try - ((proprietaire_.Proprietaire.pret).Pret.type_pret) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1473; start_column=26; - end_line=1473; end_column=53; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.anciennete_logement_in = - ( - try - (proprietaire_.Proprietaire.anciennete_logement) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1474; start_column=36; - end_line=1474; end_column=68; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementAccessionProprieteIn.date_courante_in = - (try date_courante_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1464; start_column=30; - end_line=1464; end_column=43; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]})))}) + (let traitement_formule_ : + CalculAidePersonnaliseeLogementAccessionPropriete.t = + (let result_ : + CalculAidePersonnaliseeLogementAccessionPropriete.t = + ((log_begin_call + ["CalculAidePersonnaliséeLogementAccessionPropriété"; + "direct"] + calcul_aide_personnalisee_logement_accession_propriete) + ((log_variable_definition + ["CalculAidePersonnaliséeLogementAccessionPropriété"; + "direct"; "input"] + (embed_calcul_aide_personnalisee_logement_accession_propriete_in) + ({CalculAidePersonnaliseeLogementAccessionProprieteIn.mensualite_principale_in = + ( + try + (proprietaire_.Proprietaire.mensualite_principale) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1497; start_column=38; + end_line=1497; end_column=72; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.ressources_menage_arrondies_in = + (try ressources_menage_avec_arrondi_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1492; start_column=44; + end_line=1492; end_column=61; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.nombre_personnes_a_charge_in = + (try nombre_personnes_a_charge_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1493; start_column=42; + end_line=1493; end_column=67; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.situation_familiale_calcul_apl_in = + (try situation_familiale_calcul_apl_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1496; start_column=47; + end_line=1496; end_column=77; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.type_travaux_logement_in = + ( + try + (proprietaire_.Proprietaire.type_travaux_logement_d832_15) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1498; start_column=38; + end_line=1498; end_column=80; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.date_signature_pret_in = + ( + try + ((proprietaire_.Proprietaire.pret).Pret.date_signature) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1499; start_column=36; + end_line=1499; end_column=68; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.local_habite_premiere_fois_beneficiaire_in = + ( + try + (proprietaire_.Proprietaire.local_habite_premiere_fois_beneficiaire) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1501; start_column=14; + end_line=1501; end_column=66; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.date_entree_logement_in = + ( + try + (proprietaire_.Proprietaire.date_entree_logement) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1502; start_column=37; + end_line=1502; end_column=70; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.copropriete_in = + ( + try (proprietaire_.Proprietaire.copropriete) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1503; start_column=28; + end_line=1503; end_column=52; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.situation_r822_11_13_17_in = + ( + try + (proprietaire_.Proprietaire.situation_r822_11_13_17) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1504; start_column=40; + end_line=1504; end_column=76; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.zone_in = + (try zone_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1494; start_column=21; + end_line=1494; end_column=25; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.type_pret_in = + ( + try + ((proprietaire_.Proprietaire.pret).Pret.type_pret) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1505; start_column=26; + end_line=1505; end_column=53; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.anciennete_logement_in = + ( + try + (proprietaire_.Proprietaire.anciennete_logement) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1506; start_column=36; + end_line=1506; end_column=68; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementAccessionProprieteIn.date_courante_in = + (try date_courante_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1495; start_column=30; + end_line=1495; end_column=43; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]})))})))) + in + (let result_ : + CalculAidePersonnaliseeLogementAccessionPropriete.t = + ({CalculAidePersonnaliseeLogementAccessionPropriete.mensualite_eligible = + (result_.CalculAidePersonnaliseeLogementAccessionPropriete.mensualite_eligible); + CalculAidePersonnaliseeLogementAccessionPropriete.mensualite_minimale = + (result_.CalculAidePersonnaliseeLogementAccessionPropriete.mensualite_minimale); + CalculAidePersonnaliseeLogementAccessionPropriete.coefficient_prise_en_charge_d832_10 = + (result_.CalculAidePersonnaliseeLogementAccessionPropriete.coefficient_prise_en_charge_d832_10); + CalculAidePersonnaliseeLogementAccessionPropriete.aide_finale_formule = + (result_.CalculAidePersonnaliseeLogementAccessionPropriete.aide_finale_formule); + CalculAidePersonnaliseeLogementAccessionPropriete.traitement_aide_finale = + (fun (param_: money) -> (log_end_call + ["CalculAidePersonnaliséeLogementAccessionPropriété"; + "traitement_aide_finale"] + ((log_variable_definition + ["CalculAidePersonnaliséeLogementAccessionPropriété"; + "traitement_aide_finale"; "output"] + (embed_money) ((log_begin_call + ["CalculAidePersonnaliséeLogementAccessionPropriété"; + "traitement_aide_finale"] + (result_.CalculAidePersonnaliseeLogementAccessionPropriete.traitement_aide_finale)) + ((log_variable_definition + ["CalculAidePersonnaliséeLogementAccessionPropriété"; + "traitement_aide_finale"; "input"] + (embed_money) param_)))))))}) in + ((log_end_call + ["CalculAidePersonnaliséeLogementAccessionPropriété"; + "direct"] ((log_variable_definition + ["CalculAidePersonnaliséeLogementAccessionPropriété"; + "direct"; "output"] + (embed_calcul_aide_personnalisee_logement_accession_propriete) + ( if + ((log_decision_taken + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1491; start_column=10; + end_line=1507; end_column=11; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]} + true)) then result_ else (raise EmptyError)))))))) in - {TraitementFormuleAideFinale.aide_finale_formule = - (traitement_formule_.CalculAidePersonnaliseeLogementAccessionPropriete.aide_finale_formule); - TraitementFormuleAideFinale.traitement_aide_finale = - (traitement_formule_.CalculAidePersonnaliseeLogementAccessionPropriete.traitement_aide_finale)}) + ({TraitementFormuleAideFinale.aide_finale_formule = + (traitement_formule_.CalculAidePersonnaliseeLogementAccessionPropriete.aide_finale_formule); + TraitementFormuleAideFinale.traitement_aide_finale = + (traitement_formule_.CalculAidePersonnaliseeLogementAccessionPropriete.traitement_aide_finale)})) | CategorieCalculAPL.LogementFoyer logement_foyer__ -> - (let traitement_formule_ : _ = - (calcul_aide_personnalisee_logement_foyer - {CalculAidePersonnaliseeLogementFoyerIn.type_logement_foyer_in = - (try (logement_foyer__.LogementFoyer.type_user) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1451; start_column=35; - end_line=1451; end_column=55; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementFoyerIn.date_conventionnement_in = - ( - try - (logement_foyer__.LogementFoyer.date_conventionnement) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1452; start_column=37; - end_line=1452; end_column=74; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementFoyerIn.ressources_menage_arrondies_in = - (try ressources_menage_avec_arrondi_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1445; start_column=43; - end_line=1445; end_column=60; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementFoyerIn.nombre_personnes_a_charge_in = - (try nombre_personnes_a_charge_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1446; start_column=41; - end_line=1446; end_column=66; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementFoyerIn.situation_familiale_calcul_apl_in = - (try situation_familiale_calcul_apl_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1449; start_column=46; - end_line=1449; end_column=76; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementFoyerIn.zone_in = ( - try zone_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1447; start_column=20; - end_line=1447; end_column=24; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementFoyerIn.date_courante_in = - (try date_courante_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1448; start_column=29; - end_line=1448; end_column=42; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementFoyerIn.redevance_in = - ( - try (logement_foyer__.LogementFoyer.redevance) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1450; start_column=25; - end_line=1450; end_column=50; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAidePersonnaliseeLogementFoyerIn.condition_2_du_832_25_in = - (fun (_: unit) -> raise EmptyError); - CalculAidePersonnaliseeLogementFoyerIn.n_nombre_parts_d832_25_in = - (fun (_: unit) -> raise EmptyError)}) + (let traitement_formule_ : + CalculAidePersonnaliseeLogementFoyer.t = + (let result_ : CalculAidePersonnaliseeLogementFoyer.t = + ((log_begin_call + ["CalculAidePersonnaliséeLogementFoyer"; "direct"] + calcul_aide_personnalisee_logement_foyer) + ((log_variable_definition + ["CalculAidePersonnaliséeLogementFoyer"; "direct"; + "input"] + (embed_calcul_aide_personnalisee_logement_foyer_in) + ({CalculAidePersonnaliseeLogementFoyerIn.type_logement_foyer_in = + ( + try (logement_foyer__.LogementFoyer.type_user) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1478; start_column=35; + end_line=1478; end_column=55; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementFoyerIn.date_conventionnement_in = + ( + try + (logement_foyer__.LogementFoyer.date_conventionnement) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1479; start_column=37; + end_line=1479; end_column=74; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementFoyerIn.ressources_menage_arrondies_in = + (try ressources_menage_avec_arrondi_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1472; start_column=43; + end_line=1472; end_column=60; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementFoyerIn.nombre_personnes_a_charge_in = + (try nombre_personnes_a_charge_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1473; start_column=41; + end_line=1473; end_column=66; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementFoyerIn.situation_familiale_calcul_apl_in = + (try situation_familiale_calcul_apl_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1476; start_column=46; + end_line=1476; end_column=76; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementFoyerIn.zone_in = ( + try zone_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1474; start_column=20; + end_line=1474; end_column=24; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementFoyerIn.date_courante_in = + (try date_courante_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1475; start_column=29; + end_line=1475; end_column=42; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementFoyerIn.redevance_in = + ( + try (logement_foyer__.LogementFoyer.redevance) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1477; start_column=25; + end_line=1477; end_column=50; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAidePersonnaliseeLogementFoyerIn.condition_2_du_832_25_in = + (fun (_: unit) -> raise EmptyError); + CalculAidePersonnaliseeLogementFoyerIn.n_nombre_parts_d832_25_in = + (fun (_: unit) -> raise EmptyError)})))) + in + (let result_ : CalculAidePersonnaliseeLogementFoyer.t = + ({CalculAidePersonnaliseeLogementFoyer.coefficient_multiplicateur_d832_25 = + (result_.CalculAidePersonnaliseeLogementFoyer.coefficient_multiplicateur_d832_25); + CalculAidePersonnaliseeLogementFoyer.coefficient_r_d832_25 = + (result_.CalculAidePersonnaliseeLogementFoyer.coefficient_r_d832_25); + CalculAidePersonnaliseeLogementFoyer.n_nombre_parts_d832_25 = + (result_.CalculAidePersonnaliseeLogementFoyer.n_nombre_parts_d832_25); + CalculAidePersonnaliseeLogementFoyer.equivalence_loyer_eligible = + (result_.CalculAidePersonnaliseeLogementFoyer.equivalence_loyer_eligible); + CalculAidePersonnaliseeLogementFoyer.plafond_equivalence_loyer_eligible = + (result_.CalculAidePersonnaliseeLogementFoyer.plafond_equivalence_loyer_eligible); + CalculAidePersonnaliseeLogementFoyer.equivalence_loyer_minimale = + (result_.CalculAidePersonnaliseeLogementFoyer.equivalence_loyer_minimale); + CalculAidePersonnaliseeLogementFoyer.coefficient_prise_en_charge_d832_25 = + (result_.CalculAidePersonnaliseeLogementFoyer.coefficient_prise_en_charge_d832_25); + CalculAidePersonnaliseeLogementFoyer.aide_finale_formule = + (result_.CalculAidePersonnaliseeLogementFoyer.aide_finale_formule); + CalculAidePersonnaliseeLogementFoyer.traitement_aide_finale = + (fun (param_: money) -> (log_end_call + ["CalculAidePersonnaliséeLogementFoyer"; + "traitement_aide_finale"] + ((log_variable_definition + ["CalculAidePersonnaliséeLogementFoyer"; + "traitement_aide_finale"; "output"] + (embed_money) ((log_begin_call + ["CalculAidePersonnaliséeLogementFoyer"; + "traitement_aide_finale"] + (result_.CalculAidePersonnaliseeLogementFoyer.traitement_aide_finale)) + ((log_variable_definition + ["CalculAidePersonnaliséeLogementFoyer"; + "traitement_aide_finale"; "input"] + (embed_money) param_)))))))}) in + ((log_end_call + ["CalculAidePersonnaliséeLogementFoyer"; "direct"] + ((log_variable_definition + ["CalculAidePersonnaliséeLogementFoyer"; "direct"; + "output"] + (embed_calcul_aide_personnalisee_logement_foyer) + ( if + ((log_decision_taken + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1471; start_column=9; + end_line=1480; end_column=10; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]} + true)) then result_ else (raise EmptyError)))))))) in - {TraitementFormuleAideFinale.aide_finale_formule = - (traitement_formule_.CalculAidePersonnaliseeLogementFoyer.aide_finale_formule); - TraitementFormuleAideFinale.traitement_aide_finale = - (traitement_formule_.CalculAidePersonnaliseeLogementFoyer.traitement_aide_finale)}))) + ({TraitementFormuleAideFinale.aide_finale_formule = + (traitement_formule_.CalculAidePersonnaliseeLogementFoyer.aide_finale_formule); + TraitementFormuleAideFinale.traitement_aide_finale = + (traitement_formule_.CalculAidePersonnaliseeLogementFoyer.traitement_aide_finale)})))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -23506,15 +26540,15 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=746; start_column=10; end_line=746; end_column=32; + start_line=746; start_column=12; end_line=746; end_column=34; law_headings=["Tous secteurs"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1405; start_column=14; - end_line=1405; end_column=36; + start_line=1426; start_column=14; + end_line=1426; end_column=36; law_headings=["Article D823-9"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -23529,7 +26563,7 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=746; start_column=10; end_line=746; end_column=32; + start_line=746; start_column=12; end_line=746; end_column=34; law_headings=["Tous secteurs"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -23537,7 +26571,7 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=746; start_column=10; end_line=746; end_column=32; + start_line=746; start_column=12; end_line=746; end_column=34; law_headings=["Tous secteurs"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -23548,14 +26582,14 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=745; start_column=10; end_line=745; end_column=29; + start_line=745; start_column=12; end_line=745; end_column=31; law_headings=["Tous secteurs"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1404; start_column=14; end_line=1404; end_column=33; + start_line=1424; start_column=14; end_line=1424; end_column=33; law_headings=["Article D823-9"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -23569,7 +26603,7 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=745; start_column=10; end_line=745; end_column=29; + start_line=745; start_column=12; end_line=745; end_column=31; law_headings=["Tous secteurs"; "Calcul du montant de l'aide personnalisée au logement"; "Déclarations des champs d'application"; @@ -23597,7 +26631,7 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2022; start_column=14; end_line=2022; end_column=47; + start_line=2083; start_column=14; end_line=2083; end_column=47; law_headings=["Article D823-20"; "Section 2 : Prime de déménagement"; "Chapitre III : Modalités de liquidation et de versement"; @@ -23633,8 +26667,8 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1999; start_column=5; - end_line=2004; end_column=77; + start_line=2060; start_column=5; + end_line=2065; end_column=77; law_headings=["Article D823-20"; "Section 2 : Prime de déménagement"; "Chapitre III : Modalités de liquidation et de versement"; @@ -23642,19 +26676,20 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - (((Array.fold_left - (fun (acc_: integer) (personne_a_charge_: _) -> - if - (match personne_a_charge_ - with - | PersonneACharge.EnfantACharge _ -> true - | PersonneACharge.AutrePersonneACharge _ -> - false) then - (acc_ +! (integer_of_string "1")) else - acc_) (integer_of_string "0") - (menage_.Menage.personnes_a_charge)) +! - (informations_.InformationsPrimeDeDemenagement.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse)) - >=! (integer_of_string "3")))) (fun (_: unit) -> true))|]) + (o_gte_int_int + (o_add_int_int + (o_length + (o_filter + (fun + (personne_a_charge_: PersonneACharge.t) -> + match personne_a_charge_ + with + | PersonneACharge.EnfantACharge _ -> true + | PersonneACharge.AutrePersonneACharge _ -> + false) + (menage_.Menage.personnes_a_charge))) + (informations_.InformationsPrimeDeDemenagement.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse)) + (integer_of_string "3")))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/prologue.catala_fr"; start_line=454; start_column=11; end_line=454; end_column=32; @@ -23701,8 +26736,8 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli "base_mensuelle_allocations_familiales"; "BaseMensuelleAllocationsFamiliales"] base_mensuelle_allocations_familiales) - {BaseMensuelleAllocationsFamilialesIn.date_courante_in = - base_mensuelle_allocations_familiales_dot_date_courante_})) in + ({BaseMensuelleAllocationsFamilialesIn.date_courante_in = + base_mensuelle_allocations_familiales_dot_date_courante_}))) in let base_mensuelle_allocations_familiales_dot_montant_: money = result_.BaseMensuelleAllocationsFamiliales.montant in let eligibilite_apl_dot_menage_: Menage.t = try ((log_variable_definition @@ -23793,16 +26828,16 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli ["ÉligibilitéPrimeDeDéménagement"; "éligibilité_apl"; "ÉligibilitéAidesPersonnelleLogement"] eligibilite_aides_personnelle_logement) - {EligibiliteAidesPersonnelleLogementIn.menage_in = - eligibilite_apl_dot_menage_; - EligibiliteAidesPersonnelleLogementIn.demandeur_in = - eligibilite_apl_dot_demandeur_; - EligibiliteAidesPersonnelleLogementIn.date_courante_in = - eligibilite_apl_dot_date_courante_; - EligibiliteAidesPersonnelleLogementIn.condition_logement_residence_principale_in = - eligibilite_apl_dot_condition_logement_residence_principale_; - EligibiliteAidesPersonnelleLogementIn.condition_logement_surface_in = - eligibilite_apl_dot_condition_logement_surface_})) in + ({EligibiliteAidesPersonnelleLogementIn.menage_in = + eligibilite_apl_dot_menage_; + EligibiliteAidesPersonnelleLogementIn.demandeur_in = + eligibilite_apl_dot_demandeur_; + EligibiliteAidesPersonnelleLogementIn.date_courante_in = + eligibilite_apl_dot_date_courante_; + EligibiliteAidesPersonnelleLogementIn.condition_logement_residence_principale_in = + eligibilite_apl_dot_condition_logement_residence_principale_; + EligibiliteAidesPersonnelleLogementIn.condition_logement_surface_in = + eligibilite_apl_dot_condition_logement_surface_}))) in let eligibilite_apl_dot_date_courante_: date = result_.EligibiliteAidesPersonnelleLogement.date_courante in let eligibilite_apl_dot_eligibilite_: bool = result_.EligibiliteAidesPersonnelleLogement.eligibilite in let eligibilite_apl_dot_nombre_personnes_a_charge_prises_en_compte_: integer = result_.EligibiliteAidesPersonnelleLogement.nombre_personnes_a_charge_prises_en_compte in @@ -23829,8 +26864,8 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2008; start_column=6; - end_line=2018; end_column=77; + start_line=2069; start_column=6; + end_line=2079; end_column=75; law_headings=["Article D823-20"; "Section 2 : Prime de déménagement"; "Chapitre III : Modalités de liquidation et de versement"; @@ -23847,11 +26882,12 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli (match date_naissance_ou_grossesse_ with | DateDeNaissanceOuMoisDeGrossesse.DateDeNaissance date_naissance_ -> - (date_courante_ <=@ - ((first_day_of_month - (date_naissance_ +@ - (duration_of_numbers (2) (0) (0)))) - +@ (duration_of_numbers (0) (0) (-1)))) + (o_lte_dat_dat date_courante_ + (o_add_dat_dur + (o_firstDayOfMonth + (o_add_dat_dur date_naissance_ + (duration_of_numbers (2) (0) (0)))) + (duration_of_numbers (0) (0) (-1)))) | DateDeNaissanceOuMoisDeGrossesse.AvantPremierJourMoisCivilTroisiemeMoisDeGrossesse _ -> false | DateDeNaissanceOuMoisDeGrossesse.ApresPremierJourMoisCivilTroisiemeMoisDeGrossesse _ -> @@ -23881,40 +26917,44 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/arrete_2019-09-27.catala_fr"; - start_line=4422; start_column=14; end_line=4422; end_column=29; + start_line=4197; start_column=14; end_line=4197; end_column=29; law_headings=["Article 45"; "Chapitre VIII : Prime de déménagement"; "Arrêté du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de déménagement"]} true)) (fun (_: unit) -> - (base_mensuelle_allocations_familiales_dot_montant_ *$ - (decimal_of_string "2.4")) +$ + o_add_mon_mon + (o_mult_mon_rat + base_mensuelle_allocations_familiales_dot_montant_ + (decimal_of_string "2.4")) ( if - ((Array.fold_left - (fun (acc_: integer) (personne_a_charge_: _) -> - if - (match personne_a_charge_ - with - | PersonneACharge.EnfantACharge _ -> true - | PersonneACharge.AutrePersonneACharge _ -> false) - then (acc_ +! (integer_of_string "1")) else - acc_) (integer_of_string "0") - (menage_.Menage.personnes_a_charge)) >! + (o_gt_int_int + (o_length + (o_filter + (fun (personne_a_charge_: PersonneACharge.t) -> + match personne_a_charge_ + with + | PersonneACharge.EnfantACharge _ -> true + | PersonneACharge.AutrePersonneACharge _ -> + false) (menage_.Menage.personnes_a_charge))) (integer_of_string "3")) then - (base_mensuelle_allocations_familiales_dot_montant_ *$ - ((decimal_of_integer - ((Array.fold_left - (fun (acc_: integer) (personne_a_charge_: _) -> - if - (match personne_a_charge_ - with - | PersonneACharge.EnfantACharge _ -> true - | PersonneACharge.AutrePersonneACharge _ -> - false) then - (acc_ +! (integer_of_string "1")) else - acc_) (integer_of_string "0") - (menage_.Menage.personnes_a_charge)) -! - (integer_of_string "3"))) *& + (o_mult_mon_rat + base_mensuelle_allocations_familiales_dot_montant_ + (o_mult_rat_rat + (o_torat_int + (o_sub_int_int + (o_length + (o_filter + (fun + (personne_a_charge_: PersonneACharge.t) -> + match personne_a_charge_ + with + | PersonneACharge.EnfantACharge _ -> + true + | PersonneACharge.AutrePersonneACharge _ -> + false) + (menage_.Menage.personnes_a_charge))) + (integer_of_string "3"))) (decimal_of_string "0.2"))) else (money_of_cents_string "0")))) with @@ -23945,18 +26985,20 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; start_line=563; start_column=5; - end_line=566; end_column=43; + end_line=566; end_column=42; law_headings=["Article L823-8"; "Chapitre III : Modalités de liquidation et de versement"; "Titre II : Dispositions communes aux aides personnelles au logement"; "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - (eligibilite_apl_dot_eligibilite_ && - (condition_rang_enfant_ && - (condition_periode_demenagement_ && - ((eligibilite_apl_dot_date_courante_ -@ - date_emmenagement_) <=^ + (o_and eligibilite_apl_dot_eligibilite_ + (o_and condition_rang_enfant_ + (o_and condition_periode_demenagement_ + (o_lte_dur_dur + (o_sub_dat_dat + eligibilite_apl_dot_date_courante_ + date_emmenagement_) delai_apres_emmenagement_l823_8_2_)))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken @@ -23979,13 +27021,13 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=464; start_column=10; end_line=464; end_column=36; + start_line=464; start_column=12; end_line=464; end_column=38; law_headings=["Éligibilité à la prime de déménagement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2048; start_column=14; end_line=2048; end_column=40; + start_line=2109; start_column=14; end_line=2109; end_column=40; law_headings=["Article D823-22"; "Section 2 : Prime de déménagement"; "Chapitre III : Modalités de liquidation et de versement"; @@ -23996,13 +27038,13 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli true)) (fun (_: unit) -> if - (depenses_justifiees_reellement_engagees_ <=$ plafond_d823_22_) - then depenses_justifiees_reellement_engagees_ else - plafond_d823_22_)) + (o_lte_mon_mon depenses_justifiees_reellement_engagees_ + plafond_d823_22_) then + depenses_justifiees_reellement_engagees_ else plafond_d823_22_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=464; start_column=10; end_line=464; end_column=36; + start_line=464; start_column=12; end_line=464; end_column=38; law_headings=["Éligibilité à la prime de déménagement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in @@ -24052,8 +27094,8 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2960; start_column=5; - end_line=2963; end_column=46; + start_line=3021; start_column=5; + end_line=3024; end_column=41; law_headings=["Article R832-7"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -24061,20 +27103,25 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - ((match (param_.Pret.titulaire_pret) - with - | TitulairePret.Demandeur _ -> - false - | TitulairePret.VendeurQuandDemandeurAContratLocationAccession _ -> - true) && - ((match (param_.Pret.type_pret) - with - | TypePret.D331_32 _ -> false - | TypePret.D331_63_64 _ -> - false - | TypePret.D331_59_8 _ -> true - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false) || + (o_and + (match + (param_.Pret.titulaire_pret) + with + | TitulairePret.Demandeur _ -> + false + | TitulairePret.VendeurQuandDemandeurAContratLocationAccession _ -> + true) + (o_or + (match (param_.Pret.type_pret) + with + | TypePret.D331_32 _ -> false + | TypePret.D331_63_64 _ -> + false + | TypePret.D331_59_8 _ -> + true + | TypePret.D331_76_1 _ -> + false + | TypePret.Autre _ -> false) (match (param_.Pret.type_pret) with | TypePret.D331_32 _ -> false @@ -24088,8 +27135,8 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2925; start_column=5; - end_line=2927; end_column=47; + start_line=2986; start_column=5; + end_line=2988; end_column=42; law_headings=["Article R832-5"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -24097,18 +27144,20 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge "Livre VIII : Aides personnelles au logement"; "Partie réglementaire"; "Code de la construction et de l'habitation"]} - ((match (param_.Pret.titulaire_pret) - with - | TitulairePret.Demandeur _ -> true - | TitulairePret.VendeurQuandDemandeurAContratLocationAccession _ -> - false) && - ((match (param_.Pret.type_pret) - with - | TypePret.D331_32 _ -> true - | TypePret.D331_63_64 _ -> false - | TypePret.D331_59_8 _ -> false - | TypePret.D331_76_1 _ -> false - | TypePret.Autre _ -> false) || + (o_and + (match (param_.Pret.titulaire_pret) + with + | TitulairePret.Demandeur _ -> true + | TitulairePret.VendeurQuandDemandeurAContratLocationAccession _ -> + false) + (o_or + (match (param_.Pret.type_pret) + with + | TypePret.D331_32 _ -> true + | TypePret.D331_63_64 _ -> false + | TypePret.D331_59_8 _ -> false + | TypePret.D331_76_1 _ -> false + | TypePret.Autre _ -> false) (match (param_.Pret.type_pret) with | TypePret.D331_32 _ -> false @@ -24227,40 +27276,42 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge | ModeOccupation.ResidentLogementFoyer _ -> false | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation propriete_ -> - ((((propriete_.Proprietaire.pret).Pret.date_signature) - >=@ - (date_of_numbers (2018) (1) (1))) - && - ((((propriete_.Proprietaire.pret).Pret.date_signature) - <@ - (date_of_numbers (2020) (1) (1))) - && - ((match - (propriete_.Proprietaire.anciennete_logement) - with - | NeufOuAncien.Neuf _ -> - false - | NeufOuAncien.Ancien _ -> - true) && + (o_and + (o_gte_dat_dat + ((propriete_.Proprietaire.pret).Pret.date_signature) + (date_of_numbers (2018) (1) (1))) + (o_and + (o_lt_dat_dat + ((propriete_.Proprietaire.pret).Pret.date_signature) + (date_of_numbers (2020) (1) (1))) + (o_and + (match + (propriete_.Proprietaire.anciennete_logement) + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) (propriete_.Proprietaire.logement_situe_commune_desequilibre_l831_2)))) | ModeOccupation.SousLocataire _ -> false | ModeOccupation.LocationAccession propriete_ -> - ((((propriete_.Proprietaire.pret).Pret.date_signature) - >=@ - (date_of_numbers (2018) (1) (1))) - && - ((((propriete_.Proprietaire.pret).Pret.date_signature) - <@ - (date_of_numbers (2020) (1) (1))) - && - ((match - (propriete_.Proprietaire.anciennete_logement) - with - | NeufOuAncien.Neuf _ -> - false - | NeufOuAncien.Ancien _ -> - true) && + (o_and + (o_gte_dat_dat + ((propriete_.Proprietaire.pret).Pret.date_signature) + (date_of_numbers (2018) (1) (1))) + (o_and + (o_lt_dat_dat + ((propriete_.Proprietaire.pret).Pret.date_signature) + (date_of_numbers (2020) (1) (1))) + (o_and + (match + (propriete_.Proprietaire.anciennete_logement) + with + | NeufOuAncien.Neuf _ -> + false + | NeufOuAncien.Ancien _ -> + true) (propriete_.Proprietaire.logement_situe_commune_desequilibre_l831_2))))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken @@ -24280,12 +27331,14 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge | ModeOccupation.ResidentLogementFoyer _ -> false | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation propriete_ -> - (((propriete_.Proprietaire.pret).Pret.date_signature) - >=@ (date_of_numbers (2017) (12) (31))) + (o_gte_dat_dat + ((propriete_.Proprietaire.pret).Pret.date_signature) + (date_of_numbers (2017) (12) (31))) | ModeOccupation.SousLocataire _ -> false | ModeOccupation.LocationAccession propriete_ -> - (((propriete_.Proprietaire.pret).Pret.date_signature) - >=@ (date_of_numbers (2017) (12) (31)))))) + (o_gte_dat_dat + ((propriete_.Proprietaire.pret).Pret.date_signature) + (date_of_numbers (2017) (12) (31)))))) (fun (_: unit) -> false))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; @@ -24400,16 +27453,16 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge ["ÉligibilitéAidePersonnaliséeLogement"; "éligibilité_commune"; "ÉligibilitéAidesPersonnelleLogement"] eligibilite_aides_personnelle_logement) - {EligibiliteAidesPersonnelleLogementIn.menage_in = - eligibilite_commune_dot_menage_; - EligibiliteAidesPersonnelleLogementIn.demandeur_in = - eligibilite_commune_dot_demandeur_; - EligibiliteAidesPersonnelleLogementIn.date_courante_in = - eligibilite_commune_dot_date_courante_; - EligibiliteAidesPersonnelleLogementIn.condition_logement_residence_principale_in = - eligibilite_commune_dot_condition_logement_residence_principale_; - EligibiliteAidesPersonnelleLogementIn.condition_logement_surface_in = - eligibilite_commune_dot_condition_logement_surface_})) in + ({EligibiliteAidesPersonnelleLogementIn.menage_in = + eligibilite_commune_dot_menage_; + EligibiliteAidesPersonnelleLogementIn.demandeur_in = + eligibilite_commune_dot_demandeur_; + EligibiliteAidesPersonnelleLogementIn.date_courante_in = + eligibilite_commune_dot_date_courante_; + EligibiliteAidesPersonnelleLogementIn.condition_logement_residence_principale_in = + eligibilite_commune_dot_condition_logement_residence_principale_; + EligibiliteAidesPersonnelleLogementIn.condition_logement_surface_in = + eligibilite_commune_dot_condition_logement_surface_}))) in let eligibilite_commune_dot_date_courante_: date = result_.EligibiliteAidesPersonnelleLogement.date_courante in let eligibilite_commune_dot_eligibilite_: bool = result_.EligibiliteAidesPersonnelleLogement.eligibilite in let eligibilite_commune_dot_nombre_personnes_a_charge_prises_en_compte_: integer = result_.EligibiliteAidesPersonnelleLogement.nombre_personnes_a_charge_prises_en_compte in @@ -24481,9 +27534,9 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3632; + start_line=3693; start_column=5; - end_line=3637; end_column=30; + end_line=3698; end_column=30; law_headings= ["Article R832-21"; "Sous-Section 1 : Conditions d'assimilation des logements-foyers aux logements à usage locatif"; @@ -24663,7 +27716,7 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=372; start_column=10; end_line=372; end_column=59; + start_line=372; start_column=12; end_line=372; end_column=61; law_headings=["Éligibilité à l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) @@ -24678,7 +27731,7 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=372; start_column=10; end_line=372; end_column=59; + start_line=372; start_column=12; end_line=372; end_column=61; law_headings=["Éligibilité à l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in @@ -24688,7 +27741,7 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=371; start_column=10; end_line=371; end_column=52; + start_line=371; start_column=12; end_line=371; end_column=54; law_headings=["Éligibilité à l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) @@ -24703,7 +27756,7 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=371; start_column=10; end_line=371; end_column=52; + start_line=371; start_column=12; end_line=371; end_column=54; law_headings=["Éligibilité à l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in @@ -24713,15 +27766,15 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=370; start_column=10; end_line=370; end_column=21; + start_line=370; start_column=12; end_line=370; end_column=23; law_headings=["Éligibilité à l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([|(fun (_: unit) -> handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=370; start_column=10; - end_line=370; end_column=21; + start_line=370; start_column=12; + end_line=370; end_column=23; law_headings=["Éligibilité à l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) @@ -24734,13 +27787,13 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - (condition_logement_bailleur_ && - (condition_logement_pret_ && + (o_and condition_logement_bailleur_ + (o_and condition_logement_pret_ eligibilite_commune_dot_eligibilite_)))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=370; start_column=10; end_line=370; end_column=21; + start_line=370; start_column=12; end_line=370; end_column=23; law_headings=["Éligibilité à l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} true)) @@ -24748,7 +27801,7 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=370; start_column=10; end_line=370; end_column=21; + start_line=370; start_column=12; end_line=370; end_column=23; law_headings=["Éligibilité à l'aide personnalisée au logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in @@ -24775,7 +27828,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4110; start_column=14; end_line=4110; end_column=28; + start_line=4171; start_column=14; end_line=4171; end_column=28; law_headings=["Article D841-1"; "Chapitre 1 : Champ d'application"; "Titre IV : Allocations de Logement"; @@ -24870,12 +27923,12 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi ["ÉligibilitéAllocationLogement"; "prestations_familiales"; "ÉligibilitéPrestationsFamiliales"] eligibilite_prestations_familiales) - {EligibilitePrestationsFamilialesIn.date_courante_in = - prestations_familiales_dot_date_courante_; - EligibilitePrestationsFamilialesIn.prestation_courante_in = - prestations_familiales_dot_prestation_courante_; - EligibilitePrestationsFamilialesIn.residence_in = - prestations_familiales_dot_residence_})) in + ({EligibilitePrestationsFamilialesIn.date_courante_in = + prestations_familiales_dot_date_courante_; + EligibilitePrestationsFamilialesIn.prestation_courante_in = + prestations_familiales_dot_prestation_courante_; + EligibilitePrestationsFamilialesIn.residence_in = + prestations_familiales_dot_residence_}))) in let prestations_familiales_dot_droit_ouvert_: EnfantPrestationsFamiliales.t -> bool = result_.EligibilitePrestationsFamiliales.droit_ouvert in let prestations_familiales_dot_conditions_hors_age_: EnfantPrestationsFamiliales.t -> @@ -24937,9 +27990,9 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4303; + start_line=4364; start_column=5; - end_line=4308; end_column=28; + end_line=4369; end_column=28; law_headings=["Article R842-5"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -24955,13 +28008,14 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi | ModeOccupation.ResidentLogementFoyer _ -> false | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation proprietaire_ -> - ((match - ((proprietaire_.Proprietaire.pret).Pret.titulaire_pret) - with - | TitulairePret.Demandeur _ -> - true - | TitulairePret.VendeurQuandDemandeurAContratLocationAccession _ -> - false) && + (o_and + (match + ((proprietaire_.Proprietaire.pret).Pret.titulaire_pret) + with + | TitulairePret.Demandeur _ -> + true + | TitulairePret.VendeurQuandDemandeurAContratLocationAccession _ -> + false) (match (proprietaire_.Proprietaire.type_travaux_logement_r842_5) with @@ -24981,9 +28035,9 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4286; + start_line=4347; start_column=5; - end_line=4291; end_column=28; + end_line=4352; end_column=28; law_headings=["Article R842-5"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -24999,13 +28053,14 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi | ModeOccupation.ResidentLogementFoyer _ -> false | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation proprietaire_ -> - ((match - ((proprietaire_.Proprietaire.pret).Pret.titulaire_pret) - with - | TitulairePret.Demandeur _ -> - true - | TitulairePret.VendeurQuandDemandeurAContratLocationAccession _ -> - false) && + (o_and + (match + ((proprietaire_.Proprietaire.pret).Pret.titulaire_pret) + with + | TitulairePret.Demandeur _ -> + true + | TitulairePret.VendeurQuandDemandeurAContratLocationAccession _ -> + false) (match (proprietaire_.Proprietaire.type_travaux_logement_r842_5) with @@ -25024,8 +28079,8 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4269; start_column=5; - end_line=4276; end_column=28; + start_line=4330; start_column=5; + end_line=4337; end_column=28; law_headings=["Article R842-5"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -25040,24 +28095,26 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi | ModeOccupation.ResidentLogementFoyer _ -> false | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation proprietaire_ -> - ((match - ((proprietaire_.Proprietaire.pret).Pret.titulaire_pret) - with - | TitulairePret.Demandeur _ -> - true - | TitulairePret.VendeurQuandDemandeurAContratLocationAccession _ -> - false) && - ((match - (proprietaire_.Proprietaire.type_travaux_logement_r842_5) - with - | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> - false - | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> - false - | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> - false - | TypeTravauxLogementR8425.PasDeTravaux _ -> - true) || + (o_and + (match + ((proprietaire_.Proprietaire.pret).Pret.titulaire_pret) + with + | TitulairePret.Demandeur _ -> + true + | TitulairePret.VendeurQuandDemandeurAContratLocationAccession _ -> + false) + (o_or + (match + (proprietaire_.Proprietaire.type_travaux_logement_r842_5) + with + | TypeTravauxLogementR8425.ObjectifDecenceLogement _ -> + false + | TypeTravauxLogementR8425.PrevuDansListeR321_15 _ -> + false + | TypeTravauxLogementR8425.AgrandirOuRendreHabitableD331_63 _ -> + false + | TypeTravauxLogementR8425.PasDeTravaux _ -> + true) (match (proprietaire_.Proprietaire.type_travaux_logement_r842_5) with @@ -25077,8 +28134,8 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: unit) -> raise EmptyError))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4239; start_column=5; - end_line=4241; end_column=28; + start_line=4300; start_column=5; + end_line=4302; end_column=28; law_headings=["Article R842-5"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -25189,8 +28246,8 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4707; start_column=9; - end_line=4707; end_column=68; + start_line=4768; start_column=9; + end_line=4768; end_column=68; law_headings=["Article R842-14"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -25201,8 +28258,8 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4707; start_column=9; - end_line=4707; end_column=68; + start_line=4768; start_column=9; + end_line=4768; end_column=68; law_headings=["Article R842-14"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -25227,7 +28284,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi "éligibilité_commune.condition_logement_surface"] (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4708; start_column=9; end_line=4708; end_column=55; + start_line=4769; start_column=9; end_line=4769; end_column=55; law_headings=["Article R842-14"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; "Titre IV : Allocations de Logement"; @@ -25237,7 +28294,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4708; start_column=9; end_line=4708; end_column=55; + start_line=4769; start_column=9; end_line=4769; end_column=55; law_headings=["Article R842-14"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -25261,16 +28318,16 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi ["ÉligibilitéAllocationLogement"; "éligibilité_commune"; "ÉligibilitéAidesPersonnelleLogement"] eligibilite_aides_personnelle_logement) - {EligibiliteAidesPersonnelleLogementIn.menage_in = - eligibilite_commune_dot_menage_; - EligibiliteAidesPersonnelleLogementIn.demandeur_in = - eligibilite_commune_dot_demandeur_; - EligibiliteAidesPersonnelleLogementIn.date_courante_in = - eligibilite_commune_dot_date_courante_; - EligibiliteAidesPersonnelleLogementIn.condition_logement_residence_principale_in = - eligibilite_commune_dot_condition_logement_residence_principale_; - EligibiliteAidesPersonnelleLogementIn.condition_logement_surface_in = - eligibilite_commune_dot_condition_logement_surface_})) in + ({EligibiliteAidesPersonnelleLogementIn.menage_in = + eligibilite_commune_dot_menage_; + EligibiliteAidesPersonnelleLogementIn.demandeur_in = + eligibilite_commune_dot_demandeur_; + EligibiliteAidesPersonnelleLogementIn.date_courante_in = + eligibilite_commune_dot_date_courante_; + EligibiliteAidesPersonnelleLogementIn.condition_logement_residence_principale_in = + eligibilite_commune_dot_condition_logement_residence_principale_; + EligibiliteAidesPersonnelleLogementIn.condition_logement_surface_in = + eligibilite_commune_dot_condition_logement_surface_}))) in let eligibilite_commune_dot_date_courante_: date = result_.EligibiliteAidesPersonnelleLogement.date_courante in let eligibilite_commune_dot_eligibilite_: bool = result_.EligibiliteAidesPersonnelleLogement.eligibilite in let eligibilite_commune_dot_nombre_personnes_a_charge_prises_en_compte_: integer = result_.EligibiliteAidesPersonnelleLogement.nombre_personnes_a_charge_prises_en_compte in @@ -25284,7 +28341,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=414; start_column=10; end_line=414; end_column=59; + start_line=414; start_column=12; end_line=414; end_column=61; law_headings=["Éligibilité aux allocations de logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) @@ -25299,7 +28356,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=414; start_column=10; end_line=414; end_column=59; + start_line=414; start_column=12; end_line=414; end_column=61; law_headings=["Éligibilité aux allocations de logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in @@ -25309,7 +28366,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=413; start_column=10; end_line=413; end_column=52; + start_line=413; start_column=12; end_line=413; end_column=54; law_headings=["Éligibilité aux allocations de logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]} ([||]) @@ -25324,7 +28381,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=413; start_column=10; end_line=413; end_column=52; + start_line=413; start_column=12; end_line=413; end_column=54; law_headings=["Éligibilité aux allocations de logement"; "Déclarations des champs d'application"; "Prologue : aides au logement"]})))) in @@ -25350,8 +28407,8 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi true)) (fun (_: unit) -> if - ((not eligibilite_commune_dot_eligibilite_) || - (not condition_accession_propriete_)) then + (o_or (o_not eligibilite_commune_dot_eligibilite_) + (o_not condition_accession_propriete_)) then (TypeEligibiliteAllocationLogement.PasEligible ()) else (TypeEligibiliteAllocationLogement.AllocationLogementSociale ()))) with @@ -25416,9 +28473,9 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=999; + start_line=1002; start_column=5; - end_line=1003; end_column=29; + end_line=1006; end_column=29; law_headings=["Article L841-1"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -25429,11 +28486,12 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (menage_.Menage.situation_familiale) with | SituationFamiliale.Celibataire _ -> - (((array_length - (menage_.Menage.personnes_a_charge)) - = - (integer_of_string - "0")) && + (o_and + (o_eq + (o_length + (menage_.Menage.personnes_a_charge)) + (integer_of_string + "0")) (menage_.Menage.enfant_a_naitre_apres_quatrieme_mois_grossesse)) | SituationFamiliale.Maries _ -> false @@ -25481,9 +28539,9 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=976; + start_line=979; start_column=5; - end_line=987; end_column=12; + end_line=990; end_column=13; law_headings= ["Article L841-1"; "Chapitre Ier : Champ d'application"; @@ -25491,14 +28549,14 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - ((Array.fold_left + (o_gte_int_int + ( + o_length + (o_filter (fun - (acc_: - integer) (personne_a_charge_: - _) -> - if - (match + PersonneACharge.t) -> + match personne_a_charge_ with | @@ -25506,19 +28564,10 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi false | PersonneACharge.AutrePersonneACharge parent_ -> - ((parent_.AutrePersonneACharge.ascendant_descendant_collateral_deuxieme_troisieme_degre) - && + (o_and + (parent_.AutrePersonneACharge.ascendant_descendant_collateral_deuxieme_troisieme_degre) (parent_.AutrePersonneACharge.incapacite_80_pourcent_ou_restriction_emploi))) - then - (acc_ +! - (integer_of_string - "1")) - else - acc_) - (integer_of_string - "0") - (menage_.Menage.personnes_a_charge)) - >=! + (menage_.Menage.personnes_a_charge))) (integer_of_string "1")))) (fun @@ -25527,9 +28576,9 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=959; + start_line=961; start_column=5; - end_line=960; end_column=72; + end_line=963; end_column=9; law_headings= ["Article L841-1"; "Chapitre Ier : Champ d'application"; @@ -25537,14 +28586,13 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - ((Array.fold_left - (fun - (acc_: - integer) - (personne_a_charge_: - _) -> - if - ((log_end_call + (o_gte_int_int + (o_length + (o_filter + (fun + (personne_a_charge_: + PersonneACharge.t) -> + (log_end_call ["ÉligibilitéAidesPersonnelleLogement"; "condition_2_r823_4"] ((log_variable_definition @@ -25562,16 +28610,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi "input"] (embed_personne_a_charge) personne_a_charge_))))))) - then - (acc_ +! - (integer_of_string - "1")) - else - acc_) - (integer_of_string - "0") - (menage_.Menage.personnes_a_charge)) - >=! + (menage_.Menage.personnes_a_charge))) (integer_of_string "1")))) (fun (_: unit) -> true))|]) @@ -25580,75 +28619,75 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi EmptyError)))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=921; start_column=5; - end_line=945; end_column=29; + start_line=922; start_column=5; + end_line=947; end_column=29; law_headings=["Article L841-1"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - (((Array.fold_left - (fun (acc_: integer) - (personne_a_charge_: _) -> - if - (match personne_a_charge_ - with - | PersonneACharge.EnfantACharge enfant_ -> - (not ((log_end_call - ["ÉligibilitéPrestationsFamiliales"; - "droit_ouvert"] - ((log_variable_definition - ["ÉligibilitéPrestationsFamiliales"; - "droit_ouvert"; - "output"] - (embed_bool) - ((log_begin_call - ["ÉligibilitéPrestationsFamiliales"; - "droit_ouvert"] - prestations_familiales_dot_droit_ouvert_) - ((log_variable_definition - ["ÉligibilitéPrestationsFamiliales"; - "droit_ouvert"; - "input"] - (embed_enfant_prestations_familiales) - {EnfantPrestationsFamiliales.identifiant = - (enfant_.EnfantACharge.identifiant); - EnfantPrestationsFamiliales.obligation_scolaire = - (enfant_.EnfantACharge.obligation_scolaire); - EnfantPrestationsFamiliales.remuneration_mensuelle = - (enfant_.EnfantACharge.remuneration_mensuelle); - EnfantPrestationsFamiliales.date_de_naissance = - (enfant_.EnfantACharge.date_de_naissance); - EnfantPrestationsFamiliales.prise_en_charge = - (match - (enfant_.EnfantACharge.situation_garde_alternee) - with - | SituationGardeAlternee.PasDeGardeAlternee _ -> - (PriseEnChargeEnfant.EffectiveEtPermanente - ()) - | SituationGardeAlternee.GardeAlterneeCoefficientPriseEnCharge _ -> - (PriseEnChargeEnfant.GardeAlterneePartageAllocations - ())); - EnfantPrestationsFamiliales.a_deja_ouvert_droit_aux_allocations_familiales = - (enfant_.EnfantACharge.a_deja_ouvert_droit_aux_allocations_familiales); - EnfantPrestationsFamiliales.beneficie_titre_personnel_aide_personnelle_logement = - (enfant_.EnfantACharge.beneficie_titre_personnel_aide_personnelle_logement)})))))))) - | PersonneACharge.AutrePersonneACharge _ -> - false) then - (acc_ +! (integer_of_string - "1")) else acc_) - (integer_of_string "0") - (menage_.Menage.personnes_a_charge)) - = (integer_of_string "0")) && + (o_and + (o_eq + (o_length + (o_filter + (fun + (personne_a_charge_: + PersonneACharge.t) -> + match personne_a_charge_ + with + | PersonneACharge.EnfantACharge enfant_ -> + (o_not ((log_end_call + ["ÉligibilitéPrestationsFamiliales"; + "droit_ouvert"] + ((log_variable_definition + ["ÉligibilitéPrestationsFamiliales"; + "droit_ouvert"; + "output"] + (embed_bool) + ((log_begin_call + ["ÉligibilitéPrestationsFamiliales"; + "droit_ouvert"] + prestations_familiales_dot_droit_ouvert_) + ((log_variable_definition + ["ÉligibilitéPrestationsFamiliales"; + "droit_ouvert"; + "input"] + (embed_enfant_prestations_familiales) + ({EnfantPrestationsFamiliales.identifiant = + (enfant_.EnfantACharge.identifiant); + EnfantPrestationsFamiliales.obligation_scolaire = + (enfant_.EnfantACharge.obligation_scolaire); + EnfantPrestationsFamiliales.remuneration_mensuelle = + (enfant_.EnfantACharge.remuneration_mensuelle); + EnfantPrestationsFamiliales.date_de_naissance = + (enfant_.EnfantACharge.date_de_naissance); + EnfantPrestationsFamiliales.prise_en_charge = + (match + (enfant_.EnfantACharge.situation_garde_alternee) + with + | SituationGardeAlternee.PasDeGardeAlternee _ -> + (PriseEnChargeEnfant.EffectiveEtPermanente + ()) + | SituationGardeAlternee.GardeAlterneeCoefficientPriseEnCharge _ -> + (PriseEnChargeEnfant.GardeAlterneePartageAllocations + ())); + EnfantPrestationsFamiliales.a_deja_ouvert_droit_aux_allocations_familiales = + (enfant_.EnfantACharge.a_deja_ouvert_droit_aux_allocations_familiales); + EnfantPrestationsFamiliales.beneficie_titre_personnel_aide_personnelle_logement = + (enfant_.EnfantACharge.beneficie_titre_personnel_aide_personnelle_logement)}))))))))) + | PersonneACharge.AutrePersonneACharge _ -> + false) + (menage_.Menage.personnes_a_charge))) + (integer_of_string "0")) (match (menage_.Menage.situation_familiale) with | SituationFamiliale.Celibataire _ -> false | SituationFamiliale.Maries date_mariage_ -> - (date_courante_ <=@ - (date_mariage_ +@ + (o_lte_dat_dat date_courante_ + (o_add_dat_dur date_mariage_ duree_l841_1_3_)) | SituationFamiliale.Pacses _ -> false @@ -25660,87 +28699,88 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi false)))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=889; start_column=5; - end_line=910; end_column=11; + start_line=890; start_column=5; + end_line=911; end_column=8; law_headings=["Article L841-1"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - ((Array.fold_left - (fun (acc_: integer) - (personne_a_charge_: _) -> - if - (match personne_a_charge_ - with - | PersonneACharge.EnfantACharge enfant_ -> - ((log_end_call - ["ÉligibilitéPrestationsFamiliales"; - "droit_ouvert"] - ((log_variable_definition - ["ÉligibilitéPrestationsFamiliales"; - "droit_ouvert"; "output"] - (embed_bool) ((log_begin_call - ["ÉligibilitéPrestationsFamiliales"; - "droit_ouvert"] - prestations_familiales_dot_droit_ouvert_) - ((log_variable_definition - ["ÉligibilitéPrestationsFamiliales"; - "droit_ouvert"; "input"] - (embed_enfant_prestations_familiales) - {EnfantPrestationsFamiliales.identifiant = - (enfant_.EnfantACharge.identifiant); - EnfantPrestationsFamiliales.obligation_scolaire = - (enfant_.EnfantACharge.obligation_scolaire); - EnfantPrestationsFamiliales.remuneration_mensuelle = - (enfant_.EnfantACharge.remuneration_mensuelle); - EnfantPrestationsFamiliales.date_de_naissance = - (enfant_.EnfantACharge.date_de_naissance); - EnfantPrestationsFamiliales.prise_en_charge = - (match - (enfant_.EnfantACharge.situation_garde_alternee) - with - | SituationGardeAlternee.PasDeGardeAlternee _ -> - (PriseEnChargeEnfant.EffectiveEtPermanente - ()) - | SituationGardeAlternee.GardeAlterneeCoefficientPriseEnCharge _ -> - (PriseEnChargeEnfant.GardeAlterneePartageAllocations - ())); - EnfantPrestationsFamiliales.a_deja_ouvert_droit_aux_allocations_familiales = - (enfant_.EnfantACharge.a_deja_ouvert_droit_aux_allocations_familiales); - EnfantPrestationsFamiliales.beneficie_titre_personnel_aide_personnelle_logement = - (enfant_.EnfantACharge.beneficie_titre_personnel_aide_personnelle_logement)}))))))) - | PersonneACharge.AutrePersonneACharge _ -> - false) then - (acc_ +! (integer_of_string "1")) else - acc_) (integer_of_string "0") - (menage_.Menage.personnes_a_charge)) = + (o_eq + (o_length + (o_filter + (fun + (personne_a_charge_: + PersonneACharge.t) -> + match personne_a_charge_ + with + | PersonneACharge.EnfantACharge enfant_ -> + ((log_end_call + ["ÉligibilitéPrestationsFamiliales"; + "droit_ouvert"] + ((log_variable_definition + ["ÉligibilitéPrestationsFamiliales"; + "droit_ouvert"; "output"] + (embed_bool) ((log_begin_call + ["ÉligibilitéPrestationsFamiliales"; + "droit_ouvert"] + prestations_familiales_dot_droit_ouvert_) + ((log_variable_definition + ["ÉligibilitéPrestationsFamiliales"; + "droit_ouvert"; "input"] + (embed_enfant_prestations_familiales) + ({EnfantPrestationsFamiliales.identifiant = + (enfant_.EnfantACharge.identifiant); + EnfantPrestationsFamiliales.obligation_scolaire = + (enfant_.EnfantACharge.obligation_scolaire); + EnfantPrestationsFamiliales.remuneration_mensuelle = + (enfant_.EnfantACharge.remuneration_mensuelle); + EnfantPrestationsFamiliales.date_de_naissance = + (enfant_.EnfantACharge.date_de_naissance); + EnfantPrestationsFamiliales.prise_en_charge = + (match + (enfant_.EnfantACharge.situation_garde_alternee) + with + | SituationGardeAlternee.PasDeGardeAlternee _ -> + (PriseEnChargeEnfant.EffectiveEtPermanente + ()) + | SituationGardeAlternee.GardeAlterneeCoefficientPriseEnCharge _ -> + (PriseEnChargeEnfant.GardeAlterneePartageAllocations + ())); + EnfantPrestationsFamiliales.a_deja_ouvert_droit_aux_allocations_familiales = + (enfant_.EnfantACharge.a_deja_ouvert_droit_aux_allocations_familiales); + EnfantPrestationsFamiliales.beneficie_titre_personnel_aide_personnelle_logement = + (enfant_.EnfantACharge.beneficie_titre_personnel_aide_personnelle_logement)})))))))) + | PersonneACharge.AutrePersonneACharge _ -> + false) + (menage_.Menage.personnes_a_charge))) (integer_of_string "1")))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; start_line=870; start_column=5; - end_line=874; end_column=52; + end_line=875; end_column=6; law_headings=["Article L841-1"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; "Livre VIII : Aides personnelles au logement"; "Partie législative"; "Code de la construction et de l'habitation"]} - (Array.fold_left - (fun (acc_: bool) (prestation_: _) -> - acc_ || - ((prestation_ = - (PrestationRecue.AllocationsFamiliales ())) - || - ((prestation_ = - (PrestationRecue.ComplementFamilial ())) - || - ((prestation_ = - (PrestationRecue.AllocationSoutienFamilial - ())) || - (prestation_ = + (o_fold + (fun (acc_: bool) (prestation_: PrestationRecue.t) -> + o_or acc_ + (o_or + (o_eq prestation_ + (PrestationRecue.AllocationsFamiliales ())) + (o_or + (o_eq prestation_ + (PrestationRecue.ComplementFamilial ())) + (o_or + (o_eq prestation_ + (PrestationRecue.AllocationSoutienFamilial + ())) + (o_eq prestation_ (PrestationRecue.AllocationSoutienEnfantHandicape ())))))) false (menage_.Menage.prestations_recues)))) @@ -25788,8 +28828,8 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1121; start_column=5; - end_line=1121; end_column=73; + start_line=1124; start_column=5; + end_line=1124; end_column=73; law_headings=["Article L841-3"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -25811,8 +28851,8 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1134; start_column=5; - end_line=1137; end_column=28; + start_line=1137; start_column=5; + end_line=1140; end_column=28; law_headings=["Article L841-4"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -25826,8 +28866,9 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi | ModeOccupation.ResidentLogementFoyer _ -> false | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation proprietaire_ -> - (((proprietaire_.Proprietaire.pret).Pret.date_signature) - >@ (date_of_numbers (2017) (12) (31))) + (o_gt_dat_dat + ((proprietaire_.Proprietaire.pret).Pret.date_signature) + (date_of_numbers (2017) (12) (31))) | ModeOccupation.SousLocataire _ -> false | ModeOccupation.LocationAccession _ -> false))) (fun (_: unit) -> @@ -25835,7 +28876,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1030; start_column=14; end_line=1030; end_column=25; + start_line=1033; start_column=14; end_line=1033; end_column=25; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -25845,8 +28886,9 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi true)) (fun (_: unit) -> if - ((eligibilite_dispositions_communes_ = - (TypeEligibiliteAllocationLogement.PasEligible ())) || + (o_or + (o_eq eligibilite_dispositions_communes_ + (TypeEligibiliteAllocationLogement.PasEligible ())) beneficie_aide_personnalisee_logement_) then (TypeEligibiliteAllocationLogement.PasEligible ()) else ( if eligibilite_allocation_logement_familiale_ then @@ -25887,7 +28929,7 @@ let calcul_allocation_logement (calcul_allocation_logement_in: CalculAllocationL "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1384; start_column=14; end_line=1384; end_column=34; + start_line=1395; start_column=14; end_line=1395; end_column=34; law_headings=["Article D823-9"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -25928,7 +28970,7 @@ let calcul_allocation_logement (calcul_allocation_logement_in: CalculAllocationL "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4750; start_column=14; end_line=4750; end_column=31; + start_line=4811; start_column=14; end_line=4811; end_column=31; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -25938,10 +28980,12 @@ let calcul_allocation_logement (calcul_allocation_logement_in: CalculAllocationL "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (money_round - ((ressources_menage_sans_arrondi_ *$ - (decimal_of_string "0.01")) +$ (money_of_cents_string - "49"))) *$ (decimal_of_string "100."))) + o_mult_mon_rat + (o_round_mon + (o_add_mon_mon + (o_mult_mon_rat ressources_menage_sans_arrondi_ + (decimal_of_string "0.01")) (money_of_cents_string + "49"))) (decimal_of_string "100."))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -26000,7 +29044,7 @@ let calcul_allocation_logement (calcul_allocation_logement_in: CalculAllocationL "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1482; start_column=14; end_line=1482; end_column=36; + start_line=1520; start_column=14; end_line=1520; end_column=36; law_headings=["Article D823-9"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -26013,957 +29057,1198 @@ let calcul_allocation_logement (calcul_allocation_logement_in: CalculAllocationL match mode_occupation_ with | ModeOccupation.Locataire location_ -> - (let traitement_formule_ : _ = - (calcul_allocation_logement_locatif - {CalculAllocationLogementLocatifIn.loyer_principal_in = - (try (location_.Location.loyer_principal) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1492; start_column=31; - end_line=1492; end_column=55; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.ressources_menage_arrondies_in = - (try ressources_menage_avec_arrondi_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1487; start_column=43; - end_line=1487; end_column=60; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.beneficiaire_aide_adulte_ou_enfant_handicapes_in = - ( - try - (location_.Location.beneficiaire_aide_adulte_ou_enfant_handicapes) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1494; start_column=15; - end_line=1494; end_column=69; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.date_courante_in = - (try date_courante_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1490; start_column=29; - end_line=1490; end_column=42; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.nombre_personnes_a_charge_in = - (try nombre_personnes_a_charge_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1488; start_column=41; - end_line=1488; end_column=66; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.situation_familiale_calcul_apl_in = - (try situation_familiale_calcul_apl_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1491; start_column=46; - end_line=1491; end_column=76; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.zone_in = ( - try zone_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1489; start_column=20; - end_line=1489; end_column=24; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.logement_est_chambre_in = - ( - try (location_.Location.logement_est_chambre) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1495; start_column=36; - end_line=1495; end_column=65; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.agees_ou_handicap_adultes_hebergees_onereux_particuliers_in = - ( - try - (location_.Location.agees_ou_handicap_adultes_hebergees_onereux_particuliers) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1498; start_column=15; - end_line=1498; end_column=80; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.type_aide_in = ( - try type_aide_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1499; start_column=25; - end_line=1499; end_column=34; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.colocation_in = ( - try (location_.Location.colocation) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1496; start_column=26; - end_line=1496; end_column=45; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.reduction_loyer_solidarite_in = - ( - try - (match (location_.Location.bailleur) - with - | TypeBailleur.BailleurSocial bailleur_ -> - (bailleur_.ConventionBailleurSocial.reduction_loyer_solidarite_percue) - | TypeBailleur.BailleurPriveAvecConventionnementSocial _ -> - (money_of_cents_string "0") - | TypeBailleur.BailleurPrive _ -> - (money_of_cents_string "0")) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1501; start_column=16; - end_line=1504; end_column=39; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.logement_meuble_d842_2_in = - ( - try (location_.Location.logement_meuble_d842_2) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1505; start_column=38; - end_line=1505; end_column=69; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.changement_logement_d842_4_in = - ( - try - (location_.Location.changement_logement_d842_4) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1506; start_column=42; - end_line=1506; end_column=77; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]})))}) + (let traitement_formule_ : CalculAllocationLogementLocatif.t + = + (let result_ : CalculAllocationLogementLocatif.t = + ((log_begin_call + ["CalculAllocationLogementLocatif"; "direct"] + calcul_allocation_logement_locatif) + ((log_variable_definition + ["CalculAllocationLogementLocatif"; "direct"; "input"] + (embed_calcul_allocation_logement_locatif_in) + ({CalculAllocationLogementLocatifIn.loyer_principal_in = + (try (location_.Location.loyer_principal) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1530; start_column=31; + end_line=1530; end_column=55; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.ressources_menage_arrondies_in = + (try ressources_menage_avec_arrondi_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1525; start_column=43; + end_line=1525; end_column=60; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.beneficiaire_aide_adulte_ou_enfant_handicapes_in = + ( + try + (location_.Location.beneficiaire_aide_adulte_ou_enfant_handicapes) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1532; start_column=15; + end_line=1532; end_column=69; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.date_courante_in = + (try date_courante_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1528; start_column=29; + end_line=1528; end_column=42; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.nombre_personnes_a_charge_in = + (try nombre_personnes_a_charge_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1526; start_column=41; + end_line=1526; end_column=66; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.situation_familiale_calcul_apl_in = + (try situation_familiale_calcul_apl_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1529; start_column=46; + end_line=1529; end_column=76; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.zone_in = ( + try zone_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1527; start_column=20; + end_line=1527; end_column=24; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.logement_est_chambre_in = + ( + try (location_.Location.logement_est_chambre) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1533; start_column=36; + end_line=1533; end_column=65; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.agees_ou_handicap_adultes_hebergees_onereux_particuliers_in = + ( + try + (location_.Location.agees_ou_handicap_adultes_hebergees_onereux_particuliers) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1536; start_column=15; + end_line=1536; end_column=80; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.type_aide_in = ( + try type_aide_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1537; start_column=25; + end_line=1537; end_column=34; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.colocation_in = ( + try (location_.Location.colocation) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1534; start_column=26; + end_line=1534; end_column=45; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.reduction_loyer_solidarite_in = + ( + try + (match (location_.Location.bailleur) + with + | TypeBailleur.BailleurSocial bailleur_ -> + (bailleur_.ConventionBailleurSocial.reduction_loyer_solidarite_percue) + | TypeBailleur.BailleurPriveAvecConventionnementSocial _ -> + (money_of_cents_string "0") + | TypeBailleur.BailleurPrive _ -> + (money_of_cents_string "0")) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1539; start_column=16; + end_line=1542; end_column=39; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.logement_meuble_d842_2_in = + ( + try (location_.Location.logement_meuble_d842_2) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1543; start_column=38; + end_line=1543; end_column=69; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.changement_logement_d842_4_in = + ( + try + (location_.Location.changement_logement_d842_4) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1544; start_column=42; + end_line=1544; end_column=77; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]})))})))) + in + (let result_ : CalculAllocationLogementLocatif.t = + ({CalculAllocationLogementLocatif.aide_finale_formule = + (result_.CalculAllocationLogementLocatif.aide_finale_formule); + CalculAllocationLogementLocatif.traitement_aide_finale = + (fun (param_: money) -> (log_end_call + ["CalculAllocationLogementLocatif"; + "traitement_aide_finale"] + ((log_variable_definition + ["CalculAllocationLogementLocatif"; + "traitement_aide_finale"; "output"] + (embed_money) ((log_begin_call + ["CalculAllocationLogementLocatif"; + "traitement_aide_finale"] + (result_.CalculAllocationLogementLocatif.traitement_aide_finale)) + ((log_variable_definition + ["CalculAllocationLogementLocatif"; + "traitement_aide_finale"; "input"] + (embed_money) param_)))))))}) in + ((log_end_call + ["CalculAllocationLogementLocatif"; "direct"] + ((log_variable_definition + ["CalculAllocationLogementLocatif"; "direct"; "output"] + (embed_calcul_allocation_logement_locatif) + ( if + ((log_decision_taken + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1524; start_column=9; + end_line=1545; end_column=10; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]} + true)) then result_ else (raise EmptyError)))))))) in - {TraitementFormuleAideFinale.aide_finale_formule = - (traitement_formule_.CalculAllocationLogementLocatif.aide_finale_formule); - TraitementFormuleAideFinale.traitement_aide_finale = - (traitement_formule_.CalculAllocationLogementLocatif.traitement_aide_finale)}) + ({TraitementFormuleAideFinale.aide_finale_formule = + (traitement_formule_.CalculAllocationLogementLocatif.aide_finale_formule); + TraitementFormuleAideFinale.traitement_aide_finale = + (traitement_formule_.CalculAllocationLogementLocatif.traitement_aide_finale)})) | ModeOccupation.ResidentLogementFoyer logement_foyer__ -> - (let traitement_formule_ : _ = - (calcul_allocation_logement_foyer - {CalculAllocationLogementFoyerIn.type_logement_foyer_in = - (try (logement_foyer__.LogementFoyer.type_user) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1550; start_column=35; - end_line=1550; end_column=55; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementFoyerIn.date_conventionnement_in = - ( - try - (logement_foyer__.LogementFoyer.date_conventionnement) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1551; start_column=37; - end_line=1551; end_column=74; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementFoyerIn.redevance_in = ( - try (logement_foyer__.LogementFoyer.redevance) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1548; start_column=25; - end_line=1548; end_column=50; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementFoyerIn.ressources_menage_arrondies_in = - (try ressources_menage_avec_arrondi_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1543; start_column=43; - end_line=1543; end_column=60; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementFoyerIn.nombre_personnes_a_charge_in = - (try nombre_personnes_a_charge_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1544; start_column=41; - end_line=1544; end_column=66; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementFoyerIn.situation_familiale_calcul_apl_in = - (try situation_familiale_calcul_apl_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1547; start_column=46; - end_line=1547; end_column=76; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementFoyerIn.zone_in = ( - try zone_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1545; start_column=20; - end_line=1545; end_column=24; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementFoyerIn.date_courante_in = ( - try date_courante_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1546; start_column=29; - end_line=1546; end_column=42; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementFoyerIn.categorie_equivalence_loyer_d842_16_in = - ( - try - (logement_foyer__.LogementFoyer.categorie_equivalence_loyer_d842_16) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1549; start_column=51; - end_line=1549; end_column=102; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]})))}) + (let traitement_formule_ : CalculAllocationLogementFoyer.t = + (let result_ : CalculAllocationLogementFoyer.t = + ((log_begin_call + ["CalculAllocationLogementFoyer"; "direct"] + calcul_allocation_logement_foyer) + ((log_variable_definition + ["CalculAllocationLogementFoyer"; "direct"; "input"] + (embed_calcul_allocation_logement_foyer_in) + ({CalculAllocationLogementFoyerIn.type_logement_foyer_in = + ( + try (logement_foyer__.LogementFoyer.type_user) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1597; start_column=35; + end_line=1597; end_column=55; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementFoyerIn.date_conventionnement_in = + ( + try + (logement_foyer__.LogementFoyer.date_conventionnement) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1598; start_column=37; + end_line=1598; end_column=74; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementFoyerIn.redevance_in = ( + try (logement_foyer__.LogementFoyer.redevance) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1594; start_column=25; + end_line=1594; end_column=50; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementFoyerIn.ressources_menage_arrondies_in = + (try ressources_menage_avec_arrondi_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1589; start_column=43; + end_line=1589; end_column=60; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementFoyerIn.nombre_personnes_a_charge_in = + (try nombre_personnes_a_charge_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1590; start_column=41; + end_line=1590; end_column=66; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementFoyerIn.situation_familiale_calcul_apl_in = + (try situation_familiale_calcul_apl_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1593; start_column=46; + end_line=1593; end_column=76; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementFoyerIn.zone_in = ( + try zone_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1591; start_column=20; + end_line=1591; end_column=24; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementFoyerIn.date_courante_in = + (try date_courante_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1592; start_column=29; + end_line=1592; end_column=42; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementFoyerIn.categorie_equivalence_loyer_d842_16_in = + ( + try + (logement_foyer__.LogementFoyer.categorie_equivalence_loyer_d842_16) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1596; start_column=13; + end_line=1596; end_column=64; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]})))})))) + in + (let result_ : CalculAllocationLogementFoyer.t = + ({CalculAllocationLogementFoyer.coefficient_prise_en_charge = + (result_.CalculAllocationLogementFoyer.coefficient_prise_en_charge); + CalculAllocationLogementFoyer.equivalence_loyer = + (result_.CalculAllocationLogementFoyer.equivalence_loyer); + CalculAllocationLogementFoyer.montant_forfaitaire_charges = + (result_.CalculAllocationLogementFoyer.montant_forfaitaire_charges); + CalculAllocationLogementFoyer.loyer_minimal = + (result_.CalculAllocationLogementFoyer.loyer_minimal); + CalculAllocationLogementFoyer.aide_finale_formule = + (result_.CalculAllocationLogementFoyer.aide_finale_formule); + CalculAllocationLogementFoyer.traitement_aide_finale = + (fun (param_: money) -> (log_end_call + ["CalculAllocationLogementFoyer"; + "traitement_aide_finale"] + ((log_variable_definition + ["CalculAllocationLogementFoyer"; + "traitement_aide_finale"; "output"] + (embed_money) ((log_begin_call + ["CalculAllocationLogementFoyer"; + "traitement_aide_finale"] + (result_.CalculAllocationLogementFoyer.traitement_aide_finale)) + ((log_variable_definition + ["CalculAllocationLogementFoyer"; + "traitement_aide_finale"; "input"] + (embed_money) param_)))))))}) in + ((log_end_call ["CalculAllocationLogementFoyer"; "direct"] + ((log_variable_definition + ["CalculAllocationLogementFoyer"; "direct"; "output"] + (embed_calcul_allocation_logement_foyer) + ( if + ((log_decision_taken + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1588; start_column=9; + end_line=1599; end_column=10; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]} + true)) then result_ else (raise EmptyError)))))))) in - {TraitementFormuleAideFinale.aide_finale_formule = - (traitement_formule_.CalculAllocationLogementFoyer.aide_finale_formule); - TraitementFormuleAideFinale.traitement_aide_finale = - (traitement_formule_.CalculAllocationLogementFoyer.traitement_aide_finale)}) + ({TraitementFormuleAideFinale.aide_finale_formule = + (traitement_formule_.CalculAllocationLogementFoyer.aide_finale_formule); + TraitementFormuleAideFinale.traitement_aide_finale = + (traitement_formule_.CalculAllocationLogementFoyer.traitement_aide_finale)})) | ModeOccupation.AccessionProprieteLocalUsageExclusifHabitation proprietaire_ -> - (let traitement_formule_ : _ = - (calcul_allocation_logement_accession_propriete - {CalculAllocationLogementAccessionProprieteIn.ressources_menage_arrondies_base_in = - (try ressources_menage_avec_arrondi_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1560; start_column=44; - end_line=1560; end_column=61; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.nombre_personnes_a_charge_in = - (try nombre_personnes_a_charge_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1561; start_column=42; - end_line=1561; end_column=67; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.situation_familiale_calcul_apl_in = - (try situation_familiale_calcul_apl_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1564; start_column=47; - end_line=1564; end_column=77; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.zone_in = - (try zone_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1562; start_column=21; - end_line=1562; end_column=25; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.date_courante_in = - (try date_courante_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1563; start_column=30; - end_line=1563; end_column=43; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.mensualite_principale_in = - ( - try - (proprietaire_.Proprietaire.mensualite_principale) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1565; start_column=38; - end_line=1565; end_column=72; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.situation_r822_11_13_17_in = - ( - try - (proprietaire_.Proprietaire.situation_r822_11_13_17) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1572; start_column=40; - end_line=1572; end_column=76; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.date_signature_pret_in = - ( - try - ((proprietaire_.Proprietaire.pret).Pret.date_signature) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1568; start_column=36; - end_line=1568; end_column=68; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.type_travaux_logement_in = - ( - try - (proprietaire_.Proprietaire.type_travaux_logement_r842_5) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1567; start_column=38; - end_line=1567; end_column=79; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.local_habite_premiere_fois_beneficiaire_in = - ( - try - (proprietaire_.Proprietaire.local_habite_premiere_fois_beneficiaire) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1569; start_column=56; - end_line=1569; end_column=108; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.date_entree_logement_in = - ( - try - (proprietaire_.Proprietaire.date_entree_logement) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1570; start_column=37; - end_line=1570; end_column=70; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.charges_mensuelles_pret_in = - ( - try - (proprietaire_.Proprietaire.charges_mensuelles_pret) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1566; start_column=40; - end_line=1566; end_column=76; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.copropriete_in = - (try (proprietaire_.Proprietaire.copropriete) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1571; start_column=28; - end_line=1571; end_column=52; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]})))}) + (let traitement_formule_ : + CalculAllocationLogementAccessionPropriete.t = + (let result_ : + CalculAllocationLogementAccessionPropriete.t = + ((log_begin_call + ["CalculAllocationLogementAccessionPropriété"; + "direct"] + calcul_allocation_logement_accession_propriete) + ((log_variable_definition + ["CalculAllocationLogementAccessionPropriété"; + "direct"; "input"] + (embed_calcul_allocation_logement_accession_propriete_in) + ({CalculAllocationLogementAccessionProprieteIn.ressources_menage_arrondies_base_in = + (try ressources_menage_avec_arrondi_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1610; start_column=44; + end_line=1610; end_column=61; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.nombre_personnes_a_charge_in = + (try nombre_personnes_a_charge_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1611; start_column=42; + end_line=1611; end_column=67; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.situation_familiale_calcul_apl_in = + (try situation_familiale_calcul_apl_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1614; start_column=47; + end_line=1614; end_column=77; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.zone_in = + (try zone_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1612; start_column=21; + end_line=1612; end_column=25; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.date_courante_in = + (try date_courante_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1613; start_column=30; + end_line=1613; end_column=43; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.mensualite_principale_in = + ( + try + (proprietaire_.Proprietaire.mensualite_principale) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1615; start_column=38; + end_line=1615; end_column=72; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.situation_r822_11_13_17_in = + ( + try + (proprietaire_.Proprietaire.situation_r822_11_13_17) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1623; start_column=40; + end_line=1623; end_column=76; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.date_signature_pret_in = + ( + try + ((proprietaire_.Proprietaire.pret).Pret.date_signature) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1618; start_column=36; + end_line=1618; end_column=68; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.type_travaux_logement_in = + ( + try + (proprietaire_.Proprietaire.type_travaux_logement_r842_5) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1617; start_column=38; + end_line=1617; end_column=79; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.local_habite_premiere_fois_beneficiaire_in = + ( + try + (proprietaire_.Proprietaire.local_habite_premiere_fois_beneficiaire) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1620; start_column=14; + end_line=1620; end_column=66; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.date_entree_logement_in = + ( + try + (proprietaire_.Proprietaire.date_entree_logement) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1621; start_column=37; + end_line=1621; end_column=70; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.charges_mensuelles_pret_in = + ( + try + (proprietaire_.Proprietaire.charges_mensuelles_pret) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1616; start_column=40; + end_line=1616; end_column=76; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.copropriete_in = + ( + try (proprietaire_.Proprietaire.copropriete) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1622; start_column=28; + end_line=1622; end_column=52; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]})))})))) + in + (let result_ : + CalculAllocationLogementAccessionPropriete.t = + ({CalculAllocationLogementAccessionPropriete.aide_finale_formule = + (result_.CalculAllocationLogementAccessionPropriete.aide_finale_formule); + CalculAllocationLogementAccessionPropriete.traitement_aide_finale = + (fun (param_: money) -> (log_end_call + ["CalculAllocationLogementAccessionPropriété"; + "traitement_aide_finale"] + ((log_variable_definition + ["CalculAllocationLogementAccessionPropriété"; + "traitement_aide_finale"; "output"] + (embed_money) ((log_begin_call + ["CalculAllocationLogementAccessionPropriété"; + "traitement_aide_finale"] + (result_.CalculAllocationLogementAccessionPropriete.traitement_aide_finale)) + ((log_variable_definition + ["CalculAllocationLogementAccessionPropriété"; + "traitement_aide_finale"; "input"] + (embed_money) param_)))))))}) in + ((log_end_call + ["CalculAllocationLogementAccessionPropriété"; "direct"] + ((log_variable_definition + ["CalculAllocationLogementAccessionPropriété"; "direct"; + "output"] + (embed_calcul_allocation_logement_accession_propriete) + ( if + ((log_decision_taken + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1609; start_column=10; + end_line=1624; end_column=11; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]} + true)) then result_ else (raise EmptyError)))))))) in - {TraitementFormuleAideFinale.aide_finale_formule = - (traitement_formule_.CalculAllocationLogementAccessionPropriete.aide_finale_formule); - TraitementFormuleAideFinale.traitement_aide_finale = - (traitement_formule_.CalculAllocationLogementAccessionPropriete.traitement_aide_finale)}) + ({TraitementFormuleAideFinale.aide_finale_formule = + (traitement_formule_.CalculAllocationLogementAccessionPropriete.aide_finale_formule); + TraitementFormuleAideFinale.traitement_aide_finale = + (traitement_formule_.CalculAllocationLogementAccessionPropriete.traitement_aide_finale)})) | ModeOccupation.SousLocataire location_ -> - (let traitement_formule_ : _ = - (calcul_allocation_logement_locatif - {CalculAllocationLogementLocatifIn.loyer_principal_in = - (try (location_.Location.loyer_principal) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1520; start_column=31; - end_line=1520; end_column=55; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.ressources_menage_arrondies_in = - (try ressources_menage_avec_arrondi_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1515; start_column=43; - end_line=1515; end_column=60; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.beneficiaire_aide_adulte_ou_enfant_handicapes_in = - ( - try - (location_.Location.beneficiaire_aide_adulte_ou_enfant_handicapes) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1522; start_column=15; - end_line=1522; end_column=69; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.date_courante_in = - (try date_courante_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1518; start_column=29; - end_line=1518; end_column=42; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.nombre_personnes_a_charge_in = - (try nombre_personnes_a_charge_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1516; start_column=41; - end_line=1516; end_column=66; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.situation_familiale_calcul_apl_in = - (try situation_familiale_calcul_apl_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1519; start_column=46; - end_line=1519; end_column=76; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.zone_in = ( - try zone_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1517; start_column=20; - end_line=1517; end_column=24; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.logement_est_chambre_in = - ( - try (location_.Location.logement_est_chambre) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1523; start_column=36; - end_line=1523; end_column=65; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.agees_ou_handicap_adultes_hebergees_onereux_particuliers_in = - ( - try - (location_.Location.agees_ou_handicap_adultes_hebergees_onereux_particuliers) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1526; start_column=15; - end_line=1526; end_column=80; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.type_aide_in = ( - try type_aide_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1527; start_column=25; - end_line=1527; end_column=34; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.colocation_in = ( - try (location_.Location.colocation) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1524; start_column=26; - end_line=1524; end_column=45; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.reduction_loyer_solidarite_in = - ( - try - (match (location_.Location.bailleur) - with - | TypeBailleur.BailleurSocial bailleur_ -> - (bailleur_.ConventionBailleurSocial.reduction_loyer_solidarite_percue) - | TypeBailleur.BailleurPriveAvecConventionnementSocial _ -> - (money_of_cents_string "0") - | TypeBailleur.BailleurPrive _ -> - (money_of_cents_string "0")) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1529; start_column=16; - end_line=1532; end_column=39; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.logement_meuble_d842_2_in = - ( - try (location_.Location.logement_meuble_d842_2) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1533; start_column=38; - end_line=1533; end_column=69; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementLocatifIn.changement_logement_d842_4_in = - ( - try - (location_.Location.changement_logement_d842_4) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1534; start_column=42; - end_line=1534; end_column=77; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]})))}) + (let traitement_formule_ : CalculAllocationLogementLocatif.t + = + (let result_ : CalculAllocationLogementLocatif.t = + ((log_begin_call + ["CalculAllocationLogementLocatif"; "direct"] + calcul_allocation_logement_locatif) + ((log_variable_definition + ["CalculAllocationLogementLocatif"; "direct"; "input"] + (embed_calcul_allocation_logement_locatif_in) + ({CalculAllocationLogementLocatifIn.loyer_principal_in = + (try (location_.Location.loyer_principal) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1562; start_column=31; + end_line=1562; end_column=55; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.ressources_menage_arrondies_in = + (try ressources_menage_avec_arrondi_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1557; start_column=43; + end_line=1557; end_column=60; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.beneficiaire_aide_adulte_ou_enfant_handicapes_in = + ( + try + (location_.Location.beneficiaire_aide_adulte_ou_enfant_handicapes) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1564; start_column=15; + end_line=1564; end_column=69; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.date_courante_in = + (try date_courante_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1560; start_column=29; + end_line=1560; end_column=42; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.nombre_personnes_a_charge_in = + (try nombre_personnes_a_charge_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1558; start_column=41; + end_line=1558; end_column=66; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.situation_familiale_calcul_apl_in = + (try situation_familiale_calcul_apl_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1561; start_column=46; + end_line=1561; end_column=76; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.zone_in = ( + try zone_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1559; start_column=20; + end_line=1559; end_column=24; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.logement_est_chambre_in = + ( + try (location_.Location.logement_est_chambre) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1565; start_column=36; + end_line=1565; end_column=65; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.agees_ou_handicap_adultes_hebergees_onereux_particuliers_in = + ( + try + (location_.Location.agees_ou_handicap_adultes_hebergees_onereux_particuliers) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1568; start_column=15; + end_line=1568; end_column=80; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.type_aide_in = ( + try type_aide_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1569; start_column=25; + end_line=1569; end_column=34; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.colocation_in = ( + try (location_.Location.colocation) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1566; start_column=26; + end_line=1566; end_column=45; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.reduction_loyer_solidarite_in = + ( + try + (match (location_.Location.bailleur) + with + | TypeBailleur.BailleurSocial bailleur_ -> + (bailleur_.ConventionBailleurSocial.reduction_loyer_solidarite_percue) + | TypeBailleur.BailleurPriveAvecConventionnementSocial _ -> + (money_of_cents_string "0") + | TypeBailleur.BailleurPrive _ -> + (money_of_cents_string "0")) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1571; start_column=16; + end_line=1574; end_column=39; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.logement_meuble_d842_2_in = + ( + try (location_.Location.logement_meuble_d842_2) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1575; start_column=38; + end_line=1575; end_column=69; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementLocatifIn.changement_logement_d842_4_in = + ( + try + (location_.Location.changement_logement_d842_4) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1576; start_column=42; + end_line=1576; end_column=77; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]})))})))) + in + (let result_ : CalculAllocationLogementLocatif.t = + ({CalculAllocationLogementLocatif.aide_finale_formule = + (result_.CalculAllocationLogementLocatif.aide_finale_formule); + CalculAllocationLogementLocatif.traitement_aide_finale = + (fun (param_: money) -> (log_end_call + ["CalculAllocationLogementLocatif"; + "traitement_aide_finale"] + ((log_variable_definition + ["CalculAllocationLogementLocatif"; + "traitement_aide_finale"; "output"] + (embed_money) ((log_begin_call + ["CalculAllocationLogementLocatif"; + "traitement_aide_finale"] + (result_.CalculAllocationLogementLocatif.traitement_aide_finale)) + ((log_variable_definition + ["CalculAllocationLogementLocatif"; + "traitement_aide_finale"; "input"] + (embed_money) param_)))))))}) in + ((log_end_call + ["CalculAllocationLogementLocatif"; "direct"] + ((log_variable_definition + ["CalculAllocationLogementLocatif"; "direct"; "output"] + (embed_calcul_allocation_logement_locatif) + ( if + ((log_decision_taken + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1556; start_column=9; + end_line=1577; end_column=10; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]} + true)) then result_ else (raise EmptyError)))))))) in - {TraitementFormuleAideFinale.aide_finale_formule = - (traitement_formule_.CalculAllocationLogementLocatif.aide_finale_formule); - TraitementFormuleAideFinale.traitement_aide_finale = - (traitement_formule_.CalculAllocationLogementLocatif.traitement_aide_finale)}) + ({TraitementFormuleAideFinale.aide_finale_formule = + (traitement_formule_.CalculAllocationLogementLocatif.aide_finale_formule); + TraitementFormuleAideFinale.traitement_aide_finale = + (traitement_formule_.CalculAllocationLogementLocatif.traitement_aide_finale)})) | ModeOccupation.LocationAccession proprietaire_ -> - (let traitement_formule_ : _ = - (calcul_allocation_logement_accession_propriete - {CalculAllocationLogementAccessionProprieteIn.ressources_menage_arrondies_base_in = - (try ressources_menage_avec_arrondi_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1581; start_column=44; - end_line=1581; end_column=61; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.nombre_personnes_a_charge_in = - (try nombre_personnes_a_charge_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1582; start_column=42; - end_line=1582; end_column=67; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.situation_familiale_calcul_apl_in = - (try situation_familiale_calcul_apl_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1585; start_column=47; - end_line=1585; end_column=77; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.zone_in = - (try zone_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1583; start_column=21; - end_line=1583; end_column=25; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.date_courante_in = - (try date_courante_ with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1584; start_column=30; - end_line=1584; end_column=43; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.mensualite_principale_in = - ( - try - (proprietaire_.Proprietaire.mensualite_principale) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1586; start_column=38; - end_line=1586; end_column=72; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.situation_r822_11_13_17_in = - ( - try - (proprietaire_.Proprietaire.situation_r822_11_13_17) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1593; start_column=40; - end_line=1593; end_column=76; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.date_signature_pret_in = - ( - try - ((proprietaire_.Proprietaire.pret).Pret.date_signature) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1589; start_column=36; - end_line=1589; end_column=68; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.type_travaux_logement_in = - ( - try - (proprietaire_.Proprietaire.type_travaux_logement_r842_5) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1588; start_column=38; - end_line=1588; end_column=79; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.local_habite_premiere_fois_beneficiaire_in = - ( - try - (proprietaire_.Proprietaire.local_habite_premiere_fois_beneficiaire) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1590; start_column=56; - end_line=1590; end_column=108; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.date_entree_logement_in = - ( - try - (proprietaire_.Proprietaire.date_entree_logement) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1591; start_column=37; - end_line=1591; end_column=70; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.charges_mensuelles_pret_in = - ( - try - (proprietaire_.Proprietaire.charges_mensuelles_pret) - with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1587; start_column=40; - end_line=1587; end_column=76; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]}))); - CalculAllocationLogementAccessionProprieteIn.copropriete_in = - (try (proprietaire_.Proprietaire.copropriete) with - EmptyError -> (raise (NoValueProvided - {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1592; start_column=28; - end_line=1592; end_column=52; - law_headings=["Article D823-9"; - "Section 1 : Calcul, liquidation et versement des aides"; - "Chapitre III : Modalités de liquidation et de versement"; - "Titre II : Dispositions communes aux aides personnelles au logement"; - "Livre VIII : Aides personnelles au logement"; - "Partie réglementaire"; - "Code de la construction et de l'habitation"]})))}) + (let traitement_formule_ : + CalculAllocationLogementAccessionPropriete.t = + (let result_ : + CalculAllocationLogementAccessionPropriete.t = + ((log_begin_call + ["CalculAllocationLogementAccessionPropriété"; + "direct"] + calcul_allocation_logement_accession_propriete) + ((log_variable_definition + ["CalculAllocationLogementAccessionPropriété"; + "direct"; "input"] + (embed_calcul_allocation_logement_accession_propriete_in) + ({CalculAllocationLogementAccessionProprieteIn.ressources_menage_arrondies_base_in = + (try ressources_menage_avec_arrondi_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1637; start_column=44; + end_line=1637; end_column=61; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.nombre_personnes_a_charge_in = + (try nombre_personnes_a_charge_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1638; start_column=42; + end_line=1638; end_column=67; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.situation_familiale_calcul_apl_in = + (try situation_familiale_calcul_apl_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1641; start_column=47; + end_line=1641; end_column=77; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.zone_in = + (try zone_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1639; start_column=21; + end_line=1639; end_column=25; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.date_courante_in = + (try date_courante_ with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1640; start_column=30; + end_line=1640; end_column=43; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.mensualite_principale_in = + ( + try + (proprietaire_.Proprietaire.mensualite_principale) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1642; start_column=38; + end_line=1642; end_column=72; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.situation_r822_11_13_17_in = + ( + try + (proprietaire_.Proprietaire.situation_r822_11_13_17) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1650; start_column=40; + end_line=1650; end_column=76; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.date_signature_pret_in = + ( + try + ((proprietaire_.Proprietaire.pret).Pret.date_signature) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1645; start_column=36; + end_line=1645; end_column=68; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.type_travaux_logement_in = + ( + try + (proprietaire_.Proprietaire.type_travaux_logement_r842_5) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1644; start_column=38; + end_line=1644; end_column=79; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.local_habite_premiere_fois_beneficiaire_in = + ( + try + (proprietaire_.Proprietaire.local_habite_premiere_fois_beneficiaire) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1647; start_column=14; + end_line=1647; end_column=66; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.date_entree_logement_in = + ( + try + (proprietaire_.Proprietaire.date_entree_logement) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1648; start_column=37; + end_line=1648; end_column=70; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.charges_mensuelles_pret_in = + ( + try + (proprietaire_.Proprietaire.charges_mensuelles_pret) + with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1643; start_column=40; + end_line=1643; end_column=76; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]}))); + CalculAllocationLogementAccessionProprieteIn.copropriete_in = + ( + try (proprietaire_.Proprietaire.copropriete) with + EmptyError -> (raise (NoValueProvided + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1649; start_column=28; + end_line=1649; end_column=52; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]})))})))) + in + (let result_ : + CalculAllocationLogementAccessionPropriete.t = + ({CalculAllocationLogementAccessionPropriete.aide_finale_formule = + (result_.CalculAllocationLogementAccessionPropriete.aide_finale_formule); + CalculAllocationLogementAccessionPropriete.traitement_aide_finale = + (fun (param_: money) -> (log_end_call + ["CalculAllocationLogementAccessionPropriété"; + "traitement_aide_finale"] + ((log_variable_definition + ["CalculAllocationLogementAccessionPropriété"; + "traitement_aide_finale"; "output"] + (embed_money) ((log_begin_call + ["CalculAllocationLogementAccessionPropriété"; + "traitement_aide_finale"] + (result_.CalculAllocationLogementAccessionPropriete.traitement_aide_finale)) + ((log_variable_definition + ["CalculAllocationLogementAccessionPropriété"; + "traitement_aide_finale"; "input"] + (embed_money) param_)))))))}) in + ((log_end_call + ["CalculAllocationLogementAccessionPropriété"; "direct"] + ((log_variable_definition + ["CalculAllocationLogementAccessionPropriété"; "direct"; + "output"] + (embed_calcul_allocation_logement_accession_propriete) + ( if + ((log_decision_taken + {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; + start_line=1636; start_column=10; + end_line=1651; end_column=11; + law_headings=["Article D823-9"; + "Section 1 : Calcul, liquidation et versement des aides"; + "Chapitre III : Modalités de liquidation et de versement"; + "Titre II : Dispositions communes aux aides personnelles au logement"; + "Livre VIII : Aides personnelles au logement"; + "Partie réglementaire"; + "Code de la construction et de l'habitation"]} + true)) then result_ else (raise EmptyError)))))))) in - {TraitementFormuleAideFinale.aide_finale_formule = - (traitement_formule_.CalculAllocationLogementAccessionPropriete.aide_finale_formule); - TraitementFormuleAideFinale.traitement_aide_finale = - (traitement_formule_.CalculAllocationLogementAccessionPropriete.traitement_aide_finale)}))) + ({TraitementFormuleAideFinale.aide_finale_formule = + (traitement_formule_.CalculAllocationLogementAccessionPropriete.aide_finale_formule); + TraitementFormuleAideFinale.traitement_aide_finale = + (traitement_formule_.CalculAllocationLogementAccessionPropriete.traitement_aide_finale)})))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; @@ -26978,14 +30263,14 @@ let calcul_allocation_logement (calcul_allocation_logement_in: CalculAllocationL try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=991; start_column=10; end_line=991; end_column=32; + start_line=991; start_column=12; end_line=991; end_column=34; law_headings=["Tous secteurs"; "Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1393; start_column=14; - end_line=1393; end_column=36; + start_line=1408; start_column=14; + end_line=1408; end_column=36; law_headings=["Article D823-9"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -27000,14 +30285,14 @@ let calcul_allocation_logement (calcul_allocation_logement_in: CalculAllocationL with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=991; start_column=10; end_line=991; end_column=32; + start_line=991; start_column=12; end_line=991; end_column=34; law_headings=["Tous secteurs"; "Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]}))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=991; start_column=10; end_line=991; end_column=32; + start_line=991; start_column=12; end_line=991; end_column=34; law_headings=["Tous secteurs"; "Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -27016,13 +30301,13 @@ let calcul_allocation_logement (calcul_allocation_logement_in: CalculAllocationL try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=990; start_column=10; end_line=990; end_column=29; + start_line=990; start_column=12; end_line=990; end_column=31; law_headings=["Tous secteurs"; "Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=1392; start_column=14; end_line=1392; end_column=33; + start_line=1406; start_column=14; end_line=1406; end_column=33; law_headings=["Article D823-9"; "Section 1 : Calcul, liquidation et versement des aides"; "Chapitre III : Modalités de liquidation et de versement"; @@ -27036,7 +30321,7 @@ let calcul_allocation_logement (calcul_allocation_logement_in: CalculAllocationL with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=990; start_column=10; end_line=990; end_column=29; + start_line=990; start_column=12; end_line=990; end_column=31; law_headings=["Tous secteurs"; "Secteur logement-foyer"; "Calcul du montant de l'allocation logement"; "Prologue : aides au logement"]})))) in @@ -27116,7 +30401,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid (embed_bool) (handle_default {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1046; start_column=5; end_line=1046; end_column=74; + start_line=1049; start_column=5; end_line=1049; end_column=74; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -27126,7 +30411,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1046; start_column=5; end_line=1046; end_column=74; + start_line=1049; start_column=5; end_line=1049; end_column=74; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -27137,7 +30422,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1046; start_column=5; end_line=1046; end_column=74; + start_line=1049; start_column=5; end_line=1049; end_column=74; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; "Livre VIII : Aides personnelles au logement"; @@ -27148,14 +30433,14 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid "ÉligibilitéAllocationLogement"] ((log_begin_call ["CalculetteAidesAuLogement"; "éligibilité_allocation_logement"; "ÉligibilitéAllocationLogement"] eligibilite_allocation_logement) - {EligibiliteAllocationLogementIn.date_courante_in = - eligibilite_allocation_logement_dot_date_courante_; - EligibiliteAllocationLogementIn.menage_in = - eligibilite_allocation_logement_dot_menage_; - EligibiliteAllocationLogementIn.demandeur_in = - eligibilite_allocation_logement_dot_demandeur_; - EligibiliteAllocationLogementIn.beneficie_aide_personnalisee_logement_in = - eligibilite_allocation_logement_dot_beneficie_aide_personnalisee_logement_})) in + ({EligibiliteAllocationLogementIn.date_courante_in = + eligibilite_allocation_logement_dot_date_courante_; + EligibiliteAllocationLogementIn.menage_in = + eligibilite_allocation_logement_dot_menage_; + EligibiliteAllocationLogementIn.demandeur_in = + eligibilite_allocation_logement_dot_demandeur_; + EligibiliteAllocationLogementIn.beneficie_aide_personnalisee_logement_in = + eligibilite_allocation_logement_dot_beneficie_aide_personnalisee_logement_}))) in let eligibilite_allocation_logement_dot_eligibilite_l841_2_: TypeEligibiliteAllocationLogement.t = result_.EligibiliteAllocationLogement.eligibilite in let eligibilite_allocation_logement_dot_nombre_personnes_a_charge_prises_en_compte_: integer = result_.EligibiliteAllocationLogement.nombre_personnes_a_charge_prises_en_compte in let eligibilite_allocation_logement_dot_coefficents_enfants_garde_alternee_pris_en_compte_: @@ -27230,12 +30515,12 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid "éligibilité_aide_personnalisée_logement"; "ÉligibilitéAidePersonnaliséeLogement"] eligibilite_aide_personnalisee_logement) - {EligibiliteAidePersonnaliseeLogementIn.menage_in = - eligibilite_aide_personnalisee_logement_dot_menage_; - EligibiliteAidePersonnaliseeLogementIn.demandeur_in = - eligibilite_aide_personnalisee_logement_dot_demandeur_; - EligibiliteAidePersonnaliseeLogementIn.date_courante_in = - eligibilite_aide_personnalisee_logement_dot_date_courante_})) in + ({EligibiliteAidePersonnaliseeLogementIn.menage_in = + eligibilite_aide_personnalisee_logement_dot_menage_; + EligibiliteAidePersonnaliseeLogementIn.demandeur_in = + eligibilite_aide_personnalisee_logement_dot_demandeur_; + EligibiliteAidePersonnaliseeLogementIn.date_courante_in = + eligibilite_aide_personnalisee_logement_dot_date_courante_}))) in let eligibilite_aide_personnalisee_logement_dot_date_courante_: date = result_.EligibiliteAidePersonnaliseeLogement.date_courante in let eligibilite_aide_personnalisee_logement_dot_eligibilite_: bool = result_.EligibiliteAidePersonnaliseeLogement.eligibilite in let eligibilite_aide_personnalisee_logement_dot_nombre_personnes_a_charge_prises_en_compte_: integer = result_.EligibiliteAidePersonnaliseeLogement.nombre_personnes_a_charge_prises_en_compte in @@ -27371,7 +30656,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid (embed_type_aides_personnelle_logement) (handle_default {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1062; start_column=14; end_line=1062; end_column=50; + start_line=1065; start_column=14; end_line=1065; end_column=50; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -27381,7 +30666,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1062; start_column=14; end_line=1062; end_column=50; + start_line=1065; start_column=14; end_line=1065; end_column=50; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -27401,7 +30686,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1062; start_column=14; end_line=1062; end_column=50; + start_line=1065; start_column=14; end_line=1065; end_column=50; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; "Livre VIII : Aides personnelles au logement"; @@ -27412,20 +30697,20 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid "CalculAllocationLogement"] ((log_begin_call ["CalculetteAidesAuLogement"; "calcul_allocation_logement"; "CalculAllocationLogement"] calcul_allocation_logement) - {CalculAllocationLogementIn.mode_occupation_in = - calcul_allocation_logement_dot_mode_occupation_; - CalculAllocationLogementIn.ressources_menage_sans_arrondi_in = - calcul_allocation_logement_dot_ressources_menage_sans_arrondi_; - CalculAllocationLogementIn.situation_familiale_in = - calcul_allocation_logement_dot_situation_familiale_; - CalculAllocationLogementIn.nombre_personnes_a_charge_in = - calcul_allocation_logement_dot_nombre_personnes_a_charge_; - CalculAllocationLogementIn.zone_in = - calcul_allocation_logement_dot_zone_; - CalculAllocationLogementIn.date_courante_in = - calcul_allocation_logement_dot_date_courante_; - CalculAllocationLogementIn.type_aide_in = - calcul_allocation_logement_dot_type_aide_})) in + ({CalculAllocationLogementIn.mode_occupation_in = + calcul_allocation_logement_dot_mode_occupation_; + CalculAllocationLogementIn.ressources_menage_sans_arrondi_in = + calcul_allocation_logement_dot_ressources_menage_sans_arrondi_; + CalculAllocationLogementIn.situation_familiale_in = + calcul_allocation_logement_dot_situation_familiale_; + CalculAllocationLogementIn.nombre_personnes_a_charge_in = + calcul_allocation_logement_dot_nombre_personnes_a_charge_; + CalculAllocationLogementIn.zone_in = + calcul_allocation_logement_dot_zone_; + CalculAllocationLogementIn.date_courante_in = + calcul_allocation_logement_dot_date_courante_; + CalculAllocationLogementIn.type_aide_in = + calcul_allocation_logement_dot_type_aide_}))) in let calcul_allocation_logement_dot_aide_finale_formule_: money = result_.CalculAllocationLogement.aide_finale_formule in let calcul_allocation_logement_dot_traitement_aide_finale_: money -> money = result_.CalculAllocationLogement.traitement_aide_finale in let calcul_aide_personnalisee_logement_dot_mode_occupation_: ModeOccupation.t = @@ -27456,7 +30741,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid (embed_type_aides_personnelle_logement) (handle_default {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1060; start_column=14; end_line=1060; end_column=58; + start_line=1063; start_column=14; end_line=1063; end_column=58; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -27466,7 +30751,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1060; start_column=14; end_line=1060; end_column=58; + start_line=1063; start_column=14; end_line=1063; end_column=58; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -27479,7 +30764,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1060; start_column=14; end_line=1060; end_column=58; + start_line=1063; start_column=14; end_line=1063; end_column=58; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; "Livre VIII : Aides personnelles au logement"; @@ -27594,20 +30879,20 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid "CalculAidePersonnaliséeLogement"] ((log_begin_call ["CalculetteAidesAuLogement"; "calcul_aide_personnalisée_logement"; "CalculAidePersonnaliséeLogement"] calcul_aide_personnalisee_logement) - {CalculAidePersonnaliseeLogementIn.mode_occupation_in = - calcul_aide_personnalisee_logement_dot_mode_occupation_; - CalculAidePersonnaliseeLogementIn.type_aide_in = - calcul_aide_personnalisee_logement_dot_type_aide_; - CalculAidePersonnaliseeLogementIn.ressources_menage_sans_arrondi_in = - calcul_aide_personnalisee_logement_dot_ressources_menage_sans_arrondi_; - CalculAidePersonnaliseeLogementIn.situation_familiale_in = - calcul_aide_personnalisee_logement_dot_situation_familiale_; - CalculAidePersonnaliseeLogementIn.nombre_personnes_a_charge_in = - calcul_aide_personnalisee_logement_dot_nombre_personnes_a_charge_; - CalculAidePersonnaliseeLogementIn.zone_in = - calcul_aide_personnalisee_logement_dot_zone_; - CalculAidePersonnaliseeLogementIn.date_courante_in = - calcul_aide_personnalisee_logement_dot_date_courante_})) in + ({CalculAidePersonnaliseeLogementIn.mode_occupation_in = + calcul_aide_personnalisee_logement_dot_mode_occupation_; + CalculAidePersonnaliseeLogementIn.type_aide_in = + calcul_aide_personnalisee_logement_dot_type_aide_; + CalculAidePersonnaliseeLogementIn.ressources_menage_sans_arrondi_in = + calcul_aide_personnalisee_logement_dot_ressources_menage_sans_arrondi_; + CalculAidePersonnaliseeLogementIn.situation_familiale_in = + calcul_aide_personnalisee_logement_dot_situation_familiale_; + CalculAidePersonnaliseeLogementIn.nombre_personnes_a_charge_in = + calcul_aide_personnalisee_logement_dot_nombre_personnes_a_charge_; + CalculAidePersonnaliseeLogementIn.zone_in = + calcul_aide_personnalisee_logement_dot_zone_; + CalculAidePersonnaliseeLogementIn.date_courante_in = + calcul_aide_personnalisee_logement_dot_date_courante_}))) in let calcul_aide_personnalisee_logement_dot_aide_finale_formule_: money = result_.CalculAidePersonnaliseeLogement.aide_finale_formule in let calcul_aide_personnalisee_logement_dot_traitement_aide_finale_: money -> money = result_.CalculAidePersonnaliseeLogement.traitement_aide_finale in @@ -27618,7 +30903,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1055; start_column=10; end_line=1055; end_column=59; + start_line=1055; start_column=12; end_line=1055; end_column=61; law_headings=["Calculette globale"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken @@ -27631,19 +30916,19 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1055; start_column=10; end_line=1055; end_column=59; + start_line=1055; start_column=12; end_line=1055; end_column=61; law_headings=["Calculette globale"; "Prologue : aides au logement"]})))) in let eligibilite_: bool = (log_variable_definition ["CalculetteAidesAuLogement"; "éligibilité"] (embed_bool) ( try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1052; start_column=10; end_line=1052; end_column=21; + start_line=1052; start_column=12; end_line=1052; end_column=23; law_headings=["Calculette globale"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1051; start_column=14; end_line=1051; end_column=25; + start_line=1054; start_column=14; end_line=1054; end_column=25; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -27652,7 +30937,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - eligibilite_aide_personnalisee_logement_dot_eligibilite_ || + o_or eligibilite_aide_personnalisee_logement_dot_eligibilite_ (match eligibilite_allocation_logement_dot_eligibilite_l841_2_ with | TypeEligibiliteAllocationLogement.PasEligible _ -> false @@ -27663,7 +30948,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1052; start_column=10; end_line=1052; end_column=21; + start_line=1052; start_column=12; end_line=1052; end_column=23; law_headings=["Calculette globale"; "Prologue : aides au logement"]})))) in let traitement_aide_finale_: money -> money = (log_variable_definition ["CalculetteAidesAuLogement"; "traitement_aide_finale"] (unembeddable) ( @@ -27672,14 +30957,14 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1054; start_column=10; - end_line=1054; end_column=32; + start_line=1054; start_column=12; + end_line=1054; end_column=34; law_headings=["Calculette globale"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1089; start_column=14; - end_line=1089; end_column=36; + start_line=1092; start_column=14; + end_line=1092; end_column=36; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -27688,7 +30973,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - (let aide_finale_apl_ : _ = ((log_end_call + (let aide_finale_apl_ : money = ((log_end_call ["CalculAidePersonnaliséeLogement"; "traitement_aide_finale"] ((log_variable_definition ["CalculAidePersonnaliséeLogement"; @@ -27702,7 +30987,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid "traitement_aide_finale"; "input"] (embed_money) param_))))))) in - (let aide_finale_al_ : _ = ((log_end_call + (let aide_finale_al_ : money = ((log_end_call ["CalculAllocationLogement"; "traitement_aide_finale"] ((log_variable_definition ["CalculAllocationLogement"; "traitement_aide_finale"; @@ -27713,11 +30998,11 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid ["CalculAllocationLogement"; "traitement_aide_finale"; "input"] (embed_money) param_))))))) in - ( if (not eligibilite_) then param_ else + ( if (o_not eligibilite_) then param_ else ( if - (eligibilite_aide_personnalisee_logement_dot_eligibilite_ - && - (not + (o_and + eligibilite_aide_personnalisee_logement_dot_eligibilite_ + (o_not (match eligibilite_allocation_logement_dot_eligibilite_l841_2_ with @@ -27727,33 +31012,33 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid false | TypeEligibiliteAllocationLogement.AllocationLogementSociale _ -> false))) then - ( if (aide_finale_apl_ >$ aide_finale_al_) then - aide_finale_apl_ else aide_finale_al_) else + ( if (o_gt_mon_mon aide_finale_apl_ aide_finale_al_) + then aide_finale_apl_ else aide_finale_al_) else ( if eligibilite_aide_personnalisee_logement_dot_eligibilite_ then aide_finale_apl_ else aide_finale_al_))))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1054; start_column=10; end_line=1054; end_column=32; + start_line=1054; start_column=12; end_line=1054; end_column=34; law_headings=["Calculette globale"; "Prologue : aides au logement"]}))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1054; start_column=10; end_line=1054; end_column=32; + start_line=1054; start_column=12; end_line=1054; end_column=34; law_headings=["Calculette globale"; "Prologue : aides au logement"]})))) in let aide_finale_formule_: money = (log_variable_definition ["CalculetteAidesAuLogement"; "aide_finale_formule"] (embed_money) ( try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1053; start_column=10; end_line=1053; end_column=29; + start_line=1053; start_column=12; end_line=1053; end_column=31; law_headings=["Calculette globale"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_legislatif.catala_fr"; - start_line=1072; start_column=14; end_line=1072; end_column=33; + start_line=1075; start_column=14; end_line=1075; end_column=33; law_headings=["Article L841-2"; "Chapitre Ier : Champ d'application"; "Titre IV : Allocations de logement"; @@ -27762,10 +31047,11 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid "Code de la construction et de l'habitation"]} true)) (fun (_: unit) -> - if (not eligibilite_) then (money_of_cents_string "0") else + if (o_not eligibilite_) then (money_of_cents_string "0") else ( if - (eligibilite_aide_personnalisee_logement_dot_eligibilite_ && - (not + (o_and + eligibilite_aide_personnalisee_logement_dot_eligibilite_ + (o_not (match eligibilite_allocation_logement_dot_eligibilite_l841_2_ with @@ -27776,7 +31062,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid | TypeEligibiliteAllocationLogement.AllocationLogementSociale _ -> false))) then ( if - (((log_end_call + (o_gt_mon_mon ((log_end_call ["CalculAidePersonnaliséeLogement"; "traitement_aide_finale"] ((log_variable_definition ["CalculAidePersonnaliséeLogement"; @@ -27789,7 +31075,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid ["CalculAidePersonnaliséeLogement"; "traitement_aide_finale"; "input"] (embed_money) calcul_aide_personnalisee_logement_dot_aide_finale_formule_))))))) - >$ ((log_end_call + ((log_end_call ["CalculAllocationLogement"; "traitement_aide_finale"] ((log_variable_definition ["CalculAllocationLogement"; "traitement_aide_finale"; @@ -27812,7 +31098,7 @@ let calculette_aides_au_logement (calculette_aides_au_logement_in: CalculetteAid with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1053; start_column=10; end_line=1053; end_column=29; + start_line=1053; start_column=12; end_line=1053; end_column=31; law_headings=["Calculette globale"; "Prologue : aides au logement"]})))) in {CalculetteAidesAuLogement.eligibilite = eligibilite_; CalculetteAidesAuLogement.aide_finale_formule = aide_finale_formule_; @@ -27844,8 +31130,8 @@ let calculette_aides_au_logement_garde_alternee (calculette_aides_au_logement_ga {Menage.prestations_recues = (menage_.Menage.prestations_recues); Menage.logement = (menage_.Menage.logement); Menage.personnes_a_charge = - (array_filter - (fun (personne_a_charge_: _) -> + (o_filter + (fun (personne_a_charge_: PersonneACharge.t) -> match personne_a_charge_ with | PersonneACharge.EnfantACharge enfant_ -> @@ -27961,12 +31247,12 @@ let calculette_aides_au_logement_garde_alternee (calculette_aides_au_logement_ga "CalculetteAidesAuLogement"] ((log_begin_call ["CalculetteAidesAuLogementGardeAlternée"; "calculette"; "CalculetteAidesAuLogement"] calculette_aides_au_logement) - {CalculetteAidesAuLogementIn.menage_in = calculette_dot_menage_; - CalculetteAidesAuLogementIn.demandeur_in = calculette_dot_demandeur_; - CalculetteAidesAuLogementIn.date_courante_in = - calculette_dot_date_courante_; - CalculetteAidesAuLogementIn.ressources_menage_prises_en_compte_in = - calculette_dot_ressources_menage_prises_en_compte_})) in + ({CalculetteAidesAuLogementIn.menage_in = calculette_dot_menage_; + CalculetteAidesAuLogementIn.demandeur_in = calculette_dot_demandeur_; + CalculetteAidesAuLogementIn.date_courante_in = + calculette_dot_date_courante_; + CalculetteAidesAuLogementIn.ressources_menage_prises_en_compte_in = + calculette_dot_ressources_menage_prises_en_compte_}))) in let calculette_dot_eligibilite_: bool = result_.CalculetteAidesAuLogement.eligibilite in let calculette_dot_aide_finale_formule_: money = result_.CalculetteAidesAuLogement.aide_finale_formule in let calculette_dot_traitement_aide_finale_: money -> money = result_.CalculetteAidesAuLogement.traitement_aide_finale in @@ -28064,14 +31350,14 @@ let calculette_aides_au_logement_garde_alternee (calculette_aides_au_logement_ga ["CalculetteAidesAuLogementGardeAlternée"; "calculette_sans_garde_alternée"; "CalculetteAidesAuLogement"] calculette_aides_au_logement) - {CalculetteAidesAuLogementIn.menage_in = - calculette_sans_garde_alternee_dot_menage_; - CalculetteAidesAuLogementIn.demandeur_in = - calculette_sans_garde_alternee_dot_demandeur_; - CalculetteAidesAuLogementIn.date_courante_in = - calculette_sans_garde_alternee_dot_date_courante_; - CalculetteAidesAuLogementIn.ressources_menage_prises_en_compte_in = - calculette_sans_garde_alternee_dot_ressources_menage_prises_en_compte_})) in + ({CalculetteAidesAuLogementIn.menage_in = + calculette_sans_garde_alternee_dot_menage_; + CalculetteAidesAuLogementIn.demandeur_in = + calculette_sans_garde_alternee_dot_demandeur_; + CalculetteAidesAuLogementIn.date_courante_in = + calculette_sans_garde_alternee_dot_date_courante_; + CalculetteAidesAuLogementIn.ressources_menage_prises_en_compte_in = + calculette_sans_garde_alternee_dot_ressources_menage_prises_en_compte_}))) in let calculette_sans_garde_alternee_dot_eligibilite_: bool = result_.CalculetteAidesAuLogement.eligibilite in let calculette_sans_garde_alternee_dot_aide_finale_formule_: money = result_.CalculetteAidesAuLogement.aide_finale_formule in let calculette_sans_garde_alternee_dot_traitement_aide_finale_: money -> @@ -28084,19 +31370,19 @@ let calculette_aides_au_logement_garde_alternee (calculette_aides_au_logement_ga try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1125; start_column=10; end_line=1125; end_column=21; + start_line=1125; start_column=12; end_line=1125; end_column=23; law_headings=["Calculette avec garde alternée"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1177; start_column=14; end_line=1177; end_column=25; + start_line=1176; start_column=14; end_line=1176; end_column=25; law_headings=["Calculette avec garde alternée"; "Prologue : aides au logement"]} true)) (fun (_: unit) -> calculette_dot_eligibilite_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1125; start_column=10; end_line=1125; end_column=21; + start_line=1125; start_column=12; end_line=1125; end_column=23; law_headings=["Calculette avec garde alternée"; "Prologue : aides au logement"]})))) in let coefficents_enfants_garde_alternee_pris_en_compte_: decimal array = (log_variable_definition @@ -28128,12 +31414,12 @@ let calculette_aides_au_logement_garde_alternee (calculette_aides_au_logement_ga try (handle_default {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1126; start_column=10; end_line=1126; end_column=21; + start_line=1126; start_column=12; end_line=1126; end_column=23; law_headings=["Calculette avec garde alternée"; "Prologue : aides au logement"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/aides_logement/autres_sources.catala_fr"; - start_line=254; start_column=14; end_line=254; end_column=25; + start_line=284; start_column=14; end_line=284; end_column=25; law_headings=["Conseil d'État, 5ème - 4ème chambres réunies, 21/07/2017, 398563"]} true)) (fun (_: unit) -> (log_end_call @@ -28145,27 +31431,30 @@ let calculette_aides_au_logement_garde_alternee (calculette_aides_au_logement_ga calculette_dot_traitement_aide_finale_) ((log_variable_definition ["CalculetteAidesAuLogement"; "traitement_aide_finale"; "input"] (embed_money) - (calculette_sans_garde_alternee_dot_aide_finale_formule_ +$ + (o_add_mon_mon + calculette_sans_garde_alternee_dot_aide_finale_formule_ ( if - ((array_length - coefficents_enfants_garde_alternee_pris_en_compte_) = + (o_eq + (o_length + coefficents_enfants_garde_alternee_pris_en_compte_) (integer_of_string "0")) then (money_of_cents_string "0") else - ((calculette_dot_aide_finale_formule_ -$ - calculette_sans_garde_alternee_dot_aide_finale_formule_) - *$ - ((Array.fold_left - (fun (acc_: decimal) (coeff_: _) -> acc_ +& coeff_) - (decimal_of_string "0.") - coefficents_enfants_garde_alternee_pris_en_compte_) - /& - (decimal_of_integer - (array_length + (o_mult_mon_rat + (o_sub_mon_mon calculette_dot_aide_finale_formule_ + calculette_sans_garde_alternee_dot_aide_finale_formule_) + (o_div_rat_rat + (o_reduce + (fun (sum1_: decimal) (sum2_: decimal) -> + o_add_rat_rat sum1_ sum2_) + (decimal_of_string "0.") + coefficents_enfants_garde_alternee_pris_en_compte_) + (o_torat_int + (o_length coefficents_enfants_garde_alternee_pris_en_compte_)))))))))))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/prologue.catala_fr"; - start_line=1126; start_column=10; end_line=1126; end_column=21; + start_line=1126; start_column=12; end_line=1126; end_column=23; law_headings=["Calculette avec garde alternée"; "Prologue : aides au logement"]})))) in {CalculetteAidesAuLogementGardeAlternee.eligibilite = eligibilite_; diff --git a/french_law/ocaml/law_source/allocations_familiales.ml b/french_law/ocaml/law_source/allocations_familiales.ml index 0f89368c..e86835ed 100644 --- a/french_law/ocaml/law_source/allocations_familiales.ml +++ b/french_law/ocaml/law_source/allocations_familiales.ml @@ -366,7 +366,7 @@ let allocation_familiales_avril2008 (allocation_familiales_avril2008_in: Allocat try (handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=76; start_column=10; end_line=76; end_column=37; + start_line=76; start_column=12; end_line=76; end_column=39; law_headings=["Allocations familiales"; "Champs d'applications"; "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken @@ -382,7 +382,7 @@ let allocation_familiales_avril2008 (allocation_familiales_avril2008_in: Allocat with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=76; start_column=10; end_line=76; end_column=37; + start_line=76; start_column=12; end_line=76; end_column=39; law_headings=["Allocations familiales"; "Champs d'applications"; "Prologue"]})))) in {AllocationFamilialesAvril2008.age_minimum_alinea_1_l521_3 = @@ -395,7 +395,7 @@ let enfant_le_plus_age (enfant_le_plus_age_in: EnfantLePlusAgeIn.t) : EnfantLePl try (handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=80; start_column=10; end_line=80; end_column=21; + start_line=80; start_column=12; end_line=80; end_column=23; law_headings=["Allocations familiales"; "Champs d'applications"; "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken @@ -403,15 +403,21 @@ let enfant_le_plus_age (enfant_le_plus_age_in: EnfantLePlusAgeIn.t) : EnfantLePl start_line=12; start_column=14; end_line=12; end_column=25; law_headings=["Règles diverses"; "Épilogue"]} true)) (fun (_: unit) -> - (let predicate_ : _ = - (fun (potentiel_plus_age_: _) -> - potentiel_plus_age_.Enfant.date_de_naissance) - in - (Array.fold_left - (fun (acc_: _) (item_: _) -> - if ((predicate_ acc_) <@ (predicate_ item_)) then - acc_ else item_) - {Enfant.identifiant = (integer_of_string "-1"); + o_reduce + (fun (potentiel_plus_age_1_: Enfant.t) + (potentiel_plus_age_2_: Enfant.t) -> + if + (o_lt_dat_dat + (let potentiel_plus_age_ : Enfant.t = + potentiel_plus_age_1_ + in + (potentiel_plus_age_.Enfant.date_de_naissance)) + (let potentiel_plus_age_ : Enfant.t = + potentiel_plus_age_2_ + in + (potentiel_plus_age_.Enfant.date_de_naissance))) then + potentiel_plus_age_1_ else potentiel_plus_age_2_) + ({Enfant.identifiant = (integer_of_string "-1"); Enfant.obligation_scolaire = (SituationObligationScolaire.Pendant ()); Enfant.remuneration_mensuelle = (money_of_cents_string "0"); @@ -422,11 +428,11 @@ let enfant_le_plus_age (enfant_le_plus_age_in: EnfantLePlusAgeIn.t) : EnfantLePl Enfant.a_deja_ouvert_droit_aux_allocations_familiales = false; Enfant.beneficie_titre_personnel_aide_personnelle_logement = - false} enfants_)))) + false}) enfants_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=80; start_column=10; end_line=80; end_column=21; + start_line=80; start_column=12; end_line=80; end_column=23; law_headings=["Allocations familiales"; "Champs d'applications"; "Prologue"]})))) in {EnfantLePlusAge.le_plus_age = le_plus_age_} @@ -439,14 +445,14 @@ let smic (smic_in: SmicIn.t) : Smic.t = try (handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; end_line=11; end_column=22; + start_line=11; start_column=12; end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -457,31 +463,40 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2018-1173 du 19 décembre 2018 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2019) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2019) (12) (31))) && - ((residence_ = (Collectivite.Metropole ())) || - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = - (Collectivite.Martinique ())) || - ((residence_ = - (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) - || - ((residence_ = - (Collectivite.SaintMartin ())) - || - (residence_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2019) (12) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ (Collectivite.SaintPierreEtMiquelon ()))))))))))))) (fun (_: unit) -> money_of_cents_string "1003")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -492,16 +507,19 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2018-1173 du 19 décembre 2018 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2019) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2019) (12) (31))) && - (residence_ = (Collectivite.Mayotte ())))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2019) (12) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) (fun (_: unit) -> money_of_cents_string "757")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -512,31 +530,40 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2019-1387 du 18 décembre 2019 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2020) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2020) (12) (31))) && - ((residence_ = (Collectivite.Metropole ())) || - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = - (Collectivite.Martinique ())) || - ((residence_ = - (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) - || - ((residence_ = - (Collectivite.SaintMartin ())) - || - (residence_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2020) (12) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ (Collectivite.SaintPierreEtMiquelon ()))))))))))))) (fun (_: unit) -> money_of_cents_string "1015")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -547,16 +574,19 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2019-1387 du 18 décembre 2019 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2020) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2020) (12) (31))) && - (residence_ = (Collectivite.Mayotte ())))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2020) (12) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) (fun (_: unit) -> money_of_cents_string "766")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -567,31 +597,40 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2020-1598 du 16 décembre 2020 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2021) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2021) (12) (31))) && - ((residence_ = (Collectivite.Metropole ())) || - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = - (Collectivite.Martinique ())) || - ((residence_ = - (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) - || - ((residence_ = - (Collectivite.SaintMartin ())) - || - (residence_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2021) (12) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ (Collectivite.SaintPierreEtMiquelon ()))))))))))))) (fun (_: unit) -> money_of_cents_string "1025")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -602,16 +641,19 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2020-1598 du 16 décembre 2020 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2021) (1) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2021) (12) (31))) && - (residence_ = (Collectivite.Mayotte ())))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2021) (12) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) (fun (_: unit) -> money_of_cents_string "774")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -622,31 +664,40 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2021-1741 du 22 décembre 2021 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2022) (1) (1))) && - ((date_courante_ <=@ (date_of_numbers (2022) (4) (30))) - && - ((residence_ = (Collectivite.Metropole ())) || - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = - (Collectivite.Martinique ())) || - ((residence_ = - (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) - || - ((residence_ = - (Collectivite.SaintMartin ())) - || - (residence_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (4) (30))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ (Collectivite.SaintPierreEtMiquelon ()))))))))))))) (fun (_: unit) -> money_of_cents_string "1057")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -657,15 +708,19 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 1"; "Décret n° 2021-1741 du 22 décembre 2021 portant relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2022) (1) (1))) && - ((date_courante_ <=@ (date_of_numbers (2022) (4) (30))) - && (residence_ = (Collectivite.Mayotte ())))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (4) (30))) + (o_eq residence_ (Collectivite.Mayotte ())))))) (fun (_: unit) -> money_of_cents_string "798")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -676,31 +731,40 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 2"; "Arrêté du 19 avril 2022 relatif au relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2022) (5) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2022) (12) (31))) && - ((residence_ = (Collectivite.Metropole ())) || - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = - (Collectivite.Martinique ())) || - ((residence_ = - (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) - || - ((residence_ = - (Collectivite.SaintMartin ())) - || - (residence_ = + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (5) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ (Collectivite.SaintPierreEtMiquelon ()))))))))))))) (fun (_: unit) -> money_of_cents_string "1085")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; - end_line=11; end_column=22; + start_line=11; start_column=12; + end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]} ([||]) @@ -711,16 +775,153 @@ let smic (smic_in: SmicIn.t) : Smic.t = law_headings=["Article 2"; "Arrêté du 19 avril 2022 relatif au relèvement du salaire minimum de croissance"; "Montant du salaire minimum de croissance"]} - ((date_courante_ >=@ (date_of_numbers (2022) (5) (1))) && - ((date_courante_ <=@ - (date_of_numbers (2022) (12) (31))) && - (residence_ = (Collectivite.Mayotte ())))))) - (fun (_: unit) -> money_of_cents_string "819"))|]) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (5) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (7) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) + (fun (_: unit) -> money_of_cents_string "819")); + (fun (_: unit) -> + handle_default + {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; + start_line=11; start_column=12; + end_line=11; end_column=24; + law_headings=["Prologue"; + "Montant du salaire minimum de croissance"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; + start_line=225; start_column=5; + end_line=234; end_column=6; + law_headings=["Article 2"; + "Arrêté du 29 juillet 2022 relatif au relèvement du salaire minimum de croissance"; + "Montant du salaire minimum de croissance"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (8) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (12) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ + (Collectivite.SaintPierreEtMiquelon + ()))))))))))))) + (fun (_: unit) -> money_of_cents_string "1107")); + (fun (_: unit) -> + handle_default + {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; + start_line=11; start_column=12; + end_line=11; end_column=24; + law_headings=["Prologue"; + "Montant du salaire minimum de croissance"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; + start_line=243; start_column=5; + end_line=245; end_column=6; + law_headings=["Article 2"; + "Arrêté du 29 juillet 2022 relatif au relèvement du salaire minimum de croissance"; + "Montant du salaire minimum de croissance"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (8) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2022) (12) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) + (fun (_: unit) -> money_of_cents_string "835")); + (fun (_: unit) -> + handle_default + {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; + start_line=11; start_column=12; + end_line=11; end_column=24; + law_headings=["Prologue"; + "Montant du salaire minimum de croissance"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; + start_line=265; start_column=5; + end_line=274; end_column=6; + law_headings=["Article 1"; + "Décret n° 2022-1608 du 22 décembre 2022 portant relèvement du salaire minimum de croissance"; + "Montant du salaire minimum de croissance"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2023) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2023) (12) (31))) + (o_or (o_eq residence_ (Collectivite.Metropole ())) + (o_or + (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or + (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ + (Collectivite.Martinique ())) + (o_or + (o_eq residence_ + (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy + ())) + (o_or + (o_eq residence_ + (Collectivite.SaintMartin + ())) + (o_eq residence_ + (Collectivite.SaintPierreEtMiquelon + ()))))))))))))) + (fun (_: unit) -> money_of_cents_string "1127")); + (fun (_: unit) -> + handle_default + {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; + start_line=11; start_column=12; + end_line=11; end_column=24; + law_headings=["Prologue"; + "Montant du salaire minimum de croissance"]} + ([||]) + (fun (_: unit) -> (log_decision_taken + {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; + start_line=283; start_column=5; + end_line=285; end_column=6; + law_headings=["Article 1"; + "Décret n° 2022-1608 du 22 décembre 2022 portant relèvement du salaire minimum de croissance"; + "Montant du salaire minimum de croissance"]} + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2023) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2023) (12) (31))) + (o_eq residence_ (Collectivite.Mayotte ())))))) + (fun (_: unit) -> money_of_cents_string "851"))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/../smic/smic.catala_fr"; - start_line=11; start_column=10; end_line=11; end_column=22; + start_line=11; start_column=12; end_line=11; end_column=24; law_headings=["Prologue"; "Montant du salaire minimum de croissance"]})))) in {Smic.brut_horaire = brut_horaire_} @@ -731,73 +932,85 @@ let base_mensuelle_allocations_familiales (base_mensuelle_allocations_familiales try (handle_default {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; start_line=28; start_column=5; - end_line=29; end_column=34; + end_line=29; end_column=33; law_headings=["Instruction ministérielle N°DSS/SD2B/2019/65 du 25 mars 2019 relative à la revalorisation au 1er avril 2019 des prestations familiales servies en métropole"; "Montant de la base mensuelle des allocations familiales"]} - ((date_courante_ >=@ (date_of_numbers (2019) (4) (1))) && - (date_courante_ <@ (date_of_numbers (2020) (4) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (4) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2020) (4) (1)))))) (fun (_: unit) -> money_of_cents_string "41316")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; start_line=48; start_column=5; - end_line=49; end_column=34; + end_line=49; end_column=33; law_headings=["Instruction interministérielle no DSS/SD2B/2020/33 du 18 février 2020 relative à la revalorisation au 1er avril 2020 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"; "Montant de la base mensuelle des allocations familiales"]} - ((date_courante_ >=@ (date_of_numbers (2020) (4) (1))) && - (date_courante_ <@ (date_of_numbers (2021) (4) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (4) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2021) (4) (1)))))) (fun (_: unit) -> money_of_cents_string "41440")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; start_line=64; start_column=5; - end_line=65; end_column=34; + end_line=65; end_column=33; law_headings=["Instruction interministérielle n°DSS/2B/2021/65 du 19 mars 2021 relative à la revalorisation au 1er avril 2021 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"; "Montant de la base mensuelle des allocations familiales"]} - ((date_courante_ >=@ (date_of_numbers (2021) (4) (1))) && - (date_courante_ <@ (date_of_numbers (2022) (4) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (4) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2022) (4) (1)))))) (fun (_: unit) -> money_of_cents_string "41481")); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; start_line=82; start_column=5; - end_line=83; end_column=34; + end_line=83; end_column=33; law_headings=["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"; "Montant de la base mensuelle des allocations familiales"]} - ((date_courante_ >=@ (date_of_numbers (2022) (4) (1))) && - (date_courante_ <@ (date_of_numbers (2023) (4) (1)))))) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2022) (4) (1))) + (o_lt_dat_dat date_courante_ + (date_of_numbers (2023) (4) (1)))))) (fun (_: unit) -> money_of_cents_string "42228"))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr"; - start_line=6; start_column=10; end_line=6; end_column=17; + start_line=6; start_column=12; end_line=6; end_column=19; law_headings=["Montant de la base mensuelle des allocations familiales"]})))) in {BaseMensuelleAllocationsFamiliales.montant = montant_} @@ -810,7 +1023,7 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t try (handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=60; start_column=10; end_line=60; end_column=22; + start_line=60; start_column=12; end_line=60; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken @@ -826,7 +1039,7 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=60; start_column=10; end_line=60; end_column=22; + start_line=60; start_column=12; end_line=60; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]})))) in let smic_dot_date_courante_: date = @@ -872,22 +1085,22 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t let result_: Smic.t = (log_end_call ["PrestationsFamiliales"; "smic"; "Smic"] ((log_begin_call ["PrestationsFamiliales"; "smic"; "Smic"] smic) - {SmicIn.date_courante_in = smic_dot_date_courante_; - SmicIn.residence_in = smic_dot_residence_})) in + ({SmicIn.date_courante_in = smic_dot_date_courante_; + SmicIn.residence_in = smic_dot_residence_}))) in let smic_dot_brut_horaire_: money = result_.Smic.brut_horaire in let regime_outre_mer_l751_1_: bool = (log_variable_definition ["PrestationsFamiliales"; "régime_outre_mer_l751_1"] (embed_bool) ( try (handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=61; start_column=10; end_line=61; end_column=33; + start_line=61; start_column=12; end_line=61; end_column=35; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=61; start_column=10; - end_line=61; end_column=33; + start_line=61; start_column=12; + end_line=61; end_column=35; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} ([||]) @@ -901,25 +1114,28 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t "Livre 7 : Régimes divers - Dispositions diverses"; "Partie législative"; "Code de la sécurité sociale"]} - ((residence_ = (Collectivite.Guadeloupe ())) || - ((residence_ = (Collectivite.Guyane ())) || - ((residence_ = (Collectivite.Martinique ())) || - ((residence_ = (Collectivite.LaReunion ())) || - ((residence_ = - (Collectivite.SaintBarthelemy ())) || - (residence_ = + (o_or (o_eq residence_ (Collectivite.Guadeloupe ())) + (o_or (o_eq residence_ (Collectivite.Guyane ())) + (o_or + (o_eq residence_ (Collectivite.Martinique ())) + (o_or + (o_eq residence_ (Collectivite.LaReunion ())) + (o_or + (o_eq residence_ + (Collectivite.SaintBarthelemy ())) + (o_eq residence_ (Collectivite.SaintMartin ()))))))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=61; start_column=10; end_line=61; end_column=33; + start_line=61; start_column=12; end_line=61; end_column=35; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} true)) (fun (_: unit) -> false)) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=61; start_column=10; end_line=61; end_column=33; + start_line=61; start_column=12; end_line=61; end_column=35; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]})))) in let plafond_l512_3_2_: money = (log_variable_definition @@ -940,8 +1156,8 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_R.catala_fr"; - start_line=217; start_column=18; - end_line=217; end_column=41; + start_line=215; start_column=18; + end_line=215; end_column=41; law_headings=["Article R755-0-2"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; @@ -950,7 +1166,9 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t "Code de la sécurité sociale"]} regime_outre_mer_l751_1_)) (fun (_: unit) -> - (smic_dot_brut_horaire_ *$ (decimal_of_string "0.55")) *$ + o_mult_mon_rat + (o_mult_mon_rat smic_dot_brut_horaire_ + (decimal_of_string "0.55")) (decimal_of_string "169.")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_R.catala_fr"; @@ -962,8 +1180,9 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t "Partie réglementaire - Décrets en Conseil d'Etat"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - (smic_dot_brut_horaire_ *$ (decimal_of_string "0.55")) *$ - (decimal_of_string "169."))) + o_mult_mon_rat + (o_mult_mon_rat smic_dot_brut_horaire_ + (decimal_of_string "0.55")) (decimal_of_string "169."))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -977,67 +1196,73 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t try (handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=58; start_column=10; end_line=58; end_column=29; + start_line=58; start_column=12; end_line=58; end_column=31; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=58; start_column=10; - end_line=58; end_column=29; + start_line=58; start_column=12; + end_line=58; end_column=31; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_L.catala_fr"; start_line=68; start_column=5; - end_line=71; end_column=57; + end_line=71; end_column=56; law_headings=["Article L512-3"; "Chapitre 2 : Champ d'application"; "Titre 1 : Champ d'application - Généralités"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie législative"; "Code de la sécurité sociale"]} - (((match (param_.Enfant.obligation_scolaire) - with - | SituationObligationScolaire.Avant _ -> true - | SituationObligationScolaire.Pendant _ -> false - | SituationObligationScolaire.Apres _ -> false) - || - ((match (param_.Enfant.obligation_scolaire) - with - | SituationObligationScolaire.Avant _ -> false - | SituationObligationScolaire.Pendant _ -> - true - | SituationObligationScolaire.Apres _ -> false) - || - (match (param_.Enfant.obligation_scolaire) - with - | SituationObligationScolaire.Avant _ -> - false - | SituationObligationScolaire.Pendant _ -> - false - | SituationObligationScolaire.Apres _ -> - true))) && - ((param_.Enfant.remuneration_mensuelle) <=$ + (o_and + (o_or + (match (param_.Enfant.obligation_scolaire) + with + | SituationObligationScolaire.Avant _ -> true + | SituationObligationScolaire.Pendant _ -> + false + | SituationObligationScolaire.Apres _ -> + false) + (o_or + (match (param_.Enfant.obligation_scolaire) + with + | SituationObligationScolaire.Avant _ -> + false + | SituationObligationScolaire.Pendant _ -> + true + | SituationObligationScolaire.Apres _ -> + false) + (match (param_.Enfant.obligation_scolaire) + with + | SituationObligationScolaire.Avant _ -> + false + | SituationObligationScolaire.Pendant _ -> + false + | SituationObligationScolaire.Apres _ -> + true))) + (o_lte_mon_mon + (param_.Enfant.remuneration_mensuelle) plafond_l512_3_2_)))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=58; start_column=10; - end_line=58; end_column=29; + start_line=58; start_column=12; + end_line=58; end_column=31; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} true)) (fun (_: unit) -> false)) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=58; start_column=10; end_line=58; end_column=29; + start_line=58; start_column=12; end_line=58; end_column=31; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]}))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=58; start_column=10; end_line=58; end_column=29; + start_line=58; start_column=12; end_line=58; end_column=31; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]})))) in let droit_ouvert_: Enfant.t -> bool = (log_variable_definition @@ -1047,21 +1272,21 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t try (handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=57; start_column=10; end_line=57; end_column=22; + start_line=57; start_column=12; end_line=57; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=57; start_column=10; - end_line=57; end_column=22; + start_line=57; start_column=12; + end_line=57; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=57; start_column=10; - end_line=57; end_column=22; + start_line=57; start_column=12; + end_line=57; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} ([||]) @@ -1083,24 +1308,24 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=57; start_column=10; - end_line=57; end_column=22; + start_line=57; start_column=12; + end_line=57; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=57; start_column=10; - end_line=57; end_column=22; + start_line=57; start_column=12; + end_line=57; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=57; start_column=10; - end_line=57; end_column=22; + start_line=57; start_column=12; + end_line=57; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} @@ -1110,27 +1335,31 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t {filename = "examples/allocations_familiales/securite_sociale_L.catala_fr"; start_line=60; start_column=5; - end_line=62; end_column=64; + end_line=62; end_column=62; law_headings=["Article L512-3"; "Chapitre 2 : Champ d'application"; "Titre 1 : Champ d'application - Généralités"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie législative"; "Code de la sécurité sociale"]} - ((match - (param_.Enfant.obligation_scolaire) - with - | SituationObligationScolaire.Avant _ -> - false - | SituationObligationScolaire.Pendant _ -> - false - | SituationObligationScolaire.Apres _ -> - true) && - (((param_.Enfant.remuneration_mensuelle) - <=$ plafond_l512_3_2_) - && - (((param_.Enfant.date_de_naissance) - +@ age_l512_3_2_) >@ + (o_and + (match + (param_.Enfant.obligation_scolaire) + with + | SituationObligationScolaire.Avant _ -> + false + | SituationObligationScolaire.Pendant _ -> + false + | SituationObligationScolaire.Apres _ -> + true) + (o_and + (o_lte_mon_mon + (param_.Enfant.remuneration_mensuelle) + plafond_l512_3_2_) + (o_gt_dat_dat + (o_add_dat_dur + (param_.Enfant.date_de_naissance) + age_l512_3_2_) date_courante_))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken @@ -1143,15 +1372,16 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie législative"; "Code de la sécurité sociale"]} - ((match - (param_.Enfant.obligation_scolaire) - with - | SituationObligationScolaire.Avant _ -> - true - | SituationObligationScolaire.Pendant _ -> - false - | SituationObligationScolaire.Apres _ -> - false) || + (o_or + (match + (param_.Enfant.obligation_scolaire) + with + | SituationObligationScolaire.Avant _ -> + true + | SituationObligationScolaire.Pendant _ -> + false + | SituationObligationScolaire.Apres _ -> + false) (match (param_.Enfant.obligation_scolaire) with @@ -1166,21 +1396,21 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t (fun (_: unit) -> raise EmptyError)))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=57; start_column=10; - end_line=57; end_column=22; + start_line=57; start_column=12; + end_line=57; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]} true)) (fun (_: unit) -> false)) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=57; start_column=10; end_line=57; end_column=22; + start_line=57; start_column=12; end_line=57; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]}))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=57; start_column=10; end_line=57; end_column=22; + start_line=57; start_column=12; end_line=57; end_column=24; law_headings=["Prestations familiales"; "Champs d'applications"; "Prologue"]})))) in {PrestationsFamiliales.droit_ouvert = droit_ouvert_; @@ -1570,7 +1800,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=293; start_column=14; end_line=293; end_column=35; + start_line=294; start_column=14; end_line=294; end_column=35; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -1614,7 +1844,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "AllocationFamilialesAvril2008"] ((log_begin_call ["AllocationsFamiliales"; "version_avril_2008"; "AllocationFamilialesAvril2008"] allocation_familiales_avril2008) - ())) in + (()))) in let version_avril_2008_dot_age_minimum_alinea_1_l521_3_: duration = result_.AllocationFamilialesAvril2008.age_minimum_alinea_1_l521_3 in let bmaf_dot_date_courante_: date = try ((log_variable_definition @@ -1641,8 +1871,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ((log_begin_call ["AllocationsFamiliales"; "bmaf"; "BaseMensuelleAllocationsFamiliales"] base_mensuelle_allocations_familiales) - {BaseMensuelleAllocationsFamilialesIn.date_courante_in = - bmaf_dot_date_courante_})) in + ({BaseMensuelleAllocationsFamilialesIn.date_courante_in = + bmaf_dot_date_courante_}))) in let bmaf_dot_montant_: money = result_.BaseMensuelleAllocationsFamiliales.montant in let prestations_familiales_dot_date_courante_: date = try ((log_variable_definition @@ -1713,12 +1943,12 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "PrestationsFamiliales"] ((log_begin_call ["AllocationsFamiliales"; "prestations_familiales"; "PrestationsFamiliales"] prestations_familiales) - {PrestationsFamilialesIn.date_courante_in = - prestations_familiales_dot_date_courante_; - PrestationsFamilialesIn.prestation_courante_in = - prestations_familiales_dot_prestation_courante_; - PrestationsFamilialesIn.residence_in = - prestations_familiales_dot_residence_})) in + ({PrestationsFamilialesIn.date_courante_in = + prestations_familiales_dot_date_courante_; + PrestationsFamilialesIn.prestation_courante_in = + prestations_familiales_dot_prestation_courante_; + PrestationsFamilialesIn.residence_in = + prestations_familiales_dot_residence_}))) in let prestations_familiales_dot_droit_ouvert_: Enfant.t -> bool = result_.PrestationsFamiliales.droit_ouvert in let prestations_familiales_dot_conditions_hors_age_: Enfant.t -> bool = result_.PrestationsFamiliales.conditions_hors_age in let prestations_familiales_dot_age_l512_3_2_: duration = result_.PrestationsFamiliales.age_l512_3_2 in @@ -1729,24 +1959,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (embed_array (embed_enfant)) (handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=32; start_column=14; end_line=32; end_column=40; + start_line=33; start_column=14; end_line=33; end_column=40; law_headings=["Règles diverses"; "Épilogue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=32; start_column=14; end_line=32; end_column=40; + start_line=33; start_column=14; end_line=33; end_column=40; law_headings=["Règles diverses"; "Épilogue"]} true)) (fun (_: unit) -> enfants_a_charge_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=32; start_column=14; end_line=32; end_column=40; + start_line=33; start_column=14; end_line=33; end_column=40; law_headings=["Règles diverses"; "Épilogue"]})) in let result_: EnfantLePlusAge.t = (log_end_call ["AllocationsFamiliales"; "enfant_le_plus_âgé"; "EnfantLePlusÂgé"] ((log_begin_call ["AllocationsFamiliales"; "enfant_le_plus_âgé"; "EnfantLePlusÂgé"] enfant_le_plus_age) - {EnfantLePlusAgeIn.enfants_in = enfant_le_plus_age_dot_enfants_})) in + ({EnfantLePlusAgeIn.enfants_in = enfant_le_plus_age_dot_enfants_}))) in let enfant_le_plus_age_dot_le_plus_age_: Enfant.t = result_.EnfantLePlusAge.le_plus_age in let age_minimum_alinea_1_l521_3_: Enfant.t -> duration = (log_variable_definition ["AllocationsFamiliales"; "âge_minimum_alinéa_1_l521_3"] (unembeddable) @@ -1770,15 +2000,16 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_R.catala_fr"; start_line=83; start_column=19; - end_line=83; end_column=69; + end_line=83; end_column=67; law_headings=["Article R521-1"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets en Conseil d'Etat"; "Code de la sécurité sociale"]} - (((param_.Enfant.date_de_naissance) +@ - (duration_of_numbers (11) (0) (0))) <=@ + (o_lte_dat_dat + (o_add_dat_dur (param_.Enfant.date_de_naissance) + (duration_of_numbers (11) (0) (0))) (date_of_numbers (2008) (4) (30))))) (fun (_: unit) -> version_avril_2008_dot_age_minimum_alinea_1_l521_3_))|]) @@ -1825,8 +2056,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Partie législative"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - array_filter - (fun (enfant_: _) -> (log_end_call + o_filter + (fun (enfant_: Enfant.t) -> (log_end_call ["PrestationsFamiliales"; "droit_ouvert"] ((log_variable_definition ["PrestationsFamiliales"; "droit_ouvert"; "output"] @@ -1855,10 +2086,11 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t [||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=33; start_column=14; - end_line=33; end_column=36; + start_line=34; start_column=14; + end_line=34; end_column=36; law_headings=["Règles diverses"; "Épilogue"]} true)) - (fun (_: unit) -> enfant_le_plus_age_dot_le_plus_age_ = param_)) + (fun (_: unit) -> + o_eq enfant_le_plus_age_dot_le_plus_age_ param_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -1897,18 +2129,20 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=30; start_column=5; - end_line=30; end_column=69; + end_line=30; end_column=67; law_headings=["Circulaire interministérielle N° DSS/SD2B/2017/352 du 22 décembre 2017 relative à la revalorisation au 1er janvier 2018 des plafonds de ressources d’attribution de certaines prestations familiales servies en métropole, en Guadeloupe, en Guyane, en Martinique, à la Réunion, à Saint-Barthélemy, à Saint-Martin et à Mayotte"; "Montant des plafonds de ressources"]} - ((date_courante_ >=@ - (date_of_numbers (2018) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2018) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2018) (12) (31)))))) (fun (_: unit) -> - (money_of_cents_string "7877000") +$ - ((money_of_cents_string "562800") *$ - (decimal_of_integer - (array_length + o_add_mon_mon (money_of_cents_string "7877000") + (o_mult_mon_rat (money_of_cents_string + "562800") + (o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_))))); (fun (_: unit) -> handle_default @@ -1921,18 +2155,20 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=63; start_column=5; - end_line=63; end_column=69; + end_line=63; end_column=67; law_headings=["Instruction interministérielle n° DSS/SD2B/2018/279 du 17 décembre 2018 relative à la revalorisation au 1er janvier 2019 des plafonds de ressources d’attribution de certaines prestations familiales servies en métropole, en Guadeloupe, en Guyane, en Martinique, à la Réunion, à Saint-Barthélemy, à Saint-Martin et à Mayotte"; "Montant des plafonds de ressources"]} - ((date_courante_ >=@ - (date_of_numbers (2019) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2019) (12) (31)))))) (fun (_: unit) -> - (money_of_cents_string "7955800") +$ - ((money_of_cents_string "568400") *$ - (decimal_of_integer - (array_length + o_add_mon_mon (money_of_cents_string "7955800") + (o_mult_mon_rat (money_of_cents_string + "568400") + (o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_))))); (fun (_: unit) -> handle_default @@ -1945,18 +2181,20 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=96; start_column=5; - end_line=96; end_column=69; + end_line=96; end_column=67; law_headings=["Instruction interministerielle no DSS/SD2B/2019/261 du 18 décembre 2019 relative à la revalorisation au 1er janvier 2020 des plafonds de ressources d’attribution de certaines prestations familiales servies en métropole, en Guadeloupe, en Guyane, en Martinique, à La Réunion, à Saint-Barthélemy, à Saint-Martin et à Mayotte"; "Montant des plafonds de ressources"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2020) (12) (31)))))) (fun (_: unit) -> - (money_of_cents_string "8083100") +$ - ((money_of_cents_string "577500") *$ - (decimal_of_integer - (array_length + o_add_mon_mon (money_of_cents_string "8083100") + (o_mult_mon_rat (money_of_cents_string + "577500") + (o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_))))); (fun (_: unit) -> handle_default @@ -1969,24 +2207,26 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=132; start_column=5; - end_line=132; end_column=69; + end_line=132; end_column=67; law_headings=["Article 1"; "Arrêté du 14 décembre 2020 relatif au montant des plafonds de ressources de certaines prestations familiales et aux tranches du barème applicable au recouvrement des indus et à la saisie des prestations"; "Montant des plafonds de ressources"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2021) (12) (31)))))) (fun (_: unit) -> - (money_of_cents_string "8155800") +$ - ((money_of_cents_string "582700") *$ - (decimal_of_integer - (array_length + o_add_mon_mon (money_of_cents_string "8155800") + (o_mult_mon_rat (money_of_cents_string + "582700") + (o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_)))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=313; start_column=14; end_line=313; end_column=31; + start_line=314; start_column=14; end_line=314; end_column=31; law_headings=["Article D521-3"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -1994,10 +2234,10 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - (money_of_cents_string "7830000") +$ - ((money_of_cents_string "559500") *$ - (decimal_of_integer - (array_length + o_add_mon_mon (money_of_cents_string "7830000") + (o_mult_mon_rat (money_of_cents_string "559500") + (o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_))))) with EmptyError -> (raise (NoValueProvided @@ -2031,18 +2271,20 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=23; start_column=5; - end_line=23; end_column=69; + end_line=23; end_column=67; law_headings=["Circulaire interministérielle N° DSS/SD2B/2017/352 du 22 décembre 2017 relative à la revalorisation au 1er janvier 2018 des plafonds de ressources d’attribution de certaines prestations familiales servies en métropole, en Guadeloupe, en Guyane, en Martinique, à la Réunion, à Saint-Barthélemy, à Saint-Martin et à Mayotte"; "Montant des plafonds de ressources"]} - ((date_courante_ >=@ - (date_of_numbers (2018) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2018) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2018) (12) (31)))))) (fun (_: unit) -> - (money_of_cents_string "5628600") +$ - ((money_of_cents_string "562800") *$ - (decimal_of_integer - (array_length + o_add_mon_mon (money_of_cents_string "5628600") + (o_mult_mon_rat (money_of_cents_string + "562800") + (o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_))))); (fun (_: unit) -> handle_default @@ -2055,18 +2297,20 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=56; start_column=5; - end_line=56; end_column=69; + end_line=56; end_column=67; law_headings=["Instruction interministérielle n° DSS/SD2B/2018/279 du 17 décembre 2018 relative à la revalorisation au 1er janvier 2019 des plafonds de ressources d’attribution de certaines prestations familiales servies en métropole, en Guadeloupe, en Guyane, en Martinique, à la Réunion, à Saint-Barthélemy, à Saint-Martin et à Mayotte"; "Montant des plafonds de ressources"]} - ((date_courante_ >=@ - (date_of_numbers (2019) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2019) (12) (31)))))) (fun (_: unit) -> - (money_of_cents_string "5684900") +$ - ((money_of_cents_string "568400") *$ - (decimal_of_integer - (array_length + o_add_mon_mon (money_of_cents_string "5684900") + (o_mult_mon_rat (money_of_cents_string + "568400") + (o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_))))); (fun (_: unit) -> handle_default @@ -2079,18 +2323,20 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=89; start_column=5; - end_line=89; end_column=69; + end_line=89; end_column=67; law_headings=["Instruction interministerielle no DSS/SD2B/2019/261 du 18 décembre 2019 relative à la revalorisation au 1er janvier 2020 des plafonds de ressources d’attribution de certaines prestations familiales servies en métropole, en Guadeloupe, en Guyane, en Martinique, à La Réunion, à Saint-Barthélemy, à Saint-Martin et à Mayotte"; "Montant des plafonds de ressources"]} - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2020) (12) (31)))))) (fun (_: unit) -> - (money_of_cents_string "5775900") +$ - ((money_of_cents_string "577500") *$ - (decimal_of_integer - (array_length + o_add_mon_mon (money_of_cents_string "5775900") + (o_mult_mon_rat (money_of_cents_string + "577500") + (o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_))))); (fun (_: unit) -> handle_default @@ -2103,24 +2349,26 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=116; start_column=5; - end_line=116; end_column=69; + end_line=116; end_column=67; law_headings=["Article 1"; "Arrêté du 14 décembre 2020 relatif au montant des plafonds de ressources de certaines prestations familiales et aux tranches du barème applicable au recouvrement des indus et à la saisie des prestations"; "Montant des plafonds de ressources"]} - ((date_courante_ >=@ - (date_of_numbers (2021) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2021) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2021) (12) (31)))))) (fun (_: unit) -> - (money_of_cents_string "5827900") +$ - ((money_of_cents_string "582700") *$ - (decimal_of_integer - (array_length + o_add_mon_mon (money_of_cents_string "5827900") + (o_mult_mon_rat (money_of_cents_string + "582700") + (o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_)))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=303; start_column=14; end_line=303; end_column=30; + start_line=304; start_column=14; end_line=304; end_column=30; law_headings=["Article D521-3"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -2128,10 +2376,10 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - (money_of_cents_string "5595000") +$ - ((money_of_cents_string "559500") *$ - (decimal_of_integer - (array_length + o_add_mon_mon (money_of_cents_string "5595000") + (o_mult_mon_rat (money_of_cents_string "559500") + (o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_))))) with EmptyError -> (raise (NoValueProvided @@ -2172,16 +2420,17 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 7 : Régimes divers - Dispositions diverses"; "Partie législative"; "Code de la sécurité sociale"]} - (prestations_familiales_dot_regime_outre_mer_l751_1_ - && - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - = (integer_of_string "1"))))) + (o_and + prestations_familiales_dot_regime_outre_mer_l751_1_ + (o_eq + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1"))))) (fun (_: unit) -> false))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=30; start_column=9; - end_line=30; end_column=32; + start_line=31; start_column=9; + end_line=31; end_column=32; law_headings=["Règles diverses"; "Épilogue"]} true)) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken @@ -2231,11 +2480,12 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 7 : Régimes divers - Dispositions diverses"; "Partie législative"; "Code de la sécurité sociale"]} - (prestations_familiales_dot_regime_outre_mer_l751_1_ - && - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - = (integer_of_string "1"))))) + (o_and + prestations_familiales_dot_regime_outre_mer_l751_1_ + (o_eq + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1"))))) (fun (_: unit) -> false))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_L.catala_fr"; @@ -2247,14 +2497,20 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie législative"; "Code de la sécurité sociale"]} - (((array_length enfants_a_charge_) >=! - nombre_enfants_alinea_2_l521_3_) && - (((((param_.Enfant.date_de_naissance) +@ - prestations_familiales_dot_age_l512_3_2_) - -@ date_courante_) <^ - (duration_of_numbers (0) (0) (365))) && - ((param_.Enfant.a_deja_ouvert_droit_aux_allocations_familiales) - && ((log_end_call + (o_and + (o_gte_int_int (o_length enfants_a_charge_) + nombre_enfants_alinea_2_l521_3_) + (o_and + (o_lt_dur_dur + (o_sub_dat_dat + (o_add_dat_dur + (param_.Enfant.date_de_naissance) + prestations_familiales_dot_age_l512_3_2_) + date_courante_) + (duration_of_numbers (0) (0) (365))) + (o_and + (param_.Enfant.a_deja_ouvert_droit_aux_allocations_familiales) + ((log_end_call ["PrestationsFamiliales"; "conditions_hors_âge"] ((log_variable_definition @@ -2307,14 +2563,18 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t true)) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) >! + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) (integer_of_string "3")) then - ((bmaf_dot_montant_ *$ (decimal_of_string "0.0463")) *$ - (decimal_of_integer - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - -! (integer_of_string "3")))) else + (o_mult_mon_rat + (o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.0463")) + (o_torat_int + (o_sub_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "3")))) else (money_of_cents_string "0"))) with EmptyError -> (raise (NoValueProvided @@ -2349,21 +2609,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=431; start_column=5; - end_line=431; end_column=69; + end_line=431; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) && - ((date_courante_ >=@ - (date_of_numbers (2011) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_eq residence_ (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2011) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2011) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0463")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2377,21 +2640,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=439; start_column=5; - end_line=439; end_column=69; + end_line=439; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) && - ((date_courante_ >=@ - (date_of_numbers (2012) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_eq residence_ (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2012) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2012) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0539")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2405,21 +2671,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=447; start_column=5; - end_line=447; end_column=69; + end_line=447; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) && - ((date_courante_ >=@ - (date_of_numbers (2013) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_eq residence_ (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2013) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2013) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0615")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2433,21 +2702,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=455; start_column=5; - end_line=455; end_column=69; + end_line=455; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) && - ((date_courante_ >=@ - (date_of_numbers (2014) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_eq residence_ (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2014) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2014) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.069")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2461,21 +2733,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=463; start_column=5; - end_line=463; end_column=69; + end_line=463; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) && - ((date_courante_ >=@ - (date_of_numbers (2015) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_eq residence_ (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2015) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2015) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0766")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2489,21 +2764,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=471; start_column=5; - end_line=471; end_column=69; + end_line=471; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) && - ((date_courante_ >=@ - (date_of_numbers (2016) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_eq residence_ (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2016) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2016) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0842")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2517,21 +2795,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=479; start_column=5; - end_line=479; end_column=69; + end_line=479; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) && - ((date_courante_ >=@ - (date_of_numbers (2017) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_eq residence_ (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2017) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2017) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0918")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2545,21 +2826,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=487; start_column=5; - end_line=487; end_column=69; + end_line=487; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) && - ((date_courante_ >=@ - (date_of_numbers (2018) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_eq residence_ (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2018) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2018) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.1089")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2573,21 +2857,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=495; start_column=5; - end_line=495; end_column=69; + end_line=495; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) && - ((date_courante_ >=@ - (date_of_numbers (2019) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_eq residence_ (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2019) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.1259")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2601,21 +2888,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=503; start_column=5; - end_line=503; end_column=69; + end_line=503; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) && - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) && - (date_courante_ <=@ + (o_and + (o_eq residence_ (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2020) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.143")) else (money_of_cents_string "0")))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) @@ -2628,11 +2918,12 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t true)) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) >! + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) (integer_of_string "2")) then - (bmaf_dot_montant_ *$ (decimal_of_string "0.16")) else - (money_of_cents_string "0"))) + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.16")) + else (money_of_cents_string "0"))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -2649,7 +2940,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_R.catala_fr"; - start_line=162; start_column=14; end_line=162; end_column=34; + start_line=160; start_column=14; end_line=160; end_column=34; law_headings=["Article R521-3"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -2657,9 +2948,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Partie réglementaire - Décrets en Conseil d'Etat"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - decimal_of_integer - (array_length - enfants_a_charge_droit_ouvert_prestation_familiale_))) + o_torat_int + (o_length enfants_a_charge_droit_ouvert_prestation_familiale_))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -2684,10 +2974,12 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Partie réglementaire - Décrets en Conseil d'Etat"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - Array.fold_left - (fun (acc_: decimal) (enfant_: _) -> - acc_ +& - (match ((log_end_call + o_reduce + (fun (sum1_: decimal) (sum2_: decimal) -> + o_add_rat_rat sum1_ sum2_) (decimal_of_string "0.") + (o_map + (fun (enfant_: Enfant.t) -> + match ((log_end_call ["AllocationsFamiliales"; "prise_en_compte"] ((log_variable_definition ["AllocationsFamiliales"; "prise_en_compte"; "output"] @@ -2699,9 +2991,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t with | PriseEnCompte.Complete _ -> (decimal_of_string "1.") | PriseEnCompte.Partagee _ -> (decimal_of_string "0.5") - | PriseEnCompte.Zero _ -> (decimal_of_string "0."))) - (decimal_of_string "0.") - enfants_a_charge_droit_ouvert_prestation_familiale_)) + | PriseEnCompte.Zero _ -> (decimal_of_string "0.")) + enfants_a_charge_droit_ouvert_prestation_familiale_))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -2747,22 +3038,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2011) (1) (1))) - && - ((date_courante_ <=@ - (date_of_numbers (2011) (12) (31))) - && - (not + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2011) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2011) (12) (31))) + (o_not avait_enfant_a_charge_avant_1er_janvier_2012_)))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.145")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2780,22 +3073,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2012) (1) (1))) - && - ((date_courante_ <=@ - (date_of_numbers (2012) (12) (31))) - && - (not + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2012) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2012) (12) (31))) + (o_not avait_enfant_a_charge_avant_1er_janvier_2012_)))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.1393")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2813,22 +3108,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2013) (1) (1))) - && - ((date_courante_ <=@ - (date_of_numbers (2013) (12) (31))) - && - (not + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2013) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2013) (12) (31))) + (o_not avait_enfant_a_charge_avant_1er_janvier_2012_)))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.1335")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2846,22 +3143,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2014) (1) (1))) - && - ((date_courante_ <=@ - (date_of_numbers (2014) (12) (31))) - && - (not + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2014) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2014) (12) (31))) + (o_not avait_enfant_a_charge_avant_1er_janvier_2012_)))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.1278")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2879,22 +3178,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2015) (1) (1))) - && - ((date_courante_ <=@ - (date_of_numbers (2015) (12) (31))) - && - (not + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2015) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2015) (12) (31))) + (o_not avait_enfant_a_charge_avant_1er_janvier_2012_)))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.122")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2912,22 +3213,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2016) (1) (1))) - && - ((date_courante_ <=@ - (date_of_numbers (2016) (12) (31))) - && - (not + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2016) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2016) (12) (31))) + (o_not avait_enfant_a_charge_avant_1er_janvier_2012_)))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.1163")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2945,22 +3248,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2017) (1) (1))) - && - ((date_courante_ <=@ - (date_of_numbers (2017) (12) (31))) - && - (not + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2017) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2017) (12) (31))) + (o_not avait_enfant_a_charge_avant_1er_janvier_2012_)))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.1105")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -2978,22 +3283,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2018) (1) (1))) - && - ((date_courante_ <=@ - (date_of_numbers (2018) (12) (31))) - && - (not + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2018) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2018) (12) (31))) + (o_not avait_enfant_a_charge_avant_1er_janvier_2012_)))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0976")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3011,22 +3318,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2019) (1) (1))) - && - ((date_courante_ <=@ - (date_of_numbers (2019) (12) (31))) - && - (not + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2019) (12) (31))) + (o_not avait_enfant_a_charge_avant_1er_janvier_2012_)))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0847")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3044,22 +3353,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) - && - ((date_courante_ <=@ - (date_of_numbers (2020) (12) (31))) - && - (not + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_and + (o_lte_dat_dat date_courante_ + (date_of_numbers (2020) (12) (31))) + (o_not avait_enfant_a_charge_avant_1er_janvier_2012_)))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0717")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3077,14 +3388,16 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) avait_enfant_a_charge_avant_1er_janvier_2012_))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then (money_of_cents_string "5728") else (money_of_cents_string "0")))|]) (fun (_: unit) -> false) @@ -3096,14 +3409,16 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Article 7"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - (residence_ = (Collectivite.Mayotte ())))) + (o_eq residence_ (Collectivite.Mayotte ())))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "0")) then - (bmaf_dot_montant_ *$ (decimal_of_string "0.0588")) - else (money_of_cents_string "0"))); + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "0")) then + (o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.0588")) else + (money_of_cents_string "0"))); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -3114,23 +3429,26 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=364; start_column=5; - end_line=365; end_column=71; + start_line=365; start_column=5; + end_line=366; end_column=71; law_headings=["Article D755-5"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; "Livre 7 : Régimes divers - Dispositions diverses"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (prestations_familiales_dot_regime_outre_mer_l751_1_ && - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - = (integer_of_string "1"))))) + (o_and + prestations_familiales_dot_regime_outre_mer_l751_1_ + (o_eq + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1"))))) (fun (_: unit) -> - bmaf_dot_montant_ *$ (decimal_of_string "0.0588")))|]) + o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.0588")))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=361; start_column=29; end_line=361; end_column=64; + start_line=362; start_column=29; end_line=362; end_column=64; law_headings=["Article D755-5"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; @@ -3192,11 +3510,13 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Article 7"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = - (Collectivite.Mayotte ())) && - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >=! (integer_of_string "1"))))) + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_gte_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1"))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_L.catala_fr"; @@ -3208,11 +3528,12 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 7 : Régimes divers - Dispositions diverses"; "Partie législative"; "Code de la sécurité sociale"]} - (prestations_familiales_dot_regime_outre_mer_l751_1_ - && - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >=! (integer_of_string "1"))))) + (o_and + prestations_familiales_dot_regime_outre_mer_l751_1_ + (o_gte_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1"))))) (fun (_: unit) -> true))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) @@ -3226,9 +3547,10 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie législative"; "Code de la sécurité sociale"]} - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >=! (integer_of_string "2")))) (fun (_: unit) -> true))|]) + (o_gte_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/prologue.catala_fr"; start_line=103; start_column=11; end_line=103; end_column=28; @@ -3276,26 +3598,30 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie législative"; "Code de la sécurité sociale"]} - (((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >=! nombre_enfants_alinea_2_l521_3_) && - (((param_.Enfant.date_de_naissance) +@ - ((log_end_call - ["AllocationsFamiliales"; - "âge_minimum_alinéa_1_l521_3"] - ((log_variable_definition - ["AllocationsFamiliales"; - "âge_minimum_alinéa_1_l521_3"; - "output"] (embed_duration) - ((log_begin_call - ["AllocationsFamiliales"; - "âge_minimum_alinéa_1_l521_3"] - age_minimum_alinea_1_l521_3_) - ((log_variable_definition - ["AllocationsFamiliales"; - "âge_minimum_alinéa_1_l521_3"; - "input"] (embed_enfant) - param_)))))))) <=@ date_courante_)))) + (o_and + (o_gte_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + nombre_enfants_alinea_2_l521_3_) + (o_lte_dat_dat + (o_add_dat_dur + (param_.Enfant.date_de_naissance) + ((log_end_call + ["AllocationsFamiliales"; + "âge_minimum_alinéa_1_l521_3"] + ((log_variable_definition + ["AllocationsFamiliales"; + "âge_minimum_alinéa_1_l521_3"; + "output"] (embed_duration) + ((log_begin_call + ["AllocationsFamiliales"; + "âge_minimum_alinéa_1_l521_3"] + age_minimum_alinea_1_l521_3_) + ((log_variable_definition + ["AllocationsFamiliales"; + "âge_minimum_alinéa_1_l521_3"; + "input"] (embed_enfant) + param_)))))))) date_courante_)))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_L.catala_fr"; @@ -3307,35 +3633,39 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie législative"; "Code de la sécurité sociale"]} - ((not ((log_end_call - ["AllocationsFamiliales"; - "est_enfant_le_plus_âgé"] - ((log_variable_definition - ["AllocationsFamiliales"; - "est_enfant_le_plus_âgé"; "output"] - (embed_bool) ((log_begin_call - ["AllocationsFamiliales"; - "est_enfant_le_plus_âgé"] - est_enfant_le_plus_age_) - ((log_variable_definition - ["AllocationsFamiliales"; - "est_enfant_le_plus_âgé"; "input"] - (embed_enfant) param_)))))))) && - (((param_.Enfant.date_de_naissance) +@ - ((log_end_call - ["AllocationsFamiliales"; - "âge_minimum_alinéa_1_l521_3"] - ((log_variable_definition - ["AllocationsFamiliales"; - "âge_minimum_alinéa_1_l521_3"; "output"] - (embed_duration) ((log_begin_call - ["AllocationsFamiliales"; - "âge_minimum_alinéa_1_l521_3"] - age_minimum_alinea_1_l521_3_) - ((log_variable_definition - ["AllocationsFamiliales"; - "âge_minimum_alinéa_1_l521_3"; "input"] - (embed_enfant) param_)))))))) <=@ + (o_and + (o_not ((log_end_call + ["AllocationsFamiliales"; + "est_enfant_le_plus_âgé"] + ((log_variable_definition + ["AllocationsFamiliales"; + "est_enfant_le_plus_âgé"; "output"] + (embed_bool) ((log_begin_call + ["AllocationsFamiliales"; + "est_enfant_le_plus_âgé"] + est_enfant_le_plus_age_) + ((log_variable_definition + ["AllocationsFamiliales"; + "est_enfant_le_plus_âgé"; "input"] + (embed_enfant) param_)))))))) + (o_lte_dat_dat + (o_add_dat_dur + (param_.Enfant.date_de_naissance) + ((log_end_call + ["AllocationsFamiliales"; + "âge_minimum_alinéa_1_l521_3"] + ((log_variable_definition + ["AllocationsFamiliales"; + "âge_minimum_alinéa_1_l521_3"; + "output"] (embed_duration) + ((log_begin_call + ["AllocationsFamiliales"; + "âge_minimum_alinéa_1_l521_3"] + age_minimum_alinea_1_l521_3_) + ((log_variable_definition + ["AllocationsFamiliales"; + "âge_minimum_alinéa_1_l521_3"; "input"] + (embed_enfant) param_)))))))) date_courante_)))) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -3384,24 +3714,28 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; start_line=165; start_column=5; - end_line=166; end_column=68; + end_line=166; end_column=65; law_headings=["Article D521-1"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((ressources_menage_ >$ plafond__i_d521_3_) - && - (ressources_menage_ <=$ - (plafond__i_d521_3_ +$ - (param_ *$ + (o_and + (o_gt_mon_mon ressources_menage_ + plafond__i_d521_3_) + (o_lte_mon_mon ressources_menage_ + (o_add_mon_mon plafond__i_d521_3_ + (o_mult_mon_rat param_ (decimal_of_string "12."))))))) (fun (_: unit) -> - ((plafond__i_d521_3_ +$ - (param_ *$ (decimal_of_string "12."))) - -$ ressources_menage_) *$ - ((decimal_of_string "1.") /& + o_mult_mon_rat + (o_sub_mon_mon + (o_add_mon_mon plafond__i_d521_3_ + (o_mult_mon_rat param_ + (decimal_of_string "12."))) + ressources_menage_) + (o_div_rat_rat (decimal_of_string "1.") (decimal_of_string "12.")))); (fun (_: unit) -> handle_default @@ -3414,24 +3748,28 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; start_line=174; start_column=5; - end_line=175; end_column=68; + end_line=175; end_column=65; law_headings=["Article D521-1"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((ressources_menage_ >$ plafond__i_i_d521_3_) - && - (ressources_menage_ <=$ - (plafond__i_i_d521_3_ +$ - (param_ *$ + (o_and + (o_gt_mon_mon ressources_menage_ + plafond__i_i_d521_3_) + (o_lte_mon_mon ressources_menage_ + (o_add_mon_mon plafond__i_i_d521_3_ + (o_mult_mon_rat param_ (decimal_of_string "12."))))))) (fun (_: unit) -> - ((plafond__i_i_d521_3_ +$ - (param_ *$ (decimal_of_string "12."))) - -$ ressources_menage_) *$ - ((decimal_of_string "1.") /& + o_mult_mon_rat + (o_sub_mon_mon + (o_add_mon_mon plafond__i_i_d521_3_ + (o_mult_mon_rat param_ + (decimal_of_string "12."))) + ressources_menage_) + (o_div_rat_rat (decimal_of_string "1.") (decimal_of_string "12."))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) @@ -3477,17 +3815,18 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=220; start_column=5; - end_line=220; end_column=43; + start_line=221; start_column=5; + end_line=221; end_column=42; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (ressources_menage_ <=$ plafond__i_d521_3_))) + (o_lte_mon_mon ressources_menage_ plafond__i_d521_3_))) (fun (_: unit) -> - bmaf_dot_montant_ *$ (decimal_of_string "0.20234"))); + o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.20234"))); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -3498,18 +3837,20 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=234; start_column=5; - end_line=235; end_column=46; + start_line=235; start_column=5; + end_line=236; end_column=45; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((ressources_menage_ >$ plafond__i_d521_3_) && - (ressources_menage_ <=$ plafond__i_i_d521_3_)))) + (o_and + (o_gt_mon_mon ressources_menage_ plafond__i_d521_3_) + (o_lte_mon_mon ressources_menage_ plafond__i_i_d521_3_)))) (fun (_: unit) -> - bmaf_dot_montant_ *$ (decimal_of_string "0.10117"))); + o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.10117"))); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -3520,17 +3861,18 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=248; start_column=5; - end_line=248; end_column=43; + start_line=249; start_column=5; + end_line=249; end_column=42; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (ressources_menage_ >$ plafond__i_i_d521_3_))) + (o_gt_mon_mon ressources_menage_ plafond__i_i_d521_3_))) (fun (_: unit) -> - bmaf_dot_montant_ *$ (decimal_of_string "0.05059")))|]) + o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.05059")))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with EmptyError -> (raise (NoValueProvided @@ -3565,17 +3907,21 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (ressources_menage_ <=$ plafond__i_d521_3_))) + (o_lte_mon_mon ressources_menage_ plafond__i_d521_3_))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - ((bmaf_dot_montant_ *$ (decimal_of_string "0.41")) *$ - (decimal_of_integer - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - -! (integer_of_string "2")))) else + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat + (o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.41")) + (o_torat_int + (o_sub_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")))) else (money_of_cents_string "0"))); (fun (_: unit) -> handle_default @@ -3595,18 +3941,23 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((ressources_menage_ >$ plafond__i_d521_3_) && - (ressources_menage_ <=$ plafond__i_i_d521_3_)))) + (o_and + (o_gt_mon_mon ressources_menage_ plafond__i_d521_3_) + (o_lte_mon_mon ressources_menage_ plafond__i_i_d521_3_)))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - ((bmaf_dot_montant_ *$ (decimal_of_string "0.205")) *$ - (decimal_of_integer - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - -! (integer_of_string "2")))) else + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat + (o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.205")) + (o_torat_int + (o_sub_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")))) else (money_of_cents_string "0"))); (fun (_: unit) -> handle_default @@ -3626,17 +3977,21 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (ressources_menage_ >$ plafond__i_i_d521_3_))) + (o_gt_mon_mon ressources_menage_ plafond__i_i_d521_3_))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "2")) then - ((bmaf_dot_montant_ *$ (decimal_of_string "0.1025")) *$ - (decimal_of_integer - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - -! (integer_of_string "2")))) else + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")) then + (o_mult_mon_rat + (o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.1025")) + (o_torat_int + (o_sub_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "2")))) else (money_of_cents_string "0")))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)) with @@ -3680,23 +4035,25 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=350; start_column=5; - end_line=350; end_column=69; + end_line=350; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2011) (1) (1))) - && - (date_courante_ <=@ + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2011) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2011) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.232")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3710,23 +4067,25 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=358; start_column=5; - end_line=358; end_column=69; + end_line=358; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2012) (1) (1))) - && - (date_courante_ <=@ + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2012) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2012) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.2379")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3740,23 +4099,25 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=366; start_column=5; - end_line=366; end_column=69; + end_line=366; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2013) (1) (1))) - && - (date_courante_ <=@ + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2013) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2013) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.2437")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3770,23 +4131,25 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=374; start_column=5; - end_line=374; end_column=69; + end_line=374; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2014) (1) (1))) - && - (date_courante_ <=@ + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2014) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2014) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.2496")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3800,23 +4163,25 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=382; start_column=5; - end_line=382; end_column=69; + end_line=382; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2015) (1) (1))) - && - (date_courante_ <=@ + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2015) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2015) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.2555")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3830,23 +4195,25 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=390; start_column=5; - end_line=390; end_column=69; + end_line=390; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2016) (1) (1))) - && - (date_courante_ <=@ + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2016) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2016) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.2613")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3860,23 +4227,25 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=398; start_column=5; - end_line=398; end_column=69; + end_line=398; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2017) (1) (1))) - && - (date_courante_ <=@ + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2017) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2017) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.2672")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3890,23 +4259,25 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=406; start_column=5; - end_line=406; end_column=69; + end_line=406; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2018) (1) (1))) - && - (date_courante_ <=@ + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2018) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2018) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.2804")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3920,23 +4291,25 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=414; start_column=5; - end_line=414; end_column=69; + end_line=414; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2019) (1) (1))) - && - (date_courante_ <=@ + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2019) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2019) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.2936")) else (money_of_cents_string "0"))); (fun (_: unit) -> @@ -3950,23 +4323,25 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; start_line=422; start_column=5; - end_line=422; end_column=69; + end_line=422; end_column=67; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - ((residence_ = (Collectivite.Mayotte ())) - && - ((date_courante_ >=@ - (date_of_numbers (2020) (1) (1))) - && - (date_courante_ <=@ + (o_and + (o_eq residence_ + (Collectivite.Mayotte ())) + (o_and + (o_gte_dat_dat date_courante_ + (date_of_numbers (2020) (1) (1))) + (o_lte_dat_dat date_courante_ (date_of_numbers (2020) (12) (31))))))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.3068")) else (money_of_cents_string "0")))|]) (fun (_: unit) -> false) @@ -3978,13 +4353,15 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Article 7"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - (residence_ = (Collectivite.Mayotte ())))) + (o_eq residence_ (Collectivite.Mayotte ())))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ (decimal_of_string "0.32")) else + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.32")) else (money_of_cents_string "0")))|]) (fun (_: unit) -> true) (fun (_: unit) -> @@ -4011,14 +4388,16 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (ressources_menage_ <=$ plafond__i_d521_3_))) + (o_lte_mon_mon ressources_menage_ plafond__i_d521_3_))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ (decimal_of_string "0.32")) - else (money_of_cents_string "0"))); + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.32")) else + (money_of_cents_string "0"))); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -4037,15 +4416,20 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((ressources_menage_ >$ plafond__i_d521_3_) && - (ressources_menage_ <=$ plafond__i_i_d521_3_)))) + (o_and + (o_gt_mon_mon ressources_menage_ + plafond__i_d521_3_) + (o_lte_mon_mon ressources_menage_ + plafond__i_i_d521_3_)))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ (decimal_of_string "0.16")) - else (money_of_cents_string "0"))); + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.16")) else + (money_of_cents_string "0"))); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -4064,14 +4448,17 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (ressources_menage_ >$ plafond__i_i_d521_3_))) + (o_gt_mon_mon ressources_menage_ + plafond__i_i_d521_3_))) (fun (_: unit) -> if - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - >! (integer_of_string "1")) then - (bmaf_dot_montant_ *$ (decimal_of_string "0.08")) - else (money_of_cents_string "0")))|]) + (o_gt_int_int + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) then + (o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.08")) else + (money_of_cents_string "0")))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))) with EmptyError -> (raise (NoValueProvided @@ -4098,9 +4485,9 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Partie réglementaire - Décrets en Conseil d'Etat"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - if (nombre_total_enfants_ = (decimal_of_string "0.")) then + if (o_eq nombre_total_enfants_ (decimal_of_string "0.")) then (decimal_of_string "0.") else - (nombre_moyen_enfants_ /& nombre_total_enfants_))) + (o_div_rat_rat nombre_moyen_enfants_ nombre_total_enfants_))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -4136,8 +4523,9 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((ressources_menage_ <=$ plafond__i_d521_3_) && - ((log_end_call + (o_and + (o_lte_mon_mon ressources_menage_ + plafond__i_d521_3_) ((log_end_call ["AllocationsFamiliales"; "droit_ouvert_majoration"] ((log_variable_definition @@ -4152,7 +4540,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "droit_ouvert_majoration"; "input"] (embed_enfant) param_)))))))))) (fun (_: unit) -> - bmaf_dot_montant_ *$ (decimal_of_string "0.16"))); + o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.16"))); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -4171,9 +4560,12 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (((ressources_menage_ >$ plafond__i_d521_3_) && - (ressources_menage_ <=$ plafond__i_i_d521_3_)) - && ((log_end_call + (o_and + (o_and + (o_gt_mon_mon ressources_menage_ + plafond__i_d521_3_) + (o_lte_mon_mon ressources_menage_ + plafond__i_i_d521_3_)) ((log_end_call ["AllocationsFamiliales"; "droit_ouvert_majoration"] ((log_variable_definition @@ -4188,7 +4580,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "droit_ouvert_majoration"; "input"] (embed_enfant) param_)))))))))) (fun (_: unit) -> - bmaf_dot_montant_ *$ (decimal_of_string "0.08"))); + o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.08"))); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -4207,8 +4600,9 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((ressources_menage_ >$ plafond__i_i_d521_3_) && - ((log_end_call + (o_and + (o_gt_mon_mon ressources_menage_ + plafond__i_i_d521_3_) ((log_end_call ["AllocationsFamiliales"; "droit_ouvert_majoration"] ((log_variable_definition @@ -4223,7 +4617,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "droit_ouvert_majoration"; "input"] (embed_enfant) param_)))))))))) (fun (_: unit) -> - bmaf_dot_montant_ *$ (decimal_of_string "0.04"))); + o_mult_mon_rat bmaf_dot_montant_ + (decimal_of_string "0.04"))); (fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -4234,10 +4629,10 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=27; start_column=5; - end_line=27; end_column=44; + start_line=28; start_column=5; + end_line=28; end_column=44; law_headings=["Règles diverses"; "Épilogue"]} - (not ((log_end_call + (o_not ((log_end_call ["AllocationsFamiliales"; "droit_ouvert_majoration"] ((log_variable_definition @@ -4283,27 +4678,24 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - montant_verse_forfaitaire_par_enfant_ *$ - (decimal_of_integer - (Array.fold_left - (fun (acc_: integer) (enfant_: _) -> - if - ((log_end_call - ["AllocationsFamiliales"; - "droit_ouvert_forfaitaire"] - ((log_variable_definition - ["AllocationsFamiliales"; - "droit_ouvert_forfaitaire"; "output"] - (embed_bool) ((log_begin_call - ["AllocationsFamiliales"; - "droit_ouvert_forfaitaire"] - droit_ouvert_forfaitaire_) - ((log_variable_definition - ["AllocationsFamiliales"; - "droit_ouvert_forfaitaire"; "input"] - (embed_enfant) enfant_))))))) then - (acc_ +! (integer_of_string "1")) else acc_) - (integer_of_string "0") enfants_a_charge_)))) + o_mult_mon_rat montant_verse_forfaitaire_par_enfant_ + (o_torat_int + (o_length + (o_filter + (fun (enfant_: Enfant.t) -> (log_end_call + ["AllocationsFamiliales"; + "droit_ouvert_forfaitaire"] + ((log_variable_definition + ["AllocationsFamiliales"; + "droit_ouvert_forfaitaire"; "output"] + (embed_bool) ((log_begin_call + ["AllocationsFamiliales"; + "droit_ouvert_forfaitaire"] + droit_ouvert_forfaitaire_) + ((log_variable_definition + ["AllocationsFamiliales"; + "droit_ouvert_forfaitaire"; "input"] + (embed_enfant) enfant_))))))) enfants_a_charge_))))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -4335,19 +4727,20 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=355; start_column=5; - end_line=356; end_column=69; + start_line=356; start_column=5; + end_line=357; end_column=69; law_headings=["Article D755-5"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; "Livre 7 : Régimes divers - Dispositions diverses"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (prestations_familiales_dot_regime_outre_mer_l751_1_ - && - ((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - = (integer_of_string "1"))))) + (o_and + prestations_familiales_dot_regime_outre_mer_l751_1_ + (o_eq + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1"))))) (fun (_: unit) -> montant_initial_base_premier_enfant_)); (fun (_: unit) -> @@ -4365,12 +4758,14 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t law_headings=["Article 7"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} - (residence_ = (Collectivite.Mayotte ())))) + (o_eq residence_ (Collectivite.Mayotte ())))) (fun (_: unit) -> - ((montant_initial_base_premier_enfant_ +$ - montant_initial_base_deuxieme_enfant_) +$ - montant_initial_base_troisieme_enfant_mayotte_) - +$ + o_add_mon_mon + (o_add_mon_mon + (o_add_mon_mon + montant_initial_base_premier_enfant_ + montant_initial_base_deuxieme_enfant_) + montant_initial_base_troisieme_enfant_mayotte_) montant_initial_base_quatrieme_enfant_et_plus_mayotte_))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) (fun (_: unit) -> (log_decision_taken @@ -4383,7 +4778,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - montant_initial_base_deuxieme_enfant_ +$ + o_add_mon_mon montant_initial_base_deuxieme_enfant_ montant_initial_base_troisieme_enfant_et_plus_)) with EmptyError -> (raise (NoValueProvided @@ -4418,15 +4813,15 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=378; start_column=5; - end_line=382; end_column=57; + start_line=379; start_column=5; + end_line=383; end_column=55; law_headings=["Article D755-5"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; "Livre 7 : Régimes divers - Dispositions diverses"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (((log_end_call + (o_and ((log_end_call ["AllocationsFamiliales"; "droit_ouvert_majoration"] ((log_variable_definition @@ -4439,22 +4834,27 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ((log_variable_definition ["AllocationsFamiliales"; "droit_ouvert_majoration"; "input"] - (embed_enfant) param_))))))) && - (prestations_familiales_dot_regime_outre_mer_l751_1_ - && - (((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - = (integer_of_string "1")) && - ((((param_.Enfant.date_de_naissance) - +@ - (duration_of_numbers (11) (0) (0))) - <=@ date_courante_) && - (((param_.Enfant.date_de_naissance) - +@ - (duration_of_numbers (16) (0) (0))) - >@ date_courante_))))))) + (embed_enfant) param_))))))) + (o_and + prestations_familiales_dot_regime_outre_mer_l751_1_ + (o_and + (o_eq + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) + (o_and + (o_lte_dat_dat + (o_add_dat_dur + (param_.Enfant.date_de_naissance) + (duration_of_numbers (11) (0) (0))) + date_courante_) + (o_gt_dat_dat + (o_add_dat_dur + (param_.Enfant.date_de_naissance) + (duration_of_numbers (16) (0) (0))) + date_courante_))))))) (fun (_: unit) -> - bmaf_dot_montant_ *$ + o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0369"))); (fun (_: unit) -> handle_default @@ -4466,15 +4866,15 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=388; start_column=5; - end_line=391; end_column=58; + start_line=389; start_column=5; + end_line=392; end_column=56; law_headings=["Article D755-5"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; "Livre 7 : Régimes divers - Dispositions diverses"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - (((log_end_call + (o_and ((log_end_call ["AllocationsFamiliales"; "droit_ouvert_majoration"] ((log_variable_definition @@ -4487,18 +4887,21 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ((log_variable_definition ["AllocationsFamiliales"; "droit_ouvert_majoration"; "input"] - (embed_enfant) param_))))))) && - (prestations_familiales_dot_regime_outre_mer_l751_1_ - && - (((array_length - enfants_a_charge_droit_ouvert_prestation_familiale_) - = (integer_of_string "1")) && - (((param_.Enfant.date_de_naissance) - +@ - (duration_of_numbers (16) (0) (0))) - <=@ date_courante_)))))) + (embed_enfant) param_))))))) + (o_and + prestations_familiales_dot_regime_outre_mer_l751_1_ + (o_and + (o_eq + (o_length + enfants_a_charge_droit_ouvert_prestation_familiale_) + (integer_of_string "1")) + (o_lte_dat_dat + (o_add_dat_dur + (param_.Enfant.date_de_naissance) + (duration_of_numbers (16) (0) (0))) + date_courante_)))))) (fun (_: unit) -> - bmaf_dot_montant_ *$ + o_mult_mon_rat bmaf_dot_montant_ (decimal_of_string "0.0567")))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) @@ -4564,25 +4967,31 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=267; start_column=5; - end_line=269; end_column=42; + start_line=268; start_column=5; + end_line=270; end_column=41; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((ressources_menage_ >$ plafond__i_d521_3_) && - (ressources_menage_ <=$ - (plafond__i_d521_3_ +$ - (montant_verse_forfaitaire_ *$ + (o_and + (o_gt_mon_mon ressources_menage_ + plafond__i_d521_3_) + (o_lte_mon_mon ressources_menage_ + (o_add_mon_mon plafond__i_d521_3_ + (o_mult_mon_rat + montant_verse_forfaitaire_ (decimal_of_string "12."))))))) (fun (_: unit) -> - ((plafond__i_d521_3_ +$ - (montant_verse_forfaitaire_ *$ - (decimal_of_string "12."))) -$ - ressources_menage_) *$ - ((decimal_of_string "1.") /& + o_mult_mon_rat + (o_sub_mon_mon + (o_add_mon_mon plafond__i_d521_3_ + (o_mult_mon_rat + montant_verse_forfaitaire_ + (decimal_of_string "12."))) + ressources_menage_) + (o_div_rat_rat (decimal_of_string "1.") (decimal_of_string "12.")))); (fun (_: unit) -> handle_default @@ -4594,30 +5003,36 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=277; start_column=5; - end_line=279; end_column=41; + start_line=278; start_column=5; + end_line=280; end_column=40; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} - ((ressources_menage_ >$ plafond__i_i_d521_3_) && - (ressources_menage_ <=$ - (plafond__i_i_d521_3_ +$ - (montant_verse_forfaitaire_ *$ + (o_and + (o_gt_mon_mon ressources_menage_ + plafond__i_i_d521_3_) + (o_lte_mon_mon ressources_menage_ + (o_add_mon_mon plafond__i_i_d521_3_ + (o_mult_mon_rat + montant_verse_forfaitaire_ (decimal_of_string "12."))))))) (fun (_: unit) -> - ((plafond__i_i_d521_3_ +$ - (montant_verse_forfaitaire_ *$ - (decimal_of_string "12."))) -$ - ressources_menage_) *$ - ((decimal_of_string "1.") /& + o_mult_mon_rat + (o_sub_mon_mon + (o_add_mon_mon plafond__i_i_d521_3_ + (o_mult_mon_rat + montant_verse_forfaitaire_ + (decimal_of_string "12."))) + ressources_menage_) + (o_div_rat_rat (decimal_of_string "1.") (decimal_of_string "12."))))|]) (fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=285; start_column=14; end_line=285; end_column=55; + start_line=286; start_column=14; end_line=286; end_column=55; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -4650,7 +5065,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Partie réglementaire - Décrets en Conseil d'Etat"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - montant_initial_base_ *$ rapport_enfants_total_moyen_)) + o_mult_mon_rat montant_initial_base_ rapport_enfants_total_moyen_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -4671,8 +5086,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t [||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_R.catala_fr"; - start_line=188; start_column=5; - end_line=188; end_column=43; + start_line=186; start_column=5; + end_line=186; end_column=43; law_headings=["Article R521-4"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -4680,7 +5095,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Partie réglementaire - Décrets en Conseil d'Etat"; "Code de la sécurité sociale"]} true)) (fun (_: unit) -> - ((log_end_call + o_mult_mon_rat ((log_end_call ["AllocationsFamiliales"; "montant_initial_majoration"] ((log_variable_definition ["AllocationsFamiliales"; "montant_initial_majoration"; @@ -4688,7 +5103,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ["AllocationsFamiliales"; "montant_initial_majoration"] montant_initial_majoration_) ((log_variable_definition ["AllocationsFamiliales"; "montant_initial_majoration"; - "input"] (embed_enfant) param_))))))) *$ + "input"] (embed_enfant) param_))))))) (match ((log_end_call ["AllocationsFamiliales"; "prise_en_compte"] ((log_variable_definition @@ -4724,7 +5139,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=36; start_column=14; end_line=36; end_column=32; + start_line=37; start_column=14; end_line=37; end_column=32; law_headings=["Règles diverses"; "Épilogue"]} true)) (fun (_: unit) -> if droit_ouvert_base_ then montant_avec_garde_alternee_base_ @@ -4745,27 +5160,29 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=38; start_column=14; end_line=38; end_column=38; + start_line=39; start_column=14; end_line=39; end_column=38; law_headings=["Règles diverses"; "Épilogue"]} true)) (fun (_: unit) -> if droit_ouvert_base_ then - (Array.fold_left - (fun (acc_: money) (enfant_: _) -> - acc_ +$ ((log_end_call - ["AllocationsFamiliales"; - "montant_avec_garde_alternée_majoration"] - ((log_variable_definition - ["AllocationsFamiliales"; - "montant_avec_garde_alternée_majoration"; "output"] - (embed_money) ((log_begin_call - ["AllocationsFamiliales"; - "montant_avec_garde_alternée_majoration"] - montant_avec_garde_alternee_majoration_) - ((log_variable_definition - ["AllocationsFamiliales"; - "montant_avec_garde_alternée_majoration"; "input"] - (embed_enfant) enfant_)))))))) (money_of_cents_string - "0") enfants_a_charge_) else (money_of_cents_string "0"))) + (o_reduce + (fun (sum1_: money) (sum2_: money) -> + o_add_mon_mon sum1_ sum2_) (money_of_cents_string "0") + (o_map + (fun (enfant_: Enfant.t) -> (log_end_call + ["AllocationsFamiliales"; + "montant_avec_garde_alternée_majoration"] + ((log_variable_definition + ["AllocationsFamiliales"; + "montant_avec_garde_alternée_majoration"; "output"] + (embed_money) ((log_begin_call + ["AllocationsFamiliales"; + "montant_avec_garde_alternée_majoration"] + montant_avec_garde_alternee_majoration_) + ((log_variable_definition + ["AllocationsFamiliales"; + "montant_avec_garde_alternée_majoration"; "input"] + (embed_enfant) enfant_))))))) enfants_a_charge_)) else + (money_of_cents_string "0"))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -4790,7 +5207,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Livre 5 : Prestations familiales et prestations assimilées"; "Partie réglementaire - Décrets simples"; "Code de la sécurité sociale"]} true)) - (fun (_: unit) -> montant_verse_base_ +$ montant_verse_majoration_)) + (fun (_: unit) -> + o_add_mon_mon montant_verse_base_ montant_verse_majoration_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; @@ -4839,31 +5257,36 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t try (handle_default {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=100; start_column=10; end_line=100; end_column=23; + start_line=100; start_column=12; end_line=100; end_column=25; law_headings=["Allocations familiales"; "Champs d'applications"; "Prologue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=44; start_column=14; end_line=44; end_column=27; + start_line=45; start_column=14; end_line=45; end_column=27; law_headings=["Règles diverses"; "Épilogue"]} true)) (fun (_: unit) -> if droit_ouvert_base_ then - ((((montant_verse_base_ +$ montant_verse_majoration_) +$ - montant_verse_forfaitaire_) +$ - montant_verse_complement_pour_base_et_majoration_) +$ + (o_add_mon_mon + (o_add_mon_mon + (o_add_mon_mon + (o_add_mon_mon montant_verse_base_ + montant_verse_majoration_) + montant_verse_forfaitaire_) + montant_verse_complement_pour_base_et_majoration_) montant_verse_complement_pour_forfaitaire_) else (money_of_cents_string "0"))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/prologue.catala_fr"; - start_line=100; start_column=10; end_line=100; end_column=23; + start_line=100; start_column=12; end_line=100; end_column=25; law_headings=["Allocations familiales"; "Champs d'applications"; "Prologue"]})))) in let _: unit = if ( try - (personne_charge_effective_permanente_est_parent_ || - ((not personne_charge_effective_permanente_est_parent_) - && + (o_or personne_charge_effective_permanente_est_parent_ + (o_and + (o_not + personne_charge_effective_permanente_est_parent_) personne_charge_effective_permanente_remplit_titre__i_)) with EmptyError -> (raise (NoValueProvided @@ -4902,26 +5325,30 @@ let interface_allocations_familiales (interface_allocations_familiales_in: Inter try (handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=75; start_column=11; end_line=75; end_column=27; + start_line=76; start_column=11; end_line=76; end_column=27; law_headings=["Interface du programme"; "Épilogue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=116; start_column=14; end_line=116; end_column=30; + start_line=117; start_column=14; end_line=117; end_column=30; law_headings=["Article L131-1"; "Interface du programme"; "Épilogue"]} true)) (fun (_: unit) -> - Array.map - (fun (enfant_: _) -> + o_map + (fun (enfant_: EnfantEntree.t) -> {Enfant.identifiant = (enfant_.EnfantEntree.d_identifiant); Enfant.obligation_scolaire = ( if - (((enfant_.EnfantEntree.d_date_de_naissance) +@ - (duration_of_numbers (3) (0) (0))) >=@ + (o_gte_dat_dat + (o_add_dat_dur + (enfant_.EnfantEntree.d_date_de_naissance) + (duration_of_numbers (3) (0) (0))) i_date_courante_) then (SituationObligationScolaire.Avant ()) else ( if - (((enfant_.EnfantEntree.d_date_de_naissance) +@ - (duration_of_numbers (16) (0) (0))) >=@ + (o_gte_dat_dat + (o_add_dat_dur + (enfant_.EnfantEntree.d_date_de_naissance) + (duration_of_numbers (16) (0) (0))) i_date_courante_) then (SituationObligationScolaire.Pendant ()) else (SituationObligationScolaire.Apres ()))); @@ -4939,7 +5366,7 @@ let interface_allocations_familiales (interface_allocations_familiales_in: Inter with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=75; start_column=11; end_line=75; end_column=27; + start_line=76; start_column=11; end_line=76; end_column=27; law_headings=["Interface du programme"; "Épilogue"]})))) in let allocations_familiales_dot_personne_charge_effective_permanente_est_parent_: bool = try ((log_variable_definition @@ -4948,30 +5375,30 @@ let interface_allocations_familiales (interface_allocations_familiales_in: Inter (embed_bool) (handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=91; start_column=5; end_line=91; end_column=75; + start_line=92; start_column=5; end_line=92; end_column=75; law_headings=["Interface du programme"; "Épilogue"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=91; start_column=5; end_line=91; end_column=75; + start_line=92; start_column=5; end_line=92; end_column=75; law_headings=["Interface du programme"; "Épilogue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=92; start_column=18; - end_line=92; end_column=67; + start_line=93; start_column=18; + end_line=93; end_column=67; law_headings=["Interface du programme"; "Épilogue"]} i_personne_charge_effective_permanente_est_parent_)) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=91; start_column=5; end_line=91; end_column=75; + start_line=92; start_column=5; end_line=92; end_column=75; law_headings=["Interface du programme"; "Épilogue"]} true)) (fun (_: unit) -> false)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=91; start_column=5; end_line=91; end_column=75; + start_line=92; start_column=5; end_line=92; end_column=75; law_headings=["Interface du programme"; "Épilogue"]})) in let allocations_familiales_dot_personne_charge_effective_permanente_remplit_titre__i_: bool = try ((log_variable_definition @@ -4980,30 +5407,30 @@ let interface_allocations_familiales (interface_allocations_familiales_in: Inter (embed_bool) (handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=95; start_column=5; end_line=95; end_column=80; + start_line=96; start_column=5; end_line=96; end_column=80; law_headings=["Interface du programme"; "Épilogue"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=95; start_column=5; end_line=95; end_column=80; + start_line=96; start_column=5; end_line=96; end_column=80; law_headings=["Interface du programme"; "Épilogue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=96; start_column=18; - end_line=96; end_column=72; + start_line=97; start_column=18; + end_line=97; end_column=72; law_headings=["Interface du programme"; "Épilogue"]} i_personne_charge_effective_permanente_remplit_titre__i_)) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=95; start_column=5; end_line=95; end_column=80; + start_line=96; start_column=5; end_line=96; end_column=80; law_headings=["Interface du programme"; "Épilogue"]} true)) (fun (_: unit) -> false)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=95; start_column=5; end_line=95; end_column=80; + start_line=96; start_column=5; end_line=96; end_column=80; law_headings=["Interface du programme"; "Épilogue"]})) in let allocations_familiales_dot_ressources_menage_: money = try ((log_variable_definition @@ -5011,17 +5438,17 @@ let interface_allocations_familiales (interface_allocations_familiales_in: Inter "allocations_familiales.ressources_ménage"] (embed_money) (handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=87; start_column=14; end_line=87; end_column=54; + start_line=88; start_column=14; end_line=88; end_column=54; law_headings=["Interface du programme"; "Épilogue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=87; start_column=14; end_line=87; end_column=54; + start_line=88; start_column=14; end_line=88; end_column=54; law_headings=["Interface du programme"; "Épilogue"]} true)) (fun (_: unit) -> i_ressources_menage_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=87; start_column=14; end_line=87; end_column=54; + start_line=88; start_column=14; end_line=88; end_column=54; law_headings=["Interface du programme"; "Épilogue"]})) in let allocations_familiales_dot_residence_: Collectivite.t = try ((log_variable_definition @@ -5029,17 +5456,17 @@ let interface_allocations_familiales (interface_allocations_familiales_in: Inter (embed_collectivite) (handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=88; start_column=14; end_line=88; end_column=46; + start_line=89; start_column=14; end_line=89; end_column=46; law_headings=["Interface du programme"; "Épilogue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=88; start_column=14; end_line=88; end_column=46; + start_line=89; start_column=14; end_line=89; end_column=46; law_headings=["Interface du programme"; "Épilogue"]} true)) (fun (_: unit) -> i_residence_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=88; start_column=14; end_line=88; end_column=46; + start_line=89; start_column=14; end_line=89; end_column=46; law_headings=["Interface du programme"; "Épilogue"]})) in let allocations_familiales_dot_date_courante_: date = try ((log_variable_definition @@ -5047,17 +5474,17 @@ let interface_allocations_familiales (interface_allocations_familiales_in: Inter "allocations_familiales.date_courante"] (embed_date) (handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=85; start_column=14; end_line=85; end_column=50; + start_line=86; start_column=14; end_line=86; end_column=50; law_headings=["Interface du programme"; "Épilogue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=85; start_column=14; end_line=85; end_column=50; + start_line=86; start_column=14; end_line=86; end_column=50; law_headings=["Interface du programme"; "Épilogue"]} true)) (fun (_: unit) -> i_date_courante_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=85; start_column=14; end_line=85; end_column=50; + start_line=86; start_column=14; end_line=86; end_column=50; law_headings=["Interface du programme"; "Épilogue"]})) in let allocations_familiales_dot_enfants_a_charge_: Enfant.t array = try ((log_variable_definition @@ -5066,17 +5493,17 @@ let interface_allocations_familiales (interface_allocations_familiales_in: Inter (embed_array (embed_enfant)) (handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=86; start_column=14; end_line=86; end_column=53; + start_line=87; start_column=14; end_line=87; end_column=53; law_headings=["Interface du programme"; "Épilogue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=86; start_column=14; end_line=86; end_column=53; + start_line=87; start_column=14; end_line=87; end_column=53; law_headings=["Interface du programme"; "Épilogue"]} true)) (fun (_: unit) -> enfants_a_charge_)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=86; start_column=14; end_line=86; end_column=53; + start_line=87; start_column=14; end_line=87; end_column=53; law_headings=["Interface du programme"; "Épilogue"]})) in let allocations_familiales_dot_avait_enfant_a_charge_avant_1er_janvier_2012_: bool = try ((log_variable_definition @@ -5085,66 +5512,67 @@ let interface_allocations_familiales (interface_allocations_familiales_in: Inter (embed_bool) (handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=99; start_column=5; end_line=99; end_column=72; + start_line=100; start_column=5; end_line=100; end_column=72; law_headings=["Interface du programme"; "Épilogue"]} ([|(fun (_: unit) -> handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=99; start_column=5; end_line=99; end_column=72; + start_line=100; start_column=5; + end_line=100; end_column=72; law_headings=["Interface du programme"; "Épilogue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=100; start_column=18; - end_line=100; end_column=64; + start_line=101; start_column=18; + end_line=101; end_column=64; law_headings=["Interface du programme"; "Épilogue"]} i_avait_enfant_a_charge_avant_1er_janvier_2012_)) (fun (_: unit) -> true))|]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=99; start_column=5; end_line=99; end_column=72; + start_line=100; start_column=5; end_line=100; end_column=72; law_headings=["Interface du programme"; "Épilogue"]} true)) (fun (_: unit) -> false)))) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=99; start_column=5; end_line=99; end_column=72; + start_line=100; start_column=5; end_line=100; end_column=72; law_headings=["Interface du programme"; "Épilogue"]})) in let result_: AllocationsFamiliales.t = (log_end_call ["InterfaceAllocationsFamiliales"; "allocations_familiales"; "AllocationsFamiliales"] ((log_begin_call ["InterfaceAllocationsFamiliales"; "allocations_familiales"; "AllocationsFamiliales"] allocations_familiales) - {AllocationsFamilialesIn.personne_charge_effective_permanente_est_parent_in = - allocations_familiales_dot_personne_charge_effective_permanente_est_parent_; - AllocationsFamilialesIn.personne_charge_effective_permanente_remplit_titre_I_in = - allocations_familiales_dot_personne_charge_effective_permanente_remplit_titre__i_; - AllocationsFamilialesIn.ressources_menage_in = - allocations_familiales_dot_ressources_menage_; - AllocationsFamilialesIn.residence_in = - allocations_familiales_dot_residence_; - AllocationsFamilialesIn.date_courante_in = - allocations_familiales_dot_date_courante_; - AllocationsFamilialesIn.enfants_a_charge_in = - allocations_familiales_dot_enfants_a_charge_; - AllocationsFamilialesIn.avait_enfant_a_charge_avant_1er_janvier_2012_in = - allocations_familiales_dot_avait_enfant_a_charge_avant_1er_janvier_2012_})) in + ({AllocationsFamilialesIn.personne_charge_effective_permanente_est_parent_in = + allocations_familiales_dot_personne_charge_effective_permanente_est_parent_; + AllocationsFamilialesIn.personne_charge_effective_permanente_remplit_titre_I_in = + allocations_familiales_dot_personne_charge_effective_permanente_remplit_titre__i_; + AllocationsFamilialesIn.ressources_menage_in = + allocations_familiales_dot_ressources_menage_; + AllocationsFamilialesIn.residence_in = + allocations_familiales_dot_residence_; + AllocationsFamilialesIn.date_courante_in = + allocations_familiales_dot_date_courante_; + AllocationsFamilialesIn.enfants_a_charge_in = + allocations_familiales_dot_enfants_a_charge_; + AllocationsFamilialesIn.avait_enfant_a_charge_avant_1er_janvier_2012_in = + allocations_familiales_dot_avait_enfant_a_charge_avant_1er_janvier_2012_}))) in let allocations_familiales_dot_montant_verse_: money = result_.AllocationsFamiliales.montant_verse in let i_montant_verse_: money = (log_variable_definition ["InterfaceAllocationsFamiliales"; "i_montant_versé"] (embed_money) ( try (handle_default {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=79; start_column=10; end_line=79; end_column=25; + start_line=80; start_column=12; end_line=80; end_column=27; law_headings=["Interface du programme"; "Épilogue"]} ([||]) (fun (_: unit) -> (log_decision_taken {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=89; start_column=14; end_line=89; end_column=29; + start_line=90; start_column=14; end_line=90; end_column=29; law_headings=["Interface du programme"; "Épilogue"]} true)) (fun (_: unit) -> allocations_familiales_dot_montant_verse_)) with EmptyError -> (raise (NoValueProvided {filename = "examples/allocations_familiales/epilogue.catala_fr"; - start_line=79; start_column=10; end_line=79; end_column=25; + start_line=80; start_column=12; end_line=80; end_column=27; law_headings=["Interface du programme"; "Épilogue"]})))) in {InterfaceAllocationsFamiliales.i_montant_verse = i_montant_verse_} diff --git a/french_law/python/src/aides_logement.py b/french_law/python/src/aides_logement.py index 60e83395..edf72e05 100644 --- a/french_law/python/src/aides_logement.py +++ b/french_law/python/src/aides_logement.py @@ -2658,8 +2658,8 @@ def contributions_sociales_aides_personnelle_logement(contributions_sociales_aid except EmptyError: temp_exonere_csg = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=518, start_column=11, - end_line=518, end_column=22, + start_line=519, start_column=11, + end_line=519, end_column=22, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -2674,8 +2674,8 @@ def contributions_sociales_aides_personnelle_logement(contributions_sociales_aid except EmptyError: temp_taux_crds = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=517, start_column=11, - end_line=517, end_column=20, + start_line=518, start_column=11, + end_line=518, end_column=20, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -2690,18 +2690,18 @@ def contributions_sociales_aides_personnelle_logement(contributions_sociales_aid raise EmptyError except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=520, - start_column=10, - end_line=520, - end_column=17, + start_line=521, + start_column=12, + end_line=521, + end_column=19, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) except EmptyError: temp_montant = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=520, start_column=10, - end_line=520, end_column=17, + start_line=521, start_column=12, + end_line=521, end_column=19, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -2738,8 +2738,8 @@ def calcul_equivalence_loyer_minimale(calcul_equivalence_loyer_minimale_in:Calcu except EmptyError: temp_montant_forfaitaire_d832_26 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=594, start_column=11, - end_line=594, end_column=38, + start_line=595, start_column=11, + end_line=595, end_column=38, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -2797,15 +2797,15 @@ def calcul_equivalence_loyer_minimale(calcul_equivalence_loyer_minimale_in:Calcu except EmptyError: temp_tranches_revenus_d832_26 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=591, start_column=11, - end_line=591, end_column=35, + start_line=592, start_column=11, + end_line=592, end_column=35, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) tranches_revenus_d832_26 = temp_tranches_revenus_d832_26 try: - def temp_tranches_revenus_d832_26_multipliees(tranche:Any): + def temp_tranches_revenus_d832_26_multipliees(tranche:TrancheRevenu): match_arg = tranche.haut if match_arg.code == LimiteTranche_Code.Revenu: tranche_haut = match_arg.value @@ -2824,8 +2824,8 @@ def calcul_equivalence_loyer_minimale(calcul_equivalence_loyer_minimale_in:Calcu except EmptyError: temp_tranches_revenus_d832_26_multipliees_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=592, start_column=11, - end_line=592, end_column=47, + start_line=593, start_column=11, + end_line=593, end_column=47, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -2834,65 +2834,69 @@ def calcul_equivalence_loyer_minimale(calcul_equivalence_loyer_minimale_in:Calcu try: try: if condition_2_du_832_25: - def temp_montant_1(acc:Decimal, tranche_1:Any): + def temp_montant_1(tranche_1:TrancheRevenuDecimal): if (decimal_of_money(ressources_menage_arrondies) <= tranche_1.bas): - temp_montant_2 = decimal_of_string("0.") + return decimal_of_string("0.") else: match_arg_1 = tranche_1.haut if match_arg_1.code == LimiteTrancheDecimal_Code.Revenu: tranche_haut_1 = match_arg_1.value if (decimal_of_money(ressources_menage_arrondies) >= tranche_haut_1): - temp_montant_2 = ((tranche_haut_1 - - tranche_1.bas) * tranche_1.taux) + return ((tranche_haut_1 - tranche_1.bas) * + tranche_1.taux) else: - temp_montant_2 = ((decimal_of_money(ressources_menage_arrondies) - + return ((decimal_of_money(ressources_menage_arrondies) - tranche_1.bas) * tranche_1.taux) elif match_arg_1.code == LimiteTrancheDecimal_Code.Infini: _ = match_arg_1.value - temp_montant_2 = ((decimal_of_money(ressources_menage_arrondies) - + return ((decimal_of_money(ressources_menage_arrondies) - tranche_1.bas) * tranche_1.taux) - return (acc + temp_montant_2) - temp_montant_3 = money_of_decimal(((list_fold_left(temp_montant_1, - decimal_of_string("0."), - tranches_revenus_d832_26_multipliees) + + def temp_montant_2(sum1:Decimal, sum2:Decimal): + return (sum1 + sum2) + temp_montant_3 = money_of_decimal(((list_reduce(temp_montant_2, + decimal_of_string("0."), + list_map(temp_montant_1, + tranches_revenus_d832_26_multipliees)) + decimal_of_money(montant_forfaitaire_d832_26)) / decimal_of_string("12."))) else: temp_montant_3 = dead_value raise EmptyError except EmptyError: - def temp_montant_4(acc_1:Decimal, tranche_2:Any): + def temp_montant_4(tranche_2:TrancheRevenuDecimal): if (decimal_of_money(ressources_menage_arrondies) <= tranche_2.bas): - temp_montant_5 = decimal_of_string("0.") + return decimal_of_string("0.") else: match_arg_2 = tranche_2.haut if match_arg_2.code == LimiteTrancheDecimal_Code.Revenu: tranche_haut_2 = match_arg_2.value if (decimal_of_money(ressources_menage_arrondies) >= tranche_haut_2): - temp_montant_5 = ((tranche_haut_2 - - tranche_2.bas) * tranche_2.taux) + return ((tranche_haut_2 - tranche_2.bas) * + tranche_2.taux) else: - temp_montant_5 = ((decimal_of_money(ressources_menage_arrondies) - + return ((decimal_of_money(ressources_menage_arrondies) - tranche_2.bas) * tranche_2.taux) elif match_arg_2.code == LimiteTrancheDecimal_Code.Infini: _ = match_arg_2.value - temp_montant_5 = ((decimal_of_money(ressources_menage_arrondies) - + return ((decimal_of_money(ressources_menage_arrondies) - tranche_2.bas) * tranche_2.taux) - return (acc_1 + temp_montant_5) - temp_montant_3 = money_of_decimal(((list_fold_left(temp_montant_4, - decimal_of_string("0."), - tranches_revenus_d832_26_multipliees) + + def temp_montant_5(sum1_1:Decimal, sum2_1:Decimal): + return (sum1_1 + sum2_1) + temp_montant_3 = money_of_decimal(((list_reduce(temp_montant_5, + decimal_of_string("0."), + list_map(temp_montant_4, + tranches_revenus_d832_26_multipliees)) + (decimal_of_money(montant_forfaitaire_d832_26) * n_nombre_parts_d832_25)) / decimal_of_string("12."))) except EmptyError: temp_montant_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=596, start_column=10, - end_line=596, end_column=17, + start_line=597, start_column=12, + end_line=597, end_column=19, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -2974,8 +2978,8 @@ def calcul_nombre_part_logement_foyer(calcul_nombre_part_logement_foyer_in:Calcu except EmptyError: temp_n_nombre_parts_d832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=603, start_column=10, - end_line=603, end_column=32, + start_line=604, start_column=12, + end_line=604, end_column=34, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3020,8 +3024,8 @@ def calcul_nombre_parts_accession_propriete(calcul_nombre_parts_accession_propri except EmptyError: temp_n_nombre_parts_d832_11 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=659, start_column=10, - end_line=659, end_column=32, + start_line=660, start_column=12, + end_line=660, end_column=34, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3078,9 +3082,9 @@ def ouverture_droits_retraite(ouverture_droits_retraite_in:OuvertureDroitsRetrai else: raise EmptyError temp_age_ouverture_droit_8 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=998, - start_column=10, - end_line=998, end_column=29, + start_line=999, + start_column=12, + end_line=999, end_column=31, law_headings=["Date d'ouverture des droits à la retraite", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_age_ouverture_droit_7, @@ -3094,8 +3098,8 @@ def ouverture_droits_retraite(ouverture_droits_retraite_in:OuvertureDroitsRetrai except EmptyError: temp_age_ouverture_droit_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=998, start_column=10, - end_line=998, end_column=29, + start_line=999, start_column=12, + end_line=999, end_column=31, law_headings=["Date d'ouverture des droits à la retraite", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -3134,8 +3138,8 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): except EmptyError: temp_mode_occupation_impaye = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1014, - start_column=11, end_line=1014, + start_line=1015, + start_column=11, end_line=1015, end_column=33, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", @@ -3171,8 +3175,8 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): except EmptyError: temp_depense_logement_brute_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1015, - start_column=11, end_line=1015, + start_line=1016, + start_column=11, end_line=1016, end_column=33, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", @@ -3232,9 +3236,9 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): else: raise EmptyError temp_depense_logement_nette_6 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1016, + start_line=1017, start_column=11, - end_line=1016, end_column=33, + end_line=1017, end_column=33, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_depense_logement_nette_4, @@ -3244,8 +3248,8 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): except EmptyError: temp_depense_logement_nette_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1016, - start_column=11, end_line=1016, + start_line=1017, + start_column=11, end_line=1017, end_column=33, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", @@ -3389,9 +3393,9 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): else: raise EmptyError temp_seuil_impaye_depense_de_logement_14 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1013, + start_line=1014, start_column=11, - end_line=1013, end_column=43, + end_line=1014, end_column=43, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_seuil_impaye_depense_de_logement_11, @@ -3403,8 +3407,8 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): except EmptyError: temp_seuil_impaye_depense_de_logement_14 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1013, - start_column=11, end_line=1013, + start_line=1014, + start_column=11, end_line=1014, end_column=43, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", @@ -3448,9 +3452,9 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): except EmptyError: temp_montant_impaye_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1018, - start_column=10, end_line=1018, - end_column=24, + start_line=1019, + start_column=12, end_line=1019, + end_column=26, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -3493,8 +3497,8 @@ def base_mensuelle_allocations_familiales(base_mensuelle_allocations_familiales_ else: raise EmptyError temp_montant_12 = handle_default(SourcePosition(filename="examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr", - start_line=6, start_column=10, - end_line=6, end_column=17, + start_line=6, start_column=12, + end_line=6, end_column=19, law_headings=["Montant de la base mensuelle des allocations familiales"]), [temp_montant_11, temp_montant_10, temp_montant_9, temp_montant_8], temp_montant_7, @@ -3502,8 +3506,8 @@ def base_mensuelle_allocations_familiales(base_mensuelle_allocations_familiales_ except EmptyError: temp_montant_12 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr", - start_line=6, start_column=10, - end_line=6, end_column=17, + start_line=6, start_column=12, + end_line=6, end_column=19, law_headings=["Montant de la base mensuelle des allocations familiales"])) montant_2 = temp_montant_12 return BaseMensuelleAllocationsFamiliales(montant = montant_2) @@ -3652,8 +3656,8 @@ def smic(smic_in:SmicIn): else: raise EmptyError temp_brut_horaire_12 = handle_default(SourcePosition(filename="examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr", - start_line=11, start_column=10, - end_line=11, end_column=22, + start_line=11, start_column=12, + end_line=11, end_column=24, law_headings=["Prologue", "Montant du salaire minimum de croissance"]), [temp_brut_horaire_11, temp_brut_horaire_10, @@ -3670,8 +3674,8 @@ def smic(smic_in:SmicIn): except EmptyError: temp_brut_horaire_12 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr", - start_line=11, start_column=10, - end_line=11, end_column=22, + start_line=11, start_column=12, + end_line=11, end_column=24, law_headings=["Prologue", "Montant du salaire minimum de croissance"])) brut_horaire = temp_brut_horaire_12 @@ -3696,8 +3700,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_fraction_l832_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=553, start_column=11, - end_line=553, end_column=26, + start_line=554, start_column=11, + end_line=554, end_column=26, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3708,8 +3712,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_montant_forfaitaire_d823_16 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=556, start_column=11, - end_line=556, end_column=38, + start_line=557, start_column=11, + end_line=557, end_column=38, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3720,8 +3724,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_contributions_sociales_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=580, start_column=14, - end_line=580, end_column=50, + start_line=581, start_column=14, + end_line=581, end_column=50, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3868,8 +3872,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_taux_composition_familiale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=564, start_column=10, - end_line=564, end_column=36, + start_line=565, start_column=12, + end_line=565, end_column=38, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4012,9 +4016,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError temp_abattement_forfaitaire_d823_17_5 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=558, + start_line=559, start_column=11, - end_line=558, end_column=41, + end_line=559, end_column=41, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4026,8 +4030,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_abattement_forfaitaire_d823_17_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=558, start_column=11, - end_line=558, end_column=41, + start_line=559, start_column=11, + end_line=559, end_column=41, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4099,9 +4103,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError temp_loyer_reference_4 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=552, + start_line=553, start_column=11, - end_line=552, end_column=26, + end_line=553, end_column=26, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4112,8 +4116,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_loyer_reference_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=552, start_column=11, - end_line=552, end_column=26, + start_line=553, start_column=11, + end_line=553, end_column=26, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4133,8 +4137,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_montant_minimal_aide_d823_16 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=557, start_column=11, - end_line=557, end_column=39, + start_line=558, start_column=11, + end_line=558, end_column=39, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4372,8 +4376,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=562, start_column=10, - end_line=562, end_column=33, + start_line=563, start_column=12, + end_line=563, end_column=35, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4447,8 +4451,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=562, start_column=10, - end_line=562, end_column=33, + start_line=563, start_column=12, + end_line=563, end_column=35, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4510,8 +4514,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=562, start_column=10, - end_line=562, end_column=33, + start_line=563, start_column=12, + end_line=563, end_column=35, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4751,8 +4755,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=562, start_column=10, - end_line=562, end_column=33, + start_line=563, start_column=12, + end_line=563, end_column=35, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4768,9 +4772,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen temp_plafond_loyer_d823_16_2_32, temp_plafond_loyer_d823_16_2_31) temp_plafond_loyer_d823_16_2_48 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=562, - start_column=10, - end_line=562, end_column=33, + start_line=563, + start_column=12, + end_line=563, end_column=35, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4781,8 +4785,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_plafond_loyer_d823_16_2_48 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=562, start_column=10, - end_line=562, end_column=33, + start_line=563, start_column=12, + end_line=563, end_column=35, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4843,7 +4847,7 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen raise EmptyError temp_montant_forfaitaire_charges_d823_16_8 = handle_default( SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=561, start_column=10, end_line=561, end_column=45, + start_line=562, start_column=12, end_line=562, end_column=47, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4885,7 +4889,7 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen raise EmptyError temp_montant_forfaitaire_charges_d823_16_8 = handle_default( SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=561, start_column=10, end_line=561, end_column=45, + start_line=562, start_column=12, end_line=562, end_column=47, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4897,8 +4901,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_montant_forfaitaire_charges_d823_16_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=561, start_column=10, - end_line=561, end_column=45, + start_line=562, start_column=12, + end_line=562, end_column=47, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4913,8 +4917,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_loyer_principal_avec_reduction_meuble = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=531, start_column=10, - end_line=531, end_column=31, + start_line=532, start_column=10, + end_line=532, end_column=31, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4937,8 +4941,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_plafond_suppression_d823_16 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=555, start_column=11, - end_line=555, end_column=38, + start_line=556, start_column=11, + end_line=556, end_column=38, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4961,8 +4965,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_plafond_degressivite_d823_16 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=554, start_column=11, - end_line=554, end_column=39, + start_line=555, start_column=11, + end_line=555, end_column=39, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4977,8 +4981,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_loyer_eligible = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=547, start_column=11, - end_line=547, end_column=25, + start_line=548, start_column=11, + end_line=548, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5008,9 +5012,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen return param_1 except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=573, + start_line=574, start_column=10, - end_line=573, + end_line=574, end_column=17, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", @@ -5019,8 +5023,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_traitement_aide_finale_diminue = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=573, start_column=10, - end_line=573, end_column=17, + start_line=574, start_column=10, + end_line=574, end_column=17, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5073,9 +5077,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError temp_participation_minimale_5 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=563, - start_column=10, - end_line=563, end_column=32, + start_line=564, + start_column=12, + end_line=564, end_column=34, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5087,8 +5091,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_participation_minimale_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=563, start_column=10, - end_line=563, end_column=32, + start_line=564, start_column=12, + end_line=564, end_column=34, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5128,8 +5132,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_rapport_loyers = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=551, start_column=11, - end_line=551, end_column=25, + start_line=552, start_column=11, + end_line=552, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5147,9 +5151,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=574, + start_line=575, start_column=10, - end_line=574, + end_line=575, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", @@ -5158,8 +5162,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_traitement_aide_finale_minoration_forfaitaire = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=574, start_column=10, - end_line=574, end_column=32, + start_line=575, start_column=10, + end_line=575, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5249,8 +5253,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_taux_loyer_eligible_formule = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=549, start_column=10, - end_line=549, end_column=17, + start_line=550, start_column=10, + end_line=550, end_column=17, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5278,9 +5282,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=575, + start_line=576, start_column=10, - end_line=575, + end_line=576, end_column=40, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", @@ -5289,8 +5293,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_traitement_aide_finale_contributions_sociales_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=575, start_column=10, - end_line=575, end_column=40, + start_line=576, start_column=10, + end_line=576, end_column=40, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5302,41 +5306,41 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen if ((date_courante_3 >= date_of_numbers(2020,10,1)) and (date_courante_3 < date_of_numbers(2021,10,1))): - temp_taux_loyer_eligible_arrondi = (decimal_round((taux_loyer_eligible_formule * + temp_taux_loyer_eligible_taux_arrondi = (decimal_round((taux_loyer_eligible_formule * decimal_of_string("100000."))) / decimal_of_string("100000.")) else: - temp_taux_loyer_eligible_arrondi = dead_value + temp_taux_loyer_eligible_taux_arrondi = dead_value raise EmptyError except EmptyError: if ((date_courante_3 >= date_of_numbers(2021,10,1)) and (date_courante_3 < date_of_numbers(2022,7,1))): - temp_taux_loyer_eligible_arrondi = (decimal_round((taux_loyer_eligible_formule * + temp_taux_loyer_eligible_taux_arrondi = (decimal_round((taux_loyer_eligible_formule * decimal_of_string("100000."))) / decimal_of_string("100000.")) else: - temp_taux_loyer_eligible_arrondi = dead_value + temp_taux_loyer_eligible_taux_arrondi = dead_value raise EmptyError except EmptyError: if (date_courante_3 >= date_of_numbers(2022,7,1)): - temp_taux_loyer_eligible_arrondi = (decimal_round((taux_loyer_eligible_formule * + temp_taux_loyer_eligible_taux_arrondi = (decimal_round((taux_loyer_eligible_formule * decimal_of_string("100000."))) / decimal_of_string("100000.")) else: - temp_taux_loyer_eligible_arrondi = dead_value + temp_taux_loyer_eligible_taux_arrondi = dead_value raise EmptyError except EmptyError: - temp_taux_loyer_eligible_arrondi = dead_value + temp_taux_loyer_eligible_taux_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=550, start_column=10, - end_line=550, end_column=17, + start_line=551, start_column=10, + end_line=551, end_column=22, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) - taux_loyer_eligible_arrondi = temp_taux_loyer_eligible_arrondi + taux_loyer_eligible_taux_arrondi = temp_taux_loyer_eligible_taux_arrondi try: def temp_traitement_aide_finale_reduction_loyer_solidarite(param_4:Money): try: @@ -5351,9 +5355,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=576, + start_line=577, start_column=10, - end_line=576, + end_line=577, end_column=36, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", @@ -5362,8 +5366,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_traitement_aide_finale_reduction_loyer_solidarite = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=576, start_column=10, - end_line=576, end_column=36, + start_line=577, start_column=10, + end_line=577, end_column=36, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5371,12 +5375,12 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen traitement_aide_finale_reduction_loyer_solidarite = temp_traitement_aide_finale_reduction_loyer_solidarite try: temp_taux_prise_compte_ressources = (taux_composition_familiale + - taux_loyer_eligible_arrondi) + taux_loyer_eligible_taux_arrondi) except EmptyError: temp_taux_prise_compte_ressources = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=559, start_column=11, - end_line=559, end_column=39, + start_line=560, start_column=11, + end_line=560, end_column=39, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5394,9 +5398,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen param_5) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=577, + start_line=578, start_column=10, - end_line=577, + end_line=578, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", @@ -5405,8 +5409,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_traitement_aide_finale_montant_minimal = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=577, start_column=10, - end_line=577, end_column=25, + start_line=578, start_column=10, + end_line=578, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5426,8 +5430,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_participation_personnelle_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=565, start_column=10, - end_line=565, end_column=35, + start_line=566, start_column=12, + end_line=566, end_column=37, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5445,8 +5449,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_aide_finale_formule = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=570, start_column=10, - end_line=570, end_column=29, + start_line=571, start_column=12, + end_line=571, end_column=31, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5458,9 +5462,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp___1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1797, - start_column=13, end_line=1797, - end_column=76, + start_line=1846, + start_column=13, end_line=1846, + end_column=74, law_headings=["Article D823-16", "Sous-section 2 : Calcul de l'aide en secteur locatif", "Section 1 : Calcul, liquidation et versement des aides", @@ -5471,9 +5475,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen "Code de la construction et de l'habitation"])) if not (temp___1): raise AssertionFailure(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1797, - start_column=13, end_line=1797, - end_column=76, + start_line=1846, + start_column=13, end_line=1846, + end_column=74, law_headings=["Article D823-16", "Sous-section 2 : Calcul de l'aide en secteur locatif", "Section 1 : Calcul, liquidation et versement des aides", @@ -5489,7 +5493,7 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen temp___2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", start_line=817, start_column=13, - end_line=817, end_column=63, + end_line=817, end_column=61, law_headings=["Article L832-3", "Chapitre Ier : Champ d'application", "Titre III : Aide personnalisée au logement", @@ -5500,7 +5504,7 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen raise AssertionFailure(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", start_line=817, start_column=13, end_line=817, - end_column=63, + end_column=61, law_headings=["Article L832-3", "Chapitre Ier : Champ d'application", "Titre III : Aide personnalisée au logement", @@ -5531,8 +5535,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_coefficient_r_d832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=618, start_column=10, - end_line=618, end_column=31, + start_line=619, start_column=12, + end_line=619, end_column=33, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5543,8 +5547,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_montant_forfaitaire_d832_24 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=625, start_column=11, - end_line=625, end_column=38, + start_line=626, start_column=11, + end_line=626, end_column=38, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5555,8 +5559,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_montant_minimal_aide_d823_24 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=627, start_column=11, - end_line=627, end_column=39, + start_line=628, start_column=11, + end_line=628, end_column=39, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5584,8 +5588,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_condition_2_du_832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=615, start_column=12, - end_line=615, end_column=33, + start_line=616, start_column=12, + end_line=616, end_column=33, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5596,8 +5600,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_contributions_sociales_dot_date_courante_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=649, start_column=14, - end_line=649, end_column=50, + start_line=650, start_column=14, + end_line=650, end_column=50, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5883,9 +5887,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ else: raise EmptyError temp_plafond_equivalence_loyer_eligible_5 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=621, - start_column=10, - end_line=621, end_column=44, + start_line=622, + start_column=12, + end_line=622, end_column=46, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5897,8 +5901,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_plafond_equivalence_loyer_eligible_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=621, start_column=10, - end_line=621, end_column=44, + start_line=622, start_column=12, + end_line=622, end_column=46, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5914,9 +5918,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=643, + start_line=644, start_column=10, - end_line=643, + end_line=644, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -5925,8 +5929,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_traitement_aide_finale_minoration_forfaitaire_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=643, start_column=10, - end_line=643, end_column=32, + start_line=644, start_column=10, + end_line=644, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5937,8 +5941,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_nombre_parts_dot_condition_2_du_832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3878, - start_column=14, end_line=3878, + start_line=3927, + start_column=14, end_line=3927, end_column=55, law_headings=["Article D832-25", "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer", @@ -5954,8 +5958,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_nombre_parts_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3874, - start_column=14, end_line=3874, + start_line=3923, + start_column=14, end_line=3923, end_column=59, law_headings=["Article D832-25", "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer", @@ -5971,8 +5975,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_nombre_parts_dot_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3876, - start_column=14, end_line=3876, + start_line=3925, + start_column=14, end_line=3925, end_column=64, law_headings=["Article D832-25", "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer", @@ -5995,8 +5999,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_montant_forfaitaire_d832_27 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=626, start_column=11, - end_line=626, end_column=38, + start_line=627, start_column=11, + end_line=627, end_column=38, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6010,8 +6014,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_coefficient_multiplicateur_d832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=617, start_column=10, - end_line=617, end_column=44, + start_line=618, start_column=12, + end_line=618, end_column=46, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6026,8 +6030,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_equivalence_loyer_eligible = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=620, start_column=10, - end_line=620, end_column=36, + start_line=621, start_column=12, + end_line=621, end_column=38, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6041,8 +6045,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_n_nombre_parts_d832_25_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=619, start_column=19, - end_line=619, end_column=41, + start_line=620, start_column=21, + end_line=620, end_column=43, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6054,9 +6058,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ return (equivalence_loyer_eligible - param_7) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=624, + start_line=625, start_column=11, - end_line=624, + end_line=625, end_column=41, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -6065,8 +6069,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_depense_nette_minimale_d832_27 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=624, start_column=11, - end_line=624, end_column=41, + start_line=625, start_column=11, + end_line=625, end_column=41, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6077,8 +6081,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3712, - start_column=14, end_line=3712, + start_line=3761, + start_column=14, end_line=3761, end_column=75, law_headings=["Article D832-24", "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer", @@ -6094,8 +6098,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3710, - start_column=14, end_line=3710, + start_line=3759, + start_column=14, end_line=3759, end_column=69, law_headings=["Article D832-24", "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer", @@ -6111,8 +6115,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3714, - start_column=14, end_line=3714, + start_line=3763, + start_column=14, end_line=3763, end_column=70, law_headings=["Article D832-24", "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer", @@ -6152,8 +6156,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_coefficient_prise_en_charge_d832_25_formule = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=637, start_column=10, - end_line=637, end_column=17, + start_line=638, start_column=10, + end_line=638, end_column=17, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6170,9 +6174,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=622, + start_line=623, start_column=11, - end_line=622, + end_line=623, end_column=52, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -6181,8 +6185,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_abattement_depense_nette_minimale_d832_27 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=622, start_column=11, - end_line=622, end_column=52, + start_line=623, start_column=11, + end_line=623, end_column=52, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6193,8 +6197,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_equivalence_loyer_minimale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=628, start_column=10, - end_line=628, end_column=36, + start_line=629, start_column=12, + end_line=629, end_column=38, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6203,26 +6207,26 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ try: try: if condition_2_du_832_25_3: - temp_coefficient_prise_en_charge_d832_25_arrondi = (decimal_round(((coefficient_prise_en_charge_d832_25_formule - + temp_coefficient_prise_en_charge_d832_25_coeff_arrondi = (decimal_round(((coefficient_prise_en_charge_d832_25_formule - decimal_of_string("0.005")) * decimal_of_string("100."))) / decimal_of_string("100.")) else: - temp_coefficient_prise_en_charge_d832_25_arrondi = dead_value + temp_coefficient_prise_en_charge_d832_25_coeff_arrondi = dead_value raise EmptyError except EmptyError: - temp_coefficient_prise_en_charge_d832_25_arrondi = (decimal_round(((coefficient_prise_en_charge_d832_25_formule - + temp_coefficient_prise_en_charge_d832_25_coeff_arrondi = (decimal_round(((coefficient_prise_en_charge_d832_25_formule - decimal_of_string("0.005")) * decimal_of_string("100."))) / decimal_of_string("100.")) except EmptyError: - temp_coefficient_prise_en_charge_d832_25_arrondi = dead_value + temp_coefficient_prise_en_charge_d832_25_coeff_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=638, start_column=10, - end_line=638, end_column=17, + start_line=639, start_column=10, + end_line=639, end_column=23, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) - coefficient_prise_en_charge_d832_25_arrondi = temp_coefficient_prise_en_charge_d832_25_arrondi + coefficient_prise_en_charge_d832_25_coeff_arrondi = temp_coefficient_prise_en_charge_d832_25_coeff_arrondi try: def temp_traitement_aide_finale_abattement(param_9:Money): try: @@ -6239,9 +6243,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=644, + start_line=645, start_column=10, - end_line=644, + end_line=645, end_column=20, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -6250,8 +6254,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_traitement_aide_finale_abattement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=644, start_column=10, - end_line=644, end_column=20, + start_line=645, start_column=10, + end_line=645, end_column=20, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6260,25 +6264,25 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ try: try: if condition_2_du_832_25_3: - if (coefficient_prise_en_charge_d832_25_arrondi >= + if (coefficient_prise_en_charge_d832_25_coeff_arrondi >= decimal_of_string("0.9")): temp_coefficient_prise_en_charge_d832_25_seuil = decimal_of_string("0.9") else: - temp_coefficient_prise_en_charge_d832_25_seuil = coefficient_prise_en_charge_d832_25_arrondi + temp_coefficient_prise_en_charge_d832_25_seuil = coefficient_prise_en_charge_d832_25_coeff_arrondi else: temp_coefficient_prise_en_charge_d832_25_seuil = dead_value raise EmptyError except EmptyError: - if (coefficient_prise_en_charge_d832_25_arrondi >= + if (coefficient_prise_en_charge_d832_25_coeff_arrondi >= decimal_of_string("0.95")): temp_coefficient_prise_en_charge_d832_25_seuil = decimal_of_string("0.95") else: - temp_coefficient_prise_en_charge_d832_25_seuil = coefficient_prise_en_charge_d832_25_arrondi + temp_coefficient_prise_en_charge_d832_25_seuil = coefficient_prise_en_charge_d832_25_coeff_arrondi except EmptyError: temp_coefficient_prise_en_charge_d832_25_seuil = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=639, start_column=10, - end_line=639, end_column=15, + start_line=640, start_column=10, + end_line=640, end_column=15, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6306,9 +6310,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=645, + start_line=646, start_column=10, - end_line=645, + end_line=646, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -6317,8 +6321,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_traitement_aide_finale_contributions_sociales_arrondi_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=645, start_column=10, - end_line=645, end_column=40, + start_line=646, start_column=10, + end_line=646, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6336,8 +6340,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_aide_finale_formule_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=641, start_column=10, - end_line=641, end_column=29, + start_line=642, start_column=12, + end_line=642, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6355,9 +6359,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ param_11) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=646, + start_line=647, start_column=10, - end_line=646, + end_line=647, end_column=25, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -6366,8 +6370,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_traitement_aide_finale_montant_minimal_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=646, start_column=10, - end_line=646, end_column=25, + start_line=647, start_column=10, + end_line=647, end_column=25, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6403,8 +6407,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_montant_forfaitaire_d832_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=695, start_column=11, - end_line=695, end_column=38, + start_line=696, start_column=11, + end_line=696, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6415,8 +6419,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_montant_minimal_aide_d832_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=696, start_column=11, - end_line=696, end_column=39, + start_line=697, start_column=11, + end_line=697, end_column=39, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6427,8 +6431,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_coefficient_multiplicateur_d832_11 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=698, start_column=11, - end_line=698, end_column=45, + start_line=699, start_column=11, + end_line=699, end_column=45, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6439,8 +6443,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_coefficient_multiplicateur_d832_18 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=699, start_column=11, - end_line=699, end_column=45, + start_line=700, start_column=11, + end_line=700, end_column=45, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6451,8 +6455,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_montant_limite_tranches_d832_15_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=700, start_column=11, - end_line=700, end_column=44, + start_line=701, start_column=11, + end_line=701, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6463,8 +6467,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_taux_tranche_inferieure_d832_15_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=701, start_column=11, - end_line=701, end_column=44, + start_line=702, start_column=11, + end_line=702, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6475,8 +6479,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_taux_tranche_superieure_d832_15_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=702, start_column=11, - end_line=702, end_column=44, + start_line=703, start_column=11, + end_line=703, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6488,8 +6492,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_taux_francs_vers_euros = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=703, start_column=11, - end_line=703, end_column=33, + start_line=704, start_column=11, + end_line=704, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6500,8 +6504,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_nombre_parts_dot_nombre_personnes_a_charge_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3220, - start_column=14, end_line=3220, + start_line=3269, + start_column=14, end_line=3269, end_column=59, law_headings=["Article D832-11", "Section 2 : Accession à la propriété", @@ -6516,8 +6520,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_nombre_parts_dot_situation_familiale_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3222, - start_column=14, end_line=3222, + start_line=3271, + start_column=14, end_line=3271, end_column=64, law_headings=["Article D832-11", "Section 2 : Accession à la propriété", @@ -6555,8 +6559,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_coefficient_multiplicateur_d832_17_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=697, start_column=11, - end_line=697, end_column=47, + start_line=698, start_column=11, + end_line=698, end_column=47, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6567,8 +6571,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_contributions_sociales_dot_date_courante_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=719, start_column=14, - end_line=719, end_column=50, + start_line=720, start_column=14, + end_line=720, end_column=50, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6631,7 +6635,7 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal raise EmptyError temp_montant_forfaitaire_charges_d832_10_8 = handle_default( SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=694, start_column=11, end_line=694, end_column=46, + start_line=695, start_column=11, end_line=695, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6673,7 +6677,7 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal raise EmptyError temp_montant_forfaitaire_charges_d832_10_8 = handle_default( SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=694, start_column=11, end_line=694, end_column=46, + start_line=695, start_column=11, end_line=695, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6685,8 +6689,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_montant_forfaitaire_charges_d832_10_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=694, start_column=11, - end_line=694, end_column=46, + start_line=695, start_column=11, + end_line=695, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6702,9 +6706,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=713, + start_line=714, start_column=10, - end_line=713, + end_line=714, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -6713,8 +6717,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_traitement_aide_finale_minoration_forfaitaire_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=713, start_column=10, - end_line=713, end_column=32, + start_line=714, start_column=10, + end_line=714, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6737,8 +6741,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_ressources_menage_avec_d832_18 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=693, start_column=11, - end_line=693, end_column=41, + start_line=694, start_column=11, + end_line=694, end_column=41, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10149,8 +10153,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=684, start_column=11, - end_line=684, end_column=46, + start_line=685, start_column=11, + end_line=685, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10200,9 +10204,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal temp_calcul_plafond_mensualite_d832_10_3_1) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=684, + start_line=685, start_column=11, - end_line=684, + end_line=685, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -10211,8 +10215,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_plafond_mensualite_d832_10_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=684, start_column=11, - end_line=684, end_column=46, + start_line=685, start_column=11, + end_line=685, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10223,8 +10227,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_n_nombre_parts_d832_11_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=685, start_column=11, - end_line=685, end_column=33, + start_line=686, start_column=11, + end_line=686, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10244,9 +10248,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal return (mensualite_principale - param_14) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=690, + start_line=691, start_column=11, - end_line=690, + end_line=691, end_column=41, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -10255,8 +10259,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_depense_nette_minimale_d832_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=690, start_column=11, - end_line=690, end_column=41, + start_line=691, start_column=11, + end_line=691, end_column=41, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10281,8 +10285,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_plafond_mensualite_d832_10_3_base = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=682, start_column=10, - end_line=682, end_column=14, + start_line=683, start_column=10, + end_line=683, end_column=14, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10293,8 +10297,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3426, - start_column=14, end_line=3426, + start_line=3475, + start_column=14, end_line=3475, end_column=75, law_headings=["Article D832-15", "Section 2 : Accession à la propriété", @@ -10309,8 +10313,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3425, - start_column=14, end_line=3425, + start_line=3474, + start_column=14, end_line=3474, end_column=69, law_headings=["Article D832-15", "Section 2 : Accession à la propriété", @@ -10325,8 +10329,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=3428, - start_column=14, end_line=3428, + start_line=3477, + start_column=14, end_line=3477, end_column=70, law_headings=["Article D832-15", "Section 2 : Accession à la propriété", @@ -10347,8 +10351,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_coefficient_prise_en_charge_d832_10_formule = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=687, start_column=10, - end_line=687, end_column=17, + start_line=688, start_column=10, + end_line=688, end_column=17, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10367,9 +10371,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=691, + start_line=692, start_column=11, - end_line=691, + end_line=692, end_column=52, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -10378,8 +10382,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_abattement_depense_nette_minimale_d832_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=691, start_column=11, - end_line=691, end_column=52, + start_line=692, start_column=11, + end_line=692, end_column=52, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10425,8 +10429,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_plafond_mensualite_d832_10_3_coproprietaires = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=683, start_column=10, - end_line=683, end_column=25, + start_line=684, start_column=10, + end_line=684, end_column=25, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10498,9 +10502,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal else: raise EmptyError temp_mensualite_minimale_9 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=680, - start_column=10, - end_line=680, end_column=29, + start_line=681, + start_column=12, + end_line=681, end_column=31, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10511,27 +10515,27 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_mensualite_minimale_9 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=680, start_column=10, - end_line=680, end_column=29, + start_line=681, start_column=12, + end_line=681, end_column=31, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) mensualite_minimale = temp_mensualite_minimale_9 try: - temp_coefficient_prise_en_charge_d832_10_arrondi = (decimal_round(((coefficient_prise_en_charge_d832_10_formule - + temp_coefficient_prise_en_charge_d832_10_coeff_arrondi = (decimal_round(((coefficient_prise_en_charge_d832_10_formule - decimal_of_string("0.005")) * decimal_of_string("100."))) / decimal_of_string("100.")) except EmptyError: - temp_coefficient_prise_en_charge_d832_10_arrondi = dead_value + temp_coefficient_prise_en_charge_d832_10_coeff_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=688, start_column=10, - end_line=688, end_column=17, + start_line=689, start_column=10, + end_line=689, end_column=23, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) - coefficient_prise_en_charge_d832_10_arrondi = temp_coefficient_prise_en_charge_d832_10_arrondi + coefficient_prise_en_charge_d832_10_coeff_arrondi = temp_coefficient_prise_en_charge_d832_10_coeff_arrondi try: def temp_traitement_aide_finale_abattement_1(param_16:Money): try: @@ -10548,9 +10552,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=714, + start_line=715, start_column=10, - end_line=714, + end_line=715, end_column=20, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -10559,8 +10563,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_traitement_aide_finale_abattement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=714, start_column=10, - end_line=714, end_column=20, + start_line=715, start_column=10, + end_line=715, end_column=20, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10575,24 +10579,24 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_mensualite_eligible = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=679, start_column=10, - end_line=679, end_column=29, + start_line=680, start_column=12, + end_line=680, end_column=31, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) mensualite_eligible = temp_mensualite_eligible try: - if (coefficient_prise_en_charge_d832_10_arrondi >= + if (coefficient_prise_en_charge_d832_10_coeff_arrondi >= decimal_of_string("0.95")): temp_coefficient_prise_en_charge_d832_10_seuil = decimal_of_string("0.95") else: - temp_coefficient_prise_en_charge_d832_10_seuil = coefficient_prise_en_charge_d832_10_arrondi + temp_coefficient_prise_en_charge_d832_10_seuil = coefficient_prise_en_charge_d832_10_coeff_arrondi except EmptyError: temp_coefficient_prise_en_charge_d832_10_seuil = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=689, start_column=10, - end_line=689, end_column=15, + start_line=690, start_column=10, + end_line=690, end_column=15, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10620,9 +10624,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=715, + start_line=716, start_column=10, - end_line=715, + end_line=716, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -10631,8 +10635,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_traitement_aide_finale_contributions_sociales_arrondi_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=715, start_column=10, - end_line=715, end_column=40, + start_line=716, start_column=10, + end_line=716, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10651,8 +10655,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_aide_finale_formule_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=711, start_column=10, - end_line=711, end_column=29, + start_line=712, start_column=12, + end_line=712, end_column=31, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10670,9 +10674,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal param_18) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=716, + start_line=717, start_column=10, - end_line=716, + end_line=717, end_column=25, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -10681,8 +10685,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_traitement_aide_finale_montant_minimal_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=716, start_column=10, - end_line=716, end_column=25, + start_line=717, start_column=10, + end_line=717, end_column=25, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11225,8 +11229,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen temp_patrimoine_pris_en_compte = dead_value raise EmptyError except EmptyError: - def temp_patrimoine_pris_en_compte_1(acc_2:bool, prestation:Any): - return (acc_2 or ((prestation == + def temp_patrimoine_pris_en_compte_1(acc:bool, prestation:PrestationRecue): + return (acc or ((prestation == PrestationRecue(PrestationRecue_Code.AllocationSoutienEnfantHandicape, Unit())) or (prestation == PrestationRecue(PrestationRecue_Code.AllocationAdulteHandicape, @@ -11314,8 +11318,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_eligibilite = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=320, start_column=10, - end_line=320, end_column=21, + start_line=320, start_column=12, + end_line=320, end_column=23, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11352,17 +11356,17 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", start_line=324, - start_column=10, + start_column=12, end_line=324, - end_column=28, + end_column=30, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) except EmptyError: temp_condition_2_r823_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=324, start_column=10, - end_line=324, end_column=28, + start_line=324, start_column=12, + end_line=324, end_column=30, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11436,7 +11440,7 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen "Prologue : aides au logement"])) prise_en_compte_personne_a_charge = temp_prise_en_compte_personne_a_charge try: - def temp_personnes_a_charge_prises_en_compte(personne_a_charge:Any): + def temp_personnes_a_charge_prises_en_compte(personne_a_charge:PersonneACharge): return prise_en_compte_personne_a_charge(personne_a_charge) temp_personnes_a_charge_prises_en_compte_1 = list_filter(temp_personnes_a_charge_prises_en_compte, menage.personnes_a_charge) @@ -11450,7 +11454,7 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen "Prologue : aides au logement"])) personnes_a_charge_prises_en_compte = temp_personnes_a_charge_prises_en_compte_1 try: - def temp_coefficents_enfants_garde_alternee_pris_en_compte(personne_a_charge_1:Any): + def temp_coefficents_enfants_garde_alternee_pris_en_compte(personne_a_charge_1:PersonneACharge): match_arg_371 = personne_a_charge_1 if match_arg_371.code == PersonneACharge_Code.EnfantACharge: enfant_3 = match_arg_371.value @@ -11464,7 +11468,7 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen elif match_arg_371.code == PersonneACharge_Code.AutrePersonneACharge: _ = match_arg_371.value return False - def temp_coefficents_enfants_garde_alternee_pris_en_compte_1(personne_a_charge_2:Any): + def temp_coefficents_enfants_garde_alternee_pris_en_compte_1(personne_a_charge_2:PersonneACharge): match_arg_373 = personne_a_charge_2 if match_arg_373.code == PersonneACharge_Code.EnfantACharge: enfant_4 = match_arg_373.value @@ -11484,8 +11488,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_coefficents_enfants_garde_alternee_pris_en_compte_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=322, start_column=10, - end_line=322, end_column=59, + start_line=322, start_column=12, + end_line=322, end_column=61, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11495,8 +11499,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_nombre_personnes_a_charge_prises_en_compte = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=321, start_column=10, - end_line=321, end_column=52, + start_line=321, start_column=12, + end_line=321, end_column=54, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11507,7 +11511,7 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen temp___3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", start_line=182, start_column=13, - end_line=182, end_column=48, + end_line=182, end_column=47, law_headings=["Article L822-3", "Chapitre II : Conditions générales d'attribution", "Titre II : Dispositions communes aux aides personnelles au logement", @@ -11518,7 +11522,7 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen raise AssertionFailure(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", start_line=182, start_column=13, end_line=182, - end_column=48, + end_column=47, law_headings=["Article L822-3", "Chapitre II : Conditions générales d'attribution", "Titre II : Dispositions communes aux aides personnelles au logement", @@ -11531,7 +11535,7 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen temp___4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", start_line=181, start_column=13, - end_line=181, end_column=49, + end_line=181, end_column=48, law_headings=["Article L822-3", "Chapitre II : Conditions générales d'attribution", "Titre II : Dispositions communes aux aides personnelles au logement", @@ -11542,7 +11546,7 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen raise AssertionFailure(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", start_line=181, start_column=13, end_line=181, - end_column=49, + end_column=48, law_headings=["Article L822-3", "Chapitre II : Conditions générales d'attribution", "Titre II : Dispositions communes aux aides personnelles au logement", @@ -11571,8 +11575,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ ressources_menage_arrondies_base = ressources_aides_personnelle_logement_in.ressources_menage_arrondies_base_in temp_ressources_menage_arrondies_seuil = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=495, start_column=10, - end_line=495, end_column=15, + start_line=496, start_column=10, + end_line=496, end_column=15, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11582,8 +11586,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_montant_forfaitaire_r_822_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=499, start_column=11, - end_line=499, end_column=38, + start_line=500, start_column=11, + end_line=500, end_column=38, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11593,36 +11597,39 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_montant_forfaitaire_r_822_7 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=501, start_column=11, - end_line=501, end_column=38, + start_line=502, start_column=11, + end_line=502, end_column=38, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) montant_forfaitaire_r_822_7 = temp_montant_forfaitaire_r_822_7 temp_ressources_forfaitaires_r822_20 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=503, start_column=11, - end_line=503, end_column=42, + start_line=504, start_column=11, + end_line=504, end_column=42, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) ressources_forfaitaires_r822_20 = temp_ressources_forfaitaires_r822_20 try: - def temp_ressources_personnes_vivant_habituellement_foyer(acc_3:Money, personne_1:Any): - return (acc_3 + personne_1.ressources) - temp_ressources_personnes_vivant_habituellement_foyer_1 = list_fold_left( - temp_ressources_personnes_vivant_habituellement_foyer, + def temp_ressources_personnes_vivant_habituellement_foyer(personne_1:PersonneVivantHabituellementAuFoyer): + return personne_1.ressources + def temp_ressources_personnes_vivant_habituellement_foyer_1(sum1_2:Money, sum2_2:Money): + return (sum1_2 + sum2_2) + temp_ressources_personnes_vivant_habituellement_foyer_2 = list_reduce( + temp_ressources_personnes_vivant_habituellement_foyer_1, money_of_cents_string("0"), - personnes_vivant_habituellement_foyer) + list_map(temp_ressources_personnes_vivant_habituellement_foyer, + personnes_vivant_habituellement_foyer)) except EmptyError: - temp_ressources_personnes_vivant_habituellement_foyer_1 = dead_value + temp_ressources_personnes_vivant_habituellement_foyer_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=497, start_column=11, - end_line=497, end_column=59, + start_line=498, start_column=11, + end_line=498, end_column=59, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) - ressources_personnes_vivant_habituellement_foyer = temp_ressources_personnes_vivant_habituellement_foyer_1 + ressources_personnes_vivant_habituellement_foyer = temp_ressources_personnes_vivant_habituellement_foyer_2 try: match_arg_375 = situation_familiale if match_arg_375.code == SituationFamiliale_Code.Celibataire: @@ -11662,8 +11669,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_abattement_r_822_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=502, start_column=11, - end_line=502, end_column=30, + start_line=503, start_column=11, + end_line=503, end_column=30, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11673,8 +11680,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_base_mensuelle_allocations_familiales_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=418, start_column=14, - end_line=418, end_column=65, + start_line=417, start_column=14, + end_line=417, end_column=65, law_headings=["Article R822-7", "Sous-section 2 : Principes de neutralisation et d'abattement", "Section 2 : Conditions relatives aux ressources", @@ -11697,8 +11704,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_abattement_r_822_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=498, start_column=11, - end_line=498, end_column=29, + start_line=499, start_column=11, + end_line=499, end_column=29, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11752,8 +11759,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_ressources_prises_en_compte_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=508, start_column=10, - end_line=508, end_column=37, + start_line=509, start_column=12, + end_line=509, end_column=39, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11770,23 +11777,23 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_abattement_r_822_7 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=500, start_column=11, - end_line=500, end_column=29, + start_line=501, start_column=11, + end_line=501, end_column=29, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) abattement_r_822_7 = temp_abattement_r_822_7 try: - def temp___5(acc_4:bool, personne_2:Any): - return (acc_4 and + def temp___5(acc_1:bool, personne_2:PersonneVivantHabituellementAuFoyer): + return (acc_1 and personne_2.duree_residence_durant_periode_r_822_3_1_superieure_a_6_mois) temp___6 = list_fold_left(temp___5, True, personnes_vivant_habituellement_foyer) except EmptyError: temp___6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=142, start_column=13, - end_line=143, end_column=74, + start_line=141, start_column=13, + end_line=142, end_column=74, law_headings=["Article R822-2", "Sous-section 1 : Modalités générales de l'appréciation des ressources", "Section 2 : Conditions relatives aux ressources", @@ -11797,8 +11804,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ "Code de la construction et de l'habitation"])) if not (temp___6): raise AssertionFailure(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=142, - start_column=13, end_line=143, + start_line=141, + start_column=13, end_line=142, end_column=74, law_headings=["Article R822-2", "Sous-section 1 : Modalités générales de l'appréciation des ressources", @@ -11819,8 +11826,8 @@ def eligibilite_prestations_familiales(eligibilite_prestations_familiales_in:Eli except EmptyError: temp_age_l512_3_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/../prestations_familiales/prologue.catala_fr", - start_line=43, start_column=10, - end_line=43, end_column=22, + start_line=43, start_column=12, + end_line=43, end_column=24, law_headings=["Prologue : prestations familiales"])) age_l512_3_2 = temp_age_l512_3_2 try: @@ -11865,8 +11872,8 @@ def eligibilite_prestations_familiales(eligibilite_prestations_familiales_in:Eli except EmptyError: temp_regime_outre_mer_l751_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/../prestations_familiales/prologue.catala_fr", - start_line=44, start_column=10, - end_line=44, end_column=33, + start_line=44, start_column=12, + end_line=44, end_column=35, law_headings=["Prologue : prestations familiales"])) regime_outre_mer_l751_1 = temp_regime_outre_mer_l751_1 try: @@ -11934,15 +11941,15 @@ def eligibilite_prestations_familiales(eligibilite_prestations_familiales_in:Eli except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/../prestations_familiales/prologue.catala_fr", start_line=41, - start_column=10, + start_column=12, end_line=41, - end_column=29, + end_column=31, law_headings=["Prologue : prestations familiales"])) except EmptyError: temp_conditions_hors_age = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/../prestations_familiales/prologue.catala_fr", - start_line=41, start_column=10, - end_line=41, end_column=29, + start_line=41, start_column=12, + end_line=41, end_column=31, law_headings=["Prologue : prestations familiales"])) conditions_hors_age = temp_conditions_hors_age try: @@ -11999,15 +12006,15 @@ def eligibilite_prestations_familiales(eligibilite_prestations_familiales_in:Eli except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/../prestations_familiales/prologue.catala_fr", start_line=40, - start_column=10, + start_column=12, end_line=40, - end_column=22, + end_column=24, law_headings=["Prologue : prestations familiales"])) except EmptyError: temp_droit_ouvert = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/../prestations_familiales/prologue.catala_fr", - start_line=40, start_column=10, - end_line=40, end_column=22, + start_line=40, start_column=12, + end_line=40, end_column=24, law_headings=["Prologue : prestations familiales"])) droit_ouvert = temp_droit_ouvert return EligibilitePrestationsFamiliales(droit_ouvert = droit_ouvert, @@ -12035,8 +12042,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_loyer_principal_base = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=791, start_column=14, - end_line=791, end_column=48, + start_line=792, start_column=14, + end_line=792, end_column=48, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12046,8 +12053,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_ressources_menage_arrondies = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=793, start_column=14, - end_line=793, end_column=60, + start_line=794, start_column=14, + end_line=794, end_column=60, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12057,8 +12064,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=795, start_column=14, - end_line=795, end_column=78, + start_line=796, start_column=14, + end_line=796, end_column=78, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12068,8 +12075,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=798, start_column=14, - end_line=798, end_column=46, + start_line=799, start_column=14, + end_line=799, end_column=46, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12079,8 +12086,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=800, start_column=14, - end_line=800, end_column=58, + start_line=801, start_column=14, + end_line=801, end_column=58, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12090,8 +12097,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=802, start_column=14, - end_line=802, end_column=63, + start_line=803, start_column=14, + end_line=803, end_column=63, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12101,8 +12108,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=804, start_column=14, - end_line=804, end_column=37, + start_line=805, start_column=14, + end_line=805, end_column=37, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12112,8 +12119,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_logement_est_chambre = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=806, start_column=14, - end_line=806, end_column=53, + start_line=807, start_column=14, + end_line=807, end_column=53, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12123,8 +12130,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=809, start_column=5, - end_line=810, end_column=63, + start_line=810, start_column=5, + end_line=811, end_column=63, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12134,8 +12141,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_type_aide = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=813, start_column=14, - end_line=813, end_column=42, + start_line=814, start_column=14, + end_line=814, end_column=42, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12145,8 +12152,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_colocation = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=815, start_column=14, - end_line=815, end_column=43, + start_line=816, start_column=14, + end_line=816, end_column=43, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12156,8 +12163,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_reduction_loyer_solidarite = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=817, start_column=14, - end_line=817, end_column=59, + start_line=818, start_column=14, + end_line=818, end_column=59, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12167,8 +12174,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_logement_meuble_d842_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=819, start_column=14, - end_line=819, end_column=55, + start_line=820, start_column=14, + end_line=820, end_column=55, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12214,18 +12221,18 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal param_24) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=788, - start_column=10, - end_line=788, - end_column=32, + start_line=789, + start_column=12, + end_line=789, + end_column=34, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) except EmptyError: temp_traitement_aide_finale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=788, start_column=10, - end_line=788, end_column=32, + start_line=789, start_column=12, + end_line=789, end_column=34, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12258,8 +12265,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_aide_finale_formule_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=786, start_column=10, - end_line=786, end_column=29, + start_line=787, start_column=12, + end_line=787, end_column=31, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12282,8 +12289,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_montant_minimal_aide_d842_15 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=927, start_column=11, - end_line=927, end_column=39, + start_line=928, start_column=11, + end_line=928, end_column=39, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12293,8 +12300,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_montant_forfaitaire_d842_15 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=928, start_column=11, - end_line=928, end_column=38, + start_line=929, start_column=11, + end_line=929, end_column=38, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12304,8 +12311,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_montant_minimal_depense_nette_d842_17 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=929, start_column=11, - end_line=929, end_column=48, + start_line=930, start_column=11, + end_line=930, end_column=48, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12315,8 +12322,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_nombre_parts_dot_condition_2_du_832_25_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4778, - start_column=14, end_line=4778, + start_line=4827, + start_column=14, end_line=4827, end_column=55, law_headings=["Article D842-15", "Section 3 : Logements-foyers", @@ -12331,8 +12338,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_nombre_parts_dot_nombre_personnes_a_charge_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4774, - start_column=14, end_line=4774, + start_line=4823, + start_column=14, end_line=4823, end_column=59, law_headings=["Article D842-15", "Section 3 : Logements-foyers", @@ -12347,8 +12354,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_nombre_parts_dot_situation_familiale_calcul_apl_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4776, - start_column=14, end_line=4776, + start_line=4825, + start_column=14, end_line=4825, end_column=64, law_headings=["Article D842-15", "Section 3 : Logements-foyers", @@ -12367,8 +12374,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_contributions_sociales_dot_date_courante_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=968, start_column=14, - end_line=968, end_column=50, + start_line=969, start_column=14, + end_line=969, end_column=50, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12380,8 +12387,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_type_logement_foyer = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=952, start_column=14, - end_line=952, end_column=59, + start_line=953, start_column=14, + end_line=953, end_column=59, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12391,8 +12398,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_date_conventionnement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=954, start_column=14, - end_line=954, end_column=61, + start_line=955, start_column=14, + end_line=955, end_column=61, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12402,8 +12409,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_ressources_menage_arrondies = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=958, start_column=14, - end_line=958, end_column=67, + start_line=959, start_column=14, + end_line=959, end_column=67, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12413,8 +12420,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=960, start_column=14, - end_line=960, end_column=65, + start_line=961, start_column=14, + end_line=961, end_column=65, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12424,8 +12431,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=962, start_column=14, - end_line=962, end_column=70, + start_line=963, start_column=14, + end_line=963, end_column=70, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12435,8 +12442,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=964, start_column=14, - end_line=964, end_column=44, + start_line=965, start_column=14, + end_line=965, end_column=44, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12446,8 +12453,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=966, start_column=14, - end_line=966, end_column=53, + start_line=967, start_column=14, + end_line=967, end_column=53, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12457,8 +12464,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_redevance = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=956, start_column=14, - end_line=956, end_column=49, + start_line=957, start_column=14, + end_line=957, end_column=49, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12521,9 +12528,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA else: raise EmptyError temp_montant_forfaitaire_charges_4 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=932, - start_column=10, - end_line=932, end_column=37, + start_line=933, + start_column=12, + end_line=933, end_column=39, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_montant_forfaitaire_charges_3, @@ -12533,8 +12540,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_montant_forfaitaire_charges_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=932, start_column=10, - end_line=932, end_column=37, + start_line=933, start_column=12, + end_line=933, end_column=39, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12751,9 +12758,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA else: raise EmptyError temp_equivalence_loyer_16 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=931, - start_column=10, - end_line=931, end_column=27, + start_line=932, + start_column=12, + end_line=932, end_column=29, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_equivalence_loyer_14, @@ -12767,8 +12774,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_equivalence_loyer_16 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=931, start_column=10, - end_line=931, end_column=27, + start_line=932, start_column=12, + end_line=932, end_column=29, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12783,9 +12790,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA return (param_25 - montant_forfaitaire_d842_15) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=945, + start_line=946, start_column=10, - end_line=945, + end_line=946, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12793,8 +12800,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_traitement_aide_finale_minoration_forfaitaire_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=945, start_column=10, - end_line=945, end_column=32, + start_line=946, start_column=10, + end_line=946, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12804,8 +12811,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4771, - start_column=14, end_line=4771, + start_line=4820, + start_column=14, end_line=4820, end_column=75, law_headings=["Article D842-15", "Section 3 : Logements-foyers", @@ -12820,8 +12827,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4770, - start_column=14, end_line=4770, + start_line=4819, + start_column=14, end_line=4819, end_column=69, law_headings=["Article D842-15", "Section 3 : Logements-foyers", @@ -12836,8 +12843,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4780, - start_column=14, end_line=4780, + start_line=4829, + start_column=14, end_line=4829, end_column=70, law_headings=["Article D842-15", "Section 3 : Logements-foyers", @@ -12856,8 +12863,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_coefficient_prise_en_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=930, start_column=10, - end_line=930, end_column=37, + start_line=931, start_column=12, + end_line=931, end_column=39, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12869,9 +12876,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA param_26) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=925, + start_line=926, start_column=11, - end_line=925, + end_line=926, end_column=33, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12879,8 +12886,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_depense_nette_minimale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=925, start_column=11, - end_line=925, end_column=33, + start_line=926, start_column=11, + end_line=926, end_column=33, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12890,8 +12897,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_loyer_minimal = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=933, start_column=10, - end_line=933, end_column=23, + start_line=934, start_column=12, + end_line=934, end_column=25, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12907,9 +12914,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=926, + start_line=927, start_column=11, - end_line=926, + end_line=927, end_column=44, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12917,8 +12924,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_abattement_depense_nette_minimale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=926, start_column=11, - end_line=926, end_column=44, + start_line=927, start_column=11, + end_line=927, end_column=44, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12930,8 +12937,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_aide_finale_formule_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=943, start_column=10, - end_line=943, end_column=29, + start_line=944, start_column=12, + end_line=944, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12952,9 +12959,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA param_28))) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=946, + start_line=947, start_column=10, - end_line=946, + end_line=947, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12962,8 +12969,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_traitement_aide_finale_depense_nette_minimale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=946, start_column=10, - end_line=946, end_column=32, + start_line=947, start_column=10, + end_line=947, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12979,9 +12986,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA param_29) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=947, + start_line=948, start_column=10, - end_line=947, + end_line=948, end_column=19, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12989,8 +12996,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_traitement_aide_finale_redevance = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=947, start_column=10, - end_line=947, end_column=19, + start_line=948, start_column=10, + end_line=948, end_column=19, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13016,9 +13023,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=948, + start_line=949, start_column=10, - end_line=948, + end_line=949, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -13026,8 +13033,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_traitement_aide_finale_contributions_sociales_arrondi_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=948, start_column=10, - end_line=948, end_column=40, + start_line=949, start_column=10, + end_line=949, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13044,9 +13051,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA param_31) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=949, + start_line=950, start_column=10, - end_line=949, + end_line=950, end_column=25, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -13054,8 +13061,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_traitement_aide_finale_montant_minimal_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=949, start_column=10, - end_line=949, end_column=25, + start_line=950, start_column=10, + end_line=950, end_column=25, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13086,8 +13093,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_montant_forfaitaire_d842_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=856, start_column=11, - end_line=856, end_column=37, + start_line=857, start_column=11, + end_line=857, end_column=37, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13098,8 +13105,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_taux_francs_vers_euros_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=859, start_column=11, - end_line=859, end_column=33, + start_line=860, start_column=11, + end_line=860, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13109,8 +13116,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_montant_minimal_aide_d842_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=862, start_column=11, - end_line=862, end_column=38, + start_line=863, start_column=11, + end_line=863, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13120,8 +13127,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_montant_forfaitaire_d842_11 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=863, start_column=11, - end_line=863, end_column=38, + start_line=864, start_column=11, + end_line=864, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13131,8 +13138,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_montant_forfaitaire_d842_12 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=864, start_column=11, - end_line=864, end_column=38, + start_line=865, start_column=11, + end_line=865, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13142,8 +13149,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_coefficient_d842_11 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=865, start_column=11, - end_line=865, end_column=30, + start_line=866, start_column=11, + end_line=866, end_column=30, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13153,8 +13160,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_coefficient_d842_12 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=866, start_column=11, - end_line=866, end_column=30, + start_line=867, start_column=11, + end_line=867, end_column=30, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13164,8 +13171,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_nombre_parts_dot_nombre_personnes_a_charge_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4385, - start_column=14, end_line=4385, + start_line=4434, + start_column=14, end_line=4434, end_column=59, law_headings=["Article D842-6", "Section 2 : Accession à la propriété", @@ -13180,8 +13187,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_nombre_parts_dot_situation_familiale_calcul_apl_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4387, - start_column=14, end_line=4387, + start_line=4436, + start_column=14, end_line=4436, end_column=64, law_headings=["Article D842-6", "Section 2 : Accession à la propriété", @@ -13199,8 +13206,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_contributions_sociales_dot_date_courante_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=907, start_column=14, - end_line=907, end_column=50, + start_line=908, start_column=14, + end_line=908, end_column=50, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13271,9 +13278,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac else: raise EmptyError temp_montant_forfaitaire_charges_11 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=849, + start_line=850, start_column=11, - end_line=849, end_column=38, + end_line=850, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_montant_forfaitaire_charges_9, @@ -13283,8 +13290,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_montant_forfaitaire_charges_11 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=849, start_column=11, - end_line=849, end_column=38, + start_line=850, start_column=11, + end_line=850, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -13299,9 +13306,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac return (param_32 - montant_forfaitaire_d842_6) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=879, + start_line=880, start_column=10, - end_line=879, + end_line=880, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -13309,8 +13316,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_traitement_aide_finale_minoration_forfaitaire_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=879, start_column=10, - end_line=879, end_column=32, + start_line=880, start_column=10, + end_line=880, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15888,8 +15895,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=854, start_column=10, - end_line=854, end_column=14, + start_line=855, start_column=10, + end_line=855, end_column=14, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_calcul_plafond_mensualite_d842_6_base_30, @@ -15918,9 +15925,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac temp_calcul_plafond_mensualite_d842_6_base_1) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=854, + start_line=855, start_column=10, - end_line=854, + end_line=855, end_column=14, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -15928,8 +15935,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_plafond_mensualite_d842_6_base = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=854, start_column=10, - end_line=854, end_column=14, + start_line=855, start_column=10, + end_line=855, end_column=14, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16008,9 +16015,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac else: raise EmptyError temp_seuil_minimal_ressources_menage_8 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=858, + start_line=859, start_column=11, - end_line=858, end_column=42, + end_line=859, end_column=42, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_seuil_minimal_ressources_menage_4, @@ -16020,8 +16027,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_seuil_minimal_ressources_menage_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=858, start_column=11, - end_line=858, end_column=42, + start_line=859, start_column=11, + end_line=859, end_column=42, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16033,9 +16040,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac montant_forfaitaire_charges_1) - param_34) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=860, + start_line=861, start_column=11, - end_line=860, + end_line=861, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -16043,8 +16050,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_depense_nette_minimale_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=860, start_column=11, - end_line=860, end_column=33, + start_line=861, start_column=11, + end_line=861, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16086,9 +16093,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac raise EmptyError except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=855, + start_line=856, start_column=10, - end_line=855, + end_line=856, end_column=26, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -16096,8 +16103,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_plafond_mensualite_d842_6_avec_copropriete = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=855, start_column=10, - end_line=855, end_column=26, + start_line=856, start_column=10, + end_line=856, end_column=26, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16120,8 +16127,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_ressources_menage_arrondies_seuil_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=834, start_column=10, - end_line=834, end_column=15, + start_line=835, start_column=10, + end_line=835, end_column=15, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16147,8 +16154,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_plafond_mensualite_d842_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=852, start_column=11, - end_line=852, end_column=36, + start_line=853, start_column=11, + end_line=853, end_column=36, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16158,8 +16165,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4381, - start_column=14, end_line=4381, + start_line=4430, + start_column=14, end_line=4430, end_column=75, law_headings=["Article D842-6", "Section 2 : Accession à la propriété", @@ -16174,8 +16181,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4380, - start_column=14, end_line=4380, + start_line=4429, + start_column=14, end_line=4429, end_column=69, law_headings=["Article D842-6", "Section 2 : Accession à la propriété", @@ -16190,8 +16197,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=4383, - start_column=14, end_line=4383, + start_line=4432, + start_column=14, end_line=4432, end_column=70, law_headings=["Article D842-6", "Section 2 : Accession à la propriété", @@ -16211,8 +16218,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_type_logement_foyer_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=891, start_column=14, - end_line=891, end_column=59, + start_line=892, start_column=14, + end_line=892, end_column=59, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16222,8 +16229,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_date_conventionnement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=893, start_column=14, - end_line=893, end_column=61, + start_line=894, start_column=14, + end_line=894, end_column=61, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16233,8 +16240,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_ressources_menage_arrondies_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=897, start_column=14, - end_line=897, end_column=67, + start_line=898, start_column=14, + end_line=898, end_column=67, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16244,8 +16251,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_nombre_personnes_a_charge_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=899, start_column=14, - end_line=899, end_column=65, + start_line=900, start_column=14, + end_line=900, end_column=65, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16255,8 +16262,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_situation_familiale_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=901, start_column=14, - end_line=901, end_column=70, + start_line=902, start_column=14, + end_line=902, end_column=70, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16266,8 +16273,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_zone_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=903, start_column=14, - end_line=903, end_column=44, + start_line=904, start_column=14, + end_line=904, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16277,8 +16284,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_date_courante_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=905, start_column=14, - end_line=905, end_column=53, + start_line=906, start_column=14, + end_line=906, end_column=53, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16288,8 +16295,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_redevance_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=895, start_column=14, - end_line=895, end_column=49, + start_line=896, start_column=14, + end_line=896, end_column=49, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16375,8 +16382,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_seuil_minimal_depense_nette_minimale_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=857, start_column=11, - end_line=857, end_column=47, + start_line=858, start_column=11, + end_line=858, end_column=47, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16390,8 +16397,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_mensualite_eligible_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=848, start_column=11, - end_line=848, end_column=30, + start_line=849, start_column=11, + end_line=849, end_column=30, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16401,8 +16408,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_mensualite_minimale_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=850, start_column=11, - end_line=850, end_column=30, + start_line=851, start_column=11, + end_line=851, end_column=30, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16412,8 +16419,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_coefficient_prise_en_charge_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=851, start_column=11, - end_line=851, end_column=38, + start_line=852, start_column=11, + end_line=852, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16429,9 +16436,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=861, + start_line=862, start_column=11, - end_line=861, + end_line=862, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -16439,8 +16446,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_abattement_depense_nette_minimale_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=861, start_column=11, - end_line=861, end_column=44, + start_line=862, start_column=11, + end_line=862, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16452,8 +16459,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_aide_finale_formule_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=876, start_column=10, - end_line=876, end_column=29, + start_line=877, start_column=12, + end_line=877, end_column=31, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16472,9 +16479,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac param_37))) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=880, + start_line=881, start_column=10, - end_line=880, + end_line=881, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -16482,8 +16489,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_traitement_aide_finale_depense_nette_minimale_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=880, start_column=10, - end_line=880, end_column=32, + start_line=881, start_column=10, + end_line=881, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16510,9 +16517,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=881, + start_line=882, start_column=10, - end_line=881, + end_line=882, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -16520,8 +16527,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_traitement_aide_finale_contributions_sociales_arrondi_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=881, start_column=10, - end_line=881, end_column=40, + start_line=882, start_column=10, + end_line=882, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16538,9 +16545,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac param_39) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=882, + start_line=883, start_column=10, - end_line=882, + end_line=883, end_column=25, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -16548,8 +16555,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_traitement_aide_finale_montant_minimal_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=882, start_column=10, - end_line=882, end_column=25, + start_line=883, start_column=10, + end_line=883, end_column=25, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -16590,8 +16597,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_categorie_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=740, start_column=11, - end_line=740, end_column=31, + start_line=741, start_column=11, + end_line=741, end_column=31, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16604,8 +16611,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_ressources_menage_avec_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=734, start_column=10, - end_line=734, end_column=22, + start_line=735, start_column=10, + end_line=735, end_column=22, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16640,8 +16647,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=741, start_column=11, - end_line=741, end_column=41, + start_line=742, start_column=11, + end_line=742, end_column=41, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16656,9 +16663,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1436, + start_line=1447, start_column=38, - end_line=1436, + end_line=1447, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16681,9 +16688,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1432, + start_line=1443, start_column=16, - end_line=1435, + end_line=1446, end_column=39, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16697,9 +16704,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1427, + start_line=1438, start_column=26, - end_line=1427, + end_line=1438, end_column=45, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16713,9 +16720,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1430, + start_line=1441, start_column=25, - end_line=1430, + end_line=1441, end_column=34, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16729,9 +16736,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1429, + start_line=1440, start_column=15, - end_line=1429, + end_line=1440, end_column=80, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16745,9 +16752,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1426, + start_line=1437, start_column=36, - end_line=1426, + end_line=1437, end_column=65, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16761,9 +16768,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1420, + start_line=1431, start_column=20, - end_line=1420, + end_line=1431, end_column=24, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16777,9 +16784,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_7 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1422, + start_line=1433, start_column=46, - end_line=1422, + end_line=1433, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16793,9 +16800,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1419, + start_line=1430, start_column=41, - end_line=1419, + end_line=1430, end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16809,9 +16816,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_9 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1421, + start_line=1432, start_column=29, - end_line=1421, + end_line=1432, end_column=42, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16825,9 +16832,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1425, + start_line=1436, start_column=15, - end_line=1425, + end_line=1436, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16841,9 +16848,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_11 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1418, + start_line=1429, start_column=43, - end_line=1418, + end_line=1429, end_column=60, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16857,9 +16864,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_12 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1423, + start_line=1434, start_column=31, - end_line=1423, + end_line=1434, end_column=55, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16873,9 +16880,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_13 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1436, + start_line=1447, start_column=38, - end_line=1436, + end_line=1447, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16898,9 +16905,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_14 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1432, + start_line=1443, start_column=16, - end_line=1435, + end_line=1446, end_column=39, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16914,9 +16921,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_15 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1427, + start_line=1438, start_column=26, - end_line=1427, + end_line=1438, end_column=45, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16930,9 +16937,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_16 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1430, + start_line=1441, start_column=25, - end_line=1430, + end_line=1441, end_column=34, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16946,9 +16953,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_17 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1429, + start_line=1440, start_column=15, - end_line=1429, + end_line=1440, end_column=80, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16962,9 +16969,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_18 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1426, + start_line=1437, start_column=36, - end_line=1426, + end_line=1437, end_column=65, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16978,9 +16985,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_19 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1420, + start_line=1431, start_column=20, - end_line=1420, + end_line=1431, end_column=24, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -16994,9 +17001,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_20 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1422, + start_line=1433, start_column=46, - end_line=1422, + end_line=1433, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17010,9 +17017,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_21 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1419, + start_line=1430, start_column=41, - end_line=1419, + end_line=1430, end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17026,9 +17033,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_22 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1421, + start_line=1432, start_column=29, - end_line=1421, + end_line=1432, end_column=42, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17042,9 +17049,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_23 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1425, + start_line=1436, start_column=15, - end_line=1425, + end_line=1436, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17058,9 +17065,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_24 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1418, + start_line=1429, start_column=43, - end_line=1418, + end_line=1429, end_column=60, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17074,9 +17081,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1423, + start_line=1434, start_column=31, - end_line=1423, + end_line=1434, end_column=55, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17120,9 +17127,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_27 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1464, + start_line=1483, start_column=30, - end_line=1464, + end_line=1483, end_column=43, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17136,9 +17143,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_28 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1474, + start_line=1494, start_column=36, - end_line=1474, + end_line=1494, end_column=68, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17152,9 +17159,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_29 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1473, + start_line=1493, start_column=26, - end_line=1473, + end_line=1493, end_column=53, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17168,9 +17175,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_30 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1463, + start_line=1482, start_column=21, - end_line=1463, + end_line=1482, end_column=25, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17184,9 +17191,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_31 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1472, + start_line=1492, start_column=40, - end_line=1472, + end_line=1492, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17200,9 +17207,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_32 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1471, + start_line=1491, start_column=28, - end_line=1471, + end_line=1491, end_column=52, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17216,9 +17223,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_33 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1470, + start_line=1490, start_column=37, - end_line=1470, + end_line=1490, end_column=70, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17232,10 +17239,10 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_34 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1469, - start_column=56, - end_line=1469, - end_column=108, + start_line=1489, + start_column=14, + end_line=1489, + end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", "Chapitre III : Modalités de liquidation et de versement", @@ -17248,9 +17255,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_35 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1468, + start_line=1487, start_column=36, - end_line=1468, + end_line=1487, end_column=68, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17264,9 +17271,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_36 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1467, + start_line=1486, start_column=38, - end_line=1467, + end_line=1486, end_column=80, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17280,9 +17287,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_37 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1465, + start_line=1484, start_column=47, - end_line=1465, + end_line=1484, end_column=77, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17296,9 +17303,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_38 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1462, + start_line=1481, start_column=42, - end_line=1462, + end_line=1481, end_column=67, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17312,9 +17319,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_39 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1461, + start_line=1480, start_column=44, - end_line=1461, + end_line=1480, end_column=61, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17328,9 +17335,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_40 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1466, + start_line=1485, start_column=38, - end_line=1466, + end_line=1485, end_column=72, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17344,9 +17351,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_41 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1464, + start_line=1483, start_column=30, - end_line=1464, + end_line=1483, end_column=43, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17360,9 +17367,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_42 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1474, + start_line=1494, start_column=36, - end_line=1474, + end_line=1494, end_column=68, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17376,9 +17383,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_43 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1473, + start_line=1493, start_column=26, - end_line=1473, + end_line=1493, end_column=53, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17392,9 +17399,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_44 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1463, + start_line=1482, start_column=21, - end_line=1463, + end_line=1482, end_column=25, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17408,9 +17415,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_45 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1472, + start_line=1492, start_column=40, - end_line=1472, + end_line=1492, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17424,9 +17431,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_46 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1471, + start_line=1491, start_column=28, - end_line=1471, + end_line=1491, end_column=52, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17440,9 +17447,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_47 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1470, + start_line=1490, start_column=37, - end_line=1470, + end_line=1490, end_column=70, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17456,10 +17463,10 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_48 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1469, - start_column=56, - end_line=1469, - end_column=108, + start_line=1489, + start_column=14, + end_line=1489, + end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", "Chapitre III : Modalités de liquidation et de versement", @@ -17472,9 +17479,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_49 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1468, + start_line=1487, start_column=36, - end_line=1468, + end_line=1487, end_column=68, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17488,9 +17495,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_50 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1467, + start_line=1486, start_column=38, - end_line=1467, + end_line=1486, end_column=80, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17504,9 +17511,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_51 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1465, + start_line=1484, start_column=47, - end_line=1465, + end_line=1484, end_column=77, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17520,9 +17527,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_52 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1462, + start_line=1481, start_column=42, - end_line=1462, + end_line=1481, end_column=67, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17536,9 +17543,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_53 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1461, + start_line=1480, start_column=44, - end_line=1461, + end_line=1480, end_column=61, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17552,9 +17559,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_54 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1466, + start_line=1485, start_column=38, - end_line=1466, + end_line=1485, end_column=72, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17604,9 +17611,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_57 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1450, + start_line=1465, start_column=25, - end_line=1450, + end_line=1465, end_column=50, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17620,9 +17627,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_58 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1448, + start_line=1463, start_column=29, - end_line=1448, + end_line=1463, end_column=42, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17636,9 +17643,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_59 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1447, + start_line=1462, start_column=20, - end_line=1447, + end_line=1462, end_column=24, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17652,9 +17659,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_60 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1449, + start_line=1464, start_column=46, - end_line=1449, + end_line=1464, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17668,9 +17675,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_61 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1446, + start_line=1461, start_column=41, - end_line=1446, + end_line=1461, end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17684,9 +17691,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_62 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1445, + start_line=1460, start_column=43, - end_line=1445, + end_line=1460, end_column=60, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17700,9 +17707,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_63 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1452, + start_line=1467, start_column=37, - end_line=1452, + end_line=1467, end_column=74, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17716,9 +17723,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_64 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1451, + start_line=1466, start_column=35, - end_line=1451, + end_line=1466, end_column=55, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17736,9 +17743,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_67 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1450, + start_line=1465, start_column=25, - end_line=1450, + end_line=1465, end_column=50, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17752,9 +17759,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_68 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1448, + start_line=1463, start_column=29, - end_line=1448, + end_line=1463, end_column=42, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17768,9 +17775,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_69 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1447, + start_line=1462, start_column=20, - end_line=1447, + end_line=1462, end_column=24, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17784,9 +17791,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_70 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1449, + start_line=1464, start_column=46, - end_line=1449, + end_line=1464, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17800,9 +17807,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_71 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1446, + start_line=1461, start_column=41, - end_line=1446, + end_line=1461, end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17816,9 +17823,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_72 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1445, + start_line=1460, start_column=43, - end_line=1445, + end_line=1460, end_column=60, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17832,9 +17839,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_73 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1452, + start_line=1467, start_column=37, - end_line=1452, + end_line=1467, end_column=74, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17848,9 +17855,9 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_74 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1451, + start_line=1466, start_column=35, - end_line=1451, + end_line=1466, end_column=55, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -17884,8 +17891,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_sous_calcul_traitement_26 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=743, start_column=11, - end_line=743, end_column=33, + start_line=744, start_column=11, + end_line=744, end_column=33, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -17898,10 +17905,10 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal param_40) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=746, - start_column=10, - end_line=746, - end_column=32, + start_line=747, + start_column=12, + end_line=747, + end_column=34, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -17909,8 +17916,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_traitement_aide_finale_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=746, start_column=10, - end_line=746, end_column=32, + start_line=747, start_column=12, + end_line=747, end_column=34, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -17921,8 +17928,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_aide_finale_formule_7 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=745, start_column=10, - end_line=745, end_column=29, + start_line=746, start_column=12, + end_line=746, end_column=31, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -17943,53 +17950,48 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_delai_apres_emmenagement_l823_8_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=457, start_column=11, - end_line=457, end_column=44, + start_line=458, start_column=11, + end_line=458, end_column=44, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) delai_apres_emmenagement_l823_8_2 = temp_delai_apres_emmenagement_l823_8_2 try: try: - def temp_condition_rang_enfant(acc_5:Integer, personne_a_charge_3:Any): + def temp_condition_rang_enfant(personne_a_charge_3:PersonneACharge): match_arg_506 = personne_a_charge_3 if match_arg_506.code == PersonneACharge_Code.EnfantACharge: _ = match_arg_506.value - temp_condition_rang_enfant_1 = True + return True elif match_arg_506.code == PersonneACharge_Code.AutrePersonneACharge: _ = match_arg_506.value - temp_condition_rang_enfant_1 = False - if temp_condition_rang_enfant_1: - return (acc_5 + integer_of_string("1")) - else: - return acc_5 - if ((list_fold_left(temp_condition_rang_enfant, - integer_of_string("0"), - menage_1.personnes_a_charge) + + return False + if ((list_length(list_filter(temp_condition_rang_enfant, + menage_1.personnes_a_charge)) + informations.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse) >= integer_of_string("3")): - temp_condition_rang_enfant_2 = True + temp_condition_rang_enfant_1 = True else: - temp_condition_rang_enfant_2 = dead_value + temp_condition_rang_enfant_1 = dead_value raise EmptyError except EmptyError: - temp_condition_rang_enfant_2 = False + temp_condition_rang_enfant_1 = False except EmptyError: - temp_condition_rang_enfant_2 = dead_value + temp_condition_rang_enfant_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=454, start_column=11, - end_line=454, end_column=32, + start_line=455, start_column=11, + end_line=455, end_column=32, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) - condition_rang_enfant = temp_condition_rang_enfant_2 + condition_rang_enfant = temp_condition_rang_enfant_1 try: temp_base_mensuelle_allocations_familiales_dot_date_courante_1 = date_courante_12 except EmptyError: temp_base_mensuelle_allocations_familiales_dot_date_courante_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=471, start_column=14, - end_line=471, end_column=65, + start_line=472, start_column=14, + end_line=472, end_column=65, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18001,8 +18003,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_eligibilite_apl_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=467, start_column=14, - end_line=467, end_column=36, + start_line=468, start_column=14, + end_line=468, end_column=36, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18012,8 +18014,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_eligibilite_apl_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=468, start_column=14, - end_line=468, end_column=39, + start_line=469, start_column=14, + end_line=469, end_column=39, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18023,8 +18025,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_eligibilite_apl_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=469, start_column=14, - end_line=469, end_column=43, + start_line=470, start_column=14, + end_line=470, end_column=43, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18080,58 +18082,49 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_condition_periode_demenagement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=455, start_column=11, - end_line=455, end_column=41, + start_line=456, start_column=11, + end_line=456, end_column=41, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) condition_periode_demenagement = temp_condition_periode_demenagement_1 try: - def temp_plafond_d823_22(acc_6:Integer, personne_a_charge_4:Any): + def temp_plafond_d823_22(personne_a_charge_4:PersonneACharge): match_arg_509 = personne_a_charge_4 if match_arg_509.code == PersonneACharge_Code.EnfantACharge: _ = match_arg_509.value - temp_plafond_d823_22_1 = True + return True elif match_arg_509.code == PersonneACharge_Code.AutrePersonneACharge: _ = match_arg_509.value - temp_plafond_d823_22_1 = False - if temp_plafond_d823_22_1: - return (acc_6 + integer_of_string("1")) - else: - return acc_6 - if (list_fold_left(temp_plafond_d823_22, integer_of_string("0"), - menage_1.personnes_a_charge) > + return False + if (list_length(list_filter(temp_plafond_d823_22, + menage_1.personnes_a_charge)) > integer_of_string("3")): - def temp_plafond_d823_22_2(acc_7:Integer, personne_a_charge_5:Any): + def temp_plafond_d823_22_1(personne_a_charge_5:PersonneACharge): match_arg_510 = personne_a_charge_5 if match_arg_510.code == PersonneACharge_Code.EnfantACharge: _ = match_arg_510.value - temp_plafond_d823_22_3 = True + return True elif match_arg_510.code == PersonneACharge_Code.AutrePersonneACharge: _ = match_arg_510.value - temp_plafond_d823_22_3 = False - if temp_plafond_d823_22_3: - return (acc_7 + integer_of_string("1")) - else: - return acc_7 - temp_plafond_d823_22_4 = (base_mensuelle_allocations_familiales_dot_montant_1 * - (decimal_of_integer((list_fold_left(temp_plafond_d823_22_2, - integer_of_string("0"), - menage_1.personnes_a_charge) - - integer_of_string("3"))) * decimal_of_string("0.2"))) + return False + temp_plafond_d823_22_2 = (base_mensuelle_allocations_familiales_dot_montant_1 * + (decimal_of_integer((list_length(list_filter(temp_plafond_d823_22_1, + menage_1.personnes_a_charge)) - integer_of_string("3"))) * + decimal_of_string("0.2"))) else: - temp_plafond_d823_22_4 = money_of_cents_string("0") - temp_plafond_d823_22_5 = ((base_mensuelle_allocations_familiales_dot_montant_1 * - decimal_of_string("2.4")) + temp_plafond_d823_22_4) + temp_plafond_d823_22_2 = money_of_cents_string("0") + temp_plafond_d823_22_3 = ((base_mensuelle_allocations_familiales_dot_montant_1 * + decimal_of_string("2.4")) + temp_plafond_d823_22_2) except EmptyError: - temp_plafond_d823_22_5 = dead_value + temp_plafond_d823_22_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=458, start_column=11, - end_line=458, end_column=26, + start_line=459, start_column=11, + end_line=459, end_column=26, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) - plafond_d823_22 = temp_plafond_d823_22_5 + plafond_d823_22 = temp_plafond_d823_22_3 try: try: if (eligibilite_apl_dot_eligibilite and @@ -18148,8 +18141,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_eligibilite_logement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=456, start_column=11, - end_line=456, end_column=31, + start_line=457, start_column=11, + end_line=457, end_column=31, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18163,8 +18156,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_montant_prime_demenagement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=464, start_column=10, - end_line=464, end_column=36, + start_line=465, start_column=12, + end_line=465, end_column=38, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18275,9 +18268,9 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem return False except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=365, + start_line=366, start_column=11, - end_line=365, + end_line=366, end_column=41, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -18285,8 +18278,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_caracteristiques_pret_l831_1_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=365, start_column=11, - end_line=365, end_column=41, + start_line=366, start_column=11, + end_line=366, end_column=41, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18297,9 +18290,9 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem return False except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=366, + start_line=367, start_column=11, - end_line=366, + end_line=367, end_column=41, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -18307,8 +18300,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_caracteristiques_pret_l831_1_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=366, start_column=11, - end_line=366, end_column=41, + start_line=367, start_column=11, + end_line=367, end_column=41, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18393,8 +18386,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_condition_logement_pret_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=364, start_column=11, - end_line=364, end_column=34, + start_line=365, start_column=11, + end_line=365, end_column=34, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18404,8 +18397,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_eligibilite_commune_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=377, start_column=14, - end_line=377, end_column=40, + start_line=378, start_column=14, + end_line=378, end_column=40, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18415,8 +18408,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_eligibilite_commune_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=378, start_column=14, - end_line=378, end_column=43, + start_line=379, start_column=14, + end_line=379, end_column=43, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18426,8 +18419,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_eligibilite_commune_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=379, start_column=14, - end_line=379, end_column=47, + start_line=380, start_column=14, + end_line=380, end_column=47, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18583,8 +18576,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_condition_logement_bailleur_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=363, start_column=11, - end_line=363, end_column=38, + start_line=364, start_column=11, + end_line=364, end_column=38, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18594,8 +18587,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_coefficents_enfants_garde_alternee_pris_en_compte_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=372, start_column=10, - end_line=372, end_column=59, + start_line=373, start_column=12, + end_line=373, end_column=61, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18605,8 +18598,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_nombre_personnes_a_charge_prises_en_compte_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=371, start_column=10, - end_line=371, end_column=52, + start_line=372, start_column=12, + end_line=372, end_column=54, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18624,8 +18617,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_eligibilite_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=370, start_column=10, - end_line=370, end_column=21, + start_line=371, start_column=12, + end_line=371, end_column=23, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18645,8 +18638,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_duree_l841_1_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=404, start_column=11, - end_line=404, end_column=25, + start_line=405, start_column=11, + end_line=405, end_column=25, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18656,8 +18649,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_prestations_familiales_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=420, start_column=14, - end_line=420, end_column=50, + start_line=421, start_column=14, + end_line=421, end_column=50, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18668,8 +18661,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_prestations_familiales_dot_prestation_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=421, start_column=14, - end_line=421, end_column=56, + start_line=422, start_column=14, + end_line=422, end_column=56, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18680,8 +18673,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_prestations_familiales_dot_residence = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=425, start_column=14, - end_line=425, end_column=46, + start_line=426, start_column=14, + end_line=426, end_column=46, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18867,8 +18860,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_condition_accession_propriete_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=401, start_column=11, - end_line=401, end_column=40, + start_line=402, start_column=11, + end_line=402, end_column=40, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18878,8 +18871,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_commune_dot_menage_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=427, start_column=14, - end_line=427, end_column=40, + start_line=428, start_column=14, + end_line=428, end_column=40, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18889,8 +18882,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_commune_dot_demandeur_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=428, start_column=14, - end_line=428, end_column=43, + start_line=429, start_column=14, + end_line=429, end_column=43, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18900,8 +18893,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_commune_dot_date_courante_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=429, start_column=14, - end_line=429, end_column=47, + start_line=430, start_column=14, + end_line=430, end_column=47, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18969,8 +18962,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_coefficents_enfants_garde_alternee_pris_en_compte_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=414, start_column=10, - end_line=414, end_column=59, + start_line=415, start_column=12, + end_line=415, end_column=61, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18980,8 +18973,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_nombre_personnes_a_charge_prises_en_compte_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=413, start_column=10, - end_line=413, end_column=52, + start_line=414, start_column=12, + end_line=414, end_column=54, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18997,8 +18990,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_dispositions_communes = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=411, start_column=10, - end_line=411, end_column=31, + start_line=412, start_column=10, + end_line=412, end_column=31, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -19037,39 +19030,28 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili raise EmptyError except EmptyError: try: - def temp_eligibilite_allocation_logement_familiale_2(acc_8:Integer, personne_a_charge_6:Any): + def temp_eligibilite_allocation_logement_familiale_2(personne_a_charge_6:PersonneACharge): match_arg_541 = personne_a_charge_6 if match_arg_541.code == PersonneACharge_Code.EnfantACharge: enfant_5 = match_arg_541.value - temp_eligibilite_allocation_logement_familiale_3 = False + return False elif match_arg_541.code == PersonneACharge_Code.AutrePersonneACharge: parent_3 = match_arg_541.value - temp_eligibilite_allocation_logement_familiale_3 = (parent_3.ascendant_descendant_collateral_deuxieme_troisieme_degre and + return (parent_3.ascendant_descendant_collateral_deuxieme_troisieme_degre and parent_3.incapacite_80_pourcent_ou_restriction_emploi) - if temp_eligibilite_allocation_logement_familiale_3: - return (acc_8 + - integer_of_string("1")) - else: - return acc_8 - if (list_fold_left(temp_eligibilite_allocation_logement_familiale_2, - integer_of_string("0"), - menage_3.personnes_a_charge) >= + if (list_length(list_filter(temp_eligibilite_allocation_logement_familiale_2, + menage_3.personnes_a_charge)) >= integer_of_string("1")): temp_eligibilite_allocation_logement_familiale_1 = True else: temp_eligibilite_allocation_logement_familiale_1 = dead_value raise EmptyError except EmptyError: - def temp_eligibilite_allocation_logement_familiale_4(acc_9:Integer, personne_a_charge_7:Any): - if eligibilite_commune_dot_condition_2_r823_4_1( - personne_a_charge_7): - return (acc_9 + - integer_of_string("1")) - else: - return acc_9 - if (list_fold_left(temp_eligibilite_allocation_logement_familiale_4, - integer_of_string("0"), - menage_3.personnes_a_charge) >= + def temp_eligibilite_allocation_logement_familiale_3(personne_a_charge_7:PersonneACharge): + return eligibilite_commune_dot_condition_2_r823_4_1( + personne_a_charge_7) + if (list_length(list_filter(temp_eligibilite_allocation_logement_familiale_3, + menage_3.personnes_a_charge)) >= integer_of_string("1")): temp_eligibilite_allocation_logement_familiale_1 = True else: @@ -19079,100 +19061,90 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili match_arg_542 = menage_3.situation_familiale if match_arg_542.code == SituationFamiliale_Code.Celibataire: _ = match_arg_542.value - temp_eligibilite_allocation_logement_familiale_5 = False + temp_eligibilite_allocation_logement_familiale_4 = False elif match_arg_542.code == SituationFamiliale_Code.Maries: date_mariage = match_arg_542.value - temp_eligibilite_allocation_logement_familiale_5 = (date_courante_14 <= + temp_eligibilite_allocation_logement_familiale_4 = (date_courante_14 <= (date_mariage + duree_l841_1_3)) elif match_arg_542.code == SituationFamiliale_Code.Pacses: _ = match_arg_542.value - temp_eligibilite_allocation_logement_familiale_5 = False + temp_eligibilite_allocation_logement_familiale_4 = False elif match_arg_542.code == SituationFamiliale_Code.Concubins: _ = match_arg_542.value - temp_eligibilite_allocation_logement_familiale_5 = False + temp_eligibilite_allocation_logement_familiale_4 = False elif match_arg_542.code == SituationFamiliale_Code.CelibataireSepareDeFait: _ = match_arg_542.value - temp_eligibilite_allocation_logement_familiale_5 = False + temp_eligibilite_allocation_logement_familiale_4 = False elif match_arg_542.code == SituationFamiliale_Code.ConcubinageDontSepareDeFait: _ = match_arg_542.value - temp_eligibilite_allocation_logement_familiale_5 = False - def temp_eligibilite_allocation_logement_familiale_6(acc_10:Integer, personne_a_charge_8:Any): + temp_eligibilite_allocation_logement_familiale_4 = False + def temp_eligibilite_allocation_logement_familiale_5(personne_a_charge_8:PersonneACharge): match_arg_543 = personne_a_charge_8 if match_arg_543.code == PersonneACharge_Code.EnfantACharge: enfant_6 = match_arg_543.value match_arg_544 = enfant_6.situation_garde_alternee if match_arg_544.code == SituationGardeAlternee_Code.PasDeGardeAlternee: _ = match_arg_544.value - temp_eligibilite_allocation_logement_familiale_7 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.EffectiveEtPermanente, + temp_eligibilite_allocation_logement_familiale_6 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.EffectiveEtPermanente, Unit()) elif match_arg_544.code == SituationGardeAlternee_Code.GardeAlterneeCoefficientPriseEnCharge: _ = match_arg_544.value - temp_eligibilite_allocation_logement_familiale_7 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.GardeAlterneePartageAllocations, + temp_eligibilite_allocation_logement_familiale_6 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.GardeAlterneePartageAllocations, Unit()) - temp_eligibilite_allocation_logement_familiale_8 = not prestations_familiales_dot_droit_ouvert( + return not prestations_familiales_dot_droit_ouvert( EnfantPrestationsFamiliales(identifiant = enfant_6.identifiant, obligation_scolaire = enfant_6.obligation_scolaire, remuneration_mensuelle = enfant_6.remuneration_mensuelle, date_de_naissance = enfant_6.date_de_naissance, - prise_en_charge = temp_eligibilite_allocation_logement_familiale_7, + prise_en_charge = temp_eligibilite_allocation_logement_familiale_6, a_deja_ouvert_droit_aux_allocations_familiales = enfant_6.a_deja_ouvert_droit_aux_allocations_familiales, beneficie_titre_personnel_aide_personnelle_logement = enfant_6.beneficie_titre_personnel_aide_personnelle_logement)) elif match_arg_543.code == PersonneACharge_Code.AutrePersonneACharge: _ = match_arg_543.value - temp_eligibilite_allocation_logement_familiale_8 = False - if temp_eligibilite_allocation_logement_familiale_8: - return (acc_10 + integer_of_string("1")) - else: - return acc_10 - if ((list_fold_left(temp_eligibilite_allocation_logement_familiale_6, - integer_of_string("0"), - menage_3.personnes_a_charge) == + return False + if ((list_length(list_filter(temp_eligibilite_allocation_logement_familiale_5, + menage_3.personnes_a_charge)) == integer_of_string("0")) and - temp_eligibilite_allocation_logement_familiale_5): + temp_eligibilite_allocation_logement_familiale_4): temp_eligibilite_allocation_logement_familiale_1 = True else: temp_eligibilite_allocation_logement_familiale_1 = dead_value raise EmptyError except EmptyError: - def temp_eligibilite_allocation_logement_familiale_9(acc_11:Integer, personne_a_charge_9:Any): + def temp_eligibilite_allocation_logement_familiale_7(personne_a_charge_9:PersonneACharge): match_arg_545 = personne_a_charge_9 if match_arg_545.code == PersonneACharge_Code.EnfantACharge: enfant_7 = match_arg_545.value match_arg_546 = enfant_7.situation_garde_alternee if match_arg_546.code == SituationGardeAlternee_Code.PasDeGardeAlternee: _ = match_arg_546.value - temp_eligibilite_allocation_logement_familiale_10 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.EffectiveEtPermanente, + temp_eligibilite_allocation_logement_familiale_8 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.EffectiveEtPermanente, Unit()) elif match_arg_546.code == SituationGardeAlternee_Code.GardeAlterneeCoefficientPriseEnCharge: _ = match_arg_546.value - temp_eligibilite_allocation_logement_familiale_10 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.GardeAlterneePartageAllocations, + temp_eligibilite_allocation_logement_familiale_8 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.GardeAlterneePartageAllocations, Unit()) - temp_eligibilite_allocation_logement_familiale_11 = prestations_familiales_dot_droit_ouvert( + return prestations_familiales_dot_droit_ouvert( EnfantPrestationsFamiliales(identifiant = enfant_7.identifiant, obligation_scolaire = enfant_7.obligation_scolaire, remuneration_mensuelle = enfant_7.remuneration_mensuelle, date_de_naissance = enfant_7.date_de_naissance, - prise_en_charge = temp_eligibilite_allocation_logement_familiale_10, + prise_en_charge = temp_eligibilite_allocation_logement_familiale_8, a_deja_ouvert_droit_aux_allocations_familiales = enfant_7.a_deja_ouvert_droit_aux_allocations_familiales, beneficie_titre_personnel_aide_personnelle_logement = enfant_7.beneficie_titre_personnel_aide_personnelle_logement)) elif match_arg_545.code == PersonneACharge_Code.AutrePersonneACharge: _ = match_arg_545.value - temp_eligibilite_allocation_logement_familiale_11 = False - if temp_eligibilite_allocation_logement_familiale_11: - return (acc_11 + integer_of_string("1")) - else: - return acc_11 - if (list_fold_left(temp_eligibilite_allocation_logement_familiale_9, - integer_of_string("0"), - menage_3.personnes_a_charge) == + return False + if (list_length(list_filter(temp_eligibilite_allocation_logement_familiale_7, + menage_3.personnes_a_charge)) == integer_of_string("1")): temp_eligibilite_allocation_logement_familiale_1 = True else: temp_eligibilite_allocation_logement_familiale_1 = dead_value raise EmptyError except EmptyError: - def temp_eligibilite_allocation_logement_familiale_12(acc_12:bool, prestation_1:Any): - return (acc_12 or ((prestation_1 == + def temp_eligibilite_allocation_logement_familiale_9(acc_2:bool, prestation_1:PrestationRecue): + return (acc_2 or ((prestation_1 == PrestationRecue(PrestationRecue_Code.AllocationsFamiliales, Unit())) or ((prestation_1 == PrestationRecue(PrestationRecue_Code.ComplementFamilial, @@ -19181,7 +19153,7 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili Unit())) or (prestation_1 == PrestationRecue(PrestationRecue_Code.AllocationSoutienEnfantHandicape, Unit())))))) - if list_fold_left(temp_eligibilite_allocation_logement_familiale_12, + if list_fold_left(temp_eligibilite_allocation_logement_familiale_9, False, menage_3.prestations_recues): temp_eligibilite_allocation_logement_familiale_1 = True else: @@ -19192,8 +19164,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_allocation_logement_familiale_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=403, start_column=11, - end_line=403, end_column=52, + start_line=404, start_column=11, + end_line=404, end_column=52, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -19234,9 +19206,9 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili else: raise EmptyError temp_eligibilite_l841_2_5 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=412, + start_line=413, start_column=10, - end_line=412, end_column=16, + end_line=413, end_column=16, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"]), [temp_eligibilite_l841_2_4, @@ -19260,8 +19232,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_l841_2_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=412, start_column=10, - end_line=412, end_column=16, + start_line=413, start_column=10, + end_line=413, end_column=16, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -19303,8 +19275,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_categorie_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=985, start_column=11, - end_line=985, end_column=31, + start_line=986, start_column=11, + end_line=986, end_column=31, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19317,8 +19289,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_ressources_menage_avec_arrondi_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=978, start_column=10, - end_line=978, end_column=22, + start_line=979, start_column=10, + end_line=979, end_column=22, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19353,8 +19325,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_situation_familiale_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=986, start_column=11, - end_line=986, end_column=41, + start_line=987, start_column=11, + end_line=987, end_column=41, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19369,9 +19341,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_75 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1506, + start_line=1532, start_column=42, - end_line=1506, + end_line=1532, end_column=77, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19385,9 +19357,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_76 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1505, + start_line=1531, start_column=38, - end_line=1505, + end_line=1531, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19410,9 +19382,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_77 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1501, + start_line=1527, start_column=16, - end_line=1504, + end_line=1530, end_column=39, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19426,9 +19398,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_78 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1496, + start_line=1522, start_column=26, - end_line=1496, + end_line=1522, end_column=45, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19442,9 +19414,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_79 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1499, + start_line=1525, start_column=25, - end_line=1499, + end_line=1525, end_column=34, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19458,9 +19430,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_80 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1498, + start_line=1524, start_column=15, - end_line=1498, + end_line=1524, end_column=80, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19474,9 +19446,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_81 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1495, + start_line=1521, start_column=36, - end_line=1495, + end_line=1521, end_column=65, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19490,9 +19462,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_82 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1489, + start_line=1515, start_column=20, - end_line=1489, + end_line=1515, end_column=24, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19506,9 +19478,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_83 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1491, + start_line=1517, start_column=46, - end_line=1491, + end_line=1517, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19522,9 +19494,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_84 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1488, + start_line=1514, start_column=41, - end_line=1488, + end_line=1514, end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19538,9 +19510,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_85 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1490, + start_line=1516, start_column=29, - end_line=1490, + end_line=1516, end_column=42, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19554,9 +19526,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_86 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1494, + start_line=1520, start_column=15, - end_line=1494, + end_line=1520, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19570,9 +19542,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_87 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1487, + start_line=1513, start_column=43, - end_line=1487, + end_line=1513, end_column=60, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19586,9 +19558,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_88 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1492, + start_line=1518, start_column=31, - end_line=1492, + end_line=1518, end_column=55, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19602,9 +19574,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_89 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1506, + start_line=1532, start_column=42, - end_line=1506, + end_line=1532, end_column=77, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19618,9 +19590,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_90 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1505, + start_line=1531, start_column=38, - end_line=1505, + end_line=1531, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19643,9 +19615,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_91 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1501, + start_line=1527, start_column=16, - end_line=1504, + end_line=1530, end_column=39, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19659,9 +19631,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_92 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1496, + start_line=1522, start_column=26, - end_line=1496, + end_line=1522, end_column=45, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19675,9 +19647,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_93 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1499, + start_line=1525, start_column=25, - end_line=1499, + end_line=1525, end_column=34, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19691,9 +19663,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_94 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1498, + start_line=1524, start_column=15, - end_line=1498, + end_line=1524, end_column=80, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19707,9 +19679,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_95 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1495, + start_line=1521, start_column=36, - end_line=1495, + end_line=1521, end_column=65, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19723,9 +19695,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_96 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1489, + start_line=1515, start_column=20, - end_line=1489, + end_line=1515, end_column=24, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19739,9 +19711,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_97 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1491, + start_line=1517, start_column=46, - end_line=1491, + end_line=1517, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19755,9 +19727,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_98 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1488, + start_line=1514, start_column=41, - end_line=1488, + end_line=1514, end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19771,9 +19743,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_99 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1490, + start_line=1516, start_column=29, - end_line=1490, + end_line=1516, end_column=42, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19787,9 +19759,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_100 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1494, + start_line=1520, start_column=15, - end_line=1494, + end_line=1520, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19803,9 +19775,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_101 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1487, + start_line=1513, start_column=43, - end_line=1487, + end_line=1513, end_column=60, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19819,9 +19791,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_102 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1492, + start_line=1518, start_column=31, - end_line=1492, + end_line=1518, end_column=55, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19867,10 +19839,10 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_104 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1549, - start_column=51, - end_line=1549, - end_column=102, + start_line=1584, + start_column=13, + end_line=1584, + end_column=64, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", "Chapitre III : Modalités de liquidation et de versement", @@ -19883,9 +19855,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_105 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1546, + start_line=1580, start_column=29, - end_line=1546, + end_line=1580, end_column=42, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19899,9 +19871,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_106 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1545, + start_line=1579, start_column=20, - end_line=1545, + end_line=1579, end_column=24, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19915,9 +19887,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_107 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1547, + start_line=1581, start_column=46, - end_line=1547, + end_line=1581, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19931,9 +19903,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_108 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1544, + start_line=1578, start_column=41, - end_line=1544, + end_line=1578, end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19947,9 +19919,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_109 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1543, + start_line=1577, start_column=43, - end_line=1543, + end_line=1577, end_column=60, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19963,9 +19935,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_110 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1548, + start_line=1582, start_column=25, - end_line=1548, + end_line=1582, end_column=50, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19979,9 +19951,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_111 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1551, + start_line=1586, start_column=37, - end_line=1551, + end_line=1586, end_column=74, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -19995,9 +19967,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_112 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1550, + start_line=1585, start_column=35, - end_line=1550, + end_line=1585, end_column=55, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20011,10 +19983,10 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_113 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1549, - start_column=51, - end_line=1549, - end_column=102, + start_line=1584, + start_column=13, + end_line=1584, + end_column=64, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", "Chapitre III : Modalités de liquidation et de versement", @@ -20027,9 +19999,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_114 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1546, + start_line=1580, start_column=29, - end_line=1546, + end_line=1580, end_column=42, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20043,9 +20015,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_115 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1545, + start_line=1579, start_column=20, - end_line=1545, + end_line=1579, end_column=24, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20059,9 +20031,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_116 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1547, + start_line=1581, start_column=46, - end_line=1547, + end_line=1581, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20075,9 +20047,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_117 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1544, + start_line=1578, start_column=41, - end_line=1544, + end_line=1578, end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20091,9 +20063,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_118 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1543, + start_line=1577, start_column=43, - end_line=1543, + end_line=1577, end_column=60, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20107,9 +20079,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_119 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1548, + start_line=1582, start_column=25, - end_line=1548, + end_line=1582, end_column=50, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20123,9 +20095,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_120 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1551, + start_line=1586, start_column=37, - end_line=1551, + end_line=1586, end_column=74, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20139,9 +20111,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_121 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1550, + start_line=1585, start_column=35, - end_line=1550, + end_line=1585, end_column=55, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20177,9 +20149,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_122 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1571, + start_line=1610, start_column=28, - end_line=1571, + end_line=1610, end_column=52, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20193,9 +20165,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_123 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1566, + start_line=1604, start_column=40, - end_line=1566, + end_line=1604, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20209,9 +20181,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_124 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1570, + start_line=1609, start_column=37, - end_line=1570, + end_line=1609, end_column=70, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20225,10 +20197,10 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_125 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1569, - start_column=56, - end_line=1569, - end_column=108, + start_line=1608, + start_column=14, + end_line=1608, + end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", "Chapitre III : Modalités de liquidation et de versement", @@ -20241,9 +20213,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_126 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1567, + start_line=1605, start_column=38, - end_line=1567, + end_line=1605, end_column=79, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20257,9 +20229,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_127 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1568, + start_line=1606, start_column=36, - end_line=1568, + end_line=1606, end_column=68, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20273,9 +20245,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_128 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1572, + start_line=1611, start_column=40, - end_line=1572, + end_line=1611, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20289,9 +20261,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_129 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1565, + start_line=1603, start_column=38, - end_line=1565, + end_line=1603, end_column=72, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20305,9 +20277,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_130 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1563, + start_line=1601, start_column=30, - end_line=1563, + end_line=1601, end_column=43, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20321,9 +20293,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_131 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1562, + start_line=1600, start_column=21, - end_line=1562, + end_line=1600, end_column=25, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20337,9 +20309,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_132 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1564, + start_line=1602, start_column=47, - end_line=1564, + end_line=1602, end_column=77, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20353,9 +20325,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_133 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1561, + start_line=1599, start_column=42, - end_line=1561, + end_line=1599, end_column=67, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20369,9 +20341,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_134 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1560, + start_line=1598, start_column=44, - end_line=1560, + end_line=1598, end_column=61, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20385,9 +20357,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_135 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1571, + start_line=1610, start_column=28, - end_line=1571, + end_line=1610, end_column=52, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20401,9 +20373,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_136 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1566, + start_line=1604, start_column=40, - end_line=1566, + end_line=1604, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20417,9 +20389,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_137 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1570, + start_line=1609, start_column=37, - end_line=1570, + end_line=1609, end_column=70, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20433,10 +20405,10 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_138 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1569, - start_column=56, - end_line=1569, - end_column=108, + start_line=1608, + start_column=14, + end_line=1608, + end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", "Chapitre III : Modalités de liquidation et de versement", @@ -20449,9 +20421,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_139 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1567, + start_line=1605, start_column=38, - end_line=1567, + end_line=1605, end_column=79, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20465,9 +20437,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_140 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1568, + start_line=1606, start_column=36, - end_line=1568, + end_line=1606, end_column=68, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20481,9 +20453,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_141 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1572, + start_line=1611, start_column=40, - end_line=1572, + end_line=1611, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20497,9 +20469,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_142 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1565, + start_line=1603, start_column=38, - end_line=1565, + end_line=1603, end_column=72, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20513,9 +20485,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_143 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1563, + start_line=1601, start_column=30, - end_line=1563, + end_line=1601, end_column=43, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20529,9 +20501,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_144 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1562, + start_line=1600, start_column=21, - end_line=1562, + end_line=1600, end_column=25, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20545,9 +20517,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_145 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1564, + start_line=1602, start_column=47, - end_line=1564, + end_line=1602, end_column=77, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20561,9 +20533,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_146 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1561, + start_line=1599, start_column=42, - end_line=1561, + end_line=1599, end_column=67, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20577,9 +20549,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_147 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1560, + start_line=1598, start_column=44, - end_line=1560, + end_line=1598, end_column=61, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20623,9 +20595,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_148 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1534, + start_line=1564, start_column=42, - end_line=1534, + end_line=1564, end_column=77, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20639,9 +20611,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_149 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1533, + start_line=1563, start_column=38, - end_line=1533, + end_line=1563, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20664,9 +20636,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_150 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1529, + start_line=1559, start_column=16, - end_line=1532, + end_line=1562, end_column=39, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20680,9 +20652,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_151 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1524, + start_line=1554, start_column=26, - end_line=1524, + end_line=1554, end_column=45, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20696,9 +20668,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_152 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1527, + start_line=1557, start_column=25, - end_line=1527, + end_line=1557, end_column=34, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20712,9 +20684,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_153 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1526, + start_line=1556, start_column=15, - end_line=1526, + end_line=1556, end_column=80, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20728,9 +20700,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_154 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1523, + start_line=1553, start_column=36, - end_line=1523, + end_line=1553, end_column=65, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20744,9 +20716,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_155 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1517, + start_line=1547, start_column=20, - end_line=1517, + end_line=1547, end_column=24, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20760,9 +20732,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_156 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1519, + start_line=1549, start_column=46, - end_line=1519, + end_line=1549, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20776,9 +20748,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_157 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1516, + start_line=1546, start_column=41, - end_line=1516, + end_line=1546, end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20792,9 +20764,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_158 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1518, + start_line=1548, start_column=29, - end_line=1518, + end_line=1548, end_column=42, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20808,9 +20780,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_159 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1522, + start_line=1552, start_column=15, - end_line=1522, + end_line=1552, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20824,9 +20796,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_160 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1515, + start_line=1545, start_column=43, - end_line=1515, + end_line=1545, end_column=60, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20840,9 +20812,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_161 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1520, + start_line=1550, start_column=31, - end_line=1520, + end_line=1550, end_column=55, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20856,9 +20828,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_162 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1534, + start_line=1564, start_column=42, - end_line=1534, + end_line=1564, end_column=77, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20872,9 +20844,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_163 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1533, + start_line=1563, start_column=38, - end_line=1533, + end_line=1563, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20897,9 +20869,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_164 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1529, + start_line=1559, start_column=16, - end_line=1532, + end_line=1562, end_column=39, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20913,9 +20885,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_165 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1524, + start_line=1554, start_column=26, - end_line=1524, + end_line=1554, end_column=45, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20929,9 +20901,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_166 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1527, + start_line=1557, start_column=25, - end_line=1527, + end_line=1557, end_column=34, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20945,9 +20917,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_167 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1526, + start_line=1556, start_column=15, - end_line=1526, + end_line=1556, end_column=80, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20961,9 +20933,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_168 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1523, + start_line=1553, start_column=36, - end_line=1523, + end_line=1553, end_column=65, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20977,9 +20949,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_169 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1517, + start_line=1547, start_column=20, - end_line=1517, + end_line=1547, end_column=24, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -20993,9 +20965,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_170 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1519, + start_line=1549, start_column=46, - end_line=1519, + end_line=1549, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21009,9 +20981,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_171 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1516, + start_line=1546, start_column=41, - end_line=1516, + end_line=1546, end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21025,9 +20997,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_172 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1518, + start_line=1548, start_column=29, - end_line=1518, + end_line=1548, end_column=42, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21041,9 +21013,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_173 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1522, + start_line=1552, start_column=15, - end_line=1522, + end_line=1552, end_column=69, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21057,9 +21029,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_174 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1515, + start_line=1545, start_column=43, - end_line=1515, + end_line=1545, end_column=60, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21073,9 +21045,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_175 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1520, + start_line=1550, start_column=31, - end_line=1520, + end_line=1550, end_column=55, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21121,9 +21093,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_176 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1592, + start_line=1637, start_column=28, - end_line=1592, + end_line=1637, end_column=52, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21137,9 +21109,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_177 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1587, + start_line=1631, start_column=40, - end_line=1587, + end_line=1631, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21153,9 +21125,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_178 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1591, + start_line=1636, start_column=37, - end_line=1591, + end_line=1636, end_column=70, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21169,10 +21141,10 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_179 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1590, - start_column=56, - end_line=1590, - end_column=108, + start_line=1635, + start_column=14, + end_line=1635, + end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", "Chapitre III : Modalités de liquidation et de versement", @@ -21185,9 +21157,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_180 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1588, + start_line=1632, start_column=38, - end_line=1588, + end_line=1632, end_column=79, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21201,9 +21173,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_181 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1589, + start_line=1633, start_column=36, - end_line=1589, + end_line=1633, end_column=68, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21217,9 +21189,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_182 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1593, + start_line=1638, start_column=40, - end_line=1593, + end_line=1638, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21233,9 +21205,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_183 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1586, + start_line=1630, start_column=38, - end_line=1586, + end_line=1630, end_column=72, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21249,9 +21221,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_184 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1584, + start_line=1628, start_column=30, - end_line=1584, + end_line=1628, end_column=43, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21265,9 +21237,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_185 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1583, + start_line=1627, start_column=21, - end_line=1583, + end_line=1627, end_column=25, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21281,9 +21253,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_186 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1585, + start_line=1629, start_column=47, - end_line=1585, + end_line=1629, end_column=77, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21297,9 +21269,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_187 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1582, + start_line=1626, start_column=42, - end_line=1582, + end_line=1626, end_column=67, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21313,9 +21285,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_188 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1581, + start_line=1625, start_column=44, - end_line=1581, + end_line=1625, end_column=61, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21329,9 +21301,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_189 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1592, + start_line=1637, start_column=28, - end_line=1592, + end_line=1637, end_column=52, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21345,9 +21317,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_190 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1587, + start_line=1631, start_column=40, - end_line=1587, + end_line=1631, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21361,9 +21333,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_191 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1591, + start_line=1636, start_column=37, - end_line=1591, + end_line=1636, end_column=70, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21377,10 +21349,10 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_192 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1590, - start_column=56, - end_line=1590, - end_column=108, + start_line=1635, + start_column=14, + end_line=1635, + end_column=66, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", "Chapitre III : Modalités de liquidation et de versement", @@ -21393,9 +21365,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_193 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1588, + start_line=1632, start_column=38, - end_line=1588, + end_line=1632, end_column=79, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21409,9 +21381,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_194 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1589, + start_line=1633, start_column=36, - end_line=1589, + end_line=1633, end_column=68, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21425,9 +21397,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_195 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1593, + start_line=1638, start_column=40, - end_line=1593, + end_line=1638, end_column=76, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21441,9 +21413,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_196 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1586, + start_line=1630, start_column=38, - end_line=1586, + end_line=1630, end_column=72, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21457,9 +21429,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_197 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1584, + start_line=1628, start_column=30, - end_line=1584, + end_line=1628, end_column=43, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21473,9 +21445,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_198 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1583, + start_line=1627, start_column=21, - end_line=1583, + end_line=1627, end_column=25, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21489,9 +21461,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_199 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1585, + start_line=1629, start_column=47, - end_line=1585, + end_line=1629, end_column=77, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21505,9 +21477,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_200 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1582, + start_line=1626, start_column=42, - end_line=1582, + end_line=1626, end_column=67, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21521,9 +21493,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_201 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=1581, + start_line=1625, start_column=44, - end_line=1581, + end_line=1625, end_column=61, law_headings=["Article D823-9", "Section 1 : Calcul, liquidation et versement des aides", @@ -21563,8 +21535,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_sous_calcul_traitement_103 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=988, start_column=11, - end_line=988, end_column=33, + start_line=989, start_column=11, + end_line=989, end_column=33, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -21577,10 +21549,10 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog param_43) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=991, - start_column=10, - end_line=991, - end_column=32, + start_line=992, + start_column=12, + end_line=992, + end_column=34, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -21588,8 +21560,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_traitement_aide_finale_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=991, start_column=10, - end_line=991, end_column=32, + start_line=992, start_column=12, + end_line=992, end_column=34, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -21600,8 +21572,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_aide_finale_formule_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=990, start_column=10, - end_line=990, end_column=29, + start_line=991, start_column=12, + end_line=991, end_column=31, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -21620,8 +21592,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_allocation_logement_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1069, - start_column=14, end_line=1069, + start_line=1070, + start_column=14, end_line=1070, end_column=59, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21631,8 +21603,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_allocation_logement_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1061, - start_column=14, end_line=1061, + start_line=1062, + start_column=14, end_line=1062, end_column=52, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21642,8 +21614,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_allocation_logement_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1065, - start_column=14, end_line=1065, + start_line=1066, + start_column=14, end_line=1066, end_column=55, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21653,8 +21625,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_allocation_logement_dot_beneficie_aide_personnalisee_logement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", - start_line=1046, start_column=5, - end_line=1046, end_column=74, + start_line=1049, start_column=5, + end_line=1049, end_column=74, law_headings=["Article L841-2", "Chapitre Ier : Champ d'application", "Titre IV : Allocations de logement", @@ -21674,8 +21646,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_aide_personnalisee_logement_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1059, - start_column=14, end_line=1059, + start_line=1060, + start_column=14, end_line=1060, end_column=60, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21685,8 +21657,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_aide_personnalisee_logement_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1063, - start_column=14, end_line=1063, + start_line=1064, + start_column=14, end_line=1064, end_column=63, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21696,8 +21668,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_aide_personnalisee_logement_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1067, - start_column=14, end_line=1067, + start_line=1068, + start_column=14, end_line=1068, end_column=67, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21714,8 +21686,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_mode_occupation = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1073, - start_column=14, end_line=1073, + start_line=1074, + start_column=14, end_line=1074, end_column=56, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21725,8 +21697,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_ressources_menage_sans_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1077, - start_column=14, end_line=1077, + start_line=1078, + start_column=14, end_line=1078, end_column=58, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21736,8 +21708,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_situation_familiale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1081, - start_column=14, end_line=1081, + start_line=1082, + start_column=14, end_line=1082, end_column=60, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21747,8 +21719,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1088, - start_column=14, end_line=1088, + start_line=1089, + start_column=14, end_line=1089, end_column=66, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21758,8 +21730,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1092, - start_column=14, end_line=1092, + start_line=1093, + start_column=14, end_line=1093, end_column=45, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21769,8 +21741,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1096, - start_column=14, end_line=1096, + start_line=1097, + start_column=14, end_line=1097, end_column=54, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21793,8 +21765,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_type_aide_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", - start_line=1062, - start_column=14, end_line=1062, + start_line=1065, + start_column=14, end_line=1065, end_column=50, law_headings=["Article L841-2", "Chapitre Ier : Champ d'application", @@ -21817,8 +21789,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_mode_occupation = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1071, - start_column=14, end_line=1071, + start_line=1072, + start_column=14, end_line=1072, end_column=64, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21829,8 +21801,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_type_aide = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", - start_line=1060, - start_column=14, end_line=1060, + start_line=1063, + start_column=14, end_line=1063, end_column=58, law_headings=["Article L841-2", "Chapitre Ier : Champ d'application", @@ -21844,8 +21816,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_ressources_menage_sans_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1075, - start_column=14, end_line=1075, + start_line=1076, + start_column=14, end_line=1076, end_column=66, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21855,8 +21827,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_situation_familiale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1079, - start_column=14, end_line=1079, + start_line=1080, + start_column=14, end_line=1080, end_column=68, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21866,8 +21838,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1084, start_column=5, - end_line=1084, end_column=65, + start_line=1085, start_column=5, + end_line=1085, end_column=65, law_headings=["Calculette globale", "Prologue : aides au logement"])) calcul_aide_personnalisee_logement_dot_nombre_personnes_a_charge = temp_calcul_aide_personnalisee_logement_dot_nombre_personnes_a_charge @@ -21876,8 +21848,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1090, - start_column=14, end_line=1090, + start_line=1091, + start_column=14, end_line=1091, end_column=53, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21887,8 +21859,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1094, - start_column=14, end_line=1094, + start_line=1095, + start_column=14, end_line=1095, end_column=62, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -21907,9 +21879,9 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_coefficents_enfants_garde_alternee_pris_en_compte_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1055, - start_column=10, end_line=1055, - end_column=59, + start_line=1056, + start_column=12, end_line=1056, + end_column=61, law_headings=["Calculette globale", "Prologue : aides au logement"])) coefficents_enfants_garde_alternee_pris_en_compte_3 = temp_coefficents_enfants_garde_alternee_pris_en_compte_5 @@ -21929,9 +21901,9 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1052, - start_column=10, end_line=1052, - end_column=21, + start_line=1053, + start_column=12, end_line=1053, + end_column=23, law_headings=["Calculette globale", "Prologue : aides au logement"])) eligibilite_2 = temp_eligibilite_3 @@ -21971,18 +21943,18 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides param_44) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1054, - start_column=10, - end_line=1054, - end_column=32, + start_line=1055, + start_column=12, + end_line=1055, + end_column=34, law_headings=["Calculette globale", "Prologue : aides au logement"])) except EmptyError: temp_traitement_aide_finale_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1054, - start_column=10, end_line=1054, - end_column=32, + start_line=1055, + start_column=12, end_line=1055, + end_column=34, law_headings=["Calculette globale", "Prologue : aides au logement"])) traitement_aide_finale_3 = temp_traitement_aide_finale_4 @@ -22017,9 +21989,9 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_aide_finale_formule_9 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1053, - start_column=10, end_line=1053, - end_column=29, + start_line=1054, + start_column=12, end_line=1054, + end_column=31, law_headings=["Calculette globale", "Prologue : aides au logement"])) aide_finale_formule_8 = temp_aide_finale_formule_9 @@ -22034,7 +22006,7 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar date_courante_17 = calculette_aides_au_logement_garde_alternee_in.date_courante_in ressources_menage_prises_en_compte_1 = calculette_aides_au_logement_garde_alternee_in.ressources_menage_prises_en_compte_in try: - def temp_menage_sans_enfants_garde_alternee(personne_a_charge_10:Any): + def temp_menage_sans_enfants_garde_alternee(personne_a_charge_10:PersonneACharge): match_arg_559 = personne_a_charge_10 if match_arg_559.code == PersonneACharge_Code.EnfantACharge: enfant_8 = match_arg_559.value @@ -22059,8 +22031,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_menage_sans_enfants_garde_alternee_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1118, - start_column=11, end_line=1118, + start_line=1119, + start_column=11, end_line=1119, end_column=45, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -22070,8 +22042,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1129, - start_column=14, end_line=1129, + start_line=1130, + start_column=14, end_line=1130, end_column=31, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -22081,8 +22053,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1131, - start_column=14, end_line=1131, + start_line=1132, + start_column=14, end_line=1132, end_column=34, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -22092,8 +22064,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1133, - start_column=14, end_line=1133, + start_line=1134, + start_column=14, end_line=1134, end_column=38, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -22103,8 +22075,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_dot_ressources_menage_prises_en_compte = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1135, - start_column=14, end_line=1135, + start_line=1136, + start_column=14, end_line=1136, end_column=59, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -22122,8 +22094,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_sans_garde_alternee_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1137, - start_column=14, end_line=1137, + start_line=1138, + start_column=14, end_line=1138, end_column=51, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -22133,8 +22105,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_sans_garde_alternee_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1139, - start_column=14, end_line=1139, + start_line=1140, + start_column=14, end_line=1140, end_column=54, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -22144,8 +22116,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_sans_garde_alternee_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1141, - start_column=14, end_line=1141, + start_line=1142, + start_column=14, end_line=1142, end_column=58, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -22155,8 +22127,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_sans_garde_alternee_dot_ressources_menage_prises_en_compte = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1144, start_column=5, - end_line=1144, end_column=70, + start_line=1145, start_column=5, + end_line=1145, end_column=70, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) calculette_sans_garde_alternee_dot_ressources_menage_prises_en_compte = temp_calculette_sans_garde_alternee_dot_ressources_menage_prises_en_compte @@ -22173,9 +22145,9 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_eligibilite_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1125, - start_column=10, end_line=1125, - end_column=21, + start_line=1126, + start_column=12, end_line=1126, + end_column=23, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) eligibilite_3 = temp_eligibilite_4 @@ -22184,8 +22156,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_coefficents_enfants_garde_alternee_pris_en_compte_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1119, - start_column=11, end_line=1119, + start_line=1120, + start_column=11, end_line=1120, end_column=60, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -22195,21 +22167,21 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar integer_of_string("0")): temp_aide_finale = money_of_cents_string("0") else: - def temp_aide_finale_1(acc_13:Decimal, coeff_1:Any): - return (acc_13 + coeff_1) + def temp_aide_finale_1(sum1_3:Decimal, sum2_3:Decimal): + return (sum1_3 + sum2_3) temp_aide_finale = ((calculette_dot_aide_finale_formule - calculette_sans_garde_alternee_dot_aide_finale_formule) * - (list_fold_left(temp_aide_finale_1, decimal_of_string("0."), - coefficents_enfants_garde_alternee_pris_en_compte_4) / + (list_reduce(temp_aide_finale_1, decimal_of_string("0."), + coefficents_enfants_garde_alternee_pris_en_compte_4) / decimal_of_integer(list_length(coefficents_enfants_garde_alternee_pris_en_compte_4)))) temp_aide_finale_2 = calculette_dot_traitement_aide_finale((calculette_sans_garde_alternee_dot_aide_finale_formule + temp_aide_finale)) except EmptyError: temp_aide_finale_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1126, - start_column=10, end_line=1126, - end_column=21, + start_line=1127, + start_column=12, end_line=1127, + end_column=23, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) aide_finale = temp_aide_finale_2 diff --git a/french_law/python/src/allocations_familiales.py b/french_law/python/src/allocations_familiales.py index ad2308c0..fdbe5703 100644 --- a/french_law/python/src/allocations_familiales.py +++ b/french_law/python/src/allocations_familiales.py @@ -503,8 +503,8 @@ def allocation_familiales_avril2008(allocation_familiales_avril2008_in:Allocatio except EmptyError: temp_age_minimum_alinea_1_l521_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", - start_line=76, start_column=10, - end_line=76, end_column=37, + start_line=76, start_column=12, + end_line=76, end_column=39, law_headings=["Allocations familiales", "Champs d'applications", "Prologue"])) @@ -514,27 +514,28 @@ def allocation_familiales_avril2008(allocation_familiales_avril2008_in:Allocatio def enfant_le_plus_age(enfant_le_plus_age_in:EnfantLePlusAgeIn): enfants = enfant_le_plus_age_in.enfants_in try: - def temp_le_plus_age(acc:Any, item:Any): - if (acc.date_de_naissance < item.date_de_naissance): - return acc + def temp_le_plus_age(potentiel_plus_age_1:Enfant, potentiel_plus_age_2:Enfant): + if (potentiel_plus_age_1.date_de_naissance < + potentiel_plus_age_2.date_de_naissance): + return potentiel_plus_age_1 else: - return item - temp_le_plus_age_1 = list_fold_left(temp_le_plus_age, - Enfant(identifiant = integer_of_string("-1"), - obligation_scolaire = SituationObligationScolaire(SituationObligationScolaire_Code.Pendant, - Unit()), - remuneration_mensuelle = money_of_cents_string("0"), - date_de_naissance = date_of_numbers(2999,12,31), - prise_en_charge = PriseEnCharge(PriseEnCharge_Code.EffectiveEtPermanente, - Unit()), - a_deja_ouvert_droit_aux_allocations_familiales = False, - beneficie_titre_personnel_aide_personnelle_logement = False), - enfants) + return potentiel_plus_age_2 + temp_le_plus_age_1 = list_reduce(temp_le_plus_age, + Enfant(identifiant = integer_of_string("-1"), + obligation_scolaire = SituationObligationScolaire(SituationObligationScolaire_Code.Pendant, + Unit()), + remuneration_mensuelle = money_of_cents_string("0"), + date_de_naissance = date_of_numbers(2999,12,31), + prise_en_charge = PriseEnCharge(PriseEnCharge_Code.EffectiveEtPermanente, + Unit()), + a_deja_ouvert_droit_aux_allocations_familiales = False, + beneficie_titre_personnel_aide_personnelle_logement = False), + enfants) except EmptyError: temp_le_plus_age_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", - start_line=80, start_column=10, - end_line=80, end_column=21, + start_line=80, start_column=12, + end_line=80, end_column=23, law_headings=["Allocations familiales", "Champs d'applications", "Prologue"])) @@ -685,8 +686,8 @@ def smic(smic_in:SmicIn): else: raise EmptyError temp_brut_horaire_12 = handle_default(SourcePosition(filename="examples/allocations_familiales/../smic/smic.catala_fr", - start_line=11, start_column=10, - end_line=11, end_column=22, + start_line=11, start_column=12, + end_line=11, end_column=24, law_headings=["Prologue", "Montant du salaire minimum de croissance"]), [temp_brut_horaire_11, temp_brut_horaire_10, @@ -703,8 +704,8 @@ def smic(smic_in:SmicIn): except EmptyError: temp_brut_horaire_12 = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/../smic/smic.catala_fr", - start_line=11, start_column=10, - end_line=11, end_column=22, + start_line=11, start_column=12, + end_line=11, end_column=24, law_headings=["Prologue", "Montant du salaire minimum de croissance"])) brut_horaire = temp_brut_horaire_12 @@ -746,8 +747,8 @@ def base_mensuelle_allocations_familiales(base_mensuelle_allocations_familiales_ else: raise EmptyError temp_montant_6 = handle_default(SourcePosition(filename="examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr", - start_line=6, start_column=10, - end_line=6, end_column=17, + start_line=6, start_column=12, + end_line=6, end_column=19, law_headings=["Montant de la base mensuelle des allocations familiales"]), [temp_montant_5, temp_montant_4, temp_montant_3, temp_montant_2], temp_montant_1, @@ -755,8 +756,8 @@ def base_mensuelle_allocations_familiales(base_mensuelle_allocations_familiales_ except EmptyError: temp_montant_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr", - start_line=6, start_column=10, - end_line=6, end_column=17, + start_line=6, start_column=12, + end_line=6, end_column=19, law_headings=["Montant de la base mensuelle des allocations familiales"])) montant = temp_montant_6 return BaseMensuelleAllocationsFamiliales(montant = montant) @@ -770,8 +771,8 @@ def prestations_familiales(prestations_familiales_in:PrestationsFamilialesIn): except EmptyError: temp_age_l512_3_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", - start_line=60, start_column=10, - end_line=60, end_column=22, + start_line=60, start_column=12, + end_line=60, end_column=24, law_headings=["Prestations familiales", "Champs d'applications", "Prologue"])) @@ -822,8 +823,8 @@ def prestations_familiales(prestations_familiales_in:PrestationsFamilialesIn): except EmptyError: temp_regime_outre_mer_l751_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", - start_line=61, start_column=10, - end_line=61, end_column=33, + start_line=61, start_column=12, + end_line=61, end_column=35, law_headings=["Prestations familiales", "Champs d'applications", "Prologue"])) @@ -895,17 +896,17 @@ def prestations_familiales(prestations_familiales_in:PrestationsFamilialesIn): except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", start_line=58, - start_column=10, + start_column=12, end_line=58, - end_column=29, + end_column=31, law_headings=["Prestations familiales", "Champs d'applications", "Prologue"])) except EmptyError: temp_conditions_hors_age = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", - start_line=58, start_column=10, - end_line=58, end_column=29, + start_line=58, start_column=12, + end_line=58, end_column=31, law_headings=["Prestations familiales", "Champs d'applications", "Prologue"])) @@ -970,17 +971,17 @@ def prestations_familiales(prestations_familiales_in:PrestationsFamilialesIn): except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", start_line=57, - start_column=10, + start_column=12, end_line=57, - end_column=22, + end_column=24, law_headings=["Prestations familiales", "Champs d'applications", "Prologue"])) except EmptyError: temp_droit_ouvert = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", - start_line=57, start_column=10, - end_line=57, end_column=22, + start_line=57, start_column=12, + end_line=57, end_column=24, law_headings=["Prestations familiales", "Champs d'applications", "Prologue"])) @@ -1411,7 +1412,7 @@ def allocations_familiales(allocations_familiales_in:AllocationsFamilialesIn): "Prologue"])) age_minimum_alinea_1_l521_3_1 = temp_age_minimum_alinea_1_l521_3_1 try: - def temp_enfants_a_charge_droit_ouvert_prestation_familiale(enfant:Any): + def temp_enfants_a_charge_droit_ouvert_prestation_familiale(enfant:Enfant): return prestations_familiales_dot_droit_ouvert(enfant) temp_enfants_a_charge_droit_ouvert_prestation_familiale_1 = list_filter(temp_enfants_a_charge_droit_ouvert_prestation_familiale, enfants_a_charge) @@ -1846,21 +1847,23 @@ def allocations_familiales(allocations_familiales_in:AllocationsFamilialesIn): "Prologue"])) nombre_total_enfants = temp_nombre_total_enfants try: - def temp_nombre_moyen_enfants(acc_1:Decimal, enfant_1:Any): + def temp_nombre_moyen_enfants(enfant_1:Enfant): match_arg_16 = prise_en_compte(enfant_1) if match_arg_16.code == PriseEnCompte_Code.Complete: _ = match_arg_16.value - temp_nombre_moyen_enfants_1 = decimal_of_string("1.") + return decimal_of_string("1.") elif match_arg_16.code == PriseEnCompte_Code.Partagee: _ = match_arg_16.value - temp_nombre_moyen_enfants_1 = decimal_of_string("0.5") + return decimal_of_string("0.5") elif match_arg_16.code == PriseEnCompte_Code.Zero: _ = match_arg_16.value - temp_nombre_moyen_enfants_1 = decimal_of_string("0.") - return (acc_1 + temp_nombre_moyen_enfants_1) - temp_nombre_moyen_enfants_2 = list_fold_left(temp_nombre_moyen_enfants, - decimal_of_string("0."), - enfants_a_charge_droit_ouvert_prestation_familiale) + return decimal_of_string("0.") + def temp_nombre_moyen_enfants_1(sum1:Decimal, sum2:Decimal): + return (sum1 + sum2) + temp_nombre_moyen_enfants_2 = list_reduce(temp_nombre_moyen_enfants_1, + decimal_of_string("0."), + list_map(temp_nombre_moyen_enfants, + enfants_a_charge_droit_ouvert_prestation_familiale)) except EmptyError: temp_nombre_moyen_enfants_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", @@ -2637,15 +2640,11 @@ def allocations_familiales(allocations_familiales_in:AllocationsFamilialesIn): "Prologue"])) montant_initial_metropole_majoration = temp_montant_initial_metropole_majoration try: - def temp_montant_verse_forfaitaire(acc_2:Integer, enfant_2:Any): - if droit_ouvert_forfaitaire(enfant_2): - return (acc_2 + integer_of_string("1")) - else: - return acc_2 + def temp_montant_verse_forfaitaire(enfant_2:Enfant): + return droit_ouvert_forfaitaire(enfant_2) temp_montant_verse_forfaitaire_1 = (montant_verse_forfaitaire_par_enfant * - decimal_of_integer(list_fold_left(temp_montant_verse_forfaitaire, - integer_of_string("0"), - enfants_a_charge))) + decimal_of_integer(list_length(list_filter(temp_montant_verse_forfaitaire, + enfants_a_charge)))) except EmptyError: temp_montant_verse_forfaitaire_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", @@ -2872,23 +2871,25 @@ def allocations_familiales(allocations_familiales_in:AllocationsFamilialesIn): montant_verse_base = temp_montant_verse_base try: if droit_ouvert_base: - def temp_montant_verse_majoration(acc_3:Money, enfant_3:Any): - return (acc_3 + - montant_avec_garde_alternee_majoration(enfant_3)) - temp_montant_verse_majoration_1 = list_fold_left(temp_montant_verse_majoration, - money_of_cents_string("0"), - enfants_a_charge) + def temp_montant_verse_majoration(enfant_3:Enfant): + return montant_avec_garde_alternee_majoration(enfant_3) + def temp_montant_verse_majoration_1(sum1_1:Money, sum2_1:Money): + return (sum1_1 + sum2_1) + temp_montant_verse_majoration_2 = list_reduce(temp_montant_verse_majoration_1, + money_of_cents_string("0"), + list_map(temp_montant_verse_majoration, + enfants_a_charge)) else: - temp_montant_verse_majoration_1 = money_of_cents_string("0") + temp_montant_verse_majoration_2 = money_of_cents_string("0") except EmptyError: - temp_montant_verse_majoration_1 = dead_value + temp_montant_verse_majoration_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", start_line=129, start_column=11, end_line=129, end_column=35, law_headings=["Allocations familiales", "Champs d'applications", "Prologue"])) - montant_verse_majoration = temp_montant_verse_majoration_1 + montant_verse_majoration = temp_montant_verse_majoration_2 try: temp_montant_base_complement_pour_base_et_majoration = (montant_verse_base + montant_verse_majoration) @@ -2927,8 +2928,8 @@ def allocations_familiales(allocations_familiales_in:AllocationsFamilialesIn): except EmptyError: temp_montant_verse = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", - start_line=100, start_column=10, - end_line=100, end_column=23, + start_line=100, start_column=12, + end_line=100, end_column=25, law_headings=["Allocations familiales", "Champs d'applications", "Prologue"])) @@ -2969,7 +2970,7 @@ def interface_allocations_familiales(interface_allocations_familiales_in:Interfa i_personne_charge_effective_permanente_remplit_titre__i = interface_allocations_familiales_in.i_personne_charge_effective_permanente_remplit_titre_I_in i_avait_enfant_a_charge_avant_1er_janvier_2012 = interface_allocations_familiales_in.i_avait_enfant_a_charge_avant_1er_janvier_2012_in try: - def temp_enfants_a_charge(enfant_4:Any): + def temp_enfants_a_charge(enfant_4:EnfantEntree): if ((enfant_4.d_date_de_naissance + duration_of_numbers(3,0,0)) >= i_date_courante): @@ -3107,8 +3108,8 @@ def interface_allocations_familiales(interface_allocations_familiales_in:Interfa except EmptyError: temp_i_montant_verse = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/epilogue.catala_fr", - start_line=79, start_column=10, - end_line=79, end_column=25, + start_line=79, start_column=12, + end_line=79, end_column=27, law_headings=["Interface du programme", "Épilogue"])) i_montant_verse = temp_i_montant_verse diff --git a/generate_website_assets.sh b/generate_website_assets.sh index ab632a99..49e5f7c3 100755 --- a/generate_website_assets.sh +++ b/generate_website_assets.sh @@ -23,6 +23,8 @@ rsync $BUILD/examples/tutoriel_fr/tutoriel_fr.html $1/ rsync $BUILD/grammar.html $1/ rsync $BUILD/catala.html $1/ +rsync $BUILD/clerk.html $1/ +rsync $BUILD/catala_legifrance.html $1/ rsync $BUILD/french_law/js/french_law.js $1/french_law.js rsync $BUILD/examples/allocations_familiales/allocations_familiales_schema.json $1/ diff --git a/runtimes/ocaml/runtime.ml b/runtimes/ocaml/runtime.ml index e3f99160..59b88b72 100644 --- a/runtimes/ocaml/runtime.ml +++ b/runtimes/ocaml/runtime.ml @@ -372,7 +372,9 @@ module EventParser = struct | VariableDefinition (name, value) -> Printf.sprintf "VariableDefinition([ %s ], %s)" (String.concat ", " name) (yojson_of_runtime_value value |> Yojson.Safe.to_string) - | DecisionTaken _ -> Printf.sprintf "DecisionTaken(_)" + | DecisionTaken pos -> + Printf.sprintf "DecisionTaken(%s:%d.%d-%d.%d)" pos.filename pos.start_line + pos.start_column pos.end_line pos.end_column let parse_raw_events raw_events = let nb_raw_events = List.length raw_events @@ -386,7 +388,6 @@ module EventParser = struct and is_subscope_input_var_def name = 2 = List.length name && String.contains (List.nth name 1) '.' in - let rec parse_events (ctx : context) : context = match ctx.rest with | [] -> { ctx with events = ctx.events |> List.rev } @@ -561,80 +562,8 @@ let handle_default_opt let no_input : unit -> 'a = fun _ -> raise EmptyError -let ( *$ ) (i1 : money) (i2 : decimal) : money = - let i1_abs = Z.abs i1 in - let i2_abs = Q.abs i2 in - let sign_int = Z.sign i1 * Q.sign i2 in - let rat_result = Q.mul (Q.of_bigint i1_abs) i2_abs in - let res, remainder = Z.div_rem (Q.num rat_result) (Q.den rat_result) in - (* we perform nearest rounding when multiplying an amount of money by a - decimal !*) - if Z.(of_int 2 * remainder >= Q.den rat_result) then - Z.(add res (of_int 1) * of_int sign_int) - else Z.(res * of_int sign_int) - -let ( /$ ) (m1 : money) (m2 : money) : decimal = - if Z.zero = m2 then raise Division_by_zero - else Q.div (Q.of_bigint m1) (Q.of_bigint m2) - -let ( +$ ) (m1 : money) (m2 : money) : money = Z.add m1 m2 -let ( -$ ) (m1 : money) (m2 : money) : money = Z.sub m1 m2 -let ( ~-$ ) (m1 : money) : money = Z.sub Z.zero m1 -let ( +! ) (i1 : integer) (i2 : integer) : integer = Z.add i1 i2 -let ( -! ) (i1 : integer) (i2 : integer) : integer = Z.sub i1 i2 -let ( ~-! ) (i1 : integer) : integer = Z.sub Z.zero i1 -let ( *! ) (i1 : integer) (i2 : integer) : integer = Z.mul i1 i2 - -let ( /! ) (i1 : integer) (i2 : integer) : integer = - if Z.zero = i2 then raise Division_by_zero else Z.div i1 i2 - -let ( +& ) (i1 : decimal) (i2 : decimal) : decimal = Q.add i1 i2 -let ( -& ) (i1 : decimal) (i2 : decimal) : decimal = Q.sub i1 i2 -let ( ~-& ) (i1 : decimal) : decimal = Q.sub Q.zero i1 -let ( *& ) (i1 : decimal) (i2 : decimal) : decimal = Q.mul i1 i2 - -let ( /& ) (i1 : decimal) (i2 : decimal) : decimal = - if Q.zero = i2 then raise Division_by_zero else Q.div i1 i2 - -let ( +@ ) : date -> duration -> date = Dates_calc.Dates.add_dates -let ( -@ ) : date -> date -> duration = Dates_calc.Dates.sub_dates -let ( +^ ) : duration -> duration -> duration = Dates_calc.Dates.add_periods -let ( -^ ) : duration -> duration -> duration = Dates_calc.Dates.sub_periods - -let ( *^ ) (d : duration) (m : integer) : duration = - Dates_calc.Dates.mul_period d (Z.to_int m) - -let ( <=$ ) (m1 : money) (m2 : money) : bool = Z.compare m1 m2 <= 0 -let ( >=$ ) (m1 : money) (m2 : money) : bool = Z.compare m1 m2 >= 0 -let ( <$ ) (m1 : money) (m2 : money) : bool = Z.compare m1 m2 < 0 -let ( >$ ) (m1 : money) (m2 : money) : bool = Z.compare m1 m2 > 0 -let ( =$ ) (m1 : money) (m2 : money) : bool = Z.compare m1 m2 = 0 -let ( >=! ) (i1 : integer) (i2 : integer) : bool = Z.compare i1 i2 >= 0 -let ( <=! ) (i1 : integer) (i2 : integer) : bool = Z.compare i1 i2 <= 0 -let ( >! ) (i1 : integer) (i2 : integer) : bool = Z.compare i1 i2 > 0 -let ( =& ) (i1 : decimal) (i2 : decimal) : bool = Q.compare i1 i2 >= 0 -let ( <=& ) (i1 : decimal) (i2 : decimal) : bool = Q.compare i1 i2 <= 0 -let ( >& ) (i1 : decimal) (i2 : decimal) : bool = Q.compare i1 i2 > 0 -let ( <& ) (i1 : decimal) (i2 : decimal) : bool = Q.compare i1 i2 < 0 -let ( =& ) (i1 : decimal) (i2 : decimal) : bool = Q.compare i1 i2 = 0 - -let ( >=@ ) (d1 : date) (d2 : date) : bool = - Dates_calc.Dates.compare_dates d1 d2 >= 0 - -let ( <=@ ) (d1 : date) (d2 : date) : bool = - Dates_calc.Dates.compare_dates d1 d2 <= 0 - -let ( >@ ) (d1 : date) (d2 : date) : bool = - Dates_calc.Dates.compare_dates d1 d2 > 0 - -let ( <@ ) (d1 : date) (d2 : date) : bool = - Dates_calc.Dates.compare_dates d1 d2 < 0 - -let ( =@ ) (d1 : date) (d2 : date) : bool = - Dates_calc.Dates.compare_dates d1 d2 = 0 - +(* TODO: add a compare built-in to dates_calc. At the moment this fails on e.g. + [3 months, 4 months] *) let compare_periods (p1 : duration) (p2 : duration) : int = try let p1_days = Dates_calc.Dates.period_to_days p1 in @@ -642,14 +571,117 @@ let compare_periods (p1 : duration) (p2 : duration) : int = compare p1_days p2_days with Dates_calc.Dates.AmbiguousComputation -> raise UncomparableDurations -let ( >=^ ) (d1 : duration) (d2 : duration) : bool = compare_periods d1 d2 >= 0 -let ( <=^ ) (d1 : duration) (d2 : duration) : bool = compare_periods d1 d2 <= 0 -let ( >^ ) (d1 : duration) (d2 : duration) : bool = compare_periods d1 d2 > 0 -let ( <^ ) (d1 : duration) (d2 : duration) : bool = compare_periods d1 d2 < 0 -let ( =^ ) (d1 : duration) (d2 : duration) : bool = compare_periods d1 d2 = 0 -let ( ~-^ ) : duration -> duration = Dates_calc.Dates.neg_period +(* TODO: same here, although it was tweaked to never fail on equal dates. + Comparing the difference to duration_0 is not a good idea because we still + want to fail on [1 month, 30 days] rather than return [false] *) +let equal_periods (p1 : duration) (p2 : duration) : bool = + try Dates_calc.Dates.period_to_days (Dates_calc.Dates.sub_periods p1 p2) = 0 + with Dates_calc.Dates.AmbiguousComputation -> raise UncomparableDurations -let array_filter (f : 'a -> bool) (a : 'a array) : 'a array = - Array.of_list (List.filter f (Array.to_list a)) +module Oper = struct + let o_not = Stdlib.not + let o_length a = Z.of_int (Array.length a) + let o_torat_int = decimal_of_integer + let o_torat_mon = decimal_of_money + let o_tomoney_rat = money_of_decimal + let o_getDay = day_of_month_of_date + let o_getMonth = month_number_of_date + let o_getYear = year_of_date + let o_firstDayOfMonth = first_day_of_month + let o_lastDayOfMonth = last_day_of_month + let o_round_mon = money_round + let o_round_rat = decimal_round + let o_minus_int i1 = Z.sub Z.zero i1 + let o_minus_rat i1 = Q.sub Q.zero i1 + let o_minus_mon m1 = Z.sub Z.zero m1 + let o_minus_dur = Dates_calc.Dates.neg_period + let o_and = ( && ) + let o_or = ( || ) + let o_xor : bool -> bool -> bool = ( <> ) + let o_eq = ( = ) + let o_map = Array.map -let array_length (a : 'a array) : integer = Z.of_int (Array.length a) + let o_reduce f dft a = + let len = Array.length a in + if len = 0 then dft + else + let r = ref a.(0) in + for i = 1 to len - 1 do + r := f !r a.(i) + done; + !r + + let o_concat = Array.append + let o_filter f a = Array.of_list (List.filter f (Array.to_list a)) + let o_add_int_int i1 i2 = Z.add i1 i2 + let o_add_rat_rat i1 i2 = Q.add i1 i2 + let o_add_mon_mon m1 m2 = Z.add m1 m2 + let o_add_dat_dur da du = Dates_calc.Dates.add_dates da du + let o_add_dur_dur = Dates_calc.Dates.add_periods + let o_sub_int_int i1 i2 = Z.sub i1 i2 + let o_sub_rat_rat i1 i2 = Q.sub i1 i2 + let o_sub_mon_mon m1 m2 = Z.sub m1 m2 + let o_sub_dat_dat = Dates_calc.Dates.sub_dates + let o_sub_dat_dur dat dur = Dates_calc.Dates.(add_dates dat (neg_period dur)) + let o_sub_dur_dur = Dates_calc.Dates.sub_periods + let o_mult_int_int i1 i2 = Z.mul i1 i2 + let o_mult_rat_rat i1 i2 = Q.mul i1 i2 + + let o_mult_mon_rat i1 i2 = + let i1_abs = Z.abs i1 in + let i2_abs = Q.abs i2 in + let sign_int = Z.sign i1 * Q.sign i2 in + let rat_result = Q.mul (Q.of_bigint i1_abs) i2_abs in + let res, remainder = Z.div_rem (Q.num rat_result) (Q.den rat_result) in + (* we perform nearest rounding when multiplying an amount of money by a + decimal !*) + if Z.(of_int 2 * remainder >= Q.den rat_result) then + Z.(add res (of_int 1) * of_int sign_int) + else Z.(res * of_int sign_int) + + let o_mult_dur_int d m = Dates_calc.Dates.mul_period d (Z.to_int m) + + let o_div_int_int i1 i2 = + (* It's not on the ocamldoc, but Q.div likely already raises this ? *) + if Z.zero = i2 then raise Division_by_zero + else Q.div (Q.of_bigint i1) (Q.of_bigint i2) + + let o_div_rat_rat i1 i2 = + if Q.zero = i2 then raise Division_by_zero else Q.div i1 i2 + + let o_div_mon_mon m1 m2 = + if Z.zero = m2 then raise Division_by_zero + else Q.div (Q.of_bigint m1) (Q.of_bigint m2) + + let o_div_mon_rat m1 r1 = + if Q.zero = r1 then raise Division_by_zero else o_mult_mon_rat m1 (Q.inv r1) + + let o_lt_int_int i1 i2 = Z.compare i1 i2 < 0 + let o_lt_rat_rat i1 i2 = Q.compare i1 i2 < 0 + let o_lt_mon_mon m1 m2 = Z.compare m1 m2 < 0 + let o_lt_dur_dur d1 d2 = compare_periods d1 d2 < 0 + let o_lt_dat_dat d1 d2 = Dates_calc.Dates.compare_dates d1 d2 < 0 + let o_lte_int_int i1 i2 = Z.compare i1 i2 <= 0 + let o_lte_rat_rat i1 i2 = Q.compare i1 i2 <= 0 + let o_lte_mon_mon m1 m2 = Z.compare m1 m2 <= 0 + let o_lte_dur_dur d1 d2 = compare_periods d1 d2 <= 0 + let o_lte_dat_dat d1 d2 = Dates_calc.Dates.compare_dates d1 d2 <= 0 + let o_gt_int_int i1 i2 = Z.compare i1 i2 > 0 + let o_gt_rat_rat i1 i2 = Q.compare i1 i2 > 0 + let o_gt_mon_mon m1 m2 = Z.compare m1 m2 > 0 + let o_gt_dur_dur d1 d2 = compare_periods d1 d2 > 0 + let o_gt_dat_dat d1 d2 = Dates_calc.Dates.compare_dates d1 d2 > 0 + let o_gte_int_int i1 i2 = Z.compare i1 i2 >= 0 + let o_gte_rat_rat i1 i2 = Q.compare i1 i2 >= 0 + let o_gte_mon_mon m1 m2 = Z.compare m1 m2 >= 0 + let o_gte_dur_dur d1 d2 = compare_periods d1 d2 >= 0 + let o_gte_dat_dat d1 d2 = Dates_calc.Dates.compare_dates d1 d2 >= 0 + let o_eq_int_int i1 i2 = Z.equal i1 i2 + let o_eq_rat_rat i1 i2 = Q.equal i1 i2 + let o_eq_mon_mon m1 m2 = Z.equal m1 m2 + let o_eq_dur_dur d1 d2 = equal_periods d1 d2 + let o_eq_dat_dat d1 d2 = Dates_calc.Dates.compare_dates d1 d2 = 0 + let o_fold = Array.fold_left +end + +include Oper diff --git a/runtimes/ocaml/runtime.mli b/runtimes/ocaml/runtime.mli index 8510eba0..7ed04bbc 100644 --- a/runtimes/ocaml/runtime.mli +++ b/runtimes/ocaml/runtime.mli @@ -285,85 +285,77 @@ val no_input : unit -> 'a (**{1 Operators} *) -(**{2 Money} *) +module Oper : sig + (* The types **must** match with Shared_ast.Operator.*_type *) + val o_not : bool -> bool + val o_length : 'a array -> integer + val o_torat_int : integer -> decimal + val o_torat_mon : money -> decimal + val o_tomoney_rat : decimal -> money + val o_getDay : date -> integer + val o_getMonth : date -> integer + val o_getYear : date -> integer + val o_firstDayOfMonth : date -> date + val o_lastDayOfMonth : date -> date + val o_round_mon : money -> money + val o_round_rat : decimal -> decimal + val o_minus_int : integer -> integer + val o_minus_rat : decimal -> decimal + val o_minus_mon : money -> money + val o_minus_dur : duration -> duration + val o_and : bool -> bool -> bool + val o_or : bool -> bool -> bool + val o_xor : bool -> bool -> bool + val o_eq : 'a -> 'a -> bool + val o_map : ('a -> 'b) -> 'a array -> 'b array + val o_reduce : ('a -> 'a -> 'a) -> 'a -> 'a array -> 'a + val o_concat : 'a array -> 'a array -> 'a array + val o_filter : ('a -> bool) -> 'a array -> 'a array + val o_add_int_int : integer -> integer -> integer + val o_add_rat_rat : decimal -> decimal -> decimal + val o_add_mon_mon : money -> money -> money + val o_add_dat_dur : date -> duration -> date + val o_add_dur_dur : duration -> duration -> duration + val o_sub_int_int : integer -> integer -> integer + val o_sub_rat_rat : decimal -> decimal -> decimal + val o_sub_mon_mon : money -> money -> money + val o_sub_dat_dat : date -> date -> duration + val o_sub_dat_dur : date -> duration -> date + val o_sub_dur_dur : duration -> duration -> duration + val o_mult_int_int : integer -> integer -> integer + val o_mult_rat_rat : decimal -> decimal -> decimal + val o_mult_mon_rat : money -> decimal -> money + val o_mult_dur_int : duration -> integer -> duration + val o_div_int_int : integer -> integer -> decimal + val o_div_rat_rat : decimal -> decimal -> decimal + val o_div_mon_mon : money -> money -> decimal + val o_div_mon_rat : money -> decimal -> money + val o_lt_int_int : integer -> integer -> bool + val o_lt_rat_rat : decimal -> decimal -> bool + val o_lt_mon_mon : money -> money -> bool + val o_lt_dur_dur : duration -> duration -> bool + val o_lt_dat_dat : date -> date -> bool + val o_lte_int_int : integer -> integer -> bool + val o_lte_rat_rat : decimal -> decimal -> bool + val o_lte_mon_mon : money -> money -> bool + val o_lte_dur_dur : duration -> duration -> bool + val o_lte_dat_dat : date -> date -> bool + val o_gt_int_int : integer -> integer -> bool + val o_gt_rat_rat : decimal -> decimal -> bool + val o_gt_mon_mon : money -> money -> bool + val o_gt_dur_dur : duration -> duration -> bool + val o_gt_dat_dat : date -> date -> bool + val o_gte_int_int : integer -> integer -> bool + val o_gte_rat_rat : decimal -> decimal -> bool + val o_gte_mon_mon : money -> money -> bool + val o_gte_dur_dur : duration -> duration -> bool + val o_gte_dat_dat : date -> date -> bool + val o_eq_int_int : integer -> integer -> bool + val o_eq_rat_rat : decimal -> decimal -> bool + val o_eq_mon_mon : money -> money -> bool + val o_eq_dur_dur : duration -> duration -> bool + val o_eq_dat_dat : date -> date -> bool + val o_fold : ('a -> 'b -> 'a) -> 'a -> 'b array -> 'a +end -val ( *$ ) : money -> decimal -> money - -val ( /$ ) : money -> money -> decimal -(** @raise Division_by_zero *) - -val ( +$ ) : money -> money -> money -val ( -$ ) : money -> money -> money -val ( ~-$ ) : money -> money -val ( =$ ) : money -> money -> bool -val ( <=$ ) : money -> money -> bool -val ( >=$ ) : money -> money -> bool -val ( <$ ) : money -> money -> bool -val ( >$ ) : money -> money -> bool - -(**{2 Integers} *) - -val ( +! ) : integer -> integer -> integer -val ( -! ) : integer -> integer -> integer -val ( ~-! ) : integer -> integer -val ( *! ) : integer -> integer -> integer - -val ( /! ) : integer -> integer -> integer -(** @raise Division_by_zero *) - -val ( =! ) : integer -> integer -> bool -val ( >=! ) : integer -> integer -> bool -val ( <=! ) : integer -> integer -> bool -val ( >! ) : integer -> integer -> bool -val ( integer -> bool - -(** {2 Decimals} *) - -val ( +& ) : decimal -> decimal -> decimal -val ( -& ) : decimal -> decimal -> decimal -val ( ~-& ) : decimal -> decimal -val ( *& ) : decimal -> decimal -> decimal - -val ( /& ) : decimal -> decimal -> decimal -(** @raise Division_by_zero *) - -val ( =& ) : decimal -> decimal -> bool -val ( >=& ) : decimal -> decimal -> bool -val ( <=& ) : decimal -> decimal -> bool -val ( >& ) : decimal -> decimal -> bool -val ( <& ) : decimal -> decimal -> bool - -(** {2 Dates} *) - -val ( +@ ) : date -> duration -> date -val ( -@ ) : date -> date -> duration -val ( =@ ) : date -> date -> bool -val ( >=@ ) : date -> date -> bool -val ( <=@ ) : date -> date -> bool -val ( >@ ) : date -> date -> bool -val ( <@ ) : date -> date -> bool - -(** {2 Durations} *) - -val ( +^ ) : duration -> duration -> duration -val ( -^ ) : duration -> duration -> duration -val ( *^ ) : duration -> integer -> duration -val ( ~-^ ) : duration -> duration -val ( =^ ) : duration -> duration -> bool - -val ( >=^ ) : duration -> duration -> bool -(** @raise UncomparableDurations *) - -val ( <=^ ) : duration -> duration -> bool -(** @raise UncomparableDurations *) - -val ( >^ ) : duration -> duration -> bool -(** @raise UncomparableDurations *) - -val ( <^ ) : duration -> duration -> bool -(** @raise UncomparableDurations *) - -(** {2 Arrays} *) - -val array_filter : ('a -> bool) -> 'a array -> 'a array -val array_length : 'a array -> integer +include module type of Oper diff --git a/runtimes/python/catala/src/catala/runtime.py b/runtimes/python/catala/src/catala/runtime.py index 1cae0d91..6bcfa705 100644 --- a/runtimes/python/catala/src/catala/runtime.py +++ b/runtimes/python/catala/src/catala/runtime.py @@ -39,8 +39,8 @@ class Integer: def __mul__(self, other: 'Integer') -> 'Integer': return Integer(self.value * other.value) - def __truediv__(self, other: 'Integer') -> 'Integer': - return Integer(self.value // other.value) + def __truediv__(self, other: 'Integer') -> 'Decimal': + return Decimal (self.value) / Decimal (other.value) def __neg__(self: 'Integer') -> 'Integer': return Integer(- self.value) @@ -150,7 +150,12 @@ class Money: return Money(Integer(res)) def __truediv__(self, other: 'Money') -> Decimal: - return Decimal(mpq(self.value.value / other.value.value)) + if isinstance(other, Money): + return Decimal(mpq(self.value.value / other.value.value)) + elif isinstance(other, Decimal): + return self * (1. / other.value) + else: + raise Exception("Dividing money and invalid obj") def __neg__(self: 'Money') -> 'Money': return Money(- self.value) @@ -193,8 +198,13 @@ class Date: def __add__(self, other: 'Duration') -> 'Date': return Date(self.value + other.value) - def __sub__(self, other: 'Date') -> 'Duration': - return Duration(dateutil.relativedelta.relativedelta(self.value, other.value)) + def __sub__(self, other: object) -> object: + if isinstance(other, Date): + return Duration(dateutil.relativedelta.relativedelta(self.value, other.value)) + elif isinstance(other, Duration): + return Date(self.value - other.value) + else: + raise Exception("Substracting date and invalid obj") def __lt__(self, other: 'Date') -> bool: return self.value < other.value @@ -562,6 +572,13 @@ def list_map(f: Callable[[Alpha], Beta], l: List[Alpha]) -> List[Beta]: return [f(i) for i in l] +def list_reduce(f: Callable[[Alpha, Alpha], Alpha], dft: Alpha, l: List[Alpha]) -> Alpha: + if l == []: + return dft + else: + return reduce(f, l) + + def list_length(l: List[Alpha]) -> Integer: return Integer(len(l)) diff --git a/syntax_highlighting/README.md b/syntax_highlighting/README.md index fa608437..2ce581e5 100644 --- a/syntax_highlighting/README.md +++ b/syntax_highlighting/README.md @@ -51,7 +51,7 @@ script `syntax_highlighting/fr/pygments/set_up_pygments.sh`, `syntax_highlighting/pl/pygments/set_up_pygments.sh` and `syntax_highlighting/en/pygments/set_up_pygments.sh`. -The scripts patch your `pigmentize` executable, used for instance by the `minted` LaTeX package. +The scripts patch your `pygmentize` executable, used for instance by the `minted` LaTeX package. It will now point to the Catala-enabled version with the appropriate `catala_*` lexer. ## GNU gedit diff --git a/syntax_highlighting/emacs/catala-mode.el b/syntax_highlighting/emacs/catala-mode.el index d9a36ff9..428635e4 100644 --- a/syntax_highlighting/emacs/catala-mode.el +++ b/syntax_highlighting/emacs/catala-mode.el @@ -21,8 +21,8 @@ (define-generic-mode 'catala-mode-fr '("#") - '("contexte" "entrée" "sortie" "interne" - "champ d'application" "si et seulement si" "dépend de" "déclaration" "inclus" "collection" "contenu" "optionnel" "structure" "énumération" "contexte" "entrée" "sortie" "interne" "règle" "sous condition" "condition" "donnée" "conséquence" "rempli" "égal à" "assertion" "définition" "état" "étiquette" "exception") + '("contexte" "entrée" "résultat" "interne" + "champ d'application" "si et seulement si" "dépend de" "déclaration" "inclus" "collection" "contenu" "optionnel" "structure" "énumération" "contexte" "entrée" "résultat" "interne" "règle" "sous condition" "condition" "donnée" "conséquence" "rempli" "égal à" "assertion" "définition" "état" "étiquette" "exception" "soit") '(("\\<\\(selon\\|sous\s+forme\\|fixé\\|par\\|décroissante\\|croissante\\|varie\\|avec\\|on\s+a\\|soit\\|dans\\|tel\s+que\\|existe\\|pour\\|tout\\|de\\|si\\|alors\\|sinon\\|initial\\)\\>" . font-lock-builtin-face) ("\\<\\(vrai\\|faux\\)\\>" . font-lock-constant-face) ("\\<\\([0-9][0-9 ]*\\(,[0-9]*\\|\\)\\)\\>" . font-lock-constant-face) @@ -41,7 +41,7 @@ (define-generic-mode 'catala-mode-en '("#") '("context" "input" "output" "internal" - "scope" "depends on" "declaration" "includes" "collection" "content" "optional" "structure" "enumeration" "context" "input" "output" "internal" "rule" "under condition" "condition" "data" "consequence" "fulfilled" "equals" "assertion" "definition" "state" "label" "exception") + "scope" "depends on" "declaration" "includes" "collection" "content" "optional" "structure" "enumeration" "context" "input" "output" "internal" "rule" "under condition" "condition" "data" "consequence" "fulfilled" "equals" "assertion" "definition" "state" "label" "exception" "let") '(("\\<\\(match\\|with\s+pattern\\|fixed\\|by\\|decreasing\\|increasing\\|varies\\|with\\|we\s+have\\|let\\|in\\|such\s+that\\|exists\\|for\\|all\\|of\\|if\\|then\\|else\\|initial\\)\\>" . font-lock-builtin-face) ("|[0-9]\\+-[0-9]\\+-[0-9]\\+|" . font-lock-constant-face) ("\\<\\(true\\|false\\)\\>" . font-lock-constant-face) diff --git a/syntax_highlighting/en/atom/package.json b/syntax_highlighting/en/atom/package.json index 7be0a59d..460a730b 100644 --- a/syntax_highlighting/en/atom/package.json +++ b/syntax_highlighting/en/atom/package.json @@ -7,10 +7,10 @@ }, "repository": { "type": "git", - "url": "https://gitlab.inria.fr/verifisc/catala.git" + "url": "https://github.com/CatalaLang/catala.git" }, "bugs": { - "url": "https://gitlab.inria.fr/verifisc/catala/issues" + "url": "https://github.com/CatalaLang/catala/issues" }, "dependencies": {}, "license": "Apache" diff --git a/syntax_highlighting/en/catala_en.iro b/syntax_highlighting/en/catala_en.iro index 6d9fd1b0..a428db6e 100644 --- a/syntax_highlighting/en/catala_en.iro +++ b/syntax_highlighting/en/catala_en.iro @@ -166,24 +166,42 @@ main : context { } : push { - regex \= (```catala) + regex \= (^```catala$) styles [] = .code_delimiter; context [] = code; } : push { - regex \= (```catala-metadata) + regex \= (^```catala-metadata$) styles [] = .code_delimiter; context [] = code; } + : push { + regex \= (^```catala-test-inline$) + styles [] = .code_delimiter; + context [] = test; + } + } +test : context { + + : pop { + regex \= (^```$) + styles [] = .code_delimiter; + } + + : pattern { + regex \= (^[$] catala \S*) + styles [] = .literal ; + } +} code : context { : pop { - regex \= (```) + regex \= (^```$) styles [] = .code_delimiter; } @@ -198,12 +216,12 @@ code : context { } : pattern { - regex \= \b(match|with\s+pattern|fixed|by|decreasing|increasing|varies|with|we\s+have|let|in|such\s+that|exists|for|all|of|if|then|else|initial)\b + regex \= \b(match|with\s+pattern|fixed|by|decreasing|increasing|varies|with|we\s+have|let|in|scope|depends\s+on|declaration|includes|content|rule|under\s+condition|condition|data|consequence|fulfilled|equals|assertion|definition|state|label|exception)\b styles [] = .keyword_expression ; } : pattern { - regex \= \b(scope|depends\s+on|declaration|includes|collection|content|optional|structure|enumeration|context|input|output|internal|rule|under\s+condition|condition|data|consequence|fulfilled|equals|assertion|definition|state|label|exception)\b + regex \= \b(contains|number|sum|such\s+that|exists|for|all|of|if|then|else|is|empty|among|maximum|minimum|round)\b styles [] = .keyword_rule ; } @@ -230,12 +248,12 @@ code : context { } : pattern { - regex \= (\-\>|\+\.|\+\@|\+\^|\+\$|\+|\-\.|\-\@|\-\^|\-\$|\-|\*\.|\*\@|\*\^|\*\$|\*|/\.|/\@|/\$|/|\!|>\.|>=\.|<=\.|<\.|>\@|>=\@|<=\@|<\@|>\$|>=\$|<=\$|<\$|>\^|>=\^|<=\^|<\^|>|>=|<=|<|=|not|or|xor|and|\$|%|year|month|day) + regex \= (\-\>|\+\.|\+\@|\+\^|\+\$|\+|\-\.|\-\@|\-\^|\-\$|\-|\*\.|\*\@|\*\^|\*\$|\*|/\.|/\@|/\$|/|\!|>\.|>=\.|<=\.|<\.|>\@|>=\@|<=\@|<\@|>\$|>=\$|<=\$|<\$|>\^|>=\^|<=\^|<\^|>|>=|<=|<|=|not|or|xor|and|\$|€|%|year|month|day) styles [] = .operator; } : pattern { - regex \= \b(integer|boolean|date|duration|money|text|decimal|number|sum)\b + regex \= \b(structure|enumeration|collection|integer|boolean|date|duration|money|text|decimal)\b styles [] = .primitive; } diff --git a/syntax_highlighting/en/pygments/catala_en_lexer/lexer.py b/syntax_highlighting/en/pygments/catala_en_lexer/lexer.py index 447f4862..2e2b1d80 100644 --- a/syntax_highlighting/en/pygments/catala_en_lexer/lexer.py +++ b/syntax_highlighting/en/pygments/catala_en_lexer/lexer.py @@ -3,8 +3,7 @@ from pygments.token import * import re -__all__ = ['CatalaEnLexer'] - +__all__=['CatalaEnLexer'] class CatalaEnLexer(RegexLexer): name = 'CatalaEn' @@ -13,54 +12,39 @@ class CatalaEnLexer(RegexLexer): flags = re.MULTILINE | re.UNICODE tokens = { - 'root': [ - (u'(^[\#]+)', bygroups(Generic.Heading), 'main__1'), - (u'(^[\#]+\s*\[[^\]]\s*])', bygroups(Generic.Heading), 'main__2'), - (u'([^`\\n\\r])', bygroups(Text)), - (u'(```catala-metadata)', bygroups(Text), 'code'), - (u'(```catala)', bygroups(Text), 'code'), - ('(\n|\r|\r\n)', Text), - ('.', Text), - ], - 'code': [ - (u'(```)', bygroups(Text), 'root'), + 'root' : [ + (u'(^\\s*[\\#]+.*)', bygroups(Generic.Heading)), + (u'(^\\s*[\\#]+\\s*\\[[^\\]\\n\\r]\\s*].*)', bygroups(Generic.Heading)), + (u'([^`\\n\\r])', bygroups(String)), + (u'(^```catala$)', bygroups(String), 'code'), + (u'(^```catala-metadata$)', bygroups(String), 'code'), + (u'(^```catala-test-inline$)', bygroups(String), 'test'), + ('(\n|\r|\r\n)', String), + ('.', String), + ], + 'code' : [ + (u'(^```$)', bygroups(String), 'root'), (u'(\\s*\\#.*$)', bygroups(Comment.Single)), - (u'(context|input|output|internal)(\\s*)(|output)(\\s+)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)', - bygroups(Keyword.Declaration, Text, Keyword.Declaration, Text, Name.Variable)), - (u'\\b(match|with\\s+pattern|fixed|by|decreasing|increasing|varies|with|we\\s+have|let|in|such\\s+that|exists|for|all|of|if|then|else|initial)\\b', - bygroups(Keyword.Reserved)), - (u'\\b(scope|depends\\s+on|declaration|includes|collection|content|optional|structure|enumeration|context|input|output|internal|rule|under\\s+condition|condition|data|consequence|fulfilled|equals|assertion|definition|state|label|exception|anything)\\b', - bygroups(Keyword.Declaration)), + (u'(context|input|output|internal)(\\s*)(|output)(\\s+)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)', bygroups(Keyword.Declaration, String, Keyword.Declaration, String, Name.Variable)), + (u'\\b(match|with\\s+pattern|fixed|by|decreasing|increasing|varies|with|we\\s+have|let|in|scope|depends\\s+on|declaration|includes|content|rule|under\\s+condition|condition|data|consequence|fulfilled|equals|assertion|definition|state|label|exception)\\b', bygroups(Keyword.Reserved)), + (u'\\b(contains|number|sum|such\\s+that|exists|for|all|of|if|then|else|is|empty|among|maximum|minimum|round)\\b', bygroups(Keyword.Declaration)), (u'(\\|[0-9]+\\-[0-9]+\\-[0-9]+\\|)', bygroups(Number.Integer)), (u'\\b(true|false)\\b', bygroups(Keyword.Constant)), (u'\\b([0-9]+(,[0-9]*|))\\b', bygroups(Number.Integer)), - (u'(\\-\\-|\\;|\\.|\\,|\\:|\\(|\\)|\\[|\\]|\\{|\\})', - bygroups(Operator)), - (u'(\\-\\>|\\+\\.|\\+\\@|\\+\\^|\\+\\$|\\+|\\-\\.|\\-\\@|\\-\\^|\\-\\$|\\-|\\*\\.|\\*\\@|\\*\\^|\\*\\$|\\*|/\\.|/\\@|/\\^|/\\$|/|\\!|>\\.|>=\\.|<=\\.|<\\.|>\\@|>=\\@|<=\\@|<\\@|>\\$|>=\\$|<=\\$|<\\$|>\\^|>=\\^|<=\\^|<\\^|>|>=|<=|<|=|not|or|xor|and|\\$|%|year|month|day)', - bygroups(Operator)), - (u'\\b(integer|boolean|date|duration|money|text|decimal|number|sum)\\b', - bygroups(Keyword.Type)), - (u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)\\b', - bygroups(Name.Class, Operator, Name.Variable)), - (u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\'\\.]*)\\b', - bygroups(Name.Variable, Operator, Text)), - (u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)\\b', - bygroups(Name.Variable)), - (u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)\\b', - bygroups(Name.Class)), - ('(\n|\r|\r\n)', Text), - ('.', Text), - ], - 'main__1': [ - (u'(\n)', bygroups(Generic.Heading), 'root'), - (u'(.)', bygroups(Generic.Heading)), - ('(\n|\r|\r\n)', Text), - ('.', Text), - ], - 'main__2': [ - (u'(\n)', bygroups(Generic.Heading), 'root'), - (u'(.)', bygroups(Generic.Heading)), - ('(\n|\r|\r\n)', Text), - ('.', Text), + (u'(\\-\\-|\\;|\\.|\\,|\\:|\\(|\\)|\\[|\\]|\\{|\\})', bygroups(Operator)), + (u'(\\-\\>|\\+\\.|\\+\\@|\\+\\^|\\+\\$|\\+|\\-\\.|\\-\\@|\\-\\^|\\-\\$|\\-|\\*\\.|\\*\\@|\\*\\^|\\*\\$|\\*|/\\.|/\\@|/\\$|/|\\!|>\\.|>=\\.|<=\\.|<\\.|>\\@|>=\\@|<=\\@|<\\@|>\\$|>=\\$|<=\\$|<\\$|>\\^|>=\\^|<=\\^|<\\^|>|>=|<=|<|=|not|or|xor|and|\\$|\u20ac|%|year|month|day)', bygroups(Operator)), + (u'\\b(structure|enumeration|collection|integer|boolean|date|duration|money|text|decimal)\\b', bygroups(Keyword.Type)), + (u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Name.Class, Operator, Name.Variable)), + (u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\'\\.]*)\\b', bygroups(Name.Variable, Operator, String)), + (u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Name.Variable)), + (u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Name.Class)), + ('(\n|\r|\r\n)', String), + ('.', String), + ], + 'test' : [ + (u'(^```$)', bygroups(String), 'root'), + (u'(^[$] catala \\S*)', bygroups(Keyword.Constant)), + ('(\n|\r|\r\n)', String), + ('.', String), ] } diff --git a/syntax_highlighting/fr/atom/package.json b/syntax_highlighting/fr/atom/package.json index af50962b..24e0fdea 100644 --- a/syntax_highlighting/fr/atom/package.json +++ b/syntax_highlighting/fr/atom/package.json @@ -7,10 +7,10 @@ }, "repository": { "type": "git", - "url": "https://gitlab.inria.fr/verifisc/catala.git" + "url": "https://github.com/CatalaLang/catala.git" }, "bugs": { - "url": "https://gitlab.inria.fr/verifisc/catala/issues" + "url": "https://github.com/CatalaLang/catala/issues" }, "dependencies": {}, "license": "Apache" diff --git a/syntax_highlighting/fr/catala_fr.iro b/syntax_highlighting/fr/catala_fr.iro index 17a61fde..2054a009 100644 --- a/syntax_highlighting/fr/catala_fr.iro +++ b/syntax_highlighting/fr/catala_fr.iro @@ -166,24 +166,42 @@ main : context { } : push { - regex \= (```catala) + regex \= (^```catala$) styles [] = .code_delimiter; context [] = code; } : push { - regex \= (```catala-metadata) + regex \= (^```catala-metadata$) styles [] = .code_delimiter; context [] = code; } + : push { + regex \= (^```catala-test-inline$) + styles [] = .code_delimiter; + context [] = test; + } + } +test : context { + + : pop { + regex \= (^```$) + styles [] = .code_delimiter; + } + + : pattern { + regex \= (^[$] catala \S*) + styles [] = .literal ; + } +} code : context { : pop { - regex \= (```) + regex \= (^```$) styles [] = .code_delimiter; } @@ -193,17 +211,17 @@ code : context { } : pattern { - regex \= (contexte|entrée|sortie|interne)(\s*)(|sortie)(\s+)($${__SC_ID}) + regex \= (contexte|entrée|résultat|interne)(\s*)(|résultat)(\s+)($${__SC_ID}) styles [] = .keyword_rule, .whitespace, .keyword_rule, .whitespace, .sc_id_def; } : pattern { - regex \= \b(selon|sous\s+forme|fixé|par|décroissante|croissante|varie|avec|on\s+a|soit|dans|tel\s+que|existe|pour|tout|de|si|alors|sinon|initial)\b + regex \= \b(selon|sous\s+forme|fixé|par|décroissante|croissante|varie|avec|on\s+a|soit|dans|champ\s+d'application|dépend\s+de|déclaration|inclusion|contenu|règle|sous\s+condition|condition|donnée|conséquence|rempli|égale\s+à|assertion|définition|état|étiquette|exception)\b styles [] = .keyword_expression ; } : pattern { - regex \= \b(champ\s+d'application|si\s+et\s+seulement\s+si|dépend\s+de|déclaration|inclus|collection|contenu|optionnel|structure|énumération|contexte|entrée|sortie|interne|règle|sous\s+condition|condition|donnée|conséquence|rempli|égal\s+à|assertion|définition|état|étiquette|exception)\b + regex \= \b(contient|nombre|somme|tel\s+que|existe|pour|tout|de|si|alors|sinon|est|vide|parmi|maximum|minimum|arrondi)\b styles [] = .keyword_rule ; } @@ -235,7 +253,7 @@ code : context { } : pattern { - regex \= \b(entier|booléen|date|durée|argent|texte|décimal|décret|loi|nombre|somme)\b + regex \= \b(structure|énumération|collection|entier|booléen|date|durée|argent|texte|décimal|décret|loi|nombre|somme)\b styles [] = .primitive; } diff --git a/syntax_highlighting/fr/pygments/catala_fr_lexer/lexer.py b/syntax_highlighting/fr/pygments/catala_fr_lexer/lexer.py index 585cb21c..ff4e74ec 100644 --- a/syntax_highlighting/fr/pygments/catala_fr_lexer/lexer.py +++ b/syntax_highlighting/fr/pygments/catala_fr_lexer/lexer.py @@ -3,8 +3,7 @@ from pygments.token import * import re -__all__ = ['CatalaFrLexer'] - +__all__=['CatalaFrLexer'] class CatalaFrLexer(RegexLexer): name = 'CatalaFr' @@ -13,55 +12,39 @@ class CatalaFrLexer(RegexLexer): flags = re.MULTILINE | re.UNICODE tokens = { - 'root': [ - (u'(^\s*[\#]+)', bygroups(Generic.Heading), 'main__1'), - (u'(^\s*[\#]+\s*\[[^\]]\s*])', bygroups(Generic.Heading), - 'main__2'), - (u'([^`\\n\\r])', bygroups(Text)), - (u'(```catala-metadata)', bygroups(Text), 'code'), - (u'(```catala)', bygroups(Text), 'code'), - ('(\n|\r|\r\n)', Text), - ('.', Text), - ], - 'code': [ - (u'(```)', bygroups(Text), 'root'), + 'root' : [ + (u'(^\\s*[\\#]+.*)', bygroups(Generic.Heading)), + (u'(^\\s*[\\#]+\\s*\\[[^\\]\\n\\r]\\s*].*)', bygroups(Generic.Heading)), + (u'([^`\\n\\r])', bygroups(String)), + (u'(^```catala$)', bygroups(String), 'code'), + (u'(^```catala-metadata$)', bygroups(String), 'code'), + (u'(^```catala-test-inline$)', bygroups(String), 'test'), + ('(\n|\r|\r\n)', String), + ('.', String), + ], + 'code' : [ + (u'(^```$)', bygroups(String), 'root'), (u'(\\s*\\#.*$)', bygroups(Comment.Single)), - (u'(contexte|entr\xe9e|sortie|interne)(\\s*)(|sortie)(\\s+)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)', - bygroups(Keyword.Declaration, Text, Keyword.Declaration, Text, Name.Variable)), - (u'\\b(selon|sous\\s+forme|fix\xe9|par|d\xe9croissante|croissante|varie|avec|on\\s+a|soit|dans|tel\\s+que|existe|pour|tout|de|si|alors|sinon|initial)\\b', - bygroups(Keyword.Reserved)), - (u'\\b(champ\\s+d\'application|si\\s+et\\s+seulement\\s+si|d\xe9pend\\s+de|d\xe9claration|inclus|collection|contenu|optionnel|structure|\xe9num\xe9ration|contexte|entr\xe9e|sortie|interne|r\xe8gle|sous\\s+condition|condition|donn\xe9e|cons\xe9quence|rempli|\xe9gal\\s+\xe0|assertion|d\xe9finition|\xe9tat|\xe9tiquette|exception|n\'importe\\s+quel)\\b', - bygroups(Keyword.Declaration)), + (u'(contexte|entr\xe9e|r\xe9sultat|interne)(\\s*)(|r\xe9sultat)(\\s+)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)', bygroups(Keyword.Declaration, String, Keyword.Declaration, String, Name.Variable)), + (u'\\b(selon|sous\\s+forme|fix\xe9|par|d\xe9croissante|croissante|varie|avec|on\\s+a|soit|dans|champ\\s+d\'application|d\xe9pend\\s+de|d\xe9claration|inclusion|contenu|r\xe8gle|sous\\s+condition|condition|donn\xe9e|cons\xe9quence|rempli|\xe9gale\\s+\xe0|assertion|d\xe9finition|\xe9tat|\xe9tiquette|exception)\\b', bygroups(Keyword.Reserved)), + (u'\\b(contient|nombre|somme|tel\\s+que|existe|pour|tout|de|si|alors|sinon|est|vide|parmi|maximum|minimum|arrondi)\\b', bygroups(Keyword.Declaration)), (u'(\\|[0-9]+\\-[0-9]+\\-[0-9]+\\|)', bygroups(Number.Integer)), (u'\\b(vrai|faux)\\b', bygroups(Keyword.Constant)), (u'\\b([0-9]+(,[0-9]*|))\\b', bygroups(Number.Integer)), - (u'(\\-\\-|\\;|\\.|\\,|\\:|\\(|\\)|\\[|\\]|\\{|\\})', - bygroups(Operator)), - (u'(\\-\\>|\\+\\.|\\+\\@|\\+\\^|\\+\u20ac|\\+|\\-\\.|\\-\\@|\\-\\^|\\-\u20ac|\\-|\\*\\.|\\*\\@|\\*\\^|\\*\u20ac|\\*|/\\.|/\\@|/\\^|/\u20ac|/|\\!|>\\.|>=\\.|<=\\.|<\\.|>\\@|>=\\@|<=\\@|<\\@|>\u20ac|>=\u20ac|<=\u20ac|<\u20ac|>\\^|>=\\^|<=\\^|<\\^|>|>=|<=|<|=|non|ou\\s+bien|ou|et|\u20ac|%|an|mois|jour)', - bygroups(Operator)), - (u'\\b(entier|bool\xe9en|date|dur\xe9e|argent|texte|d\xe9cimal|d\xe9cret|loi|nombre|somme)\\b', - bygroups(Keyword.Type)), - (u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)\\b', - bygroups(Name.Class, Operator, Name.Variable)), - (u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\'\\.]*)\\b', - bygroups(Name.Variable, Operator, Text)), - (u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)\\b', - bygroups(Name.Variable)), - (u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)\\b', - bygroups(Name.Class)), - ('(\n|\r|\r\n)', Text), - ('.', Text), - ], - 'main__1': [ - (u'(\n)', bygroups(Generic.Heading), 'root'), - (u'(.)', bygroups(Generic.Heading)), - ('(\n|\r|\r\n)', Text), - ('.', Text), - ], - 'main__2': [ - (u'(\n)', bygroups(Generic.Heading), 'root'), - (u'(.)', bygroups(Generic.Heading)), - ('(\n|\r|\r\n)', Text), - ('.', Text), + (u'(\\-\\-|\\;|\\.|\\,|\\:|\\(|\\)|\\[|\\]|\\{|\\})', bygroups(Operator)), + (u'(\\-\\>|\\+\\.|\\+\\@|\\+\\^|\\+\u20ac|\\+|\\-\\.|\\-\\@|\\-\\^|\\-\u20ac|\\-|\\*\\.|\\*\\@|\\*\\^|\\*\u20ac|\\*|/\\.|/\\@|/\u20ac|/|\\!|>\\.|>=\\.|<=\\.|<\\.|>\\@|>=\\@|<=\\@|<\\@|>\u20ac|>=\u20ac|<=\u20ac|<\u20ac|>\\^|>=\\^|<=\\^|<\\^|>|>=|<=|<|=|non|ou\\s+bien|ou|et|\u20ac|%|an|mois|jour)', bygroups(Operator)), + (u'\\b(structure|\xe9num\xe9ration|collection|entier|bool\xe9en|date|dur\xe9e|argent|texte|d\xe9cimal|d\xe9cret|loi|nombre|somme)\\b', bygroups(Keyword.Type)), + (u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Name.Class, Operator, Name.Variable)), + (u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\'\\.]*)\\b', bygroups(Name.Variable, Operator, String)), + (u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Name.Variable)), + (u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Name.Class)), + ('(\n|\r|\r\n)', String), + ('.', String), + ], + 'test' : [ + (u'(^```$)', bygroups(String), 'root'), + (u'(^[$] catala \\S*)', bygroups(Keyword.Constant)), + ('(\n|\r|\r\n)', String), + ('.', String), ] } diff --git a/syntax_highlighting/pl/atom/package.json b/syntax_highlighting/pl/atom/package.json index 6cd971cd..b8594f05 100644 --- a/syntax_highlighting/pl/atom/package.json +++ b/syntax_highlighting/pl/atom/package.json @@ -7,12 +7,11 @@ }, "repository": { "type": "git", - "url": "https://gitlab.inria.fr/verifisc/catala.git" + "url": "https://github.com/CatalaLang/catala.git" }, "bugs": { - "url": "https://gitlab.inria.fr/verifisc/catala/issues" + "url": "https://github.com/CatalaLang/catala/issues" }, "dependencies": {}, "license": "Apache" } - \ No newline at end of file diff --git a/tests/test_arithmetic/bad/division_by_zero.catala_en b/tests/test_arithmetic/bad/division_by_zero.catala_en index a73905d8..3e95f05e 100644 --- a/tests/test_arithmetic/bad/division_by_zero.catala_en +++ b/tests/test_arithmetic/bad/division_by_zero.catala_en @@ -4,7 +4,7 @@ ```catala declaration scope Int: - context i content integer + context i content decimal scope Int: definition i equals 1 / 0 @@ -17,7 +17,7 @@ declaration scope Dec: context i content decimal scope Dec: - definition i equals 1. /. 0. + definition i equals 1. / 0. ``` ### with money @@ -27,7 +27,7 @@ declaration scope Money: context i content decimal scope Money: - definition i equals $10.0 /$ $0.0 + definition i equals $10.0 / $0.0 ``` @@ -36,20 +36,18 @@ $ catala Interpret -s Dec [ERROR] division by zero at runtime The division operator: -┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:20.22-30 +┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:20.22-29: └──┐ - │ -20 │ definition i equals 1. /. 0. - │ ‾‾‾‾‾‾‾‾ +20 │ definition i equals 1. / 0. + │ ‾‾‾‾‾‾‾ └┬ `Division_by_zero` exception management └─ with decimals The null denominator: -┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:20.28-30 +┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:20.27-29: └──┐ - │ -20 │ definition i equals 1. /. 0. - │ ‾‾ +20 │ definition i equals 1. / 0. + │ ‾‾ └┬ `Division_by_zero` exception management └─ with decimals #return code 255# @@ -60,18 +58,16 @@ $ catala Interpret -s Int [ERROR] division by zero at runtime The division operator: -┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:10.22-27 +┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:10.22-27: └──┐ - │ 10 │ definition i equals 1 / 0 │ ‾‾‾‾‾ └┬ `Division_by_zero` exception management └─ with integers The null denominator: -┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:10.26-27 +┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:10.26-27: └──┐ - │ 10 │ definition i equals 1 / 0 │ ‾ └┬ `Division_by_zero` exception management @@ -84,20 +80,18 @@ $ catala Interpret -s Money [ERROR] division by zero at runtime The division operator: -┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:30.22-35 +┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:30.22-34: └──┐ - │ -30 │ definition i equals $10.0 /$ $0.0 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾ +30 │ definition i equals $10.0 / $0.0 + │ ‾‾‾‾‾‾‾‾‾‾‾‾ └┬ `Division_by_zero` exception management └─ with money The null denominator: -┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:30.31-35 +┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:30.30-34: └──┐ - │ -30 │ definition i equals $10.0 /$ $0.0 - │ ‾‾‾‾ +30 │ definition i equals $10.0 / $0.0 + │ ‾‾‾‾ └┬ `Division_by_zero` exception management └─ with money #return code 255# diff --git a/tests/test_arithmetic/bad/logical_prio.catala_en b/tests/test_arithmetic/bad/logical_prio.catala_en new file mode 100644 index 00000000..b01ded67 --- /dev/null +++ b/tests/test_arithmetic/bad/logical_prio.catala_en @@ -0,0 +1,25 @@ +```catala +declaration scope S1: + output o content boolean + +scope S1: + definition o equals true and (false and true and true) or false +``` + +```catala-test-inline +$ catala typecheck -s S1 +[ERROR] Please add parentheses to explicit which of these operators should be applied first + +┌─⯈ tests/test_arithmetic/bad/logical_prio.catala_en:6.27-30: +└─┐ +6 │ definition o equals true and (false and true and true) or false + │ ‾‾‾ + + +┌─⯈ tests/test_arithmetic/bad/logical_prio.catala_en:6.57-59: +└─┐ +6 │ definition o equals true and (false and true and true) or false + │ ‾‾ + +#return code 255# +``` diff --git a/tests/test_arithmetic/good/priorities.catala_en b/tests/test_arithmetic/good/priorities.catala_en index 9643c815..0062942c 100644 --- a/tests/test_arithmetic/good/priorities.catala_en +++ b/tests/test_arithmetic/good/priorities.catala_en @@ -3,13 +3,13 @@ declaration scope A: output w content integer output x content integer output y content integer - output z content integer + output z content decimal scope A: definition w equals 4 - 2 - 2 definition x equals 4 - (2 - 2) definition y equals 4 - 2 - -2 - definition z equals 200 / 2 * 4 - 50 / - (5 - 20 / 2) + definition z equals 200 / 2 * 4. - 50. / - (5. - 20 / 2) ``` ```catala-test-inline @@ -18,5 +18,5 @@ $ catala Interpret -s A [RESULT] w = 0 [RESULT] x = 4 [RESULT] y = 4 -[RESULT] z = 390 +[RESULT] z = 390. ``` diff --git a/tests/test_array/bad/fold_error.catala_en b/tests/test_array/bad/fold_error.catala_en index aeaeb365..c89365b4 100644 --- a/tests/test_array/bad/fold_error.catala_en +++ b/tests/test_array/bad/fold_error.catala_en @@ -7,37 +7,32 @@ declaration scope A: scope A: definition list equals [0; 5; 6; 7; 1; 64; 12] - definition list_high_count equals number for m in list of (m >=$ $7) + definition list_high_count equals number of (m >= $7) for m among list ``` ```catala-test-inline $ catala Interpret -s A -[ERROR] Error during typechecking, incompatible types: ---> integer ---> money +[ERROR] I don't know how to apply operator >= on types integer and +money -Error coming from typechecking the following expression: -┌─⯈ tests/test_array/bad/fold_error.catala_en:10.52-56 +┌─⯈ tests/test_array/bad/fold_error.catala_en:10.49-51: └──┐ - │ -10 │ definition list_high_count equals number for m in list of (m >=$ $7) - │ ‾‾‾‾ +10 │ definition list_high_count equals number of (m >= $7) for m among list + │ ‾‾ └─ Article Type integer coming from expression: -┌─⯈ tests/test_array/bad/fold_error.catala_en:5.34-41 +┌─⯈ tests/test_array/bad/fold_error.catala_en:5.34-41: └─┐ - │ 5 │ context list content collection integer │ ‾‾‾‾‾‾‾ └─ Article Type money coming from expression: -┌─⯈ tests/test_array/bad/fold_error.catala_en:10.63-66 +┌─⯈ tests/test_array/bad/fold_error.catala_en:10.52-54: └──┐ - │ -10 │ definition list_high_count equals number for m in list of (m >=$ $7) - │ ‾‾‾ +10 │ definition list_high_count equals number of (m >= $7) for m among list + │ ‾‾ └─ Article #return code 255# ``` diff --git a/tests/test_array/good/aggregation.catala_en b/tests/test_array/good/aggregation.catala_en index 02ea0e01..9cdce8f5 100644 --- a/tests/test_array/good/aggregation.catala_en +++ b/tests/test_array/good/aggregation.catala_en @@ -5,7 +5,7 @@ declaration scope A: output x content collection money scope A: - definition x equals [$0; $4 +$ $5; $8 *$ 0.65] + definition x equals [$0; $4 + $5; $8 * 0.65] declaration scope B: a scope A @@ -15,10 +15,12 @@ declaration scope B: output z content integer scope B: - definition max equals maximum money initial $0 for m in a.x of m *$ 2.0 - definition min equals minimum money initial $20 for m in a.x of m +$ $5 - definition y equals sum money for m in a.x of (m +$ $1) - definition z equals number for m in a.x of (m >=$ $8.95) + definition max equals maximum of (m * 2.0) for m among a.x + or if collection empty then $0 + definition min equals minimum of (m + $5) for m among a.x + or if collection empty then $20 + definition y equals sum money of (m + $1) for m among a.x + definition z equals number of m among a.x such that m >= $8.95 ``` ```catala-test-inline diff --git a/tests/test_array/good/aggregation_2.catala_en b/tests/test_array/good/aggregation_2.catala_en index 4043e5ca..8c9722ac 100644 --- a/tests/test_array/good/aggregation_2.catala_en +++ b/tests/test_array/good/aggregation_2.catala_en @@ -11,8 +11,8 @@ declaration scope A: scope A: definition x equals [ S { -- id: 0 -- income: $0 }; - S { -- id: 1 -- income: $4 +$ $5 }; - S { -- id: 2 -- income: $8 *$ 0.65 } + S { -- id: 1 -- income: $4 + $5 }; + S { -- id: 2 -- income: $8 * 0.65 } ] declaration scope B: @@ -21,21 +21,25 @@ declaration scope B: output argmin content S scope B: - definition argmax equals content maximum money initial S { -- id: -1 --income: $0 } for m in a.x of (m.income *$ 2.0) - definition argmin equals content minimum money initial S { -- id: -1 --income: $20 } for m in a.x of (m.income +$ $5) + definition argmax equals + (m among a.x such that m.income * 2.0 is maximum + or if collection empty then S { -- id: -1 --income: $0 }) + definition argmin equals + (m among a.x such that m.income + $5 is minimum + or if collection empty then S { -- id: -1 --income: $20 }) ``` ```catala-test-inline $ catala Interpret -s A [RESULT] Computation successful! Results: [RESULT] x = - [S {"id"= 0; "income"= $0.00}; S {"id"= 1; "income"= $9.00}; - S {"id"= 2; "income"= $5.20}] + [S { "id"= 0; "income"= $0.00 }; S { "id"= 1; "income"= $9.00 }; + S { "id"= 2; "income"= $5.20 }] ``` ```catala-test-inline $ catala Interpret -s B [RESULT] Computation successful! Results: -[RESULT] argmax = S {"id"= 1; "income"= $9.00} -[RESULT] argmin = S {"id"= 0; "income"= $0.00} +[RESULT] argmax = S { "id"= 1; "income"= $9.00 } +[RESULT] argmin = S { "id"= 0; "income"= $0.00 } ``` diff --git a/tests/test_array/good/aggregation_3.catala_en b/tests/test_array/good/aggregation_3.catala_en new file mode 100644 index 00000000..3ca6029e --- /dev/null +++ b/tests/test_array/good/aggregation_3.catala_en @@ -0,0 +1,69 @@ +```catala +declaration scope S: + output x content integer + +scope S: + definition x equals 0 + +# Map + assertion (i + 2) for i among [1; 2; 3] = [3; 4; 5] + +# Filter + assertion (i among [1; 2; 3] such that i >= 2) = [2; 3] + assertion ((i + 2) for i among [1; 2; 3] such that i > 2) = [5] + +# Sum + assertion sum integer of [1; 2; 3] = 6 + assertion sum integer of (i + 2) for i among [1; 2; 3] = 12 + +# Count + assertion number of [1; 2; 3] = 3 + assertion (number of i among [1; 2; 3] such that i >= 2) = 2 + +# Extremum + assertion maximum of [1; 2; 3] or if collection empty then 10 = 3 + assertion maximum of (decimal of i) for i among [1; 2; 3] or if collection empty then 10. = 3. + +# Arg extremum + assertion (i among [1; 2; 3] + such that decimal of ((2 - i) * (2 - i)) is minimum + or if collection empty then 42) + = 2 +``` + +```catala-test-inline +$ catala scopelang -s S +let scope S (x: integer|internal|output) = + let x : integer = ⟨true ⊢ 0⟩; + assert reduce + (λ (i_1: integer) (i_2: integer) → + if + let i : integer = i_1 in + to_rat_int 2 -! i *! 2 -! i <. + let i : integer = i_2 in + to_rat_int 2 -! i *! 2 -! i then i_1 else i_2) 42 [1; 2; 3] + = 2; + assert reduce + (λ (max1: decimal) (max2: decimal) → + if max1 >. max2 then max1 else max2) 10. + map (λ (i: integer) → to_rat_int i) [1; 2; 3] = 3.; + assert reduce + (λ (max1: integer) (max2: integer) → + if max1 >! max2 then max1 else max2) 10 [1; 2; 3] = 3; + assert length filter (λ (i: integer) → i >=! 2) [1; 2; 3] = 2; + assert length [1; 2; 3] = 3; + assert reduce (λ (sum1: integer) (sum2: integer) → sum1 +! sum2) 0 + map (λ (i: integer) → i +! 2) [1; 2; 3] = 12; + assert reduce (λ (sum1: integer) (sum2: integer) → sum1 +! sum2) 0 + [1; 2; 3] = 6; + assert map (λ (i: integer) → i +! 2) + filter (λ (i: integer) → i >! 2) [1; 2; 3] = [5]; + assert filter (λ (i: integer) → i >=! 2) [1; 2; 3] = [2; 3]; + assert map (λ (i: integer) → i +! 2) [1; 2; 3] = [3; 4; 5] +``` + +```catala-test-inline +$ catala interpret -s S +[RESULT] Computation successful! Results: +[RESULT] x = 0 +``` diff --git a/tests/test_array/good/filter_map.catala_en b/tests/test_array/good/filter_map.catala_en index 7e033752..9939b59c 100644 --- a/tests/test_array/good/filter_map.catala_en +++ b/tests/test_array/good/filter_map.catala_en @@ -5,7 +5,7 @@ declaration scope A: output x content collection money scope A: - definition x equals [$0; $4 +$ $5; $8 *$ 0.65] + definition x equals [$0; $4 + $5; $8 * 0.65] declaration scope B: a scope A @@ -13,8 +13,8 @@ declaration scope B: output z content collection boolean scope B: - definition y equals filter for m in a.x of (m >=$ $4.95) - definition z equals map for m in a.x of (m >=$ $4.95) + definition y equals m among a.x such that m >= $4.95 + definition z equals (m >= $4.95) for m among a.x ``` ```catala-test-inline diff --git a/tests/test_array/good/simple.catala_en b/tests/test_array/good/simple.catala_en index ddfa498b..cd5c36a9 100644 --- a/tests/test_array/good/simple.catala_en +++ b/tests/test_array/good/simple.catala_en @@ -17,8 +17,8 @@ declaration scope B: scope B: definition v equals number of a.x definition w equals a.x contains 64 - definition y equals exists m in a.x such that m = 9 - definition z equals for all m in a.x we have m > 0 + definition y equals exists m among a.x such that m = 9 + definition z equals for all m among a.x we have m > 0 ``` ```catala-test-inline diff --git a/tests/test_bool/bad/bad_assert.catala_en b/tests/test_bool/bad/bad_assert.catala_en index 9c63c6fc..aa628081 100644 --- a/tests/test_bool/bad/bad_assert.catala_en +++ b/tests/test_bool/bad/bad_assert.catala_en @@ -17,25 +17,22 @@ $ catala Interpret -s Foo --> bool Error coming from typechecking the following expression: -┌─⯈ tests/test_bool/bad/bad_assert.catala_en:9.12-13 +┌─⯈ tests/test_bool/bad/bad_assert.catala_en:9.12-13: └─┐ - │ 9 │ assertion x │ ‾ └─ Test Type integer coming from expression: -┌─⯈ tests/test_bool/bad/bad_assert.catala_en:5.21-28 +┌─⯈ tests/test_bool/bad/bad_assert.catala_en:5.21-28: └─┐ - │ 5 │ internal x content integer │ ‾‾‾‾‾‾‾ └─ Test Type bool coming from expression: -┌─⯈ tests/test_bool/bad/bad_assert.catala_en:9.12-13 +┌─⯈ tests/test_bool/bad/bad_assert.catala_en:9.12-13: └─┐ - │ 9 │ assertion x │ ‾ └─ Test diff --git a/tests/test_bool/bad/test_xor_with_int.catala_en b/tests/test_bool/bad/test_xor_with_int.catala_en index 787f122c..c3662a02 100644 --- a/tests/test_bool/bad/test_xor_with_int.catala_en +++ b/tests/test_bool/bad/test_xor_with_int.catala_en @@ -11,31 +11,28 @@ scope TestXorWithInt: ```catala-test-inline $ catala Typecheck [ERROR] Error during typechecking, incompatible types: ---> bool --> integer +--> bool Error coming from typechecking the following expression: -┌─⯈ tests/test_bool/bad/test_xor_with_int.catala_en:8.32-35 +┌─⯈ tests/test_bool/bad/test_xor_with_int.catala_en:8.29-31: └─┐ - │ 8 │ definition test_var equals 10 xor 20 - │ ‾‾‾ - └─ 'xor' should be a boolean operator - -Type bool coming from expression: -┌─⯈ tests/test_bool/bad/test_xor_with_int.catala_en:8.32-35 -└─┐ - │ -8 │ definition test_var equals 10 xor 20 - │ ‾‾‾ + │ ‾‾ └─ 'xor' should be a boolean operator Type integer coming from expression: -┌─⯈ tests/test_bool/bad/test_xor_with_int.catala_en:5.27-34 +┌─⯈ tests/test_bool/bad/test_xor_with_int.catala_en:8.29-31: └─┐ - │ -5 │ context test_var content integer - │ ‾‾‾‾‾‾‾ +8 │ definition test_var equals 10 xor 20 + │ ‾‾ + └─ 'xor' should be a boolean operator + +Type bool coming from expression: +┌─⯈ tests/test_bool/bad/test_xor_with_int.catala_en:8.32-35: +└─┐ +8 │ definition test_var equals 10 xor 20 + │ ‾‾‾ └─ 'xor' should be a boolean operator #return code 255# ``` diff --git a/tests/test_bool/good/test_bool.catala_en b/tests/test_bool/good/test_bool.catala_en index bb4ffb8a..ce632b8e 100644 --- a/tests/test_bool/good/test_bool.catala_en +++ b/tests/test_bool/good/test_bool.catala_en @@ -24,9 +24,9 @@ let TestBool : in let foo1 : bool = error_empty ⟨foo () | true ⊢ - ⟨⟨bar1 >= 0 ⊢ true⟩, ⟨bar1 < 0 ⊢ false⟩ | false ⊢ + ⟨⟨bar1 >=! 0 ⊢ true⟩, ⟨bar1 = 0 ⊢ true⟩, ⟨bar < 0 ⊢ false⟩ | false ⊢ ∅ ⟩ + ⟨⟨bar >=! 0 ⊢ true⟩, ⟨bar ^ 2 day + definition d equals 1 month > 2 day ``` -### `>=^` operator +### `>=` operator ```catala declaration scope Ge: context d content boolean scope Ge: - definition d equals 1 month >=^ 2 day + definition d equals 1 month >= 2 day ``` ```catala-test-inline $ catala Interpret -s Ge [ERROR] Cannot compare together durations that cannot be converted to a precise number of days -┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:40.22-29 +┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:40.22-29: └──┐ - │ -40 │ definition d equals 1 month >=^ 2 day +40 │ definition d equals 1 month >= 2 day │ ‾‾‾‾‾‾‾ └┬ `UncomparableDurations` exception management - └─ `>=^` operator + └─ `>=` operator -┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:40.34-39 +┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:40.33-38: └──┐ - │ -40 │ definition d equals 1 month >=^ 2 day - │ ‾‾‾‾‾ +40 │ definition d equals 1 month >= 2 day + │ ‾‾‾‾‾ └┬ `UncomparableDurations` exception management - └─ `>=^` operator + └─ `>=` operator #return code 255# ``` @@ -66,21 +64,19 @@ $ catala Interpret -s Ge $ catala Interpret -s Gt [ERROR] Cannot compare together durations that cannot be converted to a precise number of days -┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:30.22-29 +┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:30.22-29: └──┐ - │ -30 │ definition d equals 1 month >^ 2 day +30 │ definition d equals 1 month > 2 day │ ‾‾‾‾‾‾‾ └┬ `UncomparableDurations` exception management - └─ `<=^` operator + └─ `<=` operator -┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:30.33-38 +┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:30.32-37: └──┐ - │ -30 │ definition d equals 1 month >^ 2 day - │ ‾‾‾‾‾ +30 │ definition d equals 1 month > 2 day + │ ‾‾‾‾‾ └┬ `UncomparableDurations` exception management - └─ `<=^` operator + └─ `<=` operator #return code 255# ``` @@ -88,21 +84,19 @@ $ catala Interpret -s Gt $ catala Interpret -s Le [ERROR] Cannot compare together durations that cannot be converted to a precise number of days -┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:20.22-29 +┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:20.22-29: └──┐ - │ -20 │ definition d equals 1 month <=^ 2 day +20 │ definition d equals 1 month <= 2 day │ ‾‾‾‾‾‾‾ └┬ `UncomparableDurations` exception management - └─ `<=^` operator + └─ `<=` operator -┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:20.34-39 +┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:20.33-38: └──┐ - │ -20 │ definition d equals 1 month <=^ 2 day - │ ‾‾‾‾‾ +20 │ definition d equals 1 month <= 2 day + │ ‾‾‾‾‾ └┬ `UncomparableDurations` exception management - └─ `<=^` operator + └─ `<=` operator #return code 255# ``` @@ -110,20 +104,18 @@ $ catala Interpret -s Le $ catala Interpret -s Lt [ERROR] Cannot compare together durations that cannot be converted to a precise number of days -┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:10.22-29 +┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:10.22-29: └──┐ - │ -10 │ definition d equals 1 month <^ 2 day +10 │ definition d equals 1 month < 2 day │ ‾‾‾‾‾‾‾ └┬ `UncomparableDurations` exception management - └─ `<^` operator + └─ `<` operator -┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:10.33-38 +┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:10.32-37: └──┐ - │ -10 │ definition d equals 1 month <^ 2 day - │ ‾‾‾‾‾ +10 │ definition d equals 1 month < 2 day + │ ‾‾‾‾‾ └┬ `UncomparableDurations` exception management - └─ `<^` operator + └─ `<` operator #return code 255# ``` diff --git a/tests/test_date/good/durations.catala_en b/tests/test_date/good/durations.catala_en index b5868791..039f2012 100644 --- a/tests/test_date/good/durations.catala_en +++ b/tests/test_date/good/durations.catala_en @@ -14,13 +14,13 @@ scope A: definition x equals |2019-01-01| definition y equals |2002-09-30| - definition z equals y +@ (x -@ y) = x - definition z3 equals x -@ y + definition z equals y + (x - y) = x + definition z3 equals x - y definition z2 equals z3 = 5937 day - definition m equals z3 *^ 2 + definition m equals z3 * 2 - definition m2 equals (2 month) *^ 3 + definition m2 equals (2 month) * 3 ``` ```catala-test-inline diff --git a/tests/test_date/good/simple.catala_en b/tests/test_date/good/simple.catala_en index 8f16739f..2bc7af87 100644 --- a/tests/test_date/good/simple.catala_en +++ b/tests/test_date/good/simple.catala_en @@ -9,7 +9,7 @@ declaration scope A: scope A: definition x equals |2019-01-01| definition y equals |2002-09-30| - definition z equals x -@ y + definition z equals x - y ``` ```catala-test-inline diff --git a/tests/test_dec/good/infinite_precision.catala_en b/tests/test_dec/good/infinite_precision.catala_en index 7e6007ff..460df3d0 100644 --- a/tests/test_dec/good/infinite_precision.catala_en +++ b/tests/test_dec/good/infinite_precision.catala_en @@ -9,9 +9,9 @@ declaration scope A: scope A: definition x equals 84.64866565265689623 - definition y equals -. 4.36829778705320654980 + definition y equals - 4.36829778705320654980 definition z equals 654265429805103220650980650.5705405106540 - definition a equals x /. (y *. (x +. y) *. (x *. x *. z *. z)) + definition a equals x / (y * (x + y) * (x * x * z * z)) ``` ```catala-test-inline diff --git a/tests/test_dec/good/rounding.catala_en b/tests/test_dec/good/rounding.catala_en index 5ccf7a6a..f3124c7a 100644 --- a/tests/test_dec/good/rounding.catala_en +++ b/tests/test_dec/good/rounding.catala_en @@ -10,8 +10,8 @@ declaration scope A: 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 + definition x1 equals round of x + definition y1 equals round of y ``` ```catala-test-inline diff --git a/tests/test_dec/good/simple.catala_en b/tests/test_dec/good/simple.catala_en index dd8c4492..41fc3182 100644 --- a/tests/test_dec/good/simple.catala_en +++ b/tests/test_dec/good/simple.catala_en @@ -9,7 +9,7 @@ declaration scope A: scope A: definition x equals 84.648665 definition y equals 4.368297 - definition z equals x /. y + definition z equals x / y ``` ```catala-test-inline diff --git a/tests/test_dec/good/zero_after_comma.catala_en b/tests/test_dec/good/zero_after_comma.catala_en index 3cdb7534..fff4ab66 100644 --- a/tests/test_dec/good/zero_after_comma.catala_en +++ b/tests/test_dec/good/zero_after_comma.catala_en @@ -7,7 +7,7 @@ declaration scope A: scope A: definition x equals 4.0 - definition y equals 1.0 +. (x /. 100.0) + definition y equals 1.0 + (x / 100.0) assertion y = 1.04 ``` diff --git a/tests/test_default/bad/conflict.catala_en b/tests/test_default/bad/conflict.catala_en index 7371fe56..34b58e05 100644 --- a/tests/test_default/bad/conflict.catala_en +++ b/tests/test_default/bad/conflict.catala_en @@ -14,17 +14,15 @@ $ catala Interpret -s A [ERROR] There is a conflict between multiple valid consequences for assigning the same variable. This consequence has a valid justification: -┌─⯈ tests/test_default/bad/conflict.catala_en:8.55-56 +┌─⯈ tests/test_default/bad/conflict.catala_en:8.55-56: └─┐ - │ 8 │ definition x under condition true consequence equals 1 │ ‾ └─ Article This consequence has a valid justification: -┌─⯈ tests/test_default/bad/conflict.catala_en:9.55-56 +┌─⯈ tests/test_default/bad/conflict.catala_en:9.55-56: └─┐ - │ 9 │ definition x under condition true consequence equals 0 │ ‾ └─ Article diff --git a/tests/test_default/bad/empty.catala_en b/tests/test_default/bad/empty.catala_en index 88ef4b40..a28b68cb 100644 --- a/tests/test_default/bad/empty.catala_en +++ b/tests/test_default/bad/empty.catala_en @@ -13,9 +13,8 @@ scope A: $ catala Interpret -s A [ERROR] This variable evaluated to an empty term (no rule that defined it applied in this situation) -┌─⯈ tests/test_default/bad/empty.catala_en:6.10-11 +┌─⯈ tests/test_default/bad/empty.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Article diff --git a/tests/test_default/bad/empty_with_rules.catala_en b/tests/test_default/bad/empty_with_rules.catala_en index 08dcf287..be602163 100644 --- a/tests/test_default/bad/empty_with_rules.catala_en +++ b/tests/test_default/bad/empty_with_rules.catala_en @@ -16,9 +16,8 @@ scope A: $ catala Interpret -s A [ERROR] This variable evaluated to an empty term (no rule that defined it applied in this situation) -┌─⯈ tests/test_default/bad/empty_with_rules.catala_en:5.10-11 +┌─⯈ tests/test_default/bad/empty_with_rules.catala_en:5.10-11: └─┐ - │ 5 │ context x content integer │ ‾ └─ Article diff --git a/tests/test_enum/bad/ambiguous_cases.catala_en b/tests/test_enum/bad/ambiguous_cases.catala_en index 2f8233cb..10a8b096 100644 --- a/tests/test_enum/bad/ambiguous_cases.catala_en +++ b/tests/test_enum/bad/ambiguous_cases.catala_en @@ -18,9 +18,8 @@ scope A: $ catala Interpret -s A [ERROR] This constructor name is ambiguous, it can belong to E or F. Desambiguate it by prefixing it with the enum name. -┌─⯈ tests/test_enum/bad/ambiguous_cases.catala_en:14.22-27 +┌─⯈ tests/test_enum/bad/ambiguous_cases.catala_en:14.22-27: └──┐ - │ 14 │ definition e equals Case1 │ ‾‾‾‾‾ └─ Article diff --git a/tests/test_enum/bad/ambiguous_wildcard.catala_en b/tests/test_enum/bad/ambiguous_wildcard.catala_en index addfbc9e..dcd209d4 100644 --- a/tests/test_enum/bad/ambiguous_wildcard.catala_en +++ b/tests/test_enum/bad/ambiguous_wildcard.catala_en @@ -19,11 +19,10 @@ scope A: $ catala Interpret -s A [ERROR] Couldn't infer the enumeration name from lonely wildcard (wildcard cannot be used as single match case) -┌─⯈ tests/test_enum/bad/ambiguous_wildcard.catala_en:15.7-20 +┌─⯈ tests/test_enum/bad/ambiguous_wildcard.catala_en:15.4-20: └──┐ - │ 15 │ -- anything : 31 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └─ Wildcard cannot be used as single match case #return code 255# ``` diff --git a/tests/test_enum/bad/duplicate_case.catala_en b/tests/test_enum/bad/duplicate_case.catala_en index aa924645..01ee3bdb 100644 --- a/tests/test_enum/bad/duplicate_case.catala_en +++ b/tests/test_enum/bad/duplicate_case.catala_en @@ -22,16 +22,14 @@ scope A: $ catala Interpret -s A [ERROR] The constructor Case3 has been matched twice: -┌─⯈ tests/test_enum/bad/duplicate_case.catala_en:18.15-19 +┌─⯈ tests/test_enum/bad/duplicate_case.catala_en:18.15-19: └──┐ - │ 18 │ -- Case3 : true │ ‾‾‾‾ └─ Article -┌─⯈ tests/test_enum/bad/duplicate_case.catala_en:17.15-20 +┌─⯈ tests/test_enum/bad/duplicate_case.catala_en:17.15-20: └──┐ - │ 17 │ -- Case3 : false │ ‾‾‾‾‾ └─ Article diff --git a/tests/test_enum/bad/empty.catala_en b/tests/test_enum/bad/empty.catala_en index b196681d..785d46d3 100644 --- a/tests/test_enum/bad/empty.catala_en +++ b/tests/test_enum/bad/empty.catala_en @@ -11,9 +11,8 @@ declaration scope Bar: $ catala Typecheck [ERROR] The enum Foo does not have any cases; give it some for Catala to be able to accept it. -┌─⯈ tests/test_enum/bad/empty.catala_en:4.24-27 +┌─⯈ tests/test_enum/bad/empty.catala_en:4.24-27: └─┐ - │ 4 │ declaration enumeration Foo: │ ‾‾‾ └─ Test diff --git a/tests/test_enum/bad/missing_case.catala_en b/tests/test_enum/bad/missing_case.catala_en index 0829c987..4f98ef14 100644 --- a/tests/test_enum/bad/missing_case.catala_en +++ b/tests/test_enum/bad/missing_case.catala_en @@ -20,15 +20,14 @@ scope A: $ catala Interpret -s A [ERROR] The constructor Case3 of enum E is missing from this pattern matching -┌─⯈ tests/test_enum/bad/missing_case.catala_en:14.24-16.21 +┌─⯈ tests/test_enum/bad/missing_case.catala_en:14.24-16.21: └──┐ - │ 14 │ definition out equals match e with pattern - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 15 │ -- Case1 of i : i = 0 │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 16 │ -- Case2 of b : b - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └─ Article #return code 255# ``` diff --git a/tests/test_enum/bad/not_ending_wildcard.catala_en b/tests/test_enum/bad/not_ending_wildcard.catala_en index 2f17a464..ce4882cf 100644 --- a/tests/test_enum/bad/not_ending_wildcard.catala_en +++ b/tests/test_enum/bad/not_ending_wildcard.catala_en @@ -41,20 +41,18 @@ $ catala Interpret -s First_case [ERROR] Wildcard must be the last match case Not ending wildcard: -┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:19.7-20 +┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:19.4-20: └──┐ - │ 19 │ -- anything : 31 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └┬ Wildcard must be the last case └─ Wildcard can't be the first case Next reachable case: -┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:20.7-17 +┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:20.4-17: └──┐ - │ 20 │ -- Case2 : 42 - │ ‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾ └┬ Wildcard must be the last case └─ Wildcard can't be the first case #return code 255# @@ -65,20 +63,18 @@ $ catala Interpret -s Middle_case [ERROR] Wildcard must be the last match case Not ending wildcard: -┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:19.7-20 +┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:19.4-20: └──┐ - │ 19 │ -- anything : 31 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └┬ Wildcard must be the last case └─ Wildcard can't be the first case Next reachable case: -┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:20.7-17 +┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:20.4-17: └──┐ - │ 20 │ -- Case2 : 42 - │ ‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾ └┬ Wildcard must be the last case └─ Wildcard can't be the first case #return code 255# diff --git a/tests/test_enum/bad/quick_pattern_2.catala_en b/tests/test_enum/bad/quick_pattern_2.catala_en index 4aa68008..8620c02c 100644 --- a/tests/test_enum/bad/quick_pattern_2.catala_en +++ b/tests/test_enum/bad/quick_pattern_2.catala_en @@ -35,25 +35,22 @@ $ catala Interpret -s A --> F Error coming from typechecking the following expression: -┌─⯈ tests/test_enum/bad/quick_pattern_2.catala_en:28.22-23 +┌─⯈ tests/test_enum/bad/quick_pattern_2.catala_en:28.22-23: └──┐ - │ 28 │ definition y equals x with pattern Case3 │ ‾ └─ Article Type E coming from expression: -┌─⯈ tests/test_enum/bad/quick_pattern_2.catala_en:17.20-21 +┌─⯈ tests/test_enum/bad/quick_pattern_2.catala_en:17.20-21: └──┐ - │ 17 │ context x content E │ ‾ └─ Article Type F coming from expression: -┌─⯈ tests/test_enum/bad/quick_pattern_2.catala_en:28.22-42 +┌─⯈ tests/test_enum/bad/quick_pattern_2.catala_en:28.22-42: └──┐ - │ 28 │ definition y equals x with pattern Case3 │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └─ Article diff --git a/tests/test_enum/bad/quick_pattern_3.catala_en b/tests/test_enum/bad/quick_pattern_3.catala_en index 593d99f1..6bc655e1 100644 --- a/tests/test_enum/bad/quick_pattern_3.catala_en +++ b/tests/test_enum/bad/quick_pattern_3.catala_en @@ -25,25 +25,22 @@ $ catala Interpret -s A --> F Error coming from typechecking the following expression: -┌─⯈ tests/test_enum/bad/quick_pattern_3.catala_en:18.20-21 +┌─⯈ tests/test_enum/bad/quick_pattern_3.catala_en:18.20-21: └──┐ - │ 18 │ definition y equals x with pattern Case3 │ ‾ └─ Article Type E coming from expression: -┌─⯈ tests/test_enum/bad/quick_pattern_3.catala_en:13.18-19 +┌─⯈ tests/test_enum/bad/quick_pattern_3.catala_en:13.18-19: └──┐ - │ 13 │ context x content E │ ‾ └─ Article Type F coming from expression: -┌─⯈ tests/test_enum/bad/quick_pattern_3.catala_en:18.20-40 +┌─⯈ tests/test_enum/bad/quick_pattern_3.catala_en:18.20-40: └──┐ - │ 18 │ definition y equals x with pattern Case3 │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └─ Article diff --git a/tests/test_enum/bad/quick_pattern_4.catala_en b/tests/test_enum/bad/quick_pattern_4.catala_en index 04d3a169..a56402e6 100644 --- a/tests/test_enum/bad/quick_pattern_4.catala_en +++ b/tests/test_enum/bad/quick_pattern_4.catala_en @@ -24,25 +24,22 @@ $ catala Interpret -s A --> F Error coming from typechecking the following expression: -┌─⯈ tests/test_enum/bad/quick_pattern_4.catala_en:17.20-21 +┌─⯈ tests/test_enum/bad/quick_pattern_4.catala_en:17.20-21: └──┐ - │ 17 │ definition y equals x with pattern Case3 │ ‾ └─ Test Type E coming from expression: -┌─⯈ tests/test_enum/bad/quick_pattern_4.catala_en:12.18-19 +┌─⯈ tests/test_enum/bad/quick_pattern_4.catala_en:12.18-19: └──┐ - │ 12 │ context x content E │ ‾ └─ Test Type F coming from expression: -┌─⯈ tests/test_enum/bad/quick_pattern_4.catala_en:17.20-40 +┌─⯈ tests/test_enum/bad/quick_pattern_4.catala_en:17.20-40: └──┐ - │ 17 │ definition y equals x with pattern Case3 │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └─ Test diff --git a/tests/test_enum/bad/quick_pattern_fail.catala_en b/tests/test_enum/bad/quick_pattern_fail.catala_en index 1f339762..1ae27234 100644 --- a/tests/test_enum/bad/quick_pattern_fail.catala_en +++ b/tests/test_enum/bad/quick_pattern_fail.catala_en @@ -19,9 +19,8 @@ scope A: $ catala Interpret -s A [ERROR] The name of this constructor has not been defined before, maybe it is a typo? -┌─⯈ tests/test_enum/bad/quick_pattern_fail.catala_en:15.37-42 +┌─⯈ tests/test_enum/bad/quick_pattern_fail.catala_en:15.37-42: └──┐ - │ 15 │ definition y equals x with pattern Case3 │ ‾‾‾‾‾ └─ Article diff --git a/tests/test_enum/bad/too_many_cases.catala_en b/tests/test_enum/bad/too_many_cases.catala_en index 8418b321..c8ef84df 100644 --- a/tests/test_enum/bad/too_many_cases.catala_en +++ b/tests/test_enum/bad/too_many_cases.catala_en @@ -25,11 +25,10 @@ scope A: $ catala Interpret -s A [ERROR] This case matches a constructor of enumeration E but previous case were matching constructors of enumeration F -┌─⯈ tests/test_enum/bad/too_many_cases.catala_en:21.7-19 +┌─⯈ tests/test_enum/bad/too_many_cases.catala_en:21.7-12: └──┐ - │ 21 │ -- Case4 : true - │ ‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾ └─ Article #return code 255# ``` diff --git a/tests/test_enum/bad/useless_wildcard.catala_en b/tests/test_enum/bad/useless_wildcard.catala_en index 8cc67019..4e655398 100644 --- a/tests/test_enum/bad/useless_wildcard.catala_en +++ b/tests/test_enum/bad/useless_wildcard.catala_en @@ -21,11 +21,10 @@ scope A: $ catala Interpret -s A [WARNING] Unreachable match case, all constructors of the enumeration E are already specified -┌─⯈ tests/test_enum/bad/useless_wildcard.catala_en:17.7-20 +┌─⯈ tests/test_enum/bad/useless_wildcard.catala_en:17.4-20: └──┐ - │ 17 │ -- anything : 31 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └─ Useless wildcard [RESULT] Computation successful! Results: [RESULT] x = Case1 () diff --git a/tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en b/tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en index b0904105..ff4eda2f 100644 --- a/tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en +++ b/tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en @@ -18,9 +18,8 @@ $ catala Interpret -s A [ERROR] This exception can refer to several definitions. Try using labels to disambiguate Ambiguous exception -┌─⯈ tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en:10.23-13.23 +┌─⯈ tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en:10.23-13.23: └──┐ - │ 10 │ definition x equals 1 │ 11 │ @@ -28,21 +27,19 @@ Ambiguous exception 12 │ exception │ ‾‾‾‾‾‾‾‾‾ 13 │ definition x equals 2 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └─ Test Candidate definition -┌─⯈ tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en:10.13-14 +┌─⯈ tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en:10.13-14: └──┐ - │ 10 │ definition x equals 1 │ ‾ └─ Test Candidate definition -┌─⯈ tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en:8.13-14 +┌─⯈ tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en:8.13-14: └─┐ - │ 8 │ definition x equals 0 │ ‾ └─ Test diff --git a/tests/test_exception/bad/dangling_exception.catala_en b/tests/test_exception/bad/dangling_exception.catala_en index 043bd2b2..8ec7a131 100644 --- a/tests/test_exception/bad/dangling_exception.catala_en +++ b/tests/test_exception/bad/dangling_exception.catala_en @@ -17,9 +17,8 @@ scope A: $ catala Interpret -s A [ERROR] Unknown label for the scope variable x: "base_y" -┌─⯈ tests/test_exception/bad/dangling_exception.catala_en:12.12-18 +┌─⯈ tests/test_exception/bad/dangling_exception.catala_en:12.12-18: └──┐ - │ 12 │ exception base_y │ ‾‾‾‾‾‾ └─ Test diff --git a/tests/test_exception/bad/exceptions_cycle.catala_en b/tests/test_exception/bad/exceptions_cycle.catala_en index c64f2159..d40ade86 100644 --- a/tests/test_exception/bad/exceptions_cycle.catala_en +++ b/tests/test_exception/bad/exceptions_cycle.catala_en @@ -23,61 +23,55 @@ $ catala Interpret -s A [ERROR] Cyclic dependency detected between exceptions! Cyclic exception for definition of variable "x", declared here: -┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:16.2-18.23 +┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:16.2-18.23: └──┐ - │ 16 │ label exception_exception_x - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 17 │ exception exception_x │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 18 │ definition x equals 2 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Used here in the definition of another cyclic exception for defining "x": -┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:17.12-23 +┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:17.12-23: └──┐ - │ 17 │ exception exception_x │ ‾‾‾‾‾‾‾‾‾‾‾ └─ Test Cyclic exception for definition of variable "x", declared here: -┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:12.2-14.23 +┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:12.2-14.23: └──┐ - │ 12 │ label exception_x - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 13 │ exception base_x │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 14 │ definition x equals 1 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Used here in the definition of another cyclic exception for defining "x": -┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:13.12-18 +┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:13.12-18: └──┐ - │ 13 │ exception base_x │ ‾‾‾‾‾‾ └─ Test Cyclic exception for definition of variable "x", declared here: -┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:8.2-10.23 +┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:8.2-10.23: └──┐ - │ 8 │ label base_x - │ ‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾ 9 │ exception exception_exception_x │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 10 │ definition x equals 0 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Used here in the definition of another cyclic exception for defining "x": -┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:9.12-33 +┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:9.12-33: └─┐ - │ 9 │ exception exception_exception_x │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └─ Test diff --git a/tests/test_exception/bad/missing_unlabeled_definition.catala_en b/tests/test_exception/bad/missing_unlabeled_definition.catala_en index 9f95e0e2..c0365eb8 100644 --- a/tests/test_exception/bad/missing_unlabeled_definition.catala_en +++ b/tests/test_exception/bad/missing_unlabeled_definition.catala_en @@ -13,15 +13,14 @@ scope A: $ catala Interpret -s A [ERROR] This exception does not have a corresponding definition -┌─⯈ tests/test_exception/bad/missing_unlabeled_definition.catala_en:7.8-9.23 +┌─⯈ tests/test_exception/bad/missing_unlabeled_definition.catala_en:7.8-9.23: └─┐ - │ 7 │ scope A: │ 8 │ exception │ ‾‾‾‾‾‾‾‾‾ 9 │ definition x equals 1 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └─ Test #return code 255# ``` diff --git a/tests/test_exception/bad/one_ambiguous_exception.catala_en b/tests/test_exception/bad/one_ambiguous_exception.catala_en index d5428012..940a456d 100644 --- a/tests/test_exception/bad/one_ambiguous_exception.catala_en +++ b/tests/test_exception/bad/one_ambiguous_exception.catala_en @@ -24,9 +24,8 @@ $ catala Interpret -s A [ERROR] This exception can refer to several definitions. Try using labels to disambiguate Ambiguous exception -┌─⯈ tests/test_exception/bad/one_ambiguous_exception.catala_en:16.23-19.23 +┌─⯈ tests/test_exception/bad/one_ambiguous_exception.catala_en:16.23-19.23: └──┐ - │ 16 │ definition y equals 4 │ 17 │ @@ -34,21 +33,19 @@ Ambiguous exception 18 │ exception │ ‾‾‾‾‾‾‾‾‾ 19 │ definition y equals 3 - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ └─ Test Candidate definition -┌─⯈ tests/test_exception/bad/one_ambiguous_exception.catala_en:16.13-14 +┌─⯈ tests/test_exception/bad/one_ambiguous_exception.catala_en:16.13-14: └──┐ - │ 16 │ definition y equals 4 │ ‾ └─ Test Candidate definition -┌─⯈ tests/test_exception/bad/one_ambiguous_exception.catala_en:14.13-14 +┌─⯈ tests/test_exception/bad/one_ambiguous_exception.catala_en:14.13-14: └──┐ - │ 14 │ definition y equals 2 │ ‾ └─ Test diff --git a/tests/test_exception/bad/self_exception.catala_en b/tests/test_exception/bad/self_exception.catala_en index c1ca4283..2455e9d3 100644 --- a/tests/test_exception/bad/self_exception.catala_en +++ b/tests/test_exception/bad/self_exception.catala_en @@ -14,9 +14,8 @@ scope A: $ catala Interpret -s A [ERROR] Cannot define rule as an exception to itself -┌─⯈ tests/test_exception/bad/self_exception.catala_en:9.12-18 +┌─⯈ tests/test_exception/bad/self_exception.catala_en:9.12-18: └─┐ - │ 9 │ exception base_y │ ‾‾‾‾‾‾ └─ Test diff --git a/tests/test_exception/bad/two_exceptions.catala_en b/tests/test_exception/bad/two_exceptions.catala_en index 5e228b4a..49f0fe30 100644 --- a/tests/test_exception/bad/two_exceptions.catala_en +++ b/tests/test_exception/bad/two_exceptions.catala_en @@ -20,17 +20,15 @@ $ catala Interpret -s A [ERROR] There is a conflict between multiple valid consequences for assigning the same variable. This consequence has a valid justification: -┌─⯈ tests/test_exception/bad/two_exceptions.catala_en:12.22-23 +┌─⯈ tests/test_exception/bad/two_exceptions.catala_en:12.22-23: └──┐ - │ 12 │ definition x equals 1 │ ‾ └─ Test This consequence has a valid justification: -┌─⯈ tests/test_exception/bad/two_exceptions.catala_en:15.22-23 +┌─⯈ tests/test_exception/bad/two_exceptions.catala_en:15.22-23: └──┐ - │ 15 │ definition x equals 2 │ ‾ └─ Test diff --git a/tests/test_exception/good/grouped_exceptions.catala_en b/tests/test_exception/good/grouped_exceptions.catala_en index 975cd258..fa6371dd 100644 --- a/tests/test_exception/good/grouped_exceptions.catala_en +++ b/tests/test_exception/good/grouped_exceptions.catala_en @@ -50,5 +50,5 @@ scope Benefit: $ catala Interpret -s Benefit [RESULT] Computation successful! Results: [RESULT] benefit = $2000.00 -[RESULT] person = Person {"age"= 26; "disabled"= true} +[RESULT] person = Person { "age"= 26; "disabled"= true } ``` diff --git a/tests/test_func/bad/bad_func.catala_en b/tests/test_func/bad/bad_func.catala_en index 066eb855..3b4bc62b 100644 --- a/tests/test_func/bad/bad_func.catala_en +++ b/tests/test_func/bad/bad_func.catala_en @@ -32,17 +32,15 @@ $ catala Interpret -s S [ERROR] There is a conflict between multiple valid consequences for assigning the same variable. This consequence has a valid justification: -┌─⯈ tests/test_func/bad/bad_func.catala_en:14.64-69 +┌─⯈ tests/test_func/bad/bad_func.catala_en:14.64-69: └──┐ - │ 14 │ definition f of x under condition (x >= x) consequence equals x + x │ ‾‾‾‾‾ └─ Article This consequence has a valid justification: -┌─⯈ tests/test_func/bad/bad_func.catala_en:15.61-66 +┌─⯈ tests/test_func/bad/bad_func.catala_en:15.61-66: └──┐ - │ 15 │ definition f of x under condition not b consequence equals x * x │ ‾‾‾‾‾ └─ Article diff --git a/tests/test_func/bad/recursive.catala_en b/tests/test_func/bad/recursive.catala_en index 457386f0..0c9da8cb 100644 --- a/tests/test_func/bad/recursive.catala_en +++ b/tests/test_func/bad/recursive.catala_en @@ -12,9 +12,8 @@ scope RecursiveFunc: $ catala Interpret -s RecursiveFunc [ERROR] The variable f is used in one of its definitions, but recursion is forbidden in Catala -┌─⯈ tests/test_func/bad/recursive.catala_en:8.27-28 +┌─⯈ tests/test_func/bad/recursive.catala_en:8.27-28: └─┐ - │ 8 │ definition f of x equals f of x + 1 │ ‾ └─ Article diff --git a/tests/test_func/good/context_func.catala_en b/tests/test_func/good/context_func.catala_en new file mode 100644 index 00000000..7ebc9888 --- /dev/null +++ b/tests/test_func/good/context_func.catala_en @@ -0,0 +1,46 @@ +## Test + +```catala +declaration scope A: + context f content integer depends on integer + +declaration scope B: + input b content boolean + a scope A + +scope A: + definition f of x equals x + 1 + +scope B: + definition a.f of x under condition b and x > 0 consequence equals x - 1 +``` + +```catala-test-inline +$ catala Scopelang -s B +let scope B (b: bool|input) = + let a.f : integer → integer = + λ (param: integer) → ⟨b && param >! 0 ⊢ param -! 1⟩; + call A[a] +``` + +```catala-test-inline +$ catala Dcalc -s A +let A = + λ (A_in: A_in {"f_in": integer → integer}) → + let f : integer → integer = A_in."f_in" in + let f1 : integer → integer = + λ (param: integer) → error_empty + ⟨f param | true ⊢ ⟨true ⊢ param +! 1⟩⟩ in + A { } +``` + +```catala-test-inline +$ catala Dcalc -s B +let B = + λ (B_in: B_in {"b_in": bool}) → + let b : bool = B_in."b_in" in + let a.f : integer → integer = + λ (param: integer) → ⟨b && param >! 0 ⊢ param -! 1⟩ in + let result : A {} = A (A_in { "f_in"= a.f }) in + B { } +``` diff --git a/tests/test_io/bad/forgot_input.catala_en b/tests/test_io/bad/forgot_input.catala_en index 7cc99925..3da56fa0 100644 --- a/tests/test_io/bad/forgot_input.catala_en +++ b/tests/test_io/bad/forgot_input.catala_en @@ -19,17 +19,15 @@ $ catala Typecheck [ERROR] This subscope variable is a mandatory input but no definition was provided. Incriminated subscope: -┌─⯈ tests/test_io/bad/forgot_input.catala_en:9.2-3 +┌─⯈ tests/test_io/bad/forgot_input.catala_en:9.2-3: └─┐ - │ 9 │ a scope A │ ‾ └─ Test Incriminated variable: -┌─⯈ tests/test_io/bad/forgot_input.catala_en:6.8-9 +┌─⯈ tests/test_io/bad/forgot_input.catala_en:6.8-9: └─┐ - │ 6 │ input x content integer │ ‾ └─ Test diff --git a/tests/test_io/bad/inputing_to_not_input.catala_en b/tests/test_io/bad/inputing_to_not_input.catala_en index 70d08dbb..d18b8aa8 100644 --- a/tests/test_io/bad/inputing_to_not_input.catala_en +++ b/tests/test_io/bad/inputing_to_not_input.catala_en @@ -19,25 +19,22 @@ $ catala Typecheck [ERROR] It is impossible to give a definition to a subscope variable not tagged as input or context. Incriminated subscope: -┌─⯈ tests/test_io/bad/inputing_to_not_input.catala_en:8.2-3 +┌─⯈ tests/test_io/bad/inputing_to_not_input.catala_en:8.2-3: └─┐ - │ 8 │ a scope A │ ‾ └─ Test Incriminated variable: -┌─⯈ tests/test_io/bad/inputing_to_not_input.catala_en:5.9-10 +┌─⯈ tests/test_io/bad/inputing_to_not_input.catala_en:5.9-10: └─┐ - │ 5 │ output a content integer │ ‾ └─ Test Incriminated subscope variable definition: -┌─⯈ tests/test_io/bad/inputing_to_not_input.catala_en:14.2-25 +┌─⯈ tests/test_io/bad/inputing_to_not_input.catala_en:14.2-25: └──┐ - │ 14 │ definition a.a equals 0 │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ diff --git a/tests/test_io/bad/redefining_input.catala_en b/tests/test_io/bad/redefining_input.catala_en index 493c1913..9205bf35 100644 --- a/tests/test_io/bad/redefining_input.catala_en +++ b/tests/test_io/bad/redefining_input.catala_en @@ -12,17 +12,15 @@ $ catala Typecheck [ERROR] It is impossible to give a definition to a scope variable tagged as input. Incriminated variable: -┌─⯈ tests/test_io/bad/redefining_input.catala_en:5.8-9 +┌─⯈ tests/test_io/bad/redefining_input.catala_en:5.8-9: └─┐ - │ 5 │ input a content integer │ ‾ └─ Test Incriminated variable definition: -┌─⯈ tests/test_io/bad/redefining_input.catala_en:8.2-23 +┌─⯈ tests/test_io/bad/redefining_input.catala_en:8.2-23: └─┐ - │ 8 │ definition a equals 0 │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ diff --git a/tests/test_io/bad/using_non_output.catala_en b/tests/test_io/bad/using_non_output.catala_en index b89fcbcd..66d88046 100644 --- a/tests/test_io/bad/using_non_output.catala_en +++ b/tests/test_io/bad/using_non_output.catala_en @@ -18,25 +18,22 @@ $ catala Typecheck [ERROR] The variable a.a cannot be used here, as it is not part of subscope a's results. Maybe you forgot to qualify it as an output? Incriminated variable usage: -┌─⯈ tests/test_io/bad/using_non_output.catala_en:14.12-15 +┌─⯈ tests/test_io/bad/using_non_output.catala_en:14.12-15: └──┐ - │ 14 │ assertion a.a = 0 │ ‾‾‾ └─ Test Incriminated subscope variable declaration: -┌─⯈ tests/test_io/bad/using_non_output.catala_en:5.11-12 +┌─⯈ tests/test_io/bad/using_non_output.catala_en:5.11-12: └─┐ - │ 5 │ internal a content integer │ ‾ └─ Test Incriminated subscope declaration: -┌─⯈ tests/test_io/bad/using_non_output.catala_en:8.2-3 +┌─⯈ tests/test_io/bad/using_non_output.catala_en:8.2-3: └─┐ - │ 8 │ a scope A │ ‾ └─ Test diff --git a/tests/test_io/good/all_io.catala_en b/tests/test_io/good/all_io.catala_en index ac74ff1d..d5d664b0 100644 --- a/tests/test_io/good/all_io.catala_en +++ b/tests/test_io/good/all_io.catala_en @@ -27,12 +27,12 @@ let A = let e : unit → integer = A_in."e_in" in let f : unit → integer = A_in."f_in" in let a : integer = error_empty ⟨true ⊢ 0⟩ in - let b : integer = error_empty ⟨true ⊢ a + 1⟩ in + let b : integer = error_empty ⟨true ⊢ a +! 1⟩ in let e1 : integer = error_empty - ⟨e () | true ⊢ ⟨true ⊢ b + c + d + 1⟩⟩ in + ⟨e () | true ⊢ ⟨true ⊢ b +! c +! d +! 1⟩⟩ in let f1 : integer = error_empty - ⟨f () | true ⊢ ⟨true ⊢ e1 + 1⟩⟩ in - A {"b"= b; "d"= d; "f"= f1} + ⟨f () | true ⊢ ⟨true ⊢ e1 +! 1⟩⟩ in + A { "b"= b; "d"= d; "f"= f1 } ``` ```catala-test-inline diff --git a/tests/test_io/good/condition_only_input.catala_en b/tests/test_io/good/condition_only_input.catala_en index 9988c2d0..d7574190 100644 --- a/tests/test_io/good/condition_only_input.catala_en +++ b/tests/test_io/good/condition_only_input.catala_en @@ -19,10 +19,10 @@ $ catala Dcalc -s B let B = λ (B_in: B_in {}) → let a.x : bool = error_empty ⟨true ⊢ false⟩ in - let result : A {"y": integer} = A (A_in {"x_in"= a.x}) in + let result : A {"y": integer} = A (A_in { "x_in"= a.x }) in let a.y : integer = result."y" in let _ : unit = assert (error_empty a.y = 1) in - B {} + B { } ``` ```catala-test-inline diff --git a/tests/test_io/good/subscope.catala_en b/tests/test_io/good/subscope.catala_en index d50e0ecb..9359d655 100644 --- a/tests/test_io/good/subscope.catala_en +++ b/tests/test_io/good/subscope.catala_en @@ -26,10 +26,10 @@ let B = λ (B_in: B_in {}) → let a.a : unit → integer = λ (_: unit) → ∅ in let a.b : integer = error_empty ⟨true ⊢ 2⟩ in - let result : A {"c": integer} = A (A_in {"a_in"= a.a; "b_in"= a.b}) in + let result : A {"c": integer} = A (A_in { "a_in"= a.a; "b_in"= a.b }) in let a.c : integer = result."c" in let _ : unit = assert (error_empty a.c = 1) in - B {} + B { } ``` ```catala-test-inline diff --git a/tests/test_literate/good/test_grave_char.catala_fr b/tests/test_literate/good/test_grave_char.catala_fr index 13d204fb..77c74e03 100644 --- a/tests/test_literate/good/test_grave_char.catala_fr +++ b/tests/test_literate/good/test_grave_char.catala_fr @@ -15,7 +15,7 @@ let () = print_endline "Hello world!" ```catala déclaration champ d'application A: - contexte sortie literate_parsing_is_ok contenu booléen + contexte résultat literate_parsing_is_ok contenu booléen champ d'application A: définition literate_parsing_is_ok égal à vrai diff --git a/tests/test_money/bad/no_mingle.catala_en b/tests/test_money/bad/no_mingle.catala_en index 1ed000a8..3a5ba492 100644 --- a/tests/test_money/bad/no_mingle.catala_en +++ b/tests/test_money/bad/no_mingle.catala_en @@ -9,37 +9,32 @@ declaration scope A: scope A: definition x equals $123.54 definition y equals $8548,650.96 - definition z equals (x *$ y) + definition z equals (x * y) ``` ```catala-test-inline $ catala Interpret -s A -[ERROR] Error during typechecking, incompatible types: ---> money ---> decimal +[ERROR] I don't know how to apply operator * on types money and +money -Error coming from typechecking the following expression: -┌─⯈ tests/test_money/bad/no_mingle.catala_en:12.28-29 +┌─⯈ tests/test_money/bad/no_mingle.catala_en:12.25-26: └──┐ - │ -12 │ definition z equals (x *$ y) - │ ‾ +12 │ definition z equals (x * y) + │ ‾ └─ Article Type money coming from expression: -┌─⯈ tests/test_money/bad/no_mingle.catala_en:6.20-25 +┌─⯈ tests/test_money/bad/no_mingle.catala_en:5.20-25: └─┐ - │ -6 │ context y content money +5 │ context x content money │ ‾‾‾‾‾ └─ Article -Type decimal coming from expression: -┌─⯈ tests/test_money/bad/no_mingle.catala_en:12.25-27 -└──┐ - │ -12 │ definition z equals (x *$ y) - │ ‾‾ - └─ Article +Type money coming from expression: +┌─⯈ tests/test_money/bad/no_mingle.catala_en:6.20-25: +└─┐ +6 │ context y content money + │ ‾‾‾‾‾ + └─ Article #return code 255# ``` diff --git a/tests/test_money/good/literal_parsing.catala_en b/tests/test_money/good/literal_parsing.catala_en index ce76d82d..e8ce08e1 100644 --- a/tests/test_money/good/literal_parsing.catala_en +++ b/tests/test_money/good/literal_parsing.catala_en @@ -6,7 +6,7 @@ declaration scope A: output y content money scope A: - definition x equals $0.15 *$ 2.0 + definition x equals $0.15 * 2.0 definition y equals $0.3 assertion x = y ``` diff --git a/tests/test_money/good/simple.catala_en b/tests/test_money/good/simple.catala_en index ce7f8b43..69254797 100644 --- a/tests/test_money/good/simple.catala_en +++ b/tests/test_money/good/simple.catala_en @@ -9,7 +9,7 @@ declaration scope A: scope A: definition x equals $123.54 definition y equals $8548,650.96 - definition z equals $250,000,000 *$ ((x /$ y) *. 0.2 %) + definition z equals $250,000,000 * ((x / y) * 0.2 %) ``` ```catala-test-inline diff --git a/tests/test_name_resolution/good/let_in.catala_en b/tests/test_name_resolution/good/let_in.catala_en index 5529c522..d558aa9a 100644 --- a/tests/test_name_resolution/good/let_in.catala_en +++ b/tests/test_name_resolution/good/let_in.catala_en @@ -14,22 +14,22 @@ declaration structure B: data z content decimal scope S: - definition b equals let b equals 42 in B { -- y: true -- z: integer_to_decimal of b} + definition b equals let b equals 42 in B { -- y: true -- z: decimal of b} definition a equals let b equals - if b.B.y + if b.y then B { -- y: false -- z: -1. } else B { -- y: true -- z: -2. } in - let a equals 2. *. b.z in + let a equals 2. * b.z in A { -- x: a -- y : b } ``` ```catala-test-inline $ catala Interpret -s S [RESULT] Computation successful! Results: -[RESULT] a = A {"x"= -2.; "y"= B {"y"= false; "z"= -1.}} -[RESULT] b = B {"y"= true; "z"= 42.} +[RESULT] a = A { "x"= -2.; "y"= B { "y"= false; "z"= -1. } } +[RESULT] b = B { "y"= true; "z"= 42. } ``` ## Check scope of let-in vs scope variable diff --git a/tests/test_name_resolution/good/out_of_order.catala_en b/tests/test_name_resolution/good/out_of_order.catala_en index 59dfc2e5..d0176084 100644 --- a/tests/test_name_resolution/good/out_of_order.catala_en +++ b/tests/test_name_resolution/good/out_of_order.catala_en @@ -21,6 +21,6 @@ scope S: ```catala-test-inline $ catala Interpret -s S [RESULT] Computation successful! Results: -[RESULT] a = A {"x"= 0; "y"= B {"y"= true; "z"= 0.}} -[RESULT] b = B {"y"= true; "z"= 0.} +[RESULT] a = A { "x"= 0; "y"= B { "y"= true; "z"= 0. } } +[RESULT] b = B { "y"= true; "z"= 0. } ``` diff --git a/tests/test_proof/bad/array_length-empty.catala_en b/tests/test_proof/bad/array_length-empty.catala_en index 4bd85c03..34f5fe28 100644 --- a/tests/test_proof/bad/array_length-empty.catala_en +++ b/tests/test_proof/bad/array_length-empty.catala_en @@ -13,9 +13,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/array_length-empty.catala_en:6.10-11 +┌─⯈ tests/test_proof/bad/array_length-empty.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/array_length-overlap.catala_en b/tests/test_proof/bad/array_length-overlap.catala_en index 54829af9..7a1b2df1 100644 --- a/tests/test_proof/bad/array_length-overlap.catala_en +++ b/tests/test_proof/bad/array_length-overlap.catala_en @@ -14,9 +14,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/array_length-overlap.catala_en:6.10-11 +┌─⯈ tests/test_proof/bad/array_length-overlap.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/dates_get_year-empty.catala_en b/tests/test_proof/bad/dates_get_year-empty.catala_en index 650aed3d..4c112ba1 100644 --- a/tests/test_proof/bad/dates_get_year-empty.catala_en +++ b/tests/test_proof/bad/dates_get_year-empty.catala_en @@ -16,9 +16,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/dates_get_year-empty.catala_en:6.10-11 +┌─⯈ tests/test_proof/bad/dates_get_year-empty.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/dates_get_year-overlap.catala_en b/tests/test_proof/bad/dates_get_year-overlap.catala_en index f9c7971a..3495d748 100644 --- a/tests/test_proof/bad/dates_get_year-overlap.catala_en +++ b/tests/test_proof/bad/dates_get_year-overlap.catala_en @@ -16,9 +16,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/dates_get_year-overlap.catala_en:6.10-11 +┌─⯈ tests/test_proof/bad/dates_get_year-overlap.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/dates_simple-empty.catala_en b/tests/test_proof/bad/dates_simple-empty.catala_en index 09cb1300..e9a83840 100644 --- a/tests/test_proof/bad/dates_simple-empty.catala_en +++ b/tests/test_proof/bad/dates_simple-empty.catala_en @@ -7,17 +7,16 @@ declaration scope A: scope A: definition x equals |2022-01-16| - definition y under condition x >=@ |2010-01-01| and x <@ |2015-01-01| consequence equals false - definition y under condition x >=@ |2015-01-01| and x <@ |2020-01-01| consequence equals true - definition y under condition x >=@ |2020-01-01| consequence equals false + definition y under condition x >= |2010-01-01| and x < |2015-01-01| consequence equals false + definition y under condition x >= |2015-01-01| and x < |2020-01-01| consequence equals true + definition y under condition x >= |2020-01-01| consequence equals false ``` ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/dates_simple-empty.catala_en:6.10-11 +┌─⯈ tests/test_proof/bad/dates_simple-empty.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/dates_simple-overlap.catala_en b/tests/test_proof/bad/dates_simple-overlap.catala_en index 0f815b54..845755ba 100644 --- a/tests/test_proof/bad/dates_simple-overlap.catala_en +++ b/tests/test_proof/bad/dates_simple-overlap.catala_en @@ -7,18 +7,17 @@ declaration scope A: scope A: definition x equals |2022-01-16| - definition y under condition x <=@ |2010-01-01| consequence equals true - definition y under condition x >=@ |2010-01-01| and x <@ |2015-01-01| consequence equals false - definition y under condition x >=@ |2015-01-01| and x <@ |2020-01-01| consequence equals true - definition y under condition x >=@ |2020-01-01| consequence equals false + definition y under condition x <= |2010-01-01| consequence equals true + definition y under condition x >= |2010-01-01| and x < |2015-01-01| consequence equals false + definition y under condition x >= |2015-01-01| and x < |2020-01-01| consequence equals true + definition y under condition x >= |2020-01-01| consequence equals false ``` ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/dates_simple-overlap.catala_en:6.10-11 +┌─⯈ tests/test_proof/bad/dates_simple-overlap.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/duration-empty.catala_en b/tests/test_proof/bad/duration-empty.catala_en index 9b36f0cf..47586493 100644 --- a/tests/test_proof/bad/duration-empty.catala_en +++ b/tests/test_proof/bad/duration-empty.catala_en @@ -7,15 +7,14 @@ declaration scope A: scope A: definition x equals 94 day - definition y under condition (x +^ x) >^ 100 day consequence equals true + definition y under condition (x + x) > 100 day consequence equals true ``` ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/duration-empty.catala_en:6.10-11 +┌─⯈ tests/test_proof/bad/duration-empty.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/duration-overlap.catala_en b/tests/test_proof/bad/duration-overlap.catala_en index 39063074..4ba31115 100644 --- a/tests/test_proof/bad/duration-overlap.catala_en +++ b/tests/test_proof/bad/duration-overlap.catala_en @@ -7,16 +7,15 @@ declaration scope A: scope A: definition x equals 94 day - definition y under condition (x +^ x) >=^ 100 day consequence equals true - definition y under condition (x +^ x) <=^ 100 day consequence equals false + definition y under condition (x + x) >= 100 day consequence equals true + definition y under condition (x + x) <= 100 day consequence equals false ``` ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/duration-overlap.catala_en:6.10-11 +┌─⯈ tests/test_proof/bad/duration-overlap.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/enums-empty.catala_en b/tests/test_proof/bad/enums-empty.catala_en index 1bcd78fa..36b39796 100644 --- a/tests/test_proof/bad/enums-empty.catala_en +++ b/tests/test_proof/bad/enums-empty.catala_en @@ -24,9 +24,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.x] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/enums-empty.catala_en:15.10-11 +┌─⯈ tests/test_proof/bad/enums-empty.catala_en:15.10-11: └──┐ - │ 15 │ context x content integer │ ‾ └─ Test diff --git a/tests/test_proof/bad/enums-nonbool-empty.catala_en b/tests/test_proof/bad/enums-nonbool-empty.catala_en index 7317ee5c..6b8fd5ad 100644 --- a/tests/test_proof/bad/enums-nonbool-empty.catala_en +++ b/tests/test_proof/bad/enums-nonbool-empty.catala_en @@ -22,9 +22,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.x] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/enums-nonbool-empty.catala_en:13.10-11 +┌─⯈ tests/test_proof/bad/enums-nonbool-empty.catala_en:13.10-11: └──┐ - │ 13 │ context x content integer │ ‾ └─ Test diff --git a/tests/test_proof/bad/enums-nonbool-overlap.catala_en b/tests/test_proof/bad/enums-nonbool-overlap.catala_en index c679105b..bb19c9b9 100644 --- a/tests/test_proof/bad/enums-nonbool-overlap.catala_en +++ b/tests/test_proof/bad/enums-nonbool-overlap.catala_en @@ -22,9 +22,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.x] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/enums-nonbool-overlap.catala_en:13.10-11 +┌─⯈ tests/test_proof/bad/enums-nonbool-overlap.catala_en:13.10-11: └──┐ - │ 13 │ context x content integer │ ‾ └─ Test diff --git a/tests/test_proof/bad/enums-overlap.catala_en b/tests/test_proof/bad/enums-overlap.catala_en index 8e5b1b64..e241f823 100644 --- a/tests/test_proof/bad/enums-overlap.catala_en +++ b/tests/test_proof/bad/enums-overlap.catala_en @@ -24,9 +24,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.x] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/enums-overlap.catala_en:15.10-11 +┌─⯈ tests/test_proof/bad/enums-overlap.catala_en:15.10-11: └──┐ - │ 15 │ context x content integer │ ‾ └─ Test diff --git a/tests/test_proof/bad/enums_inj-empty.catala_en b/tests/test_proof/bad/enums_inj-empty.catala_en index 8799d551..57382389 100644 --- a/tests/test_proof/bad/enums_inj-empty.catala_en +++ b/tests/test_proof/bad/enums_inj-empty.catala_en @@ -17,9 +17,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/enums_inj-empty.catala_en:10.10-11 +┌─⯈ tests/test_proof/bad/enums_inj-empty.catala_en:10.10-11: └──┐ - │ 10 │ context y content integer │ ‾ └─ Article diff --git a/tests/test_proof/bad/enums_inj-overlap.catala_en b/tests/test_proof/bad/enums_inj-overlap.catala_en index 019ea162..334f6725 100644 --- a/tests/test_proof/bad/enums_inj-overlap.catala_en +++ b/tests/test_proof/bad/enums_inj-overlap.catala_en @@ -19,9 +19,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/enums_inj-overlap.catala_en:10.10-11 +┌─⯈ tests/test_proof/bad/enums_inj-overlap.catala_en:10.10-11: └──┐ - │ 10 │ context y content integer │ ‾ └─ Article diff --git a/tests/test_proof/bad/enums_unit-empty.catala_en b/tests/test_proof/bad/enums_unit-empty.catala_en index 71340f10..91a2250b 100644 --- a/tests/test_proof/bad/enums_unit-empty.catala_en +++ b/tests/test_proof/bad/enums_unit-empty.catala_en @@ -22,9 +22,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/enums_unit-empty.catala_en:10.10-11 +┌─⯈ tests/test_proof/bad/enums_unit-empty.catala_en:10.10-11: └──┐ - │ 10 │ context y content integer │ ‾ └─ Article diff --git a/tests/test_proof/bad/enums_unit-overlap.catala_en b/tests/test_proof/bad/enums_unit-overlap.catala_en index 998097e4..9fe1baad 100644 --- a/tests/test_proof/bad/enums_unit-overlap.catala_en +++ b/tests/test_proof/bad/enums_unit-overlap.catala_en @@ -22,9 +22,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/enums_unit-overlap.catala_en:10.10-11 +┌─⯈ tests/test_proof/bad/enums_unit-overlap.catala_en:10.10-11: └──┐ - │ 10 │ context y content integer │ ‾ └─ Article diff --git a/tests/test_proof/bad/money-empty.catala_en b/tests/test_proof/bad/money-empty.catala_en index 5139d7e2..b5251271 100644 --- a/tests/test_proof/bad/money-empty.catala_en +++ b/tests/test_proof/bad/money-empty.catala_en @@ -9,17 +9,16 @@ declaration scope A: scope A: definition x equals $20,000 - definition y under condition x >=$ $1,000 and x <$ $10,000 consequence equals false - definition y under condition x >=$ $10,000 and x <$ $100,000 consequence equals true - definition y under condition x >=$ $100,000 consequence equals false + definition y under condition x >= $1,000 and x < $10,000 consequence equals false + definition y under condition x >= $10,000 and x < $100,000 consequence equals true + definition y under condition x >= $100,000 consequence equals false ``` ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/money-empty.catala_en:8.10-11 +┌─⯈ tests/test_proof/bad/money-empty.catala_en:8.10-11: └─┐ - │ 8 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/money-overlap.catala_en b/tests/test_proof/bad/money-overlap.catala_en index d4c64dda..9dbf678c 100644 --- a/tests/test_proof/bad/money-overlap.catala_en +++ b/tests/test_proof/bad/money-overlap.catala_en @@ -9,18 +9,17 @@ declaration scope A: scope A: definition x equals $20,000 - definition y under condition x <=$ $1,000 consequence equals true - definition y under condition x >=$ $1,000 and x <$ $10,000 consequence equals false - definition y under condition x >=$ $10,000 and x <$ $100,000 consequence equals true - definition y under condition x >=$ $100,000 consequence equals false + definition y under condition x <= $1,000 consequence equals true + definition y under condition x >= $1,000 and x < $10,000 consequence equals false + definition y under condition x >= $10,000 and x < $100,000 consequence equals true + definition y under condition x >= $100,000 consequence equals false ``` ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/money-overlap.catala_en:8.10-11 +┌─⯈ tests/test_proof/bad/money-overlap.catala_en:8.10-11: └─┐ - │ 8 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/no_vars-conflict.catala_en b/tests/test_proof/bad/no_vars-conflict.catala_en index ebb379b4..6dc334c1 100644 --- a/tests/test_proof/bad/no_vars-conflict.catala_en +++ b/tests/test_proof/bad/no_vars-conflict.catala_en @@ -8,7 +8,7 @@ declaration scope A: context y content integer scope A: - definition x under condition (6*7 = 42) and (false or (true and 1458 / 27 = 54)) + definition x under condition (6*7 = 42) and (false or (true and 1458 / 27 = 54.)) consequence equals 0 definition y under condition x <= 0 consequence equals -1 @@ -18,9 +18,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/no_vars-conflict.catala_en:8.10-11 +┌─⯈ tests/test_proof/bad/no_vars-conflict.catala_en:8.10-11: └─┐ - │ 8 │ context y content integer │ ‾ └─ Test diff --git a/tests/test_proof/bad/no_vars-empty.catala_en b/tests/test_proof/bad/no_vars-empty.catala_en index 21d6d5c7..421728a1 100644 --- a/tests/test_proof/bad/no_vars-empty.catala_en +++ b/tests/test_proof/bad/no_vars-empty.catala_en @@ -7,7 +7,7 @@ declaration scope A: context y content integer scope A: - definition x under condition (6*7 = 42) and (false or (true and 1458 / 27 = 54)) + definition x under condition (6*7 = 42) and (false or (true and 1458 / 27 = 54.)) consequence equals 1 definition y under condition x <= 0 consequence equals -1 @@ -17,9 +17,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/no_vars-empty.catala_en:7.10-11 +┌─⯈ tests/test_proof/bad/no_vars-empty.catala_en:7.10-11: └─┐ - │ 7 │ context y content integer │ ‾ └─ Test diff --git a/tests/test_proof/bad/prolala_motivating_example.catala_en b/tests/test_proof/bad/prolala_motivating_example.catala_en index c725631e..bd7b9244 100644 --- a/tests/test_proof/bad/prolala_motivating_example.catala_en +++ b/tests/test_proof/bad/prolala_motivating_example.catala_en @@ -124,27 +124,24 @@ scope Amount: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [Amount.amount] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/prolala_motivating_example.catala_en:60.10-16 +┌─⯈ tests/test_proof/bad/prolala_motivating_example.catala_en:60.10-16: └──┐ - │ 60 │ context amount content integer │ ‾‾‾‾‾‾ └┬ ProLaLa 2022 Super Cash Bonus └─ Amount Counterexample generation is disabled so none was generated. [ERROR] [Eligibility.is_eligible] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/prolala_motivating_example.catala_en:11.9-20 +┌─⯈ tests/test_proof/bad/prolala_motivating_example.catala_en:11.9-20: └──┐ - │ 11 │ output is_eligible content boolean │ ‾‾‾‾‾‾‾‾‾‾‾ └┬ ProLaLa 2022 Super Cash Bonus └─ Eligibility Counterexample generation is disabled so none was generated. [ERROR] [Eligibility.is_eligible] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/prolala_motivating_example.catala_en:11.9-20 +┌─⯈ tests/test_proof/bad/prolala_motivating_example.catala_en:11.9-20: └──┐ - │ 11 │ output is_eligible content boolean │ ‾‾‾‾‾‾‾‾‾‾‾ └┬ ProLaLa 2022 Super Cash Bonus diff --git a/tests/test_proof/bad/rationals-empty.catala_en b/tests/test_proof/bad/rationals-empty.catala_en index f9529776..1f6416f2 100644 --- a/tests/test_proof/bad/rationals-empty.catala_en +++ b/tests/test_proof/bad/rationals-empty.catala_en @@ -7,15 +7,14 @@ declaration scope A: scope A: definition x equals 1. - definition y under condition x >. 1./.3. consequence equals true + definition y under condition x > 1./3. consequence equals true ``` ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/rationals-empty.catala_en:6.10-11 +┌─⯈ tests/test_proof/bad/rationals-empty.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/rationals-overlap.catala_en b/tests/test_proof/bad/rationals-overlap.catala_en index 6d966dd3..3e51333f 100644 --- a/tests/test_proof/bad/rationals-overlap.catala_en +++ b/tests/test_proof/bad/rationals-overlap.catala_en @@ -7,16 +7,15 @@ declaration scope A: scope A: definition x equals 1. - definition y under condition x >=. 1./.3. consequence equals true - definition y under condition x <=. 1./.3. consequence equals false + definition y under condition x >= 1./3. consequence equals true + definition y under condition x <= 1./3. consequence equals false ``` ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.y] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/rationals-overlap.catala_en:6.10-11 +┌─⯈ tests/test_proof/bad/rationals-overlap.catala_en:6.10-11: └─┐ - │ 6 │ context y content boolean │ ‾ └─ Test diff --git a/tests/test_proof/bad/sat_solving.catala_en b/tests/test_proof/bad/sat_solving.catala_en index a362550a..4a345966 100644 --- a/tests/test_proof/bad/sat_solving.catala_en +++ b/tests/test_proof/bad/sat_solving.catala_en @@ -41,9 +41,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.x10] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/sat_solving.catala_en:15.10-13 +┌─⯈ tests/test_proof/bad/sat_solving.catala_en:15.10-13: └──┐ - │ 15 │ context x10 content boolean │ ‾‾‾ └─ Test diff --git a/tests/test_proof/bad/structs-empty.catala_en b/tests/test_proof/bad/structs-empty.catala_en index d50e9241..ae85a698 100644 --- a/tests/test_proof/bad/structs-empty.catala_en +++ b/tests/test_proof/bad/structs-empty.catala_en @@ -22,9 +22,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.x] This variable might return an empty error: -┌─⯈ tests/test_proof/bad/structs-empty.catala_en:13.10-11 +┌─⯈ tests/test_proof/bad/structs-empty.catala_en:13.10-11: └──┐ - │ 13 │ context x content integer │ ‾ └─ Test diff --git a/tests/test_proof/bad/structs-overlap.catala_en b/tests/test_proof/bad/structs-overlap.catala_en index 6ac4c613..b535e1e0 100644 --- a/tests/test_proof/bad/structs-overlap.catala_en +++ b/tests/test_proof/bad/structs-overlap.catala_en @@ -22,9 +22,8 @@ scope A: ```catala-test-inline $ catala Proof --disable_counterexamples [ERROR] [A.x] At least two exceptions overlap for this variable: -┌─⯈ tests/test_proof/bad/structs-overlap.catala_en:13.10-11 +┌─⯈ tests/test_proof/bad/structs-overlap.catala_en:13.10-11: └──┐ - │ 13 │ context x content integer │ ‾ └─ Test diff --git a/tests/test_proof/good/dates_simple.catala_en b/tests/test_proof/good/dates_simple.catala_en index fc5760c5..22eaf46b 100644 --- a/tests/test_proof/good/dates_simple.catala_en +++ b/tests/test_proof/good/dates_simple.catala_en @@ -7,10 +7,10 @@ declaration scope A: scope A: definition x equals |2022-01-16| - definition y under condition x <@ |2010-01-01| consequence equals true - definition y under condition x >=@ |2010-01-01| and x <@ |2015-01-01| consequence equals false - definition y under condition x >=@ |2015-01-01| and x <@ |2020-01-01| consequence equals true - definition y under condition x >=@ |2020-01-01| consequence equals false + definition y under condition x < |2010-01-01| consequence equals true + definition y under condition x >= |2010-01-01| and x < |2015-01-01| consequence equals false + definition y under condition x >= |2015-01-01| and x < |2020-01-01| consequence equals true + definition y under condition x >= |2020-01-01| consequence equals false ``` ```catala-test-inline diff --git a/tests/test_proof/good/duration.catala_en b/tests/test_proof/good/duration.catala_en index 655b8a49..9d0785b0 100644 --- a/tests/test_proof/good/duration.catala_en +++ b/tests/test_proof/good/duration.catala_en @@ -7,8 +7,8 @@ declaration scope A: scope A: definition x equals 94 day - definition y under condition (x +^ x) >^ 100 day consequence equals true - definition y under condition (x +^ x) <=^ 100 day consequence equals false + definition y under condition (x + x) > 100 day consequence equals true + definition y under condition (x + x) <= 100 day consequence equals false ``` ```catala-test-inline diff --git a/tests/test_proof/good/money.catala_en b/tests/test_proof/good/money.catala_en index f2991891..d6b16220 100644 --- a/tests/test_proof/good/money.catala_en +++ b/tests/test_proof/good/money.catala_en @@ -7,10 +7,10 @@ declaration scope A: scope A: definition x equals $20,000 - definition y under condition x <$ $1,000 consequence equals true - definition y under condition x >=$ $1,000 and x <$ $10,000 consequence equals false - definition y under condition x >=$ $10,000 and x <$ $100,000 consequence equals true - definition y under condition x >=$ $100,000 consequence equals false + definition y under condition x < $1,000 consequence equals true + definition y under condition x >= $1,000 and x < $10,000 consequence equals false + definition y under condition x >= $10,000 and x < $100,000 consequence equals true + definition y under condition x >= $100,000 consequence equals false ``` ```catala-test-inline diff --git a/tests/test_proof/good/no_vars.catala_en b/tests/test_proof/good/no_vars.catala_en index 29a532b2..a2c65e4d 100644 --- a/tests/test_proof/good/no_vars.catala_en +++ b/tests/test_proof/good/no_vars.catala_en @@ -5,7 +5,7 @@ declaration scope A: context x content integer scope A: - definition x under condition (6*7 = 42) and (false or (true and 1458 / 27 = 54)) + definition x under condition (6*7 = 42) and (false or (true and 1458 / 27 = 54.)) consequence equals 0 ``` ```catala-test-inline diff --git a/tests/test_proof/good/rationals.catala_en b/tests/test_proof/good/rationals.catala_en index ea11bc5b..ebc77c44 100644 --- a/tests/test_proof/good/rationals.catala_en +++ b/tests/test_proof/good/rationals.catala_en @@ -7,8 +7,8 @@ declaration scope A: scope A: definition x equals 1. - definition y under condition x >. 1./.3. consequence equals true - definition y under condition x <=. 1./.3. consequence equals false + definition y under condition x > 1./3. consequence equals true + definition y under condition x <= 1./3. consequence equals false ``` ```catala-test-inline diff --git a/tests/test_scope/bad/cycle_in_scope.catala_en b/tests/test_scope/bad/cycle_in_scope.catala_en index eaf292bc..ffc7ef66 100644 --- a/tests/test_scope/bad/cycle_in_scope.catala_en +++ b/tests/test_scope/bad/cycle_in_scope.catala_en @@ -19,49 +19,43 @@ $ catala Interpret -s A [ERROR] Cyclic dependency detected between variables of scope A! Cycle variable z, declared: -┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:7.10-11 +┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:7.10-11: └─┐ - │ 7 │ context z content integer │ ‾ └─ Article Used here in the definition of another cycle variable x: -┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:14.22-23 +┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:14.22-23: └──┐ - │ 14 │ definition x equals z │ ‾ └─ Article Cycle variable y, declared: -┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:6.10-11 +┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:6.10-11: └─┐ - │ 6 │ context y content integer │ ‾ └─ Article Used here in the definition of another cycle variable z: -┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:13.31-32 +┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:13.31-32: └──┐ - │ 13 │ definition z under condition y < 1 consequence equals y │ ‾ └─ Article Cycle variable x, declared: -┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:5.10-11 +┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:5.10-11: └─┐ - │ 5 │ context x content integer │ ‾ └─ Article Used here in the definition of another cycle variable y: -┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:11.31-32 +┌─⯈ tests/test_scope/bad/cycle_in_scope.catala_en:11.31-32: └──┐ - │ 11 │ definition y under condition x >= 0 consequence equals x │ ‾ └─ Article diff --git a/tests/test_scope/bad/cyclic_scopes.catala_en b/tests/test_scope/bad/cyclic_scopes.catala_en index 4ab55814..e9d6664b 100644 --- a/tests/test_scope/bad/cyclic_scopes.catala_en +++ b/tests/test_scope/bad/cyclic_scopes.catala_en @@ -21,33 +21,29 @@ $ catala Interpret -s A [ERROR] Cyclic dependency detected between scopes! Cycle variable B, declared: -┌─⯈ tests/test_scope/bad/cyclic_scopes.catala_en:8.18-19 +┌─⯈ tests/test_scope/bad/cyclic_scopes.catala_en:8.18-19: └─┐ - │ 8 │ declaration scope B: │ ‾ └─ Article Used here in the definition of another cycle variable A: -┌─⯈ tests/test_scope/bad/cyclic_scopes.catala_en:5.2-3 +┌─⯈ tests/test_scope/bad/cyclic_scopes.catala_en:5.2-3: └─┐ - │ 5 │ b scope B │ ‾ └─ Article Cycle variable A, declared: -┌─⯈ tests/test_scope/bad/cyclic_scopes.catala_en:4.18-19 +┌─⯈ tests/test_scope/bad/cyclic_scopes.catala_en:4.18-19: └─┐ - │ 4 │ declaration scope A: │ ‾ └─ Article Used here in the definition of another cycle variable B: -┌─⯈ tests/test_scope/bad/cyclic_scopes.catala_en:9.2-3 +┌─⯈ tests/test_scope/bad/cyclic_scopes.catala_en:9.2-3: └─┐ - │ 9 │ a scope A │ ‾ └─ Article diff --git a/tests/test_scope/bad/scope.catala_en b/tests/test_scope/bad/scope.catala_en index 8f8efb86..fdce38b8 100644 --- a/tests/test_scope/bad/scope.catala_en +++ b/tests/test_scope/bad/scope.catala_en @@ -19,17 +19,15 @@ $ catala Interpret -s A [ERROR] There is a conflict between multiple valid consequences for assigning the same variable. This consequence has a valid justification: -┌─⯈ tests/test_scope/bad/scope.catala_en:13.56-60 +┌─⯈ tests/test_scope/bad/scope.catala_en:13.56-60: └──┐ - │ 13 │ definition b under condition not c consequence equals 1337 │ ‾‾‾‾ └─ Article This consequence has a valid justification: -┌─⯈ tests/test_scope/bad/scope.catala_en:14.56-57 +┌─⯈ tests/test_scope/bad/scope.catala_en:14.56-57: └──┐ - │ 14 │ definition b under condition not c consequence equals 0 │ ‾ └─ Article diff --git a/tests/test_scope/bad/scope_call_duplicate.catala_en b/tests/test_scope/bad/scope_call_duplicate.catala_en index b532fb28..a1019dde 100644 --- a/tests/test_scope/bad/scope_call_duplicate.catala_en +++ b/tests/test_scope/bad/scope_call_duplicate.catala_en @@ -11,18 +11,17 @@ scope Toto: declaration scope Titi: output fizz content Toto scope Titi: - definition fizz equals Toto of {--bar: 1 --baz: 2.1 -- bar: 3} + definition fizz equals output of Toto with {--bar: 1 --baz: 2.1 -- bar: 3} ``` ```catala-test-inline $ catala dcalc -s Titi [ERROR] Duplicate definition of scope input variable 'bar' -┌─⯈ tests/test_scope/bad/scope_call_duplicate.catala_en:14.57-60 +┌─⯈ tests/test_scope/bad/scope_call_duplicate.catala_en:14.69-72: └──┐ - │ -14 │ definition fizz equals Toto of {--bar: 1 --baz: 2.1 -- bar: 3} - │ ‾‾‾ +14 │ definition fizz equals output of Toto with {--bar: 1 --baz: 2.1 -- bar: 3} + │ ‾‾‾ #return code 255# ``` diff --git a/tests/test_scope/bad/scope_call_extra.catala_en b/tests/test_scope/bad/scope_call_extra.catala_en index 925034b5..a382300a 100644 --- a/tests/test_scope/bad/scope_call_extra.catala_en +++ b/tests/test_scope/bad/scope_call_extra.catala_en @@ -11,24 +11,22 @@ scope Toto: declaration scope Titi: output fizz content Toto scope Titi: - definition fizz equals Toto of {--biz: 1} + definition fizz equals output of Toto with {--biz: 1} ``` ```catala-test-inline $ catala dcalc -s Titi [ERROR] Scope Toto has no input variable biz -┌─⯈ tests/test_scope/bad/scope_call_extra.catala_en:14.36-39 +┌─⯈ tests/test_scope/bad/scope_call_extra.catala_en:14.48-51: └──┐ - │ -14 │ definition fizz equals Toto of {--biz: 1} - │ ‾‾‾ +14 │ definition fizz equals output of Toto with {--biz: 1} + │ ‾‾‾ Scope Toto declared here -┌─⯈ tests/test_scope/bad/scope_call_extra.catala_en:2.18-22 +┌─⯈ tests/test_scope/bad/scope_call_extra.catala_en:2.18-22: └─┐ - │ 2 │ declaration scope Toto: │ ‾‾‾‾ diff --git a/tests/test_scope/bad/scope_call_missing.catala_en b/tests/test_scope/bad/scope_call_missing.catala_en index 002c5d9c..b857f0e8 100644 --- a/tests/test_scope/bad/scope_call_missing.catala_en +++ b/tests/test_scope/bad/scope_call_missing.catala_en @@ -11,24 +11,22 @@ scope Toto: declaration scope Titi: output fizz content Toto scope Titi: - definition fizz equals Toto of {--bar: 1} + definition fizz equals output of Toto with {--bar: 1} ``` ```catala-test-inline $ catala dcalc -s Titi [ERROR] Definition of input variable 'baz' missing in this scope call -┌─⯈ tests/test_scope/bad/scope_call_missing.catala_en:14.25-43 +┌─⯈ tests/test_scope/bad/scope_call_missing.catala_en:14.25-55: └──┐ - │ -14 │ definition fizz equals Toto of {--bar: 1} - │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +14 │ definition fizz equals output of Toto with {--bar: 1} + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Declaration of the missing input variable -┌─⯈ tests/test_scope/bad/scope_call_missing.catala_en:4.8-11 +┌─⯈ tests/test_scope/bad/scope_call_missing.catala_en:4.8-11: └─┐ - │ 4 │ input baz content decimal │ ‾‾‾ diff --git a/tests/test_scope/bad/sub_vars_in_sub_var.catala_en b/tests/test_scope/bad/sub_vars_in_sub_var.catala_en index bbd52bbf..c5b3c29b 100644 --- a/tests/test_scope/bad/sub_vars_in_sub_var.catala_en +++ b/tests/test_scope/bad/sub_vars_in_sub_var.catala_en @@ -17,9 +17,8 @@ scope B: $ catala Interpret -s A [ERROR] The subscope a is used when defining one of its inputs, but recursion is forbidden in Catala -┌─⯈ tests/test_scope/bad/sub_vars_in_sub_var.catala_en:13.27-30 +┌─⯈ tests/test_scope/bad/sub_vars_in_sub_var.catala_en:13.27-30: └──┐ - │ 13 │ definition a.y equals if a.x then 0 else 1 │ ‾‾‾ └─ Article diff --git a/tests/test_scope/good/191_fix_record_name_confusion.catala_en b/tests/test_scope/good/191_fix_record_name_confusion.catala_en index 5ef6a188..ed6d2456 100644 --- a/tests/test_scope/good/191_fix_record_name_confusion.catala_en +++ b/tests/test_scope/good/191_fix_record_name_confusion.catala_en @@ -66,7 +66,7 @@ let scope_a (scope_a_in: ScopeAIn.t) : ScopeA.t = let scope_b (scope_b_in: ScopeBIn.t) : ScopeB.t = let a_: unit -> bool = scope_b_in.ScopeBIn.a_in in let scope_a_dot_a_: unit -> bool = fun (_: unit) -> (raise EmptyError) in - let result_: ScopeA.t = ((scope_a) {ScopeAIn.a_in = scope_a_dot_a_}) in + let result_: ScopeA.t = ((scope_a) ({ScopeAIn.a_in = scope_a_dot_a_})) in let scope_a_dot_a_: bool = result_.ScopeA.a in let a_: bool = ( try diff --git a/tests/test_scope/good/nothing.catala_en b/tests/test_scope/good/nothing.catala_en index 84629a40..012aabd3 100644 --- a/tests/test_scope/good/nothing.catala_en +++ b/tests/test_scope/good/nothing.catala_en @@ -7,11 +7,11 @@ declaration scope Foo2: ```catala-test-inline $ catala Scalc -s Foo2 -O -t -let Foo2 (Foo2_in : Foo2_in {}) = - decl temp_bar : any; - temp_bar = dead_value_1; +let Foo2 (Foo2_in_2 : Foo2_in {}) = + decl temp_bar_4 : any; + temp_bar_4 = dead_value_1; raise NoValueProvided; - decl bar : integer; - bar = temp_bar_4; + decl bar_3 : integer; + bar_3 = temp_bar_4; return Foo2 {"bar": bar_3} ``` diff --git a/tests/test_scope/good/scope_call.catala_en b/tests/test_scope/good/scope_call.catala_en index a6ad8b43..8fe9b35f 100644 --- a/tests/test_scope/good/scope_call.catala_en +++ b/tests/test_scope/good/scope_call.catala_en @@ -19,8 +19,8 @@ scope SubFoo: scope Foo: definition example equals if true or false then - let results_foo equals SubFoo of { -- x: 1 -- y: 2 } in - results_foo.z1 + 1 * (SubFoo of { -- x: 10 -- y: 20 }).SubFoo.z2 + let results_foo equals output of SubFoo with { -- x: 1 -- y: 2 } in + results_foo.z1 + 1 * (output of SubFoo with { -- x: 10 -- y: 20 }).z2 else 0 ``` diff --git a/tests/test_scope/good/scope_call2.catala_en b/tests/test_scope/good/scope_call2.catala_en index 1ba84f86..59300751 100644 --- a/tests/test_scope/good/scope_call2.catala_en +++ b/tests/test_scope/good/scope_call2.catala_en @@ -14,13 +14,13 @@ declaration scope Titi: scope Titi: definition toto.bar equals 44 - definition fizz equals Toto of {} - definition fuzz equals Toto of {--bar: 111} + definition fizz equals output of Toto + definition fuzz equals output of Toto with {--bar: 111} ``` ```catala-test-inline $ catala Interpret -s Titi [RESULT] Computation successful! Results: -[RESULT] fizz = Toto {"foo"= 1213} -[RESULT] fuzz = Toto {"foo"= 1323} +[RESULT] fizz = Toto { "foo"= 1213 } +[RESULT] fuzz = Toto { "foo"= 1323 } ``` diff --git a/tests/test_scope/good/scope_call3.catala_en b/tests/test_scope/good/scope_call3.catala_en new file mode 100644 index 00000000..b9c3f542 --- /dev/null +++ b/tests/test_scope/good/scope_call3.catala_en @@ -0,0 +1,89 @@ +```catala +declaration scope HousingComputation: + output f content integer depends on integer + output result content integer + +scope HousingComputation: + definition f of x equals (output of RentComputation).f of x + definition result equals f of 1 + +declaration scope RentComputation: + internal g content integer depends on integer + output f content integer depends on integer + +scope RentComputation: + definition g of x equals x + 1 + definition f of x equals g of (x + 1) +``` + +```catala-test-inline +$ catala Interpret -t -s HousingComputation +[LOG] ≔ HousingComputation.f: +[LOG] ☛ Definition applied: + ┌─⯈ tests/test_scope/good/scope_call3.catala_en:8.13-19: + └─┐ + 8 │ definition result equals f of 1 + │ ‾‾‾‾‾‾ + +[LOG] → HousingComputation.f +[LOG] ≔ HousingComputation.f.input: 1 +[LOG] ☛ Definition applied: + ┌─⯈ tests/test_scope/good/scope_call3.catala_en:7.13-14: + └─┐ + 7 │ definition f of x equals (output of RentComputation).f of x + │ ‾ + +[LOG] → RentComputation.direct +[LOG] ≔ RentComputation.direct.input: RentComputation_in { } +[LOG] ≔ RentComputation.g: +[LOG] ≔ RentComputation.f: +[LOG] ☛ Definition applied: + ┌─⯈ tests/test_scope/good/scope_call3.catala_en:7.28-53: + └─┐ + 7 │ definition f of x equals (output of RentComputation).f of x + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +[LOG] ≔ RentComputation.direct.output: RentComputation { "f"= λ (param: integer) → RentComputation { "f"= λ (param1: integer) → error_empty ⟨true ⊢ λ (param2: integer) → error_empty ⟨true ⊢ param2 +! 1⟩ param1 +! 1⟩ }."f" param } +[LOG] ← RentComputation.direct +[LOG] → RentComputation.f +[LOG] ≔ RentComputation.f.input: 1 +[LOG] ☛ Definition applied: + ┌─⯈ tests/test_scope/good/scope_call3.catala_en:16.13-14: + └──┐ + 16 │ definition f of x equals g of (x + 1) + │ ‾ + +[LOG] → RentComputation.g +[LOG] ≔ RentComputation.g.input: 2 +[LOG] ☛ Definition applied: + ┌─⯈ tests/test_scope/good/scope_call3.catala_en:15.13-14: + └──┐ + 15 │ definition g of x equals x + 1 + │ ‾ + +[LOG] ≔ RentComputation.g.output: 3 +[LOG] ← RentComputation.g +[LOG] ≔ RentComputation.f.output: 3 +[LOG] ← RentComputation.f +[LOG] ≔ HousingComputation.f.output: 3 +[LOG] ← HousingComputation.f +[LOG] ≔ HousingComputation.result: 3 +[RESULT] Computation successful! Results: +[RESULT] f = + λ (param: integer) → error_empty + ⟨true ⊢ + let result : RentComputation {"f": integer → integer} = + λ (RentComputation_in: RentComputation_in {}) → + let g : integer → integer = error_empty + (λ (param1: integer) → error_empty + ⟨true ⊢ param1 +! 1⟩) in + let f : integer → integer = error_empty + (λ (param1: integer) → error_empty + ⟨true ⊢ g param1 +! 1⟩) in + RentComputation { "f"= f } RentComputation_in { } in + let result1 : RentComputation {"f": integer → integer} = + RentComputation { "f"= + λ (param1: integer) → result."f" param1 } in + if true then result1 else ∅ ."f" param⟩ +[RESULT] result = 3 +``` diff --git a/tests/test_scope/good/simple.catala_en b/tests/test_scope/good/simple.catala_en index c478d006..9e99ce6c 100644 --- a/tests/test_scope/good/simple.catala_en +++ b/tests/test_scope/good/simple.catala_en @@ -15,5 +15,5 @@ let Foo = let bar : integer = try handle_default [] (λ (_: unit) → true) (λ (_: unit) → 0) with EmptyError -> raise NoValueProvided in - Foo {"bar"= bar} + Foo { "bar"= bar } ``` diff --git a/tests/test_struct/bad/bug_107.catala_en b/tests/test_struct/bad/bug_107.catala_en index 3fa4a236..88c43b37 100644 --- a/tests/test_struct/bad/bug_107.catala_en +++ b/tests/test_struct/bad/bug_107.catala_en @@ -21,17 +21,15 @@ $ catala Interpret -s A [ERROR] struct name "S" already defined First definition: -┌─⯈ tests/test_struct/bad/bug_107.catala_en:4.22-23 +┌─⯈ tests/test_struct/bad/bug_107.catala_en:4.22-23: └─┐ - │ 4 │ declaration structure S: │ ‾ └─ https://github.com/CatalaLang/catala/issues/107 Second definition: -┌─⯈ tests/test_struct/bad/bug_107.catala_en:8.22-23 +┌─⯈ tests/test_struct/bad/bug_107.catala_en:8.22-23: └─┐ - │ 8 │ declaration structure S: │ ‾ └─ https://github.com/CatalaLang/catala/issues/107 diff --git a/tests/test_struct/bad/empty_struct.catala_en b/tests/test_struct/bad/empty_struct.catala_en index 52fb8148..fe4d3e60 100644 --- a/tests/test_struct/bad/empty_struct.catala_en +++ b/tests/test_struct/bad/empty_struct.catala_en @@ -11,9 +11,8 @@ declaration scope Bar: $ catala Typecheck [ERROR] The struct Foo does not have any fields; give it some for Catala to be able to accept it. -┌─⯈ tests/test_struct/bad/empty_struct.catala_en:4.22-25 +┌─⯈ tests/test_struct/bad/empty_struct.catala_en:4.22-25: └─┐ - │ 4 │ declaration structure Foo: │ ‾‾‾ └─ Test diff --git a/tests/test_struct/bad/nested.catala_en b/tests/test_struct/bad/nested.catala_en index c6b2692a..d354d270 100644 --- a/tests/test_struct/bad/nested.catala_en +++ b/tests/test_struct/bad/nested.catala_en @@ -16,9 +16,8 @@ scope A: $ catala Interpret -s A [ERROR] The type E is defined using itself, which is forbidden since Catala does not provide recursive types -┌─⯈ tests/test_struct/bad/nested.catala_en:6.17-18 +┌─⯈ tests/test_struct/bad/nested.catala_en:6.17-18: └─┐ - │ 6 │ -- Rec content E │ ‾ └─ Article diff --git a/tests/test_struct/bad/nested2.catala_en b/tests/test_struct/bad/nested2.catala_en index c7acd2af..21d07694 100644 --- a/tests/test_struct/bad/nested2.catala_en +++ b/tests/test_struct/bad/nested2.catala_en @@ -18,33 +18,29 @@ $ catala Interpret -s A [ERROR] Cyclic dependency detected between types! Cycle type S, declared: -┌─⯈ tests/test_struct/bad/nested2.catala_en:4.22-23 +┌─⯈ tests/test_struct/bad/nested2.catala_en:4.22-23: └─┐ - │ 4 │ declaration structure S: │ ‾ └─ Article Used here in the definition of another cycle type E: -┌─⯈ tests/test_struct/bad/nested2.catala_en:10.19-20 +┌─⯈ tests/test_struct/bad/nested2.catala_en:10.19-20: └──┐ - │ 10 │ -- Case2 content S │ ‾ └─ Article Cycle type E, declared: -┌─⯈ tests/test_struct/bad/nested2.catala_en:8.24-25 +┌─⯈ tests/test_struct/bad/nested2.catala_en:8.24-25: └─┐ - │ 8 │ declaration enumeration E: │ ‾ └─ Article Used here in the definition of another cycle type S: -┌─⯈ tests/test_struct/bad/nested2.catala_en:5.17-18 +┌─⯈ tests/test_struct/bad/nested2.catala_en:5.17-18: └─┐ - │ 5 │ data x content E │ ‾ └─ Article diff --git a/tests/test_struct/bad/nonexisting_struct.catala_en b/tests/test_struct/bad/nonexisting_struct.catala_en index bfe51b4f..ceb159e4 100644 --- a/tests/test_struct/bad/nonexisting_struct.catala_en +++ b/tests/test_struct/bad/nonexisting_struct.catala_en @@ -17,9 +17,8 @@ scope A: $ catala Interpret -s A [ERROR] No struct named Fo found -┌─⯈ tests/test_struct/bad/nonexisting_struct.catala_en:13.24-26 +┌─⯈ tests/test_struct/bad/nonexisting_struct.catala_en:13.24-26: └──┐ - │ 13 │ definition y equals x.Fo.f │ ‾‾ └─ Article diff --git a/tests/test_struct/bad/wrong_qualified_field.catala_en b/tests/test_struct/bad/wrong_qualified_field.catala_en index 8725e202..df65d2a6 100644 --- a/tests/test_struct/bad/wrong_qualified_field.catala_en +++ b/tests/test_struct/bad/wrong_qualified_field.catala_en @@ -19,11 +19,10 @@ scope A: ```catala-test-inline $ catala Interpret -s A -[ERROR] Struct Foo does not contain field g +[ERROR] Field g does not belong to structure Foo, but to Bar -┌─⯈ tests/test_struct/bad/wrong_qualified_field.catala_en:17.22-29 +┌─⯈ tests/test_struct/bad/wrong_qualified_field.catala_en:17.22-29: └──┐ - │ 17 │ definition y equals x.Foo.g │ ‾‾‾‾‾‾‾ └─ Article diff --git a/tests/test_struct/bad/ambiguous_fields.catala_en b/tests/test_struct/good/ambiguous_fields.catala_en similarity index 50% rename from tests/test_struct/bad/ambiguous_fields.catala_en rename to tests/test_struct/good/ambiguous_fields.catala_en index b4dd8985..ee8a81fe 100644 --- a/tests/test_struct/bad/ambiguous_fields.catala_en +++ b/tests/test_struct/good/ambiguous_fields.catala_en @@ -18,13 +18,5 @@ scope A: ```catala-test-inline $ catala Interpret -s A -[ERROR] This struct field name is ambiguous, it can belong to Foo or Bar. Disambiguate it by prefixing it with the struct name. - -┌─⯈ tests/test_struct/bad/ambiguous_fields.catala_en:16.24-25 -└──┐ - │ -16 │ definition y equals x.f - │ ‾ - └─ Article -#return code 255# +[RESULT] Computation successful! ``` diff --git a/tests/test_struct/good/nested3.catala_en b/tests/test_struct/good/nested3.catala_en index 842db5e2..e4226cd0 100644 --- a/tests/test_struct/good/nested3.catala_en +++ b/tests/test_struct/good/nested3.catala_en @@ -37,12 +37,14 @@ scope B: ```catala-test-inline $ catala Interpret -s A [RESULT] Computation successful! Results: -[RESULT] t = T {"a"= S {"x"= 0; "y"= false}; "b"= S {"x"= 1; "y"= true}} +[RESULT] t = + T { "a"= S { "x"= 0; "y"= false }; "b"= S { "x"= 1; "y"= true } } ``` ```catala-test-inline $ catala Interpret -s B [RESULT] Computation successful! Results: [RESULT] out = 1 -[RESULT] t = T {"a"= S {"x"= 0; "y"= false}; "b"= S {"x"= 1; "y"= true}} +[RESULT] t = + T { "a"= S { "x"= 0; "y"= false }; "b"= S { "x"= 1; "y"= true } } ``` diff --git a/tests/test_struct/good/same_name_fields.catala_en b/tests/test_struct/good/same_name_fields.catala_en index 2a41eb05..4a23c955 100644 --- a/tests/test_struct/good/same_name_fields.catala_en +++ b/tests/test_struct/good/same_name_fields.catala_en @@ -19,6 +19,6 @@ scope A: ```catala-test-inline $ catala Interpret -s A [RESULT] Computation successful! Results: -[RESULT] x = Foo {"f"= 1} +[RESULT] x = Foo { "f"= 1 } [RESULT] y = 1 ``` diff --git a/tests/test_struct/good/simple.catala_en b/tests/test_struct/good/simple.catala_en index b67c53f3..28dc15e3 100644 --- a/tests/test_struct/good/simple.catala_en +++ b/tests/test_struct/good/simple.catala_en @@ -20,6 +20,6 @@ scope A: ```catala-test-inline $ catala Interpret -s A [RESULT] Computation successful! Results: -[RESULT] s = S {"x"= 1; "y"= 2} +[RESULT] s = S { "x"= 1; "y"= 2 } [RESULT] z = 3 ``` diff --git a/tests/test_typing/bad/err1.catala_en b/tests/test_typing/bad/err1.catala_en index d3b7234b..a7bf3a19 100644 --- a/tests/test_typing/bad/err1.catala_en +++ b/tests/test_typing/bad/err1.catala_en @@ -17,25 +17,22 @@ $ catala Typecheck --> integer Error coming from typechecking the following expression: -┌─⯈ tests/test_typing/bad/err1.catala_en:7.22-25 +┌─⯈ tests/test_typing/bad/err1.catala_en:7.22-25: └─┐ - │ 7 │ Structure { -- i: 4.1 -- e: y }; │ ‾‾‾ Type decimal coming from expression: -┌─⯈ tests/test_typing/bad/err1.catala_en:7.22-25 +┌─⯈ tests/test_typing/bad/err1.catala_en:7.22-25: └─┐ - │ 7 │ Structure { -- i: 4.1 -- e: y }; │ ‾‾‾ Type integer coming from expression: -┌─⯈ tests/test_typing/bad/common.catala_en:8.17-24 +┌─⯈ tests/test_typing/bad/common.catala_en:8.17-24: └─┐ - │ 8 │ data i content integer │ ‾‾‾‾‾‾‾ diff --git a/tests/test_typing/bad/err2.catala_en b/tests/test_typing/bad/err2.catala_en index 386dd5f6..620397a5 100644 --- a/tests/test_typing/bad/err2.catala_en +++ b/tests/test_typing/bad/err2.catala_en @@ -13,31 +13,28 @@ scope S: ```catala-test-inline $ catala Typecheck [ERROR] Error during typechecking, incompatible types: ---> integer --> decimal +--> collection Error coming from typechecking the following expression: -┌─⯈ tests/test_typing/bad/err2.catala_en:10.43-44 +┌─⯈ tests/test_typing/bad/err2.catala_en:10.38-41: └──┐ - │ 10 │ definition a equals number of (z ++ 1.1) / 2 - │ ‾ - - -Type integer coming from expression: -┌─⯈ tests/test_typing/bad/err2.catala_en:10.43-44 -└──┐ - │ -10 │ definition a equals number of (z ++ 1.1) / 2 - │ ‾ + │ ‾‾‾ Type decimal coming from expression: -┌─⯈ tests/test_typing/bad/common.catala_en:15.19-26 +┌─⯈ tests/test_typing/bad/err2.catala_en:10.38-41: └──┐ - │ -15 │ output a content decimal - │ ‾‾‾‾‾‾‾ +10 │ definition a equals number of (z ++ 1.1) / 2 + │ ‾‾‾ + + +Type collection coming from expression: +┌─⯈ tests/test_typing/bad/err2.catala_en:10.35-37: +└──┐ +10 │ definition a equals number of (z ++ 1.1) / 2 + │ ‾‾ #return code 255# ``` diff --git a/tests/test_typing/bad/err3.catala_en b/tests/test_typing/bad/err3.catala_en index 8679aec9..04cdd814 100644 --- a/tests/test_typing/bad/err3.catala_en +++ b/tests/test_typing/bad/err3.catala_en @@ -7,7 +7,7 @@ scope S: Structure { -- i: 4 -- e: y }; Structure { -- i: 5 -- e: Dat content |1970-01-01| } ] - definition a equals number of (z ++ z) / 2 + definition a equals number of (z ++ z) * 2 ``` ```catala-test-inline @@ -17,25 +17,22 @@ $ catala Typecheck --> decimal Error coming from typechecking the following expression: -┌─⯈ tests/test_typing/bad/err3.catala_en:10.41-42 +┌─⯈ tests/test_typing/bad/err3.catala_en:10.41-42: └──┐ - │ -10 │ definition a equals number of (z ++ z) / 2 +10 │ definition a equals number of (z ++ z) * 2 │ ‾ Type integer coming from expression: -┌─⯈ tests/test_typing/bad/err3.catala_en:10.41-42 +┌─⯈ tests/test_typing/bad/err3.catala_en:10.41-42: └──┐ - │ -10 │ definition a equals number of (z ++ z) / 2 +10 │ definition a equals number of (z ++ z) * 2 │ ‾ Type decimal coming from expression: -┌─⯈ tests/test_typing/bad/common.catala_en:15.19-26 +┌─⯈ tests/test_typing/bad/common.catala_en:15.19-26: └──┐ - │ 15 │ output a content decimal │ ‾‾‾‾‾‾‾ @@ -51,25 +48,22 @@ $ catala ocaml --> decimal Error coming from typechecking the following expression: -┌─⯈ tests/test_typing/bad/err3.catala_en:10.41-42 +┌─⯈ tests/test_typing/bad/err3.catala_en:10.41-42: └──┐ - │ -10 │ definition a equals number of (z ++ z) / 2 +10 │ definition a equals number of (z ++ z) * 2 │ ‾ Type integer coming from expression: -┌─⯈ tests/test_typing/bad/err3.catala_en:10.41-42 +┌─⯈ tests/test_typing/bad/err3.catala_en:10.41-42: └──┐ - │ -10 │ definition a equals number of (z ++ z) / 2 +10 │ definition a equals number of (z ++ z) * 2 │ ‾ Type decimal coming from expression: -┌─⯈ tests/test_typing/bad/common.catala_en:15.19-26 +┌─⯈ tests/test_typing/bad/common.catala_en:15.19-26: └──┐ - │ 15 │ output a content decimal │ ‾‾‾‾‾‾‾ diff --git a/tests/test_typing/bad/err4.catala_en b/tests/test_typing/bad/err4.catala_en index 4b7bdb5d..ec25f415 100644 --- a/tests/test_typing/bad/err4.catala_en +++ b/tests/test_typing/bad/err4.catala_en @@ -15,25 +15,22 @@ $ catala ocaml --> Structure Error coming from typechecking the following expression: -┌─⯈ tests/test_typing/bad/err4.catala_en:5.24-37 +┌─⯈ tests/test_typing/bad/err4.catala_en:5.24-37: └─┐ - │ 5 │ definition z equals [ Int content x ] │ ‾‾‾‾‾‾‾‾‾‾‾‾‾ Type Enum coming from expression: -┌─⯈ tests/test_typing/bad/err4.catala_en:5.24-37 +┌─⯈ tests/test_typing/bad/err4.catala_en:5.24-37: └─┐ - │ 5 │ definition z equals [ Int content x ] │ ‾‾‾‾‾‾‾‾‾‾‾‾‾ Type Structure coming from expression: -┌─⯈ tests/test_typing/bad/common.catala_en:14.30-39 +┌─⯈ tests/test_typing/bad/common.catala_en:14.30-39: └──┐ - │ 14 │ output z content collection Structure │ ‾‾‾‾‾‾‾‾‾ diff --git a/tests/test_typing/bad/err5.catala_en b/tests/test_typing/bad/err5.catala_en index 96418213..a2cfb9aa 100644 --- a/tests/test_typing/bad/err5.catala_en +++ b/tests/test_typing/bad/err5.catala_en @@ -17,27 +17,24 @@ $ catala Typecheck --> Structure Error coming from typechecking the following expression: -┌─⯈ tests/test_typing/bad/err5.catala_en:8.4-8 +┌─⯈ tests/test_typing/bad/err5.catala_en:8.4-8: └─┐ - │ 8 │ 1040 │ ‾‾‾‾ Type integer coming from expression: -┌─⯈ tests/test_typing/bad/err5.catala_en:8.4-8 +┌─⯈ tests/test_typing/bad/err5.catala_en:8.4-8: └─┐ - │ 8 │ 1040 │ ‾‾‾‾ Type Structure coming from expression: -┌─⯈ tests/test_typing/bad/common.catala_en:14.30-39 -└──┐ - │ -14 │ output z content collection Structure - │ ‾‾‾‾‾‾‾‾‾ +┌─⯈ tests/test_typing/bad/err5.catala_en:6.4-45: +└─┐ +6 │ Structure { -- i: 3 -- e: Int content x }; + │ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ #return code 255# ``` diff --git a/tests/test_typing/bad/err6.catala_en b/tests/test_typing/bad/err6.catala_en index a53e2149..36143776 100644 --- a/tests/test_typing/bad/err6.catala_en +++ b/tests/test_typing/bad/err6.catala_en @@ -14,12 +14,12 @@ scope S: Structure { -- i: 4 -- e: y }; Structure { -- i: 5 -- e: Dat content |1970-01-01| } ] - definition a equals integer_to_decimal of (number of (z ++ z)) /. 2. + definition a equals decimal of (number of (z ++ z)) / 2. scope S2: definition sub.x equals 44. definition sub.y equals Int content 44 - rule r under condition exists x in sub.z such that x.e with pattern Int + rule r under condition exists x among sub.z such that x.e with pattern Int consequence fulfilled definition a equals if r then Int content (number of sub.z) else Dec content 0.0 ``` @@ -33,25 +33,22 @@ $ catala ocaml --> integer Error coming from typechecking the following expression: -┌─⯈ tests/test_typing/bad/err6.catala_en:20.26-29 +┌─⯈ tests/test_typing/bad/err6.catala_en:20.26-29: └──┐ - │ 20 │ definition sub.x equals 44. │ ‾‾‾ Type decimal coming from expression: -┌─⯈ tests/test_typing/bad/err6.catala_en:20.26-29 +┌─⯈ tests/test_typing/bad/err6.catala_en:20.26-29: └──┐ - │ 20 │ definition sub.x equals 44. │ ‾‾‾ Type integer coming from expression: -┌─⯈ tests/test_typing/bad/common.catala_en:12.18-25 +┌─⯈ tests/test_typing/bad/common.catala_en:12.18-25: └──┐ - │ 12 │ input x content integer │ ‾‾‾‾‾‾‾ diff --git a/tests/test_typing/bad/err6.ml b/tests/test_typing/bad/err6.ml deleted file mode 100644 index 8a40b898..00000000 --- a/tests/test_typing/bad/err6.ml +++ /dev/null @@ -1,128 +0,0 @@ -(** This file has been generated by the Catala compiler, do not edit! *) - -open Runtime_ocaml.Runtime - -[@@@ocaml.warning "-4-26-27-32-41-42"] - -module Enum = struct - type t = - | Int of integer - | Dec of decimal - | Dat of date - end - -module Structure = struct - type t = {i: integer; e: Enum.t} -end - -module SOut = struct - type t = {y_out: Enum.t; z_out: Structure.t array; a_out: decimal} -end - -module SIn = struct - type t = {x_in: integer; y_in: Enum.t} -end - -module S2Out = struct - type t = {a_out: Enum.t} -end - -module S2In = struct - type t = unit -end - - - -let s (s_in: SIn.t) : SOut.t = - let x_: integer = s_in.SIn.x_in in - let y_: Enum.t = s_in.SIn.y_in in - let z_: Structure.t array = ( - try - (handle_default - {filename = "./common.catala_en"; start_line=14; start_column=10; - end_line=14; end_column=11; law_headings=[]} ([||]) - (fun (_: unit) -> true) - (fun (_: unit) -> - [|{Structure.i = (integer_of_string "3"); - Structure.e = (Enum.Int x_)}; - {Structure.i = (integer_of_string "4"); Structure.e = y_}; - {Structure.i = (integer_of_string "5"); - Structure.e = (Enum.Dat (date_of_numbers (1970) (1) (1)))}|])) - with - EmptyError -> (raise (NoValueProvided - {filename = "./common.catala_en"; start_line=14; start_column=10; - end_line=14; end_column=11; law_headings=[]}))) in - let a_: decimal = ( - try - (handle_default - {filename = "./common.catala_en"; start_line=15; start_column=10; - end_line=15; end_column=11; law_headings=[]} ([||]) - (fun (_: unit) -> true) - (fun (_: unit) -> - (decimal_of_integer (array_length (z_ @ z_))) /& - (decimal_of_string "2."))) - with - EmptyError -> (raise (NoValueProvided - {filename = "./common.catala_en"; start_line=15; start_column=10; - end_line=15; end_column=11; law_headings=[]}))) in - {SOut.y_out = y_; SOut.z_out = z_; SOut.a_out = a_} - -let s2 (s2_in: S2In.t) : S2Out.t = - let sub_dot_x_: integer = - try - ((handle_default - {filename = "err6.catala_en"; start_line=5; start_column=3; - end_line=5; end_column=6; law_headings=[]} ([||]) - (fun (_: unit) -> true) (fun (_: unit) -> integer_of_string "44"))) - with - EmptyError -> (raise (NoValueProvided - {filename = "./common.catala_en"; start_line=12; start_column=9; - end_line=12; end_column=10; law_headings=[]})) in - let sub_dot_y_: Enum.t = - try - ((handle_default - {filename = "err6.catala_en"; start_line=5; start_column=3; - end_line=5; end_column=6; law_headings=[]} ([||]) - (fun (_: unit) -> true) - (fun (_: unit) -> Enum.Int (integer_of_string "44")))) - with - EmptyError -> (raise (NoValueProvided - {filename = "./common.catala_en"; start_line=13; start_column=16; - end_line=13; end_column=17; law_headings=[]})) in - let result_: SOut.t = ((s) {SIn.x_in = sub_dot_x_; SIn.y_in = sub_dot_y_}) in - let sub_dot_y_: Enum.t = result_.SOut.y_out in - let sub_dot_z_: Structure.t array = result_.SOut.z_out in - let sub_dot_a_: decimal = result_.SOut.a_out in - let r_: bool = ( - try - (handle_default - {filename = "err6.catala_en"; start_line=6; start_column=12; - end_line=6; end_column=13; law_headings=[]} ([||]) - (fun (_: unit) -> - (Array.fold_left - (fun (acc_: bool) (x_: _) -> - acc_ || - (match (x_.Structure.e) - with - | Enum.Int _ -> true - | Enum.Dec _ -> false - | Enum.Dat _ -> false)) false sub_dot_z_)) - (fun (_: unit) -> true)) - with - EmptyError -> (raise (NoValueProvided - {filename = "err6.catala_en"; start_line=6; start_column=12; - end_line=6; end_column=13; law_headings=[]}))) in - let a_: Enum.t = ( - try - (handle_default - {filename = "err6.catala_en"; start_line=7; start_column=10; - end_line=7; end_column=11; law_headings=[]} ([||]) - (fun (_: unit) -> true) - (fun (_: unit) -> - if r_ then (Enum.Int (array_length sub_dot_z_)) else - (Enum.Dec (decimal_of_string "0.")))) - with - EmptyError -> (raise (NoValueProvided - {filename = "err6.catala_en"; start_line=7; start_column=10; - end_line=7; end_column=11; law_headings=[]}))) in - {S2Out.a_out = a_} diff --git a/tests/test_typing/good/overload.catala_en b/tests/test_typing/good/overload.catala_en new file mode 100644 index 00000000..f959db01 --- /dev/null +++ b/tests/test_typing/good/overload.catala_en @@ -0,0 +1,69 @@ +```catala +declaration scope S: + internal i1 content integer + internal i2 content integer + internal x1 content decimal + internal x2 content decimal + internal m1 content money + internal m2 content money + internal d1 content duration + internal d2 content duration + internal t1 content date + internal t2 content date + output o_i content integer + output o_x content decimal + output o_m content money + output o_d content duration + output o_t content date + output o_b content boolean + +scope S: + definition i1 equals 1 + definition i2 equals 2 + definition x1 equals 3. + definition x2 equals 4. + definition m1 equals $5 + definition m2 equals $6 + definition d1 equals 7 day + definition d2 equals 8 day + definition t1 equals |2022-01-09| + definition t2 equals |2022-01-10| + + definition o_i equals -i1 + i2 - i1 * i2 * (i1 + i2) + definition o_x equals -x1 + x2 - x1 * x2 / (x1 + x2) * (i1 / i2) + definition o_m equals -m1 + m2 - m1 * x2 / (x1 * m1 / m2) + m1 / x2 + definition o_d equals -d1 + d2 - d1 * i2 + definition o_t equals d1 + t1 + d1 + (t2 - t1) + definition o_b equals + i1 < i2 and x1 < x2 and m1 < m2 and d1 < d2 and t1 < t2 and + i1 <= i2 and x1 <= x2 and m1 <= m2 and d1 <= d2 and t1 <= t2 and + not ( + i1 > i2 or x1 > x2 or m1 > m2 or d1 > d2 or t1 > t2 or + i1 >= i2 or x1 >= x2 or m1 >= m2 or d1 >= d2 or t1 >= t2 + ) + + assertion o_i = -i1 +! i2 -! i1 *! i2 *! (i1 +! i2) + assertion o_x = -.x1 +. x2 -. x1 *. x2 /. (x1 +. x2) *. (i1 /! i2) + assertion o_m = -$m1 +$ m2 -$ m1 *$ x2 / (m1 *$ x1 /$ m2) +$ m1 / x2 + assertion o_d = -^d1 +^ d2 -^ d1 *^ i2 + assertion o_t = t1 +@ d1 +@ (t2 -@ t1) +@ d1 + assertion o_b = ( + i1 ! i2 or x1 >. x2 or m1 >$ m2 or d1 >^ d2 or t1 >@ t2 or + i1 >=! i2 or x1 >=. x2 or m1 >=$ m2 or d1 >=^ d2 or t1 >=@ t2 + ) + ) +``` + +```catala-test-inline +$ catala Interpret -s S +[RESULT] Computation successful! Results: +[RESULT] o_b = true +[RESULT] o_d = [0 years, 0 months, -13 days] +[RESULT] o_i = -5 +[RESULT] o_m = $-5.75 +[RESULT] o_t = 2022-01-24 +[RESULT] o_x = 0.14285714285714285714… +``` diff --git a/tests/test_variable_state/bad/def_no_state.catala_en b/tests/test_variable_state/bad/def_no_state.catala_en index 8d20b28e..9cff6608 100644 --- a/tests/test_variable_state/bad/def_no_state.catala_en +++ b/tests/test_variable_state/bad/def_no_state.catala_en @@ -14,17 +14,15 @@ scope A: $ catala Typecheck [ERROR] This definition does not indicate which state has to be considered for variable foo. -┌─⯈ tests/test_variable_state/bad/def_no_state.catala_en:10.13-16 +┌─⯈ tests/test_variable_state/bad/def_no_state.catala_en:10.13-16: └──┐ - │ 10 │ definition foo equals 2 │ ‾‾‾ └─ Test Variable declaration: -┌─⯈ tests/test_variable_state/bad/def_no_state.catala_en:5.9-12 +┌─⯈ tests/test_variable_state/bad/def_no_state.catala_en:5.9-12: └─┐ - │ 5 │ output foo content integer │ ‾‾‾ └─ Test diff --git a/tests/test_variable_state/bad/no_cross_exceptions.catala_en b/tests/test_variable_state/bad/no_cross_exceptions.catala_en index 41cd1ef5..0c9c3eea 100644 --- a/tests/test_variable_state/bad/no_cross_exceptions.catala_en +++ b/tests/test_variable_state/bad/no_cross_exceptions.catala_en @@ -18,9 +18,8 @@ scope A: $ catala Typecheck [ERROR] Unknown label for the scope variable foo.baz: "thing" -┌─⯈ tests/test_variable_state/bad/no_cross_exceptions.catala_en:14.12-17 +┌─⯈ tests/test_variable_state/bad/no_cross_exceptions.catala_en:14.12-17: └──┐ - │ 14 │ exception thing definition foo state baz under condition true consequence equals 3 │ ‾‾‾‾‾ └─ Test diff --git a/tests/test_variable_state/bad/self_reference_first_state.catala_en b/tests/test_variable_state/bad/self_reference_first_state.catala_en index 4f429196..1727413c 100644 --- a/tests/test_variable_state/bad/self_reference_first_state.catala_en +++ b/tests/test_variable_state/bad/self_reference_first_state.catala_en @@ -16,9 +16,8 @@ scope A: $ catala Typecheck [ERROR] It is impossible to refer to the variable you are defining when defining its first state. -┌─⯈ tests/test_variable_state/bad/self_reference_first_state.catala_en:10.34-37 +┌─⯈ tests/test_variable_state/bad/self_reference_first_state.catala_en:10.34-37: └──┐ - │ 10 │ definition foo state bar equals foo + 1 │ ‾‾‾ └─ Test diff --git a/tests/test_variable_state/bad/state_cycle.catala_en b/tests/test_variable_state/bad/state_cycle.catala_en index 67772797..9e4821f9 100644 --- a/tests/test_variable_state/bad/state_cycle.catala_en +++ b/tests/test_variable_state/bad/state_cycle.catala_en @@ -24,65 +24,57 @@ $ catala Typecheck [ERROR] Cyclic dependency detected between variables of scope A! Cycle variable foofoo.bar, declared: -┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:9.10-13 +┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:9.10-13: └─┐ - │ 9 │ state bar │ ‾‾‾ └─ Test Used here in the definition of another cycle variable foofoo.baz: -┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:19.37-43 +┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:19.37-43: └──┐ - │ 19 │ definition foofoo state baz equals foofoo + 1 │ ‾‾‾‾‾‾ └─ Test Cycle variable foofoo.baz, declared: -┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:10.10-13 +┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:10.10-13: └──┐ - │ 10 │ state baz │ ‾‾‾ └─ Test Used here in the definition of another cycle variable foo.bar: -┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:13.34-40 +┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:13.34-40: └──┐ - │ 13 │ definition foo state bar equals foofoo │ ‾‾‾‾‾‾ └─ Test Cycle variable foo.bar, declared: -┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:6.10-13 +┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:6.10-13: └─┐ - │ 6 │ state bar │ ‾‾‾ └─ Test Used here in the definition of another cycle variable foo.baz: -┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:15.34-37 +┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:15.34-37: └──┐ - │ 15 │ definition foo state baz equals foo + 1 │ ‾‾‾ └─ Test Cycle variable foo.baz, declared: -┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:7.10-13 +┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:7.10-13: └─┐ - │ 7 │ state baz │ ‾‾‾ └─ Test Used here in the definition of another cycle variable foofoo.bar: -┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:17.37-40 +┌─⯈ tests/test_variable_state/bad/state_cycle.catala_en:17.37-40: └──┐ - │ 17 │ definition foofoo state bar equals foo │ ‾‾‾ └─ Test diff --git a/tests/test_variable_state/bad/unknown_state.catala_en b/tests/test_variable_state/bad/unknown_state.catala_en index de88e288..e13494ae 100644 --- a/tests/test_variable_state/bad/unknown_state.catala_en +++ b/tests/test_variable_state/bad/unknown_state.catala_en @@ -16,17 +16,15 @@ scope A: $ catala Typecheck [ERROR] This identifier is not a state declared for variable foo. -┌─⯈ tests/test_variable_state/bad/unknown_state.catala_en:12.23-27 +┌─⯈ tests/test_variable_state/bad/unknown_state.catala_en:12.23-27: └──┐ - │ 12 │ definition foo state basz equals foo + 1 │ ‾‾‾‾ └─ Test Variable declaration: -┌─⯈ tests/test_variable_state/bad/unknown_state.catala_en:5.9-12 +┌─⯈ tests/test_variable_state/bad/unknown_state.catala_en:5.9-12: └─┐ - │ 5 │ output foo content integer │ ‾‾‾ └─ Test diff --git a/tests/test_variable_state/good/subscope.catala_en b/tests/test_variable_state/good/subscope.catala_en index a573d716..293d7808 100644 --- a/tests/test_variable_state/good/subscope.catala_en +++ b/tests/test_variable_state/good/subscope.catala_en @@ -35,8 +35,8 @@ $ catala Scopelang -s A let scope A (foo_bar: integer|context) (foo_baz: integer|internal) (foo_fizz: integer|internal|output) = let foo_bar : integer = reentrant or by default ⟨true ⊢ 1⟩; - let foo_baz : integer = ⟨true ⊢ foo_bar + 1⟩; - let foo_fizz : integer = ⟨true ⊢ foo_baz + 1⟩ + let foo_baz : integer = ⟨true ⊢ foo_bar +! 1⟩; + let foo_fizz : integer = ⟨true ⊢ foo_baz +! 1⟩ ``` ```catala-test-inline