1 | PRCVRC2 ;WOIFO/BMM - silently build RIL for DynaMed ; 12/16/04
|
---|
2 | V ;;5.1;IFCAP;**81**;Oct 20, 2000
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ;validation, error code for PRCVRC1
|
---|
6 | ;
|
---|
7 | Q
|
---|
8 | ;
|
---|
9 | GETFY(PRCVDT) ;return the fiscal year, PRCVDT is date/time the DM
|
---|
10 | ;message was created (thus the date/time for RIL)
|
---|
11 | ;
|
---|
12 | Q $E(100+$E(PRCVDT,2,3)+$E(PRCVDT,4),2,3)
|
---|
13 | ;
|
---|
14 | GETQTR(PRCVDT) ;return the fiscal quarter, PRCVDT is date/time the DM
|
---|
15 | ;message was created (thus the date/time for RIL)
|
---|
16 | ;
|
---|
17 | N QTR S QTR=+$E(PRCVDT,4,5)
|
---|
18 | Q $P("2^2^2^3^3^3^4^4^4^1^1^1","^",+QTR)
|
---|
19 | ;
|
---|
20 | GETTXN(PRCVSTR) ;obtain current transaction number (if exists) from
|
---|
21 | ;Transaction Number file (#410.1)
|
---|
22 | ;increment transaction for current use, update 410.1 entry
|
---|
23 | ;return new transaction number for this RIL
|
---|
24 | ;PRCVSTR is Entry Number, comes in as "station-fy-qtr-fcp-cc"
|
---|
25 | ;TXN is transaction #, PRCVRN is IEN for 410.1 entry
|
---|
26 | ;NOTE: CHECK 410 too, look in EN1^PRCSUT3, lines 8-10 etc.
|
---|
27 | ;
|
---|
28 | Q:$G(PRCVSTR)="" 0
|
---|
29 | N TXN,PRCVE,PRCVRN S TXN="",(PRCVRN,PRCVE)=0
|
---|
30 | ;check if Entry Number def in 410.1
|
---|
31 | K ATXN
|
---|
32 | D FIND^DIC(410.1,,"1","BX",PRCVSTR,,,,,"ATXN")
|
---|
33 | ;
|
---|
34 | S TXN=+$G(ATXN("DILIST","ID",1,1))
|
---|
35 | S PRCVRN=$G(ATXN("DILIST",2,1))
|
---|
36 | I TXN<1 D Q:PRCVE=1 0
|
---|
37 | . ;TXN=0 so Entry Number not def, create new
|
---|
38 | . K PRCVAT S PRCVAT(410.1,"+1,",.01)=PRCVSTR
|
---|
39 | . S PRCVAT(410.1,"+1,",2)=DT
|
---|
40 | . S PRCVAT(410.1,"+1,",1)=1
|
---|
41 | . D UPDATE^DIE("","PRCVAT","PRCVRN")
|
---|
42 | . ;don't send msg here
|
---|
43 | . ;I $D(^TMP("DIERR",$J)) D SENDMSG(7,PRCVGL,0,1) S PRCVE=1 Q
|
---|
44 | . I $D(^TMP("DIERR",$J)) S PRCVE=1 Q
|
---|
45 | . S PRCVRN=PRCVRN(1)
|
---|
46 | S TXN=TXN+1
|
---|
47 | K PRCVSA S PRCVSA(410.1,PRCVRN_",",1)=TXN
|
---|
48 | D FILE^DIE("","PRCVSA")
|
---|
49 | ;don't send msg here
|
---|
50 | ;I $D(^TMP("DILIST",$J)) D SENDMSG(7,PRCVGL,0,1) Q 0
|
---|
51 | I $D(^TMP("DILIST",$J)) Q 0
|
---|
52 | S TXN="000"_TXN,TXN=$E(TXN,$L(TXN)-3,$L(TXN))
|
---|
53 | Q TXN
|
---|
54 | ;
|
---|
55 | CHKDT(INDT) ;check the incoming date (date/time message created) against
|
---|
56 | ;the present date. date/time message created must be today or in
|
---|
57 | ;the past. if INDT is today or before today then return 1, else
|
---|
58 | ;return 0
|
---|
59 | ;both dates are in Fileman format ex. 3050503.12446
|
---|
60 | ;
|
---|
61 | Q:$G(INDT)="" 0
|
---|
62 | N %,PRESENT,PRCVDIFF
|
---|
63 | D NOW^%DTC S PRESENT=%
|
---|
64 | S PRCVDIFF=$$FMDIFF^XLFDT(PRESENT,INDT,1)
|
---|
65 | I PRCVDIFF'<0 Q 1
|
---|
66 | Q 0
|
---|
67 | ;
|
---|
68 | CHKDTN(INDT) ;check the incoming date (Date Needed By from DynaMed)
|
---|
69 | ;against the present date. Date Needed By must be today or in the
|
---|
70 | ;future. if INDT is today or after today then return 1, else return 0
|
---|
71 | ;both dates are in FileMan format ex. 3050503.12446
|
---|
72 | ;
|
---|
73 | Q:$G(INDT)="" 0
|
---|
74 | N %,PRESENT,PRCVDIFF
|
---|
75 | D NOW^%DTC S PRESENT=%
|
---|
76 | S PRCVDIFF=$$FMDIFF^XLFDT(PRESENT,INDT,1)
|
---|
77 | I PRCVDIFF'>0 Q 1
|
---|
78 | Q 0
|
---|
79 | ;
|
---|
80 | CHKBOC(ITEM,BOC) ;test BOC from passed-in detail record
|
---|
81 | ;
|
---|
82 | Q:$G(ITEM)="" 0
|
---|
83 | N PRCVIBOC
|
---|
84 | S PRCVIBOC=$$GET1^DIQ(441,ITEM_",",12,"I")
|
---|
85 | I PRCVIBOC'=BOC Q 0
|
---|
86 | Q 1
|
---|
87 | ;
|
---|
88 | CHKFCP(PRCVFCP,PRCVST) ;validate that FCP is in 420
|
---|
89 | ;
|
---|
90 | Q:$G(PRCVFCP)=""!($G(PRCVST)="") 0
|
---|
91 | N PRCVE,PRCVN,PRCVVAL
|
---|
92 | S PRCVVAL=1,PRCVN=0
|
---|
93 | S PRCVN=$$FIND1^DIC(420.01,","_PRCVST_",","",PRCVFCP_" ","B","","PRCVE")
|
---|
94 | I +PRCVN'>0 S PRCVVAL=0
|
---|
95 | Q PRCVVAL
|
---|
96 | ;
|
---|
97 | CHKITM(PRCVITM) ;check extracted item number:
|
---|
98 | ;1. must be greater than 100000
|
---|
99 | ;2. must be defined in Item Master (#441) file
|
---|
100 | ;3. must not be inactive (441 field 16 '=1)
|
---|
101 | ;
|
---|
102 | Q:$G(PRCVITM)="" 0
|
---|
103 | N CITM S CITM=0
|
---|
104 | ;N NITM
|
---|
105 | ;S NITM=$$FIND1^DIC(441,"","X",PRCVITM,"","","ATXN")
|
---|
106 | ;I '$D(ATXN) Q 1
|
---|
107 | I PRCVITM'<100000,$D(^PRC(441,"B",PRCVITM)) D
|
---|
108 | . I +$$GET1^DIQ(441,PRCVITM_",",16,"I")=0 S CITM=1
|
---|
109 | Q CITM
|
---|
110 | ;
|
---|
111 | CHKVEND(VENDN) ;check that vendor in Vendor file is active.
|
---|
112 | ;VENDN is Vendor number
|
---|
113 | ;
|
---|
114 | Q:+VENDN=0 0
|
---|
115 | N NVNDP,CHKFLG
|
---|
116 | S CHKFLG=0
|
---|
117 | I $D(^PRC(440,VENDN,0)),$$GET1^DIQ(440,VENDN_",",32,"I")="" S CHKFLG=1
|
---|
118 | Q CHKFLG
|
---|
119 | ;
|
---|
120 | CHKVI(VENDN,ITMN) ;check that vendor VENDN sells item ITMN
|
---|
121 | ;can't use $$FIND1^DIC since could be >1 cross-ref and >1 node
|
---|
122 | ;
|
---|
123 | N ITMNN,VENDP,CHKFLG
|
---|
124 | S (VENDP,ITMNN,CHKFLG)=0
|
---|
125 | Q:+VENDN=0!(+ITMN=0) CHKFLG
|
---|
126 | ;get item ien, quit if undef
|
---|
127 | S ITMNN=$O(^PRC(441,"B",ITMN,0))
|
---|
128 | Q:ITMNN="" CHKFLG
|
---|
129 | ;get pointer to vendor ien
|
---|
130 | S VENDP=$O(^PRC(441,ITMNN,2,"B",VENDN,0))
|
---|
131 | ;check that vendor is defined
|
---|
132 | I VENDP>0,$D(^PRC(440,VENDP,0)) S CHKFLG=1
|
---|
133 | ;if item file defined and vendor for item defined, good
|
---|
134 | Q CHKFLG
|
---|
135 | ;
|
---|
136 | CHKDUZ(INDUZ) ;validate that DUZ against New Person (#200)
|
---|
137 | ;
|
---|
138 | N DUZFLG S DUZFLG=0
|
---|
139 | Q:$G(INDUZ)="" DUZFLG
|
---|
140 | I $D(^VA(200,INDUZ,0)) S DUZFLG=1
|
---|
141 | Q DUZFLG
|
---|
142 | ;
|
---|
143 | CHKNIF(ITEM,NIF) ;use the passed-in item to check that the passed-in
|
---|
144 | ;NIF# is correct. return 1 if valid, 0 if not valid
|
---|
145 | ;
|
---|
146 | N PRCVINIF
|
---|
147 | S PRCVINIF=$$GET1^DIQ(441,ITEM_",",51)
|
---|
148 | I PRCVINIF=NIF Q 1
|
---|
149 | Q 0
|
---|
150 | ;
|
---|
151 | MAKECAP(INSTR) ;take INSTR and return an all-caps version of it
|
---|
152 | ;
|
---|
153 | Q:$G(INSTR)="" ""
|
---|
154 | N X,Y
|
---|
155 | S X=INSTR X ^%ZOSF("UPPERCASE")
|
---|
156 | Q Y
|
---|
157 | ;
|
---|
158 | SENDMSG(EC,PRCVGL,CTR,ERPC) ;send an alert or error message back to
|
---|
159 | ;DynaMed via VIE by posting "ERR" node to appropriate ^XTMP node
|
---|
160 | ;
|
---|
161 | ;the error text is currently stored in the routine PRCVRC3
|
---|
162 | ;
|
---|
163 | ;EC is the error code
|
---|
164 | ;use EC to get the description and severity
|
---|
165 | ;the message is built in ECSTR and the "ERR" node in ^XTMP is
|
---|
166 | ; created using passed-in message id in MID. the error message
|
---|
167 | ; is appended to "ERR" and is separated by other error messages
|
---|
168 | ; already there with a carat ("^")
|
---|
169 | ;PRCVGL is the ^XTMP subscript and CTR is the detail counter #
|
---|
170 | ;ERPC is the data piece in the line item node or header node to
|
---|
171 | ; which the error pertains
|
---|
172 | ;
|
---|
173 | N X S X="PRCVRC3"
|
---|
174 | X ^%ZOSF("TEST") I '$T Q
|
---|
175 | N ECSTR,OVERSTR,ERRCTR
|
---|
176 | S ERPC=$G(ERPC)
|
---|
177 | S ECSTR=ERPC_"^"_$P($T(ET+EC^PRCVRC3),";;",2),CTR=+CTR
|
---|
178 | I CTR'=0 D
|
---|
179 | . S ERRCTR=+$O(^XTMP(PRCVGL,2,CTR,"ERR",""),-1)
|
---|
180 | . S ERRCTR=ERRCTR+1,^XTMP(PRCVGL,2,CTR,"ERR",ERRCTR)=ECSTR
|
---|
181 | I CTR=0 D
|
---|
182 | . S ERRCTR=+$O(^XTMP(PRCVGL,1,"ERR",""),-1)
|
---|
183 | . S ERRCTR=ERRCTR+1,^XTMP(PRCVGL,1,"ERR",ERRCTR)=ECSTR
|
---|
184 | Q
|
---|
185 | ;
|
---|
186 | ADDAUD(ADDSTR) ;add "^"-pieces from ADDSTR as fields to a new record in
|
---|
187 | ;the Audit file #410.02
|
---|
188 | ;
|
---|
189 | ;ADDSTR pieces: DynaMed Doc ID ^ Item # ^ Vendor ^ User DUZ ^
|
---|
190 | ; Last name,First name ^ RIL# ^ date/time RIL created ^
|
---|
191 | ; date/time message created (DynaMed requisition) ^ date needed
|
---|
192 | ;
|
---|
193 | Q:$G(ADDSTR)=""
|
---|
194 | ;
|
---|
195 | ;set up entry
|
---|
196 | N PRCVA,PRCVI,PRCVP,PRCVRIL,PRCVTMP S PRCVA="",PRCVP=0
|
---|
197 | F PRCVI=.01,1,2,3,13,4,5,6,12 S PRCVP=PRCVP+1 D
|
---|
198 | . S PRCVA(414.02,"+1,",PRCVI)=$P(ADDSTR,U,PRCVP)
|
---|
199 | ;add record to Audit File
|
---|
200 | D UPDATE^DIE("","PRCVA")
|
---|
201 | ;if error, send bulletin
|
---|
202 | I $D(^TMP("DIERR",$J)) D Q
|
---|
203 | . S PRCVTMP="PRCVRC2",PRCVRIL=$P(ADDSTR,U,5)
|
---|
204 | . S XMB(1)="creating an entry in the DynaMed Audit File (#414.02)"
|
---|
205 | . S XMB(2)=$P(ADDSTR,U)
|
---|
206 | . S XMB(3)="unable to create Audit File entry"
|
---|
207 | . S ^TMP($J,"PRCVRC2",1,0)="",PRCVP=1
|
---|
208 | . S ^TMP($J,"PRCVRC2",2,0)="DynaMed Doc ID: "_$P(ADDSTR,U)
|
---|
209 | . S ^TMP($J,"PRCVRC2",3,0)="Item #: "_$P(ADDSTR,U,2)
|
---|
210 | . S ^TMP($J,"PRCVRC2",4,0)="Vendor #: "_$P(ADDSTR,U,3)
|
---|
211 | . S ^TMP($J,"PRCVRC2",5,0)="User DUZ: "_$P(ADDSTR,U,4)
|
---|
212 | . S ^TMP($J,"PRCVRC2",6,0)="RIL #: "_$P(ADDSTR,U,5)
|
---|
213 | . S ^TMP($J,"PRCVRC2",7,0)="Message date/time: "_$P(ADDSTR,U,6)
|
---|
214 | . S ^TMP($J,"PRCVRC2",8,0)="RIL create date: "_PRCVRIL
|
---|
215 | . S ^TMP($J,"PRCVRC2",9,0)="Date Needed: "_$P(ADDSTR,U,8)
|
---|
216 | . S ^TMP($J,"PRCVRC2",10,0)="Error: "_$G(^TMP("DIERR",$J,1,"TEXT",1))
|
---|
217 | . S PRCVST=$P(PRCVRIL,"-"),PRCVFCP=$P(PRCVRIL,"-",4)
|
---|
218 | . D DMERXMB^PRCVLIC(PRCVTMP,PRCVST,PRCVFCP)
|
---|
219 | Q
|
---|
220 | ;
|
---|