DGRP6CL ;ALB/TMK,LBD,ARF - REGISTRATION SCREEN 6 FIELDS Conflict locations ; 6/23/09 4:08pm
 ;;5.3;Registration;**689,751,764,797,1014**;Aug 13, 1993;Build 42
 ;
CLLST(DFN,DGCONF,DGPOSS,DGMSE) ;
 ; For patient DFN:
 ; Returns DGCONF array: DGCONF(conf loc)= Start dt^End dt
 ;  or, for multiple OEF/OIF/ UNKNOWN OEF/OIF: DGCONF(conf loc-ien) =
 ;                    Start dt ^ End dt ^ Site source ^ Lock flag
 ;    DGCONF(conflict loc,1)=1 if dts inconsistent w/mse dts
 ; DGPOSS = array of possible conflict locations, based on service
 ;          episode dts DGPOSS(conf loc)=""
 ; DGMSE = array of military svc episodes
 ;          DGMSE(1-n)=fr dt^to dt^branch ien^comp code
 ;
 N DGZ,DGZ0,DIQUIET,FRTO
 S DIQUIET=1 K DGCONF,DGPOSS
 ; Get Military Service Episodes and store in DGMSE array (DG*5.3*797)
 D GETMSE
 ;
 ; Must chk all possible/on-file conf locs for valid mil svc pd
 ; Extract OEF/OIF data
 F DGZ="OEF","OIF","UNK" S DGCONF(DGZ)=""
 D GET^DGENOEIF(DFN,.DGZ,0,"","")
 S DGZ0=0 F  S DGZ0=$O(DGZ("IEN",DGZ0)) Q:'DGZ0  S DGZ=$G(DGZ("IEN",DGZ0)) D
 . N DGCONFX
 . Q:'$G(DGZ("FR",DGZ0))&'$G(DGZ("TO",DGZ0))
 . S DGCONFX=$P("OIF^OEF^UNK",U,+$G(DGZ("LOC",DGZ0)))_"-"_DGZ,DGCONF=DGCONFX,DGCONF($P(DGCONFX,"-"))=$G(DGCONF($P(DGCONFX,"-")))_DGZ_";"
 . F FRTO=1,0 S $P(DGCONF(DGCONFX),U,$S(FRTO:1,1:2))=$$GETDT^DGRPMS(DFN,DGCONFX,FRTO) I FRTO=0 D CKDT^DGRP6CL1(.DGCONF,.DGMSE,.DGPOSS)
 . S $P(DGCONF(DGCONFX),U,3)=$G(DGZ("SITE",DGZ0))
 . S $P(DGCONF(DGCONFX),U,4)=$G(DGZ("LOCK",DGZ0))
 F DGCONF="OEF","OIF","UNK" D CKDT^DGRP6CL1(.DGCONF,.DGMSE,.DGPOSS)
 F DGCONF="VIET","LEB","GREN","PAN","GULF","SOM","YUG" F FRTO=1,0 S $P(DGCONF(DGCONF),U,$S(FRTO:1,1:2))=$$GETDT^DGRPMS(DFN,DGCONF,FRTO) I FRTO=0 D CKDT^DGRP6CL1(.DGCONF,.DGMSE,.DGPOSS)
 Q
 ;
