| [613] | 1 | PRCPHLP ;WISC/CC - PROCESS HL7 TXN ON REFILLS AND ORDER POSTING; 4/00
 | 
|---|
 | 2 | V ;;5.1;IFCAP;**1**;Oct 20, 2000
 | 
|---|
 | 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 |  N DIC,DIE,DR,ERR,I,J,X,XMB
 | 
|---|
 | 6 |  N NUMBER,ORDERDA,PRIM
 | 
|---|
 | 7 |  N PRCPAMT,PRCPHL,PRCPHLPO,PRCPITEM,PRCPLEFT,PRCPOC,PRCPORD
 | 
|---|
 | 8 |  N PRCPSEC,PRCPSECN,PRCPSET,PRCPSITE,PRCPTIME,PRCPUSER
 | 
|---|
 | 9 |  ;
 | 
|---|
 | 10 |  S I=1
 | 
|---|
 | 11 |  I HL("MTN")'="ORM" S ERR="1B" G ERR ; wrong message name
 | 
|---|
 | 12 |  X HLNEXT I HLQUIT'>0 S ERR="1A" G ERR ; missing segments
 | 
|---|
 | 13 |  S PRCPHL(1)=HLNODE,I=2
 | 
|---|
 | 14 |  ;
 | 
|---|
 | 15 |  X HLNEXT I HLQUIT'>0 S ERR="1A" G ERR ; missing segments
 | 
|---|
 | 16 |  S PRCPHL(I)=HLNODE,J=0,I=I+1
 | 
|---|
 | 17 |  I $$FLD^HLCSUTL(HLNODE,1)'="ORC" S ERR="1A" G ERR ; wrong segment name
 | 
|---|
 | 18 |  D ORC I $D(ERR) G ERR
 | 
|---|
 | 19 |  ;
 | 
|---|
 | 20 |  X HLNEXT I HLQUIT'>0,PRCPOC="OF" S ERR="1A" G ERR ; missing segments
 | 
|---|
 | 21 |  ; Order completion transactions will only have an ORC segment
 | 
|---|
 | 22 |  I HLQUIT'>0,PRCPOC="FU" G PROCESS
 | 
|---|
 | 23 |  S PRCPHL(I)=HLNODE,I=I+1,J=0
 | 
|---|
 | 24 |  I PRCPOC="FU" S ERR="1A" G ERR ; too many segments for order class code
 | 
|---|
 | 25 |  I $$FLD^HLCSUTL(HLNODE,1)'="RQD" S ERR="1A" G ERR ; wrong segment name
 | 
|---|
 | 26 |  ;
 | 
|---|
 | 27 |  ; RQD SEGMENT
 | 
|---|
 | 28 | RQD S PRCPITEM=$$FLD^HLCSUTL(HLNODE,5) ; ID~NAME
 | 
|---|
 | 29 |  S PRCPAMT=$$FLD^HLCSUTL(HLNODE,6) ; REFILL QTY - restock issue units
 | 
|---|
 | 30 |  ;
 | 
|---|
 | 31 |  ; check item info
 | 
|---|
 | 32 |  I +PRCPITEM'=$P(PRCPITEM,$E(HL("ECH"),1),1)!(+PRCPITEM=0) S ERR="6E" G ERR ; item number invalid
 | 
|---|
 | 33 |  I '$D(^PRCP(445.3,ORDERDA,1,$P(PRCPITEM,$E(HL("ECH"),1),1))) S ERR="6A" G ERR ; item not on order
 | 
|---|
 | 34 |  I '$D(^PRCP(445,$P(^PRCP(445.3,ORDERDA,0),"^",2),1,$P(PRCPITEM,$E(HL("ECH"),1),1))) S ERR="6B" G ERR ; item not in primary 
 | 
|---|
 | 35 |  I '$D(^PRCP(445,PRCPSECN,1,$P(PRCPITEM,$E(HL("ECH"),1),1))) S ERR="6C" G ERR
 | 
|---|
 | 36 |  I $P(^PRCP(445,PRCPSECN,1,$P(PRCPITEM,$E(HL("ECH"),1),1),0),"^",9)'>0 S ERR="6D" G ERR ; is item a supply station item
 | 
|---|
 | 37 |  I $P($G(^PRC(441,$P(PRCPITEM,$E(HL("ECH"),1)),0)),"^",6)="S" S ERR="6G" G ERR ; case cart/ik
 | 
|---|
 | 38 |  ;
 | 
|---|
 | 39 |  ; verify amount
 | 
|---|
 | 40 |  I +PRCPAMT'=PRCPAMT!(PRCPAMT>999999)!(PRCPAMT<-999999) S ERR=4 G ERR
 | 
