Predefined Methods
This section describes the predefined methods available per object. There are two categories of predefined methods: generic methods available on all or many objects and specific methods only available on particular objects.
Generic Methods
This section describes generic methods available on all objects. A number of these methods return time valid information. As a consequence, most methods take an as-of date as one of the input parameters. The as-of date parameter is always optional. If left unspecified, the method defaults to the as-of date specified by the signature.
asOf
The asOf method can be used to filter the elements of a list based on time-validity. It returns a list of the elements that are valid on a given date. However, for single-value dynamic fields, only one element can be valid at any given time, so this method will return that element (instead of a list containing the element). The latter only applies to dynamic fields, not to dynamic records.
Availability
This method is available on all lists containing time-valid elements. This includes lists of detail entities, lists of dynamic fields, and lists of dynamic records.
Parameters
In / Out | Type | Description |
---|---|---|
In |
java.sql.Date |
The date on which the elements in the list should be valid. Optional: if not specified, the default date that is associated with the dynamic logic signature will be used. |
Out |
|
|
Example, detail entities
Assume a certain person has the below addresses.
Type | City | startDate | endDate |
---|---|---|---|
Site |
New York |
2000-01-01 |
|
Mailing |
New York |
2000-01-01 |
2000-12-31 |
Mailing |
Washington |
2001-01-01 |
def date = java.sql.Date.valueOf('2001-04-21') assert person.addressList.size() == 3 assert person.addressList.asOf(date).size() == 2 assert person.addressList.asOf(date).find({address -> address.addressType.code == 'M'}).city == 'Washington'
Example, dynamic records
assert claimLine.occupations.asOf().size() == 1 assert claimLine.occupations.asOf()[0].code == 'FIRE' assert claimLine.occupations.asOf()[0].risk == 'H'
Example, dynamic fields (multi-value)
assert claimLine.occupations.asOf().size() == 1 assert claimLine.occupations.asOf()[0] == 'Fireman'
Example, dynamic fields (single-value)
assert claimLine.occupations.asOf() == 'Fireman'
lookUpFlexCode
Returns the flex code object that matches the input character string.
Availability
This method can be called without a base object.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Key value of the flexCode |
In |
String |
Definition code of the flexCode |
Out |
flexCode |
Flex Code |
Example
claimLine.dynamicFieldYesNoIndicator = lookUpFlexCode('YES', 'YES_NO')
lookUpDiagnosis
Returns the diagnosis object that matches the input character string
Availability
This method is available in the dynamic logic (groovy script)
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the diagnosis |
In |
String |
Definition code of the diagnosis |
Out |
diagnosis |
Diagnosis |
lookUpPerson
Looks up the person in the system based on the input parameters passed.
Availability
This method is available in the dynamic logic (groovy script)
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the person |
Out |
Person |
Person |
lookUpInsurableEntity
Looks up the insurable entity in the system based on the input parameters passed.
Availability
This method is available in the dynamic logic (groovy script)
Parameters
In / Out | <blockquote> Type </blockquote> | <blockquote> Description </blockquote> |
---|---|---|
In |
String |
Code of the insurable entity |
In |
String |
Usage name of the insurable entity type of the insurable entity |
Out |
Insurable Entity |
Insurable Entity |
lookUpProcedure
Looks up the procedure in the system based on the input parameters passed.
Availability
This method is available in the dynamic logic (groovy script)
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the procedure |
In |
String |
Definition code of the procedure |
Out |
procedure |
Procedure |
lookUpProvider
Looks up the provider in the system based on the input parameters passed.
Availability
This method is available in the dynamic logic (groovy script)
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the provider |
In |
String |
Definition code of the provider |
Out |
provider |
getSystemProperty
Returns the value of the property whose key is passed as input.
Availability
This method is available in the dynamic logic (groovy script)
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Key of the property |
Out |
String |
Value of the property |
Object Methods
In this section, the methods are described that are only available on specific objects. For each method, the following information is given:
-
The purpose of the method.
-
On which object(s) the method can be called.
-
Description of the parameters.
-
An example of the usage.
addAssignedProvider
Adds an assigned provider to a person.
Availability
This method is available for the Person object. Its purpose is to add an assigned provider through function dynamic logic:
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Provider code. Mandatory |
In |
String |
Provider flex code definition code. Mandatory |
In |
String |
Provider assignment type code. Mandatory |
In |
Date |
Assigned provider start date. Mandatory |
In |
Date |
Assigned provider end date. Optional |
Example
person.addAssignedProvider('1234567890', 'US_PROVIDER', 'PCP', java.sql.Date.valueOf('2017-01-01'))
addDynamicRecord
Adds a new dynamic record to an object. If the record’s usage is configured as time-valid, then the record supports two additional attributes, startDate and endDate, of which the former is mandatory.
Availability
This method is available for all objects that support dynamic records. It is available for functions, but not for conditions.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The usage name |
In |
Map |
The attributes of the record, structured as name/value pairs |
Example, adding a non-time-valid record
The following logic will add a non-time-valid record:
claim.addDynamicRecord( 'occurrence' , [ code : '06' , description : 'Crime victim' ] )
Example, adding a time-valid record
Adding a time-valid record is done similarly, except the map contains two extra attributes:
claim.addDynamicRecord( 'occurrences' , [ code : '06' , description : 'Crime victim' , startDate : claim.startDate , endDate : claim.endDate ] )
updateDynamicRecord
Updates the attributes of an existing dynamic record. Finding the correct record to update, is done by matching on the record’s key attribute value. If none of the existing record have a matching key value, nothing will be updated. If multiple records match with the key value, only one of them will be updated. If no key has been configured at all, executing this method will result in a new record being added. This applies to both non-time-valid and time-valid dynamic records, so time-validity does not play a role in finding the record to update.
Only the attributes that are present in the input map will be updated, i.e. attributes that are not mentioned, will be left untouched.
Availability
This method is available for all objects that support dynamic records. It is available for functions, but not for conditions.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The usage name |
In |
Map |
The attributes of the record, structured as name/value pairs |
Example, updating a multi-value record:
Assume an existing claim has the following three values for the occurrences record. This dynamic record has three attributes: code, description, and level, where code has been configured as the key.
code | description | level |
---|---|---|
01 |
Auto accident |
3 |
02 |
No fault accident |
7 |
03 |
Accident/Tort liability |
12 |
The following logic will update the level of the record with code "02" from 7 to 6. Its description will be retained.
claim.updateDynamicRecord( 'occurrences' , [ code : '02' , level : 6 ] )
Example, updating a time-valid record
Updating a record’s start and end date attribute is done the same way as other attributes. Assume an existing claim has the following two values for the occurrences record. Besides startDate and endDate, this time-valid dynamic record has two attributes: code, description, where code has been configured as the key.
code | description | startDate |
---|---|---|
endDate |
01 |
Auto accident |
2015-01-01 |
2015-12-31 |
02 |
No fault accident |
2016-01-01 |
The following logic will set the endDate of the second record to the claim’s end date. Its other attributes will be retained.
claim.updateDynamicRecord('occurrences' , [ code : '02' , endDate : claim.endDate ] )
deleteDynamicRecord
Deletes an existing dynamic record. If a key attribute has been configured on the record’s definition, then the second input argument can be used to delete a dynamic record with a specific key value. If no record with a matching key value can be found, nothing will be deleted. If multiple records match with the input key value, only one record will be deleted. If the input key is null, or if no key attribute has been configured at all, then all associated dynamic records will be deleted.
Availability
This method is available for all objects that support dynamic records. It is available for functions, but not for conditions.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The usage name |
In |
String |
The record’s key attribute value, or null |
Examples
Assume an existing claim has the following three values for the occurrences record. This dynamic record has three attributes: code and description, where code has been configured as the key.
code | description | 01 |
---|---|---|
Auto accident |
02 |
No fault accident |
The following logic will delete the record with code "02", while leaving the other two record intact.
claim.deleteDynamicRecord('occurrences', '02')
The following logic will delete all three occurrences records.
claim.deleteDynamicRecord('occurrences', null)
getDynamicRecords
Retrieves the dynamic record(s) of a particular object. The output parameter type depends on the record’s definition, described separately in more detail below.
Dynamic records are also available as attributes of an entity. They can be accessed from the object directly with the usage name, instead of explicitly invoking this method. See examples. |
Availability
This method is available for all objects that support dynamic records.
Single-value and non-time-valid
If the record definition has been configured as both single-value and non-time-valid, this method will return a single record.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The usage name |
Out |
Map |
The attributes of the record, structured as name/value pairs |
Example
assert claim.getDynamicRecords('hobby').name == 'Cricket' assert claim.getDynamicRecords('hobby').level.code == 'BEGINNER' assert claim.hobby.name == 'Cricket' assert claim.hobby.level.code == 'BEGINNER'
Multi-value or time-valid
If the record definition has been configured as either multi-value or time-valid, this method will return a list of records.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The usage name |
Out |
List |
A list of records. Each record represented as a map of attribute name/value pairs |
Example
assert claim.getDynamicRecords('hobbies').size() == 2 assert claim.getDynamicRecords('hobbies')[0].name == 'Cricket' assert claim.getDynamicRecords('hobbies')[1].name == 'Soccer' assert claim.hobbies.size() == 2 assert claim.hobbies[0].name == 'Cricket' assert claim.hobbies[1].name == 'Soccer'
addCtrClaimMessage
adds a ctrClaimMessage to the ctrClaim.
Availability
This method is only available for ctrClaim
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimMessage |
The CtrClaimMessage to add to the ctrClaim |
Example:
// create new ctrClaimMessage def ctrClaimMessage = new CtrClaimMessage() // transfer attributes ctrClaimMessage.code = claimMessage.message.code ... // attach to claim ctrClaim.addCtrClaimMessage(ctrClaimMessage)
addCtrClaimLineMessage
adds a ctrClaimLineMessage to the ctrClaimLine.
Availability
This method is only available for ctrClaimLine
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimLineMessage |
The CtrClaimLineMessage to add to the CtrClaimLine |
Example:
// create new ctrClaimLineMessage def ctrClaimLineMessage = new CtrClaimLineMessage() // transfer attributes ctrClaimLineMessage.code = claimLineMessage.message.code ... // attach to claim ctrClaimLine.addCtrClaimLineMessage(ctrClaimLineMessage)
addCtrClaimDiagnosis
adds a ctrClaimDiagnosis to the ctrClaim.
Availability
This method is only available for ctrClaim
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimDiagnosis |
The CtrClaimDiagnosis to add to the CtrClaim |
Example:
// create new ctrClaimDiagnosis def ctrClaimDiagnosis = new CtrClaimDiagnosis() // transfer attributes ctrClaimDiagnosis.code = claimDiagnosis.diagnosis.code ... // attach to claim ctrClaim.addCtrClaimDiagnosis(ctrClaimDiagnosis)
addCtrClaimLineDiagnosis
adds a ctrClaimLineDiagnosis to the ctrClaimLine.
Availability
This method is only available for ctrClaimLine
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimLineDiagnosis |
The CtrClaimLineDiagnosis to add to the CtrClaimLine |
Example:
// create new ctrClaimLineDiagnosis def ctrClaimLineDiagnosis = new CtrClaimLineDiagnosis() // transfer attributes ctrClaimLineDiagnosis.code = claimLineDiagnosis.diagnosis.code ... // attach to claim ctrClaimLine.addCtrClaimLineDiagnosis(ctrClaimLineDiagnosis)
addCtrCalloutHistory
adds a ctrCalloutHistory to the ctrStatusHistory.
Availability
This method is only available for ctrStatusHistory
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrCalloutHistory |
The CtrCalloutHistory to add to the ctrStatusHistory |
See the example for addCtrStatusHistory
addCtrPendReasonHistory
adds a ctrPendReasonHistory to the ctrStatusHistory.
Availability
This method is only available for ctrStatusHistory
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrPendReasonHistory |
The CtrPendReasonHistory to add to the ctrStatusHistory |
See the example for addCtrStatusHistory
addCtrStatusHistory
adds a ctrStatusHistory to the ctrClaim.
Availability
This method is only available for ctrClaim
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrStatusHistory |
The CtrStatusHistory to add to the CtrClaim |
Example:
// Transfer Status History for (claimStatusHistory in claim.claimStatusHistoryList) { def ctrClaimStatusHistory = new CtrStatusHistory() ctrClaimStatusHistory.status = claimStatusHistory.status ctrClaimStatusHistory.statusDateTime = claimStatusHistory.dateTime ctrClaimStatusHistory.transactionSourceCode = claimStatusHistory.transactionSource?.code ctrClaimStatusHistory.referenceCode = claimStatusHistory.referenceCode 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.referenceCode = claimPendReasonHistory.referenceCode ctrPendReasonHistory.transactionSourceCode = claimPendReasonHistory.transactionSource?.code ctrPendReasonHistory.memberText = claimPendReasonHistory.pendReason.externalTextMember ctrPendReasonHistory.providerText = claimPendReasonHistory.pendReason.externalTextProvider ctrClaimStatusHistory.addCtrPendReasonHistory(ctrPendReasonHistory) } for (claimCalloutHistory in claimStatusHistory?.claimCalloutHistoryList) { if (claimCalloutHistory.displayInUi == 'Y') { def ctrCalloutHistory = new CtrCalloutHistory() ctrCalloutHistory.definitionCode = claimCalloutHistory.calloutDefinition.code ctrCalloutHistory.definitionDescription = claimCalloutHistory.calloutDefinition.descr ctrCalloutHistory.requestSentDatetime = claimCalloutHistory.requestSentDatetime ctrCalloutHistory.responseReceivedDatetime = claimCalloutHistory.responseReceivedDatetime ctrClaimStatusHistory.addCtrCalloutHistory(ctrCalloutHistory) } } ctrClaim.addCtrStatusHistory(ctrClaimStatusHistory) }
addCtrClaimUnfinalizeReason
adds a ctrClaimUnfinalizeReason to the ctrClaim.
Availability
This method is only available for ctrClaim
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimUnfinalizeReason |
The CtrClaimUnfinalizeReason to add to the CtrClaim |
Example:
// create new def ctrClaimUnfinalizeReason = new CtrClaimUnfinalizeReason() // transfer attributes ctrClaimUnfinalizeReason.code = claimUnfinalizeReason.unfinalizeReason.code ... // attach to ctrClaim ctrClaim.addCtrClaimUnfinalizeReason(ctrClaimUnfinalizeReason)
addCtrClaimHold
Adds a financial hold to a ctrClaim. The purpose of this method to put a financial hold on a ctrClaim to be able to control each version being approved and a financial transaction is created for it; the start datetime of the hold is automatically set to the moment of processing.
Availability
This method is available only for ctrClaim. The method is overloaded and the next two sets of parameters are allowed:
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the financial hold type (mandatory) |
In |
Datetime |
The expiration datetime of the financial hold (optional) |
Example
ctrClaim.addCtrClaimHold('PAYMENT_HOLD', null)
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the financial hold type (mandatory) |
In |
Datetime |
The expiration datetime of the financial hold (optional) |
In |
Boolean |
Is this financial hold automatically released when a new version is created? (optional) |
In |
String |
An additional remark on why a hold is placed (optional) |
addCtrClaimLineModifier
Adds a ctrClaimLineModifier to the ctrClaimLine.
Availability
This method is only available for ctrClaimLine
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimLineModifier |
The CtrClaimLineModifier to add to the CtrClaimLine |
Example:
// create new ctr modifier def ctrClaimLineModifier = new CtrClaimLineModifierDomain() // transfer attributes ctrClaimLineModifier.code = claimLineModifier.modifier.code ... // attach to ctrClaimLine ctrClaimLine.addCtrClaimLineModifier(ctrClaimLineModifier)
addCtrClaimLineContractReference
Adds a ctrClaimLineContractReference to the ctrClaimLine.
Availability
This method is only available for ctrClaimLine
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimLineContractReference |
The CtrClaimLineContractReference to add to the CtrClaimLine |
Example:
// create new ctr contract reference def ctrClaimLineContractReference = new CtrClaimLineContractReference() // transfer attributes ctrClaimLineContractReference.code = claimLineContractReference.contractReference.code ... // attach to ctrClaimLine ctrClaimLine.addCtrClaimLineContractReference(ctrClaimLineContractReference)
addCtrClaimSubLine
Adds a ctrClaimSubLine to the ctrClaimLine.
Availability
This method is only available for ctrClaimLine
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimSubLine |
The CtrClaimSubLine to add to the CtrClaimLine |
Example:
// create new ctr sub line def ctrClaimSubLine = new CtrClaimSubLine() // transfer attributes ctrClaimSubLine.sequence = claimSubLine.sequence ... // attach to ctr claim line ctrClaimLine.addCtrClaimSubLine(ctrClaimSubLine)
addCtrClaimLineCoverage
Adds a ctrClaimLineCoverage to the ctrClaimLine.
Availability
This method is only available for ctrClaimLine
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimLineCoverage |
The CtrClaimLineCoverage to add to the CtrClaimLine |
Example:
// create new ctr claim line coverage def ctrClaimLineCoverage = new CtrClaimLineCoverage() // transfer attributes ctrClaimLineCoverage.action = claimLineCoverage.action ... // attach to ctr claim line ctrClaimLine.addCtrClaimLineCoverage(ctrClaimLineCoverage)
addCtrClaimLineProviderPricingClause
Adds a ctrClaimLineProviderPricingClause to the ctrClaimLine.
Availability
This method is only available for ctrClaimLine
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimLineProviderPricingClause |
The CtrClaimLineProviderPricingClause to add to the CtrClaimLine |
Example:
// create new ctr claim line provider pricing clause def ctrClaimLineProviderPricingClause = new CtrClaimLineProviderPricingClause() // transfer attributes ctrClaimLineProviderPricingClause.sequence = claimLineProviderPricingClause.sequence ... // attach to ctr claim line ctrClaimLine.addCtrClaimLineProviderPricingClause(ctrClaimLineProviderPricingClause)
addCtrClaimLineBenefitSpecification
Adds a ctrClaimLineBenefitSpecification to the ctrClaimLine.
Availability
This method is only available for ctrClaimLine
Parameters
In / Out | Type | Description |
---|---|---|
In |
CtrClaimLineBenefitSpecification |
The CtrClaimLineBenefitSpecification to add to the CtrClaimLine |
Example:
// create new ctr claim line benefit specification def ctrClaimLineBenefitSpecification = new CtrClaimLineBenefitSpecification() // transfer attributes ctrClaimLineBenefitSpecification.benefitSpecificationCode = claimLineBenefitSpecification.code ... // attach to ctr claim line ctrClaimLine.addCtrClaimLineBenefitSpecification(ctrClaimLineBenefitSpecification)
getAuthorizations
The purpose of this function is to retrieve a list of authorizations that have a consumption on the claim line if any.
Availability
This method is only available for claimLine
Parameters
In / Out | Type | Description |
---|---|---|
Out |
List<Authorization> |
List of authorizations available on the claim line if any. |
Example:
def auhtorizationList = claimLine.getAuthorizations()
getWorkingCopyClaim
Retrieves the working copy of the Claim Transaction.
Availability
This method is only available for ctrClaim
Parameters
In / Out | Type | Description |
---|---|---|
Out |
Claim |
Working Copy of the claim transaction |
Example:
def claim = ctrClaim.getWorkingCopyClaim()
addMessage
Adds a message to a claim, bill or claim line, in other words adds a claim message, bill message or claim line message.
Availability
This method is available for Claim, Bill and ClaimLine. Its purpose is to add a message through function dynamic logic; a couple of examples:
-
through a derivation rule, a dynamic field is set. Apart from having the value of the dynamic field updated, it is also desirable to have a message attached to the claim line with that information. In this example, the message code and parameters will be known.
-
through authorization matching, the messages from a denied authorizations need to be passed on to the claim line. In this example, the message code and parameters first need to be picked up from the authorization before they can be passed on.
The origin of the claim, bill or claim line message that will be attached, needs to come from the context. It is either 'SANITY CHECKS', 'PRE PRICING', 'ENROLLMENT', 'RESERVATION', 'PRICING', 'PRICING NO RECALCULATION', 'PRE BENEFITS', 'BENEFITS' or 'COVERAGE'. This implies e.g., that using the addMessage convenience method in a claim transaction scenario will fail, because no appropriate origin exists; functionally this is correct because no change to a FINALIZED claim should be possible when writing a claim to the claim transaction repository.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Message code. Mandatory |
In |
Object[] |
Message arguments. Optional |
Example
def authorization = authorizationList[0] def authorizationMessage = authorization.authorizationMessageList[0] claimLine.addMessage(authorizationMessage.message.code, authorizationMessage.value0, authorizationMessage.value1)
addModifier
Adds one or more modifiers to a claim line, in other words adds claim line modifier(s).
Availability
This method is available for ClaimLine object in function dynamic logic. Its purpose is to have the possibility to add a modifier through function dynamic logic. A typical use case would be to add a modifier to a claim line before it is sent out to iCES because iCES needs the modifier in order to find the correct pricing information, e.g. in a derivation rule or a callout rule.
One or more modifiers are given as input parameter. If the claim line modifier does not yet exist, it is created; if it already exists, nothing happens.
Parameters
In / Out | Type | Description |
---|---|---|
In |
StringList |
Modifier code(s). Mandatory |
clearLocationProviderOnAllClaimLines
Clears the location providers (including unmatched fields) on all claim lines of a claim. Note that replaced claim lines are ignored, i.e. the location providers on replaced claim lines are not cleared.
Availability
This method is available for the Claim object in function dynamic logic. Its purpose is to clear the location providers on all claim lines of a claim using function dynamic logic which can be called by a button (added using MDS).
A typical use case is when a claim is received in OHI which has a claim level location provider and one or more (different) claim line location providers, but the pricing for all claim lines should be done using one location provider (the location provider on the claim level).
clearServiceProviderOnAllClaimLines
Clears the service providers (including unmatched fields) on all claim lines of a claim. Note that replaced claim lines are ignored, i.e. the service providers on replaced claim lines are not cleared.
Availability
This method is available for the Claim object in function dynamic logic. Its purpose is to clear the service providers on all claim lines of a claim using function dynamic logic which can be called by a button (added using MDS).
A typical use case is when a claim is received in OHI which has a claim level service provider and one or more (different) claim line service providers, but the pricing for all claim lines should be done using one service provider (the service provider on the claim level).
getPrimaryDiagnosis
Returns the primary diagnosis on a claim, bill or claim line. Returns Null if no primary diagnosis exists. The primary diagnosis of a claim, bill or claim line is the diagnosis with the lowest sequence.
Availability
This method is available for claim, claim line and bill objects.
Parameters
In / Out | Type | Description |
---|---|---|
Out |
Diagnosis |
Out of all the diagnoses in the list, the one with the lowest value for the "sequence" field |
Example
def primaryDiagnosis = claimLine.getPrimaryDiagnosis()
generatedWorkflowNotification
Checks if a claim has (recently) generated a work flow event. Note that this check is based on the current setup, which gives no guarantee that a work flow notification message was actually sent, i.e., the setup may have been different at the time that the claim pended.
Availability
This method is available for the claim object.
Parameters
In / Out | Type | Description |
---|---|---|
Out |
Boolean |
True if the directly preceding status was a MANUAL status and at least one of the pertaining pend reasons is configured to be published. |
Example
if claim.generatedWorkflowNotification()
hasFatalMessage
Returns true if one or more fatal messages are attached to the claim line, bill or claim. Returns false otherwise. So, if called on the line, the bill and claim messages are also checked. If called on the bill, the claim messages are also checked
Availability
This method is available for claim, claim line and bill objects
Parameters
In / Out | Type | Description |
---|---|---|
In |
List of Strings |
The list of message origins that should be taken into account. Optional |
Out |
Boolean |
True if at least one fatal message belonging to one of the specified origins exists. If no origin is specified, then a fatal message of any origin will cause the return value to be true. |
Possible values for the message origin are: ADJUDICATION, BENEFITS, COVERAGE, ENROLLMENT, EXTERNAL, MANUAL, PAYMENT STATUS, PRE BENEFITS, PRE PRICING, PRICING, PRICING LIMIT, PRICING NO RECALCULATION, RESERVATION and SANITY CHECKS
Example:
if claimLine.hasFatalMessage() if claimLine.hasFatalMessage('PRE BENEFITS') if claimLine.hasFatalMessage('PRE BENEFITS', 'PRE PRICING')
inDiagnosisGroup
Checks whether a diagnosis is part of a diagnosis group or of at least one diagnosis group if a list of diagnosis groups is passed at a certain point in time. Returns true when that is the case, false otherwise.
Availability
This method is only available for diagnosis objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of one diagnosis group or a comma-separated list of diagnosis groups |
In |
Date |
As of date for time validity (optional in case the signature defines a default date) |
Out |
Boolean |
True if the invoking diagnosis belongs to the given group or at least one of the given groups on the as-of date. |
Examples
Check whether a diagnosis is part of a specific diagnosis group:
diagnosis.inDiagnosisGroup('BACKINJURY')
Check whether a diagnosis is part of at least one diagnosis group in a list of groups:
diagnosis.inDiagnosisGroup('EVAL_MGMT_DX,GYN_R_DX,TMD_DX')
If it is required to check if a diagnosis is in at least one of a list of diagnosis groups (on a certain date) use the comma-separated list capability for efficiency reasons.
inMessageGroup
Checks whether a message is part of a message group. Returns true when that is the case, false otherwise.
Availability
This method is only available for message objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the message group. (mandatory) |
Out |
Boolean |
True if the invoking message belongs to the group |
Example
message.inMessageGroup('FRAUD')
inUnfinalizeReasonGroup
Checks whether an unfinalize reason is part of an unfinalize reason group. Returns true when that is the case, false otherwise.
Availability
This method is only available for unfinalize reason objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the unifnalize reason group. (mandatory) |
Out |
Boolean |
True if the invoking unfinalize reason belongs to the group |
Example
unfinalizeReason.inUnfinalizeReasonGroup('ADMIN')
inLocationTypeGroup
Checks whether a location type is part of a location type group. Returns true when that is the case, false otherwise.
Availability
This method is only available for location type objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the location type group. (mandatory) |
Out |
Boolean |
True if the invoking location type belongs to the group |
Example
locationType.inLocationTypeGroup('MEDICAL')
inCountryRegionGroup
Checks whether a country region is part of a country region group. Returns true when that is the case, false otherwise.
Availability
This method is only available for country region objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the country region group. (mandatory) |
Out |
Boolean |
True if the invoking country region belongs to the group |
Example
countryRegion.inCountryRegionGroup('NORTHWEST')
getAge
Calculates the age of a person at a given date. Returns the age in years.
Availability
This method is only available for person objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
Date |
As of date for time validity (optional in case the signature defines a default date) |
Out |
Integer |
Age of the invoking person on the as-of date |
Example
def age = person.getAge()
inProcedureGroup
Checks whether a procedure is part of a procedure group or of at least one procedure group if a list of procedure groups is passed at a certain point in time. Returns true when that is the case, false otherwise.
Availability
This method is only available for procedure objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of one procedure group or a comma-separated list of procedure groups |
In |
Date |
As of date for time validity (optional in case the signature defines a default date) |
Out |
Boolean |
True if the invoking procedure belongs to the given group or at least one of the given groups on the as-of date |
Example
Check whether a procedure is part of a specific procedure group:
procedure.inProcedureGroup('OFFICEVISITS')
Check whether a procedure is part of at least one procedure group in a list of groups:
procedure.inProcedureGroup('OFFICEVISITS,HEALTHCHECKS')
If it is required to check if a procedure is in at least one of a list of procedure groups (on a certain date) use the comma-separated list capability for efficiency reasons.
inFlexCodeGroup
Checks whether a flex code is part of a flex code group or of at least one flex code group if a list of flex code groups is passed at a certain point in time. Returns true when that is the case, false otherwise.
Availability
This method is only available for flex code objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of one flex code group or a comma-separated list of flex code groups |
In |
Date |
As of date for time validity (optional in case the signature defines a default date) |
Out |
Boolean |
True if the invoking flex code belongs to the given group or at least one of the given groups on the as-of date |
Example
Check whether a procedure is part of a specific procedure group:
flexCode.inFlexCodeGroup('FLEXCODEGROUP1')
Check whether a flex code is part of at least one flex code group in a list of groups:
flexCode.inFlexCodeGroup('FLEXCODEGROUP1,FLEXCODEGROUP2,FLEXCODEGROUP3')
If it is required to check if a flex code is in at least one of a list of flex code groups (on a certain date) use the comma-separated list capability for efficiency reasons.
inProviderGroup
Checks whether a provider is part of a provider group at a certain point in time. Returns true when that is the case, false otherwise.
An organization provider is part of a provider group if:
-
the organization provider is affiliated to the provider group OR
-
the organization provider is part of an organization provider that is affiliated to the provider group
An individual provider is part of a provider group if:
-
the individual provider is affiliated to the provider group
The affiliations must be valid at the as of date in all cases.
Availability
This method is available for provider objects, both individual and organizational providers.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the provider group |
In |
Date |
As of date for time validity (optional in case the signature defines a default date) |
Out |
Boolean |
True if the invoking provider belongs to the group on the as-of date |
Example
individualProvider.inProviderGroup('CORE')
hasSpecialty
Checks whether a provider has a specialty at a certain point in time. Returns true when that is the case, false otherwise.
Availability
This method is available for provider objects, both individual and organizational providers.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the specialty |
In |
Date |
As of date for time validity (optional in case the signature defines a default date) |
Out |
Boolean |
True the invoking provider has a provider specialty that matches the code on the as-of date |
Example
provider.hasSpecialty('DERMATOLOGY')
inProductProviderGroup
Checks whether a provider is in a provider group that is connected to a product at a certain point in time.
This is determined as follows. The system starts by creating a list of provider groups to consider.
-
The system selects all product provider groups on the product
-
For each product provider group, the system determines which provider group to consider:
-
If the product provider group has an assignment label
-
And if there is a policy product provider group in the corresponding enrollment response that has the same assignment label and applies to the same product.
-
Then the system ignores the provider group on the product provider group and considers the provider group to the matching policy product provider group instead
-
If the product provider group does not specify an assignment label, or can’t be matched, then the system considers the provider group on the product provider group
-
This iteration results in a list of provider groups. If the provider is included in at least one of these provider groups then this method returns TRUE.
Note that this method determines whether a provider is part of a provider group in the exactly the same way as the system does during the selection of benefits.
Availability
This method is available for provider objects, both individual and organizational providers.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the product. |
In |
Date |
As of date for time validity (optional in case the signature defines a default date) |
Out |
Boolean |
True if the invoking provider is within scope of at least one of the product’s provider groups |
Example
def asOfDate = java.sql.Date.valueOf('2010-06-28') provider.inProductProviderGroup('SUPERBUY', asOfDate)
getTitles
This method returns a string containing all the titles of the person or individual provider separated by white spaces. The titles are sorted on display order. If no display order is available or several titles have the same display order, the alphabetic ordering of the title applies.
Availability
This method is available on person and individual provider objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
'A' returns al post-name titles, 'B' returns all pre-name titles. |
Out |
String |
Space separated list of the invoking person’s titles |
Example
return person.getTitles('B') + ' ' + person.name + ' ' + person.getTitles('A')
isOrganization
Returns true when the relation is of subtype Organization (not a Bank), false otherwise.
Availability
This method is available on relation objects.
Parameters
In / Out | Type | Description |
---|---|---|
Out |
Boolean |
True if the invoking relation is an organization |
Example
relation.isOrganization()
isPerson
Returns true when the relation is of subtype Person, false otherwise.
Parameters
In / Out | Type | Description |
---|---|---|
Out |
Boolean |
True if the invoking relation is a person |
Example
relation.isPerson()
getCountryRegions (provider)
Get the country regions of a provider. Use addresses at given point in time. Returns the country regions if found, null otherwise.
Availability
This method is available on provider objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
Date |
As of date for time validity (optional in case the signature defines a default date) |
Out |
CountryRegionList |
For individual providers: returns the country regions of the invoking provider’s rendering addresses (specified on the related service addresses) on the as-of date. For organization providers: returns the country regions of the invoking provider’s service addresses on the as-of date. |
Example
countryRegions = provider.getCountryRegions()
getCountryRegion (relation)
Get the country region of a relation. Use address of given type at given point in time. Returns the country region if found, null otherwise.
Availability
This method is available on relation objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
Date |
As of date for time validity (optional in case the signature defines a default date) |
In |
String |
Address type code. Optional, when not specified, the default address type is used. |
Out |
CountryRegion |
Returns the country region of the invoking relation’s address on the as-of date. |
Example
countryRegion = person.getCountryRegion()
hasTag
Determines whether a relation has a certain tag at a given point in time. Returns true if this is the case, false otherwise.
Availability
This method is available on relation objects.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
Code of the tag type |
In |
Date |
As of date for time validity (optional in case the signature defines a default date) |
Out |
Boolean |
True of the invoking relation has a tag of the specified type on the as-of date |
Example
relation.hasTag('VIP')
setField
The usual way to assign a value is to use the assignment operator, e.g.:
claimLine.widget = 3
In the case of a dynamic field that is in a FlexCode Set, a direct assignment is not possible because you need to specify the code of the FlexCode Definition.
This method sets the value for a dynamic field, a provider field, a diagnosis field or a procedure field. The field has to be single value and non-time-valid.
Availability
This method is only available for functions that allow a value to be set within the dynamic logic, e.g. derivation rules.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The name of the field which is to be set. |
In |
String, Date or Number |
The value of the field to be set. For flex codes, the key field value. |
In |
String |
Code of the FlexCode Definition |
Example
This example assigns a value to the benefitsProvider field on the claimLine. The field benefitsProvider is of type Provider, which is defined as flex code set. We can use the following code to do the same where '1234' is the code of the Provider and 'US PROVIDER' is the code of the flex code definition for the provider.
claimLine.setField('benefitsProvider','1234','US PROVIDER')
addClaimHold
Adds a financial hold to a claim. The purpose of this method to put a financial hold on a claim when the claim is being finalized and a financial transaction is created for it; the start datetime of the hold is automatically set to the moment of processing.
Availability
This method is available only for Claim. The method is overloaded and the next two sets of parameters are allowed:
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the financial hold type (mandatory) |
In |
Datetime |
The expiration datetime of the financial hold (optional) |
Example
claim.addClaimHold('PAYMENT_HOLD', null)
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the financial hold type (mandatory) |
In |
Datetime |
The expiration datetime of the financial hold (optional) |
In |
Boolean |
Is this financial hold automatically released when a new version is created? (optional) |
In |
String |
An additional remark on why a hold is placed (optional) |
setClaimLineContractReferences
Set claim line contract references.
Availability
This method is available only for ClaimLine. Its purpose is to set claim line contract references through dynamic logic, noticeably within a derivation rule. The existing claim line contract references (if any) are replaced by the contract references specified within the method. If no contract references are specified within the method, the existing claim line contract references (if any) are cleared.
Parameters
In / Out | Type | Description |
---|---|---|
In |
StringList |
Contract Reference code(s) (optional) |
setClaimLineParameter
Set or modify a claim line parameter.
Availability
This method is available only for ClaimLine. Its purpose is to set a claim line parameter through dynamic logic, noticeably within a derivation rule. If the parameter does not yet exist (the logical key being the combination of claim line, cover withhold category and product, the last one optional), it is created. If the parameter already exists, it is modified.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the cover withhold category (mandatory) |
In |
Number |
The percentage (mandatory or null) |
In |
Money |
The amount (mandatory or null) |
In |
String |
The product to which the use is limited (optional) |
Example
claimLine.setClaimLineParameter('COINSURANCE',75,null) -- Setting a coinsurance percentage claimLine.setClaimLineParameter('COPAY',null,Money.create(10)) -- Setting a copay amount claimLine.setClaimLineParameter('COINSURANCE',75,null,'PROD') -- Setting a coinsurance percentage for product 'PROD' claimLine.setClaimLineParameter('COPAY',null,Money.create(10),'PROD') -- Setting a copay amount for product 'PROD'
deleteClaimLineParameter
Delete one or more claim line parameters.
Availability
This method is available only for ClaimLine. Its purpose is to delete a claim line parameter through dynamic logic, noticeably within a derivation rule. If both a cover withhold category and a product are specified, then only that parameter is deleted. If product is left unspecified, then all parameters for that claim line and cover withhold category are deleted. If cover withhold category is left unspecified, then all parameters for that claim line and product are deleted. If both cover withhold category and product are left unspecified, then all parameters for that claim line are deleted.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the cover withhold category (optional) |
In |
String |
The code of the product to which the use is limited (optional) |
Example
claimLine.deleteClaimLineParameter('COPAY','PROD') claimLine.deleteClaimLineParameter(null,'PROD')
setClaimLineLimit
Set or modify a claim line limit.
Availability
This method is available only for ClaimLine. Its purpose is to set a claim line limit through dynamic logic, noticeably within a derivation rule. If the claim line limit does not yet exist (the logical key being the combination of claim line, limit and product, the last one optional), it is created. If the claim line limit already exists, it is modified.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the limit (mandatory) |
In |
Number or Money |
The maximum amount, maximum number of units or maximum number of distinct service days (mandatory) |
In |
String |
The code of the product to which the limit is to be applied (optional) |
Example
claimLine.setClaimLineLimit('MEMBER_DEDUCTIBLE',Money.create(230),'S') claimLine.setClaimLineLimit('MEMBER_OOPM',Money.create(460),'C')
setClaimLineLimit
Set or modify a claim line limit.
Availability
This method is available only for ClaimLine. Its purpose is to set a claim line limit through dynamic logic, noticeably within a derivation rule. If the claim line limit does not yet exist (the logical key being the combination of claim line, limit and product, the last one optional), it is created. If the claim line limit already exists, it is modified.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the limit (mandatory) |
In |
String |
The code of the cover withhold category (optional) |
In |
Number or Money |
The maximum amount, maximum number of units or maximum number of distinct service days (mandatory) |
In |
String |
|
In |
String |
The code of the product to which the limit is to be applied (optional) |
Example
claimLine.setClaimLineLimit('MEMBER_DEDUCTIBLE','DEDUCTIBLE',Money.create(230),'S',null) claimLine.setClaimLineLimit('MEMBER_OOPM','COPAY',Money.create(460),'C',null) claimLine.setClaimLineLimit('PT_VISITS',null,10,null,'PROD') -- Set PT_VISITS number, when reached, use action on the limit claimLine.setClaimLineLimit('PT_VISITS',null,null,'C','PROD') -- Set PT_VISITS action to continue, use number of units defined on the limit
deleteClaimLineLimit
Delete one or more claim line limits.
Availability
This method is available only for ClaimLine. Its purpose is to delete a claim line limit through dynamic logic, noticeably within a derivation rule. If the In parameters are left unspecified, then all claim line limits for that claim line are deleted. If one or more of the In parameters is specified then only the claim line limits for that claim line and the specified limit/product are deleted.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the limit (optional) |
In |
String |
The code of the product to which the limit is to be applied(optional) |
Example
claimLine.deleteClaimLineLimit('MEMBER_OOPM','COPAY') claimLine.deleteClaimLineLimit(null,null)
deleteClaimLineLimitWithCategory
Delete one or more claim line limits with cover withhold category.
Availability
This method is available only for ClaimLine. Its purpose is to delete a claim line limit through dynamic logic, noticeably within a derivation rule. If the In parameters are left unspecified, then all claim line limits for that claim line are deleted. If one or more of the In parameters is specified then only the claim line limits for that claim line and the specified limit/product/cover withhold category are deleted.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the limit (optional) |
In |
String |
The code of the cover withhold category (optional) |
In |
String |
The code of the product to which the limit is to be applied (optional) |
Example
claimLine.deleteClaimLineLimitWithCategory('MEMBER_OOPM','COPAY','PROD') claimLine.deleteClaimLineLimitWithCategory(null,null,'PROD')
setSkipTagAction
Modify a skip tag action for a given skip tag. This method can be used to align the skip tag actions for several different skip tags.
Availability
This method is available only on the Claim. It can be called in function dynamic logic, e.g. invoked by derivation rules and callout rules. If the method is called on a claim that does not have the specified skip tag (first parameter), this method does nothing.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the skip tag |
In |
String |
R (Redo), S (Skip), H (Hold) or F (Force). |
setOverridingBenefits
Set or modify the overriding coverage regime, family code, product and subscription date on a claim line.
Availability
This method is available only for ClaimLine. Its purpose is to set an overriding coverage regime, family code, product and subscription date through dynamic logic. The following restrictions apply to this method:
-
The product code, subscription date or family code must be specified in conjunction with a coverage regime code (meaning that the coverage regime code may not be null if one or more of product code, subscription date or family code are specified)
-
Either both or neither the product code and the subscription date are specified (meaning that both must be specified or both must be null)
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the coverage regime |
In |
String |
The family code |
In |
String |
The code of the product |
In |
Date |
The subscription date |
Examples of allowed configuration
claimLine.setOverridingBenefits('COVER100', 'FAM12345', 'BASIC',Date.parse('MM/dd/yyyy','12/31/2010')) claimLine.setOverridingBenefits('COVER100', null, null,null) claimLine.setOverridingBenefits('COVER100', null, 'BASIC',Date.parse('MM/dd/yyyy','12/31/2010')) claimLine.setOverridingBenefits('COVER100', claimLine.familyCode,null, null) claimLine.setOverridingBenefits(null, null, null, null)
Examples of not allowed configuration
claimLine.setOverridingBenefits('COVER100', 'FAM12345', 'BASIC', null) claimLine.setOverridingBenefits(null, 'FAM12345', 'BASIC',Date.parse('MM/dd/yyyy', '12/31/2010'))
setOverridingBenefits
Set or modify the overriding values on a claim line. The method allows setting overriding values for
-
Product
-
Subscription Date
-
Coverage Specification
-
Coverage Regime
-
Coverage Regime No Auth
-
Authorization Regime
-
Waiting Period Regime
-
Post Benefit Regime
-
Funding Arrangement
-
Family Code
Product Line and Product Family can not be set by this method. |
Availability
This method is available only for ClaimLine. Its purpose is to set overriding values through dynamic logic.
This method expects an overriding object namely BenefitOverride. This object has following attributes:
-
productCode: String
-
subscriptionDate: Date/String
-
coverageSpecificationCode: String
-
coverageRegimeCode: String
-
coverageRegimeNoAuthCode: String
-
authorizationRegimeCode: String
-
waitingPeriodRegimeCode: String
-
postBenefitRegimeCode: String
-
fundingArrangementCode: String
-
familyCode: String
Only the attributes populated will be updated on the ClaimLine, if a certain attribute is not mentioned, it will not be touched. If it is desired to nullify an attribute, it should be set to empty string for all string types. This is the reason why subscriptionDate can be set as Date when setting a value or String when nullifying.
Parameters
In / Out | Type | Description |
---|---|---|
In |
BenefitOverride |
Please see the explanation above |
Examples of allowed configuration
claimLine.setOverridingBenefits(new BenefitOverride() .withCoverageSpecificationCode('COVER100')) claimLine.setOverridingBenefits(new BenefitOverride() .withProductCode('BASIC') .withSubscriptionDate(Date.parse('MM/dd/yyyy','12/31/2010')) .withCoverageSpecificationCode('COVER100')) claimLine.setOverridingBenefits(new BenefitOverride() .withProductCode('BASIC') .withSubscriptionDate(Date.parse('MM/dd/yyyy','12/31/2010')) .withCoverageRegimeCode('COVER100') .withFamilyCode('FAM12345')) claimLine.setOverridingBenefits(new BenefitOverride() .withCoverageRegimeCode('COVER100')) claimLine.setOverridingBenefits(new BenefitOverride() .withCoverageRegimeCode('') .withProductCode('') .withSubscriptionDate('') .withCoverageSpecificationCode('') .withCoverageRegimeNoAuthCode('') .withFamilyCode('') .withPostBenefitsRegimeCode('') .withAuthorizationRegimeCode('').withWaitingPeriodRegimeCode('').withFundingArrangementCode(''))
setAuthorizationCode
Set or modify the authorization code on a claim line.
Availability
This method is available only for ClaimLine. Its purpose is to set an authorization code through dynamic logic.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
The code of the authorization |
setAuthorizationExceptionType
Set or modify the authorization exception type on a claim line.
Availability
This method is available only for ClaimLine. Its purpose is to set an authorization exception type through dynamic logic.
Parameters
In / Out | Type | Description |
---|---|---|
In |
String |
ALL, AUTHORIZATION, NOTIFICATION or REFERRAL |
filterFeeScheduleLineProcedureSpecificity
Filter an input list of fee schedule lines; return a version of the list including only those fee schedule lines that are most specific with regard to procedures matched.
Availability
This is available only for ClaimLine, intended for use within function dynamic logic with signature "Fee Schedule Line Priority". Its purpose is to filter an input list of fee schedule lines based on procedure specificity. This is done by determining if the fee schedule line 'directly matches' one, two or all three procedure fields on the claim line. A 'direct match' means that the claim line procedure is not null and equals (at least) one of the procedures of the fee schedule line and/or is part of (at least) one of the procedure groups of the fee schedule line. As such a specificity value is calculated for each fee schedule line in the input list:
-
Specificity value 1 if the fee schedule line directly matches one of the claim line’s procedures. A fee schedule line has at least this specificity, otherwise it would not have been selected to price the claim line.
-
Specificity value 2 if the fee schedule line directly matches two of the claim line’s procedures.
-
Specificity value 3 if the fee schedule line directly matches all three procedures of the claim line. This is the maximum specificity a fee schedule line can have.
The maximum specificity value amongst the fee schedule lines in the input list is the standard by which the list will be filtered. In the output list of fee schedule lines, only those lines of the input list are included that have the maximum specificity value.
Note that no distinction in specificity is made between procedure groups and procedures, e.g. a fee schedule line that matches on one procedure is considered to be just as specific as a fee schedule line that matches on one procedure group.
Parameters
In / Out | Type | Description |
---|---|---|
In |
List of FeeScheduleLines |
The input list of fee schedule lines. |
Out |
List of FeeScheduleLines |
The filtered list of fee schedule lines. |
Example
feeScheduleLineList = claimLine.filterFeeScheduleLineProcedureSpecificity(feeScheduleLineList)
Consider the following claim line and consequent filtering of fee schedule lines:
Claim Line | Procedure | Procedure 2 | Procedure 3 |
---|---|---|---|
1 |
CPT 99201 |
REV 805 |
NDC 812 |
Fee Schedule Lines
Line | Procedure | Proc. Group | Procedure 2 | Proc. Group 2 | Procedure 3 | Included in output list? |
---|---|---|---|---|---|---|
1 |
CPT 99201 |
N - specificity value: 1 |
||||
2 |
CPT_RANGE |
N - specificity value: 1 |
||||
3 |
CPT 99201 |
REV 805 |
N - specificity value: 2 |
|||
4 |
CPT_RANGE |
REV_RANGE |
N - specificity value: 2 |
|||
5 |
CPT 99201 |
REV_RANGE |
N - specificity value: 2 |
|||
6 |
CPT_RANGE |
REV_RANGE |
NDC 812 |
Y - specificity value: 3 |
||
7 |
CPT 99201 |
REV 805 |
NDC 812 |
Y - specificity value: 3 |
Note that this example assumes that CPT 99201 is in the group 'CPT_RANGE' and REV 805 is in the group 'REV_RANGE'.
filterFeeScheduleLineModifierSpecificity
Filter an input list of fee schedule lines; return a version of the list including only those fee schedule lines that are most specific with regard to modifiers matched.
Availability
This is available only for ClaimLine, intended for use within function dynamic logic with signature "Fee Schedule Line Priority". Its purpose is to filter an input list of fee schedule lines based on modifier specificity. For modifier specificity this is as simple as determining the fee schedule line(s) with the most modifiers specified, and returning a list with only those fee schedule lines that specify that number of modifiers.
Parameters
In / Out | Type | Description |
---|---|---|
In |
List of FeeScheduleLines |
The input list of fee schedule lines. |
Out |
List of FeeScheduleLines |
The filtered list of fee schedule lines. |
Example
feeScheduleLineList = claimLine.filterFeeScheduleLineModifierSpecificity(feeScheduleLineList)
Consider the following claim line and consequent filtering of fee schedule lines:
Claim Line | Procedure | Modifiers |
---|---|---|
1 |
CPT 99201 |
TC, XY, AB |
Fee Schedule Lines
Line | Modifiers | Included in output list? |
---|---|---|
1 |
N - specificity value: 0 |
|
2 |
TC |
N - specificity value: 1 |
3 |
TC, XY |
Y - specificity value: 2 |
4 |
TC, AB |
Y - specificity value: 2 |
Access to Enrollment data
The policyEnrollment object represents the data returned by the enrollment interface. The object is accessible through the claim line. The information stored in the policyEnrollment object is accessible using the methods defined below.
getFamily
This method returns the Family.
Availability
This method is only available for policyEnrollment .
Parameters
In / Out | Type | Description |
---|---|---|
In |
Date |
As of date for time validity. Optional. |
Out |
PolicyFamily |
The PolicyFamily on the as of date |
Example
familyCode = claimLine.policyEnrollment.getFamily().code
getProduct
This method searches for the relevant product in the list of Products returned by the Enrollment interface.
Availability
This method is only available for policyEnrollment .
Parameters
In / Out | Type | Description |
---|---|---|
In |
Product |
The product for which the corresponding policy product is to be returned |
In |
Date |
As of date for time validity. Optional. |
Out |
PolicyProduct |
The policyProduct for the specified product on the as of date |
Example
if ( claim.precedingPayerCode == claimLine.policyEnrollment.getProduct(product).product.nextPayerCode ) { ... }
getProducts
This method searches for the relevant products in the list of Products returned by the Enrollment interface. It returns the list of products that are valid on the specified asOfDate.
Availability
This method is only available for policyEnrollment.
Parameters
In / Out | Type | Description |
---|---|---|
In |
Date |
As of date for time validity. Optional. |
Out |
List of PolicyProducts |
The policyProducts on the as of date |
Example
When the product that covers a claim line is not known yet but when the product that is used is always the first product returned then the following logic can be used.
if ( claim.precedingPayerCode == claimLine.policyEnrollment.getProducts()[0]?.product.nextPayerCode ) { ... }
getLimitCounterPeriod
This method fetches the LimitCounterPeriod on the Limit for the InsurableEntity on the specified asOfDate. If there are multiple limit counter periods available based on the request parameters, the method throws an Exception, in which case, the caller should make the request more specific to get the required limit counter period back.
Availability
This method is only available for Limit.
Parameters
In / Out | Type | Description |
---|---|---|
In |
InsurableEntity |
InsurableEntity to find the limitCounter on |
In |
Provider |
Provider for which limit counter is applied. Optional |
In |
String |
Product aggregation level. Optional |
In |
String |
FamilyCode. Optional |
In |
Date |
As of date for time validity. Optional |
Out |
LimitCounterPeriod |
The LimitCounterPeriod on the specified date and for insurableEntity on that limit. |
Example
def currentAmount = limit.getLimitCounterPeriod(insurableEntity, null, null, null, serviceDate)?.currentAmount?.amount
Access to Eligibility Check data
The EligibilityCheck & EligiblityCheckMessage objects represent the data returned by an eligibility check. The information stored in these objects - of which the EligibiltyCheckMessage when available is contained in the EligibilityCheck object - is accessible using the properties defined below.
checkStatus
This property returns a textual representation of the status of the EligibilityCheck. This can be used in constructing the response payload.
Availability
This property is available for EligibilityCheck.
Parameters
In/Out | Type | Description |
---|---|---|
Out |
String |
Returns one of the following: 'Error', 'Approved', 'Denied' |
messageCode
This is a convenience property that returns the code of the message that is referenced by the EligibilityCheckMessage.
Availability
This property is available for EligibilityCheckMessage, of which potentially a number are contained by an EligibilityCheck.
Parameters
In/Out | Type | Description |
---|---|---|
Out |
String |
Returns the textual code that is associated with the message referenced by the EligibilityCheckMessage. |
messageText
This is a convenience property that returns the message text of the message that is referenced by the EligibilityCheckMessage.
Availability
This property is available for EligibilityCheckMessage, of which potentially a number are contained by an EligibilityCheck.
Parameters
In/Out | Type | Description |
---|---|---|
Out |
String |
Returns the message text that is associated with the message referenced by the EligibilityCheckMessage. |
Methods for copying attributes from Working Copy objects to Claim
Transaction objects
The following audit attributes are copied for working copy Claims, Bills and Claim Lines to their Claim Transaction counterparts:
-
CREATED_BY
-
CREATION_DATE
-
LAST_UPDATED_BY
-
LAST_UPDATED_DATE
-
Claim only: OBJECT_LAST_UPDATED_BY and OBJECT_LAST_UPDATED_DATE
For the following sub elements of Claims, Bills and Claim Lines a convenience method copyAuditAttributes is available that can be used in a Claim Transaction scenario’s Dynamic Logic to copy the audit attributes:
-
Claim sub elements:
-
CtrClaimDiagnosis
-
CtrClaimMessage
-
CtrClaimUnfinalizeReason
-
CtrStatusHistory
-
-
Bill sub elements:
-
CtrBillDiagnosis
-
CtrBillMessage
-
-
Claim Line sub elements:
-
CtrClaimLineDiagnosis
-
CtrClaimLineMessage
-
CtrClaimLineModifier
-
CtrClaimSubLine
-
CtrClaimDiagnosis.copyAuditAttributes
This method copies the audit attributes from the ClaimDiagnosis to the CtrClaimDiagnosis.
Availability
Available for CtrClaimDiagnosis.
Parameters
In / Out | Type | Description |
---|---|---|
In |
ClaimDiagnosis |
Source for the audit attributes. Mandatory. |
Example
When the product that covers a claim line is not known yet but when the product that is used is always the first product returned then the following logic can be used.
// Transfer Claim Diagnoses for (claimDiagnosis in claim?.claimDiagnosisList) { if (claimDiagnosis.diagnosis != null) { def ctrClaimDiagnosis = new CtrClaimDiagnosis() ... ctrClaimDiagnosis.copyAuditAttributes(claimDiagnosis) ctrClaim.addCtrClaimDiagnosis(ctrClaimDiagnosis) } }
The following methods operate in a similar vein, meaning that the in parameter is of the type of the corresponding working copy object (e.g. ClaimMessage for the first one):
-
CtrClaimMessage.copyAuditAttributes(ClaimMessage claimMessage);
-
CtrClaimUnfinalizeReason.copyAuditAttributes(ClaimUnfinalizeReason claimUnfinalizeReason);
-
CtrStatusHistory.copyAuditAttributes(ClaimStatusHistory claimStatusHistoryEntry);
-
CtrBillDiagnosis.copyAuditAttributes(BillDiagnosis billDiagnosis);
-
CtrBillMessage.copyAuditAttributes(BillMessage BillMessage);
-
CtrClaimLineDiagnosis.copyAuditAttributes(ClaimLineDiagnosis claimLineDiagnosis);
-
CtrClaimLineMessage.copyAuditAttributes(ClaimLineMessage claimLineMessage);
-
CtrClaimLineModifier.copyAuditAttributes(ClaimLineModifier claimLineModifier);
-
CtrClaimSubLine.copyAuditAttributes(ClaimSubLine claimSubLine);
-
CtrClaimPolicyProduct.copyAuditAttributes(PolicyProduct policyProduct);