PXCOMPACTHL7 ;MNT/GN - COMPACT Act EOC file HL7 external API call;06/26/23 10:26 AM
;;1.0;PCE PATIENT CARE ENCOUNTER;**241**;Aug 12, 1996;Build 31
; Reference to $$HLDATE^HLFNC in ICR #10106
; For External packages calling into get our segment vs a subscriber of an outgoing HL7 protocol server.
Q
;
;**** External API call (ZCAAPI) only returns a ZCA HL7 set of segments in array form for COMPACT ACT EOC file data.
ZCAAPI(DFN,FS,ZCA) ;External API end point to return a COMPACT ACT EOC ZCA HL7 segment array for a given patient
; DFN = Patient DFN (req)
; FS = HL7 field delimiter you need in ZCA array
; ZCA = array returned by reference name if returned array $D(array)=0, then there is no EOC data on file for the patient DFN requested.
;
S FS=$S($G(FS)="":"|",1:FS) ;default field delimiter TO "|" for ZCA seg if not passed in
D ZCA(DFN,FS,.ZCA)
Q
;Build ZCA segments from List
ZCA(DFN,FS,ZCA) ;Get text for a current EOC file #818 entry and add to ZCA array
; DFN = Patient number
; ZCA = ZCA HL7 return array
; FS = field separator character assumed to be supplied by external API call or by an HL7 protocol calling this tag
N NUM,PXC
; GET EPISODE DATA USING API WITH DFN PARAM
D EXTRACT^PXCOMPACTAPI(DFN,.PXC) ;
I '$D(PXC) Q ;;;can add this error segment and quit, if preferred --> S ZCA="ZCA"_FS_"1"_FS_"ERROR - PATIENT "_DFN_" HAS NO EOC FILE DATA" Q
S NUM=$O(PXC("EPISODE",":"),-1) Q:'NUM ;get last episode only
;
S ZCA(1)="ZCA"_FS_1
S $P(ZCA(1),FS,3)=$G(PXC("EOC OPEN/CLOSE FLAG"))
S $P(ZCA(1),FS,4)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"EPISODE START DATE"),"DT")
S $P(ZCA(1),FS,5)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"EPISODE END DATE"),"DT")
S $P(ZCA(1),FS,6)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"INPATIENT BENEFIT END DATE"),"DT")
S $P(ZCA(1),FS,7)=$G(PXC("EPISODE",NUM,"REMAINING INPATIENT DAYS"))
S $P(ZCA(1),FS,8)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"OUTPATIENT BENEFIT END DATE"),"DT")
S $P(ZCA(1),FS,9)=$G(PXC("EPISODE",NUM,"REMAINING OUTPATIENT DAYS"))
S $P(ZCA(1),FS,10)=$G(PXC("EPISODE",NUM,"SOURCE OF CRISIS END"))
S $P(ZCA(1),FS,11)=$G(PXC("EPISODE",NUM,"EPISODE FINAL STATUS"))
;episode sequence
S $P(ZCA(1),FS,12)=NUM
;
;if EPISODE FINAL STATUS is Entered in Error, send ZCA(2) with the last valid episode information (not Error)
I $G(PXC("EPISODE",NUM,"EPISODE FINAL STATUS"))="E" D
. F S NUM=$O(PXC("EPISODE",NUM),-1) Q:($G(ZCA(2)))!(NUM="") D
. . I PXC("EPISODE",NUM,"EPISODE FINAL STATUS")="E" Q
. . S ZCA(2)="ZCA"_FS_2
. . S $P(ZCA(2),FS,3)=$G(PXC("EOC OPEN/CLOSE FLAG"))
. . S $P(ZCA(2),FS,4)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"EPISODE START DATE"),"DT")
. . S $P(ZCA(2),FS,5)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"EPISODE END DATE"),"DT")
. . S $P(ZCA(2),FS,6)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"INPATIENT BENEFIT END DATE"),"DT")
. . S $P(ZCA(2),FS,7)=$G(PXC("EPISODE",NUM,"REMAINING INPATIENT DAYS"))
. . S $P(ZCA(2),FS,8)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"OUTPATIENT BENEFIT END DATE"),"DT")
. . S $P(ZCA(2),FS,9)=$G(PXC("EPISODE",NUM,"REMAINING OUTPATIENT DAYS"))
. . S $P(ZCA(2),FS,10)=$G(PXC("EPISODE",NUM,"SOURCE OF CRISIS END"))
. . S $P(ZCA(2),FS,11)=$G(PXC("EPISODE",NUM,"EPISODE FINAL STATUS"))
. . ;episode sequence
. . S $P(ZCA(2),FS,12)=NUM
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPXCOMPACTHL7 3344 printed Jan 29, 2026@15:27:04 Page 2
PXCOMPACTHL7 ;MNT/GN - COMPACT Act EOC file HL7 external API call;06/26/23 10:26 AM
+1 ;;1.0;PCE PATIENT CARE ENCOUNTER;**241**;Aug 12, 1996;Build 31
+2 ; Reference to $$HLDATE^HLFNC in ICR #10106
+3 ; For External packages calling into get our segment vs a subscriber of an outgoing HL7 protocol server.
+4 QUIT
+5 ;
+6 ;**** External API call (ZCAAPI) only returns a ZCA HL7 set of segments in array form for COMPACT ACT EOC file data.
ZCAAPI(DFN,FS,ZCA) ;External API end point to return a COMPACT ACT EOC ZCA HL7 segment array for a given patient
+1 ; DFN = Patient DFN (req)
+2 ; FS = HL7 field delimiter you need in ZCA array
+3 ; ZCA = array returned by reference name if returned array $D(array)=0, then there is no EOC data on file for the patient DFN requested.
+4 ;
+5 ;default field delimiter TO "|" for ZCA seg if not passed in
SET FS=$SELECT($GET(FS)="":"|",1:FS)
+6 DO ZCA(DFN,FS,.ZCA)
+7 QUIT
+8 ;Build ZCA segments from List
ZCA(DFN,FS,ZCA) ;Get text for a current EOC file #818 entry and add to ZCA array
+1 ; DFN = Patient number
+2 ; ZCA = ZCA HL7 return array
+3 ; FS = field separator character assumed to be supplied by external API call or by an HL7 protocol calling this tag
+4 NEW NUM,PXC
+5 ; GET EPISODE DATA USING API WITH DFN PARAM
+6 ;
DO EXTRACT^PXCOMPACTAPI(DFN,.PXC)
+7 ;;;can add this error segment and quit, if preferred --> S ZCA="ZCA"_FS_"1"_FS_"ERROR - PATIENT "_DFN_" HAS NO EOC FILE DATA" Q
IF '$DATA(PXC)
QUIT
+8 ;get last episode only
SET NUM=$ORDER(PXC("EPISODE",":"),-1)
if 'NUM
QUIT
+9 ;
+10 SET ZCA(1)="ZCA"_FS_1
+11 SET $PIECE(ZCA(1),FS,3)=$GET(PXC("EOC OPEN/CLOSE FLAG"))
+12 SET $PIECE(ZCA(1),FS,4)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"EPISODE START DATE"),"DT")
+13 SET $PIECE(ZCA(1),FS,5)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"EPISODE END DATE"),"DT")
+14 SET $PIECE(ZCA(1),FS,6)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"INPATIENT BENEFIT END DATE"),"DT")
+15 SET $PIECE(ZCA(1),FS,7)=$GET(PXC("EPISODE",NUM,"REMAINING INPATIENT DAYS"))
+16 SET $PIECE(ZCA(1),FS,8)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"OUTPATIENT BENEFIT END DATE"),"DT")
+17 SET $PIECE(ZCA(1),FS,9)=$GET(PXC("EPISODE",NUM,"REMAINING OUTPATIENT DAYS"))
+18 SET $PIECE(ZCA(1),FS,10)=$GET(PXC("EPISODE",NUM,"SOURCE OF CRISIS END"))
+19 SET $PIECE(ZCA(1),FS,11)=$GET(PXC("EPISODE",NUM,"EPISODE FINAL STATUS"))
+20 ;episode sequence
+21 SET $PIECE(ZCA(1),FS,12)=NUM
+22 ;
+23 ;if EPISODE FINAL STATUS is Entered in Error, send ZCA(2) with the last valid episode information (not Error)
+24 IF $GET(PXC("EPISODE",NUM,"EPISODE FINAL STATUS"))="E"
Begin DoDot:1
+25 FOR
SET NUM=$ORDER(PXC("EPISODE",NUM),-1)
if ($GET(ZCA(2)))!(NUM="")
QUIT
Begin DoDot:2
+26 IF PXC("EPISODE",NUM,"EPISODE FINAL STATUS")="E"
QUIT
+27 SET ZCA(2)="ZCA"_FS_2
+28 SET $PIECE(ZCA(2),FS,3)=$GET(PXC("EOC OPEN/CLOSE FLAG"))
+29 SET $PIECE(ZCA(2),FS,4)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"EPISODE START DATE"),"DT")
+30 SET $PIECE(ZCA(2),FS,5)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"EPISODE END DATE"),"DT")
+31 SET $PIECE(ZCA(2),FS,6)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"INPATIENT BENEFIT END DATE"),"DT")
+32 SET $PIECE(ZCA(2),FS,7)=$GET(PXC("EPISODE",NUM,"REMAINING INPATIENT DAYS"))
+33 SET $PIECE(ZCA(2),FS,8)=$$HLDATE^HLFNC(PXC("EPISODE",NUM,"OUTPATIENT BENEFIT END DATE"),"DT")
+34 SET $PIECE(ZCA(2),FS,9)=$GET(PXC("EPISODE",NUM,"REMAINING OUTPATIENT DAYS"))
+35 SET $PIECE(ZCA(2),FS,10)=$GET(PXC("EPISODE",NUM,"SOURCE OF CRISIS END"))
+36 SET $PIECE(ZCA(2),FS,11)=$GET(PXC("EPISODE",NUM,"EPISODE FINAL STATUS"))
+37 ;episode sequence
+38 SET $PIECE(ZCA(2),FS,12)=NUM
End DoDot:2
End DoDot:1
+39 QUIT