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

GMVPXRM.m

Go to the documentation of this file.
  1. GMVPXRM ;HIOFO/FT-API to return FILE 120.5 data ;01/20/09 13:11
  1. ;;5.0;GEN. MED. REC. - VITALS;**6,23**;Oct 31, 2002;Build 25
  1. ;
  1. ; This routine uses the following IAs:
  1. ; #4113 - ^PXRMSXRM routine (controlled)
  1. ; #4114 - ^PXRMINDX global (controlled)
  1. ; #5076 - ^MDCLIO1 calls (private)
  1. ; #10103 - ^XLFDT calls (supported)
  1. ; #10040 - FILE 44 references (supported)
  1. ; #10141 - ^XPDUTL calls (supported)
  1. ;
  1. ; Entry point(s) available for use by other packages:
  1. ; EN is documented in IA #3647
  1. ; VITALS is documented in IA #3647
  1. ;
  1. EN(GMVDATA,GMVIEN,GMVIB) ; Returns data for a single FILE 120.5 entry.
  1. ; Input:
  1. ; GMVDATA = Array name passed by reference (required)
  1. ; GMVIEN = IEN for FILE 120.5 or GUID for FILE 704.117 (required)
  1. ; GMVIB = "I" for Internal value only
  1. ; "B" for Internal and External values (default = B)
  1. ;
  1. ; If GMVIB = "I", then
  1. ; Output = GMVDATA(n)=internal value
  1. ;
  1. ; If GMVIB = "B", then
  1. ; Output: GMVDATA(n)=internal value^external value
  1. ;
  1. ; where:
  1. ; GMVDATA(1)=.01 (DATE/TIME VITALS TAKEN)
  1. ; GMVDATA(2)=.02 (PATIENT)
  1. ; GMVDATA(3)=.03 (VITAL TYPE)
  1. ; GMVDATA(4)=.04 (DATE/TIME VITALS ENTERED)
  1. ; GMVDATA(5)=.05 (HOSPITAL LOCATION)
  1. ; GMVDATA(6)=.06 (ENTERED BY)
  1. ; GMVDATA(7)=1.2 (RATE)
  1. ; GMVDATA(8)=1.4 (SUPPLEMENTAL O2)
  1. ; GMVDATA(9)=2 (ENTERED IN ERROR)
  1. ; GMVDATA(10)=3 (ERROR ENTERED BY)
  1. ; GMVDATA(11,n)=4 (REASON ENTERED IN ERROR) <--multiple
  1. ; GMVDATA(12,n)=5 (QUALIFIER) <--multiple
  1. ;
  1. ; If the lookup failed then: GMVDATA(1)=-1^error text
  1. ;
  1. N GMVCNT,GMVIEN1,GMVLIST,GMVLEN,GMVLOOP,GMVTEMP,TEMP,TEMP2,TEMP5,TP,EM
  1. I $G(GMVIB)'="I",$G(GMVIB)'="B" S GMVIB="B"
  1. I $G(GMVIEN)="" S GMVDATA(1)="-1^Record Number is Null" Q
  1. I GMVIEN=+GMVIEN D
  1. .D F1205^GMVUTL(.GMVTEMP,GMVIEN,1)
  1. .S TEMP=$G(GMVTEMP(0))
  1. .S TEMP2=$G(GMVTEMP(2))
  1. .S TEMP5=$G(GMVTEMP(5))
  1. .Q
  1. I GMVIEN'=+GMVIEN D
  1. .D CLIO^GMVUTL(.GMVTEMP,GMVIEN)
  1. .S TEMP=$G(GMVTEMP(0))
  1. .S TEMP2=$G(GMVTEMP(2))
  1. .S TEMP5=$G(GMVTEMP(5))
  1. .Q
  1. I TEMP="" D Q
  1. .S GMVDATA(1)="-1^The entry does not exist"
  1. .Q
  1. ;
  1. S GMVDATA(1)=$P(TEMP,U,1)
  1. S GMVDATA(2)=$P(TEMP,U,2)
  1. S GMVDATA(3)=$P(TEMP,U,3)
  1. S GMVDATA(4)=$P(TEMP,U,4)
  1. S GMVDATA(5)=$P(TEMP,U,5)
  1. I '$D(^SC(+GMVDATA(5),0)) S GMVDATA(5)=0
  1. S GMVDATA(6)=$P(TEMP,U,6)
  1. S GMVDATA(7)=$P(TEMP,U,8)
  1. S GMVDATA(8)=$P(TEMP,U,10)
  1. S GMVDATA(9)=$P(TEMP2,U,1)
  1. S GMVDATA(10)=$P(TEMP2,U,2)
  1. S GMVCNT=0
  1. S GMVLIST=$P(TEMP2,U,3)
  1. S GMVLEN=$L(GMVLIST,"~")
  1. F GMVCNT=1:1:GMVLEN D
  1. .S GMVDATA(11,GMVCNT)=$P(GMVLIST,"~",GMVCNT)
  1. .Q
  1. I GMVCNT=0 S GMVDATA(11,1)=""
  1. S GMVLIST=$G(TEMP5),GMVCNT=0
  1. F GMVLOOP=1:1 Q:$P(GMVLIST,U,GMVLOOP)="" D
  1. .S GMVCNT=GMVCNT+1
  1. .S GMVDATA(12,GMVCNT)=$P(GMVLIST,U,GMVLOOP)
  1. .Q
  1. I GMVCNT=0 S GMVDATA(12,1)=""
  1. ;
  1. Q:GMVIB="I"
  1. ;
  1. S GMVDATA(1)=$P(GMVDATA(1),U,1)_U_$$EXTERNAL^DILFD(120.5,.01,"",$P(GMVDATA(1),U,1),.EM)
  1. S GMVDATA(2)=$P(GMVDATA(2),U,1)_U_$$EXTERNAL^DILFD(120.5,.02,"",$P(GMVDATA(2),U,1),.EM)
  1. S GMVDATA(3)=$P(GMVDATA(3),U,1)_U_$$EXTERNAL^DILFD(120.5,.03,"",$P(GMVDATA(3),U,1),.EM)
  1. S GMVDATA(4)=$P(GMVDATA(4),U,1)_U_$$EXTERNAL^DILFD(120.5,.04,"",$P(GMVDATA(4),U,1),.EM)
  1. S GMVDATA(5)=$P(GMVDATA(5),U,1)_U_$$EXTERNAL^DILFD(120.5,.05,"",$P(GMVDATA(5),U,1),.EM)
  1. S GMVDATA(6)=$P(GMVDATA(6),U,1)_U_$$EXTERNAL^DILFD(120.5,.06,"",$P(GMVDATA(6),U,1),.EM)
  1. S GMVDATA(7)=$P(GMVDATA(7),U,1)_U_$P(GMVDATA(7),U,1) ;same
  1. S GMVDATA(8)=$P(GMVDATA(8),U,1)_U_$P(GMVDATA(8),U,1) ;same
  1. S GMVDATA(9)=$P(GMVDATA(9),U,1)_U_$$EXTERNAL^DILFD(120.5,2,"",$P(GMVDATA(9),U,1),.EM)
  1. S GMVDATA(10)=$P(GMVDATA(10),U,1)_U_$$EXTERNAL^DILFD(120.5,3,"",$P(GMVDATA(10),U,1),.EM)
  1. ;
  1. ;loop through entered-in-error reason multiple
  1. S (GMVCNT,GMVIEN1)=0
  1. F S GMVIEN1=$O(GMVDATA(11,GMVIEN1)) Q:'GMVIEN1 D
  1. .S TP=+$P(GMVDATA(11,GMVIEN1),U,1)
  1. .Q:'TP
  1. .S GMVDATA(11,GMVIEN1)=TP_U_$$EXTERNAL^DILFD(120.506,.01,"",TP,.EM)
  1. .S GMVCNT=1
  1. .Q
  1. I GMVCNT=0 S GMVDATA(11,1)="^"
  1. ;loop through qualifier multiple
  1. S (GMVCNT,GMVIEN1)=0
  1. F S GMVIEN1=$O(GMVDATA(12,GMVIEN1)) Q:'GMVIEN1 D
  1. .S TP=+$P(GMVDATA(12,GMVIEN1),U,1)
  1. .Q:'TP
  1. .S GMVDATA(12,GMVIEN1)=TP_U_$P($G(^GMRD(120.52,+TP,0)),U,1)
  1. .S GMVCNT=1
  1. .Q
  1. I GMVCNT=0 S GMVDATA(12,1)="^"
  1. Q
  1. ;
  1. VITALS ; This entry point is for use by the Clinical Reminders package
  1. ; to re-index the ACR cross-reference nodes for FILE 120.5.
  1. ;
  1. ; a) This entry point kills the ACR cross-reference nodes for ^PXRMINDX(120.5).
  1. ; b) Re-builds the ACR cross-reference nodes.
  1. ; c) Calls the Clinical Reminders package to generate a mail message
  1. ; summarizing the rebuilding of the ACR cross-reference.
  1. ;
  1. N DAS,DATE,DFN,END,ENTRIES,ETEXT,GLOBAL,IND,NE,NE1,NE2,NERROR
  1. N START,TEMP,TENP,TEXT,VT,GMVCLIO,GMVTYPE,GMVLOOP,GMVIEN
  1. S GLOBAL=$$GET1^DID(120.5,"","","GLOBAL NAME")
  1. ; Don't leave any old cross-reference nodes around.
  1. K ^PXRMINDX(120.5)
  1. S ENTRIES=$P(^GMR(120.5,0),U,4)
  1. S TENP=ENTRIES/10
  1. S TENP=+$P(TENP,".",1)
  1. D BMES^XPDUTL("Building index for VITALS DATA.")
  1. ;S TEXT="There are "_ENTRIES_" entries to process."
  1. ;D MES^XPDUTL(TEXT)
  1. S START=$H
  1. S (DAS,IND,NE,NE1,NE2,NERROR)=0
  1. F S DAS=+$O(^GMR(120.5,DAS)) Q:DAS=0 D
  1. . S IND=IND+1
  1. . I IND#TENP=0 D
  1. .. S TEXT="Processing entry "_IND
  1. .. D MES^XPDUTL(TEXT)
  1. . I IND#10000=0 W "."
  1. . S TEMP=^GMR(120.5,DAS,0)
  1. . I $P(TEMP,U,1)'?7N1"."1.6N S NE1=NE1+1 Q
  1. . I $P(TEMP,U,2)'>0 S NE1=NE1+1 Q
  1. . I $P(TEMP,U,3)'>0 S NE1=NE1+1 Q
  1. . S DATE=$P(TEMP,U,1),DFN=$P(TEMP,U,2),VT=$P(TEMP,U,3)
  1. .;If this entry is marked as entered-in-error do not index it.
  1. . I $P($G(^GMR(120.5,DAS,2)),U,1) S NE2=NE2+1 Q
  1. . S ^PXRMINDX(120.5,"IP",VT,DFN,DATE,DAS)=""
  1. . S ^PXRMINDX(120.5,"PI",DFN,VT,DATE,DAS)=""
  1. . S NE=NE+1
  1. . Q
  1. ; Get vital type iens
  1. F GMVLOOP="BP","CG","CVP","HT","P","PN","PO2","R","T","WT" D
  1. .S GMVIEN=$O(^GMRD(120.51,"C",GMVLOOP,0))
  1. .Q:'GMVIEN
  1. .S GMVTYPE(GMVIEN)=""
  1. .Q
  1. K ^TMP($J)
  1. ; get records from Clinical Observations
  1. I $T(QRYDATE^MDCLIO1)]"" D
  1. .D QRYDATE^MDCLIO1("^TMP($J)",3070101,$$FMADD^XLFDT($$NOW^XLFDT(),,24))
  1. .S GMVLOOP=0
  1. .F S GMVLOOP=$O(^TMP($J,GMVLOOP)) Q:'GMVLOOP D
  1. ..S DAS=^TMP($J,GMVLOOP)
  1. ..Q:DAS=""
  1. ..D CLIO^GMVUTL(.GMVCLIO,DAS)
  1. ..S GMVCLIO(0)=$G(GMVCLIO(0))
  1. ..I GMVCLIO(0)="" S NE1=NE1+1 Q
  1. ..I $P(GMVCLIO(0),U,1)'?7N1"."1.6N S NE1=NE1+1 Q
  1. ..I $P(GMVCLIO(0),U,2)'>0 S NE1=NE1+1 Q
  1. ..I $P(GMVCLIO(0),U,3)'>0 S NE1=NE1+1 Q
  1. ..I '$D(GMVTYPE($P(GMVCLIO(0),U,3))) Q ;not a vitals entry
  1. ..S DATE=$P(GMVCLIO(0),U,1),DFN=$P(GMVCLIO(0),U,2),VT=$P(GMVCLIO(0),U,3)
  1. ..S ^PXRMINDX(120.5,"IP",VT,DFN,DATE,DAS)=""
  1. ..S ^PXRMINDX(120.5,"PI",DFN,VT,DATE,DAS)=""
  1. ..S NE=NE+1
  1. ..Q
  1. .Q
  1. S END=$H
  1. S TEXT=" VITAL MEASUREMENTS entries indexed: "_NE
  1. D BMES^XPDUTL(TEXT)
  1. S TEXT=" Bad entries not indexed: "_NE1
  1. D MES^XPDUTL(TEXT)
  1. S TEXT="Entered-in-Error entries not indexed: "_NE2
  1. D MES^XPDUTL(TEXT)
  1. S TEXT=" "
  1. D MES^XPDUTL(TEXT)
  1. D DETIME^PXRMSXRM(START,END)
  1. ;Send a MailMan message with the results.
  1. D COMMSG^PXRMSXRM(GLOBAL,START,END,NE,NERROR)
  1. S ^PXRMINDX(120.5,"GLOBAL NAME")=$$GET1^DID(120.5,"","","GLOBAL NAME")
  1. S ^PXRMINDX(120.5,"BUILT BY")=DUZ
  1. S ^PXRMINDX(120.5,"DATE BUILT")=$$NOW^XLFDT
  1. Q
  1. ;
  1. SVITAL(X,DA) ; Set ACR index entry
  1. ; X(1)=DATE/TIME, X(2)=DFN, X(3)=VITAL TYPE, X(4)=ENTERED IN ERROR
  1. ; Do not index entries that are marked as entered-in-error.
  1. I $G(X(4)) Q
  1. S ^PXRMINDX(120.5,"IP",X(3),X(2),X(1),DA)=""
  1. S ^PXRMINDX(120.5,"PI",X(2),X(3),X(1),DA)=""
  1. Q
  1. ;
  1. KVITAL(X,DA) ; Delete ACR index entry
  1. K ^PXRMINDX(120.5,"IP",X(3),X(2),X(1),DA)
  1. K ^PXRMINDX(120.5,"PI",X(2),X(3),X(1),DA)
  1. Q