| 1 | QACMAIL1 ;ERC/WASHCIOFO-Send data to reposititory ;11/29/99
 | 
|---|
| 2 |  ;;2.0;Patient Representative;**4,14,15,17**;07/25/1995
 | 
|---|
| 3 |  ;continuation routine - contains looping code, assigns variables
 | 
|---|
| 4 |  ;and stuffs values into temporary global ^TMP("QAC MAIL",$J,linecount)
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | ENV ;environment check - to ensure that the Mailman patch creating
 | 
|---|
| 7 |  ;domain has beem installed.
 | 
|---|
| 8 |  N QACQ,QACE,ZPDQUIT
 | 
|---|
| 9 |  S QACQ="Q-PSS.MED.VA.GOV"
 | 
|---|
| 10 |  Q:$$FIND1^DIC(4.2,,"QX",QACQ,"B",,"QACE")
 | 
|---|
| 11 |  W !!?5,$C(7),"**** Installation of this patch requires that domain "
 | 
|---|
| 12 |  W !?10,QACQ," be defined."
 | 
|---|
| 13 |  S XPDQUIT=1
 | 
|---|
| 14 |  W !!!?5,"Refer to patch XM*999*133 for domain definition information."
 | 
|---|
| 15 |  W !?15,"<Patch QAC*2.0*4 installation aborted!>",!!
 | 
|---|
| 16 |  Q
 | 
|---|
| 17 | LOOP ;
 | 
|---|
| 18 |  ;loop through file 745.1 looking for entries edited 
 | 
|---|
| 19 |  ;since the previous rollup that have at least one issue code.
 | 
|---|
| 20 |  N QACD,QACDD,QACJ,QACLAST,QACOUNT
 | 
|---|
| 21 |  S QACJ=0
 | 
|---|
| 22 |  S QACLAST=$P($G(^QA(740,1,"QAC")),U,4)
 | 
|---|
| 23 |  ;(DBIA #3061 for lookup of value of QAC LAST RECORD in file #740)
 | 
|---|
| 24 |  S QACOUNT=0
 | 
|---|
| 25 |  F  S QACJ=$O(^QA(745.1,"F",3,QACJ)) Q:QACJ'>0!($G(QACOUNT)>700)  D WORK
 | 
|---|
| 26 |  I $G(QACLAST)'>0 D
 | 
|---|
| 27 |  . ;if QACLAST'>0, need to run rollup for the first time from 10/01/99
 | 
|---|
| 28 |  . S QACD=$O(^QA(745.1,"D",2991000)) Q:QACD'>0  D
 | 
|---|
| 29 |  . . S QACJ=$O(^QA(745.1,"D",QACD,QACJ)) Q:QACJ'>0  S QACJ=QACJ-1 D
 | 
|---|
| 30 |  . . . F  S QACJ=$O(^QA(745.1,QACJ)) Q:QACJ'>0!($G(QACOUNT)>700)  D WORK
 | 
|---|
| 31 |  S DIE="^QA(740,",DA=1,DR="753////^S X=QACLAST"
 | 
|---|
| 32 |  D ^DIE K DA,DIE,DR
 | 
|---|
| 33 |  Q
 | 
|---|
| 34 | WORK ;
 | 
|---|
| 35 |  D NODE0
 | 
|---|
| 36 |  S QACLAST=QACJ
 | 
|---|
| 37 |  S QACOUNT=QACOUNT+1
 | 
|---|
| 38 |  S DIE="^QA(745.1,",DA=QACJ,DR="41///@" D ^DIE K DA,DIE,DR
 | 
|---|
| 39 |  Q
 | 
|---|
| 40 | DATA ; Set data into local variables and then into ^TMP global for
 | 
|---|
| 41 |  ; inclusion in mail message.
 | 
|---|
| 42 |  N QACNODE2,QACNODE7
 | 
|---|
| 43 |  N QACK,QACL,QACM,QACN
 | 
|---|
| 44 |  N QACCOM,QACDAT,QACDATE,QACDAYS,QACDISC,QACDIV,QACDOB,QACELIG,QACISSC
 | 
|---|
| 45 |  N QACLSAT,QACMADE,QACNO,QACPGV,QACPSRV,QACRDAT,QACRDATE,QACROC
 | 
|---|
| 46 |  N QACSEAT,QACSEX,QACSSN,QACSTAT,QACTST
 | 
|---|
| 47 |  ;if record was previously rejected and is now closed set Roll-up status
 | 
|---|
| 48 |  ;to "0" (call ROLL(0)) - if still open but has IC call ROLL(2)
 | 
|---|
| 49 |  ;if record previously sent but "open", but is now closed, call ROLL(0)
 | 
|---|
| 50 |  N QACNOT
 | 
|---|
| 51 |  S QACROC=$P($G(QACNODE0),U)
 | 
|---|
| 52 |  I $G(QACNODE0)]"" D
 | 
