| [613] | 1 | VAQADM22 ;ALB/JRP - MESSAGE ADMINISTRATION;20-MAY-93
 | 
|---|
 | 2 |  ;;1.5;PATIENT DATA EXCHANGE;**10**;NOV 17, 1993
 | 
|---|
 | 3 | AUTO(TRAN) ;AUTOMATIC PROCESSING OF REQUESTS
 | 
|---|
 | 4 |  ;INPUT  : TRAN - Pointer to VAQ - TRANSACTION file
 | 
|---|
 | 5 |  ;OUTPUT : 0 - Request processed
 | 
|---|
 | 6 |  ;         -1^Error_Text - Error
 | 
|---|
 | 7 |  ;
 | 
|---|
 | 8 |  ;CHECK INPUT
 | 
|---|
 | 9 |  S TRAN=+$G(TRAN)
 | 
|---|
 | 10 |  Q:(('TRAN)!('$D(^VAT(394.61,TRAN)))) "-1^Valid transaction not passed"
 | 
|---|
 | 11 |  ;DECLARE VARIABLES
 | 
|---|
 | 12 |  N DOMAIN,SSN,TMP,AUTOPROC,NAME,XMITARR,LIMITARR,MAXARR,RELEASED
 | 
|---|
 | 13 |  S XMITARR="^TMP(""VAQ-XMIT"","_$J_")"
 | 
|---|
 | 14 |  S LIMITARR="^TMP(""VAQ-AUTOCHK"",""REQLIMITS"","_$J_")"
 | 
|---|
 | 15 |  S MAXARR="^TMP(""VAQ-AUTOCHK"",""OVERLIMITS"","_$J_")"
 | 
|---|
 | 16 |  S RELEASED=0
 | 
|---|
 | 17 |  K @XMITARR,@LIMITARR,@MAXARR
 | 
|---|
 | 18 |  ;GET REQUESTING DOMAIN
 | 
|---|
 | 19 |  S DOMAIN=$P($G(^VAT(394.61,TRAN,"RQST2")),"^",2)
 | 
|---|
 | 20 |  ;GET PATIENT'S NAME & SSN
 | 
|---|
 | 21 |  S TMP=$G(^VAT(394.61,TRAN,"QRY"))
 | 
|---|
 | 22 |  S NAME=$P(TMP,"^",1)
 | 
|---|
 | 23 |  S SSN=$P(TMP,"^",2)
 | 
|---|
 | 24 |  ;CHECK FOR SENSITIVE PATIENT & DOMAIN IN RELEASE GROUP
 | 
