| 1 | IBJD ;ALB/CPM - DIAGNOSTIC MEASURES UTILITIES ; 16-DEC-96
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**69,123**;21-MAR-94
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | DS ; Print a (S)ummary or (D)etail Report?
 | 
|---|
| 5 |  S DIR(0)="SA^S:SUMMARY;D:DETAILED;"
 | 
|---|
| 6 |  S DIR("A")="Do you wish to print a (S)ummary or (D)etailed Report? "
 | 
|---|
| 7 |  S DIR("?")="^D HDS^IBJD"
 | 
|---|
| 8 |  W ! D ^DIR K DIR S IBRPT=Y
 | 
|---|
| 9 |  Q
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 | SDIV() ; - Sort by division.
 | 
|---|
| 12 |  ; Output: SDIV  = 1 - Sort by Division / 0 - Do not sort by Division
 | 
|---|
| 13 |  ;                 or "^" - User selected "^"
 | 
|---|
| 14 |  ;         VAUTD = 1 - All divisions selected / 0 - Specific divisions
 | 
|---|
| 15 |  ;         VAUTD(DIV) = Divsions selected
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  N SDIV,DIR,J
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  K DIR,VAUTD S DIR(0)="Y",DIR("B")="NO" W !
 | 
|---|
| 20 |  S DIR("A")="Do you wish to sort this report by division"
 | 
|---|
| 21 |  S DIR("T")=DTIME,DIR("?")="^D HDIV^IBJD"
 | 
|---|
| 22 |  D ^DIR K DIR
 | 
|---|
| 23 |  I $D(DIRUT)!$D(DTOUT)!$D(DUOUT)!$D(DIROUT) S SDIV="^" G QDIV
 | 
|---|
| 24 |  S SDIV=+Y K DIROUT,DTOUT,DUOUT,DIRUT
 | 
|---|
| 25 |  I SDIV D PSDR^IBODIV I Y<0 S SDIV="^"
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ; - Set VAUTD when ALL divisions have been selected
 | 
|---|
| 28 |  I SDIV,VAUTD S J=0 F  S J=$O(^DG(40.8,J)) Q:'J  S VAUTD(J)=""
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 | QDIV Q SDIV
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 | MLTP(PRPT,OPT,ALL) ; Function for multiple value selection
 | 
|---|
| 33 |  ; Input: PRPT - String to be prompted to the user, before listing options
 | 
|---|
| 34 |  ;        OPT  - Array containing the possible entries (indexed by code)
 | 
|---|
| 35 |  ;               Obs: Code must be sequential starting with 1
 | 
|---|
| 36 |  ;        ALL  - Flag indicating if the last option is ALL OF THE ABOVE
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 |  ; Output: MLTP - User selection, i.e. "1,2,3," or "1," or 0 (nothing
 | 
|---|
| 39 |  ;                 was selected)
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  N A,DIR,DIRUT,DTOUT,DUOUT,DIROUT,I,IX,LST,MLTP
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | PRPT S MLTP=0,ALL=+$G(ALL)
 | 
|---|
| 44 |  S LST=$O(OPT(""),-1)
 | 
|---|
| 45 |  S DIR(0)="LO^1:"_LST_"^K:+$P(X,""-"",2)>"_LST_" X"
 | 
|---|
| 46 |  S DIR("A",1)=$G(PRPT),DIR("A",2)=""
 | 
|---|
| 47 |  S A="",IX=3
 | 
|---|
| 48 |  F  S A=$O(OPT(A))  Q:A=""  D
 | 
|---|
| 49 |  . S DIR("A",IX)="   "_A_" - "_$G(OPT(A)),IX=IX+1
 | 
|---|
| 50 |  S DIR("A",IX)="",DIR("A")="Select",DIR("B")=LST,DIR("T")=DTIME W !
 | 
|---|
| 51 |  D ^DIR K DIR I $D(DIRUT)!$D(DTOUT)!$D(DUOUT)!$D(DIROUT) G QT
 | 