|---|
| 53 |  . I $P($G(QACNODE0),U,3)]"" D
 | 
|---|
| 54 |  . . S QACSSN=$P(VADM(2),U) ;SSN
 | 
|---|
| 55 |  . . S QACDOB=$P(VADM(3),U) ;DOB
 | 
|---|
| 56 |  . . I $G(QACDOB) D  ;Austin wanted dates in MMDDYYYY
 | 
|---|
| 57 |  . . . S QACDOB=$P($$FMTHL7^XLFDT(QACDOB),"-")
 | 
|---|
| 58 |  . . . S QACDOB=$E(QACDOB,5,8)_$E(QACDOB,1,4)
 | 
|---|
| 59 |  . . S QACSEX=$P(VADM(5),U)
 | 
|---|
| 60 |  . S QACDATE=$P(QACNODE0,U,2) ;date of contact
 | 
|---|
| 61 |  . I $G(QACDATE) D
 | 
|---|
| 62 |  . . S QACDATE=$P($$FMTHL7^XLFDT(QACDATE),"-")
 | 
|---|
| 63 |  . . S QACDATE=$E(QACDATE,5,8)_$E(QACDATE,1,4)
 | 
|---|
| 64 |  . S QACPSRV=$P($G(QACNODE0),U,14) ;period of service
 | 
|---|
| 65 |  . S QACPGV=$P($G(QACNODE0),U,15) ;Persian Gulf vet?
 | 
|---|
| 66 |  . S QACDIV=""
 | 
|---|
| 67 |  . I $P($G(QACNODE0),U,16)]"" D DIV16
 | 
|---|
| 68 |  . ;S QACDIV=$E(QACDIV,1,30)
 | 
|---|
| 69 |  . I $G(QACDIV)["Unknown" S QACDIV=""
 | 
|---|
| 70 |  . S QACELIG=$S($P($G(QACNODE0),U,4)]"":$O(^DIC(8,"B",$P($G(QACNODE0),U,4),0)),1:"UNK") ;eligibility
 | 
|---|
| 71 |  . S QACMADE=$P(QACNODE0,U,10)
 | 
|---|
| 72 | NODE2 ; set variables for node 2
 | 
|---|
| 73 |  S QACNODE2=$G(^QA(745.1,QACJ,2))
 | 
|---|
| 74 |  I QACNODE2]"" S QACTST=$P($G(QACNODE2),U,2) ;treatment status
 | 
|---|
| 75 |  S QACINTAP=$P($G(QACNODE2),U,7) ;Internal Appeal
 | 
|---|
| 76 | NODE3 ;issue code info
 | 
|---|
| 77 |  S QACK=0
 | 
|---|
| 78 |  F  S QACK=$O(^QA(745.1,QACJ,3,QACK)) Q:QACK'>0  D
 | 
|---|
| 79 |  . S QACISSC(QACK)=$P(^QA(745.2,^QA(745.1,QACJ,3,QACK,0),0),U)
 | 
|---|
| 80 |  . I $P($G(^QA(745.1,QACJ,3,QACK,3,0)),U,3)'>0 S QACDISC(QACK,1)=QACISSC(QACK)_"^"
 | 
|---|
| 81 |  . S QACL=0
 | 
|---|
| 82 |  . F  S QACL=$O(^QA(745.1,QACJ,3,QACK,3,QACL)) Q:QACL'>0  D
 | 
|---|
| 83 |  . . ;get code for discipline
 | 
|---|
| 84 |  . . N QACTEMP,QACTMP
 | 
|---|
| 85 |  . . S QACTMP=$P($G(^QA(745.1,QACJ,3,QACK,3,QACL,0)),U,2)
 | 
|---|
| 86 |  . . S QACTEMP=$S($G(QACTMP)]"":$P($G(^QA(745.5,QACTMP,0)),U),1:"")
 | 
|---|
| 87 |  . . S QACDISC(QACK,QACL)=QACISSC(QACK)_"^"_$G(QACTEMP)
 | 
|---|
| 88 | NODE7 ;set variables for node 7
 | 
|---|
| 89 |  S QACNODE7=$G(^QA(745.1,QACJ,7)) I $G(QACNODE7)]"" D
 | 
|---|
| 90 |  . S QACSTAT=$P($G(QACNODE7),U,2) ;status
 | 
|---|
| 91 |  . S QACRDATE=$P(QACNODE7,U) ;resolution date
 | 
|---|
| 92 |  . I $G(QACRDATE) D
 | 
|---|
| 93 |  . . S QACRDATE=$P($$FMTHL7^XLFDT(QACRDATE),"-")
 | 
|---|
| 94 |  . . S QACRDATE=$E(QACRDATE,5,8)_$E(QACRDATE,1,4)
 | 
