IBJDE1 ;ALB/RB - DM DATA EXTRACTION (MENU OPTIONS/TRANSMIT E-MAIL) ;15-APR-99
 ;;2.0;INTEGRATED BILLING;**100,118,123,159,254,244**;21-MAR-94
 ;
VPE ; - View/print entries in IB DM EXTRACT DATA file (#351.71).
 I '$O(^IBE(351.71,0)) W !!,"There are no entries available.",*7 G ENQ
 ;
 S DIC="^IBE(351.71,",DIC(0)="AEMQZ",DIC("A")="Enter MONTH/YEAR: "
 D ^DIC K DIC G:Y'>0 ENQ S IB0=+Y,IBS=$P(Y(0),U,2),IBDT=Y(0,0)
 ;
 S DIC="^IBE(351.71,",BY=.01,(FR,TO)=IB0,DHD="W ?0 D VPH^IBJDE1"
 S FLDS="[IBJD DM V/P EXTRACTS]",L=0 D EN1^DIP W ! G VPE
 ;
VPH ; - Heading for View/Print option.
 W "DIAGNOSTIC MEASURES SUMMARY EXTRACTIONS-",IBDT
 W " (Status: ",$S(IBS=3:"COMPLETED",IBS=2:"STARTED",1:"ON STANDBY"),")"
 W !!,"Summary Line Item",?58,"Total",! F X=1:1:80 W "-"
 Q
 ;
DER ; - Disable/enable report(s) or extraction process.
 W ! S DIR(0)="Y",DIR("B")="NO"
 I $D(^IBE(351.7,"DISABLE")) D
 .S DIR("A",1)="The DM extract background job has been disabled."
 .S DIR("A")=" Do you want to re-enable it"
 E  S DIR("A")="Do you want to disable the DM extract background job"
 D ^DIR K DIR G:Y["^" ENQ I 'Y G DE1
 I $D(^IBE(351.7,"DISABLE")) K ^("DISABLE")
 E  S ^IBE(351.7,"DISABLE")=""
 W " ...Done",*7
 ;
DE1 ; - List disabled reports, if any.
 I $D(^IBE(351.7,"DISABLE")) G ENQ ; DM extract background job disabled.
 ;
 I $D(^IBE(351.7,"AC",1)) D
 .W !!,"These DM reports have been disabled:",!! S X=0
 .F  S X=$O(^IBE(351.7,"AC",1,X)) Q:'X  W ?3,$P($G(^IBE(351.7,X,0)),U),!
 E  W !!,"There are no disabled DM reports.",!
 ;
DE2 S DIR(0)="PO^351.7:AEMQZ",DIR("A")="Enter REPORT NAME"
 S DIR("?")="^D DEH^IBJDE1" D ^DIR K DIR I Y'>0 G ENQ
 S IB0=+Y,IBFL=$P(Y(0),U,2) W !!,Y(0,0),!
 ;
 S DIR("A")="Do you want to "_$S(IBFL:"re-en",1:"dis")_"able this report"
 S DIR(0)="Y",DIR("B")="NO" D ^DIR K DIR I Y["^"!('Y) W ! G DE2
 S DIE="^IBE(351.7,",DR=".02///"_$S('IBFL&(Y):1,1:"@"),DA=IB0
 D ^DIE K DA,DIE,DR W " ...Done",*7 G DE1
 ;
DEH ; - Help message for disable/enable option.
 W !,"Enter the name of the report you want disabled or re-enabled."
 W !,"If the report you enter is disabled, the monthly DM extraction"
 W !,"process will not collect summary data from the report until you"
 W !,"re-enable it again."
 Q
 ;
RTN ; - Help message for the field ROUTINE (entry point for the reprot)
 W !?9,"Enter the entry point for this report. You may enter  a  program"
 W !?9,"name (^ROUTINE), or a specific label of a  program (TAG^ROUTINE)"
 W !?9,"or you may also leave it blank.",!
 W !?9,"Obs: If this field is left blank, it means that the code respon-"
 W !?9,"     sible for extracting the data will be  invoked  by  another"
 W !?9,"     report.",!
 Q
 ;
MAN1 ; - Manually start DM extraction process.
 I $D(^IBE(351.7,"DISABLE")) D  G ENQ
 .W !!,"The DM extract process has been disabled.",!,*7
 S (IBX,X)=0
 F  S X=$O(^IBE(351.71,X)) Q:'X  I $P(^(X,0),U,2)'=3 S IBX=IBX+1
 I 'IBX W !,"All DM extracts on file have been transmitted.",!,*7 G ENQ
 ;
M1A S DIC="^IBE(351.71,",DIC(0)="AEMQZ",DIC("A")="Enter DM extract date: "
 S DIC("S")="I $P(^(0),U,2)'=3" W ! D ^DIC K DIC I Y'>0 G ENQ
 S IBDT=+Y,IBN=Y(0),IBDT1=$$M1^IBJDE(IBDT,3),IBST=$P(IBN,U,2)
 S DIR("A")="Do you want to start the DM extract process for "_IBDT1
 S DIR(0)="Y",DIR("B")="NO" D ^DIR K DIR I 'Y G ENQ
 I IBST=2 D  G:'Y ENQ
 .S DIR(0)="Y",DIR("B")="NO",IBS=$$M1^IBJDE($P(IBN,U,3),3)
 .S DIR("A",1)="The extract process for "_IBDT1_" began on "_IBS_"."
 .S DIR("A")="Do you want to restart it" W ! D ^DIR K DIR
 ;
 D BJ^IBJDE ; Start DM extraction background job.
 S IBS=$$M1^IBJDE($P($G(^IBE(351.71,IBDT,0)),U,3),3)
 W !!,"Extract process started on ",IBS,".",*7 S IBX=IBX-1
 I IBX D  G:Y M1A
 .S DIR("A")="Do you want to start the process for another date"
 .S DIR(0)="Y",DIR("B")="NO" D ^DIR K DIR
 ;
 G ENQ
 ;
MAN2 ; - Manually transmit DM extract file.
 I $D(^IBE(351.7,"DISABLE")) D  G ENQ
 .W !!,"The DM extract process has been disabled.",!,*7
 S (IBX,X)=0
 F  S X=$O(^IBE(351.71,X)) Q:'X  I $P(^(X,0),U,2)=3 S IBX=IBX+1
 I 'IBX D  G ENQ
 .W !,"All DM extracts on file have NOT been completed.",!,*7
 ;
M2A S DIC="^IBE(351.71,",DIC(0)="AEMQZ",DIC("A")="Enter DM extract date: "
 S DIC("S")="I $P(^(0),U,2)=3" W ! D ^DIC K DIC I Y'>0 G ENQ
 S IBDT=+Y,IBN=Y(0),DIR(0)="Y",DIR("B")="NO"
 S DIR("A")="Are you sure you want to transmit for "_$$M1^IBJDE(IBDT,3)
 D ^DIR K DIR I 'Y G M2A
M2B S $P(^IBE(351.71,IBDT,0),U,5)="" D XM(IBDT)
 I $G(XMZ) W " Done."
 E  D  G:Y M2B
 .S DIR(0)="Y",DIR("B")="NO"
 .S DIR("A")="The DM extract message failed to transmit...try again"
 .W !,*7 D ^DIR K DIR
 ;
 I IBX D  G:Y M2A
 .S DIR("A")="Do you want to start the process for another date"
 .S DIR(0)="Y",DIR("B")="NO" D ^DIR K DIR I Y S IBX=IBX-1
 ;
 G ENQ
 ;
MSG ; - DM extract reports message (shown when DM Menu is called up).
 S IBDT=$$M1^IBJDE(DT,1),IBDT1=$$M1^IBJDE(IBDT,3)
 I '$D(^IBE(351.71,IBDT,0)) G ENQ ; No extract data for this month yet.
 ;
 W @IOF S IBN=$G(^IBE(351.71,IBDT,0)),IBST=$P(IBN,U,2) I 'IBST G ENQ
 I IBST=1 D  G MSQ
 .W !,"The DM extract process for ",IBDT1," was initiated on "
 .W $$M1^IBJDE($P(IBN,U,3),3),!,"but it hasn't run yet.",!
 ;
 I IBST=3 D  G ENQ
 .W !,"The DM report data for ",IBDT1," has been successfully"
 .W !,"extracted on ",$$M1^IBJDE($P(IBN,U,4),3),". This data has been"
 .W !,"sent to the Central Collections mail group in FORUM.",*7
 ;
 S DIC="^IBE(351.71,",BY="[IBJD DM REPT SORT]",FR=IBDT_",1",TO=IBDT_",2"
 S DIOEND="I $Y'<(IOSL-14) R X:DTIME",(IOP,L)=0
 S DHD="W ?0 D MSH^IBJDE1",FLDS="[IBJD DM REPT PRINT]" D EN1^DIP
 ;
MSQ W !,"If you want, you can restart the DM extract process"
 W !,"by using the ""Manually Start DM Extraction"" option in"
 W !,"the Diagnostic Measures Extract Menu."
 G ENQ
 ;
MSH ; - DM extract reports message header.
 W !,"Data for the following DM reports have not been extracted"
 W !," for ",IBDT1,":",!!,*7
 Q
 ;
CHK ; - Check file #351.71 for completed and/or transmitted DM extracts
 ;   (shown when DM Extract Menu is called up).
 W @IOF,!,"Checking for completed and/or transmitted DM extracts"
 K IBX,IBX1 S (IBX,IBX1,IB0)=0
 S DT=$$DT^XLFDT
 F  S IB0=$O(^IBE(351.71,IB0)) Q:'IB0  S IBN=$G(^(IB0,0)) D
 .; - Do not process for invalid (day not equal 00 or future) dates
 .;   and remove data.
 .I (+$E(IB0,6,7)>0)!(IB0>DT) D  Q
 ..W !,"** Invalid date entry found.  Entry ("_IB0_") deleted.**",!
 ..S DIK="^IBE(351.71,",DA=IB0
 ..D ^DIK
 .; - Check for missing zero node.
 .I IBN="" W !,"Zero node data missing for "_IB0_" entry.  Data corruption possible.",! Q
 .; - Check for past months missing from file, if any.
 .I $O(^IBE(351.71,IB0)) D
 ..S IB1=$P(^IBE(351.71,0),U,4),IB2=IB0+$S($E(IB0,4,5)=12:8900,1:100)
 ..I $D(^IBE(351.71,"B",IB2,IB2))!(IB2>DT) Q
 ..S DIC="^IBE(351.71,",DIC(0)="L",DIC("DR")=".02///1",(DINUM,X)=IB2
 ..K DD,DO D FILE^DICN S $P(^IBE(351.71,0),U,4)=IB1+1 K DIC,DINUM,DD,DO
 .;
 .I $P(IBN,U,2)'=3 S IBX(IB0)="" S:'IBX IBX=1 Q
 .E  I '$P(IBN,U,5) S IBX1(IB0)="" S:'IBX1 IBX1=1 Q
 .W "."
 ;
 I 'IBX,'IBX1 W "Done" G ENQ
 I IBX D
 .W !!,"DM data has NOT been fully extracted for these months:",!,*7
 .S IB0=0 F  S IB0=$O(IBX(IB0)) Q:'IB0  W "  ",$$M1^IBJDE(IB0,3)
 .W !,"If you want, you can start the DM extract process for these"
 .W !,"months by using the ""Manually Start DM Extraction"" option."
 ;
 I IBX1 D
 .W !!,"DM data has NOT been transmitted for these months:",!,*7
 .S IB0=0 F  S IB0=$O(IBX1(IB0)) Q:'IB0  W "  ",$$M1^IBJDE(IB0,3)
 .W !,"If you want, you can transmit the DM extract data for these"
 .W !,"months by using the ""Manually Transmit DM Extract"" option."
 ;
 G ENQ
 ;
XM(IBDT) ; - Create/transmit DM extract file message.
 ;
 N DA,DIE,DR,IB0,IB1,IBC,IBDT1,IBMG,IBSTE,X,XMDUZ,XMSUB,XMTEXT
 ;
 K ^TMP("DME",$J) S IBSTE=$$SITE^VASITE,X=$E(DT,4,7)_(1700+$E(DT,1,3))
 S ^TMP("DME",$J,1)="HDR^"_$P(IBSTE,U,3)_U_$P(IBSTE,U,2)_U_X
 S IBC=1,IB0=0
 F  S IB0=$O(^IBE(351.71,IBDT,1,IB0)) Q:'IB0  D
 .Q:IB0=37  ; No unbilled report needed
 .S X=$S(IB0=8:$$M2^IBJDE(IBDT,5,3,1),1:$$M1^IBJDE(IBDT,2))
 .S IBC=IBC+1,^TMP("DME",$J,IBC)="DAT~"_IB0_"~"_$P(X,U)_"~"_$P(X,U,2)
 .S IB1=0 F  S IB1=$O(^IBE(351.71,IBDT,1,IB0,1,IB1)) Q:'IB1  D
 ..S X=$P($G(^IBE(351.71,IBDT,1,IB0,1,IB1,0)),U,2)
 ..S ^TMP("DME",$J,IBC)=^TMP("DME",$J,IBC)_U_X
 ;
 S ^TMP("DME",$J,IBC+1)="END^"_$P(IBSTE,U,3),IBDT1=$$M1^IBJDE(IBDT,3)
 S XMSUB="DIAG. MEASURES EXTRACT FILE-"_IBDT1_" ("_$P(IBSTE,U,2)_")"
 ;
 S IBMG=$P($G(^IBE(350.9,1,4)),U,5) I IBMG="" G ENQ:'$G(IBX),ENQ1
 ;
 S XMDUZ="INTEGRATED BILLING PACKAGE"
 S XMTEXT="^TMP(""DME"",$J,",XMY(IBMG)=""
 D SEND
 I $G(XMZ) S DIE="^IBE(351.71,",DA=IBDT,DR=".05///1;.06///"_XMZ D ^DIE
 ;
 I $G(IBX) G ENQ1 ; Return to DME manual transmit option.
 ;
ENQ K IB2,IBDT2,IBD1,IBD2,IBDT,IBFL,IBFR,IBN,IBS,IBST,IBST1,IBX,IBX1,BY,DHD
 K DIC,DIOEND,FLDS,FR,IOP,L,TO,X,XMZ,Y,%
ENQ1 K IB0,IB1,IBC,IBDT1,IBMG,IBSTE,XMSUB,XMTEXT,XMY,^TMP("DME",$J)
 Q
 ;
SEND ; Calls ^XMD to send the mail message with the data extracted
 ; Obs: By NEWing DUZ, ^XMD will assume DUZ=.5 (Sender=POSTMASTER)
 ;
 N DUZ D ^XMD
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBJDE1   9217     printed  Sep 23, 2025@19:58:59                                                                                                                                                                                                      Page 2
IBJDE1    ;ALB/RB - DM DATA EXTRACTION (MENU OPTIONS/TRANSMIT E-MAIL) ;15-APR-99
 +1       ;;2.0;INTEGRATED BILLING;**100,118,123,159,254,244**;21-MAR-94
 +2       ;
VPE       ; - View/print entries in IB DM EXTRACT DATA file (#351.71).
 +1        IF '$ORDER(^IBE(351.71,0))
               WRITE !!,"There are no entries available.",*7
               GOTO ENQ
 +2       ;
 +3        SET DIC="^IBE(351.71,"
           SET DIC(0)="AEMQZ"
           SET DIC("A")="Enter MONTH/YEAR: "
 +4        DO ^DIC
           KILL DIC
           if Y'>0
               GOTO ENQ
           SET IB0=+Y
           SET IBS=$PIECE(Y(0),U,2)
           SET IBDT=Y(0,0)
 +5       ;
 +6        SET DIC="^IBE(351.71,"
           SET BY=.01
           SET (FR,TO)=IB0
           SET DHD="W ?0 D VPH^IBJDE1"
 +7        SET FLDS="[IBJD DM V/P EXTRACTS]"
           SET L=0
           DO EN1^DIP
           WRITE !
           GOTO VPE
 +8       ;
VPH       ; - Heading for View/Print option.
 +1        WRITE "DIAGNOSTIC MEASURES SUMMARY EXTRACTIONS-",IBDT
 +2        WRITE " (Status: ",$SELECT(IBS=3:"COMPLETED",IBS=2:"STARTED",1:"ON STANDBY"),")"
 +3        WRITE !!,"Summary Line Item",?58,"Total",!
           FOR X=1:1:80
               WRITE "-"
 +4        QUIT 
 +5       ;
DER       ; - Disable/enable report(s) or extraction process.
 +1        WRITE !
           SET DIR(0)="Y"
           SET DIR("B")="NO"
 +2        IF $DATA(^IBE(351.7,"DISABLE"))
               Begin DoDot:1
 +3                SET DIR("A",1)="The DM extract background job has been disabled."
 +4                SET DIR("A")=" Do you want to re-enable it"
               End DoDot:1
 +5       IF '$TEST
               SET DIR("A")="Do you want to disable the DM extract background job"
 +6        DO ^DIR
           KILL DIR
           if Y["^"
               GOTO ENQ
           IF 'Y
               GOTO DE1
 +7        IF $DATA(^IBE(351.7,"DISABLE"))
               KILL ^("DISABLE")
 +8       IF '$TEST
               SET ^IBE(351.7,"DISABLE")=""
 +9        WRITE " ...Done",*7
 +10      ;
DE1       ; - List disabled reports, if any.
 +1       ; DM extract background job disabled.
           IF $DATA(^IBE(351.7,"DISABLE"))
               GOTO ENQ
 +2       ;
 +3        IF $DATA(^IBE(351.7,"AC",1))
               Begin DoDot:1
 +4                WRITE !!,"These DM reports have been disabled:",!!
                   SET X=0
 +5                FOR 
                       SET X=$ORDER(^IBE(351.7,"AC",1,X))
                       if 'X
                           QUIT 
                       WRITE ?3,$PIECE($GET(^IBE(351.7,X,0)),U),!
               End DoDot:1
 +6       IF '$TEST
               WRITE !!,"There are no disabled DM reports.",!
 +7       ;
DE2        SET DIR(0)="PO^351.7:AEMQZ"
           SET DIR("A")="Enter REPORT NAME"
 +1        SET DIR("?")="^D DEH^IBJDE1"
           DO ^DIR
           KILL DIR
           IF Y'>0
               GOTO ENQ
 +2        SET IB0=+Y
           SET IBFL=$PIECE(Y(0),U,2)
           WRITE !!,Y(0,0),!
 +3       ;
 +4        SET DIR("A")="Do you want to "_$SELECT(IBFL:"re-en",1:"dis")_"able this report"
 +5        SET DIR(0)="Y"
           SET DIR("B")="NO"
           DO ^DIR
           KILL DIR
           IF Y["^"!('Y)
               WRITE !
               GOTO DE2
 +6        SET DIE="^IBE(351.7,"
           SET DR=".02///"_$SELECT('IBFL&(Y):1,1:"@")
           SET DA=IB0
 +7        DO ^DIE
           KILL DA,DIE,DR
           WRITE " ...Done",*7
           GOTO DE1
 +8       ;
DEH       ; - Help message for disable/enable option.
 +1        WRITE !,"Enter the name of the report you want disabled or re-enabled."
 +2        WRITE !,"If the report you enter is disabled, the monthly DM extraction"
 +3        WRITE !,"process will not collect summary data from the report until you"
 +4        WRITE !,"re-enable it again."
 +5        QUIT 
 +6       ;
RTN       ; - Help message for the field ROUTINE (entry point for the reprot)
 +1        WRITE !?9,"Enter the entry point for this report. You may enter  a  program"
 +2        WRITE !?9,"name (^ROUTINE), or a specific label of a  program (TAG^ROUTINE)"
 +3        WRITE !?9,"or you may also leave it blank.",!
 +4        WRITE !?9,"Obs: If this field is left blank, it means that the code respon-"
 +5        WRITE !?9,"     sible for extracting the data will be  invoked  by  another"
 +6        WRITE !?9,"     report.",!
 +7        QUIT 
 +8       ;
MAN1      ; - Manually start DM extraction process.
 +1        IF $DATA(^IBE(351.7,"DISABLE"))
               Begin DoDot:1
 +2                WRITE !!,"The DM extract process has been disabled.",!,*7
               End DoDot:1
               GOTO ENQ
 +3        SET (IBX,X)=0
 +4        FOR 
               SET X=$ORDER(^IBE(351.71,X))
               if 'X
                   QUIT 
               IF $PIECE(^(X,0),U,2)'=3
                   SET IBX=IBX+1
 +5        IF 'IBX
               WRITE !,"All DM extracts on file have been transmitted.",!,*7
               GOTO ENQ
 +6       ;
M1A        SET DIC="^IBE(351.71,"
           SET DIC(0)="AEMQZ"
           SET DIC("A")="Enter DM extract date: "
 +1        SET DIC("S")="I $P(^(0),U,2)'=3"
           WRITE !
           DO ^DIC
           KILL DIC
           IF Y'>0
               GOTO ENQ
 +2        SET IBDT=+Y
           SET IBN=Y(0)
           SET IBDT1=$$M1^IBJDE(IBDT,3)
           SET IBST=$PIECE(IBN,U,2)
 +3        SET DIR("A")="Do you want to start the DM extract process for "_IBDT1
 +4        SET DIR(0)="Y"
           SET DIR("B")="NO"
           DO ^DIR
           KILL DIR
           IF 'Y
               GOTO ENQ
 +5        IF IBST=2
               Begin DoDot:1
 +6                SET DIR(0)="Y"
                   SET DIR("B")="NO"
                   SET IBS=$$M1^IBJDE($PIECE(IBN,U,3),3)
 +7                SET DIR("A",1)="The extract process for "_IBDT1_" began on "_IBS_"."
 +8                SET DIR("A")="Do you want to restart it"
                   WRITE !
                   DO ^DIR
                   KILL DIR
               End DoDot:1
               if 'Y
                   GOTO ENQ
 +9       ;
 +10      ; Start DM extraction background job.
           DO BJ^IBJDE
 +11       SET IBS=$$M1^IBJDE($PIECE($GET(^IBE(351.71,IBDT,0)),U,3),3)
 +12       WRITE !!,"Extract process started on ",IBS,".",*7
           SET IBX=IBX-1
 +13       IF IBX
               Begin DoDot:1
 +14               SET DIR("A")="Do you want to start the process for another date"
 +15               SET DIR(0)="Y"
                   SET DIR("B")="NO"
                   DO ^DIR
                   KILL DIR
               End DoDot:1
               if Y
                   GOTO M1A
 +16      ;
 +17       GOTO ENQ
 +18      ;
MAN2      ; - Manually transmit DM extract file.
 +1        IF $DATA(^IBE(351.7,"DISABLE"))
               Begin DoDot:1
 +2                WRITE !!,"The DM extract process has been disabled.",!,*7
               End DoDot:1
               GOTO ENQ
 +3        SET (IBX,X)=0
 +4        FOR 
               SET X=$ORDER(^IBE(351.71,X))
               if 'X
                   QUIT 
               IF $PIECE(^(X,0),U,2)=3
                   SET IBX=IBX+1
 +5        IF 'IBX
               Begin DoDot:1
 +6                WRITE !,"All DM extracts on file have NOT been completed.",!,*7
               End DoDot:1
               GOTO ENQ
 +7       ;
M2A        SET DIC="^IBE(351.71,"
           SET DIC(0)="AEMQZ"
           SET DIC("A")="Enter DM extract date: "
 +1        SET DIC("S")="I $P(^(0),U,2)=3"
           WRITE !
           DO ^DIC
           KILL DIC
           IF Y'>0
               GOTO ENQ
 +2        SET IBDT=+Y
           SET IBN=Y(0)
           SET DIR(0)="Y"
           SET DIR("B")="NO"
 +3        SET DIR("A")="Are you sure you want to transmit for "_$$M1^IBJDE(IBDT,3)
 +4        DO ^DIR
           KILL DIR
           IF 'Y
               GOTO M2A
M2B        SET $PIECE(^IBE(351.71,IBDT,0),U,5)=""
           DO XM(IBDT)
 +1        IF $GET(XMZ)
               WRITE " Done."
 +2       IF '$TEST
               Begin DoDot:1
 +3                SET DIR(0)="Y"
                   SET DIR("B")="NO"
 +4                SET DIR("A")="The DM extract message failed to transmit...try again"
 +5                WRITE !,*7
                   DO ^DIR
                   KILL DIR
               End DoDot:1
               if Y
                   GOTO M2B
 +6       ;
 +7        IF IBX
               Begin DoDot:1
 +8                SET DIR("A")="Do you want to start the process for another date"
 +9                SET DIR(0)="Y"
                   SET DIR("B")="NO"
                   DO ^DIR
                   KILL DIR
                   IF Y
                       SET IBX=IBX-1
               End DoDot:1
               if Y
                   GOTO M2A
 +10      ;
 +11       GOTO ENQ
 +12      ;
MSG       ; - DM extract reports message (shown when DM Menu is called up).
 +1        SET IBDT=$$M1^IBJDE(DT,1)
           SET IBDT1=$$M1^IBJDE(IBDT,3)
 +2       ; No extract data for this month yet.
           IF '$DATA(^IBE(351.71,IBDT,0))
               GOTO ENQ
 +3       ;
 +4        WRITE @IOF
           SET IBN=$GET(^IBE(351.71,IBDT,0))
           SET IBST=$PIECE(IBN,U,2)
           IF 'IBST
               GOTO ENQ
 +5        IF IBST=1
               Begin DoDot:1
 +6                WRITE !,"The DM extract process for ",IBDT1," was initiated on "
 +7                WRITE $$M1^IBJDE($PIECE(IBN,U,3),3),!,"but it hasn't run yet.",!
               End DoDot:1
               GOTO MSQ
 +8       ;
 +9        IF IBST=3
               Begin DoDot:1
 +10               WRITE !,"The DM report data for ",IBDT1," has been successfully"
 +11               WRITE !,"extracted on ",$$M1^IBJDE($PIECE(IBN,U,4),3),". This data has been"
 +12               WRITE !,"sent to the Central Collections mail group in FORUM.",*7
               End DoDot:1
               GOTO ENQ
 +13      ;
 +14       SET DIC="^IBE(351.71,"
           SET BY="[IBJD DM REPT SORT]"
           SET FR=IBDT_",1"
           SET TO=IBDT_",2"
 +15       SET DIOEND="I $Y'<(IOSL-14) R X:DTIME"
           SET (IOP,L)=0
 +16       SET DHD="W ?0 D MSH^IBJDE1"
           SET FLDS="[IBJD DM REPT PRINT]"
           DO EN1^DIP
 +17      ;
MSQ        WRITE !,"If you want, you can restart the DM extract process"
 +1        WRITE !,"by using the ""Manually Start DM Extraction"" option in"
 +2        WRITE !,"the Diagnostic Measures Extract Menu."
 +3        GOTO ENQ
 +4       ;
MSH       ; - DM extract reports message header.
 +1        WRITE !,"Data for the following DM reports have not been extracted"
 +2        WRITE !," for ",IBDT1,":",!!,*7
 +3        QUIT 
 +4       ;
CHK       ; - Check file #351.71 for completed and/or transmitted DM extracts
 +1       ;   (shown when DM Extract Menu is called up).
 +2        WRITE @IOF,!,"Checking for completed and/or transmitted DM extracts"
 +3        KILL IBX,IBX1
           SET (IBX,IBX1,IB0)=0
 +4        SET DT=$$DT^XLFDT
 +5        FOR 
               SET IB0=$ORDER(^IBE(351.71,IB0))
               if 'IB0
                   QUIT 
               SET IBN=$GET(^(IB0,0))
               Begin DoDot:1
 +6       ; - Do not process for invalid (day not equal 00 or future) dates
 +7       ;   and remove data.
 +8                IF (+$EXTRACT(IB0,6,7)>0)!(IB0>DT)
                       Begin DoDot:2
 +9                        WRITE !,"** Invalid date entry found.  Entry ("_IB0_") deleted.**",!
 +10                       SET DIK="^IBE(351.71,"
                           SET DA=IB0
 +11                       DO ^DIK
                       End DoDot:2
                       QUIT 
 +12      ; - Check for missing zero node.
 +13               IF IBN=""
                       WRITE !,"Zero node data missing for "_IB0_" entry.  Data corruption possible.",!
                       QUIT 
 +14      ; - Check for past months missing from file, if any.
 +15               IF $ORDER(^IBE(351.71,IB0))
                       Begin DoDot:2
 +16                       SET IB1=$PIECE(^IBE(351.71,0),U,4)
                           SET IB2=IB0+$SELECT($EXTRACT(IB0,4,5)=12:8900,1:100)
 +17                       IF $DATA(^IBE(351.71,"B",IB2,IB2))!(IB2>DT)
                               QUIT 
 +18                       SET DIC="^IBE(351.71,"
                           SET DIC(0)="L"
                           SET DIC("DR")=".02///1"
                           SET (DINUM,X)=IB2
 +19                       KILL DD,DO
                           DO FILE^DICN
                           SET $PIECE(^IBE(351.71,0),U,4)=IB1+1
                           KILL DIC,DINUM,DD,DO
                       End DoDot:2
 +20      ;
 +21               IF $PIECE(IBN,U,2)'=3
                       SET IBX(IB0)=""
                       if 'IBX
                           SET IBX=1
                       QUIT 
 +22              IF '$TEST
                       IF '$PIECE(IBN,U,5)
                           SET IBX1(IB0)=""
                           if 'IBX1
                               SET IBX1=1
                           QUIT 
 +23               WRITE "."
               End DoDot:1
 +24      ;
 +25       IF 'IBX
               IF 'IBX1
                   WRITE "Done"
                   GOTO ENQ
 +26       IF IBX
               Begin DoDot:1
 +27               WRITE !!,"DM data has NOT been fully extracted for these months:",!,*7
 +28               SET IB0=0
                   FOR 
                       SET IB0=$ORDER(IBX(IB0))
                       if 'IB0
                           QUIT 
                       WRITE "  ",$$M1^IBJDE(IB0,3)
 +29               WRITE !,"If you want, you can start the DM extract process for these"
 +30               WRITE !,"months by using the ""Manually Start DM Extraction"" option."
               End DoDot:1
 +31      ;
 +32       IF IBX1
               Begin DoDot:1
 +33               WRITE !!,"DM data has NOT been transmitted for these months:",!,*7
 +34               SET IB0=0
                   FOR 
                       SET IB0=$ORDER(IBX1(IB0))
                       if 'IB0
                           QUIT 
                       WRITE "  ",$$M1^IBJDE(IB0,3)
 +35               WRITE !,"If you want, you can transmit the DM extract data for these"
 +36               WRITE !,"months by using the ""Manually Transmit DM Extract"" option."
               End DoDot:1
 +37      ;
 +38       GOTO ENQ
 +39      ;
XM(IBDT)  ; - Create/transmit DM extract file message.
 +1       ;
 +2        NEW DA,DIE,DR,IB0,IB1,IBC,IBDT1,IBMG,IBSTE,X,XMDUZ,XMSUB,XMTEXT
 +3       ;
 +4        KILL ^TMP("DME",$JOB)
           SET IBSTE=$$SITE^VASITE
           SET X=$EXTRACT(DT,4,7)_(1700+$EXTRACT(DT,1,3))
 +5        SET ^TMP("DME",$JOB,1)="HDR^"_$PIECE(IBSTE,U,3)_U_$PIECE(IBSTE,U,2)_U_X
 +6        SET IBC=1
           SET IB0=0
 +7        FOR 
               SET IB0=$ORDER(^IBE(351.71,IBDT,1,IB0))
               if 'IB0
                   QUIT 
               Begin DoDot:1
 +8       ; No unbilled report needed
                   if IB0=37
                       QUIT 
 +9                SET X=$SELECT(IB0=8:$$M2^IBJDE(IBDT,5,3,1),1:$$M1^IBJDE(IBDT,2))
 +10               SET IBC=IBC+1
                   SET ^TMP("DME",$JOB,IBC)="DAT~"_IB0_"~"_$PIECE(X,U)_"~"_$PIECE(X,U,2)
 +11               SET IB1=0
                   FOR 
                       SET IB1=$ORDER(^IBE(351.71,IBDT,1,IB0,1,IB1))
                       if 'IB1
                           QUIT 
                       Begin DoDot:2
 +12                       SET X=$PIECE($GET(^IBE(351.71,IBDT,1,IB0,1,IB1,0)),U,2)
 +13                       SET ^TMP("DME",$JOB,IBC)=^TMP("DME",$JOB,IBC)_U_X
                       End DoDot:2
               End DoDot:1
 +14      ;
 +15       SET ^TMP("DME",$JOB,IBC+1)="END^"_$PIECE(IBSTE,U,3)
           SET IBDT1=$$M1^IBJDE(IBDT,3)
 +16       SET XMSUB="DIAG. MEASURES EXTRACT FILE-"_IBDT1_" ("_$PIECE(IBSTE,U,2)_")"
 +17      ;
 +18       SET IBMG=$PIECE($GET(^IBE(350.9,1,4)),U,5)
           IF IBMG=""
               if '$GET(IBX)
                   GOTO ENQ
               GOTO ENQ1
 +19      ;
 +20       SET XMDUZ="INTEGRATED BILLING PACKAGE"
 +21       SET XMTEXT="^TMP(""DME"",$J,"
           SET XMY(IBMG)=""
 +22       DO SEND
 +23       IF $GET(XMZ)
               SET DIE="^IBE(351.71,"
               SET DA=IBDT
               SET DR=".05///1;.06///"_XMZ
               DO ^DIE
 +24      ;
 +25      ; Return to DME manual transmit option.
           IF $GET(IBX)
               GOTO ENQ1
 +26      ;
ENQ        KILL IB2,IBDT2,IBD1,IBD2,IBDT,IBFL,IBFR,IBN,IBS,IBST,IBST1,IBX,IBX1,BY,DHD
 +1        KILL DIC,DIOEND,FLDS,FR,IOP,L,TO,X,XMZ,Y,%
ENQ1       KILL IB0,IB1,IBC,IBDT1,IBMG,IBSTE,XMSUB,XMTEXT,XMY,^TMP("DME",$JOB)
 +1        QUIT 
 +2       ;
SEND      ; Calls ^XMD to send the mail message with the data extracted
 +1       ; Obs: By NEWing DUZ, ^XMD will assume DUZ=.5 (Sender=POSTMASTER)
 +2       ;
 +3        NEW DUZ
           DO ^XMD
 +4        QUIT