| [613] | 1 | FBUTL1 ;WOIFO/SAB-FEE BASIS UTILITY ;6/17/2003
 | 
|---|
 | 2 |  ;;3.5;FEE BASIS;**61**;JAN 30, 1995
 | 
|---|
 | 3 |  Q
 | 
|---|
 | 4 |  ;Extrinsic functions AR, AG, and RR have similar inputs and outputs
 | 
|---|
 | 5 |  ; input
 | 
|---|
 | 6 |  ;   FBCI - Internal entry number of code.
 | 
|---|
 | 7 |  ;          Not required if external value is passed.
 | 
|---|
 | 8 |  ;   FBCE - External value of code.
 | 
|---|
 | 9 |  ;          Not required if internal value is passed.
 | 
|---|
 | 10 |  ;          If both the internal and external values are passed
 | 
|---|
 | 11 |  ;          then the external value will be ignored.
 | 
|---|
 | 12 |  ;   FBDT - Effective date.
 | 
|---|
 | 13 |  ;          Optional - DT (Today) will be used if a value is not passed.
 | 
|---|
 | 14 |  ;          An input date prior to 6/1/03 will be changed to be 6/1/03.
 | 
|---|
 | 15 |  ;   FBAR - Root of local or global array in which the description
 | 
|---|
 | 16 |  ;          word processing field will be returned.
 | 
|---|
 | 17 |  ;          Optional - description will not be returned if an array root
 | 
|---|
 | 18 |  ;          is not passed.  The root should be in closed format
 | 
|---|
 | 19 |  ;          such as FBAR or FBAR(2) or ^TMP($J,"DESC").
 | 
|---|
 | 20 |  ;          The root should not be a variable name already used in FBUTL1
 | 
|---|
 | 21 |  ; Returns a string value
 | 
|---|
 | 22 |  ;     Internal code ^ External code ^ HIPAA status ^ FEE status ^ name
 | 
|---|
 | 23 |  ;   OR if there is an error
 | 
|---|
 | 24 |  ;     -1^-1^^^error message text
 | 
|---|
 | 25 |  ;   where
 | 
|---|
 | 26 |  ;     internal code = internal entry number of code in file
 | 
|---|
 | 27 |  ;     external code = external value of code
 | 
|---|
 | 28 |  ;     HIPAA status = 1 (active) or 0 (inactive) as of effective date
 | 
|---|
 | 29 |  ;     FEE status = 1 (applicable) or 0 (not applicable) for fee claim
 | 
|---|
 | 30 |  ;                  adjudication as of the effective date
 | 
|---|
 | 31 |  ;     name = a short descriptive name for the code as of the eff. date
 | 
|---|
 | 32 |  ;            name is only returned by AG (not returned by AR and RR)
 | 
|---|
 | 33 |  ;     error message text = an error message
 | 
|---|
 | 34 |  ; Output
 | 
|---|
 | 35 |  ;   fbarr( - Array containing the description as of the effective date.
 | 
|---|
 | 36 |  ;            For example, if "FBTXT" was passed in parameter FBAR then
 | 
|---|
 | 37 |  ;            the output might be
 | 
|---|
 | 38 |  ;              FBTXT(1)=1st line of description
 | 
|---|
 | 39 |  ;              FBTXT(2)=2nd line of description
 | 
|---|
 | 40 |  ;            The array will be undefined if there is not a description
 | 
|---|
 | 41 |  ;
 | 
|---|
 | 42 | AR(FBCI,FBCE,FBDT,FBAR) ; ADJUSTMENT REASON extrinsic function
 | 
|---|
 | 43 |  ; Provides status and description for an adjustment reason code
 | 
|---|
 | 44 |  ; stored in the ADJUSTMENT REASON (#161.91) file.
 | 
|---|
 | 45 |  ; see top of routine for additional documentation
 | 
|---|
 | 46 |  N FBC,FBDT1,FBERR,FBRET
 | 
|---|
 | 47 |  S FBRET="",FBERR=""
 | 
|---|
 | 48 |  I $G(FBAR)]"" K @FBAR
 | 
|---|
 | 49 |  ;
 | 
|---|
 | 50 |  ; find code in file
 | 
|---|
 | 51 |  D FNDCDE(161.91)
 | 
|---|
 | 52 |  ;
 | 
|---|
 | 53 |  ; set effective date for search
 | 
|---|
 | 54 |  D SETDT
 | 
|---|
 | 55 |  ;
 | 
|---|
 | 56 |  ; determine status of code
 | 
|---|
 | 57 |  I FBCI,FBERR="" D GETSTAT(161.91)
 | 
|---|
 | 58 |  ;
 | 
|---|
 | 59 |  ; if array root passed then determine description of code
 | 
|---|
 | 60 |  I $G(FBAR)]"",FBCI,FBERR="" D GETDESC(161.91)
 | 
