diff options
Diffstat (limited to 'Tests/MODELS2020-CaseStudies/case.study.pledge.model/archive/TaxationOld.ecore_')
-rw-r--r-- | Tests/MODELS2020-CaseStudies/case.study.pledge.model/archive/TaxationOld.ecore_ | 1257 |
1 files changed, 1257 insertions, 0 deletions
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.model/archive/TaxationOld.ecore_ b/Tests/MODELS2020-CaseStudies/case.study.pledge.model/archive/TaxationOld.ecore_ new file mode 100644 index 00000000..efee1602 --- /dev/null +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.model/archive/TaxationOld.ecore_ | |||
@@ -0,0 +1,1257 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="TaxationOld" nsURI="http:///TaxCardOld.ecore" nsPrefix="TaxCardOld"> | ||
4 | <eAnnotations source="http://www.eclipse.org/OCL/Import"> | ||
5 | <details key="ecore" value="http://www.eclipse.org/emf/2002/Ecore"/> | ||
6 | </eAnnotations> | ||
7 | <eClassifiers xsi:type="ecore:EEnum" name="Grantor"> | ||
8 | <eLiterals name="WWW" literal="WWW"/> | ||
9 | <eLiterals name="Employer" value="1" literal="Employer"/> | ||
10 | <eLiterals name="MMM" value="2" literal="MMM"/> | ||
11 | <eLiterals name="UUU" value="3" literal="UUU"/> | ||
12 | <eLiterals name="YYY" value="4" literal="YYY"/> | ||
13 | <eLiterals name="OOO" value="5" literal="OOO"/> | ||
14 | </eClassifiers> | ||
15 | <eClassifiers xsi:type="ecore:EClass" name="Constants" abstract="true"> | ||
16 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MAXIMUM_CE_RATE_FOR_CHILD_NOT_BEING_PART_OF_HOUSEHOLD" | ||
17 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
18 | defaultValueLiteral="3480.0"/> | ||
19 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MAXIMUM_CE_RATE_FOR_HOUSE_CARE_AND_CHILD_PART_OF_THE_HOUSEHOLD_CARE" | ||
20 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
21 | defaultValueLiteral="3600.0"/> | ||
22 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MINIMUM_SALARY" lowerBound="1" | ||
23 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="1500.0"/> | ||
24 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_FOR_EXTRA_PROFESSIONAL_DEDUCTION" | ||
25 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
26 | defaultValueLiteral="4500.0"/> | ||
27 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MAXIMUM_DEDUCTIBLE_PERCENTAGE_FOR_DONATIONS" | ||
28 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
29 | defaultValueLiteral="20.0"/> | ||
30 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MINIMUM_DEDUCTIBLE_AMOUNT_FOR_DONATIONS" | ||
31 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
32 | defaultValueLiteral="120.0"/> | ||
33 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MAXIMUM_DEDUCTIBLE_AMOUNT_FOR_ADDITIONAL_PENSION_AND_INSURANC" | ||
34 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
35 | defaultValueLiteral="0.0"/> | ||
36 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MAXIMUM_DEDUCTIBLE_AMOUNT_FOR_ALIMONY_EXPENSE" | ||
37 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
38 | defaultValueLiteral="24000.0"/> | ||
39 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MAXIMAL_DISTANCE_FOR_TRAVEL_EXPENSE_DEDUCTION" | ||
40 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
41 | defaultValueLiteral="99.0"/> | ||
42 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MAXIMAL_FLAT_DISTANCE_FOR_TRAVEL_EXPENSE_DEDUCTION" | ||
43 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
44 | defaultValueLiteral="30.0"/> | ||
45 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MINIMAL_DISTANCE_FOR_TRAVEL_EXPENSE_DEDUCTION" | ||
46 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
47 | defaultValueLiteral="4.0"/> | ||
48 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_CIM_DAILY" lowerBound="1" | ||
49 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="2.0"/> | ||
50 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_CIM_MONTHLY" | ||
51 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
52 | defaultValueLiteral="62.0"/> | ||
53 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_CIM_YEARLY" lowerBound="1" | ||
54 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="750.0"/> | ||
55 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_CIP_DAILY" lowerBound="1" | ||
56 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="1.0"/> | ||
57 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_CIP_MONTHLY" | ||
58 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
59 | defaultValueLiteral="25.0"/> | ||
60 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_CIP_YEARLY" lowerBound="1" | ||
61 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="30.0"/> | ||
62 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_CIS_DAILY" lowerBound="1" | ||
63 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="1.0"/> | ||
64 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_CIS_MONTHLY" | ||
65 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
66 | defaultValueLiteral="25.0"/> | ||
67 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_CIS_YEARLY" lowerBound="1" | ||
68 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="300.0"/> | ||
69 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_FOR_TRAVEL_EXPENSE_PER_UNIT" | ||
70 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
71 | defaultValueLiteral="99.0"/> | ||
72 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MAXIMUM_DEDUCTIBLE_AMOUNT_FOR_DS" | ||
73 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
74 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="FLAT_RATE_FOR_MISCELLANEOUS_EXPENSE" | ||
75 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
76 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="DISABILITY_FLAT_RATE_FOR_MISCELLANEOUS_EXPENSE" | ||
77 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
78 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="MAXIMUM_DEDUCTIBLE_AMOUNT_FOR_ADDITIONAL_PENSION_AND_INSURANCE" | ||
79 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
80 | </eClassifiers> | ||
81 | <eClassifiers xsi:type="ecore:EEnum" name="Disability_Types"> | ||
82 | <eLiterals name="beug"/> | ||
83 | <eLiterals name="NONE" value="1"/> | ||
84 | <eLiterals name="A" value="2" literal="A"/> | ||
85 | <eLiterals name="B" value="3" literal="B"/> | ||
86 | <eLiterals name="C" value="4" literal="C"/> | ||
87 | <eLiterals name="D" value="5" literal="D"/> | ||
88 | <eLiterals name="E" value="6" literal="E"/> | ||
89 | <eLiterals name="OTHER" value="7"/> | ||
90 | </eClassifiers> | ||
91 | <eClassifiers xsi:type="ecore:EEnum" name="Country"> | ||
92 | <eLiterals name="ZZ" literal="ZZ"/> | ||
93 | <eLiterals name="FF" value="1" literal="FF"/> | ||
94 | <eLiterals name="BB" value="2" literal="BB"/> | ||
95 | <eLiterals name="DD" value="3" literal="DD"/> | ||
96 | <eLiterals name="NN" value="4" literal="NN"/> | ||
97 | <eLiterals name="OTHER" value="5" literal="OTHER"/> | ||
98 | </eClassifiers> | ||
99 | <eClassifiers xsi:type="ecore:EEnum" name="Tax_Card_Type"> | ||
100 | <eLiterals name="Principal" literal="Principal"/> | ||
101 | <eLiterals name="Additional" value="1" literal="Additional"/> | ||
102 | </eClassifiers> | ||
103 | <eClassifiers xsi:type="ecore:EEnum" name="Tax_Office"> | ||
104 | <eLiterals name="RTS_2" literal="RTS_2"/> | ||
105 | <eLiterals name="RTS_3" value="1" literal="RTS_3"/> | ||
106 | <eLiterals name="RTS_4" value="2" literal="RTS_4"/> | ||
107 | <eLiterals name="RTS_5" value="3" literal="RTS_5"/> | ||
108 | </eClassifiers> | ||
109 | <eClassifiers xsi:type="ecore:EEnum" name="Tax_Class_Category"> | ||
110 | <eLiterals name="One" literal="One"/> | ||
111 | <eLiterals name="One_A" value="1" literal="One_A"/> | ||
112 | <eLiterals name="Two" value="2" literal="Two"/> | ||
113 | </eClassifiers> | ||
114 | <eClassifiers xsi:type="ecore:EEnum" name="Job_Activity"> | ||
115 | <eLiterals name="Salary" literal="Salary"/> | ||
116 | <eLiterals name="Pension" value="1" literal="Pension"/> | ||
117 | <eLiterals name="Annuity" value="2" literal="Annuity"/> | ||
118 | </eClassifiers> | ||
119 | <eClassifiers xsi:type="ecore:EEnum" name="Town"> | ||
120 | <eLiterals name="LL" literal="LL"/> | ||
121 | <eLiterals name="BB" value="1" literal="BB"/> | ||
122 | <eLiterals name="SS" value="2" literal="SS"/> | ||
123 | <eLiterals name="TT" value="3" literal="TT"/> | ||
124 | <eLiterals name="Other" value="4" literal="Other"/> | ||
125 | </eClassifiers> | ||
126 | <eClassifiers xsi:type="ecore:EEnum" name="Type_of_Rate"> | ||
127 | <eLiterals name="REGULAR" literal="REGULAR"/> | ||
128 | <eLiterals name="REAL_COST" value="1" literal="REAL_COST"/> | ||
129 | </eClassifiers> | ||
130 | <eClassifiers xsi:type="ecore:EEnum" name="CE_Type"> | ||
131 | <eLiterals name="INALIDITY_AND_INFIRMITY" literal="INALIDITY_AND_INFIRMITY"/> | ||
132 | <eLiterals name="DEPENDENCE_AND_CARE_EXCLUDING_CHLIDREN_NOT_PART_OF_HOUSEHOLD" | ||
133 | value="1" literal="DEPENDENCE_AND_CARE_EXCLUDING_CHLIDREN_NOT_PART_OF_HOUSEHOLD"/> | ||
134 | <eLiterals name="CARE_FOR_CHILDREN_NOT_BEING_PART_OF_HOUSEHOLD" value="2" literal="CARE_FOR_CHILDREN_NOT_BEING_PART_OF_HOUSEHOLD"/> | ||
135 | </eClassifiers> | ||
136 | <eClassifiers xsi:type="ecore:EEnum" name="Expense_Purpose"> | ||
137 | <eLiterals name="HOUSE_CARE" literal="HOUSE_CARE"/> | ||
138 | <eLiterals name="CHILD_CARE" value="1" literal="CHILD_CARE"/> | ||
139 | <eLiterals name="DEPENDENCE_CARE" value="2" literal="DEPENDENCE_CARE"/> | ||
140 | <eLiterals name="OTHER" value="3" literal="OTHER"/> | ||
141 | <eLiterals name="ALIMONY" value="4"/> | ||
142 | <eLiterals name="RECURRENT_DEPT" value="5"/> | ||
143 | </eClassifiers> | ||
144 | <eClassifiers xsi:type="ecore:EEnum" name="Dependent_Type"> | ||
145 | <eLiterals name="CHILD" literal="CHILD"/> | ||
146 | <eLiterals name="SPOUSE" value="1" literal="SPOUSE"/> | ||
147 | <eLiterals name="RELATIVE" value="2" literal="RELATIVE"/> | ||
148 | <eLiterals name="OTHER_FAMILY_MEMBER" value="3" literal="OTHER_FAMILY_MEMBER"/> | ||
149 | <eLiterals name="NOT_OWN_CHILD" value="4"/> | ||
150 | </eClassifiers> | ||
151 | <eClassifiers xsi:type="ecore:EClass" name="Income_Tax"> | ||
152 | <eStructuralFeatures xsi:type="ecore:EReference" name="taxPayer" lowerBound="1" | ||
153 | eType="#//Tax_Payer"/> | ||
154 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tax_amount" lowerBound="1" | ||
155 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
156 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tax_year" lowerBound="1" | ||
157 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
158 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id6" ordered="false" lowerBound="1" | ||
159 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
160 | </eClassifiers> | ||
161 | <eClassifiers xsi:type="ecore:EClass" name="Tax_Payer" abstract="true" eSuperTypes="#//Physical_Person #//Tax_Case"> | ||
162 | <eAnnotations source="duplicates"> | ||
163 | <contents xsi:type="ecore:EReference" name="expenses" ordered="false" upperBound="-1" | ||
164 | eType="#//Expense" containment="true"> | ||
165 | <eAnnotations source="redefines" references="#//Physical_Person/expenses"/> | ||
166 | </contents> | ||
167 | </eAnnotations> | ||
168 | <eOperations name="is_dependent_part_of_the_household" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> | ||
169 | <eParameters name="IN_dependent" lowerBound="1" eType="#//Dependent"/> | ||
170 | </eOperations> | ||
171 | <eOperations name="number_of_months_of_allowance" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
172 | <eOperations name="deduction_according_disability_rate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
173 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
174 | <details key="body" value="if ( self.disability_percentage >= 0.25 and self.disability_percentage < 0.35) then
			150.0
			else if ( self.disability_percentage >= 0.35 and self.disability_percentage < 0.45) then
			225.0
			else if ( self.disability_percentage >=0.45 and self.disability_percentage <0.55) then
			375.0
			else if ( self.disability_percentage >= 0.55 and self.disability_percentage < 0.65 ) then
			450.0
			else if ( self.disability_percentage >= 0.65 and self.disability_percentage < 0.75) then
			525.0
			else if ( self.disability_percentage >=0.75 and self.disability_percentage < 0.85) then
			585.0
			else if ( self.disability_percentage >=0.85 and self.disability_percentage< 0.95) then
			645.0
			else if ( self.disability_percentage >= 0.95 and self.disability_percentage<=1)then
			735.0 else 0.0 endif endif endif endif endif endif endif endif"/> | ||
