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

BDMGU.m

Go to the documentation of this file.
BDMGU ; cmi/anch/maw - BDM DMS GUI Utilities ;
 ;;2.0;BDM DIABETES MANAGEMENT SYSTEM;**1,4,7,8**;JUN 14, 2007;Build 53
 ;
 ;
 ;
 ;cmi/anch/maw 1/23/2005 added in PATCHT a quit if mult chts with same #
 ;cmi/anch/maw 2/1/2006 changed visit retrieval to ADO.NET
 ;cmi/anch/maw 3/22/2006 changed weight, bp, labs, to sort earliest to latest
 ;cmi/anch/maw 3/23/2006 changed patient lookup to not look at other names
 ;
DEBUG(BDMRET,BDMSTR) ;-- debug
 D DEBUG^%Serenji("CHK^BDMGU(.BDMRET,.BDMSTR)")
 Q
 ;
GETPAT(BDMRET,BDMSTR) ;-- return patient in ADO table
 S X="MERR^BDMGU",@^%ZOSF("TRAP") ; m error trap
 N BDMI,BDMERR,BDMUIEN,P
 S P="|"
 K ^BDMTMP($J)
 S BDMRET="^BDMTMP("_$J_")"
 S BDMI=0
 S BDMERR=""
 S ^BDMTMP($J,BDMI)="T00010IEN^T00030PATIENTNAME^T00015DOB^T00001SEX^T00007CHART^T00009SSN^T00010REG"_$C(30)
 S BDMREGE=$P(BDMSTR,P)
 I $G(BDMREGE)]"" S BDMREG=$O(^ACM(41.1,"B",BDMREGE,0))
 S BDMPAT=$P(BDMSTR,P,2)
 S BDMMT=$P(BDMSTR,P,3)
 S BDMNPAT=$P(BDMSTR,P,4)
 I BDMMT="ALL" S BDMMT=9999999
 S BDMMT=(BDMMT-1)
 I BDMPAT?9N D
 . S BDMPIEN=$$PATSSN(BDMPAT)
 I BDMPAT?1.6N D
 . S BDMPIEN=$$PATCHT(.BDMPIEN,BDMPAT)
 I BDMPAT?1.2N1"/"1.2N1"/"4N D
 . S X=BDMPAT D ^%DT S BDMPAT=Y
 . S BDMPIEN=$$PATDOB(.BDMPIEN,BDMPAT)
 I '$G(BDMPIEN) D PATNAM(.BDMPIEN,BDMPAT,BDMNPAT)
 I $G(BDMPIEN),'$G(BDMPATS) D PATADO(.BDMPIEN)
 S ^BDMTMP($J,BDMI+1)=$C(31)_$G(BDMERR)
 K BDMPAT,BDMPIEN,BDMCNT,BDMDA,BDMIEN,BDMPATE,BDMNM,BDMDC,BDMSX,BDMCT,BDMSSN,BDMHD
 K BDMPATS
 Q
 ;
PATSSN(PAT) ;-- look up by ssn
 S BDMPIEN=$O(^DPT("SSN",PAT,0))
 S BDMPIEN(1)=BDMPIEN
 Q $G(BDMPIEN)
 ;
PATCHT(BDMPIEN,PAT) ;-- lookup by chart
 N BDMCNT
 S BDMCNT=0,BDMPATE=0,BDMMCNT=0
 S BDMDA=(PAT-1) F  S BDMDA=$O(^AUPNPAT("D",BDMDA)) Q:'BDMDA!(BDMDA>PAT)!(BDMCNT>BDMMT)  D
 . S BDMIEN=0 F  S BDMIEN=$O(^AUPNPAT("D",BDMDA,BDMIEN)) Q:'BDMIEN  D
 .. I $O(^AUPNPAT("D",BDMDA,BDMIEN,0))=DUZ(2) S BDMPIEN=BDMIEN
 .. Q:'$G(BDMPIEN)  ;cmi/anch/maw 1/23/2005 added for mult chts
 .. S BDMCNT=BDMCNT+1
 .. S:'$D(BDMPIEN(BDMCNT)) BDMPIEN(BDMCNT)=0
 .. S BDMPIEN(BDMCNT)=BDMPIEN
 Q $G(BDMPIEN)
 ;
