Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: AUPNMCDF

AUPNMCDF.m

Go to the documentation of this file.
  1. AUPNMCDF ;IHS/OIT/NKD - MCD Eligiblity fix ; 02/19/2015
  1. ;;99.1;IHS DICTIONARIES (PATIENT);**24**;MAR 9, 1999;Build 1
  1. ;
  1. ; VARIABLE NAMING SCHEME:
  1. ; SC=SCAN GLOBAL, FX=FIX GLOBAL, EX=EXCLUDE GLOBAL
  1. ; P=PATIENT IEN, I=RECORD IEN, I2=SUB-RECORD IEN, O=OLD VALUE, N=NEW VALUE
  1. ; A=ANCILLARY, AL=ANCILLARY LIST, RO=ROUTINE, VR=VERSION
  1. ; S=SEQUENCE, V=OVERRIDE, F=FLAG, FL=FILE, FLD=FIELD, DT=DATE
  1. ; C=COUNT/ITERATOR, D=DATA, T=TEMP, R=RESULT, Q=QUIET
  1. ;
  1. N AUPNQ S AUPNQ=1
  1. D SETANC,SCAN,RPT1,RPT2,RPT3
  1. Q
  1. ;
  1. MAIN ; EP - MAIN MENU
  1. N DIR,DTOUT,DUOUT,DIRUT,DIROUT
  1. D SETANC
  1. F Q:$D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) D
  1. . W !!,?8,"Medicaid Eligibility Fix"
  1. . W !,?23,"Scan last run at: ",$S($G(^AUPNTMP("SCAN","DT")):$$FMTE^XLFDT($G(^AUPNTMP("SCAN","DT"))),1:"Never")
  1. . W !,?10,"(S)can",?25,"Scan and fix corrupt entries"
  1. . W !,?10,"(V)erify",?25,"Verify results of previous scans"
  1. . W !,?10,"(R)esults",?25,"Display scan results"
  1. . S DIR(0)="SAO^S:SCAN;V:VERIFY;R:RESULTS"
  1. . S DIR("A")="(S)CAN, (V)ERIFY, (R)ESULTS: "
  1. . D ^DIR
  1. . Q:$D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT)
  1. . I $G(Y)="S" D SCAN,CONT
  1. . E I $G(Y)="V" D CHKPREV,CONT
  1. . E I $G(Y)="R" D RPT1,CONT,RPT2,CONT,RPT3,CONT
  1. . K DIR,DTOUT,DUOUT,DIRUT,DIROUT
  1. Q
  1. ;
  1. SCAN ; SCAN MCD ELIGIBILITY RECORDS FOR NON-DINUMED SUB-RECORDS
  1. N AUPNSC,AUPNI,AUPNI2,AUPNDT,AUPNR,AUPNP
  1. S AUPNSC=$NA(^AUPNTMP("SCAN")) K @AUPNSC
  1. W !!,"Scanning AUPNMCD global"
  1. S @AUPNSC@("DT")=$$NOW^XLFDT
  1. S AUPNI=0 F S AUPNI=$O(^AUPNMCD(AUPNI)) Q:'AUPNI D
  1. . S AUPNP=$P($G(^AUPNMCD(AUPNI,0)),U) Q:'AUPNP
  1. . D INC($NA(@AUPNSC@("TOT"))) I '($G(@AUPNSC@("TOT"))#5000) W "."
  1. . S AUPNI2=0 F S AUPNI2=$O(^AUPNMCD(AUPNI,11,AUPNI2)) Q:'AUPNI2 D
  1. . . S AUPNDT=$P($G(^AUPNMCD(AUPNI,11,AUPNI2,0)),U) Q:AUPNDT=AUPNI2
  1. . . I AUPNDT'?7N D INC($NA(@AUPNSC@("ERR"))) Q ; SKIP IF NOT A DATE
  1. . . I '$D(@AUPNSC@(AUPNP)) D INC($NA(@AUPNSC@("PAT")))
  1. . . I '$D(@AUPNSC@(AUPNP,AUPNI)) D INC($NA(@AUPNSC@("REC")))
  1. . . D INC($NA(@AUPNSC@("SUB")))
  1. . . S @AUPNSC@(AUPNP,AUPNI)=""
  1. W "Completed!",?40,"Total records scanned: ",+$G(@AUPNSC@("TOT"))
  1. I '+$G(@AUPNSC@("REC")) W !,"No issues found to correct!" Q
  1. W !,?10,"Record count: ",+$G(@AUPNSC@("REC")),?40,"Entry count: ",+$G(@AUPNSC@("SUB"))
  1. I '$G(@AUPNSC@("OLD")),$$ASK("Proceed with correction","Y") D PRC
  1. Q
  1. ;
  1. PRC ; PROCESS RESULTS FROM A SCAN
  1. N AUPNSC,AUPNFX,AUPNEX,AUPNP,AUPNI,AUPNV
  1. S AUPNSC=$NA(^AUPNTMP("SCAN"))
  1. D INC($NA(^AUPNTMP("FIXED",0)))
  1. S AUPNFX=$NA(^AUPNTMP("FIXED",+$$GETFIX)),AUPNEX=$NA(^AUPNTMP("EXCLUDE")) K @AUPNEX
  1. S AUPNV=$$ASK("Override coverage overlap checks","Y")
  1. W !!,"Processing ",$G(@AUPNSC@("SUB"))," entries in the MEDICAID ELIGIBILE file..."
  1. S @AUPNFX@(0)="0"_U_$$NOW^XLFDT_U_DUZ_U_AUPNV ; STORE ENTRY COUNT, DATE/TIME, USER, AND OVERRIDE
  1. S AUPNP=0 F S AUPNP=$O(@AUPNSC@(AUPNP)) Q:'AUPNP D
  1. . S AUPNI=0 F S AUPNI=$O(@AUPNSC@(AUPNP,AUPNI)) Q:'AUPNI D
  1. . . D REC(AUPNP,AUPNI,AUPNFX,AUPNEX,AUPNV)
  1. W "Completed!"
  1. I +$G(@AUPNFX@(0)) W !,+$G(@AUPNFX@(0))," entries successfully processed"
  1. I +$G(@AUPNEX) W !,+$G(@AUPNEX)," entries were excluded - See report for details"
  1. Q
  1. ;
  1. REC(AUPNP,AUPNI,AUPNFX,AUPNEX,AUPNV) ; PROCESS A SINGLE RECORD
  1. N AUPNO,AUPNN,AUPNS,AUPNCHG,AUPNA,AUPNRO
  1. S AUPNP=$G(AUPNP),AUPNI=$G(AUPNI),AUPNFX=$G(AUPNFX),AUPNEX=$G(AUPNEX),AUPNV=+$G(AUPNV),AUPNCHG=1 Q:'AUPNP Q:'AUPNI
  1. F Q:'AUPNCHG D ; LOOP UNTIL NO SUB-RECORDS CHANGED - SEQUENCE/ORDER REQUIRED FOR CORRECTION
  1. . N AUPNE
  1. . S (AUPNCHG,AUPNO)=0 F S AUPNO=$O(^AUPNMCD(AUPNI,11,AUPNO)) Q:'AUPNO D
  1. . . S AUPNN=$P($G(^AUPNMCD(AUPNI,11,AUPNO,0)),U) Q:AUPNO=AUPNN!(AUPNN'?7N)
  1. . . Q:$$CHKONE(AUPNI,AUPNO,"AUPNE",AUPNV)
  1. . . D INC($NA(@AUPNFX@(0)),,1) S AUPNS=+$G(@AUPNFX@(0))
  1. . . S @AUPNFX@(AUPNS)=AUPNP_U_AUPNI_U_AUPNO_U_AUPNN ; LOG SUB-RECORD CHANGED
  1. . . S @AUPNFX@("C",AUPNP,AUPNI,AUPNS)="" ; SET STRUCTURED X-REF FOR DISPLAY
  1. . . S ^AUPNTMP("CURRENT")=$NA(@AUPNFX@(AUPNS)) ; SET CURRENT NODE
  1. . . I AUPNV M @AUPNFX@(AUPNS)=AUPNE(AUPNO) K AUPNE(AUPNO) ; STORE WARNINGS IF OVERRIDE WAS USED
  1. . . D AUPN(AUPNI,AUPNO,$NA(@AUPNFX@(AUPNS))) ; PROCESS AUPN CLEANUP
  1. . . S AUPNCHG=1
  1. . . D ANC(AUPNFX,AUPNS) ; RUN ANCILLARY CLEANUPS
  1. . . K ^AUPNTMP("CURRENT")
  1. . ; IF NO ENTRIES CHANGED, STORE ALL ERRORS/WARNINGS FOR THE RECORD
  1. . I 'AUPNCHG,$D(AUPNE) S AUPNO=0 F S AUPNO=$O(AUPNE(AUPNO)) Q:'AUPNO M @AUPNEX@(AUPNP,AUPNI,AUPNO)=AUPNE(AUPNO) D INC(AUPNEX)
  1. Q
  1. ;
  1. CHKONE(AUPNI,AUPNO,AUPNR,AUPNV) ; DATA INTEGRITY CHECK, OVERRIDE WILL IGNORE COVERAGE OVERLAP WARNINGS
  1. N AUPNN,AUPNC,AUPND,AUPNT,AUPNT2
  1. S AUPNI=$G(AUPNI),AUPNO=$G(AUPNO),AUPNR=$G(AUPNR),AUPNV=+$G(AUPNV),(AUPNT,AUPNT2)=0 Q:'AUPNI Q:'AUPNO
  1. S AUPNN=$G(^AUPNMCD(AUPNI,11,AUPNO,0)) Q:AUPNN']""
  1. S AUPNC=0 F S AUPNC=$O(^AUPNMCD(AUPNI,11,AUPNC)) Q:'AUPNC D
  1. . S AUPND=$G(^AUPNMCD(AUPNI,11,AUPNC,0)) S:'$P(AUPND,U,2) $P(AUPND,U,2)=9999999
  1. . S:+AUPNN=AUPNC @AUPNR@(AUPNO,"E","TARGET EXISTS")=$G(@AUPNR@(AUPNO,"E","TARGET EXISTS"))_AUPNC_U,AUPNT=AUPNT+1
  1. . Q:+AUPND'=AUPNC ; SKIP IF ENTRY NOT DINUMED
  1. . Q:$P(AUPNN,U,3)'=$P(AUPND,U,3) ; SKIP IF COV IS DIFF
  1. . S:+AUPNN=$P(AUPND,U,2) @AUPNR@(AUPNO,"W","OVERLAP-END DATE")=$G(@AUPNR@(AUPNO,"W","OVERLAP-END DATE"))_AUPNC_U,AUPNT2=AUPNT2+1
  1. . S:(+AUPNN>+AUPND)&(+AUPNN<$P(AUPND,U,2)) @AUPNR@(AUPNO,"W","OVERLAP-RANGE")=$G(@AUPNR@(AUPNO,"W","OVERLAP-RANGE"))_AUPNC_U,AUPNT2=AUPNT2+1
  1. Q $S(AUPNT+$S('AUPNV:AUPNT2,1:0):1,1:0) ; IF OVERRIDE ONLY COUNT ERRORS, OTHERWISE COUNT ERRORS AND WARNINGS
  1. ;
  1. CHKPREV ; CHECK IF ANCILLARIES RAN ON CORRECTED RECORDS
  1. N AUPNFX,AUPNS,AUPNS2,AUPNT,AUPNA,AUPNC,AUPNR
  1. Q:'+$$GETFIX
  1. S AUPNFX=$NA(^AUPNTMP("FIXED")),AUPNT=$$GETANC
  1. W !,"Scanning corrected records for additional cleanup"
  1. S AUPNS=0 F S AUPNR="",AUPNS=$O(@AUPNFX@(AUPNS)) Q:'AUPNS D
  1. . F AUPNC=1:1:$L(AUPNT,U) S AUPNA=$P(AUPNT,U,AUPNC) Q:AUPNA']"" D
  1. . . Q:'$L($$GETANC(AUPNA,"R"))
  1. . . Q:'$L($T(@($$GETANC(AUPNA,"R")))) Q:$$GETANC(AUPNA,"V")'>$G(@AUPNFX@(AUPNS,AUPNA))
  1. . . W !,?2,"Ancillary cleanup (",AUPNA,") did not run on: ",$$FMTE^XLFDT($$GETFIX(AUPNS,"T"))
  1. . . S:$$ASK(" Run "_AUPNA_" cleanup?","Y") AUPNR=AUPNR_AUPNA_U
  1. . Q:AUPNR']""
  1. . W !,?4,"Processing (",$TR($E(AUPNR,1,$L(AUPNR)-1),U,","),") cleanup on ",$$GETFIX(AUPNS,"C")," records..."
  1. . S AUPNS2=0 F S AUPNS2=$O(@AUPNFX@(AUPNS,AUPNS2)) Q:'AUPNS2 D
  1. . . S ^AUPNTMP("CURRENT")=$NA(@AUPNFX@(AUPNS,AUPNS2))
  1. . . D ANC($NA(@AUPNFX@(AUPNS)),AUPNS2,AUPNR)
  1. . . K ^AUPNTMP("CURRENT")
  1. Q
  1. ;
  1. AUPN(AUPNI,AUPNO,AUPNFX) ; AUPN MAIN CLEANUP
  1. N AUPNN,AUPNT,FDA,FDAIEN,ERR
  1. S AUPNI=$G(AUPNI),AUPNO=$G(AUPNO),AUPNFX=$G(AUPNFX) Q:'AUPNI Q:'AUPNO
  1. S AUPNN=$G(^AUPNMCD(AUPNI,11,AUPNO,0)) Q:AUPNN']""
  1. K FDA,ERR
  1. S FDA(9000004.11,AUPNO_","_AUPNI_",",.01)="@"
  1. D FILE^DIE(,"FDA","ERR") ; DELETE OLD RECORD FIRST (OTHERWISE X-REFS MAY BREAK)
  1. I $D(ERR) M @AUPNFX@("ERR","DEL")=ERR
  1. K FDA,FDAIEN,ERR
  1. S FDA(9000004.11,"+1,"_AUPNI_",",.01)=$P(AUPNN,U)
  1. S FDA(9000004.11,"+1,"_AUPNI_",",.02)=$P(AUPNN,U,2)
  1. S FDA(9000004.11,"+1,"_AUPNI_",",.03)=$P(AUPNN,U,3)
  1. S FDAIEN(1)=$P(AUPNN,U)
  1. D UPDATE^DIE(,"FDA","FDAIEN","ERR") ; CREATE NEW RECORD
  1. S:$G(FDAIEN(1))'=$P(AUPNN,U) @AUPNFX@("ERR","ADD")="IEN MISMATCH: "_$G(FDAIEN(1))
  1. I $D(ERR) M @AUPNFX@("ERR","ADD")=ERR
  1. ; UPDATE DATE LATE UPDATED FIELD
  1. S AUPNT=$$GET1^DIQ(9000004,AUPNI,.08,"I")
  1. I AUPNT'=$$DT^XLFDT D
  1. . K FDA
  1. . S FDA(9000004,AUPNI_",",.08)=$$DT^XLFDT
  1. . D LOG(9000004,AUPNI,.08,AUPNT),UPDATE^DIE(,"FDA")
  1. Q
  1. ;
  1. ANC(AUPNFX,AUPNS,AUPNAL) ; RUN ANCILLARY CLEANUP ROUTINES
  1. ; ANCILLARY LIST DEFAULTS TO ALL, CAN BE USED TO SEND SPECIFIC CLEANUPS (CHKPREV)
  1. N AUPNRO,AUPNVR,AUPND,AUPNP,AUPNI,AUPNO,AUPNN,AUPNC,AUPNA
  1. S AUPNFX=$G(AUPNFX),AUPNS=+$G(AUPNS) Q:'$D(@AUPNFX) Q:'AUPNS
  1. S AUPNAL=$S($L($G(AUPNAL)):$G(AUPNAL),1:$$GETANC)
  1. F AUPNC=1:1:$L(AUPNAL,U) S AUPNA=$P(AUPNAL,U,AUPNC) Q:AUPNA']"" D
  1. . S AUPNRO=$$GETANC(AUPNA,"R"),AUPNVR=$$GETANC(AUPNA,"V") Q:AUPNRO']"" Q:'$L($T(@AUPNRO))
  1. . S AUPND=$G(@AUPNFX@(AUPNS)) Q:AUPND']""
  1. . S AUPNP=$P(AUPND,U),AUPNI=$P(AUPND,U,2),AUPNO=$P(AUPND,U,3),AUPNN=$P(AUPND,U,4)
  1. . D @(AUPNRO_"(AUPNP,AUPNI,AUPNO,AUPNN)")
  1. . S:$G(@AUPNFX@(AUPNA))'=AUPNVR @AUPNFX@(AUPNA)=AUPNVR
  1. . D ^XBFMK
  1. Q
  1. ;
  1. RPT1 ; SUMMARY REPORT
  1. N AUPNFX,AUPNS,AUPNI,AUPND,AUPNDT,AUPNA,AUPNW
  1. N AUPNP,AUPNI,AUPNS2
  1. Q:'+$$GETFIX
  1. W !!,$$CJ^XLFSTR("REPORT (CORRECTED RECORDS)",80),!,$$REPEAT^XLFSTR("*",80)
  1. S AUPNS=0 F S AUPNS=$O(^AUPNTMP("FIXED",AUPNS)) Q:'AUPNS D
  1. . S AUPNFX=$NA(^AUPNTMP("FIXED",AUPNS))
  1. . W !,AUPNS,")",?4,"Run Date: ",$$FMTE^XLFDT($$GETFIX(AUPNS,"T")),?40,"User: ",$$GETFIX(AUPNS,"U"),?60,"Override: ",$S($$GETFIX(AUPNS,"O"):"YES",1:"NO"),!
  1. . S AUPNP=0 F S AUPNP=$O(@AUPNFX@("C",AUPNP)) Q:'AUPNP W !,?2,"Patient: ",AUPNP D
  1. . . S AUPNI=0 F S AUPNI=$O(@AUPNFX@("C",AUPNP,AUPNI)) Q:'AUPNI W ?21,"MCD Entry: ",AUPNI D
  1. . . . S AUPNS2=0 F S AUPNS2=$O(@AUPNFX@("C",AUPNP,AUPNI,AUPNS2)) Q:'AUPNS2 D W !
  1. . . . . W ?39,"Old: ",$P($G(@AUPNFX@(AUPNS2)),U,3),?56,"New: ",$P($G(@AUPNFX@(AUPNS2)),U,4)
  1. . . . . I $D(@AUPNFX@(AUPNS2,"W")) W ?75,"OVR"
  1. Q
  1. ;
  1. RPT2 ; DETAILED REPORT
  1. N AUPNFX,AUPNS,AUPNI,AUPNI2,AUPND,AUPNDT,AUPNA,AUPNFL,AUPNF,AUPNT,AUPNT2
  1. Q:'+$$GETFIX
  1. W !!,$$CJ^XLFSTR("REPORT (CORRECTED RECORDS - DETAILED)",80),!,$$REPEAT^XLFSTR("*",80)
  1. S AUPNF=$$ASK("Print additional info","Y") ; DISPLAYS INDIVIDUAL RECORDS PER FILE
  1. S AUPNS=0 F S AUPNS=$O(^AUPNTMP("FIXED",AUPNS)) Q:'AUPNS D
  1. . S AUPNFX=$NA(^AUPNTMP("FIXED",AUPNS))
  1. . W !,AUPNS,")",?4,"Run Date: ",$$FMTE^XLFDT($$GETFIX(AUPNS,"T")),?40,"User: ",$$GETFIX(AUPNS,"U"),?60,"Override: ",$S($$GETFIX(AUPNS,"O"):"Yes",1:"No"),!
  1. . S AUPNP=0 F S AUPNP=$O(@AUPNFX@("C",AUPNP)) Q:'AUPNP D
  1. . . S AUPNI=0 F S AUPNI=$O(@AUPNFX@("C",AUPNP,AUPNI)) Q:'AUPNI D
  1. . . . W !,"Patient: ",AUPNP,?20,"MCD Entry: ",AUPNI
  1. . . . S AUPNS2=0 F S AUPNS2=$O(@AUPNFX@("C",AUPNP,AUPNI,AUPNS2)) Q:'AUPNS2 D
  1. . . . . I +$G(@AUPNFX@(AUPNS2,9000004,0)) W ?40,"Last updated: ",$$FMTE^XLFDT($P($G(@AUPNFX@(AUPNS2,9000004,1)),";",3))
  1. . . . . W !,?2,"* Old: ",$P($G(@AUPNFX@(AUPNS2)),U,3),?22,"New: ",$P($G(@AUPNFX@(AUPNS2)),U,4)
  1. . . . . S AUPNFL=0 F S AUPNFL=$O(@AUPNFX@(AUPNS2,AUPNFL)) Q:'AUPNFL D
  1. . . . . . Q:'+$G(@AUPNFX@(AUPNS2,AUPNFL,0))!(AUPNFL=9000004)
  1. . . . . . W !,?4," ",+$G(@AUPNFX@(AUPNS2,AUPNFL,0))," addtl record(s) from ",$$TITLE^XLFSTR($$GET1^DID(AUPNFL,,,"NAME"))," file (#",AUPNFL,")"
  1. . . . . . Q:'AUPNF
  1. . . . . . S AUPNI2=0 F S AUPNI2=$O(@AUPNFX@(AUPNS2,AUPNFL,AUPNI2)) Q:'AUPNI2 D
  1. . . . . . . S AUPND=$G(@AUPNFX@(AUPNS2,AUPNFL,AUPNI2))
  1. . . . . . . I AUPNI2=1 D
  1. . . . . . . . S AUPNT=$S($P(AUPND,";",2)[",":$P($P(AUPND,";",2),","),1:AUPNFL)
  1. . . . . . . . S AUPNT2=$S($P(AUPND,";",2)[",":$P($P(AUPND,";",2),",",2),1:$P(AUPND,";",2))
  1. . . . . . . . W !,?8
  1. . . . . . . . I AUPNT'=AUPNFL W $$TITLE^XLFSTR($P($G(^DD(AUPNT,0)),U))," (#",AUPNT,"), "
  1. . . . . . . . W $$TITLE^XLFSTR($$GET1^DID(AUPNT,AUPNT2,,"LABEL"))," field (#",AUPNT2,")"
  1. . . . . . . W !,?8,"- Record: ",$P(AUPND,";") ;,?30 ;,"Field: '"
  1. . . . . . . W ?39,"Old: ",$P(AUPND,";",3)
  1. . . W !
  1. Q
  1. ;
  1. RPT3 ; EXCLUSION REPORT
  1. N AUPNEX,AUPNP,AUPNI,AUPNI2,AUPNI3,AUPNEXC,AUPNTYP
  1. S AUPNEX=$NA(^AUPNTMP("EXCLUDE")) Q:'$D(@AUPNEX)
  1. W !!,$$CJ^XLFSTR("REPORT (EXCLUDED RECORDS)",80),!,$$REPEAT^XLFSTR("*",80)
  1. W !,?10,"PATIENT",?20,"RECORD",?30,"ENTRY",?40,"TYPE",?50,"REASON",?65,"CONFLICT ENTRY"
  1. W !,?10,"-------",?20,"------",?30,"-----",?40,"----",?50,"------",?65,"--------------"
  1. S AUPNP=0 F S AUPNP=$O(@AUPNEX@(AUPNP)) Q:'AUPNP W !,?10,AUPNP D
  1. . S AUPNI=0 F S AUPNI=$O(@AUPNEX@(AUPNP,AUPNI)) Q:'AUPNI W ?20,AUPNI D
  1. . . S AUPNI2=0 F S AUPNI2=$O(@AUPNEX@(AUPNP,AUPNI,AUPNI2)) Q:'AUPNI2 W ?30,AUPNI2 D
  1. . . . S AUPNTYP="" F S AUPNTYP=$O(@AUPNEX@(AUPNP,AUPNI,AUPNI2,AUPNTYP)) Q:AUPNTYP']"" W ?40,$S(AUPNTYP="E":"ERROR",AUPNTYP="W":"WARNING",1:"") D
  1. . . . . S AUPNEXC="" F S AUPNEXC=$O(@AUPNEX@(AUPNP,AUPNI,AUPNI2,AUPNTYP,AUPNEXC)) Q:AUPNEXC']"" W ?50,AUPNEXC D
  1. . . . . . F AUPNI3=1:1:$L($G(@AUPNEX@(AUPNP,AUPNI,AUPNI2,AUPNTYP,AUPNEXC)),U)-1 W ?65,$P($G(@AUPNEX@(AUPNP,AUPNI,AUPNI2,AUPNTYP,AUPNEXC)),U,AUPNI3),!
  1. Q
  1. ;
  1. SETANC ; BUILD ANCILLARY GLOBAL
  1. N AUPNC,AUPNT,AUPNA,AUPND
  1. F AUPNC=1:1 S AUPNT=$P($T(ANCIL+AUPNC),";;",2) Q:AUPNT="END" D
  1. . S AUPNA=$P(AUPNT,";"),AUPND=$P(AUPNT,";",2) Q:AUPNA']""
  1. . S:+$P($G(^AUPNTMP("ANCILLARY",AUPNA)),U)<$P(AUPND,U) ^AUPNTMP("ANCILLARY",AUPNA)=AUPND
  1. Q
  1. ;
  1. GETANC(AUPNA,AUPNF) ; REPLACE GLOBAL READ
  1. ; FLAG=(V)ERSION, (R)OUTINE, DEFAULTS TO BOTH
  1. N AUPNC,AUPNR
  1. S AUPNA=$G(AUPNA),AUPNF=$G(AUPNF),AUPNR=""
  1. S AUPNC="" F S AUPNC=$O(^AUPNTMP("ANCILLARY",AUPNC)) Q:AUPNC']"" D
  1. . I AUPNA']"" S AUPNR=AUPNR_AUPNC_U Q
  1. . S:AUPNA=AUPNC AUPNR=$G(^AUPNTMP("ANCILLARY",AUPNA)),AUPNR=$S(AUPNF="V":$P(AUPNR,U),AUPNF="R":$P(AUPNR,U,2,3),1:AUPNR)
  1. Q AUPNR
  1. ;
  1. GETFIX(AUPNS,AUPNF) ; REPLACE GLOBAL READ
  1. ; FLAG=(C)OUNT, DA(T)E, (U)SER, (O)VERRIDE, DEFAULTS TO ALL
  1. N AUPNR
  1. S AUPNS=+$G(AUPNS),AUPNF=$G(AUPNF),AUPNR=""
  1. S AUPNR=$S(AUPNS:$G(^AUPNTMP("FIXED",AUPNS,0)),1:$G(^AUPNTMP("FIXED",0)))
  1. S AUPNR=$S(AUPNF="C":+$P(AUPNR,U),AUPNF="T":$P(AUPNR,U,2),AUPNF="U":$P(AUPNR,U,3),AUPNF="O":$P(AUPNR,U,4),1:AUPNR)
  1. Q AUPNR
  1. ;
  1. LOG(AUPNFL,AUPNI,AUPNFLD,AUPNO) ; EP - LOG RESULTS
  1. ; FL=FILE I=IEN FLD=FIELD # O=OLD VALUE
  1. N AUPNFX
  1. S AUPNFL=$G(AUPNFL),AUPNI=$G(AUPNI),AUPNFLD=$G(AUPNFLD),AUPNO=$G(AUPNO),AUPNFX=$G(^AUPNTMP("CURRENT")) Q:AUPNFX']"" Q:AUPNFL']""
  1. D INC($NA(@AUPNFX@(AUPNFL,0)))
  1. S @AUPNFX@(AUPNFL,$G(@AUPNFX@(AUPNFL,0)))=AUPNI_";"_AUPNFLD_";"_AUPNO
  1. Q
  1. ;
  1. INC(RES,CNT,SUB) ; INCREMENT A TOTAL
  1. I +$G(SUB) S $P(@RES,U,+$G(SUB))=+$P(@RES,U,+$G(SUB))+$S(+$G(CNT):+$G(CNT),1:1) Q
  1. S @RES=+$G(@RES)+$S(+$G(CNT):+$G(CNT),1:1)
  1. Q
  1. ;
  1. ASK(MSG,DEF) ; PROMPT USER INPUT
  1. Q:$D(AUPNQ) $S($G(DEF)="Y":1,1:0)
  1. N DIR,Y
  1. S DIR(0)="Y",DIR("B")=$S($G(DEF)]"":$G(DEF),1:"N")
  1. S DIR("A")=$G(MSG)_" (Y/N)"
  1. D ^DIR K DIR
  1. Q $S($G(Y)=1:1,1:0)
  1. ;
  1. CONT ; PROMPT TO CONTINUE
  1. Q:$D(AUPNQ)
  1. K DIR S DIR(0)="EO",DIR("A")="Press Enter to continue." D ^DIR K DIR Q
  1. ;
  1. ANCIL ; LIST OF ANCILLARY CLEANUPS
  1. ;;AG;1^EN^AG9924
  1. ;;ABM;1^EN^ABMMCDCU
  1. ;;ACHS;1^EN^ACHSDM
  1. ;;END