| [613] | 1 | FBFHLD3 ;OIFO/SAB-GET DATA FOR OUT/ANC INVOICE ;9/9/2003
 | 
|---|
 | 2 |  ;;3.5;FEE BASIS;**61**;JULY 18, 2003
 | 
|---|
 | 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
 | 4 |  Q
 | 
|---|
 | 5 |  ;
 | 
|---|
 | 6 | EN ;
 | 
|---|
 | 7 |  ; input
 | 
|---|
 | 8 |  ;   FBAAIN - invoice number
 | 
|---|
 | 9 |  ; output
 | 
|---|
 | 10 |  ;   If transaction type = "X" then only * items are output
 | 
|---|
 | 11 |  ;   Claim Level Data
 | 
|---|
 | 12 |  ;   FBD(0,"AMT") = Amount Disbursed^Amount Interest 
 | 
|---|
 | 13 |  ;  *FBD(0,"CAN") = Cancel Date^Cancel Reason^Cancel Activity
 | 
|---|
 | 14 |  ;   FBD(0,"DT") = Invoice Date
 | 
|---|
 | 15 |  ;  *FBD(0,"FPPS") = FPPS Claim ID
 | 
|---|
 | 16 |  ;  *FBD(0,"INV") = Invoice #^Transaction Type^Station #
 | 
|---|
 | 17 |  ;
 | 