175 | </eAnnotations> | ||
176 | </eOperations> | ||
177 | <eOperations name="getIsTaxedJointly" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> | ||
178 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
179 | <details key="body" value="let is_married:Boolean = if(self.getLegalUnionRecord(year).oclIsUndefined()) then false else self.getLegalUnionRecord(year).oclIsTypeOf(Marriage_Record) endif in													
/** Description: - **/	
if (is_married) = false then
 let is_in_partnership_relation:Boolean = if(self.getLegalUnionRecord(year).oclIsUndefined()) then false else self.getLegalUnionRecord(year).oclIsTypeOf(Partnership_Record) endif in													
 /** Description: - **/	
 if (is_in_partnership_relation) = false then
 false
 else
 if (is_in_partnership_relation) = true then
 let is_joint_tax_beneficial:Boolean = true in													
 /** Description: - **/	
 if (is_joint_tax_beneficial) = true then
 let is_couple_living_apart:Boolean = false in													
 /** Description: - **/	
 let relation_lasted_for_the_taxation_year:Boolean = true in													
 /** Description: - **/	
 if (relation_lasted_for_the_taxation_year and not is_couple_living_apart) = false then
 false
 else
 if (relation_lasted_for_the_taxation_year and not is_couple_living_apart) = true then
 let are_both_spouses_resident:Boolean = (self.getSpouse(year).oclIsTypeOf(Resident_Tax_Payer) or self.getSpouse(year).oclIsTypeOf(Physical_Person)) and self.oclIsTypeOf(Resident_Tax_Payer) in													
 /** Description: - **/	
 if (are_both_spouses_resident) = true then
 true
 else
 if (are_both_spouses_resident) = false then
 let are_both_spouses_non_resident:Boolean = (self.getSpouse(year).oclIsTypeOf(Non_Resident_Tax_Payer) or self.getSpouse(year).oclIsTypeOf(Physical_Person)) and self.oclIsTypeOf(Non_Resident_Tax_Payer) in													
 /** Description: - **/	
 if (are_both_spouses_non_resident) = false then
 false
 else
 if (are_both_spouses_non_resident) = true then
 let my_incomes_all:Set(Income) = self.incomes->select(i:Income|i.year=year and i.oclIsTypeOf(Local_Income)) 
 	in													
 /** Description: - **/	
 let spouse_incomes_all:Set(Income) = if(self.getSpouse(year).oclIsKindOf(Tax_Payer)) then self.getSpouse(year).oclAsType(Tax_Payer).incomes->select(i:Income|i.year=year and i.oclIsTypeOf(Local_Income)) else OrderedSet{} endif	in													
 let total_household_income:Real = if(my_incomes_all->oclIsInvalid() and spouse_incomes_all->oclIsInvalid()) then 0 else if(my_incomes_all->oclIsInvalid()) then spouse_incomes_all.income_amount->sum() else if(spouse_incomes_all->oclIsInvalid()) then my_incomes_all.income_amount->sum() else my_incomes_all.income_amount->sum() + spouse_incomes_all.income_amount->sum() endif endif endif
 in													
 /** Description: - **/	
 let resident_taxpayer_income:Real = if(self.oclIsTypeOf(Resident_Tax_Payer)) then if(my_incomes_all->oclIsInvalid()) then 0.0 else my_incomes_all.income_amount->sum() endif else if(spouse_incomes_all->oclIsInvalid()) then 0.0 else spouse_incomes_all.income_amount->sum() endif endif in													
 /** Description: - **/	
 let non_resident_taxpayer_in_Belgium:Boolean = false in													
 /** Description: - **/	
 if ((resident_taxpayer_income > total_household_income * 0.9) or (non_resident_taxpayer_in_Belgium and resident_taxpayer_income > total_household_income * 0.5)) = true then
 true
 else
 if ((resident_taxpayer_income > total_household_income * 0.9) or (non_resident_taxpayer_in_Belgium and resident_taxpayer_income > total_household_income * 0.5)) = false then
 false
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 if (is_joint_tax_beneficial) = false then
 false
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
else
 if (is_married) = true then
 let are_both_spouses_resident:Boolean = (self.getSpouse(year).oclIsTypeOf(Resident_Tax_Payer) or self.getSpouse(year).oclIsTypeOf(Physical_Person)) and self.oclIsTypeOf(Resident_Tax_Payer) in													
 /** Description: - **/	
 if (are_both_spouses_resident) = true then
 true
 else
 if (are_both_spouses_resident) = false then
 let are_both_spouses_non_resident:Boolean = (self.getSpouse(year).oclIsTypeOf(Non_Resident_Tax_Payer) or self.getSpouse(year).oclIsTypeOf(Physical_Person)) and self.oclIsTypeOf(Non_Resident_Tax_Payer) in													
 /** Description: - **/	
 if (are_both_spouses_non_resident) = true then
 let my_incomes_all:Set(Income) = self.incomes->select(i:Income|i.year=year and i.oclIsTypeOf(Local_Income)) in													
 /** Description: - **/	
 let spouse_incomes_all:Set(Income) = if(self.getSpouse(year).oclIsKindOf(Tax_Payer)) then self.getSpouse(year).oclAsType(Tax_Payer).incomes->select(i:Income|i.year=year and i.oclIsTypeOf(Local_Income)) else OrderedSet{} endif	in													
 /** Description: - **/	
 let total_household_income:Real = if(my_incomes_all->oclIsInvalid() and spouse_incomes_all->oclIsInvalid()) then 0 else if(my_incomes_all->oclIsInvalid()) then spouse_incomes_all.income_amount->sum() else if(spouse_incomes_all->oclIsInvalid()) then my_incomes_all.income_amount->sum() else my_incomes_all.income_amount->sum() + spouse_incomes_all.income_amount->sum() endif endif endif
 in													
 /** Description: - **/	
 let resident_taxpayer_income:Real = if(self.oclIsTypeOf(Resident_Tax_Payer)) then if(my_incomes_all->oclIsInvalid()) then 0.0 else my_incomes_all.income_amount->sum() endif else if(spouse_incomes_all->oclIsInvalid()) then 0.0 else spouse_incomes_all.income_amount->sum() endif endif in													
 /** Description: - **/	
 let non_resident_taxpayer_in_Belgium:Boolean = false in													
 /** Description: - **/	
 let is_couple_assimilated_to_residents:Boolean = (resident_taxpayer_income > total_household_income * 0.9) or (non_resident_taxpayer_in_Belgium and resident_taxpayer_income > total_household_income * 0.5) in													
 /** Description: - **/	
 if (is_couple_assimilated_to_residents) = true then
 true
 else
 if (is_couple_assimilated_to_residents) = false then
 let is_couple_living_apart:Boolean = false in													
 /** Description: - **/	
 if (is_couple_living_apart) = true then
 false
 else
 if (is_couple_living_apart) = false then
 let my_incomes:Set(Income) = self.incomes->select(i:Income|i.year=year and i.income_type.oclIsKindOf(Employment_Income) and i.oclIsTypeOf(Local_Income)) 	in													
 /** Description: - **/	
 let spouse_incomes:Set(Income) = if(self.getSpouse(year).oclIsKindOf(Tax_Payer)) then self.getSpouse(year).oclAsType(Tax_Payer).incomes->select(i:Income|i.year=year and i.income_type.oclIsKindOf(Employment_Income) and i.oclIsTypeOf(Local_Income)) else OrderedSet{} endif	in													
 /** Description: - **/	
 let both_spouses_have_professional_income:Boolean = if(my_incomes->oclIsInvalid() or spouse_incomes->oclIsInvalid()) then false else my_incomes->size()>0 and spouse_incomes->size()>0 endif in													
 /** Description: - **/	
 if (both_spouses_have_professional_income) = true then
 let local_professional_household_income:Real = self.getProfetionalIncomeHouseholdZZ(year) in													
 /** Description: - **/	
 let total_professional_household_income:Real = self.getProfetionalIncomeHousehold(year) in													
 /** Description: - **/	
 if (local_professional_household_income > total_professional_household_income * 0.5) = false then
 false
 else
 if (local_professional_household_income > total_professional_household_income * 0.5) = true then
 true
 else
 invalid
 endif
 endif
 else
 if (both_spouses_have_professional_income) = false then
 false
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 if (are_both_spouses_non_resident) = false then
 let is_couple_living_apart:Boolean = false in													
 /** Description: - **/	
 if (is_couple_living_apart) = true then
 false
 else
 if (is_couple_living_apart) = false then
 let my_incomes:Set(Income) = self.incomes->select(i:Income|i.year=year and i.income_type.oclIsKindOf(Employment_Income) and i.oclIsTypeOf(Local_Income)) 	in													
 /** Description: - **/	
 let spouse_incomes:Set(Income) = if(self.getSpouse(year).oclIsKindOf(Tax_Payer)) then self.getSpouse(year).oclAsType(Tax_Payer).incomes->select(i:Income|i.year=year and i.income_type.oclIsKindOf(Employment_Income) and i.oclIsTypeOf(Local_Income)) else OrderedSet{} endif	in													
 /** Description: - **/	
 let both_spouses_have_professional_income:Boolean = if(my_incomes->oclIsInvalid() or spouse_incomes->oclIsInvalid()) then false else my_incomes->size()>0 and spouse_incomes->size()>0 endif in													
 /** Description: - **/	
 if (both_spouses_have_professional_income) = true then
 let total_professional_household_income:Real = self.getProfetionalIncomeHousehold(year) in													
 /** Description: - **/	
 let professional_income_resident_taxpayer:Real = if(self.oclIsTypeOf(Resident_Tax_Payer)) then if(my_incomes->oclIsInvalid()) then 0.0 else my_incomes.income_amount->sum() endif else if(spouse_incomes->oclIsInvalid()) then 0.0 else spouse_incomes.income_amount->sum() endif endif in													
 /** Description: - **/	
 if (professional_income_resident_taxpayer > total_professional_household_income * 0.9) = false then
 false
 else
 if (professional_income_resident_taxpayer > total_professional_household_income * 0.9) = true then
 true
 else
 invalid
 endif
 endif
 else
 if (both_spouses_have_professional_income) = false then
 false
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
endif"/> | ||
180 | </eAnnotations> | ||
181 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
182 | </eOperations> | ||
183 | <eOperations name="getIsreceivingAllowancesForChildren" ordered="false" lowerBound="1" | ||
184 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> | ||
185 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
186 | <details key="body" value="let children1:Set(Dependent)=self.dependents->select(dependent_type=Dependent_Type::CHILD) in
			let union:Legal_Union_Record=self.getLegalUnionRecord(year) in
			let house: Household = union.household in
			let children:Set(Dependent)=if (house.oclIsInvalid()) then children1 else children1->union(house.children) endif in
			if(children->size()=0)then
			false
			else		
			let allowances:Boolean=children.allowances->select(starting_year<=year and ending_year=-1 and amount>0)->size()>0in
			if(allowances)then
			true
			else
			false
			endif			
			endif"/> | ||
187 | </eAnnotations> | ||
188 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
189 | </eOperations> | ||
190 | <eOperations name="getProfetionalIncomeHousehold" ordered="false" lowerBound="1" | ||
191 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
192 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
193 | <details key="body" value="let spouse:Physical_Person= self.getSpouse(year)in
			let include_spouse:Boolean= if(not spouse.oclIsUndefined()) then spouse.oclIsKindOf(Tax_Payer) else false endif in
			let myIncomes:Set(Income)=self.incomes->select(i:Income|i.year=year and i.income_type.oclIsKindOf(Employment_Income)) in
			let myPart:Real= if(myIncomes->oclIsInvalid())then 0.0 else myIncomes.income_amount->sum() endif in
			
			if(include_spouse=false)then
			myPart
			else
			let herIncomes:Set(Income)=spouse.oclAsType(Tax_Payer).incomes->select(i:Income|i.year=year and i.income_type.oclIsKindOf(Employment_Income)) in
			let herPart:Real=if(herIncomes->oclIsInvalid())then 0.0 else herIncomes.income_amount->sum() endif in
			myPart+herPart
			endif"/> | ||
194 | </eAnnotations> | ||
195 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
196 | </eOperations> | ||
197 | <eOperations name="getProfetionalIncomeHouseholdZZ" ordered="false" lowerBound="1" | ||
198 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
199 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
200 | <details key="body" value="let spouse:Physical_Person= self.getSpouse(year)in
			let include_spouse:Boolean= if(not spouse.oclIsUndefined()) then spouse.oclIsKindOf(Tax_Payer) else false endif in
			let myIncomes:Set(Income)=self.incomes->select(i:Income|i.year=year and i.income_type.oclIsKindOf(Employment_Income) and i.oclIsTypeOf(Local_Income)) in
			let myPart:Real=if(myIncomes->oclIsInvalid())then 0.0 else myIncomes.income_amount->sum() endif in
			
			if(include_spouse=false)then
			myPart
			else
			let herIncomes:Set(Income)=spouse.oclAsType(Tax_Payer).incomes->select(i:Income|i.year=year and i.income_type.oclIsKindOf(Employment_Income)and i.oclIsTypeOf(Local_Income)) in
			let herPart:Real=if(herIncomes->oclIsInvalid())then 0.0 else herIncomes.income_amount->sum() endif in
			myPart+herPart
			endif"/> | ||
201 | </eAnnotations> | ||
202 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
203 | </eOperations> | ||
204 | <eOperations name="getTaxClass" ordered="false" lowerBound="1" eType="#//Tax_Class_Category"> | ||
205 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
206 | <details key="body" value="let is_resident_taxpayer:Boolean = self.oclIsKindOf(Resident_Tax_Payer) in													
/** Description: Returns yes if a given taxpayer is a resident. - **/	
if (is_resident_taxpayer) = true then
 let is_taxed_jointly:Boolean = self.getIsTaxedJointly(taxation_year) in													
 /** Description: Returns yes if the taxpayer is married or has a partnership contract. - **/	
 if (is_taxed_jointly) = true then
 Tax_Class_Category::Two
 else
 if (is_taxed_jointly) = false then
 let is_divorced:Boolean = self.getSeperationState(taxation_year,Separation_Causes::DIVORCE) in													
 /** Description: Returns yes if the taxpayer is divorced within the selected taxation year. - **/	
 let is_living_separately:Boolean = self.getSeperationState(taxation_year,Separation_Causes::SEPARATION_DE_FAIT) in													
 /** Description: Returns yes if the taxpayer is not cohabiting with his/her spouse. In French: "Separation de fait". - **/	
 let is_living_separately_by_court:Boolean = self.getSeperationState(taxation_year,Separation_Causes::SEPARATION_BY_COURT) in													
 /** Description: Returns yes if the taxpayer has a judicial sentence dismissing him from cohabiting with his/her spouse. In French: "Separation de corps". - **/	
 if (is_divorced or is_living_separately_by_court or (is_living_separately and not is_resident_taxpayer)) = false then
 let is_widower:Boolean = self.is_widower in													
 /** Description: Returns yes if the taxpayer has the statute of widower for the current taxation year. - **/	
 if (is_widower) = true then
 let spouse_death_year:Integer = self.last_start_year_widower in													
 /** Description: Returns the year on which the spouse of the taxpayer past away. - **/	
 if (spouse_death_year <= taxation_year and spouse_death_year >= taxation_year -3) = true then
 Tax_Class_Category::Two
 else
 if (spouse_death_year <= taxation_year and spouse_death_year >= taxation_year -3) = false then
 Tax_Class_Category::One_A
 else
 invalid
 endif
 endif
 else
 if (is_widower) = false then
 let is_reciving_bonus_for_children:Boolean = self.getIsreceivingAllowancesForChildren(taxation_year) in													
 /** Description: Returns yes if the taxpayer is receiving a bonus for children in household. - **/	
 if (is_reciving_bonus_for_children) = true then
 Tax_Class_Category::One_A
 else
 if (is_reciving_bonus_for_children) = false then
 let taxpayer_age:Integer = self.getAge(taxation_year) in													
 /** Description: Returns the age of a given taxpayer. - **/	
 if (taxpayer_age >= 64) = true then
 Tax_Class_Category::One_A
 else
 if (taxpayer_age >= 64) = false then
 Tax_Class_Category::One
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 if (is_divorced or is_living_separately_by_court or (is_living_separately and not is_resident_taxpayer)) = true then
 let can_beneficiate_from_transition_state :Boolean = self.getDivorceTransitionState(taxation_year) in													
 /** Description: Returns yes if: (1) the divorce/separation occurred within the last three years from the taxation year, and (2) the taxpayer did has not benefited from a divorce/separation transition state for the last five years from the current taxation year. - **/	
 if (can_beneficiate_from_transition_state ) = false then
 let is_widower:Boolean = self.is_widower in													
 /** Description: Returns yes if the taxpayer has the statute of widower for the current taxation year. - **/	
 if (is_widower) = true then
 let spouse_death_year:Integer = self.last_start_year_widower in													
 /** Description: Returns the year on which the spouse of the taxpayer past away. - **/	
 if (spouse_death_year <= taxation_year and spouse_death_year >= taxation_year -3) = true then
 Tax_Class_Category::Two
 else
 if (spouse_death_year <= taxation_year and spouse_death_year >= taxation_year -3) = false then
 Tax_Class_Category::One_A
 else
 invalid
 endif
 endif
 else
 if (is_widower) = false then
 let is_reciving_bonus_for_children:Boolean = self.getIsreceivingAllowancesForChildren(taxation_year) in													
 /** Description: Returns yes if the taxpayer is receiving a bonus for children in household. - **/	
 if (is_reciving_bonus_for_children) = true then
 Tax_Class_Category::One_A
 else
 if (is_reciving_bonus_for_children) = false then
 let taxpayer_age:Integer = self.getAge(taxation_year) in													
 /** Description: Returns the age of a given taxpayer. - **/	
 if (taxpayer_age >= 64) = true then
 Tax_Class_Category::One_A
 else
 if (taxpayer_age >= 64) = false then
 Tax_Class_Category::One
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 if (can_beneficiate_from_transition_state ) = true then
 Tax_Class_Category::Two
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
else
 if (is_resident_taxpayer) = false then
 let is_married:Boolean = self.getIsMaried(taxation_year) in													
 /** Description: Returns yes if the taxpayer is married. - **/	
 if (is_married) = false then
 let is_taxed_jointly:Boolean = self.getIsTaxedJointly(taxation_year) in													
 /** Description: Returns yes if the taxpayer is married or has a partnership contract. - **/	
 if (is_taxed_jointly) = true then
 Tax_Class_Category::Two
 else
 if (is_taxed_jointly) = false then
 let is_divorced:Boolean = self.getSeperationState(taxation_year,Separation_Causes::DIVORCE) in													
 /** Description: Returns yes if the taxpayer is divorced within the selected taxation year. - **/	
 let is_living_separately:Boolean = self.getSeperationState(taxation_year,Separation_Causes::SEPARATION_DE_FAIT) in													
 /** Description: Returns yes if the taxpayer is not cohabiting with his/her spouse. In French: "Separation de fait". - **/	
 let is_living_separately_by_court:Boolean = self.getSeperationState(taxation_year,Separation_Causes::SEPARATION_BY_COURT) in													
 /** Description: Returns yes if the taxpayer has a judicial sentence dismissing him from cohabiting with his/her spouse. In French: "Separation de corps". - **/	
 if (is_divorced or is_living_separately_by_court or (is_living_separately and not is_resident_taxpayer)) = false then
 let is_widower:Boolean = self.is_widower in													
 /** Description: Returns yes if the taxpayer has the statute of widower for the current taxation year. - **/	
 if (is_widower) = true then
 let spouse_death_year:Integer = self.last_start_year_widower in													
 /** Description: Returns the year on which the spouse of the taxpayer past away. - **/	
 if (spouse_death_year <= taxation_year and spouse_death_year >= taxation_year -3) = true then
 Tax_Class_Category::Two
 else
 if (spouse_death_year <= taxation_year and spouse_death_year >= taxation_year -3) = false then
 Tax_Class_Category::One_A
 else
 invalid
 endif
 endif
 else
 if (is_widower) = false then
 let is_reciving_bonus_for_children:Boolean = self.getIsreceivingAllowancesForChildren(taxation_year) in													
 /** Description: Returns yes if the taxpayer is receiving a bonus for children in household. - **/	
 if (is_reciving_bonus_for_children) = true then
 Tax_Class_Category::One_A
 else
 if (is_reciving_bonus_for_children) = false then
 let taxpayer_age:Integer = self.getAge(taxation_year) in													
 /** Description: Returns the age of a given taxpayer. - **/	
 if (taxpayer_age >= 64) = true then
 Tax_Class_Category::One_A
 else
 if (taxpayer_age >= 64) = false then
 Tax_Class_Category::One
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 if (is_divorced or is_living_separately_by_court or (is_living_separately and not is_resident_taxpayer)) = true then
 let can_beneficiate_from_transition_state :Boolean = self.getDivorceTransitionState(taxation_year) in													
 /** Description: Returns yes if: (1) the divorce/separation occurred within the last three years from the taxation year, and (2) the taxpayer did has not benefited from a divorce/separation transition state for the last five years from the current taxation year. - **/	
 if (can_beneficiate_from_transition_state ) = false then
 let is_widower:Boolean = self.is_widower in													
 /** Description: Returns yes if the taxpayer has the statute of widower for the current taxation year. - **/	
 if (is_widower) = true then
 let spouse_death_year:Integer = self.last_start_year_widower in													
 /** Description: Returns the year on which the spouse of the taxpayer past away. - **/	
 if (spouse_death_year <= taxation_year and spouse_death_year >= taxation_year -3) = true then
 Tax_Class_Category::Two
 else
 if (spouse_death_year <= taxation_year and spouse_death_year >= taxation_year -3) = false then
 Tax_Class_Category::One_A
 else
 invalid
 endif
 endif
 else
 if (is_widower) = false then
 let is_reciving_bonus_for_children:Boolean = self.getIsreceivingAllowancesForChildren(taxation_year) in													
 /** Description: Returns yes if the taxpayer is receiving a bonus for children in household. - **/	
 if (is_reciving_bonus_for_children) = true then
 Tax_Class_Category::One_A
 else
 if (is_reciving_bonus_for_children) = false then
 let taxpayer_age:Integer = self.getAge(taxation_year) in													
 /** Description: Returns the age of a given taxpayer. - **/	
 if (taxpayer_age >= 64) = true then
 Tax_Class_Category::One_A
 else
 if (taxpayer_age >= 64) = false then
 Tax_Class_Category::One
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 if (can_beneficiate_from_transition_state ) = true then
 Tax_Class_Category::Two
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 if (is_married) = true then
 let total_professional_income_household:Real = self.getProfetionalIncomeHousehold(taxation_year) in													
 /** Description: Returns the sum of the taxpayer's household professional incomes. - **/	
 let sum_professional_income_household_ZZ:Real = self.getProfetionalIncomeHouseholdZZ(taxation_year) in													
 /** Description: Returns the sum of the taxpayer's household professional incomes that are taxed in ZZ. - **/	
 if (sum_professional_income_household_ZZ > (0.5 * total_professional_income_household)) = true then
 Tax_Class_Category::Two
 else
 if (sum_professional_income_household_ZZ > (0.5 * total_professional_income_household)) = false then
 Tax_Class_Category::One_A
 else
 invalid
 endif
 endif
 else
 invalid
 endif
 endif
 else
 invalid
 endif
