Was this helpful?
EDI 999 Validator
The 999 Validator allows you to verify incoming EDI claim transactions with standard schemas at different Strategic National Implementation Process (SNIP) levels, and then generate a 999 Functional Acknowledgment that reports the results. The 999 acknowledgement is designed to report on conformance to an implementation guideline, but can also report syntactical errors. If 999 is being generated through multiple instances of the validator, the 999 should not report syntax errors.
The supported version is 1.2.0.
Note:  The 999 Validator acknowledges only a single functional group. If you expect an incoming document will contain multiple functional groups, you must use the function group splitter or iterator before the validation component.
EDI 999 Validator Properties
This validator component does not have any instance properties that you can specify when you create an instance of this validator component.
Supported Actions
 
Action
Description
Execute
Validates the incoming EDI document and generates a 999 response message.
Supported Action Parameters
 
Action
Parameter
Description
Execute
SourceMessage
Name of the DJMessage source object that references the incoming HIPAA document.
Execute
TargetMessage
Name of the DJMessage output object that references the outgoing 999 Function Acknowledgment. Also contains individual error information.
Supported Action Properties
 
Action
Property
Description
Execute
Acknowledgment Type
Type of acknowledgment that is required.
Execute
Schemas
Indicates the document schemas used to validate the HIPAA transaction.
Execute
SNIP types
SNIP Validation refers to a series of constraints that can be applied to EDI documents to ensure EDI data is HIPAA-compliant:
1 - Validate using SNIP level 1. SNIP Level 1 is EDI standards integrity testing such as valid segments, valid element data types and syntax.
2 - Validate using SNIP level 2. SNIP Level 2 requires testing repeat counts of segments and loops, used/not used, recommended/not recommended segments/elements, valid code values, intra-segment testing, HL parent/child relationships, HL, LX, ENT sequences.
3 - SNIP 3 validation validates the structure of the message segments against the document schemas. Additionally, it checks for balancing, which ensures that total amount, line item amounts, taxes, discounts, and other adjustments in the message are balanced and match the expected values.
= (equal sign) - Specify the action to take when an error is encountered for a SNIP type:
Info - Accept message with errors
Error - Reject message
Ignore - Do not validate SNIP type
Multiple values must be separated by a comma. For example, if you want to validate with SNIP types 1 and 2, and you want messages with errors to be accepted, you must enter 1, 2=info.
Execute
Max Errors per ST Segment
Maximum number of errors to be reported per ST segment/transaction set. The default value of 0 indicates no limit. If the value is set to anything else, at most that number of errors will be reported for each transaction set.
Execute
Allow Trailing Spaces
Normally, unnecessary trailing spaces are considered an error (unnecessary means trailing spaces not used as padding to reach the minimum allowed length). Setting this to true will ignore trailing space errors.
Execute
Reject Handling
Specify when to reject the entire functional group:
any - If any transaction sets are rejected, then the functional group is rejected.
all - If any transaction sets are not rejected (AK501 = 'A' or 'E'), then the functional group is partially accepted (AK901 = 'P').
Execute
Element Separator
Select the delimiter character to use as the element separator in the output message:
*
Copy from source - Use the value from the source message.
Execute
Segment Terminator
Provide the character that is used to mark the end of a segment in the output message:
~
Copy from source - Use the value from the source message.
Note:  If the segments in the source message are separated by <CR><LF>, the parser reports only the carriage return, and that will become the segment terminator.
Execute
Suffix
Select a string that will be written after each segment terminator:
<CR><LF>
<CR>
<LF>
None (default)
While any string can be entered, any character other than blank space characters results in an invalid message.
Execute
Component Element Separator
Select the delimiter character to use as the separator between components of a composite field:
:
Copy from source - Use the value from the source message.
Execute
Repetition Separator
Select the delimiter character that is used to separate repeated occurrences of an element:
^
Copy from source - Use the value from the source message.
Execute
Application Sender's Code
Specify the value to use for the Application Sender's Code in GS02 of the output message. If this is not specified, the Application Receiver's Code from GS03 of the source message is used.
Execute
Application Receiver's Code
Specify the value to use for the Application Receiver's Code in GS03 of the output message. If this is not specified, the Application Sender's Code from GS02 of the source message is used.
Execute
Group Control Number
Provide the value to use for the Group Control Number (GS06, GE02) in the GS and GE segments.
Execute
Write ISA Segment
Specify whether to write ISA and IEA segments or not:
True - Writes ISA and IEA segments.
False - Collate multiple responses into a single message.
Execute
Interchange Sender ID Qualifier
Specify the sender Interchange ID Qual (ISA05). If this is not set, the receiver qual (ISA07) from the source is used. This option is displayed if the Write ISA Segment option is set to True.
Execute
Interchange Sender ID
Specify the Sender ID to be used in ISA06. If this is not set, the Receiver ID (ISA08) from the source message is used. This option is displayed if the Write ISA Segment option is set to True.
Execute
Interchange Receiver ID Qualifier
Specify the receiver Interchange ID Qual (ISA07). If this is not set, the sender qual (ISA05) from the source is used. This option is displayed if the Write ISA Segment option is set to True.
Execute
Interchange Receiver ID
Specify the Receiver ID to be used in ISA08. If this is not set, the Sender ID (ISA06) from the source message is used. This option is displayed if the Write ISA Segment option is set to True.
Execute
Interchange Control Number
Specify the value to use for the Interchange Control Number (ISA13 and IEA02) in the ISA and IEA segments. This option is displayed if the Write ISA Segment option is set to True.
Errors
The EDI 999 Validator captures the following error conditions.
 
