import 'file:/Users/Aren Babikian/git/VIATRA-Attributes/case.study.a.model/model/Taxation.ecore' package Taxation --context Income inv inv8: --if(not self.income_type.oclIsTypeOf(Employment_Income)) then --self.details->forAll(d| d.distance = 0) --else --self.details->forAll(d| d.distance >= 0.0 and d.distance <= 100) --endif -- --context Legal_Union_Record inv inv490: --self.individual_A.oclIsKindOf(Tax_Payer) -- --context Legal_Union_Record inv inv491: --self.individual_B->forAll(i | i.oclIsKindOf(Physical_Person) ) -- --context Legal_Union_Record inv inv492: --self.individual_B->forAll(i | not i.oclIsTypeOf(Dependent) ) -- --context Legal_Union_Record inv inv493: --self.individual_A <> self.individual_B -- --context Tax_Payer inv inv13: -- self.addresses->exists( hab_add:Address | hab_add.oclIsTypeOf(Habitual_Address) = true and hab_add.country=Country::ZZ) --implies -- self.oclIsTypeOf(Resident_Tax_Payer) context Income inv inv7: let val:Real =self.details->asOrderedSet()->first().distance in self.details->forAll(d: Income_Detail|d.distance = val) --context External_Allowance inv inv15: --let child:Dependent = self.person in --let h:Household = Household.allInstances()->select(children->includes(child))->asOrderedSet()->first() in --let t1:Set(Physical_Person) = Set{h.parents.individual_A}->union(h.parents.individual_B)->select(oclIsKindOf(Tax_Payer)) in --if(t1->size()=1) then --self.reciver = t1->asOrderedSet()->first() --else --self.reciver = t1->asOrderedSet()->at(2) or self.reciver = t1->asOrderedSet()->at(1) --endif endpackage