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