IBCU75 ;ALB/JRA - INTERCEPT SCREEN INPUT OF PROCEDURE CODES (ENTER CMN INFO) ;23-Apr-18
 ;;2.0;INTEGRATED BILLING;**608**;21-MAR-94;Build 90
 ;;Per VA Directive 6402, this routine should not be modified.
 ;
 Q
 ;
CMN(IBXIEN,IBPROCP) ;JRA;IB*2.0*608 Prompt user for CMN info
 ;Input: IBXIEN  = Internal bill/claim number
 ;       IBPROCP = Procedure line subscript in ^DGCR
 ;
 Q:('$G(IBXIEN)!('$G(IBPROCP)))
 N ABGMSG,ABGPO2,CERTDT,CERTYP,CHNGFRM,CMNNODE,CMNREQ,CMSG,DA,DIC,DIE,DIR,DGLB,DR,DRTAG,DTOLD,EDIT,EVNTDT,FIEN,FNAM,FORM,FRMTAG
 N FRMTYP,HT,HTOLD,I,IBPEB,WTOLD,LKGLB,LPM4ABG,LPM4SAT,MSG,NODE0,O2SAT,OK,OLDVAL,PROCA,PROCB,QUIT,RRDT,TDY,THERPYDT,X,Y
 S DGLB="^TMP(""CMN"",$J)" K @DGLB
 S LKGLB="^DGCR(399,"_IBXIEN_")" L +@LKGLB:0 I '$T W !,$C(7),"Another user is editing this entry -- EXITING" H 2 Q
 S EVNTDT=$$FMTE^DILIBF($G(IBDT),"5U")  ;Get the Event Date - will be the default for several date fields.
 S TDY=$$HTFM^DILIBF(+$H)
 S ABGMSG="""ABG PO2"" and/or ""O2 Saturation"" Test(s) REQUIRED"
 S DA=IBPROCP,DA(1)=IBXIEN,DIE="^DGCR(399,"_IBXIEN_",""CP"","
 ;Set FORM array of CMN Data Nodes (D399.6 field 3) indexed by CMN Form Type ien
 S FNAM="" F  S FNAM=$O(^IBE(399.6,"B",FNAM)) Q:FNAM=""  S FIEN=+$O(^IBE(399.6,"B",FNAM,"")) I FIEN D
 . S FORM(FIEN)=$P($G(^IBE(399.6,FIEN,0)),U,4) K:$TR(FORM(FIEN)," ")="" FORM(FIEN)
 I $D(FORM)'>1 S FORM(1)="CMN-484",FORM(2)="CMN-10126"  ;Default nodes for CMN data
 S DIE("NO^")="BACKOUTOK"
 S CMNREQ("MSG")="If ""CMN Required?"" is changed to ""NO"", existing CMN data will be deleted!"
 S FRMTYP("MSG")="Changing the Form Type will delete any data specific to the current Form Type!"
 S CERTYP("MSG")="You are changing the Certification Type!"
 S CERTYP("MSGI")="Changing Certification Type to ""I"" will delete ""Recertification/Revision Date!"""
 D CMNREQ
 S QUIT=0 F  D  Q:QUIT
 . D ^DIE
 . S CMNREQ=$G(CMNREQ),FRMTYP=$G(FRMTYP),CERTYP=$G(CERTYP)
 . S CMNREQ=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,23,"I") I CMNREQ=0 S QUIT=1 Q
 . S FRMTYP=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24,"I")
 . S CERTYP=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.01,"I")
 . I FRMTYP,CERTYP'="" S QUIT=1 Q
 . I CMNREQ="" W $C(7),!,?3,"""CMN Required?"" is a REQUIRED field!" D CMNREQ Q
 . S MSG=""
 . I FRMTYP="" S MSG="""Form Type"" and ""Certification Type"" are REQUIRED!",DRTAG="CMNREQ"
 . E  I CERTYP="" S MSG="""Certification Type"" is REQUIRED!",DRTAG="CMNREQ"
 . I MSG]"" S DR="",MSG=MSG_$C(13,10)_"   ** To exit, set ""CMN Required?"" to ""NO""" W $C(7),!,?3,MSG D @DRTAG Q
 . S QUIT=1
 ;
 ;If CMN is not required, delete all CMN data that may be associated with this procedure & exit
 I $G(CMNREQ)=0 D  Q
 . S FIEN="" F  S FIEN=$O(FORM(FIEN)) Q:FIEN=""  I FORM(FIEN)]"" D
 . . S CMNNODE="^DGCR(399,"_IBXIEN_",""CP"","_IBPROCP_","""_FORM(FIEN)_""")" K @CMNNODE
 . S CMNNODE="^DGCR(399,"_IBXIEN_",""CP"","_IBPROCP_",""CMN"")" K @CMNNODE S @CMNNODE=0
 ;
 ;If user selected Form Type we need to remove data that may exist for any other Form Type.
 I $G(FRMTYP) S FIEN="" F  S FIEN=$O(FORM(FIEN)) Q:FIEN=""  I FIEN'=FRMTYP D
 . S CMNNODE="^DGCR(399,"_IBXIEN_",""CP"","_IBPROCP_","""_FORM(FIEN)_""")" K @CMNNODE
 ;
 I $G(CERTYP)="I" D SETFLD(24.07,"@")  ;If "Certification Type" is "INITIAL" delete "Recertification/Revision Date"
 ;
 I (($D(EDIT)&($G(EDIT)'="Y"))!(X=""!('$G(CMNREQ)!('$G(FRMTYP)!($G(CERTYP)=""))))) Q
 ;
 S FRMTAG="DR"_$S($G(FORM(FRMTYP))[484:484,1:10126)  ;Set tag to call to set DR with form-specific logic
 D DRCOMM
 ;
 ;Prompt user for remaining questions & check for missing required fields
 S (QUIT,UPCT)=0,DRTAG(1)="" F  D  Q:QUIT
 . D ^DIE
 . K MSG S MSG=0
 . S DRTAG=""
 . S CERTYP=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.01,"I")
 . S HT=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.02,"I")
 . S THERPYDT=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.05,"I")
 . S CERTDT=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.06,"I")
 . S RRDT=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.07,"I")
 . I 'CERTDT S MSG=MSG+1,MSG(MSG)="""Last Certification Date""" S DRTAG="DRCOMM"
 . I 'RRDT,CERTYP'="I" S MSG=MSG+1,MSG(MSG)="""Recertification/Revision Date""" S:DRTAG="" DRTAG="RRDT"
 . I 'THERPYDT S MSG=MSG+1,MSG(MSG)="""Date Therapy Started""" S:DRTAG="" DRTAG="STRTDT"
 . I FORM(FRMTYP)[10126 D
 . . I $$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.217,"I")="" S MSG=MSG+1,MSG(MSG)="""Is this for Parenteral nutrition, Enteral nutrition, or Both?""" S:DRTAG="" DRTAG="DR10126"
 . I +MSG D  Q
 . . S:X="" UPCT=UPCT+1 I UPCT>1,DRTAG=DRTAG(1) S QUIT=1 Q
 . . S DR="" W $C(7) F I=1:1:MSG W !,?3,MSG(I)_" is REQUIRED!"
 . . W !,?3,"** Exiting now will leave required fields unanswered."
 . . W !,?3,"** If you must exit, enter '^' again."
 . . S DRTAG(1)=DRTAG D @DRTAG
 . S QUIT=1
 ;
 ;Delete dates associated with result fields that were deleted
 I $D(@DGLB)>1 D
 . N FLD
 . S FLD="" F  S FLD=$O(@DGLB@(FLD)) Q:FLD=""  D SETFLD(FLD,"@")
 . K @DGLB
 Q
 ;
CMNREQ ; Set DR with logic for 1st 3 fields: "CMN Required?", "Form Type" and "Certification Type"
 S DR="@23;S CMNREQ(""OLD"")=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,23,""I"");23R~T//NO;S CMNREQ=X I 'X,'CMNREQ(""OLD"") S Y=""@999"";"
 S DR=DR_"I CMNREQ=0,CMNREQ(""OLD"")=1 S FRM=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24,""I"") S:'FRM OK=1 S:FRM OK=$$USEROK^IBCU75(23,1,CMNREQ(""MSG""))"
 S DR=DR_" S:OK Y=""@999"" I 'OK S Y=""@23"";"
FRMTYP ;Entry point to set DR with logic for "Form Type" and "Certification Type" fields in preparation for re-prompting.
 S DR=DR_"@24;S DIC(0)=""N"" S FRMTYP(""OLD"")=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24,""I"");24R~T;S FRMTYP=X I FRMTYP(""OLD"")]"""",FRMTYP]"""""
 S DR=DR_",FRMTYP'=FRMTYP(""OLD"") S OK=$$USEROK^IBCU75(24,FRMTYP(""OLD""),FRMTYP(""MSG"")) S:OK CHNGFRM=1 S:'OK Y=""@24"";"
 S DR=DR_"I $G(CHNGFRM)!($$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.01,""I"")="""") D COPYCMN^IBCU75(IBXIEN,IBPROCP,FRMTYP);"
 S DR=DR_"I $$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.01,""I"")]"""",'$G(CHNGFRM) R !,""Edit CMN Information for this Procedure? NO// "",EDIT S EDIT=$E($ZCONVERT(EDIT,""U"")) "
 S DR=DR_"W:(EDIT]""""&(EDIT'=""^"")) ""  ""_$S(EDIT=""Y"":""YES"",1:""NO"") I EDIT'=""Y"" S Y=""@999"";"