endif"/> | ||
207 | </eAnnotations> | ||
208 | <eParameters name="taxation_year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
209 | </eOperations> | ||
210 | <eStructuralFeatures xsi:type="ecore:EReference" name="dependents" ordered="false" | ||
211 | upperBound="-1" eType="#//Dependent" containment="true" eOpposite="#//Dependent/responsible_person"/> | ||
212 | <eStructuralFeatures xsi:type="ecore:EReference" name="from_agent" lowerBound="1" | ||
213 | eType="#//FromAgent" containment="true" eOpposite="#//FromAgent/taxPayer"/> | ||
214 | <eStructuralFeatures xsi:type="ecore:EReference" name="incomes" ordered="false" | ||
215 | lowerBound="1" upperBound="-1" eType="#//Income" containment="true" eOpposite="#//Income/taxPayer"/> | ||
216 | <eStructuralFeatures xsi:type="ecore:EReference" name="from_law" lowerBound="1" | ||
217 | eType="#//FromLaw" containment="true" eOpposite="#//FromLaw/taxPayer"/> | ||
218 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="AEP_deduction" ordered="false" | ||
219 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
220 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="taxesDue" ordered="false" | ||
221 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
222 | </eClassifiers> | ||
223 | <eClassifiers xsi:type="ecore:EClass" name="Physical_Person"> | ||
224 | <eOperations name="is_separated_from" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> | ||
225 | <eParameters name="IN_person" lowerBound="1" eType="#//Physical_Person"/> | ||
226 | </eOperations> | ||
227 | <eOperations name="is_person_affiliated_personnaly_to_social_security" lowerBound="1" | ||
228 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
229 | <eOperations name="getSeperationState" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> | ||
230 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
231 | <details key="body" value="let legel_unions:Set(Legal_Union_Record)=Legal_Union_Record.allInstances()->select(individual_A=self or individual_B=self) in
			
			if(legel_unions->size()=0) then
			false
			else
			let possible_unions:Set(Legal_Union_Record)=legel_unions->select(start_year<=year)in
			let lasted_union:Legal_Union_Record= possible_unions->select(start_year=possible_unions.start_year->max())->any(true) in
			if(lasted_union.end_year=-1)then
			false
			else
			lasted_union.separation_cause=seperation_type
			endif
			endif"/> | ||
232 | </eAnnotations> | ||
233 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
234 | <eParameters name="seperation_type" ordered="false" lowerBound="1" eType="#//Separation_Causes"/> | ||
235 | </eOperations> | ||
236 | <eOperations name="getAge" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> | ||
237 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
238 | <details key="body" value="	if(birth_year>=year )then
			0
			else
			year-birth_year
			endif"/> | ||
239 | </eAnnotations> | ||
240 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
241 | </eOperations> | ||
242 | <eOperations name="getIsMaried" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> | ||
243 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
244 | <details key="body" value="	let legel_unions:Set(Legal_Union_Record)=Legal_Union_Record.allInstances()->select( ((individual_A=self or individual_B=self) and oclIsKindOf(Marriage_Record))) in
			
			if(legel_unions->size()=0) then
			false
			else
			let possible_unions:Set(Legal_Union_Record)=legel_unions->select(start_year<=year)in
			let lasted_union:Legal_Union_Record= possible_unions->select(start_year=possible_unions.start_year->max())->any(true) in
			if(lasted_union.end_year=-1)then
			true
			else
			false
			endif
			endif"/> | ||
245 | </eAnnotations> | ||
246 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
247 | </eOperations> | ||
248 | <eOperations name="getSeperationYear" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> | ||
249 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
250 | <details key="body" value="let legel_unions:Set(Legal_Union_Record)=Legal_Union_Record.allInstances()->select(individual_A=self or individual_B=self) in
			
			if(legel_unions->size()=0) then
			-1
			else
			let possible_unions:Set(Legal_Union_Record)=legel_unions->select(start_year<=year)in
			let lasted_union:Legal_Union_Record= possible_unions->select(start_year=possible_unions.start_year->max())->any(true) in
			if(lasted_union.oclIsUndefined()) then
			-1
			else
			if(lasted_union.end_year=-1)then
			-1
			else
			lasted_union.end_year
			endif
			endif
			endif"/> | ||
251 | </eAnnotations> | ||
252 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
253 | </eOperations> | ||
254 | <eOperations name="getDivorceTransitionState" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> | ||
255 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
256 | <details key="body" value="let sep_year:Integer=self.getSeperationYear(year) in
			if(sep_year=-1)then
			false
			else
			if( (sep_year <= year and sep_year >= (year -3))=false) then
			false
			else
			let past_sep_year:Integer=self.getSeperationYear(year-5) in
			if(past_sep_year=-1)then
			true
			else
			false
			endif
			endif
			endif"/> | ||
257 | </eAnnotations> | ||
258 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
259 | </eOperations> | ||
260 | <eOperations name="getSpouse" ordered="false" lowerBound="1" eType="#//Physical_Person"> | ||
261 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
262 | <details key="body" value="	let legel_unions:Set(Legal_Union_Record)=Legal_Union_Record.allInstances()->select( ((individual_A=self or individual_B=self))) in
			
			if(legel_unions->size()=0) then
			let union:Legal_Union_Record=self.getLegalUnionRecord(year) in 
			if(union.oclIsInvalid())then
			invalid
			else
	 if(union.individual_B=self) then union.individual_A.oclAsType(Physical_Person) else union.individual_B.oclAsType(Physical_Person) endif endif
			else
			let possible_unions:Set(Legal_Union_Record)=legel_unions->select(start_year<=year)in
			let lasted_union:Legal_Union_Record= possible_unions->select(start_year=possible_unions.start_year->max())->any(true) in
			if(lasted_union.end_year=-1)then
			
			if(lasted_union.individual_A=self)then
			lasted_union.individual_B
			else
			lasted_union.individual_A
			endif
			else
			invalid
			endif
			endif"/> | ||
263 | </eAnnotations> | ||
264 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
265 | </eOperations> | ||
266 | <eOperations name="getLegalUnionRecord" ordered="false" lowerBound="1" eType="#//Legal_Union_Record"> | ||
267 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
268 | <details key="body" value="let legel_unions:Set(Legal_Union_Record)=Legal_Union_Record.allInstances()->select( ((individual_A=self or individual_B=self))) in
			
			if(legel_unions->size()=0) then
			invalid
			else
			let possible_unions:Set(Legal_Union_Record)=legel_unions->select(start_year<=year)in
			let lasted_union:Legal_Union_Record= possible_unions->select(start_year=possible_unions.start_year->max())->any(true) in
			lasted_union
			endif"/> | ||
269 | </eAnnotations> | ||
270 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
271 | </eOperations> | ||
272 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false" | ||
273 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
274 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_assisting_spouse" lowerBound="1" | ||
275 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" derived="true"/> | ||
276 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="SSNo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" | ||
277 | iD="true"/> | ||
278 | <eStructuralFeatures xsi:type="ecore:EReference" name="addresses" ordered="false" | ||
279 | upperBound="-1" eType="#//Address" eOpposite="#//Address/taxPayer"/> | ||
280 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="birth_year" ordered="false" | ||
281 | unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
282 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="disability_percentage" | ||
283 | ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
284 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="disability_type" ordered="false" | ||
285 | unique="false" lowerBound="1" eType="#//Disability_Types"/> | ||
286 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_affiliated_personnaly_to_social_security" | ||
287 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
288 | derived="true"/> | ||
289 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="birth_month" ordered="false" | ||
290 | unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
291 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="birth_day" ordered="false" | ||
292 | unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
293 | <eStructuralFeatures xsi:type="ecore:EReference" name="expenses" ordered="false" | ||
294 | upperBound="-1" eType="#//Expense" eOpposite="#//Expense/beneficiary"/> | ||
295 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_widower" ordered="false" | ||
296 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
297 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="last_start_year_widower" | ||
298 | ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
299 | </eClassifiers> | ||
300 | <eClassifiers xsi:type="ecore:EClass" name="Address"> | ||
301 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="country" lowerBound="1" | ||
302 | eType="#//Country" defaultValueLiteral="ZZ"/> | ||
303 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="street" lowerBound="1" | ||
304 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
305 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="zipCode" lowerBound="1" | ||
306 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
307 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="city" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
308 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id2" ordered="false" lowerBound="1" | ||
309 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
310 | <eStructuralFeatures xsi:type="ecore:EReference" name="taxPayer" ordered="false" | ||
311 | upperBound="-1" eType="#//Physical_Person" eOpposite="#//Physical_Person/addresses"/> | ||
312 | </eClassifiers> | ||
313 | <eClassifiers xsi:type="ecore:EClass" name="Expense"> | ||
314 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="declared_amount" lowerBound="1" | ||
315 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
316 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="expense_purpose" lowerBound="1" | ||
317 | eType="#//Expense_Purpose" defaultValueLiteral="OTHER"/> | ||
318 | <eStructuralFeatures xsi:type="ecore:EReference" name="dependent" eType="#//Dependent" | ||
319 | eOpposite="#//Dependent/expense"/> | ||
320 | <eStructuralFeatures xsi:type="ecore:EReference" name="from_agent" ordered="false" | ||
321 | eType="#//FromAgent" eOpposite="#//FromAgent/expense"/> | ||
322 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="year_expense_was_incurred_in" | ||
323 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
324 | <eStructuralFeatures xsi:type="ecore:EReference" name="income" lowerBound="1" | ||
325 | eType="#//Income" eOpposite="#//Income/expenses"/> | ||
326 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id4" ordered="false" lowerBound="1" | ||
327 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
328 | <eStructuralFeatures xsi:type="ecore:EReference" name="beneficiary" ordered="false" | ||
329 | eType="#//Physical_Person" eOpposite="#//Physical_Person/expenses"/> | ||
330 | </eClassifiers> | ||
331 | <eClassifiers xsi:type="ecore:EClass" name="Dependent" eSuperTypes="#//Physical_Person"> | ||
332 | <eOperations name="compute_if_dependent_receives_allowances_eligible_for_CIM" | ||
333 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
334 | <eOperations name="compute_if_dependent_receives_allowances_eligible_for_DS" lowerBound="1" | ||
335 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
336 | <eOperations name="compute_if_dependent_receives_allowances_eligible_for_CE_dependance_and_care" | ||
337 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
338 | <eOperations name="is_dependent_following_continued_studies" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> | ||
339 | <eParameters name="IN_continued_studies" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
340 | </eOperations> | ||
341 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="dependent_type" lowerBound="1" | ||
342 | eType="#//Dependent_Type"/> | ||
343 | <eStructuralFeatures xsi:type="ecore:EReference" name="responsible_person" eType="#//Tax_Payer" | ||
344 | eOpposite="#//Tax_Payer/dependents"/> | ||
345 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="continued_studies" lowerBound="1" | ||
346 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"/> | ||
347 | <eStructuralFeatures xsi:type="ecore:EReference" name="allowances" ordered="false" | ||
348 | upperBound="-1" eType="#//External_Allowance" containment="true" eOpposite="#//External_Allowance/person"/> | ||
349 | <eStructuralFeatures xsi:type="ecore:EReference" name="household" ordered="false" | ||
350 | eType="#//Household" eOpposite="#//Household/children"/> | ||
351 | <eStructuralFeatures xsi:type="ecore:EReference" name="from_agent" ordered="false" | ||
352 | eType="#//FromAgent" eOpposite="#//FromAgent/dependent"/> | ||
353 | <eStructuralFeatures xsi:type="ecore:EReference" name="expense" ordered="false" | ||
354 | upperBound="-1" eType="#//Expense" eOpposite="#//Expense/dependent"/> | ||
355 | </eClassifiers> | ||
356 | <eClassifiers xsi:type="ecore:EClass" name="External_Allowance"> | ||
357 | <eOperations name="getAmount" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
358 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
359 | <details key="body" value=" if(dep_age>=6 and dep_age<=11) then
(base + 16.17).round()
 else if (dep_age>=12) then (base + 48.52).round() else 
 if(is_disabled) then(base + 185.60).round() else base endif endif endif"/> | ||
360 | </eAnnotations> | ||
361 | <eParameters name="base" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
362 | <eParameters name="dep_age" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
363 | <eParameters name="is_disabled" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
364 | </eOperations> | ||
365 | <eOperations name="round_lower_euros" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
366 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
367 | <details key="body" value="let p1:Integer = amount.floor() in
			p1.toString().toReal()"/> | ||
