| 1 | IBCRHBS3 ;ALB/ARH - RATES: UPLOAD HOST FILES (RC 2+) PARSE ; 10-OCT-03 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**245**;21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ; IBFILE, IBFLINE, COLUMNS required and VERS expected on entry | 
|---|
| 6 | ; Parse lines from the Host Files and place them in XTMP. | 
|---|
| 7 | ; Direct copy of fields, number of fields and placement not changed, but cleaned up (spaces, $, commas removed) | 
|---|
| 8 | ; | 
|---|
| 9 | A ; Inpatient Facility DRG Charges:  process a single line, parse out into individual fields and store in XTMP | 
|---|
| 10 | ; | 
|---|
| 11 | N LINE,IBI,IBPIECE,IBITYPE,IBCODE,IBXTMP,IBXIFN S IBXTMP="IBCR RC A" I ('$G(COLUMNS))!($G(IBFLINE)="") Q | 
|---|
| 12 | ; | 
|---|
| 13 | S LINE="" F IBI=1:1:COLUMNS S IBPIECE=$$P(IBFLINE,IBI),IBPIECE=$$STRIP(IBPIECE) S LINE=LINE_IBPIECE_U | 
|---|
| 14 | ; | 
|---|
| 15 | S IBITYPE=$P(LINE,U,2) I IBITYPE'="DRG",IBITYPE'="SNF" Q | 
|---|
| 16 | S IBCODE=$P(LINE,U,1) I IBCODE'?3N Q | 
|---|
| 17 | ; | 
|---|
| 18 | S IBXIFN=$$SET(IBFILE,IBXTMP,LINE) | 
|---|
| 19 | ; | 
|---|
| 20 | Q | 
|---|
| 21 | ; | 
|---|
| 22 | B ; Outpatient Facility CPT Charges:  process a single line, parse out into individual fields and store in XTMP | 
|---|
| 23 | ; | 
|---|
| 24 | N LINE,IBI,IBPIECE,IBITYPE,IBCODE,IBXTMP,IBXIFN S IBXTMP="IBCR RC B" I ('$G(COLUMNS))!($G(IBFLINE)="") Q | 
|---|
| 25 | ; | 
|---|
| 26 | S LINE="" F IBI=1:1:COLUMNS S IBPIECE=$$P(IBFLINE,IBI),IBPIECE=$$STRIP(IBPIECE) S LINE=LINE_IBPIECE_U | 
|---|
| 27 | ; | 
|---|
| 28 | S IBITYPE=$P(LINE,U,2) I IBITYPE'="CPT",IBITYPE'="HCPCS",IBITYPE'="PHOSP" Q | 
|---|
| 29 | S IBCODE=$P(LINE,U,1) I IBCODE'?5UN Q | 
|---|
| 30 | ; | 
|---|
| 31 | S IBXIFN=$$SET(IBFILE,IBXTMP,LINE,IBCODE) | 
|---|
| 32 | ; | 
|---|
| 33 | Q | 
|---|
| 34 | ; | 
|---|
| 35 | C ; Physician CPT Charges:  process a single line, parse out into individual fields and store in XTMP | 
|---|
| 36 | ; | 
|---|
| 37 | N LINE,IBI,IBPIECE,IBITYPE,IBCODE,IBXTMP,IBXIFN S IBXTMP="IBCR RC C" I ('$G(COLUMNS))!($G(IBFLINE)="") Q | 
|---|
| 38 | ; | 
|---|
| 39 | S LINE="" F IBI=1:1:COLUMNS S IBPIECE=$$P(IBFLINE,IBI),IBPIECE=$$STRIP(IBPIECE) S LINE=LINE_IBPIECE_U | 
|---|
| 40 | ; | 
|---|
| 41 | S IBITYPE=$P(LINE,U,2) I IBITYPE'="CPT",IBITYPE'="HCPCS" Q | 
|---|
| 42 | S IBCODE=$P(LINE,U,1) I IBCODE'?5UN Q | 
|---|
| 43 | ; | 
|---|
| 44 | S IBXIFN=$$SET(IBFILE,IBXTMP,LINE,IBCODE) | 
|---|
| 45 | ; | 
|---|
| 46 | Q | 
|---|
| 47 | ; | 
|---|
| 48 | D ; Service Category Codes:  process a single line, parse out into individual fields and store in XTMP | 
|---|
| 49 | ; | 
|---|
| 50 | N LINE,IBI,IBPIECE,IBCODE,IBXTMP,IBXIFN S IBXTMP="IBCR RC D" I ('$G(COLUMNS))!($G(IBFLINE)="") Q | 
|---|
| 51 | ; | 
|---|
| 52 | S LINE="" F IBI=1:1:COLUMNS S IBPIECE=$$P(IBFLINE,IBI),IBPIECE=$$STRIP(IBPIECE) S LINE=LINE_IBPIECE_U | 
|---|
| 53 | ; | 
|---|
| 54 | S IBCODE=$P(LINE,U,1) I 'IBCODE Q | 
|---|
| 55 | ; | 
|---|
| 56 | S IBXIFN=$$SET(IBFILE,IBXTMP,LINE,IBCODE) | 
|---|
| 57 | ; | 
|---|
| 58 | Q | 
|---|
| 59 | ; | 
|---|
| 60 | E ; Area Factors:  process a single line, parse out into individual fields and store in XTMP | 
|---|
| 61 | ; | 
|---|
| 62 | N LINE,IBI,IBPIECE,IBZIP,IBXTMP,IBXIFN S IBXTMP="IBCR RC E" I ('$G(COLUMNS))!($G(IBFLINE)="") Q | 
|---|
| 63 | ; | 
|---|
| 64 | S LINE="" F IBI=1:1:COLUMNS S IBPIECE=$$P(IBFLINE,IBI),IBPIECE=$$STRIP(IBPIECE) S LINE=LINE_IBPIECE_U | 
|---|
| 65 | ; | 
|---|
| 66 | S IBZIP=$P(LINE,U,1) I IBZIP'?3N Q | 
|---|
| 67 | ; | 
|---|
| 68 | S IBXIFN=$$SET(IBFILE,IBXTMP,LINE,IBZIP) D SETSITE(IBZIP) | 
|---|
| 69 | ; | 
|---|
| 70 | Q | 
|---|
| 71 | ; | 
|---|
| 72 | F ; Zip Codes and Sites:  process a single line, parse out into individual fields and store in XTMP | 
|---|
| 73 | ; | 
|---|
| 74 | N LINE,IBSITE,IBZIP,IBNM,IBSTYPE,IBXTMP,IBXIFN S IBXTMP="IBCR RC F" I ('$G(COLUMNS))!($G(IBFLINE)="") Q | 
|---|
| 75 | ; | 
|---|
| 76 | S IBSITE=$$P(IBFLINE,1),IBSITE=$$STRIP(IBSITE) I IBSITE'?3N0.2UN Q  ; division number | 
|---|
| 77 | S IBNM=$$P(IBFLINE,2) ; facility name | 
|---|
| 78 | S IBZIP=$$P(IBFLINE,3),IBZIP=$$STRIP(IBZIP) I IBZIP'?3N Q  ; 3-digit zip code | 
|---|
| 79 | S IBSTYPE=$$P(IBFLINE,4),IBSTYPE=$$STRIP(IBSTYPE) I 'IBSTYPE Q  ; facility type | 
|---|
| 80 | ; | 
|---|
| 81 | S LINE=IBSITE_U_IBNM_U_IBZIP_U_IBSTYPE | 
|---|
| 82 | ; | 
|---|
| 83 | S IBXIFN=$$SET(IBFILE,IBXTMP,LINE,IBZIP) D SETSITE(IBZIP,IBSITE,IBNM,IBSTYPE) | 
|---|
| 84 | ; | 
|---|
| 85 | Q | 
|---|
| 86 | ; | 
|---|
| 87 | ; | 
|---|
| 88 | ; | 
|---|
| 89 | SETHDR(IBFILE,IBXRF1) ; set up header for XTMP file | 
|---|
| 90 | ; | 
|---|
| 91 | N IBX S IBX=IBFILE_" RC v"_$G(VERS)_" Host File Upload, "_$P($$HTE^XLFDT($H,2),":",1,2)_" by "_$P($G(^VA(200,+$G(DUZ),0)),U,1) | 
|---|
| 92 | S ^XTMP(IBXRF1,0)=$$FMADD^XLFDT(DT,2)_U_DT_U_IBX_U_0_U_0 | 
|---|
| 93 | I IBXRF1="IBCR RC SITE" S ^XTMP(IBXRF1,"VERSION")=$G(VERS),^XTMP(IBXRF1,"VERSION INACTIVE")=$$VERSEDT^IBCRHBRV($G(VERS)) | 
|---|
| 94 | Q | 
|---|
| 95 | ; | 
|---|
| 96 | SET(IBFILE,IBXRF1,LINE,ACROSS) ; set data parsed from host file to XTMP | 
|---|
| 97 | N IBX,IBK | 
|---|
| 98 | S IBX=$G(^XTMP(IBXRF1,0)) I IBX="" D SETHDR(IBFILE,IBXRF1) | 
|---|
| 99 | S IBK=+$P(IBX,U,5)+1,$P(^XTMP(IBXRF1,0),U,5)=IBK | 
|---|
| 100 | S ^XTMP(IBXRF1,IBK)=LINE | 
|---|
| 101 | ; | 
|---|
| 102 | I $G(ACROSS)'="" S ^XTMP(IBXRF1,"A",ACROSS,IBK)="" | 
|---|
| 103 | Q IBK | 
|---|
| 104 | ; | 
|---|
| 105 | ; | 
|---|
| 106 | SETSITE(ZIP,SITE,NAME,TYPE) ; set up site entries and cross references | 
|---|
| 107 | ; the Area Factor File (E) has entries not associated with a VA site, Site/Zip file (F) only has valid VA sites | 
|---|
| 108 | ; therefore there are many zip codes (E) with no assigned division but that must be available for selection | 
|---|
| 109 | ; these unassigned zip codes are passed in with only Zip defined, | 
|---|
| 110 | ; a temporary Division Number '9yyXy' and Name 'ZIP Code ZZZ' is created, Type is blank to be set by user | 
|---|
| 111 | ; if the zip is '000' then these are the Nation wide charges and the corresponding Division Number/Name is used | 
|---|
| 112 | N IBXRF1,LINE,IBXIFN | 
|---|
| 113 | ; | 
|---|
| 114 | I ZIP="000" S SITE="999",NAME="NATIONWIDE AVERAGE",TYPE="" | 
|---|
| 115 | I $G(SITE)="" S SITE="9"_$E(ZIP,1,2)_"X"_$E(ZIP,3),NAME="ZIP Code "_ZIP,TYPE="" | 
|---|
| 116 | I $O(^XTMP("IBCR RC SITE","C",SITE_" ",0)) W !!,"Site Error: Dupicate Site Numbers: ",SITE | 
|---|
| 117 | ; | 
|---|
| 118 | S IBXRF1="IBCR RC SITE" | 
|---|
| 119 | S LINE=SITE_U_NAME_U_ZIP_U_TYPE | 
|---|
| 120 | ; | 
|---|
| 121 | S IBXIFN=$$SET(IBXRF1,IBXRF1,LINE) | 
|---|
| 122 | ; | 
|---|
| 123 | I $G(NAME)'="" S ^XTMP(IBXRF1,"B",NAME,IBXIFN)="" | 
|---|
| 124 | I $G(ZIP)'="" S ZIP="ZC "_ZIP S ^XTMP(IBXRF1,"B",ZIP,IBXIFN)="" | 
|---|
| 125 | I $G(SITE)'="" S SITE=SITE_" " S ^XTMP(IBXRF1,"B",SITE,IBXIFN)="",^XTMP(IBXRF1,"C",SITE,IBXIFN)="" | 
|---|
| 126 | ; | 
|---|
| 127 | Q | 
|---|
| 128 | ; | 
|---|
| 129 | ; | 
|---|
| 130 | STRIP(IBVAL) ; strip blanks, $, and commas | 
|---|
| 131 | N IBI,IBY,IBX S IBY="" | 
|---|
| 132 | F IBI=1:1:200 S IBX=$E(IBVAL,IBI) Q:IBX=""  I IBX'=" ",IBX'=",",IBX'="$" S IBY=IBY_IBX | 
|---|
| 133 | Q IBY | 
|---|
| 134 | ; | 
|---|
| 135 | ; | 
|---|
| 136 | P(LINE,P) ; parse the line and return the piece requested (replaces $P since may be two dilimiters) | 
|---|
| 137 | ; the pieces are delimited by a comma, any piece that includes a comma within the text is surrounded by quotes | 
|---|
| 138 | N I,U1,U2,PC S U1=",",U2="""",PC="" | 
|---|
| 139 | ; | 
|---|
| 140 | F I=1:1:P D | 
|---|
| 141 | . I $E(LINE)=U2 S LINE=$E(LINE,2,9999),PC=$P(LINE,U2,1),LINE=$P(LINE,U2_U1,2,9999) Q | 
|---|
| 142 | . ; | 
|---|
| 143 | . S PC=$P(LINE,U1,1),LINE=$P(LINE,U1,2,9999) | 
|---|
| 144 | ; | 
|---|
| 145 | Q PC | 
|---|