CERTYP ;Entry point to set DR with logic for "Certification Type" field in preparation for re-prompting.
 S DR=DR_"@01;S CERTYP(""OLD"")=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.01,""I"");24.01R~T//INITIAL"
 S DR=DR_";S CERTYP=X I CERTYP(""OLD"")]"""",CERTYP]"""",CERTYP'=CERTYP(""OLD"")"
 S DR=DR_" S CMSG=$S(CERTYP=""I"":CERTYP(""MSGI""),1:CERTYP(""MSG""))"
 S DR=DR_" S OK=$$USEROK^IBCU75(24.01,CERTYP(""OLD""),CMSG) S:'OK Y=""@01"";@999;"
 Q
 ;
DRCOMM ;Set DR with logic for the remaining fields common to all form types
 S DR="@06;S DTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.06,""I"");24.06R~T//"_EVNTDT_";D DTCHK^IBCU75(X,TDY,""06"",$G(DTOLD));"
 S DR=DR_"I CERTYP=""I"" S @DGLB@(24.07)="""",Y=""@02"";"
RRDT ;Entry point to set DR with logic for "Recertification/Revision Date"... fields in preparation for re-prompting.
 S DR=DR_"@07;S DTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.07,""I"");24.07R~T//"_EVNTDT_";D DTCHK^IBCU75(X,TDY,""07"",$G(DTOLD));"
 S DR=DR_"@02;S HTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.02,""I"");24.02T;I X>96 S OK=$$USEROK^IBCU75(24.02,HTOLD,""Patient is over 8 feet tall!"")"
 S DR=DR_" I 'OK S Y=""@02"";@03;S WTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.03,""I"");24.03T;I X>500 S OK=$$USEROK^IBCU75(24.03,WTOLD,"
 S DR=DR_"""Patient is over 500 pounds!"") I 'OK S Y=""@03"";24.04T;"