PATDOB(BDMPATE,PAT) ;-- lookup by DOB
 N BDMCNT
 S BDMCNT=0,BDMPATE=0
 S BDMDOB=PAT-1 F  S BDMDOB=$O(^DPT("ADOB",BDMDOB)) Q:'BDMDOB!(BDMDOB'=+PAT)!(BDMCNT>BDMMT)  D
 . S BDMIEN=0 F  S BDMIEN=$O(^DPT("ADOB",BDMDOB,BDMIEN)) Q:'BDMIEN  D
 .. S:'$D(BDMPATE(BDMCNT)) BDMPATE(BDMCNT)=0
 .. S BDMCNT=BDMCNT+1,BDMPATE=1
 .. S BDMPATE(BDMCNT)=BDMIEN
 S BDMPATE=BDMCNT
 Q $G(BDMPATE)
 ;
PATNAM(BDMPATE,PAT,NPAT) ;lookup by name
 S BDMCNT=0,BDMPATE=0
 N BDMLEN
 S BDMLEN=$L(PAT)
 S BDMNAM=PAT
 S BDMNAM=$$BEGIN(PAT)
 I $G(NPAT)]"" S BDMNAM=NPAT
 F  S BDMNAM=$O(^DPT("B",BDMNAM)) Q:BDMNAM=""!($E(BDMNAM,1,BDMLEN)'=PAT)!(BDMCNT>BDMMT)  D
 . S BDMIEN=0 F  S BDMIEN=$O(^DPT("B",BDMNAM,BDMIEN)) Q:'BDMIEN  D
 .. I $D(BDMPATE(BDMCNT)),$G(BDMPATE(BDMCNT))=BDMIEN Q  ;maw 3/23/2006 added line
 .. S BDMCNT=BDMCNT+1
 .. S:'$D(BDMPATE(BDMCNT)) BDMPATE(BDMCNT)=0
 .. S BDMPATE(BDMCNT)=BDMIEN
 S BDMPATE=BDMCNT
 Q $G(BDMPATE)
 ;
BEGIN(PT) ;-- get begin point
 N BDMPDA,BDMPIEN,BDMPCNT
 S BDMPCNT=0
 S BDMPDA=PT
 I $O(^DPT("B",BDMPDA,0)) D
 . S BDMPDA=$O(^DPT("B",BDMPDA),-1)
 F  S BDMPDA=$O(^DPT("B",BDMPDA)) Q
 I $G(BDMPDA)="" Q ""
 Q $O(^DPT("B",BDMPDA),-1)
 ;
PATADO(PIEN) ;-- ado return
 S BDMCNTR=0
 S BDMDA=0 F  S BDMDA=$O(PIEN(BDMDA)) Q:'BDMDA  D
 . N BDMPI,BDMNM,BDMDC,BDMSX,BDMCT,BDMSSN,BDMHD
 . S BDMCNTR=BDMCNTR+1
 . S BDMPI=$G(PIEN(BDMDA))
 . Q:$P($G(^DPT(BDMPI,.35)),U)  ;maw 3/23/2006 don't display deceased
 . Q:$P($G(^AUPNPAT(BDMPI,41,DUZ(2),0)),U,3)  ;maw 3/23/2006 don't display inactive
 . S BDMNM=$P($G(^DPT(BDMPI,0)),U)
 . S BDMDC=$$FMTE^XLFDT($P($G(^DPT(BDMPI,0)),U,3))
 . S BDMSX=$P($G(^DPT(BDMPI,0)),U,2)
 . S BDMCT=$$HRN^AUPNPAT(BDMPI,DUZ(2))
 . S BDMSSN=$P($G(^DPT(BDMPI,0)),U,9)
 . I BDMSSN]"" D  ;ihs/cmi/maw p7 10/01/2013
 .. N LN
 .. S LN=$L(BDMSSN)
 .. S BDMSSN="XXX-XX-"_$E(BDMSSN,(LN-3),LN)
 . I $D(^ACM(41,"AC",BDMPI)) D
 .. I $G(BDMREG)]"",$D(^ACM(41,"AC",BDMPI,BDMREG)) S BDMHD=+$G(^ACM(41,"AC",BDMPI,BDMREG))
 . S BDMI=BDMI+1
 . S ^BDMTMP($J,BDMI)=BDMPI_U_BDMNM_U_BDMDC_U_BDMSX_U_BDMCT_U_BDMSSN_U_$G(BDMHD)_$C(30)
 Q
 ;
