| [613] | 1 | PRCPHLQU ;WISC/CC/DWA-Build/receive HL7 messages for QOH queries ;4/00
 | 
|---|
 | 2 | V ;;5.1;IFCAP;**1,24,52**;Oct 20, 2000
 | 
|---|
 | 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 |  Q
 | 
|---|
 | 6 |  ;
 | 
|---|
 | 7 | BLDSEG(INVPT) ;
 | 
|---|
 | 8 |  ;
 | 
|---|
 | 9 |  N %,%H,%I,CNT,DATETIME,HLA,HLCS,HLEVN,HLFS,MC,MYRESULT,MYOPTNS,SEG
 | 
|---|
 | 10 |  S CNT=0
 | 
|---|
 | 11 |  I $P($G(^PRCP(445,INVPT,5)),"^",1)']"" Q  ; no supply station
 | 
|---|
 | 12 |  ;
 | 
|---|
 | 13 |  ; set up environment for message
 | 
|---|
 | 14 | 1 D INIT^HLFNC2("PRCP EV QOH REQ",.HL)
 | 
|---|
 | 15 |  ; S HLL("LINKS",1)="PRCP EV QOH REQ"_"^"_$P(^PRCP(445.5,$P(^PRCP(445,INVPT,5),"^",1),0),"^",3)
 | 
|---|
 | 16 |  I $G(HL) D  Q  ; error occurred
 | 
|---|
 | 17 |  . ; put error handler here for init failure
 | 
|---|
 | 18 |  . W !,"HL7 can't build your QOH update request now.  Please try later."
 | 
|---|
 | 19 |  . W !,"HL7 Error: "_$P(HL,"^",2)
 | 
|---|
 | 20 |  S HLFS=$G(HL("FS")) I HLFS="" S HLFS="|"
 | 
|---|
 | 21 |  S HLCS=$E(HL("ECH"),1)
 | 
|---|
 | 22 |  ;
 | 
|---|
 | 23 |  ; Add message txt to HLA array
 | 
|---|
 | 24 |  ; create QRD segment
 | 
|---|
 | 25 | 2 D NOW^%DTC S DATETIME=$P(17000000+%,".",1)_$P(%,".",2)
 | 
|---|
 | 26 |  S SEG="QRD"_HL("FS")_DATETIME_HL("FS")_"R"_HL("FS")_"D"_HL("FS")_"QOH"_HL("FS")_HL("FS")_HL("FS")_HL("FS")_HL("FS")_"STA"_HL("FS")_HL("FS")_HL("FS")_"S"
 | 
|---|
 | 27 |  S HLA("HLS",1)=SEG
 | 
|---|
 | 28 |  ;
 | 
|---|
 | 29 |  ; create QRF segment
 | 
|---|
 | 30 |  S SEG="QRF"_HL("FS")_HL("FS")_DATETIME_HL("FS")_HL("FS")_HL("FS")_"~"_$P(^PRCP(445,INVPT,0),"^",1)
 | 
|---|
 | 31 |  S HLA("HLS",2)=SEG
 | 
|---|
 | 32 |  ;
 | 
|---|
 | 33 |  S HLL("LINKS",1)="PRCP SU QOH REQ"_"^"_$P(^PRCP(445.5,$P(^PRCP(445,INVPT,5),"^",1),0),"^",3)
 | 
|---|
 | 34 |  ;
 | 
|---|
 | 35 |  ;call HL7 to transmit message
 | 
|---|
 | 36 | 3 D GENERATE^HLMA("PRCP EV QOH REQ","LM",1,.MYRESULT,"",.MYOPTNS)
 | 
|---|
 | 37 |  I $P(MYRESULT,"^",2,3)]"" D
 | 
|---|
 | 38 |  . ; error handler for message send failures
 | 
|---|
 | 39 |  . W !,"ERROR: ",MYRESULT
 | 
|---|
 | 40 |  Q
 | 
|---|
 | 41 |  ;
 | 
|---|
 | 42 | GETMSG(PRCPDA,PRCPDONE) ; receive query information from file 447.1
 | 
|---|
 | 43 |  N ITEMDATA,PRCPDATA,PRCPHL7,PRCPITDA,PRCPITEM,PRCPITNM,PRCPLEFT,PRCPQTY,PRCPREP,PRCPSEC,PRCPSITE,PRCPSSFL,PRCPWHEN
 | 