STRTDT ;Entry point to set DR with logic for "Date Therapy Started"... fields in preparation for re-prompting.
 S DR=DR_"@05;S DTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.05,""I"");24.05R~T//"_EVNTDT_";D DTCHK^IBCU75(X,TDY,""05"",$G(DTOLD));@08;24.08T//N;"
 D @FRMTAG
 Q
 ;
DR484 ;Set DR with logic specific for form CMN-484
 S DR=DR_"@100;24.1T;S ABGPO2=X;@102;24.102T;S O2SAT=X;I ABGPO2="""",O2SAT="""" S Y=""@104"";"
 S DR=DR_"@103;S DTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.103,""I"");24.103T;D DTCHK^IBCU75(X,TDY,103,$G(DTOLD));"
 S DR=DR_"@104;I (ABGPO2<56!(ABGPO2>59)),(O2SAT'=89) S @DGLB@(24.104)="""",@DGLB@(24.105)="""""
 S DR=DR_",@DGLB@(24.106)="""",Y=""@107"";24.104T//NO;24.105T//NO;24.106T//NO;@107;24.107T;24.108T;24.109T;24.11T;I X'>4 S @DGLB@(24.111)="""""
 S DR=DR_",@DGLB@(24.113)="""",@DGLB@(24.114)="""",Y=""@115"";24.111T;S ABG4LPM=X;"
 S DR=DR_"@113;24.113T;I 'ABG4LPM,'X S Y=""@115"",@DGLB@(24.114)="""";"
 S DR=DR_"@114;S DTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.114,""I"");24.114T;D DTCHK^IBCU75(X,TDY,114,$G(DTOLD));@115;24.115T;@999;"
 Q
 ;
DR10126 ;Set DR with logic specific to the CMN-10126
 S DR=DR_"@217;S IBPEB(""OLD"")=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.217,""I"");24.217R~T//P;S IBPEB=X I IBPEB(""OLD"")]"""",IBPEB]"""",IBPEB(""OLD"")'=IBPEB "
 S DR=DR_"S OK=$$USEROK^IBCU75(24.217,IBPEB(""OLD""),""You are changing the nutrition type!"") S:'OK Y=""@217"";I $G(IBPEB)=""P"" S Y=""@206"" "
 S DR=DR_"N I F I=24.201:.001:24.205,24.218,24.219 S @DGLB@(I)="""";24.201T;24.202T;"
 S DR=DR_"24.204T;I '+X S Y=""@205"",@DGLB@(24.203)="""" I $$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.219)]"""" S Y=""@219"";"
 S DR=DR_"24.203T;I '+X S Y=""@205"" I $$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.219)]"""" S Y=""@219"";"
 S DR=DR_"@219;24.219T;I '+X S Y=""@205"",@DGLB@(24.218)="""";"
 S DR=DR_"24.218T;@205;24.205T;@206;24.206T;I $G(IBPEB)=""E"" S Y=""@999"" "
 S DR=DR_"N I F I=24.207:.001:24.216 S @DGLB@(I)="""";"
 S DR=DR_"24.207T;24.208T;24.209T;24.21T;24.211T;24.212T;24.213T;24.215T;24.216T;@214;24.214T;@999;"
 Q
 ;
COPYCMN(IBXIEN,IBPROCP,FRMTYP) ;Copy CMN information from last procedure entered that has it to current procedure
 ;Input: IBXIEN  = Internal bill/claim number
 ;       IBPROCP = Procedure line subscript
 ;       FRMTYP  = CMN Form Type ien
 ;
 N DONE
 S DONE=0
 Q:('$G(IBXIEN)!('$G(IBPROCP)!('$G(FRMTYP))))
 N FRMND,FRMNDI,IBPROC,IBXSAVE,Z
 S FRMNDI=FORM(FRMTYP)
 D CMNDEX^IBCEF31(IBXIEN,.IBXSAVE)
 S Z="" F  S Z=$O(IBXSAVE("CMNDEX",Z),-1) Q:'Z  S IBPROC=+IBXSAVE("CMNDEX",Z) I IBPROCP,IBPROC'=IBPROCP D  Q:DONE
 . Q:('$D(^DGCR(399,IBXIEN,"CP",IBPROC,"CMN"))!('$D(^DGCR(399,IBXIEN,"CP",IBPROC,FRMNDI))))
 . S FRMND=$O(^DGCR(399,IBXIEN,"CP",IBPROC,"CMN")) Q:(FRMND=""!(FRMND'=FRMNDI))
 . S ^DGCR(399,IBXIEN,"CP",IBPROCP,"CMN")=^DGCR(399,IBXIEN,"CP",IBPROC,"CMN")
 . S ^DGCR(399,IBXIEN,"CP",IBPROCP,FRMND)=^DGCR(399,IBXIEN,"CP",IBPROC,FRMND)
 . S DONE=1
 Q 
 ;
USEROK(FLD,OLDVAL,MSG) ;JRA;IB*2.0*608 Prompt user if OK to change field value
 ;Input: FLD    =  Field for which we are asking the user to confirm the change
 ;       OLDVAL =  Value of the field before user changed
 ;       MSG    =  Warning message to display to user regarding the implications of the change
 ;
 Q:'$G(FLD) 0
 N DIC,DIR,X,Y
 S OLDVAL=$G(OLDVAL)
 W $C(7) I $TR($G(MSG)," ")]"" W !,MSG
 S DIR(0)="Y",DIR("A")="OK to continue",DIR("B")="NO" D ^DIR
 I Y'=1 D SETFLD(FLD,OLDVAL)  ;Set field back to old value if user doesn't want to continue
 I Y=1 S X="^"
 Q Y
 ;
SETFLD(FLD,VAL) ;JRA;IB*2.0*608 Set/Delete field data w/out user prompting
 ;Input: FLD = Field to set/delete
 ;       VAL = Value to set FLD to (Note: '@' will delete field value)
 ;
 Q:('$G(FLD)!($G(VAL)=""))
 N DIE,DI,DL,DP,DQ,DR,X,Y
 S DIE="^DGCR(399,"_IBXIEN_",""CP"","
 S DR=FLD_"////"_VAL
 D ^DIE
 Q
 ;
DTCHK(X,TDY,TAG,DTOLD) ;JRA;IB*2.0*608 Check if future date entered by user
 ;Input:  X     = User entry for date field (internal FileMan date format)
 ;        TDY   = Today's internal FileMan date
 ;        TAG   = Field tag to jump to if user enters a future date (usually re-prompt same date)
 ;        DTOLD = The value of the date field prior to user edit
 ;
 Q:('$G(X))!('$G(TAG))
 N FLD
 S:$G(DTOLD)="" DTOLD="@"
 S:'$G(TDY) TDY=$$HTFM^DILIBF(+$H) Q:X'>TDY
 ;User entered future date so display error and change date back to previous value.
 W $C(7),!,?3,"Future dates not allowed??"
 S Y="@"_TAG
 D SETFLD("24."_TAG,DTOLD)  ;set back to prior date
 Q
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCU75   12010     printed  Sep 23, 2025@19:57:07                                                                                                                                                                                                     Page 2
IBCU75    ;ALB/JRA - INTERCEPT SCREEN INPUT OF PROCEDURE CODES (ENTER CMN INFO) ;23-Apr-18
 +1       ;;2.0;INTEGRATED BILLING;**608**;21-MAR-94;Build 90
 +2       ;;Per VA Directive 6402, this routine should not be modified.
 +3       ;
 +4        QUIT 
 +5       ;
CMN(IBXIEN,IBPROCP) ;JRA;IB*2.0*608 Prompt user for CMN info
 +1       ;Input: IBXIEN  = Internal bill/claim number
 +2       ;       IBPROCP = Procedure line subscript in ^DGCR
 +3       ;
 +4        if ('$GET(IBXIEN)!('$GET(IBPROCP)))
               QUIT 
 +5        NEW ABGMSG,ABGPO2,CERTDT,CERTYP,CHNGFRM,CMNNODE,CMNREQ,CMSG,DA,DIC,DIE,DIR,DGLB,DR,DRTAG,DTOLD,EDIT,EVNTDT,FIEN,FNAM,FORM,FRMTAG
 +6        NEW FRMTYP,HT,HTOLD,I,IBPEB,WTOLD,LKGLB,LPM4ABG,LPM4SAT,MSG,NODE0,O2SAT,OK,OLDVAL,PROCA,PROCB,QUIT,RRDT,TDY,THERPYDT,X,Y
 +7        SET DGLB="^TMP(""CMN"",$J)"
           KILL @DGLB
 +8        SET LKGLB="^DGCR(399,"_IBXIEN_")"
           LOCK +@LKGLB:0
           IF '$TEST
               WRITE !,$CHAR(7),"Another user is editing this entry -- EXITING"
               HANG 2
               QUIT 
 +9       ;Get the Event Date - will be the default for several date fields.
           SET EVNTDT=$$FMTE^DILIBF($GET(IBDT),"5U")
 +10       SET TDY=$$HTFM^DILIBF(+$HOROLOG)
 +11       SET ABGMSG="""ABG PO2"" and/or ""O2 Saturation"" Test(s) REQUIRED"
 +12       SET DA=IBPROCP
           SET DA(1)=IBXIEN
           SET DIE="^DGCR(399,"_IBXIEN_",""CP"","
 +13      ;Set FORM array of CMN Data Nodes (D399.6 field 3) indexed by CMN Form Type ien
 +14       SET FNAM=""
           FOR 
               SET FNAM=$ORDER(^IBE(399.6,"B",FNAM))
               if FNAM=""
                   QUIT 
               SET FIEN=+$ORDER(^IBE(399.6,"B",FNAM,""))
               IF FIEN
                   Begin DoDot:1
 +15                   SET FORM(FIEN)=$PIECE($GET(^IBE(399.6,FIEN,0)),U,4)
                       if $TRANSLATE(FORM(FIEN)," ")=""
                           KILL FORM(FIEN)
                   End DoDot:1
 +16      ;Default nodes for CMN data
           IF $DATA(FORM)'>1
               SET FORM(1)="CMN-484"
               SET FORM(2)="CMN-10126"
 +17       SET DIE("NO^")="BACKOUTOK"
 +18       SET CMNREQ("MSG")="If ""CMN Required?"" is changed to ""NO"", existing CMN data will be deleted!"
 +19       SET FRMTYP("MSG")="Changing the Form Type will delete any data specific to the current Form Type!"
 +20       SET CERTYP("MSG")="You are changing the Certification Type!"
 +21       SET CERTYP("MSGI")="Changing Certification Type to ""I"" will delete ""Recertification/Revision Date!"""
 +22       DO CMNREQ
 +23       SET QUIT=0
           FOR 
               Begin DoDot:1
 +24               DO ^DIE
 +25               SET CMNREQ=$GET(CMNREQ)
                   SET FRMTYP=$GET(FRMTYP)
                   SET CERTYP=$GET(CERTYP)
 +26               SET CMNREQ=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,23,"I")
                   IF CMNREQ=0
                       SET QUIT=1
                       QUIT 
 +27               SET FRMTYP=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24,"I")
 +28               SET CERTYP=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.01,"I")
 +29               IF FRMTYP
                       IF CERTYP'=""
                           SET QUIT=1
                           QUIT 
 +30               IF CMNREQ=""
                       WRITE $CHAR(7),!,?3,"""CMN Required?"" is a REQUIRED field!"
                       DO CMNREQ
                       QUIT 
 +31               SET MSG=""
 +32               IF FRMTYP=""
                       SET MSG="""Form Type"" and ""Certification Type"" are REQUIRED!"
                       SET DRTAG="CMNREQ"
 +33              IF '$TEST
                       IF CERTYP=""
                           SET MSG="""Certification Type"" is REQUIRED!"
                           SET DRTAG="CMNREQ"
 +34               IF MSG]""
                       SET DR=""
                       SET MSG=MSG_$CHAR(13,10)_"   ** To exit, set ""CMN Required?"" to ""NO"""
                       WRITE $CHAR(7),!,?3,MSG
                       DO @DRTAG
                       QUIT 
 +35               SET QUIT=1
               End DoDot:1
               if QUIT
                   QUIT 
 +36      ;
 +37      ;If CMN is not required, delete all CMN data that may be associated with this procedure & exit
 +38       IF $GET(CMNREQ)=0
               Begin DoDot:1
 +39               SET FIEN=""
                   FOR 
                       SET FIEN=$ORDER(FORM(FIEN))
                       if FIEN=""
                           QUIT 
                       IF FORM(FIEN)]""
                           Begin DoDot:2
 +40                           SET CMNNODE="^DGCR(399,"_IBXIEN_",""CP"","_IBPROCP_","""_FORM(FIEN)_""")"
                               KILL @CMNNODE
                           End DoDot:2
 +41               SET CMNNODE="^DGCR(399,"_IBXIEN_",""CP"","_IBPROCP_",""CMN"")"
                   KILL @CMNNODE
                   SET @CMNNODE=0
               End DoDot:1
               QUIT 
 +42      ;
 +43      ;If user selected Form Type we need to remove data that may exist for any other Form Type.
 +44       IF $GET(FRMTYP)
               SET FIEN=""
               FOR 
                   SET FIEN=$ORDER(FORM(FIEN))
                   if FIEN=""
                       QUIT 
                   IF FIEN'=FRMTYP
                       Begin DoDot:1
 +45                       SET CMNNODE="^DGCR(399,"_IBXIEN_",""CP"","_IBPROCP_","""_FORM(FIEN)_""")"
                           KILL @CMNNODE
                       End DoDot:1
 +46      ;
 +47      ;If "Certification Type" is "INITIAL" delete "Recertification/Revision Date"
           IF $GET(CERTYP)="I"
               DO SETFLD(24.07,"@")
 +48      ;
 +49       IF (($DATA(EDIT)&($GET(EDIT)'="Y"))!(X=""!('$GET(CMNREQ)!('$GET(FRMTYP)!($GET(CERTYP)="")))))
               QUIT 
 +50      ;
 +51      ;Set tag to call to set DR with form-specific logic
           SET FRMTAG="DR"_$SELECT($GET(FORM(FRMTYP))[484:484,1:10126)
 +52       DO DRCOMM
 +53      ;
 +54      ;Prompt user for remaining questions & check for missing required fields
 +55       SET (QUIT,UPCT)=0
           SET DRTAG(1)=""
           FOR 
               Begin DoDot:1
 +56               DO ^DIE
 +57               KILL MSG
                   SET MSG=0
 +58               SET DRTAG=""
 +59               SET CERTYP=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.01,"I")
 +60               SET HT=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.02,"I")
 +61               SET THERPYDT=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.05,"I")
 +62               SET CERTDT=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.06,"I")
 +63               SET RRDT=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.07,"I")
 +64               IF 'CERTDT
                       SET MSG=MSG+1
                       SET MSG(MSG)="""Last Certification Date"""
                       SET DRTAG="DRCOMM"
 +65               IF 'RRDT
                       IF CERTYP'="I"
                           SET MSG=MSG+1
                           SET MSG(MSG)="""Recertification/Revision Date"""
                           if DRTAG=""
                               SET DRTAG="RRDT"
 +66               IF 'THERPYDT
                       SET MSG=MSG+1
                       SET MSG(MSG)="""Date Therapy Started"""
                       if DRTAG=""
                           SET DRTAG="STRTDT"
 +67               IF FORM(FRMTYP)[10126
                       Begin DoDot:2
 +68                       IF $$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.217,"I")=""
                               SET MSG=MSG+1
                               SET MSG(MSG)="""Is this for Parenteral nutrition, Enteral nutrition, or Both?"""
                               if DRTAG=""
                                   SET DRTAG="DR10126"
                       End DoDot:2
 +69               IF +MSG
                       Begin DoDot:2
 +70                       if X=""
                               SET UPCT=UPCT+1
                           IF UPCT>1
                               IF DRTAG=DRTAG(1)
                                   SET QUIT=1
                                   QUIT 
 +71                       SET DR=""
                           WRITE $CHAR(7)
                           FOR I=1:1:MSG
                               WRITE !,?3,MSG(I)_" is REQUIRED!"
 +72                       WRITE !,?3,"** Exiting now will leave required fields unanswered."
 +73                       WRITE !,?3,"** If you must exit, enter '^' again."
 +74                       SET DRTAG(1)=DRTAG
                           DO @DRTAG
                       End DoDot:2
                       QUIT 
 +75               SET QUIT=1
               End DoDot:1
               if QUIT
                   QUIT 
 +76      ;
 +77      ;Delete dates associated with result fields that were deleted
 +78       IF $DATA(@DGLB)>1
               Begin DoDot:1
 +79               NEW FLD
 +80               SET FLD=""
                   FOR 
                       SET FLD=$ORDER(@DGLB@(FLD))
                       if FLD=""
                           QUIT 
                       DO SETFLD(FLD,"@")
 +81               KILL @DGLB
               End DoDot:1
 +82       QUIT 
 +83      ;
CMNREQ    ; Set DR with logic for 1st 3 fields: "CMN Required?", "Form Type" and "Certification Type"
 +1        SET DR="@23;S CMNREQ(""OLD"")=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,23,""I"");23R~T//NO;S CMNREQ=X I 'X,'CMNREQ(""OLD"") S Y=""@999"";"
 +2        SET DR=DR_"I CMNREQ=0,CMNREQ(""OLD"")=1 S FRM=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24,""I"") S:'FRM OK=1 S:FRM OK=$$USEROK^IBCU75(23,1,CMNREQ(""MSG""))"
 +3        SET DR=DR_" S:OK Y=""@999"" I 'OK S Y=""@23"";"
FRMTYP    ;Entry point to set DR with logic for "Form Type" and "Certification Type" fields in preparation for re-prompting.
 +1        SET DR=DR_"@24;S DIC(0)=""N"" S FRMTYP(""OLD"")=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24,""I"");24R~T;S FRMTYP=X I FRMTYP(""OLD"")]"""",FRMTYP]"""""
 +2        SET DR=DR_",FRMTYP'=FRMTYP(""OLD"") S OK=$$USEROK^IBCU75(24,FRMTYP(""OLD""),FRMTYP(""MSG"")) S:OK CHNGFRM=1 S:'OK Y=""@24"";"
 +3        SET DR=DR_"I $G(CHNGFRM)!($$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.01,""I"")="""") D COPYCMN^IBCU75(IBXIEN,IBPROCP,FRMTYP);"
 +4        SET DR=DR_"I $$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.01,""I"")]"""",'$G(CHNGFRM) R !,""Edit CMN Information for this Procedure? NO// "",EDIT S EDIT=$E($ZCONVERT(EDIT,""U"")) "
 +5        SET DR=DR_"W:(EDIT]""""&(EDIT'=""^"")) ""  ""_$S(EDIT=""Y"":""YES"",1:""NO"") I EDIT'=""Y"" S Y=""@999"";"
