This commit is contained in:
Zeeshaun
2026-03-31 14:32:23 -05:00
parent f4646dc97f
commit 9be174da46
485 changed files with 37290 additions and 0 deletions
@@ -0,0 +1,184 @@
With CTE_ActiveAccounts As
(
Select PE.persnbr
,ar.AcctNbr As "OldestRoleActiveAccount"
,ar.EFFDATETIME As "OldestRoleActiveDate"
,at.ACCTNBR As "OldestTaxActiveAccount"
,at.EFFDATETIME As "OldestTaxAccountDate"
from pers PE
left join
(
Select A.AcctNbr, ASH.EffDateTime, A.taxrptforpersnbr, row_number() over (partition by A.taxrptforpersnbr order by ASH.EffDateTime asc) rowTaxActive
from ACCT A Inner Join ACCTACCTSTATHIST ASH ON A.ACCTNBR = ASH.ACCTNBR
Where A.MJACCTTYPCD NOT IN ('EXT', 'RR', 'GL', 'RTMT')
And A.CURRMIACCTTYPCD NOT IN ('BAT', 'CASH', 'CLRA', 'DLR', 'GL','SDB')
AND NOT EXISTS (select null from ACCTACCTSTATHIST OTA Where OTA.Acctstatcd IN ('CLS', 'CO') and OTA.ACCTNBR = A.Acctnbr)
And A.CURRACCTSTATCD NOT IN ('CLS', 'CWB', 'CO')
And ASH.ACCTSTATCD IN ('ACT','DORM','IACT')
) at on at.taxrptforpersnbr = PE.persnbr And rowTaxActive = 1
left join
(
Select AC.AcctNbr, ASH.EffDateTime, ARP.persnbr, row_number() over (partition by ARP.persnbr order by ASH.EffDateTime asc) rowRoleActive
from ACCTACCTROLEPERS ARP Join ACCT AC on AC.acctnbr = ARP.acctnbr
Join ACCTACCTSTATHIST ASH ON ASH.ACCTNBR = ARP.ACCTNBR
Where AC.MJACCTTYPCD NOT IN ('EXT', 'RR', 'GL', 'RTMT')
And AC.CURRMIACCTTYPCD NOT IN ('BAT', 'CASH', 'CLRA', 'DLR', 'GL','SDB')
AND NOT EXISTS (select null from ACCTACCTSTATHIST ORA Where ORA.Acctstatcd IN ('CLS', 'CO') and ORA.ACCTNBR = AC.Acctnbr)
And AC.CURRACCTSTATCD NOT IN ('CLS', 'CWB', 'CO')
And ASH.ACCTSTATCD IN ('ACT','DORM','IACT')
And ARP.ACCTROLECD IN ('OWN','SIGN','POA')
) ar on PE.persnbr = ar.persnbr And rowRoleActive = 1
),
CTE_ActiveClosedAccounts As
(
Select PE.persnbr as "PersonNumber",
PUF.Value as "ValueSet",
PUF.DateLastMaint,
PUF.valueLastUpdatedDate
,Case
When PUF.valueLastUpdatedDate IS NOT NULL Then 1 Else 0 End As "UserFieldExists"
,Case
When (ract.AcctNbr IS NOT NULL and aac."OldestTaxActiveAccount" IS NULL) Then ract.EffDateTime
When (racr.AcctNbr IS NOT NULL and aac."OldestRoleActiveAccount" IS NULL) Then racr.EffDateTime
When (cto.AcctNbr IS NOT NULL and aac."OldestTaxActiveAccount" IS NULL) Then cto.EffDateTime
When (cro.AcctNbr IS NOT NULL and aac."OldestRoleActiveAccount" IS NULL) Then cro.EffDateTime
When (aac."OldestRoleActiveDate" IS NULL or aac."OldestTaxAccountDate" IS NULL) Then
COALESCE(aac."OldestRoleActiveDate", aac."OldestTaxAccountDate") Else
LEAST(aac."OldestRoleActiveDate", aac."OldestTaxAccountDate")
End As "OldestActiveEffectiveDate"
,Case
When (ct.AcctNbr = ctad.AcctNbr or cr.AcctNbr = crad.AcctNbr) Then Null
When (ct.EffDateTime IS NULL or cr.EffDateTime IS NULL) Then
COALESCE(ct.EffDateTime, cr.EffDateTime) Else
GREATEST(ct.EffDateTime, cr.EffDateTime)
End As "RecentClosedEffectiveDate"
from pers PE
left join CTE_ActiveAccounts aac on aac.PersNbr = PE.persnbr
left join
(
Select A.AcctNbr, ASH.EffDateTime, A.taxrptforpersnbr, row_number() over (partition by A.taxrptforpersnbr order by ASH.EffDateTime desc) rowTaxClosed
from ACCT A Inner Join ACCTACCTSTATHIST ASH ON A.ACCTNBR = ASH.ACCTNBR
Where A.MJACCTTYPCD NOT IN ('EXT', 'RR', 'GL', 'RTMT')
And A.CURRMIACCTTYPCD NOT IN ('BAT', 'CASH', 'CLRA', 'DLR', 'GL','SDB')
AND EXISTS (select null from ACCTACCTSTATHIST OTA Where OTA.Acctstatcd IN ('ACT', 'IACT', 'DORM') and OTA.ACCTNBR = A.Acctnbr)
And A.CURRACCTSTATCD IN ('CLS', 'CWB')
) ct on ct.taxrptforpersnbr = PE.persnbr and rowTaxClosed = 1 and ct.EffDateTime > sysdate - 30 --check if the mostrecentcloseddate account number is less than 30 days old
left join
(
Select AC.AcctNbr, ASH.EffDateTime, arp.persnbr, row_number() over (partition by ARP.persnbr order by ASH.EffDateTime desc) rowRoleClosed
from ACCTACCTROLEPERS ARP Join ACCT AC on AC.acctnbr = ARP.acctnbr
Join ACCTACCTSTATHIST ASH ON ASH.ACCTNBR = ARP.ACCTNBR
Where AC.MJACCTTYPCD NOT IN ('EXT', 'RR', 'GL', 'RTMT')
And AC.CURRMIACCTTYPCD NOT IN ('BAT', 'CASH', 'CLRA', 'DLR', 'GL','SDB')
AND EXISTS (select null from ACCTACCTSTATHIST ORA Where ORA.Acctstatcd IN ('ACT', 'IACT', 'DORM') and ORA.ACCTNBR = AC.Acctnbr )
And AC.CURRACCTSTATCD IN ('CLS', 'CWB') and ARP.ACCTROLECD IN ('OWN','SIGN','POA')
) cr on PE.persnbr = cr.persnbr and rowRoleClosed = 1 and cr.EffDateTime > sysdate - 30 --check if the mostrecentcloseddate account number is less than 30 days old
left join
(
Select A.AcctNbr, ASH.EffDateTime, A.taxrptforpersnbr, row_number() over (partition by A.taxrptforpersnbr order by ASH.EffDateTime desc) rowTaxClosedOldReactivated
from ACCT A Inner Join ACCTACCTSTATHIST ASH ON A.ACCTNBR = ASH.ACCTNBR
Where A.MJACCTTYPCD NOT IN ('EXT', 'RR', 'GL', 'RTMT')
And A.CURRMIACCTTYPCD NOT IN ('BAT', 'CASH', 'CLRA', 'DLR', 'GL','SDB')
AND EXISTS (select null from ACCTACCTSTATHIST CRA Where CRA.Acctstatcd IN ('CLS', 'CWB') and CRA.ACCTNBR = A.Acctnbr and CRA.EffDateTime < sysdate - 30)
And A.CURRACCTSTATCD IN ('ACT', 'IACT', 'DORM')
) cto on cto.taxrptforpersnbr = PE.persnbr and rowTaxClosedOldReactivated = 1 and cto.EffDateTime > sysdate - 30 --check to see if account was reopened after being closed more than 30 days
left join
(
Select AC.AcctNbr, ASH.EffDateTime, arp.persnbr, row_number() over (partition by ARP.persnbr order by ASH.EffDateTime desc) rowRoleClosedOldReactivated
from ACCTACCTROLEPERS ARP Join ACCT AC on AC.acctnbr = ARP.acctnbr
Join ACCTACCTSTATHIST ASH ON ASH.ACCTNBR = ARP.ACCTNBR
Where AC.MJACCTTYPCD NOT IN ('EXT', 'RR', 'GL', 'RTMT')
And AC.CURRMIACCTTYPCD NOT IN ('BAT', 'CASH', 'CLRA', 'DLR', 'GL','SDB')
AND EXISTS (select null from ACCTACCTSTATHIST CRRA Where CRRA.Acctstatcd IN ('CLS', 'CWB') and CRRA.ACCTNBR = AC.Acctnbr and CRRA.EffDateTime < sysdate - 30)
And AC.CURRACCTSTATCD IN ('ACT', 'DORM', 'IACT')
And ARP.ACCTROLECD IN ('OWN','SIGN','POA')
) cro on PE.persnbr = cro.persnbr and rowRoleClosedOldReactivated = 1 and cro.EffDateTime > sysdate - 30 --check to see if account was reopened after being closed more than 30 days
left join
(
Select A.AcctNbr, ASH.EffDateTime, A.taxrptforpersnbr, A.CURRACCTSTATCD from ACCT A Inner Join ACCTACCTSTATHIST ASH ON A.ACCTNBR = ASH.ACCTNBR
Where A.MJACCTTYPCD NOT IN ('EXT', 'RR', 'GL', 'RTMT')
And A.CURRMIACCTTYPCD NOT IN ('BAT', 'CASH', 'CLRA', 'DLR', 'GL','SDB')
And (ASH.ACCTSTATCD = 'ACT' Or ASH.ACCTSTATCD = 'DORM' Or ASH.ACCTSTATCD = 'IACT')) ctad on Pe.Persnbr = ctad.taxrptforpersnbr
And ct.AcctNbr = ctad.AcctNbr
And ctad.EffDateTime > sysdate - 30 --check if mostrecentclosed date has opened in last 30 days
left join
(
Select A.AcctNbr, ASH.EffDateTime, A.taxrptforpersnbr, row_number() over (partition by A.taxrptforpersnbr order by ASH.EffDateTime asc) rowTaxClosedNewReactivated
from ACCT A Inner Join ACCTACCTSTATHIST ASH ON A.ACCTNBR = ASH.ACCTNBR
Where A.MJACCTTYPCD NOT IN ('EXT', 'RR', 'GL', 'RTMT')
And A.CURRMIACCTTYPCD NOT IN ('BAT', 'CASH', 'CLRA', 'DLR', 'GL','SDB')
AND EXISTS (select null from ACCTACCTSTATHIST CRA Where CRA.Acctstatcd IN ('CLS', 'CWB') and CRA.ACCTNBR = A.Acctnbr and CRA.EffDateTime > sysdate - 30)
AND EXISTS (select null from ACCTACCTSTATHIST CRA Where CRA.Acctstatcd IN ('ACT', 'IACT', 'DORM') and CRA.ACCTNBR = A.Acctnbr and CRA.EffDateTime > sysdate - 30)
And A.CURRACCTSTATCD IN ('ACT', 'IACT', 'DORM')
) ract on ract.taxrptforpersnbr = PE.persnbr and rowTaxClosedNewReactivated = 1 and ract.EffDateTime < sysdate - 30
--check if most recent reactivated tax account has closed and reopened in last 30 days take the oldest active date before that
left join
(
Select AC.AcctNbr, ASH.EffDateTime, ARP.persnbr from ACCTACCTROLEPERS ARP Inner Join ACCT AC on AC.acctnbr = ARP.acctnbr
Inner Join ACCTACCTSTATHIST ASH ON ASH.ACCTNBR = ARP.ACCTNBR
Where AC.MJACCTTYPCD NOT IN ('EXT', 'RR', 'GL', 'RTMT')
And AC.CURRMIACCTTYPCD NOT IN ('BAT', 'CASH', 'CLRA', 'DLR', 'GL','SDB')
And ASH.ACCTSTATCD IN ('ACT','DORM','IACT')
And ARP.ACCTROLECD IN ('OWN','SIGN','POA')) crad on Pe.Persnbr = crad.persnbr
And cr.AcctNbr = crad.AcctNbr
And crad.EffDateTime > sysdate - 30 --check if mostrecentclosed date has opened in last 30 days
left join
(
Select AC.AcctNbr, ASH.EffDateTime, arp.persnbr, row_number() over (partition by ARP.persnbr order by ASH.EffDateTime asc) rowRoleClosedNewReactivated
from ACCTACCTROLEPERS ARP Join ACCT AC on AC.acctnbr = ARP.acctnbr
Join ACCTACCTSTATHIST ASH ON ASH.ACCTNBR = ARP.ACCTNBR
Where AC.MJACCTTYPCD NOT IN ('EXT', 'RR', 'GL', 'RTMT')
And AC.CURRMIACCTTYPCD NOT IN ('BAT', 'CASH', 'CLRA', 'DLR', 'GL','SDB')
AND EXISTS (select null from ACCTACCTSTATHIST CRRA Where CRRA.Acctstatcd IN ('CLS', 'CWB') and CRRA.ACCTNBR = AC.Acctnbr and CRRA.EffDateTime > sysdate - 30)
AND EXISTS (select null from ACCTACCTSTATHIST CRRA Where CRRA.Acctstatcd IN ('ACT', 'IACT', 'DORM') and CRRA.ACCTNBR = AC.Acctnbr and CRRA.EffDateTime > sysdate - 30)
And AC.CURRACCTSTATCD IN ('ACT', 'DORM', 'IACT')
And ARP.ACCTROLECD IN ('OWN','SIGN','POA')
) racr on PE.persnbr = racr.persnbr and rowRoleClosedNewReactivated = 1 and racr.EffDateTime < sysdate - 30
--check if most recent reactivated role account has closed and reopened in last 30 days take the oldest active date before that
left join (Select value, valueLastUpdatedDate, persnbr, DateLastMaint from PERSUSERFIELD Where userfieldCD = 'MBRH') PUF on PUF.persnbr = ct.taxrptforpersnbr or PUF.persnbr = cr.persnbr or PUF.persnbr = aac.PersNbr
inner join (Select persnbr, purgeyn from pers where purgeyn = 'N') PUR on PUR.persnbr = PE.persnbr
--option to reset all of them if so don't run this or pass in a date
Where PUR.purgeyn = 'N'
and (PUF.DateLastMaint > TO_TIMESTAMP(:ResetStartDate, 'MM-DD-YY HH24:MI:SS') and PUF.DateLastMaint < TO_TIMESTAMP(:ResetEndDate, 'MM-DD-YY HH24:MI:SS'))
or PUF.valueLastUpdatedDate Is Null
or PUF.DateLastMaint < cr.EffDateTime
or PUF.DateLastMaint < aac."OldestTaxAccountDate"
or PUF.DateLastMaint < aac."OldestRoleActiveDate"
or PUF.DateLastMaint < ct.EffDateTime
--The oldest active or most recent closed is greater than valuelastupdatedate indicating a recent change in account status OR
--ValuelastUpdatedate is less than or equal to passed in as current date. This should ensure if a cleanup fails we are not just relying on the value last update date one day prior to today.
--A non existant ValuelastUpdatedate is considered to be selected and added as a user value.
)
Select * from CTE_ActiveClosedAccounts where "PersonNumber" != 5775
and "UserFieldExists" = 0
Union
Select * from CTE_ActiveClosedAccounts where "PersonNumber" != 5775
and "UserFieldExists" = 1
and "OldestActiveEffectiveDate" < sysdate - 30
and "ValueSet" = 'Y'
Union
Select * from CTE_ActiveClosedAccounts where "PersonNumber" != 5775
and "UserFieldExists" = 1
and "RecentClosedEffectiveDate" is null
and "OldestActiveEffectiveDate" > sysdate - 30
and "ValueSet" = 'N'
Union
Select * from CTE_ActiveClosedAccounts where "PersonNumber" != 5775
and "UserFieldExists" = 1
and "RecentClosedEffectiveDate" < sysdate - 30
and "OldestActiveEffectiveDate" is null
and "ValueSet" = 'N'
@@ -0,0 +1,5 @@
SELECT COUNT(1)
FROM OSIBANK.PERS
WHERE (LOWER(FIRSTNAME) LIKE '%' || :firstName || '%' OR :firstName IS NULL)
AND (LOWER(MDLNAME) LIKE '%' || :middleName || '%' OR :middleName IS NULL)
AND (LOWER(LASTNAME) LIKE '%' || :lastName || '%' OR :lastName IS NULL)
@@ -0,0 +1,6 @@
SELECT PERSNBR
FROM OSIBANK.PERS
WHERE (LOWER(FIRSTNAME) LIKE '%' || :firstName || '%' OR :firstName IS NULL)
AND (LOWER(MDLNAME) LIKE '%' || :middleName || '%' OR :middleName IS NULL)
AND (LOWER(LASTNAME) LIKE '%' || :lastName || '%' OR :lastName IS NULL)
AND ROWNUM <= :limit