| 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 | ;
|
|---|