Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/INTEGRATED_BILLING-IB-PRQ--IBD--IBQ--PRQS/IBATUTL.m

    r613 r623  
    1 IBATUTL ;LL/ELZ - TRANSFER PRICING UTILITES ; 3-SEP-1998
    2         ;;2.0;INTEGRATED BILLING;**115,266,347,389**;21-MAR-94;Build 6
    3         ;;Per VHA Directive 2004-038, this routine should not be modified.
    4         ;
    5 SL()    ; -- called to select a patient or enrolled facility
    6         N X,Y,DTOUT,DUOUT,DIRUT,DIROUT,DIR
    7         S DIR(0)="350.9,10.01",DIR("A")="Select Patient or Enrolled Facility"
    8         D ^DIR
    9         Q Y
    10 SLPT()  ; -- called to select a patient, returns 0 or patient dfn
    11         N X,Y,DIC,DTOUT,DUOUT
    12         S DIC="^IBAT(351.6,",DIC(0)="AEMQ" D ^DIC
    13         Q $S(+Y>0:+Y,1:0)
    14         ;
    15 SLDR(Q) ; -- called to select a date range
    16         ; defaults are from=T-365, to=TODAY
    17         ; output IBBDT, IBEDT, quit returns 0 if not valid
    18         ;
    19         N DIR,DIRUT,DUOUT,DTOUT,DIROUT,X,Y,IBDT
    20         S DIR(0)="DA^:NOW:EX",DIR("A")="Select FROM DATE: "
    21         S:$D(Q) DIR("?")=Q
    22         D ^DIR G:'Y SLDRQ S IBDT=+Y
    23         S DIR(0)="DA^"_+Y_":NOW:EX",DIR("A")="              TO: "
    24         D ^DIR
    25         S:Y IBEDT=+Y+.999999,IBBDT=IBDT G SLDRQ
    26 SLDR1Y()        ; -- called to select a date range w/1y past default
    27         ; defaults are from=T-365, to=TODAY
    28         ; output IBBDT, IBEDT, quit returns 0 if not valid
    29         ;
    30         N DIR,DIRUT,DUOUT,DTOUT,DIROUT,X,Y,IBDT
    31         S DIR(0)="DA^:NOW:EX",DIR("A")="Select FROM DATE: "
    32         S DIR("B")=$$DAT2^IBOUTL($$FMADD^XLFDT(DT,-365)) D ^DIR
    33         G:'Y SLDRQ S IBDT=+Y
    34         S DIR(0)="DA^"_+Y_":NOW:EX",DIR("A")="              to: "
    35         S DIR("B")=$$DAT2^IBOUTL($$FMADD^XLFDT(IBDT,365)) D ^DIR
    36         G:'Y SLDRQ S IBEDT=+Y+.999999,IBBDT=IBDT
    37 SLDRQ   Q $D(DIRUT)!($D(DUOUT))
    38         ;
    39 PTTRAN(IBFILE,IBARRAY,IBXREF)   ; builds a list of patient transactions by date
    40         ; assumes DFN, IBBDT, IBEDT
    41         ; input IBARRAY - where to store info
    42         ;       IBXREF  - which date x-ref to use
    43         ; output 0,6 node of file IBFILE in array specified
    44         ;
    45         N IBIEN,IBDT,IBNODE
    46         K @IBARRAY
    47         S IBDT=IBBDT-.999999
    48         F  S IBDT=$O(^IBAT(IBFILE,IBXREF,DFN,IBDT)) Q:IBDT<1!(IBDT>IBEDT)  D
    49         . S IBIEN=0
    50         . F  S IBIEN=$O(^IBAT(IBFILE,IBXREF,DFN,IBDT,IBIEN)) Q:IBIEN<1  D
    51         .. F IBNODE=0,6 S @IBARRAY@(IBDT,IBIEN,IBNODE)=$G(^IBAT(IBFILE,IBIEN,IBNODE))
    52         Q
    53 LMOPT   ; -- called to do standard listmanager option calling
    54         D FULL^VALM1
    55         S VALMBCK="R"
    56         Q
    57         ;
    58 SETVALM(LINE,TEXT,IEN,ON,OFF)   ; -- sets up listmanager lines
    59         S LINE=LINE+1
    60         D SET^VALM10(LINE,TEXT,LINE)
    61         S:$G(IEN) @VALMAR@("INDEX",LINE,IEN)=""
    62         D:$G(ON)]""!($G(OFF)]"") CNTRL^VALM10(LINE,1,$L(TEXT),$G(ON),$G(OFF))
    63         W:'(LINE#5) "."
    64         Q LINE
    65         ;
    66 VISN(STATION)   ; -- looks up ien & name of VISN from ien of station
    67         N IBAT
    68         D PARENT^XUAF4("IBAT","`"_STATION,"VISN")
    69         S IBAT=0,IBAT=$O(IBAT("P",IBAT))
    70         Q $S(IBAT:IBAT_"^"_$P(IBAT("P",IBAT),"^"),1:"")
    71         ;
    72 ONEFAC()        ; returns one facility only, no visns allowed
    73         N DIC,DTOUT,DUOUT,X,Y
    74         S DIC="^DIC(4,",DIC(0)="AEMNQ"
    75         S DIC("S")="I $$SCR^IBATUTL(Y),$$INST^IBATUTL(Y)'[""VISN"""
    76         D ^DIC
    77         Q Y
    78 FAC()   ; -- facility/visn or all selection
    79         N DIC,X,Y,DTOUT,DUOUT K IBFAC
    80         S DIC="^DIC(4,",DIC(0)="EQMNZ"
    81         S DIC("S")="I $$SCR^IBATUTL(Y)"
    82 REDO    W !,"Select FACILITY/VISN: ALL// " R X:DTIME Q:(X["^")!'$T 1
    83         I X="?" W !,"Select a Facility (Name or Number), VISN (VISN XX), or press RETURN for ALL" G REDO
    84         I X=""!($$UP^XLFSTR(X)="ALL") Q 0
    85         D ^DIC G:Y<1 REDO D SET(Y)
    86         S DIC("A")="Select another FACILITY/VISN: ",DIC(0)="AEQMNZ"
    87         F  D ^DIC Q:X=""!(Y<1)  D SET(Y)
    88         Q 0
    89 SET(Y)  I Y'["VISN" N IBVISN D PARENT^XUAF4("IBVISN","`"_+Y,"VISN") D
    90         . S IBVISN=0,IBVISN=$O(IBVISN("P",IBVISN))
    91         . S IBFAC(IBVISN,"C",+Y)=$$INST(+Y)
    92         E  S IBFAC(+Y)="" D CHILDREN^XUAF4("IBFAC(+Y)","`"_+Y,"VISN")
    93         Q
    94 SCR(X)  ; screens invalid institution file entries
    95         N IBVISN
    96         ;Q:$P(X,".",2) 0
    97         D PARENT^XUAF4("IBVISN","`"_X,"VISN")
    98         S IBVISN=0,IBVISN=$O(IBVISN("P",IBVISN)) I IBVISN Q 1
    99         D CHILDREN^XUAF4("IBVISN","`"_X,"VISN")
    100         S IBVISN=0,IBVISN=$O(IBVISN("C",IBVISN)) I IBVISN Q 1
    101         Q 0
    102 PPF(DFN)        ; returns patient's enrolled/preferred facility
    103         N IBPPF
    104         ; first find current enrolment
    105         S IBPPF=+$$PREF^DGENPTA(DFN) ; dbia #2919
    106         ; now if they are already tp update if necessary
    107         I $D(^IBAT(351.6,DFN)),$P(^(DFN,0),"^",3)'=IBPPF D UPPPF^IBATFILE(DFN,IBPPF)
    108         ; now if they have an over ride facility use that
    109         Q $S($P($G(^IBAT(351.6,DFN,0)),"^",10):$P(^(0),"^",10),IBPPF=$$SITE:0,1:IBPPF)
    110 TPP(DFN)        ; returns dfn and files patient if a valid tp patient
    111         N IBSITE,IBPPF
    112         S IBSITE=$$SITE
    113         S IBPPF=$$PPF(DFN)
    114         I IBPPF,IBSITE'=IBPPF  S DFN=+$$PAT^IBATFILE(DFN,IBPPF)
    115         I DFN,$P($G(^IBAT(351.6,DFN,0)),"^",4) Q DFN
    116         Q 0
    117 SITE()  ; returns ien of current va site (this way I have only one outside call
    118         Q +$$SITE^VASITE
    119         ;
    120 INST(DA)        ; returns institution file info
    121         ; This will return the station name ^ station number ^ station type
    122         ; DA - The pointer value into file 4.
    123         I '$D(^DIC(4,DA,0)) Q 0
    124         Q $$NNT^XUAF4(DA)
    125 IPT(X)  ; returns institution file pointer from name
    126         Q $$LKUP^XUAF4(X)
    127 PROC(X,IBDATE)  ; -- returns CPT and descriptive name for cpts
    128         S X=$$CPT^ICPTCOD(X,$G(IBDATE))
    129         Q $P(X,"^",2,3)
    130 COPAY(DFN,IBFROM,IBBDT,IBEDT)   ; -- returns copay amount if any
    131         ; dfn=patient's dfn, from=what event the bill is from
    132         ; ibbdt & ibedt are date ranges (n/a for rx)
    133         N IBAMT,Y,Y1,IBDA,IBX S IBAMT=0
    134         I IBFROM["PSRX(" D  Q IBAMT
    135         . I $P(IBFROM,";",3)>0 D  Q
    136         .. ; refills
    137         .. S IBFROM=$$SUBFILE^IBRXUTL(+IBFROM,$P(IBFROM,";",3),52,9) I 'IBFROM Q
    138         .. S IBAMT=$P($G(^IB(IBFROM,0)),"^",7)
    139         . E  D  Q
    140         .. ; initial fill
    141         .. S IBFROM=$$FILE^IBRXUTL(+IBFROM,106) I 'IBFROM Q
    142         .. S IBAMT=$P($G(^IB(IBFROM,0)),"^",7)
    143         ; now on to scheduling and admissions
    144         S Y="" F  S Y=$O(^IB("AFDT",DFN,Y)) Q:'Y  I -Y'>IBEDT S Y1=0 F  S Y1=$O(^IB("AFDT",DFN,Y,Y1)) Q:'Y1  D
    145         . S IBDA=0 F  S IBDA=$O(^IB("AF",Y1,IBDA)) Q:'IBDA  D
    146         .. Q:'$D(^IB(IBDA,0))  S IBX=^(0)
    147         .. Q:$P(IBX,"^",8)["ADMISSION"
    148         .. ;
    149         .. ; quit if not correct type (inpatient vs outpatient)
    150         .. Q:$S(IBFROM["SCE("&($P($P(IBX,"^",4),":")'=409.68):1,IBFROM["DGPM("&($P($P(IBX,"^",4),":")=409.68):1,1:0)
    151         .. ;
    152         .. I $P(IBX,"^",15)<IBBDT!($P(IBX,"^",14)>IBEDT) Q
    153         .. S IBAMT=IBAMT+$P(IBX,"^",7)
    154         Q IBAMT
    155 FINDT(X)        ; -- looks up transactions for source in X
    156         ; returns ien of 351.61 if not cancelled
    157         Q:$G(X)="" 0
    158         N Y,Z S (Y,Z)=0
    159         F  S Y=$O(^IBAT(351.61,"AD",X,Y)) Q:Y<1!(Z)  D
    160         . I $G(^IBAT(351.61,Y,0)),$P(^(0),"^",5)'="X" S Z=Y
    161         Q Z
    162         ;
    163 PIN(P660,P6611) ; return Prosthetics Item Description (#661.1,.02)
    164         ; input:  P660 - pointer to Patient Item (#660) or P6611 - pointer to HCPCS (#661.1)
    165         ; return: pointer to HCPCS (#661.1) ^ Short Description (#661.1,.01) ^ HCPCS (#661.1,.01)
    166         N IBX,IBY S IBY=""
    167         I +$G(P660) S P6611=+$P($G(^RMPR(660,+P660,1)),U,4)
    168         I +$G(P6611) S IBX=$G(^RMPR(661.1,+P6611,0)) I IBX'="" S IBY=P6611_U_$P(IBX,U,2)_U_$P(IBX,U,1)
    169         Q IBY
    170         ;
    171 EX(FILE,FIELD,VALUE)    ; -- return external value
    172         N Y,C S Y=$G(VALUE)
    173         I +$G(FILE),+$G(FIELD),Y'="" S C=$P(^DD(FILE,FIELD,0),"^",2) D Y^DIQ
    174         Q Y
    175         ;
     1IBATUTL ;LL/ELZ - TRANSFER PRICING UTILITES ; 3-SEP-1998
     2 ;;2.0;INTEGRATED BILLING;**115,266,347**;21-MAR-94;Build 24
     3 ;;Per VHA Directive 2004-038, this routine should not be modified.
     4 ;
     5SL() ; -- called to select a patient or enrolled facility
     6 N X,Y,DTOUT,DUOUT,DIRUT,DIROUT,DIR
     7 S DIR(0)="350.9,10.01",DIR("A")="Select Patient or Enrolled Facility"
     8 D ^DIR
     9 Q Y
     10SLPT() ; -- called to select a patient, returns 0 or patient dfn
     11 N X,Y,DIC,DTOUT,DUOUT
     12 S DIC="^IBAT(351.6,",DIC(0)="AEMQ" D ^DIC
     13 Q $S(+Y>0:+Y,1:0)
     14 ;
     15SLDR(Q) ; -- called to select a date range
     16 ; defaults are from=T-365, to=TODAY
     17 ; output IBBDT, IBEDT, quit returns 0 if not valid
     18 ;
     19 N DIR,DIRUT,DUOUT,DTOUT,DIROUT,X,Y,IBDT
     20 S DIR(0)="DA^:NOW:EX",DIR("A")="Select FROM DATE: "
     21 S:$D(Q) DIR("?")=Q
     22 D ^DIR G:'Y SLDRQ S IBDT=+Y
     23 S DIR(0)="DA^"_+Y_":NOW:EX",DIR("A")="              TO: "
     24 D ^DIR
     25 S:Y IBEDT=+Y+.999999,IBBDT=IBDT G SLDRQ
     26SLDR1Y() ; -- called to select a date range w/1y past default
     27 ; defaults are from=T-365, to=TODAY
     28 ; output IBBDT, IBEDT, quit returns 0 if not valid
     29 ;
     30 N DIR,DIRUT,DUOUT,DTOUT,DIROUT,X,Y,IBDT
     31 S DIR(0)="DA^:NOW:EX",DIR("A")="Select FROM DATE: "
     32 S DIR("B")=$$DAT2^IBOUTL($$FMADD^XLFDT(DT,-365)) D ^DIR
     33 G:'Y SLDRQ S IBDT=+Y
     34 S DIR(0)="DA^"_+Y_":NOW:EX",DIR("A")="              to: "
     35 S DIR("B")=$$DAT2^IBOUTL($$FMADD^XLFDT(IBDT,365)) D ^DIR
     36 G:'Y SLDRQ S IBEDT=+Y+.999999,IBBDT=IBDT
     37SLDRQ Q $D(DIRUT)!($D(DUOUT))
     38 ;
     39PTTRAN(IBFILE,IBARRAY,IBXREF) ; builds a list of patient transactions by date
     40 ; assumes DFN, IBBDT, IBEDT
     41 ; input IBARRAY - where to store info
     42 ;       IBXREF  - which date x-ref to use
     43 ; output 0,6 node of file IBFILE in array specified
     44 ;
     45 N IBIEN,IBDT,IBNODE
     46 K @IBARRAY
     47 S IBDT=IBBDT-.999999
     48 F  S IBDT=$O(^IBAT(IBFILE,IBXREF,DFN,IBDT)) Q:IBDT<1!(IBDT>IBEDT)  D
     49 . S IBIEN=0
     50 . F  S IBIEN=$O(^IBAT(IBFILE,IBXREF,DFN,IBDT,IBIEN)) Q:IBIEN<1  D
     51 .. F IBNODE=0,6 S @IBARRAY@(IBDT,IBIEN,IBNODE)=$G(^IBAT(IBFILE,IBIEN,IBNODE))
     52 Q
     53LMOPT ; -- called to do standard listmanager option calling
     54 D FULL^VALM1
     55 S VALMBCK="R"
     56 Q
     57 ;
     58SETVALM(LINE,TEXT,IEN,ON,OFF) ; -- sets up listmanager lines
     59 S LINE=LINE+1
     60 D SET^VALM10(LINE,TEXT,LINE)
     61 S:$G(IEN) @VALMAR@("INDEX",LINE,IEN)=""
     62 D:$G(ON)]""!($G(OFF)]"") CNTRL^VALM10(LINE,1,$L(TEXT),$G(ON),$G(OFF))
     63 W:'(LINE#5) "."
     64 Q LINE
     65 ;
     66VISN(STATION) ; -- looks up ien & name of VISN from ien of station
     67 N IBAT
     68 D PARENT^XUAF4("IBAT","`"_STATION,"VISN")
     69 S IBAT=0,IBAT=$O(IBAT("P",IBAT))
     70 Q $S(IBAT:IBAT_"^"_$P(IBAT("P",IBAT),"^"),1:"")
     71 ;
     72ONEFAC() ; returns one facility only, no visns allowed
     73 N DIC,DTOUT,DUOUT,X,Y
     74 S DIC="^DIC(4,",DIC(0)="AEMNQ"
     75 S DIC("S")="I $$SCR^IBATUTL(Y),$$INST^IBATUTL(Y)'[""VISN"""
     76 D ^DIC
     77 Q Y
     78FAC() ; -- facility/visn or all selection
     79 N DIC,X,Y,DTOUT,DUOUT K IBFAC
     80 S DIC="^DIC(4,",DIC(0)="EQMNZ"
     81 S DIC("S")="I $$SCR^IBATUTL(Y)"
     82REDO W !,"Select FACILITY/VISN: ALL// " R X:DTIME Q:(X["^")!'$T 1
     83 I X="?" W !,"Select a Facility (Name or Number), VISN (VISN XX), or press RETURN for ALL" G REDO
     84 I X=""!($$UP^XLFSTR(X)="ALL") Q 0
     85 D ^DIC G:Y<1 REDO D SET(Y)
     86 S DIC("A")="Select another FACILITY/VISN: ",DIC(0)="AEQMNZ"
     87 F  D ^DIC Q:X=""!(Y<1)  D SET(Y)
     88 Q 0
     89SET(Y) I Y'["VISN" N IBVISN D PARENT^XUAF4("IBVISN","`"_+Y,"VISN") D
     90 . S IBVISN=0,IBVISN=$O(IBVISN("P",IBVISN))
     91 . S IBFAC(IBVISN,"C",+Y)=$$INST(+Y)
     92 E  S IBFAC(+Y)="" D CHILDREN^XUAF4("IBFAC(+Y)","`"_+Y,"VISN")
     93 Q
     94SCR(X) ; screens invalid institution file entries
     95 N IBVISN
     96 ;Q:$P(X,".",2) 0
     97 D PARENT^XUAF4("IBVISN","`"_X,"VISN")
     98 S IBVISN=0,IBVISN=$O(IBVISN("P",IBVISN)) I IBVISN Q 1
     99 D CHILDREN^XUAF4("IBVISN","`"_X,"VISN")
     100 S IBVISN=0,IBVISN=$O(IBVISN("C",IBVISN)) I IBVISN Q 1
     101 Q 0
     102PPF(DFN) ; returns patient's enrolled/preferred facility
     103 N IBPPF
     104 ; first find current enrolment
     105 S IBPPF=+$$PREF^DGENPTA(DFN) ; dbia #2919
     106 ; now if they are already tp update if necessary
     107 I $D(^IBAT(351.6,DFN)),$P(^(DFN,0),"^",3)'=IBPPF D UPPPF^IBATFILE(DFN,IBPPF)
     108 ; now if they have an over ride facility use that
     109 Q $S($P($G(^IBAT(351.6,DFN,0)),"^",10):$P(^(0),"^",10),IBPPF=$$SITE:0,1:IBPPF)
     110TPP(DFN) ; returns dfn and files patient if a valid tp patient
     111 N IBSITE,IBPPF
     112 S IBSITE=$$SITE
     113 S IBPPF=$$PPF(DFN)
     114 I IBPPF,IBSITE'=IBPPF  S DFN=+$$PAT^IBATFILE(DFN,IBPPF)
     115 I DFN,$P($G(^IBAT(351.6,DFN,0)),"^",4) Q DFN
     116 Q 0
     117SITE() ; returns ien of current va site (this way I have only one outside call
     118 Q +$$SITE^VASITE
     119 ;
     120INST(DA) ; returns institution file info
     121 ; This will return the station name ^ station number ^ station type
     122 ; DA - The pointer value into file 4.
     123 I '$D(^DIC(4,DA,0)) Q 0
     124 Q $$NNT^XUAF4(DA)
     125IPT(X) ; returns institution file pointer from name
     126 Q $$LKUP^XUAF4(X)
     127PROC(X,IBDATE) ; -- returns CPT and descriptive name for cpts
     128 S X=$$CPT^ICPTCOD(X,$G(IBDATE))
     129 Q $P(X,"^",2,3)
     130COPAY(DFN,IBFROM,IBBDT,IBEDT) ; -- returns copay amount if any
     131 ; dfn=patient's dfn, from=what event the bill is from
     132 ; ibbdt & ibedt are date ranges (n/a for rx)
     133 N IBAMT,Y,Y1,IBDA,IBX S IBAMT=0
     134 I IBFROM["PSRX(" D  Q IBAMT
     135 . I $P(IBFROM,";",3)>0 D  Q
     136 .. ; refills
     137 .. S IBFROM=$$SUBFILE^IBRXUTL(+IBFROM,$P(IBFROM,";",3),52,9) I 'IBFROM Q
     138 .. S IBAMT=$P($G(^IB(IBFROM,0)),"^",7)
     139 . E  D  Q
     140 .. ; initial fill
     141 .. S IBFROM=$$FILE^IBRXUTL(+IBFROM,106) I 'IBFROM Q
     142 .. S IBAMT=$P($G(^IB(IBFROM,0)),"^",7)
     143 ; now on to scheduling and admissions
     144 S Y="" F  S Y=$O(^IB("AFDT",DFN,Y)) Q:'Y  I -Y'>IBEDT S Y1=0 F  S Y1=$O(^IB("AFDT",DFN,Y,Y1)) Q:'Y1  D
     145 . S IBDA=0 F  S IBDA=$O(^IB("AF",Y1,IBDA)) Q:'IBDA  D
     146 .. Q:'$D(^IB(IBDA,0))  S IBX=^(0)
     147 .. Q:$P(IBX,"^",8)["ADMISSION"
     148 .. ;
     149 .. ; quit if not correct type (inpatient vs outpatient)
     150 .. Q:$S(IBFROM["SCE("&($P($P(IBX,"^",4),":")'=409.68):1,IBFROM["DGPM("&($P($P(IBX,"^",4),":")=409.68):1,1:0)
     151 .. ;
     152 .. I $P(IBX,"^",15)<IBBDT!($P(IBX,"^",14)>IBEDT) Q
     153 .. S IBAMT=IBAMT+$P(IBX,"^",7)
     154 Q IBAMT
     155FINDT(X) ; -- looks up transactions for source in X
     156 ; returns ien of 351.61 if not cancelled
     157 Q:$G(X)="" 0
     158 N Y,Z S (Y,Z)=0
     159 F  S Y=$O(^IBAT(351.61,"AD",X,Y)) Q:Y<1!(Z)  D
     160 . I $G(^IBAT(351.61,Y,0)),$P(^(0),"^",5)'="X" S Z=Y
     161 Q Z
     162 ;
     163EX(FILE,FIELD,VALUE) ; -- return external value
     164 N Y,C S Y=$G(VALUE)
     165 I +$G(FILE),+$G(FIELD),Y'="" S C=$P(^DD(FILE,FIELD,0),"^",2) D Y^DIQ
     166 Q Y
     167 ;
Note: See TracChangeset for help on using the changeset viewer.