1 | 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 | ;;2.0;Spinal Cord Dysfunction;;01/02/1997
|
---|
3 | ROLLUP(DFN,FDATE,TDATE,HI) ;
|
---|
4 | ; DFN Patient's internal entry number in the Patient file
|
---|
5 | ; FDATE "From" date
|
---|
6 | ; TDATE "Thru" date, default=today
|
---|
7 | ; HI 1=keep track of individual patient usage
|
---|
8 | ; 0=don't keep track
|
---|
9 | ; Data will be rolled up into the following global:
|
---|
10 | ; ^TMP("SPN",$J,"CH",
|
---|
11 | ; with the following nodes:
|
---|
12 | ; "PAT") # patients with at least 1 order
|
---|
13 | ; "ORDERS") # orders
|
---|
14 | ; "ORDERS",-orders) # patients who had this many orders
|
---|
15 | ; "RESULTS") # test results
|
---|
16 | ; "RESULTS",-results) # patients who had this many test results
|
---|
17 | ; "TEST",testnr) # results for this test
|
---|
18 | ; "TEST",testnr,"NAME") the name of the test
|
---|
19 | ; "TEST",testnr,"PAT") # patients who had this test
|
---|
20 | ; "TEST",testnr,"RESULTS",-results) # patients who had this many results for this test
|
---|
21 | ; ... and usage by individual patient
|
---|
22 | ; "HI","H1",-orders,-results,-diff tests,DFN)
|
---|
23 | N LFN,LASTDATE,TESTDATE,TESTNR,VALUE,ORDERS
|
---|
24 | N TRESULTS,RESULTS,TEST,NDTESTS
|
---|
25 | S LFN=+$P($G(^DPT(DFN,"LR")),U,1) ; Internal entry number in LAB DATA file
|
---|
26 | Q:'LFN
|
---|
27 | I '$D(TDATE) S TDATE=DT
|
---|
28 | ; We are interested in any lab test administered within the 'from' and
|
---|
29 | ; 'thru' date range. The record numbers are date/time (of test),
|
---|
30 | ; subtracted from 9999999. This causes the tests to be listed in order
|
---|
31 | ; from most recent to oldest. So we must modify our from & to dates.
|
---|
32 | S (ORDERS,TRESULTS)=0
|
---|
33 | S LASTDATE=9999999-FDATE
|
---|
34 | S TESTDATE=9999999-(TDATE+1) ; for each test date in the range
|
---|
35 | F S TESTDATE=$O(^LR(LFN,"CH",TESTDATE)) Q:TESTDATE'>0!(TESTDATE>LASTDATE) D
|
---|
36 | . S RESULTS=0
|
---|
37 | . S TESTNR=1 ; for each test on that date
|
---|
38 | . ; we start after 1 because the first two (0,1) nodes we ignore.
|
---|
39 | . ; Each node thereafter is for a specific test.
|
---|
40 | . F S TESTNR=$O(^LR(LFN,"CH",TESTDATE,TESTNR)) Q:TESTNR'>0 D
|
---|
41 | . . S VALUE=$G(^LR(LFN,"CH",TESTDATE,TESTNR))
|
---|
42 | . . ; make sure the test wasn't cancelled
|
---|
43 | . . I VALUE=""!(VALUE["canc")!(VALUE["CANC") Q
|
---|
44 | . . S TEST(TESTNR)=$G(TEST(TESTNR))+1 ; number results for this test
|
---|
45 | . . S RESULTS=RESULTS+1
|
---|
46 | . Q:RESULTS=0
|
---|
47 | . S TRESULTS=TRESULTS+RESULTS
|
---|
48 | . S ORDERS=ORDERS+1
|
---|
49 | Q:ORDERS=0
|
---|
50 | S ^(-ORDERS)=$G(^TMP("SPN",$J,"CH","ORDERS",-ORDERS))+1
|
---|
51 | S ^("PAT")=$G(^TMP("SPN",$J,"CH","PAT"))+1
|
---|
52 | S ^("RESULTS")=$G(^TMP("SPN",$J,"CH","RESULTS"))+TRESULTS
|
---|
53 | S ^(-TRESULTS)=$G(^TMP("SPN",$J,"CH","RESULTS",-TRESULTS))+1
|
---|
54 | S ^("ORDERS")=$G(^TMP("SPN",$J,"CH","ORDERS"))+ORDERS
|
---|
55 | S TESTNR="",NDTESTS=0
|
---|
56 | F S TESTNR=$O(TEST(TESTNR)) Q:TESTNR="" D
|
---|
57 | . S NDTESTS=NDTESTS+1 ; number of different tests
|
---|
58 | . S RESULTS=TEST(TESTNR)
|
---|
59 | . S ^(TESTNR)=$G(^TMP("SPN",$J,"CH","TEST",TESTNR))+RESULTS
|
---|
60 | . S ^("PAT")=$G(^TMP("SPN",$J,"CH","TEST",TESTNR,"PAT"))+1
|
---|
61 | . S ^(-RESULTS)=$G(^TMP("SPN",$J,"CH","TEST",TESTNR,"RESULTS",-RESULTS))+1
|
---|
62 | Q:'HI
|
---|
63 | S ^TMP("SPN",$J,"CH","HI","H1",-ORDERS,-TRESULTS,-NDTESTS,DFN)=""
|
---|
64 | Q
|
---|
65 | NAMEIT ;
|
---|
66 | N TESTNR,TESTNAME
|
---|
67 | S TESTNR=""
|
---|
68 | F S TESTNR=$O(^TMP("SPN",$J,"CH","TEST",TESTNR)) Q:TESTNR="" D
|
---|
69 | . ; Get the name from the DD. Is there a better way?
|
---|
70 | . S TESTNAME=$P($G(^DD(63.04,TESTNR,0)),U,1)
|
---|
71 | . I TESTNAME="" S TESTNAME="Not Identified"
|
---|
72 | . S ^TMP("SPN",$J,"CH","TEST",TESTNR,"NAME")=TESTNAME
|
---|
73 | Q
|
---|