@etherisc/gif-next 0.0.2-f30e0eb-805 → 0.0.2-f398177-971
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -83
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +47 -6
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +70 -13
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +137 -6
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +144 -13
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +161 -20
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +151 -20
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +71 -20
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +62 -21
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +310 -2004
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +101 -52
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +425 -2757
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +95 -58
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +348 -58
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +153 -207
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +38 -83
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +113 -34
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +8 -8
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +6 -6
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +186 -236
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +38 -55
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +377 -182
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -39
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +713 -83
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +147 -32
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +266 -442
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +82 -107
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +111 -174
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +233 -128
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +385 -51
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +109 -282
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +210 -99
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +682 -33
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +510 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +85 -27
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +420 -160
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +104 -53
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +880 -82
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +90 -39
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +1004 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +688 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +144 -57
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +28 -37
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -37
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +22 -49
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +21 -34
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +10 -23
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -19
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +14 -27
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +6 -19
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +91 -28
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +6 -19
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +106 -39
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +74 -19
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +17 -4
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/Component.sol +25 -4
- package/contracts/components/Distribution.sol +11 -6
- package/contracts/components/IComponent.sol +19 -3
- package/contracts/components/IPoolComponent.sol +8 -7
- package/contracts/components/IProductComponent.sol +5 -4
- package/contracts/components/Pool.sol +17 -14
- package/contracts/components/Product.sol +144 -62
- package/contracts/instance/BundleManager.sol +3 -4
- package/contracts/instance/IInstance.sol +32 -53
- package/contracts/instance/IInstanceService.sol +15 -14
- package/contracts/instance/Instance.sol +107 -205
- package/contracts/instance/InstanceAccessManager.sol +44 -25
- package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
- package/contracts/instance/InstanceReader.sol +85 -7
- package/contracts/instance/InstanceService.sol +102 -289
- package/contracts/instance/InstanceStore.sol +212 -0
- package/contracts/instance/ObjectManager.sol +1 -1
- package/contracts/instance/base/ComponentService.sol +53 -39
- package/contracts/instance/base/KeyValueStore.sol +8 -34
- package/contracts/instance/base/Lifecycle.sol +15 -4
- package/contracts/instance/module/IAccess.sol +2 -2
- package/contracts/instance/module/IBundle.sol +6 -4
- package/contracts/instance/module/IComponents.sol +7 -1
- package/contracts/instance/module/IDistribution.sol +3 -2
- package/contracts/instance/module/IPolicy.sol +13 -8
- package/contracts/instance/service/ApplicationService.sol +62 -226
- package/contracts/instance/service/BundleService.sol +172 -126
- package/contracts/instance/service/ClaimService.sol +318 -32
- package/contracts/instance/service/DistributionService.sol +71 -190
- package/contracts/instance/service/IApplicationService.sol +8 -28
- package/contracts/instance/service/IBundleService.sol +82 -26
- package/contracts/instance/service/IClaimService.sol +52 -23
- package/contracts/instance/service/IDistributionService.sol +11 -22
- package/contracts/instance/service/IPolicyService.sol +24 -16
- package/contracts/instance/service/IPoolService.sol +82 -3
- package/contracts/instance/service/IPricingService.sol +37 -0
- package/contracts/instance/service/PolicyService.sol +152 -179
- package/contracts/instance/service/PoolService.sol +239 -56
- package/contracts/instance/service/PricingService.sol +275 -0
- package/contracts/instance/service/PricingServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +27 -58
- package/contracts/registry/IRegistryService.sol +2 -3
- package/contracts/registry/RegistryService.sol +24 -21
- package/contracts/registry/ReleaseManager.sol +20 -18
- package/contracts/shared/IPolicyHolder.sol +23 -9
- package/contracts/shared/IRegistryLinked.sol +0 -1
- package/contracts/shared/IService.sol +6 -6
- package/contracts/shared/NftOwnable.sol +0 -2
- package/contracts/shared/PolicyHolder.sol +30 -17
- package/contracts/shared/Registerable.sol +10 -9
- package/contracts/shared/RegistryLinked.sol +0 -5
- package/contracts/shared/Service.sol +21 -7
- package/contracts/shared/TokenHandler.sol +4 -2
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +109 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +16 -8
- package/contracts/types/ObjectType.sol +9 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/StateId.sol +6 -2
- package/contracts/types/Timestamp.sol +5 -0
- package/package.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
- /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
| @@ -14,24 +14,29 @@ import {ISetup} from "../module/ISetup.sol"; | |
| 14 14 |  | 
| 15 15 | 
             
            import {TokenHandler} from "../../shared/TokenHandler.sol";
         | 
