Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: APCLRIN

APCLRIN.m

Go to the documentation of this file.
  1. APCLRIN ; IHS/CMI/LAB - INTERNET ACCESS ;
  1. ;;2.0;IHS PCC SUITE;**10**;MAY 14, 2009;Build 88
  1. ;
  1. ;
  1. START ;
  1. INFORM ;
  1. W:$D(IOF) @IOF
  1. W !,$$CTR($$LOC)
  1. W !,$$CTR($$USR)
  1. W !!,"This report will tally the number of Patients with internet access"
  1. W !,"documented, the number with internet access and the method of internet"
  1. W !,"access. You will be asked to run this for the user population, "
  1. W !,"the GPRA defined active clinical population or for a search template"
  1. W !,"of patients.",!!
  1. D EXIT
  1. GROUP ;what set of patients
  1. S APCLGRP=""
  1. S DIR(0)="S^U:User Population (1 visit past 3 yrs);C:Active Clinical Patients (see GPRA definition);S:Search Template of Patients (created inQMAN, etc);A:ALL Patients"
  1. S DIR("A")="Which set of patients should the report include",DIR("B")="C"
  1. KILL DA D ^DIR KILL DIR
  1. G:$D(DIRUT) EXIT
  1. S APCLGRP=Y
  1. I APCLGRP="S" D TEMPLATE G:APCLSEAT="" GROUP G DATE
  1. COMM ;
  1. W !!,"User Population and Active Clinical Definitions usually only include"
  1. W !,"patients who live in communities in your service area. You can "
  1. W !,"limit this report to patients in certain communities or you can include"
  1. W !,"all ",$S(APCLGRP="U":"User Population",APCLGRP="C":"Active Clinical",1:""),"patients or just those living in certain communities.",!
  1. K DIR
  1. W !,"Do you wish to limit the patients reviewed to those living in a particular set"
  1. S DIR(0)="Y",DIR("A")="of communities",DIR("B")="Y"
  1. KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) G GROUP
  1. S APCLYN=Y
  1. I Y=0 S APCLTAXI="" G MFIC
  1. W !!,"Specify the community taxonomy to determine which patients will be",!,"included in the report. You should have created this taxonomy using QMAN.",!
  1. K APCLTAX
  1. S APCLTAXI=""
  1. D ^XBFMK
  1. S DIC("S")="I $P(^(0),U,15)=9999999.05",DIC="^ATXAX(",DIC(0)="AEMQ",DIC("A")="Enter the Name of the Community Taxonomy: "
  1. S B=$P($G(^BGPSITE(DUZ(2),0)),U,5) I B S DIC("B")=$P(^ATXAX(B,0),U)
  1. D ^DIC
  1. I Y=-1 Q
  1. S APCLTAXI=+Y
  1. COM1 ;
  1. S X=0
  1. F S X=$O(^ATXAX(APCLTAXI,21,X)) Q:'X D
  1. .S APCLTAX($P(^ATXAX(APCLTAXI,21,X,0),U))=""
  1. .Q
  1. I '$D(APCLTAX) W !!,"There are no communities in that taxonomy." G COMM
  1. S X=0,G=0
  1. F S X=$O(^ATXAX(APCLTAXI,21,X)) Q:'X D
  1. .S C=$P(^ATXAX(APCLTAXI,21,X,0),U)
  1. .I '$D(^AUTTCOM("B",C)) W !!,"*** Warning: Community ",C," is in the taxonomy but was not",!,"found in the standard community table." S G=1
  1. .Q
  1. I G D I APCLQUIT D EXIT Q
  1. .W !!,"These communities may have been renamed or there may be patients"
  1. .W !,"who have been reassigned from this community to a new community and this"
  1. .W !,"could reduce your patient population."
  1. .S APCLQUIT=0
  1. .S DIR(0)="Y",DIR("A")="Do you want to cancel the report and review the communities" KILL DA D ^DIR KILL DIR
  1. .I $D(DIRUT) S APCLQUIT=1
  1. .I Y S APCLQUIT=1
  1. .Q
  1. MFIC K APCLQUIT
  1. I $P($G(^BGPSITE(DUZ(2),0)),U,8)=1 D I APCLMFIY="" G COMM
  1. .S APCLMFIY=""
  1. .W !!,"Specify the LOCATION taxonomy to determine which patient visits will be"
  1. .W !,"used to determine whether a patient is in the denominators for the report."
  1. .W !,"You should have created this taxonomy using QMAN.",!
  1. .K APCLMFIT
  1. .S APCLMFIY=""
  1. .D ^XBFMK
  1. .S DIC("S")="I $P(^(0),U,15)=9999999.06",DIC="^ATXAX(",DIC(0)="AEMQ",DIC("A")="Enter the Name of the Location/Facility Taxonomy: "
  1. .S B=$P($G(^BGPSITE(DUZ(2),0)),U,9) I B S DIC("B")=$P(^ATXAX(B,0),U)
  1. .D ^DIC
  1. .I Y=-1 Q
  1. .S APCLMFIY=+Y
  1. ;
  1. BEN ;
  1. S APCLBEN=""
  1. S DIR(0)="S^1:Indian/Alaskan Native (Classification 01);2:Not Indian Alaskan/Native (Not Classification 01);3:All (both Indian/Alaskan Natives and Non 01)",DIR("A")="Select Beneficiary Population to include in this report"
  1. S DIR("B")="1" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) G COMM
  1. S APCLBEN=Y
  1. ;
  1. DATE ;
  1. K APCLED,APCLBD
  1. W !!,"You can run this report based on the current status of patient's internet"
  1. W !,"or run it based on internet access data as of a certain date in the past.",!
  1. W !,"Please enter the 'As of Date', enter T for today to get current information.",!
  1. K DIR W ! S DIR(0)="DO^::EXP",DIR("A")="Enter as of Date"
  1. D ^DIR K DIR G:Y<1 BEN S APCLBD=Y
  1. ;
  1. ZIS ;call to XBDBQUE
  1. DEMO ;
  1. D DEMOCHK^APCLUTL(.APCLDEMO)
  1. I APCLDEMO=-1 G DATE
  1. S XBRP="PRINT^APCLRIN",XBRC="PROC^APCLRIN",XBRX="EXIT^APCLRIN",XBNS="APCL"
  1. D ^XBDBQUE
  1. D EXIT
  1. Q
  1. EXIT ;clean up and exit
  1. D EN^XBVK("APCL")
  1. D ^XBFMK
  1. D KILL^AUPNPAT
  1. Q
  1. TEMPLATE ;If Template was selected
  1. S APCLSEAT=""
  1. ;
  1. W ! S DIC("S")="I $P(^(0),U,4)=9000001!($P(^(0),U,4)=2)" S DIC="^DIBT(",DIC("A")="Enter Patient SEARCH TEMPLATE name: ",DIC(0)="AEMQ" D ^DIC K DIC,DA,DR,DICR
  1. I Y=-1 W !!,"No search template selected.",! H 2 Q
  1. S APCLSEAT=+Y
  1. Q
  1. ;
  1. PROC ;
  1. K APCLDATA
  1. S APCLDATA("TOTAL PATS")=0
  1. S APCLDATA("W/DOC")=0
  1. S APCLDATA("YN","YES")=0
  1. S APCLDATA("YN","NO")=0
  1. S DFN=0 F S DFN=$O(^AUPNPAT(DFN)) Q:DFN'=+DFN D
  1. .Q:'$D(^DPT(DFN,0))
  1. .Q:$P(^DPT(DFN,0),U,19) ;merged away
  1. .Q:$$DEMO^APCLUTL(DFN,$G(APCLDEMO))
  1. .K ^TMP($J,"A")
  1. .I APCLGRP="A" Q:'$$ALL^APCLRIN1(DFN,APCLBD,APCLTAXI,APCLBEN)
  1. .I APCLGRP="U" Q:'$$UP^APCLRIN1(DFN,$$FMADD^XLFDT(APCLBD,-(3*365)),APCLBD,APCLTAXI,APCLBEN)
  1. .I APCLGRP="C" Q:'$$ACTCL^APCLRIN1(DFN,$$FMADD^XLFDT(APCLBD,-(3*365)),APCLBD,APCLTAXI,APCLBEN,$P($G(^BGPSITE(DUZ(2),0)),U,6))
  1. .I APCLGRP="S" Q:'$D(^DIBT(APCLSEAT,1,DFN)) ;pt not in search template
  1. .S APCLDATA("TOTAL PATS")=$G(APCLDATA("TOTAL PATS"))+1
  1. .I '$D(^AUPNPAT(DFN,81)) Q ;no internet access
  1. .I '$O(^AUPNPAT(DFN,81,0)) Q ;no documentation of internet access
  1. .S %="" S D=0 F S D=$O(^AUPNPAT(DFN,81,"B",D)) Q:D'=+D!(D>APCLBD) S X=0 F S X=$O(^AUPNPAT(DFN,81,"B",D,X)) Q:X'=+X S %=1
  1. .Q:'%
  1. .S APCLDATA("W/DOC")=$G(APCLDATA("W/DOC"))+1
  1. .I $P(^DPT(DFN,0),U,2)="F" S APCLDATA("W/DOC","FEMALE")=$G(APCLDATA("W/DOC","FEMALE"))+1
  1. .I $P(^DPT(DFN,0),U,2)="M" S APCLDATA("W/DOC","MALE")=$G(APCLDATA("W/DOC","MALE"))+1
  1. .I $P(^DPT(DFN,0),U,2)="U" S APCLDATA("W/DOC","UNKNOWN")=$G(APCLDATA("W/DOC","UNKNOWN"))+1
  1. .K APCLLYN,APCLLIM S D=0 F S D=$O(^AUPNPAT(DFN,81,"B",D)) Q:D'=+D!(D>APCLBD) S X=0 F S X=$O(^AUPNPAT(DFN,81,"B",D,X)) Q:X'=+X D
  1. ..S APCLLD=D
  1. ..S APCLLYN=$$GET1^DIQ(9000001.81,X_","_DFN_",",.02)
  1. ..S APCLLIM=$$GET1^DIQ(9000001.81,X_","_DFN_",",.03)
  1. .Q:'$D(APCLLYN)
  1. .S I=$S(APCLLYN="":"NO",1:APCLLYN) S APCLDATA("YN",I)=$G(APCLDATA("YN",I))+1
  1. .I I="YES" D
  1. ..I $P(^DPT(DFN,0),U,2)="F" S APCLDATA("HAS INTERNET","FEMALE")=$G(APCLDATA("HAS INTERNET","FEMALE"))+1
  1. ..I $P(^DPT(DFN,0),U,2)="M" S APCLDATA("HAS INTERNET","MALE")=$G(APCLDATA("HAS INTERNET","MALE"))+1
  1. ..I $P(^DPT(DFN,0),U,2)="U" S APCLDATA("HAS INTERNET","UNKNOWN")=$G(APCLDATA("HAS INTERNET","UNKNOWN"))+1
  1. ..I $$AGE^AUPNPAT(DFN,APCLLD)<18 S APCLDATA("YNAGE","< 18")=$G(APCLDATA("YNAGE","< 18"))+1
  1. ..I $$AGE^AUPNPAT(DFN,APCLLD)>17,$$AGE^AUPNPAT(DFN,APCLLD)<36 S APCLDATA("YNAGE","18-35")=$G(APCLDATA("YNAGE","18-35"))+1
  1. ..I $$AGE^AUPNPAT(DFN,APCLLD)>35,$$AGE^AUPNPAT(DFN,APCLLD)<56 S APCLDATA("YNAGE","36-55")=$G(APCLDATA("YNAGE","36-55"))+1
  1. ..I $$AGE^AUPNPAT(DFN,APCLLD)>55 S APCLDATA("YNAGE","> 55")=$G(APCLDATA("YNAGE","> 55"))+1
  1. ..S X=$$COMMRES^AUPNPAT(DFN,"E")
  1. ..I X="" S X="UNKNOWN"
  1. ..S APCLDATA("COM",X)=$G(APCLDATA("COM",X))+1
  1. .S I=$S(APCLLIM]"":APCLLIM,APCLLYN="NO":"",1:"NOT DOCUMENTED")
  1. .I I]"" S APCLDATA("IM",I)=$G(APCLDATA("IM",I))+1
  1. .Q
  1. K ^TMP($J,"A")
  1. Q
  1. ;
  1. SUB ;
  1. W !!,?55,"#",?68,"%"
  1. W !,$$REPEAT^XLFSTR("-",80)
  1. Q
  1. PRINT ;EP - called from xbdbque
  1. S APCLPG=0,APCLQUIT="",APCLQH="",APCLIOSL=$S($G(APCLGUI):55,1:IOSL)
  1. D HEADER
  1. I $Y>(APCLIOSL-15) D HDR I APCLQUIT Q
  1. ;D SUB
  1. W !!,"Total # of Patients ",?55,$$C($G(APCLDATA("TOTAL PATS")),0,7)
  1. W !!?2,"Total # w/Internet Access Screening ",?55,$$C($G(APCLDATA("W/DOC")),0,7)
  1. W ?68,$$PER(APCLDATA("W/DOC"),APCLDATA("TOTAL PATS"))
  1. ;W ?68,$$PER(APCLDATA("W/DOC"),APCLDATA("TOTAL PATS"))
  1. W !!?4,"# with Internet Access w/% of those screened ",?55,$$C($G(APCLDATA("YN","YES")),0,7)
  1. W ?68,$$PER(APCLDATA("YN","YES"),APCLDATA("W/DOC"))
  1. I $Y>(APCLIOSL-5) D HDR I APCLQUIT Q
  1. W !!?3,"GENDER BREAKDOWN:"
  1. W !?6,"# Females w/internet access",!?10,"with % of those with access",?55,$$C($G(APCLDATA("HAS INTERNET","FEMALE")),0,7)
  1. W ?68,$$PER($G(APCLDATA("HAS INTERNET","FEMALE")),$G(APCLDATA("YN","YES")))
  1. W !?6,"# Males w/internet access",!?10,"with % of those with access",?55,$$C($G(APCLDATA("HAS INTERNET","MALE")),0,7)
  1. W ?68,$$PER($G(APCLDATA("HAS INTERNET","MALE")),$G(APCLDATA("YN","YES")))
  1. W !?6,"# Unknown Gender w/internet access",!?10,"with % of those with access",?55,$$C($G(APCLDATA("HAS INTERNET","UNKNOWN")),0,7)
  1. W ?68,$$PER($G(APCLDATA("HAS INTERNET","UNKNOWN")),$G(APCLDATA("YN","YES")))
  1. I $Y>(APCLIOSL-7) D HDR I APCLQUIT Q
  1. W !!,"AGE BREAKDOWN:"
  1. W !?6,"# < 18 yrs old w/internet access",!?10,"with % of those with access",?55,$$C($G(APCLDATA("YNAGE","< 18")),0,7)
  1. W ?68,$$PER($G(APCLDATA("YNAGE","< 18")),$G(APCLDATA("YN","YES")))
  1. W !?6,"# 18-35 yrs old w/internet access",!?10,"with % of those with access",?55,$$C($G(APCLDATA("YNAGE","18-35")),0,7)
  1. W ?68,$$PER($G(APCLDATA("YNAGE","18-35")),$G(APCLDATA("YN","YES")))
  1. W !?6,"# 36-55 yrs old w/internet access",!?10,"with % of those with access",?55,$$C($G(APCLDATA("YNAGE","36-55")),0,7)
  1. W ?68,$$PER($G(APCLDATA("YNAGE","36-55")),$G(APCLDATA("YN","YES")))
  1. W !?6,"# > 55 yrs old w/internet access",!?10,"with % of those with access",?55,$$C($G(APCLDATA("YNAGE","> 55")),0,7)
  1. W ?68,$$PER($G(APCLDATA("YNAGE","> 55")),$G(APCLDATA("YN","YES")))
  1. I $Y>(APCLIOSL-10) D HDR I APCLQUIT Q
  1. W !!,"COMMUNITY BREAKDOWN: (w/ % of total with access)"
  1. S APCLX="" F S APCLX=$O(APCLDATA("COM",APCLX)) Q:APCLX=""!(APCLQUIT) D
  1. .I $Y>(APCLIOSL-2) D HDR I APCLQUIT Q
  1. .W !?6,APCLX,?55,$$C(APCLDATA("COM",APCLX),0,7)
  1. .W ?68,$$PER(APCLDATA("COM",APCLX),APCLDATA("YN","YES"))
  1. ;W ?68,$$PER(APCLDATA("YN","YES"),APCLDATA("TOTAL PATS"))
  1. ;W !!?4,"# without Internet Access ",?45,$$C($G(APCLDATA("YN","NO")),0,7)
  1. ;W ?55,$$PER(APCLDATA("YN","NO"),APCLDATA("W/DOC"))
  1. ;W ?68,$$PER(APCLDATA("YN","NO"),APCLDATA("TOTAL PATS"))
  1. ;W !!?6,"Type of Internet Access: "
  1. ;I $Y>(APCLIOSL-4) D HDR Q:APCLQUIT D SUB
  1. ;S APCLX="" F S APCLX=$O(APCLDATA("IM",APCLX)) Q:APCLX=""!(APCLQUIT) D
  1. ;.I $Y>(APCLIOSL-3) D HDR Q:APCLQUIT D SUB
  1. ;.W !?8,APCLX
  1. ;.W ?45,$$C(APCLDATA("IM",APCLX),0,7)
  1. ;.W ?55,$$PER(APCLDATA("IM",APCLX),APCLDATA("YN","YES"))
  1. ;.W ?68,$$PER(APCLDATA("IM",APCLX),APCLDATA("TOTAL PATS"))
  1. Q
  1. ;
  1. ;
  1. D HDR
  1. W !!,"PATIENTS INCLUDED IN THIS REPORT:",!
  1. I APCLGRP="U" W !?5,"User Population: ",$S(APCLBEN=1:"AI/AN Only (Classification 01)",APCLBEN=2:"non AI/AN Only (Classification NOT 01)",APCLBEN=3:"All (Both AI/AN and non AI/AN)",1:"")
  1. I APCLGRP="C" W !?5,"Active Clinical Population: ",$S(APCLBEN=1:"AI/AN Only (Classification 01)",APCLBEN=2:"non AI/AN Only (Classification NOT 01)",APCLBEN=3:"All (Both AI/AN and non AI/AN)",1:"")
  1. I APCLGRP="S" W !?5,"Population: Patients in Search Template: ",$P(^DIBT(APCLSEAT,0),U)
  1. I APCLGRP="A" W !?5,"All Patients: ",$S(APCLBEN=1:"AI/AN Only (Classification 01)",APCLBEN=2:"non AI/AN Only (Classification NOT 01)",APCLBEN=3:"All (Both AI/AN and non AI/AN)",1:"")
  1. I $G(APCLTAXI)="" W !!,"All Communities Included.",! G MFIX
  1. W !?10,"Community Taxonomy Name: ",$P(^ATXAX(APCLTAXI,0),U)
  1. W !?10,"The following communities are included in this report:",! D
  1. .S APCLZZ="",APCLN=0,APCLY="" F S APCLZZ=$O(APCLTAX(APCLZZ)) Q:APCLZZ=""!(APCLQH) S APCLN=APCLN+1,APCLY=APCLY_$S(APCLN=1:"",1:";")_APCLZZ
  1. .S APCLZZ=0,C=0 F APCLZZ=1:3:APCLN D Q:APCLQH
  1. ..I $Y>(APCLIOSL-2) D HDR Q:APCLQH
  1. ..W !?10,$E($P(APCLY,";",APCLZZ),1,20),?30,$E($P(APCLY,";",(APCLZZ+1)),1,20),?60,$E($P(APCLY,";",(APCLZZ+2)),1,20)
  1. ..Q
  1. Q:APCLQH
  1. I $G(APCLMFIY) W !!?10,"MFI Visit Location Taxonomy Name: ",$P(^ATXAX(APCLMFIY,0),U)
  1. I $G(APCLMFIY) W !?10,"The following Locations are used for patient visits in this report:",! D
  1. .S APCLZZ="",APCLN=0,APCLY="" F S APCLZZ=$O(^ATXAX(APCLMFIY,21,"B",APCLZZ)) Q:APCLZZ="" S APCLN=APCLN+1,APCLY=APCLY_$S(APCLN=1:"",1:";")_$P($G(^DIC(4,APCLZZ,0)),U)
  1. .S APCLZZ=0,C=0 F APCLZZ=1:3:APCLN D Q:APCLQH
  1. ..I $Y>(APCLIOSL-2) D HDR Q:APCLQH
  1. ..W !?10,$E($P(APCLY,";",APCLZZ),1,20),?30,$E($P(APCLY,";",(APCLZZ+1)),1,20),?60,$E($P(APCLY,";",(APCLZZ+2)),1,20)
  1. ..Q
  1. MFIX ;
  1. K APCLX,APCLY,APCLZZ,APCLN
  1. Q
  1. HDR ;
  1. I 'APCLPG G HDR1
  1. K DIR I $E(IOST)="C",IO=IO(0) W ! S DIR(0)="EO" D ^DIR K DIR I Y=0!(Y="^")!($D(DTOUT)) S APCLQUIT=1 Q
  1. HDR1 ;
  1. W:$D(IOF) @IOF
  1. S APCLPG=APCLPG+1
  1. W ?70,"Page ",APCLPG,!
  1. W !,$$CTR("*** PATIENT INTERNET ACCESS ***",80)
  1. W !,$$CTR("Date Report Run: "_$$FMTE^XLFDT(DT),80)
  1. W !,$$CTR("Site where Run: "_$P(^DIC(4,DUZ(2),0),U),80)
  1. W !,$$CTR("Report Generated by: "_$$USR,80)
  1. S X="Internet Access as of Date: "_$$FMTE^XLFDT(APCLBD) W !,$$CTR(X,80)
  1. W !,$$REPEAT^XLFSTR("-",80)
  1. Q
  1. CTR(X,Y) ;EP - Center X in a field Y wide.
  1. Q $J("",$S($D(Y):Y,1:IOM)-$L(X)\2)_X
  1. ;----------
  1. EOP ;EP - End of page.
  1. Q:$E(IOST)'="C"
  1. Q:$D(ZTQUEUED)!'(IOT="TRM")!$D(IO("S"))
  1. NEW DIR
  1. K DIRUT,DFOUT,DLOUT,DTOUT,DUOUT
  1. S DIR(0)="E" D ^DIR
  1. Q
  1. ;----------
  1. USR() ;EP - Return name of current user from ^VA(200.
  1. Q $S($G(DUZ):$S($D(^VA(200,DUZ,0)):$P(^(0),U),1:"UNKNOWN"),1:"DUZ UNDEFINED OR 0")
  1. ;----------
  1. LOC() ;EP - Return location name from file 4 based on DUZ(2).
  1. Q $S($G(DUZ(2)):$S($D(^DIC(4,DUZ(2),0)):$P(^(0),U),1:"UNKNOWN"),1:"DUZ(2) UNDEFINED OR 0")
  1. ;----------
  1. PER(N,D) ;return % of n/d
  1. I 'D Q "0%"
  1. NEW Z
  1. S Z=N/D,Z=Z*100,Z=$J(Z,3,0)
  1. Q $$STRIP^XLFSTR(Z," ")_"%"
  1. ;
  1. C(X,X2,X3) ;
  1. D COMMA^%DTC
  1. Q X
  1. ;Q $STRIP^XLFSTR(X," ")
  1. ;
  1. PAD(D,L) ; -- SUBRTN to pad length of data
  1. ; -- D=data L=length
  1. S L=L-$L(D)
  1. Q $E($$REPEAT^XLFSTR(" ",L),1,L)_D
  1. ;