PXRMEXPS ;SLC/PKR - Packing save routines. ;02/14/2022
 ;;2.0;CLINICAL REMINDERS;**12,16,18,22,24,26,45,80**;Feb 04, 2005;Build 7
 ;
 ;DBIA
 ;3085         AUTTEDT(EDUIEN,10         
 ;3083         AUTTHF(
 ;5246         GMT(142.5
 ;5247         GMT(142
 ;5446         BEG^ORORDDSC
 ;5447         $$OBJBYNAM^TIUCHECK
 ;3372         ^TIU(8927.1
 ;3110         $P(^ORD(101.41,IEN,0),U,4)
 ;==========================================
ADD(FILENUM,IEN,PACKLIST,NF) ;
 S NF=+$O(PACKLIST(FILENUM,"IEN"),-1)+1
 S PACKLIST(FILENUM,NF)=IEN
 S PACKLIST(FILENUM,"IEN",IEN)=NF
 Q
 ;
 ;==========================================
CHKCF(ROOT,TOPIEN,GBL,PACKLIST) ;
 N IEN,NAME,NUM,PARM,RIEN,ROUTINE
 S IEN=""
 F  S IEN=$O(@ROOT@(TOPIEN,20,"E",GBL,IEN)) Q:IEN=""  D
 . I $P($G(^PXRMD(811.4,IEN,0)),U,1)'="VA-REMINDER DEFINITION" Q
 . S NUM=$O(@ROOT@(TOPIEN,20,"E",GBL,IEN,"")) Q:NUM'>0
 . S PARM=$P($G(@ROOT@(TOPIEN,20,NUM,15)),U,1)
 . S NAME=$P(PARM,U,1)
 . S RIEN=$O(^PXD(811.9,"B",NAME,"")) Q:RIEN'>0
 . S ROUTINE=$$GETSRTN(811.9)_"(811.9,RIEN,.PACKLIST,1)"
 . D @ROUTINE
 Q
 ;
 ;==========================================
EXISTS(FILENUM,IEN,PACKLIST) ;If the entry already exists remove it
 ;and keep only the higher entry.
 I '$D(PACKLIST(FILENUM,"IEN",IEN)) Q
 N NUM
 S NUM=PACKLIST(FILENUM,"IEN",IEN)
 K PACKLIST(FILENUM,NUM)
 Q
 ;
 ;==========================================
GEDSUB(EDUIEN,NSUB,LIST) ;Build the recursive list of education topic
 ;subtopics.
 ;DBIA #3085
 N IND,SUBIEN
 S IND=0
 F  S IND=+$O(^AUTTEDT(EDUIEN,10,IND)) Q:IND=0  D
 . S NSUB=NSUB+1
 . S SUBIEN=$P(^AUTTEDT(EDUIEN,10,IND,0),U,1)
 . S LIST(NSUB)=SUBIEN
 . D GEDSUB(SUBIEN,.NSUB,.LIST)
 Q
 ;
 ;==========================================
GETFNUM(GBL) ;Return the file number for a global.
 S GBL="^"_GBL_"0)"
 Q +$P(@GBL,U,2)
 ;
 ;==========================================
GETSRTN(FILENUM) ;Return the save routine according to the file number.
 I FILENUM=50 Q "SGEN^PXRMEXPS"
 I FILENUM=50.6 Q "SGEN^PXRMEXPS"
 I FILENUM=50.605 Q "SGEN^PXRMEXPS"
 I FILENUM=50.68 Q "SGEN^PXRMEXPS"
 I FILENUM=60 Q "SLT^PXRMEXPS"
 I FILENUM=71 Q "SGEN^PXRMEXPS"
 I FILENUM=79.2 Q "SGEN^PXRMEXPS"
 I FILENUM=80 Q "NOSAVE^PXRMEXPS"
 I FILENUM=80.1 Q "NOSAVE^PXRMEXPS"
 I FILENUM=81 Q "NOSAVE^PXRMEXPS"
 I FILENUM=101.41 Q "SODIALOG^PXRMEXPS"
 I FILENUM=101.43 Q "SGEN^PXRMEXPS"
 I FILENUM=120.51 Q "SGEN^PXRMEXPS"
 I FILENUM=142 Q "SHST^PXRMEXPS"
 I FILENUM=142.1 Q "SGEN^PXRMEXPS"
 I FILENUM=142.5 Q "SHSO^PXRMEXPS"
 I FILENUM=601.71 Q "SGEN^PXRMEXPS"
 I FILENUM=790.404 Q "SGEN^PXRMEXPS"
 I FILENUM=801 Q "SROC^PXRMEXPS"
 I FILENUM=801.1 Q "SRULE^PXRMEXPS"
 I FILENUM=801.41 Q "SDIALOG^PXRMEXPS"
 I FILENUM=801.46 Q "SGEN^PXRMEXPS"
 I FILENUM=801.47 Q "SDIALFUN^PXRMEXPS"
 I FILENUM=801.48 Q "SDIALLNK^PXRMEXPS"
 I FILENUM=810.2 Q "SEDEF^PXRMEXPS"
 I FILENUM=810.4 Q "SLR^PXRMEXPS"
 I FILENUM=810.7 Q "SRECR^PXRMEXPS"
 I FILENUM=810.8 Q "SRCG^PXRMEXPS"
 I FILENUM=810.9 Q "SLL^PXRMEXPS"
 I FILENUM=811.2 Q "SGENR^PXRMEXPS"
 I FILENUM=811.4 Q "SCF^PXRMEXPS"
 I FILENUM=811.5 Q "SRT^PXRMEXPS"
 I FILENUM=811.6 Q "SGEN^PXRMEXPS"
 I FILENUM=811.9 Q "SDEF^PXRMEXPS"
 I FILENUM=8925.1 Q "STIUOBJ^PXRMEXPS"
 I FILENUM=8927.1 Q "STIUTEMP^PXRMEXPS"
 I FILENUM=9999999.09 Q "SED^PXRMEXPS"
 I FILENUM=9999999.14 Q "SGEN^PXRMEXPS"
 I FILENUM=9999999.15 Q "SGEN^PXRMEXPS"
 I FILENUM=9999999.28 Q "SGEN^PXRMEXPS"
 I FILENUM=9999999.64 Q "SHF^PXRMEXPS"
 Q "NORTN^PXRMEXPS"
 ;
 ;==========================================
NORTN(FILENUM,IEN,PACKLIST) ;Don't have a routine for this file number.
 S NF=+$O(PACKLIST(FILENUM,"IEN"),-1)+1
 S PACKLIST(FILENUM,NF)=IEN
 S PACKLIST(FILENUM,"IEN",IEN)=NF
 S PACKLIST(FILENUM,"ERROR",IEN)="No packing routine for file number "_FILENUM_"."
 Q
 ;
 ;==========================================
NOSAVE(FILENUM,IEN,PACKLIST) ;Don't do anything for this file number.
 Q
 ;
 ;==========================================
SCF(FILENUM,IEN,PACKLIST) ;Reminder computed findings.
 N CFRTN
 ;Add the computed finding file entry.
 D SGENR(FILENUM,IEN,.PACKLIST)
 S CFRTN=$P(^PXRMD(811.4,IEN,0),U,2)
 ;Add the routine; mark routines with file number 0.
 D SGEN(0,CFRTN,.PACKLIST)
 Q
 ;
 ;==========================================
SDEF(FILENUM,RIEN,PACKLIST,NODIALOG) ;Reminder definitions.
 N DIALOG,ENODE,EO,FINDING,FINUM,FNUM,GBL,IEN,NF,ROUTINE,SPON
 D SGENR(FILENUM,RIEN,.PACKLIST)
 ;Process the finding multiple.
 S FINUM=0
 F  S FINUM=+$O(^PXD(811.9,RIEN,20,FINUM)) Q:FINUM=0  D
 . S FINDING=$P(^PXD(811.9,RIEN,20,FINUM,0),U,1)
 . S IEN=$P(FINDING,";",1)
 . S GBL=$P(FINDING,";",2)
 . S FNUM=$$GETFNUM(GBL)
 . I FNUM=811.4 D CHKCF("^PXD(811.9)",RIEN,GBL,.PACKLIST)
 . S ROUTINE=$$GETSRTN(FNUM)_"(FNUM,IEN,.PACKLIST)"
 . D @ROUTINE
 ;Dialog
 I +$G(NODIALOG)=1 Q
 S DIALOG=+$G(^PXD(811.9,RIEN,51))
 I DIALOG>0,'$D(PACKLIST(801.41,"IEN",DIALOG)) D SDIALOG(801.41,DIALOG,.PACKLIST)
 Q
 ;
SDIALFUN(FILENUM,IEN,PACKLIST) ; Dialog Function File
 D SGENR(FILENUM,IEN,.PACKLIST)
 Q
 ;
SDIALLNK(FILENUM,IEN,PACKLIST) ; Dialog Link File
 D SGENR(FILENUM,IEN,.PACKLIST)
 N FUNC,ROUTINE
 S FUNC=$P($G(^PXRMD(801.48,IEN,0)),U,4) Q:FUNC'>0
 S ROUTINE=$$GETSRTN(801.47)_"(801.47,FUNC,.PACKLIST)"
 D @ROUTINE
 Q
 ;
 ;==========================================
SDIALOG(FILENUM,DIEN,PACKLIST) ;Reminder dialogs.
 I DIEN'>0 Q
 N EVALITEM,IDX,IEN,IND,IND1,FI,FNUM,GBL,MHT,OI,OLIST,REG,ROUTINE,SEQ,TEMP,TERM,TLIST
 D SGENR(FILENUM,DIEN,.PACKLIST)
 ;Check for a finding item.
 S TEMP=$G(^PXRMD(801.41,DIEN,1))
 S FI=$P(TEMP,U,5)
 I FI'="" D
 . S IEN=$P(FI,";",1)
 . S GBL=$P(FI,";",2)
 . S FNUM=$$GETFNUM(GBL)
 . S ROUTINE=$$GETSRTN(FNUM)_"(FNUM,IEN,.PACKLIST)"
 . D @ROUTINE
 ;Check for an orderable item.
 S OI=$P(TEMP,U,7)
 I OI'="" D
 . S ROUTINE=$$GETSRTN(101.43)_"(101.43,OI,.PACKLIST)"
 . D @ROUTINE
 ;Check for additional findings.
 S IND=0
 F  S IND=+$O(^PXRMD(801.41,DIEN,3,IND)) Q:IND=0  D
 . S FI=$P(^PXRMD(801.41,DIEN,3,IND,0),U,1)
 . S IEN=$P(FI,";",1)
 . S GBL=$P(FI,";",2)
 . S FNUM=$$GETFNUM(GBL)
 . S ROUTINE=$$GETSRTN(FNUM)_"(FNUM,IEN,.PACKLIST)"
 . D @ROUTINE
 ;Check word processing fields for TIU Object and Template Fields
 D TIUSRCH^PXRMEXU1("^PXRMD(801.41,",DIEN,25,.OLIST,.TLIST)
 I $D(OLIST)>0 D
 . S ROUTINE=$$GETSRTN(8925.1)_"(8925.1,.OLIST,.PACKLIST)"
 . D @ROUTINE K OLIST
 I $D(TLIST)>0 D
 . S ROUTINE=$$GETSRTN(8927.1)_"(8927.1,.TLIST,.PACKLIST)"
 . D @ROUTINE K TLIST
 D TIUSRCH^PXRMEXU1("^PXRMD(801.41,",DIEN,35,.OLIST,.TLIST)
 I $D(OLIST)>0 D
 . S ROUTINE=$$GETSRTN(8925.1)_"(8925.1,.OLIST,.PACKLIST)"
 . D @ROUTINE K OLIST
 I $D(TLIST)>0 D
 . S ROUTINE=$$GETSRTN(8927.1)_"(8927.1,.TLIST,.PACKLIST)"
 . D @ROUTINE K TLIST
 ;Check the components multiple for elements.
 I $D(^PXRMD(801.41,DIEN,10)) D
 . S ROUTINE=$$GETSRTN(801.41)_"(801.41,IEN,.PACKLIST)"
 . S IND=0
 . F  S IND=+$O(^PXRMD(801.41,DIEN,10,IND)) Q:IND=0  D
 .. S IEN=$P(^PXRMD(801.41,DIEN,10,IND,0),U,2) Q:+$G(IEN)'>0
 .. S ^TMP($J,"PXRM DIALOG CHILDREN",IEN)=""
 .. D @ROUTINE
 .. S IEN=$P(^PXRMD(801.41,DIEN,10,IND,0),U,10) I +$G(IEN)'>0 Q
 .. D @ROUTINE
 ;Check for a term and a replacement element/group.
 I $D(^PXRMD(801.41,DIEN,"BL")) D
 .S SEQ=0 F  S SEQ=$O(^PXRMD(801.41,DIEN,"BL","B",SEQ)) Q:SEQ'>0  D
 ..S IDX=$O(^PXRMD(801.41,DIEN,"BL","B",SEQ,"")) Q:IDX'>0
 ..S TEMP=$G(^PXRMD(801.41,DIEN,"BL",IDX,0))
 ..S EVALITEM=$P(TEMP,U,2)
 ..I EVALITEM["811.9" D
 ... S ROUTINE=$$GETSRTN(811.9)_"(811.9,+EVALITEM,.PACKLIST,1)"
 ... D @ROUTINE
 .. I EVALITEM["811.5" D
 ... S ROUTINE=$$GETSRTN(811.5)_"(811.5,+EVALITEM,.PACKLIST)"
 ... D @ROUTINE
 .. S REG=$P(TEMP,U,5)
 .. I REG>0 D
 ... S ^TMP($J,"PXRM DIALOG CHILDREN",REG)=""
 ... S ROUTINE=$$GETSRTN(801.41)_"(801.41,REG,.PACKLIST)"
 ... D @ROUTINE
 ;Check for a mental health test.
 S MHT=$P($G(^PXRMD(801.41,DIEN,50)),U,1)
 I MHT'="" D
 . S ROUTINE=$$GETSRTN(601.71)_"(601.71,MHT,.PACKLIST)"
 . D @ROUTINE
 ;Check for result groups.
 I $D(^PXRMD(801.41,DIEN,51)) D
 . S IND=0
 . F  S IND=+$O(^PXRMD(801.41,DIEN,51,IND)) Q:IND=0  D
 .. S IEN=$P(^PXRMD(801.41,DIEN,51,IND,0),U,1)
 .. S ROUTINE=$$GETSRTN(801.41)_"(801.41,IEN,.PACKLIST)"
 .. D @ROUTINE
 .. ;S IEN=$P(^PXRMD(801.41,DIEN,51,IND,0),U,2) I +$G(IEN)'>0 Q
 .. ;D @ROUTINE
 .. ; check for linking on result group
 .. S IND1=0 F  S IND1=$O(^PXRMD(801.41,DIEN,51,IND,1,IND1)) Q:IND1'>0  D
 ... S IEN=$P($G(^PXRMD(801.41,DIEN,51,IND,1,IND1,0)),U,2) Q:IEN'>0
 ... S ROUTINE=$$GETSRTN(801.48)_"(801.48,IEN,.PACKLIST)"
 ... D @ROUTINE
 ;Check for linking
 S IND=0 F  S IND=$O(^PXRMD(801.41,DIEN,10,IND)) Q:IND'>0  D
 .S IEN=$P($G(^PXRMD(801.41,DIEN,10,IND,"LINK")),U) Q:IEN'>0
 .S ROUTINE=$$GETSRTN(801.48)_"(801.48,IEN,.PACKLIST)"
 .D @ROUTINE
 Q
 ;
 ;==========================================
SED(FILENUM,IEN,PACKLIST) ;Education topics.
 N IND,NF,NSUB,SUBLIST
 D EXISTS(FILENUM,IEN,.PACKLIST)
 D ADD(FILENUM,IEN,.PACKLIST,.NF)
 S NSUB=0
 ;Get all the subtopics.
 D GEDSUB(IEN,.NSUB,.SUBLIST)
 F IND=1:1:NSUB D
 . D EXISTS(FILENUM,SUBLIST(IND),.PACKLIST)
 . S NF=NF+1
 . S PACKLIST(FILENUM,NF)=SUBLIST(IND)
 . S PACKLIST(FILENUM,"IEN",SUBLIST(IND))=NF
 Q
 ;
 ;==========================================
SEDEF(FILENUM,IEN,PACKLIST) ;Reminder extract definitions.
 N CR,CRRTN,IND,JND,LRRTN,LRS,RDEF,RDEFRTN,TEMP
 D SGEN(FILENUM,IEN,.PACKLIST)
 ;Initialize the save routines.
 S LRRTN=$$GETSRTN(810.4)_"(810.4,LRS,.PACKLIST)"
 S CRRTN=$$GETSRTN(810.7)_"(810.7,CR,.PACKLIST)"
 S RDEFRTN=$$GETSRTN(811.9)_"(811.9,RDEF,.PACKLIST,1)"
 ;Go through the extract sequence.
 S IND=0
 F  S IND=+$O(^PXRM(810.2,IEN,10,IND)) Q:IND=0  D
 . S LRS=$P(^PXRM(810.2,IEN,10,IND,0),U,2)
 . D @LRRTN
 .;Go through the reminders and counting rules.
 . S JND=0
 . F  S JND=+$O(^PXRM(810.2,IEN,10,IND,10,JND)) Q:JND=0  D
 .. S TEMP=^PXRM(810.2,IEN,10,IND,10,JND,0)
 .. S RDEF=$P(TEMP,U,2)
 .. I RDEF'="" D @RDEFRTN
 .. S CR=$P(TEMP,U,3)
 .. I CR'="" D @CRRTN
 Q
 ;
 ;==========================================
SGEN(FILENUM,IEN,PACKLIST) ;General save routine, used for everything that
 ;does not require special handling.
 N NF
 D EXISTS(FILENUM,IEN,.PACKLIST)
 D ADD(FILENUM,IEN,.PACKLIST,.NF)
 Q
 ;
 ;==========================================
SGENR(FILENUM,IEN,PACKLIST) ;General reminder global save routine, used for
 ;reminder globals that do not require special handling.
 N SPON
 D SGEN(FILENUM,IEN,.PACKLIST)
 S SPON=+$$GET1^DIQ(FILENUM,IEN,101,"I")
 I SPON>0 D SGEN(811.6,SPON,.PACKLIST)
 Q
 ;
 ;==========================================
SHF(FILENUM,IEN,PACKLIST) ;Health factors.
 N CAT,HF,NF
 ;All health factor references covered by DBIA #3083.
 ;If the health factor is a category then it has to be coming from
 ;a health summary so include all the health factors in the category.
 I $P(^AUTTHF(IEN,0),U,10)="C" D
 . S CAT=1,HF=0
 . F  S HF=$O(^AUTTHF("AC",IEN,HF)) Q:HF'>0  D
 .. D EXISTS(FILENUM,HF,.PACKLIST)
 .. D ADD(FILENUM,HF,.PACKLIST,.NF)
 D EXISTS(FILENUM,IEN,.PACKLIST)
 D ADD(FILENUM,IEN,.PACKLIST,.NF)
 I $G(CAT) Q
 ;For a regular health factor make sure the category is on the list.
 S CAT=$P(^AUTTHF(IEN,0),U,3)
 D EXISTS(FILENUM,CAT,.PACKLIST)
 S NF=NF+1
 S PACKLIST(FILENUM,NF)=CAT
 S PACKLIST(FILENUM,"IEN",CAT)=NF
 Q
 ;
 ;==========================================
SHSO(FILENUM,IEN,PACKLIST) ;Health summary object.
 N HST
 D SGEN(FILENUM,IEN,.PACKLIST)
 S HST=$P($G(^GMT(142.5,IEN,0)),U,3)
 S ROUTINE=$$GETSRTN(142)_"(142,HST,.PACKLIST)"
 D @ROUTINE
 Q
 ;
 ;==========================================
SHST(FILENUM,IEN,PACKLIST) ;Health Summary Type
 N CNT,FNUM,GBL,HSC,ITEM,NODE,ROUTINE,SEL
 D SGEN(FILENUM,IEN,.PACKLIST)
 S CNT=0 F  S CNT=$O(^GMT(142,IEN,1,CNT)) Q:CNT'>0  D
 .S HSC=$P($G(^GMT(142,IEN,1,CNT,0)),U,2)
 .S ROUTINE=$$GETSRTN(142.1)_"(142.1,HSC,.PACKLIST)"
 .D @ROUTINE
 .;Loop through selection item, variable pointer
 .S SEL=0 F  S SEL=$O(^GMT(142,IEN,1,CNT,1,SEL)) Q:SEL'>0  D
 ..S NODE=$P($G(^GMT(142,IEN,1,CNT,1,SEL,0)),U)
 ..I NODE'="" D
 ...S ITEM=$P(NODE,";",1)
 ...S GBL=$P(NODE,";",2)
 ...S FNUM=$$GETFNUM(GBL)
 ...S ROUTINE=$$GETSRTN(FNUM)_"(FNUM,ITEM,.PACKLIST)"
 ...I ROUTINE="NOROUTINE" Q
 ...D @ROUTINE
 Q
 ;
 ;==========================================
SLL(FILENUM,IEN,PACKLIST) ;Reminder location lists.
 N CSTEXL,IND,ROUTINE
 D SGEN(FILENUM,IEN,.PACKLIST)
 ;If CREDIT STOPS TO EXCLUDE (LIST) has been used put it on the packing
 ;list.
 S IND=0
 F  S IND=+$O(^PXRMD(810.9,IEN,40.7,IND)) Q:IND=0  D
 . S CSTEXL=$G(^PXRMD(810.9,IEN,40.7,IND,2))
 . I CSTEXL="" Q
 . S ROUTINE=$$GETSRTN(810.9)_"(810.9,CSTEXL,.PACKLIST)"
 . D @ROUTINE
 ;Save information about hospital locations which are non-transportable.
 I $D(^PXRMD(810.9,IEN,44))>1 D NTHLOC^PXRMEXFI(IEN,"LOCATION LIST")
 Q
 ;
 ;==========================================
SLR(FILENUM,IEN,PACKLIST) ;Reminder list rules.
 N IND,LR,RDEF,RTERM,ROUTINE,TEMP
 D SGEN(FILENUM,IEN,.PACKLIST)
 S TEMP=^PXRM(810.4,IEN,0)
 S RTERM=$P(TEMP,U,7)
 I RTERM'="" D
 . S ROUTINE=$$GETSRTN(811.5)_"(811.5,RTERM,.PACKLIST)"
 . D @ROUTINE
 S RDEF=$P(TEMP,U,10)
 I RDEF'="" D
 . S ROUTINE=$$GETSRTN(811.9)_"(811.9,RDEF,.PACKLIST,1)"
 . D @ROUTINE
 ;If there is a sequence save the list rules.
 I '$D(^PXRM(810.4,IEN,30)) Q
 S ROUTINE=$$GETSRTN(810.4)_"(810.4,LR,.PACKLIST)"
 S IND=0
 F  S IND=+$O(^PXRM(810.4,IEN,30,IND)) Q:IND=0  D
 . S LR=$P(^PXRM(810.4,IEN,30,IND,0),U,2)
 . D @ROUTINE
 Q
 ;
 ;==========================================
SLT(FILENUM,IEN,PACKLIST) ;Lab tests
 I +IEN'=IEN S IEN=$P(IEN,";",3)
 D SGEN(FILENUM,IEN,.PACKLIST)
 Q
 ;
 ;==========================================
SODIALOG(FILENUM,IEN,PACKLIST) ;Order dialogs.
 D SGEN(FILENUM,IEN,.PACKLIST)
 ;DBIA 5446
 N CNT,OUTPUT,SUB,TYPE
 S CNT=0,SUB="ORDER DIALOG"
 S OUTPUT=$NA(^TMP($J,SUB,IEN))
 S TYPE=$P($G(^ORD(101.41,IEN,0)),U,4)
 D BEG^ORORDDSC(.OUTPUT,IEN,TYPE,.CNT)
 S CNT=CNT+1,^TMP($J,SUB,IEN,CNT)=$$REPEAT^XLFSTR("-",79)
 ;D EN^ORORDDSC(IEN,"ORDER DIALOG")
 Q
 ;
 ;==========================================
SRCG(FILENUM,IEN,PACKLIST) ;Reminder counting groups.
 N IND,ROUTINE,TIEN
 D SGEN(FILENUM,IEN,.PACKLIST)
 ;Put terms on the pack list.
 S ROUTINE=$$GETSRTN(811.5)_"(811.5,TIEN,.PACKLIST)"
 S IND=0
 F  S IND=+$O(^PXRM(810.8,IEN,10,IND)) Q:IND=0  D
 . S TIEN=$P(^PXRM(810.8,IEN,10,IND,0),U,2)
 . D @ROUTINE
 Q
 ;
 ;==========================================
SRECR(FILENUM,IEN,PACKLIST) ;Reminder extract counting rule.
 N CGIEN,IND,ROUTINE,TIEN
 D SGEN(FILENUM,IEN,.PACKLIST)
 ;Put counting groups on the pack list.
 S ROUTINE=$$GETSRTN(810.8)_"(810.8,CGIEN,.PACKLIST)"
 S IND=0
 F  S IND=+$O(^PXRM(810.7,IEN,10,IND)) Q:IND=0  D
 . S CGIEN=$P(^PXRM(810.7,IEN,10,IND,0),U,2)
 . D @ROUTINE
 Q
 ;
 ;==========================================
SRT(FILENUM,TIEN,PACKLIST) ;Reminder terms.
 N FNUM,GBL,IEN,NF,ROUTINE,SPON
 N ITEM,NUM,RIEN
 D EXISTS(FILENUM,TIEN,.PACKLIST)
 D ADD(FILENUM,TIEN,.PACKLIST,.NF)
 ;Process the finding multiple.
 S GBL=""
 F  S GBL=$O(^PXRMD(811.5,TIEN,20,"E",GBL)) Q:GBL=""  D
 . S FNUM=$$GETFNUM(GBL)
 . I FNUM=811.4 D CHKCF("^PXRMD(811.5)",TIEN,GBL,.PACKLIST)
 . S ROUTINE=$$GETSRTN(FNUM)_"(FNUM,IEN,.PACKLIST)"
 . S IEN=""
 . F  S IEN=$O(^PXRMD(811.5,TIEN,20,"E",GBL,IEN)) Q:IEN=""  D @ROUTINE
 ;Sponsor
 S SPON=+$P(^PXRMD(811.5,TIEN,100),U,2)
 I SPON>0 D SGEN(811.6,SPON,.PACKLIST)
 Q
 ;
 ;==========================================
SROC(FILENUM,ROCIEN,PACKLIST) ;Reminder Order Checks.
 ;packed order check structure up
 D SGENR(FILENUM,ROCIEN,.PACKLIST)
 N GBL,SUB,DRCL,FNUM,ITEM,OI,OLIST,RIEN,ROUTINE,TIEN,TLIST,WPNODE
 ;Process the pharmacy multiple.
 S ITEM=""
 F  S ITEM=$O(^PXD(801,ROCIEN,1.5,"B",ITEM)) Q:ITEM=""  D
 . S IEN=$P(ITEM,";"),GBL=$P(ITEM,";",2)
 . S FNUM=$$GETFNUM(GBL)
 . S ROUTINE=$$GETSRTN(FNUM)_"(FNUM,IEN,.PACKLIST)"
 . D @ROUTINE
 ;loop through rules and packed definitions or terms
 S SUB=0 F  S SUB=$O(^PXD(801,ROCIEN,3,SUB)) Q:SUB'>0  D
 .S RIEN=$P($G(^PXD(801,ROCIEN,3,SUB,0)),U) Q:RIEN'>0
 .S ROUTINE=$$GETSRTN(801.1)_"(801.1,RIEN,.PACKLIST)"
 .D @ROUTINE
 Q
 ;
 ;==========================================
SRULE(FILENUM,RULEIEN,PACKLIST) ;Reminder Order Check Rules.
 ;packed order check structure up
 D SGENR(FILENUM,RULEIEN,.PACKLIST)
 N OLIST,RIEN,ROUTINE,TIEN,TLIST
 I $D(^PXD(801.1,RULEIEN,3,4))>0 D
 .;search for TIU Objects
 .D TIUSRCH^PXRMEXU1("^PXD(801.1,",RULEIEN,",4",.OLIST,.TLIST)
 .I $D(OLIST)>0 D
 ..S ROUTINE=$$GETSRTN(8925.1)_"(8925.1,.OLIST,.PACKLIST)"
 ..D @ROUTINE K OLIST
 .K TLIST
 .;packed term up only
 S TIEN=$P($G(^PXD(801.1,RULEIEN,2)),U) I TIEN>0 D  Q
 .S ROUTINE=$$GETSRTN(811.5)_"(811.5,TIEN,.PACKLIST)"
 .D @ROUTINE
 ;packed definition up if defined
 S RIEN=$P($G(^PXD(801.1,RULEIEN,3)),U) I RIEN>0 D
 .S ROUTINE=$$GETSRTN(811.9)_"(811.9,RIEN,.PACKLIST,1)"
 .D @ROUTINE
 Q
 ;
 ;==========================================
STIUOBJ(FILENUM,OLIST,PACKLIST) ;
 N ARY,CNT,HSO,IEN,NAME,ROUTINE,TEMP
 S CNT=0 F  S CNT=$O(OLIST(CNT)) Q:CNT'>0  D
 . S NAME=OLIST(CNT)
 . ;DBIA 5447
 . S IEN=$$OBJBYNAM^TIUCHECK(.ARY,NAME) I IEN=-1 Q
 .;Do not ship non TIU/HS Objects
 . I $G(ARY(IEN,9))'["S X=$$TIU^GMTSOBJ(" D  Q
 .. D TIU^PXRMEXU5(IEN,.ARY,"TIU OBJECT")
 .. D SGEN(FILENUM,IEN,.PACKLIST)
 . D SGEN(FILENUM,IEN,.PACKLIST)
 . S TEMP=$P($G(ARY(IEN,9)),",",2)
 . S HSO=$P(TEMP,")")
 . S ROUTINE=$$GETSRTN(142.5)_"(142.5,.HSO,.PACKLIST)"
 . D @ROUTINE
 Q
 ;
 ;==========================================
STIUTEMP(FILENUM,TLIST,PACKLIST) ;
 N CNT,IEN,NAME
 S CNT=0 F  S CNT=$O(TLIST(CNT)) Q:CNT'>0  D
 .S NAME=TLIST(CNT)
 .S IEN=$O(^TIU(8927.1,"B",NAME,"")) Q:IEN'>0
 .D SGEN(FILENUM,IEN,.PACKLIST)
 Q
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPXRMEXPS   17918     printed  Sep 23, 2025@19:21:10                                                                                                                                                                                                   Page 2
PXRMEXPS  ;SLC/PKR - Packing save routines. ;02/14/2022
 +1       ;;2.0;CLINICAL REMINDERS;**12,16,18,22,24,26,45,80**;Feb 04, 2005;Build 7
 +2       ;
 +3       ;DBIA
 +4       ;3085         AUTTEDT(EDUIEN,10         
 +5       ;3083         AUTTHF(
 +6       ;5246         GMT(142.5
 +7       ;5247         GMT(142
 +8       ;5446         BEG^ORORDDSC
 +9       ;5447         $$OBJBYNAM^TIUCHECK
 +10      ;3372         ^TIU(8927.1
 +11      ;3110         $P(^ORD(101.41,IEN,0),U,4)
 +12      ;==========================================
ADD(FILENUM,IEN,PACKLIST,NF) ;
 +1        SET NF=+$ORDER(PACKLIST(FILENUM,"IEN"),-1)+1
 +2        SET PACKLIST(FILENUM,NF)=IEN
 +3        SET PACKLIST(FILENUM,"IEN",IEN)=NF
 +4        QUIT 
 +5       ;
 +6       ;==========================================
CHKCF(ROOT,TOPIEN,GBL,PACKLIST) ;
 +1        NEW IEN,NAME,NUM,PARM,RIEN,ROUTINE
 +2        SET IEN=""
 +3        FOR 
               SET IEN=$ORDER(@ROOT@(TOPIEN,20,"E",GBL,IEN))
               if IEN=""
                   QUIT 
               Begin DoDot:1
 +4                IF $PIECE($GET(^PXRMD(811.4,IEN,0)),U,1)'="VA-REMINDER DEFINITION"
                       QUIT 
 +5                SET NUM=$ORDER(@ROOT@(TOPIEN,20,"E",GBL,IEN,""))
                   if NUM'>0
                       QUIT 
 +6                SET PARM=$PIECE($GET(@ROOT@(TOPIEN,20,NUM,15)),U,1)
 +7                SET NAME=$PIECE(PARM,U,1)
 +8                SET RIEN=$ORDER(^PXD(811.9,"B",NAME,""))
                   if RIEN'>0
                       QUIT 
 +9                SET ROUTINE=$$GETSRTN(811.9)_"(811.9,RIEN,.PACKLIST,1)"
 +10               DO @ROUTINE
               End DoDot:1
 +11       QUIT 
 +12      ;
 +13      ;==========================================
EXISTS(FILENUM,IEN,PACKLIST) ;If the entry already exists remove it
 +1       ;and keep only the higher entry.
 +2        IF '$DATA(PACKLIST(FILENUM,"IEN",IEN))
               QUIT 
 +3        NEW NUM
 +4        SET NUM=PACKLIST(FILENUM,"IEN",IEN)
 +5        KILL PACKLIST(FILENUM,NUM)
 +6        QUIT 
 +7       ;
 +8       ;==========================================
GEDSUB(EDUIEN,NSUB,LIST) ;Build the recursive list of education topic
 +1       ;subtopics.
 +2       ;DBIA #3085
 +3        NEW IND,SUBIEN
 +4        SET IND=0
 +5        FOR 
               SET IND=+$ORDER(^AUTTEDT(EDUIEN,10,IND))
               if IND=0
                   QUIT 
               Begin DoDot:1
 +6                SET NSUB=NSUB+1
 +7                SET SUBIEN=$PIECE(^AUTTEDT(EDUIEN,10,IND,0),U,1)
 +8                SET LIST(NSUB)=SUBIEN
 +9                DO GEDSUB(SUBIEN,.NSUB,.LIST)
               End DoDot:1
 +10       QUIT 
 +11      ;
 +12      ;==========================================
GETFNUM(GBL) ;Return the file number for a global.
 +1        SET GBL="^"_GBL_"0)"
 +2        QUIT +$PIECE(@GBL,U,2)
 +3       ;
 +4       ;==========================================
GETSRTN(FILENUM) ;Return the save routine according to the file number.
 +1        IF FILENUM=50
               QUIT "SGEN^PXRMEXPS"
 +2        IF FILENUM=50.6
               QUIT "SGEN^PXRMEXPS"
 +3        IF FILENUM=50.605
               QUIT "SGEN^PXRMEXPS"
 +4        IF FILENUM=50.68
               QUIT "SGEN^PXRMEXPS"
 +5        IF FILENUM=60
               QUIT "SLT^PXRMEXPS"
 +6        IF FILENUM=71
               QUIT "SGEN^PXRMEXPS"
 +7        IF FILENUM=79.2
               QUIT "SGEN^PXRMEXPS"
 +8        IF FILENUM=80
               QUIT "NOSAVE^PXRMEXPS"
 +9        IF FILENUM=80.1
               QUIT "NOSAVE^PXRMEXPS"
 +10       IF FILENUM=81
               QUIT "NOSAVE^PXRMEXPS"
 +11       IF FILENUM=101.41
               QUIT "SODIALOG^PXRMEXPS"
 +12       IF FILENUM=101.43
               QUIT "SGEN^PXRMEXPS"
 +13       IF FILENUM=120.51
               QUIT "SGEN^PXRMEXPS"
 +14       IF FILENUM=142
               QUIT "SHST^PXRMEXPS"
 +15       IF FILENUM=142.1
               QUIT "SGEN^PXRMEXPS"
 +16       IF FILENUM=142.5
               QUIT "SHSO^PXRMEXPS"
 +17       IF FILENUM=601.71
               QUIT "SGEN^PXRMEXPS"
 +18       IF FILENUM=790.404
               QUIT "SGEN^PXRMEXPS"
 +19       IF FILENUM=801
               QUIT "SROC^PXRMEXPS"
 +20       IF FILENUM=801.1
               QUIT "SRULE^PXRMEXPS"
 +21       IF FILENUM=801.41
               QUIT "SDIALOG^PXRMEXPS"
 +22       IF FILENUM=801.46
               QUIT "SGEN^PXRMEXPS"
 +23       IF FILENUM=801.47
               QUIT "SDIALFUN^PXRMEXPS"
 +24       IF FILENUM=801.48
               QUIT "SDIALLNK^PXRMEXPS"
 +25       IF FILENUM=810.2
               QUIT "SEDEF^PXRMEXPS"
 +26       IF FILENUM=810.4
               QUIT "SLR^PXRMEXPS"
 +27       IF FILENUM=810.7
               QUIT "SRECR^PXRMEXPS"
 +28       IF FILENUM=810.8
               QUIT "SRCG^PXRMEXPS"
 +29       IF FILENUM=810.9
               QUIT "SLL^PXRMEXPS"
 +30       IF FILENUM=811.2
               QUIT "SGENR^PXRMEXPS"
 +31       IF FILENUM=811.4
               QUIT "SCF^PXRMEXPS"
 +32       IF FILENUM=811.5
               QUIT "SRT^PXRMEXPS"
 +33       IF FILENUM=811.6
               QUIT "SGEN^PXRMEXPS"
 +34       IF FILENUM=811.9
               QUIT "SDEF^PXRMEXPS"
 +35       IF FILENUM=8925.1
               QUIT "STIUOBJ^PXRMEXPS"
 +36       IF FILENUM=8927.1
               QUIT "STIUTEMP^PXRMEXPS"
 +37       IF FILENUM=9999999.09
               QUIT "SED^PXRMEXPS"
 +38       IF FILENUM=9999999.14
               QUIT "SGEN^PXRMEXPS"
 +39       IF FILENUM=9999999.15
               QUIT "SGEN^PXRMEXPS"
 +40       IF FILENUM=9999999.28
               QUIT "SGEN^PXRMEXPS"
 +41       IF FILENUM=9999999.64
               QUIT "SHF^PXRMEXPS"
 +42       QUIT "NORTN^PXRMEXPS"
 +43      ;
 +44      ;==========================================
NORTN(FILENUM,IEN,PACKLIST) ;Don't have a routine for this file number.
 +1        SET NF=+$ORDER(PACKLIST(FILENUM,"IEN"),-1)+1
 +2        SET PACKLIST(FILENUM,NF)=IEN
 +3        SET PACKLIST(FILENUM,"IEN",IEN)=NF
 +4        SET PACKLIST(FILENUM,"ERROR",IEN)="No packing routine for file number "_FILENUM_"."
 +5        QUIT 
 +6       ;
 +7       ;==========================================
NOSAVE(FILENUM,IEN,PACKLIST) ;Don't do anything for this file number.
 +1        QUIT 
 +2       ;
 +3       ;==========================================
SCF(FILENUM,IEN,PACKLIST) ;Reminder computed findings.
 +1        NEW CFRTN
 +2       ;Add the computed finding file entry.
 +3        DO SGENR(FILENUM,IEN,.PACKLIST)
 +4        SET CFRTN=$PIECE(^PXRMD(811.4,IEN,0),U,2)
 +5       ;Add the routine; mark routines with file number 0.
 +6        DO SGEN(0,CFRTN,.PACKLIST)
 +7        QUIT 
 +8       ;
 +9       ;==========================================
SDEF(FILENUM,RIEN,PACKLIST,NODIALOG) ;Reminder definitions.
 +1        NEW DIALOG,ENODE,EO,FINDING,FINUM,FNUM,GBL,IEN,NF,ROUTINE,SPON
 +2        DO SGENR(FILENUM,RIEN,.PACKLIST)
 +3       ;Process the finding multiple.
 +4        SET FINUM=0
 +5        FOR 
               SET FINUM=+$ORDER(^PXD(811.9,RIEN,20,FINUM))
               if FINUM=0
                   QUIT 
               Begin DoDot:1
 +6                SET FINDING=$PIECE(^PXD(811.9,RIEN,20,FINUM,0),U,1)
 +7                SET IEN=$PIECE(FINDING,";",1)
 +8                SET GBL=$PIECE(FINDING,";",2)
 +9                SET FNUM=$$GETFNUM(GBL)
 +10               IF FNUM=811.4
                       DO CHKCF("^PXD(811.9)",RIEN,GBL,.PACKLIST)
 +11               SET ROUTINE=$$GETSRTN(FNUM)_"(FNUM,IEN,.PACKLIST)"
 +12               DO @ROUTINE
               End DoDot:1
 +13      ;Dialog
 +14       IF +$GET(NODIALOG)=1
               QUIT 
 +15       SET DIALOG=+$GET(^PXD(811.9,RIEN,51))
 +16       IF DIALOG>0
               IF '$DATA(PACKLIST(801.41,"IEN",DIALOG))
                   DO SDIALOG(801.41,DIALOG,.PACKLIST)
 +17       QUIT 
 +18      ;
SDIALFUN(FILENUM,IEN,PACKLIST) ; Dialog Function File
 +1        DO SGENR(FILENUM,IEN,.PACKLIST)
 +2        QUIT 
 +3       ;
SDIALLNK(FILENUM,IEN,PACKLIST) ; Dialog Link File
 +1        DO SGENR(FILENUM,IEN,.PACKLIST)
 +2        NEW FUNC,ROUTINE
 +3        SET FUNC=$PIECE($GET(^PXRMD(801.48,IEN,0)),U,4)
           if FUNC'>0
               QUIT 
 +4        SET ROUTINE=$$GETSRTN(801.47)_"(801.47,FUNC,.PACKLIST)"
 +5        DO @ROUTINE
 +6        QUIT 
 +7       ;
 +8       ;==========================================
SDIALOG(FILENUM,DIEN,PACKLIST) ;Reminder dialogs.
 +1        IF DIEN'>0
               QUIT 
 +2        NEW EVALITEM,IDX,IEN,IND,IND1,FI,FNUM,GBL,MHT,OI,OLIST,REG,ROUTINE,SEQ,TEMP,TERM,TLIST
 +3        DO SGENR(FILENUM,DIEN,.PACKLIST)
 +4       ;Check for a finding item.
 +5        SET TEMP=$GET(^PXRMD(801.41,DIEN,1))
 +6        SET FI=$PIECE(TEMP,U,5)
 +7        IF FI'=""
               Begin DoDot:1
 +8                SET IEN=$PIECE(FI,";",1)
 +9                SET GBL=$PIECE(FI,";",2)
 +10               SET FNUM=$$GETFNUM(GBL)
 +11               SET ROUTINE=$$GETSRTN(FNUM)_"(FNUM,IEN,.PACKLIST)"
 +12               DO @ROUTINE
               End DoDot:1
 +13      ;Check for an orderable item.
 +14       SET OI=$PIECE(TEMP,U,7)
 +15       IF OI'=""
               Begin DoDot:1
 +16               SET ROUTINE=$$GETSRTN(101.43)_"(101.43,OI,.PACKLIST)"
 +17               DO @ROUTINE
               End DoDot:1
 +18      ;Check for additional findings.
 +19       SET IND=0
 +20       FOR 
               SET IND=+$ORDER(^PXRMD(801.41,DIEN,3,IND))
               if IND=0
                   QUIT 
               Begin DoDot:1
 +21               SET FI=$PIECE(^PXRMD(801.41,DIEN,3,IND,0),U,1)
 +22               SET IEN=$PIECE(FI,";",1)
 +23               SET GBL=$PIECE(FI,";",2)
 +24               SET FNUM=$$GETFNUM(GBL)
 +25               SET ROUTINE=$$GETSRTN(FNUM)_"(FNUM,IEN,.PACKLIST)"
 +26               DO @ROUTINE
               End DoDot:1
 +27      ;Check word processing fields for TIU Object and Template Fields
 +28       DO TIUSRCH^PXRMEXU1("^PXRMD(801.41,",DIEN,25,.OLIST,.TLIST)
 +29       IF $DATA(OLIST)>0
               Begin DoDot:1
 +30               SET ROUTINE=$$GETSRTN(8925.1)_"(8925.1,.OLIST,.PACKLIST)"
 +31               DO @ROUTINE
                   KILL OLIST
               End DoDot:1
 +32       IF $DATA(TLIST)>0
               Begin DoDot:1
 +33               SET ROUTINE=$$GETSRTN(8927.1)_"(8927.1,.TLIST,.PACKLIST)"
 +34               DO @ROUTINE
                   KILL TLIST
               End DoDot:1
 +35       DO TIUSRCH^PXRMEXU1("^PXRMD(801.41,",DIEN,35,.OLIST,.TLIST)
 +36       IF $DATA(OLIST)>0
               Begin DoDot:1
 +37               SET ROUTINE=$$GETSRTN(8925.1)_"(8925.1,.OLIST,.PACKLIST)"
 +38               DO @ROUTINE
                   KILL OLIST
               End DoDot:1
 +39       IF $DATA(TLIST)>0
               Begin DoDot:1
 +40               SET ROUTINE=$$GETSRTN(8927.1)_"(8927.1,.TLIST,.PACKLIST)"
 +41               DO @ROUTINE
                   KILL TLIST
               End DoDot:1
 +42      ;Check the components multiple for elements.
 +43       IF $DATA(^PXRMD(801.41,DIEN,10))
               Begin DoDot:1
 +44               SET ROUTINE=$$GETSRTN(801.41)_"(801.41,IEN,.PACKLIST)"
 +45               SET IND=0
 +46               FOR 
                       SET IND=+$ORDER(^PXRMD(801.41,DIEN,10,IND))
                       if IND=0
                           QUIT 
                       Begin DoDot:2
 +47                       SET IEN=$PIECE(^PXRMD(801.41,DIEN,10,IND,0),U,2)
                           if +$GET(IEN)'>0
                               QUIT 
 +48                       SET ^TMP($JOB,"PXRM DIALOG CHILDREN",IEN)=""
 +49                       DO @ROUTINE
 +50                       SET IEN=$PIECE(^PXRMD(801.41,DIEN,10,IND,0),U,10)
                           IF +$GET(IEN)'>0
                               QUIT 
 +51                       DO @ROUTINE
                       End DoDot:2
               End DoDot:1
 +52      ;Check for a term and a replacement element/group.
 +53       IF $DATA(^PXRMD(801.41,DIEN,"BL"))
               Begin DoDot:1
 +54               SET SEQ=0
                   FOR 
                       SET SEQ=$ORDER(^PXRMD(801.41,DIEN,"BL","B",SEQ))
                       if SEQ'>0
                           QUIT 
                       Begin DoDot:2
 +55                       SET IDX=$ORDER(^PXRMD(801.41,DIEN,"BL","B",SEQ,""))
                           if IDX'>0
                               QUIT 
 +56                       SET TEMP=$GET(^PXRMD(801.41,DIEN,"BL",IDX,0))
 +57                       SET EVALITEM=$PIECE(TEMP,U,2)
 +58                       IF EVALITEM["811.9"
                               Begin DoDot:3
 +59                               SET ROUTINE=$$GETSRTN(811.9)_"(811.9,+EVALITEM,.PACKLIST,1)"
 +60                               DO @ROUTINE
                               End DoDot:3
 +61                       IF EVALITEM["811.5"
                               Begin DoDot:3
 +62                               SET ROUTINE=$$GETSRTN(811.5)_"(811.5,+EVALITEM,.PACKLIST)"
 +63                               DO @ROUTINE
                               End DoDot:3
 +64                       SET REG=$PIECE(TEMP,U,5)
 +65                       IF REG>0
                               Begin DoDot:3
 +66                               SET ^TMP($JOB,"PXRM DIALOG CHILDREN",REG)=""
 +67                               SET ROUTINE=$$GETSRTN(801.41)_"(801.41,REG,.PACKLIST)"
 +68                               DO @ROUTINE
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +69      ;Check for a mental health test.
 +70       SET MHT=$PIECE($GET(^PXRMD(801.41,DIEN,50)),U,1)
 +71       IF MHT'=""
               Begin DoDot:1
 +72               SET ROUTINE=$$GETSRTN(601.71)_"(601.71,MHT,.PACKLIST)"
 +73               DO @ROUTINE
               End DoDot:1
 +74      ;Check for result groups.
 +75       IF $DATA(^PXRMD(801.41,DIEN,51))
               Begin DoDot:1
 +76               SET IND=0
 +77               FOR 
                       SET IND=+$ORDER(^PXRMD(801.41,DIEN,51,IND))
                       if IND=0
                           QUIT 
                       Begin DoDot:2
 +78                       SET IEN=$PIECE(^PXRMD(801.41,DIEN,51,IND,0),U,1)
 +79                       SET ROUTINE=$$GETSRTN(801.41)_"(801.41,IEN,.PACKLIST)"
 +80                       DO @ROUTINE
 +81      ;S IEN=$P(^PXRMD(801.41,DIEN,51,IND,0),U,2) I +$G(IEN)'>0 Q
 +82      ;D @ROUTINE
 +83      ; check for linking on result group
 +84                       SET IND1=0
                           FOR 
                               SET IND1=$ORDER(^PXRMD(801.41,DIEN,51,IND,1,IND1))
                               if IND1'>0
                                   QUIT 
                               Begin DoDot:3
 +85                               SET IEN=$PIECE($GET(^PXRMD(801.41,DIEN,51,IND,1,IND1,0)),U,2)
                                   if IEN'>0
                                       QUIT 
 +86                               SET ROUTINE=$$GETSRTN(801.48)_"(801.48,IEN,.PACKLIST)"
 +87                               DO @ROUTINE
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +88      ;Check for linking
 +89       SET IND=0
           FOR 
               SET IND=$ORDER(^PXRMD(801.41,DIEN,10,IND))
               if IND'>0
                   QUIT 
               Begin DoDot:1
 +90               SET IEN=$PIECE($GET(^PXRMD(801.41,DIEN,10,IND,"LINK")),U)
                   if IEN'>0
                       QUIT 
 +91               SET ROUTINE=$$GETSRTN(801.48)_"(801.48,IEN,.PACKLIST)"
 +92               DO @ROUTINE
               End DoDot:1
 +93       QUIT 
 +94      ;
 +95      ;==========================================
SED(FILENUM,IEN,PACKLIST) ;Education topics.
 +1        NEW IND,NF,NSUB,SUBLIST
 +2        DO EXISTS(FILENUM,IEN,.PACKLIST)
 +3        DO ADD(FILENUM,IEN,.PACKLIST,.NF)
 +4        SET NSUB=0
 +5       ;Get all the subtopics.
 +6        DO GEDSUB(IEN,.NSUB,.SUBLIST)
 +7        FOR IND=1:1:NSUB
               Begin DoDot:1
 +8                DO EXISTS(FILENUM,SUBLIST(IND),.PACKLIST)
 +9                SET NF=NF+1
 +10               SET PACKLIST(FILENUM,NF)=SUBLIST(IND)
 +11               SET PACKLIST(FILENUM,"IEN",SUBLIST(IND))=NF
               End DoDot:1
 +12       QUIT 
 +13      ;
 +14      ;==========================================
SEDEF(FILENUM,IEN,PACKLIST) ;Reminder extract definitions.
 +1        NEW CR,CRRTN,IND,JND,LRRTN,LRS,RDEF,RDEFRTN,TEMP
 +2        DO SGEN(FILENUM,IEN,.PACKLIST)
 +3       ;Initialize the save routines.
 +4        SET LRRTN=$$GETSRTN(810.4)_"(810.4,LRS,.PACKLIST)"
 +5        SET CRRTN=$$GETSRTN(810.7)_"(810.7,CR,.PACKLIST)"
 +6        SET RDEFRTN=$$GETSRTN(811.9)_"(811.9,RDEF,.PACKLIST,1)"
 +7       ;Go through the extract sequence.
 +8        SET IND=0
 +9        FOR 
               SET IND=+$ORDER(^PXRM(810.2,IEN,10,IND))
               if IND=0
                   QUIT 
               Begin DoDot:1
 +10               SET LRS=$PIECE(^PXRM(810.2,IEN,10,IND,0),U,2)
 +11               DO @LRRTN
 +12      ;Go through the reminders and counting rules.
 +13               SET JND=0
 +14               FOR 
                       SET JND=+$ORDER(^PXRM(810.2,IEN,10,IND,10,JND))
                       if JND=0
                           QUIT 
                       Begin DoDot:2
 +15                       SET TEMP=^PXRM(810.2,IEN,10,IND,10,JND,0)
 +16                       SET RDEF=$PIECE(TEMP,U,2)
 +17                       IF RDEF'=""
                               DO @RDEFRTN
 +18                       SET CR=$PIECE(TEMP,U,3)
 +19                       IF CR'=""
                               DO @CRRTN
                       End DoDot:2
               End DoDot:1
 +20       QUIT 
 +21      ;
 +22      ;==========================================
SGEN(FILENUM,IEN,PACKLIST) ;General save routine, used for everything that
 +1       ;does not require special handling.
 +2        NEW NF
 +3        DO EXISTS(FILENUM,IEN,.PACKLIST)
 +4        DO ADD(FILENUM,IEN,.PACKLIST,.NF)
 +5        QUIT 
 +6       ;
 +7       ;==========================================
SGENR(FILENUM,IEN,PACKLIST) ;General reminder global save routine, used for
 +1       ;reminder globals that do not require special handling.
 +2        NEW SPON
 +3        DO SGEN(FILENUM,IEN,.PACKLIST)
 +4        SET SPON=+$$GET1^DIQ(FILENUM,IEN,101,"I")
 +5        IF SPON>0
               DO SGEN(811.6,SPON,.PACKLIST)
 +6        QUIT 
 +7       ;
 +8       ;==========================================
SHF(FILENUM,IEN,PACKLIST) ;Health factors.
 +1        NEW CAT,HF,NF
 +2       ;All health factor references covered by DBIA #3083.
 +3       ;If the health factor is a category then it has to be coming from
 +4       ;a health summary so include all the health factors in the category.
 +5        IF $PIECE(^AUTTHF(IEN,0),U,10)="C"
               Begin DoDot:1
 +6                SET CAT=1
                   SET HF=0
 +7                FOR 
                       SET HF=$ORDER(^AUTTHF("AC",IEN,HF))
                       if HF'>0
                           QUIT 
                       Begin DoDot:2
 +8                        DO EXISTS(FILENUM,HF,.PACKLIST)
 +9                        DO ADD(FILENUM,HF,.PACKLIST,.NF)
                       End DoDot:2
               End DoDot:1
 +10       DO EXISTS(FILENUM,IEN,.PACKLIST)
 +11       DO ADD(FILENUM,IEN,.PACKLIST,.NF)
 +12       IF $GET(CAT)
               QUIT 
 +13      ;For a regular health factor make sure the category is on the list.
 +14       SET CAT=$PIECE(^AUTTHF(IEN,0),U,3)
 +15       DO EXISTS(FILENUM,CAT,.PACKLIST)
 +16       SET NF=NF+1
 +17       SET PACKLIST(FILENUM,NF)=CAT
 +18       SET PACKLIST(FILENUM,"IEN",CAT)=NF
 +19       QUIT 
 +20      ;
 +21      ;==========================================
SHSO(FILENUM,IEN,PACKLIST) ;Health summary object.
 +1        NEW HST
 +2        DO SGEN(FILENUM,IEN,.PACKLIST)
 +3        SET HST=$PIECE($GET(^GMT(142.5,IEN,0)),U,3)
 +4        SET ROUTINE=$$GETSRTN(142)_"(142,HST,.PACKLIST)"
 +5        DO @ROUTINE
 +6        QUIT 
 +7       ;
 +8       ;==========================================
SHST(FILENUM,IEN,PACKLIST) ;Health Summary Type
 +1        NEW CNT,FNUM,GBL,HSC,ITEM,NODE,ROUTINE,SEL
 +2        DO SGEN(FILENUM,IEN,.PACKLIST)
 +3        SET CNT=0
           FOR 
               SET CNT=$ORDER(^GMT(142,IEN,1,CNT))
               if CNT'>0
                   QUIT 
               Begin DoDot:1
 +4                SET HSC=$PIECE($GET(^GMT(142,IEN,1,CNT,0)),U,2)
 +5                SET ROUTINE=$$GETSRTN(142.1)_"(142.1,HSC,.PACKLIST)"
 +6                DO @ROUTINE
 +7       ;Loop through selection item, variable pointer
 +8                SET SEL=0
                   FOR 
                       SET SEL=$ORDER(^GMT(142,IEN,1,CNT,1,SEL))
                       if SEL'>0
                           QUIT 
                       Begin DoDot:2
 +9                        SET NODE=$PIECE($GET(^GMT(142,IEN,1,CNT,1,SEL,0)),U)
 +10                       IF NODE'=""
                               Begin DoDot:3
 +11                               SET ITEM=$PIECE(NODE,";",1)
 +12                               SET GBL=$PIECE(NODE,";",2)
 +13                               SET FNUM=$$GETFNUM(GBL)
 +14                               SET ROUTINE=$$GETSRTN(FNUM)_"(FNUM,ITEM,.PACKLIST)"
 +15                               IF ROUTINE="NOROUTINE"
                                       QUIT 
 +16                               DO @ROUTINE
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +17       QUIT 
 +18      ;
 +19      ;==========================================
SLL(FILENUM,IEN,PACKLIST) ;Reminder location lists.
 +1        NEW CSTEXL,IND,ROUTINE
 +2        DO SGEN(FILENUM,IEN,.PACKLIST)
 +3       ;If CREDIT STOPS TO EXCLUDE (LIST) has been used put it on the packing
 +4       ;list.
 +5        SET IND=0
 +6        FOR 
               SET IND=+$ORDER(^PXRMD(810.9,IEN,40.7,IND))
               if IND=0
                   QUIT 
               Begin DoDot:1
 +7                SET CSTEXL=$GET(^PXRMD(810.9,IEN,40.7,IND,2))
 +8                IF CSTEXL=""
                       QUIT 
 +9                SET ROUTINE=$$GETSRTN(810.9)_"(810.9,CSTEXL,.PACKLIST)"
 +10               DO @ROUTINE
               End DoDot:1
 +11      ;Save information about hospital locations which are non-transportable.
 +12       IF $DATA(^PXRMD(810.9,IEN,44))>1
               DO NTHLOC^PXRMEXFI(IEN,"LOCATION LIST")
 +13       QUIT 
 +14      ;
 +15      ;==========================================
SLR(FILENUM,IEN,PACKLIST) ;Reminder list rules.
 +1        NEW IND,LR,RDEF,RTERM,ROUTINE,TEMP
 +2        DO SGEN(FILENUM,IEN,.PACKLIST)
 +3        SET TEMP=^PXRM(810.4,IEN,0)
 +4        SET RTERM=$PIECE(TEMP,U,7)
 +5        IF RTERM'=""
               Begin DoDot:1
 +6                SET ROUTINE=$$GETSRTN(811.5)_"(811.5,RTERM,.PACKLIST)"
 +7                DO @ROUTINE
               End DoDot:1
 +8        SET RDEF=$PIECE(TEMP,U,10)
 +9        IF RDEF'=""
               Begin DoDot:1
 +10               SET ROUTINE=$$GETSRTN(811.9)_"(811.9,RDEF,.PACKLIST,1)"
 +11               DO @ROUTINE
               End DoDot:1
 +12      ;If there is a sequence save the list rules.
 +13       IF '$DATA(^PXRM(810.4,IEN,30))
               QUIT 
 +14       SET ROUTINE=$$GETSRTN(810.4)_"(810.4,LR,.PACKLIST)"
 +15       SET IND=0
 +16       FOR 
               SET IND=+$ORDER(^PXRM(810.4,IEN,30,IND))
               if IND=0
                   QUIT 
               Begin DoDot:1
 +17               SET LR=$PIECE(^PXRM(810.4,IEN,30,IND,0),U,2)
 +18               DO @ROUTINE
               End DoDot:1
 +19       QUIT 
 +20      ;
 +21      ;==========================================
SLT(FILENUM,IEN,PACKLIST) ;Lab tests
 +1        IF +IEN'=IEN
               SET IEN=$PIECE(IEN,";",3)
 +2        DO SGEN(FILENUM,IEN,.PACKLIST)
 +3        QUIT 
 +4       ;
 +5       ;==========================================
SODIALOG(FILENUM,IEN,PACKLIST) ;Order dialogs.
 +1        DO SGEN(FILENUM,IEN,.PACKLIST)
 +2       ;DBIA 5446
 +3        NEW CNT,OUTPUT,SUB,TYPE
 +4        SET CNT=0
           SET SUB="ORDER DIALOG"
 +5        SET OUTPUT=$NAME(^TMP($JOB,SUB,IEN))
 +6        SET TYPE=$PIECE($GET(^ORD(101.41,IEN,0)),U,4)
 +7        DO BEG^ORORDDSC(.OUTPUT,IEN,TYPE,.CNT)
 +8        SET CNT=CNT+1
           SET ^TMP($JOB,SUB,IEN,CNT)=$$REPEAT^XLFSTR("-",79)
 +9       ;D EN^ORORDDSC(IEN,"ORDER DIALOG")
 +10       QUIT 
 +11      ;
 +12      ;==========================================
SRCG(FILENUM,IEN,PACKLIST) ;Reminder counting groups.
 +1        NEW IND,ROUTINE,TIEN
 +2        DO SGEN(FILENUM,IEN,.PACKLIST)
 +3       ;Put terms on the pack list.
 +4        SET ROUTINE=$$GETSRTN(811.5)_"(811.5,TIEN,.PACKLIST)"
 +5        SET IND=0
 +6        FOR 
               SET IND=+$ORDER(^PXRM(810.8,IEN,10,IND))
               if IND=0
                   QUIT 
               Begin DoDot:1
 +7                SET TIEN=$PIECE(^PXRM(810.8,IEN,10,IND,0),U,2)
 +8                DO @ROUTINE
               End DoDot:1
 +9        QUIT 
 +10      ;
 +11      ;==========================================
SRECR(FILENUM,IEN,PACKLIST) ;Reminder extract counting rule.
 +1        NEW CGIEN,IND,ROUTINE,TIEN
 +2        DO SGEN(FILENUM,IEN,.PACKLIST)
 +3       ;Put counting groups on the pack list.
 +4        SET ROUTINE=$$GETSRTN(810.8)_"(810.8,CGIEN,.PACKLIST)"
 +5        SET IND=0
 +6        FOR 
               SET IND=+$ORDER(^PXRM(810.7,IEN,10,IND))
               if IND=0
                   QUIT 
               Begin DoDot:1
 +7                SET CGIEN=$PIECE(^PXRM(810.7,IEN,10,IND,0),U,2)
 +8                DO @ROUTINE
               End DoDot:1
 +9        QUIT 
 +10      ;
 +11      ;==========================================
SRT(FILENUM,TIEN,PACKLIST) ;Reminder terms.
 +1        NEW FNUM,GBL,IEN,NF,ROUTINE,SPON
 +2        NEW ITEM,NUM,RIEN
 +3        DO EXISTS(FILENUM,TIEN,.PACKLIST)
 +4        DO ADD(FILENUM,TIEN,.PACKLIST,.NF)
 +5       ;Process the finding multiple.
 +6        SET GBL=""
 +7        FOR 
               SET GBL=$ORDER(^PXRMD(811.5,TIEN,20,"E",GBL))
               if GBL=""
                   QUIT 
               Begin DoDot:1
 +8                SET FNUM=$$GETFNUM(GBL)
 +9                IF FNUM=811.4
                       DO CHKCF("^PXRMD(811.5)",TIEN,GBL,.PACKLIST)
 +10               SET ROUTINE=$$GETSRTN(FNUM)_"(FNUM,IEN,.PACKLIST)"
 +11               SET IEN=""
 +12               FOR 
                       SET IEN=$ORDER(^PXRMD(811.5,TIEN,20,"E",GBL,IEN))
                       if IEN=""
                           QUIT 
                       DO @ROUTINE
               End DoDot:1
 +13      ;Sponsor
 +14       SET SPON=+$PIECE(^PXRMD(811.5,TIEN,100),U,2)
 +15       IF SPON>0
               DO SGEN(811.6,SPON,.PACKLIST)
 +16       QUIT 
 +17      ;
 +18      ;==========================================
SROC(FILENUM,ROCIEN,PACKLIST) ;Reminder Order Checks.
 +1       ;packed order check structure up
 +2        DO SGENR(FILENUM,ROCIEN,.PACKLIST)
 +3        NEW GBL,SUB,DRCL,FNUM,ITEM,OI,OLIST,RIEN,ROUTINE,TIEN,TLIST,WPNODE
 +4       ;Process the pharmacy multiple.
 +5        SET ITEM=""
 +6        FOR 
               SET ITEM=$ORDER(^PXD(801,ROCIEN,1.5,"B",ITEM))
               if ITEM=""
                   QUIT 
               Begin DoDot:1
 +7                SET IEN=$PIECE(ITEM,";")
                   SET GBL=$PIECE(ITEM,";",2)
 +8                SET FNUM=$$GETFNUM(GBL)
 +9                SET ROUTINE=$$GETSRTN(FNUM)_"(FNUM,IEN,.PACKLIST)"
 +10               DO @ROUTINE
               End DoDot:1
 +11      ;loop through rules and packed definitions or terms
 +12       SET SUB=0
           FOR 
               SET SUB=$ORDER(^PXD(801,ROCIEN,3,SUB))
               if SUB'>0
                   QUIT 
               Begin DoDot:1
 +13               SET RIEN=$PIECE($GET(^PXD(801,ROCIEN,3,SUB,0)),U)
                   if RIEN'>0
                       QUIT 
 +14               SET ROUTINE=$$GETSRTN(801.1)_"(801.1,RIEN,.PACKLIST)"
 +15               DO @ROUTINE
               End DoDot:1
 +16       QUIT 
 +17      ;
 +18      ;==========================================
SRULE(FILENUM,RULEIEN,PACKLIST) ;Reminder Order Check Rules.
 +1       ;packed order check structure up
 +2        DO SGENR(FILENUM,RULEIEN,.PACKLIST)
 +3        NEW OLIST,RIEN,ROUTINE,TIEN,TLIST
 +4        IF $DATA(^PXD(801.1,RULEIEN,3,4))>0
               Begin DoDot:1
 +5       ;search for TIU Objects
 +6                DO TIUSRCH^PXRMEXU1("^PXD(801.1,",RULEIEN,",4",.OLIST,.TLIST)
 +7                IF $DATA(OLIST)>0
                       Begin DoDot:2
 +8                        SET ROUTINE=$$GETSRTN(8925.1)_"(8925.1,.OLIST,.PACKLIST)"
 +9                        DO @ROUTINE
                           KILL OLIST
                       End DoDot:2
 +10               KILL TLIST
 +11      ;packed term up only
               End DoDot:1
 +12       SET TIEN=$PIECE($GET(^PXD(801.1,RULEIEN,2)),U)
           IF TIEN>0
               Begin DoDot:1
 +13               SET ROUTINE=$$GETSRTN(811.5)_"(811.5,TIEN,.PACKLIST)"
 +14               DO @ROUTINE
               End DoDot:1
               QUIT 
 +15      ;packed definition up if defined
 +16       SET RIEN=$PIECE($GET(^PXD(801.1,RULEIEN,3)),U)
           IF RIEN>0
               Begin DoDot:1
 +17               SET ROUTINE=$$GETSRTN(811.9)_"(811.9,RIEN,.PACKLIST,1)"
 +18               DO @ROUTINE
               End DoDot:1
 +19       QUIT 
 +20      ;
 +21      ;==========================================
STIUOBJ(FILENUM,OLIST,PACKLIST) ;
 +1        NEW ARY,CNT,HSO,IEN,NAME,ROUTINE,TEMP
 +2        SET CNT=0
           FOR 
               SET CNT=$ORDER(OLIST(CNT))
               if CNT'>0
                   QUIT 
               Begin DoDot:1
 +3                SET NAME=OLIST(CNT)
 +4       ;DBIA 5447
 +5                SET IEN=$$OBJBYNAM^TIUCHECK(.ARY,NAME)
                   IF IEN=-1
                       QUIT 
 +6       ;Do not ship non TIU/HS Objects
 +7                IF $GET(ARY(IEN,9))'["S X=$$TIU^GMTSOBJ("
                       Begin DoDot:2
 +8                        DO TIU^PXRMEXU5(IEN,.ARY,"TIU OBJECT")
 +9                        DO SGEN(FILENUM,IEN,.PACKLIST)
                       End DoDot:2
                       QUIT 
 +10               DO SGEN(FILENUM,IEN,.PACKLIST)
 +11               SET TEMP=$PIECE($GET(ARY(IEN,9)),",",2)
 +12               SET HSO=$PIECE(TEMP,")")
 +13               SET ROUTINE=$$GETSRTN(142.5)_"(142.5,.HSO,.PACKLIST)"
 +14               DO @ROUTINE
               End DoDot:1
 +15       QUIT 
 +16      ;
 +17      ;==========================================
STIUTEMP(FILENUM,TLIST,PACKLIST) ;
 +1        NEW CNT,IEN,NAME
 +2        SET CNT=0
           FOR 
               SET CNT=$ORDER(TLIST(CNT))
               if CNT'>0
                   QUIT 
               Begin DoDot:1
 +3                SET NAME=TLIST(CNT)
 +4                SET IEN=$ORDER(^TIU(8927.1,"B",NAME,""))
                   if IEN'>0
                       QUIT 
 +5                DO SGEN(FILENUM,IEN,.PACKLIST)
               End DoDot:1
 +6        QUIT 
 +7       ;