| 16 16 |  | 
| 17 | 
            +
            import {Amount, AmountLib} from "../../types/Amount.sol";
         | 
| 18 | 
            +
            import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
         | 
| 17 19 | 
             
            import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
         | 
| 18 20 | 
             
            import {UFixed, UFixedLib} from "../../types/UFixed.sol";
         | 
| 19 | 
            -
            import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
         | 
| 20 | 
            -
            import {APPLIED,  | 
| 21 | 
            +
            import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../../types/ObjectType.sol";
         | 
| 22 | 
            +
            import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../../types/StateId.sol";
         | 
| 21 23 | 
             
            import {NftId, NftIdLib} from "../../types/NftId.sol";
         | 
| 24 | 
            +
            import {PayoutId, PayoutIdLib} from "../../types/PayoutId.sol";
         | 
| 22 25 | 
             
            import {StateId} from "../../types/StateId.sol";
         | 
| 26 | 
            +
            import {VersionPart} from "../../types/Version.sol";
         | 
| 23 27 |  | 
| 24 28 | 
             
            import {ComponentService} from "../base/ComponentService.sol";
         | 
| 25 29 | 
             
            import {IApplicationService} from "./IApplicationService.sol";
         | 
| 26 30 | 
             
            import {IBundleService} from "./IBundleService.sol";
         | 
| 31 | 
            +
            import {IClaimService} from "./IClaimService.sol";
         | 
| 27 32 | 
             
            import {IDistributionService} from "./IDistributionService.sol";
         | 
| 28 33 | 
             
            import {InstanceReader} from "../InstanceReader.sol";
         | 
| 29 34 | 
             
            import {IPolicyService} from "./IPolicyService.sol";
         | 
| 30 35 | 
             
            import {IPoolService} from "./IPoolService.sol";
         | 
| 36 | 
            +
            import {IPricingService} from "./IPricingService.sol";
         | 
| 31 37 | 
             
            import {IService} from "../../shared/IService.sol";
         | 
| 32 38 | 
             
            import {Service} from "../../shared/Service.sol";
         | 
| 33 39 |  | 
| 34 | 
            -
             | 
| 35 40 | 
             
            contract PolicyService is
         | 
| 36 41 | 
             
                ComponentService, 
         | 
| 37 42 | 
             
                IPolicyService
         | 
| @@ -39,10 +44,12 @@ contract PolicyService is | |
| 39 44 | 
             
                using NftIdLib for NftId;
         | 
| 40 45 | 
             
                using TimestampLib for Timestamp;
         | 
| 41 46 |  | 
| 42 | 
            -
                IPoolService internal _poolService;
         | 
| 43 | 
            -
                IBundleService internal _bundleService;
         | 
| 44 47 | 
             
                IApplicationService internal _applicationService;
         | 
| 48 | 
            +
                IBundleService internal _bundleService;
         | 
| 49 | 
            +
                IClaimService internal _claimService;
         | 
| 45 50 | 
             
                IDistributionService internal _distributionService;
         | 
| 51 | 
            +
                IPoolService internal _poolService;
         | 
| 52 | 
            +
                IPricingService internal _pricingService;
         | 
| 46 53 |  | 
| 47 54 | 
             
                event LogProductServiceSender(address sender);
         | 
| 48 55 |  | 
| @@ -58,59 +65,31 @@ contract PolicyService is | |
| 58 65 | 
             
                    address initialOwner;
         | 
| 59 66 | 
             
                    (registryAddress, initialOwner) = abi.decode(data, (address, address));
         | 
| 60 67 |  | 
| 61 | 
            -
                    initializeService(registryAddress, owner);
         | 
| 68 | 
            +
                    initializeService(registryAddress, address(0), owner);
         | 
| 62 69 |  | 
| 63 | 
            -
                     | 
| 64 | 
            -
                     | 
| 65 | 
            -
                     | 
| 66 | 
            -
                     | 
| 70 | 
            +
                    VersionPart majorVersion = getVersion().toMajorPart();
         | 
| 71 | 
            +
                    _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
         | 
| 72 | 
            +
                    _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
         | 
| 73 | 
            +
                    _claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
         | 
| 74 | 
            +
                    _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
         | 
| 75 | 
            +
                    _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
         | 
| 76 | 
            +
                    _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
         | 
| 67 77 |  | 
| 68 78 | 
             
                    registerInterface(type(IPolicyService).interfaceId);
         | 
| 69 79 | 
             
                }
         | 