|---|
| 95 |  . S QACDAYS=$P($G(QACNODE7),U,4) ;days to resolution
 | 
|---|
| 96 | NODE8 ; set variables for employee multiple
 | 
|---|
| 97 |  N QACC
 | 
|---|
| 98 |  S QACC=0
 | 
|---|
| 99 |  K QACEM,QACEMP
 | 
|---|
| 100 |  F  S QACC=$O(^QA(745.1,QACJ,8,QACC)) Q:QACC'>0  D
 | 
|---|
| 101 |  . S QACEM=^QA(745.1,QACJ,8,QACC,0) Q:QACEM'>0
 | 
|---|
| 102 |  . S QACEM=$P($G(^VA(200,QACEM,0)),U)
 | 
|---|
| 103 |  . I $G(QACEM)]"" S QACEMP(QACJ,QACC)=QACEM
 | 
|---|
| 104 | NODE12 ; set variables for source(s) of contact multiple
 | 
|---|
| 105 |  N QACD,QACSOR,QACSR
 | 
|---|
| 106 |  S QACD=0
 | 
|---|
| 107 |  F  S QACD=$O(^QA(745.1,QACJ,12,QACD)) Q:QACD'>0  D
 | 
|---|
| 108 |  . S QACSR=^QA(745.1,QACJ,12,QACD,0) Q:QACSR']""
 | 
|---|
| 109 |  . I $G(QACSR)]"" S QACSOR(QACJ,QACD)=QACSR
 | 
|---|
| 110 | STUFF ; Stuff variables into ^TMP global for use in ^XMD
 | 
|---|
| 111 |  ;      field delimiter = "^"
 | 
|---|
| 112 |  ;       line delimiter = "&"
 | 
|---|
| 113 |  ;     record delimiter = "$"
 | 
|---|
| 114 |  ;    message delimiter = "#"
 | 
|---|
| 115 |  N QACJJ,QACKK,QACLL
 | 
|---|
| 116 |  S QACRCNT=QACRCNT+1
 | 
|---|
| 117 |  ;check message size - need to ensure message < 32000
 | 
|---|
| 118 |  I $G(QACTCNT)>29000 D NEWMSG^QACMAIL0
 | 
|---|
| 119 |  X QACINC
 | 
|---|
| 120 |  S ^TMP("QAC MAIL",$J,QACLCNT)=$G(QACROC)_"^ROC^"_$G(QACDATE)_"^"_$G(QACSSN)_"^"_$G(QACSEX)_"^"_$G(QACDOB)_"^"_$G(QACSTAT)_"^"_$G(QACRDATE)_"^"_$G(QACTST)_"^"_$G(QACPSRV)
 | 
|---|
| 121 |  S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_"^"_$G(QACPGV)_"^"_$G(QACDIV)_"^"_$G(QACDAYS)_"^"_$G(QACELIG)_"^"_$G(QACMADE)_"^"_$G(QACVISN)_"^"_$G(QACINTAP)_"&"
 | 
|---|
| 122 | STFFISSC ;stuff issue code values into ^TMP
 | 
|---|
| 123 |  ;using "~" as an Issue Code delimiter
 | 
|---|
| 124 |  N QACCHCNT
 | 
|---|
| 125 |  S (QACJJ,QACKK)=0
 | 
|---|
| 126 |  I $O(QACISSC(0))'>0 Q
 | 
|---|
| 127 |  X QACINC S ^TMP("QAC MAIL",$J,QACLCNT)=$G(QACROC)_"^ISSC^"
 | 
|---|
| 128 |  F  S QACJJ=$O(QACDISC(QACJJ)) Q:QACJJ'>0  D
 | 
|---|
| 129 |  . S QACKK=0
 | 
|---|
| 130 |  . F  S QACKK=$O(QACDISC(QACJJ,QACKK)) Q:QACKK'>0  D
 | 
|---|
| 131 |  . . N QACLIN,QACLINE
 | 
|---|
| 132 |  . . S QACLINE=QACDISC(QACJJ,QACKK)
 | 
|---|
| 133 |  . . ; adding employee(s) to each issue code.  In future employee (and
 | 
|---|
| 134 |  . . ; location) will be associated with Issue Code - code will change
 | 
|---|
| 135 |  . . ; here.  For now, location will be represented by "" in last piece
 | 
|---|
| 136 |  . . ; There will be one IC, one Disc., one location and one employee
 | 
|---|
| 137 |  . . ; separated by "^", and each 4 field set separated by "~"
 | 
|---|
| 138 |  . . S (QACE,QACCHCNT)=0
 | 
|---|
| 139 |  . . I $O(QACEMP(0))'>0 S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_QACLINE_"^^~"
 | 
|---|
| 140 |  . . F  S QACE=$O(QACEMP(QACJ,QACE)) Q:QACE'>0  D
 | 