|---|
 | 61 |  ;
 | 
|---|
 | 62 |  I FBERR]"" S FBRET="-1^-1^^^"_FBERR
 | 
|---|
 | 63 |  Q FBRET
 | 
|---|
 | 64 |  ;
 | 
|---|
 | 65 | AG(FBCI,FBCE,FBDT,FBAR) ; ADJUSTMENT GROUP extrinsic function
 | 
|---|
 | 66 |  ; Provides status and description for an adjustment group code
 | 
|---|
 | 67 |  ; stored in the ADJUSTMENT GROUP (#161.92) file.
 | 
|---|
 | 68 |  ; see top of routine for additional documentation
 | 
|---|
 | 69 |  N FBC,FBDT1,FBERR,FBRET
 | 
|---|
 | 70 |  S FBRET="",FBERR=""
 | 
|---|
 | 71 |  I $G(FBAR)]"" K @FBAR
 | 
|---|
 | 72 |  ;
 | 
|---|
 | 73 |  ; find code in file
 | 
|---|
 | 74 |  D FNDCDE(161.92)
 | 
|---|
 | 75 |  ;
 | 
|---|
 | 76 |  ; set effective date for search
 | 
|---|
 | 77 |  D SETDT
 | 
|---|
 | 78 |  ;
 | 
|---|
 | 79 |  ; determine status of code
 | 
|---|
 | 80 |  I FBCI,FBERR="" D GETSTAT(161.92)
 | 
|---|
 | 81 |  ;
 | 
|---|
 | 82 |  ; determine name, description of code
 | 
|---|
 | 83 |  I FBCI,FBERR="" D GETDESC(161.92)
 | 
|---|
 | 84 |  ;
 | 
|---|
 | 85 |  I FBERR]"" S FBRET="-1^-1^^^"_FBERR
 | 
|---|
 | 86 |  Q FBRET
 | 
|---|
 | 87 |  ;
 | 
|---|
 | 88 | RR(FBCI,FBCE,FBDT,FBAR) ; REMITTANCE REMARK extrinsic function
 | 
|---|
 | 89 |  ; Provides status and description for an adjustment reason code
 | 
|---|
 | 90 |  ; stored in the REMITTANCE REMARK (#161.93) file.
 | 
|---|
 | 91 |  ; see top of routine for additional documentation
 | 
|---|
 | 92 |  N FBC,FBDT1,FBERR,FBRET
 | 
|---|
 | 93 |  S FBRET="",FBERR=""
 | 
|---|
 | 94 |  I $G(FBAR)]"" K @FBAR
 | 
|---|
 | 95 |  ;
 | 
|---|
 | 96 |  ; find code in file
 | 
|---|
 | 97 |  D FNDCDE(161.93)
 | 
|---|
 | 98 |  ;
 | 
|---|
 | 99 |  ; set effective date for search
 | 
|---|
 | 100 |  D SETDT
 | 
|---|
 | 101 |  ;
 | 
|---|
 | 102 |  ; determine status of code
 | 
|---|
 | 103 |  I FBCI,FBERR="" D GETSTAT(161.93)
 | 
|---|
 | 104 |  ;
 | 
|---|
 | 105 |  ; if array root passed then determine description of code
 | 
|---|
 | 106 |  I $G(FBAR)]"",FBCI,FBERR="" D GETDESC(161.93)
 | 
|---|
 | 107 |  ;
 | 
|---|
 | 108 |  I FBERR]"" S FBRET="-1^-1^^^"_FBERR
 | 
