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/ORDER_ENTRY_RESULTS_REPORTING-OR-OCX--ORRC--ORRJ/ORWDXR.m

    r613 r623  
    1 ORWDXR  ; SLC/KCM/JDL - Utilites for Order Actions ;5/30/06  14:50
    2         ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,125,131,134,141,149,187,190,213,243**;Dec 17, 1997;Build 242
    3         ;
    4 ACTDCREA(DCIEN) ; Valid DC Reason
    5         N X
    6         S X=$G(^ORD(100.03,DCIEN,0))
    7         I $P(X,U,4) Q 0
    8         I $P(X,U,5)'=+$O(^DIC(9.4,"C","OR",0)) Q 0
    9         I $P(X,U,7)=+$O(^ORD(100.02,"C","A",0)) Q 0
    10         Q 1
    11         ;
    12 ISREL(VAL,ORIFN)        ; Return true if an order has been released
    13         N STS S STS=$P(^OR(100,+ORIFN,3),U,3)
    14         S VAL=$S(STS=10:0,STS=11:0,1:1)  ; false if delayed or unreleased order
    15         Q
    16 RENEW(REC,ORIFN,ORVP,ORNP,ORL,FLDS,CPLX,ORAPPT) ; Renew an order
    17         N ORDG
    18         N ORDUZ,ORSTS,OREVENT,ORCAT,ORDA,ORTS,ORNEW,ORCHECK,ORLOG,ORPKG
    19         N ORDIALOG,PRMT,X0
    20         N FSTDOSE,FST
    21         S (FSTDOSE,FST)=0
    22         I '$D(CPLX) S CPLX=0
    23         I '$G(ORAPPT) S ORAPPT=""
    24         S ORVP=ORVP_";DPT(",ORL(2)=ORL_";SC(",ORL=ORL(2)
    25         S X0=^OR(100,+ORIFN,0)
    26         S ORDG=$P(X0,U,11)
    27         S ORPKG=$P(X0,U,14)
    28         I $D(FLDS("ORCHECK")) M ORCHECK=FLDS("ORCHECK")
    29         I $P(X0,U,5)["101.41," D                        ; version 3
    30         . S ORDIALOG=+$P(X0,U,5),ORCAT=$P(^OR(100,+ORIFN,0),U,12)
    31         . D GETDLG^ORCD(ORDIALOG),GETORDER^ORCD(+ORIFN)
    32         . I CPLX S FSTDOSE=$P($G(ORDIALOG("B","FIRST DOSE")),U,2) S:'FSTDOSE FSTDOSE=$$PTR^ORCD("OR GTX NOW")
    33         . I FSTDOSE,$G(ORDIALOG(FSTDOSE,1)) K ORDIALOG(FSTDOSE,1)
    34         E  D                                            ; version 2.5 generic
    35         . S ORDIALOG=$O(^ORD(101.41,"B","OR GXTEXT WORD PROCESSING ORDE",0))
    36         . D GETDLG^ORCD(ORDIALOG)
    37         . S PRMT=$O(^ORD(101.41,"B","OR GTX WORD PROCESSING 1",0))
    38         . S ORDIALOG(PRMT,1)=$NA(^TMP("ORWORD",$J,PRMT,1))
    39         . M ^TMP("ORWORD",$J,PRMT,1)=^OR(100,+ORIFN,1)
    40         . S PRMT=$O(^ORD(101.41,"B","OR GTX START DATE/TIME",0))
    41         . I $P(X0,U,9) S ORDIALOG(PRMT,1)=$P(X0,U,9)
    42         I +FLDS(1)=999 D  ; generic order
    43         . S ORDIALOG($$PTR^ORCD("OR GTX START DATE/TIME"),1)=$P(FLDS(1),U,2)
    44         . S ORDIALOG($$PTR^ORCD("OR GTX STOP DATE/TIME"),1)=$P(FLDS(1),U,3)
    45         I ($O(^ORD(101.41,"AB","PS MEDS",0))>0),(+FLDS(1)=130)!(+FLDS(1)=135)!(+FLDS(1)=140),'$L($G(ORDIALOG($$PTR^ORCD("OR GTX SIG"),1))) D
    46         . N ORDOSE,ORDRUG,ORCAT,ORWPSOI,PROMPT,DRUG
    47         . S ORCAT=$P($G(^OR(100,+ORIFN,0)),U,12)
    48         . S PROMPT=$$PTR^ORCD("OR GTX INSTRUCTIONS")
    49         . S ORDRUG=$G(ORDIALOG($$PTR^ORCD("OR GTX DISPENSE DRUG"),1))
    50         . S ORWPSOI=+$G(ORDIALOG($$PTR^ORCD("OR GTX ORDERABLE ITEM"),1))
    51         . I ORWPSOI S ORWPSOI=+$P($G(^ORD(101.43,+ORWPSOI,0)),U,2)
    52         . D DOSE^PSSORUTL(.ORDOSE,ORWPSOI,$S(ORCAT="I":"U",1:"O"),ORVP)       ; dflt doses
    53         . D D1^ORCDPS2  ; set up ORDOSE
    54         . S DRUG=$G(ORDOSE("DD",+ORDRUG))
    55         . I DRUG,ORCAT="O" D RESETID^ORCDPS
    56         . D SIG^ORCDPS2
    57         I +FLDS(1)=140 D  ; outpatient meds
    58         . K ORDIALOG($$PTR^ORCD("OR GTX START DATE"),1) ; remove effective dt
    59         . S ORDIALOG($$PTR^ORCD("OR GTX REFILLS"),1)=$P(FLDS(1),U,4)
    60         . S ORDIALOG($$PTR^ORCD("OR GTX ROUTING"),1)=$P(FLDS(1),U,5)
    61         . S PRMT=$$PTR^ORCD("OR GTX WORD PROCESSING 1")
    62         . K ^TMP("ORWORD",$J,PRMT,1)
    63         . S I=1 F  S I=$O(FLDS(I)) Q:'I  S ^TMP("ORWORD",$J,PRMT,1,I-1,0)=FLDS(I)
    64         . S ^TMP("ORWORD",$J,PRMT,1,0)=U_U_(I-1)_U_(I-1)_U_DT_U
    65         . S ORDIALOG(PRMT,1)=$NA(^TMP("ORWORD",$J,PRMT,1))
    66         . N SIG,PI,X S SIG=$$PTR^ORCD("OR GTX SIG")
    67         . S PI=$$PTR^ORCD("OR GTX PATIENT INSTRUCTIONS"),X=$$STR(PI)
    68         . I $L(X),$$STR(SIG)[X S ORDIALOG(PI,"FORMAT")="@" ;PI in Sig
    69         D RN^ORCSAVE
    70         S REC="" S ORIFN=+ORIFN_";"_ORDA D GETBYIFN^ORWORR(.REC,ORIFN)
    71         Q
    72 RNWFLDS(LST,ORIFN)      ; Return fields for renew action
    73         ; LST(0)=RenewType^Start^Stop^Refills^Pickup  LST(n)=Comments
    74         N X0,DG,PKG,RNWTYPE,START,STOP,REFILLS,OROI
    75         S ORIFN=+ORIFN,X0=^OR(100,ORIFN,0),DG=$P(X0,U,11),PKG=$P(X0,U,14)
    76         S PKG=$E($P(^DIC(9.4,PKG,0),U,2),1,2),DG=$P(^ORD(100.98,DG,0),U,3)
    77         S LST(0)=$S(PKG="OR":999,PKG="PS"&(DG="O RX"):140,PKG="PS"&(DG="UD RX"):130,PKG="PS"&(DG="NV RX"):145,1:0)
    78         I +LST(0)=140 D
    79         . S LST(0)=LST(0)_U_U_U_+$$VAL(ORIFN,"REFILLS")_U_$$VAL(ORIFN,"PICKUP")
    80         . ;D WPVAL(.LST,ORIFN,"COMMENT")
    81         I +LST(0)=999 S LST(0)=LST(0)_U_$$VAL(ORIFN,"START")_U_$$VAL(ORIFN,"STOP")
    82         ; make sure start/stop times are relative times, otherwise use NOW, no Stop
    83         I +$P(LST(0),U,2) S $P(LST(0),U,2)="NOW"
    84         I +$P(LST(0),U,3)!($P(LST(0),U,3)="0") S $P(LST(0),U,3)=""
    85         ;NEW STUFF AFTER THIS LINE OR*3*243
    86         S $P(LST(0),U,9)=0
    87         S OROI=$O(^OR(100,+ORIFN,4.5,"ID","ORDERABLE",0))
    88         Q:'OROI
    89         S OROI=$G(^OR(100,+ORIFN,4.5,OROI,1))
    90         Q:'OROI
    91         S $P(LST(0),U,9)=$$ISCLOZ^ORALWORD(OROI)
    92         ; add to LST node specifying if patient of ORIFN passes clozapine lab tests
    93         I $P(LST(0),U,9) D
    94         .N ORY,ORDFN,ORTMP
    95         .S ORTMP=LST(0)
    96         .K LST
    97         .S LST(0)=ORTMP
    98         .S ORDFN=$P(^OR(100,ORIFN,0),U,2)
    99         .I $P(ORDFN,";",2)'="DPT(" Q
    100         .S ORDFN=+ORDFN
    101         .D ALLWORD^ORALWORD(.ORY,ORDFN,ORIFN,"E")
    102         .M LST(1)=ORY
    103         Q
    104 VAL(ORIFN,ID)   ; Return value for order response
    105         N DA S DA=+$O(^OR(100,ORIFN,4.5,"ID",ID,0))
    106         Q $G(^OR(100,ORIFN,4.5,DA,1))
    107 WPVAL(TXT,ORIFN,ID)     ; Return word processing value
    108         N DA S DA=+$O(^OR(100,ORIFN,4.5,"ID",ID,0))
    109         S I=0 F  S I=$O(^OR(100,ORIFN,4.5,DA,2,I)) Q:'I  S TXT(I)=^(I,0)
    110         Q
    111 STR(PTR)        ; -- Return word processing text as long string for comparison
    112         N X,Y,I,ARRY
    113         S ARRY=$G(ORDIALOG(+$G(PTR),1)) Q:'$L(ARRY) ""
    114         S I=+$O(@ARRY@(0)),Y=$$UP^XLFSTR($G(@ARRY@(I,0)))
    115         F  S I=+$O(@ARRY@(I)) Q:'I  S X=$G(@ARRY@(I,0)),Y=Y_$$UP^XLFSTR(X)
    116         S Y=$TR(Y," ") ;remove all spaces, compare only text
    117         Q Y
    118 CHKACT(ORDERID,ORWSIG,ORWREL,ORWNATR)   ; Return error if can't sign/release order
    119         N ORACT,ORWERR
    120         ; begin case
    121         S ORACT=""
    122         I (ORWSIG=1),$D(^XUSEC("ORES",DUZ)) S ORACT="ES" G XC1
    123         I (ORWSIG=7),$D(^XUSEC("ORES",DUZ)) S ORACT="DS" G XC1
    124         I ORWREL,(ORWNATR="W") S ORACT="OC" G XC1
    125         I ORWREL S ORACT="RS" S:$P($G(^OR(100,+ORDERID,0)),U,16)<2 ORACT="ES"
    126 XC1     ; end case
    127         S ORWERR=""
    128         I $L(ORACT),$$VALID^ORCACT0(ORDERID,ORACT,.ORWERR,ORWNATR) S ORWERR=""
    129         Q ORWERR
    130 GTORITM(Y,ORIFN)        ;-- Get back the orderable item IEN
    131         S ORIFN=+ORIFN
    132         S Y=$$VALUE^ORCSAVE2(ORIFN,"ORDERABLE")
    133         Q
    134 GETPKG(Y,IFN)   ;Get package for an order
    135         N ORDERID,PKGID
    136         Q:+IFN<1
    137         S ORDERID=+IFN,Y=""
    138         S PKGID=$P(^OR(100,ORDERID,0),U,14)
    139         S:PKGID>0 Y=$P(^DIC(9.4,PKGID,0),U,2)
    140         Q
    141 ISCPLX(ORY,ORID)        ; 1: is complex order 0: is not
    142         Q:'$D(^OR(100,+ORID,0))
    143         N PKG
    144         S PKG=$P($G(^OR(100,+ORID,0)),U,14)
    145         S PKG=$$NMSP^ORCD(PKG)
    146         I PKG'="PS" Q
    147         N NUMCHDS,NOWID,NOWVAL
    148         S (NOWVAL,NOWID)=0
    149         S NUMCHDS=$P($G(^OR(100,+ORID,2,0)),U,4)
    150         I NUMCHDS>2 S ORY=1 Q
    151         I NUMCHDS=2 D
    152         . S ORY=1
    153         . S:$D(^OR(100,+ORID,4.5,"ID","NOW")) NOWID=$O(^("NOW",0))
    154         . S:NOWID NOWVAL=$G(^OR(100,+ORID,4.5,NOWID,1))
    155         I NOWVAL=1 S ORY=0 Q
    156         Q
    157 ORCPLX(ORY,ORID,ORACT)  ;Return children orders of the complex order
    158         Q:'$D(^OR(100,+ORID,0))
    159         N PKG,LACT,OELACT,ISNOW
    160         S PKG=$P($G(^OR(100,+ORID,0)),U,14)
    161         S PKG=$$NMSP^ORCD(PKG)
    162         I PKG'="PS" Q
    163         N CHLDCNT,IDX,X3
    164         S (CHLDCNT,IDX)=0
    165         S:$L($G(^OR(100,+ORID,2,0))) CHLDCNT=$P(^(0),U,4)
    166         I 'CHLDCNT Q
    167         F  S IDX=$O(^OR(100,+ORID,2,IDX)) Q:'IDX  D
    168         . S (LACT,OELACT,ISNOW)=0
    169         . D ISNOW(.ISNOW,IDX)
    170         . Q:ISNOW
    171         . S X3=$G(^OR(100,IDX,3))
    172         . S LACT=$P(X3,U,7)
    173         . F  S OELACT=$O(^OR(100,IDX,8,OELACT),-1) Q:OELACT
    174         . S:OELACT>LACT LACT=OELACT
    175         . S ORY(IDX)=IDX_";"_LACT
    176         Q
    177 CANRN(ORY,ORID) ; Check conjunction for renew.
    178         ; All conjunctioni = "And" return 1
    179         ; Has a "Then" return 0
    180         Q:'$G(^OR(100,+ORID,0))
    181         N PKG
    182         S PKG=$P($G(^OR(100,+ORID,0)),U,14)
    183         S PKG=$$NMSP^ORCD(PKG)
    184         I PKG'="PS" Q
    185         N INDX,INDY,CANRENEW
    186         S INDX=0
    187         S CANRENEW=1
    188         N CHID
    189         S CHID=0 F  S CHID=$O(^OR(100,+ORID,2,CHID)) Q:'CHID  D
    190         . N ORSTS,ACTIVE S ORSTS=0
    191         . S ORSTS=$P($G(^OR(100,CHID,3)),U,3)
    192         . S ACTIVE=$O(^ORD(100.01,"B","ACTIVE",0))
    193         . I ACTIVE'=ORSTS S CANRENEW=0
    194         I 'CANRENEW S ORY=CANRENEW Q
    195         F  S INDX=$O(^OR(100,+ORID,4.5,"ID","CONJ",INDX)) Q:'INDX  D
    196         . S INDY=0 F  S INDY=$O(^OR(100,+ORID,4.5,INDX,INDY)) Q:'INDY  D
    197         . . I $G(^(INDY))="T" S CANRENEW=0 Q
    198         . I CANRENEW=0 Q
    199         S ORY=CANRENEW
    200         Q
    201 ISNOW(ORY,ORID) ; Is first time now order?
    202         N SCH
    203         Q:'$D(^OR(100,+ORID,0))
    204         S SCH=""
    205         S SCH=$O(^OR(100,+ORID,4.5,"ID","SCHEDULE",0))
    206         S:SCH SCH=$G(^OR(100,+ORID,4.5,SCH,1))
    207         S:SCH="NOW" ORY=1
    208         Q
     1ORWDXR ; SLC/KCM/JDL - Utilites for Order Actions ;5/6/04  14:50
     2 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,125,131,134,141,149,187,190,213**;Dec 17, 1997
     3 ;
     4ISREL(VAL,ORIFN) ; Return true if an order has been released
     5 N STS S STS=$P(^OR(100,+ORIFN,3),U,3)
     6 S VAL=$S(STS=10:0,STS=11:0,1:1)  ; false if delayed or unreleased order
     7 Q
     8RENEW(REC,ORIFN,ORVP,ORNP,ORL,FLDS,CPLX,ORAPPT) ; Renew an order
     9 N ORDG
     10 N ORDUZ,ORSTS,OREVENT,ORCAT,ORDA,ORTS,ORNEW,ORCHECK,ORLOG,ORPKG
     11 N ORDIALOG,PRMT,X0
     12 N FSTDOSE,FST
     13 S (FSTDOSE,FST)=0
     14 I '$D(CPLX) S CPLX=0
     15 I '$G(ORAPPT) S ORAPPT=""
     16 S ORVP=ORVP_";DPT(",ORL(2)=ORL_";SC(",ORL=ORL(2)
     17 S X0=^OR(100,+ORIFN,0)
     18 S ORDG=$P(X0,U,11)
     19 S ORPKG=$P(X0,U,14)
     20 I $D(FLDS("ORCHECK")) M ORCHECK=FLDS("ORCHECK")
     21 I $P(X0,U,5)["101.41," D                        ; version 3
     22 . S ORDIALOG=+$P(X0,U,5),ORCAT=$P(^OR(100,+ORIFN,0),U,12)
     23 . D GETDLG^ORCD(ORDIALOG),GETORDER^ORCD(+ORIFN)
     24 . I CPLX S FSTDOSE=$P($G(ORDIALOG("B","FIRST DOSE")),U,2) S:'FSTDOSE FSTDOSE=$$PTR^ORCD("OR GTX NOW")
     25 . I FSTDOSE,$G(ORDIALOG(FSTDOSE,1)) K ORDIALOG(FSTDOSE,1)
     26 E  D                                            ; version 2.5 generic
     27 . S ORDIALOG=$O(^ORD(101.41,"B","OR GXTEXT WORD PROCESSING ORDE",0))
     28 . D GETDLG^ORCD(ORDIALOG)
     29 . S PRMT=$O(^ORD(101.41,"B","OR GTX WORD PROCESSING 1",0))
     30 . S ORDIALOG(PRMT,1)=$NA(^TMP("ORWORD",$J,PRMT,1))
     31 . M ^TMP("ORWORD",$J,PRMT,1)=^OR(100,+ORIFN,1)
     32 . S PRMT=$O(^ORD(101.41,"B","OR GTX START DATE/TIME",0))
     33 . I $P(X0,U,9) S ORDIALOG(PRMT,1)=$P(X0,U,9)
     34 I +FLDS(1)=999 D  ; generic order
     35 . S ORDIALOG($$PTR^ORCD("OR GTX START DATE/TIME"),1)=$P(FLDS(1),U,2)
     36 . S ORDIALOG($$PTR^ORCD("OR GTX STOP DATE/TIME"),1)=$P(FLDS(1),U,3)
     37 I ($O(^ORD(101.41,"AB","PS MEDS",0))>0),(+FLDS(1)=130)!(+FLDS(1)=135)!(+FLDS(1)=140),'$L($G(ORDIALOG($$PTR^ORCD("OR GTX SIG"),1))) D
     38 . N ORDOSE,ORDRUG,ORCAT,ORWPSOI,PROMPT,DRUG
     39 . S ORCAT=$P($G(^OR(100,+ORIFN,0)),U,12)
     40 . S PROMPT=$$PTR^ORCD("OR GTX INSTRUCTIONS")
     41 . S ORDRUG=$G(ORDIALOG($$PTR^ORCD("OR GTX DISPENSE DRUG"),1))
     42 . S ORWPSOI=+$G(ORDIALOG($$PTR^ORCD("OR GTX ORDERABLE ITEM"),1))
     43 . I ORWPSOI S ORWPSOI=+$P($G(^ORD(101.43,+ORWPSOI,0)),U,2)
     44 . D DOSE^PSSORUTL(.ORDOSE,ORWPSOI,$S(ORCAT="I":"U",1:"O"),ORVP)       ; dflt doses
     45 . D D1^ORCDPS2  ; set up ORDOSE
     46 . S DRUG=$G(ORDOSE("DD",+ORDRUG))
     47 . I DRUG,ORCAT="O" D RESETID^ORCDPS
     48 . D SIG^ORCDPS2
     49 I +FLDS(1)=140 D  ; outpatient meds
     50 . K ORDIALOG($$PTR^ORCD("OR GTX START DATE"),1) ; remove effective dt
     51 . S ORDIALOG($$PTR^ORCD("OR GTX REFILLS"),1)=$P(FLDS(1),U,4)
     52 . S ORDIALOG($$PTR^ORCD("OR GTX ROUTING"),1)=$P(FLDS(1),U,5)
     53 . S PRMT=$$PTR^ORCD("OR GTX WORD PROCESSING 1")
     54 . K ^TMP("ORWORD",$J,PRMT,1)
     55 . S I=1 F  S I=$O(FLDS(I)) Q:'I  S ^TMP("ORWORD",$J,PRMT,1,I-1,0)=FLDS(I)
     56 . S ^TMP("ORWORD",$J,PRMT,1,0)=U_U_(I-1)_U_(I-1)_U_DT_U
     57 . S ORDIALOG(PRMT,1)=$NA(^TMP("ORWORD",$J,PRMT,1))
     58 D RN^ORCSAVE
     59 S REC="" S ORIFN=+ORIFN_";"_ORDA D GETBYIFN^ORWORR(.REC,ORIFN)
     60 Q
     61RNWFLDS(LST,ORIFN)      ; Return fields for renew action
     62 ; LST(0)=RenewType^Start^Stop^Refills^Pickup  LST(n)=Comments
     63 N X0,DG,PKG,RNWTYPE,START,STOP,REFILLS
     64 S ORIFN=+ORIFN,X0=^OR(100,ORIFN,0),DG=$P(X0,U,11),PKG=$P(X0,U,14)
     65 S PKG=$E($P(^DIC(9.4,PKG,0),U,2),1,2),DG=$P(^ORD(100.98,DG,0),U,3)
     66 S LST(0)=$S(PKG="OR":999,PKG="PS"&(DG="O RX"):140,PKG="PS"&(DG="UD RX"):130,PKG="PS"&(DG="NV RX"):145,1:0)
     67 I +LST(0)=140 D
     68 . S LST(0)=LST(0)_U_U_U_+$$VAL(ORIFN,"REFILLS")_U_$$VAL(ORIFN,"PICKUP")
     69 . D WPVAL(.LST,ORIFN,"COMMENT")
     70 I +LST(0)=999 S LST(0)=LST(0)_U_$$VAL(ORIFN,"START")_U_$$VAL(ORIFN,"STOP")
     71 ; make sure start/stop times are relative times, otherwise use NOW, no Stop
     72 I +$P(LST(0),U,2) S $P(LST(0),U,2)="NOW"
     73 I +$P(LST(0),U,3)!($P(LST(0),U,3)="0") S $P(LST(0),U,3)=""
     74 Q
     75VAL(ORIFN,ID)   ; Return value for order response
     76 N DA S DA=+$O(^OR(100,ORIFN,4.5,"ID",ID,0))
     77 Q $G(^OR(100,ORIFN,4.5,DA,1))
     78WPVAL(TXT,ORIFN,ID)    ; Return word processing value
     79 N DA S DA=+$O(^OR(100,ORIFN,4.5,"ID",ID,0))
     80 S I=0 F  S I=$O(^OR(100,ORIFN,4.5,DA,2,I)) Q:'I  S TXT(I)=^(I,0)
     81 Q
     82CHKACT(ORDERID,ORWSIG,ORWREL,ORWNATR) ; Return error if can't sign/release order
     83 N ORACT,ORWERR
     84 ; begin case
     85 S ORACT=""
     86 I (ORWSIG=1),$D(^XUSEC("ORES",DUZ)) S ORACT="ES" G XC1
     87 I (ORWSIG=7),$D(^XUSEC("ORES",DUZ)) S ORACT="DS" G XC1
     88 I ORWREL,(ORWNATR="W") S ORACT="OC" G XC1
     89 I ORWREL S ORACT="RS" S:$P($G(^OR(100,+ORDERID,0)),U,16)<2 ORACT="ES"
     90XC1 ; end case
     91 S ORWERR=""
     92 I $L(ORACT),$$VALID^ORCACT0(ORDERID,ORACT,.ORWERR,ORWNATR) S ORWERR=""
     93 Q ORWERR
     94GTORITM(Y,ORIFN)        ;-- Get back the orderable item IEN
     95 S ORIFN=+ORIFN
     96 S Y=$$VALUE^ORCSAVE2(ORIFN,"ORDERABLE")
     97 Q
     98GETPKG(Y,IFN) ;Get package for an order
     99 N ORDERID,PKGID
     100 Q:+IFN<1
     101 S ORDERID=+IFN,Y=""
     102 S PKGID=$P(^OR(100,ORDERID,0),U,14)
     103 S:PKGID>0 Y=$P(^DIC(9.4,PKGID,0),U,2)
     104 Q
     105ISCPLX(ORY,ORID) ; 1: is complex order 0: is not
     106 Q:'$D(^OR(100,+ORID,0))
     107 N PKG
     108 S PKG=$P($G(^OR(100,+ORID,0)),U,14)
     109 S PKG=$$NMSP^ORCD(PKG)
     110 I PKG'="PS" Q
     111 N NUMCHDS,NOWID,NOWVAL
     112 S (NOWVAL,NOWID)=0
     113 S NUMCHDS=$P($G(^OR(100,+ORID,2,0)),U,4)
     114 I NUMCHDS>2 S ORY=1 Q
     115 I NUMCHDS=2 D
     116 . S ORY=1
     117 . S:$D(^OR(100,+ORID,4.5,"ID","NOW")) NOWID=$O(^("NOW",0))
     118 . S:NOWID NOWVAL=$G(^OR(100,+ORID,4.5,NOWID,1))
     119 I NOWVAL=1 S ORY=0 Q
     120 Q
     121ORCPLX(ORY,ORID,ORACT) ;Return children orders of the complex order
     122 Q:'$D(^OR(100,+ORID,0))
     123 N PKG,LACT,OELACT,ISNOW
     124 S PKG=$P($G(^OR(100,+ORID,0)),U,14)
     125 S PKG=$$NMSP^ORCD(PKG)
     126 I PKG'="PS" Q
     127 N CHLDCNT,IDX,X3
     128 S (CHLDCNT,IDX)=0
     129 S:$L($G(^OR(100,+ORID,2,0))) CHLDCNT=$P(^(0),U,4)
     130 I 'CHLDCNT Q
     131 F  S IDX=$O(^OR(100,+ORID,2,IDX)) Q:'IDX  D
     132 . S (LACT,OELACT,ISNOW)=0
     133 . D ISNOW(.ISNOW,IDX)
     134 . Q:ISNOW
     135 . S X3=$G(^OR(100,IDX,3))
     136 . S LACT=$P(X3,U,7)
     137 . F  S OELACT=$O(^OR(100,IDX,8,OELACT),-1) Q:OELACT
     138 . S:OELACT>LACT LACT=OELACT
     139 . S ORY(IDX)=IDX_";"_LACT
     140 Q
     141CANRN(ORY,ORID) ; Check conjunction for renew.
     142 ; All conjunctioni = "And" return 1
     143 ; Has a "Then" return 0
     144 Q:'$G(^OR(100,+ORID,0))
     145 N PKG
     146 S PKG=$P($G(^OR(100,+ORID,0)),U,14)
     147 S PKG=$$NMSP^ORCD(PKG)
     148 I PKG'="PS" Q
     149 N INDX,INDY,CANRENEW
     150 S INDX=0
     151 S CANRENEW=1
     152 N CHID
     153 S CHID=0 F  S CHID=$O(^OR(100,+ORID,2,CHID)) Q:'CHID  D
     154 . N ORSTS,ACTIVE S ORSTS=0
     155 . S ORSTS=$P($G(^OR(100,CHID,3)),U,3)
     156 . S ACTIVE=$O(^ORD(100.01,"B","ACTIVE",0))
     157 . I ACTIVE'=ORSTS S CANRENEW=0
     158 I 'CANRENEW S ORY=CANRENEW Q
     159 F  S INDX=$O(^OR(100,+ORID,4.5,"ID","CONJ",INDX)) Q:'INDX  D
     160 . S INDY=0 F  S INDY=$O(^OR(100,+ORID,4.5,INDX,INDY)) Q:'INDY  D
     161 . . I $G(^(INDY))="T" S CANRENEW=0 Q
     162 . I CANRENEW=0 Q
     163 S ORY=CANRENEW
     164 Q
     165ISNOW(ORY,ORID) ; Is first time now order?
     166 N SCH
     167 Q:'$D(^OR(100,+ORID,0))
     168 S SCH=""
     169 S SCH=$O(^OR(100,+ORID,4.5,"ID","SCHEDULE",0))
     170 S:SCH SCH=$G(^OR(100,+ORID,4.5,SCH,1))
     171 S:SCH="NOW" ORY=1
     172 Q
Note: See TracChangeset for help on using the changeset viewer.