catala/doc/enlish_token_list.md

399 lines
6.3 KiB
Markdown
Raw Normal View History

2020-04-24 20:16:50 +03:00
# Catala english token proposals
## FIELD
Current proposal: "application field".
The logical context in which the text of the law will apply. Examples are
"computation of family benefits", "determination of child credit eligibility".
```
application field FamilyBenefitsComputation:
...
```
## DATA
Current proposal: "data".
When declaring a data structure, introduces a data field :
```
structure Foo:
data bar ...
```
## CONTENT
Current proposal: "content".
Introduces type annotation for data.
```
data bar content boolean
```
## DEPENDS
Current proposal : "depends"
Introduces a dependency on a parameter for a piece of data when declaring
a structure.
```
data bar depends on Foo
```
## DECLARATION
Current proposal : "declaration"
Declares a structure or a enumeration in the metadata section.
## INCLUDES
Current proposal "includes"
A FIELD can include another FIELD, building up code modularity which is also
present in statutes.
```
declaration application field FamilyBenefitsComputation:
...
includes application field HouseholdIncomeComputation
```
## CONTEXT
Current proposal : "context"
A FIELD has several parameters, which are the data in the logical context of the
FIELD. CONTEXT introduces these data.
```
declaration application field FamilyBenefitsComputation:
context foo content FOO
```
Also introduces context matching when including another field:
```
...
includes application field HouseholdIncomeComputation:
HouseholdIncomeComputation.household = FamilyBenefitsComputation.household
...
```
## VARIES_WITH DECREASING INCREASING
Current proposal : "varies with" "decreasing" "increasing"
Way in which a numeric function can vary.
```
foo varies with bar decreasing
```
## OF
Current proposal: "of"
Used as function application token with a single parameter (foo of bar)
```
income of household
```
## COLLECTION
Current proposal: "collection"
Annotation for data that are collection of other data.
```
data children content collection Child
```
## ENUM
Current proposal : "enumeration".
An enumeration is a sum type modelling an alternative.
```
declaration enumeration Foo:
-- ChoiceA
-- ChoiceB content Bar
```
## STRUCT
Current proposal: "structure".
Introduces a structure data type (product type).
```
declaration structure Foo:
fieldA content integer
fieldB content boolean
...
```
## INTEGER
Current proposal : "integer".
The base integer data type.
```
data foo content integer
```
## MONEY
Current proposal : "amount".
The base data type for representing amounts of money.
```
data foo content amount
```
## TEXT
Current proposal : "text".
The base data type for representing strings.
```
data foo content text
```
## DECIMAL
Current proposal : "decimal".
The base data type for representing fixed- or floating-point numbers.
```
data foo content decimal
```
## DATE
Current proposal : "date".
The base data type for representing dates.
```
data foo content date
```
## BOOLEAN
Current proposal : "boolean".
The base data type for representing booleans. Apparently lawyers don't know what
it is but I haven't found a better word.
```
data foo content boolean
```
## SUM
Current proposal: "sum".
Function for doing the sum of a quantity over a collection of data.
```
sum for child in children of child.income
```
## CARDINAL
Current proposal: "number".
Function for counting the number of data in a collection that satisfy a predicate.
```
number for child in children of child.age > 15 year
```
## CONDITION
Current proposal: "condition"
A condition is a special kind of DATA used to represent logical and juridical
conditions. In default logic, it is a boolean whose default value is false.
```
structure ArticleFoo:
condition eligible_for_credit
```
## FILLED
Current proposal: "fulfilled"
Action TOKEN to declare a CONDITION valid in a rule.
```
eligible_for_credit fulfilled
```
## RULE
Current proposal: "rule"
Inside a FIELD, introduces a rules that sets a CONDITION to FILLED or not FILLED
```
application field FamilyBenefitsComputation:
rule under condition
number of household.children > 2
consequence eligible filled
```
## DEFINITION
Current proposal: "definition".
Same thing as RULE but for data that is not a condition.
```
application field FamilyBenefitsComputation:
definition income defined as
sum for child in household.children of child.income
```
## DEFINED_AS
Current proposal: "defined as".
Introduces the expression of a data in a DEFINITION.
See above for example.
## MATCH
Current proposal: "match".
Allows to case on an enumeration.
```
match matrimonial_status with pattern
-- Married
-- Single
```
## WITH
Current proposal: "with pattern".
Complement of MATCH. See above.
## UNDER_CONDITION
Current proposa: "under condition".
Soft if-then-else for default logic.
```
definition credit
under condition eligible_for_credit
consequence defined as $10
```
## CONSEQUENCE
Current proposal: "consequence"
Counterpart of UNDER_CONDITION. See above.
## IF THEN ELSE
Current proposal: "if" "then" "else"
The hard if/then/else of traditional programming.
```
if child.age > 15 then Eligible else NotEligible
```
## OPTIONAL
Current proposal: "optional".
Syntax shorthand for a Absent/Present enumeration.
```
data husband optional
```
## ASSERTION
Current proposal: "assertion".
Introduces inside a FIELD a thing that should always be true.
```
assertion for each child in children we have child.age >= 0
```
## FOR ALL WE_HAVE
Current proposal: "for" "all" "we have"
Introduces a forall predicate or aggregation over a collection of data.
See above.
### EXISTS IN SUCH THAT
Current proposal: "exists" "in" "such" "that"
Introduces an existential predicate over a collection of data.
```
exists child in children such that child.age > 20 year
```
## FIXED BY
Current proposal: "fixed" "by"
Asserts that a particular variable is defined in a particular category of
legislative text.
```
assertion foo.bar fixed by executive order
```
## NOW
Current proposal "now".
Builtin function returning the date of today when executing the code.
## AND OR NOT
Current proposal: "and" "or" "not".
Logical connectives.
```
(age > 15) and (eligible or special_thing)
```
### YEAR MONTH DAY
Current proposal: "year" "month" "day"
Units of time for duration specification.
```
15 months + 1 year
```