74 lines
3.2 KiB
Mathematica
74 lines
3.2 KiB
Mathematica
SPNLGRCH ; ISC-SF/GMB - SCD GATHER LAB TEST (GENERAL) DATA;19 MAY 94 [ 08/23/94 10:03 AM ] ;6/23/95 11:33
|
|
;;2.0;Spinal Cord Dysfunction;;01/02/1997
|
|
ROLLUP(DFN,FDATE,TDATE,HI) ;
|
|
; DFN Patient's internal entry number in the Patient file
|
|
; FDATE "From" date
|
|
; TDATE "Thru" date, default=today
|
|
; HI 1=keep track of individual patient usage
|
|
; 0=don't keep track
|
|
; Data will be rolled up into the following global:
|
|
; ^TMP("SPN",$J,"CH",
|
|
; with the following nodes:
|
|
; "PAT") # patients with at least 1 order
|
|
; "ORDERS") # orders
|
|
; "ORDERS",-orders) # patients who had this many orders
|
|
; "RESULTS") # test results
|
|
; "RESULTS",-results) # patients who had this many test results
|
|
; "TEST",testnr) # results for this test
|
|
; "TEST",testnr,"NAME") the name of the test
|
|
; "TEST",testnr,"PAT") # patients who had this test
|
|
; "TEST",testnr,"RESULTS",-results) # patients who had this many results for this test
|
|
; ... and usage by individual patient
|
|
; "HI","H1",-orders,-results,-diff tests,DFN)
|
|
N LFN,LASTDATE,TESTDATE,TESTNR,VALUE,ORDERS
|
|
N TRESULTS,RESULTS,TEST,NDTESTS
|
|
S LFN=+$P($G(^DPT(DFN,"LR")),U,1) ; Internal entry number in LAB DATA file
|
|
Q:'LFN
|
|
I '$D(TDATE) S TDATE=DT
|
|
; We are interested in any lab test administered within the 'from' and
|
|
; 'thru' date range. The record numbers are date/time (of test),
|
|
; subtracted from 9999999. This causes the tests to be listed in order
|
|
; from most recent to oldest. So we must modify our from & to dates.
|
|
S (ORDERS,TRESULTS)=0
|
|
S LASTDATE=9999999-FDATE
|
|
S TESTDATE=9999999-(TDATE+1) ; for each test date in the range
|
|
F S TESTDATE=$O(^LR(LFN,"CH",TESTDATE)) Q:TESTDATE'>0!(TESTDATE>LASTDATE) D
|
|
. S RESULTS=0
|
|
. S TESTNR=1 ; for each test on that date
|
|
. ; we start after 1 because the first two (0,1) nodes we ignore.
|
|
. ; Each node thereafter is for a specific test.
|
|
. F S TESTNR=$O(^LR(LFN,"CH",TESTDATE,TESTNR)) Q:TESTNR'>0 D
|
|
. . S VALUE=$G(^LR(LFN,"CH",TESTDATE,TESTNR))
|
|
. . ; make sure the test wasn't cancelled
|
|
. . I VALUE=""!(VALUE["canc")!(VALUE["CANC") Q
|
|
. . S TEST(TESTNR)=$G(TEST(TESTNR))+1 ; number results for this test
|
|
. . S RESULTS=RESULTS+1
|
|
. Q:RESULTS=0
|
|
. S TRESULTS=TRESULTS+RESULTS
|
|
. S ORDERS=ORDERS+1
|
|
Q:ORDERS=0
|
|
S ^(-ORDERS)=$G(^TMP("SPN",$J,"CH","ORDERS",-ORDERS))+1
|
|
S ^("PAT")=$G(^TMP("SPN",$J,"CH","PAT"))+1
|
|
S ^("RESULTS")=$G(^TMP("SPN",$J,"CH","RESULTS"))+TRESULTS
|
|
S ^(-TRESULTS)=$G(^TMP("SPN",$J,"CH","RESULTS",-TRESULTS))+1
|
|
S ^("ORDERS")=$G(^TMP("SPN",$J,"CH","ORDERS"))+ORDERS
|
|
S TESTNR="",NDTESTS=0
|
|
F S TESTNR=$O(TEST(TESTNR)) Q:TESTNR="" D
|
|
. S NDTESTS=NDTESTS+1 ; number of different tests
|
|
. S RESULTS=TEST(TESTNR)
|
|
. S ^(TESTNR)=$G(^TMP("SPN",$J,"CH","TEST",TESTNR))+RESULTS
|
|
. S ^("PAT")=$G(^TMP("SPN",$J,"CH","TEST",TESTNR,"PAT"))+1
|
|
. S ^(-RESULTS)=$G(^TMP("SPN",$J,"CH","TEST",TESTNR,"RESULTS",-RESULTS))+1
|
|
Q:'HI
|
|
S ^TMP("SPN",$J,"CH","HI","H1",-ORDERS,-TRESULTS,-NDTESTS,DFN)=""
|
|
Q
|
|
NAMEIT ;
|
|
N TESTNR,TESTNAME
|
|
S TESTNR=""
|
|
F S TESTNR=$O(^TMP("SPN",$J,"CH","TEST",TESTNR)) Q:TESTNR="" D
|
|
. ; Get the name from the DD. Is there a better way?
|
|
. S TESTNAME=$P($G(^DD(63.04,TESTNR,0)),U,1)
|
|
. I TESTNAME="" S TESTNAME="Not Identified"
|
|
. S ^TMP("SPN",$J,"CH","TEST",TESTNR,"NAME")=TESTNAME
|
|
Q
|