| [613] | 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
 | 
|---|