- DGENQRY1 ;ALB/CJM - API for ENROLLMENT QUERIES (continued); 4-SEP-97 ; 5/14/02 9:57am
- ;;5.3;REGISTRATION;**147,232,363,472,989**;Aug 13,1993;Build 5
- ;
- BATCH ;
- ;Description: This procedure will re-send all queries still outstanding
- ;with status of TRANSMITTED with QUERY DT/TM of more than 2 days in the
- ;past.
- ;
- ;Input:
- ; None
- ;Output:
- ; The ENROLLMENT QUERY LOG file is updated with all the query activity. New queries to HEC are generated where necessary.
- ;
- N QRY,DATE
- S DATE=$$FMADD^XLFDT(DT,-2)
- F S DATE=$O(^DGEN(27.12,"ADS",DATE),-1) Q:'DATE D
- .S QRY=0
- .F S QRY=$O(^DGEN(27.12,"ADS",DATE,QRY)) Q:'QRY D
- ..I '$$RESEND(QRY) ;then something went wrong, but continue
- Q
- ;
- RECEIVE(IEN,ERRORMSG,RMSGID) ;
- ;Description: This function will update the query log to show status
- ;RECEIVED. If the NOTIFY field is contains a user to notify, it will
- ;also send the notification message.
- ;Input:
- ; IEN - internal entry number of a record in the ENROLLMENT QUERY LOG
- ; ERRORMSG - error message to include in notification (optional)
- ; RMSGID - message id from the response
- ;
- ;Output:
- ; Function Value - 1 if successful, 0 otherwise.
- ;
- N SUCCESS,DGQRY,DATA,IEN2,DGQRY2
- S SUCCESS=0
- ;
- D
- .Q:'$G(IEN)
- .Q:'$$GET^DGENQRY(IEN,.DGQRY)
- .;
- .;try to get a lock, but proceed anyway
- .I $$LOCK^DGENQRY(DGQRY("DFN"))
- .;
- .;if the query was retransmitted, then update the status of the patient's last query
- .I DGQRY("STATUS")=2 D
- ..S IEN2=$$FINDLAST^DGENQRY(DGQRY("DFN"))
- ..Q:'IEN2
- ..Q:'$$GET^DGENQRY(IEN2,.DGQRY2)
- ..I DGQRY2("FIRST")=DGQRY("FIRST") S IEN=IEN2 M DGQRY=DGQRY2
- .;
- .S DATA(.03)=$S($L($G(ERRORMSG)):4,1:3)
- .S DGQRY("STATUS")=DATA(.03)
- .S DATA(.06)=$$NOW^XLFDT
- .S DGQRY("RESPONSE")=DATA(.06)
- .S DATA(1)=$G(ERRORMSG)
- .S DATA(.07)=$G(RMSGID)
- .S DGQRY("RESPONSEID")=DATA(.07)
- .S DGQRY("ERROR")=DATA(1)
- .Q:'$$UPD^DGENDBS(27.12,IEN,.DATA)
- .;
- .I DGQRY("NOTIFY") I '$$NOTIFY(.DGQRY)
- .;
- .S SUCCESS=1
- ;
- D:$G(DGQRY("DFN")) UNLOCK^DGENQRY(DGQRY("DFN"))
- Q SUCCESS
- ;
- NOTIFY(DGQRY) ;
- ;Description: send notification of reply received for enrollment query.
- ;
- ;Input:
- ; DGQRY() - array containing the ENROLLMENT QUERY LOG record (pass by reference)
- ;
- ;Output:
- ; Function Value: 1 on success, 0 on failure
- ;
- N PATIENT,TEXT,XMDUZ,XMTEXT,XMSUB,XMSTRIP,XMROU,XMY,XMZ,XMDF
- Q:'$$GET^DGENPTA($G(DGQRY("DFN")),.PATIENT) 0
- ;
- S XMDF=""
- S (XMDUN,XMDUZ)="Registration Enrollment Module"
- S XMSUB="Enrollment/Eligibility Query Reply: "_PATIENT("NAME")
- S XMY(DGQRY("NOTIFY"))=""
- S XMTEXT="TEXT("
- S TEXT(1)="A reply to the enrollment/eligibility query that you sent has been received."
- S TEXT(2)=" "
- S TEXT(3)="Patient Name : "_PATIENT("NAME")
- S TEXT(4)="SSN : "_PATIENT("SSN")
- S TEXT(5)="Query Date/Time: "_$$FMTE^XLFDT(DGQRY("FIRST"),"1")
- S TEXT(6)="Query Status : "_$$EXTERNAL^DILFD(27.12,.03,"F",DGQRY("STATUS"))
- ;
- I $L(DGQRY("ERROR")) D
- .S TEXT(7)=" "
- .S TEXT(8)="The following problem was encountered:"
- .S TEXT(9)=" "
- .S TEXT(10)=DGQRY("ERROR")
- ;
- D ^XMD
- Q 1
- ;
- CLOSE(IEN,ERROR) ;
- ;Description: This function can be used to change a query with status
- ;of TRANSMITTED to a status of CLOSED. This will prevent retransmission.
- ;It can be used, for example, when an unsolicited enrollment message is
- ;received while a query is still outstanding.
- ;Input:
- ; IEN: The ien of a record in the ENROLLMENT QUERY LOG file.
- ;
- ;Output:
- ; Function Value - 1 if successful, 0 otherwise.
- ; ERROR - if unsuccessful, returns an error message (optional, pass by reference)
- ;
- N SUCCESS,DGQRY,DATA
- S SUCCESS=0
- S ERROR=""
- ;
- D
- .I '$G(IEN) S ERROR="ENTRY IN ENROLLMENT QUERY LOG DOES NOT EXIST" Q
- .Q:'$$GET^DGENQRY(IEN,.DGQRY)
- .I '$$LOCK^DGENQRY(DGQRY("DFN")) S ERROR="UNABLE TO LOCK ENROLLMENT QUERY LOG" Q
- .I DGQRY("STATUS") S ERROR="QUERY STATUS IS NOT TRANSMITTED" Q
- .;
- .S DATA(.03)=1
- .I '$$UPD^DGENDBS(27.12,IEN,.DATA,.ERROR) S ERROR="UNABLE TO UPDATE ENROLLMENT QUERY LOG WITH NEW STATUS" Q
- .;
- .S SUCCESS=1
- ;
- D UNLOCK^DGENQRY(DGQRY("DFN"))
- Q SUCCESS
- ;
- RESEND(IEN,ERROR) ;
- ;Description: Used to re-send an outstanding query.
- ;Input:
- ; IEN - ien of a record in the ENROLLMENT QUERY LOG. It identifies the query to be re-sent.
- ;Output:
- ; Function Value - 1 if successful, 0 otherwise.
- ; ERROR - if unsuccessful returns a mssg (pass by reference, optional)
- ;
- N SUCCESS,DGQRY,DATA
- S SUCCESS=0
- S ERROR=""
- ;
- D
- .I '$G(IEN) S ERROR="ENTRY IN ENROLLMENT QUERY LOG DOES NOT EXIST" Q
- .Q:'$$GET^DGENQRY(IEN,.DGQRY)
- .I '$$LOCK^DGENQRY(DGQRY("DFN")) S ERROR="UNABLE TO LOCK ENROLLMENT QUERY LOG" Q
- .I DGQRY("STATUS") S ERROR="QUERY STATUS IS NOT TRANSMITTED" Q
- .S DATA(.03)=2
- .I '$$UPD^DGENDBS(27.12,IEN,.DATA,.ERROR) S ERROR="UNABLE TO UPDATE ENROLLMENT QUERY LOG WITH NEW STATUS" Q
- .I '$$SEND(DGQRY("DFN"),DGQRY("NOTIFY"),DGQRY("FIRST"),.ERROR) Q
- .S SUCCESS=1
- ;
- D UNLOCK^DGENQRY(DGQRY("DFN"))
- Q SUCCESS
- ;
- SEND(DFN,NOTIFY,FIRST,ERROR) ;
- ;Description: This function is used to send an ENROLLMENT/ELIGIBILITY
- ;QUERY to HEC for a particular patient.
- ;
- ;Input:
- ; DFN - the patient for whom to send the query
- ; NOTIFY - who should receive notification when the query reply is
- ; received. Is a pointer to the NEW USER file. (Optional)
- ; FIRST - DATE/TIME to enter to the FIRST DT/TIME field of the
- ; ENROLLMENT QUERY LOG file (Optional)
- ;
- ;Output:
- ; Function Value - 1 on success, 0 on failure.
- ; ERROR - if unsuccessful, this variable will return an error message, (pass by reference) (optional)
- ;
- ; quit if enrollment transmit query to HEC switch is off
- I '$$ON^DGENQRY Q 0
- ;
- N LAST,DGQRY,MSGID,SUCCESS,SENT
- ;
- S SUCCESS=1
- I '$$LOCK^DGENQRY($G(DFN)) S SUCCESS=0,ERROR="UNABLE TO LOCK ENROLLMENT QUERY LOG"
- S LAST=$$FINDLAST^DGENQRY(DFN)
- I SUCCESS,LAST,$$GET^DGENQRY(LAST,.DGQRY),'DGQRY("STATUS") S SUCCESS=0,ERROR="ENROLLMENT/ELIGIBILITY QUERY ALREADY SENT"
- D:SUCCESS
- .S SENT=$$MSG(DFN,.MSGID,.ERROR)
- .I 'SENT S SUCCESS=0 Q
- .S DGQRY("DFN")=DFN
- .S DGQRY("SENT")=SENT
- .S DGQRY("STATUS")=0
- .S DGQRY("MSGID")=MSGID
- .S DGQRY("NOTIFY")=$G(NOTIFY)
- .S DGQRY("FIRST")=$S($G(FIRST):FIRST,1:SENT)
- .S DGQRY("RESPONSE")=""
- .S DGQRY("RESPONSEID")=""
- .I '$$LOG^DGENQRY(.DGQRY) S SUCCESS=0,ERROR="UNABLE TO ENTER QUERY TO ENROLLMENT QUERY LOG" Q
- .;
- SENDQ ;
- D UNLOCK^DGENQRY($G(DFN))
- Q SUCCESS
- ;
- MSG(DFN,MSGID,ERROR) ; Send enrollment/eligibility query to HEC
- ;
- ;Input:
- ; DFN - Pointer to the patient in file #2
- ;Output
- ; Function Value - if successful, returns 1, otherwise returns 0
- ; MSGID - if successful, returns the message id assigned by the HL7 package (pass by reference)
- ; ERROR - if unsuccessful,returns an error message (pass by reference)
- ;
- N HLSDT,HLMTN,HLDAP,HLEVN,HLERR,HLDA,HLDAN,HLDT,HLDT1,HLECH,HLFS,HLNDAP,HLNDAP0,HLPID,HLQ,HLVER,HLMID,SUCCESS,DGPAT
- N HL,HLARYTYP,HLFORMAT,HLRESLT
- ;
- K HLA("HLS") ;DG*5.3.472
- S SUCCESS=0
- ;
- ; - init HL7 variables
- S HLMTN="QRY"
- S HLDAP="IVM"
- S HLEID="VAMC "_$P($$SITE^VASITE,"^",3)_" QRY-Z11 SERVER"
- S HLEID=$O(^ORD(101,"B",HLEID,0))
- D INIT^HLFNC2(HLEID,.HL)
- I $G(HL)]"" S HLERR=$P(HL,"^",2)
- I '$D(HLERR) D CREATE^HLTF(.HLMID,.HLMTIEN,.HLDT,.HLDT1)
- S HLEVN=0 ; initialize event counter
- S HLSDT=$$NOW^XLFDT
- I $D(HLERR) S ERROR=HLERR G MSGQ
- ;
- I '$$GET^DGENPTA(DFN,.DGPAT) S ERROR="PATIENT NOT FOUND" G MSGQ
- I (DGPAT("SEX")="") S ERROR="PATIENT SEX IS REQUIRED" G MSGQ
- I (DGPAT("DOB")="") S ERROR="PATIENT DATE OF BIRTH IS REQUIRED" G MSGQ
- I (DGPAT("SSN")="") S ERROR="PATIENT SSN IS REQUIRED" G MSGQ
- ;
- ; - build HL7 query (QRY) msg and send
- D QRD,QRF
- S HLARYTYP="LM" ;DG*5.3*472
- S HLFORMAT=1
- D GENERATE^HLMA(HLEID,HLARYTYP,HLFORMAT,.HLRESLT)
- I $P($G(HLRESLT),"^",2)]"" S HLERR=$P(HLRESLT,"^",3)
- I $D(HLERR) S ERROR=HLERR G MSGQ
- S SUCCESS=HLSDT
- ;
- S MSGID=+HLRESLT
- ;
- MSGQ ; - exit and clean-up
- D KILL^HLTRANS
- K HLA("HLS") ;DG*5.3*472
- Q SUCCESS
- ;
- QRD ; Build (HL7) QRD segment for patient
- N QUERY,DGICN
- S DGICN=$$GETICN^MPIF001(DFN) ;DBIA- #2070
- S $P(QUERY,HLFS,1)=$$HLDATE^HLFNC(HLDT) ; date/time query generated
- S $P(QUERY,HLFS,2)="R" ; query format code (record oriented format)
- S $P(QUERY,HLFS,3)="I" ; query priority (immediate)
- S $P(QUERY,HLFS,4)=DFN_$E(HL("ECH"),1)_$G(DGICN) ; query ID (DFN), Patient ICN#
- S $P(QUERY,HLFS,7)="1~RD" ; quanity limited request (1 record)
- S $P(QUERY,HLFS,8)=DGPAT("SSN") ; who subject filter (SSN)
- S $P(QUERY,HLFS,9)="OTH" ; what subject filter
- S $P(QUERY,HLFS,10)="ENROLLMENT" ;What department data code
- S $P(QUERY,HLFS,12)="T" ; query results level (full results)
- S HLA("HLS",1)="QRD"_HLFS_QUERY ;DG*5.3*472
- Q
- ;
- ;
- QRF ; Build HL7 (QRF) segment for patient
- N FILTER
- S $P(FILTER,HLFS,1)="IVM" ; where subject filter (IVM Center)
- S $P(FILTER,HLFS,4)=$$HLDATE^HLFNC(DGPAT("DOB")) ; what user qualifier (DOB)
- S $P(FILTER,HLFS,5)=DGPAT("SEX") ; other subj. query filter (sex)
- S HLA("HLS",2)="QRF"_HLFS_FILTER ;DG*5.3*472
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGENQRY1 9386 printed Jan 18, 2025@03:43:38 Page 2
- DGENQRY1 ;ALB/CJM - API for ENROLLMENT QUERIES (continued); 4-SEP-97 ; 5/14/02 9:57am
- +1 ;;5.3;REGISTRATION;**147,232,363,472,989**;Aug 13,1993;Build 5
- +2 ;
- BATCH ;
- +1 ;Description: This procedure will re-send all queries still outstanding
- +2 ;with status of TRANSMITTED with QUERY DT/TM of more than 2 days in the
- +3 ;past.
- +4 ;
- +5 ;Input:
- +6 ; None
- +7 ;Output:
- +8 ; The ENROLLMENT QUERY LOG file is updated with all the query activity. New queries to HEC are generated where necessary.
- +9 ;
- +10 NEW QRY,DATE
- +11 SET DATE=$$FMADD^XLFDT(DT,-2)
- +12 FOR
- SET DATE=$ORDER(^DGEN(27.12,"ADS",DATE),-1)
- if 'DATE
- QUIT
- Begin DoDot:1
- +13 SET QRY=0
- +14 FOR
- SET QRY=$ORDER(^DGEN(27.12,"ADS",DATE,QRY))
- if 'QRY
- QUIT
- Begin DoDot:2
- +15 ;then something went wrong, but continue
- IF '$$RESEND(QRY)
- End DoDot:2
- End DoDot:1
- +16 QUIT
- +17 ;
- RECEIVE(IEN,ERRORMSG,RMSGID) ;
- +1 ;Description: This function will update the query log to show status
- +2 ;RECEIVED. If the NOTIFY field is contains a user to notify, it will
- +3 ;also send the notification message.
- +4 ;Input:
- +5 ; IEN - internal entry number of a record in the ENROLLMENT QUERY LOG
- +6 ; ERRORMSG - error message to include in notification (optional)
- +7 ; RMSGID - message id from the response
- +8 ;
- +9 ;Output:
- +10 ; Function Value - 1 if successful, 0 otherwise.
- +11 ;
- +12 NEW SUCCESS,DGQRY,DATA,IEN2,DGQRY2
- +13 SET SUCCESS=0
- +14 ;
- +15 Begin DoDot:1
- +16 if '$GET(IEN)
- QUIT
- +17 if '$$GET^DGENQRY(IEN,.DGQRY)
- QUIT
- +18 ;
- +19 ;try to get a lock, but proceed anyway
- +20 IF $$LOCK^DGENQRY(DGQRY("DFN"))
- +21 ;
- +22 ;if the query was retransmitted, then update the status of the patient's last query
- +23 IF DGQRY("STATUS")=2
- Begin DoDot:2
- +24 SET IEN2=$$FINDLAST^DGENQRY(DGQRY("DFN"))
- +25 if 'IEN2
- QUIT
- +26 if '$$GET^DGENQRY(IEN2,.DGQRY2)
- QUIT
- +27 IF DGQRY2("FIRST")=DGQRY("FIRST")
- SET IEN=IEN2
- MERGE DGQRY=DGQRY2
- End DoDot:2
- +28 ;
- +29 SET DATA(.03)=$SELECT($LENGTH($GET(ERRORMSG)):4,1:3)
- +30 SET DGQRY("STATUS")=DATA(.03)
- +31 SET DATA(.06)=$$NOW^XLFDT
- +32 SET DGQRY("RESPONSE")=DATA(.06)
- +33 SET DATA(1)=$GET(ERRORMSG)
- +34 SET DATA(.07)=$GET(RMSGID)
- +35 SET DGQRY("RESPONSEID")=DATA(.07)
- +36 SET DGQRY("ERROR")=DATA(1)
- +37 if '$$UPD^DGENDBS(27.12,IEN,.DATA)
- QUIT
- +38 ;
- +39 IF DGQRY("NOTIFY")
- IF '$$NOTIFY(.DGQRY)
- +40 ;
- +41 SET SUCCESS=1
- End DoDot:1
- +42 ;
- +43 if $GET(DGQRY("DFN"))
- DO UNLOCK^DGENQRY(DGQRY("DFN"))
- +44 QUIT SUCCESS
- +45 ;
- NOTIFY(DGQRY) ;
- +1 ;Description: send notification of reply received for enrollment query.
- +2 ;
- +3 ;Input:
- +4 ; DGQRY() - array containing the ENROLLMENT QUERY LOG record (pass by reference)
- +5 ;
- +6 ;Output:
- +7 ; Function Value: 1 on success, 0 on failure
- +8 ;
- +9 NEW PATIENT,TEXT,XMDUZ,XMTEXT,XMSUB,XMSTRIP,XMROU,XMY,XMZ,XMDF
- +10 if '$$GET^DGENPTA($GET(DGQRY("DFN")),.PATIENT)
- QUIT 0
- +11 ;
- +12 SET XMDF=""
- +13 SET (XMDUN,XMDUZ)="Registration Enrollment Module"
- +14 SET XMSUB="Enrollment/Eligibility Query Reply: "_PATIENT("NAME")
- +15 SET XMY(DGQRY("NOTIFY"))=""
- +16 SET XMTEXT="TEXT("
- +17 SET TEXT(1)="A reply to the enrollment/eligibility query that you sent has been received."
- +18 SET TEXT(2)=" "
- +19 SET TEXT(3)="Patient Name : "_PATIENT("NAME")
- +20 SET TEXT(4)="SSN : "_PATIENT("SSN")
- +21 SET TEXT(5)="Query Date/Time: "_$$FMTE^XLFDT(DGQRY("FIRST"),"1")
- +22 SET TEXT(6)="Query Status : "_$$EXTERNAL^DILFD(27.12,.03,"F",DGQRY("STATUS"))
- +23 ;
- +24 IF $LENGTH(DGQRY("ERROR"))
- Begin DoDot:1
- +25 SET TEXT(7)=" "
- +26 SET TEXT(8)="The following problem was encountered:"
- +27 SET TEXT(9)=" "
- +28 SET TEXT(10)=DGQRY("ERROR")
- End DoDot:1
- +29 ;
- +30 DO ^XMD
- +31 QUIT 1
- +32 ;
- CLOSE(IEN,ERROR) ;
- +1 ;Description: This function can be used to change a query with status
- +2 ;of TRANSMITTED to a status of CLOSED. This will prevent retransmission.
- +3 ;It can be used, for example, when an unsolicited enrollment message is
- +4 ;received while a query is still outstanding.
- +5 ;Input:
- +6 ; IEN: The ien of a record in the ENROLLMENT QUERY LOG file.
- +7 ;
- +8 ;Output:
- +9 ; Function Value - 1 if successful, 0 otherwise.
- +10 ; ERROR - if unsuccessful, returns an error message (optional, pass by reference)
- +11 ;
- +12 NEW SUCCESS,DGQRY,DATA
- +13 SET SUCCESS=0
- +14 SET ERROR=""
- +15 ;
- +16 Begin DoDot:1
- +17 IF '$GET(IEN)
- SET ERROR="ENTRY IN ENROLLMENT QUERY LOG DOES NOT EXIST"
- QUIT
- +18 if '$$GET^DGENQRY(IEN,.DGQRY)
- QUIT
- +19 IF '$$LOCK^DGENQRY(DGQRY("DFN"))
- SET ERROR="UNABLE TO LOCK ENROLLMENT QUERY LOG"
- QUIT
- +20 IF DGQRY("STATUS")
- SET ERROR="QUERY STATUS IS NOT TRANSMITTED"
- QUIT
- +21 ;
- +22 SET DATA(.03)=1
- +23 IF '$$UPD^DGENDBS(27.12,IEN,.DATA,.ERROR)
- SET ERROR="UNABLE TO UPDATE ENROLLMENT QUERY LOG WITH NEW STATUS"
- QUIT
- +24 ;
- +25 SET SUCCESS=1
- End DoDot:1
- +26 ;
- +27 DO UNLOCK^DGENQRY(DGQRY("DFN"))
- +28 QUIT SUCCESS
- +29 ;
- RESEND(IEN,ERROR) ;
- +1 ;Description: Used to re-send an outstanding query.
- +2 ;Input:
- +3 ; IEN - ien of a record in the ENROLLMENT QUERY LOG. It identifies the query to be re-sent.
- +4 ;Output:
- +5 ; Function Value - 1 if successful, 0 otherwise.
- +6 ; ERROR - if unsuccessful returns a mssg (pass by reference, optional)
- +7 ;
- +8 NEW SUCCESS,DGQRY,DATA
- +9 SET SUCCESS=0
- +10 SET ERROR=""
- +11 ;
- +12 Begin DoDot:1
- +13 IF '$GET(IEN)
- SET ERROR="ENTRY IN ENROLLMENT QUERY LOG DOES NOT EXIST"
- QUIT
- +14 if '$$GET^DGENQRY(IEN,.DGQRY)
- QUIT
- +15 IF '$$LOCK^DGENQRY(DGQRY("DFN"))
- SET ERROR="UNABLE TO LOCK ENROLLMENT QUERY LOG"
- QUIT
- +16 IF DGQRY("STATUS")
- SET ERROR="QUERY STATUS IS NOT TRANSMITTED"
- QUIT
- +17 SET DATA(.03)=2
- +18 IF '$$UPD^DGENDBS(27.12,IEN,.DATA,.ERROR)
- SET ERROR="UNABLE TO UPDATE ENROLLMENT QUERY LOG WITH NEW STATUS"
- QUIT
- +19 IF '$$SEND(DGQRY("DFN"),DGQRY("NOTIFY"),DGQRY("FIRST"),.ERROR)
- QUIT
- +20 SET SUCCESS=1
- End DoDot:1
- +21 ;
- +22 DO UNLOCK^DGENQRY(DGQRY("DFN"))
- +23 QUIT SUCCESS
- +24 ;
- SEND(DFN,NOTIFY,FIRST,ERROR) ;
- +1 ;Description: This function is used to send an ENROLLMENT/ELIGIBILITY
- +2 ;QUERY to HEC for a particular patient.
- +3 ;
- +4 ;Input:
- +5 ; DFN - the patient for whom to send the query
- +6 ; NOTIFY - who should receive notification when the query reply is
- +7 ; received. Is a pointer to the NEW USER file. (Optional)
- +8 ; FIRST - DATE/TIME to enter to the FIRST DT/TIME field of the
- +9 ; ENROLLMENT QUERY LOG file (Optional)
- +10 ;
- +11 ;Output:
- +12 ; Function Value - 1 on success, 0 on failure.
- +13 ; ERROR - if unsuccessful, this variable will return an error message, (pass by reference) (optional)
- +14 ;
- +15 ; quit if enrollment transmit query to HEC switch is off
- +16 IF '$$ON^DGENQRY
- QUIT 0
- +17 ;
- +18 NEW LAST,DGQRY,MSGID,SUCCESS,SENT
- +19 ;
- +20 SET SUCCESS=1
- +21 IF '$$LOCK^DGENQRY($GET(DFN))
- SET SUCCESS=0
- SET ERROR="UNABLE TO LOCK ENROLLMENT QUERY LOG"
- +22 SET LAST=$$FINDLAST^DGENQRY(DFN)
- +23 IF SUCCESS
- IF LAST
- IF $$GET^DGENQRY(LAST,.DGQRY)
- IF 'DGQRY("STATUS")
- SET SUCCESS=0
- SET ERROR="ENROLLMENT/ELIGIBILITY QUERY ALREADY SENT"
- +24 if SUCCESS
- Begin DoDot:1
- +25 SET SENT=$$MSG(DFN,.MSGID,.ERROR)
- +26 IF 'SENT
- SET SUCCESS=0
- QUIT
- +27 SET DGQRY("DFN")=DFN
- +28 SET DGQRY("SENT")=SENT
- +29 SET DGQRY("STATUS")=0
- +30 SET DGQRY("MSGID")=MSGID
- +31 SET DGQRY("NOTIFY")=$GET(NOTIFY)
- +32 SET DGQRY("FIRST")=$SELECT($GET(FIRST):FIRST,1:SENT)
- +33 SET DGQRY("RESPONSE")=""
- +34 SET DGQRY("RESPONSEID")=""
- +35 IF '$$LOG^DGENQRY(.DGQRY)
- SET SUCCESS=0
- SET ERROR="UNABLE TO ENTER QUERY TO ENROLLMENT QUERY LOG"
- QUIT
- +36 ;
- End DoDot:1
- SENDQ ;
- +1 DO UNLOCK^DGENQRY($GET(DFN))
- +2 QUIT SUCCESS
- +3 ;
- MSG(DFN,MSGID,ERROR) ; Send enrollment/eligibility query to HEC
- +1 ;
- +2 ;Input:
- +3 ; DFN - Pointer to the patient in file #2
- +4 ;Output
- +5 ; Function Value - if successful, returns 1, otherwise returns 0
- +6 ; MSGID - if successful, returns the message id assigned by the HL7 package (pass by reference)
- +7 ; ERROR - if unsuccessful,returns an error message (pass by reference)
- +8 ;
- +9 NEW HLSDT,HLMTN,HLDAP,HLEVN,HLERR,HLDA,HLDAN,HLDT,HLDT1,HLECH,HLFS,HLNDAP,HLNDAP0,HLPID,HLQ,HLVER,HLMID,SUCCESS,DGPAT
- +10 NEW HL,HLARYTYP,HLFORMAT,HLRESLT
- +11 ;
- +12 ;DG*5.3.472
- KILL HLA("HLS")
- +13 SET SUCCESS=0
- +14 ;
- +15 ; - init HL7 variables
- +16 SET HLMTN="QRY"
- +17 SET HLDAP="IVM"
- +18 SET HLEID="VAMC "_$PIECE($$SITE^VASITE,"^",3)_" QRY-Z11 SERVER"
- +19 SET HLEID=$ORDER(^ORD(101,"B",HLEID,0))
- +20 DO INIT^HLFNC2(HLEID,.HL)
- +21 IF $GET(HL)]""
- SET HLERR=$PIECE(HL,"^",2)
- +22 IF '$DATA(HLERR)
- DO CREATE^HLTF(.HLMID,.HLMTIEN,.HLDT,.HLDT1)
- +23 ; initialize event counter
- SET HLEVN=0
- +24 SET HLSDT=$$NOW^XLFDT
- +25 IF $DATA(HLERR)
- SET ERROR=HLERR
- GOTO MSGQ
- +26 ;
- +27 IF '$$GET^DGENPTA(DFN,.DGPAT)
- SET ERROR="PATIENT NOT FOUND"
- GOTO MSGQ
- +28 IF (DGPAT("SEX")="")
- SET ERROR="PATIENT SEX IS REQUIRED"
- GOTO MSGQ
- +29 IF (DGPAT("DOB")="")
- SET ERROR="PATIENT DATE OF BIRTH IS REQUIRED"
- GOTO MSGQ
- +30 IF (DGPAT("SSN")="")
- SET ERROR="PATIENT SSN IS REQUIRED"
- GOTO MSGQ
- +31 ;
- +32 ; - build HL7 query (QRY) msg and send
- +33 DO QRD
- DO QRF
- +34 ;DG*5.3*472
- SET HLARYTYP="LM"
- +35 SET HLFORMAT=1
- +36 DO GENERATE^HLMA(HLEID,HLARYTYP,HLFORMAT,.HLRESLT)
- +37 IF $PIECE($GET(HLRESLT),"^",2)]""
- SET HLERR=$PIECE(HLRESLT,"^",3)
- +38 IF $DATA(HLERR)
- SET ERROR=HLERR
- GOTO MSGQ
- +39 SET SUCCESS=HLSDT
- +40 ;
- +41 SET MSGID=+HLRESLT
- +42 ;
- MSGQ ; - exit and clean-up
- +1 DO KILL^HLTRANS
- +2 ;DG*5.3*472
- KILL HLA("HLS")
- +3 QUIT SUCCESS
- +4 ;
- QRD ; Build (HL7) QRD segment for patient
- +1 NEW QUERY,DGICN
- +2 ;DBIA- #2070
- SET DGICN=$$GETICN^MPIF001(DFN)
- +3 ; date/time query generated
- SET $PIECE(QUERY,HLFS,1)=$$HLDATE^HLFNC(HLDT)
- +4 ; query format code (record oriented format)
- SET $PIECE(QUERY,HLFS,2)="R"
- +5 ; query priority (immediate)
- SET $PIECE(QUERY,HLFS,3)="I"
- +6 ; query ID (DFN), Patient ICN#
- SET $PIECE(QUERY,HLFS,4)=DFN_$EXTRACT(HL("ECH"),1)_$GET(DGICN)
- +7 ; quanity limited request (1 record)
- SET $PIECE(QUERY,HLFS,7)="1~RD"
- +8 ; who subject filter (SSN)
- SET $PIECE(QUERY,HLFS,8)=DGPAT("SSN")
- +9 ; what subject filter
- SET $PIECE(QUERY,HLFS,9)="OTH"
- +10 ;What department data code
- SET $PIECE(QUERY,HLFS,10)="ENROLLMENT"
- +11 ; query results level (full results)
- SET $PIECE(QUERY,HLFS,12)="T"
- +12 ;DG*5.3*472
- SET HLA("HLS",1)="QRD"_HLFS_QUERY
- +13 QUIT
- +14 ;
- +15 ;
- QRF ; Build HL7 (QRF) segment for patient
- +1 NEW FILTER
- +2 ; where subject filter (IVM Center)
- SET $PIECE(FILTER,HLFS,1)="IVM"
- +3 ; what user qualifier (DOB)
- SET $PIECE(FILTER,HLFS,4)=$$HLDATE^HLFNC(DGPAT("DOB"))
- +4 ; other subj. query filter (sex)
- SET $PIECE(FILTER,HLFS,5)=DGPAT("SEX")
- +5 ;DG*5.3*472
- SET HLA("HLS",2)="QRF"_HLFS_FILTER
- +6 QUIT