368 | </eAnnotations> | ||
369 | <eParameters name="amount" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
370 | </eOperations> | ||
371 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="amount" lowerBound="1" | ||
372 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
373 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="grantor" lowerBound="1" | ||
374 | eType="#//Grantor"/> | ||
375 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="starting_year" ordered="false" | ||
376 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
377 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="ending_year" ordered="false" | ||
378 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
379 | <eStructuralFeatures xsi:type="ecore:EReference" name="reciver" ordered="false" | ||
380 | lowerBound="1" eType="#//Physical_Person"/> | ||
381 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id5" ordered="false" lowerBound="1" | ||
382 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
383 | <eStructuralFeatures xsi:type="ecore:EReference" name="person" ordered="false" | ||
384 | lowerBound="1" eType="#//Dependent" eOpposite="#//Dependent/allowances"/> | ||
385 | </eClassifiers> | ||
386 | <eClassifiers xsi:type="ecore:EClass" name="Household" eSuperTypes="#//Tax_Case"> | ||
387 | <eStructuralFeatures xsi:type="ecore:EReference" name="parents" ordered="false" | ||
388 | lowerBound="1" eType="#//Legal_Union_Record" containment="true" eOpposite="#//Legal_Union_Record/household"/> | ||
389 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id1" ordered="false" lowerBound="1" | ||
390 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
391 | <eStructuralFeatures xsi:type="ecore:EReference" name="children" ordered="false" | ||
392 | upperBound="-1" eType="#//Dependent" containment="true" eOpposite="#//Dependent/household"/> | ||
393 | </eClassifiers> | ||
394 | <eClassifiers xsi:type="ecore:EClass" name="Legal_Union_Record" abstract="true"> | ||
395 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="start_year" lowerBound="1" | ||
396 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
397 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="end_year" lowerBound="1" | ||
398 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
399 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="separation_cause" ordered="false" | ||
400 | lowerBound="1" eType="#//Separation_Causes"/> | ||
401 | <eStructuralFeatures xsi:type="ecore:EReference" name="individual_A" ordered="false" | ||
402 | lowerBound="1" eType="#//Physical_Person" containment="true"> | ||
403 | <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> | ||
404 | <details key="body" value="legal_union_A"/> | ||
405 | </eAnnotations> | ||
406 | </eStructuralFeatures> | ||
407 | <eStructuralFeatures xsi:type="ecore:EReference" name="individual_B" ordered="false" | ||
408 | lowerBound="1" eType="#//Physical_Person" containment="true"> | ||
409 | <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> | ||
410 | <details key="body" value="legal_union_B"/> | ||
411 | </eAnnotations> | ||
412 | </eStructuralFeatures> | ||
413 | <eStructuralFeatures xsi:type="ecore:EReference" name="properties" ordered="false" | ||
414 | lowerBound="1" upperBound="-1" eType="#//Tax_Property" containment="true" | ||
415 | eOpposite="#//Tax_Property/union_record"/> | ||
416 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="mutual_agreement" ordered="false" | ||
417 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
418 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id9" ordered="false" lowerBound="1" | ||
419 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
420 | <eStructuralFeatures xsi:type="ecore:EReference" name="household" ordered="false" | ||
421 | lowerBound="1" eType="#//Household" eOpposite="#//Household/parents"/> | ||
422 | </eClassifiers> | ||
423 | <eClassifiers xsi:type="ecore:EEnum" name="Separation_Causes"> | ||
424 | <eLiterals name="NONE"/> | ||
425 | <eLiterals name="DIVORCE" value="1"/> | ||
426 | <eLiterals name="SEPARATION_DE_FAIT" value="2"/> | ||
427 | <eLiterals name="SEPARATION_BY_COURT" value="3"/> | ||
428 | </eClassifiers> | ||
429 | <eClassifiers xsi:type="ecore:EClass" name="Tax_Property"> | ||
430 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="starting_year" ordered="false" | ||
431 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
432 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="taxed_jointly" ordered="false" | ||
433 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
434 | defaultValueLiteral="false"/> | ||
435 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id10" ordered="false" lowerBound="1" | ||
436 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
437 | <eStructuralFeatures xsi:type="ecore:EReference" name="union_record" ordered="false" | ||
438 | lowerBound="1" eType="#//Legal_Union_Record" eOpposite="#//Legal_Union_Record/properties"/> | ||
439 | </eClassifiers> | ||
440 | <eClassifiers xsi:type="ecore:EClass" name="Tax_Case" abstract="true" interface="true"/> | ||
441 | <eClassifiers xsi:type="ecore:EClass" name="FromAgent"> | ||
442 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="taxation_year" unique="false" | ||
443 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
444 | <eStructuralFeatures xsi:type="ecore:EReference" name="taxPayer" lowerBound="1" | ||
445 | eType="#//Tax_Payer" eOpposite="#//Tax_Payer/from_agent"/> | ||
446 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_dependent_eligible_for_CE_Not_In_Houshold_Children_Care" | ||
447 | ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
448 | <eStructuralFeatures xsi:type="ecore:EReference" name="expense" ordered="false" | ||
449 | eType="#//Expense" eOpposite="#//Expense/from_agent"/> | ||
450 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_eligible_debt" ordered="false" | ||
451 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
452 | <eStructuralFeatures xsi:type="ecore:EReference" name="dependent" ordered="false" | ||
453 | eType="#//Dependent" eOpposite="#//Dependent/from_agent"/> | ||
454 | </eClassifiers> | ||
455 | <eClassifiers xsi:type="ecore:EClass" name="Income" abstract="true"> | ||
456 | <eOperations name="compute_duration_of_contract" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
457 | <eOperations name="compute_duration_of_contract_within_taxation_year" lowerBound="1" | ||
458 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> | ||
459 | <eParameters name="IN_date" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/> | ||
460 | </eOperations> | ||
461 | <eOperations name="prorata_worked_months" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> | ||
462 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
463 | <details key="body" value="self.details->select(is_worked)->size()"/> | ||
464 | </eAnnotations> | ||
465 | </eOperations> | ||
466 | <eOperations name="prorata_worked_days" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> | ||
467 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
468 | <details key="body" value="let a:Set(Income_Detail)=self.details->select(is_worked) in 
			a.worked_days->sum().mod(25)"/> | ||
469 | </eAnnotations> | ||
470 | </eOperations> | ||
471 | <eOperations name="prorata_period" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
472 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
473 | <details key="body" value="
			let nb_months:Integer=self.prorata_worked_months()in
			let nb_days:Integer=self.prorata_worked_days()in
			 if(nb_months=12) then
			1
			else 
			nb_months/12 + nb_days/300
			endif"/> | ||
474 | </eAnnotations> | ||
475 | </eOperations> | ||
476 | <eOperations name="income_per_day" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
477 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
478 | <details key="body" value="income_per_year()/300"/> | ||
479 | </eAnnotations> | ||
480 | </eOperations> | ||
481 | <eOperations name="income_per_month" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
482 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
483 | <details key="body" value="income_per_year()/12"/> | ||
484 | </eAnnotations> | ||
485 | </eOperations> | ||
486 | <eOperations name="income_per_year" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
487 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
488 | <details key="body" value="			let involved_details:Set(Income_Detail)=self.details->select(i:Income_Detail| i.is_worked=true) in
					involved_details.amount->sum()"/> | ||
489 | </eAnnotations> | ||
490 | </eOperations> | ||
491 | <eOperations name="getDurationInyears" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> | ||
492 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
493 | <details key="body" value="
			if(self.income_type.oclIsTypeOf(Pensions_and_Annuities_Income)) then 
			if(start_year.oclIsUndefined())then
			-1
			else
			let res:Integer=self.taxPayer.from_agent.taxation_year-start_year in
			if(res<0) then
			0
			else
			res
			endif
			endif
			else
			-1
			endif"/> | ||
494 | </eAnnotations> | ||
495 | </eOperations> | ||
496 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="income_amount" ordered="false" | ||
497 | unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
498 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
499 | <details key="derivation" value="let non_null_amounts:OrderedSet(Income_Detail)=self.details->select(det:Income_Detail|det.amount>0)->asOrderedSet() in
non_null_amounts->collect(amount)->min()"/> | ||
500 | </eAnnotations> | ||
501 | </eStructuralFeatures> | ||
502 | <eStructuralFeatures xsi:type="ecore:EReference" name="income_type" lowerBound="1" | ||
503 | eType="#//Income_Type" containment="true" eOpposite="#//Income_Type/income"/> | ||
504 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="start_date_within_taxation_year" | ||
505 | ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/> | ||
506 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="start_date_of_contract" | ||
507 | ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/> | ||
508 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="end_date_within_taxation_year" | ||
509 | ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/> | ||
510 | <eStructuralFeatures xsi:type="ecore:EReference" name="tax_card" eType="#//Tax_Card" | ||
511 | containment="true" eOpposite="#//Tax_Card/income"/> | ||
512 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tax_liability" lowerBound="1" | ||
513 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
514 | <eStructuralFeatures xsi:type="ecore:EReference" name="taxPayer" ordered="false" | ||
515 | lowerBound="1" eType="#//Tax_Payer" eOpposite="#//Tax_Payer/incomes"/> | ||
516 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="year" unique="false" lowerBound="1" | ||
517 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
518 | <eStructuralFeatures xsi:type="ecore:EReference" name="details" lowerBound="12" | ||
519 | upperBound="12" eType="#//Income_Detail" containment="true" eOpposite="#//Income_Detail/income"/> | ||
520 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="num" ordered="false" lowerBound="1" | ||
521 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger" | ||
522 | iD="true"/> | ||
523 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="start_year" ordered="false" | ||
524 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
525 | <eStructuralFeatures xsi:type="ecore:EReference" name="expenses" ordered="false" | ||
526 | upperBound="-1" eType="#//Expense" containment="true" eOpposite="#//Expense/income"/> | ||
527 | </eClassifiers> | ||
528 | <eClassifiers xsi:type="ecore:EClass" name="Income_Type" abstract="true"> | ||
529 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="subjectToWithholdingTax" | ||
530 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
531 | derived="true"> | ||
532 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
533 | <details key="derivation" value="
				self.income.tax_card->notEmpty()
				"/> | ||
534 | </eAnnotations> | ||
535 | </eStructuralFeatures> | ||
536 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id8" ordered="false" lowerBound="1" | ||
537 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
538 | <eStructuralFeatures xsi:type="ecore:EReference" name="income" lowerBound="1" | ||
539 | eType="#//Income" eOpposite="#//Income/income_type"/> | ||
540 | </eClassifiers> | ||
541 | <eClassifiers xsi:type="ecore:EClass" name="Tax_Card"> | ||
542 | <eOperations name="getSumDeductionsYear" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
543 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
544 | <details key="body" value="deduction_FO_yearly+deduction_FD_yearly+deduction_CE_invalidity_yearly"/> | ||
545 | </eAnnotations> | ||
546 | </eOperations> | ||
547 | <eOperations name="getSumCreditsYear" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
548 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
549 | <details key="body" value="credit_CIS_yearly+credit_CIP_yearly"/> | ||
550 | </eAnnotations> | ||
551 | </eOperations> | ||
552 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="card_identifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" | ||
553 | iD="true"/> | ||
554 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tax_card_type" lowerBound="1" | ||
555 | eType="#//Tax_Card_Type" derived="true"> | ||
556 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
557 | <details key="derivation" value="if(self.income.taxPayer.incomes->size()=1) then 
Tax_Card_Type::Principal
	else
		let all_incomes:OrderedSet(Income)=self.income.taxPayer.incomes->select(inc:Income| inc.income_amount= self.income.taxPayer.incomes.income_amount->max())->asOrderedSet() in
		let bigest_income:Income= all_incomes->first() in
			 if(bigest_income=self.income) then
			 	 Tax_Card_Type::Principal
			 else
					Tax_Card_Type::Additional
				endif
endif
				"/> | ||