|---|
 | 18 |  ;   Line Level Data (# is a sequential number)
 | 
|---|
 | 19 |  ;   FBD(#,"ADJ") = AdjReason1^AdjGrp1^AdjAmt1^AdjReason2^AdjGrp2^AdjAmt2
 | 
|---|
 | 20 |  ;   FBD(#,"AMT") = Amount Claimed^Amount Paid
 | 
|---|
 | 21 |  ;   FBD(#,"CK") = Check Number^Check Date^Payment Method
 | 
|---|
 | 22 |  ;   FBD(#,"DT") = Date of Service
 | 
|---|
 | 23 |  ;   FBD(#,"FPPS") = FPPS Line Item
 | 
|---|
 | 24 |  ;   FBD(#,"RMK") = Remittance Remark1,Remittance Remark2
 | 
|---|
 | 25 |  ;   FBD(#,"SVC") = Service Code^Qualifier^Mod1,Mod2,Mod3,Mod4^Units
 | 
|---|
 | 26 |  ;
 | 
|---|
 | 27 |  ;   If exceptions for invoice
 | 
|---|
 | 28 |  ;   ^TMP($J,"FBE",FBAAIN,seq number)=message
 | 
|---|
 | 29 |  ;   If warnings for invoice
 | 
|---|
 | 30 |  ;   ^TMP($J,"FBW",FBAAIN,seq number)=message
 | 
|---|
 | 31 |  ;
 | 
|---|
 | 32 |  ; initialize variables
 | 
|---|
 | 33 |  N DA,FBC,FBI,FBIENS,FBSTA,FBTTYP,FBY
 | 
|---|
 | 34 |  K FBD
 | 
|---|
 | 35 |  S FBC=0 ; line count
 | 
|---|
 | 36 |  ;
 | 
|---|
 | 37 |  ; loop thru lines on invoice
 | 
|---|
 | 38 |  S DA(3)=0
 | 
|---|
 | 39 |  F  S DA(3)=$O(^FBAAC("C",FBAAIN,DA(3))) Q:'DA(3)  D
 | 
|---|
 | 40 |  .S DA(2)=0
 | 
|---|
 | 41 |  .F  S DA(2)=$O(^FBAAC("C",FBAAIN,DA(3),DA(2))) Q:'DA(2)  D
 | 
|---|
 | 42 |  ..S DA(1)=0
 | 
|---|
 | 43 |  ..F  S DA(1)=$O(^FBAAC("C",FBAAIN,DA(3),DA(2),DA(1))) Q:'DA(1)  D
 | 
|---|
 | 44 |  ...S DA=0
 | 
|---|
 | 45 |  ...F  S DA=$O(^FBAAC("C",FBAAIN,DA(3),DA(2),DA(1),DA)) Q:'DA  D
 | 
|---|
 | 46 |  ....S FBIENS=DA_","_DA(1)_","_DA(2)_","_DA(3)_","
 | 
|---|
 | 47 |  ....F FBI=0,2,3,"FBREJ" S FBY(FBI)=$G(^FBAAC(DA(3),1,DA(2),1,DA(1),1,DA,FBI))
 | 
|---|
 | 48 |  ....Q:'$$CKLNST()  ; skip line if status not OK to transmit
 | 
|---|
 | 49 |  ....S FBC=FBC+1
 | 
|---|
 | 50 |  ....; if 1st line then get invoice level data
 | 
|---|
 | 51 |  ....I FBC=1 D INVOICE
 | 
|---|
 | 52 |  ....I FBTTYP="L" D LINE
 | 
|---|
 | 53 |  Q
 | 
|---|
 | 54 |  ;
 | 
|---|
 | 55 | INVOICE ; determine invoice data from 1st line item
 | 
|---|
 | 56 |  ;   FBD(0,"AMT") = Amount Disbursed^Amount Interest 
 | 
|---|
 | 57 |  ;   FBD(0,"CAN") = Cancel Date^Cancel Reason^Cancel Activity
 | 
|---|
 | 58 |  ;   FBD(0,"DT") = Invoice Date
 | 
|---|
 | 59 |  ;   FBD(0,"FPPS") = FPPS Claim ID
 | 
|---|
 | 60 |  ;   FBD(0,"INV") = Invoice #^Transaction Type^Station #
 | 
|---|
 | 61 |  ;   FBSTA = station number
 | 
|---|
 | 62 |  ;   FBTTYP = transaction type (L or X)
 | 
|---|
 | 63 |  ;
 | 
|---|
 | 64 |  N FBDT,FBOB,FBX
 | 
|---|
 | 65 |  ; determine Transaction Type (based on CANCELLATION DATE)
 | 
|---|
 | 66 |  S FBTTYP=$S($P(FBY(2),U,4)]"":"X",1:"L")
 | 
|---|
 | 67 |  ;
 | 
|---|
 | 68 |  ; determine station number
 | 
|---|
 | 69 |  S FBSTA=$$STANO^FBFHLU($P(FBY(0),U,8))
 | 
|---|
 | 70 |  ;
 | 
|---|
 | 71 |  ;INV
 | 
|---|
 | 72 |  S FBD(0,"INV")=FBAAIN_U_FBTTYP_U_FBSTA
 | 
|---|
 | 73 |  ;
 | 
|---|
 | 74 |  ;FPPS
 | 
|---|
 | 75 |  S FBD(0,"FPPS")=$P(FBY(3),U)
 | 
|---|
 | 76 |  ;
 | 
|---|
 | 77 |  ;CAN
 | 
|---|
 | 78 |  ; if cancel then get cancel data
 | 
|---|
 | 79 |  I FBTTYP="X" D  Q
 | 
|---|
 | 80 |  . S FBD(0,"CAN")=$P(FBY(2),U,4)_U_$$GET1^DIQ(162.03,FBIENS,"37:1")_U_$P(FBY(2),U,6)
 | 
|---|
 | 81 |  ;
 | 
|---|
 | 82 |  ;AMT
 | 
|---|
 | 83 |  S FBD(0,"AMT")="0^0" ; initialize sums
 | 
|---|
 | 84 |  ;
 | 
|---|
 | 85 |  ;DT
 | 
|---|
 | 86 |  ; determine invoice date
 | 
|---|
 | 87 |  ;   (date finalized or date paid or date supervisor closed batch)
 | 
|---|
 | 88 |  S FBDT=$P(FBY(0),U,6) ; date finalized
 | 
|---|
 | 89 |  I FBDT="" S FBDT=$P(FBY(0),U,14) ; date paid
 | 
|---|
 | 90 |  I FBDT="",$P(FBY(0),U,8) S FBDT=$P(^FBAA(161.7,$P(FBY(0),U,8),0),U,6) ; date supv closed batch (for 0.00 invoices)
 | 
|---|
 | 91 |  S FBD(0,"DT")=FBDT
 | 
|---|
 | 92 |  ;
 | 
|---|
 | 93 |  Q
 | 
|---|
 | 94 |  ;
 | 
|---|
 | 95 | LINE ; FBC
 | 
|---|
 | 96 |  ;   FBD(#,"ADJ") = AdjReason1^AdjGrp1^AdjAmt1^AdjReason2^AdjGrp2^AdjAmt2
 | 
|---|
 | 97 |  ;   FBD(#,"AMT") = Amount Claimed^Amount Paid
 | 
|---|
 | 98 |  ;   FBD(#,"CK") = Check Number^Check Date^Payment Method
 | 
|---|
 | 99 |  ;   FBD(#,"DT") = Date of Service
 | 
|---|
 | 100 |  ;   FBD(#,"FPPS") = FPPS Line Item
 | 
|---|
 | 101 |  ;   FBD(#,"RMK") = Remittance Remark1^Remittance Remark2
 | 
|---|
 | 102 |  ;   FBD(#,"SVC") = Service Code^Qualifier^Mod1,Mod2,Mod3,Mod4^Units
 | 
|---|
 | 103 |  ;
 | 
|---|
 | 104 |  N FBAARCE,FBADJ,FBMODLE
 | 
|---|
 | 105 |  ; compare invoice transaction type (L,X) with line cancel status
 | 
|---|
 | 106 |  I ((FBTTYP="X")&($P(FBY(2),U,4)=""))!((FBTTYP="L")&($P(FBY(2),U,4)]"")) D POST^FBFHLU(FBAAIN,"E","ALL LINES DO NOT HAVE SAME CANCEL STATUS") Q
 | 
|---|
 | 107 |  ;
 | 
|---|
 | 108 |  ; SVC
 | 
|---|
 | 109 |  S FBAARCE=$$GET1^DIQ(162.03,FBIENS,48)
 | 
|---|
 | 110 |  I FBAARCE]"" S FBD(FBC,"SVC")=FBAARCE_U_"NU"
 | 
|---|
 | 111 |  E  D
 | 
|---|
 | 112 |  . S FBD(FBC,"SVC")=$$GET1^DIQ(162.03,FBIENS,.01)_U_"HC"
 | 
|---|
 | 113 |  . S FBMODLE=$$MODL^FBAAUTL4("^FBAAC("_DA(3)_",1,"_DA(2)_",1,"_DA(1)_",1,"_DA_",""M"")","E")
 | 
|---|
 | 114 |  . I $L(FBMODLE,",")>4 S FBMODLE=$P(FBMODLE,",",1,4)
 | 
|---|
 | 115 |  . S $P(FBD(FBC,"SVC"),U,3)=FBMODLE
 | 
|---|
 | 116 |  S $P(FBD(FBC,"SVC"),U,4)=$P(FBY(2),U,14) ; units paid
 | 
|---|
 | 117 |  ;
 | 
|---|
 | 118 |  ;FPPS
 | 
|---|
 | 119 |  S FBD(FBC,"FPPS")=$P(FBY(3),U,2)
 | 
|---|
 | 120 |  ;
 | 
|---|
 | 121 |  ;DT
 | 
|---|
 | 122 |  S FBD(FBC,"DT")=$P($G(^FBAAC(DA(3),1,DA(2),1,DA(1),0)),U)
 | 
|---|
 | 123 |  ;
 | 
|---|
 | 124 |  ;AMT
 | 
|---|
 | 125 |  S FBD(FBC,"AMT")=$P(FBY(0),U,2)_U_$P(FBY(0),U,3)
 | 
|---|
 | 126 |  ;
 | 
|---|
 | 127 |  ;ADJ
 | 
|---|
 | 128 |  D LOADADJ^FBAAFA(FBIENS,.FBADJ)
 | 
|---|
 | 129 |  I $D(FBADJ) S FBD(FBC,"ADJ")=$$ADJL^FBUTL2(.FBADJ)
 | 
|---|
 | 130 |  ;
 | 
|---|
 | 131 |  ;RMK
 | 
|---|
 | 132 |  S FBD(FBC,"RMK")=$$RRL^FBAAFR(FBIENS)
 | 
|---|
 | 133 |  ;
 | 
|---|
 | 134 |  ;CK
 | 
|---|
 | 135 |  S FBD(FBC,"CK")=$P(FBY(2),U,3)_U_$P(FBY(0),U,14)_U_$$PAYMETH^FBFHLU($P(FBY(2),U,3))
 | 
|---|
 | 136 |  ;
 | 
|---|
 | 137 |  ;CAMT ; add disbursed and interest amounts to claim (0) level
 | 
|---|
 | 138 |  ; note - disbursed amount on file includes the interest
 | 
|---|
 | 139 |  ;        since FPPS wants it w/o interest - interest is subtracted
 | 
|---|
 | 140 |  S $P(FBD(0,"AMT"),U)=$P(FBD(0,"AMT"),U)+($P(FBY(2),U,8)-$P(FBY(2),U,9))
 | 
|---|
 | 141 |  S $P(FBD(0,"AMT"),U,2)=$P(FBD(0,"AMT"),U,2)+$P(FBY(2),U,9)
 | 
|---|
 | 142 |  Q
 | 
|---|
 | 143 |  ;
 | 
|---|
 | 144 | CKLNST() ; check line status extrinsic function
 | 
|---|
 | 145 |  ; result (0 or 1)
 | 
|---|
 | 146 |  ;   0 when line should not be sent to FPPS
 | 
|---|
 | 147 |  ;   1 when line should be sent to FPPS
 | 
|---|
 | 148 |  N FBRET
 | 
|---|
 | 149 |  S FBRET=1
 | 
|---|
 | 150 |  ;
 | 
|---|
 | 151 |  ; check if rejected line
 | 
|---|
 | 152 |  I $P(FBY("FBREJ"),U)]"" S FBRET=0
 | 
|---|
 | 153 |  ;
 | 
|---|
 | 154 |  Q FBRET
 | 
|---|
 | 155 |  ;
 | 
|---|
 | 156 |  ;FBFHLD3
 | 
|---|