Error Code
Error Name
Description
0
B_OK
Indicates the validation was successful.
Check the resulting target message to determine if validation errors were detected.
4
B_READERR
Indicates there was a problem parsing the source message or running the 999 Validator.
20
B_BADFILETYPE
Indicates the source document is not a valid EDI document or is a different type than the schema.
33
B_BADOPTIONVALUE
Indicates an invalid value is used for one of the options.
44
B_NOTSUP
Indicates more than one function group (GS/GE pair, for example) was detected.
50
B_UNSPECIFIED
Indicates that an unexpected error has occurred.
Target Message
The target message body contains:
999 message.
Properties that describe the results.
One attachment message for each error that is detected.
The following table provides the properties that are set for the target message.
Name
Type
Description
errorCount
int
The number of fatal errors.
warningCount
int
The number of warning errors.
totalErrorCount
int
The total number of errors (fatal + warnings).
The response message contains a message attachment for each error found. The body of each attachment provides a description of the particular error. It contains the following properties that describe the error.
Name
Type
Description
severity
string
Indicates the error severity:
ERROR
INFO (a warning)
category
string
Indicates the error condition. These are strings indicating an error noted in either AK/IK304 or AK/IK 403. The following values may occur:
Name AK304 value AK403 value
UNRECOGNIZED_SEGMENT_ID 1
UNEXPECTED_SEGMENT 2
REQUIRED_SEGMENT_MISSING 3
LOOP_OCCURS_TOO_MANY_TIMES 4
SEGMENT_EXCEEDS_MAXIMUM_USE 5
SEGMENT_NOT_IN_TS 6
SEGMENT_OUT_OF_ORDER 7
IMPL_NOT_USED_SEGMENT_PRESENT I4
IMPL_DEPENDENT_SEGMENT_MISSING I6
IMPL_LOOP_OCCURS_TOO_FEW_TIMES I7
IMPL_SEGMENT_BELOW_MINIMUM_USE I8
IMPL_DEPENDENT_NOT_USED_SEGMENT_PRESENT I9
REQUIRED_DATA_ELEMENT_MISSING 8 1
CONDITIONAL_REQUIRED_DATA_ELEMENT_MISSING 8 2
TOO_MANY_DATA_ELEMENTS 8 3
DATA_ELEMENT_TOO_SHORT 8 4
DATA_ELEMENT_TOO_LONG 8 5
INVALID_CHARACTER_IN_ELEMENT 8 6
INVALID_CODE_VALUE 8 7
INVALID_DATE 8 8
INVALID_TIME 8 9
EXCLUSION_CONDITION_VIOLATED 8 10
TOO_MANY_REPETITIONS 8 12
TOO_MANY_COMPONENTS 8 13
IMPL_NOT_USED_DATA_ELEMENT_PRESENT 8 I10
IMPL_TOO_FEW_REPITITIONS 8 I11
IMPL_PATTERN_MATCH_FAILURE 8 I12
IMPL_DEPENDENT_NOT_USED_DATA_ELEMENT_PRESENT 8 I13
CODE_VALUE_NOT_USED_IN_IMPLEMENTATION 8 I6
IMPL_DEPENDENT_DATA_ELEMENT_MISSING 8 I9
segmentNumber
int
Indicates the segment number (starting from 1) that contains the error.
segmentId
string
Provides the segment ID of the segment that contains the error.
elementPosition
int
Indicates the position in the segment of the element that contains the error, if known. If it is not known (or not applicable), this property is not set.
compositePosition
int
Indicates the position within the composite of the error. If the error is not in a composite, this property is not set. The first position is 1.
repeatPosition
int
If the error occurs in a repeating element, this property contains the repetition number (starting from 1) where the error occurred. If the error is not in a repeating element, this property is not set.
Note:  You can retrieve the error message attachments using EZScript (through a script step after the validation step or in the stop step of the process). A sample EZScript is provided in the next section that creates a file from the 999 response message content (variable is named msgOut) and one file for each error message.
Sample EZScript
The following is a sample EZScript that retrieves the validator response message and the error message attachments.
'Log the response message property count
 For i = 0 to msgOut.PropertiesCount - 1
    LogMessage("INFO", "Property Name: " & msgOut.PropertyNames(i) & ", Property Value: " & msgOut.Properties(i))
 Next i
'Write the response message body to a file (this is either the 999 acknowledgement)
FileWrite(MacroExpand("$(TRG)") & "/response_body.txt", msgOut.body)
'Log the error attachment count
 Dim attachedMsg as DJMessage
 LogMessage("INFO", "msgOut attachment count: " & msgOut.AttachmentCount())
'Run through any attachments and create files (one per error) from the attachment body and it's properties
 For i = 0 to msgOut.AttachmentCount() - 1
    'Return the attachment by index
    Set attachedMsg = msgOut.GetAttachment(i)
    LogMessage("INFO", "attachedMsg property count: " & attachedMsg.PropertiesCount())
    Dim props
    props = ""
    For j = 0 to attachedMsg.PropertiesCount - 1
        props = props & ("Property Name: " & attachedMsg.PropertyNames(j) & ", Property Value: " & attachedMsg.Properties(j) & chr(13) & chr(10))
    Next j
    FileWrite(MacroExpand("$(TRG)") & "/error_attachment_" & i & ".txt", attachedMsg.body & chr(13) & chr(10) & props)
Next i
Error File Content
The sample EZScript produces a 999 response file and the content of each error file is similar to the following:
The segment 'REF' is invalid in Loop.Message
Property Name: category, Property Value: SEGMENT_NOT_IN_TS
Property Name: segmentId, Property Value: REF
Property Name: segmentNumber, Property Value: 14
Property Name: severity, Property Value: ERROR
Last modified date: 12/03/2024