DGRUGPRP ;ALB/GRR/SCK - RAI/MDS DATA COLECTION
;;5.3;Registration;**236**;Aug 13, 1993
EN ; Main entry point
N DGDIV,DGSTN,DGSTNUM,DGFILE,DIR,DGPATH,DGDNAM
;
;; ** SCK/Modifications for tasking.
S DIR(0)="FAO",DIR("B")=$$PWD^%ZISH
S DIR("A",1)=""
S DIR("A",2)="Please make a note of the displayed directory path for reference."
S DIR("A",3)=""
S DIR("A")="Enter the directory path for the file: "
S DIR("?",1)="Enter the directory path to write the ASCII data file to."
S DIR("?",2)="The default directory path currently in effect is displayed."
S DIR("?",3)="You may change the directory path if wish. If you are"
S DIR("?",4)="not sure of how to enter the proper directory path for your"
S DIR("?",5)="system, press return to accept the default and make a note"
S DIR("?")="of the displayed directory path for reference."
D ^DIR K DIR
Q:$D(DIRUT)
S DGPATH=Y
;
I '$D(^DG(40.8,"B")) D Q
. S DGDIV=$$PRIM^VASITE ;get primary division
. S DGSTN=$$SITE^VASITE($$NOW^XLFDT,DGDIV) ;get station info
. S DGSTNUM=$P(DGSTN,"^",3) ;get station number
. S DGFILE="VA"_DGSTNUM_".TXT" ;set file name
. D TASK(DGFILE,DGPATH,DGDIV)
;
I $D(^DG(40.8,"B")) D Q ;If multiple divisions
. W !!?3,"Building Tasks"
. S DGDIV=0,DGDNAM=""
. F S DGDNAM=$O(^DG(40.8,"B",DGDNAM)) Q:DGDNAM="" S DGDIV=$O(^DG(40.8,"B",DGDNAM,0)) D
. . S DGSTN=$$SITE^VASITE($$NOW^XLFDT,DGDIV) Q:DGSTN=-1 ;get station number
. . S DGSTNUM=$P(DGSTN,"^",3) ;get station number
. . S DGFILE="VA"_DGSTNUM_".TXT" ;set file name
. . D TASK(DGFILE,DGPATH,DGDIV)
Q
;
TASK(DGFILE,DGPATH,DGDIV) ; Task off job
N ZTSAVE,ZTRTN,ZTDESC,ZTSK,ZTIO,ZX
;
S DGPATH=$G(DGPATH)
S:'(DGPATH]"") DGPATH=$$PWD^%ZISH
S ZX=""
F ZX="DGFILE","DGPATH","DGDIV" S ZTSAVE(ZX)=""
S ZTRTN="EN1^DGRUGPRP"
S ZTDESC="RAI/MDS Patient Demographic Data Collection"
S ZTIO=""
W !!?5,"Tasking ",DGFILE,"..."
D ^%ZTLOAD
I $D(ZTSK)[0 W " Task was not queued!",!
E W !?10,"Task queued: ",ZTSK,!
Q
;
EN1 ; Build HFS file
N DGNAME,DGWARD,DGIEN,DGWIEN,DGWDIV,DGREC,DGNAME,DOB,SSN,DGRB,DGMS,SEX,DGRACE,DGSTAB,DGADAT,DGATIME,DGHLNM,DGWREC,VADM,VAIP,VAPA,VAERR,POP,DFN,DGEN,DGENP,DGRFA
;
Q:$$S^%ZTLOAD ; Quit if the tasked job has been asked to stop
S DGPATH=$G(DGPATH)
S:'(DGPATH]"") DGPATH=$$PWD^%ZISH
D OPEN^%ZISH("FILE1",DGPATH,DGFILE,"W") ; Open HFS file device handler
Q:POP ; Quit if the device handler did not open properly
U IO
S DGWARD="" F S DGWARD=$O(^DGPM("CN",DGWARD)) Q:DGWARD="" S DGIEN=0 F S DGIEN=$O(^DGPM("CN",DGWARD,DGIEN)) Q:DGIEN'>0 D ;loop thru movement file
.S DFN=$$GET1^DIQ(405,DGIEN,.03,"I") Q:DFN="" ;get patient ien
.S DGRFA=$$GET1^DIQ(405,DGIEN,.11,"I")
.S DGRFA=$S(DGRFA=0:"NSC",DGRFA=1:"SC",1:"")
.S DGEN=$O(^DGEN(27.11,"C",DFN,""),-1),DGENP=""
.I DGEN]"" S DGENP=$$GET1^DIQ(27.11,DGEN,.07,"I")
.D DEM^VADPT,IN5^VADPT,ADD^VADPT ;get patient demographics, inpatient data, and address data
.S DGWIEN=$P(VAIP(5),"^") Q:DGWIEN="" S DGWDIV=$$GET1^DIQ(42,DGWIEN,.015,"I") ;get ward ien and ward division
.Q:$$GET1^DIQ(42,DGWIEN,.035,"I")'=1 ;quit if not rai/mds ward
.I DGDIV=DGWDIV D ;if ward division equal to division being processed continue
..S DGNAME=VADM(1),DOB=$P(VADM(3),"^"),SSN=$P(VADM(2),"^"),DGRB=$P(VAIP(6),"^",2),DGMS=$P(VADM(10),"^"),SEX=$P(VADM(5),"^"),DGRACE=$P(VADM(8),"^"),DGSTAB=$S(VAPA(5)]"":$P(^DIC(5,$P(VAPA(5),"^"),0),"^",2),1:"")
..S DGREC=$P(VAIP(13,1),"^") ;get admit date/time
..S DGADAT=$P($P(DGREC,"^"),".") ;grab date
..S DGATIME=$P($P(DGREC,"^"),".",2) ;grab time
..S DGHLNM=$$HLNAME^HLFNC(DGNAME,"^~|\") I $P(DGHLNM,"^",4)="" S $P(DGHLNM,"^",4)="" ;parse name
..S DGWREC=DGHLNM_"^"_$E(DOB,4,5)_"/"_$E(DOB,6,7)_"/"_(1700+$E(DOB,1,3))_"^"_SSN_"^"_SEX_"^"_DGMS_"^"_DGRACE_"^"_$E(DGADAT,4,5)_"/"_$E(DGADAT,6,7)_"/"_(1700+$E(DGADAT,1,3))_"@"_DGATIME_"^"_DGWARD_"/"_DGRB
..S DGWREC=DGWREC_"^"_VAPA(1)_"^"_VAPA(2)_"^"_VAPA(4)_"^"_DGSTAB_"^"_VAPA(6)_"^"_DGENP_"^"_DGRFA
.. W DGWREC,!
D CLOSE^%ZISH("FILE1") ; close the HFS file handler
Q
;
WARD ;Print Ward/Room/Bed for RAI/MDS wards
D EN^XUTMDEVQ("RPT^DGRUGPRP","Print Ward/Room/Bed Report","") ;call device api
D HOME^%ZIS
Q
RPT N DGCNT,DGWARD,DGWNAME,DGRB,DGADT,DGRBNM,DGADATE,DGATIME,DGCDT,DGTCNT,DGWCNT
S (DGTCNT,DGWCNT)=0
D NOW^%DTC S Y=% D DD^%DT S DGCDT=Y ;get current date/time
S DGCNT=0
S DGWARD=0 F S DGWARD=$O(^DG(405.4,"W",DGWARD)) Q:DGWARD'>0 I $$GET1^DIQ(42,DGWARD,.035,"I")=1 D ;loop through room-bed file, check if ward is rai/mds
.S DGWNAME=$$GET1^DIQ(42,DGWARD,".01","I"),DGWCNT=0 ;get ward name
.D HED ;do header
.S DGRB=0 F S DGRB=$O(^DG(405.4,"W",DGWARD,DGRB)) Q:DGRB'>0 D ;loop thru room-bed for this ward
..S DGRBNM=$$GET1^DIQ(405.4,DGRB,".01","I") ;get room-bed name
..S DGWCNT=DGWCNT+1 ;add one to ward count
..I $Y+4>$G(IOSL) D HED ;if near end of screen, do header
..W !,?5,DGRBNM ;write room-bed name
.W !!,"Total beds for ward ",DGWNAME,": ",DGWCNT S DGTCNT=DGTCNT+DGWCNT ;write ward total and add to grand total
W !!,"Total Beds for all wards: ",DGTCNT ;write grand total
Q
HED ;FORM FEED AND PRINT HEADER
I DGCNT>0 W @IOF
S DGCNT=1
W !,"RAI/MDS Ward/Room/Beds"
W ?40,DGCDT
W !,"WARD: ",DGWNAME,!
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGRUGPRP 5273 printed Oct 16, 2024@18:59:03 Page 2
DGRUGPRP ;ALB/GRR/SCK - RAI/MDS DATA COLECTION
+1 ;;5.3;Registration;**236**;Aug 13, 1993
EN ; Main entry point
+1 NEW DGDIV,DGSTN,DGSTNUM,DGFILE,DIR,DGPATH,DGDNAM
+2 ;
+3 ;; ** SCK/Modifications for tasking.
+4 SET DIR(0)="FAO"
SET DIR("B")=$$PWD^%ZISH
+5 SET DIR("A",1)=""
+6 SET DIR("A",2)="Please make a note of the displayed directory path for reference."
+7 SET DIR("A",3)=""
+8 SET DIR("A")="Enter the directory path for the file: "
+9 SET DIR("?",1)="Enter the directory path to write the ASCII data file to."
+10 SET DIR("?",2)="The default directory path currently in effect is displayed."
+11 SET DIR("?",3)="You may change the directory path if wish. If you are"
+12 SET DIR("?",4)="not sure of how to enter the proper directory path for your"
+13 SET DIR("?",5)="system, press return to accept the default and make a note"
+14 SET DIR("?")="of the displayed directory path for reference."
+15 DO ^DIR
KILL DIR
+16 if $DATA(DIRUT)
QUIT
+17 SET DGPATH=Y
+18 ;
+19 IF '$DATA(^DG(40.8,"B"))
Begin DoDot:1
+20 ;get primary division
SET DGDIV=$$PRIM^VASITE
+21 ;get station info
SET DGSTN=$$SITE^VASITE($$NOW^XLFDT,DGDIV)
+22 ;get station number
SET DGSTNUM=$PIECE(DGSTN,"^",3)
+23 ;set file name
SET DGFILE="VA"_DGSTNUM_".TXT"
+24 DO TASK(DGFILE,DGPATH,DGDIV)
End DoDot:1
QUIT
+25 ;
+26 ;If multiple divisions
IF $DATA(^DG(40.8,"B"))
Begin DoDot:1
+27 WRITE !!?3,"Building Tasks"
+28 SET DGDIV=0
SET DGDNAM=""
+29 FOR
SET DGDNAM=$ORDER(^DG(40.8,"B",DGDNAM))
if DGDNAM=""
QUIT
SET DGDIV=$ORDER(^DG(40.8,"B",DGDNAM,0))
Begin DoDot:2
+30 ;get station number
SET DGSTN=$$SITE^VASITE($$NOW^XLFDT,DGDIV)
if DGSTN=-1
QUIT
+31 ;get station number
SET DGSTNUM=$PIECE(DGSTN,"^",3)
+32 ;set file name
SET DGFILE="VA"_DGSTNUM_".TXT"
+33 DO TASK(DGFILE,DGPATH,DGDIV)
End DoDot:2
End DoDot:1
QUIT
+34 QUIT
+35 ;
TASK(DGFILE,DGPATH,DGDIV) ; Task off job
+1 NEW ZTSAVE,ZTRTN,ZTDESC,ZTSK,ZTIO,ZX
+2 ;
+3 SET DGPATH=$GET(DGPATH)
+4 if '(DGPATH]"")
SET DGPATH=$$PWD^%ZISH
+5 SET ZX=""
+6 FOR ZX="DGFILE","DGPATH","DGDIV"
SET ZTSAVE(ZX)=""
+7 SET ZTRTN="EN1^DGRUGPRP"
+8 SET ZTDESC="RAI/MDS Patient Demographic Data Collection"
+9 SET ZTIO=""
+10 WRITE !!?5,"Tasking ",DGFILE,"..."
+11 DO ^%ZTLOAD
+12 IF $DATA(ZTSK)[0
WRITE " Task was not queued!",!
+13 IF '$TEST
WRITE !?10,"Task queued: ",ZTSK,!
+14 QUIT
+15 ;
EN1 ; Build HFS file
+1 NEW DGNAME,DGWARD,DGIEN,DGWIEN,DGWDIV,DGREC,DGNAME,DOB,SSN,DGRB,DGMS,SEX,DGRACE,DGSTAB,DGADAT,DGATIME,DGHLNM,DGWREC,VADM,VAIP,VAPA,VAERR,POP,DFN,DGEN,DGENP,DGRFA
+2 ;
+3 ; Quit if the tasked job has been asked to stop
if $$S^%ZTLOAD
QUIT
+4 SET DGPATH=$GET(DGPATH)
+5 if '(DGPATH]"")
SET DGPATH=$$PWD^%ZISH
+6 ; Open HFS file device handler
DO OPEN^%ZISH("FILE1",DGPATH,DGFILE,"W")
+7 ; Quit if the device handler did not open properly
if POP
QUIT
+8 USE IO
+9 ;loop thru movement file
SET DGWARD=""
FOR
SET DGWARD=$ORDER(^DGPM("CN",DGWARD))
if DGWARD=""
QUIT
SET DGIEN=0
FOR
SET DGIEN=$ORDER(^DGPM("CN",DGWARD,DGIEN))
if DGIEN'>0
QUIT
Begin DoDot:1
+10 ;get patient ien
SET DFN=$$GET1^DIQ(405,DGIEN,.03,"I")
if DFN=""
QUIT
+11 SET DGRFA=$$GET1^DIQ(405,DGIEN,.11,"I")
+12 SET DGRFA=$SELECT(DGRFA=0:"NSC",DGRFA=1:"SC",1:"")
+13 SET DGEN=$ORDER(^DGEN(27.11,"C",DFN,""),-1)
SET DGENP=""
+14 IF DGEN]""
SET DGENP=$$GET1^DIQ(27.11,DGEN,.07,"I")
+15 ;get patient demographics, inpatient data, and address data
DO DEM^VADPT
DO IN5^VADPT
DO ADD^VADPT
+16 ;get ward ien and ward division
SET DGWIEN=$PIECE(VAIP(5),"^")
if DGWIEN=""
QUIT
SET DGWDIV=$$GET1^DIQ(42,DGWIEN,.015,"I")
+17 ;quit if not rai/mds ward
if $$GET1^DIQ(42,DGWIEN,.035,"I")'=1
QUIT
+18 ;if ward division equal to division being processed continue
IF DGDIV=DGWDIV
Begin DoDot:2
+19 SET DGNAME=VADM(1)
SET DOB=$PIECE(VADM(3),"^")
SET SSN=$PIECE(VADM(2),"^")
SET DGRB=$PIECE(VAIP(6),"^",2)
SET DGMS=$PIECE(VADM(10),"^")
SET SEX=$PIECE(VADM(5),"^")
SET DGRACE=$PIECE(VADM(8),"^")
SET DGSTAB=$SELECT(VAPA(5)]"":$PIECE(^DIC(5,$PIECE(VAPA(5),"^"),0),"^",2),1:"")
+20 ;get admit date/time
SET DGREC=$PIECE(VAIP(13,1),"^")
+21 ;grab date
SET DGADAT=$PIECE($PIECE(DGREC,"^"),".")
+22 ;grab time
SET DGATIME=$PIECE($PIECE(DGREC,"^"),".",2)
+23 ;parse name
SET DGHLNM=$$HLNAME^HLFNC(DGNAME,"^~|\")
IF $PIECE(DGHLNM,"^",4)=""
SET $PIECE(DGHLNM,"^",4)=""
+24 SET DGWREC=DGHLNM_"^"_$EXTRACT(DOB,4,5)_"/"_$EXTRACT(DOB,6,7)_"/"_(1700+$EXTRACT(DOB,1,3))_"^"_SSN_"^"_SEX_"^"_DGMS_"^"_DGRACE_"^"_$EXTRACT(DGADAT,4,5)_"/"_$EXTRACT(DGADAT,6,7)_"/"_(1700+$EXTRACT(DGADAT,1,3))_"@"_DGATIME_"^"
_DGWARD_"/"_DGRB
+25 SET DGWREC=DGWREC_"^"_VAPA(1)_"^"_VAPA(2)_"^"_VAPA(4)_"^"_DGSTAB_"^"_VAPA(6)_"^"_DGENP_"^"_DGRFA
+26 WRITE DGWREC,!
End DoDot:2
End DoDot:1
+27 ; close the HFS file handler
DO CLOSE^%ZISH("FILE1")
+28 QUIT
+29 ;
WARD ;Print Ward/Room/Bed for RAI/MDS wards
+1 ;call device api
DO EN^XUTMDEVQ("RPT^DGRUGPRP","Print Ward/Room/Bed Report","")
+2 DO HOME^%ZIS
+3 QUIT
RPT NEW DGCNT,DGWARD,DGWNAME,DGRB,DGADT,DGRBNM,DGADATE,DGATIME,DGCDT,DGTCNT,DGWCNT
+1 SET (DGTCNT,DGWCNT)=0
+2 ;get current date/time
DO NOW^%DTC
SET Y=%
DO DD^%DT
SET DGCDT=Y
+3 SET DGCNT=0
+4 ;loop through room-bed file, check if ward is rai/mds
SET DGWARD=0
FOR
SET DGWARD=$ORDER(^DG(405.4,"W",DGWARD))
if DGWARD'>0
QUIT
IF $$GET1^DIQ(42,DGWARD,.035,"I")=1
Begin DoDot:1
+5 ;get ward name
SET DGWNAME=$$GET1^DIQ(42,DGWARD,".01","I")
SET DGWCNT=0
+6 ;do header
DO HED
+7 ;loop thru room-bed for this ward
SET DGRB=0
FOR
SET DGRB=$ORDER(^DG(405.4,"W",DGWARD,DGRB))
if DGRB'>0
QUIT
Begin DoDot:2
+8 ;get room-bed name
SET DGRBNM=$$GET1^DIQ(405.4,DGRB,".01","I")
+9 ;add one to ward count
SET DGWCNT=DGWCNT+1
+10 ;if near end of screen, do header
IF $Y+4>$GET(IOSL)
DO HED
+11 ;write room-bed name
WRITE !,?5,DGRBNM
End DoDot:2
+12 ;write ward total and add to grand total
WRITE !!,"Total beds for ward ",DGWNAME,": ",DGWCNT
SET DGTCNT=DGTCNT+DGWCNT
End DoDot:1
+13 ;write grand total
WRITE !!,"Total Beds for all wards: ",DGTCNT
+14 QUIT
HED ;FORM FEED AND PRINT HEADER
+1 IF DGCNT>0
WRITE @IOF
+2 SET DGCNT=1
+3 WRITE !,"RAI/MDS Ward/Room/Beds"
+4 WRITE ?40,DGCDT
+5 WRITE !,"WARD: ",DGWNAME,!
+6 QUIT