IBARXCSH ;ALB/CLT-CERNER RXCOPAY SEND DSR-QO3 MESSAGE ; 19 Feb 2021
;;2.0;INTEGRATED BILLING;**676,717,726**;21-MAR-94;Build 1
;
; Build and return/send seeding of Vista data to Cerner IBARXC-QRYRESP DSR^Q03
;
EN(ICN,IBIEN,DATEQ) ;ENTRY POINT
; IBIEN - Query Request Message IEN (#778) that initiated this response
;
N PARMS,SEG,MSG,VALUE,FIELD,QRYNUM,SERROR,SERR,NAME,ERROR,DFN,XXX,WHOTO
S DFN=$$DFN^IBARXMU(ICN)
I +DFN<0 S SERROR="NO PATIENT FOUND WITH SUBMITTED ICN",SERR=1
S QRYNUM=$$MSGID^HLOPRS(IBIEN) ; Message Control ID of initiating Query
S:$G(SERR)="" SERR=0
MSH ;
N PARMS K ^TMP("DSR")
S PARMS("COUNTRY")="USA"
S PARMS("MESSAGE TYPE")="DSR"
S PARMS("EVENT")="Q03"
S PARMS("SENDING APPLICATION")="IBARXC-QRYRESP"
S PARMS("VERSION")="2.3"
S PARMS("MESSAGE STRUCTURE")="DSR_Q03"
S MSG="^TMP("_"DSR"
S X=$$NEWMSG^HLOAPI(.PARMS,.MSG,.ERROR)
MSA ;
S VALUE="MSA",FIELD=0 D SET^HLOAPI(.SEG,VALUE,FIELD)
S VALUE="AL",FIELD=1 D SET^HLOAPI(.SEG,VALUE,FIELD)
S VALUE=QRYNUM,FIELD=2 D SET^HLOAPI(.SEG,VALUE,FIELD)
S X=$$ADDSEG^HLOAPI(.MSG,.SEG,.ERROR)
QRD ;
S VALUE="QRD",FIELD=0 D SET^HLOAPI(.SEG,VALUE,FIELD)
S %P1=$$NOW^XLFDT() S %P1=$$FMTHL7^XLFDT(%P1)
S VALUE=%P1,FIELD=1 D SET^HLOAPI(.SEG,VALUE,FIELD)
S VALUE=1,FIELD=2 D SET^HLOAPI(.SEG,VALUE,FIELD)
S VALUE=1,FIELD=3 D SET^HLOAPI(.SEG,VALUE,FIELD)
S VALUE=QRYNUM,FIELD=4 D SET^HLOAPI(.SEG,VALUE,FIELD)
S VALUE=1,FIELD=7 D SET^HLOAPI(.SEG,VALUE,FIELD)
S NAME=$$GET1^DIQ(2,DFN_",",.01)
S VALUE=$P($G(NAME),",",1),FIELD=8 D SET^HLOAPI(.SEG,VALUE,FIELD,1)
S VALUE=$P($G(NAME),",",2),FIELD=8 D SET^HLOAPI(.SEG,VALUE,FIELD,2)
S VALUE=ICN,FIELD=9 D SET^HLOAPI(.SEG,VALUE,FIELD)
S FIELD=11
S VALUE=$P(DATEQ,"^",1) D SET^HLOAPI(.SEG,VALUE,FIELD,1)
S VALUE=$P(DATEQ,"^",2) D SET^HLOAPI(.SEG,VALUE,FIELD,2)
S X=$$ADDSEG^HLOAPI(.MSG,.SEG,.ERROR)
DSPLOOP ;LOOP THROUGH THE DSP FOR ALL OR THE LAST TRANSACTION
N BDATE,EDATE,IBLOOP,DTY,FOUND1,IEN
S DTY=($P(DATEQ,"^",2)-1700)
S BDATE=$E(DTY,1,3)_"0000" ;BEGINNING OF DATE RANGR
S EDATE=$E(DTY,1,3)_"1231" ;ENDING OF DATE RANGE
I SERR=1 G DSP
S FOUND1=0,IBLOOP=0,IEN=0
F S BDATE=$O(^IBAM(354.71,"AD",DFN,BDATE)) Q:BDATE=""!(BDATE>EDATE) D
. F S IEN=$O(^IBAM(354.71,"AD",DFN,BDATE,IEN)) Q:IEN="" D
. . S IBLOOP=IBLOOP+1
. . D DSP
. . Q
. Q
I 'FOUND1 S SERROR="NO PHARMACY COPAY TRANSACTION DATA",SERR=1 D DSP
G END
Q
;
DSP ;
I IBLOOP=0 S IBLOOP=1
D SET^HLOAPI(.SEG,"DSP",0),SET^HLOAPI(.SEG,IBLOOP,1)
I $G(SERR)=1 D ERR G END
DSP1 ;
N NODE0,FACID,FACID1,TRANSID,TCHRG,BILLED,UNBILLED,ADATE
N YDATE,STAT,UNITS,DESC,RXNUM,PARENT,SITENM,X
S NODE0=^IBAM(354.71,IEN,0)
;Null Unbilled issue
I $P(NODE0,"^",12)="" S NODE0=$$NULLFIX(IEN,NODE0)
S FACID=+$$SITE^VASITE
S FACID1=$P(NODE0,"^",13)
Q:FACID1'=FACID
S FOUND1=1
D SET^HLOAPI(.SEG,"FT1",3,1)
S TRANSID=$P(NODE0,"^",1)
D SET^HLOAPI(.SEG,TRANSID,3,2)
S ADATE=$P(NODE0,"^",3)
S YDATE=($E(ADATE,1,3)+1700)_$E(ADATE,4,7)
D SET^HLOAPI(.SEG,YDATE,3,4)
D SET^HLOAPI(.SEG,"T",3,6)
S STAT=$P(NODE0,"^",5)
S STAT=$S(STAT="P":"C",STAT="Y":"X",STAT="X":"X",1:"C")
D SET^HLOAPI(.SEG,STAT,3,7)
S DESC=$P(NODE0,"^",9)
S DESC=$$BDESC^IBARXCHL(DESC)
S RXNUM=$P(NODE0,"^",6)
S TCHRG=$P(NODE0,"^",8)
S BILLED=$P(NODE0,"^",11)
S UNBILLED=$P(NODE0,"^",12)
S UNITS=$P(NODE0,"^",7)
;NEED FACILITY IEN TO GET FACILITY NAME
S SITENM=$$FAC^IBARXMU($P(NODE0,"^",13))
;FIND PARENT ID
S PARENT=$P(NODE0,"^",10)
I PARENT="" S PARENT=IEN
S PARENT=$$GET1^DIQ(354.71,PARENT_",",.01,"E")
S FIELD=3
D SET^HLOAPI(.SEG,DESC,FIELD,10)
D SET^HLOAPI(.SEG,RXNUM,FIELD,11)
D SET^HLOAPI(.SEG,+TCHRG,FIELD,12)
D SET^HLOAPI(.SEG,+BILLED,FIELD,13)
D SET^HLOAPI(.SEG,+UNBILLED,FIELD,14)
D SET^HLOAPI(.SEG,UNITS,FIELD,15)
D SET^HLOAPI(.SEG,PARENT,FIELD,17)
D SET^HLOAPI(.SEG,$P(SITENM,"^",2),FIELD,18)
D SET^HLOAPI(.SEG,$P(SITENM,"^",1),FIELD,18,2)
S VALUE="",FIELD=5 D SET^HLOAPI(.SEG,VALUE,FIELD)
S X=$$ADDSEG^HLOAPI(.MSG,.SEG,.ERROR)
Q
;
NULLFIX(IEN,NODE0) ;The IBEDIT function will all Null values to be passed in Unbilled value
;set NODE0 piece 12 to 0, then set field .12 to 0 to ensure proper data transmission
N DIEN
I $P(NODE0,"^",12)="" S $P(NODE0,"^",12)=0
;Now set data field .12 in 354.71 to 0
S DIEN=IEN_","
S IBFDA(354.71,DIEN,.12)=0
D FILE^DIE(,"IBFDA","IBERR")
Q NODE0
;
END ;
S WHOTO("RECEIVING APPLICATION")="IBARXC-QRY"
S WHOTO("STATION NUMBER")="200CRNR"
S WHOTO("MIDDLEWARE LINK NAME")="IBARXCVDF"
S XXX=$$SENDONE^HLOAPI1(.MSG,.PARMS,.WHOTO,.ERROR)
Q
;
ERR ;ERROR PROCESSING
N BLANK,VALUE,I
S BLANK="" F I=1:1:18 D SET^HLOAPI(.SEG,BLANK,3,I)
S VALUE=SERROR D SET^HLOAPI(.SEG,VALUE,5)
S X=$$ADDSEG^HLOAPI(.MSG,.SEG,.ERROR)
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBARXCSH 4805 printed Oct 16, 2024@18:07:44 Page 2
IBARXCSH ;ALB/CLT-CERNER RXCOPAY SEND DSR-QO3 MESSAGE ; 19 Feb 2021
+1 ;;2.0;INTEGRATED BILLING;**676,717,726**;21-MAR-94;Build 1
+2 ;
+3 ; Build and return/send seeding of Vista data to Cerner IBARXC-QRYRESP DSR^Q03
+4 ;
EN(ICN,IBIEN,DATEQ) ;ENTRY POINT
+1 ; IBIEN - Query Request Message IEN (#778) that initiated this response
+2 ;
+3 NEW PARMS,SEG,MSG,VALUE,FIELD,QRYNUM,SERROR,SERR,NAME,ERROR,DFN,XXX,WHOTO
+4 SET DFN=$$DFN^IBARXMU(ICN)
+5 IF +DFN<0
SET SERROR="NO PATIENT FOUND WITH SUBMITTED ICN"
SET SERR=1
+6 ; Message Control ID of initiating Query
SET QRYNUM=$$MSGID^HLOPRS(IBIEN)
+7 if $GET(SERR)=""
SET SERR=0
MSH ;
+1 NEW PARMS
KILL ^TMP("DSR")
+2 SET PARMS("COUNTRY")="USA"
+3 SET PARMS("MESSAGE TYPE")="DSR"
+4 SET PARMS("EVENT")="Q03"
+5 SET PARMS("SENDING APPLICATION")="IBARXC-QRYRESP"
+6 SET PARMS("VERSION")="2.3"
+7 SET PARMS("MESSAGE STRUCTURE")="DSR_Q03"
+8 SET MSG="^TMP("_"DSR"
+9 SET X=$$NEWMSG^HLOAPI(.PARMS,.MSG,.ERROR)
MSA ;
+1 SET VALUE="MSA"
SET FIELD=0
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+2 SET VALUE="AL"
SET FIELD=1
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+3 SET VALUE=QRYNUM
SET FIELD=2
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+4 SET X=$$ADDSEG^HLOAPI(.MSG,.SEG,.ERROR)
QRD ;
+1 SET VALUE="QRD"
SET FIELD=0
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+2 SET %P1=$$NOW^XLFDT()
SET %P1=$$FMTHL7^XLFDT(%P1)
+3 SET VALUE=%P1
SET FIELD=1
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+4 SET VALUE=1
SET FIELD=2
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+5 SET VALUE=1
SET FIELD=3
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+6 SET VALUE=QRYNUM
SET FIELD=4
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+7 SET VALUE=1
SET FIELD=7
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+8 SET NAME=$$GET1^DIQ(2,DFN_",",.01)
+9 SET VALUE=$PIECE($GET(NAME),",",1)
SET FIELD=8
DO SET^HLOAPI(.SEG,VALUE,FIELD,1)
+10 SET VALUE=$PIECE($GET(NAME),",",2)
SET FIELD=8
DO SET^HLOAPI(.SEG,VALUE,FIELD,2)
+11 SET VALUE=ICN
SET FIELD=9
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+12 SET FIELD=11
+13 SET VALUE=$PIECE(DATEQ,"^",1)
DO SET^HLOAPI(.SEG,VALUE,FIELD,1)
+14 SET VALUE=$PIECE(DATEQ,"^",2)
DO SET^HLOAPI(.SEG,VALUE,FIELD,2)
+15 SET X=$$ADDSEG^HLOAPI(.MSG,.SEG,.ERROR)
DSPLOOP ;LOOP THROUGH THE DSP FOR ALL OR THE LAST TRANSACTION
+1 NEW BDATE,EDATE,IBLOOP,DTY,FOUND1,IEN
+2 SET DTY=($PIECE(DATEQ,"^",2)-1700)
+3 ;BEGINNING OF DATE RANGR
SET BDATE=$EXTRACT(DTY,1,3)_"0000"
+4 ;ENDING OF DATE RANGE
SET EDATE=$EXTRACT(DTY,1,3)_"1231"
+5 IF SERR=1
GOTO DSP
+6 SET FOUND1=0
SET IBLOOP=0
SET IEN=0
+7 FOR
SET BDATE=$ORDER(^IBAM(354.71,"AD",DFN,BDATE))
if BDATE=""!(BDATE>EDATE)
QUIT
Begin DoDot:1
+8 FOR
SET IEN=$ORDER(^IBAM(354.71,"AD",DFN,BDATE,IEN))
if IEN=""
QUIT
Begin DoDot:2
+9 SET IBLOOP=IBLOOP+1
+10 DO DSP
+11 QUIT
End DoDot:2
+12 QUIT
End DoDot:1
+13 IF 'FOUND1
SET SERROR="NO PHARMACY COPAY TRANSACTION DATA"
SET SERR=1
DO DSP
+14 GOTO END
+15 QUIT
+16 ;
DSP ;
+1 IF IBLOOP=0
SET IBLOOP=1
+2 DO SET^HLOAPI(.SEG,"DSP",0)
DO SET^HLOAPI(.SEG,IBLOOP,1)
+3 IF $GET(SERR)=1
DO ERR
GOTO END
DSP1 ;
+1 NEW NODE0,FACID,FACID1,TRANSID,TCHRG,BILLED,UNBILLED,ADATE
+2 NEW YDATE,STAT,UNITS,DESC,RXNUM,PARENT,SITENM,X
+3 SET NODE0=^IBAM(354.71,IEN,0)
+4 ;Null Unbilled issue
+5 IF $PIECE(NODE0,"^",12)=""
SET NODE0=$$NULLFIX(IEN,NODE0)
+6 SET FACID=+$$SITE^VASITE
+7 SET FACID1=$PIECE(NODE0,"^",13)
+8 if FACID1'=FACID
QUIT
+9 SET FOUND1=1
+10 DO SET^HLOAPI(.SEG,"FT1",3,1)
+11 SET TRANSID=$PIECE(NODE0,"^",1)
+12 DO SET^HLOAPI(.SEG,TRANSID,3,2)
+13 SET ADATE=$PIECE(NODE0,"^",3)
+14 SET YDATE=($EXTRACT(ADATE,1,3)+1700)_$EXTRACT(ADATE,4,7)
+15 DO SET^HLOAPI(.SEG,YDATE,3,4)
+16 DO SET^HLOAPI(.SEG,"T",3,6)
+17 SET STAT=$PIECE(NODE0,"^",5)
+18 SET STAT=$SELECT(STAT="P":"C",STAT="Y":"X",STAT="X":"X",1:"C")
+19 DO SET^HLOAPI(.SEG,STAT,3,7)
+20 SET DESC=$PIECE(NODE0,"^",9)
+21 SET DESC=$$BDESC^IBARXCHL(DESC)
+22 SET RXNUM=$PIECE(NODE0,"^",6)
+23 SET TCHRG=$PIECE(NODE0,"^",8)
+24 SET BILLED=$PIECE(NODE0,"^",11)
+25 SET UNBILLED=$PIECE(NODE0,"^",12)
+26 SET UNITS=$PIECE(NODE0,"^",7)
+27 ;NEED FACILITY IEN TO GET FACILITY NAME
+28 SET SITENM=$$FAC^IBARXMU($PIECE(NODE0,"^",13))
+29 ;FIND PARENT ID
+30 SET PARENT=$PIECE(NODE0,"^",10)
+31 IF PARENT=""
SET PARENT=IEN
+32 SET PARENT=$$GET1^DIQ(354.71,PARENT_",",.01,"E")
+33 SET FIELD=3
+34 DO SET^HLOAPI(.SEG,DESC,FIELD,10)
+35 DO SET^HLOAPI(.SEG,RXNUM,FIELD,11)
+36 DO SET^HLOAPI(.SEG,+TCHRG,FIELD,12)
+37 DO SET^HLOAPI(.SEG,+BILLED,FIELD,13)
+38 DO SET^HLOAPI(.SEG,+UNBILLED,FIELD,14)
+39 DO SET^HLOAPI(.SEG,UNITS,FIELD,15)
+40 DO SET^HLOAPI(.SEG,PARENT,FIELD,17)
+41 DO SET^HLOAPI(.SEG,$PIECE(SITENM,"^",2),FIELD,18)
+42 DO SET^HLOAPI(.SEG,$PIECE(SITENM,"^",1),FIELD,18,2)
+43 SET VALUE=""
SET FIELD=5
DO SET^HLOAPI(.SEG,VALUE,FIELD)
+44 SET X=$$ADDSEG^HLOAPI(.MSG,.SEG,.ERROR)
+45 QUIT
+46 ;
NULLFIX(IEN,NODE0) ;The IBEDIT function will all Null values to be passed in Unbilled value
+1 ;set NODE0 piece 12 to 0, then set field .12 to 0 to ensure proper data transmission
+2 NEW DIEN
+3 IF $PIECE(NODE0,"^",12)=""
SET $PIECE(NODE0,"^",12)=0
+4 ;Now set data field .12 in 354.71 to 0
+5 SET DIEN=IEN_","
+6 SET IBFDA(354.71,DIEN,.12)=0
+7 DO FILE^DIE(,"IBFDA","IBERR")
+8 QUIT NODE0
+9 ;
END ;
+1 SET WHOTO("RECEIVING APPLICATION")="IBARXC-QRY"
+2 SET WHOTO("STATION NUMBER")="200CRNR"
+3 SET WHOTO("MIDDLEWARE LINK NAME")="IBARXCVDF"
+4 SET XXX=$$SENDONE^HLOAPI1(.MSG,.PARMS,.WHOTO,.ERROR)
+5 QUIT
+6 ;
ERR ;ERROR PROCESSING
+1 NEW BLANK,VALUE,I
+2 SET BLANK=""
FOR I=1:1:18
DO SET^HLOAPI(.SEG,BLANK,3,I)
+3 SET VALUE=SERROR
DO SET^HLOAPI(.SEG,VALUE,5)
+4 SET X=$$ADDSEG^HLOAPI(.MSG,.SEG,.ERROR)
+5 QUIT