|---|
| 52 |  S MLTP=Y K DIROUT,DTOUT,DUOUT,DIRUT
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  I ALL,MLTP[LST S MLTP=LST_","
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |  S DIR(0)="Y",DIR("A",1)="You have selected",DIR("A",2)=""
 | 
|---|
| 57 |  S A="",IX=3
 | 
|---|
| 58 |  F I=1:1:($L(MLTP,",")-1) D
 | 
|---|
| 59 |  . S DIR("A",IX)="    "_$P(MLTP,",",I)_" - "_$G(OPT($P(MLTP,",",I)))
 | 
|---|
| 60 |  . S IX=IX+1
 | 
|---|
| 61 |  S DIR("A",IX)=""
 | 
|---|
| 62 |  S DIR("A")="Are you sure",DIR("B")="NO",DIR("T")=DTIME W !
 | 
|---|
| 63 |  D ^DIR K DIR I $D(DIRUT)!$D(DTOUT)!$D(DUOUT)!$D(DIROUT) S MLTP=0 G QT
 | 
|---|
| 64 |  K DIROUT,DTOUT,DUOUT,DIRUT I 'Y K DIR G PRPT
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  I ALL,MLTP[LST D
 | 
|---|
| 67 |  . S MLTP="" F I=(LST-1):-1:1 S MLTP=I_","_MLTP
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 | QT Q MLTP
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | SNL() ; - Determine the sorting of the patient (By Name or Last 4 SSN)
 | 
|---|
| 72 |  ; Output: SNL = "N" (Name)/"L" (Last 4 SSN) ^ "NAME" or "LAST 4"
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  N DIR,DIRUT,DTOUT,DUOUT,DIROUT,SNL
 | 
|---|
| 75 |  S SNL=""
 | 
|---|
| 76 |  S DIR(0)="SA^N:NAME;L:LAST 4"
 | 
|---|
| 77 |  S DIR("A")="Sort Patients by (N)AME or (L)AST 4 of the SSN: "
 | 
|---|
| 78 |  S DIR("B")="NAME",DIR("T")=DTIME,DIR("?")="^D HNL^IBJD"
 | 
|---|
| 79 |  W ! D ^DIR K DIR I Y=""!(X="^") Q "^"
 | 
|---|
| 80 |  S SNL=Y
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  Q SNL
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | INTV(SORT) ; Selects the interval
 | 
|---|
| 85 |  ; Output: First value ^ Last Value ^ "ALL"/"NULL"/""
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  N ALNU,FRST,LAST,X
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  S (ALNU,FRST,LAST)=""
 | 
|---|
| 90 | FRST W !!?3,"START WITH "_SORT_": FIRST// " R X:DTIME I '$T!(X["^") Q "^"
 | 
|---|
| 91 |  I $E(X)="?" D HFST G FRST
 | 
|---|
| 92 |  S FRST=X
 | 
|---|
| 93 | LAST W !?8,"GO TO "_SORT_": LAST// " R X:DTIME I '$T!(X["^") Q "^"
 | 
|---|
| 94 |  I $E(X)="?" D HLST G LAST
 | 
|---|
| 95 |  I X="" S LAST="zzzzz" S:FRST="" ALNU="ALL" G QINT
 | 
|---|
| 96 |  I X="@",FRST="@" S LAST="@",ALNU="NULL" G QINT
 | 
|---|
| 97 |  I FRST'="@",FRST]X D  G LAST
 | 
|---|
| 98 |  .W *7,!!?7,"The LAST value must follow the FIRST.",!
 | 
|---|
| 99 |  S LAST=X
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 | QINT Q (FRST_"^"_LAST_"^"_ALNU)
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 | EXCEL() ; - Returns whether to catpture data for Excel report.
 | 
|---|
| 104 |  ; Output: EXCEL = 1 - YES (capture data) / 0 - NO (DO NOT capture data)
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  N EXCEL,DIR,DIRUT,DTOUT,DUOUT,DIROUT
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  S DIR(0)="Y",DIR("B")="NO",DIR("T")=DTIME W !
 | 
|---|
| 109 |  S DIR("A")="Do you want to capture report data for an Excel document"
 | 
|---|
| 110 |  S DIR("?")="^D HEXC^IBJD"
 | 
|---|
| 111 |  D ^DIR K DIR I $D(DIRUT)!$D(DTOUT)!$D(DUOUT)!$D(DIROUT) Q "^"
 | 
|---|
| 112 |  K DIROUT,DTOUT,DUOUT,DIRUT
 | 
|---|
| 113 |  S EXCEL=0 I Y S EXCEL=1
 | 
|---|
| 114 |  ;
 | 
|---|
| 115 |  Q EXCEL
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 | CLMACT(X,Y) ; - Check if AR has a corresponding claim or IB action.
 | 
|---|
| 118 |  ;    Input: X=Claim/AR pointer to file #399/#430
 | 
|---|
| 119 |  ;           Y=AR category pointer to file #430.2
 | 
|---|
| 120 |  ;   Output: Z=1-IB action, 2-Claim, 3-No IB action or claim
 | 
|---|
| 121 |  ;             ^ IB action IEN (if 1) or AR/claim IEN (if 2 or 3)
 | 
|---|
| 122 |  ;             OR null=Invalid IB action or claim
 | 
|---|
| 123 |  N ACT,BILL,NODE,NODE1,Z S Z="" G:'$G(X)!('$G(Y)) CLACQ
 | 
|---|
| 124 |  S BILL=$P($G(^PRCA(430,X,0)),U) G:BILL="" CLACQ
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  ; - Check for most recent IB action.
 | 
|---|
| 127 |  S ACT=+$O(^IB("ABIL",BILL,9999999),-1) G:'ACT CLAC1
 | 
|---|
| 128 |  S NODE=$G(^IB(ACT,0)) G:NODE="" CLAC1
 | 
|---|
| 129 |  I $P(NODE,U,5)'=3!($P(NODE,U,10)) G CLACQ ; Not billed/cancelled. 
 | 
|---|
| 130 |  I $P($G(^IBE(350.1,+$P(NODE,U,3),0)),U,3)=Y S Z=1_U_ACT G CLACQ
 | 
|---|
| 131 |  ;
 | 
|---|
| 132 | CLAC1 ; - Check for IB claim.
 | 
|---|
| 133 |  I '$D(^DGCR(399,X,0)) S Z=3_U_X G CLACQ ;           No IB action/claim.
 | 
|---|
| 134 |  S NODE=$G(^DGCR(399,X,0)) G:$P(NODE,U,13)=7 CLACQ ; Cancelled claim.
 | 
|---|
| 135 |  S NODE1=$G(^DGCR(399.3,+$P(NODE,U,7),0)) G:NODE1="" CLACQ
 | 
|---|
| 136 |  I '$P(NODE1,U,3),$P(NODE1,U,6)=Y S Z=2_U_X
 | 
|---|
| 137 | CLACQ Q Z
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 | ALSP(PRPT,FILE,ARR) ; Selection of (A)LL or (S)pecific values from a given file
 | 
|---|
| 140 |  ; Input: PRPT  - Piece 1: Label for the PROMPT to be asked for the 
 | 
|---|
| 141 |  ;                         selection (in the plural) - e.g. "Providers"
 | 
|---|
| 142 |  ;                Piece 2: Singular of piece 1 -  e.g. "Provider"
 | 
|---|
| 143 |  ;                Exaple: "Specialties^Specialty"
 | 
|---|
| 144 |  ;        FILE  - File global root (e.g., "^IBE(356.8," ) that the values
 | 
|---|
| 145 |  ;                will be selected from
 | 
|---|
| 146 |  ;        ARR   - Name of the array that will contain the specific values
 | 
|---|
| 147 |  ;                (must be passed as a refernce value ".ARR")
 | 
|---|
| 148 |  ; Output: ARR  - "A" - ALL values OR "S" - Specific values OR "^"
 | 
|---|
| 149 |  ;                The values will be returned in the array indicated in
 | 
|---|
| 150 |  ;                ARR parameter 
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 |  N DIC,PRL,SNG,X
 | 
|---|
| 153 |  K ARR S PRL=$P(PRPT,"^"),SNG=$P(PRPT,"^",2) S:SNG="" SNG=PRL
 | 
|---|
| 154 | ALSP1 W !!,"Run report for (A)LL or (S)PECIFIC "_PRL_": A// "
 | 
|---|
| 155 |  R X:DTIME I '$T!(X["^") S ARR="^" G QALSP
 | 
|---|
| 156 |  S X=$S(X="":"A",1:$E(X)) I "AaSs"'[X D HALSP G ALSP1
 | 
|---|
| 157 |  W " ",$S("Ss"[X:"SPECIFIC",1:"ALL") I "Aa"[X K ARR S ARR="A" G QALSP
 | 
|---|
| 158 |  S ARR="S"
 | 
|---|
| 159 | ALSP2 S DIC=FILE,DIC(0)="AEQMZ"
 | 
|---|
| 160 |  S DIC("A")="   Select a"_$S($O(ARR(""))'="":"nother",1:"")_" "
 | 
|---|
| 161 |  S DIC("A")=DIC("A")_SNG_": "
 | 
|---|
| 162 |  D ^DIC K DIC I $D(DTOUT)!($D(DUOUT)) K ARR S ARR="^" G QALSP
 | 
|---|
| 163 |  I Y'>0 G ALSP1:$O(ARR(""))="" G QALSP
 | 
|---|
| 164 |  I $D(ARR(+Y)) D  G ALSP2
 | 
|---|
| 165 |  . W !!?3,"Already selected. Choose another "_SNG,*7,!
 | 
|---|
| 166 |  S ARR(+Y)="" G ALSP2
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 | QALSP Q
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 | HDS ; Help for Summary/Detail prompt.
 | 
|---|
| 171 |  W !,"Please enter 'S' for 'Summary' or 'D' for a Detailed Report."
 | 
|---|
| 172 |  W !,"Note that if you select the Detailed report, the Summary will also print."
 | 
|---|
| 173 |  Q
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 | HDIV ; - 'Sort by division...' prompt
 | 
|---|
| 176 |  W !!,"      Enter:  '<CR>' -  To print the report without regard to division"
 | 
|---|
| 177 |  W !!,"              'Y'    -  To select those divisions for which a separate"
 | 
|---|
| 178 |  W !,"                        report should be created"
 | 
|---|
| 179 |  W !,"              '^'    -  To quit this option"
 | 
|---|
| 180 |  Q
 | 
|---|
| 181 |  ;
 | 
|---|
| 182 | HNL ; - 'Sort Patients by (N)AME... ' prompt
 | 
|---|
| 183 |  W !!,"      Enter:  '<CR>' -  To select and sort patients by name"
 | 
|---|
| 184 |  W !!,"              'L'    -  To select and sort patients by the last 4"
 | 
|---|
| 185 |  W !,"                        of the SSN"
 | 
|---|
| 186 |  W !,"              '^'    -  To quit this option"
 | 
|---|
| 187 |  Q
 | 
|---|
| 188 |  ;
 | 
|---|
| 189 | HFST ; - 'START WITH PATIENT/DEBTOR...' prompt 
 | 
|---|
| 190 |  W !!,"      Enter a valid field value, or"
 | 
|---|
| 191 |  W !!,"        '@'    -  To include null values"
 | 
|---|
| 192 |  W !,"        '<CR>' -  To start from the 'first' value for this field"
 | 
|---|
| 193 |  W !,"        '^'    -  To quit this option"
 | 
|---|
| 194 |  Q
 | 
|---|
| 195 |  ;
 | 
|---|
| 196 | HLST ; - 'GO TO PATIENT/DEBTOR' prompt 
 | 
|---|
| 197 |  W !!,"      Enter a valid field value, or"
 | 
|---|
| 198 |  W !!,"        '@'    -  To include only null values, if 'Start with'"
 | 
|---|
| 199 |  W !,"                  value is @"
 | 
|---|
| 200 |  W !,"        '<CR>' -  To go to the 'last' value for this field"
 | 
|---|
| 201 |  W !,"        '^'    -  To quit this option",!
 | 
|---|
| 202 |  Q
 | 
|---|
| 203 |  ;
 | 
|---|
| 204 | HEXC ; - 'Do you want to capture data...' prompt
 | 
|---|
| 205 |  W !!,"      Enter:  'Y'    -  To capture detail report data to transfer"
 | 
|---|
| 206 |  W !,"                        to an Excel document"
 | 
|---|
| 207 |  W !,"              '<CR>' -  To skip this option"
 | 
|---|
| 208 |  W !,"              '^'    -  To quit this option"
 | 
|---|
| 209 |  Q
 | 
|---|
| 210 |  ;
 | 
|---|
| 211 | HALSP ; - 'Run report for (A)LL or (S)pecific...' prompt.
 | 
|---|
| 212 |  W !!?6,"Enter: '<CR>' - To select all "_PRL
 | 
|---|
| 213 |  W !?16,"'S' - To select one or more "_PRL
 | 
|---|
| 214 |  W !?16,"'^' - To quit this option"
 | 
|---|
| 215 |  Q
 | 
|---|
| 216 |  ;
 | 
|---|
| 217 | EXMSG ; - Displays the message about capturing to an Excel file format
 | 
|---|
| 218 |  ;
 | 
|---|
| 219 |  W !!?5,"Before continuing, please set up your terminal to capture the"
 | 
|---|
| 220 |  W !?5,"detail report data. On some terminals, this can  be  done  by"
 | 
|---|
| 221 |  W !?5,"clicking  on the 'Tools' menu above, then click  on  'Capture"
 | 
|---|
| 222 |  W !?5,"Incoming  Data' to save to  Desktop. This  report  may take a"
 | 
|---|
| 223 |  W !?5,"while to run."
 | 
|---|
| 224 |  W !!?5,"Note: To avoid  undesired  wrapping of the data  saved to the"
 | 
|---|
| 225 |  W !?5,"      file, please enter '0;256;999' at the 'DEVICE:' prompt.",!
 | 
|---|
| 226 |  Q
 | 
|---|
| 227 |  ;
 | 
|---|
| 228 | EXPAND(FILE,FIELD,VALUE) ; Resolve coded data.
 | 
|---|
| 229 |  N Y,C S Y=VALUE
 | 
|---|
| 230 |  I 'FILE!('FIELD)!(VALUE="") G EXPQ
 | 
|---|
| 231 |  S Y=VALUE,C=$P(^DD(FILE,FIELD,0),"^",2) D Y^DIQ
 | 
|---|
| 232 | EXPQ Q Y
 | 
|---|
| 233 |  ;
 | 
|---|
| 234 | DT(X,Y) ; - Return date.
 | 
|---|
| 235 |  ;    Input: X=Date in Fileman format
 | 
|---|
| 236 |  ;   Output: Z=Date in MMM DD,YYYY format or MMDDYY format if Y=1
 | 
|---|
| 237 |  N Z S Z="" G:'$G(X) DTQ
 | 
|---|
| 238 |  I $G(Y) S Z=$E(X,4,7)_$E(X,2,3) G DTQ
 | 
|---|
| 239 |  N Y S Y=X X ^DD("DD") S Z=$P(Y,"@")
 | 
|---|
| 240 | DTQ Q Z
 | 
|---|