[613] | 1 | PRCVEE5 ;WOIFO/VAC - Routine to handle Error Messages sent from DynaMed ; 5/16/05 4:34pm
|
---|
| 2 | ;;5.1;IFCAP;**81**;Oct 20, 2000
|
---|
| 3 | ;PER VHA Directive 10-93-142, this routine should not be modified
|
---|
| 4 | ;
|
---|
| 5 | ;This routine reads an ACK from DynaMed in answer to a message sent
|
---|
| 6 | ;regarding an Edit/Cancel/Approval to a RIL/2237.
|
---|
| 7 | ;ERRTXT - Text of the error message severity
|
---|
| 8 | ;MSGDAT -A single field that holds an error segment
|
---|
| 9 | ;MSGDAT2 - MSGDAT without the segment identifier
|
---|
| 10 | ;MSGDAT3 - Message type/Event type
|
---|
| 11 | ;MSGTYP - Indicates if there are errors in the message
|
---|
| 12 | ;PRCCNT - Record counter -indicates the message line number
|
---|
| 13 | ;PRCERCD - Error code returned
|
---|
| 14 | ;PRCERTX - Error text returned with error code
|
---|
| 15 | ;PRCFLD - Field where error occurred
|
---|
| 16 | ;PRCSEG - Segment where error has occurred
|
---|
| 17 | ;PRCSEQ - Sequence number where error occurred
|
---|
| 18 | ;PRCTYP - Type of form RIL or 2237
|
---|
| 19 | ;PRCVACK - Acknowledgement type AA, AE, AR, etc
|
---|
| 20 | ;PRCVAEC - Application error code string returned in message - ERR-5
|
---|
| 21 | ;PRCVDT - Second node level of ^XTMP
|
---|
| 22 | ;PRCVEC - Error component - ERR-3
|
---|
| 23 | ;PRCVERR - Array of email message
|
---|
| 24 | ;PRCVID - RIL/2237 ID - ERR-6
|
---|
| 25 | ;PRCVLOC - Error Location component - ERR-2
|
---|
| 26 | ;PRCMID - Message ID of original message
|
---|
| 27 | ;PRCVMID2 - Cross reference into ^XTMP
|
---|
| 28 | ;PRCVPTR - First node level of ^XTMP
|
---|
| 29 | ;PRCVSEV - Severity Component ERR-4
|
---|
| 30 | ;PRCVTYP - Original Form Type - RIL or 2237
|
---|
| 31 | ;SSTOP - Stop flag
|
---|
| 32 | ;PRCFS - Field separator
|
---|
| 33 | ;PRCCS - Component separator
|
---|
| 34 | ;PRCRS - Repetition separator
|
---|
| 35 | ;PRCSC - Sub-component separator
|
---|
| 36 | ;PRCDET - Array of field names inside of HL7 segments
|
---|
| 37 | ;PRCFCP - Fund Control Point for message
|
---|
| 38 | ;PRCSITE and PRCSITE0 - Receiving facility number
|
---|
| 39 | ;ERRCNT - a counter
|
---|
| 40 | ;^TMP - Global to hold error message information
|
---|
| 41 | BEGIN N I,J
|
---|
| 42 | N PRCFS,PRCCS,PRCDET,ERRCNT,ERRTXT
|
---|
| 43 | N MSGDAT,PRCCNT,MSGTYP
|
---|
| 44 | N MSGDAT2,MSGDAT3,PRCERCD,PRCERTX,PRCFLD,PRCFCP,PRCSITE,PRCSITE0
|
---|
| 45 | N PRCSEG,PRCSEQ,PRCTYP,PRCVACK,PRCVAEC,PRCVDT,PRCVEC,PRCVERR
|
---|
| 46 | N PRCVID,PRCVLOC,PRCVMID,PRCVMID2,PRCVPTR,PRCVSEV,PRCVTYP,SSTOP
|
---|
| 47 | S PRCFS=HL("FS"),PRCCS=$E(HL("ECH"),1)
|
---|
| 48 | K ^TMP($J)
|
---|
| 49 | SETUP ;Set up array for HL7 crosswalk
|
---|
| 50 | S PRCDET("ORC",1)="Order Control"
|
---|
| 51 | S PRCDET("ORC",9)="Date/Time Created"
|
---|
| 52 | S PRCDET("ORC",10)="Entered by"
|
---|
| 53 | S PRCDET("ORC",21)="Ordering Facility"
|
---|
| 54 | S PRCDET("RQD",1)="Line number"
|
---|
| 55 | S PRCDET("RQD",2)="DM Document ID"
|
---|
| 56 | S PRCDET("RQD",3)="Item number"
|
---|
| 57 | S PRCDET("RQD",4)="Packaging Multiple"
|
---|
| 58 | S PRCDET("RQD",5)="Quantity"
|
---|
| 59 | S PRCDET("RQD",6)="Unit of purchase"
|
---|
| 60 | S PRCDET("RQD",9)="Identifier"
|
---|
| 61 | S PRCDET("RQD",10)="Date needed"
|
---|
| 62 | S PRCDET("RQ1",1)="Unit cost"
|
---|
| 63 | S PRCDET("RQ1",2)="Vendor Stock Number"
|
---|
| 64 | S PRCDET("RQ1",3)="BOC"
|
---|
| 65 | S PRCDET("RQ1",4)="Vendor and/or FMS Vendor"
|
---|
| 66 | S PRCDET("RQ1",5)="NIF number"
|
---|
| 67 | S MSGTYP="",PRCVTYP=""
|
---|
| 68 | F I=1:1 X HLNEXT Q:HLQUIT'>0 D
|
---|
| 69 | .S ^TMP($J,I)=HLNODE,J=0
|
---|
| 70 | .F S J=$O(HLNODE(J)) Q:'J S ^TMP($J,I,J)=HLNODE(J)
|
---|
| 71 | ;
|
---|
| 72 | S PRCCNT="",SSTOP="GO"
|
---|
| 73 | F I=1:1:2 S PRCCNT=$G(^TMP($J,I)) Q:PRCCNT="" Q:SSTOP="STOP" D
|
---|
| 74 | .S MSGDAT=$G(^TMP($J,I))
|
---|
| 75 | .Q:MSGDAT=""
|
---|
| 76 | .S MSGDAT2=$P(MSGDAT,PRCFS,2,21)
|
---|
| 77 | .I $E(MSGDAT,1,3)="MSH" D Q
|
---|
| 78 | ..S MSGDAT3=$P(MSGDAT2,PRCFS,8)
|
---|
| 79 | ..I MSGDAT3'["ORN"_PRCCS_"O08" D
|
---|
| 80 | ...S SSTOP="STOP",MSGTYP="NOK"
|
---|
| 81 | ...S PRCVTYP="ACK",PRCVID=$P(MSGDAT2,PRCFS,9)
|
---|
| 82 | ...S PRCVERR(1)="IN "_PRCVTYP_" "_PRCVID_" there was a bad message type"
|
---|
| 83 | ...S PRCVPTR="*"_$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)_"- - -076"
|
---|
| 84 | .I $E(MSGDAT,1,3)="MSA" D Q
|
---|
| 85 | ..S PRCVACK=$P(MSGDAT2,PRCFS,1)
|
---|
| 86 | ..S PRCVMID=$P(MSGDAT2,PRCFS,2)
|
---|
| 87 | ..S PRCVMID2="PRCVMID*"_PRCVMID
|
---|
| 88 | ..S PRCVPTR=$P($G(^XTMP(PRCVMID2,1)),U,1)
|
---|
| 89 | ..S PRCVDT=$P($G(^XTMP(PRCVMID2,1)),U,2)
|
---|
| 90 | ..I PRCVACK="AA" D Q
|
---|
| 91 | ...S MSGTYP="OK"
|
---|
| 92 | ..I (PRCVACK="AE")!(PRCVACK="AR") D Q
|
---|
| 93 | ...S MSGTYP="NOK"
|
---|
| 94 | I $E(MSGTYP,1,2)="OK" D VALID Q
|
---|
| 95 | I PRCVTYP="ACK" D NOVALID Q
|
---|
| 96 | ERROR ;Now process error messages
|
---|
| 97 | ;
|
---|
| 98 | S ERRCNT=1
|
---|
| 99 | S PRCCNT="" F I=3:1 S PRCCNT=$G(^TMP($J,I)) Q:PRCCNT="" D
|
---|
| 100 | .S MSGDAT=$G(^TMP($J,I))
|
---|
| 101 | .Q:MSGDAT=""
|
---|
| 102 | .S MSGDAT2=$P(MSGDAT,PRCFS,2,7)
|
---|
| 103 | .S PRCVLOC=$P(MSGDAT2,PRCFS,2)
|
---|
| 104 | .S PRCVEC=$P(MSGDAT2,PRCFS,3)
|
---|
| 105 | .S PRCVSEV=$P(MSGDAT2,PRCFS,4)
|
---|
| 106 | .S PRCVAEC=$P(MSGDAT2,PRCFS,5)
|
---|
| 107 | .S PRCVID=$P(MSGDAT2,PRCFS,6)
|
---|
| 108 | .S PRCVTYP="RIL"
|
---|
| 109 | .I PRCVID?.N1"-".N1"-".N1"-".E1"-".N S PRCVTYP="2237"
|
---|
| 110 | .S PRCSEG=$P(PRCVLOC,PRCCS,1)
|
---|
| 111 | .S PRCSEQ=$P(PRCVLOC,PRCCS,2)
|
---|
| 112 | .S PRCFLD=$P(PRCVLOC,PRCCS,3)
|
---|
| 113 | .S PRCERCD=$P(PRCVAEC,PRCCS,1)
|
---|
| 114 | .S PRCERTX=$P(PRCVAEC,PRCCS,2)
|
---|
| 115 | .S ERRTXT="Error"
|
---|
| 116 | .I PRCVSEV="W" S ERRTXT="Warning"
|
---|
| 117 | .S PRCVERR(ERRCNT)="In "_PRCVTYP_" "_PRCVID_" the following occurred"
|
---|
| 118 | .S ERRCNT=ERRCNT+1
|
---|
| 119 | .S PRCVERR(ERRCNT)="For Line item "_PRCSEQ_" the "_PRCDET(PRCSEG,PRCFLD)_" had the following "_ERRTXT_": "
|
---|
| 120 | .S ERRCNT=ERRCNT+1
|
---|
| 121 | .S PRCVERR(ERRCNT)=PRCERTX
|
---|
| 122 | .S ERRCNT=ERRCNT+1
|
---|
| 123 | D NOVALID
|
---|
| 124 | Q
|
---|
| 125 | VALID ;Do NOTHING to notify user that message is ok.
|
---|
| 126 | D CLEANUP
|
---|
| 127 | Q
|
---|
| 128 | NOVALID ;Mailman message
|
---|
| 129 | N XMDUZ,XMMG,XMSUB,XMTEXT,XMY,XMZ
|
---|
| 130 | S XMSUB="IFCAP to DynaMed "_PRCVTYP_" Errors "_PRCVID_" "
|
---|
| 131 | S XMDUZ="IFCAP/DynaMed Interface"
|
---|
| 132 | S XMTEXT="PRCVERR("
|
---|
| 133 | ;S XMY("CARR.VICTOR@CSL.FO-WASH.MED.VA.GOV")=""
|
---|
| 134 | S PRCFCP=$P(PRCVPTR,"-",4)
|
---|
| 135 | S PRCSITE0=$P(PRCVPTR,"-",1)
|
---|
| 136 | S PRCSITE=$P(PRCSITE0,"*",2)
|
---|
| 137 | D GETFCPU^PRCVLIC(.XMY,PRCSITE,PRCFCP)
|
---|
| 138 | D ^XMD
|
---|
| 139 | K XMSUB,XMMG,XMDUZ,XMTEXT,XMY,XMZ
|
---|
| 140 | D CLEANUP
|
---|
| 141 | Q
|
---|
| 142 | ;
|
---|
| 143 | CLEANUP ; Clean up data
|
---|
| 144 | K MSGTYP,MSGDAT,MSGDAT2,MSGDAT3,ERRTXT
|
---|
| 145 | K PRCCNT,PRCFS,PRCCS,I,J,SSTOP,PRCFCP,PRCSITE,PRCSITE0
|
---|
| 146 | K ^TMP($J),ERRCNT,PRCERCD,PRCERTX,PRCFLD,PRCSEG,PRCSEQ
|
---|
| 147 | K PRCTYP,PRCVACK,PRCVAEC,PRCVDT,PRCVEC,PRCVERR,PRCVID,PRCVLOC
|
---|
| 148 | K PRCVMID,PRCVMID2,PRCVPTR,PRCVSEV,PRCVTYP,PRCDET
|
---|
| 149 | ;
|
---|