| 1 | IBCINPT ;DSI/ESG - Extract data and create NPT file ;27-DEC-2000
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**161**;21-MAR-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | ENTRY ; Entry point for routine (or called from the top)
 | 
|---|
| 6 |  NEW IBCIRTN,STOP,IBCIPATH,IBCIFILE
 | 
|---|
| 7 |  D INIT
 | 
|---|
| 8 |  D INTRO
 | 
|---|
| 9 |  I STOP G EXIT
 | 
|---|
| 10 |  D GETPATH             ; get the NPT file location & Open the file
 | 
|---|
| 11 |  I STOP G EXIT
 | 
|---|
| 12 |  D EXTRACT             ; build the scratch global
 | 
|---|
| 13 |  D OUTPUT              ; build the file
 | 
|---|
| 14 | EXIT ;
 | 
|---|
| 15 |  ; Routine Exit
 | 
|---|
| 16 |  Q
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 | INIT ; Procedure to initialize some routine-wide variables
 | 
|---|
| 20 |  S IBCIRTN="IBCINPT"              ; routine name, IO handle
 | 
|---|
| 21 |  S STOP=0                         ; stop flag
 | 
|---|
| 22 |  S IBCIFILE="IBCINPT.DAT"         ; name of file that gets created
 | 
|---|
| 23 | INITX ;
 | 
|---|
| 24 |  Q
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 | INTRO ; This procedure displays introductory text and asks if the user
 | 
|---|
| 28 |  ; wants to proceed with the creation of the NPT file.
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  W @IOF
 | 
|---|
| 31 |  NEW Y,STARTDT,ENDDT,IBCIMSG,DIR,X,DTOUT,DUOUT,DIRUT,DIROUT
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  S Y=DT-30000 D DD^%DT S STARTDT=Y
 | 
|---|
| 34 |  S Y=DT D DD^%DT S ENDDT=Y
 | 
|---|
| 35 |  S IBCIMSG(1)=" This option is responsible for creating the NPT file"
 | 
|---|
| 36 |  S IBCIMSG(2)=" (New Patient History) for the ClaimsManager application from Ingenix."
 | 
|---|
| 37 |  S IBCIMSG(3)=" A 3 year history is needed so this option will extract claims data"
 | 
|---|
| 38 |  S IBCIMSG(4)=" from "_STARTDT_" through "_ENDDT_"."
 | 
|---|
| 39 |  S IBCIMSG(5)=" This process may take several minutes."
 | 
|---|
| 40 |  S IBCIMSG(6)=""
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  S IBCIMSG(3,"F")="!!"
 | 
|---|
| 43 |  S IBCIMSG(5,"F")="!!"
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  DO EN^DDIOL(.IBCIMSG)
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ; Now for the user response
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  S DIR(0)="Y"
 | 
|---|
| 50 |  S DIR("A")=" Do you wish to proceed"
 | 
|---|
| 51 |  S DIR("B")="NO"
 | 
|---|
| 52 |  DO ^DIR
 | 
|---|
| 53 |  I 'Y S STOP=1
 | 
|---|
| 54 | INTROX ;
 | 
|---|
| 55 |  Q
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 | GETPATH ; This procedure tries to get a valid directory location or path
 | 
|---|
| 59 |  ; from the user.  The file is also opened in this procedure.
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  NEW IBCIMSG,DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,POP
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  ; Some introductory text for the user
 | 
|---|
| 64 |  S IBCIMSG(1)=" The file that will be created is called "_IBCIFILE_"."
 | 
|---|
| 65 |  S IBCIMSG(2)=" You may specify a valid directory location (path) for this file."
 | 
|---|
| 66 |  S IBCIMSG(3)=" After this file has been created, it needs to be accessible to the"
 | 
|---|
| 67 |  S IBCIMSG(4)=" ClaimsManager application.  This can be done either through network"
 | 
|---|
| 68 |  S IBCIMSG(5)=" connections or by manually moving it to the ClaimsManager server."
 | 
|---|
| 69 |  S IBCIMSG(6)=""
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  S IBCIMSG(1,"F")="!!"
 | 
|---|
| 72 |  S IBCIMSG(2,"F")="!!"
 | 
