Dynamic Logic Functions
This section describes the dynamic logic functions that are used to create claim transactions from claims.
The examples of dynamic logic that are included are intended to give a general indication of what is required and possible. The examples are 'working code' but are not necessarily ready for 'production' use. |
Although it is possible to access the claim lines from the claim transaction object that is provided as input to several of the functions; this is not recommended for performance reasons. This is especially important with larger claims as the access of a claim line could trigger the loading of all lines. Similar considerations apply to the bills of a claim transaction object and claim lines of a bill. |
The examples in Create Claim Transaction Header, Create Bill Transaction and Create Claim Line Transaction contain an element servicedMember. The name of this element depends on the configuration of insurable entity type Person in the Insurable Entities page. |
Create Claim Transaction Header
Dynamic functions of this type create a claim transaction 'header' from a claim that is being finalized with the following details:
-
Claim
-
Claim Messages
-
Claim Diagnoses
-
Claim Status History, Claim Callout History and Pend Reason History entries
-
Claim Unfinalize Reasons
-
Policy Product
These dynamic functions are executed once per claim.
Parameters
Parameter Name | Parameter Type | Input / Output | Description |
---|---|---|---|
transactionScenario |
Input |
Transaction creation scenario that has been selected for the current transaction. Provided to allow access to parameters of the scenario. |
|
claim |
Claim |
Input |
Claim being finalized |
ctrClaim |
CTR Claim |
Input / Output |
Input: CTR Claim with only claim code, version, and transaction date prepopulated. Output: CTR Claim. |
These parameters are bound to the script before it is invoked.
The following CTR Claim fields are set outside of dynamic logic and cannot be set from the dynamic logic:
-
ctrClaim.code,
-
ctrClaim.version,
-
ctrClaim.reversalIndicator, and
-
ctrClaim.transactionDate.
The dynamic logic can transfer all desirable values from the claim and its referenced objects to the CTR claim, including:
-
the CTR claim message object to transfer each claim message
-
the CTR claim diagnosis object to transfer each claim diagnosis
-
the CTR claim state history object to transfer each state history entry and its claim callout history and pend reason history entries
-
the CTR claim unfinalize reason object to transfer each claim unfinalize reason
-
the CTR claim policy product object to transfer each policy product
In addition, this logic can set additional details specific to the claim transaction (that is, to set values that are derived as opposed to simply being transferred).
Example:
// NOTE The code, version and transactionDateTime of ctrClaim are prepopulated [ "authorizationCode", "claimDate", "dueDate", "endDate", "entryDate", "expirationDate", "externalRemarks", "internalRemarks", "nextPayerCode", "paidDate", "precedingPayerCode", "priceDate", "processType", "providerEntityReference", "providerReference", "receiptDate", "startDate", "type", "referenceCode"].each{ fieldname -> ctrClaim."$fieldname" = claim."$fieldname"} ctrClaim.emergencyIndicator = claim.emergency ? "Y" : "N" ctrClaim.ignoreHistoryIndicator = claim.ignoreHistory ? "Y" : "N" ctrClaim.manualIndicator = claim.manual ? "Y" : "N" ctrClaim.totalAllowedAmount = claim.totalAllowedAmount?.amount ctrClaim.totalAllowedAmountCurrency = claim.totalAllowedAmount?.currencyCode ctrClaim.totalClaimedAmount = claim.totalClaimedAmount?.amount ctrClaim.totalClaimedAmountCurrency = claim.totalClaimedAmount?.currencyCode ctrClaim.totalCoveredAmount = claim.totalCoveredAmount?.amount ctrClaim.totalCoveredAmountCurrency = claim.totalCoveredAmount?.currencyCode // Externalize Foreign Keys (and add referenced attributes) if (claim.brand != null){ ctrClaim.brandCode = claim.brand.code ctrClaim.brandAccessCode = claim.brand.accessRestriction?.code ctrClaim.brandDescription = claim.brand.getDescr() ctrClaim.brandPayerName = claim.brand.payer.name ctrClaim.brandPayerAccessCode = claim.brand.payer.accessRestriction?.code } else { //assume claim.payerCode != null ctrClaim.payerCode = claim.payerCode.code } ctrClaim.claimantProvCode = claim.claimantProvider?.code ctrClaim.claimantProvCodeDef = claim.claimantProvider?.flexCodeSystem?.code ctrClaim.claimantRelCode = claim.claimantRelation?.code if (claim.claimantRelation != null){ ctrClaim.claimantName = claim.claimantRelation.name } else { ctrClaim.claimantName = claim.claimantProvider?.name } if (claim.claimantRelation instanceof Person) { ctrClaim.claimantAccessCode = claim.claimantRelation?.accessRestriction?.code ctrClaim.claimantContactAccessCode = claim.claimantRelation?.accessRestrictionContactDetail?.code } ctrClaim.claimSetCode = claim.claimSet?.code ctrClaim.classificationSchemeCode = claim.classificationScheme?.code ctrClaim.classificationCode = claim.classification?.code ctrClaim.formCode = claim.claimForm.code ctrClaim.formDescription = claim.claimForm.descr ctrClaim.dataAccessGroupCode = claim.dataAccessGroup?.code ctrClaim.dataAccessGroupAccessCode = claim.dataAccessGroup?.accessRestriction?.code ctrClaim.locationProvCode = claim.locationProvider?.code ctrClaim.locationProvCodeDef = claim.locationProvider?.flexCodeSystem?.code ctrClaim.locationProvName = claim.locationProvider?.name //retrieve the address that is valid on the claim date if (claim.locationProvider instanceof IndividualProvider) { ctrClaim.locationProvAddress = claim.locationProvider.renderingAddressList.asOf().last()?.serviceAddress.getDescriptor() } else { ctrClaim.locationProvAddress = claim.locationProvider?.serviceAddressList.asOf().last()?.getDescriptor() } ctrClaim.locationTypeCode = claim.locationType?.code ctrClaim.locationTypeDescription = claim.locationType?.descr ctrClaim.payerCode = claim.payerCode?.code ctrClaim.payBeneficiaryProvCodeDef = claim.paymentBeneficiaryProvider?.flexCodeSystem?.code ctrClaim.payBeneficiaryProvCode = claim.paymentBeneficiaryProvider?.code ctrClaim.payBeneficiaryRelCode = claim.paymentBeneficiaryRelation?.code if (claim.paymentBeneficiaryRelation != null){ ctrClaim.payBeneficiaryName = claim.paymentBeneficiaryRelation.name } else { ctrClaim.payBeneficiaryName = claim.paymentBeneficiaryProvider?.name } ctrClaim.payReceiverProvCodeDef = claim.paymentReceiverProvider?.flexCodeSystem?.code ctrClaim.payReceiverProvCode = claim.paymentReceiverProvider?.code ctrClaim.payReceiverRelCode = claim.paymentReceiverRelation?.code if (claim.paymentReceiverRelation != null){ ctrClaim.payReceiverName = claim.paymentReceiverRelation.name } else { ctrClaim.payReceiverName = claim.paymentReceiverProvider?.name } ctrClaim.referralProvName = claim.referralProvider?.name ctrClaim.referralProvCode = claim.referralProvider?.code ctrClaim.referralProvCodeDef = claim.referralProvider?.flexCodeSystem?.code ctrClaim.serviceProvName = claim.serviceProvider?.name ctrClaim.serviceProvCode = claim.serviceProvider?.code ctrClaim.serviceProvCodeDef = claim.serviceProvider?.flexCodeSystem?.code ctrClaim.serviceSpecialtyCode = claim.serviceSpecialty?.code if (claim.servicedEntity?.insurableEntityType?.code == "PERSON") { ctrClaim.servicedEntityType = claim.servicedEntity?.insurableEntityType?.code ctrClaim.servicedEntityCode = claim.servicedMember?.code ctrClaim.servicedEntityName = claim.servicedMember?.name ctrClaim.servicedEntityDate = claim.servicedMember?.dateOfBirth ctrClaim.servicedEntityDateInterpretation = claim.servicedMember?.dobInterpretation ctrClaim.servicedEntityAccessCode = claim.servicedMember?.accessRestriction?.code ctrClaim.servicedEntityContactAccessCode = claim.servicedMember?.accessRestrictionContactDetail?.code } else { ctrClaim.servicedEntityType = claim.servicedEntity?.insurableEntityType?.code ctrClaim.servicedEntityCode = claim.servicedEntity?.code ctrClaim.servicedEntityName = claim.servicedEntity?.descr ctrClaim.servicedEntityDate = claim.servicedEntity?.entityDate } ctrClaim.specReceiverProvCode = claim.paymentSpecificationReceiverProvider?.code ctrClaim.specReceiverProvCodeDef = claim.paymentSpecificationReceiverProvider?.flexCodeSystem?.code ctrClaim.specReceiverRelCode = claim.paymentSpecificationReceiverRelation?.code if (claim.paymentSpecificationReceiverRelation != null){ ctrClaim.specReceiverName = claim.paymentSpecificationReceiverRelation.name } else { ctrClaim.specReceiverName = claim.paymentSpecificationReceiverProvider?.name } ctrClaim.transactionSourceCode = claim.transactionSource?.code // Transfer Messages for (claimMessage in claim?.claimMessageList) { if (claimMessage.message != null){ def ctrClaimMessage = new CtrClaimMessage() ctrClaimMessage.code = claimMessage.message.code ctrClaimMessage.externalCode = claimMessage.message.externalCode ctrClaimMessage.origin = claimMessage.origin ctrClaimMessage.severity = claimMessage.message.severity ctrClaimMessage.priority = claimMessage.message.priority ctrClaimMessage.messageText = claimMessage.getMessageText() ctrClaimMessage.providerMessageText = claimMessage.getProviderText() ctrClaimMessage.alternativeMessageText = claimMessage.getAlternativeMessageText() (0 .. 9).each{ def propName = "value"+it ctrClaimMessage."$propName" = claimMessage."$propName" } ctrClaimMessage.transactionSourceCode = claimMessage.transactionSource?.code ctrClaimMessage.referenceCode = claimMessage.referenceCode ctrClaim.addCtrClaimMessage(ctrClaimMessage) } } // Transfer Diagnoses for (claimDiagnosis in claim?.claimDiagnosisList) { if (claimDiagnosis.diagnosis != null){ def ctrClaimDiagnosis = new CtrClaimDiagnosis() ctrClaimDiagnosis.code = claimDiagnosis.diagnosis.code ctrClaimDiagnosis.codeDef = claimDiagnosis.diagnosis.flexCodeSystem.code ctrClaimDiagnosis.description = claimDiagnosis.diagnosis.getDescr() ctrClaimDiagnosis.sequence = claimDiagnosis.sequence ctrClaimDiagnosis.typeCode = claimDiagnosis.diagnosisType?.code ctrClaimDiagnosis.typeDescription = claimDiagnosis.diagnosisType?.descr ctrClaimDiagnosis.accessCode = claimDiagnosis.diagnosis.accessRestriction?.code ctrClaimDiagnosis.presentOnAdmissionCode = claimDiagnosis.presentOnAdmission?.code ctrClaimDiagnosis.presentOnAdmissionDesc = claimDiagnosis.presentOnAdmission?.description ctrClaim.addCtrClaimDiagnosis(ctrClaimDiagnosis) } } // Transfer Status History for (claimStatusHistory in claim.claimStatusHistoryList) { def ctrClaimStatusHistory = new CtrStatusHistory() ctrClaimStatusHistory.status = claimStatusHistory.status ctrClaimStatusHistory.statusDateTime = claimStatusHistory.dateTime for (claimPendReasonHistory in claimStatusHistory?.claimPendReasonHistoryList) { def ctrPendReasonHistory = new CtrPendReasonHistory() ctrPendReasonHistory.code = claimPendReasonHistory.pendReason.code ctrPendReasonHistory.externalCode = claimPendReasonHistory.pendReason.externalCode ctrPendReasonHistory.billProviderReference = claimPendReasonHistory.billProviderReference ctrPendReasonHistory.claimLineCode = claimPendReasonHistory.claimLineCode ctrPendReasonHistory.userLoginName = claimPendReasonHistory.resolvedBy?.loginName ctrPendReasonHistory.resolvedDateTime = claimPendReasonHistory.resolvedDateTime ctrPendReasonHistory.alternativeText = claimPendReasonHistory.pendReason.alternativeExternalText ctrPendReasonHistory.providerText = claimPendReasonHistory.pendReason.externalTextProvider ctrClaimStatusHistory.addCtrPendReasonHistory(ctrPendReasonHistory) } for (claimCalloutHistory in claimStatusHistory?.claimCalloutHistoryList) { if (claimCalloutHistory.displayInUi) { def ctrCalloutHistory = new CtrCalloutHistory() ctrCalloutHistory.definitionCode = claimCalloutHistory.definitionCode ctrCalloutHistory.definitionDescription = claimCalloutHistory.definitionDescr ctrCalloutHistory.requestSentDateTime = claimCalloutHistory.requestSentDateTime ctrCalloutHistory.responseReceivedDateTime = claimCalloutHistory.responseReceivedDateTime ctrClaimStatusHistory.addCtrCalloutHistory(ctrCalloutHistory) } } ctrClaim.addCtrStatusHistory(ctrClaimStatusHistory) } // Transfer Unfinalize Reasons for (claimUnfinalizeReason in claim.claimUnfinalizeReasonList) { if( claimUnfinalizeReason.unfinalizeReason != null){ def ctrClaimUnfinalizeReason = new CtrClaimUnfinalizeReason() ctrClaimUnfinalizeReason.code = claimUnfinalizeReason.unfinalizeReason.code ctrClaimUnfinalizeReason.externalCode = claimUnfinalizeReason.unfinalizeReason.externalCode ctrClaimUnfinalizeReason.sourceReference = claimUnfinalizeReason.sourceReference ctrClaim.addCtrClaimUnfinalizeReason(ctrClaimUnfinalizeReason) } }
Create Bill Transaction
Dynamic functions of this type create a claim transaction bill for a bill of claim that is being finalized with the following details:
-
Bill
-
Bill Messages
-
Bill Diagnoses
These dynamic functions are executed once per bill of a claim.
Parameters
Parameter Name | Parameter Type | Input / Output | Description |
---|---|---|---|
transactionScenario |
Input |
Transaction creation scenario that has been selected for the current transaction. Provided to allow access to parameters of the scenario. |
|
claim |
Claim |
Input |
Claim being finalized. Included only for reference purposes. |
bill |
Bill |
Input |
Bill being processed. |
ctrBill |
CTR Bill |
Input / Output |
Input: Empty CTR Bill. Output CTR Bill. |
The dynamic logic can transfer all desirable values from the bill and its referenced objects to the CTR bill, including:
-
the CTR bill message object to transfer each bill message
-
the CTR bill diagnosis object to transfer each bill diagnosis
In addition, this logic can set additional details specific to the claim transaction (that is, to set values that are derived as opposed to simply being transferred).
Example:
//available are bill, ctrBill, and claim [ "authorizationCode", "billDate", "providerEntityReference", "providerReference", "referenceCode"].each{ fieldname -> ctrBill."$fieldname" = bill."$fieldname"} ctrBill.emergencyIndicator = bill.emergency? "Y" : "N" // Externalize Foreign Keys (and add referenced attributes) ctrBill.locationProvCode = bill.locationProvider?.code ctrBill.locationProvCodeDef = bill.locationProvider?.flexCodeSystem?.code ctrBill.locationProvName = bill.locationProvider?.name ctrBill.locationTypeCode = bill.locationType?.code ctrBill.locationTypeDescription = bill.locationType?.descr ctrBill.payReceiverProvCode = bill.paymentReceiverProvider?.code ctrBill.payReceiverProvCodeDef = bill.paymentReceiverProvider?.flexCodeSystem?.code ctrBill.payReceiverRelCode = bill.paymentReceiverRelation?.code if (bill.paymentReceiverRelation != null){ ctrBill.payReceiverName = bill.paymentReceiverRelation.name } else { ctrBill.payReceiverName = bill.paymentReceiverProvider?.name } ctrBill.referralProvCode = bill.referralProvider?.code ctrBill.referralProvCodeDef = bill.referralProvider?.flexCodeSystem?.code ctrBill.referralProvName = bill.referralProvider?.name ctrBill.serviceProvCode = bill.serviceProvider?.code ctrBill.serviceProvCodeDef = bill.serviceProvider?.flexCodeSystem?.code ctrBill.serviceProvName = bill.serviceProvider?.name ctrBill.serviceSpecialtyCode = bill.serviceSpecialty?.code if (claim.servicedEntity?.insurableEntityType?.code == "PERSON") { ctrBill.servicedEntityType = bill.servicedEntity?.insurableEntityType?.code ctrBill.servicedEntityCode = bill.servicedMember?.code ctrBill.servicedEntityName = bill.servicedMember?.name ctrBill.servicedEntityDate = bill.servicedMember?.dateOfBirth ctrBill.servicedEntityDateInterpretation = bill.servicedMember?.dobInterpretation ctrBill.servicedEntityAccessCode = bill.servicedMember?.accessRestriction?.code ctrBill.servicedEntityContactAccessCode = bill.servicedMember?.accessRestrictionContactDetail?.code } else { ctrBill.servicedEntityType = bill.servicedEntity?.insurableEntityType?.code ctrBill.servicedEntityCode = bill.servicedEntity?.code ctrBill.servicedEntityName = bill.servicedEntity?.descr ctrBill.servicedEntityDate = bill.servicedEntity?.entityDate } // Transfer Diagnoses for (billDiagnosis in bill?.billDiagnosisList) { def ctrBillDiagnosis = new CtrBillDiagnosis() ctrBillDiagnosis.code = billDiagnosis.diagnosis?.code ctrBillDiagnosis.codeDef = billDiagnosis.diagnosis?.flexCodeSystem.code ctrBillDiagnosis.description = billDiagnosis.diagnosis?.getDescr() ctrBillDiagnosis.sequence = billDiagnosis.sequence ctrBillDiagnosis.typeCode = billDiagnosis.diagnosisType.code ctrBillDiagnosis.typeDescription = billDiagnosis.diagnosisType.descr ctrBillDiagnosis.accessCode = billDiagnosis.diagnosis?.accessRestriction?.code ctrBill.addCtrBillDiagnosis(ctrBillDiagnosis) } // Transfer Messages for (billMessage in bill?.billMessageList) { def ctrBillMessage = new CtrBillMessage() ctrBillMessage.code = billMessage.message != null ? billMessage.message?.code : billMessage.code ctrBillMessage.origin = billMessage.origin ctrBillMessage.messageText = billMessage.getMessageText() ctrBillMessage.providerMessageText = billMessage.getProviderText() ctrBillMessage.alternativeMessageText = billMessage.getAlternativeMessageText() ctrBillMessage.severity = billMessage.message?.severity ctrBillMessage.priority = billMessage.message?.priority ctrBillMessage.externalCode = billMessage.message?.externalCode (0 .. 9).each{ def propName = "value"+it ctrBillMessage."$propName" = billMessage."$propName" } ctrBill.addCtrBillMessage(ctrBillMessage) }
Create Claim Line Transaction
Dynamic functions of this type create a claim transaction claim line for a line of a claim that is being finalized with the following details:
-
Claim Line
-
Claim Line Messages
-
Claim Line Diagnoses
-
Modifiers
-
Coverages
-
Claim Sub Lines
These dynamic functions are executed once per claim line of a claim.
Parameters
Parameter | Parameter Type | Input / Output | Description |
---|---|---|---|
transactionScenario |
Input |
Transaction creation scenario that has been selected for the current transaction. Provided to allow access to parameters of the scenario. |
|
claim |
Claim |
Input |
Claim being finalized. Included only for reference purposes. |
claimLine |
ClaimLine |
Input |
Claim line being processed. |
ctrClaimLine |
CTR ClaimLine |
Input / Output |
Input: Empty CTR Claim Line with code prepopulated. Output CTR Claim Line. |
ctrClaimLine.code is set outside of the dynamic logic and cannot be set in the dynamic logic.
The dynamic logic can transfer all desirable values from the claim line and its referenced objects to the CTR claim line, including:
-
the CTR claim line message object to transfer each claim line message
-
the CTR claim line diagnosis object to transfer each claim line diagnosis
-
the CTR claim line modifiers object to transfer each claim line modifier
-
the CTR claim line coverage object to transfer each claim line coverage
-
the CTR claim sub line object to transfer each claim line sub lines
-
the CTR claim line contract reference to transfer each claim line contract reference
-
the CTR claim line benefit specification object to transfer each claim line benefit specification
-
the CTR claim line provider pricing clauses object to transfer each claim line provider pricing clause
-
the CTR claim line applied parameter object to transfer each claim line applied parameter
In addition, this logic can set additional details specific to the claim transaction (that is, to set values that are derived as opposed to simply being transferred).
Example:
// Transfer fixed fields // NOTE The code of ctrClaimLine is prepopulated [ "allowedNumberOfUnits", "authorizationCode", "authorizationExceptionType", "benefitsAgeInputDate", "benefitsAgeInputDate", "claimedNumberOfUnits", "coveredNumberOfUnits", "endDate", "priceInputDate", "priceInputNumberOfUnits", "providerEntityReference", "providerReference", "referenceCode", "sequence", "startDate", "status", "waitingPeriodInputDate"].each{ fieldname -> ctrClaimLine."$fieldname" = claimLine."$fieldname"} ctrClaimLine.allowedAmount = claimLine.allowedAmount?.amount ctrClaimLine.allowedAmountCurrency = claimLine.allowedAmount?.currencyCode ctrClaimLine.benefitsInputAmount = claimLine.benefitsInputAmount?.amount ctrClaimLine.benefitsInputAmountCurrency = claimLine.benefitsInputAmount?.currencyCode ctrClaimLine.claimedAmount = claimLine.claimedAmount?.amount ctrClaimLine.claimedAmountCurrency = claimLine.claimedAmount?.currencyCode ctrClaimLine.coveredAmount = claimLine.coveredAmount?.amount ctrClaimLine.coveredAmountCurrency = claimLine.coveredAmount?.currencyCode ctrClaimLine.encounterIndicator = claimLine.encounter ? "Y" : "N" ctrClaimLine.emergencyIndicator = claimLine.emergency ? "Y" : "N" ctrClaimLine.precedingPayerPaidAmount = claimLine.precedingPayerPaidAmount?.amount ctrClaimLine.precedingPayerPaidAmountCurrency = claimLine.precedingPayerPaidAmount?.currencyCode ctrClaimLine.processAsIn = claimLine.processAsIn ? "Y" : "N" ctrClaimLine.replacedIndicator = claimLine.replaced ? "Y" : "N" ctrClaimLine.subscriptionDate= claimLine.claimLineOverride?.subscriptionDate ctrClaimLine.familyCode = claimLine.claimLineOverride?.familyCode // Externalize Foreign Keys (and add referenced attributes) ctrClaimLine.authorizationRegimeCode = claimLine.claimLineOverride?.authorizationRegime?.code ctrClaimLine.benefitsProvCodeDef = claimLine.benefitsProvider?.flexCodeSystem?.code ctrClaimLine.benefitsProvCode = claimLine.benefitsProvider?.code ctrClaimLine.benefitsProvName = claimLine.benefitsProvider?.name ctrClaimLine.claimDate = claimLine.claim.claimDate ctrClaimLine.classificationCode = claimLine.classification?.code ctrClaimLine.classificationAuthorizationCode = claimLine.authorization?.code ctrClaimLine.coverageRegimeCode = claimLine.claimLineOverride?.coverageRegime?.code ctrClaimLine.coverageRegimeNoAuthCode = claimLine.claimLineOverride?.coverageRegimeNoAuth?.code ctrClaimLine.coverageSpecificationCode = claimLine.claimLineOverride?.coverageSpecification?.code ctrClaimLine.fundingArrangementCode = claimLine.claimLineOverride?.fundingArrangement?.code ctrClaimLine.locationProvCode = claimLine.locationProvider?.code ctrClaimLine.locationProvCodeDef = claimLine.locationProvider?.flexCodeSystem?.code ctrClaimLine.locationProvName = claimLine.locationProvider?.name ctrClaimLine.locationTypeCode = claimLine.locationType?.code ctrClaimLine.locationTypeDescription = claimLine.locationType?.descr ctrClaimLine.payReceiverProvCode = claimLine.paymentReceiverProvider?.code ctrClaimLine.payReceiverProvCodeDef = claimLine.paymentReceiverProvider?.flexCodeSystem?.code ctrClaimLine.payReceiverRelCode = claimLine.paymentReceiverRelation?.code if (claimLine.paymentReceiverRelation != null){ ctrClaimLine.payReceiverName = claimLine.paymentReceiverRelation.name } else { ctrClaimLine.payReceiverName = claimLine.paymentReceiverProvider?.name } ctrClaimLine.postBenefitsRegimeCode = claimLine.claimLineOverride?.postBenefitsRegime?.code ctrClaimLine.priceIndProvCode = claimLine.priceIndividualProvider?.code ctrClaimLine.priceIndProvCodeDef = claimLine.priceIndividualProvider?.flexCodeSystem?.code ctrClaimLine.priceIndProvName = claimLine.priceIndividualProvider?.name ctrClaimLine.priceOrgProvCode = claimLine.priceOrganizationProvider?.code ctrClaimLine.priceOrgProvCodeDef = claimLine.priceOrganizationProvider?.flexCodeSystem?.code ctrClaimLine.priceOrgProvName = claimLine.priceOrganizationProvider?.name ctrClaimLine.pricePrincipalProc1Ind = claimLine.pricePrincipalProcedure1 ? "Y" : "N" ctrClaimLine.pricePrincipalProc2Ind = claimLine.pricePrincipalProcedure2 ? "Y" : "N" ctrClaimLine.pricePrincipalProc3Ind = claimLine.pricePrincipalProcedure3 ? "Y" : "N" ctrClaimLine.procedureAccessCode = claimLine.procedure?.accessRestriction?.code ctrClaimLine.procedureCode = claimLine.procedure?.code ctrClaimLine.procedureCodeDef = claimLine.procedure?.flexCodeSystem?.code ctrClaimLine.procedureDescription = claimLine.procedure?.getDescr() ctrClaimLine.procedure2AccessCode = claimLine.procedure2?.accessRestriction?.code ctrClaimLine.procedure2Code = claimLine.procedure2?.code ctrClaimLine.procedure2CodeDef = claimLine.procedure2?.flexCodeSystem?.code ctrClaimLine.procedure2Description = claimLine.procedure2?.getDescr() ctrClaimLine.procedure3AccessCode = claimLine.procedure3?.accessRestriction?.code ctrClaimLine.procedure3Code = claimLine.procedure3?.code ctrClaimLine.procedure3CodeDef = claimLine.procedure3?.flexCodeSystem?.code ctrClaimLine.procedure3Description = claimLine.procedure3?.getDescr() ctrClaimLine.productCode = claimLine.claimLineOverride?.product?.code ctrClaimLine.productFamilyCode = claimLine.claimLineOverride?.productFamily?.code ctrClaimLine.productLineCode = claimLine.claimLineOverride?.productLine?.code ctrClaimLine.referralProvCode = claimLine.referralProvider?.code ctrClaimLine.referralProvCodeDef = claimLine.referralProvider?.flexCodeSystem?.code ctrClaimLine.referralProvName = claimLine.referralProvider?.name ctrClaimLine.replacedByCode = claimLine.replacementClaimLine?.code ctrClaimLine.replacesCode = claimLine.originalClaimLine?.code ctrClaimLine.reservationCode = claimLine.reservationLine?.claim?.code ctrClaimLine.reservationLineCode = claimLine.reservationLine?.code ctrClaimLine.serviceProvCode = claimLine.serviceProvider?.code ctrClaimLine.serviceProvCodeDef = claimLine.serviceProvider?.flexCodeSystem?.code ctrClaimLine.serviceProvName = claimLine.serviceProvider?.name ctrClaimLine.serviceSpecialtyCode = claimLine.serviceSpecialty?.code if (claim.servicedEntity?.insurableEntityType?.code == "PERSON") { ctrClaimLine.servicedEntityType = claimLine.servicedEntity?.insurableEntityType?.code ctrClaimLine.servicedEntityCode = claimLine.servicedMember?.code ctrClaimLine.servicedEntityName = claimLine.servicedMember?.name ctrClaimLine.servicedEntityDate = claimLine.servicedMember?.dateOfBirth ctrClaimLine.servicedEntityDateInterpretation = claimLine.servicedMember?.dobInterpretation ctrClaimLine.servicedEntityAccessCode = claimLine.servicedMember?.accessRestriction?.code ctrClaimLine.servicedEntityContactAccessCode = claimLine.servicedMember?.accessRestrictionContactDetail?.code } else { ctrClaimLine.servicedEntityType = claimLine.servicedEntity?.insurableEntityType?.code ctrClaimLine.servicedEntityCode = claimLine.servicedEntity?.code ctrClaimLine.servicedEntityName = claimLine.servicedEntity?.descr ctrClaimLine.servicedEntityDate = claimLine.servicedEntity?.entityDate } ctrClaimLine.transactionSourceCode = claimLine.transactionSource?.code ctrClaimLine.waitingPeriodRegimeCode = claimLine.claimLineOverride?.waitingPeriodRegime?.code // Transfer Messages for (claimLineMessage in claimLine.claimLineMessageList) { if (claimLineMessage.message != null){ def ctrClaimLineMessage = new CtrClaimLineMessage() ctrClaimLineMessage.code = claimLineMessage.message.code ctrClaimLineMessage.origin = claimLineMessage.origin ctrClaimLineMessage.messageText = claimLineMessage.getMessageText() ctrClaimLineMessage.providerMessageText = claimLineMessage.getProviderText() ctrClaimLineMessage.alternativeMessageText = claimLineMessage.getAlternativeMessageText() ctrClaimLineMessage.severity = claimLineMessage.message.severity ctrClaimLineMessage.priority = claimLineMessage.message.priority ctrClaimLineMessage.externalCode = claimLineMessage.message.externalCode ctrClaimLineMessage.productCode = claimLineMessage.product?.code (0..9).each{ def propName = "value"+it ctrClaimLineMessage."$propName" = claimLineMessage."$propName" } ctrClaimLineMessage.transactionSourceCode = claimLineMessage.transactionSource?.code ctrClaimLineMessage.referenceCode = claimLineMessage.referenceCode ctrClaimLine.addCtrClaimLineMessage(ctrClaimLineMessage) } } // Transfer Claim Line Diagnosis for (claimLineDiagnosis in claimLine.claimLineDiagnosisList) { if (claimLineDiagnosis.diagnosis != null){ def ctrClaimLineDiagnosis = new CtrClaimLineDiagnosis() ctrClaimLineDiagnosis.code = claimLineDiagnosis.diagnosis.code ctrClaimLineDiagnosis.codeDef = claimLineDiagnosis.diagnosis.flexCodeSystem.code ctrClaimLineDiagnosis.description = claimLineDiagnosis.diagnosis.getDescr() ctrClaimLineDiagnosis.sequence = claimLineDiagnosis.sequence ctrClaimLineDiagnosis.typeCode = claimLineDiagnosis.diagnosisType.code ctrClaimLineDiagnosis.typeDescription = claimLineDiagnosis.diagnosisType.descr ctrClaimLineDiagnosis.accessCode = claimLineDiagnosis.diagnosis.accessRestriction?.code ctrClaimLine.addCtrClaimLineDiagnosis(ctrClaimLineDiagnosis) } } // Transfer Claim Line Modifier for (claimLineModifier in claimLine.claimLineModifierList) { if(claimLineModifier.modifier != null){ def ctrClaimLineModifier = new CtrClaimLineModifier() ctrClaimLineModifier.code = claimLineModifier.modifier.code ctrClaimLineModifier.description = claimLineModifier.modifier.getDescr() ctrClaimLine.addCtrClaimLineModifier(ctrClaimLineModifier) } } // Transfer Claim Line Contract Reference for (claimLineContractReference in claimLine.claimLineContractReferenceList) { if(claimLineContractReference.contractReference != null){ def ctrClaimLineContractReference = new CtrClaimLineContractReference() ctrClaimLineContractReference.code = claimLineContractReference.contractReference.code ctrClaimLineContractReference.description = claimLineContractReference.contractReference.descr ctrClaimLine.addCtrClaimLineContractReference(ctrClaimLineContractReference) } } // Transfer Claim SubLine for (claimSubLine in claimLine.claimSubLineList) { def ctrClaimSubLine = new CtrClaimSubLine() ctrClaimSubLine.sequence = claimSubLine.sequence ctrClaimSubLine.claimedNumberOfUnits = claimSubLine.claimedNumberOfUnits ctrClaimSubLine.procedureCode = claimSubLine.procedure?.code ctrClaimSubLine.procedureCodeDef = claimSubLine.procedure?.flexCodeSystem?.code ctrClaimSubLine.procedureAccessCode = claimSubLine.procedure?.accessRestriction?.code ctrClaimLine.addCtrClaimSubLine(ctrClaimSubLine) } // Transfer Claim Line Coverages // NOTE the ctrClaimLineCoverages are used in the logic for creating the financial details for (claimLineCoverage in claimLine.claimLineCoverageList) { def ctrClaimLineCoverage = new CtrClaimLineCoverage() ctrClaimLineCoverage.action = claimLineCoverage.action ctrClaimLineCoverage.amount = claimLineCoverage.amount.amount ctrClaimLineCoverage.amountCurrency = claimLineCoverage.amount.currencyCode ctrClaimLineCoverage.numberOfUnits = claimLineCoverage.numberOfUnits ctrClaimLineCoverage.productCode = claimLineCoverage.product.code ctrClaimLineCoverage.productDescription = claimLineCoverage.product.getDescr() ctrClaimLineCoverage.productBrandCode = claimLineCoverage.product.brand.getCode() ctrClaimLineCoverage.productBrandDescription = claimLineCoverage.product.brand.getDescr() ctrClaimLineCoverage.productFamilyCode = claimLineCoverage.product?.productFamily?.code ctrClaimLineCoverage.coverageLabelCode = claimLineCoverage.coverageLabel.code ctrClaimLineCoverage.displayName = claimLineCoverage.displayName ctrClaimLineCoverage.coverageLabelDisplaySequence = claimLineCoverage.coverageLabel.displaySequence ctrClaimLine.addCtrClaimLineCoverage(ctrClaimLineCoverage) } // Transfer Claim Line Benefit Specification for (claimLineBenefitSpecification in claimLine.claimLineBenefitSpecificationList) { if(claimLineBenefitSpecification.benefitSpecification != null){ def ctrClaimLineBenefitSpecification = new CtrClaimLineBenefitSpecification() ctrClaimLineBenefitSpecification.benefitSpecificationCode = claimLineBenefitSpecification.benefitSpecification.code ctrClaimLineBenefitSpecification.benefitSpecificationSubtype = claimLineBenefitSpecification.benefitSpecification.subtype ctrClaimLineBenefitSpecification.productCode = claimLineBenefitSpecification.product.code ctrClaimLineBenefitSpecification.productProviderGroupStatus = claimLineBenefitSpecification.productProviderGroupStatus ctrClaimLineBenefitSpecification.productProviderGroupCode = claimLineBenefitSpecification.productProviderGroup?.code ctrClaimLineBenefitSpecification.specificProviderGroupStatus = claimLineBenefitSpecification.specificProviderGroupStatus ctrClaimLineBenefitSpecification.specificProviderGroupCode = claimLineBenefitSpecification.specificProviderGroup?.code ctrClaimLineBenefitSpecification.inheritedProviderGroupStatus = claimLineBenefitSpecification.inheritedProviderGroupStatus ctrClaimLineBenefitSpecification.processedAsIn = claimLineBenefitSpecification.processedAsIn? "Y" : "N" if (claimLineBenefitSpecification.coverageRegime != null) { ctrClaimLineBenefitSpecification.regimeCode = claimLineBenefitSpecification.coverageRegime.code } else if (claimLineBenefitSpecification.authorizationRegime != null) { ctrClaimLineBenefitSpecification.regimeCode = claimLineBenefitSpecification.authorizationRegime.code } else if (claimLineBenefitSpecification.waitingPeriodRegime != null) { ctrClaimLineBenefitSpecification.regimeCode = claimLineBenefitSpecification.waitingPeriodRegime.code } else if (claimLineBenefitSpecification.postBenefitsRegime != null) { ctrClaimLineBenefitSpecification.regimeCode = claimLineBenefitSpecification.postBenefitsRegime.code } ctrClaimLine.addCtrClaimLineBenefitSpecification(ctrClaimLineBenefitSpecification) } } // Transfer Claim Line Provider Pricing Clauses for (claimLineProviderPricingClause in claimLine.claimLineProviderPricingClauseList) { def ctrClaimLineProviderPricingClause = new CtrClaimLineProviderPricingClause() ctrClaimLineProviderPricingClause.sequence = claimLineProviderPricingClause.sequence ctrClaimLineProviderPricingClause.amount = claimLineProviderPricingClause.amount?.amount ctrClaimLineProviderPricingClause.amountCurrency = claimLineProviderPricingClause.amount?.currencyCode ctrClaimLineProviderPricingClause.mark = claimLineProviderPricingClause.mark ctrClaimLineProviderPricingClause.providerPricingClauseDescr = claimLineProviderPricingClause.providerPricingClause.getDescr() // Store the type and code of the reimbursement method or pricing rule if (claimLineProviderPricingClause.providerPricingClause.reimbursementMethod != null) { ctrClaimLineProviderPricingClause.methodRuleType = claimLineProviderPricingClause.providerPricingClause.reimbursementMethod.getSubtypeBoilerplate() ctrClaimLineProviderPricingClause.methodRuleCode = claimLineProviderPricingClause.providerPricingClause.reimbursementMethod.code } else { ctrClaimLineProviderPricingClause.methodRuleType = claimLineProviderPricingClause.providerPricingClause.pricingRule.getSubtypeBoilerplate() ctrClaimLineProviderPricingClause.methodRuleCode = claimLineProviderPricingClause.providerPricingClause.pricingRule.code } // Store the quantifier, which can be sourced from either one of a number of PPC attributes if (claimLineProviderPricingClause.providerPricingClause.percentage != null) { ctrClaimLineProviderPricingClause.quantifier = claimLineProviderPricingClause.providerPricingClause.percentage } else if (claimLineProviderPricingClause.providerPricingClause.maximumNumber != null) { ctrClaimLineProviderPricingClause.quantifier = claimLineProviderPricingClause.providerPricingClause.maximumNumber } else if (claimLineProviderPricingClause.providerPricingClause.maximumServiceDays != null) { ctrClaimLineProviderPricingClause.quantifier = claimLineProviderPricingClause.providerPricingClause.maximumServiceDays } else if (claimLineProviderPricingClause.providerPricingClause.amount != null) { ctrClaimLineProviderPricingClause.quantifier = claimLineProviderPricingClause.providerPricingClause.amount } ctrClaimLine.addCtrClaimLineProviderPricingClause(ctrClaimLineProviderPricingClause) } // Transfer Claim Line Applied Parameter for(claimLineAppliedParameter in claimLine.claimLineAppliedParameterList) { def ctrClaimLineAppliedParameter = new CtrClaimLineAppliedParameter() ctrClaimLineAppliedParameter.amountPerUnit = claimLineAppliedParameter.amountPerUnit?.amount ctrClaimLineAppliedParameter.amountPerUnitCurrency = claimLineAppliedParameter.amountPerUnit?.currency?.code ctrClaimLineAppliedParameter.percentage = claimLineAppliedParameter.percentage ctrClaimLineAppliedParameter.benefitSpecificationCode = claimLineAppliedParameter.benefitSpecification?.code ctrClaimLineAppliedParameter.coverWithholdCategoryCode = claimLineAppliedParameter.coverWithholdCategory?.code ctrClaimLineAppliedParameter.aliasCode = claimLineAppliedParameter.aliasCode ctrClaimLineAppliedParameter.limitCode = claimLineAppliedParameter.limit?.code ctrClaimLineAppliedParameter.productCode = claimLineAppliedParameter.product?.code ctrClaimLineAppliedParameter.maximumAmount = claimLineAppliedParameter.maximumAmount?.amount ctrClaimLineAppliedParameter.maximumAmountCurrency = claimLineAppliedParameter.maximumAmount?.currency?.code ctrClaimLineAppliedParameter.maximumNumber = claimLineAppliedParameter.maximumNumber ctrClaimLineAppliedParameter.maximumServiceDays = claimLineAppliedParameter.maximumServiceDays ctrClaimLineAppliedParameter.reachedAction = claimLineAppliedParameter.reachedAction ctrClaimLine.addCtrClaimLineAppliedParameter(ctrClaimLineAppliedParameter) }
Create Financial Transaction
Dynamic functions of this type assign values to the financial transaction and the related financial transaction process data which are created when the claim is finalized. When a claim is finalized, a skeleton financial transaction is automatically created. The skeleton financial transaction holds the fixed attributes that are required for the next processing steps. These dynamic logic functions need to assign values to the financial transaction and its process data dependent on the customer requirements.
These dynamic functions are executed once per claim.
Parameters
Parameter | Parameter Type | Input / Output | Description |
---|---|---|---|
transactionScenario |
Input |
Transaction creation scenario that has been selected for the current transaction. Provided to allow access to parameters of the scenario. |
|
claim |
Claim |
Input |
Claim being finalized. Included for reference purposes and the ability to add a financial hold to the claim. |
ctrClaim |
ctr Claim |
Input |
|
financialTransaction |
Financial Transaction |
Input /Output |
Input: Skeleton financial transaction created when the claim is being finalized consisting of:
Output: financial transaction with all relevant attributes populated for the claim that is being finalized. |
The following Financial Transaction fields are set outside of dynamic logic and cannot be set from the dynamic logic:
-
financialTransaction.version,
-
financialTransaction.reversal,
-
financialTransaction.subtype
-
financialTransaction.indicatorFinal
-
financialTransaction.processingType
-
financialTransaction.sourceString.
The dynamic logic can:
-
set attributes of the new Financial Transaction and corresponding Financial Transaction Process Data elements of the object.
-
add Financial Transaction Process Detail element and set their attributes
-
add claim holds using the predefined method addClaimHold
Example
// Financial Transaction Process Data // Fixed Fields, for which local Dynamic Logic should be defined: // financialTransaction.financialTransactionProcessData.dueDate = // financialTransaction.financialTransactionProcessData.financialMessageMandatory = // financialTransaction.financialTransactionProcessData.finMessageBulkingGroup = // financialTransaction.financialTransactionProcessData.internalRemarks = // financialTransaction.financialTransactionProcessData.penaltyDate = // Add Financial Hold to the claim (optional) // claim.addClaimHold("HOLD_TYPE","EXPIRATION_DATE")
Create Financial Transaction Detail
Dynamic functions of this type create financial transaction details and the related financial transaction detail process data for claim line transaction coverage. Financial transaction details are not part of the skeleton financial transaction because there might be situations where no financial transaction detail is required for a claim line transaction coverage.
These dynamic functions are executed once per claim line transaction coverage.
Parameters
Parameter | Parameter Type | Input / Output | Description |
---|---|---|---|
transactionScenario |
Input |
Transaction creation scenario that has been selected for the current transaction. Provided to allow access to parameters of the scenario. |
|
claim |
Claim |
Input |
Claim being finalized. Included only for reference purposes. |
claimLine |
Claim Line |
Input |
Claim Line being processed. |
ctrClaim |
CTR Claim |
Input |
CTR Claim being processed. |
ctrClaimLine |
CTR Claim Line |
Input |
CTR Claim Line to which the CTR Coverage belongs. |
ctrClaimLineCoverage |
CTR Claim Line Coverage |
Input |
The CTR Coverage from which the values are read and passed to the financial transaction detail(s) and financial transaction detail process data. |
financialTransaction |
Financial Transaction |
Input/Output |
Input:Financial transaction constructed so far. Output: Financial transaction with updated attribute(s) and/or new financial transaction detail(s). |
The following Financial Transaction Detail field is set outside of dynamic logic and cannot be set from within the dynamic logic:
-
financialTransactionDetail.sequenceNumber.
The dynamic logic can:
-
create 0 or more default Financial Transaction Details. A default Financial Transaction Detail consists of
-
a Financial Transaction Detail with reference to the Financial Transaction
-
a Financial Transaction Detail Process Data with reference to the Financial Transaction Detail
-
-
set attributes of new Financial Transaction Detail and corresponding Financial Transaction Process Data elements
-
set Financial Transaction (and its corresponding process data) attributes
-
set Financial Transaction Process Detail attributes
-
adjust the total amount of the financial transaction when a financial transaction detail is created
The dynamic logic for creating financial transaction details is likely to be more complex than creating one financial transaction detail for each coverage. For example, logic may need to be added to break (some) coverages into multiple financial transaction details to handle allocations of a single covered amount to more than one payment receiver or to meet other specific accounting requirements.
Example
// Create Financial Transaction Details def financialTransactionDetail = new FinancialTransactionDetail() financialTransactionDetail.setDefaultValues(); financialTransactionDetail.amount = ctrClaimLineCoverage.amount financialTransactionDetail.amountCurrency = ctrClaimLineCoverage.amountCurrency financialTransactionDetail.componentCode = ctrClaimLineCoverage.coverageLabelCode financialTransactionDetail.componentDisplaySequence = ctrClaimLineCoverage.coverageLabelDisplaySequence financialTransactionDetail.numberOfUnits = ctrClaimLineCoverage.numberOfUnits financialTransactionDetail.productBrandCode = ctrClaimLineCoverage.productBrandCode financialTransactionDetail.productCode = ctrClaimLineCoverage.productCode financialTransactionDetail.productFamilyCode = ctrClaimLineCoverage.productFamilyCode // Financial Transaction Process Data def financialTransactionDetailProcessData = new FinancialTransactionDetailProcessData() financialTransactionDetailProcessData.setDefaultValues() financialTransactionDetailProcessData.paymentBeneficiaryCode = ctrClaim.payBeneficiaryProvCode != null ? ctrClaim.payBeneficiaryProvCode : ctrClaim.payBeneficiaryRelCode financialTransactionDetailProcessData.paymentBeneficiaryFlexCodeDefinitionCode = ctrClaim.payBeneficiaryProvCodeDef financialTransactionDetailProcessData.counterpartyCode = ctrClaimLine.payReceiverProvCode != null ? ctrClaimLine.payReceiverProvCode : ctrClaimLine.payReceiverRelCode financialTransactionDetailProcessData.counterpartyQualifier = ctrClaimLine.payReceiverProvCodeDef // Fixed Fields, for which local Dynamic Logic should be defined: // financialTransactionDetailProcessData.invoice = // financialTransactionDetailProcessData.accountingBulkingGroup = // financialTransactionDetailProcessData.accountDetailGrouping = // financialTransactionDetailProcessData.accountingBulkingGroup = // financialTransactionDetailProcessData.generalLedgerAccount = // financialTransactionDetailProcessData.internalRemarks = // financialTransactionDetailProcessData.invoiceBulkingGroup = // financialTransactionDetailProcessData.invoiceLineBulkingGroup = // financialTransactionDetailProcessData.invoiceLineGrouping = // financialTransactionDetailProcessData.payFromBankAccount = financialTransaction.addFinancialTransactionDetail(financialTransactionDetail); financialTransactionDetail.setFinancialTransactionDetailProcessData(financialTransactionDetailProcessData); financialTransactionDetailProcessData.setFinancialTransactionDetail(financialTransactionDetail); // Update Financial Transaction Total Amount financialTransaction.totalAmount = financialTransaction.totalAmount + financialTransactionDetail.amount // Update Financial Transaction Total Amount Currency in case this was the first detail in the financial transaction financialTransaction.totalAmountCurrency = financialTransactionDetail.amountCurrency
Change Financial Transaction
Dynamic functions of this type can add financial transaction details to a financial transaction and modify financial transaction and financial transaction process data attributes. This logic is intended for use to create financial transaction details that do not relate to specific claim line transaction coverages such as ASO fees to be charged per claim.
This function can also be used to modify reinsurance financial transaction details that were automatically created by the application.
These dynamic functions are executed once per claim.
Parameters
Parameter | Parameter Type | Input / Output | Description |
---|---|---|---|
transactionScenario |
Input |
Transaction creation scenario that has been selected for the current transaction. Provided to allow access to parameters of the scenario. |
|
claim |
Claim |
Input |
Claim being finalized. Included for reference purposes and the ability to add a financial hold to the claim. |
ctrClaim |
CTR Claim |
Input |
|
reinsuranceMap |
Map |
Input |
map between the reinsurance financial details and the claim line coverage from which they were generated. This allows customers to enrich reinsurance details with information that is available on the working copy claim |
financialTransaction |
Financial Transaction |
Input /Output |
Input:Financial transaction constructed in the create financial transaction dynamic logic function. Output: Financial tra nsaction with updated attributes. |
The dynamic logic can:
-
create 0 or more Financial Transaction Details
-
set attributes of new Financial Transaction Detail and corresponding Financial Transaction Process Data elements
-
set Financial Transaction (and its corresponding process data) attributes
-
set Financial Transaction Process Detail attributes
-
adjust the total amount of the financial transaction in case additional financial transaction details are added
-
add claim holds using the predefined method addClaimHold
The dynamic logic for modifying financial transactions and adding financial transaction details depends heavily on the required scenario and is likely to be more complex than creating one financial transaction detail for each coverage. For example, logic may need to be added to create an additional financial transaction detail for handling of ASO fees where the amount and payment receiver are determined by look-up on person’s group accounts.
Example
// Create Financial Transaction Detail FinancialTransactionDetail financialTransactionDetail = new FinancialTransactionDetail() financialTransactionDetail.setDefaultValues() financialTransactionDetail.componentCode = "ADMIN SERVICES FEE" financialTransactionDetail.amount = -10 financialTransactionDetail.amountCurrency = "USD" // Or, if this should be a percentage, instead of a fixed value: // financialTransactionDetail.amount = .05 * ctrClaim.totalCoveredAmount // financialTransactionDetail.amountCurrency = ctrClaim.totalCoveredAmountCurrency // Create Financial Transaction Process Detail Data FinancialTransactionDetailProcessData financialTransactionDetailProcessData = new FinancialTransactionDetailProcessData() financialTransactionDetailProcessData.setDefaultValues() // Populating various fields: // financialTransactionDetailProcessData.paymentBeneficiaryCode = // financialTransactionDetailProcessData.paymentBeneficiaryFlexCodeDefinitionCode = // financialTransactionDetailProcessData.counterpartyCode = // financialTransactionDetailProcessData.counterpartyQualifier = // financialTransactionDetailProcessData.invoice = // financialTransactionDetailProcessData.accountingBulkingGroup = // financialTransactionDetailProcessData.invoiceDestination = InvoiceDestination.Receivable // financialTransactionDetailProcessData.invoiceDestination = InvoiceDestination.Payable // financialTransactionDetailProcessData.accountDetailGrouping = // financialTransactionDetailProcessData.generalLedgerAccount = // financialTransactionDetailProcessData.internalRemarks = // financialTransactionDetailProcessData.invoiceBulkingGroup = // financialTransactionDetailProcessData.invoiceLineBulkingGroup = // financialTransactionDetailProcessData.invoiceLineGrouping = // financialTransactionDetailProcessData.payFromBankAccount = // Link the Financial Transaction Detail to the Financial Transaction Detail Process Data, and vice versa financialTransactionDetail.setFinancialTransactionDetailProcessData(financialTransactionDetailProcessData) financialTransactionDetailProcessData.setFinancialTransactionDetail(financialTransactionDetail) // Add the Financial Transaction Detail to the Financial Transaction financialTransaction.addFinancialTransactionDetail(financialTransactionDetail); // Update the total amount of the Financial Transaction financialTransaction.totalAmount = financialTransaction.totalAmount + financialTransactionDetail.amount // Set the total amount currency of the Financial Transaction, in case this was its first Financial Transaction Detail financialTransaction.totalAmountCurrency = financialTransactionDetail.amountCurrency // Enrich each of the reinsurance Financial Transaction Details with information that is available on the working copy claim reinsuranceMap.each { financialTransactionDetail, claimLineCoverage -> financialTransactionDetail.exampleField1 = claimLineCoverage.exampleValue1 financialTransactionDetail.exampleField2 = claimLineCoverage.claimLine.claim.exampleValue2 }