Overseas housing benefits : last fixes and tests (#446)

This commit is contained in:
Denis Merigoux 2023-05-05 09:47:41 +02:00 committed by GitHub
commit c5124f50c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
182 changed files with 84265 additions and 76377 deletions

View File

@ -970,7 +970,7 @@ let driver
Cli.error_print "The command \"%s\" is unknown to clerk." command;
return_err
with Errors.StructuredError (msg, pos) ->
Cli.error_print "%s" (Errors.print_structured_error msg pos);
Errors.print_structured_error msg pos;
return_err
let main () = exit (Cmdliner.Cmd.eval' (Cmdliner.Cmd.v info (clerk_t driver)))

View File

@ -13,6 +13,7 @@ depends: [
"re" {>= "1.9.0"}
"cohttp-lwt-unix" {>= "5.0.0"}
"cohttp" {>= "5.0.0"}
"lwt_ssl" {>= "1.2.0"}
"tls" {>= "0.15.3"}
"catala" {= version}
"odoc" {with-doc}

View File

@ -98,6 +98,10 @@ let disable_counterexamples = ref false
let avoid_exceptions_flag = ref false
let check_invariants_flag = ref false
type message_format_enum = Human | GNU
let message_format_flag = ref Human
open Cmdliner
let file =
@ -122,6 +126,19 @@ let color =
"Allow output of colored and styled text. If set to $(i,auto), \
enabled when the standard output is to a terminal.")
let message_format_opt = Arg.enum ["human", Human; "gnu", GNU]
let message_format =
Arg.(
value
& opt message_format_opt Human
& info ["message_format"]
~doc:
"Selects the format of error and warning messages emitted by the \
compiler. If set to $(i,human), the messages will be nicely \
displayed and meant to be read by a human. If set to $(i, gnu), the \
messages will be rendered according to the GNU coding standards.")
let unstyled =
Arg.(
value
@ -263,6 +280,7 @@ let output =
type options = {
debug : bool;
color : when_enum;
message_format : message_format_enum;
wrap_weaved_output : bool;
avoid_exceptions : bool;
backend : string;
@ -285,6 +303,7 @@ let options =
let make
debug
color
message_format
unstyled
wrap_weaved_output
avoid_exceptions
@ -305,6 +324,7 @@ let options =
{
debug;
color = (if unstyled then Never else color);
message_format;
wrap_weaved_output;
avoid_exceptions;
backend;
@ -327,6 +347,7 @@ let options =
const make
$ debug
$ color
$ message_format
$ unstyled
$ wrap_weaved_output
$ avoid_exceptions
@ -362,7 +383,8 @@ let set_option_globals options : unit =
optimize_flag := options.optimize;
check_invariants_flag := options.check_invariants;
disable_counterexamples := options.disable_counterexamples;
avoid_exceptions_flag := options.avoid_exceptions
avoid_exceptions_flag := options.avoid_exceptions;
message_format_flag := options.message_format
let version = "0.8.0"

View File

@ -77,6 +77,12 @@ val disable_counterexamples : bool ref
val avoid_exceptions_flag : bool ref
(** Avoids using [try ... with] exceptions when compiling the default calculus. *)
type message_format_enum =
| Human
| GNU (** Format of error and warning messages output by the compiler. *)
val message_format_flag : message_format_enum ref
(** {2 CLI terms} *)
val file : string Cmdliner.Term.t
@ -99,6 +105,7 @@ type when_enum = Auto | Always | Never
type options = {
debug : bool;
color : when_enum;
message_format : message_format_enum;
wrap_weaved_output : bool;
avoid_exceptions : bool;
backend : string;

View File

@ -23,17 +23,58 @@ exception StructuredError of (string * (string option * Pos.t) list)
secondary positions related to the error, each carrying an optional
secondary message to describe what is pointed by the position. *)
let print_structured_error (msg : string) (pos : (string option * Pos.t) list) :
string =
Printf.sprintf "%s%s%s" msg
(if pos = [] then "" else "\n\n")
(String.concat "\n\n"
(List.map
(fun (msg, pos) ->
Printf.sprintf "%s%s"
(match msg with None -> "" | Some msg -> msg ^ "\n")
(Pos.retrieve_loc_text pos))
pos))
let print_structured_error
?(is_warning : bool = false)
(msg : string)
(pos : (string option * Pos.t) list) : unit =
match !Cli.message_format_flag with
| Cli.Human ->
(if is_warning then Cli.warning_print else Cli.error_print)
"%s%s%s" msg
(if pos = [] then "" else "\n\n")
(String.concat "\n\n"
(List.map
(fun (msg, pos) ->
Printf.sprintf "%s%s"
(match msg with None -> "" | Some msg -> msg ^ "\n")
(Pos.retrieve_loc_text pos))
pos))
| Cli.GNU ->
let remove_new_lines s =
Re.replace ~all:true
(Re.compile (Re.seq [Re.char '\n'; Re.rep Re.blank]))
~f:(fun _ -> " ")
s
in
let severity =
Format.asprintf "%a"
(if is_warning then Cli.warning_marker else Cli.error_marker)
()
in
(* The top message doesn't come with a position, which is not something the
GNU standard allows. So we look the position list and put the top message
everywhere there is not a more precise message. If we can'r find a
position without a more precise message, we just take the first position
in the list to pair with the message. *)
(if is_warning then Format.printf else Format.eprintf)
"%s%s\n"
(if pos != [] && List.for_all (fun (msg', _) -> Option.is_some msg') pos
then
Format.asprintf "%a: %s %s\n"
(Cli.format_with_style [ANSITerminal.blue])
(Pos.to_string_short (snd (List.hd pos)))
severity (remove_new_lines msg)
else "")
(String.concat "\n"
(List.map
(fun (msg', pos) ->
Format.asprintf "%a: %s %s"
(Cli.format_with_style [ANSITerminal.blue])
(Pos.to_string_short pos) severity
(match msg' with
| None -> remove_new_lines msg
| Some msg' -> remove_new_lines msg'))
pos))
(** {1 Error exception and printing} *)
@ -61,7 +102,7 @@ let assert_internal_error condition fmt =
let format_multispanned_warning (pos : (string option * Pos.t) list) format =
Format.kasprintf
(fun msg -> Cli.warning_print "%s" (print_structured_error msg pos))
(fun msg -> print_structured_error ~is_warning:true msg pos)
format
let format_spanned_warning ?(span_msg : string option) (span : Pos.t) format =

View File

@ -23,7 +23,9 @@ exception StructuredError of (string * (string option * Pos.t) list)
secondary positions related to the error, each carrying an optional
secondary message to describe what is pointed by the position. *)
val print_structured_error : string -> (string option * Pos.t) list -> string
val print_structured_error :
?is_warning:bool -> string -> (string option * Pos.t) list -> unit
(** Emits error or warning if [is_warning] is set to [true]. *)
(** {1 Error exception and printing} *)

View File

@ -96,15 +96,10 @@ 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
(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
(s.Lexing.pos_cnum - s.Lexing.pos_bol)
e.Lexing.pos_lnum
(e.Lexing.pos_cnum - e.Lexing.pos_bol)
Printf.sprintf "%s:%d.%d-%d.%d" s.Lexing.pos_fname s.Lexing.pos_lnum
(s.Lexing.pos_cnum - s.Lexing.pos_bol + 1)
e.Lexing.pos_lnum
(e.Lexing.pos_cnum - e.Lexing.pos_bol + 1)
let indent_number (s : string) : int =
try
@ -223,7 +218,7 @@ let retrieve_loc_text (pos : t) : string =
(match oc with None -> () | Some oc -> close_in oc);
let buf = Buffer.create 73 in
Buffer.add_string buf
(Cli.with_style blue_style "┌─⯈ %s" (to_string_short pos));
(Cli.with_style blue_style "┌─⯈ %s:" (to_string_short pos));
Buffer.add_char buf '\n';
(* should be outside of [Cli.with_style] *)
Buffer.add_string buf

View File

@ -47,7 +47,11 @@ val to_string : t -> string
val to_string_short : t -> string
(** Formats a position like this:
{v <file>;<start_line>:<start_col>--<end_line>:<end_col> v} *)
{v <file>;<start_line>:<start_col>--<end_line>:<end_col> v}
This function is compliant with the
{{:https://www.gnu.org/prep/standards/standards.html#Errors} GNU coding
standards}. *)
val retrieve_loc_text : t -> string
(** Open the file corresponding to the position and retrieves the text concerned

View File

@ -22,6 +22,7 @@ let _ =
language = Some (Js.to_string language);
max_prec_digits = None;
closure_conversion = false;
message_format = Human;
trace;
disable_warnings = true;
disable_counterexamples = false;

View File

@ -71,6 +71,8 @@ module ScopeDef = struct
module Set = Set.Make (Base)
end
module AssertionName = Uid.Gen ()
(** {1 AST} *)
type location = desugared glocation
@ -117,28 +119,46 @@ module Rule = struct
let compare r1 r2 =
match r1.rule_parameter, r2.rule_parameter with
| None, None -> (
let j1 = Expr.unbox r1.rule_just in
let j2 = Expr.unbox r2.rule_just in
match Expr.compare j1 j2 with
let j1, j1m = r1.rule_just in
let j2, j2m = r2.rule_just in
match
Bindlib.unbox
(Bindlib.box_apply2
(fun j1 j2 -> Expr.compare (j1, j1m) (j2, j2m))
j1 j2)
with
| 0 ->
let c1 = Expr.unbox r1.rule_cons in
let c2 = Expr.unbox r2.rule_cons in
Expr.compare c1 c2
let c1, c1m = r1.rule_cons in
let c2, c2m = r2.rule_cons in
Bindlib.unbox
(Bindlib.box_apply2
(fun c1 c2 -> Expr.compare (c1, c1m) (c2, c2m))
c1 c2)
| n -> n)
| Some (l1, _), Some (l2, _) ->
ListLabels.compare l1 l2 ~cmp:(fun ((v1, _), t1) ((v2, _), t2) ->
match Type.compare t1 t2 with
| 0 -> (
let open Bindlib in
let b1 = unbox (bind_var v1 (Expr.Box.lift r1.rule_just)) in
let b2 = unbox (bind_var v2 (Expr.Box.lift r2.rule_just)) in
let _, j1, j2 = unbind2 b1 b2 in
match Expr.compare j1 j2 with
let b1 = bind_var v1 (Expr.Box.lift r1.rule_just) in
let b2 = bind_var v2 (Expr.Box.lift r2.rule_just) in
match
Bindlib.unbox
(Bindlib.box_apply2
(fun b1 b2 ->
let _, j1, j2 = unbind2 b1 b2 in
Expr.compare j1 j2)
b1 b2)
with
| 0 ->
let b1 = unbox (bind_var v1 (Expr.Box.lift r1.rule_cons)) in
let b2 = unbox (bind_var v2 (Expr.Box.lift r2.rule_cons)) in
let _, c1, c2 = unbind2 b1 b2 in
Expr.compare c1 c2
let b1 = bind_var v1 (Expr.Box.lift r1.rule_cons) in
let b2 = bind_var v2 (Expr.Box.lift r2.rule_cons) in
Bindlib.unbox
(Bindlib.box_apply2
(fun b1 b2 ->
let _, c1, c2 = unbind2 b1 b2 in
Expr.compare c1 c2)
b1 b2)
| n -> n)
| n -> n)
| None, Some _ -> -1
@ -201,7 +221,7 @@ type scope = {
scope_sub_scopes : ScopeName.t SubScopeName.Map.t;
scope_uid : ScopeName.t;
scope_defs : scope_def ScopeDef.Map.t;
scope_assertions : assertion list;
scope_assertions : assertion AssertionName.Map.t;
scope_options : catala_option Marked.pos list;
scope_meta_assertions : meta_assertion list;
}
@ -271,9 +291,9 @@ let fold_exprs ~(f : 'a -> expr -> 'a) ~(init : 'a) (p : program) : 'a =
scope.scope_defs acc
in
let acc =
List.fold_left
(fun acc assertion -> f acc (Expr.unbox assertion))
acc scope.scope_assertions
AssertionName.Map.fold
(fun _ assertion acc -> f acc (Expr.unbox assertion))
scope.scope_assertions acc
in
acc)
p.program_scopes init

View File

@ -35,6 +35,8 @@ module ScopeDef : sig
module Set : Set.S with type elt = t
end
module AssertionName : Uid.Id with type info = Uid.MarkedString.info
(** {1 AST} *)
(** {2 Expressions} *)
@ -119,7 +121,7 @@ type scope = {
scope_sub_scopes : ScopeName.t SubScopeName.Map.t;
scope_uid : ScopeName.t;
scope_defs : scope_def ScopeDef.Map.t;
scope_assertions : assertion list;
scope_assertions : assertion AssertionName.Map.t;
scope_options : catala_option Marked.pos list;
scope_meta_assertions : meta_assertion list;
}

View File

@ -33,13 +33,17 @@ open Shared_ast
Indeed, during interpretation, subscopes are executed atomically. *)
module Vertex = struct
type t = Var of ScopeVar.t * StateName.t option | SubScope of SubScopeName.t
type t =
| Var of ScopeVar.t * StateName.t option
| SubScope of SubScopeName.t
| Assertion of Ast.AssertionName.t
let hash x =
match x with
| Var (x, None) -> ScopeVar.hash x
| Var (x, Some sx) -> Int.logxor (ScopeVar.hash x) (StateName.hash sx)
| SubScope x -> SubScopeName.hash x
| Assertion a -> Ast.AssertionName.hash a
let compare x y =
match x, y with
@ -48,8 +52,11 @@ module Vertex = struct
| 0 -> Option.compare StateName.compare xst yst
| n -> n)
| SubScope x, SubScope y -> SubScopeName.compare x y
| Assertion a, Assertion b -> Ast.AssertionName.compare a b
| Var _, _ -> -1
| _, Var _ -> 1
| SubScope _, Assertion _ -> -1
| Assertion _, SubScope _ -> 1
| SubScope _, _ -> .
| _, SubScope _ -> .
@ -58,7 +65,8 @@ module Vertex = struct
| Var (x, sx), Var (y, sy) ->
ScopeVar.equal x y && Option.equal StateName.equal sx sy
| SubScope x, SubScope y -> SubScopeName.equal x y
| (Var _ | SubScope _), _ -> false
| Assertion a, Assertion b -> Ast.AssertionName.equal a b
| (Var _ | SubScope _ | Assertion _), _ -> false
let format_t (fmt : Format.formatter) (x : t) : unit =
match x with
@ -66,11 +74,13 @@ module Vertex = struct
| Var (v, Some sv) ->
Format.fprintf fmt "%a@%a" ScopeVar.format_t v StateName.format_t sv
| SubScope v -> SubScopeName.format_t fmt v
| Assertion a -> Ast.AssertionName.format_t fmt a
let info = function
| Var (v, None) -> ScopeVar.get_info v
| Var (_, Some sv) -> StateName.get_info sv
| SubScope v -> SubScopeName.get_info v
| Assertion a -> Ast.AssertionName.get_info a
end
(** On the edges, the label is the position of the expression responsible for
@ -172,6 +182,12 @@ let build_scope_dependencies (scope : Ast.scope) : ScopeDependencies.t =
ScopeDependencies.add_vertex g (Vertex.SubScope v))
scope.scope_sub_scopes g
in
let g =
Ast.AssertionName.Map.fold
(fun a _ g -> ScopeDependencies.add_vertex g (Vertex.Assertion a))
scope.scope_assertions g
in
(* then add the edges *)
let g =
Ast.ScopeDef.Map.fold
(fun def_key scope_def g ->
@ -237,6 +253,33 @@ let build_scope_dependencies (scope : Ast.scope) : ScopeDependencies.t =
fv g)
scope.scope_defs g
in
let g =
Ast.AssertionName.Map.fold
(fun a_name a g ->
let used_vars = Ast.locations_used (Expr.unbox a) in
Ast.LocationSet.fold
(fun used_var g ->
let edge_from =
match Marked.unmark used_var with
| DesugaredScopeVar (v, s) ->
Some (Vertex.Var (Marked.unmark v, s))
| SubScopeVar (_, subscope_name, _) ->
Some (Vertex.SubScope (Marked.unmark subscope_name))
| ToplevelVar _ -> None
(* we don't add this dependency because toplevel definitions are
outside the scope *)
in
match edge_from with
| None -> g
| Some edge_from ->
let edge =
ScopeDependencies.E.create edge_from (Expr.pos a)
(Vertex.Assertion a_name)
in
ScopeDependencies.add_edge_e g edge)
used_vars g)
scope.scope_assertions g
in
g
(** {1 Exceptions dependency graph} *)

View File

@ -37,6 +37,7 @@ module Vertex : sig
type t =
| Var of Shared_ast.ScopeVar.t * Shared_ast.StateName.t option
| SubScope of Shared_ast.SubScopeName.t
| Assertion of Ast.AssertionName.t
val format_t : Format.formatter -> t -> unit
val info : t -> Uid.MarkedString.info

View File

@ -56,7 +56,9 @@ let scope ctx env scope =
{ def with scope_def_rules })
scope.scope_defs
in
let scope_assertions = List.map (expr ctx env) scope.scope_assertions in
let scope_assertions =
AssertionName.Map.map (expr ctx env) scope.scope_assertions
in
{ scope with scope_defs; scope_assertions }
let program prg =

View File

@ -1114,7 +1114,7 @@ let process_assert
cond ),
Marked.get_mark cond ))
in
let ass =
let assertion =
match precond with
| Some precond ->
Expr.eifthenelse precond ass
@ -1122,8 +1122,17 @@ let process_assert
(Marked.get_mark precond)
| None -> ass
in
(* The assertion name is not very relevant and should not be used in error
messages, it is only a reference to designate the assertion instead of its
expression. *)
let assertion_name = Ast.AssertionName.fresh ("assert", Expr.pos assertion) in
let new_scope =
{ scope with scope_assertions = ass :: scope.scope_assertions }
{
scope with
scope_assertions =
Ast.AssertionName.Map.add assertion_name assertion
scope.scope_assertions;
}
in
{
prgm with
@ -1410,7 +1419,7 @@ let translate_program
Ast.scope_vars;
scope_sub_scopes;
scope_defs = init_scope_defs ctxt s_context.var_idmap;
scope_assertions = [];
scope_assertions = Ast.AssertionName.Map.empty;
scope_meta_assertions = [];
scope_options = [];
scope_uid = s_uid;

View File

@ -44,6 +44,62 @@ let detect_empty_definitions (p : program) : unit =
scope.scope_defs)
p.program_scopes
(* To detect rules that have the same justification and conclusion, we create a
set data structure with an appropriate comparison function *)
module RuleExpressionsMap = Map.Make (struct
type t = rule
let compare x y =
let xj, xj_mark = x.rule_just in
let yj, yj_mark = y.rule_just in
let just =
Bindlib.unbox
(Bindlib.box_apply2
(fun xj yj -> Expr.compare (xj, xj_mark) (yj, yj_mark))
xj yj)
in
if just = 0 then
let xc, xc_mark = x.rule_cons in
let yc, yc_mark = y.rule_cons in
Bindlib.unbox
(Bindlib.box_apply2
(fun xc yc -> Expr.compare (xc, xc_mark) (yc, yc_mark))
xc yc)
else just
end)
let detect_identical_rules (p : program) : unit =
ScopeName.Map.iter
(fun _ scope ->
ScopeDef.Map.iter
(fun _ scope_def ->
let rules_seen =
RuleName.Map.fold
(fun _ rule rules_seen ->
RuleExpressionsMap.update rule
(fun l ->
let x =
( None,
Pos.overwrite_law_info
(snd (RuleName.get_info rule.rule_id))
(Pos.get_law_info (Expr.pos rule.rule_just)) )
in
match l with None -> Some [x] | Some l -> Some (x :: l))
rules_seen)
scope_def.scope_def_rules RuleExpressionsMap.empty
in
RuleExpressionsMap.iter
(fun _ pos ->
if List.length pos > 1 then
Errors.format_multispanned_warning pos
"These %s have identical justifications and consequences; is \
it a mistake?"
(if scope_def.scope_def_is_condition then "rules"
else "definitions"))
rules_seen)
scope.scope_defs)
p.program_scopes
let detect_unused_scope_vars (p : program) : unit =
let used_scope_vars =
Ast.fold_exprs
@ -78,6 +134,9 @@ let detect_unused_scope_vars (p : program) : unit =
p.program_scopes
let detect_unused_struct_fields (p : program) : unit =
(* TODO: this analysis should be finer grained: a false negative is if the
field is used to define itself, for passing data around but that never gets
really used or defined. *)
let struct_fields_used =
Ast.fold_exprs
~f:(fun struct_fields_used e ->
@ -200,4 +259,5 @@ let lint_program (p : program) : unit =
detect_empty_definitions p;
detect_unused_scope_vars p;
detect_unused_struct_fields p;
detect_unused_enum_constructors p
detect_unused_enum_constructors p;
detect_identical_rules p

View File

@ -366,9 +366,29 @@ let process_data_decl
in
let states_idmap, states_list =
List.fold_right
(fun state_id (states_idmap, states_list) ->
(fun state_id
((states_idmap : StateName.t IdentName.Map.t), states_list) ->
let state_id_name = Marked.unmark state_id in
if IdentName.Map.mem state_id_name states_idmap then
Errors.raise_multispanned_error
[
( Some
(Format.asprintf "First instance of state %a:"
(Cli.format_with_style [ANSITerminal.yellow])
("\"" ^ state_id_name ^ "\"")),
Marked.get_mark state_id );
( Some
(Format.asprintf "Second instance of state %a:"
(Cli.format_with_style [ANSITerminal.yellow])
("\"" ^ state_id_name ^ "\"")),
Marked.get_mark
(IdentName.Map.find state_id_name states_idmap
|> StateName.get_info) );
]
"There are two states with the same name for the same variable: \
this is ambiguous. Please change the name of either states.";
let state_uid = StateName.fresh state_id in
( IdentName.Map.add (Marked.unmark state_id) state_uid states_idmap,
( IdentName.Map.add state_id_name state_uid states_idmap,
state_uid :: states_list ))
decl.scope_decl_context_item_states (IdentName.Map.empty, [])
in

View File

@ -50,7 +50,7 @@ let format_exception_tree (fmt : Format.formatter) (t : exception_tree) =
print_node (pref' ^ " ") t'
| _ ->
pp_print_string fmt (blue "──");
print_sons pref' "┬──" sons
print_sons pref' "┬──" sons
and print_sons pref start = function
| [] -> assert false
| [s] ->
@ -63,7 +63,7 @@ let format_exception_tree (fmt : Format.formatter) (t : exception_tree) =
pp_print_string fmt (blue (pref ^ ""));
pp_force_newline fmt ();
pp_print_string fmt (blue pref);
print_sons pref "├──" sons
print_sons pref " ├──" sons
in
print_node "" t

View File

@ -569,7 +569,7 @@ let driver source_file (options : Cli.options) : int =
with
| Errors.StructuredError (msg, pos) ->
let bt = Printexc.get_raw_backtrace () in
Cli.error_print "%s" (Errors.print_structured_error msg pos);
Errors.print_structured_error msg pos;
if Printexc.backtrace_status () then Printexc.print_raw_backtrace stderr bt;
-1
| Sys_error msg ->

View File

@ -289,6 +289,8 @@ let rule_to_exception_graph (scope : Desugared.Ast.scope) = function
new_exc_graph exc_graphs)
Desugared.Ast.ScopeDef.Map.empty
(List.map snd (Desugared.Ast.ScopeDef.Map.bindings sub_scope_vars_redefs))
| Assertion _ ->
Desugared.Ast.ScopeDef.Map.empty (* no exceptions for assertions *)
let scope_to_exception_graphs (scope : Desugared.Ast.scope) :
Desugared.Dependency.ExceptionsDependencies.t Desugared.Ast.ScopeDef.Map.t =
@ -697,6 +699,14 @@ let translate_rule
{ pos = Marked.get_mark (SubScopeName.get_info sub_scope_index) }
);
]
| Assertion a_name ->
let assertion_expr =
Desugared.Ast.AssertionName.Map.find a_name scope.scope_assertions
in
(* we unbox here because assertions do not have free variables (at this
point Bindlib variables are only for fuhnction parameters)*)
let assertion_expr = translate_expr ctx (Expr.unbox assertion_expr) in
[Ast.Assertion (Expr.unbox assertion_expr)]
(** Translates a scope *)
let translate_scope
@ -719,17 +729,6 @@ let translate_scope
scope_decl_rules @ new_rules)
[] 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 ->

View File

@ -57,16 +57,15 @@ let print_log entry infos pos e =
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] "<function>"
| _ ->
let expr_str = Format.asprintf "%a" (Print.expr ()) 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)
(let expr_str =
Format.asprintf "%a" (Print.expr ~hide_function_body:true ()) 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) ->

View File

@ -223,8 +223,6 @@ let rec optimize_expr :
} ),
_ ) ) ->
EEmptyError
| [], just ->
EIfThenElse { cond = just; etrue = cons; efalse = EEmptyError, mark }
| excepts, just -> EDefault { excepts; just; cons })
| EIfThenElse
{

View File

@ -431,14 +431,17 @@ end
let rec expr_aux :
type a.
hide_function_body:bool ->
debug:bool ->
Bindlib.ctxt ->
ANSITerminal.style list ->
Format.formatter ->
(a, 't) gexpr ->
unit =
fun ~debug bnd_ctx colors fmt e ->
let exprb bnd_ctx colors e = expr_aux ~debug bnd_ctx colors e in
fun ~hide_function_body ~debug bnd_ctx colors fmt e ->
let exprb bnd_ctx colors e =
expr_aux ~hide_function_body ~debug bnd_ctx colors e
in
let exprc colors e = exprb bnd_ctx colors e in
let expr e = exprc colors e in
let var = if debug then var_debug else var in
@ -448,7 +451,7 @@ let rec expr_aux :
| e -> e
in
let e = skip_log e in
let paren ~rhs expr fmt e1 =
let paren ~rhs ?(colors = colors) expr fmt e1 =
if Precedence.needs_parens ~rhs ~context:e (skip_log e1) then (
Format.pp_open_hvbox fmt 1;
Cli.format_with_style [List.hd colors] fmt "(";
@ -457,7 +460,10 @@ let rec expr_aux :
Cli.format_with_style [List.hd colors] fmt ")")
else expr colors fmt e1
in
let lhs ex = paren ~rhs:false ex in
let default_punct color fmt s =
Format.pp_print_as fmt 1 (Cli.with_style [color] "%s" s)
in
let lhs ?(colors = colors) ex = paren ~colors ~rhs:false ex in
let rhs ex = paren ~rhs:true ex in
match Marked.unmark e with
| EVar v -> var fmt v
@ -501,20 +507,22 @@ let rec expr_aux :
pr bnd_ctx colors fmt e;
Format.pp_close_box fmt ()
| 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) tys in
Format.fprintf fmt "@[<hv 0>%a @[<hv 2>%a@]@ @]%a@ %a" punctuation "λ"
(Format.pp_print_list ~pp_sep:Format.pp_print_space (fun fmt (x, tau) ->
punctuation fmt "(";
Format.pp_open_hvbox fmt 2;
var fmt x;
punctuation fmt ":";
Format.pp_print_space fmt ();
typ None fmt tau;
Format.pp_close_box fmt ();
punctuation fmt ")"))
xs_tau punctuation "" (rhs expr) body
if hide_function_body then Format.fprintf fmt "%a" op_style "<function>"
else
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) tys in
Format.fprintf fmt "@[<hv 0>%a @[<hv 2>%a@]@ @]%a@ %a" punctuation "λ"
(Format.pp_print_list ~pp_sep:Format.pp_print_space (fun fmt (x, tau) ->
punctuation fmt "(";
Format.pp_open_hvbox fmt 2;
var fmt x;
punctuation fmt ":";
Format.pp_print_space fmt ();
typ None fmt tau;
Format.pp_close_box fmt ();
punctuation fmt ")"))
xs_tau punctuation "" (rhs expr) body
| EApp { f = EOp { op = (Map | Filter) as op; _ }, _; args = [arg1; arg2] } ->
Format.fprintf fmt "@[<hv 2>%a %a@ %a@]" (operator ~debug) op (lhs exprc)
arg1 (rhs exprc) arg2
@ -561,15 +569,36 @@ let rec expr_aux :
| EOp { op; _ } -> operator ~debug fmt op
| EDefault { excepts; just; cons } ->
if List.length excepts = 0 then
Format.fprintf fmt "@[<hv 1>%a%a@ %a %a%a@]" punctuation "" expr just
punctuation "" expr cons punctuation ""
Format.fprintf fmt "@[<hv 1>%a%a@ %a %a%a@]"
(default_punct (List.hd colors))
""
(exprc (List.tl colors))
just
(default_punct (List.hd colors))
""
(exprc (List.tl colors))
cons
(default_punct (List.hd colors))
""
else
Format.fprintf fmt
"@[<hv 0>@[<hov 2>%a %a@]@ @[<hov 2>%a %a@ %a %a@] %a@]" punctuation ""
"@[<hv 0>@[<hov 2>%a %a@]@ @[<hov 2>%a %a@ %a %a@] %a@]"
(default_punct (List.hd colors))
""
(Format.pp_print_list
~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ",")
(lhs exprc))
excepts punctuation "|" expr just punctuation "" expr cons punctuation
~pp_sep:(fun fmt () ->
Format.fprintf fmt "%a@ " (default_punct (List.hd colors)) ",")
(lhs ~colors:(List.tl colors) exprc))
excepts
(default_punct (List.hd colors))
"|"
(exprc (List.tl colors))
just
(default_punct (List.hd colors))
""
(exprc (List.tl colors))
cons
(default_punct (List.hd colors))
""
| EEmptyError -> lit_style fmt ""
| EErrorOnEmpty e' ->
@ -655,8 +684,8 @@ let rec colors =
let typ_debug = typ None
let typ ctx = typ (Some ctx)
let expr ?(debug = !Cli.debug_flag) () ppf e =
expr_aux ~debug Bindlib.empty_ctxt colors ppf e
let expr ?(hide_function_body = false) ?(debug = !Cli.debug_flag) () ppf e =
expr_aux ~hide_function_body ~debug Bindlib.empty_ctxt colors ppf e
let scope_let_kind ?debug:(_debug = true) _ctx fmt k =
match k with