|---|
 | 44 |  ;
 | 
|---|
 | 45 |  S PRCPDATA=^PRCP(447.1,PRCPDA,0)
 | 
|---|
 | 46 |  S PRCPHL7=$P(PRCPDATA,"^",6)_".447.1"
 | 
|---|
 | 47 |  S PRCPSITE=$P(PRCPDATA,"^",2)
 | 
|---|
 | 48 |  S PRCPSEC=$P(PRCPDATA,"^",3)
 | 
|---|
 | 49 |  S PRCPWHEN=$P(PRCPDATA,"^",4)
 | 
|---|
 | 50 |  S PRCPREP=0 ; flag to replace current GIP values
 | 
|---|
 | 51 |  S PRCPSSFL=$P($G(^PRCP(445.5,$P($G(^PRCP(445,PRCPSEC,5)),"^",1),0)),"^",2)
 | 
|---|
 | 52 |  ;
 | 
|---|
 | 53 |  L +^PRCP(445,PRCPSEC,7):3 I $T=0 Q
 | 
|---|
 | 54 |  D ADD^PRCPULOC(445,PRCPSEC_"-7",0,"HL7 Transaction processing")
 | 
|---|
 | 55 |  S PRCPREP=$G(^PRCP(445,PRCPSEC,7))
 | 