| 70 80 |  | 
| 71 81 |  | 
| 72 | 
            -
                function getDomain() public pure override | 
| 82 | 
            +
                function getDomain() public pure override returns(ObjectType) {
         | 
| 73 83 | 
             
                    return POLICY();
         | 
| 74 84 | 
             
                }
         | 
| 75 85 |  | 
| 76 86 |  | 
| 77 87 | 
             
                function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
         | 
| 78 88 | 
             
                    IRegistry.ObjectInfo memory productInfo;
         | 
| 79 | 
            -
                    (productInfo,) =  | 
| 89 | 
            +
                    (, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
         | 
| 80 90 | 
             
                    product = Product(productInfo.objectAddress);
         | 
| 81 91 | 
             
                }
         | 
| 82 92 |  | 
| 83 | 
            -
                function _getAndVerifyUnderwritingSetup(
         | 
| 84 | 
            -
                    IInstance instance,
         | 
| 85 | 
            -
                    InstanceReader instanceReader,
         | 
| 86 | 
            -
                    IPolicy.PolicyInfo memory policyInfo,
         | 
| 87 | 
            -
                    ISetup.ProductSetupInfo memory productSetupInfo
         | 
| 88 | 
            -
                )
         | 
| 89 | 
            -
                    internal
         | 
| 90 | 
            -
                    view
         | 
| 91 | 
            -
                    returns (
         | 
| 92 | 
            -
                        NftId poolNftId,
         | 
| 93 | 
            -
                        NftId bundleNftId,
         | 
| 94 | 
            -
                        IBundle.BundleInfo memory bundleInfo,
         | 
| 95 | 
            -
                        uint256 collateralAmount
         | 
| 96 | 
            -
                    )
         | 
| 97 | 
            -
                {
         | 
| 98 | 
            -
                    // check match between policy and bundle (via pool)
         | 
| 99 | 
            -
                    poolNftId = productSetupInfo.poolNftId;
         | 
| 100 | 
            -
                    bundleNftId = policyInfo.bundleNftId;
         | 
| 101 | 
            -
                    bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 102 | 
            -
                    require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
         | 
| 103 | 
            -
             | 
| 104 | 
            -
                    // calculate required collateral
         | 
| 105 | 
            -
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 106 | 
            -
                    IComponents.PoolInfo memory poolInfo = abi.decode(
         | 
| 107 | 
            -
                        componentInfo.data, (IComponents.PoolInfo));
         | 
| 108 | 
            -
             | 
| 109 | 
            -
                    // obtain remaining return values
         | 
| 110 | 
            -
                    // TODO required collateral amount should be calculated by pool service, not policy service
         | 
| 111 | 
            -
                    collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
         | 
| 112 | 
            -
                }
         | 
| 113 | 
            -
             | 