558 | </eAnnotations> | ||
559 | </eStructuralFeatures> | ||
560 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tax_office" lowerBound="1" | ||
561 | eType="#//Tax_Office"/> | ||
562 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="valid_from_date" ordered="false" | ||
563 | unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/> | ||
564 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="valid_until_date" ordered="false" | ||
565 | unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/> | ||
566 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="percentage_of_witholding" | ||
567 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
568 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tax_payers_name_surname" | ||
569 | ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
570 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tax_payers_partner_name_surname" | ||
571 | ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
572 | <eStructuralFeatures xsi:type="ecore:EReference" name="tax_payers_address" eType="#//Address"/> | ||
573 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="jobs_Employer_SSNo" ordered="false" | ||
574 | unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
575 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="jobs_employers_name" ordered="false" | ||
576 | unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
577 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="jobs_activity_type" lowerBound="1" | ||
578 | eType="#//Job_Activity"/> | ||
579 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="jobs_place_of_work" lowerBound="1" | ||
580 | eType="#//Town"/> | ||
581 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_FD_daily" ordered="false" | ||
582 | unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
583 | defaultValueLiteral="0.0"/> | ||
584 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_FD_monthly" ordered="false" | ||
585 | unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
586 | defaultValueLiteral="0.0"/> | ||
587 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_FD_yearly" unique="false" | ||
588 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
589 | defaultValueLiteral="0.0"/> | ||
590 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_AC_daily" unique="false" | ||
591 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
592 | defaultValueLiteral="0.0"/> | ||
593 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_AC_monthly" unique="false" | ||
594 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
595 | defaultValueLiteral="0.0"/> | ||
596 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_AC_yearly" unique="false" | ||
597 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
598 | defaultValueLiteral="0.0"/> | ||
599 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_CE_daily" unique="false" | ||
600 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
601 | defaultValueLiteral="0.0"/> | ||
602 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_CE_monthly" unique="false" | ||
603 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
604 | defaultValueLiteral="0.0"/> | ||
605 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_CE_yearly" unique="false" | ||
606 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
607 | defaultValueLiteral="0.0"/> | ||
608 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_CE_invalidity_yearly" | ||
609 | unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
610 | defaultValueLiteral="0.0"/> | ||
611 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_DS_daily" unique="false" | ||
612 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
613 | defaultValueLiteral="0.0"/> | ||
614 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_DS_monthly" lowerBound="1" | ||
615 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="0.0"/> | ||
616 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_DS_yearly" unique="false" | ||
617 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
618 | defaultValueLiteral="0.0"/> | ||
619 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_FO_daily" unique="false" | ||
620 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
621 | defaultValueLiteral="0.0"/> | ||
622 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_FO_monthly" unique="false" | ||
623 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
624 | defaultValueLiteral="0.0"/> | ||
625 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_FO_yearly" unique="false" | ||
626 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
627 | defaultValueLiteral="0.0"/> | ||
628 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="credit_CIS_daily" unique="false" | ||
629 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
630 | defaultValueLiteral="0.0"/> | ||
631 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="credit_CIS_monthly" unique="false" | ||
632 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
633 | defaultValueLiteral="0.0"/> | ||
634 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="credit_CIP_monthly" unique="false" | ||
635 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
636 | defaultValueLiteral="0.0"/> | ||
637 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="credit_CIP_yearly" unique="false" | ||
638 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
639 | defaultValueLiteral="0.0"/> | ||
640 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="credit_CIM_daily" unique="false" | ||
641 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
642 | defaultValueLiteral="0.0"/> | ||
643 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="credit_CIM_monthly" unique="false" | ||
644 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
645 | defaultValueLiteral="0.0"/> | ||
646 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="credit_CIS_yearly" unique="false" | ||
647 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
648 | defaultValueLiteral="0.0"/> | ||
649 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="validity" lowerBound="1" | ||
650 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
651 | <eStructuralFeatures xsi:type="ecore:EReference" name="income_Tax_Credit" ordered="false" | ||
652 | upperBound="-1" eType="#//Income_Tax_Credit" eOpposite="#//Income_Tax_Credit/taxation_Frame"/> | ||
653 | <eStructuralFeatures xsi:type="ecore:EReference" name="previous" eType="#//Tax_Card" | ||
654 | eOpposite="#//Tax_Card/current_tax_card"/> | ||
655 | <eStructuralFeatures xsi:type="ecore:EReference" name="current_tax_card" eType="#//Tax_Card" | ||
656 | eOpposite="#//Tax_Card/previous"/> | ||
657 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="credit_CIM_yearly" ordered="false" | ||
658 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
659 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_DS_Alimony_yearly" | ||
660 | ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
661 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="deduction_DS_Debt_yearly" | ||
662 | ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
663 | <eStructuralFeatures xsi:type="ecore:EReference" name="income" lowerBound="1" | ||
664 | eType="#//Income" eOpposite="#//Income/tax_card"/> | ||
665 | </eClassifiers> | ||
666 | <eClassifiers xsi:type="ecore:EClass" name="Income_Tax_Credit"> | ||
667 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="grantedBy" lowerBound="1" | ||
668 | eType="#//Grantor"/> | ||
669 | <eStructuralFeatures xsi:type="ecore:EReference" name="taxPayer" eType="#//Tax_Payer"/> | ||
670 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tax_year" lowerBound="1" | ||
671 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
672 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="yearly" lowerBound="1" | ||
673 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="300.0"/> | ||
674 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="monthly" lowerBound="1" | ||
675 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="25.0"/> | ||
676 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="daily" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
677 | defaultValueLiteral="1.0"/> | ||
678 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id7" ordered="false" lowerBound="1" | ||
679 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
680 | <eStructuralFeatures xsi:type="ecore:EReference" name="taxation_Frame" eType="#//Tax_Card" | ||
681 | eOpposite="#//Tax_Card/income_Tax_Credit"/> | ||
682 | </eClassifiers> | ||
683 | <eClassifiers xsi:type="ecore:EClass" name="Income_Detail"> | ||
684 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="month" ordered="false" | ||
685 | unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
686 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="amount" lowerBound="1" | ||
687 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
688 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_worked" lowerBound="1" | ||
689 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
690 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="distance" lowerBound="1" | ||
691 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
692 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="worked_days" lowerBound="1" | ||
693 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
694 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_contributing_CNS" ordered="false" | ||
695 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
696 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_contributing_pension" | ||
697 | ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
698 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id5" ordered="false" lowerBound="1" | ||
699 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
700 | <eStructuralFeatures xsi:type="ecore:EReference" name="income" lowerBound="1" | ||
701 | eType="#//Income" eOpposite="#//Income/details"/> | ||
702 | </eClassifiers> | ||
703 | <eClassifiers xsi:type="ecore:EClass" name="FromLaw"> | ||
704 | <eOperations name="CE_INVALIDITY_FLAT_RATE_TYPE_E" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
705 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
706 | <details key="body" value="1455.0"/> | ||
707 | </eAnnotations> | ||
708 | </eOperations> | ||
709 | <eOperations name="CIP_MINIMUM_INCOME_MONTH" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
710 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
711 | <details key="body" value="25.0"/> | ||
712 | </eAnnotations> | ||
713 | </eOperations> | ||
714 | <eOperations name="CIP_MINIMUM_INCOME_YEAR" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
715 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
716 | <details key="body" value="300.0"/> | ||
717 | </eAnnotations> | ||
718 | </eOperations> | ||
719 | <eOperations name="FLAT_RATE_CIP_YEARLY" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
720 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
721 | <details key="body" value="300.0"/> | ||
722 | </eAnnotations> | ||
723 | </eOperations> | ||
724 | <eOperations name="FLAT_RATE_PER_UNIT" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
725 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
726 | <details key="body" value="99.0"/> | ||
727 | </eAnnotations> | ||
728 | </eOperations> | ||
729 | <eOperations name="MAXIMUM_DISTANCE_IN_UNITS" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
730 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
731 | <details key="body" value="30.0"/> | ||
732 | </eAnnotations> | ||
733 | </eOperations> | ||
734 | <eOperations name="MINIMUM_DISTANCE_IN_UNITS" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
735 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
736 | <details key="body" value="4.0"/> | ||
737 | </eAnnotations> | ||
738 | </eOperations> | ||
739 | <eOperations name="FLAT_MAXIMUM_FD" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
740 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
741 | <details key="body" value="2574.0"/> | ||
742 | </eAnnotations> | ||
743 | </eOperations> | ||
744 | <eOperations name="CIS_MINIMUM_INCOME_DAY" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
745 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
746 | <details key="body" value="3.12"/> | ||
747 | </eAnnotations> | ||
748 | </eOperations> | ||
749 | <eOperations name="CIS_MINIMUM_INCOME_MONTH" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
750 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
751 | <details key="body" value="78.0"/> | ||
752 | </eAnnotations> | ||
753 | </eOperations> | ||
754 | <eOperations name="CIS_MINIMUM_INCOME_YEAR" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
755 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
756 | <details key="body" value="936.0"/> | ||
757 | </eAnnotations> | ||
758 | </eOperations> | ||
759 | <eOperations name="FLAT_RATE_CIS_DAILY" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
760 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
761 | <details key="body" value="1.0"/> | ||
762 | </eAnnotations> | ||
763 | </eOperations> | ||
764 | <eOperations name="FLAT_RATE_CIS_MONTHLY" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
765 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
766 | <details key="body" value="25.0"/> | ||
767 | </eAnnotations> | ||
768 | </eOperations> | ||
769 | <eOperations name="FLAT_RATE_CIS_YEARLY" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
770 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
771 | <details key="body" value="300.0"/> | ||
772 | </eAnnotations> | ||
773 | </eOperations> | ||
774 | <eOperations name="get_A_for_salary_class_1" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
775 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
776 | <details key="body" value="if(revenu<= 1020) then 0
		else if(revenu <= 1180) then 0.08
		else if(revenu <= 1340) then 0.1
		else if(revenu <= 1500) then 0.12
		else if(revenu <= 1655) then 0.14
		else if(revenu <= 1815) then 0.16
		else if(revenu <= 1975) then 0.18
		else if(revenu <= 2135) then 0.2
		else if(revenu <= 2295) then 0.22
		else if(revenu <= 2450) then 0.24
		else if(revenu <= 2610) then 0.26
		else if(revenu <= 2770) then 0.28
		else if(revenu <= 2930) then 0.3
		else if(revenu <= 3090) then 0.32
		else if(revenu <= 3245) then 0.34
		else if(revenu <= 3405) then 0.36
		else if(revenu <= 3565) then 0.38
		else if(revenu <= 8415) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 	 endif"/> | ||
777 | </eAnnotations> | ||
778 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
779 | </eOperations> | ||
780 | <eOperations name="get_B_for_salary_class_1" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
781 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
782 | <details key="body" value="if(revenu<= 1020) then 0
		else if(revenu <= 1180) then 81.9
		else if(revenu <= 1340) then 105.555
		else if(revenu <= 1500) then 132.39000
		else if(revenu <= 1655) then 162.405
		else if(revenu <= 1815) then 195.6
		else if(revenu <= 1975) then 231.975
		else if(revenu <= 2135) then 271.53
		else if(revenu <= 2295) then 314.265
		else if(revenu <= 2450) then 360.18
		else if(revenu <= 2610) then 409.275
		else if(revenu <= 2770) then 461.55
		else if(revenu <= 2930) then 517.005
		else if(revenu <= 3090) then 575.64
		else if(revenu <= 3245) then 637.455
		else if(revenu <= 3405) then 702.45
		else if(revenu <= 3565) then 770.625
		else if(revenu <= 8415) then 806.30250 
		else 890.48583
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
783 | </eAnnotations> | ||
784 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
785 | </eOperations> | ||
786 | <eOperations name="get_A_for_salary_class_1A" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
787 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
788 | <details key="body" value="if(revenu<= 1960) then 0
		else if(revenu <= 2065) then 0.12
		else if(revenu <= 2170) then 0.15
		else if(revenu <= 2280) then 0.18
		else if(revenu <= 2385) then 0.21
		else if(revenu <= 2490) then 0.24
		else if(revenu <= 2595) then 0.27
		else if(revenu <= 2700) then 0.3
		else if(revenu <= 2810) then 0.33
		else if(revenu <= 2915) then 0.36
		else if(revenu <= 3020) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
789 | </eAnnotations> | ||
790 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
791 | </eOperations> | ||
792 | <eOperations name="get_B_for_salary_class_1A" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
793 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
794 | <details key="body" value="if(revenu<= 1960) then 0
		else if(revenu <= 2065) then 235.5
		else if(revenu <= 2170) then 297.555
		else if(revenu <= 2280) then 362.79
		else if(revenu <= 2385) then 431.205
		else if(revenu <= 2490) then 502.8
		else if(revenu <= 2595) then 577.575
		else if(revenu <= 2700) then 655.53
		else if(revenu <= 2810) then 736.665
		else if(revenu <= 2915) then 820.98
		else if(revenu <= 3020) then 908.475
		else 938.7
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 		endif"/> | ||
795 | </eAnnotations> | ||
796 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
797 | </eOperations> | ||
798 | <eOperations name="get_A_for_salary_class_2" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
799 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
800 | <details key="body" value="if(revenu<= 1960) then 0
		else if(revenu <= 2280) then 0.08
		else if(revenu <= 2595) then 0.1
		else if(revenu <= 2915) then 0.12
		else if(revenu <= 3230) then 0.14
		else if(revenu <= 3550) then 0.16
		else if(revenu <= 3870) then 0.18
		else if(revenu <= 4185) then 0.2
		else if(revenu <= 4505) then 0.22
		else if(revenu <= 4820) then 0.24
		else if(revenu <= 5140) then 0.26
		else if(revenu <= 5460) then 0.28
		else if(revenu <= 5775) then 0.3
		else if(revenu <= 6095) then 0.32
		else if(revenu <= 6410) then 0.34
		else if(revenu <= 6730) then 0.36
		else if(revenu <= 7050) then 0.38
		else if(revenu <= 16750) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
801 | </eAnnotations> | ||
802 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
803 | </eOperations> | ||
804 | <eOperations name="get_B_for_salary_class_2" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
805 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
806 | <details key="body" value="if(revenu<= 1960) then 0
		else if(revenu <= 2280) then 157
		else if(revenu <= 2595) then 202.61
		else if(revenu <= 2915) then 254.58
		else if(revenu <= 3230) then 312.91
		else if(revenu <= 3550) then 377.6
		else if(revenu <= 3870) then 448.65
		else if(revenu <= 4185) then 526.06
		else if(revenu <= 4505) then 609.83
		else if(revenu <= 4820) then 699.96
		else if(revenu <= 5140) then 796.45
		else if(revenu <= 5460) then 899.3
		else if(revenu <= 5775) then 1008.51
		else if(revenu <= 6095) then 1124.08
		else if(revenu <= 6410) then 1246.01
		else if(revenu <= 6730) then 1374.3
		else if(revenu <= 7050) then 1508.95
		else if(revenu <= 16750) then 1579.455
		else 1746.97166
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
807 | </eAnnotations> | ||
808 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
809 | </eOperations> | ||
810 | <eOperations name="get_A_for_pension_class_1" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
811 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
812 | <details key="body" value="if(revenu<= 1000) then 0
		else if(revenu <= 1160) then 0.08
		else if(revenu <= 1320) then 0.1
		else if(revenu <= 1480) then 0.12
		else if(revenu <= 1635) then 0.14
		else if(revenu <= 1795) then 0.16
		else if(revenu <= 1955) then 0.18
		else if(revenu <= 2115) then 0.2
		else if(revenu <= 2275) then 0.22
		else if(revenu <= 2430) then 0.24
		else if(revenu <= 2590) then 0.26
		else if(revenu <= 2750) then 0.28
		else if(revenu <= 2910) then 0.3
		else if(revenu <= 3070) then 0.32
		else if(revenu <= 3225) then 0.34
		else if(revenu <= 3385) then 0.36
		else if(revenu <= 3545) then 0.38
		else if(revenu <= 8395) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
813 | </eAnnotations> | ||
814 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
815 | </eOperations> | ||
816 | <eOperations name="get_B_for_pension_class_1" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
817 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
818 | <details key="body" value="if(revenu<= 1000) then 0
		else if(revenu <= 1160) then 80.3
		else if(revenu <= 1320) then 103.555
		else if(revenu <= 1480) then 129.99
		else if(revenu <= 1635) then 159.605
		else if(revenu <= 1795) then 192.4
		else if(revenu <= 1955) then 228.375
		else if(revenu <= 2115) then 267.53
		else if(revenu <= 2275) then 309.865
		else if(revenu <= 2430) then 355.38
		else if(revenu <= 2590) then 404.075
		else if(revenu <= 2750) then 455.95
		else if(revenu <= 2910) then 511.005
		else if(revenu <= 3070) then 569.24
		else if(revenu <= 3225) then 630.655
		else if(revenu <= 3385) then 695.25
		else if(revenu <= 3545) then 763.025
		else if(revenu <= 8395) then 798.5025
		else 882.48583	
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
819 | </eAnnotations> | ||
820 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
821 | </eOperations> | ||
822 | <eOperations name="get_A_for_pension_class_1A" ordered="false" lowerBound="1" | ||
823 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
824 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
825 | <details key="body" value="if(revenu<= 1940) then 0
		else if(revenu <= 2045) then 0.12
		else if(revenu <= 2150) then 0.15
		else if(revenu <= 2260) then 0.18
		else if(revenu <= 2365) then 0.21
		else if(revenu <= 2470) then 0.24
		else if(revenu <= 2575) then 0.27
		else if(revenu <= 2680) then 0.3
		else if(revenu <= 2790) then 0.33
		else if(revenu <= 2895) then 0.36
		else if(revenu <= 3000) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
826 | </eAnnotations> | ||
827 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
828 | </eOperations> | ||
829 | <eOperations name="get_B_for_pension_class_1A" ordered="false" lowerBound="1" | ||
830 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
831 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
832 | <details key="body" value="if(revenu<= 1940) then 0
		else if(revenu <= 2045) then 233.100
		else if(revenu <= 2150) then 294.555
		else if(revenu <= 2260) then 359.190
		else if(revenu <= 2365) then 427.005
		else if(revenu <= 2470) then 498
		else if(revenu <= 2575) then 572.175
		else if(revenu <= 2680) then 649.53
		else if(revenu <= 2790) then 730.065
		else if(revenu <= 2895) then 813.780
		else if(revenu <= 3000) then 900.675
		else 930.700
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
833 | </eAnnotations> | ||
834 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
835 | </eOperations> | ||
836 | <eOperations name="get_A_for_pension_class_2" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
837 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
838 | <details key="body" value="if(revenu<= 1940) then 0
		else if(revenu <= 2260) then 0.08
		else if(revenu <= 2575) then 0.1
		else if(revenu <= 2895) then 0.12
		else if(revenu <= 3210) then 0.14
		else if(revenu <= 3530) then 0.16
		else if(revenu <= 3850) then 0.18
		else if(revenu <= 4165) then 0.2
		else if(revenu <= 4485) then 0.22
		else if(revenu <= 4800) then 0.24
		else if(revenu <= 5120) then 0.26
		else if(revenu <= 5440) then 0.28
		else if(revenu <= 5755) then 0.3
		else if(revenu <= 6075) then 0.32
		else if(revenu <= 6390) then 0.34
		else if(revenu <= 6710) then 0.36
		else if(revenu <= 7030) then 0.38
		else if(revenu <= 16730) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
839 | </eAnnotations> | ||
840 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
841 | </eOperations> | ||
842 | <eOperations name="get_B_for_pension_class_2" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
843 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
844 | <details key="body" value="if(revenu<= 1940) then 0
		else if(revenu <= 2260) then 155.4
		else if(revenu <= 2575) then 200.61
		else if(revenu <= 2895) then 252.18
		else if(revenu <= 3210) then 310.11
		else if(revenu <= 3530) then 374.4
		else if(revenu <= 3850) then 445.05
		else if(revenu <= 4165) then 522.06
		else if(revenu <= 4485) then 605.43
		else if(revenu <= 4800) then 695.16
		else if(revenu <= 5120) then 791.25
		else if(revenu <= 5440) then 893.7
		else if(revenu <= 5755) then 1002.51
		else if(revenu <= 6075) then 1117.68
		else if(revenu <= 6390) then 1239.21
		else if(revenu <= 6710) then 1367.1
		else if(revenu <= 7030) then 1501.35
		else if(revenu <= 16730) then 1571.655
		else 1738.97166
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
845 | </eAnnotations> | ||
846 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
847 | </eOperations> | ||
848 | <eOperations name="get_A_for_other_yearly_class_1" ordered="false" lowerBound="1" | ||
849 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
850 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
851 | <details key="body" value=" if(revenu<= 11250) then 0
		else if(revenu <= 13150) then 0.08
		else if(revenu <= 15050) then 0.1
		else if(revenu <= 16950) then 0.12
		else if(revenu <= 18850) then 0.14
		else if(revenu <= 20800) then 0.16
		else if(revenu <= 22700) then 0.18
		else if(revenu <= 24600) then 0.2
		else if(revenu <= 26500) then 0.22
		else if(revenu <= 28400) then 0.24
		else if(revenu <= 30300) then 0.26
		else if(revenu <= 32250) then 0.28
		else if(revenu <= 34150) then 0.3
		else if(revenu <= 36050) then 0.32
		else if(revenu <= 37950) then 0.34
		else if(revenu <= 39850) then 0.36
		else if(revenu <= 41750) then 0.38
		else if(revenu <= 100000) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