View File

@ -52,8 +52,14 @@ val var : Format.formatter -> 'e Var.t -> unit
val var_debug : Format.formatter -> 'e Var.t -> unit
val expr :
?debug:bool -> unit -> Format.formatter -> ('a, 'm mark) gexpr -> unit
(** Same as [expr], but with a debug flag that defaults to [!Cli.debug_flag] *)
?hide_function_body:bool ->
?debug:bool ->
unit ->
Format.formatter ->
('a, 'm mark) gexpr ->
unit
(** Same as [expr], but with a debug flag that defaults to [!Cli.debug_flag]. If
[~hide_function_body:true], prints "<function>" for [EAbs] nodes *)
(** {1 Debugging versions that don't require a context} *)

View File

@ -33,14 +33,14 @@ Message: expected either 'condition', or 'content' followed by the expected vari
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.21-11.26:
└──┐
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.11-11.20:
└──┐
11 │ context my_gaming scope GamingAuthorized
│ ‾‾‾‾‾‾‾‾‾
@ -77,14 +77,14 @@ Message: expected either 'condition', or 'content' followed by the expected vari
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.21-11.26:
└──┐
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.11-11.20:
└──┐
11 │ context my_gaming scope GamingAuthorized
│ ‾‾‾‾‾‾‾‾‾
@ -121,14 +121,14 @@ Message: expected either 'condition', or 'content' followed by the expected vari
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.21-11.26:
└──┐
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.11-11.20:
└──┐
11 │ context my_gaming scope GamingAuthorized
│ ‾‾‾‾‾‾‾‾‾
@ -167,14 +167,14 @@ Message: expected either 'condition', or 'content' followed by the expected vari
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.21-11.26:
└──┐
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.11-11.20:
└──┐
11 │ context my_gaming scope GamingAuthorized
│ ‾‾‾‾‾‾‾‾‾

View File

@ -89,11 +89,30 @@ champ d'application CalculAidePersonnaliséeLogementLocatif
-- n'importe quel: faux) et
nombre_personnes_à_charge >= 6
conséquence égal à 5,0
# TODO juridique: demander à DGALN/DHUP si cette limitation à 6 personnes à
# charge s'applique également aux exceptions à l'article 7 que sont les
# articles 8 et 16 de l'arrêté pour les chambres et la colocation.
# Ici nous avons choisi de faire appliquer la limitation à tous les cas
# y compris les chambres et la colocation.
# Cette limitation à 6 personnes à charge s'applique également aux exceptions à
# l'article 7 que sont les articles 8 et 16 de l'arrêté pour les chambres et la
# colocation. Cependant le barème chambre ne dépend pas du nombre de personnes à
# charge donc rien à faire. Par contre dans l'article 16 il faut bien appliquer
# la limitation, ce qui est fait de la manière qu'à l'article 7 via l'emploi de
# la variable "multiplicateur_majoration_plafond_loyer_d823_16_2". Ceci nous a
# été confirmé par un mail du 21/04/2023 de DGALN/DHUP/FE4 :
# "Il convient de ne pas faire de lecture trop extensive des textes, il est en
# effet factuellement impossible de loger sept ou huit personnes dans une simple
# chambre. De plus larticle 8 de larrêté, relatif aux chambres, précise que le
# barème applicable est identique quelle que soit la taille de la famille et est
# basé sur celui applicable à une personne isolée.
# Concernant la colocation, il convient de faire une lecture groupée de larrêté
# :
# - Le 1° de larticle 46 précisait que la majoration était limitée à six
# personnes à charge et selon les termes du a) cette majoration impactait les
# loyers plafonds dont les valeurs sont fixées à larticle 7 de larrêté.
# Larticle 7 était donc applicable dans la limite de six personnes à charge
# et pas au-delà.
# - Larticle 16 qui concerne la colocation précise que les loyers plafonds
# applicables représentent 75% de ceux fixés à larticle 7.
# De fait, le plafonnement applicable à la colocation (article 16) découle de
# larticle 7 et était limité à six personnes à charge par le a) du 1° de
# larticle 46."
```
b) Les montants forfaitaires au titre des charges visés au 3° de l'article
@ -493,8 +512,10 @@ pas assujettie à l'impôt sur le revenu, le montant forfaitaire de ressources e
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
# Nous choissisons par manque de ressources (sic) de développement de laisser
# le calcul des ressources à l'utilisateur du programme qui devra suivre
# les instructions de cet article et de ceux auxquels il se réfère pour
# correctement évaluer leur montant.
```
NOTA :
@ -582,11 +603,30 @@ champ d'application CalculAidePersonnaliséeLogementLocatif
-- n'importe quel: faux) et
nombre_personnes_à_charge >= 6
conséquence égal à 5,0
# TODO juridique: demander à DGALN/DHUP si cette limitation à 6 personnes à
# charge s'applique également aux exceptions à l'article 7 que sont les
# articles 8 et 16 de l'arrêté pour les chambres et la colocation.
# Ici nous avons choisi de faire appliquer la limitation à tous les cas
# y compris les chambres et la colocation.
# Cette limitation à 6 personnes à charge s'applique également aux exceptions à
# l'article 7 que sont les articles 8 et 16 de l'arrêté pour les chambres et la
# colocation. Cependant le barème chambre ne dépend pas du nombre de personnes à
# charge donc rien à faire. Par contre dans l'article 16 il faut bien appliquer
# la limitation, ce qui est fait de la manière qu'à l'article 7 via l'emploi de
# la variable "multiplicateur_majoration_plafond_loyer_d823_16_2". Ceci nous a
# été confirmé par un mail du 21/04/2023 de DGALN/DHUP/FE4 :
# "Il convient de ne pas faire de lecture trop extensive des textes, il est en
# effet factuellement impossible de loger sept ou huit personnes dans une simple
# chambre. De plus larticle 8 de larrêté, relatif aux chambres, précise que le
# barème applicable est identique quelle que soit la taille de la famille et est
# basé sur celui applicable à une personne isolée.
# Concernant la colocation, il convient de faire une lecture groupée de larrêté
# :
# - Le 1° de larticle 46 précisait que la majoration était limitée à six
# personnes à charge et selon les termes du a) cette majoration impactait les
# loyers plafonds dont les valeurs sont fixées à larticle 7 de larrêté.
# Larticle 7 était donc applicable dans la limite de six personnes à charge
# et pas au-delà.
# - Larticle 16 qui concerne la colocation précise que les loyers plafonds
# applicables représentent 75% de ceux fixés à larticle 7.
# De fait, le plafonnement applicable à la colocation (article 16) découle de
# larticle 7 et était limité à six personnes à charge par le a) du 1° de
# larticle 46."
```
b) Les montants forfaitaires au titre des charges visés au 3° de l'article D. 823-16, au 4° des articles
@ -932,11 +972,11 @@ personnelles au logement en secteur locatif.
# Article 42 seuil de versement : valeurs identiques à partir du
# 1er janvier 2023 à celles de l'article 12 donc rien à coder.
# TODO juridique : l'article 43 parle de l'équivalence loyer en secteur
# logement-foyer mais il n'existe pas de quantité équivalente en secteur
# locatif! Comment donc appliquer la règle de prendre les valeurs du chapitre
# III pour l'application du chapitre VII dans ce cas ?
# Idem pour l'article 44 et et le montant minimal de dépense nette de loyer.
# L'article 43 parle de l'équivalence loyer en secteur
# logement-foyer mais à Saint-Pierre-et-Miquelon on calcule le secteur
# logement-foyer avec la formule du secteur locatif, ici pas besoin de prendre
# en compte. Idem pour l'article 44 et et le montant minimal de dépense nette
# de loyer.
```
NOTA : Conformément à larticle 2 de larrêté du 20 décembre 2021 (NOR : LOGL2134477A), ces dispositions sont
@ -1702,11 +1742,30 @@ champ d'application CalculAidePersonnaliséeLogementLocatif
-- n'importe quel: faux) et
nombre_personnes_à_charge >= 6
conséquence égal à 5,0
# TODO juridique: demander à DGALN/DHUP si cette limitation à 6 personnes à
# charge s'applique également aux exceptions à l'article 7 que sont les
# articles 8 et 16 de l'arrêté pour les chambres et la colocation.
# Ici nous avons choisi de faire appliquer la limitation à tous les cas
# y compris les chambres et la colocation.
# Cette limitation à 6 personnes à charge s'applique également aux exceptions à
# l'article 7 que sont les articles 8 et 16 de l'arrêté pour les chambres et la
# colocation. Cependant le barème chambre ne dépend pas du nombre de personnes à
# charge donc rien à faire. Par contre dans l'article 16 il faut bien appliquer
# la limitation, ce qui est fait de la manière qu'à l'article 7 via l'emploi de
# la variable "multiplicateur_majoration_plafond_loyer_d823_16_2". Ceci nous a
# été confirmé par un mail du 21/04/2023 de DGALN/DHUP/FE4 :
# "Il convient de ne pas faire de lecture trop extensive des textes, il est en
# effet factuellement impossible de loger sept ou huit personnes dans une simple
# chambre. De plus larticle 8 de larrêté, relatif aux chambres, précise que le
# barème applicable est identique quelle que soit la taille de la famille et est
# basé sur celui applicable à une personne isolée.
# Concernant la colocation, il convient de faire une lecture groupée de larrêté
# :
# - Le 1° de larticle 46 précisait que la majoration était limitée à six
# personnes à charge et selon les termes du a) cette majoration impactait les
# loyers plafonds dont les valeurs sont fixées à larticle 7 de larrêté.
# Larticle 7 était donc applicable dans la limite de six personnes à charge
# et pas au-delà.
# - Larticle 16 qui concerne la colocation précise que les loyers plafonds
# applicables représentent 75% de ceux fixés à larticle 7.
# De fait, le plafonnement applicable à la colocation (article 16) découle de
# larticle 7 et était limité à six personnes à charge par le a) du 1° de
# larticle 46."
```
b) Les montants forfaitaires au titre des charges visés au 3° de l'article D. 823-16, au 4° des articles
@ -1818,7 +1877,17 @@ pour un ménage ayant un enfant à charge, est remplacée par " 7 584 euros " ;
```catala
champ d'application CalculAidePersonnaliséeLogementLocatif
sous condition date_courante >= |2021-10-01| et date_courante < |2022-01-01|:
exception métropole
# Normalement la règle suivante aurait du être une exception à l'étiquette
# "métropole".Cependant, la version de l'article 47 de l'arrêté du 27
# septembre 2019 en vigueur du 1er janvier 2021 au 31 décembre 2021 prévoit
# également dans le cas de l'outre-mer un remplacement du tableau des valeurs
# de R0 de l'article 15. Cependant pour faire exister cette règle plus précise
# valable uniquement fin 2021, nous la codons ici comme une exception au
# tableau de l'article 47 afin d'éviter le conflit entre deux règles qui
# s'activent en même temps.
# TODO juridique: savoir pourquoi ces deux règles qui entrent en conflit sur
# la valeur de R0 dans ce cas: 6990 € ou 7584 € ?
exception article_47
définition abattement_forfaitaire_d823_17
sous condition
(selon résidence sous forme
@ -2414,7 +2483,7 @@ champ d'application CalculAidePersonnaliséeLogementLocatif
Composition du foyer Montant
-------------------------------- -------
Bénéficiaire isolé 26,99
Couple sans personne à charge 53,99
Couple sans personne à charge 53,99
Majoration par personne à charge 12,24
```catala
@ -2772,11 +2841,30 @@ champ d'application CalculAidePersonnaliséeLogementLocatif
-- n'importe quel: faux) et
nombre_personnes_à_charge >= 6
conséquence égal à 5,0
# TODO juridique: demander à DGALN/DHUP si cette limitation à 6 personnes à
# charge s'applique également aux exceptions à l'article 7 que sont les
# articles 8 et 16 de l'arrêté pour les chambres et la colocation.
# Ici nous avons choisi de faire appliquer la limitation à tous les cas
# y compris les chambres et la colocation.
# Cette limitation à 6 personnes à charge s'applique également aux exceptions à
# l'article 7 que sont les articles 8 et 16 de l'arrêté pour les chambres et la
# colocation. Cependant le barème chambre ne dépend pas du nombre de personnes à
# charge donc rien à faire. Par contre dans l'article 16 il faut bien appliquer
# la limitation, ce qui est fait de la manière qu'à l'article 7 via l'emploi de
# la variable "multiplicateur_majoration_plafond_loyer_d823_16_2". Ceci nous a
# été confirmé par un mail du 21/04/2023 de DGALN/DHUP/FE4 :
# "Il convient de ne pas faire de lecture trop extensive des textes, il est en
# effet factuellement impossible de loger sept ou huit personnes dans une simple
# chambre. De plus larticle 8 de larrêté, relatif aux chambres, précise que le
# barème applicable est identique quelle que soit la taille de la famille et est
# basé sur celui applicable à une personne isolée.
# Concernant la colocation, il convient de faire une lecture groupée de larrêté
# :
# - Le 1° de larticle 46 précisait que la majoration était limitée à six
# personnes à charge et selon les termes du a) cette majoration impactait les
# loyers plafonds dont les valeurs sont fixées à larticle 7 de larrêté.
# Larticle 7 était donc applicable dans la limite de six personnes à charge
# et pas au-delà.
# - Larticle 16 qui concerne la colocation précise que les loyers plafonds
# applicables représentent 75% de ceux fixés à larticle 7.
# De fait, le plafonnement applicable à la colocation (article 16) découle de
# larticle 7 et était limité à six personnes à charge par le a) du 1° de
# larticle 46."
```
b) Les montants forfaitaires au titre des charges visés au 3° de l'article D. 823-16, au 4° des
@ -2888,7 +2976,17 @@ code, pour un ménage ayant un enfant à charge, est remplacée par " 7 584 euro
```catala
champ d'application CalculAidePersonnaliséeLogementLocatif
sous condition date_courante >= |2020-10-01| et date_courante < |2021-10-01|:
exception métropole
# Normalement la règle suivante aurait du être une exception à l'étiquette
# "métropole". Cependant, la version de l'article 47 de l'arrêté du 27
# septembre 2019 en vigueur du 1er janvier 2020 au 31 décembre 2020 prévoit
# également dans le cas de l'outre-mer un remplacement du tableau des valeurs
# de R0 de l'article 15. Cependant pour faire exister cette règle plus précise valable
# uniquement fin 2020, nous la codons ici comme une exception au tableau de
# l'article 47 afin d'éviter le conflit entre deux règles qui s'activent en
# même temps.
# TODO juridique: savoir pourquoi ces deux règles qui entrent en conflit sur
# la valeur de R0 dans ce cas: 6396 € ou 7584 €?
exception article_47
définition abattement_forfaitaire_d823_17
sous condition
(selon résidence sous forme
@ -3050,6 +3148,7 @@ champ d'application CalculAllocationLogementAccessionPropriété
visé au 3° de l'article D. 823-17 du même code, sont remplacées par les valeurs suivantes :
VALEURS DE TF
Bénéficiaires TF
--------------------------------- -----
Isolé 2,81%
@ -3109,6 +3208,11 @@ assujettie à l'impôt sur le revenu, le montant minimal de ressources est fixé
location et à 4 900 euros pour la résidence en logement-foyer.
```catala
# Nous choissisons par manque de ressources (sic) de développement de laisser
# le calcul des ressources à l'utilisateur du programme qui devra suivre
# les instructions de cet article et de ceux auxquels il se réfère pour
# correctement évaluer leur montant.
#
# Modifications non subsantielles mais qui peuvent améliorer la compréhension et
# la précision des dispositions par rapport à la version initiale.
# TODO informatique et juridique: traduire cet article qui vient définir
@ -3179,6 +3283,7 @@ Personne seule ou couple ayant :
```catala
champ d'application CalculAidePersonnaliséeLogementLocatif
sous condition date_courante >= |2021-01-01| et date_courante < |2022-01-01|:
étiquette article_47
exception métropole
définition abattement_forfaitaire_d823_17 sous condition
selon résidence sous forme
@ -3307,11 +3412,30 @@ champ d'application CalculAidePersonnaliséeLogementLocatif
-- n'importe quel: faux) et
nombre_personnes_à_charge >= 6
conséquence égal à 5,0
# TODO juridique: demander à DGALN/DHUP si cette limitation à 6 personnes à
# charge s'applique également aux exceptions à l'article 7 que sont les
# articles 8 et 16 de l'arrêté pour les chambres et la colocation.
# Ici nous avons choisi de faire appliquer la limitation à tous les cas
# y compris les chambres et la colocation.
# Cette limitation à 6 personnes à charge s'applique également aux exceptions à
# l'article 7 que sont les articles 8 et 16 de l'arrêté pour les chambres et la
# colocation. Cependant le barème chambre ne dépend pas du nombre de personnes à
# charge donc rien à faire. Par contre dans l'article 16 il faut bien appliquer
# la limitation, ce qui est fait de la manière qu'à l'article 7 via l'emploi de
# la variable "multiplicateur_majoration_plafond_loyer_d823_16_2". Ceci nous a
# été confirmé par un mail du 21/04/2023 de DGALN/DHUP/FE4 :
# "Il convient de ne pas faire de lecture trop extensive des textes, il est en
# effet factuellement impossible de loger sept ou huit personnes dans une simple
# chambre. De plus larticle 8 de larrêté, relatif aux chambres, précise que le
# barème applicable est identique quelle que soit la taille de la famille et est
# basé sur celui applicable à une personne isolée.
# Concernant la colocation, il convient de faire une lecture groupée de larrêté
# :
# - Le 1° de larticle 46 précisait que la majoration était limitée à six
# personnes à charge et selon les termes du a) cette majoration impactait les
# loyers plafonds dont les valeurs sont fixées à larticle 7 de larrêté.
# Larticle 7 était donc applicable dans la limite de six personnes à charge
# et pas au-delà.
# - Larticle 16 qui concerne la colocation précise que les loyers plafonds
# applicables représentent 75% de ceux fixés à larticle 7.
# De fait, le plafonnement applicable à la colocation (article 16) découle de
# larticle 7 et était limité à six personnes à charge par le a) du 1° de
# larticle 46."
```
b) Les montants forfaitaires au titre des charges visés au 3° de l'article D. 823-16, au
@ -3586,6 +3710,7 @@ champ d'application CalculAllocationLogementAccessionPropriété
visé au 3° de l'article D. 823-17 du même code, sont remplacées par les valeurs suivantes :
VALEURS DE TF
Bénéficiaires TF
----------------------------------- -----
Isolé 2,81%
@ -3600,7 +3725,7 @@ Couple sans enfant 2,99%
```catala
champ d'application CalculAidePersonnaliséeLogementLocatif
sous condition date_courante >= |2020-10-01| et date_courante < |2021-10-01|:
sous condition date_courante >= |2020-01-01| et date_courante < |2020-10-01|:
exception base définition taux_composition_familiale sous condition
(selon résidence sous forme
-- Guadeloupe: vrai
@ -3657,11 +3782,15 @@ selon la formule suivante :
" R0 (Mayotte) N = R0 (Mayotte) N-1 + R0 (DOM) N-1 - R0 (Mayotte) N-1 / 2022 - (N - 1) "
dans laquelle :
- " N " est l'année d'augmentation.
- " R0 (Mayotte) N " est le forfait applicable à Mayotte pour un type de ménage donné en année
" N " avant revalorisation éventuelle.
- " R0 (Mayotte) N-1 " est le forfait applicable à Mayotte pour ce même type de ménage à la veille
de l'augmentation.
- " R0 (DOM) N-1 " est le forfait applicable en Guadeloupe, en Guyane, en Martinique, à La Réunion,
à Saint-Barthélemy et à Saint-Martin à la veille de l'augmentation.
@ -3688,6 +3817,7 @@ dispositions sont applicables pour les prestations dues à compter du 1er janvie
```catala
champ d'application CalculAidePersonnaliséeLogementLocatif
sous condition date_courante >= |2020-01-01| et date_courante < |2021-01-01|:
étiquette article_47
exception métropole
définition abattement_forfaitaire_d823_17 sous condition
selon résidence sous forme
@ -3697,8 +3827,8 @@ champ d'application CalculAidePersonnaliséeLogementLocatif
-- Mayotte: vrai
-- SaintBarthélemy: vrai
-- SaintMartin: vrai
# TODO juridique: vérifier qu'au 1er octobre 2021 cet article ne
# s'appliquait pas à Saint-Pierre et Miquelon
# Au 1er octobre 2021 cet article ne s'appliquait pas à Saint-Pierre et
# Miquelon car il n'y avait pas d'APL à Saint-Pierre et Miquelon cette date.
-- n'importe quel: faux
conséquence égal à
si nombre_personnes_à_charge = 0 alors

View File

@ -4498,7 +4498,16 @@ Majoration par personne à charge supplémentaire -0,06 %
# Ici bizarrerie, à la ligne pour 7 personnes on a un TF plus grand que la
# ligne à 6 personnes alors que partout ailleurs on a une décroissance.
# Cette bizarrerie a été introduite avec la dernière version de l'arrêté de 2019
# (arrêté du 26 décembre 2022).
# (arrêté du 26 décembre 2022). Une justification nous en a été donnée par
# DGALN/DHUP/FE4 dans un mail en date du 21/04/2023 :
# "Le calcul du TF est plus avantageux en outre-mer par rapport à la métropole.
# Si la limite de 6 enfants a été supprimée, le barème applicable à loutre-mer
# na pas été modifié pour les six premiers enfants. Par contre, à compter du
# 7ème enfant à charge, le barème applicable est identique à celui applicable en
# métropole (voir larticle 14 de larrêté : TF pour 6 personnes à charge de
# 1,73%, majoration par personne supplémentaire : -0,06% - TF applicable pour 7
# personnes à charge : 1,73 0,06 = 1,67%). Il ne sagit donc pas dun
# incohérence numérique mais dun alignement avec le barème métropolitain."
# Ici nous modifions le champ d'application
# "CalculAidePersonnaliséeLogementLocatif" au lieu de

View File

@ -346,10 +346,12 @@ issues de l'article 2 du présent décret, pour les ménages bénéficiaires des
logement à Saint-Pierre-et-Miquelon mentionnées à cet article, le montant mensuel de l'aide due au
titre du mois de janvier 2022 jusqu'au mois de décembre 2025 est calculé selon la formule suivante :
ALspm = ALt × (1 (2026-n) / 8)
ALspm = ALt × (1 - (2026-n) / 8)
```catala
# TODO juridique: pourquoi le "1" dans la formule ? Ça ne sert à rien.
# Attention, la formule initiale était fausse (manque un "-" après le "1"),
# rectifié par https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000044807163 et
# c'est la version rectifiée que nous prenons en compte.
```
Dans laquelle :
@ -364,15 +366,156 @@ code précité, le cas échéant adaptées selon les dispositions de l'article 2
peuvent être modifiées par décret.
```catala
# D'après L860-3 CCH, les habitants de Saint-Pierre et Miquelon n'ont
# droit qu'à l'allocation logement et pas à l'aide au logement. Donc on
# ne modifie que le champ d'application CalculAllocationLogement.
champ d'application CalculAllocationLogement:
exception définition aide_finale_formule sous condition
déclaration montée_en_charge_saint_pierre_miquelon contenu argent dépend de
aide_finale contenu argent,
résidence contenu Collectivité,
date_courante contenu date
égal à
si
résidence sous forme SaintPierreEtMiquelon et
date_courante >= |2022-01-01| et
date_courante <= |2025-12-31|
conséquence égal à
sous_calcul_traitement.aide_finale_formule *
(décimal de (2026 - accès_année de date_courante) / 8,0)
alors
aide_finale * (1,0 -
(décimal de (2026 - accès_année de date_courante) / 8,0))
sinon
aide_finale
# D'après L860-3 CCH, les habitants de Saint-Pierre et Miquelon n'ont
# droit qu'à l'allocation logement et pas à l'aide au logement. Donc on
# ne modifie que les champs d'applications relatifs à l'allocation logement,
# dans les trois secteurs. À l'exception du secteur locatif où le calcul de
# l'allocation logement passe par le barème de l'aide personnalisée au logement,
# et où il faut donc modifier le champ d'application afférent.
champ d'application CalculAidePersonnaliséeLogementLocatif:
définition traitement_aide_finale de aide_finale
état montée_en_charge_saint_pierre_miquelon
égal à
soit aide_finale égal à traitement_aide_finale de aide_finale dans
montée_en_charge_saint_pierre_miquelon de
aide_finale, résidence, date_courante
champ d'application CalculAllocationLogementFoyer:
définition traitement_aide_finale de aide_finale
état montée_en_charge_saint_pierre_miquelon
égal à
soit aide_finale égal à traitement_aide_finale de aide_finale dans
montée_en_charge_saint_pierre_miquelon de
aide_finale, résidence, date_courante
champ d'application CalculAllocationLogementAccessionPropriété:
définition traitement_aide_finale de aide_finale
état montée_en_charge_saint_pierre_miquelon
égal à
soit aide_finale égal à traitement_aide_finale de aide_finale dans
montée_en_charge_saint_pierre_miquelon de
aide_finale, résidence, date_courante
```
# Code général des collectivités territoriales
## Partie législative
### Sixième partie : collectivités d'outre-mer régies par l'article 74 de la constitution
#### Livre IV : Saint-Pierre-et-Miquelon
##### Titre Ier : Dispositions générales
###### Chapitre IV : Compétences
####### Article LO6414-1 | LEGIARTI000006394300
I. La collectivité exerce les compétences dévolues par les lois et
règlements en vigueur aux départements et aux régions, à l'exception de celles
relatives :
1° A la construction et à l'entretien général et technique ainsi qu'au
fonctionnement des collèges et des lycées, à l'accueil, à la restauration et à
l'hébergement dans ces établissements, au recrutement et à la gestion des
personnels techniciens et ouvriers de service exerçant ces missions dans les
collèges et les lycées ;
2° A la construction, à l'aménagement, à l'entretien et à la gestion de la
voirie classée en route nationale ;
3° A la lutte contre les maladies vectorielles ;
4° A la police de la circulation sur le domaine de la collectivité ;
5° Aux bibliothèques régionales et bibliothèques de prêt départementales ;
6° Au financement des moyens des services d'incendie et de secours.
II. La collectivité fixe les règles applicables dans les matières suivantes
:
1° Impôts, droits et taxes ; cadastre ;
```catala
# Ceci signifie que la collectivité de Saint-Pierre-et-Miquelon fixe les
# règles d'imposition des aides au logement. En l'occurrence, elle choisit
# de ne pas l'imposer avec un équivalent de la CRDS. Information confirmée par
# mail de DGALN/DHUP/FE4 du 21/04/2023: "Jattire toutefois votre attention
# sur le fait que la CRDS ne sapplique pas à Saint-Pierre-et-Miquelon."
# En ce qui concerne Saint-Barthélémy et Saint-Martin, les collectivités
# exercent une compétence en matière dimpôts (respectivement article LO 6214-3
# du CGCT I° 1 et article LO 6314-3 du CGCT I° 1) “sans préjudice des règles
# fixées par lEtat, pour Saint-Barthélemy, en matière de cotisations sociales
# et des autres prélèvements destinés au financement de la protection sociale et
# à lamortissement de la dette sociale.” (respectivement article LO 6214-4 du
# CGCT III et article LO 6314-4 du CGCT III). La CRDS sapplique donc bien à
# Saint-Martin et Saint-Barthélémy, pas besoin de coder d'exception pour ces
# territoires.
champ d'application ContributionsSocialesAidesPersonnelleLogement:
exception définition montant de aide_finale sous condition
date_courante >= |2007-02-22| et
lieu sous forme SaintPierreEtMiquelon
conséquence égal à 0 €
```
2° Régime douanier, à l'exclusion des prohibitions à l'importation et à
l'exportation qui relèvent de l'ordre public et des engagements internationaux
de la France et des règles relatives à la recherche, à la constatation des
infractions pénales et à la procédure contentieuse ;
3° Urbanisme ; construction ; habitation ; logement ;
4° Création et organisation des services et des établissements publics de la
collectivité.
Par dérogation au 3°, les autorités de l'Etat délivrent, dans le cadre de la
réglementation applicable à Saint-Pierre-et-Miquelon et après avis du conseil
exécutif, les autorisations ou actes relatifs à l'utilisation et à
l'occupation du sol concernant les constructions, installations ou travaux
réalisés pour le compte de l'Etat et ses établissements publics.
III. Dans les conditions prévues à l'article LO 6461-3 , la collectivité peut
édicter des peines contraventionnelles destinées à réprimer les infractions
pénales aux règles qu'elle édicte dans les matières mentionnées au II.
IV. Dans les conditions prévues à l'article LO 6461-5 , la collectivité peut
adapter les lois et règlements en vigueur localement.
V. 1. Une convention entre l'Etat et la collectivité détermine, aux fins
notamment d'éviter les doubles impositions et de prévenir l'évasion fiscale,
les obligations de la collectivité en matière de communication d'informations
à des fins fiscales. La collectivité transmet à l'Etat toute information utile
pour l'application de sa réglementation relative aux impôts, droits et taxes,
ainsi que pour l'exécution des clauses d'échange de renseignements prévues par
les conventions fiscales conclues par la France avec d'autres Etats ou
territoires.
2. Sans préjudice de l'exercice par la collectivité de sa compétence en
matière d'impôts, droits et taxes, l'Etat peut instituer des taxes
destinées à être perçues à l'occasion de l'exercice des missions d'intérêt
général qui lui incombent dans le cadre de ses compétences.
Une convention conclue entre l'Etat et la collectivité précise les modalités
d'application du présent 2 afin de déterminer les modalités de recouvrement et
de gestion des recettes destinées au financement de la sécurité aérienne.
VI. La réglementation particulière à Saint-Pierre-et-Miquelon relative au
contrôle sanitaire, vétérinaire et phytosanitaire et au fonctionnement des
stations de quarantaine animale ne peut être modifiée qu'après avis du conseil
territorial.

View File

@ -702,7 +702,7 @@ des conventions régies par le chapitre III du titre V du livre III ;
```catala
champ d'application ÉligibilitéAidePersonnaliséeLogement:
étiquette l831_1_alinea_5
étiquette logement_foyer
règle condition_logement_bailleur sous condition
selon ménage.logement.mode_occupation sous forme
-- RésidentLogementFoyer de location:
@ -927,9 +927,6 @@ champ d'application ÉligibilitéAllocationLogement:
-- date_de_naissance: enfant.date_de_naissance
-- 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
@ -954,9 +951,6 @@ champ d'application ÉligibilitéAllocationLogement:
-- date_de_naissance: enfant.date_de_naissance
-- 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
@ -1142,7 +1136,6 @@ soins de longue durée mentionnés au 3° de l'article L. 162-22 du code de la s
```catala
champ d'application ÉligibilitéAllocationLogement:
exception accession_propriété
# Nous considérons que L841-3 est une exception à L841-4 et non pas à
# L841-2 (cas de base) car si L841-3 et L84164 étaient tous deux exceptions
# de L841-2, alors il pourrait y avoir conflit entre ces deux exceptions.
@ -1151,6 +1144,17 @@ champ d'application ÉligibilitéAllocationLogement:
# de soin longue durée avec un prêt aidé par l'État.
# Donc ici plutôt que d'écrire un invariant qui exclut ce cas de figure,
# on préfère hiérarchiser entre elles les exceptions pour lever le conflit.
# Idem avec l'exception prévue par L861-8. Nous écrivons donc l'assertion
# ci-dessous pour matérialiser l'impossibilité de se retrouver dans ces
# situations.
assertion non (
demandeur.personne_hébergée_centre_soin_l_L162_22_3_sécurité_sociale et
(ménage.logement.mode_occupation sous forme
AccessionPropriétéLocalUsageExclusifHabitation ou
demandeur.
magistrat_fonctionnaire_centre_intérêts_matériels_familiaux_hors_mayotte))
exception base
définition éligibilité état l841_2 sous condition
demandeur.personne_hébergée_centre_soin_l_L162_22_3_sécurité_sociale
conséquence égal à
@ -1388,7 +1392,7 @@ champ d'application ÉligibilitéAidePersonnaliséeLogement sous condition
-- LaRéunion: vrai
-- Mayotte: vrai
-- n'importe quel: faux):
exception l831_1_alinea_5
étiquette logement_foyer
règle condition_logement_bailleur sous condition
selon ménage.logement.mode_occupation sous forme
-- RésidentLogementFoyer de location:
@ -1419,9 +1423,9 @@ champ d'application ÉligibilitéAllocationLogement sous condition
-- Mayotte: vrai
-- n'importe quel: faux):
règle l_841_1_1_applicable non rempli
règle l_841_1_2_applicable non rempli
règle l_841_1_6_applicable non rempli
exception règle l_841_1_1_applicable non rempli
exception règle l_841_1_2_applicable non rempli
exception règle l_841_1_6_applicable non rempli
# Nous désactivons seulement les 1°, 2° et 6° sans faire la renumérotation
# qui semble ne concerner que les b) et c) suivants (à prendre en compte
# dans le code correspondant).
@ -1469,9 +1473,6 @@ champ d'application ÉligibilitéAllocationLogement sous condition
-- date_de_naissance: enfant.date_de_naissance
-- 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
@ -1480,7 +1481,7 @@ champ d'application ÉligibilitéAllocationLogement sous condition
" 5° Aux personnes mentionnées aux articles L. 781-8 et L. 781-46 du code rural
et de la pêche maritime ;
```catala
```catala règle l_841_1_6_applicable
# Les personnes mentionnées aux articles L. 781-8 et L. 781-46 du code rural
# et de la pêche maritime sont les non-salariés agricoles.
champ d'application ÉligibilitéAllocationLogement sous condition
@ -1726,9 +1727,9 @@ champ d'application ÉligibilitéAllocationLogement sous condition
-- SaintMartin: vrai
-- n'importe quel: faux):
règle l_841_1_1_applicable non rempli
règle l_841_1_2_applicable non rempli
règle l_841_1_6_applicable non rempli
exception règle l_841_1_1_applicable non rempli
exception règle l_841_1_2_applicable non rempli
exception règle l_841_1_6_applicable non rempli
# Nous désactivons seulement les 1°, 2° et 6° sans faire la renumérotation
# qui semble ne concerner que les b) et c) suivants (à prendre en compte
# dans le code correspondant).
@ -1761,9 +1762,6 @@ champ d'application ÉligibilitéAllocationLogement sous condition
-- date_de_naissance: enfant.date_de_naissance
-- 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

View File

@ -1143,9 +1143,6 @@ champ d'application ÉligibilitéAidesPersonnelleLogement:
-- date_de_naissance: enfant.date_de_naissance
-- 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
}
-- AutrePersonneÀCharge de parent: faux
conséquence rempli
@ -1479,7 +1476,10 @@ champ d'application CalculAidePersonnaliséeLogement:
résultat de CalculAidePersonnaliséeLogementFoyer avec {
-- ressources_ménage_arrondies: ressources_ménage
-- nombre_personnes_à_charge: nombre_personnes_à_charge
-- logement_foyer_jeunes_travailleurs:
logement_foyer_.logement_foyer_jeunes_travailleurs
-- zone: zone
-- résidence: résidence
-- date_courante: date_courante
-- situation_familiale_calcul_apl: situation_familiale_calcul_apl
-- redevance: logement_foyer_.redevance
@ -1512,6 +1512,7 @@ champ d'application CalculAidePersonnaliséeLogement:
-- situation_r822_11_13_17: propriétaire.situation_r822_11_13_17
-- type_prêt: propriétaire.prêt.type_prêt
-- ancienneté_logement: propriétaire.ancienneté_logement
-- résidence: résidence
}
dans Traitement_formule_aide_finale {
-- aide_finale_formule:
@ -1569,6 +1570,8 @@ champ d'application CalculAllocationLogement:
-- zone: zone
-- date_courante: date_courante
-- situation_familiale_calcul_apl: situation_familiale_calcul_apl
-- logement_foyer_jeunes_travailleurs:
logement_foyer_.logement_foyer_jeunes_travailleurs
-- redevance: logement_foyer_.redevance
-- catégorie_équivalence_loyer_d842_16:
logement_foyer_.catégorie_équivalence_loyer_d842_16
@ -3154,7 +3157,7 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété:
sinon aide_finale
```
####### Article D832-11 | LEGIARTI000038878744
####### Article D832-11 | LEGIARTI000047401383
Le coefficient " K ", mentionné au 2° de l'article D. 832-10, est ainsi calculé selon la formule
et les modalités suivantes :
@ -3187,31 +3190,9 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété:
coefficient_prise_en_charge_d832_10
```
2° " R " représente la limite supérieure de l'intervalle dans lequel se situent les ressources
du ménage, appréciées conformément aux dispositions de la section 2 du chapitre II du titre
II du présent livre et arrondies à la centaine d'euros supérieure ;
```catala
# Pourquoi nous parle-t-on de limite supérieure d'intervalle ici ?
# Il n'y a aucun intervalle de ressources définis à la section 2 du chapitre
# II du présent livre. Est-ce que c'est juste redondant avec l'arrondi à la
# centaine d'euros supérieure (intervalles de 100 €) ?
# Réponse de DGALN/DHUP/FE4 le 25/05/2022:
# "Lintervalle correspond bien à larrondi de lassiette ressources à la
# centaine deuros supérieure. La rédaction, issue de la recodification,
# est en effet une reprise peut-être maladroite et perfectible de lancien
# article (avant recodification, abrogé depuis) R. 351-19 qui est plus clair
# sur cette notion dintervalle :
# « Le coefficient K, au plus égal à 0,95, est déterminé pour chaque
# intervalle de ressources de 100 euros en appliquant la formule suivante :
# K = 0,95-R/ CM x N
# dans laquelle :
# R représente la limite supérieure de l'intervalle dans lequel se situent
# les ressources appréciées conformément à l'article R. 351-5 ; […] »
# La manière dont nous interprétons cette réponse est la suivante : toutes
# ces circonvolutions autour des limites supérieures des tranches reviennent
# bien à faire un arrondi à la centaine d'euros supérieure.
```
2° " R " représente les ressources du ménage, appréciées conformément aux
dispositions de la section 2 du chapitre II du titre II du présent livre et
arrondies à la centaine d'euros supérieure ;
3° " cm " est un coefficient multiplicateur fixé par arrêté ;
@ -3348,51 +3329,21 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété:
sinon plafond_signature
```
####### Article D832-15 | LEGIARTI000039621211
####### Article D832-15 | LEGIARTI000047401375
La mensualité minimale " L0 ", mentionnée au 5° de l'article D. 832-10 est calculée :
1° Pour les logements construits, agrandis, aménagés à partir de locaux non destinés
à l'habitation, acquis et améliorés, occupés par leur propriétaire ou par l'accédant
titulaire d'un contrat de location-accession, par l'application de pourcentages à des
tranches de ressources dont les limites inférieures et supérieures sont multipliées
par le nombre de parts " N " défini au 4° de l'article D. 832-11. Ce résultat est
divisé par douze. Les pourcentages et les tranches sont fixés par arrêté selon la
date de signature du contrat de prêt ou de location-accession. Les ressources sont
appréciées selon les modalités prévues à la section 2 du chapitre II du titre II du
présent livre et arrondies à la centaine d'euros supérieure. Les pourcentages et le
coefficient " N " sont appliqués à la limite supérieure de l'intervalle dans lequel
se situent les ressources ;
1° Pour les logements construits, agrandis, aménagés à partir de locaux non
destinés à l'habitation, acquis et améliorés, occupés par leur propriétaire ou
par l'accédant titulaire d'un contrat de location-accession, par l'application
de pourcentages à des tranches de ressources, dont les limites inférieures et
supérieures initiales sont multipliées par le nombre de parts “ N ” défini au
4° de l'article D. 832-11, dans la limite des ressources du ménage “ R ”
définies au 2° de l'article D. 832-11. Ce résultat est divisé par douze.
Les pourcentages et les limites initiales des tranches sont fixés par arrêté
selon la date de signature du contrat de prêt ou de location-accession.
```catala
# Que veut dire la phrase "Les pourcentages
# et le coefficient " N " sont appliqués à la limite supérieure de
# l'intervalle dans lequel se situent les ressources" ? Parce que pour la
# tranche la plus haute il n'y a pas de limite supérieure, donc qu'est-ce
# qu'on fait ? Est-ce qu'on prend comme revenu la limite supérieure de
# la tranche sauf pour la dernière ? Ambiguité.
# Réponse de DGALN/DHUP/FE4 le 25/05/2022:
# "Comme pour le D. 832-11, lintervalle fait référence à larrondi de R à la
# centaine deuros supérieure (sinon cela naurait effectivement pas de sens
# pour la dernière tranche).
# La précision de la notion dintervalle apparaissait dans les articles avant
# recodification :
# - ex R. 351-21 (pour le D. 832-15)
# « […] Le loyer minimum L0 est déterminé pour chaque intervalle de ressources
# de 100 euros mentionné à l'article R. 351-19. Les pourcentages et le
# coefficient N prévus au premier alinéa du présent article sont appliqués
# à la limite supérieure de l'intervalle dans lequel se situent les
# ressources appréciées conformément à l'article R. 351-5. »
# - ex R. 351-62 (pour le D. 832-26)
# « […] L'équivalence de loyer et de charges minima est déterminée pour chaque
# intervalle de ressources de 100 euros mentionné à l'article R. 351-61.
# Les pourcentages et le coefficient N prévus au premier alinéa du présent
# article sont appliqués à la limite supérieure de l'intervalle dans lequel
# se situent les ressources appréciées conformément à l'article R. 351-5. »"
# La manière dont nous interprétons cette réponse est la suivante : toutes
# ces circonvolutions autour des limites supérieures des tranches reviennent
# bien à faire un arrondi à la centaine d'euros supérieure.
champ d'application CalculAidePersonnaliséeLogementAccessionPropriété:
définition mensualité_minimale sous condition
type_travaux_logement sous forme TravauxPourAcquisitionD832_15_1 ou
@ -3572,7 +3523,7 @@ champ d'application CalculAidePersonnaliséeLogementAccessionPropriété:
Les arrêtés mentionnés dans la présente section sont pris par les ministres chargés du
logement, du budget, de la sécurité sociale et de l'agriculture.
832-26
Le zonage géographique est fixé par arrêté des ministres chargés du logement et du budget.
```catala
@ -3601,14 +3552,26 @@ travailleurs migrants et ayant fait l'objet d'une convention, prévue à l'artic
signée avant le 1er janvier 1995.
```catala-metadata
# Cette typologie vient restreindre la typologie de logements-foyer permettant
# d'ouvrir droit aux aides au logement.
déclaration énumération TypeLogementFoyer:
-- LogementPersonnesÂgéesOuHandicapées
-- RésidenceSociale
-- FoyerJeunesTrvailleursOuMigrantsConventionnéL353_2Avant1995
-- Autre # TODO juridique: confirmer la présence de ce variant autre
# qui correspond aux logement mentionnés au R832-21, bien que
# la formulation de R832-20 semble impliquer que seuls les 3
# variants du dessus existent.
-- FoyerJeunesTravailleursOuMigrantsConventionnéL353_2Avant1995
-- Autre
# Afin de coder cette restriction nous allons définir une exception négative
# à "condition_logement_bailleur" dans le champ d'application
# "ÉligibilitéAidePersonnaliséeLogement" qui assurera que les logements-foyer
# "Autre" soient bien exclus de l'éligibilité à l'APL.
champ d'application ÉligibilitéAidePersonnaliséeLogement:
exception logement_foyer
règle condition_logement_bailleur sous condition
selon ménage.logement.mode_occupation sous forme
-- RésidentLogementFoyer de logement_foyer:
logement_foyer.type sous forme TypeLogementFoyer.Autre
-- n'importe quel: faux
conséquence non rempli
```
######## Article R832-21 | LEGIARTI000039048891
@ -3661,6 +3624,7 @@ remplacée par la convention prévue au III de l'article R. 353-159 .
```catala
champ d'application ÉligibilitéAidePersonnaliséeLogement:
étiquette logement_foyer
règle condition_logement_bailleur sous condition
selon ménage.logement.mode_occupation sous forme
-- RésidentLogementFoyer de logement_foyer:
@ -3807,7 +3771,7 @@ champ d'application CalculAidePersonnaliséeLogementFoyer:
alors 0 € sinon aide_finale
```
######## Article D832-25 | LEGIARTI000038878710
######## Article D832-25 | LEGIARTI000047401364
Le coefficient " K ", défini au 2° de l'article D. 832-24, est calculé selon la formule et
les modalités précisées au 1° du présent article.
@ -3820,9 +3784,9 @@ selon la formule et les modalités précisées au 2° du présent article.
```catala
champ d'application CalculAidePersonnaliséeLogementFoyer:
définition condition_2_du_832_25 égal à
(logement_foyer_jeunes_travailleurs et
date_conventionnement >= |1990-09-30|) ou
selon type_logement_foyer sous forme
-- FoyerJeunesTrvailleursOuMigrantsConventionnéL353_2Avant1995:
date_conventionnement >= |1990-09-30|
-- RésidenceSociale:
date_conventionnement >= |1994-12-31|
-- n'importe quel: faux
@ -3863,9 +3827,9 @@ champ d'application CalculAidePersonnaliséeLogementFoyer:
coefficient_prise_en_charge_d832_25
```
b) " R " représente la limite supérieure de l'intervalle dans lequel se situent les ressources
du ménage, appréciées selon les modalités prévues à la section 2 du chapitre II du titre II du
présent livre et arrondies à la centaine d'euros supérieure ;
b) " R " représente les ressources du ménage, appréciées selon les modalités
prévues à la section 2 du chapitre II du titre II du présent livre et arrondies
à la centaine d'euros supérieure ;
c) " r " est un coefficient fixé par arrêté ;
@ -3915,6 +3879,7 @@ champ d'application CalculAidePersonnaliséeLogementFoyer:
situation_familiale_calcul_apl
définition calcul_nombre_parts.condition_2_du_832_25 égal à
condition_2_du_832_25
définition calcul_nombre_parts.date_courante égal à date_courante
définition n_nombre_parts_d832_25 égal à
calcul_nombre_parts.n_nombre_parts_d832_25
@ -3957,9 +3922,9 @@ champ d'application CalculAidePersonnaliséeLogementFoyer:
coefficient_prise_en_charge_d832_25
```
b) " R " représente la limite supérieure de l'intervalle dans lequel se situent les
ressources du ménage, appréciées selon les modalités prévues à la section 2 du
chapitre II du titre II du présent livre et arrondies à la centaine d'euros supérieure ;
b) " R " représente les ressources du ménage, appréciées selon les modalités
prévues à la section 2 du chapitre II du titre II du présent livre et arrondies
à la centaine d'euros supérieure ;
c) " cm " est un coefficient multiplicateur fixé par arrêté ;
@ -4002,13 +3967,16 @@ champ d'application CalculNombrePartLogementFoyer:
sinon 0,0
```
######## Article D832-26 | LEGIARTI000038878708
######## Article D832-26 | LEGIARTI000047401357
L'équivalence de loyer et de charges minimale " E0 ", définie au 4° de l'article D. 832-24 ,
est obtenue par application de pourcentages à des tranches de ressources, dont les limites
inférieures et supérieures sont multipliées par le nombre de parts " N " défini au e du 1°
de l'article D. 832-25. Le résultat est majoré du produit d'un montant forfaitaire par le
nombre de parts " N ", le total étant divisé par douze.
L'équivalence de loyer et de charges minimale “ E0 ”, définie au 4° de l'article
D. 832-24, est obtenue par application de pourcentages à des tranches de
ressources, dont les limites inférieures et supérieures initiales sont
multipliées par le nombre de parts “ N ” défini au e du 1° de l'article
D. 832-25, dans la limite des ressources du ménage “ R ” définies au b du 1°
de l'article D. 832-25. Le résultat est majoré du produit d'un montant
forfaitaire par le nombre de parts “ N ”, le total étant ensuite divisé
par douze.
```catala
# Selon un mail de DGALN/DHUP/FE4 du 19/07/2022, il nest nécessaire pour le
@ -4059,11 +4027,14 @@ champ d'application CalculÉquivalenceLoyerMinimale:
/ 12,0)
```
Toutefois, pour les logements-foyers de jeunes travailleurs et pour les résidences sociales
mentionnés au deuxième alinéa de l'article D. 832-25, " E0 " est obtenue par application de
pourcentages à des tranches de ressources dont les limites inférieures et supérieures sont
multipliées par le nombre de parts " N " défini au d du 2° de l'article D. 832-25. Le résultat
est majoré d'un montant forfaitaire, le total étant alors divisé par douze.
Toutefois, pour les logements-foyers de jeunes travailleurs et pour les
résidences sociales mentionnés au deuxième alinéa de l'article D. 832-25,
“ E0 ” est obtenue par application de pourcentages à des tranches de ressources,
dont les limites inférieures et supérieures initiales sont multipliées par le
nombre de parts “ N ” défini au d du 2° de l'article D. 832-25, dans la limite
des ressources du ménage “ R ” définies au b du 2° de l'article D. 832-25. Le
résultat est majoré d'un montant forfaitaire, le total étant ensuite divisé par
douze.
```catala
champ d'application CalculÉquivalenceLoyerMinimale:
@ -4097,13 +4068,8 @@ champ d'application CalculÉquivalenceLoyerMinimale:
/ 12,0)
```
Les pourcentages et le coefficient " N " sont appliqués à la limite supérieure de l'intervalle
dans lequel se situent les ressources.
Les ressources sont appréciées selon les modalités prévues à la section 2 du chapitre II du
titre II du présent livre et arrondies à la centaine d'euros supérieure.
Les pourcentages, les montants forfaitaires et les bornes des tranches sont fixés par arrêté.
Les pourcentages, les montants forfaitaires et les limites initiales des
tranches sont fixés par arrêté.
######## Article D832-27 | LEGIARTI000038878706
@ -4626,7 +4592,7 @@ intéressés ;
2° Il est fait application à chaque personne ou ménage concerné du coefficient
" N " prévu au d du 2° de l'article D. 832-25 et de l'élément " C " prévu au 4°
de l'article D. 842-6 correspondant à sa situation familiale.
de l'article D. 842-6 correspondant à sa situation familiale.
Les arrêtés fixant les plafonds de mensualité mentionnés au 3° de l'article
D. 842-6 et les montants forfaitaires au titre des charges mentionnées au 4°
@ -4848,6 +4814,7 @@ champ d'application CalculAllocationLogementFoyer:
définition calcul_nombre_parts.situation_familiale_calcul_apl égal à
situation_familiale_calcul_apl
définition calcul_nombre_parts.condition_2_du_832_25 égal à vrai
définition calcul_nombre_parts.date_courante égal à date_courante
définition calcul_équivalence_loyer_minimale.n_nombre_parts_d832_25 égal à
calcul_nombre_parts.n_nombre_parts_d832_25
@ -5512,7 +5479,37 @@ champ d'application ÉligibilitéPrimeDeDéménagement sous condition
##### Section 2 : Allocations de logement
###### Article D861-8 | LEGIARTI000038878583
###### Article D861-8 | LEGIARTI000047401342
Pour leur application en Guadeloupe, en Guyane, en Martinique, à La Réunion et à Mayotte :
1° Les dispositions du troisième alinéa de l'article D. 842-11 et du 1° de l'article
D. 842-12 ne sont pas applicables aux opérations de logements évolutifs sociaux ou de
logements très sociaux, en accession à la propriété aidée par l'Etat ;
```catala
champ d'application CalculAllocationLogementAccessionPropriété sous condition
date_courante >= |2023-04-05|:
exception règle condition_d842_11_3 sous condition
(selon résidence sous forme
-- Guadeloupe: vrai
-- Guyane: vrai
-- Martinique: vrai
-- LaRéunion: vrai
-- Mayotte: vrai
-- n'importe quel: faux) et
opérations_logement_évolutifs_sociaux_accession_propriété_aidée_État
conséquence non rempli
```
2° Les arrêtés relatifs aux allocations de logement prévus aux articles D. 842-13 et
D. 842-18 sont également pris par le ministre chargé de l'outre-mer ;
```catala
# Rien à coder ici.interne
```
###### Article D861-8 | LEGIARTI000038878583 [archive]
Pour leur application en Guadeloupe, en Guyane, en Martinique, à La Réunion et à Mayotte :
@ -5523,7 +5520,8 @@ du 2° de l'article D. 832-25 est limitée à six enfants ;
```catala
# Ici nous reprenons les chiffres de D832-25, à prendre en compte lorsque
# ceux-ci seront modifiés
champ d'application CalculNombrePartLogementFoyer:
champ d'application CalculNombrePartLogementFoyer sous condition
date_courante >= |2019-09-01| et date_courante < |2023-04-05|:
exception d832_25_2
définition n_nombre_parts_d832_25_majoration sous condition
limitation_majoration_personnes_à_charge et
@ -5539,7 +5537,8 @@ champ d'application CalculNombrePartLogementFoyer:
# dans CalculAidePersonnaliséeLogementFoyer une condition
# "limitation_majoration_personnes_à_charge" similaire qui déclenche celle de
# CalculNombrePartLogementFoyer. C'est ce que nous faisons ci-dessous.
champ d'application CalculAidePersonnaliséeLogementFoyer:
champ d'application CalculAidePersonnaliséeLogementFoyer sous condition
date_courante >= |2019-09-01| et date_courante < |2023-04-05|:
règle
calcul_nombre_parts.limitation_majoration_personnes_à_charge
sous condition
@ -5550,7 +5549,8 @@ champ d'application CalculAidePersonnaliséeLogementFoyer:
# CalculAidePersonnaliséeLogementFoyer, nous pouvons taper dedans depuis
# CalculAllocationLogementAccessionPropriété à la manière de D842-6.
# C'est chose faite ci-dessous.
champ d'application CalculAllocationLogementAccessionPropriété:
champ d'application CalculAllocationLogementAccessionPropriété sous condition
date_courante >= |2019-09-01| et date_courante < |2023-04-05|:
règle calcul_apl_logement_foyer.limitation_majoration_personnes_à_charge
sous condition
selon résidence sous forme
@ -5568,17 +5568,18 @@ D. 842-12 ne sont pas applicables aux opérations de logements évolutifs sociau
logements très sociaux, en accession à la propriété aidée par l'Etat ;
```catala
champ d'application CalculAllocationLogementAccessionPropriété:
exception règle condition_d842_11_3 sous condition
(selon résidence sous forme
-- Guadeloupe: vrai
-- Guyane: vrai
-- Martinique: vrai
-- LaRéunion: vrai
-- Mayotte: vrai
-- n'importe quel: faux) et
opérations_logement_évolutifs_sociaux_accession_propriété_aidée_État
conséquence non rempli
champ d'application CalculAllocationLogementAccessionPropriété sous condition
date_courante >= |2019-09-01| et date_courante < |2023-04-05|:
exception règle condition_d842_11_3 sous condition
(selon résidence sous forme
-- Guadeloupe: vrai
-- Guyane: vrai
-- Martinique: vrai
-- LaRéunion: vrai
-- Mayotte: vrai
-- n'importe quel: faux) et
opérations_logement_évolutifs_sociaux_accession_propriété_aidée_État
conséquence non rempli
```
3° Les arrêtés relatifs aux allocations de logement prévus aux articles D. 842-13 et
@ -5593,7 +5594,8 @@ coefficient de prise en charge " K ", la majoration pour personne à charge ment
du 2° de l'article D. 832-25 est limitée à six enfants.
```catala
champ d'application CalculAllocationLogementFoyer:
champ d'application CalculAllocationLogementFoyer sous condition
date_courante >= |2019-09-01| et date_courante < |2023-04-05|:
règle calcul_apl_logement_foyer.limitation_majoration_personnes_à_charge
sous condition
selon résidence sous forme
@ -5606,24 +5608,25 @@ champ d'application CalculAllocationLogementFoyer:
conséquence rempli
```
###### Article D861-9 | LEGIARTI000038878581
###### Article D861-9 | LEGIARTI000047401337
L'âge limite pour l'ouverture du droit à l'allocation de logement sociale prévu par les
dispositions du dernier alinéa de l'article L. 861-6 est fixé à vingt-deux ans.
L'âge limite pour l'ouverture du droit à l'allocation de logement familiale
prévu par les dispositions du dernier alinéa du 1° de l'article L. 861-6 est
fixé à vingt-deux ans.
```catala
# Le dernier alinéa de L861-6 introduit une restriction supplémentaire pour
# la prise en compte des enfants à charge : après l'obligation scolaire,
# les enfants sont considérés comme à charge jusqu'à un certain âge et
# s'ils suivent des études ou assimilé. L'âge limite après obligation scolaire
# existe déjà en Métropole, il est prévu par L512-3 du CCS mais ici on le
# redéfini pour être à 22 ans, sachant qu'il est déjà redéfini pour être à 21
# ans par R823-4 CCH. Petite subtilité supplémentaire: ici le D861-9 nous
# dit que cette âge limite de 22 ans ne s'applique que pour l'allocation
# logement alors que R823-4 est une disposition commune à l'AL et à l'APL.
# Or dans les DROM il n'y a pas d'APL, seulement l'AL, donc ici nous pouvons
# modifier directement l'éligibilité commune aux AL et aux APL pour éviter
# du code compliqué qui ne s'appliquerait qu'aux AL.
# Le dernier alinéa du 1° de L861-6 introduit une restriction supplémentaire
# pour la prise en compte des enfants à charge : après l'obligation scolaire,
# les enfants sont considérés comme à charge jusqu'à un certain âge et s'ils
# suivent des études ou assimilé. L'âge limite après obligation scolaire existe
# déjà en Métropole, il est prévu par L512-3 du CCS mais ici on le redéfini pour
# être à 22 ans, sachant qu'il est déjà redéfini pour être à 21 ans par R823-4
# CCH. Petite subtilité supplémentaire: ici le D861-9 nous dit que cette âge
# limite de 22 ans ne s'applique que pour l'allocation logement alors que R823-4
# est une disposition commune à l'AL et à l'APL. Or dans les DROM il n'y a pas
# d'APL, seulement l'AL, donc ici nous pouvons modifier directement
# l'éligibilité commune aux AL et aux APL pour éviter du code compliqué qui ne
# s'appliquerait qu'aux AL.
champ d'application ÉligibilitéAidesPersonnelleLogement:
exception définition prestations_familiales.âge_l512_3_2 sous condition
(selon ménage.résidence sous forme
@ -5668,6 +5671,117 @@ sont pas applicables à Mayotte.
# au logement donc nous le considérons hors du champ de notre calculette.
```
##### Section 3 : Aide personnalisée au logement dans les logements-foyers
###### Article R861-20 | LEGIARTI000047398875
Pour leur application en Guadeloupe, en Guyane, en Martinique, à La Réunion et
à Mayotte :
1° A l'article R. 832-20, le 3° n'est pas applicable ;
```catala
# Le 3° de l'article R832-20 concerne les logements-foyers accueillant, à titre
# principal, des jeunes travailleurs ou des travailleurs migrants et ayant fait
# l'objet d'une convention, prévue à l'article L. 353-2, signée avant le 1er
# janvier 1995. On vient donc raffiner la condition d'exclusion de
# "condition_logement_bailleur".
champ d'application ÉligibilitéAidePersonnaliséeLogement sous condition
date_courante >= |2023-04-05| et selon ménage.résidence sous forme
-- Guadeloupe: vrai
-- Guyane: vrai
-- Martinique: vrai
-- LaRéunion: vrai
-- Mayotte: vrai
-- n'importe quel: faux:
exception logement_foyer
règle condition_logement_bailleur sous condition
selon ménage.logement.mode_occupation sous forme
-- RésidentLogementFoyer de logement_foyer:
logement_foyer.type sous forme
FoyerJeunesTravailleursOuMigrantsConventionnéL353_2Avant1995
-- n'importe quel: faux
conséquence non rempli
```
2° L'article R. 832-21 est remplacé par les dispositions suivantes :
“ Art. R. 832-21.-Pour l'application du 5° de l'article L. 831-1, les
logements-foyers doivent répondre aux conditions de décence définies au
premier alinéa de l'article 6 de la loi n° 89-462 du 6 juillet 1989 et
respecter l'une des conditions suivantes :
“ 1° Pour les logements-foyers mis en service avant le 1er janvier 2023,
appartenir à l'une des personnes morales mentionnées à l'article R. 372-3 ;
“ 2° Pour les logements-foyers mis en service après le 1er janvier 2023,
bénéficier de l'un des modes de financement suivants :
“ a) Subventions et prêts mentionnés au chapitre II du titre VII du livre III
ou à la section 2 du chapitre III du titre II du livre III ;
“ b) Subventions accordées sur le budget du ministère chargé de la santé ou de
la caisse nationale de solidarité pour l'autonomie représentant au moins 20 %
du coût de la construction ou du coût des travaux d'amélioration pouvant faire
l'objet d'une subvention ou du coût de l'opération d'acquisition-amélioration.
” ;
```catala
# On avait fusionné toutes les conditions de R823-21 dans le booléen
# "remplit_conditions_r832_21" donc on peut le garder. Il suffit juste de
# préciser dans le formulaire que les conditions de R823-21 sont différentes
# pour l'outre-mer.
```
3° A l'article R. 832-23, les mots : “ mentionné aux 2° et 3° de l'article R.
832-20 ” sont remplacés par les mots : “ mentionné au 2° de l'article R.
832-20. ”
```catala
# On ne cherche pas à coder pour l'instant le calcul du calendrier d'ouverture
# des droits dans les différentes situations.
```
###### Article D861-21 | LEGIARTI000047399895
Pour leur application en Guadeloupe, en Guyane, en Martinique, à La Réunion et
à Mayotte :
1° A l'article D. 832-25, le deuxième alinéa et le 2° ne sont pas applicables ;
```catala
champ d'application CalculAidePersonnaliséeLogementFoyer sous condition
date_courante >= |2023-04-05| et selon résidence sous forme
-- Guadeloupe: vrai
-- Guyane: vrai
-- Martinique: vrai
-- LaRéunion: vrai
-- Mayotte: vrai
-- n'importe quel: faux:
exception définition condition_2_du_832_25 égal à
faux
```
2° A l'article D. 832-26, le deuxième alinéa n'est pas applicable ;
```catala
# Le deuxième alinéa de D832-26 est aussi gouverné par le booléen
# "condition_2_du_832_25" que nous avons défini au dessus.
```
3° A l'article D. 832-27, les mots : “ selon le type de logements-foyers ”
sont supprimés ;
```catala
# Adaptation du phrasé aux règles locales mais ne porte pas conséquence
# au calcul.
```
4° A l'article D. 832-28, les mots : “ de l'agriculture ” sont remplacés par
les mots : “ de l'outre-mer ”.
#### Chapitre II : Saint-Barthélemy et Saint-Martin
###### Article R862-1 | LEGIARTI000038878573
@ -5892,7 +6006,38 @@ Saint-Barthélemy et à Saint-Martin.
##### Section III : Allocations de logement
###### Article D862-7 | LEGIARTI000038878555
###### Article D862-7 | LEGIARTI000047401319
Pour leur application à Saint-Barthélemy et à Saint-Martin :
1° A l'article D. 842-4 , les mots : " en application de l'article L. 522-1 " sont remplacés
par les mots : " en application de la réglementation applicable localement " ;
```catala
# Fait la correspondance avec le droit local mais ne change pas le calcul, on ne
# code donc rien ici.
```
2° Les dispositions du troisième alinéa de l'article D. 842-11 et du 1° de l'article
D. 842-12 ne sont pas applicables aux opérations de logements évolutifs sociaux ou de
logements très sociaux, en accession à la propriété aidée par l'Etat ;
```catala
champ d'application CalculAllocationLogementAccessionPropriété sous condition
date_courante >= |2023-04-05|:
exception règle condition_d842_11_3 sous condition
(selon résidence sous forme
-- SaintBarthélemy: vrai
-- SaintMartin: vrai
-- n'importe quel: faux) et
opérations_logement_évolutifs_sociaux_accession_propriété_aidée_État
conséquence non rempli
```
3° Les arrêtés relatifs aux allocations de logement prévus aux articles D. 842-13 et
D. 842-18 sont également pris par le ministre chargé de l'outre-mer.
###### Article D862-7 | LEGIARTI000038878555 [archive]
Pour leur application à Saint-Barthélemy et à Saint-Martin :
@ -5910,7 +6055,8 @@ au d du 2° de l'article D. 832-25 est limitée à six enfants ;
```catala
# Dispositif déjà codé dans D861-8, ici on l'active succintement.
champ d'application CalculAllocationLogementAccessionPropriété:
champ d'application CalculAllocationLogementAccessionPropriété sous condition
date_courante >= |2019-09-01| et date_courante < |2023-04-05|:
règle calcul_apl_logement_foyer.limitation_majoration_personnes_à_charge
sous condition
selon résidence sous forme
@ -5925,19 +6071,21 @@ D. 842-12 ne sont pas applicables aux opérations de logements évolutifs sociau
logements très sociaux, en accession à la propriété aidée par l'Etat ;
```catala
champ d'application CalculAllocationLogementAccessionPropriété:
exception règle condition_d842_11_3 sous condition
(selon résidence sous forme
-- SaintBarthélemy: vrai
-- SaintMartin: vrai
-- n'importe quel: faux) et
opérations_logement_évolutifs_sociaux_accession_propriété_aidée_État
conséquence non rempli
champ d'application CalculAllocationLogementAccessionPropriété sous condition
date_courante >= |2019-09-01| et date_courante < |2023-04-05|:
exception règle condition_d842_11_3 sous condition
(selon résidence sous forme
-- SaintBarthélemy: vrai
-- SaintMartin: vrai
-- n'importe quel: faux) et
opérations_logement_évolutifs_sociaux_accession_propriété_aidée_État
conséquence non rempli
```
4° Les arrêtés relatifs aux allocations de logement prévus aux articles D. 842-13 et
D. 842-18 sont également pris par le ministre chargé de l'outre-mer.
###### Article R862-8 | LEGIARTI000038878553
Pour leur application à Saint-Barthélemy et à Saint-Martin :
@ -6361,7 +6509,9 @@ D. 823-19 et par les règles particulières figurant aux articles D. 842-1 à D.
champ d'application CalculAllocationLogement sous condition
résidence sous forme SaintPierreEtMiquelon:
exception définition sous_calcul_traitement égal à
exception définition sous_calcul_traitement sous condition
catégorie_calcul_apl sous forme LogementFoyer
conséquence égal à
selon catégorie_calcul_apl sous forme
-- LogementFoyer de logement_foyer_:
(soit traitement_formule égal à
@ -6376,14 +6526,15 @@ champ d'application CalculAllocationLogement sous condition
-- loyer_principal: logement_foyer_.redevance
-- bénéficiaire_aide_adulte_ou_enfant_handicapés:
logement_foyer_.bénéficiaire_aide_adulte_ou_enfant_handicapés
# TODO juridique: est-ce qu'on applique le barème spécial chambre
# Est-ce qu'on applique le barème spécial chambre
# systématiquement pour les personnes résidant en logement-foyer
# à Saint-Pierre-et-Miquelon ?
-- logement_est_chambre: vrai
# TODO juridique: examiner si dans ce cas on considère qu'une personne
# habitant en logement-foyer n'est pas en colocation au sens du
# secteur locatif.
-- colocation: faux
# à Saint-Pierre-et-Miquelon ou éventuellement ?
# Réponse de DGALN/DHUP/FE4: "Oui, ces barèmes sappliquent au sein
# déventuelles colocations ou chambres dans ces logements foyers sur
# le territoire de la collectivité territoriale de
# Saint-Pierre-et-Miquelon."
-- logement_est_chambre: logement_foyer_.logement_est_chambre
-- colocation: logement_foyer_.colocation
# Ce cas prévu à l'article 8 de l'arrêté du 27 septembre 2019 n'est
# pas possible pour un hébergement en logement-foyer.
-- âgées_ou_handicap_adultes_hébergées_onéreux_particuliers: faux
@ -6415,7 +6566,7 @@ champ d'application CalculAllocationLogement sous condition
}
déclaration traitement_nul_tout_le_temps contenu argent
dépend de aide_finale contenu argent égal à 0
dépend de aide_finale contenu argent égal à 0€
```
2° Au 5° de l'article D. 823-17, les mots : “ en fonction de l'évolution de l'indice des

View File

@ -116,6 +116,7 @@ déclaration structure TrancheRevenuDécimal:
déclaration structure LogementFoyer:
donnée type contenu TypeLogementFoyer
donnée logement_foyer_jeunes_travailleurs contenu booléen
donnée remplit_conditions_r832_21 contenu booléen
donnée conventionné_livre_III_titre_V_chap_III contenu booléen
donnée conventionné_selon_règles_drom contenu booléen
@ -126,6 +127,8 @@ déclaration structure LogementFoyer:
CatégorieÉquivalenceLoyerAllocationLogementFoyer
donnée bénéficiaire_aide_adulte_ou_enfant_handicapés contenu booléen
donnée logement_meublé_d842_2 contenu booléen
donnée logement_est_chambre contenu booléen
donnée colocation contenu booléen
```
@ -177,8 +180,6 @@ déclaration énumération SituationGardeAlternée:
déclaration structure EnfantÀCharge:
donnée identifiant contenu entier
donnée nationalité contenu Nationalité
donnée bénéficie_titre_personnel_aide_personnelle_logement
contenu booléen
donnée a_déjà_ouvert_droit_aux_allocations_familiales contenu booléen
donnée date_de_naissance contenu date
donnée rémuneration_mensuelle contenu argent
@ -246,6 +247,18 @@ déclaration énumération Nationalité:
-- Française
-- Étrangère contenu ConditionsÉtrangers
#La répartition des communes par zones est donnée par l'arrêté du 17 mars
# 1978 relatif au classement des communes par zones géographiques et
# l'article 6 de l'arrêté du 5 mai 1995 relatif aux subventions de
# l'Etat et aux prêts pour la construction, l'acquisition et
# l'amélioration des logements locatifs aidés. Toutefois le phrasé de ces
# articles laisse subsister une source d'incertitude quant au zonage de la
# Guyane qui est un département d'outre mer mais qui n'est pas une île non
# reliée au continent. D'après un mail du 21/04/2023 de DGALN/DHUP/FE4,
# "La Guyane est bien comprise en zone II. Les territoires qui composent la zone
# II doivent être entendus comme lensemble de ceux listés, auxquels sajoute la
# Guyane puisque le dernier alinéa de larticle 6 exclut strictement les
# départements doutre-mer de la zone III."
déclaration énumération ZoneDHabitation:
-- Zone1
-- Zone2
@ -478,6 +491,9 @@ champ d'application ÉligibilitéPrimeDeDéménagement:
date_courante
définition base_mensuelle_allocations_familiales.date_courante égal à
date_courante
# Ce programme ne peut pas être utilisé avec des dates trop anciennes,
# pour lesquelles les textes en vigueur n'ont pas été formalisés.
assertion date_courante >= |2019-10-01|
```
### Calcul des contributions sociales s'appliquant aux aides personnelles au logement
@ -485,6 +501,7 @@ champ d'application ÉligibilitéPrimeDeDéménagement:
```catala-metadata
déclaration champ d'application ContributionsSocialesAidesPersonnelleLogement:
entrée date_courante contenu date
entrée lieu contenu Collectivité
interne taux_crds contenu décimal
interne exonéré_csg condition
@ -557,10 +574,18 @@ déclaration champ d'application CalculAidePersonnaliséeLogementLocatif:
état minoration_forfaitaire
état contributions_sociales_arrondi
état réduction_loyer_solidarité
# Mail du 21/04/2023 de DGALN/DHUP/FE4: "Le calcul [de la montée en charge
# de Saint-Pierre et Miquelon] sopère sur le montant final calculé de
# laide à verser à lallocataire (qui comprend par exemple la minoration de
# 5 euros), comme précisé au 2° de larticle 7 du décret susvisé [n°
# 2021-1750 du 21 décembre 2021]. Jattire toutefois votre attention sur le
# fait que la CRDS ne sapplique pas à Saint-Pierre-et-Miquelon."
état montée_en_charge_saint_pierre_miquelon
état montant_minimal
champ d'application CalculAidePersonnaliséeLogementLocatif:
définition contributions_sociales.date_courante égal à date_courante
définition contributions_sociales.lieu égal à résidence
# Ce programme ne peut pas être utilisé avec des dates trop anciennes,
# pour lesquelles les textes en vigueur n'ont pas été formalisés.
assertion date_courante >= |2020-10-01|
@ -591,6 +616,7 @@ déclaration champ d'application CalculÉquivalenceLoyerMinimale:
résultat montant contenu argent
déclaration champ d'application CalculNombrePartLogementFoyer:
entrée date_courante contenu date
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
@ -603,6 +629,8 @@ déclaration champ d'application CalculNombrePartLogementFoyer:
résultat n_nombre_parts_d832_25 contenu décimal
déclaration champ d'application CalculAidePersonnaliséeLogementFoyer:
entrée résidence contenu Collectivité
entrée logement_foyer_jeunes_travailleurs contenu booléen
entrée type_logement_foyer contenu TypeLogementFoyer
entrée date_conventionnement contenu date
entrée ressources_ménage_arrondies contenu argent
@ -650,6 +678,7 @@ déclaration champ d'application CalculAidePersonnaliséeLogementFoyer:
champ d'application CalculAidePersonnaliséeLogementFoyer:
définition contributions_sociales.date_courante égal à date_courante
définition contributions_sociales.lieu égal à résidence
définition calcul_équivalence_loyer_minimale.date_courante égal à
date_courante
# Ce programme ne peut pas être utilisé avec des dates trop anciennes,
@ -683,6 +712,7 @@ déclaration champ d'application
entrée type_prêt contenu TypePrêt
entrée ancienneté_logement contenu NeufOuAncien
entrée date_courante contenu date
entrée résidence contenu Collectivité
résultat mensualité_éligible contenu argent
résultat mensualité_minimale contenu argent
@ -728,6 +758,7 @@ déclaration champ d'application
champ d'application CalculAidePersonnaliséeLogementAccessionPropriété:
définition contributions_sociales.date_courante égal à date_courante
définition contributions_sociales.lieu égal à résidence
définition calcul_équivalence_loyer_minimale.date_courante égal à
date_courante
# Ce programme ne peut pas être utilisé avec des dates trop anciennes,
@ -804,9 +835,25 @@ déclaration champ d'application CalculAllocationLogementLocatif:
calcul_apl_locatif champ d'application CalculAidePersonnaliséeLogementLocatif
résultat aide_finale_formule contenu argent
résultat traitement_aide_finale contenu argent
dépend de aide_finale 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
champ d'application CalculAllocationLogementLocatif:
définition montant_forfaitaire_charges_d823_16 égal à
calcul_apl_locatif.montant_forfaitaire_charges_d823_16
définition plafond_loyer_d823_16_2 égal à
calcul_apl_locatif.plafond_loyer_d823_16_2
définition participation_minimale égal à
calcul_apl_locatif.participation_minimale
définition taux_composition_familiale égal à
calcul_apl_locatif.taux_composition_familiale
définition participation_personnelle égal à
calcul_apl_locatif.participation_personnelle
```
### Secteur accession à la propriété
@ -874,6 +921,13 @@ déclaration champ d'application CalculAllocationLogementAccessionPropriété:
état minoration_forfaitaire
état dépense_nette_minimale
état contributions_sociales_arrondi
# Mail du 21/04/2023 de DGALN/DHUP/FE4: "Le calcul [de la montée en charge
# de Saint-Pierre et Miquelon] sopère sur le montant final calculé de
# laide à verser à lallocataire (qui comprend par exemple la minoration de
# 5 euros), comme précisé au 2° de larticle 7 du décret susvisé [n°
# 2021-1750 du 21 décembre 2021]. Jattire toutefois votre attention sur le
# fait que la CRDS ne sapplique pas à Saint-Pierre-et-Miquelon."
état montée_en_charge_saint_pierre_miquelon
état montant_minimal
champ d'application CalculAllocationLogementAccessionPropriété:
@ -883,8 +937,11 @@ champ d'application CalculAllocationLogementAccessionPropriété:
# calculer des quantités comme si on était en logement foyer. Or il nous
# faut donner un argument au sous-champ d'application donc on met ici une
# valeur bidon.
définition calcul_apl_logement_foyer.résidence égal à résidence
définition calcul_apl_logement_foyer.type_logement_foyer égal à
TypeLogementFoyer.Autre # Valeur par défaut
TypeLogementFoyer.RésidenceSociale # Valeur par défaut
définition calcul_apl_logement_foyer.logement_foyer_jeunes_travailleurs
égal à faux # Valeur par défaut
définition calcul_apl_logement_foyer.date_conventionnement égal à
|1970-01-01| # Valeur par défaut
définition calcul_apl_logement_foyer.redevance égal à
@ -900,6 +957,7 @@ champ d'application CalculAllocationLogementAccessionPropriété:
définition calcul_apl_logement_foyer.date_courante égal à
date_courante
définition contributions_sociales.date_courante égal à date_courante
définition contributions_sociales.lieu égal à résidence
définition calcul_équivalence_loyer_minimale.date_courante égal à
date_courante
# Ce programme ne peut pas être utilisé avec des dates trop anciennes,
@ -913,6 +971,7 @@ champ d'application CalculAllocationLogementAccessionPropriété:
```catala-metadata
déclaration champ d'application CalculAllocationLogementFoyer:
entrée type_logement_foyer contenu TypeLogementFoyer
entrée logement_foyer_jeunes_travailleurs contenu booléen
entrée date_conventionnement contenu date
entrée résidence contenu Collectivité
entrée redevance contenu argent
@ -952,11 +1011,22 @@ déclaration champ d'application CalculAllocationLogementFoyer:
état dépense_nette_minimale
état redevance
état contributions_sociales_arrondi
# Mail du 21/04/2023 de DGALN/DHUP/FE4: "Le calcul [de la montée en charge
# de Saint-Pierre et Miquelon] sopère sur le montant final calculé de
# laide à verser à lallocataire (qui comprend par exemple la minoration de
# 5 euros), comme précisé au 2° de larticle 7 du décret susvisé [n°
# 2021-1750 du 21 décembre 2021]. Jattire toutefois votre attention sur le
# fait que la CRDS ne sapplique pas à Saint-Pierre-et-Miquelon."
état montée_en_charge_saint_pierre_miquelon
état montant_minimal
champ d'application CalculAllocationLogementFoyer:
définition calcul_apl_logement_foyer.résidence égal à
résidence
définition calcul_apl_logement_foyer.type_logement_foyer égal à
type_logement_foyer
définition calcul_apl_logement_foyer.logement_foyer_jeunes_travailleurs égal à
logement_foyer_jeunes_travailleurs
définition calcul_apl_logement_foyer.date_conventionnement égal à
date_conventionnement
définition calcul_apl_logement_foyer.redevance égal à
@ -971,6 +1041,7 @@ champ d'application CalculAllocationLogementFoyer:
définition calcul_apl_logement_foyer.date_courante égal à
date_courante
définition contributions_sociales.date_courante égal à date_courante
définition contributions_sociales.lieu égal à résidence
définition calcul_équivalence_loyer_minimale.date_courante égal à
date_courante
# Ce programme ne peut pas être utilisé avec des dates trop anciennes,
@ -1032,7 +1103,7 @@ déclaration champ d'application ImpayéDépenseLogement:
## Calcul de l'aide au logement effective
## Calculette globale
### Calculette globale
Le but de ce champ d'application est de réaliser le calcul automatique
de l'éligibilité et du montant de l'aide au logement pour un ménage, en fonction
@ -1118,7 +1189,7 @@ champ d'application CalculetteAidesAuLogement:
coefficents_enfants_garde_alternée_pris_en_compte
```
## Calculette avec garde alternée
### Calculette avec garde alternée
Afin de calculer l'impact de la garde alternée sur les aides au logement,
il est nécessaire de réaliser une double liquidation du calcul des aides

View File

@ -38,13 +38,61 @@ champ d'application Exemple1:
assertion calcul.aide_finale_formule = 101,90€
```
```catala
déclaration champ d'application Exemple2:
calcul champ d'application CalculAllocationLogementAccessionPropriété
résultat montant contenu argent
champ d'application Exemple2:
définition calcul.ressources_ménage_arrondies égal à 22 000 €
définition calcul.date_signature_prêt égal à |2021-12-01|
définition calcul.zone égal à Zone2
définition calcul.mensualité_principale égal à 500 €
définition calcul.nombre_personnes_à_charge égal à 4
définition calcul.situation_familiale_calcul_apl égal à Couple
définition calcul.date_courante égal à |2023-04-10|
définition calcul.résidence égal à SaintPierreEtMiquelon
définition calcul.charges_mensuelles_prêt égal à 500 €
définition calcul.type_travaux_logement égal à
TypeTravauxLogementR842_5.PrévuDansListeR321_15
définition calcul.date_entrée_logement égal à |2020-12-01|
définition calcul.local_habité_première_fois_bénéficiaire égal à faux
définition calcul.copropriété égal à faux
définition calcul.situation_r822_11_13_17 égal à faux
définition calcul.opérations_logement_évolutifs_sociaux_accession_propriété_aidée_État égal à faux
définition montant égal à
calcul.traitement_aide_finale de
calcul.aide_finale_formule
assertion calcul.mensualité_éligible = 405,10 €
assertion calcul.mensualité_minimale = 296,96 €
assertion calcul.coefficient_prise_en_charge = 0,66
assertion calcul.aide_finale_formule = 141,99€
assertion montant = 85,00 €
```
```catala-test-inline
$ catala Interpret -s Exemple1
[RESULT] Computation successful! Results:
[RESULT] montant = 96.48 €
```
```catala-test-inline
$ catala Interpret_Lcalc -s Exemple1 --avoid_exceptions
[RESULT] Computation successful! Results:
[RESULT] montant = ESome 96.48 €
```
```catala-test-inline
$ catala Interpret -s Exemple2
[RESULT] Computation successful! Results:
[RESULT] montant = 85.00 €
```
```catala-test-inline
$ catala Interpret -s Exemple2 --avoid_exceptions
[RESULT] Computation successful! Results:
[RESULT] montant = 85.00 €
```

View File

@ -62,31 +62,67 @@ champ d'application Exemple2 :
calcul.traitement_aide_finale de calcul.aide_finale_formule
assertion montant = 352,77€
# déclaration champ d'application Exemple3 :
# calcul champ d'application CalculAllocationLogementLocatif
# résultat montant contenu argent
# Exemple aux DROM
déclaration champ d'application Exemple3 :
calcul champ d'application CalculAllocationLogementLocatif
résultat montant contenu argent
# champ d'application Exemple3 :
# définition calcul.loyer_principal égal à 375 €
# définition calcul.ressources_ménage_arrondies égal à 9 500€
# définition calcul.bénéficiaire_aide_adulte_ou_enfant_handicapés égal à faux
# définition calcul.date_courante égal à |2023-03-01|
# définition calcul.nombre_personnes_à_charge égal à 1
# définition calcul.situation_familiale_calcul_apl égal à Couple
# définition calcul.zone égal à Zone2
# définition calcul.résidence égal à LaRéunion
# définition calcul.logement_est_chambre égal à faux
# définition calcul.âgées_ou_handicap_adultes_hébergées_onéreux_particuliers
# égal à faux
# définition calcul.type_aide égal à
# TypeAidesPersonnelleLogement.AllocationLogementFamiliale
# définition calcul.colocation égal à faux
# définition calcul.réduction_loyer_solidarité égal à 0 €
# définition calcul.logement_meublé_d842_2 égal à faux
# définition calcul.changement_logement_d842_4 égal à PasDeChangement
# définition montant égal à
# calcul.traitement_aide_finale de calcul.aide_finale_formule
# assertion montant = 243,77€
champ d'application Exemple3 :
définition calcul.loyer_principal égal à 375 €
définition calcul.ressources_ménage_arrondies égal à 9 500€
définition calcul.bénéficiaire_aide_adulte_ou_enfant_handicapés égal à faux
définition calcul.date_courante égal à |2023-03-01|
définition calcul.nombre_personnes_à_charge égal à 1
définition calcul.situation_familiale_calcul_apl égal à Couple
définition calcul.zone égal à Zone2
définition calcul.résidence égal à LaRéunion
définition calcul.logement_est_chambre égal à faux
définition calcul.âgées_ou_handicap_adultes_hébergées_onéreux_particuliers
égal à faux
définition calcul.type_aide égal à
TypeAidesPersonnelleLogement.AllocationLogementFamiliale
définition calcul.colocation égal à faux
définition calcul.réduction_loyer_solidarité égal à 0 €
définition calcul.logement_meublé_d842_2 égal à faux
définition calcul.changement_logement_d842_4 égal à PasDeChangement
définition montant égal à
calcul.traitement_aide_finale de calcul.aide_finale_formule
assertion montant = 339,70€
```
```catala
# Exemple à Saint-Pierre-et-Miquelon
déclaration champ d'application Exemple4 :
calcul champ d'application CalculAllocationLogementLocatif
résultat montant contenu argent
champ d'application Exemple4 :
définition calcul.loyer_principal égal à 500 €
définition calcul.ressources_ménage_arrondies égal à 12 500€
définition calcul.bénéficiaire_aide_adulte_ou_enfant_handicapés égal à faux
définition calcul.date_courante égal à |2023-04-01|
définition calcul.nombre_personnes_à_charge égal à 2
définition calcul.situation_familiale_calcul_apl égal à PersonneSeule
définition calcul.zone égal à Zone2
définition calcul.résidence égal à SaintPierreEtMiquelon
définition calcul.logement_est_chambre égal à faux
définition calcul.âgées_ou_handicap_adultes_hébergées_onéreux_particuliers
égal à faux
définition calcul.type_aide égal à
TypeAidesPersonnelleLogement.AllocationLogementFamiliale
définition calcul.colocation égal à faux
définition calcul.réduction_loyer_solidarité égal à 0 €
définition calcul.logement_meublé_d842_2 égal à faux
définition calcul.changement_logement_d842_4 égal à PasDeChangement
définition montant égal à
calcul.traitement_aide_finale de calcul.aide_finale_formule
assertion calcul.montant_forfaitaire_charges_d823_16 = 81,56 €
assertion calcul.plafond_loyer_d823_16_2 = 424,22 €
assertion calcul.participation_minimale = 42,99 €
assertion calcul.taux_composition_familiale = 2,38%
assertion calcul.participation_personnelle = 131,30 €
assertion montant = 230,63 €
```
```catala-test-inline
@ -106,8 +142,33 @@ $ catala Interpret_Lcalc -s Exemple1 --avoid_exceptions
[RESULT] Computation successful! Results:
[RESULT] montant = ESome 345.73 €
```
```catala-test-inline
$ catala Interpret_Lcalc -s Exemple2 --avoid_exceptions
[RESULT] Computation successful! Results:
[RESULT] montant = ESome 352.77 €
```
```catala-test-inline
$ catala Interpret -s Exemple3 --disable_warnings
[RESULT] Computation successful! Results:
[RESULT] montant = 339.70 €
```
```catala-test-inline
$ catala Interpret -s Exemple4 --disable_warnings
[RESULT] Computation successful! Results:
[RESULT] montant = 230.63 €
```
```catala-test-inline
$ catala Interpret -s Exemple3 --disable_warnings --avoid_exceptions
[RESULT] Computation successful! Results:
[RESULT] montant = 339.70 €
```
```catala-test-inline
$ catala Interpret -s Exemple4 --disable_warnings --avoid_exceptions
[RESULT] Computation successful! Results:
[RESULT] montant = 230.63 €
```

View File

@ -9,11 +9,12 @@ déclaration champ d'application CasTest1 :
résultat montant contenu argent
champ d'application CasTest1:
définition calcul.résidence égal à Métropole
définition calcul.date_conventionnement égal à |2020-01-01|
définition calcul.type_logement_foyer égal à
TypeLogementFoyer.RésidenceSociale
définition calcul.redevance égal à 350 €
définition calcul.résidence égal à Métropole
définition calcul.logement_foyer_jeunes_travailleurs égal à faux
définition calcul.ressources_ménage_arrondies égal à 7 500€
définition calcul.nombre_personnes_à_charge égal à 0
définition calcul.situation_familiale_calcul_apl égal à PersonneSeule

View File

@ -17,6 +17,7 @@ champ d'application Exemple1:
définition calcul.nombre_personnes_à_charge égal à 2
définition calcul.situation_familiale_calcul_apl égal à Couple
définition calcul.date_courante égal à |2021-09-15|
définition calcul.résidence égal à Métropole
définition calcul.type_prêt égal à D331_63_64
définition calcul.type_travaux_logement égal à
@ -52,6 +53,7 @@ champ d'application Exemple2:
définition calcul.nombre_personnes_à_charge égal à 2
définition calcul.situation_familiale_calcul_apl égal à Couple
définition calcul.date_courante égal à |2021-09-15|
définition calcul.résidence égal à Métropole
définition calcul.type_prêt égal à D331_63_64
définition calcul.type_travaux_logement égal à
@ -85,6 +87,7 @@ champ d'application Exemple3:
définition calcul.ressources_ménage_arrondies égal à 18 000 €
définition calcul.date_signature_prêt égal à |2017-12-15|
définition calcul.zone égal à Zone2
définition calcul.résidence égal à Métropole
définition calcul.mensualité_principale égal à 650 €
définition calcul.nombre_personnes_à_charge égal à 2
définition calcul.situation_familiale_calcul_apl égal à Couple
@ -120,6 +123,7 @@ champ d'application Exemple4:
définition calcul.date_signature_prêt égal à |2019-12-02|
définition calcul.zone égal à Zone3
définition calcul.mensualité_principale égal à 495 €
définition calcul.résidence égal à Métropole
définition calcul.nombre_personnes_à_charge égal à 2
définition calcul.situation_familiale_calcul_apl égal à Couple
définition calcul.date_courante égal à |2022-05-01|

View File

@ -8,7 +8,9 @@ déclaration champ d'application CasTest1 :
résultat montant contenu argent
champ d'application CasTest1:
définition calcul.résidence égal à Métropole
définition calcul.date_conventionnement égal à |2022-01-01|
définition calcul.logement_foyer_jeunes_travailleurs égal à faux
définition calcul.type_logement_foyer égal à TypeLogementFoyer.Autre
définition calcul.redevance égal à 360 €
définition calcul.ressources_ménage_arrondies égal à 15 000€
@ -32,6 +34,7 @@ déclaration champ d'application CasTest2 :
champ d'application CasTest2:
définition calcul.résidence égal à Métropole
définition calcul.date_conventionnement égal à |2022-01-01|
définition calcul.logement_foyer_jeunes_travailleurs égal à faux
définition calcul.type_logement_foyer égal à TypeLogementFoyer.Autre
définition calcul.redevance égal à 360 €
définition calcul.ressources_ménage_arrondies égal à 15 000€
@ -59,7 +62,9 @@ déclaration champ d'application CasTest3 :
résultat montant contenu argent
champ d'application CasTest3:
définition calcul.résidence égal à Métropole
définition calcul.date_conventionnement égal à |2020-01-01|
définition calcul.logement_foyer_jeunes_travailleurs égal à faux
définition calcul.type_logement_foyer égal à TypeLogementFoyer.Autre
définition calcul.redevance égal à 350 €
définition calcul.ressources_ménage_arrondies égal à 7 500€
@ -83,7 +88,9 @@ déclaration champ d'application CasTest4 :
résultat montant contenu argent
champ d'application CasTest4:
définition calcul.résidence égal à Métropole
définition calcul.date_conventionnement égal à |2020-01-01|
définition calcul.logement_foyer_jeunes_travailleurs égal à faux
définition calcul.type_logement_foyer égal à TypeLogementFoyer.Autre
définition calcul.redevance égal à 350 €
définition calcul.ressources_ménage_arrondies égal à 7 500€
@ -108,6 +115,8 @@ déclaration champ d'application CasTest5 :
résultat montant contenu argent
champ d'application CasTest5:
définition calcul.résidence égal à Métropole
définition calcul.logement_foyer_jeunes_travailleurs égal à faux
définition calcul.date_conventionnement égal à |2020-01-01|
définition calcul.type_logement_foyer égal à
TypeLogementFoyer.RésidenceSociale

View File

@ -22,7 +22,6 @@ champ d'application Exemple1 :
-- situation_familiale: Mariés contenu |2010-11-26|
-- personnes_à_charge: [
EnfantÀCharge contenu (EnfantÀCharge {
-- bénéficie_titre_personnel_aide_personnelle_logement : faux
-- identifiant: 0
-- nationalité: Française
-- a_déjà_ouvert_droit_aux_allocations_familiales: vrai
@ -32,7 +31,6 @@ champ d'application Exemple1 :
-- obligation_scolaire: Après
-- situation_garde_alternée: GardeAlternéeCoefficientPriseEnCharge contenu 0,7
}); EnfantÀCharge contenu (EnfantÀCharge {
-- bénéficie_titre_personnel_aide_personnelle_logement : faux
-- identifiant: 1
-- nationalité: Française
-- études_apprentissage_stage_formation_pro_impossibilité_travail: faux
@ -42,7 +40,6 @@ champ d'application Exemple1 :
-- obligation_scolaire: Pendant
-- situation_garde_alternée: PasDeGardeAlternée
}); EnfantÀCharge contenu (EnfantÀCharge {
-- bénéficie_titre_personnel_aide_personnelle_logement : faux
-- identifiant: 2
-- nationalité: Française
-- études_apprentissage_stage_formation_pro_impossibilité_travail: faux
@ -90,6 +87,73 @@ champ d'application Exemple1 :
définition calculette.ressources_ménage_prises_en_compte égal à 20 000 €
```
```catala
déclaration champ d'application Exemple2 :
calculette champ d'application CalculetteAidesAuLogementGardeAlternée
résultat éligibilité contenu booléen
résultat montant_versé contenu argent
champ d'application Exemple2 :
définition éligibilité égal à calculette.éligibilité
définition montant_versé égal à calculette.aide_finale
définition calculette.date_courante égal à |2023-04-01|
définition calculette.ménage égal à Ménage {
-- prestations_reçues: []
-- situation_familiale: Célibataire
-- personnes_à_charge: [
EnfantÀCharge contenu (EnfantÀCharge {
-- identifiant: 0
-- nationalité: Française
-- a_déjà_ouvert_droit_aux_allocations_familiales: vrai
-- date_de_naissance: |2008-01-01|
-- études_apprentissage_stage_formation_pro_impossibilité_travail: vrai
-- rémuneration_mensuelle: 0€
-- obligation_scolaire: Après
-- situation_garde_alternée: PasDeGardeAlternée
}); EnfantÀCharge contenu (EnfantÀCharge {
-- identifiant: 1
-- nationalité: Française
-- études_apprentissage_stage_formation_pro_impossibilité_travail: faux
-- a_déjà_ouvert_droit_aux_allocations_familiales: vrai
-- date_de_naissance: |2011-01-01|
-- rémuneration_mensuelle: 0€
-- obligation_scolaire: Pendant
-- situation_garde_alternée: PasDeGardeAlternée
})]
-- logement: Logement {
-- zone: Zone2
-- résidence_principale : vrai
-- mode_occupation : Locataire contenu (Location {
-- loyer_principal: 500 €
-- bénéficiaire_aide_adulte_ou_enfant_handicapés: faux
-- logement_est_chambre: faux
-- colocation: faux
-- âgées_ou_handicap_adultes_hébergées_onéreux_particuliers: faux
-- logement_meublé_d842_2: faux
-- changement_logement_d842_4: PasDeChangement
-- bailleur: BailleurPrivé
})
-- propriétaire : ParentOuAutre.Autre
-- loué_ou_sous_loué_à_des_tiers : LouéOuSousLouéÀDesTiers.Non
-- usufruit : ParentOuAutre.Autre
-- logement_decent_l89_462 : vrai
-- surface_m_carrés : 60
}
-- nombre_autres_occupants_logement: 0
-- condition_rattaché_foyer_fiscal_parent_ifi: faux
-- enfant_à_naître_après_quatrième_mois_grossesse: faux
-- personnes_âgées_handicapées_foyer_r844_4: faux
-- résidence : SaintPierreEtMiquelon
}
définition calculette.demandeur égal à Demandeur {
-- est_non_salarié_agricole_l781_8_l_781_46_code_rural: faux
-- magistrat_fonctionnaire_centre_intérêts_matériels_familiaux_hors_mayotte: faux
-- personne_hébergée_centre_soin_l_L162_22_3_sécurité_sociale: faux
-- date_naissance : |1970-05-02|
-- nationalité : Française
}
définition calculette.ressources_ménage_prises_en_compte égal à 12 500 €
```
```catala-test-inline
$ catala Interpret -s Exemple1
@ -103,3 +167,17 @@ $ catala Interpret_Lcalc -s Exemple1 --avoid_exceptions
[RESULT] montant_versé = ESome 246.23 €
[RESULT] éligibilité = ESome true
```
```catala-test-inline
$ catala Interpret -s Exemple2
[RESULT] Computation successful! Results:
[RESULT] montant_versé = 230.63 €
[RESULT] éligibilité = true
```
```catala-test-inline
$ catala Interpret -s Exemple2 --avoid_exceptions
[RESULT] Computation successful! Results:
[RESULT] montant_versé = 230.63 €
[RESULT] éligibilité = true
```

View File

@ -21,7 +21,6 @@ champ d'application Exemple1 :
-- situation_familiale: Mariés contenu |2010-11-26|
-- personnes_à_charge: [
EnfantÀCharge contenu (EnfantÀCharge {
-- bénéficie_titre_personnel_aide_personnelle_logement : faux
-- nationalité: Française
-- identifiant: 0
-- études_apprentissage_stage_formation_pro_impossibilité_travail: vrai
@ -31,7 +30,6 @@ champ d'application Exemple1 :
-- obligation_scolaire: Après
-- situation_garde_alternée: PasDeGardeAlternée
}); EnfantÀCharge contenu (EnfantÀCharge {
-- bénéficie_titre_personnel_aide_personnelle_logement : faux
-- nationalité: Française
-- identifiant: 1
-- a_déjà_ouvert_droit_aux_allocations_familiales: vrai
@ -41,7 +39,6 @@ champ d'application Exemple1 :
-- obligation_scolaire: Pendant
-- situation_garde_alternée: PasDeGardeAlternée
}); EnfantÀCharge contenu (EnfantÀCharge {
-- bénéficie_titre_personnel_aide_personnelle_logement : faux
-- nationalité: Française
-- identifiant: 2
-- études_apprentissage_stage_formation_pro_impossibilité_travail: faux
@ -102,7 +99,6 @@ champ d'application Exemple2 :
-- situation_familiale: Concubins
-- personnes_à_charge: [
EnfantÀCharge contenu (EnfantÀCharge {
-- bénéficie_titre_personnel_aide_personnelle_logement : faux
-- identifiant: 0
-- nationalité: Française
-- études_apprentissage_stage_formation_pro_impossibilité_travail: faux
@ -113,7 +109,6 @@ champ d'application Exemple2 :
-- situation_garde_alternée: PasDeGardeAlternée
}); EnfantÀCharge contenu (EnfantÀCharge {
-- nationalité: Française
-- bénéficie_titre_personnel_aide_personnelle_logement : faux
-- études_apprentissage_stage_formation_pro_impossibilité_travail: faux
-- identifiant: 1
-- a_déjà_ouvert_droit_aux_allocations_familiales: vrai
@ -158,95 +153,63 @@ champ d'application Exemple2 :
}
définition éligibilité.bénéficie_aide_personnalisée_logement égal à faux
déclaration champ d'application Exemple3 :
éligibilité champ d'application ÉligibilitéAllocationLogement
résultat éligible contenu TypeÉligibilitéAllocationLogement
# déclaration champ d'application Exemple2 :
# éligibilité champ d'application ÉligibilitéAidesPersonnelleLogement
# résultat éligible contenu booléen
# champ d'application Exemple2 :
# définition éligible égal à éligibilité.éligibilité
# assertion non éligible
# définition éligibilité.date_ouverture_droits égal à |2020-03-10|
# définition éligibilité.ménage égal à Ménage {
# -- prestations_reçues: []
# -- situation_familiale: Concubins
# -- personnes_à_charge: []
# -- logement: Logement {
# -- résidence_principale : vrai
# -- est_ehpad_ou_maison_autonomie_l313_12_asf : faux
# -- mode_occupation : Locataire contenu (Location {
# -- bailleur: Bailleur {
# -- type_bailleur: BailleurPrivé
# -- respecte_convention_titre_V: vrai
# -- respecte_convention_titre_II: vrai
# -- construit_amélioré_conditions_l831_1_4: faux
# -- acquisition_aides_état_prêt_titre_II_ou_livre_III: faux
# }
# })
# -- propriétaire : ParentOuAutre.Autre
# -- loué_ou_sous_loué_à_des_tiers : LouéOuSousLouéÀDesTiers.Non
# -- usufruit : ParentOuAutre.Autre
# -- logement_decent_l89_462 : vrai
# -- surface_m_carrés : 25
# }
# -- nombre_autres_occupants_logement: 0
# -- condition_rattaché_foyer_fiscal_parent_ifi: vrai
# }
# définition éligibilité.demandeur égal à Demandeur {
# -- age_demandeur : 22
# -- date_naissance : |2000-01-03|
# -- nationalité : Française
# -- patrimoine : Patrimoine {
# # D'après le R822_3_3, la periode est annuelle.
# -- produisant_revenu_période_r822_3_3_r822_4: 7800€
# -- ne_produisant_pas_revenu_période_r822_3_3_r822_4: 0€
# }
# }
# déclaration champ d'application Exemple3 :
# éligibilité champ d'application ÉligibilitéAidesPersonnelleLogement
# résultat éligible contenu booléen
# champ d'application Exemple3 :
# définition éligible égal à éligibilité.éligibilité
# assertion éligible
# définition éligibilité.date_ouverture_droits égal à |2020-03-10|
# définition éligibilité.ménage égal à Ménage {
# -- prestations_reçues: []
# -- situation_familiale: Concubins
# -- personnes_à_charge: []
# -- logement: Logement {
# -- résidence_principale : vrai
# -- est_ehpad_ou_maison_autonomie_l313_12_asf : faux
# -- mode_occupation : Locataire contenu (Location {
# -- bailleur: Bailleur {
# -- type_bailleur: BailleurPrivé
# -- respecte_convention_titre_V: vrai
# -- respecte_convention_titre_II: vrai
# -- construit_amélioré_conditions_l831_1_4: faux
# -- acquisition_aides_état_prêt_titre_II_ou_livre_III: faux
# }
# })
# -- propriétaire : ParentOuAutre.Autre
# -- loué_ou_sous_loué_à_des_tiers : LouéOuSousLouéÀDesTiers.Non
# -- usufruit : ParentOuAutre.Autre
# -- logement_decent_l89_462 : vrai
# -- surface_m_carrés : 25
# }
# -- nombre_autres_occupants_logement: 0
# -- condition_rattaché_foyer_fiscal_parent_ifi: faux
# }
# définition éligibilité.demandeur égal à Demandeur {
# -- age_demandeur : 22
# -- date_naissance : |2000-01-03|
# -- nationalité : Française
# -- patrimoine : Patrimoine {
# # D'après le R822_3_3, la periode est annuelle.
# -- produisant_revenu_période_r822_3_3_r822_4: 7800€
# -- ne_produisant_pas_revenu_période_r822_3_3_r822_4: 0€
# }
# }
champ d'application Exemple3 :
définition éligible égal à éligibilité.éligibilité
assertion éligible = TypeÉligibilitéAllocationLogement.AllocationLogementFamiliale
définition éligibilité.date_courante égal à |2023-04-01|
définition éligibilité.ménage égal à Ménage {
-- résidence: LaRéunion
-- prestations_reçues: [
PrestationReçue.AllocationsFamiliales
]
-- situation_familiale: Concubins
-- personnes_à_charge: [
EnfantÀCharge contenu (EnfantÀCharge {
-- identifiant: 0
-- nationalité: Française
-- études_apprentissage_stage_formation_pro_impossibilité_travail: faux
-- a_déjà_ouvert_droit_aux_allocations_familiales: vrai
-- date_de_naissance: |2016-01-01|
-- rémuneration_mensuelle: 0€
-- obligation_scolaire: Pendant
-- situation_garde_alternée: PasDeGardeAlternée
})]
-- logement: Logement {
-- zone: Zone2
-- résidence_principale : vrai
-- mode_occupation : Locataire contenu (Location {
-- bailleur: BailleurPrivé
-- loyer_principal: 375 €
-- bénéficiaire_aide_adulte_ou_enfant_handicapés: faux
-- logement_est_chambre: faux
-- colocation: faux
-- âgées_ou_handicap_adultes_hébergées_onéreux_particuliers: faux
-- logement_meublé_d842_2: faux
-- changement_logement_d842_4: PasDeChangement
})
-- propriétaire : ParentOuAutre.Autre
-- loué_ou_sous_loué_à_des_tiers : LouéOuSousLouéÀDesTiers.Non
-- usufruit : ParentOuAutre.Autre
-- logement_decent_l89_462 : vrai
-- surface_m_carrés : 60
}
-- nombre_autres_occupants_logement: 0
-- condition_rattaché_foyer_fiscal_parent_ifi: faux
-- enfant_à_naître_après_quatrième_mois_grossesse: faux
-- personnes_âgées_handicapées_foyer_r844_4: faux
}
définition éligibilité.demandeur égal à Demandeur {
-- est_non_salarié_agricole_l781_8_l_781_46_code_rural: faux
-- magistrat_fonctionnaire_centre_intérêts_matériels_familiaux_hors_mayotte: faux
-- date_naissance : |1992-01-01|
-- nationalité : Française
-- personne_hébergée_centre_soin_l_L162_22_3_sécurité_sociale: faux
}
définition éligibilité.bénéficie_aide_personnalisée_logement égal à faux
```
```catala-test-inline
@ -255,12 +218,40 @@ $ catala Interpret -s Exemple1 --disable_warnings
[RESULT] éligible = true
```
```catala-test-inline
$ catala Typecheck
[RESULT] Typechecking successful!
```
```catala-test-inline
$ catala Interpret_Lcalc -s Exemple1 --avoid_exceptions
[RESULT] Computation successful! Results:
[RESULT] éligible = ESome true
```
```catala-test-inline
$ catala Interpret -s Exemple2 --disable_warnings
[RESULT] Computation successful! Results:
[RESULT] éligible = AllocationLogementFamiliale ()
```
```catala-test-inline
$ catala Interpret_Lcalc -s Exemple2 --avoid_exceptions
[RESULT] Computation successful! Results:
[RESULT] éligible = ESome AllocationLogementFamiliale ()
```
```catala-test-inline
$ catala Interpret -s Exemple3 --disable_warnings
[RESULT] Computation successful! Results:
[RESULT] éligible = AllocationLogementFamiliale ()
```
```catala-test-inline
$ catala Interpret_Lcalc -s Exemple3 --avoid_exceptions
[RESULT] Computation successful! Results:
[RESULT] éligible = ESome AllocationLogementFamiliale ()
```
```catala-test-inline
$ catala Typecheck
[RESULT] Typechecking successful!
```

View File

@ -200,7 +200,9 @@ champ d'application AllocationsFamiliales :
) sinon 0 €
```
### Annexe|LEGIARTI000036326574
### Annexe | LEGIARTI000036326574
ANNEXE
TABLEAU D'ÉVOLUTION DES TAUX SERVANT AU CALCUL DES ALLOCATIONS FAMILIALES
APPLICABLES DANS LE DÉPARTEMENT DE MAYOTTE POUR LA PÉRIODE DU 1ER JANVIER

View File

@ -133,3 +133,8 @@ champ d'application InterfaceAllocationsFamiliales:
}
pour enfant parmi i_enfants)
```
NOTA :
Conformément à l'article 63 de la loi n° 2019-791 du 26 juillet 2019, ces
dispositions entrent en vigueur à la rentrée scolaire 2019.

View File

@ -142,6 +142,7 @@ déclaration champ d'application AllocationsFamiliales:
interne âge_minimum_alinéa_1_l521_3 contenu durée
dépend de enfant contenu Enfant
interne nombre_enfants_alinéa_2_l521_3 contenu entier
interne nombre_enfants_alinéa_2_l521_1 contenu entier
interne est_enfant_le_plus_âgé contenu booléen
dépend de enfant contenu Enfant
interne plafond_I_d521_3 contenu argent

View File

@ -291,10 +291,10 @@ l'article L. 521-1 est fixé à trois.
```catala
champ d'application AllocationsFamiliales :
définition nombre_enfants_alinéa_2_l521_3 égal à 3
définition nombre_enfants_alinéa_2_l521_1 égal à 3
```
####### Article D521-3|LEGIARTI000030678079
####### Article D521-3|LEGIARTI000044809227
I.-Le plafond prévu au 1° du I des articles D. 521-1 et D. 521-2 est fixé à
55 950 euros. Il est majoré de 5 595 euros par enfant à charge.
@ -319,8 +319,7 @@ champ d'application AllocationsFamiliales :
III.-Les montants des plafonds et de leur majoration respective fixés au présent
article sont revalorisés au 1er janvier de chaque année, conformément à
l'évolution en moyenne annuelle des prix à la consommation hors tabac de
l'année civile de référence, par arrêté des ministres chargés de la sécurité
sociale, du budget et de l'agriculture.
l'année civile de référence.
```catala
# Nota : ces montants sont en réalités remis à jour chaque année par des
@ -335,17 +334,17 @@ sociale, du budget et de l'agriculture.
####### Article D755-5|LEGIARTI000006738575
I. - Les taux servant au calcul des allocations familiales et de la majoration
I.-Les taux servant au calcul des allocations familiales et de la majoration
prévue à l'article L. 755-11 sont identiques à ceux mentionnés à l'article
D. 521-1.
D. 521-1 .
```catala
# Pas de changement à déclarer
```
II. - En application de l'article L. 755-11, 2e alinéa, le taux servant au
II.-En application de l'article L. 755-11, 2e alinéa, le taux servant au
calcul des allocations familiales servies pour un seul enfant à charge est
fixé à 5,88 p. 100 de la base mensuelle prévue à l'article L. 755-3.
fixé à 5,88 p. 100 de la base mensuelle prévue à l'article L. 755-3 .
```catala
# Composantes des allocations familiales
@ -367,7 +366,7 @@ champ d'application AllocationsFamiliales :
conséquence égal à
bmaf.montant * 5,88 %
```
informatique
La majoration des allocations familiales pour un seul enfant à charge est
fixée à 3,69 p. 100 de la base mensuelle prévue à l'article L. 755-3 à
partir de onze ans et à 5,67 p. 100 à partir de seize ans.

View File

@ -8,7 +8,7 @@
##### Chapitre 1er : Liste des prestations
###### Article L511-1|LEGIARTI000038834530
###### Article L511-1 | LEGIARTI000041979747
Les prestations familiales comprennent :
@ -26,17 +26,22 @@ Les prestations familiales comprennent :
7°) l'allocation de rentrée scolaire ;
8°) (Abrogé) ;
8°) L'allocation forfaitaire versée en cas de décès d'un enfant ;
9°) l'allocation journalière de présence parentale.
```catala
# Voir l'énumération ÉlémentPrestationsFamiliale
```
NOTA :
Conformément au IV de larticle 5 de la loi n° 2020-692 du 8 juin 2020,
ces dispositions entrent en vigueur à une date fixée par décret, et au plus
tard à compter du 1er janvier 2022, au titre des enfants dont le décès
intervient à compter de cette date. Se reporter aux dispositions du V du même
article en ce qui concerne le versement d'une l'allocation forfaitaire
transitoire.
##### Chapitre 2 : Champ d'application
###### Article L512-3|LEGIARTI000038834523
###### Article L512-3|LEGIARTI000041979743
Sous réserve des règles particulières à chaque prestation,
ouvre droit aux prestations familiales :
@ -87,6 +92,19 @@ peut être différent de celui mentionné au 2° du présent article.
# cet âge autre part que pour Complément Familial ou AllocationLogement.
```
Pour l'attribution de l'allocation forfaitaire versée en cas de décès d'un
enfant prévue à l'article L. 545-1, l'âge limite retenu peut être différent de
celui fixé en application du 2° du présent article et la condition relative à
la rémunération de l'enfant n'est pas exigée.
NOTA :
Conformément au IV de larticle 5 de la loi n° 2020-692 du 8 juin 2020, ces
dispositions entrent en vigueur à une date fixée par décret, et au plus tard à
compter du 1er janvier 2022, au titre des enfants dont le décès intervient à
compter de cette date. Se reporter aux dispositions du V du même article en ce
qui concerne le versement d'une l'allocation forfaitaire transitoire.
#### Titre 2 : Prestations générales d'entretien
##### Chapitre 1er : Allocations familiales
@ -116,7 +134,7 @@ champ d'application AllocationsFamiliales :
règle droit_ouvert_forfaitaire de enfant sous condition
# nombre_enfants_alinéa_2_l521_3 sera défini dans l'article R521-3
(nombre de enfants_à_charge >= nombre_enfants_alinéa_2_l521_3) et
(nombre de enfants_à_charge >= nombre_enfants_alinéa_2_l521_1) et
# 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.
@ -174,7 +192,7 @@ champ d'application AllocationsFamiliales :
assertion fixé montant_versé_complément par décret
```
###### Article L521-2|LEGIARTI000006743210
###### Article L521-2|LEGIARTI000039099826
Les allocations sont versées à la personne qui assume, dans quelques conditions
que ce soit, la charge effective et permanente de l'enfant.
@ -240,13 +258,12 @@ allocations familiales continuent d'être évaluées en tenant compte à la fois
des enfants présents au foyer et du ou des enfants confiés au service de
l'aide sociale à l'enfance. La part des allocations familiales dues à la
famille pour cet enfant est versée à ce service. Toutefois, le juge peut
décider, d'office ou sur saisine du président du conseil général, à la
suite d'une mesure prise en application des articles 375-3 et 375-5 du code
civil ou des articles 15,16,16 bis et 28 de l' ordonnance n° 45-174 du 2
février 1945 relative à l'enfance délinquante, de maintenir le versement
des allocations à la famille, lorsque celle-ci participe à la prise en
charge morale ou matérielle de l'enfant ou en vue de faciliter le retour
de l'enfant dans son foyer.
décider, d'office ou sur saisine du président du conseil général, à la suite
d'une mesure prise en application des articles 375-3 et 375-5 du code civil ou
à l'article L. 323-1 du code de la justice pénale des mineurs, de maintenir le
versement des allocations à la famille, lorsque celle-ci participe à la prise
en charge morale ou matérielle de l'enfant ou en vue de faciliter le retour de
l'enfant dans son foyer.
```catala
champ d'application AllocationsFamiliales :
@ -288,6 +305,14 @@ d) enfants confiés à un service public, à une institution privée, à un part
# est confié à un service social.
```
NOTA :
Se reporter aux conditions d'application prévues à l'article 10 de
l'ordonnance n° 2019-950 du 11 septembre 2019. Conformément à l'article 25 de
la loi n°2020-734, l'ordonnance n°2019-950 entre en vigueur le 31 mars 2021.
Cette date a été reportée au 30 septembre 2021 par l'article 2 de la loi n°
2021-218 du 26 février 2021.
###### Article L521-3|LEGIARTI000006743289
Chacun des enfants à charge, à l'exception du plus âgé, ouvre droit à partir
@ -365,11 +390,12 @@ champ d'application PrestationsFamiliales :
##### Chapitre 5 : Prestations familiales et prestations assimilées
###### Article L755-3|LEGIARTI000033728786
###### Article L755-3|LEGIARTI000041979722
Les dispositions des articles L. 512-1 à L. 512-4 , L. 513-1 , L. 521-2 ,
L. 552-1 , L. 553-1 , L. 553-2 , L. 553-4 , L. 582-1 , L. 582-2 , L. 583-3
et L. 583-5 sont applicables aux collectivités mentionnées à l'article L. 751-1 .
Les dispositions des articles L. 512-1 à L. 512-4 , L. 513-1 , L. 521-2 , L.
552-1 , L. 552-7 , L. 553-1 , L. 553-2 , L. 553-4 , L. 582-1 , L. 582-2 , L.
583-3 et L. 583-5 sont applicables aux collectivités mentionnées à l'article
L. 751-1 .
La base de calcul des prestations familiales est la même que celle qui est
fixée en application de l'article L. 551-1 .
@ -378,11 +404,18 @@ fixée en application de l'article L. 551-1 .
# Aucun changement dans le code, puisque les articles restent applicables
```
NOTA :
Conformément au IV de larticle 4 de la loi n° 2020-692 du 8 juin 2020, ces
dispositions entrent en vigueur à une date fixée par décret, et au plus tard
le 1er janvier 2022, pour les décès intervenant à compter de cette date.
###### Article L755-11|LEGIARTI000031323803
Les conditions d'attribution des allocations familiales et de leurs majorations
fixées par les articles L. 521-1 et L. 521-3 sont applicables dans les
collectivités mentionnées à l'article L. 751-1.
collectivités mentionnées à l'article L. 751-1 .
```catala
# Aucun changement dans le code, puisque les articles restent applicables

View File

@ -83,6 +83,26 @@ 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|
date_courante >= |2022-04-01| et
date_courante < |2023-04-01|
conséquence égal à 422,28 €
```
## Instruction interministérielle N° DSS/2B/2023/41 du 24 mars 2023 relative à la revalorisation au 1er avril 2023 des prestations familiales servies en métropole, en Guadeloupe, en Guyane, en Martinique, à la Réunion, à Saint-Barthélemy, à Saint-Martin et dans le département de Mayotte
Au 1er avril 2023, le coefficient de revalorisation de la base mensuelle des
allocations familiales (BMAF) mentionné à larticle L. 551-1 du code de la
sécurité sociale1 est fixé à 1,056 soit un taux de revalorisation de la BMAF
de 5,6 %, déduction faite de la revalorisation anticipée de 4% entrée en
vigueur en juillet 2022 et introduite par larticle 9 de la loi n° 2022- 1158
du 16 août 2022 portant mesures d'urgence pour la protection du pouvoir
d'achat. Le montant de cette base mensuelle, en pourcentage duquel sont fixées
les prestations familiales, est donc porté à 445,93 €.
```catala
champ d'application BaseMensuelleAllocationsFamiliales :
définition montant
sous condition
date_courante >= |2023-04-01|
conséquence égal à 445,93 €
```

View File

@ -16,7 +16,6 @@ déclaration structure EnfantPrestationsFamiliales :
donnée rémuneration_mensuelle contenu argent
donnée date_de_naissance contenu date
donnée a_déjà_ouvert_droit_aux_allocations_familiales contenu booléen
donnée bénéficie_titre_personnel_aide_personnelle_logement contenu booléen
déclaration champ d'application ÉligibilitéPrestationsFamiliales:
entrée date_courante contenu date

View File

@ -37,10 +37,6 @@ intervient à compter de cette date. Se reporter aux dispositions du V du
même article en ce qui concerne le versement d'une l'allocation forfaitaire
transitoire.
```catala
# Voir l'énumération ÉlémentPrestationsFamiliale
```
##### Chapitre 2 : Champ d'application
###### Article L512-3 | LEGIARTI000041979743

View File

@ -16,7 +16,6 @@ champ d'application Données:
-- date_de_naissance: |2007-01-01|
-- rémuneration_mensuelle: 0€
-- a_déjà_ouvert_droit_aux_allocations_familiales: vrai
-- bénéficie_titre_personnel_aide_personnelle_logement: faux
}
définition enfant2 égal à EnfantPrestationsFamiliales {
-- identifiant: 2
@ -24,7 +23,6 @@ champ d'application Données:
-- date_de_naissance: |2003-01-01|
-- rémuneration_mensuelle: 1000€
-- a_déjà_ouvert_droit_aux_allocations_familiales: vrai
-- bénéficie_titre_personnel_aide_personnelle_logement: faux
}
définition enfant3 égal à EnfantPrestationsFamiliales {
-- identifiant: 3
@ -32,7 +30,6 @@ champ d'application Données:
-- date_de_naissance: |2003-01-01|
-- rémuneration_mensuelle: 400€
-- a_déjà_ouvert_droit_aux_allocations_familiales: vrai
-- bénéficie_titre_personnel_aide_personnelle_logement: faux
}
définition enfant4 égal à EnfantPrestationsFamiliales {
-- identifiant: 4
@ -40,7 +37,6 @@ champ d'application Données:
-- date_de_naissance: |1999-01-01|
-- rémuneration_mensuelle: 0€
-- a_déjà_ouvert_droit_aux_allocations_familiales: vrai
-- bénéficie_titre_personnel_aide_personnelle_logement: faux
}
déclaration champ d'application Test1:

View File

@ -288,7 +288,7 @@ let driver_lwt
Lwt.return 0
with Errors.StructuredError (msg, pos) ->
let bt = Printexc.get_raw_backtrace () in
Cli.error_print "%s" (Errors.print_structured_error msg pos);
Errors.print_structured_error msg pos;
if Printexc.backtrace_status () then Printexc.print_raw_backtrace stderr bt;
Lwt.return (-1)
@ -298,7 +298,7 @@ let driver file debug diff expiration custom_date client_id client_secret =
(driver_lwt file debug diff expiration custom_date client_id client_secret)
with Errors.StructuredError (msg, pos) ->
let bt = Printexc.get_raw_backtrace () in
Cli.error_print "%s" (Errors.print_structured_error msg pos);
Errors.print_structured_error msg pos;
if Printexc.backtrace_status () then Printexc.print_raw_backtrace stderr bt;
-1

View File

@ -94,7 +94,6 @@ function run_computation_AL(log) {
{
"kind": "EnfantACharge",
"payload": {
"beneficieTitrePersonnelAidePersonnelleLogement": false,
"aDejaOuvertDroitAuxAllocationsFamiliales": true,
"remunerationMensuelle": 0,
"nationalite": {
@ -117,7 +116,6 @@ function run_computation_AL(log) {
{
"kind": "EnfantACharge",
"payload": {
"beneficieTitrePersonnelAidePersonnelleLogement": false,
"aDejaOuvertDroitAuxAllocationsFamiliales": true,
"remunerationMensuelle": 0,
"nationalite": {

93288
french_law/js/french_law.js generated

File diff suppressed because one or more lines are too long

View File

@ -155,7 +155,6 @@ let aides_logement_input :
[
Law_source.Aides_logement.PersonneACharge.EnfantACharge
{
beneficie_titre_personnel_aide_personnelle_logement = false;
a_deja_ouvert_droit_aux_allocations_familiales = true;
nationalite =
Law_source.Aides_logement.Nationalite.Francaise ();
@ -175,7 +174,6 @@ let aides_logement_input :
};
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 =

File diff suppressed because it is too large Load Diff

View File

@ -851,7 +851,7 @@ class type type_logement_foyer =
(** Expects one of:
- "LogementPersonnesAgeesOuHandicapees"
- "ResidenceSociale"
- "FoyerJeunesTrvailleursOuMigrantsConventionneL353_2Avant1995"
- "FoyerJeunesTravailleursOuMigrantsConventionneL353_2Avant1995"
- "Autre" *)
method payload : Js.Unsafe.any Js.t Js.readonly_prop
@ -868,8 +868,8 @@ let type_logement_foyer_to_jsoo
val kind = Js.string "ResidenceSociale"
val payload = Js.Unsafe.coerce (Js.Unsafe.inject ( arg))
end
| FoyerJeunesTrvailleursOuMigrantsConventionneL353_2Avant1995 arg -> object%js
val kind = Js.string "FoyerJeunesTrvailleursOuMigrantsConventionneL353_2Avant1995"
| FoyerJeunesTravailleursOuMigrantsConventionneL353_2Avant1995 arg -> object%js
val kind = Js.string "FoyerJeunesTravailleursOuMigrantsConventionneL353_2Avant1995"
val payload = Js.Unsafe.coerce (Js.Unsafe.inject ( arg))
end
| Autre arg -> object%js
@ -883,8 +883,8 @@ let type_logement_foyer_of_jsoo
| "LogementPersonnesAgeesOuHandicapees" ->
TypeLogementFoyer.LogementPersonnesAgeesOuHandicapees ()
| "ResidenceSociale" -> TypeLogementFoyer.ResidenceSociale ()
| "FoyerJeunesTrvailleursOuMigrantsConventionneL353_2Avant1995" ->
TypeLogementFoyer.FoyerJeunesTrvailleursOuMigrantsConventionneL353_2Avant1995 ()
| "FoyerJeunesTravailleursOuMigrantsConventionneL353_2Avant1995" ->
TypeLogementFoyer.FoyerJeunesTravailleursOuMigrantsConventionneL353_2Avant1995 ()
| "Autre" -> TypeLogementFoyer.Autre ()
| cons ->
failwith
@ -1626,6 +1626,11 @@ class type calcul_allocation_logement_locatif =
method aideFinaleFormule: Js.number Js.t Js.readonly_prop
method traitementAideFinale:
(unit, Js.number Js.t -> Js.number Js.t) Js.meth_callback Js.meth
method montantForfaitaireChargesD82316: Js.number Js.t Js.readonly_prop
method plafondLoyerD823162: Js.number Js.t Js.readonly_prop
method participationMinimale: Js.number Js.t Js.readonly_prop
method tauxCompositionFamiliale: Js.number Js.t Js.readonly_prop
method participationPersonnelle: Js.number Js.t Js.readonly_prop
end
let calcul_allocation_logement_locatif_to_jsoo
(calcul_allocation_logement_locatif : CalculAllocationLogementLocatif.t)
@ -1639,6 +1644,16 @@ class type calcul_allocation_logement_locatif =
Js.number_of_float @@ money_to_float (calcul_allocation_logement_locatif.traitement_aide_finale
(money_of_decimal @@ decimal_of_float @@ Js.float_of_number
function_input0)))
val montantForfaitaireChargesD82316 =
Js.number_of_float @@ money_to_float calcul_allocation_logement_locatif.montant_forfaitaire_charges_d823_16
val plafondLoyerD823162 =
Js.number_of_float @@ money_to_float calcul_allocation_logement_locatif.plafond_loyer_d823_16_2
val participationMinimale =
Js.number_of_float @@ money_to_float calcul_allocation_logement_locatif.participation_minimale
val tauxCompositionFamiliale =
Js.number_of_float @@ decimal_to_float calcul_allocation_logement_locatif.taux_composition_familiale
val participationPersonnelle =
Js.number_of_float @@ money_to_float calcul_allocation_logement_locatif.participation_personnelle
end
let calcul_allocation_logement_locatif_of_jsoo
(calcul_allocation_logement_locatif
@ -1648,7 +1663,23 @@ class type calcul_allocation_logement_locatif =
aide_finale_formule =
money_of_decimal @@ decimal_of_float @@ Js.float_of_number
calcul_allocation_logement_locatif##.aideFinaleFormule;
traitement_aide_finale = failwith "The function 'traitement_aide_finale' translation isn't yet supported..."
traitement_aide_finale = failwith "The function 'traitement_aide_finale' translation isn't yet supported...";
montant_forfaitaire_charges_d823_16 =
money_of_decimal @@ decimal_of_float @@ Js.float_of_number
calcul_allocation_logement_locatif
##.montantForfaitaireChargesD82316;
plafond_loyer_d823_16_2 =
money_of_decimal @@ decimal_of_float @@ Js.float_of_number
calcul_allocation_logement_locatif##.plafondLoyerD823162;
participation_minimale =
money_of_decimal @@ decimal_of_float @@ Js.float_of_number
calcul_allocation_logement_locatif##.participationMinimale;
taux_composition_familiale =
decimal_of_float @@ Js.float_of_number
calcul_allocation_logement_locatif##.tauxCompositionFamiliale;
participation_personnelle =
money_of_decimal @@ decimal_of_float @@ Js.float_of_number
calcul_allocation_logement_locatif##.participationPersonnelle
}
class type calcul_allocation_logement_accession_propriete =
@ -2194,6 +2225,7 @@ class type pret =
class type logement_foyer =
object
method typeUser: type_logement_foyer Js.t Js.readonly_prop
method logementFoyerJeunesTravailleurs: bool Js.t Js.readonly_prop
method remplitConditionsR83221: bool Js.t Js.readonly_prop
method conventionneLivreIIITitreVChapIII: bool Js.t Js.readonly_prop
method conventionneSelonReglesDrom: bool Js.t Js.readonly_prop
@ -2205,11 +2237,15 @@ class type logement_foyer =
method beneficiaireAideAdulteOuEnfantHandicapes:
bool Js.t Js.readonly_prop
method logementMeubleD8422: bool Js.t Js.readonly_prop
method logementEstChambre: bool Js.t Js.readonly_prop
method colocation: bool Js.t Js.readonly_prop
end
let logement_foyer_to_jsoo (logement_foyer : LogementFoyer.t)
: logement_foyer Js.t =
object%js
val typeUser = type_logement_foyer_to_jsoo logement_foyer.type_user
val logementFoyerJeunesTravailleurs =
Js.bool logement_foyer.logement_foyer_jeunes_travailleurs
val remplitConditionsR83221 =
Js.bool logement_foyer.remplit_conditions_r832_21
val conventionneLivreIIITitreVChapIII =
@ -2227,11 +2263,15 @@ class type logement_foyer =
val beneficiaireAideAdulteOuEnfantHandicapes =
Js.bool logement_foyer.beneficiaire_aide_adulte_ou_enfant_handicapes
val logementMeubleD8422 = Js.bool logement_foyer.logement_meuble_d842_2
val logementEstChambre = Js.bool logement_foyer.logement_est_chambre
val colocation = Js.bool logement_foyer.colocation
end
let logement_foyer_of_jsoo (logement_foyer : logement_foyer Js.t) :
LogementFoyer.t =
{
type_user = type_logement_foyer_of_jsoo logement_foyer##.typeUser;
logement_foyer_jeunes_travailleurs =
Js.to_bool logement_foyer##.logementFoyerJeunesTravailleurs;
remplit_conditions_r832_21 =
Js.to_bool logement_foyer##.remplitConditionsR83221;
conventionne_livre_III_titre_V_chap_III =
@ -2251,7 +2291,9 @@ class type logement_foyer =
beneficiaire_aide_adulte_ou_enfant_handicapes =
Js.to_bool logement_foyer##.beneficiaireAideAdulteOuEnfantHandicapes;
logement_meuble_d842_2 =
Js.to_bool logement_foyer##.logementMeubleD8422
Js.to_bool logement_foyer##.logementMeubleD8422;
logement_est_chambre = Js.to_bool logement_foyer##.logementEstChambre;
colocation = Js.to_bool logement_foyer##.colocation
}
class type enfant_prestations_familiales =
@ -2263,8 +2305,6 @@ class type enfant_prestations_familiales =
method dateDeNaissance: Js.js_string Js.t Js.readonly_prop
method aDejaOuvertDroitAuxAllocationsFamiliales:
bool Js.t Js.readonly_prop
method beneficieTitrePersonnelAidePersonnelleLogement:
bool Js.t Js.readonly_prop
end
let enfant_prestations_familiales_to_jsoo (enfant_prestations_familiales
: EnfantPrestationsFamiliales.t) : enfant_prestations_familiales Js.t =
@ -2279,8 +2319,6 @@ class type enfant_prestations_familiales =
date_to_jsoo enfant_prestations_familiales.date_de_naissance
val aDejaOuvertDroitAuxAllocationsFamiliales =
Js.bool enfant_prestations_familiales.a_deja_ouvert_droit_aux_allocations_familiales
val beneficieTitrePersonnelAidePersonnelleLogement =
Js.bool enfant_prestations_familiales.beneficie_titre_personnel_aide_personnelle_logement
end
let enfant_prestations_familiales_of_jsoo
(enfant_prestations_familiales : enfant_prestations_familiales Js.t) :
@ -2298,11 +2336,7 @@ class type enfant_prestations_familiales =
a_deja_ouvert_droit_aux_allocations_familiales =
Js.to_bool
enfant_prestations_familiales
##.aDejaOuvertDroitAuxAllocationsFamiliales;
beneficie_titre_personnel_aide_personnelle_logement =
Js.to_bool
enfant_prestations_familiales
##.beneficieTitrePersonnelAidePersonnelleLogement
##.aDejaOuvertDroitAuxAllocationsFamiliales
}
class type type_bailleur =
@ -2635,8 +2669,6 @@ class type enfant_a_charge =
object
method identifiant: int Js.readonly_prop
method nationalite: nationalite Js.t Js.readonly_prop
method beneficieTitrePersonnelAidePersonnelleLogement:
bool Js.t Js.readonly_prop
method aDejaOuvertDroitAuxAllocationsFamiliales:
bool Js.t Js.readonly_prop
method dateDeNaissance: Js.js_string Js.t Js.readonly_prop
@ -2653,8 +2685,6 @@ class type enfant_a_charge =
object%js
val identifiant = integer_to_int enfant_a_charge.identifiant
val nationalite = nationalite_to_jsoo enfant_a_charge.nationalite
val beneficieTitrePersonnelAidePersonnelleLogement =
Js.bool enfant_a_charge.beneficie_titre_personnel_aide_personnelle_logement
val aDejaOuvertDroitAuxAllocationsFamiliales =
Js.bool enfant_a_charge.a_deja_ouvert_droit_aux_allocations_familiales
val dateDeNaissance = date_to_jsoo enfant_a_charge.date_de_naissance
@ -2672,9 +2702,6 @@ class type enfant_a_charge =
{
identifiant = integer_of_int enfant_a_charge##.identifiant;
nationalite = nationalite_of_jsoo enfant_a_charge##.nationalite;
beneficie_titre_personnel_aide_personnelle_logement =
Js.to_bool
enfant_a_charge##.beneficieTitrePersonnelAidePersonnelleLogement;
a_deja_ouvert_droit_aux_allocations_familiales =
Js.to_bool enfant_a_charge##.aDejaOuvertDroitAuxAllocationsFamiliales;
date_de_naissance = date_of_jsoo enfant_a_charge##.dateDeNaissance;
@ -3203,7 +3230,9 @@ class type eligibilite_prime_de_demenagement_in =
}
class type contributions_sociales_aides_personnelle_logement_in =
object method dateCouranteIn: Js.js_string Js.t Js.readonly_prop
object
method dateCouranteIn: Js.js_string Js.t Js.readonly_prop
method lieuIn: collectivite Js.t Js.readonly_prop
end
let contributions_sociales_aides_personnelle_logement_in_to_jsoo
(contributions_sociales_aides_personnelle_logement_in
@ -3212,6 +3241,8 @@ class type contributions_sociales_aides_personnelle_logement_in =
object%js
val dateCouranteIn =
date_to_jsoo contributions_sociales_aides_personnelle_logement_in.date_courante_in
val lieuIn =
collectivite_to_jsoo contributions_sociales_aides_personnelle_logement_in.lieu_in
end
let contributions_sociales_aides_personnelle_logement_in_of_jsoo
(contributions_sociales_aides_personnelle_logement_in
@ -3221,7 +3252,10 @@ class type contributions_sociales_aides_personnelle_logement_in =
date_courante_in =
date_of_jsoo
contributions_sociales_aides_personnelle_logement_in
##.dateCouranteIn
##.dateCouranteIn;
lieu_in =
collectivite_of_jsoo
contributions_sociales_aides_personnelle_logement_in##.lieuIn
}
class type calcul_aide_personnalisee_logement_locatif_in =
@ -3376,6 +3410,7 @@ class type calcul_equivalence_loyer_minimale_in =
class type calcul_nombre_part_logement_foyer_in =
object
method dateCouranteIn: Js.js_string Js.t Js.readonly_prop
method condition2Du83225In: bool Js.t Js.readonly_prop
method nombrePersonnesAChargeIn: int Js.readonly_prop
method situationFamilialeCalculAplIn:
@ -3388,6 +3423,8 @@ class type calcul_nombre_part_logement_foyer_in =
: CalculNombrePartLogementFoyerIn.t)
: calcul_nombre_part_logement_foyer_in Js.t =
object%js
val dateCouranteIn =
date_to_jsoo calcul_nombre_part_logement_foyer_in.date_courante_in
val condition2Du83225In =
Js.bool calcul_nombre_part_logement_foyer_in.condition_2_du_832_25_in
val nombrePersonnesAChargeIn =
@ -3406,6 +3443,8 @@ class type calcul_nombre_part_logement_foyer_in =
: calcul_nombre_part_logement_foyer_in Js.t) :
CalculNombrePartLogementFoyerIn.t =
{
date_courante_in =
date_of_jsoo calcul_nombre_part_logement_foyer_in##.dateCouranteIn;
condition_2_du_832_25_in =
Js.to_bool calcul_nombre_part_logement_foyer_in##.condition2Du83225In;
nombre_personnes_a_charge_in =
@ -3420,6 +3459,8 @@ class type calcul_nombre_part_logement_foyer_in =
class type calcul_aide_personnalisee_logement_foyer_in =
object
method residenceIn: collectivite Js.t Js.readonly_prop
method logementFoyerJeunesTravailleursIn: bool Js.t Js.readonly_prop
method typeLogementFoyerIn: type_logement_foyer Js.t Js.readonly_prop
method dateConventionnementIn: Js.js_string Js.t Js.readonly_prop
method ressourcesMenageArrondiesIn: Js.number Js.t Js.readonly_prop
@ -3441,6 +3482,10 @@ class type calcul_aide_personnalisee_logement_foyer_in =
: CalculAidePersonnaliseeLogementFoyerIn.t)
: calcul_aide_personnalisee_logement_foyer_in Js.t =
object%js
val residenceIn =
collectivite_to_jsoo calcul_aide_personnalisee_logement_foyer_in.residence_in
val logementFoyerJeunesTravailleursIn =
Js.bool calcul_aide_personnalisee_logement_foyer_in.logement_foyer_jeunes_travailleurs_in
val typeLogementFoyerIn =
type_logement_foyer_to_jsoo calcul_aide_personnalisee_logement_foyer_in.type_logement_foyer_in
val dateConventionnementIn =
@ -3481,6 +3526,13 @@ class type calcul_aide_personnalisee_logement_foyer_in =
: calcul_aide_personnalisee_logement_foyer_in Js.t) :
CalculAidePersonnaliseeLogementFoyerIn.t =
{
residence_in =
collectivite_of_jsoo
calcul_aide_personnalisee_logement_foyer_in##.residenceIn;
logement_foyer_jeunes_travailleurs_in =
Js.to_bool
calcul_aide_personnalisee_logement_foyer_in
##.logementFoyerJeunesTravailleursIn;
type_logement_foyer_in =
type_logement_foyer_of_jsoo
calcul_aide_personnalisee_logement_foyer_in##.typeLogementFoyerIn;
@ -3563,6 +3615,7 @@ class type calcul_aide_personnalisee_logement_accession_propriete_in =
method typePretIn: type_pret Js.t Js.readonly_prop
method ancienneteLogementIn: neuf_ou_ancien Js.t Js.readonly_prop
method dateCouranteIn: Js.js_string Js.t Js.readonly_prop
method residenceIn: collectivite Js.t Js.readonly_prop
end
let calcul_aide_personnalisee_logement_accession_propriete_in_to_jsoo
(calcul_aide_personnalisee_logement_accession_propriete_in
@ -3597,6 +3650,8 @@ class type calcul_aide_personnalisee_logement_accession_propriete_in =
neuf_ou_ancien_to_jsoo calcul_aide_personnalisee_logement_accession_propriete_in.anciennete_logement_in
val dateCouranteIn =
date_to_jsoo calcul_aide_personnalisee_logement_accession_propriete_in.date_courante_in
val residenceIn =
collectivite_to_jsoo calcul_aide_personnalisee_logement_accession_propriete_in.residence_in
end
let calcul_aide_personnalisee_logement_accession_propriete_in_of_jsoo
(calcul_aide_personnalisee_logement_accession_propriete_in
@ -3657,7 +3712,11 @@ class type calcul_aide_personnalisee_logement_accession_propriete_in =
date_courante_in =
date_of_jsoo
calcul_aide_personnalisee_logement_accession_propriete_in
##.dateCouranteIn
##.dateCouranteIn;
residence_in =
collectivite_of_jsoo
calcul_aide_personnalisee_logement_accession_propriete_in
##.residenceIn
}
class type calcul_aide_personnalisee_logement_in =
@ -3958,6 +4017,7 @@ class type calcul_allocation_logement_accession_propriete_in =
class type calcul_allocation_logement_foyer_in =
object
method typeLogementFoyerIn: type_logement_foyer Js.t Js.readonly_prop
method logementFoyerJeunesTravailleursIn: bool Js.t Js.readonly_prop
method dateConventionnementIn: Js.js_string Js.t Js.readonly_prop
method residenceIn: collectivite Js.t Js.readonly_prop
method redevanceIn: Js.number Js.t Js.readonly_prop
@ -3976,6 +4036,8 @@ class type calcul_allocation_logement_foyer_in =
object%js
val typeLogementFoyerIn =
type_logement_foyer_to_jsoo calcul_allocation_logement_foyer_in.type_logement_foyer_in
val logementFoyerJeunesTravailleursIn =
Js.bool calcul_allocation_logement_foyer_in.logement_foyer_jeunes_travailleurs_in
val dateConventionnementIn =
date_to_jsoo calcul_allocation_logement_foyer_in.date_conventionnement_in
val residenceIn =
@ -4003,6 +4065,10 @@ class type calcul_allocation_logement_foyer_in =
type_logement_foyer_in =
type_logement_foyer_of_jsoo
calcul_allocation_logement_foyer_in##.typeLogementFoyerIn;
logement_foyer_jeunes_travailleurs_in =
Js.to_bool
calcul_allocation_logement_foyer_in
##.logementFoyerJeunesTravailleursIn;
date_conventionnement_in =
date_of_jsoo
calcul_allocation_logement_foyer_in##.dateConventionnementIn;
@ -4450,15 +4516,6 @@ let smic (smic_in : smic_in Js.t)
smic_in |> smic_in_of_jsoo |> smic |> smic_to_jsoo
let calcul_aide_personnalisee_logement_locatif
(calcul_aide_personnalisee_logement_locatif_in : calcul_aide_personnalisee_logement_locatif_in Js.t)
: calcul_aide_personnalisee_logement_locatif Js.t =
calcul_aide_personnalisee_logement_locatif_in
|> calcul_aide_personnalisee_logement_locatif_in_of_jsoo
|> calcul_aide_personnalisee_logement_locatif
|> calcul_aide_personnalisee_logement_locatif_to_jsoo
let calcul_aide_personnalisee_logement_foyer
(calcul_aide_personnalisee_logement_foyer_in : calcul_aide_personnalisee_logement_foyer_in Js.t)
: calcul_aide_personnalisee_logement_foyer Js.t =
@ -4486,13 +4543,13 @@ let eligibilite_prestations_familiales
|> eligibilite_prestations_familiales_to_jsoo
let calcul_allocation_logement_locatif
(calcul_allocation_logement_locatif_in : calcul_allocation_logement_locatif_in Js.t)
: calcul_allocation_logement_locatif Js.t =
calcul_allocation_logement_locatif_in
|> calcul_allocation_logement_locatif_in_of_jsoo
|> calcul_allocation_logement_locatif
|> calcul_allocation_logement_locatif_to_jsoo
let calcul_aide_personnalisee_logement_locatif
(calcul_aide_personnalisee_logement_locatif_in : calcul_aide_personnalisee_logement_locatif_in Js.t)
: calcul_aide_personnalisee_logement_locatif Js.t =
calcul_aide_personnalisee_logement_locatif_in
|> calcul_aide_personnalisee_logement_locatif_in_of_jsoo
|> calcul_aide_personnalisee_logement_locatif
|> calcul_aide_personnalisee_logement_locatif_to_jsoo
let calcul_allocation_logement_foyer
@ -4513,15 +4570,6 @@ let calcul_allocation_logement_accession_propriete
|> calcul_allocation_logement_accession_propriete_to_jsoo
let calcul_aide_personnalisee_logement
(calcul_aide_personnalisee_logement_in : calcul_aide_personnalisee_logement_in Js.t)
: calcul_aide_personnalisee_logement Js.t =
calcul_aide_personnalisee_logement_in
|> calcul_aide_personnalisee_logement_in_of_jsoo
|> calcul_aide_personnalisee_logement
|> calcul_aide_personnalisee_logement_to_jsoo
let eligibilite_aides_personnelle_logement
(eligibilite_aides_personnelle_logement_in : eligibilite_aides_personnelle_logement_in Js.t)
: eligibilite_aides_personnelle_logement Js.t =
@ -4531,13 +4579,22 @@ let eligibilite_aides_personnelle_logement
|> eligibilite_aides_personnelle_logement_to_jsoo
let calcul_allocation_logement
(calcul_allocation_logement_in : calcul_allocation_logement_in Js.t)
: calcul_allocation_logement Js.t =
calcul_allocation_logement_in
|> calcul_allocation_logement_in_of_jsoo
|> calcul_allocation_logement
|> calcul_allocation_logement_to_jsoo
let calcul_allocation_logement_locatif
(calcul_allocation_logement_locatif_in : calcul_allocation_logement_locatif_in Js.t)
: calcul_allocation_logement_locatif Js.t =
calcul_allocation_logement_locatif_in
|> calcul_allocation_logement_locatif_in_of_jsoo
|> calcul_allocation_logement_locatif
|> calcul_allocation_logement_locatif_to_jsoo
let calcul_aide_personnalisee_logement
(calcul_aide_personnalisee_logement_in : calcul_aide_personnalisee_logement_in Js.t)
: calcul_aide_personnalisee_logement Js.t =
calcul_aide_personnalisee_logement_in
|> calcul_aide_personnalisee_logement_in_of_jsoo
|> calcul_aide_personnalisee_logement
|> calcul_aide_personnalisee_logement_to_jsoo
let eligibilite_prime_de_demenagement
@ -4567,6 +4624,15 @@ let eligibilite_aide_personnalisee_logement
|> eligibilite_aide_personnalisee_logement_to_jsoo
let calcul_allocation_logement
(calcul_allocation_logement_in : calcul_allocation_logement_in Js.t)
: calcul_allocation_logement Js.t =
calcul_allocation_logement_in
|> calcul_allocation_logement_in_of_jsoo
|> calcul_allocation_logement
|> calcul_allocation_logement_to_jsoo
let calculette_aides_au_logement
(calculette_aides_au_logement_in : calculette_aides_au_logement_in Js.t)
: calculette_aides_au_logement Js.t =
@ -4619,9 +4685,6 @@ let _ =
method smic : (smic_in Js.t -> smic Js.t) Js.callback =
Js.wrap_callback smic
method calculAidePersonnaliseeLogementLocatif : (calcul_aide_personnalisee_logement_locatif_in Js.t -> calcul_aide_personnalisee_logement_locatif Js.t) Js.callback =
Js.wrap_callback calcul_aide_personnalisee_logement_locatif
method calculAidePersonnaliseeLogementFoyer : (calcul_aide_personnalisee_logement_foyer_in Js.t -> calcul_aide_personnalisee_logement_foyer Js.t) Js.callback =
Js.wrap_callback calcul_aide_personnalisee_logement_foyer
@ -4632,8 +4695,8 @@ let _ =
method eligibilitePrestationsFamiliales : (eligibilite_prestations_familiales_in Js.t -> eligibilite_prestations_familiales Js.t) Js.callback =
Js.wrap_callback eligibilite_prestations_familiales
method calculAllocationLogementLocatif : (calcul_allocation_logement_locatif_in Js.t -> calcul_allocation_logement_locatif Js.t) Js.callback =
Js.wrap_callback calcul_allocation_logement_locatif
method calculAidePersonnaliseeLogementLocatif : (calcul_aide_personnalisee_logement_locatif_in Js.t -> calcul_aide_personnalisee_logement_locatif Js.t) Js.callback =
Js.wrap_callback calcul_aide_personnalisee_logement_locatif
method calculAllocationLogementFoyer : (calcul_allocation_logement_foyer_in Js.t -> calcul_allocation_logement_foyer Js.t) Js.callback =
Js.wrap_callback calcul_allocation_logement_foyer
@ -4641,14 +4704,14 @@ let _ =
method calculAllocationLogementAccessionPropriete : (calcul_allocation_logement_accession_propriete_in Js.t -> calcul_allocation_logement_accession_propriete Js.t) Js.callback =
Js.wrap_callback calcul_allocation_logement_accession_propriete
method calculAidePersonnaliseeLogement : (calcul_aide_personnalisee_logement_in Js.t -> calcul_aide_personnalisee_logement Js.t) Js.callback =
Js.wrap_callback calcul_aide_personnalisee_logement
method eligibiliteAidesPersonnelleLogement : (eligibilite_aides_personnelle_logement_in Js.t -> eligibilite_aides_personnelle_logement Js.t) Js.callback =
Js.wrap_callback eligibilite_aides_personnelle_logement
method calculAllocationLogement : (calcul_allocation_logement_in Js.t -> calcul_allocation_logement Js.t) Js.callback =
Js.wrap_callback calcul_allocation_logement
method calculAllocationLogementLocatif : (calcul_allocation_logement_locatif_in Js.t -> calcul_allocation_logement_locatif Js.t) Js.callback =
Js.wrap_callback calcul_allocation_logement_locatif
method calculAidePersonnaliseeLogement : (calcul_aide_personnalisee_logement_in Js.t -> calcul_aide_personnalisee_logement Js.t) Js.callback =
Js.wrap_callback calcul_aide_personnalisee_logement
method eligibilitePrimeDeDemenagement : (eligibilite_prime_de_demenagement_in Js.t -> eligibilite_prime_de_demenagement Js.t) Js.callback =
Js.wrap_callback eligibilite_prime_de_demenagement
@ -4659,6 +4722,9 @@ let _ =
method eligibiliteAidePersonnaliseeLogement : (eligibilite_aide_personnalisee_logement_in Js.t -> eligibilite_aide_personnalisee_logement Js.t) Js.callback =
Js.wrap_callback eligibilite_aide_personnalisee_logement
method calculAllocationLogement : (calcul_allocation_logement_in Js.t -> calcul_allocation_logement Js.t) Js.callback =
Js.wrap_callback calcul_allocation_logement
method calculetteAidesAuLogement : (calculette_aides_au_logement_in Js.t -> calculette_aides_au_logement Js.t) Js.callback =
Js.wrap_callback calculette_aides_au_logement

View File

@ -508,6 +508,23 @@ let verification_age_superieur_a (verification_age_superieur_a_in: VerificationA
let smic (smic_in: SmicIn.t) : Smic.t =
let date_courante_: date = smic_in.SmicIn.date_courante_in in
let residence_: Collectivite.t = smic_in.SmicIn.residence_in in
let _: unit = if (
try
(o_gte_dat_dat date_courante_
(date_of_numbers (2019) (1) (1)))
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/../smic/smic.catala_fr";
start_line=16; start_column=13;
end_line=16; end_column=42;
law_headings=["Prologue";
"Montant du salaire minimum de croissance"]})))
then () else
raise (AssertionFailed {filename = "examples/allocations_familiales/../smic/smic.catala_fr";
start_line=16; start_column=13;
end_line=16; end_column=42;
law_headings=["Prologue";
"Montant du salaire minimum de croissance"]}) in
let brut_horaire_: money = (log_variable_definition
["Smic"; "brut_horaire"] (embed_money) (
try
@ -959,27 +976,25 @@ let smic (smic_in: SmicIn.t) : Smic.t =
{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"]})))) in
let _: unit = if (
try
(o_gte_dat_dat date_courante_
(date_of_numbers (2019) (1) (1)))
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/../smic/smic.catala_fr";
start_line=16; start_column=13;
end_line=16; end_column=42;
law_headings=["Prologue";
"Montant du salaire minimum de croissance"]})))
then () else
raise (AssertionFailed {filename = "examples/allocations_familiales/../smic/smic.catala_fr";
start_line=16; start_column=13;
end_line=16; end_column=42;
law_headings=["Prologue";
"Montant du salaire minimum de croissance"]}) in
{Smic.brut_horaire = brut_horaire_}
let base_mensuelle_allocations_familiales (base_mensuelle_allocations_familiales_in: BaseMensuelleAllocationsFamilialesIn.t) : BaseMensuelleAllocationsFamiliales.t =
let date_courante_: date = base_mensuelle_allocations_familiales_in.BaseMensuelleAllocationsFamilialesIn.date_courante_in in
let _: unit = if (
try
(o_gte_dat_dat date_courante_
(date_of_numbers (2019) (4) (1)))
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr";
start_line=10; start_column=13;
end_line=10; end_column=42;
law_headings=["Montant de la base mensuelle des allocations familiales"]})))
then () else
raise (AssertionFailed {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr";
start_line=10; start_column=13;
end_line=10; end_column=42;
law_headings=["Montant de la base mensuelle des allocations familiales"]}) in
let montant_: money = (log_variable_definition
["BaseMensuelleAllocationsFamiliales"; "montant"] (embed_money) (
try
@ -1046,33 +1061,34 @@ let base_mensuelle_allocations_familiales (base_mensuelle_allocations_familiales
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr";
start_line=86; start_column=5;
end_line=86; end_column=34;
end_line=87; 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"]}
(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) ->
handle_default
{filename = ""; start_line=0; start_column=1;
end_line=0; end_column=1; law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr";
start_line=106; start_column=5;
end_line=106; end_column=34;
law_headings=["Instruction interministérielle N° DSS/2B/2023/41 du 24 mars 2023 relative à la revalorisation au 1er avril 2023 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"]}
(o_gte_dat_dat date_courante_
(date_of_numbers (2022) (4) (1)))))
(fun (_: unit) -> money_of_cents_string "42228"))|])
(date_of_numbers (2023) (4) (1)))))
(fun (_: unit) -> money_of_cents_string "44593"))|])
(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=12; end_line=6; end_column=19;
law_headings=["Montant de la base mensuelle des allocations familiales"]})))) in
let _: unit = if (
try
(o_gte_dat_dat date_courante_
(date_of_numbers (2019) (4) (1)))
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr";
start_line=10; start_column=13;
end_line=10; end_column=42;
law_headings=["Montant de la base mensuelle des allocations familiales"]})))
then () else
raise (AssertionFailed {filename = "examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr";
start_line=10; start_column=13;
end_line=10; end_column=42;
law_headings=["Montant de la base mensuelle des allocations familiales"]}) in
{BaseMensuelleAllocationsFamiliales.montant = montant_}
let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t) : PrestationsFamiliales.t =
@ -1154,8 +1170,8 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t
end_line=0; end_column=1; law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=357; start_column=5;
end_line=362; end_column=30;
start_line=382; start_column=5;
end_line=387; end_column=30;
law_headings=["Article L751-1";
"Chapitre 1er : Généralités";
"Titre 5 : Dispositions particulières à la Guadeloupe, à la Guyane, à la Martinique, à La Réunion, à Saint-Barthélemy et à Saint-Martin";
@ -1244,8 +1260,8 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t
end_line=0; end_column=1; law_headings=[]} ([||])
(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=56;
start_line=73; start_column=5;
end_line=76; end_column=56;
law_headings=["Article L512-3";
"Chapitre 2 : Champ d'application";
"Titre 1 : Champ d'application - Généralités";
@ -1341,8 +1357,8 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t
(fun (_: unit) ->
(log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=60; start_column=5;
end_line=62; end_column=62;
start_line=65; start_column=5;
end_line=67; end_column=62;
law_headings=["Article L512-3";
"Chapitre 2 : Champ d'application";
"Titre 1 : Champ d'application - Généralités";
@ -1371,8 +1387,8 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t
(fun (_: unit) -> true))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=49; start_column=5;
end_line=50; end_column=50;
start_line=54; start_column=5;
end_line=55; end_column=50;
law_headings=["Article L512-3";
"Chapitre 2 : Champ d'application";
"Titre 1 : Champ d'application - Généralités";
@ -1444,8 +1460,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
[||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=215; start_column=5;
end_line=215; end_column=70;
start_line=233; start_column=5;
end_line=233; end_column=70;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -1471,8 +1487,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
[||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=254; start_column=5;
end_line=255; end_column=56;
start_line=271; start_column=5;
end_line=272; end_column=56;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -1509,8 +1525,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
(fun (_: unit) ->
(log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=264; start_column=5;
end_line=265; end_column=48;
start_line=281; start_column=5;
end_line=282; end_column=48;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -1534,8 +1550,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
PriseEnCompte.Complete ()))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=205; start_column=5;
end_line=205; end_column=69;
start_line=223; start_column=5;
end_line=223; end_column=69;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -1557,8 +1573,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
(fun (_: unit) -> PriseEnCompte.Complete ()))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=185; start_column=5;
end_line=185; end_column=60;
start_line=203; start_column=5;
end_line=203; end_column=60;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -1603,8 +1619,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
[||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=259; start_column=5;
end_line=260; end_column=56;
start_line=276; start_column=5;
end_line=277; end_column=56;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -1651,9 +1667,9 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
(fun (_: unit) ->
(log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=270;
start_line=287;
start_column=5;
end_line=271; end_column=48;
end_line=288; end_column=48;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -1679,8 +1695,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
(fun (_: unit) ->
(log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=219; start_column=5;
end_line=219; end_column=70;
start_line=237; start_column=5;
end_line=237; end_column=70;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -1704,8 +1720,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
VersementAllocations.Normal ()))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=209; start_column=5;
end_line=209; end_column=69;
start_line=227; start_column=5;
end_line=227; end_column=69;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -1728,8 +1744,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
VersementAllocations.Normal ()))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=189; start_column=5;
end_line=189; end_column=60;
start_line=207; start_column=5;
end_line=207; end_column=60;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -1762,50 +1778,45 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
(handle_default
{filename = ""; start_line=0; start_column=1;
end_line=0; end_column=1; law_headings=[]} ([||])
(fun (_: unit) -> true)
(fun (_: unit) ->
handle_default
{filename = ""; start_line=0; start_column=1;
end_line=0; end_column=1; law_headings=[]}
([|(fun (_: unit) ->
handle_default
{filename = ""; start_line=0; start_column=1;
end_line=0; end_column=1; law_headings=[]}
([|(fun (_: unit) ->
handle_default
{filename = ""; start_line=0; start_column=1;
end_line=0; end_column=1; law_headings=
[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_D.catala_fr";
start_line=294; start_column=14;
end_line=294; end_column=44;
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"]}
true))
(fun (_: unit) -> integer_of_string "3"))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_R.catala_fr";
start_line=64; start_column=14;
end_line=64; end_column=44;
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"]}
true)) (fun (_: unit) -> integer_of_string "3"))|])
(fun (_: unit) -> false) (fun (_: unit) -> raise EmptyError)))
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_R.catala_fr";
start_line=64; start_column=14; end_line=64; end_column=44;
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"]} true))
(fun (_: unit) -> integer_of_string "3"))
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=144; start_column=11; end_line=144; end_column=41;
law_headings=["Allocations familiales"; "Champs d'applications";
"Prologue"]})))) in
let nombre_enfants_alinea_2_l521_1_: integer = (log_variable_definition
["AllocationsFamiliales"; "nombre_enfants_alinéa_2_l521_1"]
(embed_integer) (
try
(handle_default
{filename = ""; start_line=0; start_column=1;
end_line=0; end_column=1; law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_D.catala_fr";
start_line=294; start_column=14; end_line=294; end_column=44;
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"]} true))
(fun (_: unit) -> integer_of_string "3"))
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=145; start_column=11; end_line=145; end_column=41;
law_headings=["Allocations familiales"; "Champs d'applications";
"Prologue"]})))) in
let result_: AllocationFamilialesAvril2008.t = (log_end_call
["AllocationsFamiliales"; "version_avril_2008";
"AllocationFamilialesAvril2008"] ((log_begin_call
@ -1813,6 +1824,34 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
"AllocationFamilialesAvril2008"] allocation_familiales_avril2008)
(()))) in
let version_avril_2008_dot_age_minimum_alinea_1_l521_3_: duration = result_.AllocationFamilialesAvril2008.age_minimum_alinea_1_l521_3 in
let _: unit = if (
try
(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
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=249; start_column=5;
end_line=253; end_column=6;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
"Livre 5 : Prestations familiales et prestations assimilées";
"Partie législative";
"Code de la sécurité sociale"]})))
then () else
raise (AssertionFailed {filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=249; start_column=5;
end_line=253; end_column=6;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
"Livre 5 : Prestations familiales et prestations assimilées";
"Partie législative";
"Code de la sécurité sociale"]}) in
let bmaf_dot_date_courante_: date =
try ((log_variable_definition
["AllocationsFamiliales"; "bmaf.date_courante"] (embed_date)
@ -1821,14 +1860,14 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
end_line=0; end_column=1; law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=155; start_column=14; end_line=155; end_column=32;
start_line=156; start_column=14; end_line=156; end_column=32;
law_headings=["Allocations familiales";
"Champs d'applications"; "Prologue"]} true))
(fun (_: unit) -> date_courante_))))
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=155; start_column=14; end_line=155; end_column=32;
start_line=156; start_column=14; end_line=156; end_column=32;
law_headings=["Allocations familiales"; "Champs d'applications";
"Prologue"]})) in
let result_: BaseMensuelleAllocationsFamiliales.t = (log_end_call
@ -1848,14 +1887,14 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
end_line=0; end_column=1; law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=151; start_column=14; end_line=151; end_column=50;
start_line=152; start_column=14; end_line=152; end_column=50;
law_headings=["Allocations familiales";
"Champs d'applications"; "Prologue"]} true))
(fun (_: unit) -> date_courante_))))
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=151; start_column=14; end_line=151; end_column=50;
start_line=152; start_column=14; end_line=152; end_column=50;
law_headings=["Allocations familiales"; "Champs d'applications";
"Prologue"]})) in
let prestations_familiales_dot_residence_: Collectivite.t =
@ -1867,14 +1906,14 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
end_line=0; end_column=1; law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=153; start_column=14; end_line=153; end_column=46;
start_line=154; start_column=14; end_line=154; end_column=46;
law_headings=["Allocations familiales";
"Champs d'applications"; "Prologue"]} true))
(fun (_: unit) -> residence_))))
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=153; start_column=14; end_line=153; end_column=46;
start_line=154; start_column=14; end_line=154; end_column=46;
law_headings=["Allocations familiales"; "Champs d'applications";
"Prologue"]})) in
let result_: PrestationsFamiliales.t = (log_end_call
@ -1968,7 +2007,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
end_line=0; end_column=1; law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=75; start_column=14; end_line=75; end_column=64;
start_line=80; start_column=14; end_line=80; end_column=64;
law_headings=["Article L512-3";
"Chapitre 2 : Champ d'application";
"Titre 1 : Champ d'application - Généralités";
@ -2009,7 +2048,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=145; start_column=11; end_line=145; end_column=33;
start_line=146; start_column=11; end_line=146; end_column=33;
law_headings=["Allocations familiales"; "Champs d'applications";
"Prologue"]})))) in
let plafond__i_i_d521_3_: money = (log_variable_definition
@ -2144,7 +2183,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=148; start_column=11; end_line=148; end_column=28;
start_line=149; start_column=11; end_line=149; end_column=28;
law_headings=["Allocations familiales"; "Champs d'applications";
"Prologue"]})))) in
let plafond__i_d521_3_: money = (log_variable_definition
@ -2279,7 +2318,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
with
EmptyError -> (raise (NoValueProvided
{filename = "examples/allocations_familiales/prologue.catala_fr";
start_line=147; start_column=11; end_line=147; end_column=27;
start_line=148; start_column=11; end_line=148; end_column=27;
law_headings=["Allocations familiales"; "Champs d'applications";
"Prologue"]})))) in
let droit_ouvert_complement_: bool = (log_variable_definition
@ -2299,8 +2338,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
[||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=429; start_column=5;
end_line=430; end_column=71;
start_line=462; start_column=5;
end_line=463; end_column=71;
law_headings=["Article L755-12";
"Chapitre 5 : Prestations familiales et prestations assimilées";
"Titre 5 : Dispositions particulières à la Guadeloupe, à la Guyane, à la Martinique, à La Réunion, à Saint-Barthélemy et à Saint-Martin";
@ -2350,8 +2389,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=423; start_column=6;
end_line=424; end_column=72;
start_line=456; start_column=6;
end_line=457; end_column=72;
law_headings=["Article L755-12";
"Chapitre 5 : Prestations familiales et prestations assimilées";
"Titre 5 : Dispositions particulières à la Guadeloupe, à la Guyane, à la Martinique, à La Réunion, à Saint-Barthélemy et à Saint-Martin";
@ -2367,8 +2406,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
(fun (_: unit) -> false))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=119; start_column=5;
end_line=126; end_column=59;
start_line=137; start_column=5;
end_line=144; end_column=59;
law_headings=["Article L521-1";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -2377,7 +2416,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
"Code de la sécurité sociale"]}
(o_and
(o_gte_int_int (o_length enfants_a_charge_)
nombre_enfants_alinea_2_l521_3_)
nombre_enfants_alinea_2_l521_1_)
(o_and
(o_lt_dur_dur
(o_sub_dat_dat
@ -2475,8 +2514,8 @@ 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=67;
start_line=433; start_column=5;
end_line=433; 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"]}
@ -2504,8 +2543,8 @@ 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=67;
start_line=441; start_column=5;
end_line=441; 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"]}
@ -2533,8 +2572,8 @@ 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=67;
start_line=449; start_column=5;
end_line=449; 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"]}
@ -2562,8 +2601,8 @@ 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=67;
start_line=457; start_column=5;
end_line=457; 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"]}
@ -2591,8 +2630,8 @@ 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=67;
start_line=465; start_column=5;
end_line=465; 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"]}
@ -2620,8 +2659,8 @@ 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=67;
start_line=473; start_column=5;
end_line=473; 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"]}
@ -2649,8 +2688,8 @@ 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=67;
start_line=481; start_column=5;
end_line=481; 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"]}
@ -2678,8 +2717,8 @@ 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=67;
start_line=489; start_column=5;
end_line=489; 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"]}
@ -2707,8 +2746,8 @@ 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=67;
start_line=497; start_column=5;
end_line=497; 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"]}
@ -2736,8 +2775,8 @@ 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=67;
start_line=505; start_column=5;
end_line=505; 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"]}
@ -2875,8 +2914,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=251; start_column=5;
end_line=252; end_column=53;
start_line=253; start_column=5;
end_line=254; end_column=53;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -2909,8 +2948,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=260; start_column=5;
end_line=261; end_column=53;
start_line=262; start_column=5;
end_line=263; end_column=53;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -2943,8 +2982,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=269; start_column=5;
end_line=270; end_column=53;
start_line=271; start_column=5;
end_line=272; end_column=53;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -2977,8 +3016,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=278; start_column=5;
end_line=279; end_column=53;
start_line=280; start_column=5;
end_line=281; end_column=53;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -3011,8 +3050,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=287; start_column=5;
end_line=288; end_column=53;
start_line=289; start_column=5;
end_line=290; end_column=53;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -3045,8 +3084,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=296; start_column=5;
end_line=297; end_column=53;
start_line=298; start_column=5;
end_line=299; end_column=53;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -3079,8 +3118,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=305; start_column=5;
end_line=306; end_column=53;
start_line=307; start_column=5;
end_line=308; end_column=53;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -3113,8 +3152,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=314; start_column=5;
end_line=315; end_column=53;
start_line=316; start_column=5;
end_line=317; end_column=53;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -3147,8 +3186,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=323; start_column=5;
end_line=324; end_column=53;
start_line=325; start_column=5;
end_line=326; end_column=53;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -3181,8 +3220,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=332; start_column=5;
end_line=333; end_column=53;
start_line=334; start_column=5;
end_line=335; end_column=53;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -3215,8 +3254,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=341; start_column=5;
end_line=341; end_column=49;
start_line=343; start_column=5;
end_line=343; end_column=49;
law_headings=["Annexe";
"Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte";
"Dispositions spéciales relatives à Mayotte"]}
@ -3257,8 +3296,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
end_line=0; end_column=1; law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_D.catala_fr";
start_line=365; start_column=5;
end_line=366; end_column=71;
start_line=364; start_column=5;
end_line=365; end_column=71;
law_headings=["Article D755-5";
"Chapitre 5 : Prestations familiales et prestations assimilées";
"Titre 5 : Départements d'outre-mer";
@ -3276,7 +3315,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
(decimal_of_string "0.0588")))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_D.catala_fr";
start_line=362; start_column=29; end_line=362; end_column=64;
start_line=361; start_column=29; end_line=361; end_column=64;
law_headings=["Article D755-5";
"Chapitre 5 : Prestations familiales et prestations assimilées";
"Titre 5 : Départements d'outre-mer";
@ -3343,8 +3382,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
(fun (_: unit) -> true))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=409; start_column=5;
end_line=410; end_column=72;
start_line=442; start_column=5;
end_line=443; end_column=72;
law_headings=["Article L755-12";
"Chapitre 5 : Prestations familiales et prestations assimilées";
"Titre 5 : Dispositions particulières à la Guadeloupe, à la Guyane, à la Martinique, à La Réunion, à Saint-Barthélemy et à Saint-Martin";
@ -3362,8 +3401,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
(fun (_: unit) -> raise EmptyError)))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=101; start_column=5;
end_line=101; end_column=70;
start_line=119; start_column=5;
end_line=119; end_column=70;
law_headings=["Article L521-1";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -3404,8 +3443,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=315; start_column=5;
end_line=318; end_column=21;
start_line=340; start_column=5;
end_line=343; end_column=21;
law_headings=["Article L521-3";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -3439,8 +3478,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
(fun (_: unit) -> true))|])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=300; start_column=5;
end_line=302; end_column=21;
start_line=325; start_column=5;
end_line=327; end_column=21;
law_headings=["Article L521-3";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
@ -3811,8 +3850,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=350; start_column=5;
end_line=350; end_column=67;
start_line=352; start_column=5;
end_line=352; 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"]}
@ -3841,8 +3880,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=358; start_column=5;
end_line=358; end_column=67;
start_line=360; start_column=5;
end_line=360; 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"]}
@ -3871,8 +3910,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=366; start_column=5;
end_line=366; end_column=67;
start_line=368; start_column=5;
end_line=368; 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"]}
@ -3901,8 +3940,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=374; start_column=5;
end_line=374; end_column=67;
start_line=376; start_column=5;
end_line=376; 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"]}
@ -3931,8 +3970,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=382; start_column=5;
end_line=382; end_column=67;
start_line=384; start_column=5;
end_line=384; 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"]}
@ -3961,8 +4000,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=390; start_column=5;
end_line=390; end_column=67;
start_line=392; start_column=5;
end_line=392; 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"]}
@ -3991,8 +4030,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=398; start_column=5;
end_line=398; end_column=67;
start_line=400; start_column=5;
end_line=400; 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"]}
@ -4021,8 +4060,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=406; start_column=5;
end_line=406; end_column=67;
start_line=408; start_column=5;
end_line=408; 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"]}
@ -4051,8 +4090,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=414; start_column=5;
end_line=414; end_column=67;
start_line=416; start_column=5;
end_line=416; 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"]}
@ -4081,8 +4120,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/decrets_divers.catala_fr";
start_line=422; start_column=5;
end_line=422; end_column=67;
start_line=424; start_column=5;
end_line=424; 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"]}
@ -4449,8 +4488,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_D.catala_fr";
start_line=356; start_column=5;
end_line=357; end_column=69;
start_line=355; start_column=5;
end_line=356; end_column=69;
law_headings=["Article D755-5";
"Chapitre 5 : Prestations familiales et prestations assimilées";
"Titre 5 : Départements d'outre-mer";
@ -4529,8 +4568,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_D.catala_fr";
start_line=379; start_column=5;
end_line=383; end_column=55;
start_line=378; start_column=5;
end_line=382; end_column=55;
law_headings=["Article D755-5";
"Chapitre 5 : Prestations familiales et prestations assimilées";
"Titre 5 : Départements d'outre-mer";
@ -4579,8 +4618,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
law_headings=[]} ([||])
(fun (_: unit) -> (log_decision_taken
{filename = "examples/allocations_familiales/securite_sociale_D.catala_fr";
start_line=389; start_column=5;
end_line=392; end_column=56;
start_line=388; start_column=5;
end_line=391; end_column=56;
law_headings=["Article D755-5";
"Chapitre 5 : Prestations familiales et prestations assimilées";
"Titre 5 : Départements d'outre-mer";
@ -4959,34 +4998,6 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t
start_line=91; start_column=12; end_line=91; end_column=25;
law_headings=["Allocations familiales"; "Champs d'applications";
"Prologue"]})))) in
let _: unit = if (
try
(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
{filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=231; start_column=5;
end_line=235; end_column=6;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
"Livre 5 : Prestations familiales et prestations assimilées";
"Partie législative";
"Code de la sécurité sociale"]})))
then () else
raise (AssertionFailed {filename = "examples/allocations_familiales/securite_sociale_L.catala_fr";
start_line=231; start_column=5;
end_line=235; end_column=6;
law_headings=["Article L521-2";
"Chapitre 1er : Allocations familiales";
"Titre 2 : Prestations générales d'entretien";
"Livre 5 : Prestations familiales et prestations assimilées";
"Partie législative";
"Code de la sécurité sociale"]}) in
{AllocationsFamiliales.versement = versement_;
AllocationsFamiliales.montant_verse = montant_verse_}

