Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: GMVDCEXT

GMVDCEXT.m

Go to the documentation of this file.
  1. GMVDCEXT ;HOIFO/DAD,FT-VITALS COMPONENT: EXTRACT PATIENT DATA ;6/13/07
  1. ;;5.0;GEN. MED. REC. - VITALS;**23**;Oct 31, 2002;Build 25
  1. ;
  1. ; This routine uses the following IAs:
  1. ; #4290 - ^PXRMINDX global (controlled)
  1. ; #10035 - FILE 2 references (supported)
  1. ; #10104 - ^XLFSTR calls (supported)
  1. ;
  1. ; This routine supports the following IAs:
  1. ; #4251 - EN1 entry point (private)
  1. ;
  1. EN1(RESULT,GMVDFN,GMVFMT,GMVABR,GMVALL,GMVBEG,GMVEND,GMVMSYS,GMVEER) ;
  1. ; Return patient vitals
  1. ;
  1. ; Input:
  1. ; RESULT = Where data is returned (closed array reference) (Required)
  1. ; GMVDFN = A pointer to the Patient file (#2) (Required)
  1. ; GMVFMT = Format of returned data (Optional)
  1. ; 1 - IENs (default), 2 - Abbreviations, 3 - Full Names
  1. ; GMVABR = Abbreviations of vital types to return (Optional)
  1. ; "^T^P^R^PO2^BP^HT^WT^CVP^CG^PN^" (Default GMVALL = 0)
  1. ; "~ALL~" to return all vital types (Default GMVALL = 1)
  1. ; GMVALL = Controls what data is returned (Optional)
  1. ; 0 - Most recent (default), 1 - All in date range
  1. ; GMVBEG = Beginning date for all vitals (Not used for GMVALL = 0)
  1. ; GMVEND = Ending date for all vitals (Not used for GMVALL = 0)
  1. ; GMVMSYS = Measurement system (Optional)
  1. ; M = Metric, C - US Customary (Default)
  1. ; GMVEER = Include entered in error records (Optional)
  1. ; (0 - No (Default), 1 - Yes)
  1. ;
  1. ; Output:
  1. ; RESULT() = VitalMeasurementIEN ^ DateTimeTaken ^ PatientDFN ^
  1. ; VitalType ^ DateTimeEntered ^ HospitalLocation ^
  1. ; EnteredBy ^ Measurement ^ EnteredInError ^
  1. ; EnteredInErrorBy ^
  1. ; Qualifier1 ; Qualifier2 ; ... ^
  1. ; EnteredInErrorReason1 ; EnteredInErrorReason2 ; ... ^
  1. ;
  1. N GMV,GMVABBR,GMVALUE,GMVCAT,GMVCD0,GMVCD1,GMVD0,GMVD1,GMVDATA
  1. N GMVDATA2,GMVER,GMVFOUND,GMVIDATE,GMVOK,GMVPOR,GMVPULSE,GMVQD0
  1. N GMVQD1,GMVQUA,GMVQL
  1. N GMVRATE,GMVRET
  1. K @RESULT
  1. S @RESULT@(0)="OK"
  1. S GMVALL=$S("^0^1^"[(U_$G(GMVALL)_U):GMVALL,1:0)
  1. S GMVFMT=$S("^1^2^3^"[(U_$G(GMVFMT)_U):GMVFMT,1:1)
  1. S GMVEER=$S(GMVALL=0:0,"^0^1^"[(U_$G(GMVEER)_U):GMVEER,1:0)
  1. I $$FIND1^DIC(2,"","","`"_GMVDFN)'=GMVDFN D
  1. . S @RESULT@(0)="ERROR"
  1. . S @RESULT@(1)="ERROR: Missing or invalid Patient parameter"
  1. . Q
  1. S GMVMSYS=$$MEASYS^GMVDCUTL($G(GMVMSYS))
  1. K GMVRET
  1. D DT^DILF("ST",$G(GMVEND),.GMVRET,"-NOW")
  1. S GMVEND=$G(GMVRET)
  1. K GMVRET
  1. D DT^DILF("ST",$G(GMVBEG),.GMVRET,-GMVEND)
  1. S GMVBEG=$G(GMVRET) S:GMVBEG>0 GMVBEG=GMVBEG-.000001
  1. I GMVALL&((GMVBEG'>0)!(GMVEND'>0)) D
  1. . S @RESULT@(0)="ERROR"
  1. . S @RESULT@(2)="ERROR: Missing or invalid Date Range parameters"
  1. . Q
  1. I $G(@RESULT@(0))="ERROR" Q
  1. S GMVABBR=$S($G(GMVABR)]"":GMVABR,GMVALL=1:"~ALL~",1:"^T^P^R^PO2^BP^HT^WT^CVP^CG^PN^")
  1. I GMVABBR="~ALL~" D
  1. . S GMVD0=0,GMVABBR=U
  1. . F S GMVD0=$O(^GMRD(120.51,GMVD0)) Q:GMVD0'>0 D
  1. .. S GMVABBR(0)=$P($G(^GMRD(120.51,GMVD0,0)),U,2)
  1. .. I GMVABBR(0)]"" S GMVABBR=GMVABBR_GMVABBR(0)_U
  1. .. Q
  1. . Q
  1. S GMVABBR=$S($E(GMVABBR)'=U:U,1:"")_GMVABBR_$S($E(GMVABBR,$L(GMVABBR))'=U:U,1:"")
  1. F GMV=2:1:$L(GMVABBR,U)-1 S GMVABBR(0)=$P(GMVABBR,U,GMV) D
  1. . I $S(GMVABBR(0)="":1,$O(^GMRD(120.51,"C",GMVABBR(0),0))>0:1,1:0) Q
  1. . I GMVABBR(0)'=+GMVABBR(0) S GMVABBR(0)=+$O(^GMRD(120.51,"B",GMVABBR(0),0))
  1. . S GMVABBR(0)=$P($G(^GMRD(120.51,GMVABBR(0),0)),U,2)
  1. . S $P(GMVABBR,U,GMV)=GMVABBR(0)
  1. . Q
  1. F GMV=1:1 S GMVPULSE=$P($T(PULSE+GMV),";;",2) Q:GMVPULSE="" D
  1. . S GMVD0=0
  1. . F S GMVD0=$O(^GMRD(120.52,"B",GMVPULSE,GMVD0)) Q:GMVD0'>0 D
  1. .. I $P($G(^GMRD(120.52,GMVD0,0)),U)=GMVPULSE S GMVPULSE(GMVD0)=GMVPULSE,GMVPULSE(GMVPULSE)=GMVD0
  1. .. Q
  1. . Q
  1. S GMVD0=0
  1. F S GMVD0=$O(^GMRD(120.51,GMVD0)) Q:GMVD0'>0 D
  1. . S GMVABBR(0)=$G(^GMRD(120.51,GMVD0,0))
  1. . I GMVABBR[(U_$P(GMVABBR(0),U,2)_U) S GMVABBR($P(GMVABBR(0),U,2))=GMVD0_U_$P(GMVABBR(0),U,2)_U_$P(GMVABBR(0),U)
  1. . Q
  1. S GMVABBR=""
  1. F S GMVABBR=$O(GMVABBR(GMVABBR)) Q:GMVABBR="" I GMVABBR(GMVABBR)>0 D
  1. . S GMVFOUND=0
  1. . S GMVIDATE=$S(GMVALL:GMVBEG,1:0)
  1. . I GMVALL=1 F S GMVIDATE=$O(^PXRMINDX(120.5,"PI",GMVDFN,+GMVABBR(GMVABBR),GMVIDATE)) Q:GMVIDATE'>0!$S(GMVALL:GMVIDATE>GMVEND,1:0)!GMVFOUND D SETDATAR
  1. . I GMVALL=0 S GMVIDATE=GMVEND+.000001 F S GMVIDATE=$O(^PXRMINDX(120.5,"PI",GMVDFN,+GMVABBR(GMVABBR),GMVIDATE),-1) Q:GMVIDATE'>0!(GMVFOUND)!(GMVIDATE<GMVBEG) D SETDATAR
  1. . Q:GMVEER=0
  1. . S GMVIDATE=$S(GMVALL:9999999-GMVEND,1:0)
  1. . F S GMVIDATE=$O(^GMR(120.5,"AA",GMVDFN,+GMVABBR(GMVABBR),GMVIDATE)) Q:GMVIDATE'>0!$S(GMVALL:(9999999-GMVIDATE)<GMVBEG,1:0)!GMVFOUND D SETDATA1
  1. . Q
  1. Q
  1. ;
  1. SETDATAR ;
  1. N GMVCLIO
  1. S GMVD0=0
  1. F S GMVD0=$O(^PXRMINDX(120.5,"PI",GMVDFN,+GMVABBR(GMVABBR),GMVIDATE,GMVD0)) Q:$L(GMVD0)'>0!GMVFOUND D
  1. .I GMVD0=+GMVD0 D
  1. ..D F1205^GMVUTL(.GMVCLIO,GMVD0)
  1. .I GMVD0'=+GMVD0 D
  1. ..D CLIO^GMVUTL(.GMVCLIO,GMVD0)
  1. .S GMVCLIO(0)=$G(GMVCLIO(0)),GMVCLIO(2)=$G(GMVCLIO(2)),GMVCLIO(5)=$G(GMVCLIO(5))
  1. .I GMVCLIO(0)=""!($P(GMVCLIO(0),U,8)="") Q
  1. .D SETNODE
  1. .Q
  1. Q
  1. ;
  1. SETDATA1 ;
  1. N GMVCLIO
  1. S GMVD0=0
  1. F S GMVD0=$O(^GMR(120.5,"AA",GMVDFN,+GMVABBR(GMVABBR),GMVIDATE,GMVD0)) Q:$L(GMVD0)'>0!GMVFOUND D
  1. .I GMVD0=+GMVD0 D
  1. .I $P($G(^GMR(120.5,GMVD0,2)),U,1)'=1 Q ;not an error
  1. .D F1205^GMVUTL(.GMVCLIO,GMVD0,1)
  1. .S GMVCLIO(0)=$G(GMVCLIO(0)),GMVCLIO(2)=$G(GMVCLIO(2)),GMVCLIO(5)=$G(GMVCLIO(5))
  1. .I GMVCLIO(0)=""!($P(GMVCLIO(0),U,8)="") Q
  1. .D SETNODE
  1. .Q
  1. Q
  1. SETNODE ;
  1. S GMVDATA=GMVCLIO(0)
  1. S GMVDATA2=GMVCLIO(2)
  1. S GMVRATE=$P(GMVDATA,U,8)
  1. I GMVALL=0,"^REFUSED^PASS^UNAVAILABLE^"[(U_$$UP^XLFSTR(GMVRATE)_U) Q
  1. I GMVEER=0,(($P(GMVDATA2,U)>0)!($P(GMVDATA2,U,2)>0)) Q
  1. I GMVABBR="PO2",$P(GMVDATA,U,10)]"" D
  1. . ; *** Decode Supplemental O2 field (#1.4) ***
  1. . N GMVFRATE,GMVPCENT,GMVSUPO2
  1. . S GMVSUPO2=$$LOW^XLFSTR($TR($P(GMVDATA,U,10)," "))
  1. . S GMVFRATE=$S(GMVSUPO2["l/min":$P(GMVSUPO2,"l/min"),1:"")
  1. . S GMVFRATE=$TR(GMVFRATE,$TR(GMVFRATE,".0123456789"))
  1. . S GMVPCENT=$S(GMVSUPO2["%":$P(GMVSUPO2,"%"),1:"")
  1. . S GMVPCENT=$S(GMVPCENT["l/min":$P(GMVPCENT,"l/min",2),GMVPCENT=+GMVPCENT:GMVPCENT,1:"")
  1. . S GMVPCENT=$TR(GMVPCENT,$TR(GMVPCENT,".0123456789"))
  1. . S GMVRATE=GMVRATE_";"_GMVFRATE_";"_GMVPCENT
  1. . Q
  1. I 'GMVALL,GMVABBR="P" D I 'GMVOK Q
  1. . ; *** Include selected pulse types (latest vitals only) ***
  1. . S GMVOK=0
  1. . F GMVPULSE=1:1 Q:$P(GMVCLIO(5),U,GMVPULSE)="" D Q:GMVOK
  1. .. I $D(GMVPULSE(+$P(GMVCLIO(5),U,GMVPULSE))) S GMVOK=1
  1. .. Q
  1. . Q
  1. I 'GMVALL S GMVFOUND=1
  1. S GMVALUE=$$CNV^GMVDCCNV(GMVRATE,GMVMSYS,"G",$P(GMVABBR(GMVABBR),U,2))
  1. S @RESULT@(GMVD0)=GMVD0_U_$P(GMVDATA,U)_U_$P(GMVDATA,U,2)_U_$P(GMVABBR(GMVABBR),U,GMVFMT)_U_$P(GMVDATA,U,4)_U_$P(GMVDATA,U,5)_U_$P(GMVDATA,U,6)_U_GMVALUE_U_$P(GMVDATA2,U)_U_$P(GMVDATA2,U,2)_U
  1. K GMVQL
  1. F GMVD1=1:1 Q:$P(GMVCLIO(5),U,GMVD1)="" D
  1. . S GMVQD0=$P(GMVCLIO(5),U,GMVD1)
  1. . S GMVQD1=+$O(^GMRD(120.52,GMVQD0,1,"B",GMVABBR(GMVABBR),0))
  1. . S GMVCD0=+$P($G(^GMRD(120.52,GMVQD0,1,GMVQD1,0)),U,2)
  1. . S GMVCAT=$P($G(^GMRD(120.53,GMVCD0,0)),U)
  1. . S GMVCAT=$S(GMVCAT]"":GMVCAT,1:" ")
  1. . S GMVQUA=$G(^GMRD(120.52,GMVQD0,0))
  1. . S GMVQUA(1)=GMVQD0,GMVQUA(2)=$P(GMVQUA,U,2),GMVQUA(3)=$P(GMVQUA,U)
  1. . S GMVCD1=+$O(^GMRD(120.53,"AA",+GMVABBR(GMVABBR),GMVCAT,GMVCD0,0))
  1. . S GMVPOR=1+$P($G(^GMRD(120.53,GMVCD0,1,GMVCD1,0)),U,5)
  1. . I $G(GMVQUA(GMVFMT))]"" D
  1. .. S GMVQL(GMVPOR,GMVCAT)=$G(GMVQL(GMVPOR,GMVCAT))_GMVQUA(GMVFMT)_";"
  1. .. Q
  1. . Q
  1. S GMVPOR=0
  1. F S GMVPOR=$O(GMVQL(GMVPOR)) Q:GMVPOR'>0 D
  1. . S GMVCAT=""
  1. . F S GMVCAT=$O(GMVQL(GMVPOR,GMVCAT)) Q:GMVCAT="" D
  1. .. S @RESULT@(GMVD0)=@RESULT@(GMVD0)_GMVQL(GMVPOR,GMVCAT)
  1. .. Q
  1. . Q
  1. S @RESULT@(GMVD0)=$$FIXUP(@RESULT@(GMVD0))
  1. S GMVER(0)=";"_$$GET1^DID(120.506,.01,"","POINTER")
  1. F GMVD1=1:1 Q:$P($P(GMVCLIO(2),U,3),"~",GMVD1)="" D
  1. . S GMVER=$P($P(GMVCLIO(2),U,3),"~",GMVD1)
  1. . I GMVER(0)[(";"_GMVER_":") D
  1. .. I GMVFMT<3 S @RESULT@(GMVD0)=@RESULT@(GMVD0)_GMVER_";"
  1. .. E S @RESULT@(GMVD0)=@RESULT@(GMVD0)_$P($P(GMVER(0),";"_GMVER_":",2),";")_";"
  1. .. Q
  1. . Q
  1. S @RESULT@(GMVD0)=$$FIXUP(@RESULT@(GMVD0))
  1. Q
  1. ;
  1. FIXUP(X) ;
  1. Q $S($E(X,$L(X))=";":$E(X,1,$L(X)-1),1:X)_U
  1. ;
  1. PULSE ;;Pulse types to include in the latest vitals extract
  1. ;;APICAL
  1. ;;BRACHIAL
  1. ;;RADIAL
  1. ;;