|---|
| 73 |  S IBCIMSG(3,"F")="!!"
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  DO EN^DDIOL(.IBCIMSG)
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 |  ; read user response to directory question
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | GET1 ;
 | 
|---|
| 80 |  KILL DIR
 | 
|---|
| 81 |  S DIR(0)="FOr"
 | 
|---|
| 82 |  S DIR("A")=" Directory"
 | 
|---|
| 83 |  S DIR("A",1)=" Please enter the directory location (path) for "_IBCIFILE
 | 
|---|
| 84 |  S DIR("A",2)=""
 | 
|---|
| 85 |  S DIR("B")=$$PWD^%ZISH()   ; retrieves the current directory
 | 
|---|
| 86 |  S DIR("?")=" Enter the location where the file should be created."
 | 
|---|
| 87 |  S DIR("?",1)=" Enter the full path specification up to, but not including,"
 | 
|---|
| 88 |  S DIR("?",2)=" the filename.  This includes any trailing slashes or brackets."
 | 
|---|
| 89 |  S DIR("?",3)=" If the operating system allows shortcuts, you can use them."
 | 
|---|
| 90 |  S DIR("?",4)=" Examples of valid paths include:"
 | 
|---|
| 91 |  S DIR("?",5)=""
 | 
|---|
| 92 |  S DIR("?",6)="     DOS/Win      c:\scratch\"
 | 
|---|
| 93 |  S DIR("?",7)="     UNIX         /home/scratch/"
 | 
|---|
| 94 |  S DIR("?",8)="     VMS          USER$:[SCRATCH]"
 | 
|---|
| 95 |  S DIR("?",9)=""
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  DO ^DIR
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  ; Process the user response
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 |  I $D(DTOUT) S STOP=1 G GETPTHX        ; time-out
 | 
|---|
| 102 |  I $D(DUOUT) S STOP=1 G GETPTHX        ; any leading "^" input
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  ; save the path in the proper variable name
 | 
|---|
| 105 |  S IBCIPATH=Y
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ; attempt to open the file
 | 
|---|
| 108 |  DO OPEN^%ZISH(IBCIRTN,IBCIPATH,IBCIFILE,"W")
 | 
|---|
| 109 |  U IO(0)
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 |  I POP D  G GET1
 | 
|---|
| 112 |  . ;
 | 
|---|
| 113 |  . ; This means that the file was not opened.
 | 
|---|
| 114 |  . K IBCIMSG
 | 
