| 1 | FBHLZFE ;WCIOFO/SAB-CREATE HL7 ZFE SEGMENTS ;7/21/1998
 | 
|---|
| 2 |  ;;3.5;FEE BASIS;**14,78**;JAN 30, 1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; This routine generates ZFE HL7 segments that contain FEE BASIS
 | 
|---|
| 5 |  ; authorization data for a veteran. 
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | EN(DFN,FBSTR,FBCUT) ; Returns array of ZFE segments containing FEE BASIS
 | 
|---|
| 8 |  ;                 authorizatiion data for a veteran.
 | 
|---|
| 9 |  ;  Input:
 | 
|---|
| 10 |  ;    DFN   - internal entry number of the PATIENT (#2) file and
 | 
|---|
| 11 |  ;            FEE BASIS PATIENT (#161) file
 | 
|---|
| 12 |  ;    FBSTR - (optional) comma delimited sting of requested fields
 | 
|---|
| 13 |  ;            DEFAULT: "1,2,3,4,5" (returns all fields)
 | 
|---|
| 14 |  ;    FBCUT - (optional) cutoff date (fileman format)
 | 
|---|
| 15 |  ;            Default: "2961001" (Oct 1, 1996)
 | 
|---|
| 16 |  ;            authorizations with a TO DATE prior to the cutoff will
 | 
|---|
| 17 |  ;            not be considered.
 | 
|---|
| 18 |  ;    Also needs HL7 variables defined (HLFS, HLECH and HLQ)
 | 
|---|
| 19 |  ;  Output:
 | 
|---|
| 20 |  ;    If an exception did not occur
 | 
|---|
| 21 |  ;    FBZFE(I) - an array of string(s) forming the ZFE segments for the
 | 
|---|
| 22 |  ;               patient's FEE authorizations that meet the criteria.
 | 
|---|
| 23 |  ;               I will be numeric values greater than 0.
 | 
|---|
| 24 |  ;            OR undefined if no authorizations meet criteria.
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  ;               Note: Only the latest authorization for each group is
 | 
|---|
| 27 |  ;               returned (where group is FEE PROGRAM + TREATMENT TYPE).
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ;    If an exception did occur
 | 
|---|
| 30 |  ;    FBZFE(0) = -1 ^ exception number ^ exception text
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  N FBA,FBDA1,FBGRP,FBI,FBICN,FBY0
 | 
|---|
| 33 |  K FBZFE ; initialize array
 | 
|---|
| 34 |  I $G(FBSTR)="" S FBSTR="1,2,3,4,5"
 | 
|---|
| 35 |  S FBSTR=","_FBSTR_","
 | 
|---|
| 36 |  I $G(FBCUT)="" S FBCUT=2961001
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 |  ; check for required input
 | 
|---|
| 39 |  I $G(FBZFE(0))'<0 D
 | 
|---|
| 40 |  . I $G(DFN)="" S FBZFE(0)="-1^103^Patient DFN not specified." Q
 | 
|---|
| 41 |  . I '$D(HLFS)!'$D(HLECH)!'$D(HLQ) S FBZFE(0)="-1^201^HL7 variables not defined." Q
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  ; get patient ICN
 | 
|---|
| 44 |  I $G(FBZFE(0))'<0 D
 | 
|---|
| 45 |  . I $$IFLOCAL^MPIF001(DFN) S FBZFE(0)="-1^104^ICN could not be determined for the specified patient." Q  ; must not be local ICN
 | 
|---|
| 46 |  . S FBICN=$$GETICN^MPIF001(DFN) I FBICN<0 S FBZFE(0)="-1^104^ICN could not be determined for the specified patient." Q
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  ; check if cutoff date is a valid value
 | 
|---|
| 49 |  I $G(FBZFE(0))'<0 D
 | 
|---|
| 50 |  . I FBCUT'?7N S FBZFE(0)="-1^101^Valid date not specified." Q
 | 
|---|
| 51 |  . I $$FMTHL7^XLFDT(FBCUT)<0 S FBZFE(0)="-1^101^Valid date not specified." Q
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  I $G(FBZFE(0))'<0 D
 | 
|---|
| 54 |  . ; find authorizations that meet criteria (if any)
 | 
|---|
| 55 |  . ; loop thru authorizations
 | 
|---|
| 56 |  . S FBDA1=0 F  S FBDA1=$O(^FBAAA(DFN,1,FBDA1)) Q:'FBDA1  D
 | 
|---|
| 57 |  . . Q:$P($G(^FBAAA(DFN,1,FBDA1,"ADEL")),U)="Y"  ; ignore Austin Deleted
 | 
|---|
| 58 |  . . S FBY0=$G(^FBAAA(DFN,1,FBDA1,0))
 | 
|---|
| 59 |  . . Q:$P(FBY0,U,3)=""  ; FEE Program required
 | 
|---|
| 60 |  . . Q:$P(FBY0,U,2)<FBCUT  ; before cutoff date
 | 
|---|
| 61 |  . . S FBGRP=$P(FBY0,U,3)_U_$P(FBY0,U,13) ; group (Program + Treat. Type)
 | 
|---|
| 62 |  . . Q:$P(FBY0,U,2)'>$P($G(FBA(FBGRP)),U,2)  ; already have later for grp
 | 
|---|
| 63 |  . . ; save as latest found (so far) for a group
 | 
|---|
| 64 |  . . S FBA(FBGRP)=FBDA1_U_$P(FBY0,U,2)
 | 
|---|
| 65 |  . ;
 | 
|---|
| 66 |  . ; build FBZFE array for selected authorizations
 | 
|---|
| 67 |  . S FBI=0 ; init number of array elements
 | 
|---|
| 68 |  . S FBGRP="" F  S FBGRP=$O(FBA(FBGRP)) Q:FBGRP=""  D
 | 
|---|
| 69 |  . . S FBDA1=$P(FBA(FBGRP),U)
 | 
|---|
| 70 |  . . D AUTH
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 | QUIT ;
 | 
|---|
| 73 |  Q
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 | AUTH ; Add node (HL7 ZFE seg.) to FBZFE array for a specified authorization
 | 
|---|
| 76 |  ;   Input:
 | 
|---|
| 77 |  ;     DFN    - veteran ien (file #2 and #161)
 | 
|---|
| 78 |  ;     FBDA1  - authorization ien (authorization multiple of #161)
 | 
|---|
| 79 |  ;     FBI    - previous set ID number used for array or 0 when none
 | 
|---|
| 80 |  ;     FBSTR  - comma delimited string of requested fields
 | 
|---|
| 81 |  ;   Output:
 | 
|---|
| 82 |  ;     FBI        - set ID (modified)
 | 
|---|
| 83 |  ;     FBZFE(FBI) - output array element for one set ID
 | 
|---|
| 84 |  ;                  ZFE ^ set ID ^ treat. type ^ FEE program ^ From ^ To
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  N FBY0,X
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  S FBY0=$G(^FBAAA(DFN,1,FBDA1,0))
 | 
|---|
| 89 |  Q:FBY0=""  ; nothing to process
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  S FBI=FBI+1
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  S FBZFE(FBI)="ZFE"
 | 
|---|
| 94 |  S $P(FBZFE(FBI),HLFS,6)=""
 | 
|---|
| 95 |  I FBSTR[",1," S $P(FBZFE(FBI),HLFS,2)=FBI ; sequential number
 | 
|---|
| 96 |  I FBSTR[",2," S X=$$EXTERNAL^DILFD(161.01,.095,"",$P(FBY0,U,13)),$P(FBZFE(FBI),HLFS,3)=$S(X]"":X,1:HLQ)_$E(HLECH)_$E(HLECH)_"VA0033" ; Treatment Type
 | 
|---|
| 97 |  I FBSTR[",3," S X=$S($P(FBY0,U,3):$P($G(^FBAA(161.8,$P(FBY0,U,3),0)),U),1:""),$P(FBZFE(FBI),HLFS,4)=$S(X]"":X,1:HLQ)_$E(HLECH)_$E(HLECH)_"VA0034" ; FEE Program
 | 
|---|
| 98 |  I FBSTR[",4," S $P(FBZFE(FBI),HLFS,5)=$S($P(FBY0,U)]"":$$HLDATE^HLFNC($P(FBY0,U)),1:HLQ) ; From Date
 | 
|---|
| 99 |  I FBSTR[",5," S $P(FBZFE(FBI),HLFS,6)=$S($P(FBY0,U,2)]"":$$HLDATE^HLFNC($P(FBY0,U,2)),1:HLQ) ; To Date
 | 
|---|
| 100 |  Q
 | 
|---|