REGSEL(BDMRET) ;-- return register to work with
 S X="MERR^BDMGU",@^%ZOSF("TRAP") ; m error trap
 N BDMDA,BDMC,BDMREG
 S BDMC=0
 S BDMDA=0 F  S BDMDA=$O(^ACM(41.1,"B",BDMDA)) Q:BDMDA=""  D
 . Q:BDMDA'["DIAB"
 . S BDMRIEN=$O(^ACM(41.1,"B",BDMDA,0))
 . Q:'$D(^ACM(41.1,BDMRIEN,"AU","B",DUZ))
 . S BDMC=BDMC+1
 . S $P(BDMREG,"|",BDMC)=BDMDA_U_BDMRIEN
 S BDMRET=BDMC_"|"_$G(BDMREG)
 Q
 ;
DMG(BDMRET,BDMSTR) ;-- get patient demographics
 S X="MERR^BDMGU",@^%ZOSF("TRAP") ; m error trap
 N BDMPAT,P,BDMAD,BDMCTY,BDMST,BDMZIP,BDMPH,BDMPCP,BDMDATA,BDMCOM
 S P="|"
 S BDMPAT=$P(BDMSTR,P)
 S BDMDATA=$G(^DPT(BDMPAT,.11))
 S BDMAD=$P(BDMDATA,U)
 S BDMCTY=$P(BDMDATA,U,4)
 I $P(BDMDATA,U,5)]"" S BDMST=$P($G(^DIC(5,$P(BDMDATA,U,5),0)),U)
 S BDMZIP=$P(BDMDATA,U,6)
 S BDMPH=$P($G(^DPT(BDMPAT,.13)),U)
 S BDMPCP=$S($P($G(^AUPNPAT(BDMPAT,0)),U,14):$P(^AUPNPAT(BDMPAT,0),U,14)_"~"_$$GET1^DIQ(9000001,BDMPAT,.14,"E"),1:"")
 S BDMCOM=$$GET1^DIQ(9000001,BDMPAT,1117,"E")
 S BDMRET=BDMAD_P_BDMCTY_P_$G(BDMST)_P_BDMZIP_P_BDMPH_P_BDMPCP_P_BDMCOM
 Q
 ;
