| 1 | GMTSPSHO ; SLC OIFO/GS - Herbal/OTC Medications Health Summary; 01/26/2004 | 
|---|
| 2 | ;;2.7;Health Summary;**65**;Oct 20, 1995 | 
|---|
| 3 | ;v6;04/07/2004 | 
|---|
| 4 | ; | 
|---|
| 5 | ; External References | 
|---|
| 6 | ;   DBIA    330  ^PSOHCSUM which includes ^TMP("PSOO",$J) | 
|---|
| 7 | ;   DBIA  10003  DD^%DT | 
|---|
| 8 | ;   DBIA  10035  ^DPT(  file #2 | 
|---|
| 9 | ;   DBAI  10060  ^VA(200 | 
|---|
| 10 | ; | 
|---|
| 11 | ; Format of ^TMP("PS00",$J,"NVA",ILFD,0) as G1 aka GMRC | 
|---|
| 12 | ;  (see also ^PSOHCSUM): | 
|---|
| 13 | ; | 
|---|
| 14 | ; Field Descriptions    Defined                 AKA/Notes | 
|---|
| 15 | ; Orderable Item        $P(G1,U)                Includes dosage form | 
|---|
| 16 | ;                                                 (File # 50.7) | 
|---|
| 17 | ; Status                $P(G1,U,2) | 
|---|
| 18 | ; Discontinued Date     $P(G1,U,7)              FM format | 
|---|
| 19 | ; Order #               $P(G1,U,4)              CPRS Order #  ptr to | 
|---|
| 20 | ;                                                 File #100 | 
|---|
| 21 | ; Documented By         $P($P(G1,U,6),";",2)    Doc. by Name  ptr to | 
|---|
| 22 | ;                                                 File #200 is $P(x;1) | 
|---|
| 23 | ; Documented Date       $P(G1,U,5)              FM format (Entered On) | 
|---|
| 24 | ; Clinic                $P($P(G2,U,5),";",2)    Clinic Name  ptr to | 
|---|
| 25 | ;                                                 File #44 is $P(x;1) | 
|---|
| 26 | ; Date Started          $P(G1,U,3)              FM format (Start Date) | 
|---|
| 27 | ; Drug                  $P($P(G2,U,4),";",2)    Drug name (Dispensed) | 
|---|
| 28 | ;                                                 ptr to f#50 is $P(x;1) | 
|---|
| 29 | ; Dosage                $P(G2,U) | 
|---|
| 30 | ; Medication Route      $P(G2,U,2) | 
|---|
| 31 | ; Schedule              $P(G2,U,3) | 
|---|
| 32 | ; Statement/Explanation ^TMP("PSOO",$J,"NVA",ILFD,"DSC",nn,0) | 
|---|
| 33 | ; | 
|---|
| 34 | ;      where G1=^TMP("PSOO",$J,"NVA",ILFD,0) | 
|---|
| 35 | ;            G2=^TMP("PSOO",$J,"NVA",ILFD,1,0) | 
|---|
| 36 | ;            nn & nnn = sequentual integers | 
|---|
| 37 | ; | 
|---|
| 38 | ; Variables  Descriptions | 
|---|
| 39 | ; CT         Counter of number of Herbal/OTC/Non-VA drugs for patient | 
|---|
| 40 | ; DFN        Patient internal number passed in | 
|---|
| 41 | ; DGR        Documented by's degree | 
|---|
| 42 | ; ILFD       Inverse Last Fill Date (FM format) | 
|---|
| 43 | ; JOB        $J | 
|---|
| 44 | ; G1,G2      Abstracted data strings from ^TMP("PSOO", - see MAIN & WRT | 
|---|
| 45 | ; GMT*       Variables used by HS pagination routine (GMTSUP), e.g., | 
|---|
| 46 | ;               GMTSLPG=last page, GMTSTITL=title | 
|---|
| 47 | ; LL*        Line lengths ('^' delimited) for override reason & S/E | 
|---|
| 48 | ; NEWFORM    ; | 
|---|
| 49 | ; NL         Sequential line counter for override reasons & | 
|---|
| 50 | ;               statement/explanation | 
|---|
| 51 | ; T1,T2,T3   Integer tab stops for data display - see MAIN | 
|---|
| 52 | ; T4         Tab stops (#,#) for override reason display | 
|---|
| 53 | ; T5         Tab stops for Stmt/Expln display | 
|---|
| 54 | ; V          Line header verbiage describing data displayed | 
|---|
| 55 | ; VARY       Array of verbiage to be displayed (override reason & S/E) | 
|---|
| 56 | ; Y          Scratch system variable | 
|---|
| 57 | ; | 
|---|
| 58 | ; Global Variables (variables defined outside this routine) | 
|---|
| 59 | ; DFN, GMTSNPG, GMTSQIT | 
|---|
| 60 | ; | 
|---|
| 61 | MAIN ; Herbal/Over-the-Counter/Non-VA Medications | 
|---|
| 62 | N CHAW,CLL,CT,DGR,G1,G2,GMTOP,GMX,I,ILFD,ILN,JOB,LINE,LL | 
|---|
| 63 | N LL5,LP,MAX,NL,OLN,PLN,T1,T2,T3,T4,T5,V,VARY,VO,X,Y | 
|---|
| 64 | S ILFD=0,JOB=$J,LL5="40^65" | 
|---|
| 65 | S T1=16,T2=58,T3=33,T4="25,10",T5="33,10" | 
|---|
| 66 | ; Set variables for use by report pagination routine (GMTSUP) | 
|---|
| 67 | S CT=0,MAX=999,GMX=0 | 
|---|
| 68 | ; Check to see if a patient IEN is defined | 
|---|
| 69 | I DFN="" D CKFORM W !?8,"No patient selected" Q | 
|---|
| 70 | ; Check page line count and print new page and header if necessary | 
|---|
| 71 | D CKFORM Q:$D(GMTSQIT) | 
|---|
| 72 | ; Output header for report | 
|---|
| 73 | D:GMTSNPG!(GMX'>0) HDR Q:$D(GMTSQIT)  D CKFORM Q:$D(GMTSQIT) | 
|---|
| 74 | W:'GMTOP ! S GMTOP=0,GMX=1 | 
|---|
| 75 | ; Run Pharmacy extraction | 
|---|
| 76 | D ^PSOHCSUM  ; DBIA 330 | 
|---|
| 77 | ; Quit if no herbals/non-VA drugs extracted - ^TMP("PSOO") via DBIA 330 | 
|---|
| 78 | I '$D(^TMP("PSOO",JOB,"NVA")) D CKFORM W !,?8,"No Non-VA Meds Extracted" Q | 
|---|
| 79 | ; Loop through ^TMP global array created by ^PSOHCSUM  ; DBIA 330 | 
|---|
| 80 | ;   Quit if   1  Inverse Last Fill Date =0 | 
|---|
| 81 | ;             2  Counter is not less than Max Occurrence | 
|---|
| 82 | ;             3  User has "up-arrowed" out of the display | 
|---|
| 83 | F  S ILFD=$O(^TMP("PSOO",JOB,"NVA",ILFD)) Q:+ILFD=0!(CT'<MAX)!($D(GMTSQIT))  D | 
|---|
| 84 | . S G1=^TMP("PSOO",JOB,"NVA",ILFD,0) | 
|---|
| 85 | . S G2=^TMP("PSOO",JOB,"NVA",ILFD,1,0),CT=CT+1 | 
|---|
| 86 | . D WRT | 
|---|
| 87 | K ^TMP("PSOO",$J)  ;delete temporary file created via PSOHCSUM | 
|---|
| 88 | Q | 
|---|
| 89 | ; | 
|---|
| 90 | WRT ; Write Data | 
|---|
| 91 | D CKFORM Q:$D(GMTSQIT)  ;line/pagination check - repeated ad nauseum | 
|---|
| 92 | D:GMTSNPG!(GMX'>0) HDR Q:$D(GMTSQIT) | 
|---|
| 93 | D CKFORM Q:$D(GMTSQIT) | 
|---|
| 94 | S V="Non-VA Med: " W !?T1-$L(V),V,$P(G1,U) | 
|---|
| 95 | D CKFORM Q:$D(GMTSQIT) | 
|---|
| 96 | S V="Status: " W !?T1-$L(V),V,$P(G1,U,2) | 
|---|
| 97 | ; Display discontinued date if it exists (assume discontinued status) | 
|---|
| 98 | S Y=$P(G1,U,7) I Y D DD^%DT W " (",$P(Y,"@"),")"  ; DBIA 10003 | 
|---|
| 99 | S V="CPRS Order #: " W ?T2-$L(V),V,$P(G1,U,4) | 
|---|
| 100 | D CKFORM Q:$D(GMTSQIT) | 
|---|
| 101 | S V="Documented By: " W !?T1-$L(V),V,$P($P(G1,U,6),";",2) | 
|---|
| 102 | I $P($P(G1,U,6),";") D DEGREE W:DGR'="" ",",DGR | 
|---|
| 103 | S V="Documented Date: ",Y=$P(G1,U,5) D DD^%DT W ?T2-$L(V),V,Y  ; DBIA 10003 | 
|---|
| 104 | D CKFORM Q:$D(GMTSQIT) | 
|---|
| 105 | S V="Clinic: " | 
|---|
| 106 | W !?T1-$L(V),V,$P($P(G2,U,5),";"),"-",$P($P(G2,U,5),";",2) | 
|---|
| 107 | S V="Start Date: ",Y=$P(G1,U,3) D DD^%DT W ?T2-$L(V),V,Y  ; DBIA 10003 | 
|---|
| 108 | D CKFORM Q:$D(GMTSQIT) | 
|---|
| 109 | S V="Dispense Drug: " W !?T1-$L(V),V,$P($P(G2,U,4),";",2) | 
|---|
| 110 | S V="Dosage: " W ?T2-$L(V),V,$P(G2,U) | 
|---|
| 111 | D CKFORM Q:$D(GMTSQIT) | 
|---|
| 112 | S V="Med Route: " W !?T1-$L(V),V,$P(G2,U,2) | 
|---|
| 113 | S V="Schedule: " W ?T2-$L(V),V,$P(G2,U,3) | 
|---|
| 114 | S V="Statement/Explanation/Comment: ",NL="" | 
|---|
| 115 | D CKFORM Q:$D(GMTSQIT) | 
|---|
| 116 | W ! | 
|---|
| 117 | D CKFORM Q:$D(GMTSQIT) | 
|---|
| 118 | W !?T3-$L(V),V | 
|---|
| 119 | K V M V=^TMP("PSOO",JOB,"NVA",ILFD,"DSC") | 
|---|
| 120 | ; Statement/Explanation verbiage | 
|---|
| 121 | D LINES(LL5,.V) K V D LINESOUT(T5) | 
|---|
| 122 | D CKFORM W ! | 
|---|
| 123 | K VO,X,Y | 
|---|
| 124 | Q | 
|---|
| 125 | ; | 
|---|
| 126 | LINESOUT(TN) ;WRITE LINES | 
|---|
| 127 | F  S NL=$O(VO(NL)) Q:NL=""!$D(GMTSQIT)  D | 
|---|
| 128 | . I NL=1 W ?$P(TN,","),VO(NL) | 
|---|
| 129 | . E  D CKFORM Q:$D(GMTSQIT)  W !?$P(T4,",",2),VO(NL) | 
|---|
| 130 | Q | 
|---|
| 131 | ; | 
|---|
| 132 | LINES(LL,V) ;BREAK LINES OF AN ARRAY INTO APPROPRIATE MAX LENGTHS | 
|---|
| 133 | ; | 
|---|
| 134 | ; Input: | 
|---|
| 135 | ; LL   = line lengths, e.g., 20^30^40 where last remains default | 
|---|
| 136 | ; V    = input array w/ no null lines, use " " for blank line | 
|---|
| 137 | ; | 
|---|
| 138 | ;Output: | 
|---|
| 139 | ; OV   = output array of lines broken into specified maximum lengths | 
|---|
| 140 | ; | 
|---|
| 141 | ; This subroutine takes an array of text (V) and breaks the text into | 
|---|
| 142 | ;   line lengths as dictated via LL. Where the first line length (max) | 
|---|
| 143 | ;   of the resulting array (VO) will be (approximately, based on line | 
|---|
| 144 | ;   contents) $P(LL,"^",1), the second line length (max) will be | 
|---|
| 145 | ;   $P(LL,"^",2), etc. The last line length in LL becomes the default | 
|---|
| 146 | ;   maximum line length for all the remaining lines. | 
|---|
| 147 | ; | 
|---|
| 148 | ; This subroutine is useful if you want lines output in different | 
|---|
| 149 | ;   lengths. | 
|---|
| 150 | ; | 
|---|
| 151 | ; Variables used: | 
|---|
| 152 | ; CHAW   = the next piece of a line of a maximum byte length | 
|---|
| 153 | ; CLL    = current line length (max) | 
|---|
| 154 | ; I      = scratch variable | 
|---|
| 155 | ; ILN    = input array line number | 
|---|
| 156 | ; LP     = pointer indicating where in a line the last chaw taken | 
|---|
| 157 | ; OLN    = output (resulting) line number | 
|---|
| 158 | ; PLN    = previous line length (max) | 
|---|
| 159 | ; X      = line being parsed for a breaking point | 
|---|
| 160 | ; | 
|---|
| 161 | N CHAW,CLL,ILN,LP,OLN,PLN | 
|---|
| 162 | K VO | 
|---|
| 163 | S (I,ILN,X)="",OLN=1,CLL=$P(LL,U,OLN),PLN=CLL | 
|---|
| 164 | F  S ILN=$O(V(ILN)) Q:ILN=""  S LP=1 D | 
|---|
| 165 | . S I=$E($RE(V(ILN,0))) | 
|---|
| 166 | . S V(ILN,0)=V(ILN,0)_$S("!?."[I:"  ",",;:"[I!(I?1A):" ",1:"") | 
|---|
| 167 | . I V(ILN,0)=" " S:X'="" VO(OLN)=X,X="",OLN=OLN+1 S VO(OLN)=" ",OLN=OLN+1 Q | 
|---|
| 168 | . F  S CHAW=$E(V(ILN,0),LP,LP+CLL-$L(X)),LP=LP+$L(CHAW),X=X_CHAW Q:CHAW=""!($L(X)<CLL)  D | 
|---|
| 169 | .. I $L(X)<CLL S VO(OLN)=X,X="" D LINESET Q | 
|---|
| 170 | .. I X'[" "&($L(X)=CLL) S VO(OLN)=X_"-",X="" D LINESET Q | 
|---|
| 171 | .. F I=$L(X):-1:1 Q:$E(X,I)=" "!($E(X,I)="-") | 
|---|
| 172 | .. S VO(OLN)=$E(X,1,I),X=$E(X,I+1,999) D LINESET | 
|---|
| 173 | S:X'="" VO(OLN)=X | 
|---|
| 174 | Q | 
|---|
| 175 | ; | 
|---|
| 176 | LINESET ; Used by LINES for setting variables | 
|---|
| 177 | S OLN=OLN+1,PLN=CLL,CLL=$P(LL,U,OLN) S:+CLL=0 CLL=PLN | 
|---|
| 178 | Q | 
|---|
| 179 | ; | 
|---|
| 180 | CKFORM ; Checks to determine whether to do a form feed or not | 
|---|
| 181 | D CKP^GMTSUP Q:$D(GMTSQIT) | 
|---|
| 182 | Q | 
|---|
| 183 | ; | 
|---|
| 184 | HDR ; Prints Header | 
|---|
| 185 | S GMTOP=1 | 
|---|
| 186 | I GMX'>0 D CKP^GMTSUP Q:$D(GMTSQIT) | 
|---|
| 187 | I 'GMTSNPG D CKP^GMTSUP Q:$D(GMTSQIT) | 
|---|
| 188 | Q | 
|---|
| 189 | ; | 
|---|
| 190 | DEGREE ; Gets degree of 'Documented by' individual & converts to upper case | 
|---|
| 191 | S DGR=$$GET1^DIQ(200,$P($P(G1,U,6),";"),10.6)  ; DBIA 10060 | 
|---|
| 192 | S DGR=$TR(DGR,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") | 
|---|
| 193 | Q | 
|---|