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/INPATIENT_MEDICATIONS-PSJ-PSIV-PSG--PSGW/PSJHLU.m

    r613 r623  
    1 PSJHLU  ;BIR/RLW-UTILITIES USED IN BUILDING HL7 SEGMENTS ;20 Apr 98 / 9:58 AM
    2         ;;5.0; INPATIENT MEDICATIONS ;**1,56,72,102,134**;16 DEC 97;Build 124
    3         ;
    4         ; Reference to ^PS(52.6 is supported by DBIA# 1231.
    5         ; Reference to ^PS(52.7 is supported by DBIA# 2173.
    6         ; Reference to ^VA(200 is supported by DBIA 10060.
    7         ; Reference to ^PS(55 is supported by DBIA# 2191.
    8         ;
    9 INIT    ; set up HL7 application variables
    10         S PSJHLSDT="PS",PSJHINST=$P($$SITE^VASITE(),"^")
    11         S PSJCLEAR="K FIELD F J=0:1:LIMIT S FIELD(J)="""""
    12         Q
    13         ;
    14 SEGMENT(LIMIT)  ;
    15         K SEGMENT
    16         N SUBSEG,SEGLENGT S SUBSEG=0,SEGMENT="" F J=0:1:LIMIT D
    17         .I SEGMENT']"" S SEGMENT=FIELD(J) Q
    18         .S SEGMENT=SEGMENT_"|"_FIELD(J)
    19         F  S SEGLENGT=$L(SEGMENT) D  Q:$L(SEGMENT)'>246
    20         .I SEGLENGT'>246 S SEGMENT(SUBSEG)=SEGMENT
    21         .I SEGLENGT>245 S SEGMENT(SUBSEG)=$E(SEGMENT,1,245),SUBSEG=SUBSEG+1 D
    22         ..S SEGMENT=$E(SEGMENT,246,SEGLENGT),SEGMENT(SUBSEG)=$E(SEGMENT,1,245)
    23 SET     S PSJI=PSJI+1,^TMP("PSJHLS",$J,PSJHLSDT,PSJI)=SEGMENT(0)
    24         F J=1:1 Q:'$D(SEGMENT(J))  S ^TMP("PSJHLS",$J,PSJHLSDT,PSJI,J)=SEGMENT(J)
    25         Q
    26         ;
    27 SEGMENT2        ; Retrieve text fields
    28         K SEGMENT S JJ=0 F  S JJ=$O(@(PSJORDER_"12,"_JJ_")")) Q:'JJ  S SEGMENT(JJ-1)=$G(@(PSJORDER_"12,"_JJ_",0)"))
    29         I $D(SEGMENT(0)) S SEGMENT(0)="NTE|6|L|"_$S($G(PSJBCBU):SEGMENT(0),1:$$ESC^ORHLESC(SEGMENT(0))) D
    30         .D SET^PSJHLU K SEGMENT,JJ
    31         I $P($G(@(PSJORDER_"6)")),"^")]"" K SEGMENT S SEGMENT(0)="NTE|21|L|"_$S($G(PSJBCBU):$P($G(@(PSJORDER_"6)")),"^"),1:$$ESC^ORHLESC($P($G(@(PSJORDER_"6)")),"^"))) D
    32         .D SET^PSJHLU K SEGMENT
    33         I PSJORDER["P",$P($G(@(PSJORDER_"9)")),"^",2)]"" K SEGMENT S SEGMENT(0)="NTE|21|L|"_$S($G(PSJBCBU):$P($G(@(PSJORDER_"9)")),"^",2),1:$$ESC^ORHLESC($P($G(@(PSJORDER_"9)")),"^",2))) D
    34         .D SET^PSJHLU K SEGMENT
    35         Q
    36         ;
    37 CALL(HLEVN)     ; call DHCP HL7 package -or- protocol, to pass Orders
    38         ; HLEVN = number of segments in message
    39         K CLERK,DDIEN,DDNUM,DOSEFORM,DOSEOR,FIELD,IVTYPE,LIMIT,NAME,NDNODE,NODE1,NODE2,PRODNAME,PROVIDER,PSGS0Y,PSJHINST,PSJHLSDT,PSJI,PSJORDER,PSOC,PSREASON,ROOMBED,SPDIEN,SEGMENT
    40         I $G(PSJBCBU)=1 M PSJNAME=^TMP("PSJHLS",$J,"PS") Q
    41         S PSJMSG="^TMP(""PSJHLS"",$J,""PS"")"
    42         D MSG^XQOR("PS EVSEND OR",.PSJMSG)
    43         Q
    44         ;
    45 IVTYPE(PSJORDER)        ; check whether a back-door order is Inpatient IV or IV fluid
    46         I RXORDER["V",$P($G(@(PSJORDER_"0)")),"^",4)'="A" Q "I"
    47         I RXORDER["P" I $P($G(@(PSJORDER_"0)")),"^",4)'="F" S IVTYPE="" Q IVTYPE
    48         N SUB,AD,SOL,IVTYPE,NODE1 S SUB=0,IVTYPE="F"
    49         ;naked reference on line below refers to the full indirect reference of PSJORDER_ which is from ^PS(55,DFN,"IV",PSJORD
    50         F TYPE="AD","SOL" S SUB=0 F  S SUB=$O(@(PSJORDER_""""_TYPE_""""_","_SUB_")")) Q:(SUB="")!(IVTYPE="I")  S NODE1=$G(^(SUB,0)) Q:NODE1=""  D  Q:IVTYPE="I"
    51         .I TYPE="AD" D
    52         ..I '$P($G(^PS(52.6,$P(NODE1,"^"),0)),"^",13) S IVTYPE="I"
    53         .D:TYPE="SOL"
    54         ..S:'$P($G(^PS(52.7,$P(NODE1,"^"),0)),"^",13) IVTYPE="I"
    55         Q IVTYPE
    56 ENI     ;Calculate Frequency for IV orders
    57         N INFUSE
    58         I X?.E1L.E S INFUSE=$$ENLU^PSGMI(X) Q:(INFUSE="TITRATE")!(INFUSE="BOLUS")!($P(INFUSE," ")="INFUSE")!($P(INFUSE," ")="Infuse")
    59         Q:(X="TITRATE")!(X="BOLUS")!($P(X," ")="INFUSE")!($P(X," ")="Infuse")
    60         Q:$$INTRMT(X)
    61         K:$L(X)<1!($L(X)>30)!(X["""")!($A(X)=45) X I '$D(X) Q
    62         I X["=" D  Q   ; NOIS LOU-0501-42191
    63         .N X2,X1 S X1=$P(X,"="),X2=$P(X,"=",2)
    64         .I X1["ML/HR",(+X1=$P(X1,"ML/HR"))!(+X1=$P(X1," ML/HR")) D
    65         ..S X1=$TR(X1,"ML/HR","ml/hr")
    66         .I X2["ML/HR",(+X2=$P(X2,"ML/HR"))!(+X2=$P(X2," ML/HR")) D
    67         ..S X2=$TR(X2,"ML/HR","ml/hr")
    68         .I X1[" ml/hr",(+X1=$P(X1," ml/hr")) D
    69         ..S X1=$P(X1," ml/hr")_$P(X1," ml/hr",2,9999)
    70         .I X2[" ml/hr",(+X2=$P(X2," ml/hr")) D
    71         ..S X2=$P(X2," ml/hr")_$P(X2," ml/hr",2,9999)
    72         .I X1["ml/hr",(+X1=$P(X1,"ml/hr")) D
    73         ..S X1=$P(X1,"ml/hr")_$P(X1,"ml/hr",2,9999)
    74         .I X2["ml/hr",(+X2=$P(X2,"ml/hr")) D
    75         ..S X2=$P(X2,"ml/hr")_$P(X2,"ml/hr",2,9999)
    76         .I X2'=+X2 D
    77         ..I ($P(X2,"@",2,999)'=+$P(X2,"@",2,999)!(+$P(X2,"@",2,999)<0)) K X Q
    78         .I X1=+X1 S X1=X1_" ml/hr"
    79         .I X2=+X2 S X2=X2_" ml/hr"
    80         .S:$P(X2,"@")=+X2 $P(X2,"@")=$P(X2,"@")_" ml/hr"
    81         .S X=X1_"="_X2
    82         I X'=+X,($P($TR(X," ml/hr",""),"@",2,999)'=+$P($TR(X," ml/hr",""),"@",2,999)!(+$P(X,"@",2,999)<0)),($P(X," ml/hr")'=+$P(X," ml/hr")!(+$P(X," ml/hr")<0)) Q:(X>0&($E(X)=0))  K X Q
    83         I X=+X!(X>0&($E(X)=0)) S X=X_" ml/hr" D SPSOL S FREQ=$S('X:0,1:SPSOL\X*60+(SPSOL#X/X*60+.5)\1) K SPSOL Q
    84         I X[" ml/hr" D SPSOL S FREQ=$S('X:0,1:SPSOL\X*60+(SPSOL#X/X*60+.5)\1) K SPSOL Q
    85         S SPSOL=$P(X,"@",2) S:$P(X,"@")=+X $P(X,"@")=$P(X,"@")_" ml/hr" S FREQ=$S('SPSOL:0,1:1440/SPSOL\1) K SPSOL
    86         Q
    87 SPSOL   S SPSOL=+TVOLUME Q
    88 INTRMT(X)       ;
    89         Q:'$P(X," ") 0
    90         Q:$P(X," ",2)="Minutes" 1
    91         Q:$P(X," ",2)="Hours" 1
    92         Q 0
    93 IVCAT(DFN,PSJORD,PARRAY)        ; This returns the IV CATEGORY based on the IV TYPE and CHEMO TYPE (not what is already in the IV CATEGORY field)
    94         ;  Passed in:  PSJORDER (file root of order)
    95         N NODE,TYP,CHEMTYP,INTSYR,ND2P5
    96         S (CHEMTYP,INTSYR)=""
    97         S TYP=$G(P(4)),INTSYR=$G(P(5)),CHEMTYP=$G(P(23))
    98         I TYP="",$G(PSJORD)["V" S NODE=$G(^PS(55,DFN,"IV",+PSJORD,0)) S TYP=$P(NODE,"^",4),INTSYR=$P(NODE,"^",5),CHEMTYP=$P(NODE,"^",23)
    99         I TYP="",$G(PSJORD)["P" S NODE=$G(^PS(53.1,+PSJORD,8)) S TYP=$P(NODE,"^"),INTSYR=$P(NODE,"^",4),CHEMTYP=$P(NODE,"^",2)
    100         I TYP="" S TYP=$G(PARRAY(4)),INTSYR=$G(PARRAY(5)),CHEMTYP=$G(PARRAY(23))
    101         Q:$G(TYP)="" ""
    102         S CAT=$S(",A,H,"[(","_TYP_","):"C",TYP="C"&(",A,H,S,"[(","_CHEMTYP_",")&'INTSYR):"C",TYP="C"&(CHEMTYP="P"):"I",TYP="S"&'INTSYR:"C",TYP="P":"I",$G(INTSYR):"I",1:"")
    103         Q CAT
    104 ZRX     ; Perform outbound processing
    105         S LIMIT=6 X PSJCLEAR
    106         S FIELD(0)="ZRX"
    107         I '$G(PSJREN) N PREON,PSJREN I $G(PSJORD)["U"&($P(NODE1,"^",24)="R") S PSJREN=1
    108         I $G(PSJORD)["V"&($P(NODE2,"^",8)="R") S PSJREN=1
    109         S PREON=$S($G(PSJREN):$G(PSJORD),PSJORDER["IV":$P(NODE2,"^",5),1:$P(NODE1,"^",25))
    110         S FIELD(1)=$S(PREON["P":$P($G(^PS(53.1,+PREON,0)),"^",21),PREON["V":$P($G(^PS(55,PSJHLDFN,"IV",+PREON,0)),"^",21),1:$P($G(^PS(55,PSJHLDFN,5,+PREON,0)),"^",21))
    111         S FIELD(2)=$S(PSJORDER["IV":$G(P("NAT")),1:$G(PSJNOO))
    112         S FIELD(3)=$S($G(PSJREN):"R",PSJORDER["IV":$P(NODE2,"^",8),1:$P(NODE1,"^",24))
    113         I FIELD(3)="" I PSOC="SN" S FIELD(3)="N"
    114         I $D(P)>1 S FIELD(6)=$$IVCAT^PSJHLU(PSJHLDFN,RXORDER,.P)
    115         S NAME=$P($G(^VA(200,DUZ,0)),"^")
    116         S FIELD(5)=DUZ_"^"_$S($G(PSJBCBU):NAME,1:$$ESC^ORHLESC(NAME))_"^"_"99NP"
    117         D SEGMENT^PSJHLU(LIMIT),DISPLAY^PSJHL2
    118         Q
     1PSJHLU ;BIR/RLW-UTILITIES USED IN BUILDING HL7 SEGMENTS ;20 Apr 98 / 9:58 AM
     2 ;;5.0; INPATIENT MEDICATIONS ;**1,56,72,102**;16 DEC 97
     3 ;
     4 ; Reference to ^PS(52.6 is supported by DBIA# 1231.
     5 ; Reference to ^PS(52.7 is supported by DBIA# 2173.
     6 ;
     7INIT ; set up HL7 application variables
     8 S PSJHLSDT="PS",PSJHINST=$P($$SITE^VASITE(),"^")
     9 S PSJCLEAR="K FIELD F J=0:1:LIMIT S FIELD(J)="""""
     10 Q
     11 ;
     12SEGMENT(LIMIT) ;
     13 K SEGMENT
     14 N SUBSEG,SEGLENGT S SUBSEG=0,SEGMENT="" F J=0:1:LIMIT D
     15 .I SEGMENT']"" S SEGMENT=FIELD(J) Q
     16 .S SEGMENT=SEGMENT_"|"_FIELD(J)
     17 F  S SEGLENGT=$L(SEGMENT) D  Q:$L(SEGMENT)'>246
     18 .I SEGLENGT'>246 S SEGMENT(SUBSEG)=SEGMENT
     19 .I SEGLENGT>245 S SEGMENT(SUBSEG)=$E(SEGMENT,1,245),SUBSEG=SUBSEG+1 D
     20 ..S SEGMENT=$E(SEGMENT,246,SEGLENGT),SEGMENT(SUBSEG)=$E(SEGMENT,1,245)
     21SET S PSJI=PSJI+1,^TMP("PSJHLS",$J,PSJHLSDT,PSJI)=SEGMENT(0)
     22 F J=1:1 Q:'$D(SEGMENT(J))  S ^TMP("PSJHLS",$J,PSJHLSDT,PSJI,J)=SEGMENT(J)
     23 Q
     24 ;
     25CALL(HLEVN) ; call DHCP HL7 package -or- protocol, to pass Orders
     26 ; HLEVN = number of segments in message
     27 K CLERK,DDIEN,DDNUM,DOSEFORM,DOSEOR,FIELD,IVTYPE,LIMIT,NAME,NDNODE,NODE1,NODE2,PRODNAME,PROVIDER,PSGS0Y,PSJHINST,PSJHLSDT,PSJI,PSJORDER,PSOC,PSREASON,ROOMBED,SPDIEN,SEGMENT
     28 I $G(PSJBCBU)=1 M PSJNAME=^TMP("PSJHLS",$J,"PS") Q
     29 S PSJMSG="^TMP(""PSJHLS"",$J,""PS"")"
     30 D MSG^XQOR("PS EVSEND OR",.PSJMSG)
     31 Q
     32 ;
     33IVTYPE(PSJORDER) ; check whether a back-door order is Inpatient IV or IV fluid
     34 I RXORDER["V",$P($G(@(PSJORDER_"0)")),"^",4)'="A" Q "I"
     35 I RXORDER["P" I $P($G(@(PSJORDER_"0)")),"^",4)'="F" S IVTYPE="" Q IVTYPE
     36 N SUB,AD,SOL,IVTYPE,NODE1 S SUB=0,IVTYPE="F"
     37 ;naked reference on line below refers to the full indirect reference of PSJORDER_...
     38 F TYPE="AD","SOL" S SUB=0 F  S SUB=$O(@(PSJORDER_""""_TYPE_""""_","_SUB_")")) Q:(SUB="")!(IVTYPE="I")  S NODE1=$G(^(SUB,0)) Q:NODE1=""  D  Q:IVTYPE="I"
     39 .I TYPE="AD" D
     40 ..I '$P($G(^PS(52.6,$P(NODE1,"^"),0)),"^",13) S IVTYPE="I"
     41 .D:TYPE="SOL"
     42 ..S:'$P($G(^PS(52.7,$P(NODE1,"^"),0)),"^",13) IVTYPE="I"
     43 Q IVTYPE
     44ENI ;Calculate Frequency for IV orders
     45 N INFUSE
     46 K:$L(X)<1!($L(X)>30)!(X["""")!($A(X)=45) X I '$D(X) Q
     47 I X?.E1L.E S INFUSE=$$ENLU^PSGMI(X) Q:(INFUSE="TITRATE")!(INFUSE="BOLUS")
     48 Q:(X="TITRATE")!(X="BOLUS")
     49 I X["=" D  Q   ; NOIS LOU-0501-42191
     50 .N X2,X1 S X1=$P(X,"="),X2=$P(X,"=",2)
     51 .I X1["ML/HR",(+X1=$P(X1,"ML/HR"))!(+X1=$P(X1," ML/HR")) D
     52 ..S X1=$TR(X1,"ML/HR","ml/hr")
     53 .I X2["ML/HR",(+X2=$P(X2,"ML/HR"))!(+X2=$P(X2," ML/HR")) D
     54 ..S X2=$TR(X2,"ML/HR","ml/hr")
     55 .I X1[" ml/hr",(+X1=$P(X1," ml/hr")) D
     56 ..S X1=$P(X1," ml/hr")_$P(X1," ml/hr",2,9999)
     57 .I X2[" ml/hr",(+X2=$P(X2," ml/hr")) D
     58 ..S X2=$P(X2," ml/hr")_$P(X2," ml/hr",2,9999)
     59 .I X1["ml/hr",(+X1=$P(X1,"ml/hr")) D
     60 ..S X1=$P(X1,"ml/hr")_$P(X1,"ml/hr",2,9999)
     61 .I X2["ml/hr",(+X2=$P(X2,"ml/hr")) D
     62 ..S X2=$P(X2,"ml/hr")_$P(X2,"ml/hr",2,9999)
     63 .I X2'=+X2 D
     64 ..I ($P(X2,"@",2,999)'=+$P(X2,"@",2,999)!(+$P(X2,"@",2,999)<0)) K X Q
     65 .I X1=+X1 S X1=X1_" ml/hr"
     66 .I X2=+X2 S X2=X2_" ml/hr"
     67 .S:$P(X2,"@")=+X2 $P(X2,"@")=$P(X2,"@")_" ml/hr"
     68 .S X=X1_"="_X2
     69 I X'=+X,($P(X,"@",2,999)'=+$P(X,"@",2,999)!(+$P(X,"@",2,999)<0)),($P(X," ml/hr")'=+$P(X," ml/hr")!(+$P(X," ml/hr")<0)) K X Q
     70 I X=+X S X=X_" ml/hr" D SPSOL S FREQ=$S('X:0,1:SPSOL\X*60+(SPSOL#X/X*60+.5)\1) K SPSOL Q
     71 I X[" ml/hr" D SPSOL S FREQ=$S('X:0,1:SPSOL\X*60+(SPSOL#X/X*60+.5)\1) K SPSOL Q
     72 S SPSOL=$P(X,"@",2) S:$P(X,"@")=+X $P(X,"@")=$P(X,"@")_" ml/hr" S FREQ=$S('SPSOL:0,1:1440/SPSOL\1) K SPSOL
     73 Q
     74SPSOL S SPSOL=+TVOLUME Q
Note: See TracChangeset for help on using the changeset viewer.