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

BDMDR6.m

Go to the documentation of this file.
  1. BDMDR6 ; IHS/CMI/LAB - patients w/o dm on problem list ;
  1. ;;2.0;DIABETES MANAGEMENT SYSTEM;**2,3,8,9,10**;JUN 14, 2007;Build 12
  1. ;
  1. ;
  1. START ;
  1. D INFORM
  1. D EXIT
  1. R ;
  1. K BDMREG
  1. R1 ;
  1. S DIC="^ACM(41.1,",DIC(0)="AEMQ",DIC("A")="Enter "_$S($D(BDMREG):"Another ",1:"")_"Register Name: " D ^DIC
  1. I Y=-1,$D(BDMREG) G GETDATES
  1. I Y=-1,'$D(BDMREG) W !,"No register selected." D EXIT Q
  1. S BDMREG(+Y)=""
  1. G R1
  1. GETDATES ;
  1. BD ;
  1. W !!!,"Enter the time frame to look for visits with a diabetes diagnosis.",!
  1. S DIR(0)="D^::EP",DIR("A")="Enter Beginning Visit Date",DIR("?")="Enter the beginning visit date for the search." D ^DIR K DIR S:$D(DUOUT) DIRUT=1
  1. G:$D(DIRUT) R
  1. S BDMBD=Y
  1. ED ;
  1. S DIR(0)="DA^::EP",DIR("A")="Enter Ending Visit Date: " D ^DIR K DIR S:$D(DUOUT) DIRUT=1
  1. G:$D(DIRUT) GETDATES
  1. I Y<BDMBD W !,"Ending date must be greater than or equal to beginning date!" G ED
  1. S BDMED=Y
  1. S X1=BDMBD,X2=-1 D C^%DTC S BDMSD=X
  1. D ;
  1. ;how many
  1. S BDMND=""
  1. S DIR(0)="N^1:99:0",DIR("A")="How many diagnoses must the patient have had in that time period",DIR("B")="3" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) G GETDATES
  1. S BDMND=Y
  1. ZIS ;
  1. S BDMTEMP=""
  1. S DIR(0)="S^P:PRINT the List;B:BROWSE the List on the Screen;S:Create Search Template;D:Create Delimited Output file",DIR("A")="Output Type",DIR("B")="P" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) G GETDATES
  1. S BDMTEMP=Y
  1. I BDMTEMP="P"!(BDMTEMP="B") G DEMO
  1. I BDMTEMP="S" D G:BDMSTMP="" ZIS G DEMO
  1. .D EN2^BDMRML
  1. ;get file name
  1. D PT G:BDMDELT="" ZIS I BDMDELT="F",BDMDELF="" G ZIS
  1. ;call to XBDBQUE
  1. DEMO ;
  1. D DEMOCHK^BDMUTL(.BDMDEMO)
  1. I BDMDEMO=-1 D EXIT Q
  1. I BDMTEMP="B" D BROWSE,EXIT Q
  1. S XBRP="PRINT^BDMDR6",XBRC="PROC^BDMDR6",XBRX="EXIT^BDMDR6",XBNS="BDM"
  1. D ^XBDBQUE
  1. D EXIT
  1. Q
  1. ST ;
  1. BROWSE ;
  1. S XBRP="VIEWR^XBLM(""PRINT^BDMDR6"")"
  1. S XBRC="PROC^BDMDR6",XBRX="EXIT^BDMDR6",XBIOP=0 D ^XBDBQUE
  1. Q
  1. EXIT ;clean up and exit
  1. I '$D(BDMGUI) D EN^XBVK("BDM")
  1. D ^XBFMK
  1. D KILL^AUPNPAT
  1. Q
  1. INFORM ;
  1. W:$D(IOF) @IOF
  1. W !,$$CTR($$LOC)
  1. W !,$$CTR($$USR)
  1. W !!,"This report will list patients who are not on any diabetes register ",!
  1. W "but who have had a visit with a diagnosis of diabetes in a date range",!
  1. W "specified by the user. If you are multi-divisional with multiple registers",!
  1. W "you can enter all of the register names. Only patients who are not on ANY",!
  1. W "of the registers will be displayed on the list.",!
  1. W !
  1. Q
  1. PROC ;EP - called from XBDBQUE
  1. S BDMJOB=$J,BDMBTH=$H
  1. K ^XTMP("BDMDR6",BDMJOB,BDMBTH)
  1. D XTMP^BDMOSUT("BDMDR6","DM NOT ON REGISTER")
  1. S DFN=0 F S DFN=$O(^AUPNPAT(DFN)) Q:DFN'=+DFN D
  1. .Q:$P($G(^DPT(DFN,0)),U,19)
  1. .Q:$D(^DPT(DFN,-9))
  1. .Q:$$DEMO^BDMUTL(DFN,$G(BDMDEMO))
  1. .Q:$$DOD^AUPNPAT(DFN)]""
  1. .Q:$P($G(^AUPNPAT(DFN,41,$S($G(BDMDUZ2):BDMDUZ2,1:DUZ(2)),0)),U,5)]"" ;IHS/CMI/GRL
  1. .Q:$P($G(^AUPNPAT(DFN,41,$S($G(BDMDUZ2):BDMDUZ2,1:DUZ(2)),0)),U,2)="" ;IHS/CMI/GRL
  1. .Q:$$ONREG(DFN,.BDMREG) ;I $D(^ACM(41,"AC",DFN,BDMREG)) Q ;on register
  1. .S X=$$LASTDMDX(DFN,BDMBD,BDMED,BDMND)
  1. .I X S ^XTMP("BDMDR6",BDMJOB,BDMBTH,"PATIENTS",$$GET1^DIQ(2,DFN,.01),DFN)=""
  1. Q
  1. ONREG(P,R) ;
  1. NEW X,G
  1. S G=""
  1. S X=0 F S X=$O(BDMREG(X)) Q:X'=+X!(G) I $D(^ACM(41,"AC",DFN,X)) S G=1
  1. Q G
  1. PRINT ;EP - called from xbdbque
  1. S BDMIOSL=$S($G(BDMGUI):55,1:IOSL)
  1. S BDM80D="-------------------------------------------------------------------------------"
  1. S BDMPG=0 D HEAD
  1. K ^TMP($J)
  1. I BDMTEMP'="D" I '$D(^XTMP("BDMDR6",BDMJOB,BDMBTH)) W !!,"NO PATIENTS TO REPORT" G DONE
  1. S BDMNAME="" K BDMQ
  1. S BDMDCNT=0
  1. F S BDMNAME=$O(^XTMP("BDMDR6",BDMJOB,BDMBTH,"PATIENTS",BDMNAME)) Q:BDMNAME=""!($D(BDMQ)) D
  1. .S DFN="" F S DFN=$O(^XTMP("BDMDR6",BDMJOB,BDMBTH,"PATIENTS",BDMNAME,DFN)) Q:DFN=""!($D(BDMQ)) S BDMX=^XTMP("BDMDR6",BDMJOB,BDMBTH,"PATIENTS",BDMNAME,DFN) D
  1. ..I BDMTEMP="S" S ^DIBT(BDMSTMP,1,DFN)="" Q
  1. ..I BDMTEMP="D" D DELR Q
  1. ..I $Y>(BDMIOSL-4) D HEAD Q:$D(BDMQ)
  1. ..W !,$E(BDMNAME,1,20),?22,$$HRN^AUPNPAT(DFN,$S($G(BDMDUZ2):BDMDUZ2,1:DUZ(2))),?29,$$DATE^BDMS9B1($$DOB^AUPNPAT(DFN))
  1. ..W ?40,$E($$COMMRES^AUPNPAT(DFN,"E"),1,10)
  1. ..S V=$$LASTV(DFN)
  1. ..W ?53,$$DATE($P(V,U,1))
  1. ..W ?63,$$LBLK^BDMUTL($$NUMDXS(DFN,BDMBD,BDMED),5)
  1. ..W ?70,$$DATE($$LASTDMDX(DFN,$$DOB^AUPNPAT(DFN),DT)),!
  1. ..W ?5,"Seen at: ",$$VLOCS(DFN,BDMBD,BDMED)
  1. DONE ;
  1. I BDMTEMP="S" W !!,"Search Template ",$P(^DIBT(BDMSTMP,0),U,1)," has been created.",!
  1. I BDMTEMP="D" D WRITEF Q
  1. I $E(IOST)="C",IO=IO(0) S DIR(0)="EO",DIR("A")="End of report. HIT RETURN" D ^DIR K DIR S:$D(DUOUT) DIRUT=1
  1. W:$D(IOF) @IOF
  1. K ^XTMP("BDMDR6",BDMJOB,BDMBTH),BDMJOB,BDMBTH
  1. Q
  1. DELR ;
  1. S BDMDCNT=BDMDCNT+1
  1. S BDMREC=""
  1. S $P(BDMREC,U)=BDMNAME
  1. S $P(BDMREC,U,2)=$$HRN^AUPNPAT(DFN,$S($G(BDMDUZ2):BDMDUZ2,1:DUZ(2)))
  1. S $P(BDMREC,U,3)=$$DATE^BDMS9B1($$DOB^AUPNPAT(DFN))
  1. S $P(BDMREC,U,4)=$$COMMRES^AUPNPAT(DFN,"E")
  1. S V=$$LASTV(DFN)
  1. S $P(BDMREC,U,5)=$$DATE($P(V,U,1))
  1. S $P(BDMREC,U,6)=$$NUMDXS(DFN,BDMBD,BDMED)
  1. S $P(BDMREC,U,7)=$$DATE($$LASTDMDX(DFN,$$DOB^AUPNPAT(DFN),DT))
  1. S $P(BDMREC,U,8)=$$VLOCS(DFN,BDMBD,BDMED)
  1. S ^TMP($J,"DELIMITED",BDMDCNT)=BDMREC
  1. Q
  1. I 'BDMPG G HEAD1
  1. I $E(IOST)="C",IO=IO(0) W ! S DIR(0)="EO" D ^DIR K DIR I Y=0!(Y="^")!($D(DTOUT)) S BDMQ="" Q
  1. HEAD1 ;
  1. W:$D(IOF) @IOF S BDMPG=BDMPG+1
  1. I $G(BDMGUI),BDMPG'=1 W !,"ZZZZZZZ"
  1. W !?13,"********** CONFIDENTIAL PATIENT INFORMATION **********"
  1. W !,$P(^VA(200,DUZ,0),U,2),?72,"Page ",BDMPG,!
  1. W ?(80-$L($P(^DIC(4,$S($G(BDMDUZ2):BDMDUZ2,1:DUZ(2)),0),U))/2),$P(^DIC(4,$S($G(BDMDUZ2):BDMDUZ2,1:DUZ(2)),0),U),!
  1. W $$CTR("Patients NOT on any of the following Registers:"),!
  1. S X=0 F S X=$O(BDMREG(X)) Q:X'=+X D
  1. .W $$CTR($P(^ACM(41.1,X,0),U)_" Register",80),!
  1. W $$CTR("with at least "_BDMND_" visits with a DX of Diabetes between ",80),!
  1. W $$CTR($$FMTE^XLFDT(BDMBD)_" and "_$$FMTE^XLFDT(BDMED),80),!
  1. PIH W !,"PATIENT NAME",?22,"HRN",?29,"DOB",?40,"COMMUNITY",?53,"LAST VISIT",?64,"# DM",?70,"LAST DM",!,?64,"DXS",?70,"DX",!,BDM80D
  1. Q
  1. NUMDXS(P,BD,ED) ;
  1. I '$G(P) Q ""
  1. NEW X,E,BDM,Y
  1. S Y="BDM("
  1. S X=P_"^ALL DX [SURVEILLANCE DIABETES;DURING "_BD_"-"_ED S E=$$START1^APCLDF(X,Y)
  1. S (X,Y)=0
  1. F S X=$O(BDM(X)) Q:X'=+X S Y=Y+1
  1. Q Y
  1. LASTV(P) ;
  1. NEW X,Y,Z,V,D
  1. S V=""
  1. S D=0 F S D=$O(^AUPNVSIT("AA",P,D)) Q:D'=+D!(V) D
  1. .S X=0 F S X=$O(^AUPNVSIT("AA",P,D,X)) Q:X'=+X!(V) D
  1. ..Q:'$D(^AUPNVSIT(X,0))
  1. ..Q:$P(^AUPNVSIT(X,0),U,11) ;deleted
  1. ..Q:'$P(^AUPNVSIT(X,0),U,9) ;ZERO DEP
  1. ..Q:"CTNEDX"[$P(^AUPNVSIT(X,0),U,7)
  1. ..S V=X
  1. I V="" Q ""
  1. Q $$GET1^DIQ(9000010,V,.01,"I")_U_$$GET1^DIQ(9000010,V,.08,"I")
  1. LASTDMDX(P,BDATE,EDATE,N) ;
  1. I '$G(P) Q ""
  1. I '$G(N) S N=1
  1. NEW X,E,BDM,Y
  1. S Y="BDM("
  1. S X=P_"^LAST "_N_" DX [SURVEILLANCE DIABETES;DURING "_BDATE_"-"_EDATE S E=$$START1^APCLDF(X,Y)
  1. I $D(BDM(N)) Q $P(BDM(N),U)
  1. Q ""
  1. VLOCS(P,BDATE,EDATE) ;
  1. NEW X,V,BDMVS,BDMLOCS,L
  1. D ALLV^APCLAPIU(P,BDATE,EDATE,"BDMVS")
  1. S X=0 F S X=$O(BDMVS(X)) Q:X'=+X D
  1. .S V=$P(BDMVS(X),U,5)
  1. .S L=$$VALI^XBDIQ1(9000010,V,.06)
  1. .Q:'$D(^AUTTLOC(L,0))
  1. .;S L=$P(^AUTTLOC(L,0),U,7)
  1. .S L=$E($P(^DIC(4,L,0),U,1),1,15)
  1. .S BDMLOCS(L)=""
  1. S L="",V=""
  1. F S L=$O(BDMLOCS(L)) Q:L="" S V=V_$S(V]"":";",1:""),V=V_L
  1. Q V
  1. CM(REG,PAT) ;
  1. NEW X
  1. S X=$G(^ACM(41,"AC",PAT,REG))
  1. I X="" Q ""
  1. Q $$GET1^DIQ(9002241,X,6)
  1. RSTAT(REG,PAT) ;
  1. NEW X
  1. S X=$G(^ACM(41,"AC",PAT,REG))
  1. I X="" Q ""
  1. Q $$GET1^DIQ(9002241,X,1)
  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. TEST ;
  1. D BDMG("R",1,"A")
  1. Q
  1. BDMG(BDMTR,BDMREG,BDMSTAT,BDMND,BDMLDAT) ;EP - GUI DMS Entry Point
  1. S BDMND=$G(BDMND)
  1. S BDMGUI=1
  1. S BDMLDAT=$G(BDMLDAT)
  1. NEW BDMNOW,BDMOPT,BDMIEN
  1. S BDMOPT="Patients w/no Diagnosis of DM on Problem Lis"
  1. D NOW^%DTC
  1. S BDMNOW=$G(%)
  1. K DD,DO,DIC
  1. S X=DUZ_BDMNOW
  1. S DIC("DR")=".02////"_DUZ_";.03////"_BDMNOW_";.06///"_$G(BDMOPT)_";.07////R"
  1. S DIC="^BDMGUI(",DIC(0)="L",DIADD=1,DLAYGO=9003201.4
  1. D FILE^DICN
  1. K DIADD,DLAYGO,DIC,DA
  1. I Y=-1 S BDMIEN=-1 Q
  1. S BDMIEN=+Y
  1. S BDMGIEN=BDMIEN ;cmi/maw added
  1. D ^XBFMK
  1. K ZTSAVE S ZTSAVE("*")=""
  1. ;D GUIEP for interactive testing
  1. S ZTIO="",ZTDTH=$$NOW^XLFDT,ZTRTN="GUIEP^BDMDR6",ZTDESC="GUI DM PTS NO DX PL" D ^%ZTLOAD
  1. D EXIT
  1. Q
  1. GUIEP ;EP
  1. D PROC
  1. K ^TMP($J,"BDMDR6")
  1. S IOM=80
  1. D GUIR^XBLM("PRINT^BDMDR6","^TMP($J,""BDMDR6"",")
  1. S X=0,C=0 F S X=$O(^TMP($J,"BDMDR6",X)) Q:X'=+X D
  1. .S BDMDATA=^TMP($J,"BDMDR6",X)
  1. .;I BDMDATA="ZZZZZZZ" ;S BDMDATA=$C(12)
  1. .S ^BDMGUI(BDMIEN,11,X,0)=BDMDATA,C=C+1
  1. S ^BDMGUI(BDMIEN,11,0)="^^"_C_"^"_C_"^"_DT_"^"
  1. S DA=BDMIEN,DIK="^BDMGUI(" D IX1^DIK
  1. D ENDLOG
  1. K ^TMP($J,"BDMDR6")
  1. D EXIT
  1. S ZTREQ="@"
  1. Q
  1. ;
  1. ENDLOG ;-- write the end of the log
  1. D NOW^%DTC
  1. S BDMNOW=$G(%)
  1. S DIE="^BDMGUI(",DA=BDMIEN,DR=".04////"_BDMNOW_";.07////C"
  1. D ^DIE
  1. K DIE,DR,DA
  1. Q
  1. DATE(D) ;EP
  1. I D="" Q ""
  1. Q $E(D,4,5)_"/"_$E(D,6,7)_"/"_$E(D,2,3)
  1. PT ;EP
  1. S (BDMROT,BDMDELT,BDMDELF)=""
  1. S BDMDELF="",BDMDELT=""
  1. W !!,"You have selected to create a delimited output file. You can have this",!,"output file created as a text file in the pub directory, ",!,"OR you can have the delimited output display on your screen so that"
  1. W !,"you can do a file capture. Keep in mind that if you choose to",!,"do a screen capture you CANNOT Queue your report to run in the background!!",!!
  1. S DIR(0)="S^S:SCREEN-delimited output will display on screen for capture;F:FILE-delimited output will be written to a file in pub",DIR("A")="Select output type",DIR("B")="S" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) G PT
  1. S BDMDELT=Y
  1. Q:BDMDELT="S"
  1. S DIR(0)="F^1:40",DIR("A")="Enter a filename for the delimited output (no more than 40 characters)" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) G PT
  1. S BDMDELF=Y
  1. S BDMHDIR=$S($P($G(^AUTTSITE(1,1)),U,2)]"":$P(^AUTTSITE(1,1),U,2),1:$G(^XTV(8989.3,1,"DEV")))
  1. I $G(BDMHDIR)="" S BDMHDIR="/usr/spool/uucppublic/"
  1. W !!,"When the report is finished your delimited output will be found in the",!,BDMHDIR," directory. The filename will be ",BDMDELF,".txt",!
  1. Q
  1. WRITEF ;
  1. I BDMDELT="S" D SCREEN Q
  1. S Y=$$OPEN^%ZISH(BDMHDIR,BDMDELF,"W")
  1. I Y=1 W:'$D(ZTQUEUED) !!,"Cannot open host file to write out DELIMITED data. Notify programmer." Q
  1. U IO
  1. W !,"NAME^HRN^DOB^COMMUNITY^LAST VISIT^# DM DXS^LAST DM DXS^LOCATIONS WHERE SEEN"
  1. S X=0 F S X=$O(^TMP($J,"DELIMITED",X)) Q:X'=+X W !,^TMP($J,"DELIMITED",X)
  1. W !
  1. D ^%ZISC
  1. Q
  1. SCREEN ;
  1. W !,"NAME^HRN^DOB^COMMUNITY^LAST VISIT^# DM DXS^LAST DM DXS^LOCATIONS WHERE SEEN"
  1. S X=0 F S X=$O(^TMP($J,"DELIMITED",X)) Q:X'=+X W !,^TMP($J,"DELIMITED",X)
  1. W !
  1. Q