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

  • For single-value dynamic fields: the dynamic field’s datatype

  • For all others: List

  • For single-value dynamic fields: the dynamic field value for the date

  • For all others: the list of elements that are valid on the date

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 Type Description

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, that is 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)

Example

ctrClaim.addCtrClaimHold('PAYMENT_HOLD', null, true, 'A remark')

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 for example 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)

setRecalculateBenefits

Recalculates the benefits changes that were made, just as it does during Manual Adjudication or Manual benefits. Only benefits are recalculated using this predefined method.

This method doesn’t start an immediate recalculation but flags the claim for recalculation. The actual recalculation is done in the Adjudication step in the claims flow.

Availability

This method is available for Claim and only in the context of a Callout Definition (Response) dynamic logic function.

Parameters

In / Out Type Description

In

Claim

The claim that needs to be recalculated

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, for example 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

Example

claimLine.addModifier('26', 'TC')

clearLocationProviderOnAllClaimLines

Clears the location providers (including unmatched fields) on all claim lines of a claim. Note that replaced claim lines are ignored, that is 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 Oracle Health Insurance 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).

Example

claim.clearLocationProviderOnAllClaimLines()

clearServiceProviderOnAllClaimLines

Clears the service providers (including unmatched fields) on all claim lines of a claim. Note that replaced claim lines are ignored, that is 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 Oracle Health Insurance 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).

Example

claim.clearServiceProviderOnAllClaimLines()

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,that is, 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 spec ified 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 group*s 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 adefault 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, for example:

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, for example 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')

switchPrimaryClaimDiagnosis

Switches which diagnosis is primary for the claim. Make a secondary primary and vice versa.

Availability

This method is only available for claim

Parameters

In / Out Type Description

In

ClaimDiagnosis

Current primary claim diagnosis

In

ClaimDiagnosis

Current secondary claim diagnosis

Out

Boolean

Returns true when the change succeeded. Returns false when the situation was already as requested.

switchPrimaryClaimLineDiagnosis

Switches which diagnosis is primary for the claim line. Make a secondary primary and vice versa.

Availability

This method is only available for claimLine

Parameters

In / Out Type Description

In

CLaimLineDiagnosis

Current primary claim line diagnosis

In

CLaimLineDiagnosis

Current secondary claim line diagnosis

Out

Boolean

Returns true when the change succeeded. Returns false when the situation was already as requested.

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)

Example

claim.addClaimHold('PAYMENT_HOLD', null, true, 'A remark')

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)

Example

claimLine.setClaimLineContractReferences('1234', '1235')

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. align the skip tag actions for several different skip tags.

Availability

This method is available only on the Claim. 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).

Example

claim.setSkipTagAction('ICES_2ND_CALL','H')

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

Example

claimLine.setAuthorizationCode('AU12345')

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

Example

claimLine.setAuthorizationExceptionType('NOTIFICATION')

setAmountManually

Set or modify the amount of a claim line coverage.

Availability

This method is available only for ClaimLineRuleCoverage. Its purpose is to set an amount through dynamic logic and prevent the value from automatic updates during recalulation of benefits.

Parameters

In / Out Type Description

In

Number

Amount

Example

claimLineRuleCoverage.setAmountManually(100)

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, for example 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 and 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 (for example 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);