1 | PRCVREA ;WOIFO/VC-Transmit HL7 message to IFCAP for RIL(cont);11/24/03 ; 4/26/05 2:42pm
|
---|
2 | ;;5.1;IFCAP;**81**;Oct 20, 2000
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified
|
---|
4 | ;
|
---|
5 | CALLIT ;Call the IFCAP RIL build Routine
|
---|
6 | ;
|
---|
7 | D EN^PRCVRC1(PRCSUB)
|
---|
8 | ;
|
---|
9 | SETUP S PRCHD(1)=""
|
---|
10 | S PRCHD(2)="ORC"_PRCCS_PRCCS_3
|
---|
11 | S PRCHD(2,"T")="FUND CONTROL POINT"
|
---|
12 | S PRCHD(3)="ORC"_PRCCS_PRCCS_17
|
---|
13 | S PRCHD(3,"T")="COST CENTER"
|
---|
14 | S PRCHD(4)=""
|
---|
15 | S PRCHD(5)="ORC"_PRCCS_PRCCS_21
|
---|
16 | S PRCHD(5,"T")="SITE NUMBER"
|
---|
17 | S PRCHD(6)=""
|
---|
18 | S PRCHD(7)="ORC"_PRCCS_PRCCS_10
|
---|
19 | S PRCHD(7,"T")="DUZ"
|
---|
20 | S PRCHD(8)="ORC"_PRCCS_PRCCS_10
|
---|
21 | S PRCHD(8,"T")="LAST NAME"
|
---|
22 | S PRCHD(9)="ORC"_PRCCS_PRCCS_11
|
---|
23 | S PRCHD(9,"T")="FIRST NAME"
|
---|
24 | S PRCDET(1)="RQD"_PRCCS_PRCCS_3
|
---|
25 | S PRCDET(1,"T")="ITEM NUMBER"
|
---|
26 | S PRCDET(2)="RQD"_PRCCS_PRCCS_5
|
---|
27 | S PRCDET(2,"T")="QUANTITY"
|
---|
28 | S PRCDET(3)="RQ1"_PRCCS_PRCCS_4
|
---|
29 | S PRCDET(3,"T")="VENDOR ID"
|
---|
30 | S PRCDET(4)="RQ1"_PRCCS_PRCCS_1
|
---|
31 | S PRCDET(4,"T")="UNIT COST"
|
---|
32 | S PRCDET(5)="RQD"_PRCCS_PRCCS_10
|
---|
33 | S PRCDET(5,"T")="DATE NEEDED"
|
---|
34 | S PRCDET(6)="RQD"_PRCCS_PRCCS_2
|
---|
35 | S PRCDET(6,"T")="DYNAMED DOCUMENT ID"
|
---|
36 | S PRCDET(7)="RQ1"_PRCCS_PRCCS_5
|
---|
37 | S PRCDET(7,"T")="NIF NUMBER"
|
---|
38 | S PRCDET(8)="RQ1"_PRCCS_PRCCS_3
|
---|
39 | S PRCDET(8,"T")="BOC"
|
---|
40 | ;Check if IFCAP has returned any errors
|
---|
41 | ;
|
---|
42 | S ERRCNT=1
|
---|
43 | S PRCVERR(0)="0"
|
---|
44 | HEAD ;If there are errors in the "1" sub-segment, add all errors to all
|
---|
45 | ; line items
|
---|
46 | S ERRCNT=1,MSGFLG=0,PRCSUB2=$P(PRCSUB,"*",2)
|
---|
47 | I $D(^XTMP(PRCSUB,1,"ERR"))>0 D
|
---|
48 | .S II=0
|
---|
49 | .F I=1:1 S II=$O(^XTMP(PRCSUB,1,"ERR",II)) Q:II="" D
|
---|
50 | ..S ERRDAT=$G(^XTMP(PRCSUB,1,"ERR",II))
|
---|
51 | ..Q:ERRDAT=""
|
---|
52 | ..S MSGFLG=1
|
---|
53 | ..S FLDNO=$P(ERRDAT,U,1),ERRCOD="PRCV"_$P(ERRDAT,U,2),ERRTXT=$P(ERRDAT,U,3)
|
---|
54 | ..S SEVER=$P(ERRDAT,U,4)
|
---|
55 | ..S ERRSTR="ERR"_PRCFS_PRCFS_PRCHD(FLDNO)_PRCFS_"207"_PRCCS_"Application internal error"_PRCCS_"HL70357"_PRCFS_SEVER_PRCFS_ERRCOD_PRCCS_ERRTXT_PRCFS
|
---|
56 | ..S PRCVERR(ERRCNT)="Error in Requisition Header for "_PRCHD(FLDNO,"T")_" from HL7 MESSAGE "_PRCSUB2_" "_ERRCOD_" "_ERRTXT,ERRCNT=ERRCNT+1
|
---|
57 | ..S J=0
|
---|
58 | ..F IL=1:1 S J=$O(^XTMP(PRCSUB,2,J)) Q:J="" D
|
---|
59 | ...S ERRSUB=$P(ERRSTR,PRCFS,3)
|
---|
60 | ...S $P(ERRSUB,U,2)=J
|
---|
61 | ...S $P(ERRSTR,PRCFS,3)=ERRSUB
|
---|
62 | ...;S $P($P(ERRSTR,PRCFS,3),U,2)=J
|
---|
63 | ...S $P(ERRSTR,PRCFS,7)=$P($G(^XTMP(PRCSUB,2,J)),U,6)
|
---|
64 | ...S ^TMP("PRCVRIL",$J,"NAK",ACKCNT)=ERRSTR,ACKCNT=ACKCNT+1
|
---|
65 | DETAIL ;If there are errors in the detail lines, add them
|
---|
66 | S II=0
|
---|
67 | F I=1:1 S II=$O(^XTMP(PRCSUB,2,II)) Q:II="" D
|
---|
68 | .S DOCID=$P(^XTMP(PRCSUB,2,II),U,6)
|
---|
69 | .S III=0
|
---|
70 | .F J=1:1 S III=$O(^XTMP(PRCSUB,2,II,"ERR",III)) Q:III="" D
|
---|
71 | ..S ERRDAT=$G(^XTMP(PRCSUB,2,II,"ERR",III))
|
---|
72 | ..Q:ERRDAT=""
|
---|
73 | ..S MSGFLG=1
|
---|
74 | ..S FLDNO=$P(ERRDAT,U,1),ERRCOD="PRCV"_$P(ERRDAT,U,2),ERRTXT=$P(ERRDAT,U,3)
|
---|
75 | ..S ERRLOC=PRCDET(FLDNO),$P(ERRLOC,U,2)=II
|
---|
76 | ..S SEVER=$P(ERRDAT,U,4)
|
---|
77 | ..S ERRSTR="ERR"_PRCFS_PRCFS_ERRLOC_PRCFS_"207"_PRCCS_"Application internal error"_PRCCS_"HL70357"_PRCFS_SEVER_PRCFS_ERRCOD_PRCCS_ERRTXT_PRCFS_DOCID
|
---|
78 | ..S ^TMP("PRCVRIL",$J,"NAK",ACKCNT)=ERRSTR,ACKCNT=ACKCNT+1
|
---|
79 | ..S PRCVERR(ERRCNT)="Error in detail for Message Control ID "_PRCSUB2_". Field in error - "_PRCDET(FLDNO,"T")_". "_ERRTXT_" DynaMed Doc ID "_DOCID
|
---|
80 | ..S ERRCNT=ERRCNT+1
|
---|
81 | ;
|
---|
82 | I MSGFLG=0 D ACKIT,CLEANUP^PRCVRE1 Q
|
---|
83 | SETNTE ; If there are errors set an NTE segment
|
---|
84 | ;
|
---|
85 | S TOT=0,TOTREC=0,TOTERR=0
|
---|
86 | F I=1:1 S TOT=$O(^XTMP(PRCSUB,2,TOT)) Q:TOT="" D
|
---|
87 | .S TOTREC=TOT
|
---|
88 | .I $D(^XTMP(PRCSUB,2,TOT,"ERR"))>0 D
|
---|
89 | ..S ERRS=0
|
---|
90 | ..F J=1:1 S ERRS=$O(^XTMP(PRCSUB,2,TOT,"ERR",ERRS)) Q:ERRS="" D
|
---|
91 | ...S SEVER=$P($G(^XTMP(PRCSUB,2,TOT,"ERR",ERRS)),U,4)
|
---|
92 | ...I SEVER'="W" S TOTERR=TOTERR+1,ERRS=99
|
---|
93 | I $D(^XTMP(PRCSUB,2,"ERR",1))>1 S TOTERR=TOTREC
|
---|
94 | S TOTGOOD=TOTREC-TOTERR
|
---|
95 | S ^TMP("PRCVRIL",$J,"NAK",ACKCNT)="NTE"_PRCFS_PRCFS_PRCFS_TOTREC_"-"_TOTERR_"-"_TOTGOOD,ACKCNT=ACKCNT+1
|
---|
96 | D NAKIT,CLEANUP^PRCVRE1 Q
|
---|
97 | ;
|
---|
98 | NAKIT ;Send an acknowledgement that the message is rejected
|
---|
99 | ;
|
---|
100 | I HL("APAT")'="AL" Q
|
---|
101 | S MSG=""
|
---|
102 | F I=1:1 S MSG=$O(^TMP("PRCVRIL",$J,"NAK",MSG)) Q:MSG="" D
|
---|
103 | .S ^TMP("HLA",$J,I)=^TMP("PRCVRIL",$J,"NAK",MSG)
|
---|
104 | S PRCVRES=""
|
---|
105 | D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"GM",1,.PRCVRES)
|
---|
106 | ;I +$P(PRCVRES,U,2) D
|
---|
107 | ;.S PRCVERR(ERRCNT)="Application ACK not processed. Contact EVS."
|
---|
108 | MAIL ;Send MailMan message with error
|
---|
109 | Q:LENVAL="NOTOK"
|
---|
110 | N XMDUZ,XMMG,XMSUB,XMTEXT,XMY,XMZ
|
---|
111 | S XMSUB="RIL build errors in HL7 message "_HL("MID")_" "
|
---|
112 | S XMDUZ="IFCAP/DynaMed Interface"
|
---|
113 | S XMTEXT="PRCVERR("
|
---|
114 | D GETFCPU^PRCVLIC(.XMY,PRCSITE,PRCFCP)
|
---|
115 | D ^XMD
|
---|
116 | K XMDUZ,XMMG,XMSUB,XMTEXT,XMY,XMZ
|
---|
117 | Q
|
---|
118 | ;
|
---|
119 | ACKIT ;Send an acknowledgement that everything went fine
|
---|
120 | ;
|
---|
121 | I HL("APAT")'="AL" Q
|
---|
122 | F I=1:1:1 S ^TMP("HLA",$J,I)=$G(^TMP("PRCVRIL",$J,"ACK",I))
|
---|
123 | ;
|
---|
124 | D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"GM",1,.PRCVRES)
|
---|
125 | ;I +P(PRCVRES,U,2) D
|
---|
126 | ;.I $D(ERRCNT)=0 S ERRCNT=1
|
---|
127 | ;.S PRCVERR(ERRCNT)="Application ACK not processed. Contact EVS."
|
---|
128 | ;.D MAIL
|
---|
129 | Q
|
---|