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

SDECINI2.m

Go to the documentation of this file.
  1. SDECINI2 ;ALB/SAT - VISTA SCHEDULING RPCS ;JAN 15, 2016
  1. ;;5.3;Scheduling;**627**;Aug 13, 1993;Build 249
  1. ;
  1. ;Reference is made to ICR #6185
  1. Q
  1. ;
  1. SDAPPT ;populate SDEC APPOINTMENT file with all existing patient appointments
  1. N DFN,SDA,SDAPL,SDCAPL,SDCL,SDDATA,SDFDA,SDI,SDIEN,SDMSG,SDNOD,SDPRV,SDS,SDSP,SDTODAY,Y
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,"Updating SDEC APPOINTMENT file 409.84 with existing patient appointments..."
  1. W !,Y
  1. S SDTODAY=$P($$NOW^XLFDT,".",1)
  1. S DFN=0 F S DFN=$O(^DPT(DFN)) Q:DFN'>0 D
  1. .S SDS=SDTODAY F S SDS=$O(^DPT(DFN,"S",SDS)) Q:SDS'>0 D
  1. ..D SDECADD
  1. ;cleanup previous appointment lengths that did not account for variable appt length
  1. S SDI=SDTODAY F S SDI=$O(^SDEC(409.84,"B",SDI),-1) Q:SDI="" D
  1. .S SDIEN="" F S SDIEN=$O(^SDEC(409.84,"B",SDI,SDIEN)) Q:SDIEN="" D
  1. ..S SDNOD=$G(^SDEC(409.84,SDIEN,0))
  1. ..S SDRES=$P(SDNOD,U,7)
  1. ..S SDCL=$$GET1^DIQ(409.831,+SDRES_",",.04,"I")
  1. ..Q:SDCL=""
  1. ..S DFN=$P(SDNOD,U,5)
  1. ..S SDS=$P(SDNOD,U,1)
  1. ..S SDSP=$$FNDAPPT(SDCL,DFN,SDS)
  1. ..S SDAPL=$P($G(^SC(SDCL,"S",SDS,1,+SDSP,0)),U,2)
  1. ..S SDCAPL=$S(SDAPL'="":SDAPL,1:$P($G(^SC(SDCL,"SL")),U,1))
  1. ..I SDCAPL'=$P(SDNOD,U,18) D APL(SDIEN,SDS,SDCAPL)
  1. ;
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,Y
  1. W !,"END - Updating SDEC APPOINTMENT file 409.84 with existing patient appointments..."
  1. Q
  1. SDECADD ;add SDEC APPOINTMENT entry
  1. N SDAPL,SDCAPL,SDAPTYP,SDCAN,SDCHK,SDCL,SDCLN,SDECAPPTID,SDECFDA,SDECIEN,SDECMSG,SDECRESD
  1. N SDNOS,SDREC,SDSP,SDSTAT,SDVPRV,SDWL
  1. K SDDATA,SDMSG
  1. D GETS^DIQ(2.98,SDS_","_DFN_",","**","IE","SDDATA","SDMSG")
  1. S SDA="SDDATA(2.98,"""_SDS_","_DFN_","")"
  1. S SDFDA=$NA(SDFDA(409.84,"+1,"))
  1. S SDCL=@SDA@(.01,"I")
  1. S SDCLN=@SDA@(.01,"E")
  1. S SDECRESD=$O(^SDEC(409.831,"B",SDCLN,0))
  1. S SDSP=$$FNDAPPT(SDCL,DFN,SDS) ;get clinic appt pointer
  1. ;look for SDWL, consult, then recall. If none found, add APPT entry
  1. S SDAPTYP=""
  1. S SDWL=$$FNDSDWL(DFN,SDS,SDCL) I SDWL'="" S SDAPTYP=SDWL_";SDWL(409.3,"
  1. I SDAPTYP="" I SDSP'="",$P($G(^SC(SDCL,"S",SDS,1,SDSP,"CONS")),U,1)'="" S SDAPTYP=$P($G(^SC(SDCL,"S",SDS,1,SDSP,"CONS")),U,1)_";GMR(123,"
  1. I SDAPTYP="" S SDREC=$$RECALL^SDECUTL(DFN,SDS,SDCL) I SDREC'="" S SDAPTYP=SDREC_";SD(403.5,"
  1. ;I SDAPTYP="" S SDAPPT=$$FNDAREQ(DFN,SDS,SDCL) I SDAPPT'="" S SDAPTYP=SDAPPT_";SDEC(409.84,"
  1. ;Q:$$SDECCHK(DFN,SDS,SDECRESD,SDAPTYP) ;check appt already exists
  1. S SDAPL=$P($G(^SC(SDCL,"S",SDS,1,+SDSP,0)),U,2)
  1. S SDCAPL=$S(SDAPL'="":SDAPL,1:$P($G(^SC(SDCL,"SL")),U,1)) ;appt length
  1. Q:$$SDECCHK(DFN,SDS,SDECRESD,,SDCAPL) ;check appt already exists
  1. I SDAPTYP="" S SDWL=$$SDWLA^SDM1A(DFN,SDS,SDCL,@SDA@(27,"I"),@SDA@(9.5,"I")) I SDWL'="" S SDAPTYP=SDWL_";SDEC(409.85,"
  1. S:SDAPTYP'="" @SDFDA@(.22)=SDAPTYP
  1. ;Create entry in SDEC APPOINTMENT
  1. S SDSTAT=@SDA@(3,"I") ;status
  1. S SDNOS=$S(SDSTAT="N":1,SDSTAT="NA":1,1:0) ;no show flag
  1. S SDCAN=$S(SDSTAT="C":1,SDSTAT="CA":1,SDSTAT="PC":1,SDSTAT="PCA":1,1:0) ;cancel flag
  1. S SDCHK=$S(SDSP'="":$G(^SC(SDCL,"S",SDS,1,SDSP,"C")),1:"") ;clinic C checkin node
  1. ;
  1. S @SDFDA@(.01)=SDS ;start time
  1. S @SDFDA@(.02)=$$FMADD^XLFDT(SDS,,,SDCAPL) ;end time
  1. S:$P(SDCHK,U,1) @SDFDA@(.03)=$P(SDCHK,U,1) ;check-in
  1. S:$P(SDCHK,U,5) @SDFDA@(.04)=$P(SDCHK,U,5) ;check-in time entered
  1. S @SDFDA@(.05)=DFN
  1. ;S:SDECATID?.N @SDFDA@(.06)=SDECATID
  1. S @SDFDA@(.07)=SDECRESD ;resource
  1. S @SDFDA@(.08)=@SDA@(19,"I") ;entered by
  1. S @SDFDA@(.09)=@SDA@(20,"I") ;date appt made
  1. S @SDFDA@(.1)=+SDNOS ;no show 1=YES 0=NO
  1. S:SDNOS @SDFDA@(.101)=@SDA@(15,"I") ;no show date/time
  1. S:SDNOS @SDFDA@(.102)=@SDA@(14,"I") ;no show user
  1. S:@SDA@(12,"I")'="" @SDFDA@(.11)=@SDA@(12,"I") ;auto rebook date/time
  1. S:SDCAN @SDFDA@(.12)=@SDA@(15,"I") ;cancel date/time (same as no show date/time)
  1. S:SDCAN @SDFDA@(.121)=@SDA@(14,"I") ;cancel by user
  1. S:SDCAN @SDFDA@(.122)=@SDA@(16,"I") ;cancellation reason
  1. S:@SDA@(25,"I")="W" @SDFDA@(.13)="y" ;walk-in
  1. S:$P(SDCHK,U,3)'="" @SDFDA@(.14)=$P(SDCHK,U,3) ;checked out date/time
  1. S SDVPRV=$$FNDVPRV(DFN,SDS)
  1. S:$P(SDVPRV,U,1)'="" @SDFDA@(.15)=$P(SDVPRV,U,1) ;v provider
  1. S:$P(SDVPRV,U,2)'="" @SDFDA@(.16)=$P(SDVPRV,U,2) ;provider
  1. S @SDFDA@(.17)=""
  1. S @SDFDA@(.18)=SDCAPL ;appt length
  1. S @SDFDA@(.19)=""
  1. S @SDFDA@(.2)=@SDA@(27,"I") ;desired date of appt
  1. D UPDATE^DIE("","SDFDA")
  1. K SDECIEN,SDECMSG
  1. Q
  1. ;
  1. FNDVPRV(DFN,APPDT) ;get v provider for given patient and date/time
  1. N SDI,SDNOD,SDRET
  1. S SDRET=""
  1. S SDI=0 F S SDI=$O(^AUPNVPRV("B",DFN,SDI)) Q:SDI'>0 D Q:SDRET'=""
  1. .Q:$$GET1^DIQ(9000010.06,SDI_",",12,"I")'=APPDT
  1. .S SDRET=SDI_U_$$GET1^DIQ(9000010.06,SDI_",",.01,"I")
  1. Q SDRET
  1. ;
  1. FNDAPPT(SDCL,DFN,SDS) ;get clinic appointment pointer
  1. N SDI,SDRET
  1. S SDRET=""
  1. S SDI=0 F S SDI=$O(^SC(SDCL,"S",SDS,1,SDI)) Q:SDI'>0 D Q:SDRET'=""
  1. .I DFN=$$GET1^DIQ(44.003,SDI_","_SDS_","_SDCL_",",.01,"I") S SDRET=SDI
  1. Q SDRET
  1. ;
  1. FNDSDWL(DFN,SDS,SDCL) ;get wait list entry
  1. N SDI,SDNOD,SDRET
  1. S SDRET=""
  1. S SDI=0 F S SDI=$O(^SDWL(409.3,"B",DFN,SDI)) Q:SDI'>0 D Q:SDRET'=""
  1. .S SDNOD=$G(^SDWL(409.3,SDI,"SDAPT"))
  1. .I $P($G(^SDWL(409.3,SDI,0)),U,23)=SDS,$P(SDNOD,U,2)=SDCL S SDRET=SDI
  1. Q SDRET
  1. ;
  1. FNDAREQ(DFN,SDS,SDCL) ;get SDEC APPT REQUEST entry
  1. N SDI,SDNOD,SDRET
  1. S SDRET=""
  1. S SDI=0 F S SDI=$O(^SDEC(409.85,"B",DFN,SDI)) Q:SDI'>0 D Q:SDRET'=""
  1. .S SDNOD=$G(^SDEC(409.85,SDI,"SDAPT"))
  1. .I $P(SDNOD,U,1)=SDS,$P(SDNOD,U,2)=SDCL S SDRET=SDI
  1. Q SDRET
  1. ;
  1. SDECCHK(DFN,SDS,SDRES,SDAPTYP,SDCAPL) ;check for existing SDEC APPOINTMENT entry
  1. N SDFDA,SDI,SDNOD,SDNOD2,SDRET,SDTYP
  1. ;S:$G(SDAPTYP)="" SDAPTYP=";SDEC(409.85,"
  1. S SDRET=0
  1. S SDI=0 F S SDI=$O(^SDEC(409.84,"CPAT",DFN,SDI)) Q:SDI'>0 D Q:+SDRET
  1. .S SDNOD=$G(^SDEC(409.84,SDI,0))
  1. .;S SDNOD2=$G(^SDEC(409.84,SDI,2))
  1. .I $P(SDNOD,U,1)=SDS,$P(SDNOD,U,7)=SDRES S SDRET=SDI D
  1. ..;I $P($P(SDNOD2,U,1),";",2)=$P(SDAPTYP,";",2) S SDRET=SDI
  1. ..;check request type
  1. ..S SDTYP=$P($G(^SDEC(409.84,SDI,2)),U,1)
  1. ..I $P(SDTYP,";",2)="SDWL(409.3," D
  1. ...I $D(^SDWL(409.3,$P(SDTYP,";",1),0)),$$GET1^DIQ(409.3,$P(SDTYP,";",1),.01,"I")=DFN Q
  1. ...I $D(^SDEC(409.85,$P(SDTYP,";",1),0)),$$GET1^DIQ(409.85,$P(SDTYP,";",1),.01,"I")=DFN D
  1. ....S SDFDA(409.84,SDI_",",.22)=$P(SDTYP,";",1)_";SDEC(409.85,"
  1. ....D UPDATE^DIE("","SDFDA")
  1. ..I $P(SDNOD,U,18)'=SDCAPL D APL(SDI,SDS,SDCAPL)
  1. Q SDRET
  1. APL(SDIEN,SDS,SDCAPL) ;
  1. N SDFDA
  1. S SDFDA(409.84,SDIEN_",",.18)=SDCAPL
  1. S SDFDA(409.84,SDIEN_",",.02)=$$FMADD^XLFDT(SDS,,,SDCAPL)
  1. D UPDATE^DIE("","SDFDA")
  1. Q
  1. ;
  1. CHK ;check cross-reference integrity
  1. N SDA,SDDT,SDI,SDNAM,SDNOD,SDNOD1,SDNOD2,Y
  1. W !!,"No changes taking place during existing cross-reference validity checks."
  1. ;B xref in file 44
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,"BEGIN existing cross-reference validity checks for B xref of file 44."
  1. W !,Y
  1. S SDNAM="" F S SDNAM=$O(^SC("B",SDNAM)) Q:SDNAM="" D
  1. .S SDI="" F S SDI=$O(^SC("B",SDNAM,SDI)) Q:SDI="" D
  1. ..I '$D(^SC(+SDI,0)) S SDA(44,"B","INVALID",SDI,SDNAM)="" Q
  1. ..S SDNOD=$E($$GET1^DIQ(44,+SDI_",",.01),1,30)
  1. ..I SDNOD="" S SDA(44,"B","MISMATCH",+SDI,SDNAM,"<no name>")="" Q
  1. ..I $E(SDNOD,1,30)'=$E(SDNAM,1,30) S SDA(44,"B","MISMATCH",+SDI,SDNAM,SDNOD)="" Q
  1. I '$D(SDA(44,"B")) W !," No issues found."
  1. I $D(SDA(44,"B")) W !," See summary below."
  1. ;B xref in file 409.3 SD WAIT LIST
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,"BEGIN existing cross-reference validity checks for B xref of file 409.3."
  1. W !,Y
  1. S SDNAM="" F S SDNAM=$O(^SDWL(409.3,"B",SDNAM)) Q:SDNAM="" D
  1. .S SDI="" F S SDI=$O(^SDWL(409.3,"B",SDNAM,SDI)) Q:SDI="" D
  1. ..I '$D(^SDWL(409.3,+SDI,0)) S SDA(409.3,"B","INVALID",SDI,SDNAM)="" Q
  1. ..S SDNOD=$E($$GET1^DIQ(409.3,+SDI_",",.01,"I"),1,30)
  1. ..I SDNOD="" S SDA(409.3,"B","MISMATCH",+SDI,SDNAM,"<no patient>")="" Q
  1. ..I SDNOD'=SDNAM S SDA(409.3,"B","MISMATCH",+SDI,SDNAM,SDNOD)="" Q
  1. I '$D(SDA(409.3,"B")) W !," No issues found."
  1. I $D(SDA(409.3,"B")) W !," See summary below."
  1. ;B xref in file 403.5 RECALL REMINDERS
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,"BEGIN existing cross-reference validity checks for B xref of file 403.5."
  1. W !,Y
  1. S SDNAM="" F S SDNAM=$O(^SD(403.5,"B",SDNAM)) Q:SDNAM="" D
  1. .S SDI="" F S SDI=$O(^SD(403.5,"B",SDNAM,SDI)) Q:SDI="" D
  1. ..I '$D(^SD(403.5,+SDI,0)) S SDA(403.5,"B","INVALID",SDI,SDNAM)="" Q
  1. ..S SDNOD=$E($$GET1^DIQ(403.5,+SDI_",",.01,"I"),1,30)
  1. ..I SDNOD="" S SDA(403.5,"B","MISMATCH",+SDI,SDNAM,"<no patient>")="" Q
  1. ..I SDNOD'=SDNAM S SDA(403.5,"B","MISMATCH",+SDI,SDNAM,SDNOD)="" Q
  1. I '$D(SDA(403.5,"B")) W !," No issues found."
  1. I $D(SDA(403.5,"B")) W !," See summary below."
  1. ;D xref in file 403.5 RECALL REMINDERS
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,"BEGIN existing cross-reference validity checks for D xref of file 403.5."
  1. W !,Y
  1. S SDNAM="" F S SDNAM=$O(^SD(403.5,"D",SDNAM)) Q:SDNAM="" D
  1. .S SDI="" F S SDI=$O(^SD(403.5,"D",SDNAM,SDI)) Q:SDI="" D
  1. ..I '$D(^SD(403.5,+SDI,0)) S SDA(403.5,"D","INVALID",SDI,SDNAM)="" Q
  1. ..S SDNOD=$E($$GET1^DIQ(403.5,+SDI_",",5,"I"),1,30)
  1. ..I SDNOD="" S SDA(403.5,"D","MISMATCH",+SDI,SDNAM,"<no patient>")="" Q
  1. ..I SDNOD'=SDNAM S SDA(403.5,"D","MISMATCH",+SDI,SDNAM,SDNOD)="" Q
  1. I '$D(SDA(403.5,"D")) W !," No issues found."
  1. I $D(SDA(403.5,"D")) W !," See summary below."
  1. ;AD xref in file 123 REQUEST/CONSULTATION ICR 6185
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,"BEGIN existing cross-reference validity checks for AD xref of file 123."
  1. W !,Y
  1. S SDNAM="" F S SDNAM=$O(^GMR(123,"AD",SDNAM)) Q:SDNAM="" D
  1. .S SDDT="" F S SDDT=$O(^GMR(123,"AD",SDNAM,SDDT)) Q:SDDT="" D
  1. ..S SDI="" F S SDI=$O(^GMR(123,"AD",SDNAM,SDDT,SDI)) Q:SDI="" D
  1. ...I '$D(^GMR(123,+SDI,0)) S SDA(123,"AD","INVALID",SDI,SDNAM)="" Q
  1. ...S SDNOD1=$$GET1^DIQ(123,+SDI_",",.02,"I")
  1. ...I SDNOD1="" S SDA(123,"AD","MISMATCH",+SDI,SDNAM,"<no patient>")="" Q
  1. ...I SDNOD1'=SDNAM S SDA(123,"AD","MISMATCH",+SDI,SDNAM,SDNOD1)="" Q
  1. ...S SDNOD2=$$GET1^DIQ(123,+SDI_",",3,"I")
  1. ...I SDNOD2="" S SDA(123,"AD","MISMATCH",+SDI,SDDT,"<no date of request>")="" Q
  1. ...S SDNOD2=9999999-SDNOD2
  1. ...I SDNOD2'=SDDT S SDA(123,"AD","MISMATCH",+SDI,SDDT,SDNOD2)="" Q
  1. I '$D(SDA(123,"AD")) W !," No issues found."
  1. I $D(SDA(123,"AB")) W !," See summary below."
  1. ;E xref in file 123 REQUEST/CONSULTATION ICR 6185
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,"BEGIN existing cross-reference validity checks for E xref of file 123."
  1. W !,Y
  1. S SDNAM="" F S SDNAM=$O(^GMR(123,"E",SDNAM)) Q:SDNAM="" D
  1. .S SDI="" F S SDI=$O(^GMR(123,"E",SDNAM,SDI)) Q:SDI="" D
  1. ..I '$D(^GMR(123,+SDI,0)) S SDA(123,"E","INVALID",SDI,SDNAM)="" Q
  1. ..S SDNOD=$$GET1^DIQ(123,+SDI_",",3,"I")
  1. ..I SDNOD="" S SDA(123,"E","MISMATCH",+SDI,SDNAM,"<no patient>")="" Q
  1. ..I SDNOD'=SDNAM S SDA(123,"E","MISMATCH",+SDI,SDNAM,SDNOD)="" Q
  1. I '$D(SDA(123,"E")) W !," No issues found."
  1. I $D(SDA(123,"E")) W !," See summary below."
  1. ;AB xref in file 200 NEW PERSON
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,"BEGIN existing cross-reference validity checks for AB xref of file 200."
  1. W !,Y
  1. S SDNAM="" F S SDNAM=$O(^VA(200,"AB",SDNAM)) Q:SDNAM="" D
  1. .S SDDT="" F S SDDT=$O(^VA(200,"AB",SDNAM,SDDT)) Q:SDDT="" D
  1. ..S SDI="" F S SDI=$O(^VA(200,"AB",SDNAM,SDDT,SDI)) Q:SDI="" D
  1. ...I '$D(^VA(200,+SDDT,51,SDI,0)) S SDA(200,"AB","INVALID",SDDT,SDNAM)="" ;SDDT=id to 200; SDNAM=id to key
  1. I '$D(SDA(200,"AB")) W !," No issues found."
  1. I $D(SDA(200,"AB")) W !," See summary below."
  1. ;B xref in file 200 NEW PERSON
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,"BEGIN existing cross-reference validity checks for B xref of file 200."
  1. W !,Y
  1. S SDNAM="" F S SDNAM=$O(^VA(200,"B",SDNAM)) Q:SDNAM="" D
  1. .S SDI="" F S SDI=$O(^VA(200,"B",SDNAM,SDI)) Q:SDI="" D
  1. ..I '$D(^VA(200,+SDI,0)) S SDA(200,"B","INVALID",SDI,SDNAM)="" Q
  1. ..S SDNOD=$E($$GET1^DIQ(200,+SDI_",",.01,"I"),1,30)
  1. ..I SDNOD="" S SDA(200,"B","MISMATCH",+SDI,SDNAM,"<no new person>")="" Q
  1. ..I $E(SDNOD,1,30)'=$E(SDNAM,1,30) S SDA(200,"B","MISMATCH",+SDI,SDNAM,SDNOD)="" Q
  1. I '$D(SDA(200,"B")) W !," No issues found."
  1. I $D(SDA(200,"B")) W !," See summary below."
  1. D CHKW(.SDA)
  1. S Y=$$NOW^XLFDT,Y=$$FMTE^XLFDT(Y)
  1. W !!,Y
  1. W !,"END existing cross-reference validity checks.",!!
  1. Q
  1. CHKW(SDA) ;
  1. N SDF,SDI,SDNAM,SDNOD,SDS
  1. N T1,T2,T3
  1. Q:'$O(SDA(0))
  1. W !!," SUMMARY of existing cross-reference validity checks:"
  1. W !," ----------------------------------------------------"
  1. ;set tabs
  1. S T1=2,T2=14,T3=46
  1. S SDF="" F S SDF=$O(SDA(SDF)) Q:SDF="" D
  1. .S SDS="" F S SDS=$O(SDA(SDF,SDS)) Q:SDS="" D
  1. ..;Invalid pointers
  1. ..I $D(SDA(SDF,SDS,"INVALID"))>1 D
  1. ...W !!,"INVALID POINTERS found in "_SDS_" xref of file "_SDF
  1. ...W !,?T1,"ID",?T2,"XREF NAME"
  1. ...W !,?T1,"--",?T2,"---------"
  1. ...S SDI="" F S SDI=$O(SDA(SDF,SDS,"INVALID",SDI)) Q:SDI="" D
  1. ....S SDNAM="" F S SDNAM=$O(SDA(SDF,SDS,"INVALID",SDI,SDNAM)) Q:SDNAM="" D
  1. .....W !,?T1,SDI,?T2,SDNAM
  1. ..I $D(SDA(SDF,SDS,"MISMATCH"))>1 D
  1. ...W !!,"NAMES DO NOT MATCH found in "_SDS_" xref of file "_SDF
  1. ...W !,?T1,"ID",?T2,"XREF NAME",?T3,"ENTRY NAME"
  1. ...W !,?T1,"--",?T2,"---------",?T3,"----------"
  1. ...S SDI="" F S SDI=$O(SDA(SDF,SDS,"MISMATCH",SDI)) Q:SDI="" D
  1. ....S SDNAM="" F S SDNAM=$O(SDA(SDF,SDS,"MISMATCH",SDI,SDNAM)) Q:SDNAM="" D
  1. .....S SDNOD="" F S SDNOD=$O(SDA(SDF,SDS,"MISMATCH",SDI,SDNAM,SDNOD)) Q:SDNOD="" D
  1. ......W !,?T1,SDI,?T2,SDNAM,?T3,SDNOD
  1. ;I '$D(SDA) W !," No issues found."
  1. Q