CERTYP    ;Entry point to set DR with logic for "Certification Type" field in preparation for re-prompting.
 +1        SET DR=DR_"@01;S CERTYP(""OLD"")=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.01,""I"");24.01R~T//INITIAL"
 +2        SET DR=DR_";S CERTYP=X I CERTYP(""OLD"")]"""",CERTYP]"""",CERTYP'=CERTYP(""OLD"")"
 +3        SET DR=DR_" S CMSG=$S(CERTYP=""I"":CERTYP(""MSGI""),1:CERTYP(""MSG""))"
 +4        SET DR=DR_" S OK=$$USEROK^IBCU75(24.01,CERTYP(""OLD""),CMSG) S:'OK Y=""@01"";@999;"
 +5        QUIT 
 +6       ;
DRCOMM    ;Set DR with logic for the remaining fields common to all form types
 +1        SET DR="@06;S DTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.06,""I"");24.06R~T//"_EVNTDT_";D DTCHK^IBCU75(X,TDY,""06"",$G(DTOLD));"
 +2        SET DR=DR_"I CERTYP=""I"" S @DGLB@(24.07)="""",Y=""@02"";"
RRDT      ;Entry point to set DR with logic for "Recertification/Revision Date"... fields in preparation for re-prompting.
 +1        SET DR=DR_"@07;S DTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.07,""I"");24.07R~T//"_EVNTDT_";D DTCHK^IBCU75(X,TDY,""07"",$G(DTOLD));"
 +2        SET DR=DR_"@02;S HTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.02,""I"");24.02T;I X>96 S OK=$$USEROK^IBCU75(24.02,HTOLD,""Patient is over 8 feet tall!"")"
 +3        SET DR=DR_" I 'OK S Y=""@02"";@03;S WTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.03,""I"");24.03T;I X>500 S OK=$$USEROK^IBCU75(24.03,WTOLD,"
 +4        SET DR=DR_"""Patient is over 500 pounds!"") I 'OK S Y=""@03"";24.04T;"
