| 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 |  ;
 | 
|---|