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/IBATO1.m

    r613 r623  
    1 IBATO1  ;LL/ELZ - TRANSFER PRICING REPORTS CONT. ; 18-DEC-98
    2         ;;2.0;INTEGRATED BILLING;**115,266,389**;21-MAR-94;Build 6
    3         ;;Per VHA Directive 2004-038, this routine should not be modified.
    4         ;
    5 PAGE()  ; performs page reads and returns 1 if quiting is needed
    6         N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT
    7         S DIR(0)="E" D ^DIR
    8         Q $D(DIRUT)
    9 NUM(X,X2,X3)    ; calls to format numbers
    10         D COMMA^%DTC
    11         Q $E(X,1,$L(X)-1)
    12 UNIT(IBA,IBD,IBO)       ; sets IBD subscripted with units for IBA
    13         N IBX,IBB S IBB="UNIT"
    14         I $P(IBA(0),"^",12)["DGPM" D  Q
    15         . S IBD(1,IBO,IBB)=$$EX^IBATUTL(351.61,1.01,+IBA(1))
    16         I $P(IBA(0),"^",12)["PSRX(" D  Q
    17         . S IBD(1,IBO,IBB)=$$EX^IBATUTL(52,.01,+$P(IBA(0),"^",12))
    18         I $P(IBA(0),"^",12)["RMPR" D  Q
    19         . S IBD(1,IBO,IBB)="PROSTHETIC"
    20         S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D
    21         . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0)
    22         . S IBD(IBX,IBO,IBB)="CPT"_$P($$PROC^IBATUTL(+IBX(0)),U)
    23         Q
    24 TYPE(IBA,IBO)   ; sets IBO with descriptive trans type for IBA
    25         N IBB,IBC,IBD
    26         S:'$D(IBA(0)) IBA(0)=^IBAT(351.61,IBA,0)
    27         S IBB=$P(IBA(0),"^",12)
    28         I IBB["DGPM(" S IBO="INPATIENT" Q
    29         I IBB["PSRX(" S IBO="PHARMACY" Q
    30         I IBB["RMPR(660," S IBO="PROSTHETICS" Q
    31         D GETGEN^SDOE(+$P(IBA(0),"^",12),"IBC")
    32         D:$P($G(IBC(0)),"^",3) PARSE^SDOE(.IBC,"EXTERNAL","IBD")
    33         S IBO=$S($G(IBD(.03))="":"OUTPATINET",1:$E("OUT "_IBD(.03),1,10))
    34         Q
    35 DES(IBA,IBD,IBO)        ; sets IBD subscripted with description for IBA
    36         N IBX,IBB,IBDATE S IBB="UNIT DESCRIPTION"
    37         I $P(IBA(0),"^",12)["DGPM" D  Q
    38         . S IBD(1,IBO,IBB)=$E($$DRGTD^IBACSV(+IBA(1),$P(IBA(0),U,4)),1,18)
    39         I $P(IBA(0),"^",12)["PSRX(" D  Q
    40         . S IBD(1,IBO,IBB)=$E($$EX^IBATUTL(351.61,4.01,+IBA(4)),1,18)
    41         I $P(IBA(0),"^",12)["RMPR(660," D  Q
    42         . S IBD(1,IBO,IBB)=$E($P($$PIN^IBATUTL(+$P(IBA(0),"^",12)),U,2),1,18)
    43         S IBDATE=$P($G(^IBAT(351.61,IBIEN,0)),U,4) ; Event Date
    44         S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D
    45         . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0)
    46         . S IBD(IBX,IBO,IBB)=$E($P($$PROC^IBATUTL(+IBX(0),IBDATE),U,2),1,18)
    47         Q
    48 PRICE(IBA,IBD,IBO)      ; sets IBD subscripted with price for IBA
    49         N IBX,IBB S IBB="UNIT PRICE"
    50         I $P(IBA(0),"^",12)["DGPM" D  Q
    51         . S IBD(1,IBO,IBB)=$$NUM($P(IBA(1),"^",2),2,9)
    52         I $P(IBA(0),"^",12)["PSRX(" D  Q
    53         . S IBD(1,IBO,IBB)=$$NUM($P(IBA(4),"^",3),3,10)
    54         I $P(IBA(0),"^",12)["RMPR(660," D  Q
    55         . S IBD(1,IBO,IBB)=$$NUM($P(IBA(4),"^",5),3,10)
    56         S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D
    57         . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0)
    58         . S IBD(IBX,IBO,IBB)=$$NUM($P(IBX(0),"^",3),2,9)
    59         Q
    60 QTY(IBA,IBD,IBO)        ; sets IBD subscripted with quantity for IBA
    61         N IBX,IBB S IBB="QTY"
    62         I $P(IBA(0),"^",12)["DGPM" D  Q
    63         . S IBD(1,IBO,IBB)=$$NUM($P(IBA(1),"^",5),0,3)
    64         I $P(IBA(0),"^",12)["PSRX(" D  Q
    65         . S IBD(1,IBO,IBB)=$$NUM($P(IBA(4),"^",2),0,3)
    66         I $P(IBA(0),"^",12)["RMPR(660," D  Q
    67         . S IBD(1,IBO,IBB)=$$NUM(1,0,3)
    68         S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D
    69         . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0)
    70         . S IBD(IBX,IBO,IBB)=$$NUM($P(IBX(0),"^",2),0,3)
    71         Q
    72 COPAY(IBA)      ; compute copay for iba and return
    73         N IBC,IBT,IBCOPAY
    74         S IBCOPAY=$$COPAY^IBATUTL($P(IBA(0),"^",2),$P(IBA(0),"^",12),$P($P(IBA(0),"^",9),"."),$P($P(IBA(0),"^",10),"."))
    75         I IBCOPAY,$P(IBA(0),"^",12)["SCE(" S (IBC,IBT)=0 F  S IBT=$O(^IBAT(351.61,"AH",$P(IBA(0),"^",2),$P(IBA(0),"^",4),IBT)) Q:IBT<1  I $P(^IBAT(351.61,IBT,0),"^",12)["SCE(" S IBC=IBC+1
    76         I  S IBCOPAY=IBCOPAY/IBC
    77         Q $$NUM(IBCOPAY,2,7)
    78         ;
    79 VAR(IBA)        ; set up required variables
    80         N IBX
    81         F IBX=0,1,4 S IBA(IBX)=$G(^IBAT(351.61,IBA,IBX))
    82         Q
    83 PRT(IBIEN)      ; main entry for report printing
    84         ;
    85         N DFN,IBXDATA,IBC,IBF,IBF1,IBF2,IBO,VA,VAERR,IBM
    86         ;
    87         D VAR(.IBIEN)
    88         S DFN=$P(IBIEN(0),"^",2)
    89         I IBPAGE=0!($Y+5>IOSL)!(IBLAST'=$P(IBIEN(0),"^",11)) S IBLAST=$P(IBIEN(0),"^",11) D PRTH Q:IBQUIT
    90         W ! S IBC=0
    91         ;
    92         ; print single valued data first
    93         S IBF=0 F  S IBF=$O(IBFIELD(IBF)) Q:IBF<1  D
    94         . D PRTG(.IBFIELD,.IBF,.IBF1,.IBC)
    95         . X ^IBAT(351.62,IBF1,1)
    96         . W IBXDATA,?IBC
    97         ;
    98         ; compute multiple valued data
    99         S IBM=IBC
    100         S IBF=0 F  S IBF=$O(IBMUL(IBF)) Q:IBF<1  D
    101         . S IBF1=0,IBF1=$O(IBMUL(IBF,IBF1))
    102         . X ^IBAT(351.62,IBF1,1)
    103         ;
    104         ; print multiple valued data
    105         S IBF=0 F  S IBF=$O(IBXDATA(IBF)) Q:IBF=""  W:IBC'=IBM ! W ?IBM S IBC=IBM D
    106         . S IBO=0 F  S IBO=$O(IBXDATA(IBF,IBO)) Q:IBO<1  S IBF1=0 F  S IBF1=$O(IBXDATA(IBF,IBO,IBF1)) Q:IBF1=""  D
    107         .. S IBF2=0,IBF2=$O(^IBAT(351.62,"B",IBF1,IBF2))
    108         .. S IBF2=^IBAT(351.62,IBF2,0)
    109         .. S IBC=IBC+$P(IBF2,"^",2)+1
    110         .. I IBC>IOM W !?5 S IBC=$P(IBF2,"^",2)+6
    111         .. W IBXDATA(IBF,IBO,IBF1),?IBC
    112         ;
    113         ; clean up
    114         X ^IBAT(351.62,999,1)
    115         ;
    116         Q
    117 EXPRT(IBIEN)    ; main entry for excel printing
    118         ;
    119         N DFN,IBXDATA,IBF,IBF1,IBF2,IBO,VA,VAERR
    120         ;
    121         D VAR(.IBIEN)
    122         S DFN=$P(IBIEN(0),"^",2)
    123         ;
    124         ; do single if no multiple
    125         I '$D(IBMUL) D EXSING() W ! X ^IBAT(351.62,999,1) Q
    126         ;
    127         ; compute multiple valued data
    128         S IBF=0 F  S IBF=$O(IBMUL(IBF)) Q:IBF<1  D
    129         . S IBF1=0,IBF1=$O(IBMUL(IBF,IBF1))
    130         . X ^IBAT(351.62,IBF1,1)
    131         ;
    132         ; print multiple valued data
    133         S IBF=0 F  S IBF=$O(IBXDATA(IBF)) Q:IBF=""  D EXSING(IBF) D
    134         . S IBO=0 F  S IBO=$O(IBXDATA(IBF,IBO)) Q:IBO<1  S IBF1=0 F  S IBF1=$O(IBXDATA(IBF,IBO,IBF1)) Q:IBF1=""  D
    135         .. S IBF2=0,IBF2=$O(^IBAT(351.62,"B",IBF1,IBF2))
    136         .. S IBF2=^IBAT(351.62,IBF2,0)
    137         .. W $$STRIP(IBXDATA(IBF,IBO,IBF1),IBF2),"|"
    138         . W !
    139         ;
    140         ; clean up
    141         X ^IBAT(351.62,999,1)
    142         ;
    143         Q
    144 STRIP(A,B)      ; strips off junk from numbers
    145         Q $S($P(B,"^",5):+$TR(A,", "),1:A)
    146         ;
    147 EXSING(IBF)     ; print single valued data first
    148         S IBF=0 F  S IBF=$O(IBFIELD(IBF)) Q:IBF<1  D
    149         . D PRTG(.IBFIELD,.IBF,.IBF1,.IBC)
    150         . X ^IBAT(351.62,IBF1,1)
    151         . W $$STRIP(IBXDATA,IBF1(0)),"|"
    152         Q
    153         ;
    154 PRTH    ; header
    155         S IBC=0
    156         D HEAD^IBATO($P(IBIEN(0),"^",11)) Q:IBQUIT
    157         W !
    158         S IBF=0 F  S IBF=$O(IBFIELD(IBF)) Q:IBF<1  D
    159         . D PRTG(.IBFIELD,.IBF,.IBF1,.IBC)
    160         . W $P(IBF1(0),"^"),?IBC
    161         ;
    162         ; multiple part of header
    163         S IBF=0 F  S IBF=$O(IBMUL(IBF)) Q:IBF<1  D
    164         . D PRTG(.IBMUL,.IBF,.IBF1,.IBC)
    165         . W $P(IBF1(0),"^"),?IBC
    166         ;
    167         W ! F IBC=1:1:IOM W "-"
    168         Q
    169 PRTG(X,Y,Z,C)   ; general printing stuff
    170         S Z=0,Z=$O(X(Y,Z))
    171         S Z(0)=X(Y,Z)
    172         I $D(C) S C=C+$P(Z(0),"^",2)+1 I C>IOM W !?5 S C=$P(Z(0),"^",2)+6
    173         Q
    174 SEL(B)  ; selection of which fields B = default
    175         ; sets up variables IBFIELD and IBMUL
    176         ; returns max length of output
    177         ;
    178         N DTOUT,DUOUT,DIRUT,DIROUT,DIR,W,X,Y,Z,IBR,IBM
    179         S (IBR,IBM)=0
    180         ;
    181 AGAIN   S DIR(0)="LAO^1:98",DIR("A")="Which fields: "_$S($D(B):B_"//",1:"")
    182         S DIR("?")="Select what fields you want printed. Ranges must start with a valid number."
    183         D ^DIR Q:$D(DTOUT)!($D(DUOUT))!($D(DIROUT)) 0
    184         ;
    185         ; if default selected set Y
    186         S:Y="" Y=$G(B)
    187         ;
    188         ; validate input
    189         I '$D(^IBAT(351.62,"AC",+Y)) W *7,"??" G AGAIN
    190         F X=1:1 Q:$P(Y,",",X)=""  S:'$D(^IBAT(351.62,"AC",$P(Y,",",X))) Y=$P(Y,",",1,X-1)_","_$P(Y,",",X+1,98),X=X-1
    191         ;
    192         ; setup variables for output
    193         F X=1:1 Q:'$P(Y,",",X)  S W=+$P($Q(^IBAT(351.62,"AC",$P(Y,",",X))),",",4),Z=^IBAT(351.62,W,0),IBR=$S($P(Z,"^",3):"IBMUL",1:"IBFIELD"),@(IBR_"("_X_","_W_")")=Z,@IBR=$G(@IBR)+$P(Z,"^",2)+1
    194         ;
    195         Q $G(IBFIELD)+$G(IBMUL)
    196         ;
    197 DISP    ; displays fields for selection
    198         ;
    199         N IBX,IBL,IBI
    200         ;
    201         ; set up lines
    202         S (IBX,IBL)=0 F  S IBX=$O(^IBAT(351.62,"AC",IBX)),IBL=IBL+1 Q:IBX<1  S:IBX=40 IBL=1 S IBI=+$P($Q(^IBAT(351.62,"AC",IBX)),",",4),IBL(IBL,$S(IBX<40:0,1:40))=^IBAT(351.62,IBI,0)
    203         ;
    204         ; display lines
    205         W @IOF,!,"Select the fields you would like printed on this report, in the order you",!,"want them printed.  Fields with an asterisk (*) are fields that are multiples.",!
    206         S IBX="" F  S IBX=$O(IBL(IBX)) Q:IBX=""  W ! S IBI="" F  S IBI=$O(IBL(IBX,IBI)) Q:IBI=""  W ?IBI,$P(IBL(IBX,IBI),"^",4),?IBI+4,$S($P(IBL(IBX,IBI),"^",3):"*",1:""),$P(IBL(IBX,IBI),"^")
    207         ;
    208         W !
    209         ;
    210         Q
     1IBATO1 ;LL/ELZ - TRANSFER PRICING REPORTS CONT. ; 18-DEC-98
     2 ;;2.0;INTEGRATED BILLING;**115,266**;21-MAR-94
     3 ;;Per VHA Directive 10-93-142, this routine should not be modified.
     4 ;
     5PAGE() ; performs page reads and returns 1 if quiting is needed
     6 N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT
     7 S DIR(0)="E" D ^DIR
     8 Q $D(DIRUT)
     9NUM(X,X2,X3) ; calls to format numbers
     10 D COMMA^%DTC
     11 Q $E(X,1,$L(X)-1)
     12UNIT(IBA,IBD,IBO) ; sets IBD subscripted with units for IBA
     13 N IBX,IBB S IBB="UNIT"
     14 I $P(IBA(0),"^",12)["DGPM" D  Q
     15 . S IBD(1,IBO,IBB)=$$EX^IBATUTL(351.61,1.01,+IBA(1))
     16 I $P(IBA(0),"^",12)["PSRX(" D  Q
     17 . S IBD(1,IBO,IBB)=$$EX^IBATUTL(52,.01,+$P(IBA(0),"^",12))
     18 I $P(IBA(0),"^",12)["RMPR" D  Q
     19 . S IBD(1,IBO,IBB)="PROSTHETIC"
     20 S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D
     21 . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0)
     22 . S IBD(IBX,IBO,IBB)="CPT"_$P($$PROC^IBATUTL(+IBX(0)),U)
     23 Q
     24TYPE(IBA,IBO) ; sets IBO with descriptive trans type for IBA
     25 N IBB,IBC,IBD
     26 S:'$D(IBA(0)) IBA(0)=^IBAT(351.61,IBA,0)
     27 S IBB=$P(IBA(0),"^",12)
     28 I IBB["DGPM(" S IBO="INPATIENT" Q
     29 I IBB["PSRX(" S IBO="PHARMACY" Q
     30 I IBB["RMPR(660," S IBO="PROSTHETICS" Q
     31 D GETGEN^SDOE(+$P(IBA(0),"^",12),"IBC")
     32 D:$P($G(IBC(0)),"^",3) PARSE^SDOE(.IBC,"EXTERNAL","IBD")
     33 S IBO=$S($G(IBD(.03))="":"OUTPATINET",1:$E("OUT "_IBD(.03),1,10))
     34 Q
     35DES(IBA,IBD,IBO) ; sets IBD subscripted with description for IBA
     36 N IBX,IBB,IBDATE S IBB="UNIT DESCRIPTION"
     37 I $P(IBA(0),"^",12)["DGPM" D  Q
     38 . S IBD(1,IBO,IBB)=$E($$DRGTD^IBACSV(+IBA(1),$P(IBA(0),U,4)),1,18)
     39 I $P(IBA(0),"^",12)["PSRX(" D  Q
     40 . S IBD(1,IBO,IBB)=$E($$EX^IBATUTL(351.61,4.01,+IBA(4)),1,18)
     41 I $P(IBA(0),"^",12)["RMPR(660," D  Q
     42 . S IBD(1,IBO,IBB)=$E($$EX^IBATUTL(351.61,4.04,$P(IBA(4),"^",4)),1,18)
     43 S IBDATE=$P($G(^IBAT(351.61,IBIEN,0)),U,4) ; Event Date
     44 S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D
     45 . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0)
     46 . S IBD(IBX,IBO,IBB)=$E($P($$PROC^IBATUTL(+IBX(0),IBDATE),U,2),1,18)
     47 Q
     48PRICE(IBA,IBD,IBO) ; sets IBD subscripted with price for IBA
     49 N IBX,IBB S IBB="UNIT PRICE"
     50 I $P(IBA(0),"^",12)["DGPM" D  Q
     51 . S IBD(1,IBO,IBB)=$$NUM($P(IBA(1),"^",2),2,9)
     52 I $P(IBA(0),"^",12)["PSRX(" D  Q
     53 . S IBD(1,IBO,IBB)=$$NUM($P(IBA(4),"^",3),3,10)
     54 I $P(IBA(0),"^",12)["RMPR(660," D  Q
     55 . S IBD(1,IBO,IBB)=$$NUM($P(IBA(4),"^",5),3,10)
     56 S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D
     57 . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0)
     58 . S IBD(IBX,IBO,IBB)=$$NUM($P(IBX(0),"^",3),2,9)
     59 Q
     60QTY(IBA,IBD,IBO) ; sets IBD subscripted with quantity for IBA
     61 N IBX,IBB S IBB="QTY"
     62 I $P(IBA(0),"^",12)["DGPM" D  Q
     63 . S IBD(1,IBO,IBB)=$$NUM($P(IBA(1),"^",5),0,3)
     64 I $P(IBA(0),"^",12)["PSRX(" D  Q
     65 . S IBD(1,IBO,IBB)=$$NUM($P(IBA(4),"^",2),0,3)
     66 I $P(IBA(0),"^",12)["RMPR(660," D  Q
     67 . S IBD(1,IBO,IBB)=$$NUM(1,0,3)
     68 S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D
     69 . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0)
     70 . S IBD(IBX,IBO,IBB)=$$NUM($P(IBX(0),"^",2),0,3)
     71 Q
     72COPAY(IBA) ; compute copay for iba and return
     73 N IBC,IBT,IBCOPAY
     74 S IBCOPAY=$$COPAY^IBATUTL($P(IBA(0),"^",2),$P(IBA(0),"^",12),$P($P(IBA(0),"^",9),"."),$P($P(IBA(0),"^",10),"."))
     75 I IBCOPAY,$P(IBA(0),"^",12)["SCE(" S (IBC,IBT)=0 F  S IBT=$O(^IBAT(351.61,"AH",$P(IBA(0),"^",2),$P(IBA(0),"^",4),IBT)) Q:IBT<1  I $P(^IBAT(351.61,IBT,0),"^",12)["SCE(" S IBC=IBC+1
     76 I  S IBCOPAY=IBCOPAY/IBC
     77 Q $$NUM(IBCOPAY,2,7)
     78 ;
     79VAR(IBA) ; set up required variables
     80 N IBX
     81 F IBX=0,1,4 S IBA(IBX)=$G(^IBAT(351.61,IBA,IBX))
     82 Q
     83PRT(IBIEN) ; main entry for report printing
     84 ;
     85 N DFN,IBXDATA,IBC,IBF,IBF1,IBF2,IBO,VA,VAERR,IBM
     86 ;
     87 D VAR(.IBIEN)
     88 S DFN=$P(IBIEN(0),"^",2)
     89 I IBPAGE=0!($Y+5>IOSL)!(IBLAST'=$P(IBIEN(0),"^",11)) S IBLAST=$P(IBIEN(0),"^",11) D PRTH Q:IBQUIT
     90 W ! S IBC=0
     91 ;
     92 ; print single valued data first
     93 S IBF=0 F  S IBF=$O(IBFIELD(IBF)) Q:IBF<1  D
     94 . D PRTG(.IBFIELD,.IBF,.IBF1,.IBC)
     95 . X ^IBAT(351.62,IBF1,1)
     96 . W IBXDATA,?IBC
     97 ;
     98 ; compute multiple valued data
     99 S IBM=IBC
     100 S IBF=0 F  S IBF=$O(IBMUL(IBF)) Q:IBF<1  D
     101 . S IBF1=0,IBF1=$O(IBMUL(IBF,IBF1))
     102 . X ^IBAT(351.62,IBF1,1)
     103 ;
     104 ; print multiple valued data
     105 S IBF=0 F  S IBF=$O(IBXDATA(IBF)) Q:IBF=""  W:IBC'=IBM ! W ?IBM S IBC=IBM D
     106 . S IBO=0 F  S IBO=$O(IBXDATA(IBF,IBO)) Q:IBO<1  S IBF1=0 F  S IBF1=$O(IBXDATA(IBF,IBO,IBF1)) Q:IBF1=""  D
     107 .. S IBF2=0,IBF2=$O(^IBAT(351.62,"B",IBF1,IBF2))
     108 .. S IBF2=^IBAT(351.62,IBF2,0)
     109 .. S IBC=IBC+$P(IBF2,"^",2)+1
     110 .. I IBC>IOM W !?5 S IBC=$P(IBF2,"^",2)+6
     111 .. W IBXDATA(IBF,IBO,IBF1),?IBC
     112 ;
     113 ; clean up
     114 X ^IBAT(351.62,999,1)
     115 ;
     116 Q
     117EXPRT(IBIEN) ; main entry for excel printing
     118 ;
     119 N DFN,IBXDATA,IBF,IBF1,IBF2,IBO,VA,VAERR
     120 ;
     121 D VAR(.IBIEN)
     122 S DFN=$P(IBIEN(0),"^",2)
     123 ;
     124 ; do single if no multiple
     125 I '$D(IBMUL) D EXSING() W ! X ^IBAT(351.62,999,1) Q
     126 ;
     127 ; compute multiple valued data
     128 S IBF=0 F  S IBF=$O(IBMUL(IBF)) Q:IBF<1  D
     129 . S IBF1=0,IBF1=$O(IBMUL(IBF,IBF1))
     130 . X ^IBAT(351.62,IBF1,1)
     131 ;
     132 ; print multiple valued data
     133 S IBF=0 F  S IBF=$O(IBXDATA(IBF)) Q:IBF=""  D EXSING(IBF) D
     134 . S IBO=0 F  S IBO=$O(IBXDATA(IBF,IBO)) Q:IBO<1  S IBF1=0 F  S IBF1=$O(IBXDATA(IBF,IBO,IBF1)) Q:IBF1=""  D
     135 .. S IBF2=0,IBF2=$O(^IBAT(351.62,"B",IBF1,IBF2))
     136 .. S IBF2=^IBAT(351.62,IBF2,0)
     137 .. W $$STRIP(IBXDATA(IBF,IBO,IBF1),IBF2),"|"
     138 . W !
     139 ;
     140 ; clean up
     141 X ^IBAT(351.62,999,1)
     142 ;
     143 Q
     144STRIP(A,B) ; strips off junk from numbers
     145 Q $S($P(B,"^",5):+$TR(A,", "),1:A)
     146 ;
     147EXSING(IBF) ; print single valued data first
     148 S IBF=0 F  S IBF=$O(IBFIELD(IBF)) Q:IBF<1  D
     149 . D PRTG(.IBFIELD,.IBF,.IBF1,.IBC)
     150 . X ^IBAT(351.62,IBF1,1)
     151 . W $$STRIP(IBXDATA,IBF1(0)),"|"
     152 Q
     153 ;
     154PRTH ; header
     155 S IBC=0
     156 D HEAD^IBATO($P(IBIEN(0),"^",11)) Q:IBQUIT
     157 W !
     158 S IBF=0 F  S IBF=$O(IBFIELD(IBF)) Q:IBF<1  D
     159 . D PRTG(.IBFIELD,.IBF,.IBF1,.IBC)
     160 . W $P(IBF1(0),"^"),?IBC
     161 ;
     162 ; multiple part of header
     163 S IBF=0 F  S IBF=$O(IBMUL(IBF)) Q:IBF<1  D
     164 . D PRTG(.IBMUL,.IBF,.IBF1,.IBC)
     165 . W $P(IBF1(0),"^"),?IBC
     166 ;
     167 W ! F IBC=1:1:IOM W "-"
     168 Q
     169PRTG(X,Y,Z,C) ; general printing stuff
     170 S Z=0,Z=$O(X(Y,Z))
     171 S Z(0)=X(Y,Z)
     172 I $D(C) S C=C+$P(Z(0),"^",2)+1 I C>IOM W !?5 S C=$P(Z(0),"^",2)+6
     173 Q
     174SEL(B) ; selection of which fields B = default
     175 ; sets up variables IBFIELD and IBMUL
     176 ; returns max length of output
     177 ;
     178 N DTOUT,DUOUT,DIRUT,DIROUT,DIR,W,X,Y,Z,IBR,IBM
     179 S (IBR,IBM)=0
     180 ;
     181AGAIN S DIR(0)="LAO^1:98",DIR("A")="Which fields: "_$S($D(B):B_"//",1:"")
     182 S DIR("?")="Select what fields you want printed. Ranges must start with a valid number."
     183 D ^DIR Q:$D(DTOUT)!($D(DUOUT))!($D(DIROUT)) 0
     184 ;
     185 ; if default selected set Y
     186 S:Y="" Y=$G(B)
     187 ;
     188 ; validate input
     189 I '$D(^IBAT(351.62,"AC",+Y)) W *7,"??" G AGAIN
     190 F X=1:1 Q:$P(Y,",",X)=""  S:'$D(^IBAT(351.62,"AC",$P(Y,",",X))) Y=$P(Y,",",1,X-1)_","_$P(Y,",",X+1,98),X=X-1
     191 ;
     192 ; setup variables for output
     193 F X=1:1 Q:'$P(Y,",",X)  S W=+$P($Q(^IBAT(351.62,"AC",$P(Y,",",X))),",",4),Z=^IBAT(351.62,W,0),IBR=$S($P(Z,"^",3):"IBMUL",1:"IBFIELD"),@(IBR_"("_X_","_W_")")=Z,@IBR=$G(@IBR)+$P(Z,"^",2)+1
     194 ;
     195 Q $G(IBFIELD)+$G(IBMUL)
     196 ;
     197DISP ; displays fields for selection
     198 ;
     199 N IBX,IBL,IBI
     200 ;
     201 ; set up lines
     202 S (IBX,IBL)=0 F  S IBX=$O(^IBAT(351.62,"AC",IBX)),IBL=IBL+1 Q:IBX<1  S:IBX=40 IBL=1 S IBI=+$P($Q(^IBAT(351.62,"AC",IBX)),",",4),IBL(IBL,$S(IBX<40:0,1:40))=^IBAT(351.62,IBI,0)
     203 ;
     204 ; display lines
     205 W @IOF,!,"Select the fields you would like printed on this report, in the order you",!,"want them printed.  Fields with an asterisk (*) are fields that are multiples.",!
     206 S IBX="" F  S IBX=$O(IBL(IBX)) Q:IBX=""  W ! S IBI="" F  S IBI=$O(IBL(IBX,IBI)) Q:IBI=""  W ?IBI,$P(IBL(IBX,IBI),"^",4),?IBI+4,$S($P(IBL(IBX,IBI),"^",3):"*",1:""),$P(IBL(IBX,IBI),"^")
     207 ;
     208 W !
     209 ;
     210 Q
Note: See TracChangeset for help on using the changeset viewer.