GETMSE ;Get Military Service Data and store in DGMSE array (DG*5.3*797)
 ;DGMSE(1-3)=fr dt^to dt^branch ien^comp code
 ;Get MSE data from MSE sub-file #2.3216, if it's populated
 N MSE,DGZ,DGZ0,DGZ1,DG32,DG3291
 I $D(^DPT(DFN,.3216)) D  Q
 . D GETMSE^DGMSEUTL(DFN,.MSE)
 . S (MSE,DGZ)=0
 . F  S MSE=$O(MSE(MSE)) Q:'MSE  S DGZ=DGZ+1,DGMSE(DGZ)=$P(MSE(MSE),U,1,4)
 ;Else get MSE data from .32 and .3291 nodes of Patient file #2
 S DG32=$G(^DPT(DFN,.32)),DG3291=$G(^(.3291))
 S DGZ1=0
 F DGZ=1:1:3 S DGZ0=$S(DGZ=1:"5^5^6^7",DGZ=2:"19^10^11^12",1:"20^15^16^17") D
 . Q:$S($P(DG32,U,+DGZ0)="Y":0,1:'$P(DG32,U,+DGZ0))
 . S DGZ1=DGZ1+1,DGMSE(DGZ1)=$P(DG32,U,$P(DGZ0,U,3))_U_$P(DG32,U,$P(DGZ0,U,4))_U_$P(DG32,U,$P(DGZ0,U,2))_U_$P(DG3291,U,DGZ)
 Q
 ;
YN(DGRPX,X) ;Format Yes/No fld in $P(DGRPX,U,X)
 Q $S($P(DGRPX,"^",X)="Y":"YES",$P(DGRPX,"^",X)="N":"NO ",$P(DGRPX,"^",X)="U":"UNK",1:"   ")
 ;
DAT(DGRPX,X,Z1) ; Format dt in $P(DGRPX,U,X) for a length of Z1
 N Z
 S Z=$P(DGRPX,U,X)
 I Z'="" S Z=$$FMTE^XLFDT(Z,"5DZ")
 S:$L(Z)<Z1 Z=$E(Z_$J("",Z1),1,Z1)
 Q Z
 ;
EN(DFN,QUIT) ; Entry from reg screen 6
 N DIPA,DGCONF,DGCONFS,DGCONF1,DGMSE,DGMSG,DGPOSS,DIR,DIE,DR,DA
 ;
 ; Return QUIT=1 if ^ entered
EN1 ; Entry from conf subscreen off reg screen 6
 ; Routine loops until exit/quit from subscreen
 D CLEAR^VALM1
 K DGCONF,DGCONFS,DGPOSS,DGMSE,DGMSG,DGDISP
 N DIR,DTOUT,DUOUT,Z,Z0,Z1,Z2,X,Y,LOOP,DG,DGM,DGZ,DGEG,DGEGS,DGX,DGX1,DG321,DG322,DGCT,DGY,DGY1,DGCTX,SSN
 D CLLST(DFN,.DGCONF,.DGPOSS,.DGMSE)
 I $G(DGRPV) S $E(DGRPVV(6),2,3)="00",DGRPVV(6,"NOEDIT")=1
 I '$G(DGRPV),$E(DGRPVV(6),2,3)="11" S $E(DGRPVV(6),2,3)="00",DGRPVV(6,"NOEDIT")=1
 S DGMSG=0,DGCTX=0
 F Z="OEF","OIF","UNK" D  ; Sort OEF/OIF/ UNKNOWN OEF/OIF
 . ; by reverse from dt within each conf
 . S Z0=Z F  S Z0=$O(DGCONF(Z0)) Q:Z0=""!(Z0'[Z)  S Z2=Z_"-"_(9999999-DGCONF(Z0)) S DGCONFS(Z2)=$P(Z0,"-",2) I 'DGMSG,$G(DGCONF(Z0,1)) S DGMSG=1
 S DG321=$G(^DPT(DFN,.321)),DG322=$G(^(.322))
 ;
 S DIR(0)="SA^",DGCT=0
 N DGSSNSTR,DGPTYPE,DGSSN,DGDOB ;ARF-DG*5.3*1014 - begin - add standardize patient data to the screen banner
 S DGSSNSTR=$$SSNNM^DGRPU(DFN)
 S DGSSN=$P($P(DGSSNSTR,";",2)," ",3)
 S DGDOB=$$GET1^DIQ(2,DFN,.03,"I")
 S DGDOB=$$UP^XLFSTR($$FMTE^XLFDT($E(DGDOB,1,12),1))
 S DGPTYPE=$$GET1^DIQ(391,$$GET1^DIQ(2,DFN_",",391,"I")_",",.01)
 S:DGPTYPE="" DGPTYPE="PATIENT TYPE UNKNOWN"
 S DGCT=DGCT+1,DIR("A",DGCT)=$P(DGSSNSTR,";",1)_$S($$GET1^DIQ(2,DFN,.2405)'="":" ("_$$GET1^DIQ(2,DFN,.2405)_")",1:"")_"    "_DGDOB
 S DGCT=DGCT+1,DIR("A",DGCT)=$S($P($P(DGSSNSTR,";",2)," ",2)'="":$E($P($P(DGSSNSTR,";",2)," ",2),1,40)_"    ",1:"")_DGSSN_"    "_DGPTYPE
 ;S X=$S($D(^DPT(+DFN,0)):^(0),1:""),SSN=$P(X,"^",9),SSN=$E(SSN,1,3)_"-"_$E(SSN,4,5)_"-"_$E(SSN,6,10)
 ;S DGCT=DGCT+1,DIR("A",DGCT)=$$SSNNM^DGRPU(DFN) ;ARF-DG*5.3*1014 - end
 S DGCT=DGCT+1,DIR("A",DGCT)="",$P(DIR("A",DGCT),"=",81)=""
 S DGCT=DGCT+1,DIR("A",DGCT)=$S($O(DGMSE(0)):"MILITARY SERVICE PERIODS:",1:"NO SERVICE PERIODS FOR THIS PATIENT - NO CONFLICT LOC CAN BE ENTERED")
 S Z=0 F  S Z=$O(DGMSE(Z)) Q:'Z!(Z>4)  D
 . I Z=4 S DGCT=DGCT+1,DIR("A",DGCT)=$J("",3)_"<more episodes>" Q
 . S DGCT=DGCT+1,DIR("A",DGCT)=$J("",3)_$E($$EXTERNAL^DILFD(2,.325,"",$P(DGMSE(Z),U,3))_$S($P(DGMSE(Z),U,4)'="":"/"_$$SVCCOMP($P(DGMSE(Z),U,4)),1:"")_$J("",30),1,30)
 . S DIR("A",DGCT)=DIR("A",DGCT)_"  ("_$S($P(DGMSE(Z),U):$$FMTE^XLFDT($P(DGMSE(Z),U),"5DZ"),1:"missing")_"-"_$S($P(DGMSE(Z),U,2):$$FMTE^XLFDT($P(DGMSE(Z),U,2),"5DZ"),1:"missing")_")"
 S DGCT=DGCT+1,DIR("A",DGCT)=" "
 S DGCT=DGCT+1,DIR("A",DGCT)=$J("",24)_"---- CONFLICT LOCATIONS ----"
 S DGCT=DGCT+1,DIR("A",DGCT)=$J("",34)_"FROM"_$J("",9)_"TO"_$J("",7)_"SOURCE (FOR OEF/OIF)"
 ; DGCONF(DGCONF,"OK")=# entries for OEF/OIF/ UNKNOWN OEF/OIF
 ;                     that are site-entered
 ; DGCONF(DGCONF,"OK",entry ien)=display #^formatted from dt^
 ;       formatted to dt^inconsistent flag (valid entries for editing)
 S DGEG=0
 F DGEGS=2,1,3 D
 . S DGCONF=$P("OIF^OEF^UNK",U,DGEGS),DGM=0
 . S DG=$$ISVALID^DGRP6CL2(.DGCONF,.DGPOSS)
 . S DGEG=DGEG+1
 . S DGDISP=$S(DGCONF'="UNK":$J("",8),1:"OEF/OIF ")_DGCONF_": "
 . S DGCT=DGCT+1,DGCTX=DGCT S DIR("A",DGCT)="   "_$E(DG,1)_DGEG_$E(DG,2)_"  -"_DGDISP_$$YN($S(DGCONF(DGCONF):"Y",'$D(^DPT(DFN,.3215,0)):"",1:"N"),1)
 . I $G(DGCONF(DGCONF))!$D(DGPOSS(DGCONF)) I '$G(DGRPV),$G(DGCONF(DGCONF,"VEDIT"))'=2,'$G(DGCONF(DGCONF,"NOEDIT")) S:DGCONF'="UNK" DIR(0)=DIR(0)_DGEG_":"_DGCONF_";"
 . S (DGZ,DGCONFS)=DGCONF F  S DGCONFS=$O(DGCONFS(DGCONFS)) Q:DGCONFS=""!(DGCONFS'[DGZ)  D
 .. N DGUN,DGIEN,STA
 .. S DGIEN=DGCONFS(DGCONFS),DGCONF=DGZ_"-"_DGIEN,DGCONF1=DGZ,DGM=DGM+1
 .. I $G(DGCONF(DGCONF,1)),DGCTX S $E(DIR("A",DGCTX),1,3)="***"
 .. S DG=$$ISVALID^DGRP6CL2(.DGCONF,.DGPOSS)
 .. S DGUN=$S($G(DGCONF(DGCONF,"NOEDIT")):1,1:0)
 .. I 'DGUN S DGCONF(DGCONF1,"OK")=$G(DGCONF(DGCONF1,"OK"))+1,DGCONF(DGCONF1,"OK",DGIEN)=DGM_U_$$FMTE^XLFDT($P(DGCONF(DGCONF),U),"5DZ")_U_$$FMTE^XLFDT($P(DGCONF(DGCONF),U,2),"5DZ")
 .. I DGM>1 S DGCT=DGCT+1
 .. S DIR("A",DGCT)=$S(DGM>1:$J("",27-$L(DGM)),1:DIR("A",DGCT)_" ")_"("_DGM_")  "_$E($$DAT(DGCONF(DGCONF),1,13)_$J("",12),1,12)_$E($$DAT(DGCONF(DGCONF),2,11)_$J("",10),1,10)_"   "
 .. S STA=$P(DGCONF(DGCONF),U,3)
 .. S:STA STA=$P($G(^DIC(4,+STA,99)),U)
 .. S DIR("A",DGCT)=DIR("A",DGCT)_$S($P(DGCONF(DGCONF),U,3)="CEV":"",1:"Station #")_$E(STA_$J("",$S('DGUN:6,1:3)),1,$S('DGUN:6,1:3))
 .. I DGUN S DIR("A",DGCT)=DIR("A",DGCT)_" (No Edit)"
 D LOOPCNF^DGRP6CL1(.DGCONF,.DGPOSS,.DIR)
 S DGCT=DGCT+1,DIR("A",DGCT)=" "
 I $G(DGMSG) S DGCT=DGCT+1,DIR("A",DGCT)="*** ==>OEF/OIF Dates are inconsistent with veteran's military service episodes"
 S DIR("A")="SELECT THE NUMBER OF A CONFLICT LOCATION OR (Q)UIT: "
 S DIR(0)=DIR(0)_"Q:QUIT"
 S DIR("?")="^D HELP^DGRP6CL1($P(DIR(0),U,2))"
 S DIR("B")="QUIT"
 D ^DIR K DIR
 I $D(DUOUT)!$D(DTOUT)!(Y="Q") S:Y'="Q" QUIT=1 G QUIT
 S DGY=Y,DGY1=$S(Y=2:1,Y=1:2,1:Y)
 I DGY<4 S DGCONF=""
 I DGY'<4 D
 . S DGCONF=$P("OEF^OIF^UNK^VIET^LEB^GREN^PAN^GULF^SOM^YUG",U,DGY)
 . I $G(DGCONF(DGCONF,1)) W !!,"WARNING - THIS CONFLICT IS INCONSISTENT WITH MILITARY SERVICE DATA",!
 . S DIE=2,DA=DFN,DR=$P($T(@DGCONF),";;",2) D:DR'="" ^DIE K DIE,DA,DR
 I DGY=1!(DGY=2) D
 . S DGCONF=$P("OEF^OIF",U,DGY)
 . I '$G(DGCONF(DGCONF,"OK")),$G(DGCONF(DGCONF,"VEDIT"))'=2 D ADDCFL^DGRP6CL1(DFN,DGY1,DGCONF) Q  ; Add new only valid action
 . I $G(DGCONF(DGCONF,"VEDIT"))=1 S DIR("A")="DO YOU WANT TO (A)DD OR (E)DIT "_DGCONF_" CONFLICT DATA?: ",DIR(0)="SA^A:ADD;E:EDIT",DIR("B")="ADD" D ^DIR K DIR
 . I $G(DGCONF(DGCONF,"VEDIT"))=2,$G(DGCONF(DGCONF,"OK")) S DIR("A")="DO YOU WANT TO EDIT "_DGCONF_" CONFLICT DATA?: ",DIR(0)="YA",DIR("B")="YES" D ^DIR K DIR S Y=$S(Y=1:"E",1:Y)
 . Q:$D(DTOUT)!$D(DUOUT)
 . I Y="A" D ADDCFL^DGRP6CL1(DFN,DGY1,DGCONF) Q
 . I Y="E" D
 .. N DGXREF,IEN,DIR,X,Y
 .. I DGCONF(DGCONF,"OK")=1 S IEN=+$O(DGCONF(DGCONF,"OK",0)) I IEN D EDCFL^DGRP6CL1(DFN,IEN,$G(DGCONF(DGCONF,"VEDIT"))) Q
 .. S DIR(0)="SA^",DIR("A")="SELECT THE # OF THE "_DGCONF_" CONFLICT PERIOD TO EDIT: ",DIR("A",1)=" "
 .. S Z=0 F  S Z=$O(DGCONF(DGCONF,"OK",Z)) Q:'Z  S Z0=DGCONF(DGCONF,"OK",Z),DIR(0)=DIR(0)_+Z0_":"_$P(Z0,U,2)_$S($P(Z0,U,3)'="":"-"_$P(Z0,U,3),1:"")_";",DGXREF(+Z0)=Z
 .. S DIR(0)=DIR(0)_"Q:QUIT"
 .. D ^DIR K DIR
 .. I Y D EDCFL^DGRP6CL1(DFN,+$G(DGXREF(+Y)),$G(DGCONF(DGCONF,"VEDIT")))
 G EN1
 ;
QUIT Q
 ;
EN2 ; Consistency checker re-edit entrypoint for OEF/OIF data
 N DGOEIF,DGZ,DGQUIT,Z,Z0,Y
 D GET^DGENOEIF(DFN,.DGOEIF,2,"",1)
 I $G(DGOEIF("COUNT"))&($O(DGOEIF("OIF",0))!$O(DGOEIF("OEF",0))) D
 . F Z="OEF","OIF" S Z0=0 F  S Z0=$O(DGOEIF(Z,Z0)) Q:'Z0  I $G(DGOEIF(Z,Z0,"IEN")) S DGZ(DGOEIF(Z,Z0,"IEN"))=""
 . S (DGQUIT,DGZ)=0 F  S DGZ=$O(DGZ(DGZ)) Q:'DGZ  D  Q:DGQUIT
 .. N DGX,DA,DIE,DR,X
 .. S DGX=$G(^DPT(DFN,.3215,DGZ,0))
 .. W !!,"OEF/OIF CONFLICT: ",$$EXTERNAL^DILFD(2.3215,.01,"",$P(DGX,U)),"  FROM: "_$$EXTERNAL^DILFD(2.3215,.02,"",$P(DGX,U,2)),"  TO: "_$$EXTERNAL^DILFD(2.3215,.03,"",$P(DGX,U,3))
 .. S DA=DGZ,DA(1)=DFN,DIE="^DPT("_DA(1)_",.3215,",DR=".01;.02R;.03R" D ^DIE I $D(Y) S DGQUIT=1
 Q
 ;
SVCCOMP(X) ; Returns display text for service component
 Q $S(X="R":"REGULAR",X="V":"RESERVE",X="G":"GUARD",1:"")
 ;
VIET ;;.32101//NO;S:X'="Y" Y="@64";.32104;.32105;@64;
LEB ;;.3221//NO;S:X'="Y" Y="@67";.3222;Q;.3223;@67;
GREN ;;.3224//NO;S:X'="Y" Y="@68";.3225;Q;.3226;@68;
PAN ;;.3227//NO;S:X'="Y" Y="@69";.3228;Q;.3229;@69;
GULF ;;.32201//NO;S:X'="Y" Y="@610";.322011;Q;.322012;@610;
SOM ;;.322016//NO;S:X'="Y" Y="@611";.322017;Q;.322018;@611;
YUG ;;.322019//NO;S:X'="Y" Y="@615";.32202;Q;.322021;@615;
OEF ;;
OIF ;;
UNK ;;
 ;;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGRP6CL   10438     printed  Sep 23, 2025@20:31:36                                                                                                                                                                                                    Page 2
DGRP6CL   ;ALB/TMK,LBD,ARF - REGISTRATION SCREEN 6 FIELDS Conflict locations ; 6/23/09 4:08pm
 +1       ;;5.3;Registration;**689,751,764,797,1014**;Aug 13, 1993;Build 42
 +2       ;
CLLST(DFN,DGCONF,DGPOSS,DGMSE) ;
 +1       ; For patient DFN:
 +2       ; Returns DGCONF array: DGCONF(conf loc)= Start dt^End dt
 +3       ;  or, for multiple OEF/OIF/ UNKNOWN OEF/OIF: DGCONF(conf loc-ien) =
 +4       ;                    Start dt ^ End dt ^ Site source ^ Lock flag
 +5       ;    DGCONF(conflict loc,1)=1 if dts inconsistent w/mse dts
 +6       ; DGPOSS = array of possible conflict locations, based on service
 +7       ;          episode dts DGPOSS(conf loc)=""
 +8       ; DGMSE = array of military svc episodes
 +9       ;          DGMSE(1-n)=fr dt^to dt^branch ien^comp code
 +10      ;
 +11       NEW DGZ,DGZ0,DIQUIET,FRTO
 +12       SET DIQUIET=1
           KILL DGCONF,DGPOSS
 +13      ; Get Military Service Episodes and store in DGMSE array (DG*5.3*797)
 +14       DO GETMSE
 +15      ;
 +16      ; Must chk all possible/on-file conf locs for valid mil svc pd
 +17      ; Extract OEF/OIF data
 +18       FOR DGZ="OEF","OIF","UNK"
               SET DGCONF(DGZ)=""
 +19       DO GET^DGENOEIF(DFN,.DGZ,0,"","")
 +20       SET DGZ0=0
           FOR 
               SET DGZ0=$ORDER(DGZ("IEN",DGZ0))
               if 'DGZ0
                   QUIT 
               SET DGZ=$GET(DGZ("IEN",DGZ0))
               Begin DoDot:1
 +21               NEW DGCONFX
 +22               if '$GET(DGZ("FR",DGZ0))&'$GET(DGZ("TO",DGZ0))
                       QUIT 
 +23               SET DGCONFX=$PIECE("OIF^OEF^UNK",U,+$GET(DGZ("LOC",DGZ0)))_"-"_DGZ
                   SET DGCONF=DGCONFX
                   SET DGCONF($PIECE(DGCONFX,"-"))=$GET(DGCONF($PIECE(DGCONFX,"-")))_DGZ_";"
 +24               FOR FRTO=1,0
                       SET $PIECE(DGCONF(DGCONFX),U,$SELECT(FRTO:1,1:2))=$$GETDT^DGRPMS(DFN,DGCONFX,FRTO)
                       IF FRTO=0
                           DO CKDT^DGRP6CL1(.DGCONF,.DGMSE,.DGPOSS)
 +25               SET $PIECE(DGCONF(DGCONFX),U,3)=$GET(DGZ("SITE",DGZ0))
 +26               SET $PIECE(DGCONF(DGCONFX),U,4)=$GET(DGZ("LOCK",DGZ0))
               End DoDot:1
 +27       FOR DGCONF="OEF","OIF","UNK"
               DO CKDT^DGRP6CL1(.DGCONF,.DGMSE,.DGPOSS)
 +28       FOR DGCONF="VIET","LEB","GREN","PAN","GULF","SOM","YUG"
               FOR FRTO=1,0
                   SET $PIECE(DGCONF(DGCONF),U,$SELECT(FRTO:1,1:2))=$$GETDT^DGRPMS(DFN,DGCONF,FRTO)
                   IF FRTO=0
                       DO CKDT^DGRP6CL1(.DGCONF,.DGMSE,.DGPOSS)
 +29       QUIT 
 +30      ;
GETMSE    ;Get Military Service Data and store in DGMSE array (DG*5.3*797)
 +1       ;DGMSE(1-3)=fr dt^to dt^branch ien^comp code
 +2       ;Get MSE data from MSE sub-file #2.3216, if it's populated
 +3        NEW MSE,DGZ,DGZ0,DGZ1,DG32,DG3291
 +4        IF $DATA(^DPT(DFN,.3216))
               Begin DoDot:1
 +5                DO GETMSE^DGMSEUTL(DFN,.MSE)
 +6                SET (MSE,DGZ)=0
 +7                FOR 
                       SET MSE=$ORDER(MSE(MSE))
                       if 'MSE
                           QUIT 
                       SET DGZ=DGZ+1
                       SET DGMSE(DGZ)=$PIECE(MSE(MSE),U,1,4)
               End DoDot:1
               QUIT 
 +8       ;Else get MSE data from .32 and .3291 nodes of Patient file #2
 +9        SET DG32=$GET(^DPT(DFN,.32))
           SET DG3291=$GET(^(.3291))
 +10       SET DGZ1=0
 +11       FOR DGZ=1:1:3
               SET DGZ0=$SELECT(DGZ=1:"5^5^6^7",DGZ=2:"19^10^11^12",1:"20^15^16^17")
               Begin DoDot:1
 +12               if $SELECT($PIECE(DG32,U,+DGZ0)="Y"
                       QUIT 
 +13               SET DGZ1=DGZ1+1
                   SET DGMSE(DGZ1)=$PIECE(DG32,U,$PIECE(DGZ0,U,3))_U_$PIECE(DG32,U,$PIECE(DGZ0,U,4))_U_$PIECE(DG32,U,$PIECE(DGZ0,U,2))_U_$PIECE(DG3291,U,DGZ)
               End DoDot:1
 +14       QUIT 
 +15      ;
YN(DGRPX,X) ;Format Yes/No fld in $P(DGRPX,U,X)
 +1        QUIT $SELECT($PIECE(DGRPX,"^",X)="Y":"YES",$PIECE(DGRPX,"^",X)="N":"NO ",$PIECE(DGRPX,"^",X)="U":"UNK",1:"   ")
 +2       ;
DAT(DGRPX,X,Z1) ; Format dt in $P(DGRPX,U,X) for a length of Z1
 +1        NEW Z
 +2        SET Z=$PIECE(DGRPX,U,X)
 +3        IF Z'=""
               SET Z=$$FMTE^XLFDT(Z,"5DZ")
 +4        if $LENGTH(Z)<Z1
               SET Z=$EXTRACT(Z_$JUSTIFY("",Z1),1,Z1)
 +5        QUIT Z
 +6       ;
EN(DFN,QUIT) ; Entry from reg screen 6
 +1        NEW DIPA,DGCONF,DGCONFS,DGCONF1,DGMSE,DGMSG,DGPOSS,DIR,DIE,DR,DA
 +2       ;
 +3       ; Return QUIT=1 if ^ entered
EN1       ; Entry from conf subscreen off reg screen 6
 +1       ; Routine loops until exit/quit from subscreen
 +2        DO CLEAR^VALM1
 +3        KILL DGCONF,DGCONFS,DGPOSS,DGMSE,DGMSG,DGDISP
 +4        NEW DIR,DTOUT,DUOUT,Z,Z0,Z1,Z2,X,Y,LOOP,DG,DGM,DGZ,DGEG,DGEGS,DGX,DGX1,DG321,DG322,DGCT,DGY,DGY1,DGCTX,SSN
 +5        DO CLLST(DFN,.DGCONF,.DGPOSS,.DGMSE)
 +6        IF $GET(DGRPV)
               SET $EXTRACT(DGRPVV(6),2,3)="00"
               SET DGRPVV(6,"NOEDIT")=1
 +7        IF '$GET(DGRPV)
               IF $EXTRACT(DGRPVV(6),2,3)="11"
                   SET $EXTRACT(DGRPVV(6),2,3)="00"
                   SET DGRPVV(6,"NOEDIT")=1
 +8        SET DGMSG=0
           SET DGCTX=0
 +9       ; Sort OEF/OIF/ UNKNOWN OEF/OIF
           FOR Z="OEF","OIF","UNK"
               Begin DoDot:1
 +10      ; by reverse from dt within each conf
 +11               SET Z0=Z
                   FOR 
                       SET Z0=$ORDER(DGCONF(Z0))
                       if Z0=""!(Z0'[Z)
                           QUIT 
                       SET Z2=Z_"-"_(9999999-DGCONF(Z0))
                       SET DGCONFS(Z2)=$PIECE(Z0,"-",2)
                       IF 'DGMSG
                           IF $GET(DGCONF(Z0,1))
                               SET DGMSG=1
               End DoDot:1
 +12       SET DG321=$GET(^DPT(DFN,.321))
           SET DG322=$GET(^(.322))
 +13      ;
 +14       SET DIR(0)="SA^"
           SET DGCT=0
 +15      ;ARF-DG*5.3*1014 - begin - add standardize patient data to the screen banner
           NEW DGSSNSTR,DGPTYPE,DGSSN,DGDOB
 +16       SET DGSSNSTR=$$SSNNM^DGRPU(DFN)
 +17       SET DGSSN=$PIECE($PIECE(DGSSNSTR,";",2)," ",3)
 +18       SET DGDOB=$$GET1^DIQ(2,DFN,.03,"I")
 +19       SET DGDOB=$$UP^XLFSTR($$FMTE^XLFDT($EXTRACT(DGDOB,1,12),1))
 +20       SET DGPTYPE=$$GET1^DIQ(391,$$GET1^DIQ(2,DFN_",",391,"I")_",",.01)
 +21       if DGPTYPE=""
               SET DGPTYPE="PATIENT TYPE UNKNOWN"
 +22       SET DGCT=DGCT+1
           SET DIR("A",DGCT)=$PIECE(DGSSNSTR,";",1)_$SELECT($$GET1^DIQ(2,DFN,.2405)'="":" ("_$$GET1^DIQ(2,DFN,.2405)_")",1:"")_"    "_DGDOB
 +23       SET DGCT=DGCT+1
           SET DIR("A",DGCT)=$SELECT($PIECE($PIECE(DGSSNSTR,";",2)," ",2)'="":$EXTRACT($PIECE($PIECE(DGSSNSTR,";",2)," ",2),1,40)_"    ",1:"")_DGSSN_"    "_DGPTYPE
 +24      ;S X=$S($D(^DPT(+DFN,0)):^(0),1:""),SSN=$P(X,"^",9),SSN=$E(SSN,1,3)_"-"_$E(SSN,4,5)_"-"_$E(SSN,6,10)
 +25      ;S DGCT=DGCT+1,DIR("A",DGCT)=$$SSNNM^DGRPU(DFN) ;ARF-DG*5.3*1014 - end
 +26       SET DGCT=DGCT+1
           SET DIR("A",DGCT)=""
           SET $PIECE(DIR("A",DGCT),"=",81)=""
 +27       SET DGCT=DGCT+1
           SET DIR("A",DGCT)=$SELECT($ORDER(DGMSE(0)):"MILITARY SERVICE PERIODS:",1:"NO SERVICE PERIODS FOR THIS PATIENT - NO CONFLICT LOC CAN BE ENTERED")
 +28       SET Z=0
           FOR 
               SET Z=$ORDER(DGMSE(Z))
               if 'Z!(Z>4)
                   QUIT 
               Begin DoDot:1
 +29               IF Z=4
                       SET DGCT=DGCT+1
                       SET DIR("A",DGCT)=$JUSTIFY("",3)_"<more episodes>"
                       QUIT 
 +30               SET DGCT=DGCT+1
                   SET DIR("A",DGCT)=$JUSTIFY("",3)_$EXTRACT($$EXTERNAL^DILFD(2,.325,"",$PIECE(DGMSE(Z),U,3))_$SELECT($PIECE(DGMSE(Z),U,4)'="":"/"_$$SVCCOMP($PIECE(DGMSE(Z),U,4)),1:"")_$JUSTIFY("",30),1,30)
 +31               SET DIR("A",DGCT)=DIR("A",DGCT)_"  ("_$SELECT($PIECE(DGMSE(Z),U):$$FMTE^XLFDT($PIECE(DGMSE(Z),U),"5DZ"),1:"missing")_"-"_$SELECT($PIECE(DGMSE(Z),U,2):$$FMTE^XLFDT($PIECE(DGMSE(Z),U,2),"5DZ"),1:"missing")_")"
               End DoDot:1
 +32       SET DGCT=DGCT+1
           SET DIR("A",DGCT)=" "
 +33       SET DGCT=DGCT+1
           SET DIR("A",DGCT)=$JUSTIFY("",24)_"---- CONFLICT LOCATIONS ----"
 +34       SET DGCT=DGCT+1
           SET DIR("A",DGCT)=$JUSTIFY("",34)_"FROM"_$JUSTIFY("",9)_"TO"_$JUSTIFY("",7)_"SOURCE (FOR OEF/OIF)"
 +35      ; DGCONF(DGCONF,"OK")=# entries for OEF/OIF/ UNKNOWN OEF/OIF
 +36      ;                     that are site-entered
 +37      ; DGCONF(DGCONF,"OK",entry ien)=display #^formatted from dt^
 +38      ;       formatted to dt^inconsistent flag (valid entries for editing)
 +39       SET DGEG=0
 +40       FOR DGEGS=2,1,3
               Begin DoDot:1
 +41               SET DGCONF=$PIECE("OIF^OEF^UNK",U,DGEGS)
                   SET DGM=0
 +42               SET DG=$$ISVALID^DGRP6CL2(.DGCONF,.DGPOSS)
 +43               SET DGEG=DGEG+1
 +44               SET DGDISP=$SELECT(DGCONF'="UNK":$JUSTIFY("",8),1:"OEF/OIF ")_DGCONF_": "
 +45               SET DGCT=DGCT+1
                   SET DGCTX=DGCT
                   SET DIR("A",DGCT)="   "_$EXTRACT(DG,1)_DGEG_$EXTRACT(DG,2)_"  -"_DGDISP_$$YN($SELECT(DGCONF(DGCONF):"Y",'$DATA(^DPT(DFN,.3215,0)):"",1:"N"),1)
 +46               IF $GET(DGCONF(DGCONF))!$DATA(DGPOSS(DGCONF))
                       IF '$GET(DGRPV)
                           IF $GET(DGCONF(DGCONF,"VEDIT"))'=2
                               IF '$GET(DGCONF(DGCONF,"NOEDIT"))
                                   if DGCONF'="UNK"
                                       SET DIR(0)=DIR(0)_DGEG_":"_DGCONF_";"
 +47               SET (DGZ,DGCONFS)=DGCONF
                   FOR 
                       SET DGCONFS=$ORDER(DGCONFS(DGCONFS))
                       if DGCONFS=""!(DGCONFS'[DGZ)
                           QUIT 
                       Begin DoDot:2
 +48                       NEW DGUN,DGIEN,STA
 +49                       SET DGIEN=DGCONFS(DGCONFS)
                           SET DGCONF=DGZ_"-"_DGIEN
                           SET DGCONF1=DGZ
                           SET DGM=DGM+1
 +50                       IF $GET(DGCONF(DGCONF,1))
                               IF DGCTX
                                   SET $EXTRACT(DIR("A",DGCTX),1,3)="***"
 +51                       SET DG=$$ISVALID^DGRP6CL2(.DGCONF,.DGPOSS)
 +52                       SET DGUN=$SELECT($GET(DGCONF(DGCONF,"NOEDIT")):1,1:0)
 +53                       IF 'DGUN
                               SET DGCONF(DGCONF1,"OK")=$GET(DGCONF(DGCONF1,"OK"))+1
                               SET DGCONF(DGCONF1,"OK",DGIEN)=DGM_U_$$FMTE^XLFDT($PIECE(DGCONF(DGCONF),U),"5DZ")_U_$$FMTE^XLFDT($PIECE(DGCONF(DGCONF),U,2),"5DZ")
 +54                       IF DGM>1
                               SET DGCT=DGCT+1
 +55                       SET DIR("A",DGCT)=$SELECT(DGM>1:$JUSTIFY("",27-$LENGTH(DGM)),1:DIR("A",DGCT)_" ")_"("_DGM_")  "_$EXTRACT($$DAT(DGCONF(DGCONF),1,13)_$JUSTIFY("",12),1,12)_$EXTRACT($$DAT(DGCONF(DGCONF),2,11)_$JUSTIFY("",10),1,10)_"   "
 +56                       SET STA=$PIECE(DGCONF(DGCONF),U,3)
 +57                       if STA
                               SET STA=$PIECE($GET(^DIC(4,+STA,99)),U)
 +58                       SET DIR("A",DGCT)=DIR("A",DGCT)_$SELECT($PIECE(DGCONF(DGCONF),U,3)="CEV":"",1:"Station #")_$EXTRACT(STA_$JUSTIFY("",$SELECT('DGUN:6,1:3)),1,$SELECT('DGUN:6,1:3))
 +59                       IF DGUN
                               SET DIR("A",DGCT)=DIR("A",DGCT)_" (No Edit)"
                       End DoDot:2
               End DoDot:1
 +60       DO LOOPCNF^DGRP6CL1(.DGCONF,.DGPOSS,.DIR)
 +61       SET DGCT=DGCT+1
           SET DIR("A",DGCT)=" "
 +62       IF $GET(DGMSG)
               SET DGCT=DGCT+1
               SET DIR("A",DGCT)="*** ==>OEF/OIF Dates are inconsistent with veteran's military service episodes"
 +63       SET DIR("A")="SELECT THE NUMBER OF A CONFLICT LOCATION OR (Q)UIT: "
 +64       SET DIR(0)=DIR(0)_"Q:QUIT"
 +65       SET DIR("?")="^D HELP^DGRP6CL1($P(DIR(0),U,2))"
 +66       SET DIR("B")="QUIT"
 +67       DO ^DIR
           KILL DIR
 +68       IF $DATA(DUOUT)!$DATA(DTOUT)!(Y="Q")
               if Y'="Q"
                   SET QUIT=1
               GOTO QUIT
 +69       SET DGY=Y
           SET DGY1=$SELECT(Y=2:1,Y=1:2,1:Y)
 +70       IF DGY<4
               SET DGCONF=""
 +71       IF DGY'<4
               Begin DoDot:1
 +72               SET DGCONF=$PIECE("OEF^OIF^UNK^VIET^LEB^GREN^PAN^GULF^SOM^YUG",U,DGY)
 +73               IF $GET(DGCONF(DGCONF,1))
                       WRITE !!,"WARNING - THIS CONFLICT IS INCONSISTENT WITH MILITARY SERVICE DATA",!
 +74               SET DIE=2
                   SET DA=DFN
                   SET DR=$PIECE($TEXT(@DGCONF),";;",2)
                   if DR'=""
                       DO ^DIE
                   KILL DIE,DA,DR
               End DoDot:1
 +75       IF DGY=1!(DGY=2)
               Begin DoDot:1
 +76               SET DGCONF=$PIECE("OEF^OIF",U,DGY)
 +77      ; Add new only valid action
                   IF '$GET(DGCONF(DGCONF,"OK"))
                       IF $GET(DGCONF(DGCONF,"VEDIT"))'=2
                           DO ADDCFL^DGRP6CL1(DFN,DGY1,DGCONF)
                           QUIT 
 +78               IF $GET(DGCONF(DGCONF,"VEDIT"))=1
                       SET DIR("A")="DO YOU WANT TO (A)DD OR (E)DIT "_DGCONF_" CONFLICT DATA?: "
                       SET DIR(0)="SA^A:ADD;E:EDIT"
                       SET DIR("B")="ADD"
                       DO ^DIR
                       KILL DIR
 +79               IF $GET(DGCONF(DGCONF,"VEDIT"))=2
                       IF $GET(DGCONF(DGCONF,"OK"))
                           SET DIR("A")="DO YOU WANT TO EDIT "_DGCONF_" CONFLICT DATA?: "
                           SET DIR(0)="YA"
                           SET DIR("B")="YES"
                           DO ^DIR
                           KILL DIR
                           SET Y=$SELECT(Y=1:"E",1:Y)
 +80               if $DATA(DTOUT)!$DATA(DUOUT)
                       QUIT 
 +81               IF Y="A"
                       DO ADDCFL^DGRP6CL1(DFN,DGY1,DGCONF)
                       QUIT 
 +82               IF Y="E"
                       Begin DoDot:2
 +83                       NEW DGXREF,IEN,DIR,X,Y
 +84                       IF DGCONF(DGCONF,"OK")=1
                               SET IEN=+$ORDER(DGCONF(DGCONF,"OK",0))
                               IF IEN
                                   DO EDCFL^DGRP6CL1(DFN,IEN,$GET(DGCONF(DGCONF,"VEDIT")))
                                   QUIT 
 +85                       SET DIR(0)="SA^"
                           SET DIR("A")="SELECT THE # OF THE "_DGCONF_" CONFLICT PERIOD TO EDIT: "
                           SET DIR("A",1)=" "
 +86                       SET Z=0
                           FOR 
                               SET Z=$ORDER(DGCONF(DGCONF,"OK",Z))
                               if 'Z
                                   QUIT 
                               SET Z0=DGCONF(DGCONF,"OK",Z)
                               SET DIR(0)=DIR(0)_+Z0_":"_$PIECE(Z0,U,2)_$SELECT($PIECE(Z0,U,3)'="":"-"_$PIECE(Z0,U,3),1:"")_";"
                               SET DGXREF(+Z0)=Z
 +87                       SET DIR(0)=DIR(0)_"Q:QUIT"
 +88                       DO ^DIR
                           KILL DIR
 +89                       IF Y
                               DO EDCFL^DGRP6CL1(DFN,+$GET(DGXREF(+Y)),$GET(DGCONF(DGCONF,"VEDIT")))
                       End DoDot:2
               End DoDot:1
 +90       GOTO EN1
 +91      ;
QUIT       QUIT 
 +1       ;
EN2       ; Consistency checker re-edit entrypoint for OEF/OIF data
 +1        NEW DGOEIF,DGZ,DGQUIT,Z,Z0,Y
 +2        DO GET^DGENOEIF(DFN,.DGOEIF,2,"",1)
 +3        IF $GET(DGOEIF("COUNT"))&($ORDER(DGOEIF("OIF",0))!$ORDER(DGOEIF("OEF",0)))
               Begin DoDot:1
 +4                FOR Z="OEF","OIF"
                       SET Z0=0
                       FOR 
                           SET Z0=$ORDER(DGOEIF(Z,Z0))
                           if 'Z0
                               QUIT 
                           IF $GET(DGOEIF(Z,Z0,"IEN"))
                               SET DGZ(DGOEIF(Z,Z0,"IEN"))=""
 +5                SET (DGQUIT,DGZ)=0
                   FOR 
                       SET DGZ=$ORDER(DGZ(DGZ))
                       if 'DGZ
                           QUIT 
                       Begin DoDot:2
 +6                        NEW DGX,DA,DIE,DR,X
 +7                        SET DGX=$GET(^DPT(DFN,.3215,DGZ,0))
 +8                        WRITE !!,"OEF/OIF CONFLICT: ",$$EXTERNAL^DILFD(2.3215,.01,"",$PIECE(DGX,U)),"  FROM: "_$$EXTERNAL^DILFD(2.3215,.02,"",$PIECE(DGX,U,2)),"  TO: "_$$EXTERNAL^DILFD(2.3215,.03,"",$PIECE(DGX,U,3))
 +9                        SET DA=DGZ
                           SET DA(1)=DFN
                           SET DIE="^DPT("_DA(1)_",.3215,"
                           SET DR=".01;.02R;.03R"
                           DO ^DIE
                           IF $DATA(Y)
                               SET DGQUIT=1
                       End DoDot:2
                       if DGQUIT
                           QUIT 
               End DoDot:1
 +10       QUIT 
 +11      ;
SVCCOMP(X) ; Returns display text for service component
 +1        QUIT $SELECT(X="R":"REGULAR",X="V":"RESERVE",X="G":"GUARD",1:"")
 +2       ;
VIET      ;;.32101//NO;S:X'="Y" Y="@64";.32104;.32105;@64;
LEB       ;;.3221//NO;S:X'="Y" Y="@67";.3222;Q;.3223;@67;
GREN      ;;.3224//NO;S:X'="Y" Y="@68";.3225;Q;.3226;@68;
PAN       ;;.3227//NO;S:X'="Y" Y="@69";.3228;Q;.3229;@69;
GULF      ;;.32201//NO;S:X'="Y" Y="@610";.322011;Q;.322012;@610;
SOM       ;;.322016//NO;S:X'="Y" Y="@611";.322017;Q;.322018;@611;
YUG       ;;.322019//NO;S:X'="Y" Y="@615";.32202;Q;.322021;@615;
OEF       ;;
OIF       ;;
UNK       ;;
 +1       ;;