|---|
 | 41 |  ;
 | 
|---|
 | 42 |  X HLNEXT I HLQUIT'>0 S ERR="1A" G ERR ; missing segments
 | 
|---|
 | 43 |  S PRCPHL(I)=HLNODE,J=0,I=I+1
 | 
|---|
 | 44 |  I $$FLD^HLCSUTL(HLNODE,1)'="NTE" S ERR="1A" G ERR ; wrong segment name
 | 
|---|
 | 45 |  ;
 | 
|---|
 | 46 |  ; READ NTE SEGMENT
 | 
|---|
 | 47 | NTE S PRCPLEFT=$$FLD^HLCSUTL(HLNODE,4)
 | 
|---|
 | 48 |  I +PRCPLEFT'=PRCPLEFT!(PRCPLEFT>999999)!(PRCPLEFT<-999999) S ERR=5 G ERR
 | 
|---|
 | 49 |  ;
 | 
|---|
 | 50 |  X HLNEXT I HLQUIT'>0 G PROCESS
 | 
|---|
 | 51 |  S PRCPHL(I)=HLNODE,I=I+1,J=0
 | 
|---|
 | 52 |  S ERR="1A" G ERR ; too many segments
 | 
|---|
 | 53 |  G Q
 | 
|---|
 | 54 |  ;
 | 
|---|
 | 55 |  ; ORC SEGMENT
 | 
|---|
 | 56 | ORC S PRCPOC=$$FLD^HLCSUTL(HLNODE,2)
 | 
|---|
 | 57 |  S PRCPSEC=$$FLD^HLCSUTL(HLNODE,5)
 | 
|---|
 | 58 |  S PRCPORD=$$FLD^HLCSUTL(HLNODE,3)
 | 
|---|
 | 59 |  ;
 | 
|---|
 | 60 |  I PRCPOC'="OF",PRCPOC'="FU" S ERR="1C" Q  ; order control wrong
 | 
|---|
 | 61 |  ;
 | 
|---|
 | 62 |  ; find site and IP ien
 | 
|---|
 | 63 |  S PRCPSEC=$P(PRCPSEC,$E(HL("ECH"),1),2)
 | 
|---|
 | 64 |  I PRCPSEC']"" S ERR="3E" G ERR
 | 
|---|
 | 65 |  S PRCPSITE=$P(PRCPSEC,"-",1)
 | 
|---|
 | 66 |  I PRCPSITE']"" S ERR="3E" Q  ; site missing
 | 
|---|
 | 67 |  I '$D(^PRC(411,PRCPSITE,0)) S ERR="3D" Q  ; wrong site
 | 
|---|
 | 68 |  S DIC="^PRCP(445,",DIC(0)="X",X=PRCPSEC,PRCPPRIV=1
 | 
|---|
 | 69 |  D ^DIC K DIC
 | 
|---|
 | 70 |  I Y=-1 S ERR="3A" Q  ; secondary not in GIP
 | 
|---|
 | 71 |  S PRCPSECN=$P(Y,"^",1)
 | 
|---|
 | 72 |  I $P(^PRCP(445,PRCPSECN,0),"^",3)'="S" S ERR="3B" Q  ; not a secondary
 | 
|---|
 | 73 |  ;
 | 
|---|
 | 74 |  S PRIM=$O(^PRCP(445,"AB",PRCPSECN,""))
 | 
|---|
 | 75 |  I PRIM']"" S ERR="2A" Q
 | 
|---|
 | 76 |  ; get internal order number
 | 
|---|
 | 77 |  I PRCPORD]"" D  I $D(ERR) Q
 | 
|---|
 | 78 |  . S DIC="^PRCP(445.3,",DIC(0)="X",X=PRCPORD,PRCPPRIV=1
 | 
|---|
 | 79 |  . S DIC("S")="I $P(^(0),U,2)="_PRIM
 | 
|---|
 | 80 |  . D ^DIC K DIC
 | 
|---|
 | 81 |  . I Y=-1 S ERR="2A" Q  ; order not in GIP
 | 
|---|
 | 82 |  . S ORDERDA=$P(Y,"^",1)
 | 
|---|
 | 83 |  . I $P(^PRCP(445.3,ORDERDA,0),"^",6)="P" S ERR="2B" Q  ; order is posted
 | 
|---|
 | 84 |  . I $P(^PRCP(445.3,ORDERDA,0),"^",10)']"" S ERR="2C" Q  ; order not to be completed by supply station
 | 
