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

ABMDE2X.m

Go to the documentation of this file.
  1. ABMDE2X ; IHS/ASDST/DMJ - PAGE 2 - INSURER data chk ;
  1. ;;2.6;IHS 3P BILLING SYSTEM;**3,6,8,9,10,11,21,27**;NOV 12, 2009;Build 486
  1. ;
  1. ; IHS/SD/SDR - V2.5 P3 - 1/24/03 - NOIS NEA-0301-180044
  1. ; Modified routine to display patient info when workers comp
  1. ;
  1. ;IHS/SD/SDR 2.5 p8 IM15307/IM14092 - Modified to check for new MSP errors 194-197
  1. ;IHS/SD/SDR 2.5 p8 IM15111 - Check format of Medicare name
  1. ;IHS/SD/SDR 2.5 p10 IM20000 - Added code to use CARD NAME for Policy Holder
  1. ;IHS/SD/SDR 2.5 p10 IM20593 - Added new warning for NO MSP FOR MEDICARE PATIENT
  1. ;IHS/SD/SDR 2.5 p10 IM20311 - Added new error for missing DOB when Medicare active (219)
  1. ;IHS/SD/SDR 2.5 p12 UFMS - Added new warning/errors 225 and 226 for pseudo/missing TIN
  1. ;IHS/SD/SDR v2.5 p13 NO IM
  1. ;
  1. ;IHS/SD/SDR 2.6*3 HEAT7574 - added tribal self-insured warning
  1. ;IHS/SD/SDR 2.6*6 5010 - added error 236
  1. ;IHS/SD/SDR 2.6*21 HEAT145126 - Made correction to error 218 so it would display correctly.
  1. ;IHS/SD/SDR 2.6*21 VMBP RQMT_91 - Added error 253 if Mcr/Mcd and V insurer type exists on claim also
  1. ;IHS/SD/SDR 2.6*21 VMBP RQMT_109 - Added code to get data from the VAMB Eligible file
  1. ;IHS/SD/SDR 2.6*27 CR10170 When replacement insurer is Medicaid it tries to do the NAME check but fails and drops error 203; fixed to use
  1. ; the original insurer type for check.
  1. ;
  1. ; *********************************************************************
  1. ERR ;
  1. I '$D(ABMC("QUE")),'$G(ABMQUIET) D
  1. .S ABME("TITL")="PAGE 2 - INSURER INFORMATION"
  1. .W !?26,ABME("TITL"),!
  1. S ABM=""""""
  1. F ABM("I")=1:1 S ABM=$O(@(ABMP("GL")_"13,""C"","_ABM_")")) Q:'ABM
  1. I ABM("I")=1 S ABME(110)=""
  1. ;
  1. PRIM ;
  1. S ABMP("GL")="^ABMDCLM(DUZ(2),"_ABMP("CDFN")_","
  1. D ^ABMDE2X1
  1. I ABMP("INS")]"" D
  1. .S Y=ABMP("INS")
  1. .S ABM("XIEN")=$O(^ABMDCLM(DUZ(2),ABMP("CDFN"),13,"B",ABMP("INS"),0))
  1. .Q:'ABM("XIEN")
  1. .D COV^ABMDE2X5
  1. .D SEL
  1. K ABM,ABMV
  1. G XIT
  1. ;
  1. ; *********************************************************************
  1. QUE ;
  1. S ABMP("GL")="^ABMDCLM(DUZ(2),"_ABMP("CDFN")_","
  1. D ^ABMDE2X1
  1. S ABM=0
  1. F ABM("I")=1:1 S ABM=$O(^ABMDCLM(DUZ(2),ABMP("CDFN"),13,"C",ABM)) Q:'ABM!($G(ABMC("CTR"))>0) D
  1. .S ABM("XIEN")=$O(^ABMDCLM(DUZ(2),ABMP("CDFN"),13,"C",ABM,0))
  1. .S Y=$P(^ABMDCLM(DUZ(2),ABMP("CDFN"),13,ABM("XIEN"),0),U)
  1. .D SEL
  1. .Q:'+$O(ABME(0))
  1. .S ABME("CHK")=""
  1. .D QUE^ABMDERR
  1. K ABM,ABMV
  1. G XIT
  1. ;
  1. ; *********************************************************************
  1. ; X1=IDFN;INSURER^PHONE^CONTACT^POLICY #^NAME^DOB^PROV #^COVERAGE(S)
  1. ;
  1. SEL ;EP - Entry Point for Checking Select Insurer for Errors
  1. K ABMV,ABME
  1. D MERGE
  1. I $D(ABMP("ERR",Y)) S ABMX="" F S ABMX=$O(ABMP("ERR",Y,ABMX)) Q:'ABMX S ABME(ABMX)=""
  1. I $D(@(ABMP("GL")_"13,"_+ABM("XIEN")_",0)")) S ABMX("I0")=^(0)
  1. E S ABMP("QUIT")="" G XIT
  1. S ABMX("INS")=$P(ABMX("I0"),U)
  1. ;
  1. I $P($G(^ABMDPARM(DUZ(2),1,4)),U,14)=1 D ;export
  1. .S ABMTIN=$P($G(^AUTNINS(ABMX("INS"),0)),U,11)
  1. .;if no TIN and anything except Ben Patient
  1. .;I ABMTIN="",($P($G(^AUTNINS(ABMX("INS"),2)),U)'="I") S ABME(225)=$S('$D(ABME(225)):$P(ABMX("I0"),U,2),1:ABME(225)_","_$P(ABMX("I0"),U,2)) ;abm*2.6*10 HEAT73780
  1. .I ABMTIN="",($$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMX("INS"),".211","I"),1,"I")'="I") S ABME(225)=$S('$D(ABME(225)):$P(ABMX("I0"),U,2),1:ABME(225)_","_$P(ABMX("I0"),U,2)) ;abm*2.6*10 HEAT73780
  1. .I $A($E(ABMTIN,9))>64,$A($E(ABMTIN,9))<91 S ABME(226)=$S('$D(ABME(226)):$P(ABMX("I0"),U,2),1:ABME(226)_","_$P(ABMX("I0"),U,2))
  1. .K ABMTIN
  1. ;
  1. S ABMV("X1")=+Y_";"_$P(^AUTNINS(+Y,0),U)_U_$P(^(0),U,6)_U_$P(^(0),U,9)
  1. S (ABMV("X2"),ABMV("X3"))=""
  1. K DR
  1. I $L(ABMX("I0"),U)=3,$P(ABMX("I0"),U,3)'="U",$P(^AUTNINS(+Y,0),U)'="RAILROAD RETIREMENT" D
  1. .S ABMVDFN=$G(ABMP("VDFN"))
  1. .S DFN=ABMP("PDFN")
  1. .S ABMVDT=ABMP("VDT")
  1. .D ELG^ABMDLCK(ABMVDFN,.ABML,DFN,ABMVDT)
  1. .;start new code abm*2.6*11 HEAT86262
  1. .S ABM("PRI")=""
  1. .S ABMMCR=0
  1. .I $D(ABML(1,2))!($D(ABML(3,2))) S ABMMCR=1
  1. .F S ABM("PRI")=$O(ABML(ABM("PRI"))) Q:'ABM("PRI") D
  1. ..I ABMMCR,$D(ABML(ABM("PRI"),ABMP("INS"),"COV")),$$GET1^DIQ(9999999.65,$O(ABML(ABM("PRI"),ABMP("INS"),"COV",0)),".01","E")["MEDICARE SUPPL" S ABMG(47)=""
  1. ..I $D(ABML(99,2)),$D(ABML(ABM("PRI"),ABMP("INS"),"COV")),$$GET1^DIQ(9999999.65,$O(ABML(ABM("PRI"),ABMP("INS"),"COV",0)),".01","E")["MEDICARE SUPPL" S ABMG(48)=""
  1. .;end new code HEAT86262
  1. .S ABM("PRI")=""
  1. .F S ABM("PRI")=$O(ABML(ABM("PRI"))) Q:'ABM("PRI") I $D(ABML(ABM("PRI"),ABMX("INS"))) D Q
  1. ..;Q:"PMRDAW"'[$P(ABML(ABM("PRI"),ABMX("INS")),U,3) ;abm*2.6*21 IHS/SD/SDR VMBP RQMT_109
  1. ..Q:"PMRDAWV"'[$P(ABML(ABM("PRI"),ABMX("INS")),U,3) ;abm*2.6*21 IHS/SD/SDR VMBP RQMT_109
  1. ..Q:$P(ABML(ABM("PRI"),ABMX("INS")),U,3)=""
  1. ..I $P(ABML(ABM("PRI"),ABMX("INS")),U,3)?1(1"P",1"A",1"W") S DR=".08////"_$P(ABML(ABM("PRI"),ABMX("INS")),U,2)
  1. ..I $P(ABML(ABM("PRI"),ABMX("INS")),U,3)="M" S DR=".04////"_$P(ABML(ABM("PRI"),ABMX("INS")),U,2)
  1. ..I $P(ABML(ABM("PRI"),ABMX("INS")),U,3)="R" S DR=".05////"_$P(ABML(ABM("PRI"),ABMX("INS")),U,2)
  1. ..I $P(ABML(ABM("PRI"),ABMX("INS")),U,3)="D" S DR=".06////"_$P(ABML(ABM("PRI"),ABMX("INS")),U,1)_";.07////"_$P(ABML(ABM("PRI"),ABMX("INS")),U,2)
  1. ..I $P(ABML(ABM("PRI"),ABMX("INS")),U,3)="V" S DR=".013////"_$P(ABML(ABM("PRI"),ABMX("INS")),U,2) ;abm*2.6*21 IHS/SD/SDR VMBP RQMT_109
  1. ..S DA(1)=$S(ABMP("GL")["CLM":ABMP("CDFN"),1:ABMP("BDFN"))
  1. ..I $D(DR) D
  1. ...S DIE=ABMP("GL")_"13,"
  1. ...S DA=ABM("XIEN")
  1. ...D ^DIE
  1. ..S ABMX("I0")=@(ABMP("GL")_"13,"_ABM("XIEN")_",0)")
  1. ..K ABML
  1. ;I "INW"[$P($G(^AUTNINS(ABMX("INS"),2)),U),$P(^(2),U)]"" D ^ABMDE2X3 G XIT ;abm*2.6*10 HEAT73780
  1. S ABMITYP=$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMX("INS"),".211","I"),1,"I") ;abm*2.6*10 HEAT73780
  1. I "INW"[ABMITYP,ABMITYP]"" D ^ABMDE2X3 G XIT ;abm*2.6*10 HEAT73780
  1. ;I $P($G(^AUTNINS(ABMX("INS"),2)),U)="P",('$D(^AUPNPRVT(ABMP("PDFN"),11,"B",ABMX("INS")))) D ^ABMDE2X3 G XIT ;abm*2.6*6 HEAT30524
  1. ;I $P($G(^AUTNINS(ABMX("INS"),2)),U)="P",('$D(^AUPNPRVT(ABMP("PDFN"),11,"B",ABMX("INS")))) D ^ABMDE2X3 ;abm*2.6*6 HEAT30524 ;abm*2.6*10 HEAT73780
  1. I $$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMX("INS"),".211","I"),1,"I")="P",('$D(^AUPNPRVT(ABMP("PDFN"),11,"B",ABMX("INS")))) D ^ABMDE2X3 ;abm*2.6*6 HEAT30524 ;abm*2.6*10 HEAT73780
  1. ;S ABMX("DIC")=$S($P(ABMX("I0"),U,6)]"":"^AUPNMCD(",$P(ABMX("I0"),U,8)]"":"^AUPNPRVT(",$P(ABMX("I0"),U,4)]"":"^AUPNMCR(",1:"^AUPNRRE("),ABMX("SUB")=$S($P(ABMX("I0"),U,7)]"":$P(ABMX("I0"),U,7),1:"") ;abm*2.6*21 IHS/SD/SDR VMBP RQMT_109
  1. S ABMX("DIC")=$S($P(ABMX("I0"),U,6)]"":"^AUPNMCD(",$P(ABMX("I0"),U,8)]"":"^AUPNPRVT(",$P(ABMX("I0"),U,4)]"":"^AUPNMCR(",$P(ABMX("I0"),U,13)]"":"^AUPNVAMB(",1:"^AUPNRRE(") ;abm*2.6*21 IHS/SD/SDR VMBP RQMT_109
  1. S ABMX("SUB")=$S($P(ABMX("I0"),U,7)]"":$P(ABMX("I0"),U,7),1:"")
  1. S ABMX(2)=$S(ABMX("DIC")="^AUPNMCD(":$P(ABMX("I0"),U,6),1:ABMP("PDFN"))
  1. I ABMX("DIC")="^AUPNPRVT(" S ABMX(1)=$P(ABMX("I0"),"^",8) G XIT:'ABMX(1)
  1. I ABMX("DIC")="^AUPNMCD(" S ABMX(1)=$P(ABMX("I0"),U,7)
  1. S ABMX("REC")=ABMX("DIC")_ABMX(2)_",0)"
  1. Q:'$D(@ABMX("REC"))
  1. S ABMX("REC")=@ABMX("REC")
  1. S ABMX("LBL")=$E($P(ABMX("DIC"),"("),6,10)
  1. D @(ABMX("LBL")_"^ABMDE2XA")
  1. D COV^ABMDE2XA
  1. I +ABMV("X2"),$D(^AUPN3PPH(+ABMV("X2"),0)) D
  1. .S $P(ABMV("X2"),U)=$P(ABMV("X2"),U)_";"_$S($P($G(^AUPN3PPH($P(ABMV("X2"),U),1)),U)'="":$P($G(^AUPN3PPH($P(ABMV("X2"),U),1)),U),1:$P($G(^AUPN3PPH($P(ABMV("X2"),U),0)),U))
  1. .S:$P(ABMV("X2"),U,2)]"" $P(ABMV("X2"),U,2)=$S($D(^AUTTRLSH($P(ABMV("X2"),U,2),0)):$P(ABMV("X2"),U,2)_";"_$P(^(0),U),1:"")
  1. S:$P(ABMV("X1"),U,4)="" ABME(68)=""
  1. I $P(ABMP("C0"),U,8)="" S ABME(111)="" ;abm*2.6*8 HEAT37612
  1. ;I $P($G(^AUTNINS(ABMX("INS"),2)),U)="R" D ;abm*2.6*10 HEAT73780
  1. I $$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMX("INS"),".211","I"),1,"I")="R" D ;abm*2.6*10 HEAT73780
  1. .S $P(ABMV("X1"),U,7)=$P(^AUTTLOC(ABMP("LDFN"),0),U,19)
  1. .S:$P($G(^AUTTLOC(ABMP("LDFN"),0)),U,19)="" ABME(173)=""
  1. .;start new code abm*2.6*10 HEAT68467
  1. .I $D(^AUPNMSP("C",ABMP("PDFN"))) D
  1. ..K ABMMSP,ABMFLAG,ABMMSPSV
  1. ..; get correct entry based on visit date
  1. ..S ABMMSP=9999999,ABMFLAG="",ABMMSPSV=9999999
  1. ..F S ABMMSP=$O(^AUPNMSP("C",ABMP("PDFN"),ABMMSP),-1) Q:ABMMSP="" D Q:ABMFLAG=1
  1. ...I $G(ABMMSPSV)="" S ABMMSPSV=ABMMSP
  1. ...I (ABMP("VDT")<ABMMSPSV&(ABMP("VDT")>ABMMSP))!(ABMMSP=ABMP("VDT")) S ABMMSPSV=$O(^AUPNMSP("C",ABMP("PDFN"),ABMMSP,0)),ABMFLAG=1 Q
  1. ...I ABMP("VDT")=ABMMSP S ABMFLAG=1 Q
  1. ...S ABMMSPSV=ABMMSP
  1. ..; write the entry with date
  1. ..I ABMFLAG=1 D
  1. ...K %DT ;abm*2.6*8
  1. ...S Y=ABMMSP
  1. ...D DD^%DT
  1. ...S ABMMSPDT=Y
  1. ...K %DT ;abm*2.6*8
  1. ...S ABMMSPRS=$S($G(ABMMSPSV)="":"NO REASON ENTERED",$P($G(^AUPNMSP(ABMMSPSV,0)),U,4)'="":$P($G(^AUPNMSP(ABMMSPSV,0)),U,4),1:"NO REASON ENTERED")
  1. .;end new code HEAT68467
  1. .; no MSP and inpatient
  1. .I $G(ABMMSPRS)="",ABMP("BTYP")=111 S ABMG(194)=""
  1. .;
  1. .;I ABMP("BTYP")'=111,($G(ABMMSP)="") S ABMG(218)="" ;abm*2.6*11 HEAT104470
  1. .;I ABMP("BTYP")'=111,($G(ABMMSP)="") S ABME(218)="" ;abm*2.6*11 HEAT104470 ;abm*2.6*21 IHS/SD/SDR HEAT145126
  1. .I ABMP("BTYP")'=111,($G(ABMMSPRS)="") S ABME(218)="" ;abm*2.6*11 HEAT104470 ;abm*2.6*21 IHS/SD/SDR HEAT145126
  1. .;
  1. .;not inpatient and >90 days since form signed
  1. .I ABMP("BTYP")'=111,($G(ABMMSP)'="") D
  1. ..S X=ABMMSP
  1. ..K %DT
  1. ..D ^%DT
  1. ..S X1=ABMP("VDT"),X2=Y
  1. ..D ^%DTC
  1. ..I X>90 S ABME(195)=""
  1. .;
  1. .;no MSP and Medicare is secondary
  1. .;I $G(ABMMSPRS)="",$D(ABMZ(2)),($P($G(^AUTNINS($P($G(ABMZ(2)),U,2),2)),U))="R" S ABMG(196)="" ;abm*2.6*10 HEAT73780
  1. .I $G(ABMMSPRS)="",$D(ABMZ(2)),($$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,$P($G(ABMZ(2)),U,2),".211","I"),1,"I")="R") S ABMG(196)="" ;abm*2.6*10 HEAT73780
  1. .;
  1. .; MSP but Medicare not secondary
  1. .;I $G(ABMMSPRS)'="",$D(ABMZ(2)),($P($G(^AUTNINS($P($G(ABMZ(2)),U,2),2)),U)'="R"),($G(ABMMSP)'="") D ;abm*2.6*10 HEAT73780
  1. .I $G(ABMMSPRS)'="",$D(ABMZ(2)),($$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,$P($G(ABMZ(2)),U,2),".211","I"),1,"I")'="R"),($G(ABMMSP)'="") D ;abm*2.6*10 HEAT73780
  1. ..I ABMP("BTYP")'=111 S ABMG(197)=""
  1. ..S X=ABMMSP
  1. ..D ^%DT
  1. ..S X1=ABMP("VDT"),X2=Y
  1. ..D ^%DTC
  1. ..I X>90 S ABMG(197)=""
  1. E I ABMP("LDFN")]"",$D(^AUTNINS(ABMX("INS"),15,ABMP("LDFN"),0)),$P(^(0),U,2)]"" S $P(ABMV("X1"),U,7)=$P(^(0),U,2)
  1. E I $P(ABMV("X1"),U,7)="" S ABME(5)=""
  1. I ABMV("X2")]"" D ^ABMDE2X2
  1. D ^ABMDE2X3
  1. S:$G(ABMP("INS"))="" ABMP("INS")=$P($G(ABMV("X1")),";")
  1. ;I $P($G(^AUTNINS(ABMP("INS"),2)),U)="R"!($P($G(^AUTNINS(ABMP("INS"),2)),U)="D") D ;abm*2.6*10 HEAT73780
  1. I ABMP("INS")'=$P($G(ABMV("X1")),";") S ABMISV=ABMP("INS"),ABMP("INS")=$P($G(ABMV("X1")),";") ;abm*2.6*27 IHS/SD/SDR CR10170
  1. S ABMITYP=$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMP("INS"),".211","I"),1,"I") ;abm*2.6*10 HEAT73780
  1. I ABMITYP="R"!(ABMITYP="D") D ;abm*2.6*10 HEAT73780
  1. .S ABMCK=$P(ABMV("X1"),U,5)
  1. .D NAME
  1. .I $G(ABMCK)="" S ABME(203)=""
  1. ;I $P($G(^AUTNINS(ABMP("INS"),2)),U)="R",($P($G(ABMV("X1")),U,6)="") S ABME(219)="" ;abm*2.6*10 HEAT73780
  1. I ABMITYP="R",($P($G(ABMV("X1")),U,6)="") S ABME(219)="" ;abm*2.6*10 HEAT73780
  1. S:(+$G(ABMISV)'=0) ABMP("INS")=ABMISV,ABMITYP=$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMP("INS"),".211","I"),1,"I") ;abm*2.6*27 IHS/SD/SDR CR10170
  1. I $P($G(^ABMNINS(ABMP("LDFN"),ABMP("INS"),0)),U,11)="Y" S ABME(234)="" ;abm*2.6*3 HEAT7574
  1. I $P(ABMV("X1"),U,4)="" S ABME(236)="" ;abm*2.6*6 5010
  1. ;start new abm*2.6*21 IHS/SD/SDR VMBP RQMT_91
  1. I "^D^R^"[("^"_$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,+$G(ABMP("INS")),".211","I"),1,"I")_"^") D
  1. .S ABM("DR")=0
  1. .F S ABM("DR")=$O(@(ABMP("GL")_"13,"_ABM("DR")_")")) Q:'ABM("DR") D
  1. ..S ABM("DRI")=+$P(@(ABMP("GL")_"13,"_ABM("DR")_",0)"),U)
  1. ..I $$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,+ABM("DRI"),".211","I"),1,"I")="V" S ABME(253)=""
  1. ;end new abm*2.6*21 IHS/SD/SDR VMBP RQMT_91
  1. ;
  1. XIT ;
  1. K ABMX,ABMP("ERR")
  1. Q
  1. ;
  1. ; *********************************************************************
  1. MERGE ;CHECK IF INSURER HAS BEEN MERGED
  1. S ABMX("MRGDT")=$P($G(^AUTNINS(+Y,2)),U,7)
  1. Q:'ABMX("MRGDT")
  1. Q:ABMX("MRGDT")=+Y
  1. S ABMX("MRGDF")=+Y
  1. I $P(@(ABMP("GL")_"0)"),U,8)=ABMX("MRGDF") D
  1. .S DIE=$P(ABMP("GL"),",",1)_","
  1. .S DA=$P(ABMP("GL"),",",2)
  1. .S DR=".08///`"_ABMX("MRGDT")
  1. .D ^DIE
  1. S %X=ABMP("GL")_"13,"_ABMX("MRGDF")_","
  1. S %Y=ABMP("GL")_"13,"_ABMX("MRGDT")_","
  1. D %XY^%RCR
  1. S $P(@(ABMP("GL")_"13,"_ABMX("MRGDT")_",0)"),U)=ABMX("MRGDT")
  1. S $P(@(ABMP("GL")_"13,0)"),U,3)=ABMX("MRGDT"),$P(^(0),U,4)=$P(^(0),U,4)+1 I ABMP("GL")["ABMDBILL",$P(^(0),U,2)="9002274.3013P" S $P(^(0),U,2)="9002274.4013P"
  1. S DIK=ABMP("GL")_"13,"
  1. S DA(1)=$P(ABMP("GL"),",",2)
  1. S DA=ABMX("MRGDF")
  1. D ^DIK
  1. S DA=ABMX("MRGDT")
  1. D IX1^DIK
  1. S Y=ABMX("MRGDT")
  1. I $D(ABM("X")),ABM("X")=ABMX("MRGDF") S ABM("X")=ABMX("MRGDT")
  1. Q
  1. NAME ; entry point for name
  1. I ABMCK[""""!(ABMCK'?1U.AP)!(ABMCK'[",")!(ABMCK?.E1","." ")!(ABMCK?.E1","." "1",".E)!($L(ABMCK,",")>3)!($L(ABMCK,".")>3)!($L(ABMCK,"-")>6)!($L(ABMCK,"(")>2)!($L(ABMCK,")")>2)!($L(ABMCK)>30)!($L(ABMCK)<3)!(ABMCK?.E1", ".E) K ABMCK Q
  1. F L=1:0 S L=$F(ABMCK," ",L) Q:L=0 S:$E(ABMCK,L-2)?1P!($E(ABMCK,L)?1P)!(L>$L(ABMCK)) ABMCK=$E(ABMCK,1,L-2)_$E(ABMCK,L,99),L=L-1
  1. S ABMNAMX=ABMCK
  1. F ABMII=$L(ABMNAMX):-1:1 S:"/:;'*()_+=&%$#@![]{}|\?<>~"""[$E(ABMNAMX,ABMII) ABMNAMX=$E(ABMNAMX,1,ABMII-1)_$E(ABMNAMX,ABMII+1,245)
  1. I ABMNAMX'=ABMCK K ABMCK
  1. I $D(ABMCK) S ABMCK=$$UP^XLFSTR(ABMCK)
  1. K ABMNAMX,ABMII
  1. Q