|---|
 | 56 |  I +PRCPREP=0!($P(PRCPREP,"^",2)]""&($P(PRCPREP,"^",2)'<PRCPWHEN)) D
 | 
|---|
 | 57 |  . S PRCPREP=0
 | 
|---|
 | 58 |  . L -^PRCP(445,PRCPSEC,7)
 | 
|---|
 | 59 |  . D CLEAR^PRCPULOC(445,PRCPSEC_"-7",0)
 | 
|---|
 | 60 |  I '$D(^PRCP(445,PRCPSEC)) S ERR="3A" G ERR ; secondary not in GIP
 | 
|---|
 | 61 |  I $P(^PRCP(445,PRCPSEC,0),"^",3)'="S" S ERR="3B" G ERR ; not a secondary
 | 
|---|
 | 62 |  I $P($G(^PRCP(445,PRCPSEC,5)),"^",1)']"" S ERR="3F" G ERR ; not a supply station secondary
 | 
|---|
 | 63 |  S PRCPHLPO("DATE")=PRCPWHEN
 | 
|---|
 | 64 |  S PRCPHLPO("REASON")=""
 | 
|---|
 | 65 |  S PRCPHLPO("RECIPIENT")=""
 | 
|---|
 | 66 |  S PRCPHLPO("USER")=""
 | 
|---|
 | 67 |  I PRCPREP'=0 D
 | 
|---|
 | 68 |  . N Y
 | 
|---|
 | 69 |  . S Y=$P(PRCPREP,"^",2) D DD^%DT
 | 
|---|
 | 70 |  . S PRCPHLPO("REASON")=":Authorized "_Y_" by "_$P(^VA(200,+PRCPREP,0),"^",1)
 | 
|---|
 | 71 |  . S PRCPHLPO("USER")=$P(PRCPREP,"^",1)
 | 
|---|
 | 72 |  . S PRCPHLPO("TRAN")=$$ORDERNO^PRCPUTRX(PRCPSEC)
 | 
|---|
 | 73 |  ;
 | 
|---|
 | 74 |  S PRCPITDA=0
 | 
|---|
 | 75 | LOOP S PRCPITDA=$O(^PRCP(447.1,PRCPDA,1,PRCPITDA)) I '+PRCPITDA G Q
 | 
|---|
 | 76 |  S PRCPDATA=^PRCP(447.1,PRCPDA,1,PRCPITDA,0)
 | 
|---|
 | 77 |  S PRCPITEM=$P(PRCPDATA,"^",1)
 | 
|---|
 | 78 |  S PRCPITNM=$P(PRCPDATA,"^",4)
 | 
|---|
 | 79 |  S PRCPLEFT=$P(PRCPDATA,"^",2)
 | 
|---|
 | 80 |  I '$D(^PRCP(445,PRCPSEC,1,PRCPITEM,0)) S PRCPQTY(+PRCPITEM)=PRCPLEFT_"^"_PRCPITNM_"^**Not in Inv Pt." G LOOP
 | 
|---|
 | 81 |  I $P(^PRCP(445,PRCPSEC,1,PRCPITEM,0),"^",9)'>0 S PRCPQTY(+PRCPITEM)=+PRCPLEFT_"^"_PRCPITNM_"^**Not a SS item" G LOOP
 | 
|---|
 | 82 |  I $P($G(^PRC(441,+PRCPITEM,0)),"^",6)="S" S PRCPQTY(+PRCPITEM)=+PRCPLEFT_"^"_PRCPITNM_"^**CC or IK, not SS item" G LOOP
 | 
|---|
 | 83 |  ; compare name in 445 with name sent, CONTINUE
 | 
|---|
 | 84 |  I PRCPSSFL="O",$P(^PRC(441,PRCPITEM,0),"^",2)'=PRCPITNM D NAME^PRCPHL70(PRCPSEC,PRCPITEM,PRCPITNM,PRCPSSFL,PRCPHL7) ; name differs, send message
 | 
|---|
 | 85 |  I PRCPSSFL="S",$G(^PRCP(445,PRCPSEC,1,PRCPITEM,6))'=PRCPITNM D NAME^PRCPHL70(PRCPSEC,PRCPITEM,PRCPITNM,PRCPSSFL,PRCPHL7) ; name differs, send message
 | 
|---|
 | 86 |  S PRCPDATA=$G(^PRCP(445,PRCPSEC,1,PRCPITEM,9))
 | 
|---|
 | 87 |  I $P(PRCPDATA,"^",2)'>PRCPWHEN D
 | 
|---|
 | 88 |  . S $P(PRCPDATA,"^",2)=PRCPWHEN
 | 
|---|
 | 89 |  . S $P(PRCPDATA,"^",1)=PRCPLEFT
 | 
|---|
 | 90 |  . S ^PRCP(445,PRCPSEC,1,PRCPITEM,9)=PRCPDATA
 | 
|---|
 | 91 |  S PRCPHLPO("ITEM")=^PRCP(445,PRCPSEC,1,PRCPITEM,0)
 | 
|---|
 | 92 |  I PRCPREP'=0 D
 | 
|---|
 | 93 |  . S PRCPHLPO("QTY")=PRCPLEFT-$P(PRCPHLPO("ITEM"),"^",7)
 | 
|---|
 | 94 |  . S PRCPHLPO("INVVAL")=$J(PRCPHLPO("QTY")*$P(PRCPHLPO("ITEM"),"^",22),0,2)
 | 
|---|
 | 95 |  . S PRCPHLPO("SELVAL")=PRCPHLPO("INVVAL")
 | 
|---|
 | 96 |  . D UPDATE^PRCPHL1(PRCPSEC,PRCPITEM,PRCPLEFT,.PRCPHLPO,"Q")
 | 
|---|
 | 97 |  I PRCPREP=0,$P(PRCPHLPO("ITEM"),"^",7)'=PRCPLEFT S PRCPQTY(PRCPITEM)=PRCPLEFT_"^"_$P(PRCPHLPO("ITEM"),"^",7)
 | 
|---|
 | 98 |  G LOOP
 | 
|---|
 | 99 |  ;
 | 
|---|
 | 100 | Q N ITEM,ITEMNAME,LN,PRCPXMY,QTYSS,QTYIP,SSTYPE,XMB,XMDUZ,XMTEXT
 | 
|---|
 | 101 |  S SSTYPE=$P(^PRCP(445.5,$P(^PRCP(445,PRCPSEC,5),"^",1),0),"^",2)
 | 
|---|
 | 102 |  K ^TMP($J,"PRCPHL7")
 | 
|---|
 | 103 |  S ITEM=0,LN=1
 | 
|---|
 | 104 |  F  S ITEM=$O(PRCPQTY(ITEM)) Q:'ITEM  D
 | 
|---|
 | 105 |  . S ITEMNAME=$P($G(^PRCP(445,PRCPSEC,1,ITEM,6)),"^",1)
 | 
|---|
 | 106 |  . I SSTYPE="O" S ITEMNAME=$P(^PRC(441,ITEM,0),"^",2)
 | 
|---|
 | 107 |  . S QTYSS=+PRCPQTY(ITEM),QTYIP=+$P(PRCPQTY(ITEM),"^",2)
 | 
|---|
 | 108 |  . S ^TMP($J,"PRCPHL7",1,LN,0)=$E("       ",$L(QTYIP)+1,7)_QTYIP_" "_$E("       ",$L(QTYSS)+1,7)_QTYSS_" "_$E("       ",$L(ITEM)+1,7)_ITEM_" "_$E(ITEMNAME,1,30)_" "_$P(PRCPQTY(ITEM),"^",3)
 | 
|---|
 | 109 |  . S LN=LN+1
 | 
|---|
 | 110 |  I PRCPREP=0,'$O(PRCPQTY(0)) S ^TMP($J,"PRCPHL7",1,1,0)="<no discrepancies found>"
 | 
|---|
 | 111 |  I PRCPREP'=0 S ^TMP($J,"PRCPHL7",1,1,0)="<The GIP on-hand quantity has been adjusted to supply station totals>"
 | 
|---|
 | 112 |  S ^TMP($J,"PRCPHL7",1)=LN
 | 
|---|
 | 113 |  D GETUSER^PRCPXTRM(PRCPSEC) Q:'$O(PRCPXMY(""))  ; send message to secondary inventory point managers
 | 
|---|
 | 114 |  F  S ITEM=$O(PRCPXMY(ITEM)) Q:ITEM'>0  I PRCPXMY(ITEM)=1 S XMY(ITEM)=""
 | 
|---|
 | 115 |  S XMTEXT="^TMP($J,""PRCPHL7"",1,"
 | 
|---|
 | 116 |  S XMB(1)=$$INVNAME^PRCPUX1(PRCPSEC)
 | 
|---|
 | 117 |  S XMB="PRCP_ALL_ITEMS_QTY_UPDATE"
 | 
|---|
 | 118 |  S XMDUZ="SUPPLY STATION INTERFACE"
 | 
|---|
 | 119 |  D EN^XMB
 | 
|---|
 | 120 |  K ^TMP($J,"PRCPHL7")
 | 
|---|
 | 121 |  ;
 | 
|---|
 | 122 |  S $P(^PRCP(445,PRCPSEC,6),"^",1)=PRCPWHEN
 | 
|---|
 | 123 |  I PRCPREP'=0 D
 | 
|---|
 | 124 |  . N DIE,DA,DR
 | 
|---|
 | 125 |  . L -^PRCP(445,PRCPSEC,7) D CLEAR^PRCPULOC(445,PRCPSEC_"-7",0)
 | 
|---|
 | 126 |  . S DIE="^PRCP(445,",DA=PRCPSEC,DR="24////@;25////@" D ^DIE
 | 
|---|
 | 127 |  S PRCPDONE=1
 | 
|---|
 | 128 |  Q
 | 
|---|
 | 129 |  ;
 | 
|---|
 | 130 | ERR ;
 | 
|---|
 | 131 |  N NUMBER,PRCPXMY
 | 
|---|
 | 132 |  S NUMBER=ERR
 | 
|---|
 | 133 |  S PRCPHLPO("SIPNAME")="" I $D(PRCPSEC) S PRCPHLPO("SIPNAME")=$$INVNAME^PRCPUX1(PRCPSEC)
 | 
|---|
 | 134 |  S PRCPHLPO("ITEM")="" I $D(PRCPITEM) S PRCPHLPO("ITEM")=PRCPITEM
 | 
|---|
 | 135 |  S PRCPHLPO("NAME")="" I $D(PRCPITEM) S PRCPHLPO("NAME")=PRCPITNM
 | 
|---|
 | 136 |  S PRCPHLPO("LEFT")="" I $D(PRCPLEFT) S PRCPHLPO("LEFT")=PRCPLEFT
 | 
|---|
 | 137 |  D ERR^PRCPHLM0(NUMBER,"PRCP_BAD_QUERY",PRCPSEC,.PRCPHLPO,PRCPHL7,"")
 | 
|---|
 | 138 |  S PRCPDONE=1
 | 
|---|
 | 139 |  Q
 | 
|---|