| 114 93 |  | 
| 115 94 | 
             
                function decline(
         | 
| 116 95 | 
             
                    NftId policyNftId
         | 
| @@ -118,12 +97,12 @@ contract PolicyService is | |
| 118 97 | 
             
                    external
         | 
| 119 98 | 
             
                    override
         | 
| 120 99 | 
             
                {
         | 
| 121 | 
            -
                     | 
| 100 | 
            +
                    revert();
         | 
| 122 101 | 
             
                }
         | 
| 123 102 |  | 
| 124 103 |  | 
| 125 104 | 
             
                /// @dev underwites application which includes the locking of the required collateral from the pool.
         | 
| 126 | 
            -
                function  | 
| 105 | 
            +
                function collateralize(
         | 
| 127 106 | 
             
                    NftId applicationNftId, // = policyNftId
         | 
| 128 107 | 
             
                    bool requirePremiumPayment,
         | 
| 129 108 | 
             
                    Timestamp activateAt
         | 
| @@ -132,126 +111,104 @@ contract PolicyService is | |
| 132 111 | 
             
                    virtual override
         | 
| 133 112 | 
             
                {
         | 
| 134 113 | 
             
                    // check caller is registered product
         | 
| 135 | 
            -
                    IInstance instance;
         | 
| 136 | 
            -
                    InstanceReader instanceReader;
         | 
| 137 | 
            -
                    NftId productNftId;
         | 
| 138 | 
            -
                    {
         | 
| 139 | 
            -
                        IRegistry.ObjectInfo memory productInfo;
         | 
| 140 | 
            -
                        (productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 141 | 
            -
                        instanceReader = instance.getInstanceReader();
         | 
| 142 | 
            -
                        productNftId = productInfo.nftId;
         | 
| 143 | 
            -
                    }
         | 
| 114 | 
            +
                    (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
         | 
| 115 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 144 116 |  | 
| 145 117 | 
             
                    // check policy matches with calling product
         | 
| 146 | 
            -
                    IPolicy.PolicyInfo memory  | 
| 147 | 
            -
                     | 
| 118 | 
            +
                    IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
         | 
| 119 | 
            +
                    if(applicationInfo.productNftId != productNftId) {
         | 
| 120 | 
            +
                        revert ErrorPolicyServicePolicyProductMismatch(
         | 
| 121 | 
            +
                            applicationNftId, 
         | 
| 122 | 
            +
                            applicationInfo.productNftId, 
         | 
| 123 | 
            +
                            productNftId);
         | 
| 124 | 
            +
                    }
         | 
| 148 125 |  | 
| 149 126 | 
             
                    // check policy is in state applied
         | 
| 150 | 
            -
                     | 
| 151 | 
            -
             | 
| 152 | 
            -
                     | 
| 153 | 
            -
                        NftId poolNftId,
         | 
| 154 | 
            -
                        NftId bundleNftId,
         | 
| 155 | 
            -
                        IBundle.BundleInfo memory bundleInfo,
         | 
| 156 | 
            -
                        uint256 collateralAmount
         | 
| 157 | 
            -
                    ) = _getAndVerifyUnderwritingSetup(
         | 
| 158 | 
            -
                        instance,
         | 
| 159 | 
            -
                        instanceReader,
         | 
| 160 | 
            -
                        policyInfo,
         | 
| 161 | 
            -
                        instanceReader.getProductSetupInfo(productNftId)
         | 
| 162 | 
            -
                    );
         | 
| 127 | 
            +
                    if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
         | 
| 128 | 
            +
                        revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
         | 
| 129 | 
            +
                    }
         | 
| 163 130 |  | 
| 164 | 
            -
                    StateId newPolicyState =  | 
| 131 | 
            +
                    StateId newPolicyState = COLLATERALIZED();
         | 
| 165 132 |  | 
| 166 133 | 
             
                    // optional activation of policy
         | 
| 167 134 | 
             
                    if(activateAt > zeroTimestamp()) {
         | 
| 168 135 | 
             
                        newPolicyState = ACTIVE();
         | 
| 169 | 
            -
                         | 
| 170 | 
            -
                         | 
| 136 | 
            +
                        applicationInfo.activatedAt = activateAt;
         | 
| 137 | 
            +
                        applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
         | 
| 171 138 | 
             
                    }
         | 
| 172 139 |  | 
| 173 140 | 
             
                    // lock bundle collateral
         | 
| 174 | 
            -
                     | 
| 141 | 
            +
                    Amount netPremiumAmount = AmountLib.zero(); // > 0 if immediate premium payment 
         | 
| 175 142 |  | 
| 176 143 | 
             
                    // optional collection of premium
         | 
| 177 144 | 
             
                    if(requirePremiumPayment) {
         | 
| 178 145 | 
             
                        netPremiumAmount = _processPremiumByTreasury(
         | 
| 179 146 | 
             
                            instance, 
         | 
| 180 147 | 
             
                            applicationNftId, 
         | 
| 181 | 
            -
                             | 
| 148 | 
            +
                            applicationInfo.premiumAmount);
         | 
| 182 149 |  | 
| 183 | 
            -
                         | 
| 150 | 
            +
                        applicationInfo.premiumPaidAmount = applicationInfo.premiumPaidAmount + applicationInfo.premiumAmount;
         | 
| 184 151 | 
             
                    }
         | 
| 185 152 |  | 
| 186 | 
            -
                    //  | 
| 187 | 
            -
                     | 
| 188 | 
            -
             | 
| 189 | 
            -
                    //  | 
| 190 | 
            -
                    //  | 
| 191 | 
            -
                    // retention level: fraction of sum insured that product will cover from pool funds directly
         | 
| 153 | 
            +
                    // store updated policy info
         | 
| 154 | 
            +
                    instance.getInstanceStore().updatePolicy(applicationNftId, applicationInfo, newPolicyState);
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                    // lock collateral and update pool and bundle book keeping
         | 
| 157 | 
            +
                    // pool retention level: fraction of sum insured that product will cover from pool funds directly
         | 
| 192 158 | 
             
                    // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
         | 
| 193 159 | 
             
                    // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
         | 
| 194 | 
            -
                    //  | 
| 195 | 
            -
                     | 
| 196 | 
            -
                    // - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
         | 
| 197 | 
            -
                    bundleInfo = _bundleService.lockCollateral(
         | 
| 160 | 
            +
                    // might also call pool component (for isVerifyingApplications pools)
         | 
| 161 | 
            +
                    _poolService.lockCollateral(
         | 
| 198 162 | 
             
                        instance,
         | 
| 163 | 
            +
                        productNftId,
         | 
| 199 164 | 
             
                        applicationNftId, 
         | 
| 200 | 
            -
                         | 
| 201 | 
            -
                         | 
| 202 | 
            -
                        netPremiumAmount);
         | 
| 203 | 
            -
             | 
| 204 | 
            -
                    instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
         | 
| 205 | 
            -
             | 
| 206 | 
            -
                    // also verify/confirm application by pool if necessary
         | 
| 207 | 
            -
                    if(abi.decode(
         | 
| 208 | 
            -
                        instanceReader.getComponentInfo(poolNftId).data, 
         | 
| 209 | 
            -
                        (IComponents.PoolInfo)
         | 
| 210 | 
            -
                        ).isVerifyingApplications
         | 
| 211 | 
            -
                    )
         | 
| 212 | 
            -
                    {
         | 
| 213 | 
            -
                        IPoolComponent pool = IPoolComponent(
         | 
| 214 | 
            -
                            getRegistry().getObjectInfo(poolNftId).objectAddress);
         | 
| 215 | 
            -
             | 
| 216 | 
            -
                        pool.verifyApplication(
         | 
| 217 | 
            -
                            applicationNftId, 
         | 
| 218 | 
            -
                            policyInfo.applicationData, 
         | 
| 219 | 
            -
                            bundleNftId,
         | 
| 220 | 
            -
                            bundleInfo.filter,
         | 
| 221 | 
            -
                            collateralAmount);
         | 
| 222 | 
            -
                    }
         | 
| 165 | 
            +
                        applicationInfo,
         | 
| 166 | 
            +
                        netPremiumAmount); // for pool book keeping (fee + additional capital)
         | 
| 223 167 |  | 
| 224 168 | 
             
                    // TODO: add logging
         | 
| 225 169 | 
             
                }
         | 
| 226 170 |  | 
| 227 171 |  | 
| 228 | 
            -
                function calculateRequiredCollateral( | 
| 229 | 
            -
                    UFixed  | 
| 230 | 
            -
                     | 
| 231 | 
            -
             | 
| 172 | 
            +
                function calculateRequiredCollateral(
         | 
| 173 | 
            +
                    UFixed collateralizationLevel, 
         | 
| 174 | 
            +
                    Amount sumInsuredAmount
         | 
| 175 | 
            +
                )
         | 
| 176 | 
            +
                    public 
         | 
| 177 | 
            +
                    pure 
         | 
| 178 | 
            +
                    virtual 
         | 
| 179 | 
            +
                    returns(Amount collateralAmount)
         | 
| 180 | 
            +
                {
         | 
| 181 | 
            +
                    UFixed collateralUFixed =  collateralizationLevel * sumInsuredAmount.toUFixed();
         | 
| 182 | 
            +
                    return AmountLib.toAmount(collateralUFixed.toInt());
         | 
| 232 183 | 
             
                } 
         | 
| 233 184 |  | 
| 234 | 
            -
                function collectPremium( | 
| 185 | 
            +
                function collectPremium(
         | 
| 186 | 
            +
                    NftId policyNftId, 
         | 
| 187 | 
            +
                    Timestamp activateAt
         | 
| 188 | 
            +
                )
         | 
| 189 | 
            +
                    external 
         | 
| 190 | 
            +
                    virtual
         | 
| 191 | 
            +
                {
         | 
| 235 192 | 
             
                    // check caller is registered product
         | 
| 236 | 
            -
                    ( | 
| 193 | 
            +
                    (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
         | 
| 237 194 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 238 195 | 
             
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| 239 196 |  | 
| 240 197 | 
             
                    if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
         | 
| 241 | 
            -
                        revert  | 
| 198 | 
            +
                        revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
         | 
| 242 199 | 
             
                    }
         | 
| 243 200 |  | 
| 244 | 
            -
                     | 
| 201 | 
            +
                    Amount unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
         | 
| 245 202 |  | 
| 246 | 
            -
                     | 
| 203 | 
            +
                    Amount netPremiumAmount = _processPremiumByTreasury(
         | 
| 247 204 | 
             
                            instance, 
         | 
| 248 205 | 
             
                            policyNftId, 
         | 
| 249 206 | 
             
                            unpaidPremiumAmount);
         | 
| 250 207 |  | 
| 251 | 
            -
                    policyInfo.premiumPaidAmount  | 
| 208 | 
            +
                    policyInfo.premiumPaidAmount = policyInfo.premiumPaidAmount + unpaidPremiumAmount;
         | 
| 252 209 |  | 
| 253 210 | 
             
                    _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
         | 
| 254 | 
            -
                    instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
         | 
| 211 | 
            +
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
         | 
| 255 212 |  | 
| 256 213 | 
             
                    if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
         | 
| 257 214 | 
             
                        activate(policyNftId, activateAt);
         | 
| @@ -262,7 +219,7 @@ contract PolicyService is | |
| 262 219 |  | 
| 263 220 | 
             
                function activate(NftId policyNftId, Timestamp activateAt) public override {
         | 
| 264 221 | 
             
                    // check caller is registered product
         | 
| 265 | 
            -
                    ( | 
| 222 | 
            +
                    (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
         | 
| 266 223 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 267 224 |  | 
| 268 225 | 
             
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| @@ -274,7 +231,7 @@ contract PolicyService is | |
| 274 231 | 
             
                    policyInfo.activatedAt = activateAt;
         | 
| 275 232 | 
             
                    policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
         | 
| 276 233 |  | 
| 277 | 
            -
                    instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
         | 
| 234 | 
            +
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
         | 
| 278 235 |  | 
| 279 236 | 
             
                    // TODO: add logging
         | 
| 280 237 | 
             
                }
         | 
| @@ -296,7 +253,7 @@ contract PolicyService is | |
| 296 253 | 
             
                    external 
         | 
| 297 254 | 
             
                    override
         | 
| 298 255 | 
             
                {
         | 
| 299 | 
            -
                    ( | 
| 256 | 
            +
                    (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
         | 
| 300 257 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 301 258 |  | 
| 302 259 | 
             
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| @@ -314,90 +271,106 @@ contract PolicyService is | |
| 314 271 | 
             
                        revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
         | 
| 315 272 | 
             
                    }
         | 
| 316 273 |  | 
| 317 | 
            -
                     | 
| 318 | 
            -
             | 
| 274 | 
            +
                    // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
         | 
| 275 | 
            +
                    if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
         | 
| 276 | 
            +
                        revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
         | 
| 319 277 | 
             
                    }
         | 
| 320 278 |  | 
| 321 279 | 
             
                    if (policyInfo.openClaimsCount > 0) {
         | 
| 322 280 | 
             
                        revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
         | 
| 323 281 | 
             
                    }
         | 
| 324 282 |  | 
| 325 | 
            -
                    if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
         | 
| 326 | 
            -
                        revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
         | 
| 327 | 
            -
                    }
         | 
| 328 | 
            -
             | 
| 329 283 | 
             
                    policyInfo.closedAt = TimestampLib.blockTimestamp();
         | 
| 330 284 |  | 
| 331 | 
            -
                     | 
| 332 | 
            -
             | 
| 333 | 
            -
             | 
| 285 | 
            +
                    _poolService.releaseCollateral(
         | 
| 286 | 
            +
                        instance, 
         | 
| 287 | 
            +
                        policyNftId, 
         | 
| 288 | 
            +
                        policyInfo);
         | 
| 334 289 |  | 
| 335 | 
            -
             | 
| 336 | 
            -
                    IInstance instance,
         | 
| 337 | 
            -
                    NftId productNftId
         | 
| 338 | 
            -
                )
         | 
| 339 | 
            -
                    internal
         | 
| 340 | 
            -
                    view
         | 
| 341 | 
            -
                    returns (NftId poolNftid)
         | 
| 342 | 
            -
                {
         | 
| 343 | 
            -
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 344 | 
            -
                    ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
         | 
| 345 | 
            -
                    return productSetupInfo.poolNftId;
         | 
| 290 | 
            +
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
         | 
| 346 291 | 
             
                }
         | 
| 347 292 |  | 
| 348 293 |  | 
| 349 294 | 
             
                function _processPremiumByTreasury(
         | 
| 350 295 | 
             
                    IInstance instance,
         | 
| 351 296 | 
             
                    NftId policyNftId,
         | 
| 352 | 
            -
                     | 
| 297 | 
            +
                    Amount premiumExpectedAmount
         | 
| 353 298 | 
             
                )
         | 
| 354 299 | 
             
                    internal
         | 
| 355 | 
            -
                    returns ( | 
| 300 | 
            +
                    returns (Amount netPremiumAmount)
         | 
| 356 301 | 
             
                {
         | 
| 357 302 | 
             
                    // process token transfer(s)
         | 
| 358 | 
            -
                    if( | 
| 359 | 
            -
                         | 
| 360 | 
            -
             | 
| 361 | 
            -
             | 
| 362 | 
            -
             | 
| 363 | 
            -
             | 
| 364 | 
            -
             | 
| 365 | 
            -
                         | 
| 366 | 
            -
             | 
| 367 | 
            -
             | 
| 368 | 
            -
             | 
| 369 | 
            -
             | 
| 370 | 
            -
             | 
| 371 | 
            -
             | 
| 372 | 
            -
             | 
| 373 | 
            -
             | 
| 374 | 
            -
             | 
| 375 | 
            -
                         | 
| 376 | 
            -
                             | 
| 377 | 
            -
             | 
| 303 | 
            +
                    if(premiumExpectedAmount.eqz()) {
         | 
| 304 | 
            +
                        return AmountLib.zero();
         | 
| 305 | 
            +
                    }
         | 
| 306 | 
            +
             | 
| 307 | 
            +
                    NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
         | 
| 308 | 
            +
                    IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
         | 
| 309 | 
            +
                    IPolicy.Premium memory premium = _pricingService.calculatePremium(
         | 
| 310 | 
            +
                        productNftId,
         | 
| 311 | 
            +
                        policyInfo.riskId,
         | 
| 312 | 
            +
                        policyInfo.sumInsuredAmount,
         | 
| 313 | 
            +
                        policyInfo.lifetime,
         | 
| 314 | 
            +
                        policyInfo.applicationData,
         | 
| 315 | 
            +
                        policyInfo.bundleNftId,
         | 
| 316 | 
            +
                        policyInfo.referralId
         | 
| 317 | 
            +
                        );
         | 
| 318 | 
            +
             | 
| 319 | 
            +
                    if (premium.premiumAmount != premiumExpectedAmount.toInt()) {
         | 
| 320 | 
            +
                        revert ErrorPolicyServicePremiumMismatch(
         | 
| 321 | 
            +
                            policyNftId, 
         | 
| 322 | 
            +
                            premiumExpectedAmount, 
         | 
| 323 | 
            +
                            AmountLib.toAmount(premium.premiumAmount));
         | 
| 324 | 
            +
                    }
         | 
| 325 | 
            +
             | 
| 326 | 
            +
                    address policyOwner = getRegistry().ownerOf(policyNftId);
         | 
| 327 | 
            +
                    ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
         | 
| 328 | 
            +
                    TokenHandler tokenHandler = productSetupInfo.tokenHandler;
         | 
| 329 | 
            +
                    if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
         | 
| 330 | 
            +
                        revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
         | 
| 331 | 
            +
                    }
         | 
| 378 332 |  | 
| 379 | 
            -
             | 
| 333 | 
            +
                    Amount productFeeAmountToTransfer = AmountLib.toAmount(premium.productFeeFixAmount + premium.productFeeVarAmount);
         | 
| 334 | 
            +
                    Amount distributionFeeAmountToTransfer = AmountLib.toAmount(premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount);
         | 
| 335 | 
            +
                    uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
         | 
| 336 | 
            +
                    uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
         | 
| 337 | 
            +
                    Amount poolAmountToTransfer = AmountLib.toAmount(premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer);
         | 
| 338 | 
            +
             | 
| 339 | 
            +
                    netPremiumAmount = AmountLib.toAmount(premium.netPremiumAmount);
         | 
| 340 | 
            +
             | 
| 341 | 
            +
                    // move product fee to product wallet
         | 
| 342 | 
            +
                    {
         | 
| 380 343 | 
             
                        address productWallet = productSetupInfo.wallet;
         | 
| 381 | 
            -
                         | 
| 382 | 
            -
             | 
| 383 | 
            -
                        }
         | 
| 384 | 
            -
                        tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
         | 
| 344 | 
            +
                        tokenHandler.transfer(policyOwner, productWallet, productFeeAmountToTransfer);
         | 
| 345 | 
            +
                    }
         | 
| 385 346 |  | 
| 386 | 
            -
             | 
| 347 | 
            +
                    // move distribution fee to distribution wallet
         | 
| 348 | 
            +
                    {
         | 
| 387 349 | 
             
                        ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
         | 
| 388 350 | 
             
                        address distributionWallet = distributionSetupInfo.wallet;
         | 
| 389 | 
            -
                        uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
         | 
| 390 351 | 
             
                        tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
         | 
| 391 352 | 
             
                        _distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
         | 
| 392 | 
            -
             | 
| 393 | 
            -
             | 
| 394 | 
            -
             | 
| 395 | 
            -
             | 
| 396 | 
            -
                         | 
| 397 | 
            -
                         | 
| 398 | 
            -
                         | 
| 353 | 
            +
                    }
         | 
| 354 | 
            +
                    
         | 
| 355 | 
            +
                    // move netpremium, bundleFee and poolFee to pool wallet
         | 
| 356 | 
            +
                    {
         | 
| 357 | 
            +
                        address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
         | 
| 358 | 
            +
                        tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
         | 
| 359 | 
            +
                        _poolService.processSale(policyInfo.bundleNftId, premium, poolAmountToTransfer);
         | 
| 360 | 
            +
                    }
         | 
| 361 | 
            +
             | 
| 362 | 
            +
                    // validate total amount transferred
         | 
| 363 | 
            +
                    {
         | 
| 364 | 
            +
                        Amount totalTransferred = distributionFeeAmountToTransfer + poolAmountToTransfer + productFeeAmountToTransfer;
         | 
| 365 | 
            +
             | 
| 366 | 
            +
                        if (premium.premiumAmount != totalTransferred.toInt()) {
         | 
| 367 | 
            +
                            revert ErrorPolicyServiceTransferredPremiumMismatch(
         | 
| 368 | 
            +
                                policyNftId, 
         | 
| 369 | 
            +
                                AmountLib.toAmount(premium.premiumAmount), 
         | 
| 370 | 
            +
                                totalTransferred);
         | 
| 371 | 
            +
                        }
         | 
| 399 372 | 
             
                    }
         | 
| 400 373 |  | 
| 401 374 | 
             
                    // TODO: add logging
         | 
| 402 375 | 
             
                }
         | 
| 403 | 
            -
            }
         | 
| 376 | 
            +
            }
         |