|---|
| 141 |  . . . S QACLIN=QACLINE_"^"_$G(QACEMP(QACJ,QACE))_"^~" ;space for loc
 | 
|---|
| 142 |  . . . I $L(QACLIN)+$L(^TMP("QAC MAIL",$J,QACLCNT))>200 D
 | 
|---|
| 143 |  . . . . X QACINC
 | 
|---|
| 144 |  . . . . S ^TMP("QAC MAIL",$J,QACLCNT)=""
 | 
|---|
| 145 |  . . . S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_QACLIN
 | 
|---|
| 146 |  . . . S QACLIN=""
 | 
|---|
| 147 |  S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_"&"
 | 
|---|
| 148 | STFFSOUR ;stuff values for source(s) of contact into ^TMP
 | 
|---|
| 149 |  X QACINC
 | 
|---|
| 150 |  S ^TMP("QAC MAIL",$J,QACLCNT)=$G(QACROC)_"^SOUR"
 | 
|---|
| 151 |  N QACF
 | 
|---|
| 152 |  S QACF=0
 | 
|---|
| 153 |  F  S QACF=$O(QACSOR(QACJ,QACF)) Q:QACF'>0  D
 | 
|---|
| 154 |  . S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_"^"_$G(QACSOR(QACJ,QACF))
 | 
|---|
| 155 |  S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_"$"
 | 
|---|
| 156 |  Q
 | 
|---|
| 157 | NODE0 ;set values from zero node
 | 
|---|
| 158 |  N DFN,QACNAME,QACNODE0,QACNOFLG,VADM
 | 
|---|
| 159 |  S QACNODE0=^QA(745.1,QACJ,0)
 | 
|---|
| 160 |  I $P($G(QACNODE0),U,3)]"" D
 | 
|---|
| 161 |  . S DFN=$P(QACNODE0,U,3)
 | 
|---|
| 162 |  . D ^VADPT
 | 
|---|
| 163 |  S QACNAME=$S($G(VADM(1))]"":VADM(1),1:"No Patient Involved")
 | 
|---|
| 164 |  ;If no issue code count record and go to next entry.
 | 
|---|
| 165 |  I $P($G(^QA(745.1,QACJ,3,0)),U,3)<1 D
 | 
|---|
| 166 |  . S QACNOCNT=$G(QACNOCNT)+1,QACNOT=1
 | 
|---|
| 167 |  . ;D ROLL^QACMAIL0(1) ;sets Roll-Up Status to rejected
 | 
|---|
| 168 |  . Q
 | 
|---|
| 169 |  I $G(QACNOT)=1 S QACNOT=0 Q
 | 
|---|
| 170 |  D DATA
 | 
|---|
| 171 |  Q
 | 
|---|
| 172 | LOOP1 ;post-install to check previously rejected records (see if they now
 | 
|---|
| 173 |  ;have Issue Codes) and to get any records since last run of the
 | 
|---|
| 174 |  ;rollup.  for QAC*2*17.  will set these records to a Rollup Status
 | 
|---|
| 175 |  ;of 3, which means they will be transmitted with the next run.
 | 
|---|
| 176 |  N QACF,QACJ
 | 
|---|
| 177 |  F QACF=1,2 S QACJ=0 D
 | 
|---|
| 178 |  . F  S QACJ=$O(^QA(745.1,"F",QACF,QACJ)) Q:QACJ'>0  D
 | 
|---|
| 179 |  . . I $P($G(^QA(745.1,QACJ,3,0)),U,3)'>0 D DIE("@") Q
 | 
|---|
| 180 |  . . D DIE(3)
 | 
|---|
| 181 |  S QACJ=$P(^QA(740,1,"QAC"),U,4)
 | 
|---|
| 182 |  I $G(QACJ)']"" Q
 | 
|---|
| 183 |  F  S QACJ=$O(^QA(745.1,QACJ)) Q:QACJ'>0  D
 | 
|---|
| 184 |  . D DIE(3)
 | 
|---|
| 185 |  Q
 | 
|---|
| 186 | DIE(QACE) ;
 | 
|---|
| 187 |  S DIE="^QA(745.1,",DA=QACJ,DR="41///^S X=QACE"
 | 
|---|
| 188 |  D ^DIE
 | 
|---|
| 189 |  K DA,DIE,DR,QACE
 | 
|---|
| 190 |  Q
 | 
|---|
| 191 | DIV16 ;division field, #37
 | 
|---|
| 192 |  S QACNO=$P($G(QACNODE0),U,16)
 | 
|---|
| 193 |  ;D INST^QACUTL0(QACNO,.QACDIV)
 | 
|---|
| 194 |  S QACDIV=$P($G(^DIC(4,QACNO,99)),U)
 | 
|---|
| 195 |  Q
 | 
|---|