PATDAT(BDMRET,BDMSTR) ;-- get patient data from CMS Register
 S X="MERR^BDMGU",@^%ZOSF("TRAP") ; m error trap
 N BDMDATA,P,BDMPAT,BDMREG,BDMREGE,BDMSTAT,BDMRP,BDMCM,BDMWF,BDMCON,BDMED,BDMLE,BDMLR,BDMNR,BDMOD,BDMDX,BDMPIEN
 S P="|"
 S BDMREGE=$P(BDMSTR,P)
 S BDMREG=$O(^ACM(41.1,"B",BDMREGE,0))
 S BDMPAT=$P(BDMSTR,P,2)
 S BDMPIEN=$P($G(^ACM(41,BDMPAT,0)),U,2)
 S BDMDATA=$G(^ACM(41,BDMPAT,"DT"))
 S BDMSTAT=$P(BDMDATA,U)
 S BDMRP=$S($P(BDMDATA,U,15)]"":$P(BDMDATA,U,15)_"~"_$P($G(^VA(200,$P(BDMDATA,U,15),0)),U),1:"")
 S BDMCM=$S($P(BDMDATA,U,6)]"":$P(BDMDATA,U,16)_"~"_$P($G(^VA(200,$P(BDMDATA,U,6),0)),U),1:"")
 S BDMWF=$S($P(BDMDATA,U,10)]"":$P(BDMDATA,U,10)_"~"_$P($G(^AUTTLOC($P(BDMDATA,U,10),0)),U,10)_"-"_$P($G(^DIC(4,$P(BDMDATA,U,10),0)),U),1:"")
 S BDMCON=$P(BDMDATA,U,13)
 S BDMED=$P(BDMDATA,U,4)
 S BDMLE=$P(BDMDATA,U,11)
 S BDMLR=$P(BDMDATA,U,8)
 S BDMNR=$P(BDMDATA,U,9)
 S BDMOD=$P($G(^ACM(41,BDMPAT,"CH")),U)
 I $D(^ACM(44,"AC",BDMREG)) D
 . Q:'$D(^ACM(44,"AC",BDMREG,BDMPIEN))
 . S BDMDXI=$O(^ACM(44,"AC",BDMREG,BDMPIEN,0))
 . I BDMDXI S BDMDX=$P($G(^ACM(44.1,BDMDXI,0)),U)
 S BDMRET=BDMSTAT_P_BDMRP_P_BDMCM_P_BDMWF_P_BDMCON_P_BDMED_P_BDMLE_P_BDMLR_P_BDMNR_P_BDMOD_P_$G(BDMDX)
 Q
 ;
CMP(BDMRET,BDMSTR) ;-- return complications data
 S X="MERR^BDMGU",@^%ZOSF("TRAP") ; m error trap
 N BDMDA,BDMI,BDMERR,BDMDATA,BDMPAT,BDMPIEN,BDMREG,BDMREGE,P,BDMCMP,BDMST,BDMIEN,BDMSTI,BDMON,BDMONE,BDMCMT
 S P="|"
 S BDMREGE=$P(BDMSTR,P)
 S BDMREG=$O(^ACM(41.1,"B",BDMREGE,0))
 S BDMPAT=$P(BDMSTR,P,2)
 S BDMPIEN=$P($G(^ACM(41,BDMPAT,0)),U,2)
 K ^BDMTMP($J)
 S BDMRET="^BDMTMP("_$J_")"
 S BDMI=0
 S BDMERR=""
 S ^BDMTMP($J,BDMI)="T00007BMXIEN^T00060COMPLICATION^T00030STATUS^T00020ONSET^T32000COMMENTS"_$C(30)
 S BDMDA=0 F  S BDMDA=$O(^ACM(42,"AC",BDMREG,BDMPIEN,BDMDA)) Q:'BDMDA  D
 . S BDMI=BDMI+1
 . S BDMCMP=$P($G(^ACM(42.1,BDMDA,0)),U)
 . S BDMIEN=$G(^ACM(42,"AC",BDMREG,BDMPIEN,BDMDA))
 . S BDMDATA=$G(^ACM(42,BDMIEN,"DT"))
 . S BDMST=$S($P(BDMDATA,U,2)]"":$P($G(^ACM(42.3,$P(BDMDATA,U,2),0)),U),1:"")
 . S BDMONE=$P(BDMDATA,U)
 . S BDMON=""
 . I BDMONE]"" D
 .. S BDMON=$E(BDMONE,4,5)_"/"_$E(BDMONE,6,7)_"/"_($E(BDMONE,1,3)+1700)
 . N BDMCDA
 . S BDMCMT=""
 . S BDMCDA=0 F  S BDMCDA=$O(^ACM(42,BDMIEN,1,BDMCDA)) Q:'BDMCDA  D
 .. S BDMCMT=BDMCMT_$G(^ACM(42,BDMIEN,1,BDMCDA,0))  ;_$C(13,10)
 . ;S BDMCMT=$G(^ACM(42,BDMIEN,1,1,0))  ;only need 80 characters for GUI DMS
 . S ^BDMTMP($J,BDMI)=BDMIEN_U_BDMCMP_U_$G(BDMST)_U_$G(BDMON)_U_$G(BDMCMT)_$C(30)
 S ^BDMTMP($J,BDMI+1)=$C(31)_$G(BDMERR)
 Q
 ;