852 | </eAnnotations> | ||
853 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
854 | </eOperations> | ||
855 | <eOperations name="get_B_for_other_yearly_class_1" ordered="false" lowerBound="1" | ||
856 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
857 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
858 | <details key="body" value="if(revenu<= 11250) then 0
		else if(revenu <= 13150) then 901.200 
		else if(revenu <= 15050) then 1164.660
		else if(revenu <= 16950) then 1466.280
		else if(revenu <= 18850) then 1806.060
		else if(revenu <= 20800) then 2184
		else if(revenu <= 22700) then 2600.100
		else if(revenu <= 24600) then 3054.360
		else if(revenu <= 26500) then 3546.780 
		else if(revenu <= 28400) then 4077.360
		else if(revenu <= 30300) then 4646.100
		else if(revenu <= 32250) then 5253
		else if(revenu <= 34150) then 5898.060
		else if(revenu <= 36050) then 6581.28
		else if(revenu <= 37950) then 7302.66
		else if(revenu <= 39850) then 8062.2
		else if(revenu <= 41750) then 8859.9
		else if(revenu <= 100000) then 9277.83
		else 10277.83
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
859 | </eAnnotations> | ||
860 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
861 | </eOperations> | ||
862 | <eOperations name="get_A_for_other_yearly_class_1A" ordered="false" lowerBound="1" | ||
863 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
864 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
865 | <details key="body" value="if(revenu<=22500) then 0
		else if(revenu <= 23800) then 0.12
		else if(revenu <= 25050) then 0.15
		else if(revenu <= 26300) then 0.18
		else if(revenu <= 27600) then 0.21
		else if(revenu <= 28850) then 0.24
		else if(revenu <= 30150) then 0.27
		else if(revenu <= 31400) then 0.3
		else if(revenu <= 32700) then 0.33
		else if(revenu <= 33950) then 0.36
		else if(revenu <= 35250) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
866 | </eAnnotations> | ||
867 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
868 | </eOperations> | ||
869 | <eOperations name="get_B_for_other_yearly_class_1A" ordered="false" lowerBound="1" | ||
870 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
871 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
872 | <details key="body" value="if(revenu<=22500) then 0
		else if(revenu <= 23800) then 2703.600
		else if(revenu <= 25050) then 3417.660
		else if(revenu <= 26300) then 4169.880
		else if(revenu <= 27600) then 4960.260
		else if(revenu <= 28850) then 5788.800
		else if(revenu <= 30150) then 6655.500
		else if(revenu <= 31400) then 7560.360
		else if(revenu <= 32700) then 8503.380
		else if(revenu <= 33950) then 9484.560
		else if(revenu <= 35250) then 10503.900
		else 10856.400
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
873 | </eAnnotations> | ||
874 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
875 | </eOperations> | ||
876 | <eOperations name="get_A_for_other_yearly_class_2" ordered="false" lowerBound="1" | ||
877 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
878 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
879 | <details key="body" value="if(revenu<=22500) then 0
		else if(revenu <= 26300) then 0.08
		else if(revenu <= 30150) then 0.1
		else if(revenu <= 33950) then 0.12
		else if(revenu <= 37750) then 0.14
		else if(revenu <= 41600) then 0.16
		else if(revenu <= 45400) then 0.18
		else if(revenu <= 49200) then 0.2
		else if(revenu <= 53050) then 0.22
		else if(revenu <= 56850) then 0.24
		else if(revenu <= 60650) then 0.26
		else if(revenu <= 64500) then 0.28
		else if(revenu <= 68300) then 0.3
		else if(revenu <= 72100) then 0.32
		else if(revenu <= 75950) then 0.34
		else if(revenu <= 79750) then 0.36
		else if(revenu <= 83550) then 0.38
		else if(revenu <= 200000) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
880 | </eAnnotations> | ||
881 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
882 | </eOperations> | ||
883 | <eOperations name="get_B_for_other_yearly_class_2" ordered="false" lowerBound="1" | ||
884 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
885 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
886 | <details key="body" value="if(revenu<=22500) then 0
		else if(revenu <= 26300) then 1802.400 
		else if(revenu <= 30150) then 2329.320
		else if(revenu <= 33950) then 2932.560
		else if(revenu <= 37750) then 3612.120
		else if(revenu <= 41600) then 4368.000
		else if(revenu <= 45400) then 5200.200
		else if(revenu <= 49200) then 6108.720
		else if(revenu <= 53050) then 7093.560
		else if(revenu <= 56850) then 8154.720
		else if(revenu <= 60650) then 9292.200
		else if(revenu <= 64500) then 10506.000
		else if(revenu <= 68300) then 11796.120
		else if(revenu <= 72100) then 13162.560
		else if(revenu <= 75950) then 14605.320
		else if(revenu <= 79750) then 16124.400
		else if(revenu <= 83550) then 17719.800
		else if(revenu <= 200000) then 18555.660
		else 20555.660
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
887 | </eAnnotations> | ||
888 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
889 | </eOperations> | ||
890 | <eOperations name="calculate_taxes_per_month" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
891 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
892 | <details key="body" value="if(income_type='Employment') then
			let a:Real = if(classe=Tax_Class_Category::One_A) then get_A_for_salary_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_A_for_salary_class_2(amount) else get_A_for_salary_class_1(amount) endif endif in
			let b:Real = if(classe=Tax_Class_Category::One_A) then get_B_for_salary_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_B_for_salary_class_2(amount) else get_B_for_salary_class_1(amount) endif endif in
		 let res:Real = round_ten_cent(a * amount - b) in
 let max:Real = if(classe=Tax_Class_Category::Two) then 25085 else 12585 endif in
 
		 if(amount<max) then
		 let final_res:Real= round_ten_cent(res*1.07) in
		 if(final_res<1)then
		 0
		 else
		 final_res
		 endif
		 else 
		 let adjustement:Real= if(classe=Tax_Class_Category::One_A) then 81.906 else if(classe=Tax_Class_Category::Two) then 165.74 else 82.87 endif endif in
		 	let final_res:Real= round_ten_cent(res + (res*0.09-adjustement)) in
		 	if(final_res<1)then
		 0
		 else
		 final_res
		 endif
		 endif
		 
		 
			
			else
			if(income_type='Pension') then
			let a:Real = if(classe=Tax_Class_Category::One_A) then get_A_for_pension_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_A_for_pension_class_2(amount) else get_A_for_pension_class_1(amount) endif endif in
			let b:Real = if(classe=Tax_Class_Category::One_A) then get_B_for_pension_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_B_for_pension_class_2(amount) else get_B_for_pension_class_1(amount) endif endif in
		 let res:Real = round_ten_cent(a * amount - b) in
		 let max:Real = if(classe=Tax_Class_Category::Two) then 25065 else 12565 endif in
 
		 if(amount<max) then
		 let final_res:Real= round_ten_cent(res*1.07) in
		 if(final_res<1)then
		 0
		 else
		 final_res
		 endif
		 else 
		 let adjustement:Real= if(classe=Tax_Class_Category::One_A) then 81.906 else if(classe=Tax_Class_Category::Two) then 165.74 else 82.87 endif endif in
		 	let final_res:Real= round_ten_cent(res + (res*0.09-adjustement)) in
		 	if(final_res<1)then
		 0
		 else
		 final_res
		 endif
		 endif	
			else
			-1
			endif
			endif"/> | ||
893 | </eAnnotations> | ||
894 | <eParameters name="amount" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
895 | <eParameters name="classe" ordered="false" lowerBound="1" eType="#//Tax_Class_Category"/> | ||
896 | <eParameters name="income_type" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
897 | </eOperations> | ||
898 | <eOperations name="round_lower_euros" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
899 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
900 | <details key="body" value="let p1:Integer = amount.floor() in
			p1.toString().toReal()"/> | ||
901 | </eAnnotations> | ||
902 | <eParameters name="amount" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
903 | </eOperations> | ||
904 | <eOperations name="round_ten_cent" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
905 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
906 | <details key="body" value="let p1:Integer = amount.floor() in
			if(p1=amount) then
			amount
			else
			let p2_temp:Real = (amount-p1) * 10 in
			let p2:Integer = p2_temp.floor() in
			p1.toString().toReal()+(p2.toString().toReal()/10.0)
			endif"/> | ||
907 | </eAnnotations> | ||
908 | <eParameters name="amount" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
909 | </eOperations> | ||
910 | <eOperations name="get_A_for_salary_yearly_class_1" ordered="false" lowerBound="1" | ||
911 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
912 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
913 | <details key="body" value="if(revenu<= 12250) then 0
		else if(revenu <= 14150) then 0.08
		else if(revenu <= 16100) then 0.1
		else if(revenu <= 18000) then 0.12
		else if(revenu <= 19900) then 0.14
		else if(revenu <= 21800) then 0.16
		else if(revenu <= 23700) then 0.18
		else if(revenu <= 25600) then 0.2
		else if(revenu <= 27500) then 0.22
		else if(revenu <= 29450) then 0.24
		else if(revenu <= 31350) then 0.26
		else if(revenu <= 33250) then 0.28
		else if(revenu <= 35150) then 0.3
		else if(revenu <= 37050) then 0.32
		else if(revenu <= 38950) then 0.34
		else if(revenu <= 40900) then 0.36
		else if(revenu <= 42800) then 0.38
		else if(revenu <= 101000) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
914 | </eAnnotations> | ||
915 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
916 | </eOperations> | ||
917 | <eOperations name="get_B_for_salary_yearly_class_1" ordered="false" lowerBound="1" | ||
918 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
919 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
920 | <details key="body" value="if(revenu<= 12250) then 0
		else if(revenu <= 14150) then 982.8000
		else if(revenu <= 16100) then 1266.6600
		else if(revenu <= 18000) then 1588.6800
		else if(revenu <= 19900) then 1948.8600
		else if(revenu <= 21800) then 2347.2000
		else if(revenu <= 23700) then 2783.7000
		else if(revenu <= 25600) then 3258.3600
		else if(revenu <= 27500) then 3771.1800
		else if(revenu <= 29450) then 4322.1600
		else if(revenu <= 31350) then 4911.3000
		else if(revenu <= 33250) then 5538.6000
		else if(revenu <= 35150) then 6204.0600
		else if(revenu <= 37050) then 6907.6800
		else if(revenu <= 38950) then 7649.4600
		else if(revenu <= 40900) then 8429.4000
		else if(revenu <= 42800) then 9247.5000
		else if(revenu <= 101000) then 9675.6300
		else 10685.8300
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
921 | </eAnnotations> | ||
922 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
923 | </eOperations> | ||
924 | <eOperations name="get_A_for_salary_yearly_class_1A" ordered="false" lowerBound="1" | ||
925 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
926 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
927 | <details key="body" value="if(revenu<= 23500) then 0
		else if(revenu <= 24800) then 0.12
		else if(revenu <= 26050) then 0.15
		else if(revenu <= 27350) then 0.18
		else if(revenu <= 28600) then 0.21
		else if(revenu <= 29900) then 0.24
		else if(revenu <= 31150) then 0.27
		else if(revenu <= 32450) then 0.3
		else if(revenu <= 33700) then 0.33
		else if(revenu <= 34950) then 0.36
		else if(revenu <= 36250) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
928 | </eAnnotations> | ||
929 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
930 | </eOperations> | ||
931 | <eOperations name="get_B_for_salary_yearly_class_1A" ordered="false" lowerBound="1" | ||
932 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
933 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
934 | <details key="body" value="if(revenu<= 23500) then 0
		else if(revenu <= 24800) then 2826.0000
		else if(revenu <= 26050) then 3570.6600
		else if(revenu <= 27350) then 4353.4800
		else if(revenu <= 28600) then 5174.4600
		else if(revenu <= 29900) then 6033.6000
		else if(revenu <= 31150) then 6930.9000
		else if(revenu <= 32450) then 7866.3600
		else if(revenu <= 33700) then 8839.9800
		else if(revenu <= 34950) then 9851.7600
		else if(revenu <= 36250) then 10901.7000
		else 11264.4000
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
935 | </eAnnotations> | ||
936 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
937 | </eOperations> | ||
938 | <eOperations name="get_A_for_salary_yearly_class_2" ordered="false" lowerBound="1" | ||
939 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
940 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
941 | <details key="body" value="if(revenu<= 23550) then 0
		else if(revenu <= 27350) then 0.08
		else if(revenu <= 31150) then 0.1
		else if(revenu <= 34950) then 0.12
		else if(revenu <= 38800) then 0.14
		else if(revenu <= 42600) then 0.16
		else if(revenu <= 46400) then 0.18
		else if(revenu <= 50250) then 0.2
		else if(revenu <= 54050) then 0.22
		else if(revenu <= 57850) then 0.24
		else if(revenu <= 61700) then 0.26
		else if(revenu <= 65500) then 0.28
		else if(revenu <= 69300) then 0.3
		else if(revenu <= 73150) then 0.32
		else if(revenu <= 76950) then 0.34
		else if(revenu <= 80750) then 0.36
		else if(revenu <= 84600) then 0.38
		else if(revenu <= 201000) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
942 | </eAnnotations> | ||
943 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
944 | </eOperations> | ||
945 | <eOperations name="get_B_for_salary_yearly_class_2" ordered="false" lowerBound="1" | ||
946 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
947 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
948 | <details key="body" value=" if(revenu<= 23550) then 0
		else if(revenu <= 27350) then 1884.000
		else if(revenu <= 31150) then 2431.3200
		else if(revenu <= 34950) then 3054.9600
		else if(revenu <= 38800) then 3754.9200
		else if(revenu <= 42600) then 4531.2000
		else if(revenu <= 46400) then 5383.8000
		else if(revenu <= 50250) then 6312.7200
		else if(revenu <= 54050) then 7317.9600
		else if(revenu <= 57850) then 8399.5200
		else if(revenu <= 61700) then 9557.4000
		else if(revenu <= 65500) then 10791.6000
		else if(revenu <= 69300) then 12102.1200
		else if(revenu <= 73150) then 13488.9600
		else if(revenu <= 76950) then 14952.1200
		else if(revenu <= 80750) then 16491.6000
		else if(revenu <= 84600) then 18107.4000
		else if(revenu <= 201000) then 18953.4600
		else 20963.6600
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
949 | </eAnnotations> | ||
950 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
951 | </eOperations> | ||
952 | <eOperations name="get_A_for_pension_yearly_class_1" ordered="false" lowerBound="1" | ||
953 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
954 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
955 | <details key="body" value="if(revenu<= 12000) then 0
		else if(revenu <= 13950) then 0.08
		else if(revenu <= 15850) then 0.1
		else if(revenu <= 17750) then 0.12
		else if(revenu <= 19650) then 0.14
		else if(revenu <= 21550) then 0.16
		else if(revenu <= 23450) then 0.18
		else if(revenu <= 25400) then 0.2
		else if(revenu <= 27300) then 0.22
		else if(revenu <= 29200) then 0.24
		else if(revenu <= 31100) then 0.26
		else if(revenu <= 33000) then 0.28
		else if(revenu <= 34900) then 0.3
		else if(revenu <= 36800) then 0.32
		else if(revenu <= 38750) then 0.34
		else if(revenu <= 40650) then 0.36
		else if(revenu <= 42550) then 0.38
		else if(revenu <= 100750) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