|---|
 | 109 |  Q FBRET
 | 
|---|
 | 110 |  ;
 | 
|---|
 | 111 | FNDCDE(FBFILE) ; find code
 | 
|---|
 | 112 |  ;   determine ien if not passed
 | 
|---|
 | 113 |  I $G(FBCI)="",$G(FBCE)]"" S FBCI=$O(^FB(FBFILE,"B",FBCE,0))
 | 
|---|
 | 114 |  ;   get data
 | 
|---|
 | 115 |  I $G(FBCI) S FBC=$P($G(^FB(FBFILE,FBCI,0)),U)
 | 
|---|
 | 116 |  I $G(FBC)="" S FBERR="CODE NOT FOUND IN FILE"
 | 
|---|
 | 117 |  E  S FBRET=FBCI_U_FBC
 | 
|---|
 | 118 |  Q
 | 
|---|
 | 119 |  ;
 | 
|---|
 | 120 | SETDT ; set date
 | 
|---|
 | 121 |  I $G(FBDT)'?7N S FBDT=DT ; if date not passed then set as Today
 | 
|---|
 | 122 |  I FBDT<3030601 S FBDT=3030601 ; if date prior to 6/1/03 then set
 | 
|---|
 | 123 |  S FBDT1=$$FMADD^XLFDT(FBDT,1) ; use date + 1 in reverse $Orders
 | 
|---|
 | 124 |  Q
 | 
|---|
 | 125 |  ;
 | 
|---|
 | 126 | GETSTAT(FBFILE) ; get status
 | 
|---|
 | 127 |  N FBFEEU,FBSEDT,FBSI,FBSTAT,FBSY
 | 
|---|
 | 128 |  ; find most recent status effective date prior to the input date 
 | 
|---|
 | 129 |  S FBSEDT=$O(^FB(FBFILE,FBCI,1,"B",FBDT1),-1)
 | 
|---|
 | 130 |  S:FBSEDT]"" FBSI=$O(^FB(FBFILE,FBCI,1,"B",FBSEDT,0))
 | 
|---|
 | 131 |  S:$G(FBSI) FBSY=$G(^FB(FBFILE,FBCI,1,FBSI,0))
 | 
|---|
 | 132 |  S:$G(FBSY)]"" FBSTAT=$P(FBSY,U,2),FBFEEU=$S('FBSTAT:0,1:+$P(FBSY,U,3))
 | 
|---|
 | 133 |  I $G(FBSTAT)="" S FBERR="STATUS NOT AVAILABLE FOR SPECIFIED DATE" Q
 | 
|---|
 | 134 |  S FBRET=FBRET_U_FBSTAT_U_FBFEEU
 | 
|---|
 | 135 |  Q
 | 
|---|
 | 136 |  ;
 | 
|---|
 | 137 | GETDESC(FBFILE) ; get description
 | 
|---|
 | 138 |  N FBDEDT,FBDI,FBDN,FBX
 | 
|---|
 | 139 |  ; find most recent description effective date prior to input date
 | 
|---|
 | 140 |  S FBDEDT=$O(^FB(FBFILE,FBCI,2,"B",FBDT1),-1)
 | 
|---|
 | 141 |  S:FBDEDT]"" FBDI=$O(^FB(FBFILE,FBCI,2,"B",FBDEDT,0))
 | 
|---|
 | 142 |  ; if file 161.92 then get short descriptive name
 | 
|---|
 | 143 |  I FBFILE=161.92 D
 | 
|---|
 | 144 |  . S:$G(FBDI) FBDN=$P($G(^FB(FBFILE,FBCI,2,FBDI,0)),U,2)
 | 
|---|
 | 145 |  . S FBRET=FBRET_U_$G(FBDN)
 | 
|---|
 | 146 |  ; if array root passed then get full description
 | 
|---|
 | 147 |  I $G(FBAR)]"",$G(FBDI) S FBX=$$GET1^DIQ(FBFILE_"2",FBDI_","_FBCI_",",1,,FBAR)
 | 
|---|
 | 148 |  Q
 | 
|---|
 | 149 |  ;
 | 
|---|
 | 150 |  ;FBUTL1
 | 
|---|