View File

@ -62,7 +62,6 @@ def call_aides_logement() -> float:
EnfantAPL(
identifiant=1,
etudes_apprentissage_stage_formation_pro_impossibilite_travail=False,
beneficie_titre_personnel_aide_personnelle_logement=False,
a_deja_ouvert_droit_aux_allocations_familiales=True,
date_de_naissance=date(2015, 1, 1),
remuneration_mensuelle=0,
@ -75,7 +74,6 @@ def call_aides_logement() -> float:
EnfantAPL(
identifiant=2,
etudes_apprentissage_stage_formation_pro_impossibilite_travail=False,
beneficie_titre_personnel_aide_personnelle_logement=False,
a_deja_ouvert_droit_aux_allocations_familiales=True,
date_de_naissance=date(2016, 1, 1),
remuneration_mensuelle=0,

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -66,7 +66,7 @@ class PersonneAChargeAPL(ABC):
class EnfantAPL(PersonneAChargeAPL):
def __init__(self, identifiant: int, beneficie_titre_personnel_aide_personnelle_logement: bool,
def __init__(self, identifiant: int,
a_deja_ouvert_droit_aux_allocations_familiales: bool,
date_de_naissance: datetime.date,
remuneration_mensuelle: int,
@ -76,7 +76,6 @@ class EnfantAPL(PersonneAChargeAPL):
nationalite: Nationalite,
etudes_apprentissage_stage_formation_pro_impossibilite_travail: bool):
self.identifiant = identifiant
self.beneficie_titre_personnel_aide_personnelle_logement = beneficie_titre_personnel_aide_personnelle_logement
self.a_deja_ouvert_droit_aux_allocations_familiales = a_deja_ouvert_droit_aux_allocations_familiales
self.date_de_naissance = date_de_naissance,
self.remuneration_mensuelle = remuneration_mensuelle
@ -143,7 +142,11 @@ class InfosLogementFoyer(InfosSpecifiques):
categorie_equivalence_loyer_d842_16: CategorieEquivalenceLoyerAllocationLogementFoyer_Code,
conventionne_selon_regles_drom: bool,
beneficiaire_aide_adulte_ou_enfant_handicapes: bool,
logement_meuble_d842_2: bool):
logement_est_chambre: bool,
colocation: bool,
logement_meuble_d842_2: bool,
logement_foyer_jeunes_travailleurs: bool):
self.logement_foyer_jeunes_travailleurs = logement_foyer_jeunes_travailleurs
self.type = type
self.remplit_conditions_r832_21 = remplit_conditions_r832_21
self.conventionne_livre_III_titre_V_chap_III = conventionne_livre_III_titre_V_chap_III
@ -154,6 +157,8 @@ class InfosLogementFoyer(InfosSpecifiques):
self.conventionne_selon_regles_drom = conventionne_selon_regles_drom
self.beneficiaire_aide_adulte_ou_enfant_handicapes = beneficiaire_aide_adulte_ou_enfant_handicapes
self.logement_meuble_d842_2 = logement_meuble_d842_2
self.logement_est_chambre = logement_est_chambre
self.colocation = colocation
class InfosAccessionPropriete(InfosSpecifiques):
@ -258,6 +263,7 @@ def aides_logement(
))
) if isinstance(infos_specifiques, InfosLocation) else
(LogementFoyer(
logement_foyer_jeunes_travailleurs=infos_specifiques.logement_foyer_jeunes_travailleurs,
type=TypeLogementFoyer(
code=infos_specifiques.type, value=Unit()),
conventionne_selon_regles_drom=infos_specifiques.conventionne_selon_regles_drom,
@ -272,8 +278,9 @@ def aides_logement(
infos_specifiques.redevance),
categorie_equivalence_loyer_d842_16=CategorieEquivalenceLoyerAllocationLogementFoyer(
code=infos_specifiques.categorie_equivalence_loyer_d842_16,
value=Unit()
)
value=Unit()),
logement_est_chambre=infos_specifiques.logement_est_chambre,
colocation=infos_specifiques.colocation
) if isinstance(infos_specifiques, InfosLogementFoyer) else
(Proprietaire(
mensualite_principale=money_of_units_int(
@ -335,7 +342,6 @@ def aides_logement(
etudes_apprentissage_stage_formation_pro_impossibilite_travail=personne_a_charge.etudes_apprentissage_stage_formation_pro_impossibilite_travail,
identifiant=integer_of_int(
personne_a_charge.identifiant),
beneficie_titre_personnel_aide_personnelle_logement=personne_a_charge.beneficie_titre_personnel_aide_personnelle_logement,
a_deja_ouvert_droit_aux_allocations_familiales=personne_a_charge.a_deja_ouvert_droit_aux_allocations_familiales,
date_de_naissance=date_of_datetime(
personne_a_charge.date_de_naissance[0]),

View File

@ -35,7 +35,7 @@ scope Money:
$ catala Interpret -s Dec
[WARNING] In scope "Int", the variable "i" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:7.10-11:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:7.11-7.12:
└─┐
7 │ context i content decimal
│ ‾
@ -43,7 +43,7 @@ $ catala Interpret -s Dec
└─ with integers
[WARNING] In scope "Dec", the variable "i" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:17.10-11:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:17.11-17.12:
└──┐
17 │ context i content decimal
│ ‾
@ -51,7 +51,7 @@ $ catala Interpret -s Dec
└─ with decimals
[WARNING] In scope "Money", the variable "i" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:27.10-11:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:27.11-27.12:
└──┐
27 │ context i content decimal
│ ‾
@ -60,7 +60,7 @@ $ catala Interpret -s Dec
[ERROR] division by zero at runtime
The division operator:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:20.22-29:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:20.23-20.30:
└──┐
20 │ definition i equals 1. / 0.
│ ‾‾‾‾‾‾‾
@ -68,7 +68,7 @@ The division operator:
└─ with decimals
The null denominator:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:20.27-29:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:20.28-20.30:
└──┐
20 │ definition i equals 1. / 0.
│ ‾‾
@ -81,7 +81,7 @@ The null denominator:
$ catala Interpret -s Int
[WARNING] In scope "Int", the variable "i" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:7.10-11:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:7.11-7.12:
└─┐
7 │ context i content decimal
│ ‾
@ -89,7 +89,7 @@ $ catala Interpret -s Int
└─ with integers
[WARNING] In scope "Dec", the variable "i" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:17.10-11:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:17.11-17.12:
└──┐
17 │ context i content decimal
│ ‾
@ -97,7 +97,7 @@ $ catala Interpret -s Int
└─ with decimals
[WARNING] In scope "Money", the variable "i" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:27.10-11:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:27.11-27.12:
└──┐
27 │ context i content decimal
│ ‾
@ -106,7 +106,7 @@ $ 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.23-10.28:
└──┐
10 │ definition i equals 1 / 0
│ ‾‾‾‾‾
@ -114,7 +114,7 @@ The division operator:
└─ 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.27-10.28:
└──┐
10 │ definition i equals 1 / 0
│ ‾
@ -127,7 +127,7 @@ The null denominator:
$ catala Interpret -s Money
[WARNING] In scope "Int", the variable "i" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:7.10-11:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:7.11-7.12:
└─┐
7 │ context i content decimal
│ ‾
@ -135,7 +135,7 @@ $ catala Interpret -s Money
└─ with integers
[WARNING] In scope "Dec", the variable "i" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:17.10-11:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:17.11-17.12:
└──┐
17 │ context i content decimal
│ ‾
@ -143,7 +143,7 @@ $ catala Interpret -s Money
└─ with decimals
[WARNING] In scope "Money", the variable "i" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:27.10-11:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:27.11-27.12:
└──┐
27 │ context i content decimal
│ ‾
@ -152,7 +152,7 @@ $ catala Interpret -s Money
[ERROR] division by zero at runtime
The division operator:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:30.22-34:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:30.23-30.35:
└──┐
30 │ definition i equals $10.0 / $0.0
│ ‾‾‾‾‾‾‾‾‾‾‾‾
@ -160,7 +160,7 @@ The division operator:
└─ with money
The null denominator:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:30.30-34:
┌─⯈ tests/test_arithmetic/bad/division_by_zero.catala_en:30.31-30.35:
└──┐
30 │ definition i equals $10.0 / $0.0
│ ‾‾‾‾

View File

@ -10,13 +10,13 @@ scope S1:
$ 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:
┌─⯈ tests/test_arithmetic/bad/logical_prio.catala_en:6.28-6.31:
└─┐
6 │ definition o equals true and (false and true and true) or false
│ ‾‾‾
┌─⯈ tests/test_arithmetic/bad/logical_prio.catala_en:6.57-59:
┌─⯈ tests/test_arithmetic/bad/logical_prio.catala_en:6.58-6.60:
└─┐
6 │ definition o equals true and (false and true and true) or false
│ ‾‾

View File

@ -15,21 +15,21 @@ $ catala Interpret -s A
[ERROR] I don't know how to apply operator >= on types integer and
money
┌─⯈ tests/test_array/bad/fold_error.catala_en:10.49-51:
┌─⯈ tests/test_array/bad/fold_error.catala_en:10.50-10.52:
└──┐
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.35-5.42:
└─┐
5 │ context list content collection integer
│ ‾‾‾‾‾‾‾
└─ Article
Type money coming from expression:
┌─⯈ tests/test_array/bad/fold_error.catala_en:10.52-54:
┌─⯈ tests/test_array/bad/fold_error.catala_en:10.53-10.55:
└──┐
10 │ definition list_high_count equals number of (m >= $7) for m among list
│ ‾‾

View File

@ -35,6 +35,35 @@ scope S:
$ catala scopelang -s S
let scope S (x: integer|internal|output) =
let x : integer = ⟨true ⊢ 0⟩;
assert (map (λ (i: integer) → i + 2) [ 1; 2; 3 ]) = [ 3; 4; 5 ];
assert (filter (λ (i: integer) → i >= 2) [ 1; 2; 3 ]) = [ 2; 3 ];
assert (map (λ (i: integer) → i + 2)
filter (λ (i: integer) → i > 2) [ 1; 2; 3 ])
= [ 5 ];
assert (reduce
(λ (sum1: integer) (sum2: integer) → sum1 + sum2),
0,
[ 1; 2; 3 ])
= 6;
assert (reduce
(λ (sum1: integer) (sum2: integer) → sum1 + sum2),
0,
map (λ (i: integer) → i + 2) [ 1; 2; 3 ])
= 12;
assert (length [ 1; 2; 3 ]) = 3;
assert (length filter (λ (i: integer) → i >= 2) [ 1; 2; 3 ]) = 2;
assert (reduce
(λ (max1: integer) (max2: integer) →
if max1 > max2 then max1 else max2),
10,
[ 1; 2; 3 ])
= 3;
assert (reduce
(λ (max1: decimal) (max2: decimal) →
if max1 > max2 then max1 else max2),
10.,
map (λ (i: integer) → to_rat i) [ 1; 2; 3 ])
= 3.;
assert (reduce
(λ (i_1: integer) (i_2: integer) →
if
@ -46,36 +75,7 @@ let scope S (x: integer|internal|output) =
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 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 ]
= 2
```
```catala-test-inline

View File

@ -17,21 +17,21 @@ $ 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.13-9.14:
└─┐
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.22-5.29:
└─┐
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.13-9.14:
└─┐
9 │ assertion x
│ ‾

View File

@ -15,21 +15,21 @@ $ catala Typecheck
--> bool
Error coming from typechecking the following expression:
┌─⯈ tests/test_bool/bad/test_xor_with_int.catala_en:8.29-31:
┌─⯈ tests/test_bool/bad/test_xor_with_int.catala_en:8.30-8.32:
└─┐
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:8.29-31:
┌─⯈ tests/test_bool/bad/test_xor_with_int.catala_en:8.30-8.32:
└─┐
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:
┌─⯈ tests/test_bool/bad/test_xor_with_int.catala_en:8.33-8.36:
└─┐
8 │ definition test_var equals 10 xor 20
│ ‾‾‾

View File

@ -17,7 +17,7 @@ catala: internal error, uncaught exception:
[WARNING] In scope "Test", the variable "ambiguous" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/rounding_option.catala_en:5.10-19:
┌─⯈ tests/test_date/bad/rounding_option.catala_en:5.11-5.20:
└─┐
5 │ context ambiguous content boolean
│ ‾‾‾‾‾‾‾‾‾

View File

@ -17,7 +17,7 @@ catala: internal error, uncaught exception:
[WARNING] In scope "Test", the variable "ambiguité" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/rounding_option.catala_fr:5.11-20:
┌─⯈ tests/test_date/bad/rounding_option.catala_fr:5.12-5.21:
└─┐
5 │ contexte ambiguité contenu booléen
│ ‾‾‾‾‾‾‾‾‾

View File

@ -27,13 +27,13 @@ scope Test:
$ catala Interpret -s Test
[ERROR] You cannot set multiple date rounding modes
┌─⯈ tests/test_date/bad/rounding_option_conflict.catala_en:10.13-23:
┌─⯈ tests/test_date/bad/rounding_option_conflict.catala_en:10.14-10.24:
└──┐
10 │ date round decreasing
│ ‾‾‾‾‾‾‾‾‾‾
┌─⯈ tests/test_date/bad/rounding_option_conflict.catala_en:12.13-23:
┌─⯈ tests/test_date/bad/rounding_option_conflict.catala_en:12.14-12.24:
└──┐
12 │ date round increasing
│ ‾‾‾‾‾‾‾‾‾‾

View File

@ -44,7 +44,7 @@ scope Ge:
$ catala Interpret -s Ge
[WARNING] In scope "Lt", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:7.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:7.11-7.12:
└─┐
7 │ context d content boolean
│ ‾
@ -52,7 +52,7 @@ $ catala Interpret -s Ge
└─ `<` operator
[WARNING] In scope "Le", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:17.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:17.11-17.12:
└──┐
17 │ context d content boolean
│ ‾
@ -60,7 +60,7 @@ $ catala Interpret -s Ge
└─ `<=` operator
[WARNING] In scope "Gt", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:27.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:27.11-27.12:
└──┐
27 │ context d content boolean
│ ‾
@ -68,7 +68,7 @@ $ catala Interpret -s Ge
└─ `<=` operator
[WARNING] In scope "Ge", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:37.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:37.11-37.12:
└──┐
37 │ context d content boolean
│ ‾
@ -76,14 +76,14 @@ $ catala Interpret -s Ge
└─ `>=` operator
[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.23-40.30:
└──┐
40 │ definition d equals 1 month >= 2 day
│ ‾‾‾‾‾‾‾
└┬ `UncomparableDurations` exception management
└─ `>=` operator
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:40.33-38:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:40.34-40.39:
└──┐
40 │ definition d equals 1 month >= 2 day
│ ‾‾‾‾‾
@ -96,7 +96,7 @@ $ catala Interpret -s Ge
$ catala Interpret -s Gt
[WARNING] In scope "Lt", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:7.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:7.11-7.12:
└─┐
7 │ context d content boolean
│ ‾
@ -104,7 +104,7 @@ $ catala Interpret -s Gt
└─ `<` operator
[WARNING] In scope "Le", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:17.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:17.11-17.12:
└──┐
17 │ context d content boolean
│ ‾
@ -112,7 +112,7 @@ $ catala Interpret -s Gt
└─ `<=` operator
[WARNING] In scope "Gt", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:27.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:27.11-27.12:
└──┐
27 │ context d content boolean
│ ‾
@ -120,7 +120,7 @@ $ catala Interpret -s Gt
└─ `<=` operator
[WARNING] In scope "Ge", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:37.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:37.11-37.12:
└──┐
37 │ context d content boolean
│ ‾
@ -128,14 +128,14 @@ $ catala Interpret -s Gt
└─ `>=` operator
[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.23-30.30:
└──┐
30 │ definition d equals 1 month > 2 day
│ ‾‾‾‾‾‾‾
└┬ `UncomparableDurations` exception management
└─ `<=` operator
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:30.32-37:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:30.33-30.38:
└──┐
30 │ definition d equals 1 month > 2 day
│ ‾‾‾‾‾
@ -148,7 +148,7 @@ $ catala Interpret -s Gt
$ catala Interpret -s Le
[WARNING] In scope "Lt", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:7.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:7.11-7.12:
└─┐
7 │ context d content boolean
│ ‾
@ -156,7 +156,7 @@ $ catala Interpret -s Le
└─ `<` operator
[WARNING] In scope "Le", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:17.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:17.11-17.12:
└──┐
17 │ context d content boolean
│ ‾
@ -164,7 +164,7 @@ $ catala Interpret -s Le
└─ `<=` operator
[WARNING] In scope "Gt", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:27.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:27.11-27.12:
└──┐
27 │ context d content boolean
│ ‾
@ -172,7 +172,7 @@ $ catala Interpret -s Le
└─ `<=` operator
[WARNING] In scope "Ge", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:37.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:37.11-37.12:
└──┐
37 │ context d content boolean
│ ‾
@ -180,14 +180,14 @@ $ catala Interpret -s Le
└─ `>=` operator
[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.23-20.30:
└──┐
20 │ definition d equals 1 month <= 2 day
│ ‾‾‾‾‾‾‾
└┬ `UncomparableDurations` exception management
└─ `<=` operator
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:20.33-38:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:20.34-20.39:
└──┐
20 │ definition d equals 1 month <= 2 day
│ ‾‾‾‾‾
@ -200,7 +200,7 @@ $ catala Interpret -s Le
$ catala Interpret -s Lt
[WARNING] In scope "Lt", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:7.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:7.11-7.12:
└─┐
7 │ context d content boolean
│ ‾
@ -208,7 +208,7 @@ $ catala Interpret -s Lt
└─ `<` operator
[WARNING] In scope "Le", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:17.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:17.11-17.12:
└──┐
17 │ context d content boolean
│ ‾
@ -216,7 +216,7 @@ $ catala Interpret -s Lt
└─ `<=` operator
[WARNING] In scope "Gt", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:27.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:27.11-27.12:
└──┐
27 │ context d content boolean
│ ‾
@ -224,7 +224,7 @@ $ catala Interpret -s Lt
└─ `<=` operator
[WARNING] In scope "Ge", the variable "d" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:37.10-11:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:37.11-37.12:
└──┐
37 │ context d content boolean
│ ‾
@ -232,14 +232,14 @@ $ catala Interpret -s Lt
└─ `>=` operator
[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.23-10.30:
└──┐
10 │ definition d equals 1 month < 2 day
│ ‾‾‾‾‾‾‾
└┬ `UncomparableDurations` exception management
└─ `<` operator
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:10.32-37:
┌─⯈ tests/test_date/bad/uncomparable_duration.catala_en:10.33-10.38:
└──┐
10 │ definition d equals 1 month < 2 day
│ ‾‾‾‾‾

View File

@ -13,7 +13,7 @@ scope A:
$ catala Interpret -s A
[WARNING] In scope "A", the variable "x" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_default/bad/conflict.catala_en:5.10-11:
┌─⯈ tests/test_default/bad/conflict.catala_en:5.11-5.12:
└─┐
5 │ context x content integer
│ ‾
@ -21,14 +21,14 @@ $ 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.56-8.57:
└─┐
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.56-9.57:
└─┐
9 │ definition x under condition true consequence equals 0
│ ‾

View File

@ -13,21 +13,21 @@ scope A:
$ catala Interpret -s A
[WARNING] In scope "A", the variable "x" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_default/bad/empty.catala_en:5.10-11:
┌─⯈ tests/test_default/bad/empty.catala_en:5.11-5.12:
└─┐
5 │ context x content integer
│ ‾
└─ Article
[WARNING] In scope "A", the variable "y" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_default/bad/empty.catala_en:6.10-11:
┌─⯈ tests/test_default/bad/empty.catala_en:6.11-6.12:
└─┐
6 │ context y content boolean
│ ‾
└─ Article
[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.11-6.12:
└─┐
6 │ context y content boolean
│ ‾

View File

@ -16,14 +16,14 @@ scope A:
$ catala Interpret -s A
[WARNING] In scope "A", the variable "x" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_default/bad/empty_with_rules.catala_en:5.10-11:
┌─⯈ tests/test_default/bad/empty_with_rules.catala_en:5.11-5.12:
└─┐
5 │ context x content integer
│ ‾
└─ Article
[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.11-5.12:
└─┐
5 │ context x content integer
│ ‾

View File

@ -11,6 +11,19 @@ scope A:
```catala-test-inline
$ catala Interpret -s A
[WARNING] These definitions have identical justifications and consequences; is it a mistake?
┌─⯈ tests/test_default/good/mutliple_definitions.catala_en:9.3-9.15:
└─┐
9 │ definition w equals 3
│ ‾‾‾‾‾‾‾‾‾‾‾‾
┌─⯈ tests/test_default/good/mutliple_definitions.catala_en:6.3-6.15:
└─┐
6 │ definition w equals 3
│ ‾‾‾‾‾‾‾‾‾‾‾‾
[RESULT] Computation successful! Results:
[RESULT] w = 3
```

View File

@ -18,7 +18,7 @@ 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.23-14.28:
└──┐
14 │ definition e equals Case1
│ ‾‾‾‾‾

View File

@ -19,7 +19,7 @@ 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.4-20:
┌─⯈ tests/test_enum/bad/ambiguous_wildcard.catala_en:15.5-15.21:
└──┐
15 │ -- anything : 31
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾

View File

@ -22,13 +22,13 @@ 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.16-18.20:
└──┐
18 │ -- Case3 : true
│ ‾‾‾‾
└─ Article
┌─⯈ tests/test_enum/bad/duplicate_case.catala_en:17.15-20:
┌─⯈ tests/test_enum/bad/duplicate_case.catala_en:17.16-17.21:
└──┐
17 │ -- Case3 : false
│ ‾‾‾‾‾

View File

@ -11,7 +11,7 @@ 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.25-4.28:
└─┐
4 │ declaration enumeration Foo:
│ ‾‾‾

View File

@ -20,21 +20,21 @@ scope A:
$ catala Interpret -s A
[WARNING] In scope "A", the variable "out" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_enum/bad/missing_case.catala_en:11.10-13:
┌─⯈ tests/test_enum/bad/missing_case.catala_en:11.11-11.14:
└──┐
11 │ context out content boolean
│ ‾‾‾
└─ Article
[WARNING] The constructor "Case3" of enumeration "E" is never used; maybe it's unnecessary?
┌─⯈ tests/test_enum/bad/missing_case.catala_en:7.5-10:
┌─⯈ tests/test_enum/bad/missing_case.catala_en:7.6-7.11:
└─┐
7 │ -- Case3
│ ‾‾‾‾‾
└─ Article
[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.25-16.22:
└──┐
14 │ definition out equals match e with pattern
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾

View File

@ -41,7 +41,7 @@ $ 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.4-20:
┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:19.5-19.21:
└──┐
19 │ -- anything : 31
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
@ -49,7 +49,7 @@ Not ending wildcard:
└─ Wildcard can't be the first case
Next reachable case:
┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:20.4-17:
┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:20.5-20.18:
└──┐
20 │ -- Case2 : 42
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾
@ -63,7 +63,7 @@ $ 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.4-20:
┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:19.5-19.21:
└──┐
19 │ -- anything : 31
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
@ -71,7 +71,7 @@ Not ending wildcard:
└─ Wildcard can't be the first case
Next reachable case:
┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:20.4-17:
┌─⯈ tests/test_enum/bad/not_ending_wildcard.catala_en:20.5-20.18:
└──┐
20 │ -- Case2 : 42
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾

View File

@ -35,21 +35,21 @@ $ 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.23-28.24:
└──┐
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.21-17.22:
└──┐
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.23-28.43:
└──┐
28 │ definition y equals x with pattern Case3
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾

View File

@ -25,21 +25,21 @@ $ 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.21-18.22:
└──┐
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.19-13.20:
└──┐
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.21-18.41:
└──┐
18 │ definition y equals x with pattern Case3
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾

View File

@ -24,21 +24,21 @@ $ 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.21-17.22:
└──┐
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.19-12.20:
└──┐
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.21-17.41:
└──┐
17 │ definition y equals x with pattern Case3
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾

View File

@ -19,7 +19,7 @@ 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.38-15.43:
└──┐
15 │ definition y equals x with pattern Case3
│ ‾‾‾‾‾

View File

@ -25,7 +25,7 @@ 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-12:
┌─⯈ tests/test_enum/bad/too_many_cases.catala_en:21.8-21.13:
└──┐
21 │ -- Case4 : true
│ ‾‾‾‾‾

View File

@ -21,7 +21,7 @@ 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.4-20:
┌─⯈ tests/test_enum/bad/useless_wildcard.catala_en:17.5-17.21:
└──┐
17 │ -- anything : 31
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾

View File

@ -18,7 +18,7 @@ $ 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:12.2-13.14:
┌─⯈ tests/test_exception/bad/ambiguous_unlabeled_exception.catala_en:12.3-13.15:
└──┐
12 │ exception
│ ‾‾‾‾‾‾‾‾‾
@ -27,14 +27,14 @@ Ambiguous exception
└─ 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.14-10.15:
└──┐
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.14-8.15:
└─┐
8 │ definition x equals 0
│ ‾

View File

@ -17,7 +17,7 @@ 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.13-12.19:
└──┐
12 │ exception base_y
│ ‾‾‾‾‾‾

View File

@ -22,14 +22,14 @@ scope A:
$ catala Interpret -s A
[WARNING] In scope "A", the variable "x" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:5.10-11:
┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:5.11-5.12:
└─┐
5 │ context x content integer
│ ‾
└─ Test
[ERROR] Exception cycle detected when defining x: each of these 3 exceptions applies over the previous one, and the first applies over the last
┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:8.2-10.14:
┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:8.3-10.15:
└──┐
8 │ label base_x
│ ‾‾‾‾‾‾‾‾‾‾‾‾
@ -39,7 +39,7 @@ $ catala Interpret -s A
│ ‾‾‾‾‾‾‾‾‾‾‾‾
┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:12.2-14.14:
┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:12.3-14.15:
└──┐
12 │ label exception_x
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
@ -49,7 +49,7 @@ $ catala Interpret -s A
│ ‾‾‾‾‾‾‾‾‾‾‾‾
┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:16.2-18.14:
┌─⯈ tests/test_exception/bad/exceptions_cycle.catala_en:16.3-18.15:
└──┐
16 │ label exception_exception_x
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾

View File

@ -13,7 +13,7 @@ scope A:
$ catala Interpret -s A
[ERROR] This exception does not have a corresponding definition
┌─⯈ tests/test_exception/bad/missing_unlabeled_definition.catala_en:8.2-9.14:
┌─⯈ tests/test_exception/bad/missing_unlabeled_definition.catala_en:8.3-9.15:
└─┐
8 │ exception
│ ‾‾‾‾‾‾‾‾‾

View File

@ -24,7 +24,7 @@ $ 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:18.2-19.14:
┌─⯈ tests/test_exception/bad/one_ambiguous_exception.catala_en:18.3-19.15:
└──┐
18 │ exception
│ ‾‾‾‾‾‾‾‾‾
@ -33,14 +33,14 @@ Ambiguous exception
└─ 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.14-16.15:
└──┐
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.14-14.15:
└──┐
14 │ definition y equals 2
│ ‾

View File

@ -14,14 +14,14 @@ scope A:
$ catala Interpret -s A
[WARNING] In scope "A", the variable "y" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_exception/bad/self_exception.catala_en:5.10-11:
┌─⯈ tests/test_exception/bad/self_exception.catala_en:5.11-5.12:
└─┐
5 │ context y content integer
│ ‾
└─ Test
[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.13-9.19:
└─┐
9 │ exception base_y
│ ‾‾‾‾‾‾

View File

@ -19,7 +19,7 @@ scope A:
$ catala Interpret -s A
[WARNING] In scope "A", the variable "x" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_exception/bad/two_exceptions.catala_en:5.10-11:
┌─⯈ tests/test_exception/bad/two_exceptions.catala_en:5.11-5.12:
└─┐
5 │ context x content integer
│ ‾
@ -27,14 +27,14 @@ $ 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.23-12.24:
└──┐
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.23-15.24:
└──┐
15 │ definition x equals 2
│ ‾

View File

@ -0,0 +1,58 @@
## Foo
```catala
declaration scope Foo:
output x content integer
scope Foo:
definition x equals 1
definition x equals 1
```
```catala-test-inline
$ catala Scopelang -s Foo
[WARNING] These definitions have identical justifications and consequences; is it a mistake?
┌─⯈ tests/test_exception/good/double_definition.catala_en:9.3-9.15:
└─┐
9 │ definition x equals 1
│ ‾‾‾‾‾‾‾‾‾‾‾‾
└─ Foo
┌─⯈ tests/test_exception/good/double_definition.catala_en:8.3-8.15:
└─┐
8 │ definition x equals 1
│ ‾‾‾‾‾‾‾‾‾‾‾‾
└─ Foo
let scope Foo (x: integer|internal|output) =
let x : integer = ⟨true ⊢ ⟨ ⟨true ⊢ 1⟩, ⟨true ⊢ 1⟩ | false ⊢ ∅ ⟩⟩
```
In Scopelang we have what looks like conflicting exceptions. But after
discussions related in https://github.com/CatalaLang/catala/issues/208, we
have decided to relax this behavior when translating to Dcalc because the
consequences of the conflicting exceptions are the same. Hence the
Dcalc translation below.
```catala-test-inline
$ catala Dcalc -s Foo
[WARNING] These definitions have identical justifications and consequences; is it a mistake?
┌─⯈ tests/test_exception/good/double_definition.catala_en:9.3-9.15:
└─┐
9 │ definition x equals 1
│ ‾‾‾‾‾‾‾‾‾‾‾‾
└─ Foo
┌─⯈ tests/test_exception/good/double_definition.catala_en:8.3-8.15:
└─┐
8 │ definition x equals 1
│ ‾‾‾‾‾‾‾‾‾‾‾‾
└─ Foo
let scope Foo (Foo_in: Foo_in): Foo {x: integer} =
let set x : integer =
error_empty ⟨true ⊢ ⟨ ⟨ ⟨true ⊢ 1⟩ | true ⊢ 1 ⟩ | false ⊢ ∅ ⟩⟩
in
return { Foo x = x; }
```

View File

@ -48,34 +48,34 @@ let scope Foo (y: integer|input) (x: integer|internal|output) =
$ catala Exceptions -s Foo -v x
[RESULT] Printing the tree of exceptions for the definitions of variable "x" of scope "Foo".
[RESULT] Definitions with label "base":
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:9.2-25:
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:9.3-9.26:
└─┐
9 │ label base definition x under condition
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
└─ Test
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:13.2-25:
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:13.3-13.26:
└──┐
13 │ label base definition x under condition
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
└─ Test
[RESULT] Definitions with label "intermediate":
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:17.2-48:
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:17.3-17.49:
└──┐
17 │ label intermediate exception base definition x under condition
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
└─ Test
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:21.2-48:
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:21.3-21.49:
└──┐
21 │ label intermediate exception base definition x under condition
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
└─ Test
[RESULT] Definitions with label "exception_to_intermediate":
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:25.2-37:
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:25.3-25.38:
└──┐
25 │ exception intermediate definition x under condition
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
└─ Test
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:29.2-37:
┌─⯈ tests/test_exception/good/groups_of_exceptions.catala_en:29.3-29.38:
└──┐
29 │ exception intermediate definition x under condition
│ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾

View File

@ -32,14 +32,14 @@ $ 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.65-14.70:
└──┐
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.62-15.67:
└──┐
15 │ definition f of x under condition not b consequence equals x * x
│ ‾‾‾‾‾

View File

@ -17,14 +17,14 @@ $ catala typecheck
[ERROR] Function argument name mismatch between declaration ('x') and definition ('y')
Argument declared here:
┌─⯈ tests/test_func/bad/param_inconsistency.catala_en:4.41-42:
┌─⯈ tests/test_func/bad/param_inconsistency.catala_en:4.42-4.43:
└─┐
4 │ internal f1 content decimal depends on x content integer
│ ‾
Defined here:
┌─⯈ tests/test_func/bad/param_inconsistency.catala_en:10.19-20:
┌─⯈ tests/test_func/bad/param_inconsistency.catala_en:10.20-10.21:
└──┐
10 │ definition f1 of y under condition not cond
│ ‾

View File

@ -16,14 +16,14 @@ $ catala typecheck
[ERROR] Function argument name mismatch between declaration ('x') and definition ('y')
Argument declared here:
┌─⯈ tests/test_func/bad/param_inconsistency2.catala_en:4.41-42:
┌─⯈ tests/test_func/bad/param_inconsistency2.catala_en:4.42-4.43:
└─┐
4 │ internal f1 content decimal depends on x content integer
│ ‾
Defined here:
┌─⯈ tests/test_func/bad/param_inconsistency2.catala_en:9.29-30:
┌─⯈ tests/test_func/bad/param_inconsistency2.catala_en:9.30-9.31:
└─┐
9 │ exception definition f1 of y under condition not cond
│ ‾

View File

@ -16,14 +16,14 @@ $ catala typecheck
[ERROR] Function argument name mismatch between declaration ('x') and definition ('y')
Argument declared here:
┌─⯈ tests/test_func/bad/param_inconsistency3.catala_en:4.41-42:
┌─⯈ tests/test_func/bad/param_inconsistency3.catala_en:4.42-4.43:
└─┐
4 │ internal f1 content decimal depends on x content integer
│ ‾
Defined here:
┌─⯈ tests/test_func/bad/param_inconsistency3.catala_en:9.29-30:
┌─⯈ tests/test_func/bad/param_inconsistency3.catala_en:9.30-9.31:
└─┐
9 │ exception definition f1 of y under condition not cond
│ ‾

View File

@ -12,7 +12,7 @@ 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.28-8.29:
└─┐
8 │ definition f of x equals f of x + 1
│ ‾

View File

@ -15,7 +15,7 @@ scope S:
$ catala Lcalc -s S --avoid_exceptions -O --closure_conversion
[ERROR] Variable x not found in the current context
┌─⯈ tests/test_func/good/closure_conversion.catala_en:5.11-12:
┌─⯈ tests/test_func/good/closure_conversion.catala_en:5.12-5.13:
└─┐
5 │ internal f content integer depends on y content integer
│ ‾

View File

@ -19,7 +19,7 @@ scope B:
$ catala Scopelang -s B
[WARNING] In scope "A", the variable "f" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_func/good/context_func.catala_en:5.10-11:
┌─⯈ tests/test_func/good/context_func.catala_en:5.11-5.12:
└─┐
5 │ context f content integer depends on x content integer
│ ‾
@ -33,7 +33,7 @@ let scope B (b: bool|input) =
$ catala Dcalc -s A
[WARNING] In scope "A", the variable "f" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_func/good/context_func.catala_en:5.10-11:
┌─⯈ tests/test_func/good/context_func.catala_en:5.11-5.12:
└─┐
5 │ context f content integer depends on x content integer
│ ‾
@ -51,7 +51,7 @@ let scope A (A_in: A_in {f_in: integer → integer}): A =
$ catala Dcalc -s B
[WARNING] In scope "A", the variable "f" is never used anywhere; maybe it's unnecessary?
┌─⯈ tests/test_func/good/context_func.catala_en:5.10-11:
┌─⯈ tests/test_func/good/context_func.catala_en:5.11-5.12:
└─┐
5 │ context f content integer depends on x content integer
│ ‾

Some files were not shown because too many files have changed in this diff Show More