DIAG(BDMRET,BDMSTR) ;-- return diagnosis data
 S X="MERR^BDMGU",@^%ZOSF("TRAP") ; m error trap
 N BDMDA,BDMI,BDMERR,BDMDATA,BDMPAT,BDMPIEN,BDMREG,BDMREGE,P,BDMCMP,BDMST,BDMIEN,BDMSTI,BDMON,BDMONE,BDMCMT
 S P="|"
 S BDMREGE=$P(BDMSTR,P)
 S BDMREG=$O(^ACM(41.1,"B",BDMREGE,0))
 S BDMPAT=$P(BDMSTR,P,2)
 S BDMPIEN=$P($G(^ACM(41,BDMPAT,0)),U,2)
 K ^BDMTMP($J)
 S BDMRET="^BDMTMP("_$J_")"
 S BDMI=0
 S BDMERR=""
 S ^BDMTMP($J,BDMI)="T00007BMXIEN^T00060DIAGNOSIS^T00030SEVERITY^T00020ONSET"_$C(30)
 S BDMDA=0 F  S BDMDA=$O(^ACM(44,"AC",BDMREG,BDMPIEN,BDMDA)) Q:'BDMDA  D
 . S BDMI=BDMI+1
 . S BDMCMP=$P($G(^ACM(44.1,BDMDA,0)),U)
 . S BDMIEN=$G(^ACM(44,"AC",BDMREG,BDMPIEN,BDMDA))
 . S BDMDATA=$G(^ACM(44,BDMIEN,"SV"))
 . S BDMST=$S($P(BDMDATA,U)="N":"N-NORMAL",$P(BDMDATA,U)="M":"M-MILD",$P(BDMDATA,U)="MO":"MO-MODERATE",$P(BDMDATA,U)="S":"S-SEVERE",1:"")
 . S BDMONE=$P(BDMDATA,U,2)
 . S BDMON=""
 . I BDMONE]"" D
 .. S BDMON=$E(BDMONE,4,5)_"/"_$E(BDMONE,6,7)_"/"_($E(BDMONE,1,3)+1700)
 . S ^BDMTMP($J,BDMI)=BDMIEN_U_BDMCMP_U_$G(BDMST)_U_$G(BDMON)_$C(30)
 S ^BDMTMP($J,BDMI+1)=$C(31)_$G(BDMERR)
 Q
 ;
CMT(BDMRET,BDMSTR) ;-- get comment history
 S X="MERR^BDMGU",@^%ZOSF("TRAP") ; m error trap
 N BDMCMT,BDMERR,BDMCMTE,BDMCMTR,BDMI
 K ^BDMTMP($J)
 S BDMRET="^BDMTMP("_$J_")"
 S BDMERR=""
 S BDMI=0
 S ^BDMTMP($J,BDMI)="T00100COMMENTS"_$C(30)
 S BDMCMT=0 F  S BDMCMT=$O(^ACM(41,BDMSTR,1,BDMCMT)) Q:'BDMCMT  D
 . S BDMCMTE=$G(^ACM(41,BDMSTR,1,BDMCMT,0))
 . S BDMI=BDMI+1
 . S ^BDMTMP($J,BDMI)=BDMCMTE_$C(30)
 S ^BDMTMP($J,BDMI+1)=$C(31)_$G(BDMERR)
 Q
 ;
