837
837 Shovel Expressions are used as part of the claims processing workflow. Professional / Instituation claims come in 837p or 837i X12 formats.
Modify NM108 in Loop2010BA to have the value “ZZ” in split claim
atFieldModify(<builtin:document/primary|builtin:key/data/segments|builtin:array|builtin:key/2000B|builtin:array|builtin:key/2010BA|builtin:array|builtin:key/NM108/value>,\"ZZ\")
Get CLM01 from inside Loop 2300 which can show up in 2 different places, by using the x12/837i (or x12/837p) schema it automatically looks at all possible locations
Notice
The readField remains the same while the first argument to atFieldRead is what changes.
getElemAt(flatten(atFieldRead(<builtin:document/primary|x12/837i:claimId>))),0)
Get HCP01 from inside Loop 2300 which can show up in 3 different places.
getElemAt(flatten(atFieldRead(<builtin:document/primary|x12/837i:loop2300|x12:segment/HCP01|x12:element/HCP01>))),0)
Modify HCP13 based on value of HCP01
atFieldModify(<builtin:document/primary|x12/837i:loop2300>, let hcp01 = readField(<x12:segment/HCP|x12:element/HCP01>) in let hcp13 = readField(<x12:segment/HCP|x12:element/HCP13>) in atFieldModify(<x12:segment/HCP|x12:element/HCP13>, if (eqString(hcp01, \"00\"), \"T1\", hcp13)))
Note
A trickier approach as above will need to be used if Loop 2300 can show up in multiple places.
Get Network Claim ID in Loop 2300 REF F8
readField(<builtin:document/primary(<builtin:document/primary|x12/837i:loop2300|x12:qualified_segment/REF01=F8|x12:element/REF02>)
Note
A trickier approach as above will need to be used if Loop 2300 can show up in multiple places.
Set MacroHealth Claim ID in Loop 2300 REF F8
atFieldModify(<builtin:key/context>, let x = readField(<builtin:key/mhClaimId/data/mhClaimId>) in atFieldModify(<builtin:key/primary|x12/837i:loop2300|x12:qualified_segment/REF01=F8|x12:element/REF02>, x))
Note
A trickier approach as above will need to be used if Loop 2300 can show up in multiple places.
Sprinkling (approximation - confirm before use)
atFieldModify(<builtin:document/primary|x12/837i:loop2300>, let loop2300HcpSegment = getElemAt(readField(<x12:segment/HCP>), 0) in let coveragePercent = divide(getElemAt(readField(<x12:segment/HCP|x12:element/HCP02>), 0), getElemAt(readField(<x12:segment/CLM|x12:element/CLM02>), 0)) in atFieldModify(<x12:loop/2400>, if(eqString(getElemAt(readField(<x12:segment/HCP|x12:element/HCP02>), 0), null), insertIntoLoop(getContext(), let newHcp02 = multiply(getElemAt(readField(<x12:segment/SV2|x12:elementSV203>), 0), coveragePercent) in upsertJsonKey(upsertJsonKey(upsertJsonKey(loop2300HcpSegment, "HCP02", newHcp02), "HCP03", subtract(getElemAt(readField(<x12:segment/SV2|x12:element/SV203>), 0), newHcp02)), "position", 24920)), getContext())))