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