VST(BDMRET,BDMSTR) ;-- get visit data by patient
 S X="MERR^BDMGU",@^%ZOSF("TRAP") ; m error trap
 N BDMCNT,BDMDA,BDMIVDT,BDMVIEN,BDMVDT,BDMCLNI,BDMVTYP,BDMSC,BDMACU,BDMLOI,BDMRVDT
 N BDMPROV,BDMSPROV,BDMVSTR,PAT,P,BDMI
 S P="|"
 S BDMRET="^BDMTMP("_$J_")"
 S BDMI=0
 S ^BDMTMP($J,BDMI)="T00020Visit Date^T00030Location^T00010Type^T00010Service Category^T00010IEN^T00030Provider^T00030Secondary Provider^T00030Clinic"_$C(30)
 S BDMCNT=0
 S PAT=$P(BDMSTR,P)
 I '$O(^AUPNVSIT("AC",PAT,0)) S BDMRET=0 Q
 S BDMDA=PAT-1 F  S BDMDA=$O(^AUPNVSIT("AA",BDMDA)) Q:'BDMDA!(BDMDA>PAT)!(BDMCNT>400)  D
 . S BDMIVDT=0 F  S BDMIVDT=$O(^AUPNVSIT("AA",BDMDA,BDMIVDT)) Q:'BDMIVDT!(BDMCNT>400)  D
 .. S BDMVIEN=0 F  S BDMVIEN=$O(^AUPNVSIT("AA",BDMDA,BDMIVDT,BDMVIEN)) Q:'BDMVIEN!(BDMCNT>400)  D
 ... S BDMCNT=BDMCNT+1
 ... N BDMVND,BDMVDT,BDMVTYP,BDMLOC,BDMSC,BDMPROV,BDMSPROV,BDMCL
 ... ;Q:BDMCNT>4  ;cmi/maw let's make this a site parameter
 ... S BDMVND=$G(^AUPNVSIT(BDMVIEN,0))
 ... S BDMVDT=$$FMTE^XLFDT($P(BDMVND,U))
 ... I $P(BDMVND,U,6)]"" S BDMLOC=$P($G(^AUTTLOC($P(BDMVND,U,6),0)),U,10)_"-"_$$GET1^DIQ(9999999.06,$P(BDMVND,U,6),.01,"E")
 ... S BDMVTYP=$P(BDMVND,U,3)
 ... S BDMSC=$P(BDMVND,U,7)_"-"_$$GET1^DIQ(9000010,BDMVIEN,.07,"E")
 ... S BDMCL=$$GET1^DIQ(9000010,BDMVIEN,.08,"E")
 ... S BDMPROV=$$PRIMPROV^APCLV(BDMVIEN,"N")
 ... S BDMSPROV=$$SECPROV^APCLV(BDMVIEN,"N")
 ... S BDMI=BDMI+1
 ... S ^BDMTMP($J,BDMI)=$G(BDMVDT)_U_$G(BDMLOC)_U_$G(BDMVTYP)_U_$G(BDMSC)_U_$G(BDMVIEN)_U_$G(BDMPROV)_U_$G(BDMSPROV)_U_$G(BDMCL)_$C(30)
 S ^BDMTMP($J,BDMI+1)=$C(31)
 Q
 ;
CATSTR(BDMSRET,STR) ;EP - concatenate a long string in
 N BDMDA
 S BDMSRET=""
 S BDMDA=0 F  S BDMDA=$O(STR(BDMDA)) Q:'BDMDA  D
 . S BDMSRET=BDMSRET_$G(STR(BDMDA))
 Q
 ;
MERR ; MUMPS ERROR TRAP
 N BDMX
 X ("S X=$"_"ZE")
 S BDMX="MUMPS error: """_BDMX_""""
 D ERR(BDMX)
 Q
 ;
ERR(ERR) ; BMX ADO SCHEMA ERROR PROCESSOR
 N BDMGX
 S BDMGX="ERROR|"_ERR_$C(30)
 S @BDMRET@(1)=BDMGX
 S @BDMRET@(2)=$C(31)
 Q
 ;