|---|
| 115 |  . S IBCIMSG(1)=" """_IBCIPATH_""" is not a valid directory location or path."
 | 
|---|
| 116 |  . S IBCIMSG(2)=" Please press ""?"" for more assistance."
 | 
|---|
| 117 |  . S IBCIMSG(3)=""
 | 
|---|
| 118 |  . ;
 | 
|---|
| 119 |  . S IBCIMSG(1,"F")="!!"
 | 
|---|
| 120 |  . ;
 | 
|---|
| 121 |  . DO EN^DDIOL(.IBCIMSG)
 | 
|---|
| 122 |  . Q
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  ; At this point, the file has been opened successfully.
 | 
|---|
| 125 |  ; Display a message about the full file spec and get final confirmation
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  KILL IBCIMSG,DIR
 | 
|---|
| 128 |  S IBCIMSG(1)=" The full file specification including path and filename is:"
 | 
|---|
| 129 |  S IBCIMSG(2)=""
 | 
|---|
| 130 |  S IBCIMSG(3)="     "_IBCIPATH_IBCIFILE
 | 
|---|
| 131 |  S IBCIMSG(4)=""
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 |  S IBCIMSG(1,"F")="!!"
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 |  DO EN^DDIOL(.IBCIMSG)
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 |  ; Now for the final user confirmation
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 |  S DIR(0)="Y"
 | 
|---|
| 140 |  S DIR("A")=" OK to begin"
 | 
|---|
| 141 |  S DIR("B")="YES"
 | 
|---|
| 142 |  DO ^DIR
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 |  I 'Y D  G GET1                ; user said NO to begin the extract
 | 
|---|
| 145 |  . DO CLOSE^%ZISH(IBCIRTN)     ; close the file
 | 
|---|
| 146 |  . DO EN^DDIOL(" ")            ; write a blank line to the screen
 | 
|---|
| 147 |  . Q
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 | GETPTHX ;
 | 
|---|
| 150 |  Q
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 | EXTRACT ; This procedure extracts the data for the NPT file into a scratch
 | 
|---|
| 154 |  ; global.
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 |  NEW STARTDT,EVNDT,D0,BILL,STATUS,DFN,D1,PROC,IBCIPROV,IBCIPRDT,HCFA,SSN
 | 
|---|
| 157 |  NEW TOTBILLS,TOTRECS,DISPMON,DISPYR,MONTH,SAVMONTH,IBCIMSG,X,Y,%H
 | 
|---|
| 158 |  S TOTBILLS=0,TOTRECS=0
 | 
|---|
| 159 |  KILL ^TMP($J,IBCIRTN)      ; initialize scratch global with user/date
 | 
|---|
| 160 |  S %H=$H DO YX^%DTC
 | 
|---|
| 161 |  S ^TMP($J,IBCIRTN)=DUZ_U_Y
 | 
|---|
| 162 |  DO EN^DDIOL(" ")       ; write blank line
 | 
|---|
| 163 |  DO WAIT^DICD           ; message telling user to wait
 | 
|---|
| 164 |  DO EN^DDIOL(" ")       ; write blank line
 | 
|---|
| 165 |  S STARTDT=DT-30000     ; three years ago
 | 
|---|
| 166 |  S STARTDT=$O(^DGCR(399,"D",STARTDT),-1)
 | 
|---|
| 167 |  S EVNDT=STARTDT
 | 
|---|
| 168 |  S SAVMONTH=""
 | 
|---|
| 169 |  F  S EVNDT=$O(^DGCR(399,"D",EVNDT)) Q:'EVNDT  D
 | 
|---|
| 170 |  . S MONTH=$E(EVNDT,4,5)
 | 
|---|
| 171 |  . I MONTH'=SAVMONTH D
 | 
|---|
| 172 |  .. S Y=EVNDT D DD^%DT
 | 
|---|
| 173 |  .. S DISPMON=$E(Y,1,3)
 | 
|---|
| 174 |  .. S DISPYR=$E(Y,9,12)
 | 
|---|
| 175 |  .. DO EN^DDIOL("    Processing "_DISPMON_" "_DISPYR)
 | 
|---|
| 176 |  .. S SAVMONTH=MONTH
 | 
|---|
| 177 |  .. Q
 | 
|---|
| 178 |  . S D0=0
 | 
|---|
| 179 |  . F  S D0=$O(^DGCR(399,"D",EVNDT,D0)) Q:'D0  D
 | 
|---|
| 180 |  .. S TOTBILLS=TOTBILLS+1
 | 
|---|
| 181 |  .. S BILL=$G(^DGCR(399,D0,0))
 | 
|---|
| 182 |  .. S STATUS=$P(BILL,U,13)             ; field #.13 STATUS
 | 
|---|
| 183 |  .. I STATUS="" Q
 | 
|---|
| 184 |  .. I $F(".1.7.","."_STATUS_".") Q     ; we don't want these
 | 
|---|
| 185 |  .. S DFN=$P(BILL,U,2)                 ; field #.02 PATIENT NAME
 | 
|---|
| 186 |  .. S SSN=$P($G(^DPT(DFN,0)),U,9)      ; SSN# of patient
 | 
|---|
| 187 |  .. I SSN="" Q
 | 
|---|
| 188 |  .. ;
 | 
|---|
| 189 |  .. ; esg - 6/8/01
 | 
|---|
| 190 |  .. ; Use the new Patch 51 procedures to get the provider data if
 | 
|---|
| 191 |  .. ; there is data in the provider multiple.
 | 
|---|
| 192 |  .. ; Use the Operating (2), Rendering (3), and Attending (4) providers
 | 
|---|
| 193 |  .. ; and get their specialties to build the patient history file.
 | 
|---|
| 194 |  .. ;
 | 
|---|
| 195 |  .. I $P($G(^DGCR(399,D0,"PRV",0)),U,4) D
 | 
|---|
| 196 |  ... NEW PRVTYP,IBXARRAY,IBXARRY,IBXDATA,IBXERR,IBPRV
 | 
|---|
| 197 |  ... S IBCIPRDT=$P(EVNDT,".",1)         ; use the bill's event date
 | 
|---|
| 198 |  ... I IBCIPRDT="" Q
 | 
|---|
| 199 |  ... D F^IBCEF("N-ALL PROVIDERS",,,D0)  ; Patch 51 utility
 | 
|---|
| 200 |  ... F PRVTYP=2,3,4 D
 | 
|---|
| 201 |  .... S IBPRV=$P($G(IBXDATA(PRVTYP,1)),U,3)
 | 
|---|
| 202 |  .... S HCFA=$$BILLSPEC^IBCEU3(D0,IBPRV)
 | 
|---|
| 203 |  .... I HCFA="" Q
 | 
|---|
| 204 |  .... ;
 | 
|---|
| 205 |  .... ; All the data should be here so file it
 | 
|---|
| 206 |  .... ; Update the record counter if we've never seen this
 | 
|---|
| 207 |  .... ; patient/specialty pairing before
 | 
|---|
| 208 |  .... I '$D(^TMP($J,IBCIRTN,SSN,HCFA)) S TOTRECS=TOTRECS+1
 | 
|---|
| 209 |  .... S ^TMP($J,IBCIRTN,SSN,HCFA,IBCIPRDT)=""
 | 
|---|
| 210 |  .... Q
 | 
|---|
| 211 |  ... Q
 | 
|---|
| 212 |  .. ;
 | 
|---|
| 213 |  .. ; Now loop through the procedures sub-file and extract data
 | 
|---|
| 214 |  .. S D1=0
 | 
|---|
| 215 |  .. F  S D1=$O(^DGCR(399,D0,"CP",D1)) Q:'D1  D
 | 
|---|
| 216 |  ... S PROC=$G(^DGCR(399,D0,"CP",D1,0))
 | 
|---|
| 217 |  ... S IBCIPROV=$P(PROC,U,18)          ; field #18 PROVIDER
 | 
|---|
| 218 |  ... I IBCIPROV="" Q
 | 
|---|
| 219 |  ... S IBCIPRDT=$P(PROC,U,2)           ; field #1 PROCEDURE DATE
 | 
|---|
| 220 |  ... I IBCIPRDT="" Q
 | 
|---|
| 221 |  ... ;
 | 
|---|
| 222 |  ... ; invoke utility from Kernel patch XU*8.0*132
 | 
|---|
| 223 |  ... S HCFA=$$GET^XUA4A72(IBCIPROV,IBCIPRDT)
 | 
|---|
| 224 |  ... S HCFA=$P(HCFA,U,8)               ; 2-digit HCFA specialty code
 | 
|---|
| 225 |  ... I HCFA="" Q
 | 
|---|
| 226 |  ... ;
 | 
|---|
| 227 |  ... ; All the data should be here so file it
 | 
|---|
| 228 |  ... ; Update the record counter if we've never seen this
 | 
|---|
| 229 |  ... ; patient/specialty pairing before
 | 
|---|
| 230 |  ... I '$D(^TMP($J,IBCIRTN,SSN,HCFA)) S TOTRECS=TOTRECS+1
 | 
|---|
| 231 |  ... S ^TMP($J,IBCIRTN,SSN,HCFA,IBCIPRDT)=""
 | 
|---|
| 232 |  ... Q
 | 
|---|
| 233 |  .. Q
 | 
|---|
| 234 |  . Q
 | 
|---|
| 235 |  ;
 | 
|---|
| 236 |  ;
 | 
|---|
| 237 |  KILL IBCIMSG
 | 
|---|
| 238 |  S IBCIMSG(1)=" The compile process has completed successfully."
 | 
|---|
| 239 |  S IBCIMSG(2)=" The number of bills that were reviewed is "_$FN(TOTBILLS,",")_"."
 | 
|---|
| 240 |  S IBCIMSG(3)=" The number of records that will be in the NPT file is "_$FN(TOTRECS,",")_"."
 | 
|---|
| 241 |  S IBCIMSG(4)=" All that's left to do is to copy these records into the NPT file."
 | 
|---|
| 242 |  S IBCIMSG(5)=""
 | 
|---|
| 243 |  ;
 | 
|---|
| 244 |  S IBCIMSG(1,"F")="!!"
 | 
|---|
| 245 |  S IBCIMSG(2,"F")="!!"
 | 
|---|
| 246 |  S IBCIMSG(4,"F")="!!"
 | 
|---|
| 247 |  ;
 | 
|---|
| 248 |  DO EN^DDIOL(.IBCIMSG)
 | 
|---|
| 249 |  ;
 | 
|---|
| 250 | EXTRX ;
 | 
|---|
| 251 |  Q
 | 
|---|
| 252 |  ;
 | 
|---|
| 253 |  ;
 | 
|---|
| 254 | OUTPUT ; This procedure loops through the scratch global and writes each
 | 
|---|
| 255 |  ; record to the open file.  We only need to write the record with
 | 
|---|
| 256 |  ; the most recent date of service for each patient/HCFA specialty
 | 
|---|
| 257 |  ; code pair.  This is why we are not looping through all dates,
 | 
|---|
| 258 |  ; but doing a $Order with the -1 parameter to get the most recent
 | 
|---|
| 259 |  ; date.  The file is also closed in this procedure and a confirmation
 | 
|---|
| 260 |  ; message is shown to the user.
 | 
|---|
| 261 |  ;
 | 
|---|
| 262 |  NEW SSN,HCFA,DATE,SVCDT,IBCIMSG,POP,X,X1,X2,X3,X4,Y
 | 
|---|
| 263 |  ;
 | 
|---|
| 264 |  ; Use the file for writing
 | 
|---|
| 265 |  U IO
 | 
|---|
| 266 |  ;
 | 
|---|
| 267 |  ; loop through global and output record into file
 | 
|---|
| 268 |  S (SSN,HCFA)=""
 | 
|---|
| 269 |  F  S SSN=$O(^TMP($J,IBCIRTN,SSN)) Q:SSN=""  D
 | 
|---|
| 270 |  . F  S HCFA=$O(^TMP($J,IBCIRTN,SSN,HCFA)) Q:HCFA=""  D
 | 
|---|
| 271 |  .. S DATE=$O(^TMP($J,IBCIRTN,SSN,HCFA,""),-1)
 | 
|---|
| 272 |  .. S SVCDT=($E(DATE,1,3)+1700)_$E(DATE,4,7)
 | 
|---|
| 273 |  .. ;
 | 
|---|
| 274 |  .. ; Output the records to the file
 | 
|---|
| 275 |  .. S X=SSN,X1=20,X4="T" W $$FILL^IBCIUT2
 | 
|---|
| 276 |  .. S X=HCFA,X1=10,X4="T" W $$FILL^IBCIUT2
 | 
|---|
| 277 |  .. S X=SVCDT,X1=17,X4="T" W $$FILL^IBCIUT2
 | 
|---|
| 278 |  .. W !
 | 
|---|
| 279 |  .. Q
 | 
|---|
| 280 |  . Q
 | 
|---|
| 281 |  ;
 | 
|---|
| 282 |  ; The file has been created so close it and tell the user
 | 
|---|
| 283 |  DO CLOSE^%ZISH(IBCIRTN)
 | 
|---|
| 284 |  U IO(0)
 | 
|---|
| 285 |  S IBCIMSG(1)=" The NPT file creation process is complete!"
 | 
|---|
| 286 |  S IBCIMSG(2)=""
 | 
|---|
| 287 |  S IBCIMSG(1,"F")="!!"
 | 
|---|
| 288 |  DO EN^DDIOL(.IBCIMSG)
 | 
|---|
| 289 |  ;
 | 
|---|
| 290 |  ; clean up the scratch global
 | 
|---|
| 291 |  KILL ^TMP($J,IBCIRTN)
 | 
|---|
| 292 |  ;
 | 
|---|
| 293 | OUTPUTX ;
 | 
|---|
| 294 |  Q
 | 
|---|
| 295 |  ;
 | 
|---|