1 | SPNLGECH ; ISC-SF/GMB - SCD GATHER LAB TEST (GENERAL) DATA;11 MAY 94 [ 07/06/94 9:57 AM ] ;6/23/95 11:18
|
---|
2 | ;;2.0;Spinal Cord Dysfunction;;01/02/1997
|
---|
3 | EXTRACT(DFN,FDATE,TDATE,CLEARTXT,ABORT) ;
|
---|
4 | ; DFN Patient's internal entry number in the Patient file
|
---|
5 | ; FDATE "From" date
|
---|
6 | ; TDATE "Thru" date, default=today
|
---|
7 | ; CLEARTXT 1=translate all codes to their meaning,
|
---|
8 | ; 0=don't translate codes (default=0)
|
---|
9 | N LFN,LASTDATE,TESTDATE,TESTNR,VALUE,REALDATE,YYY,MM,TESTNAME,TESTCOST
|
---|
10 | S LFN=+$P($G(^DPT(DFN,"LR")),U,1) ; Internal entry number in LAB DATA file
|
---|
11 | Q:'LFN
|
---|
12 | I '$D(TDATE) S TDATE=DT
|
---|
13 | I '$D(CLEARTXT) S CLEARTXT=0
|
---|
14 | ; We change the days in the dates, because we track only whole months'
|
---|
15 | ; worth of data.
|
---|
16 | S FDATE=$E(FDATE,1,5)_"01"
|
---|
17 | S TDATE=$E(TDATE,1,5)_"31"
|
---|
18 | ; We are interested in any lab test administered within the 'from' and
|
---|
19 | ; 'thru' date range. The record numbers are date/time (of test),
|
---|
20 | ; subtracted from 9999999. This causes the tests to be listed in order
|
---|
21 | ; from most recent to oldest. So we must modify our from & to dates.
|
---|
22 | K ^TMP("SPN",$J,"CH")
|
---|
23 | S LASTDATE=9999999-FDATE
|
---|
24 | S TESTDATE=9999999-(TDATE+1) ; for each test date in the range
|
---|
25 | F S TESTDATE=$O(^LR(LFN,"CH",TESTDATE)) Q:TESTDATE'>0!(TESTDATE>LASTDATE) D
|
---|
26 | . S REALDATE=9999999-TESTDATE\1
|
---|
27 | . S YYY=$E(REALDATE,1,3)
|
---|
28 | . S MM=+$E(REALDATE,4,5)
|
---|
29 | . S TESTNR=1 ; for each test on that date
|
---|
30 | . ; we start after 1 because the first two (0,1) nodes we ignore.
|
---|
31 | . ; Each node thereafter is for a specific test.
|
---|
32 | . F S TESTNR=$O(^LR(LFN,"CH",TESTDATE,TESTNR)) Q:TESTNR'>0 D
|
---|
33 | . . S VALUE=$G(^LR(LFN,"CH",TESTDATE,TESTNR))
|
---|
34 | . . ; make sure the test wasn't cancelled
|
---|
35 | . . I VALUE=""!(VALUE["canc")!(VALUE["CANC") Q
|
---|
36 | . . ; now we increment a count of the number of times this test was
|
---|
37 | . . ; given in this month of this year
|
---|
38 | . . S $P(^(YYY),U,MM)=$P($G(^TMP("SPN",$J,"CH",TESTNR,YYY)),U,MM)+1
|
---|
39 | S TESTNR=""
|
---|
40 | F S TESTNR=$O(^TMP("SPN",$J,"CH",TESTNR)) Q:TESTNR="" D
|
---|
41 | . ; Get the name from the DD. Is there a better way?
|
---|
42 | . ; If the name is so firm, why are we sending it?
|
---|
43 | . S TESTNAME=$P($G(^DD(63.04,TESTNR,0)),U,1)
|
---|
44 | . ; We might also use $O(^LAB(60,"B",TESTNAME,0)) in the following...
|
---|
45 | . ; I think either should work fine.
|
---|
46 | . S TESTCOST=$P($G(^LAB(60,+$O(^LAB(60,"C","CH;"_TESTNR_";1",0)),0)),U,11)
|
---|
47 | . S YYY=""
|
---|
48 | . F S YYY=$O(^TMP("SPN",$J,"CH",TESTNR,YYY)) Q:YYY="" D
|
---|
49 | . . D ADDREC^SPNLGE("CH",YYY_"0000"_"^"_TESTNAME_"^"_TESTNR_"^"_TESTCOST_"^"_^TMP("SPN",$J,"CH",TESTNR,YYY))
|
---|
50 | K ^TMP("SPN",$J,"CH")
|
---|
51 | Q
|
---|