TIUFWRAP2 ;SPFO/AJB - Clean File #8927 ;04/06/22 12:50
;;1.0;TEXT INTEGRATION UTILITIES;**338,254**;Jun 20, 1997;Build 9
;
Q
;
FMR(DIR,PRM,DEF,HLP,SCR) ; fileman reader
N DILN,DILOCKTM,DISYS
N DIROUT,DIRUT,DTOUT,DUOUT,X,Y
S DIR(0)=DIR S:$G(PRM)'="" DIR("A")=PRM S:$G(DEF)'="" DIR("B")=DEF S:$G(SCR)'="" DIR("S")=SCR
I $G(HLP)'="" S DIR("?")=HLP
I $D(HLP) M DIR=HLP
W $G(IOCUON) D ^DIR W $G(IOCUOFF)
Q $S($D(DIROUT):U,$D(DIRUT):U,$D(DTOUT):U,$D(DUOUT):U,1:Y)
;
PRINT(LOC) ; print output
Q:$G(LOC)=""
N FIRST,ROOT S END="",FIRST=1,ROOT=$P(LOC,")"),LOC=$Q(@LOC)
Q:LOC'[ROOT
D:$E(IOST,1,2)="C-" CLS
F D Q:(LOC="")!(END=U)
. W:'+FIRST ! S FIRST=0
. D BRK:$Y+4>IOSL Q:END=U W @LOC S LOC=$Q(@LOC) S:'(LOC[ROOT) LOC=""
Q:END=U
I $E(IOST,1,2)="C-" S END=U D FMR("EA","Press <Enter> to continue ")
Q
BRK ;
I $E(IOST,1,2)="C-" S END=$$FMR("EA","Press <Enter> to continue or '^' to exit ")
Q:END=U
CLS ;
W:$E(IOST,1,2)="C-" @IOF
Q
;
LOD(ANS) ; level of detail
N DIR,HELP,PROMPT,X
W @IOF,IOCUON,IOUON_$$CJ^XLFSTR("UPDATE TYPE [^TIU(8927,]",IOM)_IOUOFF,!
S DIR="SA^1:BASIC;2:INTERMEDIATE;3:ADVANCED;Q:QUIT"
N TMP S TMP="LODHELP^TIUFWRAP2"
F X=1:1 S HELP=$P($T(LODHELP+X),";;",2) Q:HELP="EOM" D
. S HELP("?",X)=HELP
. W !,HELP
S HELP("?")=" ",PROMPT="What type of UPDATE would you like? "
W ! S ANS=$$FMR(DIR,PROMPT,"BASIC",.HELP)
Q ANS
;
LODHELP ;
;;Basic Attempt to fix broken fields/objects in boilerplate text.
;;
;; Delete entries with no boilerplate text, items, or linked
;; entries.
;;
;; Boilerplate text updates: Remove trailing spaces
;; Remove control characters
;;
;;Intermediate Basic + wrap lines >80 characters*.
;;
;;Advanced Basic + merge sequential lines of text**.
;;
;;* Please select HELP (** No, really!) on the main menu for more information.
;;EOM
Q
;
HELP ;
N CNT,LABEL,LINE,OUTPUT S CNT=1,OUTPUT(CNT)=""
F LINE=1:1 S LABEL=$P($T(CONTENTS+LINE),";;",2) Q:LABEL="EOM" D
. S CNT=CNT+1,OUTPUT(CNT)=IOUON_$P(LABEL,U,2)_IOUOFF
. D DATA(.CNT,"PART"_$P(LABEL,U))
D BROWSE^DDBR("OUTPUT","NR","Help & Detailed Information")
Q
;
CONTENTS ;
;;01^Introduction & Critical Information
;;02^Backing Up/Restoring File #8927
;;03^Updating File #8927
;;04^Viewing Entries
;;05^Print/Email Entries
;;EOM
;
DATA(CNT,OPT) ;
N DATA,I F I=1:1 S DATA=$P($T(@OPT+I),";;",2) Q:DATA="EOM" D
. S CNT=CNT+1,OUTPUT(CNT)=DATA
Q
;
DISPLAY(OPT) ; displays text from the parameter
N DATA,I
W:$D(IOF) @IOF
F I=1:1 S DATA=$P($T(@OPT+I),";;",2) Q:DATA="EOM" D
. W:OPT="INFO" @DATA,!
Q
;
INFO ;
;;IOUON_$$CJ^XLFSTR("TIU TEMPLATE (File #8927) Analysis & Cleanup Tool",IOM)_IOUOFF
;;""
;;"Critical Information: A backup copy of the TIU TEMPLATE file has been created"
;;" for you and can be restored from the menu below."
;;""
;;" This copy will remain on the system for 30 days."
;;""
;;" Select H(elp) for more information."
;;""
;;"Analyze File #8927 via the VIEW, PRINT, or EMAIL options."
;;EOM
;
PART01 ;
;;
;; [Press <PF1>+Q or <CNTRL>+E to exit this browser.]
;;
;; Tip: If your keyboard doesn't have a separate 10-key keyboard (like a laptop),
;; your emulator should have a "Virtual Keyboard" so that you can access
;; the PF1 (and more) keys via the "Show or hide terminal keyboard." button.
;;
;; Please read this information before using the utility.
;;
;; This utility will attempt to fix most common issues with the TIU TEMPLATE
;; file [#8927].
;;
;; The TIU TEMPLATE file is automatically saved to the ^XTMP global at first
;; use.
;;
;; This data will automatically be removed from the system 30 days after it
;; is last used.
;;
;; Accessing the new TIU option, TIU ANALYZE/UPDATE FILE 8927 (Analyze/Update
;; File #8927) will update the purge date to T+30 to prevent the system from
;; removing the data.
;;
;;EOM
;;01234567890123456789012345678901234567890123456789012345678901234567890123456789
;
PART02 ;
;;
;; The TIU TEMPLATE file will automatically be saved in the ^XTMP global.
;;
;; This will be the original, unaltered copy of the file.
;;
;; Selecting BACKUP from the main menu will automatically reset the purge date of
;; this data to T+30. This also happens automatically when you enter the utility.
;;
;; If the utility is not used for 30 days, the system will automatically remove
;; the saved data!
;;
;; RESTORE will restore File #8927 to its original state from the saved ^XTMP
;; data.
;;
;; You will be asked to confirm this action.
;;
;;EOM
;
PART03 ;
;;
;; The UPDATE action has 3 levels to choose from for cleaning and fixing
;; entries in File #8927.
;;
;; Option 1) Basic Cleanup
;;
;; The Basic cleanup will NOT wrap any lines and may be used to safely
;; attempt to fix entries with broken fields and objects.
;;
;; The Basic cleanup will: Delete TEMPLATES that have no linked ITEMS, no
;; Boilerplate Text, or linked entries.
;;
;; Clean TEMPLATES by removing trailing spaces and
;; control characters embedded in boilerplate text.
;;
;; Attempt to fix the most common issue with broken
;; fields and objects: last field/object missing the
;; closing bracket.
;;
;; Option 2) Intermediate Cleanup
;;
;; The Intermediate cleanup will do all the above and WILL wrap lines that are
;; >80 characters. This can lead to incorrectly formatted text paragraphs in
;; templates that have long lines. This wrap is the default wrap seen when
;; creating a note with a TEMPLATE with long lines that display properly in the
;; CPRS TEMPLATE EDITOR with "Allow long lines" turned on.
;;
;; This is how CPRS wraps text >80 characters from TEMPLATES with long lines.
;;
;; Example (the 3rd line is >80 characters):
;;
;; Present pharmacotherapy assessed for appropriateness, dosing, efficacy
;; and safety, adverse effects, pharmacologic duplication, unnecessary meds,
;; omissions, drug interactions, indications, allergies, need for dose adjustment
;; based on organ
;; function, drug administration problems, etc.
;;
;; Option 3) Advanced Cleanup
;;
;; The Advanced cleanup will perform the Basic cleanup and WILL wrap lines that
;; are >80 characters. The primary difference is that it will attempt to fix
;; the common issue above with improperly formatted paragraphs of text.
;;
;; The Advanced cleanup will merge sequential lines of text and then wrap the
;; lines.
;;
;; Example:
;;
;; Present pharmacotherapy assessed for appropriateness, dosing, efficacy
;; and safety, adverse effects, pharmacologic duplication, unnecessary meds,
;; omissions, drug interactions, indications, allergies, need for dose adjustment
;; based on organ function, drug administration problems, etc.
;;
;; Exceptions to merging lines:
;;
;; - Lines of text less than 80 characters.
;; - Lines of text that end with an OBJECT or TEMPLATE FIELD.
;; - Lines of text that contain TEMPLATE FIELDS that resolve to less than
;; 80 characters.
;; - Lines of text where the next line contains one or more OBJECTS or
;; TEMPLATE FIELDS.
;;
;; ** WARNING ** The Intermediate and Advanced cleanup options may ruin the
;; formatting of TEMPLATES that have long lines and have special formatting
;; following the long lines.
;;
;; This is why a backup of the TIU TEMPLATE file MUST be made before running
;; the UPDATE.
;;
;; Press <PF1>+Q or <CNTRL>+E to exit this browser.
;;
;;EOM
;
PART04 ;
;;
;; VIEW will allow the user to browse the following information:
;;
;; - Entries with Broken Fields/Objects.
;; - Entries with lines >80 characters.
;; - Entries that have no text, items or linked.
;; - Entries Missing Fields from File #8927.1
;; - Entries Missing Objects from File #8925.1
;;
;; In the browser, Press <PF1>S to select the CURRENT LIST to view.
;;
;; You MUST use <PF1> S to switch between the available lists.
;;
;; The browser displays a representation of the GUI Tree View accessible
;; via the CPRS GUI - Options - Edit Templates... or Edit Shared Templates...
;;
;; This representation allows users to find, view/verify the entry in
;; File #8927 via the CPRS GUI template editor. Because the template editor
;; allows long lines, entries in this file are NOT to be edited or viewed in
;; FileMan due to potential issues with wrapping fields or objects incorrectly.
;;
;; Example:
;;
;; IEN: (Internal Entry Number)
;; <Shared Templates>
;; <Education Templates>
;; - Blank/Broken Template [(Line #)]
;;
;; Press <PF1>+Q or <CNTRL>+E to exit the browser.
;;
;; Tip: If your keyboard doesn't have a separate 10-key keyboard (like a laptop),
;; your emulator should have a "Virtual Keyboard" so that you can access
;; the PF1 (and more) keys via the "Show or hide terminal keyboard." button.
;;
;;EOM
;
PART05 ;
;;
;; PRINT/EMAIL will allow the user to print or email the analysis results to a
;; device of their choosing or a mail message to their account.
;;
;; Tip: You can PRINT the results and choose P-MESSAGE as the device to send the
;; email with a custom subject and multiple recipients.
;;
;; Press <PF1>+Q or <CNTRL>+E to exit the browser.
;;
;;EOM
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HTIUFWRAP2 9837 printed Nov 22, 2024@17:51:24 Page 2
TIUFWRAP2 ;SPFO/AJB - Clean File #8927 ;04/06/22 12:50
+1 ;;1.0;TEXT INTEGRATION UTILITIES;**338,254**;Jun 20, 1997;Build 9
+2 ;
+3 QUIT
+4 ;
FMR(DIR,PRM,DEF,HLP,SCR) ; fileman reader
+1 NEW DILN,DILOCKTM,DISYS
+2 NEW DIROUT,DIRUT,DTOUT,DUOUT,X,Y
+3 SET DIR(0)=DIR
if $GET(PRM)'=""
SET DIR("A")=PRM
if $GET(DEF)'=""
SET DIR("B")=DEF
if $GET(SCR)'=""
SET DIR("S")=SCR
+4 IF $GET(HLP)'=""
SET DIR("?")=HLP
+5 IF $DATA(HLP)
MERGE DIR=HLP
+6 WRITE $GET(IOCUON)
DO ^DIR
WRITE $GET(IOCUOFF)
+7 QUIT $SELECT($DATA(DIROUT):U,$DATA(DIRUT):U,$DATA(DTOUT):U,$DATA(DUOUT):U,1:Y)
+8 ;
PRINT(LOC) ; print output
+1 if $GET(LOC)=""
QUIT
+2 NEW FIRST,ROOT
SET END=""
SET FIRST=1
SET ROOT=$PIECE(LOC,")")
SET LOC=$QUERY(@LOC)
+3 if LOC'[ROOT
QUIT
+4 if $EXTRACT(IOST,1,2)="C-"
DO CLS
+5 FOR
Begin DoDot:1
+6 if '+FIRST
WRITE !
SET FIRST=0
+7 if $Y+4>IOSL
DO BRK
if END=U
QUIT
WRITE @LOC
SET LOC=$QUERY(@LOC)
if '(LOC[ROOT)
SET LOC=""
End DoDot:1
if (LOC="")!(END=U)
QUIT
+8 if END=U
QUIT
+9 IF $EXTRACT(IOST,1,2)="C-"
SET END=U
DO FMR("EA","Press <Enter> to continue ")
+10 QUIT
BRK ;
+1 IF $EXTRACT(IOST,1,2)="C-"
SET END=$$FMR("EA","Press <Enter> to continue or '^' to exit ")
+2 if END=U
QUIT
CLS ;
+1 if $EXTRACT(IOST,1,2)="C-"
WRITE @IOF
+2 QUIT
+3 ;
LOD(ANS) ; level of detail
+1 NEW DIR,HELP,PROMPT,X
+2 WRITE @IOF,IOCUON,IOUON_$$CJ^XLFSTR("UPDATE TYPE [^TIU(8927,]",IOM)_IOUOFF,!
+3 SET DIR="SA^1:BASIC;2:INTERMEDIATE;3:ADVANCED;Q:QUIT"
+4 NEW TMP
SET TMP="LODHELP^TIUFWRAP2"
+5 FOR X=1:1
SET HELP=$PIECE($TEXT(LODHELP+X),";;",2)
if HELP="EOM"
QUIT
Begin DoDot:1
+6 SET HELP("?",X)=HELP
+7 WRITE !,HELP
End DoDot:1
+8 SET HELP("?")=" "
SET PROMPT="What type of UPDATE would you like? "
+9 WRITE !
SET ANS=$$FMR(DIR,PROMPT,"BASIC",.HELP)
+10 QUIT ANS
+11 ;
LODHELP ;
+1 ;;Basic Attempt to fix broken fields/objects in boilerplate text.
+2 ;;
+3 ;; Delete entries with no boilerplate text, items, or linked
+4 ;; entries.
+5 ;;
+6 ;; Boilerplate text updates: Remove trailing spaces
+7 ;; Remove control characters
+8 ;;
+9 ;;Intermediate Basic + wrap lines >80 characters*.
+10 ;;
+11 ;;Advanced Basic + merge sequential lines of text**.
+12 ;;
+13 ;;* Please select HELP (** No, really!) on the main menu for more information.
+14 ;;EOM
+15 QUIT
+16 ;
HELP ;
+1 NEW CNT,LABEL,LINE,OUTPUT
SET CNT=1
SET OUTPUT(CNT)=""
+2 FOR LINE=1:1
SET LABEL=$PIECE($TEXT(CONTENTS+LINE),";;",2)
if LABEL="EOM"
QUIT
Begin DoDot:1
+3 SET CNT=CNT+1
SET OUTPUT(CNT)=IOUON_$PIECE(LABEL,U,2)_IOUOFF
+4 DO DATA(.CNT,"PART"_$PIECE(LABEL,U))
End DoDot:1
+5 DO BROWSE^DDBR("OUTPUT","NR","Help & Detailed Information")
+6 QUIT
+7 ;
CONTENTS ;
+1 ;;01^Introduction & Critical Information
+2 ;;02^Backing Up/Restoring File #8927
+3 ;;03^Updating File #8927
+4 ;;04^Viewing Entries
+5 ;;05^Print/Email Entries
+6 ;;EOM
+7 ;
DATA(CNT,OPT) ;
+1 NEW DATA,I
FOR I=1:1
SET DATA=$PIECE($TEXT(@OPT+I),";;",2)
if DATA="EOM"
QUIT
Begin DoDot:1
+2 SET CNT=CNT+1
SET OUTPUT(CNT)=DATA
End DoDot:1
+3 QUIT
+4 ;
DISPLAY(OPT) ; displays text from the parameter
+1 NEW DATA,I
+2 if $DATA(IOF)
WRITE @IOF
+3 FOR I=1:1
SET DATA=$PIECE($TEXT(@OPT+I),";;",2)
if DATA="EOM"
QUIT
Begin DoDot:1
+4 if OPT="INFO"
WRITE @DATA,!
End DoDot:1
+5 QUIT
+6 ;
INFO ;
+1 ;;IOUON_$$CJ^XLFSTR("TIU TEMPLATE (File #8927) Analysis & Cleanup Tool",IOM)_IOUOFF
+2 ;;""
+3 ;;"Critical Information: A backup copy of the TIU TEMPLATE file has been created"
+4 ;;" for you and can be restored from the menu below."
+5 ;;""
+6 ;;" This copy will remain on the system for 30 days."
+7 ;;""
+8 ;;" Select H(elp) for more information."
+9 ;;""
+10 ;;"Analyze File #8927 via the VIEW, PRINT, or EMAIL options."
+11 ;;EOM
+12 ;
PART01 ;
+1 ;;
+2 ;; [Press <PF1>+Q or <CNTRL>+E to exit this browser.]
+3 ;;
+4 ;; Tip: If your keyboard doesn't have a separate 10-key keyboard (like a laptop),
+5 ;; your emulator should have a "Virtual Keyboard" so that you can access
+6 ;; the PF1 (and more) keys via the "Show or hide terminal keyboard." button.
+7 ;;
+8 ;; Please read this information before using the utility.
+9 ;;
+10 ;; This utility will attempt to fix most common issues with the TIU TEMPLATE
+11 ;; file [#8927].
+12 ;;
+13 ;; The TIU TEMPLATE file is automatically saved to the ^XTMP global at first
+14 ;; use.
+15 ;;
+16 ;; This data will automatically be removed from the system 30 days after it
+17 ;; is last used.
+18 ;;
+19 ;; Accessing the new TIU option, TIU ANALYZE/UPDATE FILE 8927 (Analyze/Update
+20 ;; File #8927) will update the purge date to T+30 to prevent the system from
+21 ;; removing the data.
+22 ;;
+23 ;;EOM
+24 ;;01234567890123456789012345678901234567890123456789012345678901234567890123456789
+25 ;
PART02 ;
+1 ;;
+2 ;; The TIU TEMPLATE file will automatically be saved in the ^XTMP global.
+3 ;;
+4 ;; This will be the original, unaltered copy of the file.
+5 ;;
+6 ;; Selecting BACKUP from the main menu will automatically reset the purge date of
+7 ;; this data to T+30. This also happens automatically when you enter the utility.
+8 ;;
+9 ;; If the utility is not used for 30 days, the system will automatically remove
+10 ;; the saved data!
+11 ;;
+12 ;; RESTORE will restore File #8927 to its original state from the saved ^XTMP
+13 ;; data.
+14 ;;
+15 ;; You will be asked to confirm this action.
+16 ;;
+17 ;;EOM
+18 ;
PART03 ;
+1 ;;
+2 ;; The UPDATE action has 3 levels to choose from for cleaning and fixing
+3 ;; entries in File #8927.
+4 ;;
+5 ;; Option 1) Basic Cleanup
+6 ;;
+7 ;; The Basic cleanup will NOT wrap any lines and may be used to safely
+8 ;; attempt to fix entries with broken fields and objects.
+9 ;;
+10 ;; The Basic cleanup will: Delete TEMPLATES that have no linked ITEMS, no
+11 ;; Boilerplate Text, or linked entries.
+12 ;;
+13 ;; Clean TEMPLATES by removing trailing spaces and
+14 ;; control characters embedded in boilerplate text.
+15 ;;
+16 ;; Attempt to fix the most common issue with broken
+17 ;; fields and objects: last field/object missing the
+18 ;; closing bracket.
+19 ;;
+20 ;; Option 2) Intermediate Cleanup
+21 ;;
+22 ;; The Intermediate cleanup will do all the above and WILL wrap lines that are
+23 ;; >80 characters. This can lead to incorrectly formatted text paragraphs in
+24 ;; templates that have long lines. This wrap is the default wrap seen when
+25 ;; creating a note with a TEMPLATE with long lines that display properly in the
+26 ;; CPRS TEMPLATE EDITOR with "Allow long lines" turned on.
+27 ;;
+28 ;; This is how CPRS wraps text >80 characters from TEMPLATES with long lines.
+29 ;;
+30 ;; Example (the 3rd line is >80 characters):
+31 ;;
+32 ;; Present pharmacotherapy assessed for appropriateness, dosing, efficacy
+33 ;; and safety, adverse effects, pharmacologic duplication, unnecessary meds,
+34 ;; omissions, drug interactions, indications, allergies, need for dose adjustment
+35 ;; based on organ
+36 ;; function, drug administration problems, etc.
+37 ;;
+38 ;; Option 3) Advanced Cleanup
+39 ;;
+40 ;; The Advanced cleanup will perform the Basic cleanup and WILL wrap lines that
+41 ;; are >80 characters. The primary difference is that it will attempt to fix
+42 ;; the common issue above with improperly formatted paragraphs of text.
+43 ;;
+44 ;; The Advanced cleanup will merge sequential lines of text and then wrap the
+45 ;; lines.
+46 ;;
+47 ;; Example:
+48 ;;
+49 ;; Present pharmacotherapy assessed for appropriateness, dosing, efficacy
+50 ;; and safety, adverse effects, pharmacologic duplication, unnecessary meds,
+51 ;; omissions, drug interactions, indications, allergies, need for dose adjustment
+52 ;; based on organ function, drug administration problems, etc.
+53 ;;
+54 ;; Exceptions to merging lines:
+55 ;;
+56 ;; - Lines of text less than 80 characters.
+57 ;; - Lines of text that end with an OBJECT or TEMPLATE FIELD.
+58 ;; - Lines of text that contain TEMPLATE FIELDS that resolve to less than
+59 ;; 80 characters.
+60 ;; - Lines of text where the next line contains one or more OBJECTS or
+61 ;; TEMPLATE FIELDS.
+62 ;;
+63 ;; ** WARNING ** The Intermediate and Advanced cleanup options may ruin the
+64 ;; formatting of TEMPLATES that have long lines and have special formatting
+65 ;; following the long lines.
+66 ;;
+67 ;; This is why a backup of the TIU TEMPLATE file MUST be made before running
+68 ;; the UPDATE.
+69 ;;
+70 ;; Press <PF1>+Q or <CNTRL>+E to exit this browser.
+71 ;;
+72 ;;EOM
+73 ;
PART04 ;
+1 ;;
+2 ;; VIEW will allow the user to browse the following information:
+3 ;;
+4 ;; - Entries with Broken Fields/Objects.
+5 ;; - Entries with lines >80 characters.
+6 ;; - Entries that have no text, items or linked.
+7 ;; - Entries Missing Fields from File #8927.1
+8 ;; - Entries Missing Objects from File #8925.1
+9 ;;
+10 ;; In the browser, Press <PF1>S to select the CURRENT LIST to view.
+11 ;;
+12 ;; You MUST use <PF1> S to switch between the available lists.
+13 ;;
+14 ;; The browser displays a representation of the GUI Tree View accessible
+15 ;; via the CPRS GUI - Options - Edit Templates... or Edit Shared Templates...
+16 ;;
+17 ;; This representation allows users to find, view/verify the entry in
+18 ;; File #8927 via the CPRS GUI template editor. Because the template editor
+19 ;; allows long lines, entries in this file are NOT to be edited or viewed in
+20 ;; FileMan due to potential issues with wrapping fields or objects incorrectly.
+21 ;;
+22 ;; Example:
+23 ;;
+24 ;; IEN: (Internal Entry Number)
+25 ;; <Shared Templates>
+26 ;; <Education Templates>
+27 ;; - Blank/Broken Template [(Line #)]
+28 ;;
+29 ;; Press <PF1>+Q or <CNTRL>+E to exit the browser.
+30 ;;
+31 ;; Tip: If your keyboard doesn't have a separate 10-key keyboard (like a laptop),
+32 ;; your emulator should have a "Virtual Keyboard" so that you can access
+33 ;; the PF1 (and more) keys via the "Show or hide terminal keyboard." button.
+34 ;;
+35 ;;EOM
+36 ;
PART05 ;
+1 ;;
+2 ;; PRINT/EMAIL will allow the user to print or email the analysis results to a
+3 ;; device of their choosing or a mail message to their account.
+4 ;;
+5 ;; Tip: You can PRINT the results and choose P-MESSAGE as the device to send the
+6 ;; email with a custom subject and multiple recipients.
+7 ;;
+8 ;; Press <PF1>+Q or <CNTRL>+E to exit the browser.
+9 ;;
+10 ;;EOM