956 | </eAnnotations> | ||
957 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
958 | </eOperations> | ||
959 | <eOperations name="get_B_for_pension_yearly_class_1" ordered="false" lowerBound="1" | ||
960 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
961 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
962 | <details key="body" value="if(revenu<= 12000) then 0
		else if(revenu <= 13950) then 963.600
		else if(revenu <= 15850) then 1242.660
		else if(revenu <= 17750) then 1559.880
		else if(revenu <= 19650) then 1915.260
		else if(revenu <= 21550) then 2308.800
		else if(revenu <= 23450) then 2740.500
		else if(revenu <= 25400) then 3210.360
		else if(revenu <= 27300) then 3718.380
		else if(revenu <= 29200) then 4264.560
		else if(revenu <= 31100) then 4848.900
		else if(revenu <= 33000) then 5471.400
		else if(revenu <= 34900) then 6132.060
		else if(revenu <= 36800) then 6830.880
		else if(revenu <= 38750) then 7567.860
		else if(revenu <= 40650) then 8343.000
		else if(revenu <= 42550) then 9156.300
		else if(revenu <= 100750) then 9582.030
		else 10589.830
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
963 | </eAnnotations> | ||
964 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
965 | </eOperations> | ||
966 | <eOperations name="get_A_for_pension_yearly_class_1A" ordered="false" lowerBound="1" | ||
967 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
968 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
969 | <details key="body" value="if(revenu<= 23300) then 0
		else if(revenu <= 24550) then 0.12
		else if(revenu <= 25850) then 0.15
		else if(revenu <= 27100) then 0.18
		else if(revenu <= 28350) then 0.21
		else if(revenu <= 29650) then 0.24
		else if(revenu <= 30900) then 0.27
		else if(revenu <= 32200) then 0.3
		else if(revenu <= 33450) then 0.33
		else if(revenu <= 34750) then 0.36
		else if(revenu <= 36000) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
970 | </eAnnotations> | ||
971 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
972 | </eOperations> | ||
973 | <eOperations name="get_B_for_pension_yearly_class_1A" ordered="false" lowerBound="1" | ||
974 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
975 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
976 | <details key="body" value="if(revenu<= 23300) then 0
		else if(revenu <= 24550) then 2797.200
		else if(revenu <= 25850) then 3534.660
		else if(revenu <= 27100) then 4310.280
		else if(revenu <= 28350) then 5124.060
		else if(revenu <= 29650) then 5976.000
		else if(revenu <= 30900) then 6866.100
		else if(revenu <= 32200) then 7794.360
		else if(revenu <= 33450) then 8760.780
		else if(revenu <= 34750) then 9765.360
		else if(revenu <= 36000) then 10808.100
		else 11168.400
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
977 | </eAnnotations> | ||
978 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
979 | </eOperations> | ||
980 | <eOperations name="get_A_for_pension_yearly_class_2" ordered="false" lowerBound="1" | ||
981 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
982 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
983 | <details key="body" value="if(revenu<= 23300) then 0
		else if(revenu <= 27100) then 0.08
		else if(revenu <= 30900) then 0.1
		else if(revenu <= 34750) then 0.12
		else if(revenu <= 38550) then 0.14
		else if(revenu <= 42350) then 0.16
		else if(revenu <= 46200) then 0.18
		else if(revenu <= 50000) then 0.2
		else if(revenu <= 53800) then 0.22
		else if(revenu <= 57650) then 0.24
		else if(revenu <= 61450) then 0.26
		else if(revenu <= 65250) then 0.28
		else if(revenu <= 69100) then 0.3
		else if(revenu <= 72900) then 0.32
		else if(revenu <= 76700) then 0.34
		else if(revenu <= 80550) then 0.36
		else if(revenu <= 84350) then 0.38
		else if(revenu <= 200750) then 0.39
		else 0.4
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
984 | </eAnnotations> | ||
985 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
986 | </eOperations> | ||
987 | <eOperations name="get_B_for_pension_yearly_class_2" ordered="false" lowerBound="1" | ||
988 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
989 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
990 | <details key="body" value="if(revenu<= 23300) then 0
		else if(revenu <= 27100) then 1864.800
		else if(revenu <= 30900) then 2407.320
		else if(revenu <= 34750) then 3026.160
		else if(revenu <= 38550) then 3721.320
		else if(revenu <= 42350) then 4492.800
		else if(revenu <= 46200) then 5340.600
		else if(revenu <= 50000) then 6264.720
		else if(revenu <= 53800) then 7265.160
		else if(revenu <= 57650) then 8341.920
		else if(revenu <= 61450) then 9495.000
		else if(revenu <= 65250) then 10724.400
		else if(revenu <= 69100) then 12030.120
		else if(revenu <= 72900) then 13412.160
		else if(revenu <= 76700) then 14870.520
		else if(revenu <= 80550) then 16405.200
		else if(revenu <= 84350) then 18016.200
		else if(revenu <= 200750) then 18859.860
		else 20867.660
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
		endif
 endif"/> | ||
991 | </eAnnotations> | ||
992 | <eParameters name="revenu" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
993 | </eOperations> | ||
994 | <eOperations name="calculate_taxes_per_year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
995 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
996 | <details key="body" value="if(income_type='Employment') then
			let a:Real = if(classe=Tax_Class_Category::One_A) then get_A_for_salary_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_A_for_salary_yearly_class_2(amount) else get_A_for_salary_yearly_class_1(amount) endif endif in
			let b:Real = if(classe=Tax_Class_Category::One_A) then get_B_for_salary_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_B_for_salary_yearly_class_2(amount) else get_B_for_salary_yearly_class_1(amount) endif endif in
		 let res:Real = round_lower_euros(a * amount - b) in
 let max:Real = if(classe=Tax_Class_Category::Two) then 301020 else 151020 endif in
 
		 if(amount<max) then
		 let final_res:Real= round_lower_euros(res*1.07) in
		 if(final_res<12)then
		 0
		 else
		 final_res
		 endif
		 else 
		 let adjustement:Real= if(classe=Tax_Class_Category::One_A) then 982.86 else if(classe=Tax_Class_Category::Two) then 1988.88 else 994.44 endif endif in
		 	let final_res:Real= round_lower_euros(res + (res*0.09-adjustement)) in
		 	if(final_res<12)then
		 0
		 else
		 final_res
		 endif
		 endif
		 
		 
			
			else
			if(income_type='Pension') then
			let a:Real = if(classe=Tax_Class_Category::One_A) then get_A_for_pension_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_A_for_pension_yearly_class_2(amount) else get_A_for_pension_yearly_class_1(amount) endif endif in
			let b:Real = if(classe=Tax_Class_Category::One_A) then get_B_for_pension_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_B_for_pension_yearly_class_2(amount) else get_B_for_pension_yearly_class_1(amount) endif endif in
		 let res:Real = round_lower_euros(a * amount - b) in
		 let max:Real = if(classe=Tax_Class_Category::Two) then 300780 else 150780 endif in
 
		 if(amount<max) then
		 let final_res:Real= round_lower_euros(res*1.07) in
		 if(final_res<12)then
		 0
		 else
		 final_res
		 endif
		 else 
		 let adjustement:Real= if(classe=Tax_Class_Category::One_A) then 982.86 else if(classe=Tax_Class_Category::Two) then 1988.88 else 994.44 endif endif in
		 	let final_res:Real= round_lower_euros(res + (res*0.09-adjustement)) in
		 	if(final_res<12)then
		 0
		 else
		 final_res
		 endif
	
		 endif
			
			else
			
			let a:Real = if(classe=Tax_Class_Category::One_A) then get_A_for_other_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_A_for_other_yearly_class_2(amount) else get_A_for_other_yearly_class_1(amount) endif endif in
			let b:Real = if(classe=Tax_Class_Category::One_A) then get_B_for_other_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_B_for_other_yearly_class_2(amount) else get_B_for_other_yearly_class_1(amount) endif endif in
		 let res:Real = round_lower_euros(a * amount - b) in
 let max:Real = if(classe=Tax_Class_Category::Two) then 300000 else 150000 endif in
 
		 if(amount<max) then
		 let final_res:Real= round_lower_euros(res*1.07) in
		 if(final_res<12)then
		 0
		 else
		 final_res
		 endif
		 else 
		 let adjustement:Real= if(classe=Tax_Class_Category::One_A) then 982.86 else if(classe=Tax_Class_Category::Two) then 1988.88 else 994.44 endif endif in
		 	let final_res:Real= round_lower_euros(res + (res*0.09-adjustement)) in
		 	if(final_res<12)then
		 0
		 else
		 final_res
		 endif 
		 endif 
			endif
			endif"/> | ||
997 | </eAnnotations> | ||
998 | <eParameters name="amount" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
999 | <eParameters name="classe" ordered="false" lowerBound="1" eType="#//Tax_Class_Category"/> | ||
1000 | <eParameters name="income_type" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
1001 | </eOperations> | ||
1002 | <eOperations name="CNS_RATE" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1003 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1004 | <details key="body" value="0.0305"/> | ||
1005 | </eAnnotations> | ||
1006 | </eOperations> | ||
1007 | <eOperations name="PENSION_RATE" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1008 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1009 | <details key="body" value="0.08"/> | ||
1010 | </eAnnotations> | ||
1011 | </eOperations> | ||
1012 | <eOperations name="round_lower_fifty_euros" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1013 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1014 | <details key="body" value="		if(amount<50) then
			0
			else
			if (amount>=50 and amount<100) then
			50.0
			else
			let temp_amount:Real = round_lower_euros(amount) in
			let ch:String=temp_amount.toString()in
			let temp_amount1:Real = temp_amount / 100.0 in
			
			if(temp_amount1.round() = temp_amount1.floor()) then
			temp_amount1.floor() * 100.0
			else
			(temp_amount1.round() * 100.0) - 50
			endif
			endif
			endif"/> | ||
1015 | </eAnnotations> | ||
1016 | <eParameters name="amount" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1017 | </eOperations> | ||
1018 | <eOperations name="getTaxableIncomePerYear" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1019 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1020 | <details key="body" value="let gross_salary_year:Real= income.income_per_year() in
			let type:Income_Type=income.income_type in
			
			if(type.oclIsTypeOf(Employment_Income)) then
			let sum_deductions_year:Real=income.tax_card.getSumDeductionsYear() in
			let part_pension_year:Real= gross_salary_year * income.taxPayer.from_law.PENSION_RATE() in
			let part_CNS_year:Real= gross_salary_year * income.taxPayer.from_law.CNS_RATE() in
			let taxable_income:Real= gross_salary_year- (part_CNS_year + part_pension_year + sum_deductions_year) in 	
			round_lower_fifty_euros(taxable_income)
			
			else
			if(type.oclIsTypeOf(Pensions_and_Annuities_Income))then
			let sum_deductions_year:Real=income.tax_card.getSumDeductionsYear() in
			let taxable_income:Real= gross_salary_year- sum_deductions_year in 	
			round_lower_fifty_euros(taxable_income)
			else
			let details:Set(Income_Detail)= income.details->select(i:Income_Detail|i.is_worked=true) in
			
			let res:Real= details->iterate( elem : Income_Detail; acc : Real = 0 | 
			 	
			 	if(elem.is_contributing_CNS=false and elem.is_contributing_pension=false) then acc + elem.amount 
			 	else
			 	if(elem.is_contributing_CNS=true and elem.is_contributing_pension=true) then
			 	acc+ elem.amount - (elem.amount* income.taxPayer.from_law.PENSION_RATE()) - (elem.amount* income.taxPayer.from_law.CNS_RATE())
			 	else
			 	if(elem.is_contributing_CNS=true)then
			 acc+ elem.amount - (elem.amount* income.taxPayer.from_law.CNS_RATE())
			 	else
			 	acc+ elem.amount - (elem.amount* income.taxPayer.from_law.PENSION_RATE()) 
			 	
			 	endif 
			 	endif 
			 	endif 
		
			 )
		
			in round_lower_fifty_euros(res)
			
			endif
			endif"/> | ||
1021 | </eAnnotations> | ||
1022 | <eParameters name="income" ordered="false" lowerBound="1" eType="#//Income"/> | ||
1023 | </eOperations> | ||
1024 | <eOperations name="precision" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1025 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1026 | <details key="body" value="		let ch:String=amount.toString() in
			if(ch.indexOf('.')=-1)then
			amount
			else
			let pos_pt:Integer=ch.indexOf('.') in
			if(pos_pt+degit >=ch.size()) then
			amount 
			else
			let ch1:String=ch.substring(1,pos_pt+degit) in
			ch1.toReal()
			endif
			endif"/> | ||
1027 | </eAnnotations> | ||
1028 | <eParameters name="amount" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1029 | <eParameters name="degit" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
1030 | </eOperations> | ||
1031 | <eOperations name="MAXIMUM_RATE_FOR_CE_CHILDREN" ordered="false" lowerBound="1" | ||
1032 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1033 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1034 | <details key="body" value="3480.0"/> | ||
1035 | </eAnnotations> | ||
1036 | </eOperations> | ||
1037 | <eOperations name="MINIMUM_LEGAL_SALARY" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1038 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1039 | <details key="body" value="1921.03"/> | ||
1040 | </eAnnotations> | ||
1041 | </eOperations> | ||
1042 | <eOperations name="MAXIMUM_FLAT_RATE_FOR_ALIMONY" ordered="false" lowerBound="1" | ||
1043 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1044 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1045 | <details key="body" value="			if(year_divorce>1997)then
			if(year <=2007) then
			20400.0
			else
			if(year=2008) then
			21600.0
			else 
			if(year=2009 or year = 2010) then
			23400.0
			else
			24000.0
			endif
			endif
			endif
			else

			if(year <=2007) then
			20400.0
			else
			if(year=2008) then
			21600.0
			else 
			23400.0
			endif
			endif	
			endif"/> | ||
1046 | </eAnnotations> | ||
1047 | <eParameters name="year" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
1048 | <eParameters name="year_divorce" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
1049 | </eOperations> | ||
1050 | <eOperations name="AEP_FLAT_RATE" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1051 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1052 | <details key="body" value="4500.0"/> | ||
1053 | </eAnnotations> | ||
1054 | </eOperations> | ||
1055 | <eOperations name="calculate_taxes_per_year_mixed" ordered="false" lowerBound="1" | ||
1056 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1057 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1058 | <details key="body" value="if(income_type='Employment') then
			let a:Real = if(classe=Tax_Class_Category::One_A) then get_A_for_salary_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_A_for_salary_yearly_class_2(amount) else get_A_for_salary_yearly_class_1(amount) endif endif in
			let b:Real = if(classe=Tax_Class_Category::One_A) then get_B_for_salary_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_B_for_salary_yearly_class_2(amount) else get_B_for_salary_yearly_class_1(amount) endif endif in
		 let res:Real = round_lower_euros(a * local_amount - b) in
 let max:Real = if(classe=Tax_Class_Category::Two) then 301020 else 151020 endif in
 
		 if(amount<max) then
		 let final_res:Real= round_lower_euros(res*1.07) in
		 if(final_res<12)then
		 0
		 else
		 final_res
		 endif
		 else 
		 let adjustement:Real= if(classe=Tax_Class_Category::One_A) then 982.86 else if(classe=Tax_Class_Category::Two) then 1988.88 else 994.44 endif endif in
		 	let final_res:Real= round_lower_euros(res + (res*0.09-adjustement)) in
		 	if(final_res<12)then
		 0
		 else
		 final_res
		 endif
		 endif
		 
		 
			
			else
			if(income_type='Pension') then
			let a:Real = if(classe=Tax_Class_Category::One_A) then get_A_for_pension_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_A_for_pension_yearly_class_2(amount) else get_A_for_pension_yearly_class_1(amount) endif endif in
			let b:Real = if(classe=Tax_Class_Category::One_A) then get_B_for_pension_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_B_for_pension_yearly_class_2(amount) else get_B_for_pension_yearly_class_1(amount) endif endif in
		 let res:Real = round_lower_euros(a * local_amount - b) in
		 let max:Real = if(classe=Tax_Class_Category::Two) then 300780 else 150780 endif in
 
		 if(amount<max) then
		 let final_res:Real= round_lower_euros(res*1.07) in
		 if(final_res<12)then
		 0
		 else
		 final_res
		 endif
		 else 
		 let adjustement:Real= if(classe=Tax_Class_Category::One_A) then 982.86 else if(classe=Tax_Class_Category::Two) then 1988.88 else 994.44 endif endif in
		 	let final_res:Real= round_lower_euros(res + (res*0.09-adjustement)) in
		 	if(final_res<12)then
		 0
		 else
		 final_res
		 endif
	
		 endif
			
			else
			
			let a:Real = if(classe=Tax_Class_Category::One_A) then get_A_for_other_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_A_for_other_yearly_class_2(amount) else get_A_for_other_yearly_class_1(amount) endif endif in
			let b:Real = if(classe=Tax_Class_Category::One_A) then get_B_for_other_yearly_class_1A(amount) else if(classe=Tax_Class_Category::Two) then get_B_for_other_yearly_class_2(amount) else get_B_for_other_yearly_class_1(amount) endif endif in
		 let res:Real = round_lower_euros(a * local_amount - b) in
 let max:Real = if(classe=Tax_Class_Category::Two) then 300000 else 150000 endif in
 
		 if(amount<max) then
		 let final_res:Real= round_lower_euros(res*1.07) in
		 if(final_res<12)then
		 0
		 else
		 final_res
		 endif
		 else 
		 let adjustement:Real= if(classe=Tax_Class_Category::One_A) then 982.86 else if(classe=Tax_Class_Category::Two) then 1988.88 else 994.44 endif endif in
		 	let final_res:Real= round_lower_euros(res + (res*0.09-adjustement)) in
		 	if(final_res<12)then
		 0
		 else
		 final_res
		 endif 
		 endif 
			endif
			endif"/> | ||
