FBUTL ;WCIOFO/SAB-FEE BASIS UTILITY ;4/8/2004
;;3.5;FEE BASIS;**16,78**;JAN 30, 1995
Q
;
AUTH(FBDA,FBCUT) ; FEE Authorization extrinsic function
; Determines if the patient has any FEE authorizations on file.
; An optional date can be specified to determine if the patient has
; any FEE authorizations in effect on or after the specified date.
; input
; FBDA - patient internal entry number (DFN)
; of the PATIENT (#2) and FEE BASIS PATIENT (#161) file
; FBCUT - (optional) cutoff date (fileman format)
; Default: none
; authorizations with a TO DATE prior to the
; cutoff date (if specified) will not be considered.
; returns a value of 1 or 0
; will be true (1) if patient has one or more FEE authorizations
;
N FBDA1,FBRET,FBY0
S FBCUT=$S($G(FBCUT)?7N:FBCUT,1:"")
S FBRET=0 ; assume no authorizations will meet criteria
; reverse loop thru authorizations - stop when any one meets criteria
S FBDA1=" " F S FBDA1=$O(^FBAAA(FBDA,1,FBDA1),-1) Q:'FBDA1 D Q:FBRET
. Q:$P($G(^FBAAA(FBDA,1,FBDA1,"ADEL")),U)="Y" ; ignore Austin Deleted
. S FBY0=$G(^FBAAA(FBDA,1,FBDA1,0))
. I FBCUT]"",$P(FBY0,U,2)<FBCUT Q ; To Date before cutoff date
. Q:$P(FBY0,U,3)="" ; FEE Program required
. ; passed all checks
. S FBRET=1
;
Q FBRET
;
AUTHL(FBDFN,FBSN,FBDT,FBAR) ; authorization list for patient
; Integration Agreement #4396
; This API returns authorization data for a specified patient.
; Authorizations that have been Austin Deleted will not be returned.
;
; input
; FBDFN - patient DFN (File #2 internal entry number), required
; FBSN - station number, optional
; If specified, the station number will be used to select
; authorizations from the national Fee Replacement system.
; Only authorizations whose issuing station Starts With this
; parameter value will be returned.
; This parameter will not be evaluated until the API is
; modified to obtain data from the fee replacement system.
; FBDT - cutoff date, optional, VA FileMan internal format
; If specified, only authorizations whose To Date is
; equal to or after the cutoff date will be returned.
; FBAR - name of output array, optional, default value "FBAUTH"
; closed root, must not equal variables newed by this API
; such as FBAR.
; examples: "FBAUTH", "DGAUTH(12)", "^TMP($J)"
; The array will be initialized by this API.
; output
; returns string value
; = count of authorizations in array
; OR
; = -1^exception number^exception text
;
; If an exception did not occur, then the output array will contain
; authorization data subscripted by sequential canonic
; numbers and a header node subscripted by 0.
; array(0) = count of authorizations in array
; array(#,"FDT") = authorization # From Date (internal format)
; array(#,"TDT") = authorization # To Date (internal format)
; OR
; Example if "FBAUTH" used as array name
; FBAUTH(0)=2
; FBAUTH(1,"FDT")=3011021
; FBAUTH(1,"TDT")=3011030
; FBAUTH(2,"FDT")=3000101
; FBAUTH(2,"TDT")=3031231
; Note that additional subscripts may be added in the future to
; provide more authorization data. The calling application should
; kill the entire output array so any added subscripts will be
; cleaned-up (e.g. K FBAUTH).
; List of exceptions
; 101^Patient DFN not specified.
; 104^ICN could not be determined for the specified patient.
; 105^Array name conflicts with a variable in the API.
; 110^Database Unavailable.
; The database unavailable exception will not occur until this API
; is modified to obtain data from the fee replacement system.
; However, calling applications should code to handle this exception
; now so appropriate action will be taken once the data is moved from
; the local VistA system to the remote fee replacement system.
;
N FBC,FBDA,FBICN,FBRET,FBY
;
S FBAR=$G(FBAR,"FBAUTH")
S FBSN=$G(FBSN)
S FBDT=$G(FBDT)
S FBRET=""
;
; ensure input array name is not one of the newed variables.
; If conflict, then array will not be changed by this API.
I "^FBDFN^FBAR^FBC^FBDA^FBDT^FBICN^FBRET^FBSN^FBY^"[(U_FBAR_U) S FBRET="-1^105^Array name conflicts with a variable in the API."
;
; initialize output array
I FBRET'<0 K @FBAR
;
; check for required input
I FBRET'<0,$G(FBDFN)="" S FBRET="-1^101^Patient DFN not specified."
;
; get patient ICN
I FBRET'<0 D
. I $$IFLOCAL^MPIF001(FBDFN) S FBRET="-1^104^ICN could not be determined for the specified patient." Q ; must not be local ICN
. S FBICN=$$GETICN^MPIF001(FBDFN) I FBICN<0 S FBRET="-1^104^ICN could not be determined for the specified patient." Q
;
; if optional date passed then check if valid value
I FBRET'<0,FBDT'="" D
. I FBDT'?7N S FBRET="-1^101^Valid date not specified." Q
. I $$FMTHL7^XLFDT(FBDT)<0 S FBRET="-1^101^Valid date not specified." Q
;
; get authorization data
I FBRET'<0 D
. S FBC=0 ; initialize count/subscript of authorizations in output array
. ; loop thru AUTHORIZATION multiple of file #161
. S FBDA=0 F S FBDA=$O(^FBAAA(FBDFN,1,FBDA)) Q:'FBDA D
. . Q:$P($G(^FBAAA(FBDFN,1,FBDA,"ADEL")),U)="Y" ; skip Austin Deleted
. . S FBY=$G(^FBAAA(FBDFN,1,FBDA,0))
. . I FBDT,$P(FBY,U,2)<FBDT Q ; skip if To Date before optional Cutoff
. . ; increment count and store authorization data in array
. . S FBC=FBC+1
. . S @FBAR@(FBC,"FDT")=$P(FBY,U)
. . S @FBAR@(FBC,"TDT")=$P(FBY,U,2)
. ;
. ; set return value and header node of output array
. S FBRET=FBC
. S @FBAR@(0)=FBC
;
Q FBRET
;
;FBUTL
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HFBUTL 5834 printed Dec 13, 2024@02:00:39 Page 2
FBUTL ;WCIOFO/SAB-FEE BASIS UTILITY ;4/8/2004
+1 ;;3.5;FEE BASIS;**16,78**;JAN 30, 1995
+2 QUIT
+3 ;
AUTH(FBDA,FBCUT) ; FEE Authorization extrinsic function
+1 ; Determines if the patient has any FEE authorizations on file.
+2 ; An optional date can be specified to determine if the patient has
+3 ; any FEE authorizations in effect on or after the specified date.
+4 ; input
+5 ; FBDA - patient internal entry number (DFN)
+6 ; of the PATIENT (#2) and FEE BASIS PATIENT (#161) file
+7 ; FBCUT - (optional) cutoff date (fileman format)
+8 ; Default: none
+9 ; authorizations with a TO DATE prior to the
+10 ; cutoff date (if specified) will not be considered.
+11 ; returns a value of 1 or 0
+12 ; will be true (1) if patient has one or more FEE authorizations
+13 ;
+14 NEW FBDA1,FBRET,FBY0
+15 SET FBCUT=$SELECT($GET(FBCUT)?7N:FBCUT,1:"")
+16 ; assume no authorizations will meet criteria
SET FBRET=0
+17 ; reverse loop thru authorizations - stop when any one meets criteria
+18 SET FBDA1=" "
FOR
SET FBDA1=$ORDER(^FBAAA(FBDA,1,FBDA1),-1)
if 'FBDA1
QUIT
Begin DoDot:1
+19 ; ignore Austin Deleted
if $PIECE($GET(^FBAAA(FBDA,1,FBDA1,"ADEL")),U)="Y"
QUIT
+20 SET FBY0=$GET(^FBAAA(FBDA,1,FBDA1,0))
+21 ; To Date before cutoff date
IF FBCUT]""
IF $PIECE(FBY0,U,2)<FBCUT
QUIT
+22 ; FEE Program required
if $PIECE(FBY0,U,3)=""
QUIT
+23 ; passed all checks
+24 SET FBRET=1
End DoDot:1
if FBRET
QUIT
+25 ;
+26 QUIT FBRET
+27 ;
AUTHL(FBDFN,FBSN,FBDT,FBAR) ; authorization list for patient
+1 ; Integration Agreement #4396
+2 ; This API returns authorization data for a specified patient.
+3 ; Authorizations that have been Austin Deleted will not be returned.
+4 ;
+5 ; input
+6 ; FBDFN - patient DFN (File #2 internal entry number), required
+7 ; FBSN - station number, optional
+8 ; If specified, the station number will be used to select
+9 ; authorizations from the national Fee Replacement system.
+10 ; Only authorizations whose issuing station Starts With this
+11 ; parameter value will be returned.
+12 ; This parameter will not be evaluated until the API is
+13 ; modified to obtain data from the fee replacement system.
+14 ; FBDT - cutoff date, optional, VA FileMan internal format
+15 ; If specified, only authorizations whose To Date is
+16 ; equal to or after the cutoff date will be returned.
+17 ; FBAR - name of output array, optional, default value "FBAUTH"
+18 ; closed root, must not equal variables newed by this API
+19 ; such as FBAR.
+20 ; examples: "FBAUTH", "DGAUTH(12)", "^TMP($J)"
+21 ; The array will be initialized by this API.
+22 ; output
+23 ; returns string value
+24 ; = count of authorizations in array
+25 ; OR
+26 ; = -1^exception number^exception text
+27 ;
+28 ; If an exception did not occur, then the output array will contain
+29 ; authorization data subscripted by sequential canonic
+30 ; numbers and a header node subscripted by 0.
+31 ; array(0) = count of authorizations in array
+32 ; array(#,"FDT") = authorization # From Date (internal format)
+33 ; array(#,"TDT") = authorization # To Date (internal format)
+34 ; OR
+35 ; Example if "FBAUTH" used as array name
+36 ; FBAUTH(0)=2
+37 ; FBAUTH(1,"FDT")=3011021
+38 ; FBAUTH(1,"TDT")=3011030
+39 ; FBAUTH(2,"FDT")=3000101
+40 ; FBAUTH(2,"TDT")=3031231
+41 ; Note that additional subscripts may be added in the future to
+42 ; provide more authorization data. The calling application should
+43 ; kill the entire output array so any added subscripts will be
+44 ; cleaned-up (e.g. K FBAUTH).
+45 ; List of exceptions
+46 ; 101^Patient DFN not specified.
+47 ; 104^ICN could not be determined for the specified patient.
+48 ; 105^Array name conflicts with a variable in the API.
+49 ; 110^Database Unavailable.
+50 ; The database unavailable exception will not occur until this API
+51 ; is modified to obtain data from the fee replacement system.
+52 ; However, calling applications should code to handle this exception
+53 ; now so appropriate action will be taken once the data is moved from
+54 ; the local VistA system to the remote fee replacement system.
+55 ;
+56 NEW FBC,FBDA,FBICN,FBRET,FBY
+57 ;
+58 SET FBAR=$GET(FBAR,"FBAUTH")
+59 SET FBSN=$GET(FBSN)
+60 SET FBDT=$GET(FBDT)
+61 SET FBRET=""
+62 ;
+63 ; ensure input array name is not one of the newed variables.
+64 ; If conflict, then array will not be changed by this API.
+65 IF "^FBDFN^FBAR^FBC^FBDA^FBDT^FBICN^FBRET^FBSN^FBY^"[(U_FBAR_U)
SET FBRET="-1^105^Array name conflicts with a variable in the API."
+66 ;
+67 ; initialize output array
+68 IF FBRET'<0
KILL @FBAR
+69 ;
+70 ; check for required input
+71 IF FBRET'<0
IF $GET(FBDFN)=""
SET FBRET="-1^101^Patient DFN not specified."
+72 ;
+73 ; get patient ICN
+74 IF FBRET'<0
Begin DoDot:1
+75 ; must not be local ICN
IF $$IFLOCAL^MPIF001(FBDFN)
SET FBRET="-1^104^ICN could not be determined for the specified patient."
QUIT
+76 SET FBICN=$$GETICN^MPIF001(FBDFN)
IF FBICN<0
SET FBRET="-1^104^ICN could not be determined for the specified patient."
QUIT
End DoDot:1
+77 ;
+78 ; if optional date passed then check if valid value
+79 IF FBRET'<0
IF FBDT'=""
Begin DoDot:1
+80 IF FBDT'?7N
SET FBRET="-1^101^Valid date not specified."
QUIT
+81 IF $$FMTHL7^XLFDT(FBDT)<0
SET FBRET="-1^101^Valid date not specified."
QUIT
End DoDot:1
+82 ;
+83 ; get authorization data
+84 IF FBRET'<0
Begin DoDot:1
+85 ; initialize count/subscript of authorizations in output array
SET FBC=0
+86 ; loop thru AUTHORIZATION multiple of file #161
+87 SET FBDA=0
FOR
SET FBDA=$ORDER(^FBAAA(FBDFN,1,FBDA))
if 'FBDA
QUIT
Begin DoDot:2
+88 ; skip Austin Deleted
if $PIECE($GET(^FBAAA(FBDFN,1,FBDA,"ADEL")),U)="Y"
QUIT
+89 SET FBY=$GET(^FBAAA(FBDFN,1,FBDA,0))
+90 ; skip if To Date before optional Cutoff
IF FBDT
IF $PIECE(FBY,U,2)<FBDT
QUIT
+91 ; increment count and store authorization data in array
+92 SET FBC=FBC+1
+93 SET @FBAR@(FBC,"FDT")=$PIECE(FBY,U)
+94 SET @FBAR@(FBC,"TDT")=$PIECE(FBY,U,2)
End DoDot:2
+95 ;
+96 ; set return value and header node of output array
+97 SET FBRET=FBC
+98 SET @FBAR@(0)=FBC
End DoDot:1
+99 ;
+100 QUIT FBRET
+101 ;
+102 ;FBUTL