STRTDT    ;Entry point to set DR with logic for "Date Therapy Started"... fields in preparation for re-prompting.
 +1        SET DR=DR_"@05;S DTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.05,""I"");24.05R~T//"_EVNTDT_";D DTCHK^IBCU75(X,TDY,""05"",$G(DTOLD));@08;24.08T//N;"
 +2        DO @FRMTAG
 +3        QUIT 
 +4       ;
DR484     ;Set DR with logic specific for form CMN-484
 +1        SET DR=DR_"@100;24.1T;S ABGPO2=X;@102;24.102T;S O2SAT=X;I ABGPO2="""",O2SAT="""" S Y=""@104"";"
 +2        SET DR=DR_"@103;S DTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.103,""I"");24.103T;D DTCHK^IBCU75(X,TDY,103,$G(DTOLD));"
 +3        SET DR=DR_"@104;I (ABGPO2<56!(ABGPO2>59)),(O2SAT'=89) S @DGLB@(24.104)="""",@DGLB@(24.105)="""""
 +4        SET DR=DR_",@DGLB@(24.106)="""",Y=""@107"";24.104T//NO;24.105T//NO;24.106T//NO;@107;24.107T;24.108T;24.109T;24.11T;I X'>4 S @DGLB@(24.111)="""""
 +5        SET DR=DR_",@DGLB@(24.113)="""",@DGLB@(24.114)="""",Y=""@115"";24.111T;S ABG4LPM=X;"
 +6        SET DR=DR_"@113;24.113T;I 'ABG4LPM,'X S Y=""@115"",@DGLB@(24.114)="""";"
 +7        SET DR=DR_"@114;S DTOLD=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.114,""I"");24.114T;D DTCHK^IBCU75(X,TDY,114,$G(DTOLD));@115;24.115T;@999;"
 +8        QUIT 
 +9       ;
DR10126   ;Set DR with logic specific to the CMN-10126
 +1        SET DR=DR_"@217;S IBPEB(""OLD"")=$$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.217,""I"");24.217R~T//P;S IBPEB=X I IBPEB(""OLD"")]"""",IBPEB]"""",IBPEB(""OLD"")'=IBPEB "
 +2        SET DR=DR_"S OK=$$USEROK^IBCU75(24.217,IBPEB(""OLD""),""You are changing the nutrition type!"") S:'OK Y=""@217"";I $G(IBPEB)=""P"" S Y=""@206"" "
 +3        SET DR=DR_"N I F I=24.201:.001:24.205,24.218,24.219 S @DGLB@(I)="""";24.201T;24.202T;"
 +4        SET DR=DR_"24.204T;I '+X S Y=""@205"",@DGLB@(24.203)="""" I $$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.219)]"""" S Y=""@219"";"
 +5        SET DR=DR_"24.203T;I '+X S Y=""@205"" I $$CMNDATA^IBCEF31(IBXIEN,IBPROCP,24.219)]"""" S Y=""@219"";"
 +6        SET DR=DR_"@219;24.219T;I '+X S Y=""@205"",@DGLB@(24.218)="""";"
 +7        SET DR=DR_"24.218T;@205;24.205T;@206;24.206T;I $G(IBPEB)=""E"" S Y=""@999"" "
 +8        SET DR=DR_"N I F I=24.207:.001:24.216 S @DGLB@(I)="""";"
 +9        SET DR=DR_"24.207T;24.208T;24.209T;24.21T;24.211T;24.212T;24.213T;24.215T;24.216T;@214;24.214T;@999;"
 +10       QUIT 
 +11      ;
COPYCMN(IBXIEN,IBPROCP,FRMTYP) ;Copy CMN information from last procedure entered that has it to current procedure
 +1       ;Input: IBXIEN  = Internal bill/claim number
 +2       ;       IBPROCP = Procedure line subscript
 +3       ;       FRMTYP  = CMN Form Type ien
 +4       ;
 +5        NEW DONE
 +6        SET DONE=0
 +7        if ('$GET(IBXIEN)!('$GET(IBPROCP)!('$GET(FRMTYP))))
               QUIT 
 +8        NEW FRMND,FRMNDI,IBPROC,IBXSAVE,Z
 +9        SET FRMNDI=FORM(FRMTYP)
 +10       DO CMNDEX^IBCEF31(IBXIEN,.IBXSAVE)
 +11       SET Z=""
           FOR 
               SET Z=$ORDER(IBXSAVE("CMNDEX",Z),-1)
               if 'Z
                   QUIT 
               SET IBPROC=+IBXSAVE("CMNDEX",Z)
               IF IBPROCP
                   IF IBPROC'=IBPROCP
                       Begin DoDot:1
 +12                       if ('$DATA(^DGCR(399,IBXIEN,"CP",IBPROC,"CMN"))!('$DATA(^DGCR(399,IBXIEN,"CP",IBPROC,FRMNDI))))
                               QUIT 
 +13                       SET FRMND=$ORDER(^DGCR(399,IBXIEN,"CP",IBPROC,"CMN"))
                           if (FRMND=""!(FRMND'=FRMNDI))
                               QUIT 
 +14                       SET ^DGCR(399,IBXIEN,"CP",IBPROCP,"CMN")=^DGCR(399,IBXIEN,"CP",IBPROC,"CMN")
 +15                       SET ^DGCR(399,IBXIEN,"CP",IBPROCP,FRMND)=^DGCR(399,IBXIEN,"CP",IBPROC,FRMND)
 +16                       SET DONE=1
                       End DoDot:1
                       if DONE
                           QUIT 
 +17       QUIT 
 +18      ;
USEROK(FLD,OLDVAL,MSG) ;JRA;IB*2.0*608 Prompt user if OK to change field value
 +1       ;Input: FLD    =  Field for which we are asking the user to confirm the change
 +2       ;       OLDVAL =  Value of the field before user changed
 +3       ;       MSG    =  Warning message to display to user regarding the implications of the change
 +4       ;
 +5        if '$GET(FLD)
               QUIT 0
 +6        NEW DIC,DIR,X,Y
 +7        SET OLDVAL=$GET(OLDVAL)
 +8        WRITE $CHAR(7)
           IF $TRANSLATE($GET(MSG)," ")]""
               WRITE !,MSG
 +9        SET DIR(0)="Y"
           SET DIR("A")="OK to continue"
           SET DIR("B")="NO"
           DO ^DIR
 +10      ;Set field back to old value if user doesn't want to continue
           IF Y'=1
               DO SETFLD(FLD,OLDVAL)
 +11       IF Y=1
               SET X="^"
 +12       QUIT Y
 +13      ;
SETFLD(FLD,VAL) ;JRA;IB*2.0*608 Set/Delete field data w/out user prompting
 +1       ;Input: FLD = Field to set/delete
 +2       ;       VAL = Value to set FLD to (Note: '@' will delete field value)
 +3       ;
 +4        if ('$GET(FLD)!($GET(VAL)=""))
               QUIT 
 +5        NEW DIE,DI,DL,DP,DQ,DR,X,Y
 +6        SET DIE="^DGCR(399,"_IBXIEN_",""CP"","
 +7        SET DR=FLD_"////"_VAL
 +8        DO ^DIE
 +9        QUIT 
 +10      ;
DTCHK(X,TDY,TAG,DTOLD) ;JRA;IB*2.0*608 Check if future date entered by user
 +1       ;Input:  X     = User entry for date field (internal FileMan date format)
 +2       ;        TDY   = Today's internal FileMan date
 +3       ;        TAG   = Field tag to jump to if user enters a future date (usually re-prompt same date)
 +4       ;        DTOLD = The value of the date field prior to user edit
 +5       ;
 +6        if ('$GET(X))!('$GET(TAG))
               QUIT 
 +7        NEW FLD
 +8        if $GET(DTOLD)=""
               SET DTOLD="@"
 +9        if '$GET(TDY)
               SET TDY=$$HTFM^DILIBF(+$HOROLOG)
           if X'>TDY
               QUIT 
 +10      ;User entered future date so display error and change date back to previous value.
 +11       WRITE $CHAR(7),!,?3,"Future dates not allowed??"
 +12       SET Y="@"_TAG
 +13      ;set back to prior date
           DO SETFLD("24."_TAG,DTOLD)
 +14       QUIT 
 +15      ;