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

    r613 r623  
    1 ORWU    ; SLC/KCM - General Utilites for Windows Calls; 2/28/01 [1/15/04 11:43am]
    2         ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,132,148,149,187,195,215,243**;Dec 17, 1997;Build 242
    3         ;
    4 DT(Y,X,%DT)     ; Internal Fileman Date/Time
    5         ; change the '00:00' that could be passed so Fileman doesn't reject
    6         I $L($P(X,"@",2)),("00000000"[$TR($P(X,"@",2),":","")) S $P(X,"@",2)="00:00:01"
    7         S %DT=$G(%DT,"TS") D ^%DT K %DT
    8         Q
    9 VALDT(Y,X,%DT)  ; Validate date/time
    10         S:'$D(%DT) %DT="TX" D ^%DT
    11         Q
    12 USERINFO(REC)   ; Relevant info for current user
    13         ; return DUZ^NAME^USRCLS^CANSIGN^ISPROVIDER^ORDERROLE^NOORDER^DTIME^
    14         ;        COUNTDOWN^ENABLEVERIFY^NOTIFYAPPS^MSGHANG^DOMAIN^SERVICE^
    15         ;        AUTOSAVE^INITTAB^LASTTAB^WEBACCESS^ALLOWHOLD^ISRPL^RPLLIST^
    16         ;        CORTABS^RPTTAB^STANUM^GECSTATUS^PRODACCT
    17         N X,ORRPL,ORRPL1,ORRPL2,ORTAB,CORTABS,RPTTAB,ORDT,OREFF,OREXP,ORDATEOK
    18         S REC=DUZ_U_$P(^VA(200,DUZ,0),U)
    19         S $P(REC,U,3)=$S($D(^XUSEC("ORES",DUZ)):3,$D(^XUSEC("ORELSE",DUZ)):2,$D(^XUSEC("OREMAS",DUZ)):1,1:0)
    20         S $P(REC,U,4)=$D(^XUSEC("ORES",DUZ))&$D(^XUSEC("PROVIDER",DUZ))
    21         S $P(REC,U,5)=$D(^XUSEC("PROVIDER",DUZ))
    22         S $P(REC,U,6)=$$ORDROLE
    23         S $P(REC,U,7)=$$GET^XPAR("USR^SYS^PKG","ORWOR DISABLE ORDERING",1,"I")
    24         S $P(REC,U,8)=$$GET^XPAR("USR^SYS","ORWOR TIMEOUT CHART",1,"I")
    25         I '$P(REC,U,8),$G(DTIME) S $P(REC,U,8)=DTIME
    26         S $P(REC,U,9)=$$GET^XPAR("USR^SYS^PKG","ORWOR TIMEOUT COUNTDOWN",1,"I")
    27         S X=$$GET^XPAR("USR^SYS^PKG","ORWOR ENABLE VERIFY",1,"I")
    28         S $P(REC,U,10)=$S(X=1:1,X=2:0,1:'$P(REC,U,7))
    29         S $P(REC,U,11)=$$GET^XPAR("USR^SYS^PKG","ORWOR BROADCAST MESSAGES",1,"I")
    30         S $P(REC,U,12)=$$GET^XPAR("USR^SYS^PKG","ORWOR AUTO CLOSE PT MSG",1,"I")
    31         S $P(REC,U,13)=$$KSP^XUPARAM("WHERE")  ; domain
    32         S $P(REC,U,14)=+$G(^VA(200,DUZ,5))     ; service/section
    33         S $P(REC,U,15)=$$GET^XPAR("USR^SYS^PKG","ORWOR AUTOSAVE NOTE",1,"I")
    34         S $P(REC,U,16)=$$GET^XPAR("USR^DIV^SYS^PKG","ORCH INITIAL TAB",1,"I")
    35         S $P(REC,U,17)=$$GET^XPAR("USR^DIV^SYS^PKG","ORCH USE LAST TAB",1,"I")
    36         S $P(REC,U,18)=$$GET^XPAR("USR^DIV^SYS^PKG","ORWOR DISABLE WEB ACCESS",1,"I")
    37         S $P(REC,U,19)=$$GET^XPAR("SYS^PKG","ORWOR DISABLE HOLD ORDERS",1,"I")
    38         ; 2 pieces added by PKS on 11/5/2001 for "Reports Only:"
    39         ; IA# 10060 allows read access to ^VA(200 file.
    40         S ORRPL=$G(^VA(200,DUZ,101))           ; RPL node.
    41         S ORRPL1=$P(ORRPL,U)
    42         S $P(REC,U,20)=ORRPL1                  ; ISRPL piece.
    43         S ORRPL2=$P(ORRPL,U,2)
    44         S $P(REC,U,21)=ORRPL2                  ; RPLLIST piece.
    45         ;
    46         ; Additional pieces for CPRS tabs access:
    47         ; IA# 10060 allows read access to ^VA(200.01013 multiple.
    48         S ORDT=DT                              ; Today.
    49         S (CORTABS,RPTTAB)=0
    50         S ORRPL=0
    51         F  S ORRPL=$O(^VA(200,DUZ,"ORD",ORRPL)) Q:ORRPL<1  D
    52         .S ORTAB=$G(^VA(200,DUZ,"ORD",ORRPL,0))
    53         .I ORTAB="" Q
    54         .S OREFF=$P(ORTAB,U,2)
    55         .S OREXP=$P(ORTAB,U,3)
    56         .S ORTAB=$P(ORTAB,U)
    57         .I ORTAB="" Q
    58         .S ORTAB=$G(^ORD(101.13,ORTAB,0))
    59         .I ORTAB="" Q
    60         .S ORTAB=$P(ORTAB,U)
    61         .I ORTAB="" Q
    62         .S ORTAB=$$UP^XLFSTR(ORTAB)
    63         .S ORDATEOK=1                             ; Default.
    64         .I ((OREFF="")!(OREFF>ORDT)) S ORDATEOK=0 ; Eff. date NG.
    65         .I ORDATEOK  D
    66         ..I OREXP="" Q                            ; No exp. date.
    67         ..I (OREXP<ORDT) S ORDATEOK=0             ; Exp. date NG.
    68         ..I (OREXP=ORDT) S ORDATEOK=0             ; Exp. date NG.
    69         .;
    70         .; Set TRUE if OK:
    71         .I ((ORTAB="COR")&(ORDATEOK)) S CORTABS=1
    72         .I ((ORTAB="RPT")&(ORDATEOK)) S RPTTAB=1
    73         ;
    74         ; When done, set all valid tabs for access:
    75         S $P(REC,U,22)=CORTABS                 ; "Core" tabs.
    76         S $P(REC,U,23)=RPTTAB                  ; "Reports" tab.
    77         ;
    78         S $P(REC,U,24)=$P($$SITE^VASITE,U,3)
    79         S $P(REC,U,25)=$$GET^XPAR("USR^TEA","PXRM GEC STATUS CHECK",1,"I")
    80         S $P(REC,U,26)=$$PROD^XUPROD
    81         Q
    82         ;
    83 HASKEY(VAL,KEY) ; returns TRUE if the user possesses the security key
    84         S VAL=''$D(^XUSEC(KEY,DUZ))
    85         Q
    86 HASOPTN(VAL,OPTION)     ; returns TRUE if the user has access to a menu option
    87         S VAL=+$$ACCESS^XQCHK(DUZ,OPTION)
    88         I VAL'>0 S VAL=0
    89         E  S VAL=1
    90         Q
    91 NPHASKEY(VAL,NP,KEY)    ; returns TRUE if the person has the security key
    92         S VAL=''$D(^XUSEC(KEY,NP))
    93         Q
    94 ORDROLE()       ; returns the role a person takes in ordering
    95         ; VAL: 0=nokey, 1=clerk, 2=nurse, 3=physician, 4=student, 5=bad keys
    96         ;I '$G(ORWCLVER) Q 0  ; version of client is to old for ordering
    97         I ($D(^XUSEC("OREMAS",DUZ))+$D(^XUSEC("ORELSE",DUZ))+$D(^XUSEC("ORES",DUZ)))>1 Q 5
    98         I $D(^XUSEC("OREMAS",DUZ)) Q 1                           ; clerk
    99         I $D(^XUSEC("ORELSE",DUZ)) Q 2                           ; nurse
    100         I $D(^XUSEC("ORES",DUZ)),$D(^XUSEC("PROVIDER",DUZ)) Q 3  ; doctor
    101         I $D(^XUSEC("PROVIDER",DUZ)) Q 4                         ; student
    102         Q 0
    103 VALIDSIG(ESOK,X)        ; returns TRUE if valid electronic signature
    104         S X=$$DECRYP^XUSRB1(X),ESOK=0                   ; network encrypted
    105         D HASH^XUSHSHP
    106         I X=$P($G(^VA(200,+DUZ,20)),U,4) S ESOK=1
    107         Q
    108 TOOLMENU(ORLST) ; returns a list of items for the Tools menu
    109         N ANENT
    110         S ANENT="ALL^"_$S($G(^VA(200,DUZ,5)):"^SRV.`"_+$G(^(5)),1:"")
    111         D GETLST^XPAR(.ORLST,ANENT,"ORWT TOOLS MENU","N")
    112         Q
    113 ACTLOC(LOC)     ; Function: returns TRUE if active hospital location
    114         ; IA# 10040.
    115         N D0,X I +$G(^SC(LOC,"OOS")) Q 0                ; screen out OOS entry
    116         S D0=+$G(^SC(LOC,42)) I D0 D WIN^DGPMDDCF Q 'X  ; chk out of svc wards
    117         S X=$G(^SC(LOC,"I")) I +X=0 Q 1                 ; no inactivate date
    118         I DT>$P(X,U)&($P(X,U,2)=""!(DT<$P(X,U,2))) Q 0  ; chk reactivate date
    119         Q 1                                             ; must still be active
    120         ;
    121 CLINLOC(Y,FROM,DIR)     ; Return a set of clinics from HOSPITAL LOCATION
    122         ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
    123         N I,IEN,CNT S I=0,CNT=44
    124         F  Q:I'<CNT  S FROM=$O(^SC("B",FROM),DIR) Q:FROM=""  D  ; IA# 10040.
    125         . S IEN="" F  S IEN=$O(^SC("B",FROM,IEN),DIR) Q:'IEN  D
    126         . . I ($P($G(^SC(IEN,0)),U,3)'="C")!('$$ACTLOC(IEN)) Q
    127         . . S I=I+1,Y(I)=IEN_"^"_FROM
    128         Q
    129 INPLOC(Y,FROM,DIR)      ;Return a set of wards from HOSPITAL LOCATION
    130         ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
    131         N I,IEN,CNT S I=0,CNT=44
    132         F  Q:I'<CNT  S FROM=$O(^SC("B",FROM),DIR) Q:FROM=""  D  ; IA# 10040.
    133         . S IEN="" F  S IEN=$O(^SC("B",FROM,IEN),DIR) Q:'IEN  D
    134         . . I ($P($G(^SC(IEN,0)),U,3)'="W") Q
    135         . . I '$$ACTLOC(IEN) Q
    136         . . S I=I+1,Y(I)=IEN_"^"_FROM
    137         Q
    138 HOSPLOC(Y,FROM,DIR)     ; Return a set of locations from HOSPITAL LOCATION
    139         ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
    140         N I,IEN,CNT S I=0,CNT=44
    141         F  Q:I'<CNT  S FROM=$O(^SC("B",FROM),DIR) Q:FROM=""  D  ; IA# 10040.
    142         . S IEN="" F  S IEN=$O(^SC("B",FROM,IEN),DIR) Q:'IEN  D
    143         . . Q:("CW"'[$P($G(^SC(IEN,0)),U,3)!('$$ACTLOC(IEN)))
    144         . . S I=I+1,Y(I)=IEN_"^"_FROM
    145         Q
    146 NEWPERS(ORY,ORFROM,ORDIR,ORKEY,ORDATE,ORVIZ,ORALL)      ; Return a set of names from the NEW PERSON file.
    147         ; SLC/PKS: Code moved to ORWU1 on 12/3/2002.
    148         D NP1^ORWU1
    149         Q
    150 GBLREF(VAL,FN)  ; return global reference for file number
    151         S VAL="" Q:'FN
    152         S VAL=$$ROOT^DILFD(+FN)
    153         ; I $E($RE(VAL))="," S VAL=$E(VAL,1,$L(VAL)-1)_")"
    154         ; I $E($RE(VAL))="(" S VAL=$P(VAL,"(",1)
    155         Q
    156 GENERIC(Y,FROM,DIR,REF) ; Return a set of entries from xref in REF
    157         ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
    158         N I,IEN,CNT S I=0,CNT=44
    159         F  Q:I'<CNT  S FROM=$O(@REF@(FROM),DIR) Q:FROM=""  D
    160         . S IEN="" F  S IEN=$O(@REF@(FROM,IEN),DIR) Q:'IEN  D
    161         . . S I=I+1,Y(I)=IEN_"^"_FROM
    162         Q
    163 EXTNAME(VAL,IEN,FN)     ; return external form of pointer
    164         ; IEN=internal number, FN=file number
    165         N REF S REF=$G(^DIC(FN,0,"GL")),VAL=""
    166         I $L(REF),+IEN S VAL=$P($G(@(REF_IEN_",0)")),U)
    167         Q
    168 PARAM(VAL,APARAM)       ; return a parameter value for a user
    169         ; call assumes current user, default entities, single instance
    170         S VAL=$$GET^XPAR("ALL",APARAM,1,"I")
    171         Q
    172 PARAMS(ORLIST,APARAM)   ; return a list of parameter values
    173         ; call assumes current user, default entities, multiple instances
    174         D GETLST^XPAR(.ORLIST,"ALL",APARAM,"Q")
    175         Q
    176 DEVICE(Y,FROM,DIR)      ; Return a subset of entries from the Device file
    177         ; .LST(n)=IEN;Name^DisplayName^Location^RMar^PLen
    178         ; FROM=text to $O from, DIR=$O direction
    179         N I,IEN,CNT,SHOW,X S I=0,CNT=20
    180         I FROM["<" S FROM=$RE($P($RE(FROM),"<  ",2))
    181         F  Q:I'<CNT  S FROM=$O(^%ZIS(1,"B",FROM),DIR) Q:FROM=""  D
    182         . S IEN=0 F  S IEN=$O(^%ZIS(1,"B",FROM,IEN)) Q:'IEN  D
    183         .. N X0,X1,X90,X91,X95,XTYPE,XSTYPE,XTIME,ORA,ORPX,POP
    184         .. Q:'$D(^%ZIS(1,IEN,0))  S X0=^(0),X1=$G(^(1)),X90=$G(^(90)),X91=$G(^(91)),X95=$G(^(95)),XSTYPE=$G(^("SUBTYPE")),XTIME=$G(^("TIME")),XTYPE=$G(^("TYPE"))
    185         .. I $E($G(^%ZIS(2,+XSTYPE,0)))'="P" Q  ;Printers only
    186         .. S X=$P(XTYPE,"^") I X'="TRM",X'="HG",X'="HFS",X'="CHAN" Q  ;Device Types
    187         .. S X=X0 I ($P(X,U,2)="0")!($P(X,U,12)=2) Q  ;Queuing allowed
    188         .. S X=+X90 I X,(X'>DT) Q  ;Out of Service
    189         .. I XTIME]"" S ORA=$P(XTIME,"^"),ORPX=$P($H,",",2),ORPCNT=ORPX\60#60+(ORPX\3600*100),ORPX=$P(ORA,"-",2) I ORPX'<ORA&(ORPCNT'>ORPX&(ORPCNT'<ORA))!(ORPX<ORA&(ORPCNT'<ORA!(ORPCNT'>ORPX))) Q  ;Prohibited Times
    190         .. S POP=0
    191         .. I X95]"" S ORPX=$G(DUZ(0)) I ORPX'="@" S POP=1 F ORA=1:1:$L(ORPX) I X95[$E(ORPX,ORA) S POP=0 Q
    192         .. Q:POP  ;Security check
    193         .. S SHOW=$P(X0,U) I SHOW'=FROM S SHOW=FROM_"  <"_SHOW_">"
    194         .. S I=I+1,Y(I)=IEN_";"_$P(X0,U)_U_SHOW_U_$P(X1,U)_U_$P(X91,U)_U_$P(X91,U,3)
    195         Q
    196 URGENCY(Y)      ; -- retrieve set values from dd for discharge summary urgency
    197         N ORDD,I,X
    198         D FIELD^DID(8925,.09,"","POINTER","ORDD")
    199         F I=1:1 S X=$P(ORDD("POINTER"),";",I) Q:X=""   S Y(I)=$TR(X,":","^")
    200         Q
    201 PATCH(VAL,X)    ; Return 1 if patch X is installed
    202         S VAL=$$PATCH^XPDUTL(X)
    203         Q
    204 VERSION(VAL,X)  ;Return version of package or namespace
    205         S VAL=$$VERSION^XPDUTL(X)
    206         Q
    207 VERSRV(VAL,X,CLVER)     ; Return server version of option name
    208         S ORWCLVER=$G(CLVER)  ; leave in partition for session
    209         N BADVAL,ORLST
    210         D FIND^DIC(19,"",1,"X",X,1,,,,"ORLST")
    211         I 'ORLST("DILIST",0) S VAL="0.0.0.0" Q
    212         S VAL=ORLST("DILIST","ID",1,1)
    213         S VAL=$P(VAL,"version ",2)
    214         S BADVAL=0
    215         I $P(VAL,".",1)="" S BADVAL=1
    216         I $P(VAL,".",2)="" S BADVAL=1
    217         I $P(VAL,".",3)="" S BADVAL=1
    218         I $P(VAL,".",4)="" S BADVAL=1
    219         I ((BADVAL)!('VAL)!(VAL="")) S VAL="0.0.0.0"
    220         Q
     1ORWU ; SLC/KCM - General Utilites for Windows Calls; 2/28/01 [1/15/04 11:43am]
     2 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,132,148,149,187,195,215**;Dec 17, 1997
     3 ;
     4DT(Y,X,%DT) ; Internal Fileman Date/Time
     5 ; change the '00:00' that could be passed so Fileman doesn't reject
     6 I $L($P(X,"@",2)),("00000000"[$TR($P(X,"@",2),":","")) S $P(X,"@",2)="00:00:01"
     7 S %DT=$G(%DT,"TS") D ^%DT K %DT
     8 Q
     9VALDT(Y,X,%DT) ; Validate date/time
     10 S:'$D(%DT) %DT="TX" D ^%DT
     11 Q
     12USERINFO(REC) ; Relevant info for current user
     13 ; return DUZ^NAME^USRCLS^CANSIGN^ISPROVIDER^ORDERROLE^NOORDER^DTIME^
     14 ;        COUNTDOWN^ENABLEVERIFY^NOTIFYAPPS^MSGHANG^DOMAIN^SERVICE^
     15 ;        AUTOSAVE^INITTAB^LASTTAB^WEBACCESS^ALLOWHOLD^ISRPL^RPLLIST^
     16 ;        CORTABS^RPTTAB^STANUM^GECSTATUS^PRODACCT
     17 N X,ORRPL,ORRPL1,ORRPL2,ORTAB,CORTABS,RPTTAB,ORDT,OREFF,OREXP,ORDATEOK
     18 S REC=DUZ_U_$P(^VA(200,DUZ,0),U)
     19 S $P(REC,U,3)=$S($D(^XUSEC("ORES",DUZ)):3,$D(^XUSEC("ORELSE",DUZ)):2,$D(^XUSEC("OREMAS",DUZ)):1,1:0)
     20 S $P(REC,U,4)=$D(^XUSEC("ORES",DUZ))&$D(^XUSEC("PROVIDER",DUZ))
     21 S $P(REC,U,5)=$D(^XUSEC("PROVIDER",DUZ))
     22 S $P(REC,U,6)=$$ORDROLE
     23 S $P(REC,U,7)=$$GET^XPAR("USR^SYS^PKG","ORWOR DISABLE ORDERING",1,"I")
     24 S $P(REC,U,8)=$$GET^XPAR("USR^SYS","ORWOR TIMEOUT CHART",1,"I")
     25 I '$P(REC,U,8),$G(DTIME) S $P(REC,U,8)=DTIME
     26 S $P(REC,U,9)=$$GET^XPAR("USR^SYS^PKG","ORWOR TIMEOUT COUNTDOWN",1,"I")
     27 S X=$$GET^XPAR("USR^SYS^PKG","ORWOR ENABLE VERIFY",1,"I")
     28 S $P(REC,U,10)=$S(X=1:1,X=2:0,1:'$P(REC,U,7))
     29 S $P(REC,U,11)=$$GET^XPAR("USR^SYS^PKG","ORWOR BROADCAST MESSAGES",1,"I")
     30 S $P(REC,U,12)=$$GET^XPAR("USR^SYS^PKG","ORWOR AUTO CLOSE PT MSG",1,"I")
     31 S $P(REC,U,13)=$$KSP^XUPARAM("WHERE")  ; domain
     32 S $P(REC,U,14)=+$G(^VA(200,DUZ,5))     ; service/section
     33 S $P(REC,U,15)=$$GET^XPAR("USR^SYS^PKG","ORWOR AUTOSAVE NOTE",1,"I")
     34 S $P(REC,U,16)=$$GET^XPAR("USR^DIV^SYS^PKG","ORCH INITIAL TAB",1,"I")
     35 S $P(REC,U,17)=$$GET^XPAR("USR^DIV^SYS^PKG","ORCH USE LAST TAB",1,"I")
     36 S $P(REC,U,18)=$$GET^XPAR("USR^DIV^SYS^PKG","ORWOR DISABLE WEB ACCESS",1,"I")
     37 S $P(REC,U,19)=$$GET^XPAR("SYS^PKG","ORWOR DISABLE HOLD ORDERS",1,"I")
     38 ; 2 pieces added by PKS on 11/5/2001 for "Reports Only:"
     39 ; IA# 10060 allows read access to ^VA(200 file.
     40 S ORRPL=$G(^VA(200,DUZ,101))           ; RPL node.
     41 S ORRPL1=$P(ORRPL,U)
     42 S $P(REC,U,20)=ORRPL1                  ; ISRPL piece.
     43 S ORRPL2=$P(ORRPL,U,2)
     44 S $P(REC,U,21)=ORRPL2                  ; RPLLIST piece.
     45 ;
     46 ; Additional pieces for CPRS tabs access:
     47 ; IA# 10060 allows read access to ^VA(200.01013 multiple.
     48 S ORDT=DT                              ; Today.
     49 S (CORTABS,RPTTAB)=0
     50 S ORRPL=0
     51 F  S ORRPL=$O(^VA(200,DUZ,"ORD",ORRPL)) Q:ORRPL<1  D
     52 .S ORTAB=$G(^VA(200,DUZ,"ORD",ORRPL,0))
     53 .I ORTAB="" Q
     54 .S OREFF=$P(ORTAB,U,2)
     55 .S OREXP=$P(ORTAB,U,3)
     56 .S ORTAB=$P(ORTAB,U)
     57 .I ORTAB="" Q
     58 .S ORTAB=$G(^ORD(101.13,ORTAB,0))
     59 .I ORTAB="" Q
     60 .S ORTAB=$P(ORTAB,U)
     61 .I ORTAB="" Q
     62 .S ORTAB=$$UP^XLFSTR(ORTAB)
     63 .S ORDATEOK=1                             ; Default.
     64 .I ((OREFF="")!(OREFF>ORDT)) S ORDATEOK=0 ; Eff. date NG.
     65 .I ORDATEOK  D
     66 ..I OREXP="" Q                            ; No exp. date.
     67 ..I (OREXP<ORDT) S ORDATEOK=0             ; Exp. date NG.
     68 ..I (OREXP=ORDT) S ORDATEOK=0             ; Exp. date NG.
     69 .;
     70 .; Set TRUE if OK:
     71 .I ((ORTAB="COR")&(ORDATEOK)) S CORTABS=1
     72 .I ((ORTAB="RPT")&(ORDATEOK)) S RPTTAB=1
     73 ;
     74 ; When done, set all valid tabs for access:
     75 S $P(REC,U,22)=CORTABS                 ; "Core" tabs.
     76 S $P(REC,U,23)=RPTTAB                  ; "Reports" tab.
     77 ;
     78 S $P(REC,U,24)=$P($$SITE^VASITE,U,3)
     79 S $P(REC,U,25)=$$GET^XPAR("USR^TEA","PXRM GEC STATUS CHECK",1,"I")
     80 S $P(REC,U,26)=$$PROD^XUPROD
     81 Q
     82 ;
     83HASKEY(VAL,KEY) ; returns TRUE if the user possesses the security key
     84 S VAL=''$D(^XUSEC(KEY,DUZ))
     85 Q
     86HASOPTN(VAL,OPTION) ; returns TRUE if the user has access to a menu option
     87 S VAL=+$$ACCESS^XQCHK(DUZ,OPTION)
     88 I VAL'>0 S VAL=0
     89 E  S VAL=1
     90 Q
     91NPHASKEY(VAL,NP,KEY)    ; returns TRUE if the person has the security key
     92 S VAL=''$D(^XUSEC(KEY,NP))
     93 Q
     94ORDROLE()    ; returns the role a person takes in ordering
     95 ; VAL: 0=nokey, 1=clerk, 2=nurse, 3=physician, 4=student, 5=bad keys
     96 ;I '$G(ORWCLVER) Q 0  ; version of client is to old for ordering
     97 I ($D(^XUSEC("OREMAS",DUZ))+$D(^XUSEC("ORELSE",DUZ))+$D(^XUSEC("ORES",DUZ)))>1 Q 5
     98 I $D(^XUSEC("OREMAS",DUZ)) Q 1                           ; clerk
     99 I $D(^XUSEC("ORELSE",DUZ)) Q 2                           ; nurse
     100 I $D(^XUSEC("ORES",DUZ)),$D(^XUSEC("PROVIDER",DUZ)) Q 3  ; doctor
     101 I $D(^XUSEC("PROVIDER",DUZ)) Q 4                         ; student
     102 Q 0
     103VALIDSIG(ESOK,X) ; returns TRUE if valid electronic signature
     104 S X=$$DECRYP^XUSRB1(X),ESOK=0                   ; network encrypted
     105 D HASH^XUSHSHP
     106 I X=$P($G(^VA(200,+DUZ,20)),U,4) S ESOK=1
     107 Q
     108TOOLMENU(ORLST) ; returns a list of items for the Tools menu
     109 N ANENT
     110 S ANENT="ALL^"_$S($G(^VA(200,DUZ,5)):"^SRV.`"_+$G(^(5)),1:"")
     111 D GETLST^XPAR(.ORLST,ANENT,"ORWT TOOLS MENU","N")
     112 Q
     113ACTLOC(LOC) ; Function: returns TRUE if active hospital location
     114 ; IA# 10040.
     115 N D0,X I +$G(^SC(LOC,"OOS")) Q 0                ; screen out OOS entry
     116 S D0=+$G(^SC(LOC,42)) I D0 D WIN^DGPMDDCF Q 'X  ; chk out of svc wards
     117 S X=$G(^SC(LOC,"I")) I +X=0 Q 1                 ; no inactivate date
     118 I DT>$P(X,U)&($P(X,U,2)=""!(DT<$P(X,U,2))) Q 0  ; chk reactivate date
     119 Q 1                                             ; must still be active
     120 ;
     121CLINLOC(Y,FROM,DIR) ; Return a set of clinics from HOSPITAL LOCATION
     122 ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
     123 N I,IEN,CNT S I=0,CNT=44
     124 F  Q:I'<CNT  S FROM=$O(^SC("B",FROM),DIR) Q:FROM=""  D  ; IA# 10040.
     125 . S IEN="" F  S IEN=$O(^SC("B",FROM,IEN),DIR) Q:'IEN  D
     126 . . I ($P($G(^SC(IEN,0)),U,3)'="C")!('$$ACTLOC(IEN)) Q
     127 . . S I=I+1,Y(I)=IEN_"^"_FROM
     128 Q
     129INPLOC(Y,FROM,DIR) ;Return a set of wards from HOSPITAL LOCATION
     130 ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
     131 N I,IEN,CNT S I=0,CNT=44
     132 F  Q:I'<CNT  S FROM=$O(^SC("B",FROM),DIR) Q:FROM=""  D  ; IA# 10040.
     133 . S IEN="" F  S IEN=$O(^SC("B",FROM,IEN),DIR) Q:'IEN  D
     134 . . I ($P($G(^SC(IEN,0)),U,3)'="W") Q
     135 . . I '$$ACTLOC(IEN) Q
     136 . . S I=I+1,Y(I)=IEN_"^"_FROM
     137 Q
     138HOSPLOC(Y,FROM,DIR) ; Return a set of locations from HOSPITAL LOCATION
     139 ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
     140 N I,IEN,CNT S I=0,CNT=44
     141 F  Q:I'<CNT  S FROM=$O(^SC("B",FROM),DIR) Q:FROM=""  D  ; IA# 10040.
     142 . S IEN="" F  S IEN=$O(^SC("B",FROM,IEN),DIR) Q:'IEN  D
     143 . . Q:("CW"'[$P($G(^SC(IEN,0)),U,3)!('$$ACTLOC(IEN)))
     144 . . S I=I+1,Y(I)=IEN_"^"_FROM
     145 Q
     146NEWPERS(ORY,ORFROM,ORDIR,ORKEY,ORDATE,ORVIZ,ORALL) ; Return a set of names from the NEW PERSON file.
     147 ; SLC/PKS: Code moved to ORWU1 on 12/3/2002.
     148 D NP1^ORWU1
     149 Q
     150GBLREF(VAL,FN) ; return global reference for file number
     151 S VAL="" Q:'FN
     152 S VAL=$$ROOT^DILFD(+FN)
     153 ; I $E($RE(VAL))="," S VAL=$E(VAL,1,$L(VAL)-1)_")"
     154 ; I $E($RE(VAL))="(" S VAL=$P(VAL,"(",1)
     155 Q
     156GENERIC(Y,FROM,DIR,REF) ; Return a set of entries from xref in REF
     157 ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
     158 N I,IEN,CNT S I=0,CNT=44
     159 F  Q:I'<CNT  S FROM=$O(@REF@(FROM),DIR) Q:FROM=""  D
     160 . S IEN="" F  S IEN=$O(@REF@(FROM,IEN),DIR) Q:'IEN  D
     161 . . S I=I+1,Y(I)=IEN_"^"_FROM
     162 Q
     163EXTNAME(VAL,IEN,FN) ; return external form of pointer
     164 ; IEN=internal number, FN=file number
     165 N REF S REF=$G(^DIC(FN,0,"GL")),VAL=""
     166 I $L(REF),+IEN S VAL=$P($G(@(REF_IEN_",0)")),U)
     167 Q
     168PARAM(VAL,APARAM)       ; return a parameter value for a user
     169 ; call assumes current user, default entities, single instance
     170 S VAL=$$GET^XPAR("ALL",APARAM,1,"I")
     171 Q
     172DEVICE(Y,FROM,DIR) ; Return a subset of entries from the Device file
     173 ; .LST(n)=IEN;Name^DisplayName^Location^RMar^PLen
     174 ; FROM=text to $O from, DIR=$O direction
     175 N I,IEN,CNT,SHOW,X S I=0,CNT=20
     176 I FROM["<" S FROM=$RE($P($RE(FROM),"<  ",2))
     177 F  Q:I'<CNT  S FROM=$O(^%ZIS(1,"B",FROM),DIR) Q:FROM=""  D
     178 . S IEN=0 F  S IEN=$O(^%ZIS(1,"B",FROM,IEN)) Q:'IEN  D
     179 .. N X0,X1,X90,X91,X95,XTYPE,XSTYPE,XTIME,ORA,ORPX,POP
     180 .. Q:'$D(^%ZIS(1,IEN,0))  S X0=^(0),X1=$G(^(1)),X90=$G(^(90)),X91=$G(^(91)),X95=$G(^(95)),XSTYPE=$G(^("SUBTYPE")),XTIME=$G(^("TIME")),XTYPE=$G(^("TYPE"))
     181 .. I $E($G(^%ZIS(2,+XSTYPE,0)))'="P" Q  ;Printers only
     182 .. S X=$P(XTYPE,"^") I X'="TRM",X'="HG",X'="HFS",X'="CHAN" Q  ;Device Types
     183 .. S X=X0 I ($P(X,U,2)="0")!($P(X,U,12)=2) Q  ;Queuing allowed
     184 .. S X=+X90 I X,(X'>DT) Q  ;Out of Service
     185 .. I XTIME]"" S ORA=$P(XTIME,"^"),ORPX=$P($H,",",2),ORPCNT=ORPX\60#60+(ORPX\3600*100),ORPX=$P(ORA,"-",2) I ORPX'<ORA&(ORPCNT'>ORPX&(ORPCNT'<ORA))!(ORPX<ORA&(ORPCNT'<ORA!(ORPCNT'>ORPX))) Q  ;Prohibited Times
     186 .. S POP=0
     187 .. I X95]"" S ORPX=$G(DUZ(0)) I ORPX'="@" S POP=1 F ORA=1:1:$L(ORPX) I X95[$E(ORPX,ORA) S POP=0 Q
     188 .. Q:POP  ;Security check
     189 .. S SHOW=$P(X0,U) I SHOW'=FROM S SHOW=FROM_"  <"_SHOW_">"
     190 .. S I=I+1,Y(I)=IEN_";"_$P(X0,U)_U_SHOW_U_$P(X1,U)_U_$P(X91,U)_U_$P(X91,U,3)
     191 Q
     192URGENCY(Y) ; -- retrieve set values from dd for discharge summary urgency
     193 N ORDD,I,X
     194 D FIELD^DID(8925,.09,"","POINTER","ORDD")
     195 F I=1:1 S X=$P(ORDD("POINTER"),";",I) Q:X=""   S Y(I)=$TR(X,":","^")
     196 Q
     197PATCH(VAL,X) ; Return 1 if patch X is installed
     198 S VAL=$$PATCH^XPDUTL(X)
     199 Q
     200VERSION(VAL,X) ;Return version of package or namespace
     201 S VAL=$$VERSION^XPDUTL(X)
     202 Q
     203VERSRV(VAL,X,CLVER)   ; Return server version of option name
     204 S ORWCLVER=$G(CLVER)  ; leave in partition for session
     205 N BADVAL,ORLST
     206 D FIND^DIC(19,"",1,"X",X,1,,,,"ORLST")
     207 I 'ORLST("DILIST",0) S VAL="0.0.0.0" Q
     208 S VAL=ORLST("DILIST","ID",1,1)
     209 S VAL=$P(VAL,"version ",2)
     210 S BADVAL=0
     211 I $P(VAL,".",1)="" S BADVAL=1
     212 I $P(VAL,".",2)="" S BADVAL=1
     213 I $P(VAL,".",3)="" S BADVAL=1
     214 I $P(VAL,".",4)="" S BADVAL=1
     215 I ((BADVAL)!('VAL)!(VAL="")) S VAL="0.0.0.0"
     216 Q
Note: See TracChangeset for help on using the changeset viewer.