1059 | </eAnnotations> | ||
1060 | <eParameters name="amount" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1061 | <eParameters name="local_amount" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1062 | <eParameters name="classe" ordered="false" lowerBound="1" eType="#//Tax_Class_Category"/> | ||
1063 | <eParameters name="income_type" ordered="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
1064 | </eOperations> | ||
1065 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" ordered="false" lowerBound="1" | ||
1066 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
1067 | <eStructuralFeatures xsi:type="ecore:EReference" name="taxPayer" lowerBound="1" | ||
1068 | eType="#//Tax_Payer" eOpposite="#//Tax_Payer/from_law"/> | ||
1069 | </eClassifiers> | ||
1070 | <eClassifiers xsi:type="ecore:EClass" name="Fiscal_Address" eSuperTypes="#//Address"/> | ||
1071 | <eClassifiers xsi:type="ecore:EClass" name="Habitual_Address" eSuperTypes="#//Address"/> | ||
1072 | <eClassifiers xsi:type="ecore:EClass" name="Marriage_Record" eSuperTypes="#//Legal_Union_Record"/> | ||
1073 | <eClassifiers xsi:type="ecore:EClass" name="Non_Resident_Tax_Payer" eSuperTypes="#//Tax_Payer"> | ||
1074 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_assimilated_to_resident" | ||
1075 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1076 | defaultValueLiteral="false"/> | ||
1077 | </eClassifiers> | ||
1078 | <eClassifiers xsi:type="ecore:EClass" name="Partnership_Record" eSuperTypes="#//Legal_Union_Record"/> | ||
1079 | <eClassifiers xsi:type="ecore:EClass" name="Resident_Tax_Payer" eSuperTypes="#//Tax_Payer"> | ||
1080 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="test" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1081 | derived="true"> | ||
1082 | <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> | ||
1083 | <details key="derivation" value="self.oclAsType(Tax_Payer).from_agent.taxation_year=2014"/> | ||
1084 | </eAnnotations> | ||
1085 | </eStructuralFeatures> | ||
1086 | </eClassifiers> | ||
1087 | <eClassifiers xsi:type="ecore:EClass" name="Trade_and_Business_Income" eSuperTypes="#//Income_Type"/> | ||
1088 | <eClassifiers xsi:type="ecore:EClass" name="Agriculture_and_Forestry_Income" eSuperTypes="#//Income_Type"/> | ||
1089 | <eClassifiers xsi:type="ecore:EClass" name="Pensions_and_Annuities_Income" eSuperTypes="#//Income_Type"> | ||
1090 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="occasional_payement" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1091 | defaultValueLiteral="false"/> | ||
1092 | </eClassifiers> | ||
1093 | <eClassifiers xsi:type="ecore:EClass" name="Capital_and_Investments_Income" eSuperTypes="#//Income_Type"/> | ||
1094 | <eClassifiers xsi:type="ecore:EClass" name="Employment_Income" eSuperTypes="#//Income_Type"/> | ||
1095 | <eClassifiers xsi:type="ecore:EClass" name="Rentals_and_Leases_Income" eSuperTypes="#//Income_Type"> | ||
1096 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_periodic" lowerBound="1" | ||
1097 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="true"/> | ||
1098 | </eClassifiers> | ||
1099 | <eClassifiers xsi:type="ecore:EClass" name="Foreign_Income" eSuperTypes="#//Income"/> | ||
1100 | <eClassifiers xsi:type="ecore:EClass" name="Local_Income" eSuperTypes="#//Income"/> | ||
1101 | <eClassifiers xsi:type="ecore:EClass" name="CIM" eSuperTypes="#//Income_Tax_Credit"/> | ||
1102 | <eClassifiers xsi:type="ecore:EClass" name="CIP" eSuperTypes="#//Income_Tax_Credit"/> | ||
1103 | <eClassifiers xsi:type="ecore:EClass" name="CIS" eSuperTypes="#//Income_Tax_Credit"/> | ||
1104 | <eClassifiers xsi:type="ecore:EClass" name="FD" eSuperTypes="#//Professional_Expenses_Deduction"> | ||
1105 | <eOperations name="compute_distance_unit_between_home_and_workpalce" lowerBound="1" | ||
1106 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1107 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="distance_declared_in_january" | ||
1108 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1109 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="calculated_distance" lowerBound="1" | ||
1110 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" derived="true"/> | ||
1111 | </eClassifiers> | ||
1112 | <eClassifiers xsi:type="ecore:EClass" name="Professional_Expenses_Deduction"/> | ||
1113 | <eClassifiers xsi:type="ecore:EClass" name="FO" eSuperTypes="#//Professional_Expenses_Deduction"> | ||
1114 | <eOperations name="compute_disability_flat_rate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1115 | <eOperations name="compute_regular_flat_rate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1116 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="rate_type_for_FO" lowerBound="1" | ||
1117 | eType="#//Type_of_Rate" derived="true"/> | ||
1118 | </eClassifiers> | ||
1119 | <eClassifiers xsi:type="ecore:EClass" name="DS_for_Permanent_Expense" eSuperTypes="#//DS"> | ||
1120 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="permanent_expense_category" | ||
1121 | lowerBound="1" eType="#//Category_of_Permanent_Expense"/> | ||
1122 | </eClassifiers> | ||
1123 | <eClassifiers xsi:type="ecore:EClass" name="DS"> | ||
1124 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="maximum_deductible_amount" | ||
1125 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1126 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="id3" ordered="false" lowerBound="1" | ||
1127 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/> | ||
1128 | </eClassifiers> | ||
1129 | <eClassifiers xsi:type="ecore:EEnum" name="Category_of_Permanent_Expense"> | ||
1130 | <eLiterals name="MISCELLANEOUS_DEBT" literal="MISCELLANEOUS_DEBT"/> | ||
1131 | <eLiterals name="ALIMONY" value="1" literal="ALIMONY"/> | ||
1132 | </eClassifiers> | ||
1133 | <eClassifiers xsi:type="ecore:EClass" name="DS_for_Interest_Expense" eSuperTypes="#//DS"> | ||
1134 | <eOperations name="compute_maximum_deductible_amount" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1135 | <eParameters name="IN_children_with_allowances" ordered="false" upperBound="-1" | ||
1136 | eType="#//Dependent"/> | ||
1137 | <eParameters name="IN_legal_union" ordered="false" upperBound="-1" eType="#//Legal_Union_Record"/> | ||
1138 | </eOperations> | ||
1139 | </eClassifiers> | ||
1140 | <eClassifiers xsi:type="ecore:EClass" name="DS_for_Health_and_Pension_Insurance" | ||
1141 | eSuperTypes="#//DS"> | ||
1142 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="insurance_category" lowerBound="1" | ||
1143 | eType="#//Category_of_Health_and_Pension_Insurances"/> | ||
1144 | </eClassifiers> | ||
1145 | <eClassifiers xsi:type="ecore:EEnum" name="Category_of_Health_and_Pension_Insurances"> | ||
1146 | <eLiterals name="MANDATORY_HEALTH_AND_PENSION_INSURANCE" literal="MANDATORY_HEALTH_AND_PENSION_INSURANCE"/> | ||
1147 | <eLiterals name="ADDITIONAL_EMPLOYERS_PENSION_INSURANCE" value="1" literal="ADDITIONAL_EMPLOYERS_PENSION_INSURANCE"/> | ||
1148 | <eLiterals name="CONTINUED_HEALTH_AND_PENSION_INSURANCE" value="2" literal="CONTINUED_HEALTH_AND_PENSION_INSURANCE"/> | ||
1149 | </eClassifiers> | ||
1150 | <eClassifiers xsi:type="ecore:EClass" name="DS_for_Private_Insurance_and_Plan" eSuperTypes="#//DS"> | ||
1151 | <eOperations name="compute_increase_for_life_insurance" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1152 | <eOperations name="compute_maximum_deductible_amount_for_private_insruance" lowerBound="1" | ||
1153 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1154 | <eOperations name="compute_maximum_deductible_amount_for_old_age_pension_plan" | ||
1155 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1156 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="private_insurance_and_plan_category" | ||
1157 | lowerBound="1" eType="#//Category_of_Private_Insurance_and_Plan"/> | ||
1158 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="increase_for_life_insurance" | ||
1159 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
1160 | derived="true"/> | ||
1161 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="maximum_deductible_amount_for_private_insurance" | ||
1162 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
1163 | derived="true"/> | ||
1164 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="maximum_deductible_amount_for_old_age_pension_plan" | ||
1165 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" | ||
1166 | derived="true"/> | ||
1167 | </eClassifiers> | ||
1168 | <eClassifiers xsi:type="ecore:EEnum" name="Category_of_Private_Insurance_and_Plan"> | ||
1169 | <eLiterals name="PRIVATE_INSURANCE" literal="PRIVATE_INSURANCE"/> | ||
1170 | <eLiterals name="PRIVATE_LIFE_INSURANCE" value="1" literal="PRIVATE_LIFE_INSURANCE"/> | ||
1171 | <eLiterals name="COMPANY_MEMBERS_PRIVATE_INSURANCE" value="2" literal="COMPANY_MEMBERS_PRIVATE_INSURANCE"/> | ||
1172 | <eLiterals name="HOUSING_SAVING_PLAN" value="3" literal="HOUSING_SAVING_PLAN"/> | ||
1173 | <eLiterals name="OLD_AGE_PENSION_PLAN" value="4" literal="OLD_AGE_PENSION_PLAN"/> | ||
1174 | </eClassifiers> | ||
1175 | <eClassifiers xsi:type="ecore:EClass" name="DS_for_Loss_Carryforward" eSuperTypes="#//DS"/> | ||
1176 | <eClassifiers xsi:type="ecore:EClass" name="DS_for_Donation" eSuperTypes="#//DS"/> | ||
1177 | <eClassifiers xsi:type="ecore:EClass" name="Permanent_Expense" eSuperTypes="#//Special_Expense_DS"> | ||
1178 | <eOperations name="is_expense_eligible_for_deduction" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> | ||
1179 | <eParameters name="IN_agent_response" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
1180 | </eOperations> | ||
1181 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="category" lowerBound="1" | ||
1182 | eType="#//Category_of_Permanent_Expense"/> | ||
1183 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_eligible_for_deduction" | ||
1184 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1185 | defaultValueLiteral="false" derived="true"/> | ||
1186 | </eClassifiers> | ||
1187 | <eClassifiers xsi:type="ecore:EClass" name="Special_Expense_DS" eSuperTypes="#//Expense"/> | ||
1188 | <eClassifiers xsi:type="ecore:EClass" name="Interest_Expense" eSuperTypes="#//Special_Expense_DS"/> | ||
1189 | <eClassifiers xsi:type="ecore:EClass" name="Private_Insurance_and_Plan" eSuperTypes="#//Special_Expense_DS"> | ||
1190 | <eOperations name="is_private_insurance_and_plan_eligible_for_deduction" lowerBound="1" | ||
1191 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
1192 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="category" lowerBound="1" | ||
1193 | eType="#//Category_of_Private_Insurance_and_Plan"/> | ||
1194 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="duration_of_contract" lowerBound="1" | ||
1195 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> | ||
1196 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_private_insurance_and_plan_eligible_for_deduction" | ||
1197 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1198 | defaultValueLiteral="false" derived="true"/> | ||
1199 | </eClassifiers> | ||
1200 | <eClassifiers xsi:type="ecore:EClass" name="Health_and_Pension_Insurance" eSuperTypes="#//Special_Expense_DS"> | ||
1201 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="category" lowerBound="1" | ||
1202 | eType="#//Category_of_Health_and_Pension_Insurances"/> | ||
1203 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_related_to_additional_salary" | ||
1204 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1205 | defaultValueLiteral="false"/> | ||
1206 | </eClassifiers> | ||
1207 | <eClassifiers xsi:type="ecore:EClass" name="Donation" eSuperTypes="#//Special_Expense_DS"> | ||
1208 | <eOperations name="get_beneficiary_eligibility_for_deduction" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
1209 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="beneficiary1" lowerBound="1" | ||
1210 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | ||
1211 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_beneficiary_eligible" | ||
1212 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1213 | defaultValueLiteral="false" derived="true"/> | ||
1214 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="is_donation_reported" lowerBound="1" | ||
1215 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
1216 | </eClassifiers> | ||
1217 | <eClassifiers xsi:type="ecore:EClass" name="Loss_Carryforward" eSuperTypes="#//Special_Expense_DS"> | ||
1218 | <eOperations name="is_accountability_regular" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
1219 | <eOperations name="is_compensated_by_other_means" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
1220 | <eOperations name="has_been_tax_payer_partner_in_business" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
1221 | <eOperations name="has_tax_payer_inherited_business_ownership" lowerBound="1" | ||
1222 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
1223 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="regular_accountability" | ||
1224 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1225 | derived="true"/> | ||
1226 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="compensation_by_other_means" | ||
1227 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1228 | derived="true"/> | ||
1229 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tax_payer_has_inherited_business_ownership" | ||
1230 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1231 | defaultValueLiteral="false" derived="true"/> | ||
1232 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="tax_payer_has_been_partner_in_business" | ||
1233 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
1234 | defaultValueLiteral="true" derived="true"/> | ||
1235 | </eClassifiers> | ||
1236 | <eClassifiers xsi:type="ecore:EClass" name="Spousal_Expense_AC" eSuperTypes="#//Expense"/> | ||
1237 | <eClassifiers xsi:type="ecore:EClass" name="Extraordinary_Expense_CE" eSuperTypes="#//Expense"> | ||
1238 | <eOperations name="is_above_thresholded_deduction_percentage_for_CE" lowerBound="1" | ||
1239 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | ||
1240 | <eOperations name="compute_thresholded_deduction_percentage_for_CE" lowerBound="1" | ||
1241 | eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"> | ||
1242 | <eParameters name="IN_thresholded_deduction_percentage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1243 | </eOperations> | ||
1244 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="thresholded_deduction_percentage" | ||
1245 | lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> | ||
1246 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="ce_type" lowerBound="1" | ||
1247 | eType="#//CE_Type"/> | ||
1248 | </eClassifiers> | ||
1249 | <eClassifiers xsi:type="ecore:EClass" name="Travel_Expense_FD" eSuperTypes="#//Professional_Expense"/> | ||
1250 | <eClassifiers xsi:type="ecore:EClass" name="Professional_Expense" eSuperTypes="#//Expense"/> | ||
1251 | <eClassifiers xsi:type="ecore:EClass" name="Miscellaneous_Expense_FO" eSuperTypes="#//Professional_Expense"/> | ||
1252 | <eClassifiers xsi:type="ecore:EEnum" name="Legal_Union_Types"> | ||
1253 | <eLiterals name="MARIAGE"/> | ||
1254 | <eLiterals name="PARTNERSHIP" value="1"/> | ||
1255 | <eLiterals name="OTHER" value="2"/> | ||
1256 | </eClassifiers> | ||
1257 | </ecore:EPackage> | ||