| [613] | 1 | PRCVRCG ;ISC-SF/GJW; Receive messages ; 5/24/05 10:56am
 | 
|---|
 | 2 |  ;;5.1;IFCAP;**81**;Oct. 20, 2000
 | 
|---|
 | 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 | SUB(PRCVACT) ;
 | 
|---|
 | 6 |  N PRCVFS,PRCVCS,PRCVRS,PRCVES,PRCVSS,HLQUIT,HLNODE
 | 
|---|
 | 7 |  N PRCVMSG,PRCVMID,PRCVSEG,X,PRCVEVN,PRCVEVT,PRCVSTAT,PRCVCP
 | 
|---|
 | 8 |  N HLQUIT,HLNODE,X1,MYERR,MYSEQ
 | 
|---|
 | 9 |  S PRCVFS=$G(HL("FS"))
 | 
|---|
 | 10 |  S PRCVCS=$E($G(HL("ECH")),1)
 | 
|---|
 | 11 |  S PRCVRS=$E($G(HL("ECH")),2)
 | 
|---|
 | 12 |  S PRCVES=$E($G(HL("ECH")),3)
 | 
|---|
 | 13 |  S PRCVSS=$E($G(HL("ECH")),4)
 | 
|---|
 | 14 |  S (HLQUIT,HLNODE)=0
 | 
|---|
 | 15 |  ;Note: the following variable is KILLed to avoid certain
 | 
|---|
 | 16 |  ;problems with $$REPROC^HLUTIL
 | 
|---|
 | 17 |  K HLDONE1
 | 
|---|
 | 18 |  S PRCVMSG=$G(HL("MTN"))
 | 
|---|
 | 19 |  S PRCVMID=$G(HL("MID"))
 | 
|---|
 | 20 |  I ((PRCVACT=1)&(PRCVMSG'="QSB"))!((PRCVACT=2)&(PRCVMSG'="QCN")) D  Q
 | 
|---|
 | 21 |  .;Error: wrong message type
 | 
|---|
 | 22 |  .S MYERR("HL_CODE")="HL200"
 | 
|---|
 | 23 |  .S MYERR("HL_TEXT")="Unsupported Message Type"
 | 
|---|
 | 24 |  .S MYSEQ("FIELD_POS")=9 ;message type
 | 
|---|
 | 25 |  .S MYSEQ("SEG_POS")=1
 | 
|---|
 | 26 |  .D ACK("AR",PRCVMID,"MSH",.MYSEQ,.MYERR)
 | 
|---|
 | 27 |  X HLNEXT I HLQUIT'>0 D  Q
 | 
|---|
 | 28 |  .;Error: MSH segment not found
 | 
|---|
 | 29 |  .S MYERR("HL_CODE")="HL100"
 | 
|---|
 | 30 |  .S MYERR("HL_TEXT")="Segment Sequence Error"
 | 
|---|
 | 31 |  .S MYSEQ("SEG_POS")=1
 | 
|---|
 | 32 |  .D ACK("AE",$G(PRCVMID),"MSH",1,.MYERR)
 | 
|---|
 | 33 |  X HLNEXT I HLQUIT'>0 D  Q
 | 
|---|
 | 34 |  .;Error: no segments after MSH
 | 
|---|
 | 35 |  S PRCVSEG=$$FLD^HLCSUTL(.HLNODE,1)
 | 
