| 1 | WVRPSCR1 ;HCIOFO/FT,JR-Display Compliance Rates (cont.) ;6/17/99  11:47
 | 
|---|
| 2 |  ;;1.0;WOMEN'S HEALTH;**3,7**;Sep 30, 1998
 | 
|---|
| 3 |  ;;  Original routine created by IHS/ANMC/MWR
 | 
|---|
| 4 |  ;;* MICHAEL REMILLARD, DDS * ALASKA NATIVE MEDICAL CENTER *
 | 
|---|
| 5 |  ;;  THIS REPORT WILL DISPLAY COMPLIANCE RATES FOR PAPS & MAMS.
 | 
|---|
| 6 |  ;;  ENTRY POINTS CALLED BY WVRPSCR.
 | 
|---|
| 7 | DATA ;EP
 | 
|---|
| 8 |  ;---> SORT AND STORE ARRAY IN ^TMP("WV",$J
 | 
|---|
| 9 |  K WVTMP,^TMP("WV",$J),^TMP("WVP",$J),WVPR
 | 
|---|
| 10 |  ;---> WVBEGDT1=ONE SECOND BEFORE BEGIN DATE.
 | 
|---|
| 11 |  ;---> WVENDDT1=THE LAST SECOND OF END DATE.
 | 
|---|
| 12 |  F WVCNT=20,30,40,50,60,70,200 S WVAGRG(WVCNT)=""
 | 
|---|
| 13 |  S WVBEGDT1=WVBEGDT-.0001,WVENDDT1=WVENDDT+.9999
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  S WVDATE=WVBEGDT1,WVTOT=$$ACTIVE^WVRPSCR2(WVBEGDT,WVENDDT1,WVAGRG)
 | 
|---|
| 16 |  F  S WVDATE=$O(^WV(790.1,"D",WVDATE)) Q:'WVDATE!(WVDATE>WVENDDT1)  D
 | 
|---|
| 17 |  .S WVIEN=0
 | 
|---|
| 18 |  .F  S WVIEN=$O(^WV(790.1,"D",WVDATE,WVIEN)) Q:'WVIEN  D
 | 
|---|
| 19 |  ..S Y=^WV(790.1,WVIEN,0)
 | 
|---|
| 20 |  ..S WVDFN=$P(Y,U,2),WVPCDN=$P(Y,U,4),WVRES=$P(Y,U,5)
 | 
|---|
| 21 |  ..;
 | 
|---|
| 22 |  ..;---> QUIT IF THIS PROCEDURE HAS A RESULT OF "ERROR/DISREGARD".
 | 
|---|
| 23 |  ..Q:WVRES=8
 | 
|---|
| 24 |  ..;
 | 
|---|
| 25 |  ..;---> QUIT IF NEITHER A PAP (IEN=1) NOR A SCREENING MAM (IEN=28).
 | 
|---|
| 26 |  ..Q:((WVPCDN'=1)&(WVPCDN'=28))
 | 
|---|
| 27 |  ..;
 | 
|---|
| 28 |  ..;---> QUIT IS PATIENT IS NOT WITHIN AGE RANGE.
 | 
|---|
| 29 |  ..S WVAGE=+$$AGE^WVUTL9(WVDFN)
 | 
|---|
| 30 |  ..I WVAGRG'=1 Q:((WVAGE<$P(WVAGRG,"-"))!(WVAGE>$P(WVAGRG,"-",2)))
 | 
|---|
| 31 |  ..;
 | 
|---|
| 32 |  ..;---> GET VALUE OF RESULT: 0=NORMAL, 1=ABNORMAL, 2=NO RESULT
 | 
|---|
| 33 |  ..S WVNORM=$$NORMAL^WVUTL4(WVRES) S:WVNORM=2 WVNORM=0
 | 
|---|
| 34 |  ..;
 | 
|---|
| 35 |  ..S ^TMP("WV",$J,WVDFN,WVNORM,WVPCDN,WVIEN)=""
 | 
|---|
| 36 |  ..I WVPCDN=1 D
 | 
|---|
| 37 |  ...S WVJPAPR=$P($G(^WV(790,WVDFN,0)),U,16)
 | 
|---|
| 38 |  ...I WVJPAPR'>0 S WVJPAPR="NOT SPECIFIED"
 | 
|---|
| 39 |  ...E  S WVJPAPR=$P($G(^WV(790.03,WVJPAPR,0)),U)
 | 
|---|
| 40 |  ...S ^TMP("WVP",$J,WVJPAPR,WVDFN,WVNORM,WVPCDN,WVIEN)=""
 | 
|---|
| 41 |  ..I WVPCDN=28 D
 | 
|---|
| 42 |  ...S WVJ=$O(WVAGRG(WVAGE))
 | 
|---|
| 43 |  ...S WVJAGER=$S(WVJ=20:"<20",WVJ=30:"20-29",WVJ=40:"30-39",WVJ=50:"40-49",WVJ=60:"50-59",WVJ=70:"60-69",WVJ=200:">70",1:"AGE UNKNOWN")
 | 
|---|
| 44 |  ...S ^TMP("WVP",$J,WVJAGER,WVDFN,WVNORM,WVPCDN,WVIEN)=""
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  ;---> NOW COLLATE DATA FROM ^TMP ARRAY INTO LOCAL WVTMP REPORT ARRAY.
 | 
|---|
| 47 |  ;---> FIRST, SEED LOCAL ARRAY WITH ZEROS.
 | 
|---|
| 48 |  F M=1,28 D
 | 
|---|
| 49 |  .N I F I=1:1:5 S WVTMP("RES",M,I)=0
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  ;---> COLLATE DATA.
 | 
|---|
| 52 |  S N=0
 | 
|---|
| 53 |  F  S N=$O(^TMP("WV",$J,N)) Q:'N  D
 | 
|---|
| 54 |  .F M=1,28 D
 | 
|---|
| 55 |  ..Q:$D(^TMP("WV",$J,N,1,M))
 | 
|---|
| 56 |  ..S P=0,Q=0
 | 
|---|
| 57 |  ..F  S P=$O(^TMP("WV",$J,N,0,M,P)) Q:'P  S Q=Q+1
 | 
|---|
| 58 |  ..Q:'Q
 | 
|---|
| 59 |  ..I '$D(WVTMP("RES",M,Q)) S WVTMP("RES",M,Q)=1 Q
 | 
|---|
| 60 |  ..S WVTMP("RES",M,Q)=WVTMP("RES",M,Q)+1
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 |  ;---> STORE ALL NODES >5 IN THE 5+ NODE.
 | 
|---|
| 63 |  F M=1,28 D
 | 
|---|
| 64 |  .S Q=5
 | 
|---|
| 65 |  .F  S Q=$O(WVTMP("RES",M,Q)) Q:'Q  D
 | 
|---|
| 66 |  ..S WVTMP("RES",M,5)=WVTMP("RES",M,5)+WVTMP("RES",M,Q)
 | 
|---|
| 67 |  ..K WVTMP("RES",M,Q)
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  ;---> FIGURE PERCENTAGES OF WOMEN AND STORE IN ARRAY.
 | 
|---|
| 70 |  F M=1,28 D
 | 
|---|
| 71 |  .F Q=1:1:5 S $P(WVTMP("RES",M,Q),U,2)=$J((+WVTMP("RES",M,Q)/WVTOT),0,2)
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  ;---> BUILD DISPLAY ARRAY.
 | 
|---|
| 74 |  N WVNODE K ^TMP("WV",$J)
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  ;---> PAPS SUBHEADER LINE.
 | 
|---|
| 77 |  S WVNODE=$$S(40)_"SCREENING PAPS"
 | 
|---|
| 78 |  D WRITE(1,WVNODE)
 | 
|---|
| 79 |  S WVNODE=$$S(39)_"----------------"
 | 
|---|
| 80 |  D WRITE(2,WVNODE)
 | 
|---|
| 81 |  S WVNODE=" # of PAPs:                                        1     2     3     4     5+"
 | 
|---|
| 82 |  D WRITE(4,WVNODE)
 | 
|---|
| 83 |  S WVNODE=" -----------                                     ----- ----- ----- ----- -----"
 | 
|---|
| 84 |  D WRITE(5,WVNODE)
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  ;---> PAPS NUMBER OF WOMEN DATA LINE.
 | 
|---|
| 87 |  S WVNODE=" # of Women:                                    "
 | 
|---|
| 88 |  F Q=1:1:5 S WVNODE=WVNODE_$J($P(WVTMP("RES",1,Q),U),6)
 | 
|---|
| 89 |  D WRITE(6,WVNODE)
 | 
|---|
| 90 |  S WVNODE=" % of Women:                                    "
 | 
|---|
| 91 |  F Q=1:1:5 S WVNODE=WVNODE_$J(($P(WVTMP("RES",1,Q),U,2)*100),5)_"%"
 | 
|---|
| 92 |  D WRITE(7,WVNODE)
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  ;---> LINE FEEDS BETWEEN PAPS AND MAMS.
 | 
|---|
| 95 |  S WVNODE="" D WRITE(8,WVNODE) S WVNODE="" D WRITE(9,WVNODE)
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  ;---> MAMS SUBHEADER LINE.
 | 
|---|
| 98 |  S WVNODE=$$S(40)_"SCREENING MAMS"
 | 
|---|
| 99 |  D WRITE(10,WVNODE)
 | 
|---|
| 100 |  S WVNODE=$$S(39)_"----------------"
 | 
|---|
| 101 |  D WRITE(11,WVNODE)
 | 
|---|
| 102 |  S WVNODE=" # of MAMs:                                        1     2     3     4     5+"
 | 
|---|
| 103 |  D WRITE(13,WVNODE)
 | 
|---|
| 104 |  S WVNODE=" -----------                                     ----- ----- ----- ----- -----"
 | 
|---|
| 105 |  D WRITE(14,WVNODE)
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ;---> PAPS NUMBER OF WOMEN DATA LINE.
 | 
|---|
| 108 |  S WVNODE=" # of Women:                                    "
 | 
|---|
| 109 |  F Q=1:1:5 S WVNODE=WVNODE_$J($P(WVTMP("RES",28,Q),U),6)
 | 
|---|
| 110 |  D WRITE(15,WVNODE)
 | 
|---|
| 111 |  S WVNODE=" % of Women:                                    "
 | 
|---|
| 112 |  F Q=1:1:5 S WVNODE=WVNODE_$J(($P(WVTMP("RES",28,Q),U,2)*100),5)_"%"
 | 
|---|
| 113 |  D WRITE(16,WVNODE)
 | 
|---|
| 114 |  Q
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 | WRITE(I,Y) ;EP
 | 
|---|
| 117 |  S ^TMP("WV",$J,I,0)=Y
 | 
|---|
| 118 |  Q
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 | S(S) ;EP
 | 
|---|
| 121 |  ;---> SPACES.
 | 
|---|
| 122 |  Q $$S^WVUTL7($G(S))
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 | AGERNG(WVAGRG,WVPOP) ;EP
 | 
|---|
| 126 |  ;---> ASK AGE RANGE.
 | 
|---|
| 127 |  ;---> RETURN AGE RANGE IN WVAGRG.
 | 
|---|
| 128 |  N DIR,DIRUT,Y S WVPOP=0
 | 
|---|
| 129 |  W !!?3,"Do you wish to limit this report to an age range?"
 | 
|---|
| 130 |  S DIR(0)="Y",DIR("B")="NO" D HELP1
 | 
|---|
| 131 |  S DIR("A")="   Enter Yes or No"
 | 
|---|
| 132 |  D ^DIR K DIR W !
 | 
|---|
| 133 |  S:$D(DIRUT) WVPOP=1
 | 
|---|
| 134 |  ;---> IF NOT DISPLAYING BY AGE RANGE, SET WVAGRG (AGE RANGE)=1, QUIT.
 | 
|---|
| 135 |  I 'Y S WVAGRG=1 Q
 | 
|---|
| 136 | BYAGE1 ;
 | 
|---|
| 137 |  W !?5,"Enter the age range you wish to select in the form of: 40-75"
 | 
|---|
| 138 |  W !?5,"Use a dash ""-"" to separate the limits of the range."
 | 
|---|
| 139 |  W !?5,"To select only one age, simply enter that age, with no dash."
 | 
|---|
| 140 |  W !?5,"(NOTE: Patient ages will reflect the age they are today.)",!
 | 
|---|
| 141 |  K DIR
 | 
|---|
| 142 |  S DIR(0)="FOA",DIR("A")="     Enter age range: "
 | 
|---|
| 143 |  S:$D(^WV(790.72,DUZ,0)) DIR("B")=$P(^(0),U,3)
 | 
|---|
| 144 |  D ^DIR K DIR
 | 
|---|
| 145 |  I $D(DIRUT) S WVPOP=1 Q
 | 
|---|
| 146 |  D CHECK(.Y)
 | 
|---|
| 147 |  I Y="" D  G BYAGE1
 | 
|---|
| 148 |  .W !!?5,"* INVALID AGE RANGE.  Please begin again."
 | 
|---|
| 149 |  ;---> WVAGRG=SELECTED AGE RANGE(S).
 | 
|---|
| 150 |  S WVAGRG=Y
 | 
|---|
| 151 |  D DIC^WVFMAN(790.72,"L",.Y,"","","","`"_DUZ)
 | 
|---|
| 152 |  Q:Y<0
 | 
|---|
| 153 |  D DIE^WVFMAN(790.72,".03////"_WVAGRG,+Y,.WVPOP,1)
 | 
|---|
| 154 |  Q
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 | HELP1 ;EP
 | 
|---|
| 157 |  ;;Answer "YES" to display screening rates for a specific age range.
 | 
|---|
| 158 |  ;;If you choose to display for an age range, you will be given the
 | 
|---|
| 159 |  ;;opportunity to select the age range.  For example, you might choose
 | 
|---|
| 160 |  ;;to display from ages 50-75.
 | 
|---|
| 161 |  ;;Answer "NO" to display screening rates for all ages.
 | 
|---|
| 162 |  S WVTAB=5,WVLINL="HELP1" D HELPTX
 | 
|---|
| 163 |  Q
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 | PRINTX ;EP
 | 
|---|
| 166 |  N I,T,X S T=$$REPEAT^XLFSTR(" ",WVTAB)
 | 
|---|
| 167 |  F I=1:1 S X=$T(@WVLINL+I) Q:X'[";;"  W !,T,$P(X,";;",2)
 | 
|---|
| 168 |  Q
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 | HELPTX ;EP
 | 
|---|
| 171 |  ;---> CREATES DIR ARRAY FOR DIR.  REQUIRED VARIABLES: WVTAB,WVLINL.
 | 
|---|
| 172 |  N I,T,X S T=$$REPEAT^XLFSTR(" ",WVTAB)
 | 
|---|
| 173 |  F I=1:1 S X=$T(@WVLINL+I) Q:X'[";;"  S DIR("?",I)=T_$P(X,";;",2)
 | 
|---|
| 174 |  S DIR("?")=DIR("?",I-1) K DIR("?",I-1)
 | 
|---|
| 175 |  Q
 | 
|---|
| 176 |  ;
 | 
|---|
| 177 | CHECK(X) ;EP
 | 
|---|
| 178 |  ;---> CHECK SYNTAX OF AGE RANGE STRING.
 | 
|---|
| 179 |  ;---> IF X=ONE AGE ONLY, SET IT IN THE FORM X-X AND QUIT.
 | 
|---|
| 180 |  I X?1N.N S X=X_"-"_X Q
 | 
|---|
| 181 |  ;
 | 
|---|
| 182 |  N FAIL,I,Y1,Y2
 | 
|---|
| 183 |  S FAIL=0
 | 
|---|
| 184 |  ;---> CHECK EACH RANGE.
 | 
|---|
| 185 |  S Y1=$P(X,"-"),Y2=$P(X,"-",2)
 | 
|---|
| 186 |  ;---> EACH END OF EACH RANGE SHOULD BE A NUMBER.
 | 
|---|
| 187 |  I (Y1'?1N.N)!(Y2'?1N.N) S X="" Q
 | 
|---|
| 188 |  ;---> THE LOWER NUMBER SHOULD BE FIRST.
 | 
|---|
| 189 |  I Y2<Y1 S FAIL=1
 | 
|---|
| 190 |  I FAIL S X="" Q
 | 
|---|
| 191 |  Q
 | 
|---|