|---|
 | 25 |  S:(SSN'="") AUTOPROC=$$RES^VAQUTL99(DOMAIN,SSN)
 | 
|---|
 | 26 |  S:(SSN="") AUTOPROC=$$RES^VAQUTL99(DOMAIN,NAME)
 | 
|---|
 | 27 |  I +AUTOPROC=-2 S $P(AUTOPROC,"^",2)="Exact match on name/ssn/dob not found, process manually for potential matches"
 | 
|---|
 | 28 |  ;GET TIME & OCCURRENCE LIMITS OF REQUESTED SEGMENTS
 | 
|---|
 | 29 |  S TMP=$$BLDSEGS(TRAN,LIMITARR)
 | 
|---|
 | 30 |  ;CHECK TIME & OCCURRENCE LIMITS OF REQUESTED SEGMENTS
 | 
|---|
 | 31 |  I (TMP) D
 | 
|---|
 | 32 |  .S TMP=$$MAXCHCK^VAQADM23(LIMITARR,MAXARR)
 | 
|---|
 | 33 |  .;ALL LIMITS OK
 | 
|---|
 | 34 |  .Q:('TMP)
 | 
|---|
 | 35 |  .;SOME LIMITS DIDN'T PASS (DON'T OVERRIDE OTHER CHECKS IF THEY FAILED)
 | 
|---|
 | 36 |  .S:((+AUTOPROC)>0) AUTOPROC="-20^Maximum time & occurrence limits exceeded by "_TMP_" segment"_$S((TMP>1):"s",1:"")
 | 
|---|
 | 37 |  ;RELEASE INFORMATION (RELEASE=-1 ON ERROR)
 | 
|---|
 | 38 |  I ((+AUTOPROC)>0) D
 | 
|---|
 | 39 |  .S RELEASED=-1
 | 
|---|
 | 40 |  .;FILE PATIENT POINTER
 | 
|---|
 | 41 |  .S TMP=$$FILEINFO^VAQFILE(394.61,TRAN,.03,("`"_$P(AUTOPROC,"^",2)))
 | 
|---|
 | 42 |  .Q:(TMP)
 | 
|---|
 | 43 |  .;FILE RELEASE STATUS
 | 
|---|
 | 44 |  .S TMP=$$FILEINFO^VAQFILE(394.61,TRAN,.05,"VAQ-RSLT")
 | 
|---|
 | 45 |  .Q:(TMP)
 | 
|---|
 | 46 |  .;FILE CURRENT STATUS
 | 
|---|
 | 47 |  .S TMP=$$FILEINFO^VAQFILE(394.61,TRAN,.02,"VAQ-AUTO")
 | 
|---|
 | 48 |  .Q:(TMP)
 | 
|---|
 | 49 |  .;RESET PURGE FLAG
 | 
|---|
 | 50 |  .S TMP=$$FILEINFO^VAQFILE(394.61,TRAN,90,"NO")
 | 
|---|
 | 51 |  .;FILE AUTHORIZER INFORMATION
 | 
|---|
 | 52 |  .S TMP=$$FILEINFO^VAQFILE(394.61,TRAN,50,"NOW")
 | 
|---|
 | 53 |  .Q:(TMP)
 | 
|---|
 | 54 |  .S TMP=$$FILEINFO^VAQFILE(394.61,TRAN,51,"PDX Server")
 | 
|---|
 | 55 |  .Q:(TMP)
 | 
|---|
 | 56 |  .;QUEUE TRANSMISSION
 | 
|---|
 | 57 |  .S @XMITARR@(TRAN)=""
 | 
|---|
 | 58 |  .S TMP=$$GENTASK^VAQADM5(XMITARR)
 | 
|---|
 | 59 |  .S:(TMP>0) RELEASED=1
 | 
|---|
 | 60 |  .K @XMITARR
 | 
|---|
 | 61 |  ;DON'T RELEASE INFORMATION
 | 
|---|
 | 62 |  I ((+AUTOPROC)<0) D
 | 
|---|
 | 63 |  .;CHANGE RELEASE STATUS TO ACKNOWLEDGED
 | 
|---|
 | 64 |  .S TMP=$$FILEINFO^VAQFILE(394.61,TRAN,.05,"VAQ-RQACK")
 | 
|---|
 | 65 |  .;CHANGE STATUS TO REQUIRES PROCESSING
 | 
|---|
 | 66 |  .S TMP=$$FILEINFO^VAQFILE(394.61,TRAN,.02,"VAQ-PROC")
 | 
|---|
 | 67 |  .;RESET PURGE FLAG
 | 
|---|
 | 68 |  .S TMP=$$FILEINFO^VAQFILE(394.61,TRAN,90,"NO")
 | 
|---|
 | 69 |  .;SEND ACK
 | 
|---|
 | 70 |  .K @XMITARR
 | 
|---|
 | 71 |  .S @XMITARR@(TRAN)=""
 | 
|---|
 | 72 |  .S TMP=$$GENTASK^VAQADM5(XMITARR)
 | 
|---|
 | 73 |  .K @XMITARR
 | 
|---|
 | 74 |  ;SEND BULLETIN
 | 
|---|
 | 75 |  S TMP=$P(AUTOPROC,"^",2)
 | 
|---|
 | 76 |  S:(RELEASED<0) TMP="Unable to queue transmission of results"
 | 
|---|
 | 77 |  S:((RELEASED<0)!('RELEASED)) TMP=$$PROCESS^VAQBUL02(TRAN,TMP,MAXARR)
 | 
|---|
 | 78 |  K @LIMITARR,@MAXARR,@XMITARR
 | 
|---|
 | 79 |  Q 0
 | 
|---|
 | 80 |  ;
 | 
|---|
 | 81 | BLDSEGS(TRANPTR,OUTARR) ;BUILD ARRAY OF SEGMENTS FOR A TRANSACTION
 | 
|---|
 | 82 |  ;INPUT  : TRANPTR - Pointer to VAQ - TRANSACTION file
 | 
|---|
 | 83 |  ;         OUTARR - Output array (full global reference)
 | 
|---|
 | 84 |  ;                    OUTARR(Pointer)=Time^Occur
 | 
|---|
 | 85 |  ;OUTPUT : X - Number of segments placed into OUTARR
 | 
|---|
 | 86 |  ;NOTES  : This call is used to build the input for $$MAXCHCK^VAQADM23
 | 
|---|
 | 87 |  ;       : It is the responsibility of the programmer to ensure
 | 
|---|
 | 88 |  ;         that OUTARR is killed before and after this call
 | 
|---|
 | 89 |  ;
 | 
|---|
 | 90 |  ;CHECK INPUT
 | 
|---|
 | 91 |  S TRANPTR=+$G(TRANPTR)
 | 
|---|
 | 92 |  Q:('TRANPTR) 0
 | 
|---|
 | 93 |  Q:('$D(^VAT(394.61,TRANPTR))) 0
 | 
|---|
 | 94 |  Q:($G(OUTARR)="") 0
 | 
|---|
 | 95 |  ;DECLARE VARIABLES
 | 
|---|
 | 96 |  N TMP,POINTER,REQTIM,REQOCC,COUNT,NODE
 | 
|---|
 | 97 |  ;LOOP THROUGH ALL SEGMENTS IN TRANSACTION
 | 
|---|
 | 98 |  S NODE=0
 | 
|---|
 | 99 |  S COUNT=0
 | 
|---|
 | 100 |  F  S NODE=+$O(^VAT(394.61,TRANPTR,"SEG",NODE)) Q:('NODE)  D
 | 
|---|
 | 101 |  .;GET REQUESTED TIME & OCCURRENCE LIMITS
 | 
|---|
 | 102 |  .S TMP=$G(^VAT(394.61,TRANPTR,"SEG",NODE,0))
 | 
|---|
 | 103 |  .Q:(TMP="")
 | 
|---|
 | 104 |  .S POINTER=$P(TMP,"^",1)
 | 
|---|
 | 105 |  .;NOT A VALID POINTER - IGNORE
 | 
|---|
 | 106 |  .Q:('$D(^VAT(394.71,POINTER,0)))
 | 
|---|
 | 107 |  .S REQTIM=$P(TMP,"^",2)
 | 
|---|
 | 108 |  .S REQOCC=$P(TMP,"^",3)
 | 
|---|
 | 109 |  .;PLACE INTO OUTPUT ARRAY & INCREMENT COUNT
 | 
|---|
 | 110 |  .S @OUTARR@(POINTER)=(REQTIM_"^"_REQOCC)
 | 
|---|
 | 111 |  .S COUNT=COUNT+1
 | 
|---|
 | 112 |  ;RETURN NUMBER OF SEGMENTS IN TRANSACTION
 | 
|---|
 | 113 |  Q COUNT
 | 
|---|