|---|
 | 85 |  . I $P(^PRCP(445.3,ORDERDA,0),"^",3)'=PRCPSECN S ERR="3C" Q  ; sec on order differs
 | 
|---|
 | 86 |  I HL("MTN")="ORM",PRCPORD']"" S ERR="2D" Q  ; order number missing
 | 
|---|
 | 87 |  ;
 | 
|---|
 | 88 |  S PRCPTIME=$$FLD^HLCSUTL(HLNODE,10)
 | 
|---|
 | 89 |  S PRCPTIME=$$FMDATE^HLFNC(PRCPTIME)
 | 
|---|
 | 90 |  S PRCPUSER=$$FLD^HLCSUTL(HLNODE,11)
 | 
|---|
 | 91 |  S PRCPUSER=$P(PRCPUSER,$E(HL("ECH"),1),2)
 | 
|---|
 | 92 |  S PRCPUSER=$$FMNAME^HLFNC(PRCPUSER,$E(HL("ECH"),1))
 | 
|---|
 | 93 |  Q
 | 
|---|
 | 94 |  ;
 | 
|---|
 | 95 |  ;
 | 
|---|
 | 96 | ERR S NUMBER=ERR
 | 
|---|
 | 97 |  I '$D(PRCPSECN) S PRCPSECN=0
 | 
|---|
 | 98 |  S PRCPHLPO("ORDER")="" I $D(PRCPORD) S PRCPHLPO("ORDER")=PRCPORD
 | 
|---|
 | 99 |  S PRCPHLPO("SIPNAME")="AN UNKNOWN INVENTORY POINT"
 | 
|---|
 | 100 |  I $D(PRCPSEC),PRCPSEC]"" S PRCPHLPO("SIPNAME")=PRCPSEC
 | 
|---|
 | 101 |  S PRCPHLPO("ITEM")=""
 | 
|---|
 | 102 |  I $D(PRCPITEM) S PRCPHLPO("ITEM")=$P(PRCPITEM,$E(HL("ECH"),1),1)
 | 
|---|
 | 103 |  S PRCPHLPO("NAME")=""
 | 
|---|
 | 104 |  I $D(PRCPITEM) S PRCPHLPO("NAME")=$P(PRCPITEM,$E(HL("ECH"),1),2)
 | 
|---|
 | 105 |  S PRCPHLPO("QTY")="" I $D(PRCPAMT) S PRCPHLPO("QTY")=PRCPAMT
 | 
|---|
 | 106 |  S PRCPHLPO("LEFT")="" I $D(PRCPLEFT) S PRCPHLPO("LEFT")=PRCPLEFT
 | 
|---|
 | 107 |  S PRCPHLPO("TYPE")=PRCPOC
 | 
|---|
 | 108 |  D ERR^PRCPHLM0(ERR,"PRCP_BAD_ORDER",PRCPSECN,.PRCPHLPO,HLMTIENS_"."_HLMTIEN,.PRCPHL)
 | 
|---|
 | 109 |  G UNLOCK
 | 
|---|
 | 110 |  ;
 | 
|---|
 | 111 |  ;
 | 
|---|
 | 112 | PROCESS N %,%H,%I,N,PRCPTXN,PRCPTXNT,PRCPMGTP,PRCPHL7,PRCPITNM,CNT,DA,DIC,DIE,DLAYGO,DR,T,X,Y
 | 
|---|
 | 113 |  S X="PRCPHL7TXN",CNT=0
 | 
|---|
 | 114 | PROCES0 I $D(^PRCS(410.1,"B",X)) D  I $D(ERR) S CNT=CNT+1 G PROCES0:CNT<10 S CNT=0 G ERR
 | 
|---|
 | 115 |  . S N="",N=$O(^PRCS(410.1,"B",X,N)),DA=N
 | 
|---|
 | 116 |  . L +^PRCS(410.1,DA):15 I $T=0 S ERR=198 Q
 | 
|---|
 | 117 |  . S T=$P(^PRCS(410.1,N,0),"^",2)+1 S:T<1 T=1
 | 
|---|
 | 118 |  . S $P(^PRCS(410.1,DA,0),"^",2)=+T
 | 
|---|
 | 119 |  . S $P(^PRCS(410.1,DA,0),"^",3)=DT
 | 
|---|
 | 120 |  . L -^PRCS(410.1,DA)
 | 
|---|
 | 121 |  I '$D(^PRCS(410.1,"B",X)) D  I $D(ERR) S CNT=CNT+1 G PROCES0:CNT<10 S CNT=0 G ERR
 | 
|---|
 | 122 |  . S T=1,DLAYGO=410.1,DIC="^PRCS(410.1,",DIC(0)="FLXZ"
 | 
