133 lines
3.2 KiB
Mathematica
133 lines
3.2 KiB
Mathematica
RORHL16 ;HOIFO/BH,SG - HL7 VITALS DATA: OBR,OBX ; 8/31/05 2:16pm
|
|
;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006
|
|
;
|
|
; This routine uses the following IAs:
|
|
;
|
|
; #1446 EN1^GMRVUT0 (controlled)
|
|
;
|
|
Q
|
|
;
|
|
;***** SEARCHES FOR VITALS DATA
|
|
;
|
|
; RORDFN IEN of the patient in the PATIENT file (#2)
|
|
;
|
|
; .DXDTS Reference to a local variable where the
|
|
; data extraction time frames are stored.
|
|
;
|
|
; Return Values:
|
|
; <0 Error code
|
|
; 0 Ok
|
|
; >0 Non-fatal error(s)
|
|
;
|
|
; The function uses ^UTILITY($J,"GMRVD") global node.
|
|
;
|
|
EN1(RORDFN,DXDTS) ;
|
|
N DFN,GMRVSTR,IDX,PAT,RC,RORENDT,RORSTDT
|
|
S (ERRCNT,RC)=0
|
|
;
|
|
S IDX=0
|
|
F S IDX=$O(DXDTS(15,IDX)) Q:IDX'>0 D Q:RC<0
|
|
. S RORSTDT=$P(DXDTS(15,IDX),U),RORENDT=$P(DXDTS(15,IDX),U,2)
|
|
. ;--- Check to see if the patient has any Vitals data
|
|
. K ^UTILITY($J,"GMRVD")
|
|
. S DFN=RORDFN,GMRVSTR="BP;T;R;P;HT;WT;PN"
|
|
. S GMRVSTR(0)=RORSTDT_"^"_RORENDT_"^999999^0"
|
|
. D EN1^GMRVUT0
|
|
. Q:$D(^UTILITY($J,"GMRVD"))<10
|
|
. ;--- Process the data
|
|
. S TMP=$$OBR()
|
|
. I TMP Q:TMP<0 S ERRCNT=ERRCNT+TMP
|
|
. S TMP=$$OBX()
|
|
. I TMP Q:TMP<0 S ERRCNT=ERRCNT+TMP
|
|
;
|
|
K ^UTILITY($J,"GMRVD")
|
|
Q $S(RC<0:RC,1:ERRCNT)
|
|
;
|
|
;***** VITALS OBR SEGMENT BUILDER
|
|
;
|
|
; Return Values:
|
|
; <0 Error code
|
|
; 0 Ok
|
|
; >0 Non-fatal error(s)
|
|
;
|
|
OBR() ;
|
|
N CS,ERRCNT,RC,RORSEG
|
|
S (ERRCNT,RC)=0
|
|
D ECH^RORHL7(.CS)
|
|
;
|
|
;--- Initialize the segment
|
|
S RORSEG(0)="OBR"
|
|
;
|
|
;--- OBR-4 - Vitals CPT Code
|
|
S RORSEG(4)="94150"_CS_"VITAL CAPACITY TEST"_CS_"C4"
|
|
;
|
|
;--- OBR-24 - Diagnostic Service ID
|
|
S RORSEG(24)="EC"
|
|
;
|
|
;--- OBR-44 - Division
|
|
S RORSEG(44)=$$SITE^RORUTL03(CS)
|
|
;
|
|
;--- Store the segment
|
|
D ADDSEG^RORHL7(.RORSEG)
|
|
Q ERRCNT
|
|
;
|
|
;***** VITALS OBX SEGMENT(S) BUILDER
|
|
;
|
|
; Return Values:
|
|
; <0 Error code
|
|
; 0 Ok
|
|
; >0 Non-fatal error(s)
|
|
;
|
|
OBX() ;
|
|
N CS,ERRCNT,RC,OBID
|
|
S (ERRCNT,RC)=0
|
|
D ECH^RORHL7(.CS)
|
|
;
|
|
F OBID="BP^Blood Pressue^VA080","T^Temperature^VA080","R^Respiration^VA080","P^Pulse^VA080","HT^Height^VA080","WT^Weight^VA080","PN^Pain^VA080" D
|
|
. D VITALTYP($TR(OBID,"^",CS),CS)
|
|
;
|
|
Q ERRCNT
|
|
;
|
|
;***** LOOPS THROUGH THE UTILITY GLOBAL FOR VITAL TYPE
|
|
VITALTYP(OBID,CS) ;
|
|
N BODYMASS,DATA,DTE,IEN,MEASDATE,OBX5,TYPE,UNITS
|
|
S TYPE=$P(OBID,CS)
|
|
Q:'$D(^UTILITY($J,"GMRVD",TYPE))
|
|
;---
|
|
S DTE=""
|
|
F S DTE=$O(^UTILITY($J,"GMRVD",TYPE,DTE)) Q:'DTE D
|
|
. S IEN=""
|
|
. F S IEN=$O(^UTILITY($J,"GMRVD",TYPE,DTE,IEN)) Q:'IEN D
|
|
. . S DATA=^UTILITY($J,"GMRVD",TYPE,DTE,IEN)
|
|
. . ;
|
|
. . S MEASDATE=$P(DATA,U) ;??? Temporary fix for Vitals API bug
|
|
. . I $L(MEASDATE)=8 S:$E(MEASDATE,8)="0" MEASDATE=$E(MEASDATE,1,7)
|
|
. . S MEASDATE=$$FM2HL^RORHL7(MEASDATE)
|
|
. . S UNITS=$P(DATA,U,13)
|
|
. . S BODYMASS=$S(TYPE="WT":$P(DATA,U,14),1:"")
|
|
. . ;
|
|
. . S OBX5=$P(DATA,U,8)_U_$P(DATA,U,11)_U_$P(DATA,U,17)
|
|
. . D SETOBX(OBID,IEN,OBX5,UNITS,BODYMASS,MEASDATE)
|
|
;
|
|
Q
|
|
;
|
|
;*** CREATES AND STORES THE OBX SEGMENT
|
|
SETOBX(OBX3,OBX4,OBX5,OBX6,OBX7,OBX14) ;
|
|
N RORSEG
|
|
;--- Initialize the segment
|
|
S RORSEG(0)="OBX"
|
|
;--- OBX-2
|
|
S RORSEG(2)="FT"
|
|
;---
|
|
S RORSEG(3)=OBX3
|
|
S RORSEG(4)=OBX4
|
|
S RORSEG(5)=$$ESCAPE^RORHL7(OBX5)
|
|
S:$G(OBX6)'="" RORSEG(6)=OBX6
|
|
S:$G(OBX7)'="" RORSEG(7)=OBX7
|
|
S:$G(OBX14)'="" RORSEG(14)=OBX14
|
|
;--- OBX-11
|
|
S RORSEG(11)="F"
|
|
;--- Store the segment
|
|
D ADDSEG^RORHL7(.RORSEG)
|
|
Q
|