|---|
 | 36 |  I ((PRCVACT=1)&(PRCVSEG'="QPD")) D  Q
 | 
|---|
 | 37 |  .;Error: QPD segment expected
 | 
|---|
 | 38 |  .S MYERR("HL_CODE")="HL100"
 | 
|---|
 | 39 |  .S MYERR("HL_TEXT")="Segment Sequence Error"
 | 
|---|
 | 40 |  .S MYSEQ("SEG_POS")=2
 | 
|---|
 | 41 |  .D ACK("AE",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
 | 
|---|
 | 42 |  I ((PRCVACT=2)&(PRCVSEG'="QID")) D  Q
 | 
|---|
 | 43 |  .;Error: QID segment expected
 | 
|---|
 | 44 |  .S MYERR("HL_CODE")="HL100"
 | 
|---|
 | 45 |  .S MYERR("HL_TEXT")="Segment Sequence Error"
 | 
|---|
 | 46 |  .S MYSEQ("SEG_POS")=2
 | 
|---|
 | 47 |  .D ACK("AE",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
 | 
|---|
 | 48 |  S X=$$FLD^HLCSUTL(.HLNODE,$S(PRCVACT=1:2,PRCVACT=2:3,1:999))
 | 
|---|
 | 49 |  I (X="") D  Q
 | 
|---|
 | 50 |  .S MYERR("HL_CODE")="HL101"
 | 
|---|
 | 51 |  .S MYERR("HL_TEXT")="Required field missing"
 | 
|---|
 | 52 |  .S MYSEQ("SEG_POS")=2
 | 
|---|
 | 53 |  .S MYSEQ("FIELD_POS")=$S(PRCVSEG="QPD":1,PRCVSEG="QID":2,1:"")
 | 
|---|
 | 54 |  .D ACK("AE",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
 | 
|---|
 | 55 |  S PRCVEVN=$P(X,PRCVCS,1)
 | 
|---|
 | 56 |  S PRCVEVT=$P(X,PRCVCS,2)
 | 
|---|
 | 57 |  I PRCVEVN'="Q16" D  Q
 | 
|---|
 | 58 |  .;Error: wrong event code
 | 
|---|
 | 59 |  .S MYERR("HL_CODE")="HL207"
 | 
|---|
 | 60 |  .S MYERR("HL_TEXT")="Application internal error"
 | 
|---|
 | 61 |  .S MYSEQ("SEG_POS")=1
 | 
|---|
 | 62 |  .S MYSEQ("FIELD_POS")=$S(PRCVACT=1:2,PRCVACT=1:2)
 | 
|---|
 | 63 |  .S MYSEQ("CMP_POS")=1
 | 
|---|
 | 64 |  .D ACK("AR",PRCVMID,$S(PRCVACT=1:"QPD",1:"QID"),.MYSEQ,.MYERR)
 | 
|---|
 | 65 |  I PRCVEVT'="Fund_Subscription" D  Q
 | 
|---|
 | 66 |  .;Error: wrong event
 | 
|---|
 | 67 |  .S MYERR("HL_CODE")="HL207"
 | 
|---|
 | 68 |  .S MYERR("HL_TEXT")="Application internal error"
 | 
|---|
 | 69 |  .S MYSEQ("SEG_POS")=2
 | 
|---|
 | 70 |  .S MYSEQ("FIELD_POS")=$S(PRCVACT=1:2,PRCVACT=1:2)
 | 
|---|
 | 71 |  .S MYSEQ("CMP_POS")=2
 | 
|---|
 | 72 |  .D ACK("AR",PRCVMID,$S(PRCVACT=1:"QPD",1:"QID"),.MYSEQ,.MYERR)
 | 
|---|
 | 73 |  I ((PRCVACT=2)&(PRCVEVT'="Fund_Subscription")) D  Q
 | 
|---|
 | 74 |  .;Error: wrong event
 | 
|---|
 | 75 |  .S MYERR("HL_CODE")="HL207"
 | 
|---|
 | 76 |  .S MYERR("HL_TEXT")="Application internal error"
 | 
|---|
 | 77 |  .S MYSEQ("SEG_POS")=2
 | 
|---|
 | 78 |  .S MYSEQ("FIELD_POS")=2
 | 
|---|
 | 79 |  .S MYSEQ("CMP_POS")=2
 | 
|---|
 | 80 |  .D ACK("AR",PRCVMID,"QID",.MYSEQ,.MYERR)
 | 
|---|
 | 81 |  S X=$$FLD^HLCSUTL(.HLNODE,$S(PRCVACT=1:3,PRCVACT=2:2,1:999))
 | 
|---|
 | 82 |  I (X="") D  Q
 | 
|---|
 | 83 |  .S MYERR("HL_CODE")="HL101"
 | 
|---|
 | 84 |  .S MYERR("HL_TEXT")="Required field missing"
 | 
|---|
 | 85 |  .S MYSEQ("SEG_POS")=2
 | 
|---|
 | 86 |  .S MYSEQ("FIELD_POS")=$S(PRCVSEG="QPD":3,PRCVSEG="QID":2,1:"")
 | 
|---|
 | 87 |  .D ACK("AE",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
 | 
|---|
 | 88 |  S PRCVSTAT=$P(X,"-",1)
 | 
|---|
 | 89 |  S PRCVCP=+$P(X,"-",2)
 | 
|---|
 | 90 |  I '$D(^PRC(420,PRCVSTAT,0)) D  Q
 | 
|---|
 | 91 |  .;invalid station number
 | 
|---|
 | 92 |  .S MYERR("HL_CODE")="HL204"
 | 
|---|
 | 93 |  .S MYERR("HL_TEXT")="Unknown key identfier"
 | 
|---|
 | 94 |  .S MYSEQ("SEG_POS")=2
 | 
|---|
 | 95 |  .S MYSEQ("FIELD_POS")=$S(PRCVSEG="QPD":2,PRCVSEG="QID":1,1:"")
 | 
|---|
 | 96 |  .D ACK("AR",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
 | 
|---|
 | 97 |  I '$D(^PRC(420,PRCVSTAT,1,PRCVCP,0)) D  Q
 | 
|---|
 | 98 |  .;invalid station/FCP pair
 | 
|---|
 | 99 |  .S MYERR("HL_CODE")="HL204"
 | 
|---|
 | 100 |  .S MYERR("HL_TEXT")="Unknown key identfier"
 | 
|---|
 | 101 |  .S MYSEQ("SEG_POS")=2
 | 
|---|
 | 102 |  .S MYSEQ("FIELD_POS")=$S(PRCVSEG="QPD":2,PRCVSEG="QID":1,1:"")
 | 
|---|
 | 103 |  .D ACK("AR",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
 | 
|---|
 | 104 |  G:PRCVACT=2 DEL
 | 
|---|
 | 105 |  S X1=$$ADDSUB^PRCVSUB(PRCVSTAT,PRCVCP,1)
 | 
|---|
 | 106 |  I $P(X1,"^",1)["?" D  Q
 | 
|---|
 | 107 |  .;Duplicate
 | 
|---|
 | 108 |  .;S MYERR("SEVERITY")="W"
 | 
|---|
 | 109 |  .D ACK("AA",PRCVMID)
 | 
|---|
 | 110 |  I $P(X1,"^",1)="E" D  Q
 | 
|---|
 | 111 |  .;Fileman generated error
 | 
|---|
 | 112 |  .S MYERR("HL_CODE")="HL207"
 | 
|---|
 | 113 |  .S MYERR("HL_TEXT")="Application internal error"
 | 
|---|
 | 114 |  .S MYSEQ("SEG_POS")=2
 | 
|---|
 | 115 |  .D ACK("AR",PRCVSEG,.MYSEQ,.MYERR)
 | 
|---|
 | 116 |  G:PRCVACT=2 DONE ;end of message
 | 
|---|
 | 117 |  X HLNEXT I HLQUIT'>0 D  Q
 | 
|---|
 | 118 |  .;Error: RCP segment expected
 | 
|---|
 | 119 |  .S MYERR("HL_CODE")="HL100"
 | 
|---|
 | 120 |  .S MYERR("HL_TEXT")="Segment sequence error"
 | 
|---|
 | 121 |  .S MYSEQ("SEG_POS")=3
 | 
|---|
 | 122 |  .D ACK("AE",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
 | 
|---|
 | 123 |  G DONE
 | 
|---|
 | 124 | DEL ;
 | 
|---|
 | 125 |  S X1=$$DELSUB^PRCVSUB(PRCVSTAT,+PRCVCP,1)
 | 
|---|
 | 126 |  I X1["E" D  Q
 | 
|---|
 | 127 |  .;Error during Fileman call
 | 
|---|
 | 128 |  .S MYERR("HL_CODE")="HL207"
 | 
|---|
 | 129 |  .S MYERR("HL_TEXT")="Application internal error"
 | 
|---|
 | 130 |  .S MYSEQ("SEG_POS")=1
 | 
|---|
 | 131 |  .S MYSEQ("FIELD_POS")=1
 | 
|---|
 | 132 |  .D ACK("AE",PRCVMID,"QID",.MYSEQ,.MYERR)
 | 
|---|
 | 133 |  I X1'["@" D  Q
 | 
|---|
 | 134 |  .;Deletion error
 | 
|---|
 | 135 |  .S MYERR("HL_CODE")="HL207"
 | 
|---|
 | 136 |  .S MYERR("HL_TEXT")="Application internal error"
 | 
|---|
 | 137 |  .S MYSEQ("SEG_POS")=1
 | 
|---|
 | 138 |  .S MYSEQ("FIELD_POS")=1
 | 
|---|
 | 139 |  .D ACK("AE",PRCVMID,"QID",.MYSEQ,.MYERR)
 | 
|---|
 | 140 | DONE ;
 | 
|---|
 | 141 |  ;Success!
 | 
|---|
 | 142 |  D ACK("AA",PRCVMID)
 | 
|---|
 | 143 |  Q
 | 
|---|
 | 144 |  ;
 | 
|---|
 | 145 | ACK(PRCVSTAT,PRCVOMID,PRCVSID,PRCVSEQ,PRCVERR) ;
 | 
|---|
 | 146 |  N HLA,ERR,I,SEV,PRCVEID,PRCVAPP,PRCVEIDS,PRCVRES
 | 
|---|
 | 147 |  ;Make sure the parameters are defined
 | 
|---|
 | 148 |  S PRCVSTAT=$G(PRCVSTAT),PRCVOMID=$G(PRCVOMID),PRCVSID=$G(PRCVSID)
 | 
|---|
 | 149 |  S HLA("HLA",1)="MSA"_PRCVFS_$G(PRCVSTAT)_PRCVFS_$G(PRCVOMID)
 | 
|---|
 | 150 |  S SEV=$S($D(PRCVERR("SEVERITY")):$G(PRCVERR("SEVERITY")),1:"E")
 | 
|---|
 | 151 |  ;set some variables
 | 
|---|
 | 152 |  S PRCVEID=$G(HL("EID"))
 | 
|---|
 | 153 |  S PRCVEIDS=$G(HL("EIDS"))
 | 
|---|
 | 154 |  ;S PRCVAPP=$$FIND1^DIC(771,,"MX","PRCV_DYNAMED")
 | 
|---|
 | 155 |  Q:(($L(PRCVEID)=0)!($L($G(HLMTIENS))=0)!($L(PRCVEIDS)=0))
 | 
|---|
 | 156 |  S PRCVRES=""
 | 
|---|
 | 157 |  S:PRCVSTAT="AA" HLA("HLA",1)=HLA("HLA",1)_PRCVFS_"OK"
 | 
|---|
 | 158 |  D:$L(PRCVSID)>0
 | 
|---|
 | 159 |  .S ERR="ERR"_PRCVFS_PRCVFS_PRCVSID_PRCVCS_$G(PRCVSEQ("SEG_POS"))
 | 
|---|
 | 160 |  .S ERR=ERR_PRCVCS_$G(PRCVSEQ("FIELD_POS"))_PRCVFS
 | 
|---|
 | 161 |  .;S ERR=ERR_PRCVCS_$G(PRCVSEQ("FIELD_POS"))_PRCVCS
 | 
|---|
 | 162 |  .;S ERR=ERR_$G(PRCVSEQ("FIELD_REP"))_PRCVCS_$G(PRCVSEQ("CMP_POS"))
 | 
|---|
 | 163 |  .;S ERR=ERR_PRCVCS_$G(PRCVSEQ("SUBCMP_POS"))_PRCVFS
 | 
|---|
 | 164 |  .;S ERR=ERR_$G(PRCVSEQ("FIELD_REP"))_PRCVFS
 | 
|---|
 | 165 |  .S ERR=ERR_$G(PRCVERR("HL_CODE"))_PRCVCS_$G(PRCVERR("HL_TEXT"))
 | 
|---|
 | 166 |  .S ERR=ERR_PRCVCS_"0357"_PRCVFS_SEV_PRCVFS
 | 
|---|
 | 167 |  .I $D(PRCVERR("APP",1)) D
 | 
|---|
 | 168 |  ..;application error(s)
 | 
|---|
 | 169 |  ..S ERR=ERR_$G(PRCVERR("APP",1,"CODE"))_PRCVCS_$G(PRCVERR("APP",1,"TEXT"))
 | 
|---|
 | 170 |  ..S I=1
 | 
|---|
 | 171 |  ..F  S I=$O(PRCVERR("APP",I)) Q:((I="")!(I>10))  D
 | 
|---|
 | 172 |  ...S ERR=ERR_PRCVRS
 | 
|---|
 | 173 |  ...S ERR=ERR_$G(PRCVERR("APP",I,"CODE"))_PRCVCS
 | 
|---|
 | 174 |  ...S ERR=ERR_$G(PRCVERR("APP",I,"TEXT"))
 | 
|---|
 | 175 |  .S HLA("HLA",2)=ERR
 | 
|---|
 | 176 |  D GENACK^HLMA1(PRCVEID,$G(HLMTIENS),PRCVEIDS,"LM",1,.PRCVRES)
 | 
|---|
 | 177 |  Q
 | 
|---|
 | 178 |  ;
 | 
|---|
 | 179 | PUBACK ;
 | 
|---|
 | 180 |  N PRCVFS,PRCVCS,PRCVRS,PRCVES,PRCVSS,HLQUIT,HLNODE,X
 | 
|---|
 | 181 |  N ATYPE,OMID,SEQ,ERR,I,X1,ECNT,RFAC
 | 
|---|
 | 182 |  S PRCVFS=$G(HL("FS"))
 | 
|---|
 | 183 |  S PRCVCS=$E($G(HL("ECH")),1)
 | 
|---|
 | 184 |  S PRCVRS=$E($G(HL("ECH")),2)
 | 
|---|
 | 185 |  S PRCVES=$E($G(HL("ECH")),3)
 | 
|---|
 | 186 |  S PRCVSS=$E($G(HL("ECH")),4)
 | 
|---|
 | 187 |  S (HLQUIT,HLNODE)=0
 | 
|---|
 | 188 |  ;Note: the following variable is KILLed to avoid certain
 | 
|---|
 | 189 |  ;problems with $$REPROC^HLUTIL
 | 
|---|
 | 190 |  K HLDONE1
 | 
|---|
 | 191 |  S PRCVMSG=$G(HL("MTN"))
 | 
|---|
 | 192 |  S PRCVMID=$G(HL("MID"))
 | 
|---|
 | 193 |  Q:HL("MTN")'="MFK"
 | 
|---|
 | 194 |  X HLNEXT ;read MSH
 | 
|---|
 | 195 |  I HLQUIT'>0 Q
 | 
|---|
 | 196 |  S X=$$FLD^HLCSUTL(.HLNODE,1)
 | 
|---|
 | 197 |  Q:X'="MSH"
 | 
|---|
 | 198 |  S RFAC=$P($$FLD^HLCSUTL(.HLNODE,6),PRCVCS,1)
 | 
|---|
 | 199 |  X HLNEXT ;read MSA
 | 
|---|
 | 200 |  I HLQUIT'>0 Q
 | 
|---|
 | 201 |  S X=$$FLD^HLCSUTL(.HLNODE,1)
 | 
|---|
 | 202 |  Q:X'="MSA"
 | 
|---|
 | 203 |  S ATYPE=$$FLD^HLCSUTL(.HLNODE,2)
 | 
|---|
 | 204 |  ;No need to go further
 | 
|---|
 | 205 |  Q
 | 
|---|