|---|
 | 123 |  . D ^DIC K DLAYGO I Y<0 S ERR=199
 | 
|---|
 | 124 |  . S DA=+Y
 | 
|---|
 | 125 |  . L +^PRCS(410.1,DA):15 I $T=0 S ERR=198 Q
 | 
|---|
 | 126 |  . S $P(^PRCS(410.1,DA,0),"^",2)=+T
 | 
|---|
 | 127 |  . S $P(^PRCS(410.1,DA,0),"^",3)=DT
 | 
|---|
 | 128 |  . L -^PRCS(410.1,DA)
 | 
|---|
 | 129 |  ;
 | 
|---|
 | 130 | PROCES1 S CNT=0,X=T
 | 
|---|
 | 131 |  S DIC="^PRCP(447.1,"
 | 
|---|
 | 132 |  S DIC(0)="L"
 | 
|---|
 | 133 |  S DLAYGO=447.1
 | 
|---|
 | 134 |  D ^DIC K DIC
 | 
|---|
 | 135 |  I Y=-1 S ERR=100,CNT=CNT+1 G PROCES1:CNT<10,ERR
 | 
|---|
 | 136 |  I $P(Y,"^",3)'=1 S ERR=101 G ERR
 | 
|---|
 | 137 |  S (DA,PRCPTXN)=Y+0
 | 
|---|
 | 138 |  L +^PRCP(447.1,DA):3 I $T=0 S ERR=102 D UNLOCK G ERR
 | 
|---|
 | 139 |  S DIE="^PRCP(447.1,"
 | 
|---|
 | 140 |  S DA=PRCPTXN
 | 
|---|
 | 141 |  D NOW^%DTC
 | 
|---|
 | 142 |  S PRCPTXNT=%
 | 
|---|
 | 143 |  S PRCPHL7=HLMTIENS_"."_HLMTIEN
 | 
|---|
 | 144 |  S PRCPMGTP=HL("MTN")_HL("ETN")
 | 
|---|
 | 145 |  S DR="1///^S X=PRCPSITE;2///^S X=PRCPSECN;3///^S X=PRCPTXNT;4///^S X=PRCPMGTP;5///^S X=PRCPHL7;6////^S X=ORDERDA;8///^S X=PRCPTIME;10///^S X=PRCPUSER"
 | 
|---|
 | 146 |  I PRCPOC="FU" S DR=DR_";11///^S X=PRCPOC"
 | 
|---|
 | 147 |  D ^DIE
 | 
|---|
 | 148 |  K DIE,DR
 | 
|---|
 | 149 |  I PRCPOC="FU" G UNLOCK
 | 
|---|
 | 150 |  S DIC="^PRCP(447.1,"_PRCPTXN_",1,"
 | 
|---|
 | 151 |  S DA(1)=PRCPTXN
 | 
|---|
 | 152 |  S DIC(0)="L"
 | 
|---|
 | 153 |  S DLAYGO=447.1
 | 
|---|
 | 154 |  S DIC("P")=$P(^DD(447.1,7,0),"^",2)
 | 
|---|
 | 155 |  S X=$P(PRCPITEM,$E(HL("ECH"),1),1)
 | 
|---|
 | 156 |  S PRCPSET="I 1" ; over rides screen to omit finding case carts/IK's
 | 
|---|
 | 157 |  D ^DIC K DIC,DA,DLAYGO
 | 
|---|
 | 158 |  I Y=-1 S ERR=110 D UNLOCK G ERR
 | 
|---|
 | 159 |  I $P(Y,"^",3)'=1 S ERR=111 D UNLOCK G ERR
 | 
|---|
 | 160 |  S DIE="^PRCP(447.1,"_PRCPTXN_",1,"
 | 
|---|
 | 161 |  S DA=+Y
 | 
|---|
 | 162 |  S PRCPITNM=$P(PRCPITEM,$E(HL("ECH"),1),2)
 | 
|---|
 | 163 |  S DR="1///^S X=PRCPLEFT;2///^S X=PRCPAMT;3///^S X=PRCPITNM"
 | 
|---|
 | 164 |  D ^DIE K DIE,DIC,DR
 | 
|---|
 | 165 | UNLOCK I $D(ERR),$D(PRCPTXN),PRCPTXN>0 S DA=PRCPTXN,DIK="^PRCP(447.1," D ^DIK
 | 
|---|
 | 166 |  I $G(PRCPTXN) L -^PRCP(447.1,PRCPTXN)
 | 
|---|
 | 167 | Q Q
 | 
|---|