Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: DGENQRY1

DGENQRY1.m

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