1 | PXRMFF0 ;SLC/PKR - Clinical Reminders function finding routines. ;09/11/2007
|
---|
2 | ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123
|
---|
3 | ;
|
---|
4 | ;============================================
|
---|
5 | COUNT(LIST,FIEVAL,COUNT) ;
|
---|
6 | N IND,JND,KND
|
---|
7 | S COUNT=0
|
---|
8 | F IND=1:1:LIST(0) D
|
---|
9 | . S JND=LIST(IND),KND=0
|
---|
10 | . F S KND=+$O(FIEVAL(JND,KND)) Q:KND=0 D
|
---|
11 | .. I FIEVAL(JND,KND) S COUNT=COUNT+1
|
---|
12 | Q
|
---|
13 | ;
|
---|
14 | ;===========================================
|
---|
15 | DIFFDATE(LIST,FIEVAL,DIFF) ;Return the difference in days between the
|
---|
16 | ;first two findings in the list.
|
---|
17 | I LIST(0)<2 S DIFF=2 Q
|
---|
18 | N DATE1,DATE2,DAYS,IND,JND
|
---|
19 | S DATE1=+$G(FIEVAL(LIST(1),"DATE"))
|
---|
20 | S DATE2=+$G(FIEVAL(LIST(2),"DATE"))
|
---|
21 | S DAYS=$$FMDIFF^XLFDT(DATE1,DATE2)
|
---|
22 | S DIFF=$S(DAYS<0:-DAYS,1:DAYS)
|
---|
23 | Q
|
---|
24 | ;
|
---|
25 | ;===========================================
|
---|
26 | DUR(LIST,FIEVAL,DUR) ;
|
---|
27 | N EDT,IND,JND,KND,SDT
|
---|
28 | F IND=1:1:LIST(0) D
|
---|
29 | . S JND=LIST(IND)
|
---|
30 | . I FIEVAL(JND)=0 S (EDT,SDT)=0 Q
|
---|
31 | .;Check for finding with start and stop date.
|
---|
32 | . I $D(FIEVAL(JND,"START DATE")) D
|
---|
33 | .. S SDT=+$G(FIEVAL(JND,"START DATE"))
|
---|
34 | .. S EDT=+$G(FIEVAL(JND,"STOP DATE"))
|
---|
35 | .. I EDT=0 S EDT=+$G(FIEVAL(JND,"DATE"))
|
---|
36 | . E D
|
---|
37 | ..;Get start and stop for multiple occurrences.
|
---|
38 | .. S KND=$O(FIEVAL(JND,"A"),-1)
|
---|
39 | .. S EDT=$S(KND="":0,1:$G(FIEVAL(JND,KND,"DATE")))
|
---|
40 | .. S KND=+$O(FIEVAL(JND,""))
|
---|
41 | .. S SDT=$S(KND=0:0,1:$G(FIEVAL(JND,KND,"DATE")))
|
---|
42 | ;Return the duration in days.
|
---|
43 | S DUR=$$FMDIFF^XLFDT(EDT,SDT)
|
---|
44 | I DUR<0 S DUR=-DUR
|
---|
45 | Q
|
---|
46 | ;
|
---|
47 | ;============================================
|
---|
48 | FI(LIST,FIEVAL,LV) ;Given a regular finding return its true/false value.
|
---|
49 | S LV=FIEVAL(LIST(1))
|
---|
50 | Q
|
---|
51 | ;
|
---|
52 | ;============================================
|
---|
53 | MAXDATE(LIST,FIEVAL,MAXDATE) ;Given a list of findings return the maximum
|
---|
54 | ;date. This will be the newest date.
|
---|
55 | N DATE,IND
|
---|
56 | S MAXDATE=0
|
---|
57 | F IND=1:1:LIST(0) D
|
---|
58 | . S DATE=$G(FIEVAL(LIST(IND),"DATE"))
|
---|
59 | . I DATE>MAXDATE S MAXDATE=DATE
|
---|
60 | Q
|
---|
61 | ;
|
---|
62 | ;============================================
|
---|
63 | MINDATE(LIST,FIEVAL,MINDATE) ;Given a list of findings return the minimum
|
---|
64 | ;date. This will be the oldest non-null or zero date.
|
---|
65 | N DATE,IND
|
---|
66 | S MINDATE=9991231
|
---|
67 | F IND=1:1:LIST(0) D
|
---|
68 | . S DATE=$G(FIEVAL(LIST(IND),"DATE"))
|
---|
69 | . I DATE<MINDATE S MINDATE=DATE
|
---|
70 | I MINDATE=9991231 S MINDATE=0
|
---|
71 | Q
|
---|
72 | ;
|
---|
73 | ;============================================
|
---|
74 | MRD(LIST,FIEVAL,MRD) ;Given a list of findings return the most recent
|
---|
75 | ;finding date from the list.
|
---|
76 | N DATE,IND
|
---|
77 | S MRD=0
|
---|
78 | F IND=1:1:LIST(0) D
|
---|
79 | . S DATE=$G(FIEVAL(LIST(IND),"DATE"))
|
---|
80 | . I DATE>MRD S MRD=DATE
|
---|
81 | Q
|
---|
82 | ;
|
---|
83 | ;============================================
|
---|
84 | NUMERIC(LIST,FIEVAL,VALUE) ;Given a finding, return the first numeric
|
---|
85 | ;portion of one of the "CSUB" values. Based on original work
|
---|
86 | ;by R. Silverman.
|
---|
87 | S VALUE=$G(FIEVAL(LIST(1),LIST(2),LIST(3)))
|
---|
88 | S VALUE=$$FIRSTNUM(VALUE)
|
---|
89 | Q
|
---|
90 | ;
|
---|
91 | FIRSTNUM(STRING) ;return the first numeric portion of a string.
|
---|
92 | N CHAR,DONE,IND,NUMBER,NUMERIC
|
---|
93 | S NUMERIC="+-.1234567890"
|
---|
94 | S STRING=$TR(STRING," ")
|
---|
95 | S DONE=0,IND=0,NUMBER=""
|
---|
96 | F Q:DONE D
|
---|
97 | . S IND=IND+1,CHAR=$E(STRING,IND)
|
---|
98 | . I CHAR="" S DONE=1 Q
|
---|
99 | . I NUMERIC[CHAR S NUMBER=NUMBER_CHAR
|
---|
100 | . I NUMBER'="",NUMERIC'[CHAR S DONE=1
|
---|
101 | Q +NUMBER
|
---|
102 | ;
|
---|
103 | ;============================================
|
---|
104 | VALUE(LIST,FIEVAL,VALUE) ;Given a finding return one of its "CSUB"
|
---|
105 | ;values.
|
---|
106 | S VALUE=$G(FIEVAL(LIST(1),LIST(2),LIST(3)))
|
---|
107 | Q
|
---|
108 | ;
|
---|