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,31 @@
SELECT DISTINCT
a.TAXRPTFORPERSNBR AS PersonNumber,
a.TAXRPTFORORGNBR AS ByOrgNbr,
a.TAXRPTFORPERSNBR AS TaxReportForPersonNumber,
a.TAXRPTFORORGNBR AS TaxReportForOrgNumber,
o.ORGNAME AS OrganizationName,
p.FIRSTNAME,
p.MDLINIT AS MiddleInitial,
p.MDLNAME AS MiddleName,
p.LASTNAME,
p.SUFFIX,
'' AS Role,
CASE WHEN (p.PERSNBR = a.TAXRPTFORPERSNBR OR o.ORGNBR = a.TAXRPTFORORGNBR) THEN (1) ELSE (0) END AS IsPrimaryOwner
FROM osibank.ACCT a
LEFT OUTER JOIN OSIBANK.PERS p ON a.TAXRPTFORPERSNBR = p.PERSNBR
LEFT OUTER JOIN OSIBANK.ORG o ON a.TAXRPTFORORGNBR = o.ORGNBR
WHERE a.ACCTNBR = :accountNumber
UNION
(SELECT DISTINCT a2.PERSNBR, NULL, NULL, NULL, NULL, p.FIRSTNAME, p.MDLINIT, p.MDLNAME, p.LASTNAME, p.SUFFIX, a2.ACCTROLECD, 0
FROM OSIBANK.ACCTACCTROLEPERS a2
LEFT OUTER JOIN OSIBANK.PERS p ON a2.PERSNBR = p.PERSNBR
WHERE a2.ACCTROLECD IN ( 'SIGN', 'OWN', 'CUST', 'GUAD', 'PREP', 'REPP', 'VAFI', 'TRUT', 'TRUS')
AND a2.ACCTNBR = :accountNumber
AND a2.EFFDATE <= TO_DATE(:createdDate, 'YYYY-MM-DD HH24:MI:SS') AND a2.EFFDATE IS NOT NULL)
UNION
(SELECT DISTINCT NULL, a3.ORGNBR, NULL, NULL, o.ORGNAME, NULL, NULL, NULL, NULL, NULL, a3.ACCTROLECD, 0
FROM OSIBANK.ACCTACCTROLEORG a3
LEFT OUTER JOIN OSIBANK.ORG o ON a3.ORGNBR = o.ORGNBR
WHERE a3.ACCTROLECD IN ( 'SIGN', 'OWN', 'CUST', 'GUAD', 'PREP', 'REPP', 'VAFI', 'TRUT', 'TRUS')
AND a3.ACCTNBR = :accountNumber
AND a3.EFFDATE <= TO_DATE(:createdDate, 'YYYY-MM-DD HH24:MI:SS') AND a3.EFFDATE IS NOT NULL)
@@ -0,0 +1,19 @@
SELECT DISTINCT
a.TAXRPTFORPERSNBR AS PersonNumber,
a.TAXRPTFORORGNBR AS ByOrgNbr,
a.TAXRPTFORPERSNBR AS TaxReportForPersonNumber,
a.TAXRPTFORORGNBR AS TaxReportForOrgNumber,
o.ORGNAME AS OrganizationName,
p.FIRSTNAME,
p.MDLINIT AS MiddleInitial,
p.MDLNAME AS MiddleName,
p.LASTNAME,
p.SUFFIX,
CASE WHEN (p.PERSNBR = a.TAXRPTFORPERSNBR OR o.ORGNBR = a.TAXRPTFORORGNBR) THEN (1) ELSE (0) END AS IsPrimaryOwner
FROM osibank.ACCT a
LEFT OUTER JOIN OSIBANK.PERS p ON a.TAXRPTFORPERSNBR = p.PERSNBR
LEFT OUTER JOIN OSIBANK.ORG o ON a.TAXRPTFORORGNBR = o.ORGNBR
WHERE NLSSORT(TRIM(REPLACE(REPLACE(REPLACE(REGEXP_REPLACE(REPLACE(o.ORGNAME, '%2F', '/'), '[^[:alnum:] ]', ''), ' ', '<>'), '><', ''), '<>', ' ')), 'NLS_SORT = UCA0700_DUCET_AI')
LIKE NLSSORT(TRIM(REPLACE(REPLACE(REPLACE(REGEXP_REPLACE(REPLACE(:organizationName, '%2F', '/'), '[^[:alnum:] ]', ''), ' ', '<>'), '><', ''), '<>', ' ')), 'NLS_SORT = UCA0700_DUCET_AI')
OFFSET 0 ROWS
FETCH FIRST 5 ROWS ONLY
@@ -0,0 +1,19 @@
SELECT DISTINCT
a.TAXRPTFORPERSNBR AS PersonNumber,
a.TAXRPTFORORGNBR AS ByOrgNbr,
a.TAXRPTFORPERSNBR AS TaxReportForPersonNumber,
a.TAXRPTFORORGNBR AS TaxReportForOrgNumber,
o.ORGNAME AS OrganizationName,
p.FIRSTNAME,
p.MDLINIT AS MiddleInitial,
p.MDLNAME AS MiddleName,
p.LASTNAME,
p.SUFFIX,
CASE WHEN (p.PERSNBR = a.TAXRPTFORPERSNBR OR o.ORGNBR = a.TAXRPTFORORGNBR) THEN (1) ELSE (0) END AS IsPrimaryOwner
FROM osibank.ACCT a
LEFT OUTER JOIN OSIBANK.PERS p ON a.TAXRPTFORPERSNBR = p.PERSNBR
LEFT OUTER JOIN OSIBANK.ORG o ON a.TAXRPTFORORGNBR = o.ORGNBR
WHERE NLSSORT(TRIM(REPLACE(REPLACE(REPLACE(REGEXP_REPLACE(REPLACE(NVL(p.FIRSTNAME,'') || NVL(' ' || p.MDLINIT,'') || NVL(' ' || p.LASTNAME,'') || NVL(' ' || p.SUFFIX,''), '%2F', '/'), '[^[:alnum:] ]', ''), ' ', '<>'), '><', ''), '<>', ' ')), 'NLS_SORT = UCA0700_DUCET_AI')
LIKE NLSSORT(TRIM(REPLACE(REPLACE(REPLACE(REGEXP_REPLACE(REPLACE(:personName, '%2F', '/'), '[^[:alnum:] ]', ''), ' ', '<>'), '><', ''), '<>', ' ')), 'NLS_SORT = UCA0700_DUCET_AI')
OFFSET 0 ROWS
FETCH FIRST 5 ROWS ONLY
@@ -0,0 +1,14 @@
select
ac.branchorgnbr as branchcode,
ac.acctnbr as accountnumber,
CASE
when (ac.taxrptforpersnbr is not null) then (concat(concat(pe.FirstNameUpper, ' '), pe.LastNameUpper))
else (og.orgname)
end as Name
from acct ac
left join pers pe on ac.taxrptforpersnbr = pe.persnbr
left join org og on og.orgnbr = ac.taxrptfororgnbr
Where AC.MJACCTTYPCD IN :majorAccountTypes
and AC.CURRMIACCTTYPCD IN :minorAccountTypes
and AC.CURRACCTSTATCD IN :accountStatusCodes
and AC.Branchorgnbr IN :branchOrgCodes
@@ -0,0 +1,5 @@
SELECT
ACCTNBR, DATELASTMAINT
FROM Acct
WHERE DATELASTMAINT >= TO_TIMESTAMP(:startDate, 'yyyy-mm-dd HH24:mi:ss')
AND DATELASTMAINT < TO_TIMESTAMP(:endDate, 'yyyy-mm-dd HH24:mi:ss')
@@ -0,0 +1,9 @@
Select AC.ACCTNBR as AccountNumber
FROM ACCT AC
LEFT JOIN ACCTGRPACCT AGA ON AGA.ACCTNBR= AC.ACCTNBR
LEFT JOIN ACCTGRP AG ON AG.ACCTGRPNBR = AGA.ACCTGRPNBR
Where
AC.MJACCTTYPCD = 'CK'
And AC.CURRMIACCTTYPCD IN ('BC01','BC10','BC11','BC20','MMC1','MMC5','MMC9','BMM1','MMM1')
And AC.CURRACCTSTATCD = 'ACT'
And AG.ACCTGRPNBR is null
@@ -0,0 +1,9 @@
Select AC.ACCTNBR as AccountNumber from OSIBANK.ACCT AC
INNER JOIN PERS PE ON PE.PersNbr = AC.TAXRPTFORPERSNBR
INNER JOIN MEMBERAGREEMENT MA ON MA.PRIMARYPERSNBR = PE.PERSNBR
Where AC.MJACCTTYPCD = 'SAV'
and AC.CURRMIACCTTYPCD = 'SV01'
and AC.CURRACCTSTATCD = 'APPR'
and AC.Branchorgnbr = 1210
and MA.SHAREACCTNBR = AC.ACCTNBR
and NOT EXISTS (select null FROM ACCTACCTROLEPERS AR WHERE AR.ACCTNBR = AC.ACCTNBR And AR.ACCTROLECD = 'OEMP')
@@ -0,0 +1,17 @@
SELECT
AC.ACCTNBR
FROM
OSIBANK.ACCT AC
INNER JOIN OSIBANK.MJMIACCTTYP MI ON MI.MIACCTTYPCD = AC.CURRMIACCTTYPCD
INNER JOIN OSIBANK.PERS PE ON PE.PERSNBR = AC.TAXRPTFORPERSNBR
INNER JOIN OSIBANK.MEMBERAGREEMENT MA ON MA.PRIMARYPERSNBR = PE.PERSNBR
WHERE
(AC.BRANCHORGNBR = 1500 OR AC.BRANCHORGNBR = 1200)
AND AC.CURRACCTSTATCD IN ('ACT', 'DORM', 'IACT', 'NPFM')
AND AC.MJACCTTYPCD IN ('CK','SAV','TD','CML','CNS','MTG')
AND AC.ACCTNBR NOT IN('99993001','99994001','99997001','27507971401','99998001')
AND AC.CURRMIACCTTYPCD NOT IN ('GL','CK20','APCK','BAT','CASH','FLML','HSA','IRA',
'IRTH','ITRD','MO','PREC','CDFN','CDFC','CDFI','INVR','DLR','CHSA','CITA','CRTA',
'CLRA','CANZ','DEF1','LETR','DEF2','DEF3','SDFP','SDFS','SDFI','SVWV','PASS',
'SVRT','TDFR','TDFN','CDNR')
@@ -0,0 +1 @@
SELECT EFFDATETIME FROM OSIBANK.ACCTACCTSTATHIST WHERE ACCTNBR = :accountNumber and ACCTSTATCD = 'CO' ORDER BY EFFDATETIME desc
@@ -0,0 +1,110 @@
WITH PersonLookup AS
(
SELECT DISTINCT
MAX(n.PERSNBR) AS PERSNBR,
MAX(n.SHAREACCTNBR) AS SHAREACCTNBR,
MAX(n.MEMBERAGREENBR) AS MEMBERAGREENBR,
MAX(n.PRIORITY) AS PRIORITY
FROM (
SELECT a.TAXRPTFORPERSNBR AS PERSNBR, a.ACCTNBR AS SHAREACCTNBR, m.MEMBERAGREENBR, 0 AS PRIORITY
FROM ACCT a
LEFT OUTER JOIN MEMBERAGREEMENT m ON m.PRIMARYPERSNBR = a.TAXRPTFORPERSNBR
LEFT OUTER JOIN OSIBANK.ACCTACCTROLEPERS a1 ON a1.ACCTNBR = a.ACCTNBR AND a.TAXRPTFORPERSNBR <> a1.PERSNBR AND a1.ACCTROLECD = 'CUST'
WHERE a1.ACCTROLECD IS NULL
UNION
SELECT DISTINCT a.PERSNBR, a3.ACCTNBR AS SHAREACCTNBR, NULL AS MEMBERAGREENBR, 1 AS PRIORITY
FROM OSIBANK.ACCTACCTROLEPERS a
INNER JOIN OSIBANK.ACCTROLE a2 ON a.ACCTROLECD = a2.ACCTROLECD AND a2.TRANSACTYN = 'Y'
INNER JOIN ACCT a3 ON a.ACCTNBR IN (a3.ACCTNBR, a3.STMTACCTNBR)
LEFT OUTER JOIN MEMBERAGREEMENT e ON e.SHAREACCTNBR = a3.STMTACCTNBR
WHERE a.EFFDATE <= CURRENT_DATE
AND a.EFFDATE IS NOT NULL
) n
WHERE n.PERSNBR = :personNumber
GROUP BY (n.PERSNBR, n.SHAREACCTNBR, n.MEMBERAGREENBR)
ORDER BY (MAX(n.PRIORITY))
)
,Person AS
(
SELECT DISTINCT e.FIRSTNAME||COALESCE(nullif(' '||e.MDLINIT,' '), '')||' '||e.LASTNAME AS PERSONNAME, l.PERSNBR, l.MEMBERAGREENBR, l.SHAREACCTNBR
FROM OSIBANK.PERS e
INNER JOIN PersonLookup l ON l.PERSNBR=e.PERSNBR
)
,Phone_list AS
(
SELECT DISTINCT p.PERSNBR, p.AREACD||p.EXCHANGE||p.PHONENBR AS phone_number, p.PHONEUSECD AS phone_type, p.PHONESEQ,
ROW_NUMBER () OVER(PARTITION BY p.PERSNBR, p.PHONEUSECD ORDER BY PREFERREDYN DESC, p.PHONESEQ DESC) AS rn
FROM OSIBANK.PERSPHONE p
INNER JOIN PersonLookup l ON l.PERSNBR=p.PERSNBR
WHERE p.PHONEUSECD IN ('PER', 'CELL', 'BUS')
)
,phone_part AS
(
SELECT * FROM
(
SELECT PERSNBR, phone_type, phone_number
FROM Phone_list
WHERE rn=1
)
PIVOT
(
MAX(phone_number) FOR phone_type IN ('PER' AS Home_Phone, 'CELL' AS Cell_Phone, 'BUS' AS Business_Phone)
)
)
,SharedAcctTran AS
(
SELECT t.ACCTNBR, a.PERSNBR, t.RTXNTYPCD, t.ORIGPOSTDATE, t.TRANAMT, a.SHAREACCTNBR,
CASE WHEN t.RTXNTYPCD = 'WTH' THEN 'WTH'
WHEN t.RTXNTYPCD IN ('DEP', 'XDEP') THEN 'DEP' END AS TransType
FROM PersonLookup a
INNER JOIN OSIBANK.RTXN t ON t.ACCTNBR=a.SHAREACCTNBR AND t.RTXNTYPCD IN ('WTH','DEP','XDEP')
ORDER BY t.ORIGPOSTDATE DESC
FETCH FIRST 1000 ROWS ONLY
)
,SharedAcctTranOrder AS
(
SELECT ACCTNBR, PERSNBR, ORIGPOSTDATE, TRANAMT, RTXNTYPCD, TransType, SHAREACCTNBR,
ROW_NUMBER() OVER(PARTITION BY ACCTNBR, TransType ORDER BY ORIGPOSTDATE DESC) AS rn
FROM SharedAcctTran
)
,SharedAcctTran_Part AS
(
SELECT ACCTNBR, PERSNBR, TransType, SHAREACCTNBR,
CASE WHEN TransType='WTH' THEN ORIGPOSTDATE END AS Last_ShareAcct_Withdrawal_DateTime,
CASE WHEN TransType='DEP' THEN ORIGPOSTDATE END AS Last_Share_Deposit_Date,
CASE WHEN TransType='DEP' THEN TRANAMT END AS Last_Share_Deposit_Amount
FROM SharedAcctTranOrder
WHERE rn=1
)
,Autoloan_Part AS
(
SELECT DISTINCT MAX(l.PERSNBR) AS PERSNBR, MAX(pr.PROPDESC) AS PROPDESC
FROM OSIBANK.ACCT a
INNER JOIN PersonLookup l ON a.ACCTNBR = l.SHAREACCTNBR OR a.TAXRPTFORPERSNBR = l.PERSNBR
INNER JOIN OSIBANK.ACCTPROP AP ON AP.ACCTNBR=a.ACCTNBR
INNER JOIN OSIBANK.prop pr ON pr.propnbr=ap.PROPNBR
WHERE a.MJACCTTYPCD='CNS'
AND a.CURRMIACCTTYPCD IN ('DL01','DL02','DL03','DL04','DV01','DV02','DV03','DV04')
GROUP BY (l.PERSNBR)
ORDER BY a.CONTRACTDATE DESC
)
SELECT DISTINCT
MAX(p.PERSNBR) AS PersonNumber,
MAX(e.PERSONNAME) AS PERSONNAME,
MAX(e.MEMBERAGREENBR) AS MemberNumber,
MAX(p.Home_Phone) AS HomePhone,
MAX(p.Cell_Phone) AS CellPhone,
MAX(p.Business_Phone) AS BusinessPhone,
MAX(w.Last_ShareAcct_Withdrawal_DateTime) AS LastShareAcctWithdrawalTime,
MAX(d.Last_Share_Deposit_Date) AS LastShareDepositDate,
MAX(d.Last_Share_Deposit_Amount) AS LastShareDepositAmount,
MAX(l.PROPDESC) AS VehicleYearMakeModelVin,
MAX(puf.VALUE) AS PassPhrase
FROM phone_part p
LEFT JOIN Person e ON p.PERSNBR=e.PERSNBR
LEFT JOIN PERSUSERFIELD puf on p.PERSNBR=puf.PERSNBR AND puf.userfieldcd='PASS'
LEFT JOIN SharedAcctTran_Part w ON e.SHAREACCTNBR=w.SHAREACCTNBR AND w.TransType='WTH'
LEFT JOIN SharedAcctTran_Part d ON e.SHAREACCTNBR=d.SHAREACCTNBR AND d.TransType='DEP'
LEFT JOIN Autoloan_Part l ON p.PERSNBR=l.PERSNBR
GROUP BY (p.PERSNBR)
FETCH FIRST 2 ROWS ONLY
@@ -0,0 +1,115 @@
WITH PersonLookup AS
(
SELECT DISTINCT
MAX(n.PERSNBR) AS PERSNBR,
MAX(n.SHAREACCTNBR) AS SHAREACCTNBR,
MAX(n.MEMBERAGREENBR) AS MEMBERAGREENBR,
MAX(n.PRIORITY) AS PRIORITY
FROM (
SELECT a.TAXRPTFORPERSNBR AS PERSNBR, a.ACCTNBR AS SHAREACCTNBR, m.MEMBERAGREENBR, 0 AS PRIORITY
FROM ACCT a
LEFT OUTER JOIN MEMBERAGREEMENT m ON m.PRIMARYPERSNBR = a.TAXRPTFORPERSNBR
LEFT OUTER JOIN OSIBANK.ACCTACCTROLEPERS a1 ON a1.ACCTNBR = a.ACCTNBR AND a.TAXRPTFORPERSNBR <> a1.PERSNBR AND a1.ACCTROLECD = 'CUST'
WHERE a1.ACCTROLECD IS NULL
UNION
SELECT DISTINCT a.PERSNBR, a3.ACCTNBR AS SHAREACCTNBR, NULL AS MEMBERAGREENBR, 1 AS PRIORITY
FROM OSIBANK.ACCTACCTROLEPERS a
INNER JOIN OSIBANK.ACCTROLE a2 ON a.ACCTROLECD = a2.ACCTROLECD AND a2.TRANSACTYN = 'Y'
INNER JOIN ACCT a3 ON a.ACCTNBR IN (a3.ACCTNBR, a3.STMTACCTNBR)
LEFT OUTER JOIN MEMBERAGREEMENT e ON e.SHAREACCTNBR = a3.STMTACCTNBR
WHERE a.EFFDATE <= CURRENT_DATE
AND a.EFFDATE IS NOT NULL
) n
INNER JOIN (
SELECT DISTINCT p2.PERSNBR
FROM PERSPHONE p2
WHERE p2.AREACD||p2.EXCHANGE||p2.PHONENBR = :phoneNumber
FETCH FIRST 50 ROWS ONLY
) l ON l.PERSNBR = n.PERSNBR
GROUP BY (n.PERSNBR, n.SHAREACCTNBR)
ORDER BY (MAX(n.PRIORITY))
)
,Person AS
(
SELECT DISTINCT e.FIRSTNAME||COALESCE(nullif(' '||e.MDLINIT,' '), '')||' '||e.LASTNAME AS PERSONNAME, l.PERSNBR, l.MEMBERAGREENBR, l.SHAREACCTNBR
FROM OSIBANK.PERS e
INNER JOIN PersonLookup l ON l.PERSNBR=e.PERSNBR
)
,Phone_list AS
(
SELECT DISTINCT p.PERSNBR, p.AREACD||p.EXCHANGE||p.PHONENBR AS phone_number, p.PHONEUSECD AS phone_type, p.PHONESEQ,
ROW_NUMBER () OVER(PARTITION BY p.PERSNBR, p.PHONEUSECD ORDER BY PREFERREDYN DESC, p.PHONESEQ DESC) AS rn
FROM OSIBANK.PERSPHONE p
INNER JOIN PersonLookup l ON l.PERSNBR=p.PERSNBR
WHERE p.PHONEUSECD IN ('PER', 'CELL', 'BUS')
)
,phone_part AS
(
SELECT * FROM
(
SELECT PERSNBR, phone_type, phone_number
FROM Phone_list
WHERE rn=1
)
PIVOT
(
MAX(phone_number) FOR phone_type IN ('PER' AS Home_Phone, 'CELL' AS Cell_Phone, 'BUS' AS Business_Phone)
)
)
,SharedAcctTran AS
(
SELECT t.ACCTNBR, a.PERSNBR, t.RTXNTYPCD, t.ORIGPOSTDATE, t.TRANAMT, a.SHAREACCTNBR,
CASE WHEN t.RTXNTYPCD = 'WTH' THEN 'WTH'
WHEN t.RTXNTYPCD IN ('DEP', 'XDEP') THEN 'DEP' END AS TransType
FROM PersonLookup a
INNER JOIN OSIBANK.RTXN t ON t.ACCTNBR=a.SHAREACCTNBR AND t.RTXNTYPCD IN ('WTH','DEP','XDEP')
ORDER BY t.ORIGPOSTDATE DESC
FETCH FIRST 1000 ROWS ONLY
)
,SharedAcctTranOrder AS
(
SELECT ACCTNBR, PERSNBR, ORIGPOSTDATE, TRANAMT, RTXNTYPCD, TransType, SHAREACCTNBR,
ROW_NUMBER() OVER(PARTITION BY ACCTNBR, TransType ORDER BY ORIGPOSTDATE DESC) AS rn
FROM SharedAcctTran
)
,SharedAcctTran_Part AS
(
SELECT ACCTNBR, PERSNBR, TransType, SHAREACCTNBR,
CASE WHEN TransType='WTH' THEN ORIGPOSTDATE END AS Last_ShareAcct_Withdrawal_DateTime,
CASE WHEN TransType='DEP' THEN ORIGPOSTDATE END AS Last_Share_Deposit_Date,
CASE WHEN TransType='DEP' THEN TRANAMT END AS Last_Share_Deposit_Amount
FROM SharedAcctTranOrder
WHERE rn=1
)
,Autoloan_Part AS
(
SELECT DISTINCT MAX(l.PERSNBR) AS PERSNBR, MAX(pr.PROPDESC) AS PROPDESC
FROM OSIBANK.ACCT a
INNER JOIN PersonLookup l ON a.ACCTNBR = l.SHAREACCTNBR OR a.TAXRPTFORPERSNBR = l.PERSNBR
INNER JOIN OSIBANK.ACCTPROP AP ON AP.ACCTNBR=a.ACCTNBR
INNER JOIN OSIBANK.prop pr ON pr.propnbr=ap.PROPNBR
WHERE a.MJACCTTYPCD='CNS'
AND a.CURRMIACCTTYPCD IN ('DL01','DL02','DL03','DL04','DV01','DV02','DV03','DV04')
GROUP BY (l.PERSNBR)
ORDER BY a.CONTRACTDATE DESC
)
SELECT DISTINCT
MAX(p.PERSNBR) AS PersonNumber,
MAX(e.PERSONNAME) AS PERSONNAME,
MAX(e.MEMBERAGREENBR) AS MemberNumber,
MAX(p.Home_Phone) AS HomePhone,
MAX(p.Cell_Phone) AS CellPhone,
MAX(p.Business_Phone) AS BusinessPhone,
MAX(w.Last_ShareAcct_Withdrawal_DateTime) AS LastShareAcctWithdrawalTime,
MAX(d.Last_Share_Deposit_Date) AS LastShareDepositDate,
MAX(d.Last_Share_Deposit_Amount) AS LastShareDepositAmount,
MAX(l.PROPDESC) AS VehicleYearMakeModelVin,
MAX(puf.VALUE) AS PassPhrase
FROM phone_part p
LEFT JOIN Person e ON p.PERSNBR=e.PERSNBR
LEFT JOIN PERSUSERFIELD puf on p.PERSNBR=puf.PERSNBR AND puf.userfieldcd='PASS'
LEFT JOIN SharedAcctTran_Part w ON e.SHAREACCTNBR=w.SHAREACCTNBR AND w.TransType='WTH'
LEFT JOIN SharedAcctTran_Part d ON e.SHAREACCTNBR=d.SHAREACCTNBR AND d.TransType='DEP'
LEFT JOIN Autoloan_Part l ON p.PERSNBR=l.PERSNBR
GROUP BY (p.PERSNBR)
FETCH FIRST 2 ROWS ONLY
@@ -0,0 +1,143 @@
/*New Activity Manager Incentive Referral Query
----------------------------------
DESCRIPTION:
Get all Activity Manager entries associated with incented referrals.
Supplies Activity Data, Associate Name information, as well as the Agreement Number, Card Status (Should always be ISS (issue)),
CardAgreementTypeCd, AccountNumber for the associated agreement as well as the account status at time the activity was generated.
RETURNS: Models/Activity/ActivityManagerIncentiveReferral.cs
PARAMS:
|afterActivityOd : Null or Int (as string)
|------------------------------------------------------------------------------
|Returns all Activity Manager entries with a ID after the supplied ID
|If null defaults to -1 which will return all Checking SalesActivities
|newerThanOriginationDate : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|-----------------------------------------------------------------------------
|Returns all Activity Manager entries that were created after specified date time.
|The origination date is always the date that the activity was first entered into the system
|regardless of its initial station or what station it is in now
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|returns all Checking Sales Activities
NOTES:
- When an activity's station is updated, its activity stays the same, but its created date and date last maintained
dates are updated to the StationDate. They are always with respect to the current station. To get the date that
the activity first entered activity manager, use OriginationDate
- When a referral is for a business the LF_PERS.EXTID3 column has a O in front of the OrgNbr,
When a referral is for a person the LFPERS.EXTID3 coulumn has a P in front of the PersNbr
- Remember that these fields are all entered manually by an employee. This should not be used as a source of truth for any given activity.
This data is supplied with the intention of matching this referral to a sale. It is the best plan to focus on the referred person,
and manually query for related accounts as opposed to using the 'custom fields'. We include them here for audit purposes.
CUSTOM FIELD INFO (ActivityManager.LF_LEAD_CUSTOM):
Credit Card Balance Transfer
--LeadCust_39 = External CC Account Number
--LeadCust_31 = Landmark Credit Card Number
--LeadCust_29 = Transfer Ammount
--LeadCust_28 = Payment State + Zip
--LeadCust_27 = Payment City
--LeadCust_26 = Payment Address Line 1
--LeadCust_24 = Transfer Institution
Direct Deposit
--LeadCust_38 = Direct Deposit is Qualified Referral
--LeadCust_4 = Direct Deposit Account Number
LF_PERSON-><COMM{int}TYPE>
B = PAGER
C = MOBILE
E = BUSINESS EMAIL
F = FAX
H = HOME
J = PERSONAL EMAIL
P = PHONE
*/
WITH EmployeeEmail AS (
SELECT pers.USERID AS SafUserId,
prod.PERSNBR AS SafPersNbr,
prod.PRODPERSID AS CorePersNbr,
addr.TEXT AS EmployeeEmail
FROM SAF.PERSUSER pers
JOIN SAF.PERSPROD prod ON
pers.PERSNBR = PROD.PERSNBR
AND prod.PRODNBR = '3'
JOIN OSIBANK.PERSADDRUSE paddr ON
prod.PRODPERSID = PADDR.PERSNBR
JOIN OSIBANK.ADDRLINE addr ON
paddr.ADDRNBR = addr.ADDRNBR
AND paddr.ADDRUSECD = 'EBUS'
)
SELECT ll.ID AS ActivityId,
-- These custom fields can be reused, guarentee their contents by only using them for their respective campaigns
(CASE WHEN ll.CAMPAIGN = 'CC Balance Transfer' THEN llc.LEADCUST_31 ELSE NULL END) AS LandmarkCreditCardNumber,
(CASE WHEN ll.CAMPAIGN = 'Direct Deposit' THEN llc.LEADCUST_4 ELSE NULL END) AS DirectDepositAccountNumber,
ll.ORIGINATOR AS OriginatorUserId,
safprod.PRODPERSID AS OriginatorPersNbr,
p.FIRSTNAME AS OriginatorFirstName,
p.LASTNAME AS OriginatorLastName,
p.MDLINIT AS OriginatorMiddleInitial,
ee.EmployeeEmail AS EmployeeEmail,
ll.CAMPAIGN AS Campaign,
ll.CATEGORY AS Category,
ll.STATION AS ReferralStation,
ll.DATELASTMAINT AS LastUpdatedDateTime,
(CASE WHEN att.INITIAL_STATION = 'Yes' THEN 1 ELSE 0 END) AS IsInitialStation,
(CASE WHEN att.FINAL_STATION = 'Yes' THEN 1 ELSE 0 END) AS IsFinalStation,
att.ACTIVITY_ORIGINATION_DATE AS OriginationDateTime,
att.ENTER_STATION_DATETIME AS StationDateTime,
ll.SOURCE AS OriginatingBranchName,
(CASE WHEN SUBSTR(lp.EXTID3, 1, 1) = 'P' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+') ELSE NULL END) AS ReferredPersonNbr,
(CASE WHEN SUBSTR(lp.EXTID3, 1, 1) = 'O' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+') ELSE NULL END) AS ReferredOrgNbr,
CASE WHEN REFPERS.LASTNAME IS NOT NULL THEN CONCAT(CONCAT(REFPERS.LASTNAMEUPPER, ','), REFPERS.FIRSTNAMEUPPER)
WHEN lp.LastName IS NOT NULL THEN CONCAT(CONCAT(UPPER(lp.LastName), ','), UPPER(lp.FirstName)) ELSE NULL END AS ReferredPersonName,
REFORG.ORGNAME AS ReferredOrgName,
lp.EXTID3 AS ReferredPersOrgNbr,
lp.PREFERRED_PHONE AS PreferredPhone,
COALESCE(lp.COMM1, '') AS COMM1,
COALESCE(lp.COMM2, '') AS COMM2,
COALESCE(lp.COMM3, '') AS COMM3,
COALESCE(lp.COMM4, '') AS COMM4,
COALESCE(lp.COMM5, '') AS COMM5,
COALESCE(lp.COMM6, '') AS COMM6,
COALESCE(lp.COMM7, '') AS COMM7
FROM ACTIVITYMANAGER.LF_LEAD ll
JOIN ACTIVITYMANAGER.LF_LEAD_CUSTOM llc ON
ll.ID = llc.ID
JOIN SAF.PERSUSER safp ON
safp.USERID = ll.ORIGINATOR
JOIN SAF.PERSPROD safprod ON
SAFPROD.PERSNBR = safp.PERSNBR AND
SAFPROD.PRODNBR = '3'
JOIN OSIBANK.PERS p ON
p.PERSNBR = SAFPROD.PRODPERSID
LEFT JOIN EmployeeEmail ee ON
ee.SafPersNbr = SAFP.PERSNBR
JOIN ACTIVITYMANAGER.LF_PERSON lp ON
lp.ID = ll.PERSONID
JOIN ACTIVITYMANAGER.ACTIVITY_TIME_TRACKING att
ON att.ACTIVITY_ID = ll.ID AND SEQUENCE_NUMBER = (
SELECT MAX(SEQUENCE_NUMBER)
FROM ACTIVITYMANAGER.ACTIVITY_TIME_TRACKING att2
WHERE att2.ACTIVITY_ID = ll.ID
)
LEFT JOIN OSIBANK.ORG REFORG ON reforg.ORGNBR = (CASE WHEN SUBSTR(lp.EXTID3, 1, 1) = 'O' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+') ELSE NULL END)
LEFT JOIN OSIBANK.PERS REFPERS ON refpers.PERSNBR = (CASE WHEN SUBSTR(lp.EXTID3, 1, 1) = 'P' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+') ELSE NULL END)
WHERE ll.CAMPAIGN IN (
'ATM Card',
'Check Card Referral',
'Checking Referral',
'Direct Deposit',
'CC Balance Transfer',
'Mortgage Referral',
'LIC Referral',
'First Mortgage Referral',
'eStatement Referral')
AND ll.ID > TO_NUMBER(COALESCE(:afterActivityId, '-1'))
AND att.ACTIVITY_ORIGINATION_DATE >= TO_TIMESTAMP(COALESCE(:newerThanOriginationDate, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
@@ -0,0 +1,136 @@
/*New ATM/Check Cards Sale Query
----------------------------------
DESCRIPTION:
Get all Activities related to New Check or ATM Cards (ActvType = AGRE and SubActivity contains a change
to the 'CardAgreement' table where the AgreeTypCd = 'DBT', 'DBT2', 'BDBT', 'ATM')
after a supplied DateTime (inclusive) or after a supplied ActivityNumber (not inclusive) or both.
Supplies Activity Data, Associate Name information, as well as the Agreement Number, Card Status (Should always be ISS (issue)),
CardAgreementTypeCd, AccountNumber for the associated agreement as well as the account status at time the activity was generated.
RETURNS: Models/Activity/NewAtmCheckCardActivity.cs
PARAMS:
|afterActivityNbr : Null or Int (as string)
|------------------------------------------------------------------------------
|Returns all Checking Sales with ActivityNbrs larger than the supplied number.
|If null defaults to -1 which will return all Checking SalesActivities
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|-----------------------------------------------------------------------------
|Returns all Checking Sales with ActivityNbrs that occured on or after the supplied date
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|returns all Checking Sales Activities
|limitAmount : Null or Int (as string)
|------------------------------------------------------------------------------
|Return record count
|If null defaults to '100'
NOTES:
- 'AGRE' activity is an activity related to a change or update to an agreement
- 'DBT', 'DBT2', 'BDBT' abd 'ATM are the only CardTypes that are incented
- This will return all new ATM/Check card sales, even those that were created when a new account was created,
Note that these are not incented. Uncommment the line in the where clause to filter out unincented accounts.
- Though not explicitly filtered these results will only include cards in the 'ISS' issued status. This is because
of the join with CARDMEMBERISSUEHIST
- The AcctStatDuringActivity column is the last status of the account (from ACCTACCTSTATHIST table) before or when
the activity occured. We do not return the current status at the time of the query.
- When Card is in APPR state, sometimes personNbr will be missing. When creating this query there were no situations
Where the cards was in ACT state and did not have a person number assigned to them
*/
WITH EmployeeEmail AS (
SELECT p.PERSNBR As CorePersNbr,
addr.TEXT AS EmployeeEmail
FROM OSIBANK.PERSEMPL p
JOIN OSIBANK.PERSADDRUSE paddr ON
p.PERSNBR = PADDR.PERSNBR
JOIN OSIBANK.ADDRLINE addr ON
paddr.ADDRNBR = addr.ADDRNBR
AND paddr.ADDRUSECD = 'EBUS'
),
ActivitySubActivity AS (
SELECT *
FROM OSIBANK.ACTVSUBACTV asa
WHERE asa.TABLEID = 'CardAgreement'
),
AGREEMENTACTIVITYDATA AS (
SELECT a.ACTVNBR AS ActivityNbr,
a.ACTVDATETIME AS ActivityDateTime,
a.RESPPERSNBR AS ResponsiblePersonNbr,
a.ACTVTYPCD AS ActivityTypeCde,
-- CardAgreement table has only one row in value table. Other rows may have duplicate unmatching data for Non-owner users
max(CASE WHEN asa.COLUMNID = 'AgreeNbr' THEN asa.NEWVALUE END) AS AgreementNbr,
max(CASE WHEN asa.COLUMNID = 'AgreeTypCd' THEN asa.NEWVALUE END) AS CardState,
max(CASE WHEN asa.COLUMNID = 'AgreeTypCd' THEN asa.NEWVALUE END) AS CardType,
max(CASE WHEN asa.COLUMNID = 'ServChgAcctNbr' THEN asa.NEWVALUE END) AS AccountNbr,
max(CASE WHEN asa.COLUMNID = 'OwnerPersNbr' THEN asa.NEWVALUE END) AS OwnerPersonNbr,
max(CASE WHEN asa.COLUMNID = 'OwnerOrgNbr' THEN asa.NEWVALUE END) AS OwnerOrgNbr
FROM OSIBANK.ACTV a
LEFT JOIN ActivitySubActivity asa ON asa.ACTVNBR = a.ACTVNBR
WHERE a.ACTVTYPCD = 'AGRE'
GROUP BY a.ACTVNBR, a.ACTVDATETIME, a.RESPPERSNBR, a.ACTVTYPCD
),
PHONEMETADATA AS (
SELECT p.PERSNBR,
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR), ',') AS PhoneNumbers
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
GROUP BY p.PERSNBR
),
EMAILMETADATA AS (
SELECT p.PERSNBR,
LISTAGG(al.TEXT, ',') AS EmailAddresses
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM', 'EML')
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
GROUP BY p.PERSNBR
)
SELECT ActvData.*,
acc.CURRACCTSTATCD AS AcctStatAtQueryTime,
hist.ACCTSTATCD AS AcctStateAtActivity,
hist.EFFDATETIME AS AcctStateEffDateTime,
p.FIRSTNAME AS AssociateFirst,
p.LASTNAME AS AssociateLast,
p.MDLINIT AS AssociateMiddleInit,
CASE
WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','), TAXPERS.FIRSTNAMEUPPER)
ELSE NULL
END AS TaxPersonName,
TAXORG.ORGNAME AS TaxOrgName,
ee.EmployeeEmail AS EmployeeEmail,
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
emd.EmailAddresses AS TaxPersonEmailAddresses
FROM AGREEMENTACTIVITYDATA ActvData
-- Sometimes a card activity shows up with identical data but a different date time Seconds apart.
-- There seems to always be an entry created in CARDMEMBERISSUEHIST that has one record matching these timestamps
JOIN OSIBANK.CARDMEMBERISSUEHIST c ON
c.AGREENBR = ActvData.AgreementNbr
AND c.EFFDATETIME = ActvData.ActivityDateTime
JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = ActvData.AccountNbr
LEFT JOIN OSIBANK.PERS taxpers ON ActvData.OwnerPersonNbr = TAXPERS.PERSNBR
LEFT JOIN OSIBANK.ORG taxorg ON ActvData.OwnerOrgNbr = TAXORG.ORGNBR
--Check for most recent account status before the Activity was recorded
--This has been verified to not produce duplicate rows and not eliminate rows
JOIN OSIBANK.ACCTACCTSTATHIST hist ON ActvData.AccountNbr = hist.ACCTNBR AND hist.TIMEUNIQUEEXTN = (
SELECT MAX(TIMEUNIQUEEXTN)
FROM OSIBANK.ACCTACCTSTATHIST histsearch
WHERE histsearch.EFFDATETIME <= ActvData.ActivityDateTime
AND histsearch.ACCTNBR = ActvData.AccountNbr
)
JOIN OSIBANK.PERS p ON ActvData.ResponsiblePersonNbr = p.PERSNBR
JOIN EmployeeEmail ee ON ActvData.ResponsiblePersonNbr = ee.CorePersNbr
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
WHERE (ActvData.AgreementNbr IS NOT NULL AND ActvData.CardState IS NOT NULL AND ActvData.CARDTYPE IS NOT NULL)
AND ActvData.CardType IN ('DBT', 'DBT2', 'BDBT', 'ATM')
--AND ACCTSTATCD = 'ACT' (Uncomment to only return cards that we issued to active accounts)
AND ActivityNbr > TO_NUMBER(COALESCE(:afterActivityNbr, '-1'))
AND ActivityDateTime >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
ORDER BY ActvData.ActivityDateTime ASC
FETCH NEXT TO_NUMBER(COALESCE(:limitAmount, '100')) ROWS ONLY
@@ -0,0 +1,126 @@
/*New Checking Account Sale Query
----------------------------------
DESCRIPTION:
Get all Activities related to New checking accounts (ActvType = AADD and AccountType = 'Checking')
after a supplied DateTime (inclusive) or after a supplied ActivityNumber (not inclusive) or both.
Supplies Activity Data as well as the Account Number of the new account and the account status at the time of querying
RETURNS: Models/Activity/NewCheckingAccountActivity.cs
PARAMS:
|afterActivityNbr : Null or Int (as string)
|------------------------------------------------------------------------------
|Returns all Checking Sales with ActivityNbrs larger than the supplied number.
|If null defaults to -1 which will return all Checking SalesActivities
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|-----------------------------------------------------------------------------
|Returns all Checking Sales with ActivityNbrs that occured on or after the supplied date
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|returns all Checking Sales Activities
|limitAmount : Null or Int (as string)
|------------------------------------------------------------------------------
|Return record count
|If null defaults to '100'
NOTES:
- Activity Type Code 'AADD' are activities related to 'Adding an account'
- Limitation: You get the status of the account when querying. This could be different immediately after creation
- When Acct is associated with person, the TAXRPTFORPERSNBR will populate, when associated with organizations the
when associated with an organization the TAXRPTFORORGNBR will populate
- Using both the following sub account filters resulted in the same number of activities to be found (638) and removed duplicates. When neither of these are checked for null values, there are 662 (24 duplicates)
1. max(CASE WHEN a2.OLDVALUE = 'Key=' AND a2.TABLEID = 'Acct' AND a2.COLUMNID = 'AcctNbr' AND a2.DATABASEACTVCD = 'UPD' THEN a2.NEWVALUE END) AS SubActivityAccount (638 results)
2. max(CASE WHEN a2.COLUMNID = 'ACCTNBR' AND a2.TABLEID = 'ACCT' AND a2.DATABASEACTVCD = 'ADD' THEN a2.NEWVALUE END) AS SubActivityAccount (638 results)
*/
WITH EmployeeEmail AS (
SELECT p.PERSNBR As CorePersNbr,
addr.TEXT AS EmployeeEmail
FROM OSIBANK.PERSEMPL p
JOIN OSIBANK.PERSADDRUSE paddr ON
p.PERSNBR = PADDR.PERSNBR
JOIN OSIBANK.ADDRLINE addr ON
paddr.ADDRNBR = addr.ADDRNBR
AND paddr.ADDRUSECD = 'EBUS'
),
OriginalBalance AS (
--This assumes there is only 1 Note/Bal sub account for every account
--So far that has been true.
SELECT ACCTNBR, ORIGBAL
FROM OSIBANK.ACCTSUBACCT a2
WHERE a2.BALCATCD = 'NOTE'
AND a2.BALTYPCD = 'BAL'
),
ActivitySubActivity AS (
SELECT *
FROM OSIBANK.ACTVSUBACTV asa
WHERE asa.TABLEID = 'Acct'
),
NEWCHECKINGACTIVITYDATA AS (
SELECT a.ACTVNBR AS ActivityNbr,
a.ACTVDATETIME AS ActivityDateTime,
a.SUBJACCTNBR AS SubjectAccountNbr,
a.RESPPERSNBR AS ResponsiblePersonNbr,
a.ACTVTYPCD AS ActivityTypeCode,
--2 activities are sometimes created for adding an account, only 1 will update the account from key= to the actual account number value
max(CASE
WHEN asa.OLDVALUE = 'Key=' AND asa.COLUMNID = 'AcctNbr' AND asa.DATABASEACTVCD = 'UPD' THEN asa.NEWVALUE
END) AS SubActivityAccount
FROM OSIBANK.ACTV a
LEFT JOIN ActivitySubActivity asa ON asa.ACTVNBR = a.ACTVNBR
WHERE a.ACTVTYPCD = 'AADD'
GROUP BY a.ACTVNBR, a.ACTVDATETIME, a.SUBJACCTNBR, a.RESPPERSNBR, a.ACTVTYPCD
),
PHONEMETADATA AS (
SELECT p.PERSNBR,
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR), ',') AS PhoneNumbers
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
GROUP BY p.PERSNBR
),
EMAILMETADATA AS (
SELECT p.PERSNBR,
LISTAGG(al.TEXT, ',') AS EmailAddresses
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM', 'EML')
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
GROUP BY p.PERSNBR
)
SELECT ActvData.*,
p.FIRSTNAME AS AssociateFirst,
p.LASTNAME AS AssociateLast,
p.MDLINIT AS AssociateMiddleInit,
ee.EmployeeEmail AS EmployeeEmail,
acc.CURRACCTSTATCD AS CurrentAccountStatus,
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
CASE
WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','), TAXPERS.FIRSTNAMEUPPER)
ELSE NULL
END AS TaxPersonName,
TAXORG.ORGNAME AS TaxOrgName,
acc.BranchOrgNbr As BranchOrgNbr,
acc.CONTRACTDATE AS AccountContractDate,
acc.CURRMIACCTTYPCD AS MinorAccountType,
org.ORGNAME AS BranchOrgName,
ob.ORIGBAL AS OriginalBalance,
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
emd.EmailAddresses AS TaxPersonEmailAddresses
FROM NEWCHECKINGACTIVITYDATA ActvData
JOIN OSIBANK.PERS p ON p.PERSNBR = ActvData.ResponsiblePersonNbr
LEFT JOIN EmployeeEmail ee ON ee.CorePersNbr = ActvData.ResponsiblePersonNbr
JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = ActvData.SubjectAccountNbr
JOIN OSIBANK.ORG org ON acc.BranchOrgNbr = org.ORGNBR
LEFT JOIN OSIBANK.PERS taxpers ON acc.TAXRPTFORPERSNBR = TAXPERS.PERSNBR
LEFT JOIN OSIBANK.ORG taxorg ON acc.TAXRPTFORORGNBR = TAXORG.ORGNBR
LEFT JOIN OriginalBalance ob ON acc.ACCTNBR = ob.AcctNbr
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
WHERE ActvData.SubActivityAccount IS NOT NULL
AND acc.CURRMIACCTTYPCD IN ('CK04', 'CK01', 'CK02', 'CK03', 'BC10', 'BC20', 'MMC5', 'BOC1', 'BOC2', 'BC01', 'MMC1', 'CK05', 'BC11', 'CK06')
AND ActivityNbr > TO_NUMBER(COALESCE(:afterActivityNbr, '-1'))
AND ActivityDateTime >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
ORDER BY ActvData.ActivityDateTime ASC
FETCH NEXT TO_NUMBER(COALESCE(:limitAmount, '100')) ROWS ONLY
@@ -0,0 +1,103 @@
/*New Checking Account Sale Query
----------------------------------
DESCRIPTION:
Get all Activities related to New checking accounts (ActvType = ADAC and AccountType = 'Checking')
after a supplied DateTime (inclusive) or after a supplied ActivityNumber (not inclusive) or both.
Supplies Activity Data as well as the Account Number of the new account and the account status at the time of querying
RETURNS: Models/Activity/NewCheckingAccountActivity.cs
PARAMS:
|afterActivityNbr : Null or Int (as string)
|------------------------------------------------------------------------------
|Returns all Checking Sales with ActivityNbrs larger than the supplied number.
|If null defaults to -1 which will return all Checking SalesActivities
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|-----------------------------------------------------------------------------
|Returns all Checking Sales with ActivityNbrs that occured on or after the supplied date
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|returns all Checking Sales Activities
NOTES:
- Activity Type Code 'ADAC' are activities related to 'Adding an account'
- Limitation: You get the status of the account when querying. This could be different immediately after creation
- When Acct is associated with person, the TAXRPTFORPERSNBR will populate, when associated with organizations the
when associated with an organization the TAXRPTFORORGNBR will populate
- Using both the following sub account filters resulted in the same number of activities to be found (638) and removed duplicates. When neither of these are checked for null values, there are 662 (24 duplicates)
1. max(CASE WHEN a2.OLDVALUE = 'Key=' AND a2.TABLEID = 'Acct' AND a2.COLUMNID = 'AcctNbr' AND a2.DATABASEACTVCD = 'ADD' THEN a2.NEWVALUE END) AS SubActivityAccount (638 results)
2. max(CASE WHEN a2.COLUMNID = 'ACCTNBR' AND a2.TABLEID = 'ACCT' AND a2.DATABASEACTVCD = 'ADD' THEN a2.NEWVALUE END) AS SubActivityAccount (638 results)
*/
WITH OriginalBalance AS (
--This assumes there is only 1 Note/Bal sub account for every account
--So far that has been true.
SELECT ACCTNBR, ORIGBAL
FROM OSIBANK.ACCTSUBACCT a2
WHERE a2.BALCATCD = 'NOTE'
AND a2.BALTYPCD = 'BAL'
),
NEWCHECKINGACTIVITYDATA AS (
SELECT a.ACTVNBR AS ActivityNbr,
a.ACTVDATETIME AS ActivityDateTime,
a.SUBJACCTNBR AS SubjectAccountNbr,
a.RESPPERSNBR AS ResponsiblePersonNbr,
a.ACTVTYPCD AS ActivityTypeCode,
--2 activities are sometimes created for adding an account, only 1 will update the account from key= to the actual account number value
max(CASE
WHEN asa.OLDVALUE = 'Key=' AND asa.COLUMNID = 'AcctNbr' AND asa.DATABASEACTVCD = 'ADD' THEN asa.NEWVALUE
END) AS SubActivityAccount
FROM OSIBANK.ACTV a
LEFT JOIN OSIBANK.ACTVSUBACTV asa ON asa.ACTVNBR = a.ACTVNBR and asa.TABLEID = 'Acct'
WHERE a.ACTVTYPCD = 'ADAC'
GROUP BY a.ACTVNBR, a.ACTVDATETIME, a.SUBJACCTNBR, a.RESPPERSNBR, a.ACTVTYPCD
),
PHONEMETADATA AS (
SELECT p.PERSNBR,
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR), ',') AS PhoneNumbers
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
GROUP BY p.PERSNBR
),
EMAILMETADATA AS (
SELECT p.PERSNBR,
LISTAGG(al.TEXT, ',') AS EmailAddresses
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM', 'EML')
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
GROUP BY p.PERSNBR )
SELECT ActvData.*,
'Digital' AS AssociateFirst,
'Banking' AS AssociateLast,
p.MDLINIT AS AssociateMiddleInit,
acc.CURRACCTSTATCD AS CurrentAccountStatus,
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
'[email protected]' AS EmployeeEmail, --we will not have employee email for Digital Banking
CASE
WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','), TAXPERS.FIRSTNAMEUPPER)
ELSE NULL
END AS TaxPersonName,
TAXORG.ORGNAME AS TaxOrgName,
acc.BranchOrgNbr As BranchOrgNbr,
acc.CONTRACTDATE AS AccountContractDate,
acc.CURRMIACCTTYPCD AS MinorAccountType,
org.ORGNAME AS BranchOrgName,
ob.ORIGBAL AS OriginalBalance,
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
emd.EmailAddresses AS TaxPersonEmailAddresses
FROM NEWCHECKINGACTIVITYDATA ActvData
JOIN OSIBANK.PERS p ON p.PERSNBR = ActvData.ResponsiblePersonNbr
JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = ActvData.SubjectAccountNbr
JOIN OSIBANK.ORG org ON acc.BranchOrgNbr = org.ORGNBR
LEFT JOIN OSIBANK.PERS taxpers ON acc.TAXRPTFORPERSNBR = TAXPERS.PERSNBR
LEFT JOIN OSIBANK.ORG taxorg ON acc.TAXRPTFORORGNBR = TAXORG.ORGNBR
LEFT JOIN OriginalBalance ob ON acc.ACCTNBR = ob.AcctNbr
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
WHERE acc.CURRMIACCTTYPCD IN ('CK04', 'CK01', 'CK02', 'CK03', 'BC10', 'BC20', 'MMC5', 'BOC1', 'BOC2', 'BC01', 'MMC1', 'CK05', 'BC11', 'CK06')
AND ActivityNbr > TO_NUMBER(COALESCE(:afterActivityNbr, '-1'))
AND ActivityDateTime >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
ORDER BY ActvData.ActivityDateTime ASC
FETCH NEXT TO_NUMBER(COALESCE(:limitAmount, '200')) ROWS ONLY
@@ -0,0 +1,175 @@
/*New Debt Protected Loan Sale Query
----------------------------------
DESCRIPTION:
All activities related to new loans that can have debt protection associated with them, but are not
incentivised like Mortgages and Vehicles.
RETURNS: Models/Activity/NewCheckingAccountActivity.cs
PARAMS:
|afterActivityNbr : Null or Int (as string)
|------------------------------------------------------------------------------
|Returns all Sales with ActivityNbrs larger than the supplied number.
|If null defaults to -1 which will return all Checking SalesActivities
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|-----------------------------------------------------------------------------
|Returns all Sales with ActivityNbrs that occured on or after the supplied date
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|returns all Checking Sales Activities
NOTES:
- Use ContractDate as the date of the sale. This is the day that the customer signs for the loan. There is a legal grace-period between
When a loan is signed and when the loan is booked into the banking system. This is why there is a gap between contract date and activity date.
-Only need to know if an account has debt protection not how many debt protection policies the account has. We select the earliest sold
debt protection and add the date and type to signify that the loan has debt protection
- LADD type activities seem to produce duplicates occasionally, None were found for mortgage type accounts
*/
WITH EmployeeEmail AS (
SELECT p.PERSNBR As CorePersNbr,
addr.TEXT AS EmployeeEmail
FROM OSIBANK.PERSEMPL p
JOIN OSIBANK.PERSADDRUSE paddr ON
p.PERSNBR = PADDR.PERSNBR
JOIN OSIBANK.ADDRLINE addr ON
paddr.ADDRNBR = addr.ADDRNBR
AND paddr.ADDRUSECD = 'EBUS'
),
OriginatorRole AS (
SELECT ACCTNBR, PERSNBR, ACCTROLECD, DATELASTMAINT, EFFDATE
from OSIBANK.ACCTACCTROLEPERS a
WHERE ACCTROLECD = 'OEMP'
GROUP BY ACCTNBR, ACCTROLECD, DATELASTMAINT, EFFDATE, PERSNBR
HAVING DATELASTMAINT = MAX(DATELASTMAINT)
),
LoanLimit AS (
SELECT a2.ACCTNBR, a2.CREDITLIMITAMT, a2.DATELASTMAINT
FROM OSIBANK.ACCTLOANLIMITHIST a2
WHERE a2.CREDITLIMITAMT > '0'
GROUP BY a2.ACCTNBR, a2.CREDITLIMITAMT, a2.DATELASTMAINT
HAVING MIN(a2.DATELASTMAINT) = a2.DATELASTMAINT
ORDER BY CREDITLIMITAMT
),
OriginalBalance AS (
--This assumes there is only 1 Note/Bal sub account for every account
--So far that has been true.
SELECT ACCTNBR, ORIGBAL
FROM OSIBANK.ACCTSUBACCT a2
WHERE a2.BALCATCD = 'NOTE'
AND a2.BALTYPCD = 'BAL'
),
DebtProtection AS (
SELECT a.ACCTNBR,
MIN(var.CALCTYPEFFDATE) AS EffectiveDate,
a.BALCATCD
FROM OSIBANK.ACCTSUBACCT a
INNER JOIN (
SELECT ACCTNBR, MIN(SUBACCTNBR) AS SUBACCTNBR
FROM OSIBANK.ACCTSUBACCT sa
WHERE sa.BALTYPCD = 'SINS'
GROUP BY ACCTNBR
) b ON a.ACCTNBR = b.ACCTNBR AND a.SUBACCTNBR = b.SUBACCTNBR
INNER JOIN OSIBANK.ACCTSUBACCTCALCVAR var ON var.ACCTNBR = a.ACCTNBR AND a.SUBACCTNBR = var.SUBACCTNBR
GROUP BY a.ACCTNBR, var.CALCTYPEFFDATE, a.BALCATCD
),
BorrowerAge AS (
SELECT a.ACCTNBR, MAX(p.DATEBIRTH) AS YoungestBirthdate
FROM OSIBANK.ACCTACCTROLEPERS a
LEFT JOIN OSIBANK.ACCT acc ON a.ACCTNBR = acc.ACCTNBR
LEFT JOIN OSIBANK.ACCTROLE r ON r.ACCTROLECD = a.ACCTROLECD
LEFT JOIN OSIBANK.PERS p ON a.PERSNBR = p.PERSNBR
WHERE a.ACCTROLECD IN ('TRO', 'NTO', 'SIGN')
AND (p.DATEDEATH IS NULL OR p.DATEDEATH > acc.CONTRACTDATE)
GROUP BY a.ACCTNBR
),
PHONEMETADATA AS (
SELECT p.PERSNBR,
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR), ',') AS PhoneNumbers
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
GROUP BY p.PERSNBR
),
EMAILMETADATA AS (
SELECT p.PERSNBR,
LISTAGG(al.TEXT, ',') AS EmailAddresses
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM', 'EML')
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
GROUP BY p.PERSNBR
)
SELECT a.ACTVNBR AS ActivityNbr,
a.ACTVDATETIME AS ActivityDateTime,
a.SUBJACCTNBR AS SubjectAccountNbr,
a.RESPPERSNBR AS ActivityResponsiblePersonNbr,
oe.PERSNBR AS OriginatingPersonNbr,
a.ACTVTYPCD AS ActivityTypeCode,
p.FIRSTNAME AS AssociateFirst,
p.LASTNAME AS AssociateLast,
p.MDLINIT AS AssociateMiddleInit,
--NEW = "New" | REFI = "Refinance"
ll.CREDITLIMITAMT AS LoanLimit,
ob.OrigBal AS OriginalBalance,
COALESCE(ll.CREDITLIMITAMT, ob.ORIGBAL) AS LoanAmount,
al.LOANSOURCECD AS LoanSourceCode,
--ABS(r.TRANAMT) AS LoanDispersalAmmount,
ee.EmployeeEmail AS EmployeeEmail,
acc.CURRACCTSTATCD AS CurrentAccountStatus,
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
CASE WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','), TAXPERS.FIRSTNAMEUPPER) ELSE NULL END AS TaxPersonName,
TAXORG.ORGNAME AS TaxOrgName,
acc.BranchOrgNbr As BranchOrgNbr,
acc.MjAcctTypCd AS MajorAccountType,
acc.CURRMIACCTTYPCD AS MinorAccountType,
acc.CONTRACTDATE AS AccountContractDate,
org.ORGNAME AS BranchOrgName,
dp.EffectiveDate AS DebtProtectionEffectiveDate,
dp.BALCATCD AS DebtProtectionCategory,
CASE
WHEN
ba.YoungestBirthdate IS NOT NULL AND
p2.DATEBIRTH IS NOT NULL
THEN
GREATEST(ba.YOUNGESTBIRTHDATE, p2.DATEBIRTH)
ELSE
COALESCE(ba.YOUNGESTBIRTHDATE, p2.DATEBIRTH)
END AS YoungestBirthdateOnLoan,
CASE
WHEN
acc.ACCTNBR IN (
SELECT acctnbr
FROM OSIBANK.ACCTACCTROLEORG aro
Where aro.ACCTROLECD IN ('DBA', 'LLC', 'UNAS')
) OR
acc.TAXRPTFORORGNBR IS NOT NULL
THEN 1
ELSE 0
END AS HasOrgRoles,
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
emd.EmailAddresses AS TaxPersonEmailAddresses
FROM OSIBANK.ACTV a
LEFT JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = a.SUBJACCTNBR
LEFT JOIN OriginatorRole oe ON acc.ACCTNBR = oe.AcctNbr
LEFT JOIN OSIBANK.PERS p ON p.PERSNBR = oe.PERSNBR
LEFT JOIN OSIBANK.PERS taxpers ON acc.TAXRPTFORPERSNBR = TAXPERS.PERSNBR
LEFT JOIN OSIBANK.ORG taxorg ON acc.TAXRPTFORORGNBR = TAXORG.ORGNBR
JOIN OSIBANK.ORG org ON org.ORGNBR = acc.BRANCHORGNBR
LEFT JOIN EmployeeEmail ee ON p.PERSNBR = ee.CorePersNbr
--Uncomment to get Loan Dispersal Transaction Information
--LEFT JOIN OSIBANK.RTXN r ON acc.ACCTNBR = r.ACCTNBR AND r.RTXNTYPCD = 'NDSB'
LEFT JOIN OSIBANK.ACCTLOAN al ON acc.ACCTNBR = al.ACCTNBR
LEFT JOIN LoanLimit ll ON ll.AcctNbr = acc.ACCTNBR
LEFT JOIN OriginalBalance ob ON ob.AcctNbr = acc.ACCTNBR
LEFT JOIN DebtProtection dp ON dp.ACCTNBR = acc.ACCTNBR
LEFT JOIN OSIBANK.ACTVSUBACTV sa ON sa.ACTVNBR = a.ACTVNBR
LEFT JOIN BorrowerAge ba ON ba.AcctNbr = acc.ACCTNBR
LEFT JOIN OSIBANK.PERS p2 ON acc.TAXRPTFORPERSNBR = p2.PERSNBR
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
WHERE acc.CURRMIACCTTYPCD IN ('SC01', 'SC02', 'SG01')
AND (a.ACTVTYPCD = 'ADAC' OR a.ACTVTYPCD = 'LADD')
AND LOWER(sa.TABLEID) = 'acct'
AND LOWER(sa.COLUMNID) = 'acctnbr'
AND a.ACTVNBR > TO_NUMBER(COALESCE(:afterActivityNbr, '-1'))
AND a.ACTVDATETIME >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
@@ -0,0 +1,186 @@
/*New Mortgagage Account Sale Query
----------------------------------
DESCRIPTION:
Get all Activities related to New Mortgage Accounts (ActvType = AADD and AccountType = ('FE01', 'MF01', 'FE02', 'FLML')
after a supplied DateTime (inclusive) or after a supplied ActivityNumber (not inclusive) or both.
Supplies Activity Data as well as the Account Number of the new account and the account status at the time of querying
RETURNS: Models/Activity/NewCheckingAccountActivity.cs
PARAMS:
|afterActivityNbr : Null or Int (as string)
|------------------------------------------------------------------------------
|Returns all Checking Sales with ActivityNbrs larger than the supplied number.
|If null defaults to -1 which will return all Checking SalesActivities
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|-----------------------------------------------------------------------------
|Returns all Checking Sales with ActivityNbrs that occured on or after the supplied date
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|returns all Checking Sales Activities
NOTES:
- ALL HELOC type loans are technically 'children' of a mainline loan. A person may get approved for a 100,000 mainline loan
but take out only 5k at a time via fixed loans. For incentive purposes we do not want to pull in the activity for HELOC's children loans
instead we pull in Flex Mainline (FLML) Loans.
- For mainline loans we use the first credit limit amount that is not 0 as the loan amount (the amount the customer was approved for)
- For loans that do not have a parent mainline we use the original balance amount on the loan (the amount the customer has available after approval)
- Use ContractDate as the date of the sale. This is the day that the customer signs for the loan. There is a legal grace-period between
When a loan is signed and when the loan is booked into the banking system. This is why there is a gap between contract date and activity date.
-Only need to know if an account has debt protection not how many debt protection policies the account has. We select the earliest sold
debt protection and add the date and type to signify that the loan has debt protection
- LADD type activities seem to produce duplicates occasionally, None were found for mortgage type accounts
*/
WITH EmployeeEmail AS (
SELECT p.PERSNBR As CorePersNbr,
addr.TEXT AS EmployeeEmail
FROM OSIBANK.PERSEMPL p
JOIN OSIBANK.PERSADDRUSE paddr ON
p.PERSNBR = PADDR.PERSNBR
JOIN OSIBANK.ADDRLINE addr ON
paddr.ADDRNBR = addr.ADDRNBR
AND paddr.ADDRUSECD = 'EBUS'
),
OriginatorRole AS (
SELECT ACCTNBR, PERSNBR, ACCTROLECD, DATELASTMAINT, EFFDATE
from OSIBANK.ACCTACCTROLEPERS a
WHERE ACCTROLECD = 'OEMP'
GROUP BY ACCTNBR, ACCTROLECD, DATELASTMAINT, EFFDATE, PERSNBR
HAVING DATELASTMAINT = MAX(DATELASTMAINT)
),
LoanLimit AS (
SELECT a2.ACCTNBR, a2.CREDITLIMITAMT, a2.DATELASTMAINT
FROM OSIBANK.ACCTLOANLIMITHIST a2
WHERE a2.CREDITLIMITAMT > '0'
GROUP BY a2.ACCTNBR, a2.CREDITLIMITAMT, a2.DATELASTMAINT
HAVING MIN(a2.DATELASTMAINT) = a2.DATELASTMAINT
ORDER BY CREDITLIMITAMT
),
OriginalBalance AS (
--This assumes there is only 1 Note/Bal sub account for every account
--So far that has been true.
SELECT ACCTNBR, ORIGBAL
FROM OSIBANK.ACCTSUBACCT a2
WHERE a2.BALCATCD = 'NOTE'
AND a2.BALTYPCD = 'BAL'
),
DebtProtection AS (
SELECT a.ACCTNBR,
MIN(var.CALCTYPEFFDATE) AS EffectiveDate,
a.BALCATCD
FROM OSIBANK.ACCTSUBACCT a
INNER JOIN (
SELECT ACCTNBR, MIN(SUBACCTNBR) AS SUBACCTNBR
FROM OSIBANK.ACCTSUBACCT sa
WHERE sa.BALTYPCD = 'SINS'
GROUP BY ACCTNBR
) b ON a.ACCTNBR = b.ACCTNBR AND a.SUBACCTNBR = b.SUBACCTNBR
INNER JOIN OSIBANK.ACCTSUBACCTCALCVAR var ON var.ACCTNBR = a.ACCTNBR AND a.SUBACCTNBR = var.SUBACCTNBR
GROUP BY a.ACCTNBR, var.CALCTYPEFFDATE, a.BALCATCD
),
BorrowerAge AS (
SELECT a.ACCTNBR, MAX(p.DATEBIRTH) AS YoungestBirthdate
FROM OSIBANK.ACCTACCTROLEPERS a
LEFT JOIN OSIBANK.ACCT acc ON a.ACCTNBR = acc.ACCTNBR
LEFT JOIN OSIBANK.ACCTROLE r ON r.ACCTROLECD = a.ACCTROLECD
LEFT JOIN OSIBANK.PERS p ON a.PERSNBR = p.PERSNBR
WHERE a.ACCTROLECD IN ('TRO', 'NTO', 'SIGN')
AND (p.DATEDEATH IS NULL OR p.DATEDEATH > acc.CONTRACTDATE)
GROUP BY a.ACCTNBR
),
PHONEMETADATA AS (
SELECT p.PERSNBR,
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR), ',') AS PhoneNumbers
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
GROUP BY p.PERSNBR
),
EMAILMETADATA AS (
SELECT p.PERSNBR,
LISTAGG(al.TEXT, ',') AS EmailAddresses
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM', 'EML')
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
GROUP BY p.PERSNBR
)
SELECT a.ACTVNBR AS ActivityNbr,
a.ACTVDATETIME AS ActivityDateTime,
a.SUBJACCTNBR AS SubjectAccountNbr,
a.RESPPERSNBR AS ActivityResponsiblePersonNbr,
oe.PERSNBR AS OriginatingPersonNbr,
a.ACTVTYPCD AS ActivityTypeCode,
p.FIRSTNAME AS AssociateFirst,
p.LASTNAME AS AssociateLast,
p.MDLINIT AS AssociateMiddleInit,
--NEW = "New" | REFI = "Refinance"
ll.CREDITLIMITAMT AS LoanLimit,
ob.OrigBal AS OriginalBalance,
COALESCE(ll.CREDITLIMITAMT, ob.ORIGBAL) AS LoanAmount,
al.LOANSOURCECD AS LoanSourceCode,
--ABS(r.TRANAMT) AS LoanDispersalAmmount,
ee.EmployeeEmail AS EmployeeEmail,
acc.CURRACCTSTATCD AS CurrentAccountStatus,
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
CASE WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','), TAXPERS.FIRSTNAMEUPPER) ELSE NULL END AS TaxPersonName,
TAXORG.ORGNAME AS TaxOrgName,
acc.BranchOrgNbr As BranchOrgNbr,
acc.MjAcctTypCd AS MajorAccountType,
acc.CURRMIACCTTYPCD AS MinorAccountType,
acc.CONTRACTDATE AS AccountContractDate,
org.ORGNAME AS BranchOrgName,
dp.EffectiveDate AS DebtProtectionEffectiveDate,
dp.BALCATCD AS DebtProtectionCategory,
CASE
WHEN
ba.YOUNGESTBIRTHDATE IS NOT NULL AND
p2.DATEBIRTH IS NOT NULL
THEN
GREATEST(ba.YOUNGESTBIRTHDATE, p2.DATEBIRTH)
ELSE
COALESCE(ba.YOUNGESTBIRTHDATE, p2.DATEBIRTH)
END AS YoungestBirthdateOnLoan,
CASE
WHEN
acc.ACCTNBR IN (
SELECT acctnbr
FROM OSIBANK.ACCTACCTROLEORG aro
Where aro.ACCTROLECD IN ('DBA', 'LLC', 'UNAS')
) OR
acc.TAXRPTFORORGNBR IS NOT NULL
THEN 1
ELSE 0
END AS HasOrgRoles,
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
emd.EmailAddresses AS TaxPersonEmailAddresses
FROM OSIBANK.ACTV a
LEFT JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = a.SUBJACCTNBR
LEFT JOIN OriginatorRole oe ON acc.ACCTNBR = oe.AcctNbr
LEFT JOIN OSIBANK.PERS p ON p.PERSNBR = oe.PERSNBR
LEFT JOIN OSIBANK.PERS taxpers ON acc.TAXRPTFORPERSNBR = TAXPERS.PERSNBR
LEFT JOIN OSIBANK.ORG taxorg ON acc.TAXRPTFORORGNBR = TAXORG.ORGNBR
JOIN OSIBANK.ORG org ON org.ORGNBR = acc.BRANCHORGNBR
LEFT JOIN EmployeeEmail ee ON p.PERSNBR = ee.CorePersNbr
--Uncomment to get Loan Dispersal Transaction Information
--LEFT JOIN OSIBANK.RTXN r ON acc.ACCTNBR = r.ACCTNBR AND r.RTXNTYPCD = 'NDSB'
LEFT JOIN OSIBANK.ACCTLOAN al ON acc.ACCTNBR = al.ACCTNBR
LEFT JOIN LoanLimit ll ON ll.AcctNbr = acc.ACCTNBR
LEFT JOIN OriginalBalance ob ON ob.AcctNbr = acc.ACCTNBR
LEFT JOIN DebtProtection dp ON dp.ACCTNBR = acc.ACCTNBR
LEFT JOIN OSIBANK.ACTVSUBACTV sa ON sa.ACTVNBR = a.ACTVNBR
LEFT JOIN BorrowerAge ba ON ba.AcctNbr = acc.ACCTNBR
LEFT JOIN OSIBANK.PERS p2 ON acc.TAXRPTFORPERSNBR = p2.PERSNBR
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
WHERE acc.MJACCTTYPCD IN ('CNS', 'MLN', 'MTG')
AND acc.CURRMIACCTTYPCD IN ('HE01', 'FE01', 'MF01', 'FE02', 'FNMA', 'FRML', 'FRMH', 'MPFR', 'MJ30', 'HM01', 'HM02',
'MF10', 'HM03', 'HM04', 'DEF3', 'ML01', 'ML03', 'MJ03', 'MJ05', 'MJ07', 'MF15', 'MF20', 'MF30', 'MC93', 'MA55', 'MS30',
'MS10', 'MS15', 'MS20', 'MS40', 'MC09', 'ML02', 'MA01', 'MP05', 'MA05', 'MC01', 'MI05', 'MC03', 'MJ55', 'MC91', 'MF40',
'MS05', 'MS07', 'MI03', 'MA03', 'MA07', 'MA27', 'ML23', 'ML21', 'MP25', 'MC21', 'MA21', 'MJ27', 'HM05', 'MA23', 'MA25',
'MI25', 'MJ23', 'MJ25')
AND (a.ACTVTYPCD = 'ADAC' OR a.ACTVTYPCD = 'LADD')
AND LOWER(sa.TABLEID) = 'acct'
AND LOWER(sa.COLUMNID) = 'acctnbr'
AND a.ACTVNBR > TO_NUMBER(COALESCE(:afterActivityNbr, '-1'))
AND a.ACTVDATETIME >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
@@ -0,0 +1,164 @@
/*New Vehicle Account Sale Query
----------------------------------
DESCRIPTION:
Get all Activities related to New Mortgage Accounts (ActvType = AADD and AccountType = ('FE01', 'MF01', 'FE02', 'FLML')
after a supplied DateTime (inclusive) or after a supplied ActivityNumber (not inclusive) or both.
Supplies Activity Data as well as the Account Number of the new account and the account status at the time of querying
RETURNS: Models/Activity/NewCheckingAccountActivity.cs
PARAMS:
|afterActivityNbr : Null or Int (as string)
|------------------------------------------------------------------------------
|Returns all Checking Sales with ActivityNbrs larger than the supplied number.
|If null defaults to -1 which will return all Checking SalesActivities
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|-----------------------------------------------------------------------------
|Returns all Checking Sales with ActivityNbrs that occured on or after the supplied date
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|returns all Checking Sales Activities
Potential Types: DLxx may be added in the future
'BE21','DL01','DL06','DL07','DL08','DL09','DL10','DL11','DL12','DL13','DL14','DL16','DV01','DV02','DV03','DV04','DV05','DV06','DV07','DV08',
NOTES:
- See Mortgage Loan Notes
-Only need to know if an account has debt protection not how many debt protection policies the account has. We select the earliest sold
debt protection and add the date and type to signify that the loan has debt protection
- LADD type activities seem to produce duplicates occasionally, None were found for vehicle type accounts
*/
WITH EmployeeEmail AS (
SELECT
p.PERSNBR As CorePersNbr,
addr.TEXT AS EmployeeEmail
FROM
OSIBANK.PERSEMPL p
JOIN OSIBANK.PERSADDRUSE paddr ON
p.PERSNBR = PADDR.PERSNBR
JOIN OSIBANK.ADDRLINE addr ON
paddr.ADDRNBR = addr.ADDRNBR
AND paddr.ADDRUSECD = 'EBUS'
),
OriginatorRole AS (
SELECT ACCTNBR, PERSNBR, ACCTROLECD, DATELASTMAINT, EFFDATE from OSIBANK.ACCTACCTROLEPERS a
WHERE ACCTROLECD = 'OEMP'
GROUP BY ACCTNBR, ACCTROLECD, DATELASTMAINT, EFFDATE, PERSNBR
HAVING DATELASTMAINT = MAX(DATELASTMAINT)
),
OriginalBalance AS (
--This assumes there is only 1 Note/Bal sub account for every account
--So far that has been true.
SELECT ACCTNBR, ORIGBAL FROM OSIBANK.ACCTSUBACCT a2
WHERE a2.BALCATCD = 'NOTE' AND a2.BALTYPCD = 'BAL'
),
DebtProtection AS (
SELECT
a.ACCTNBR,
MIN(var.CALCTYPEFFDATE) AS EffectiveDate,
a.BALCATCD
FROM OSIBANK.ACCTSUBACCT a
INNER JOIN (
SELECT ACCTNBR, MAX(SUBACCTNBR) AS SUBACCTNBR FROM OSIBANK.ACCTSUBACCT sa
WHERE sa.BALTYPCD = 'SINS'
GROUP BY ACCTNBR
) b ON a.ACCTNBR = b.ACCTNBR AND a.SUBACCTNBR = b.SUBACCTNBR
INNER JOIN OSIBANK.ACCTSUBACCTCALCVAR var ON var.ACCTNBR = a.ACCTNBR AND a.SUBACCTNBR = var.SUBACCTNBR
GROUP BY a.ACCTNBR, var.CALCTYPEFFDATE, a.BALCATCD
),
BorrowerAge AS (
SELECT a.ACCTNBR, MAX(p.DATEBIRTH) AS YoungestBirthdate FROM OSIBANK.ACCTACCTROLEPERS a
LEFT JOIN OSIBANK.ACCT acc ON a.ACCTNBR = acc.ACCTNBR
LEFT JOIN OSIBANK.ACCTROLE r ON r.ACCTROLECD = a.ACCTROLECD
LEFT JOIN OSIBANK.PERS p ON a.PERSNBR = p.PERSNBR
WHERE a.ACCTROLECD IN ('TRO','NTO','SIGN') AND (p.DATEDEATH IS NULL OR p.DATEDEATH > acc.CONTRACTDATE)
GROUP BY a.ACCTNBR
),
PHONEMETADATA AS (
SELECT
p.PERSNBR,
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR),',') AS PhoneNumbers
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
GROUP BY p.PERSNBR
),
EMAILMETADATA AS (
SELECT
p.PERSNBR,
LISTAGG(al.TEXT,',') AS EmailAddresses
FROM OSIBANK.PERS p
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM','EML')
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
GROUP BY p.PERSNBR
)
SELECT
a.ACTVNBR AS ActivityNbr,
a.ACTVDATETIME AS ActivityDateTime,
a.SUBJACCTNBR AS SubjectAccountNbr,
a.RESPPERSNBR AS ActivityResponsiblePersonNbr,
oe.PERSNBR AS OriginatingPersonNbr,
a.ACTVTYPCD AS ActivityTypeCode,
p.FIRSTNAME AS AssociateFirst,
p.LASTNAME AS AssociateLast,
p.MDLINIT AS AssociateMiddleInit,
--NEW = "New" | REFI = "Refinance"
ob.OrigBal AS LoanAmount,
al.LOANSOURCECD AS LoanSourceCode,
--ABS(r.TRANAMT) AS LoanDispersalAmmount,
ee.EmployeeEmail AS EmployeeEmail,
acc.CURRACCTSTATCD AS CurrentAccountStatus,
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
CASE WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','),TAXPERS.FIRSTNAMEUPPER) ELSE NULL END AS TaxPersonName,
TAXORG.ORGNAME AS TaxOrgName,
acc.BranchOrgNbr As BranchOrgNbr,
acc.MjAcctTypCd AS MajorAccountType,
acc.CURRMIACCTTYPCD AS MinorAccountType,
acc.CONTRACTDATE AS AccountContractDate,
org.ORGNAME AS BranchOrgName,
dp.EffectiveDate AS DebtProtectionEffectiveDate,
dp.BALCATCD AS DebtProtectionCategory,
CASE
WHEN
ba.YOUNGESTBIRTHDATE IS NOT NULL AND
p2.DATEBIRTH IS NOT NULL
THEN
GREATEST(ba.YoungestBirthdate, p2.DATEBIRTH)
ELSE
COALESCE (ba.YoungestBirthdate, p2.DATEBIRTH)
END AS YoungestBirthdateOnLoan,
CASE
WHEN
acc.ACCTNBR IN (
SELECT acctnbr FROM OSIBANK.ACCTACCTROLEORG aro
Where aro.ACCTROLECD IN ('DBA', 'LLC','UNAS')
) OR
acc.TAXRPTFORORGNBR IS NOT NULL
THEN 1
ELSE 0
END AS HasOrgRoles,
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
emd.EmailAddresses AS TaxPersonEmailAddresses
FROM OSIBANK.ACTV a
JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = a.SUBJACCTNBR
LEFT JOIN OriginatorRole oe ON acc.ACCTNBR = oe.AcctNbr
LEFT JOIN OSIBANK.PERS p ON p.PERSNBR = oe.PERSNBR
LEFT JOIN OSIBANK.PERS taxpers ON acc.TAXRPTFORPERSNBR = TAXPERS.PERSNBR
LEFT JOIN OSIBANK.ORG taxorg ON acc.TAXRPTFORORGNBR = TAXORG.ORGNBR
JOIN OSIBANK.ORG org ON org.ORGNBR = acc.BRANCHORGNBR
LEFT JOIN EmployeeEmail ee ON p.PERSNBR = ee.CorePersNbr
--Uncomment to get Loan Dispersal Transaction Information
--LEFT JOIN OSIBANK.RTXN r ON acc.ACCTNBR = r.ACCTNBR AND r.RTXNTYPCD = 'NDSB'
LEFT JOIN OSIBANK.ACCTLOAN al ON acc.ACCTNBR = al.ACCTNBR
LEFT JOIN OriginalBalance ob ON ob.AcctNbr = acc.ACCTNBR
LEFT JOIN DebtProtection dp ON dp.ACCTNBR = acc.ACCTNBR
LEFT JOIN OSIBANK.ACTVSUBACTV sa ON sa.ACTVNBR = a.ACTVNBR
LEFT JOIN BorrowerAge ba ON ba.AcctNbr = acc.ACCTNBR
LEFT JOIN OSIBANK.PERS p2 ON acc.TAXRPTFORPERSNBR = p2.PERSNBR
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
WHERE
acc.MJACCTTYPCD IN ('CNS','CML')
AND acc.CURRMIACCTTYPCD IN ('BE21','DV01','DV02','DV03','DV04','DV05','DV06','DV07','DV08')
AND (a.ACTVTYPCD = 'ADAC' OR a.ACTVTYPCD = 'LADD') AND LOWER(sa.TABLEID) = 'acct' AND LOWER(sa.COLUMNID) = 'acctnbr'
AND a.ACTVNBR > TO_NUMBER(COALESCE( :afterActivityNbr, '-1'))
AND a.ACTVDATETIME >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
@@ -0,0 +1,80 @@
/*
CUSTOM FIELD INFO (ActivityManager.LF_LEAD_CUSTOM):
Credit Card Balance Transfer
--LeadCust_39 = External CC Account Number
--LeadCust_31 = Landmark Credit Card Number
--LeadCust_29 = Transfer Ammount
--LeadCust_28 = Payment State + Zip
--LeadCust_27 = Payment City
--LeadCust_26 = Payment Address Line 1
--LeadCust_24 = Transfer Institution
Direct Deposit
--LeadCust_38 = Direct Deposit is Qualified Referral
--LeadCust_4 = Direct Deposit Account Number
*/
WITH EmployeeEmail AS (
SELECT pers.USERID AS SafUserId,
prod.PERSNBR AS SafPersNbr,
prod.PRODPERSID AS CorePersNbr,
addr.TEXT AS EmployeeEmail
FROM SAF.PERSUSER pers
JOIN SAF.PERSPROD prod ON
pers.PERSNBR = PROD.PERSNBR
AND prod.PRODNBR = '3'
JOIN OSIBANK.PERSADDRUSE paddr ON
prod.PRODPERSID = PADDR.PERSNBR
JOIN OSIBANK.ADDRLINE addr ON
paddr.ADDRNBR = addr.ADDRNBR
AND paddr.ADDRUSECD = 'EBUS'
)
SELECT ll.ID AS ActivityId,
-- These custom fields can be reused, guarentee their contents by only using them for their respective campaigns
(CASE WHEN ll.CAMPAIGN = 'CC Balance Transfer' THEN llc.LEADCUST_31 ELSE NULL END) AS LandmarkCreditCardNumber,
(CASE WHEN ll.CAMPAIGN = 'Direct Deposit' THEN llc.LEADCUST_4 ELSE NULL END) AS DirectDepositAccountNumber,
ll.ORIGINATOR AS OriginatorUserId,
safprod.PRODPERSID AS OriginatorPersNbr,
p.FIRSTNAME AS OriginatorFirstName,
p.LASTNAME AS OriginatorLastName,
p.MDLINIT AS OriginatorMiddleInitial,
ee.EmployeeEmail AS EmployeeEmail,
ll.CAMPAIGN AS Campaign,
ll.CATEGORY AS Category,
ll.STATION AS ReferralStation,
ll.DATELASTMAINT AS LastUpdatedDateTime,
(CASE WHEN att.INITIAL_STATION = 'Yes' THEN 1 ELSE 0 END) AS IsInitialStation,
(CASE WHEN att.FINAL_STATION = 'Yes' THEN 1 ELSE 0 END) AS IsFinalStation,
att.ACTIVITY_ORIGINATION_DATE AS OriginationDateTime,
att.ENTER_STATION_DATETIME AS StationDateTime,
ll.SOURCE AS OriginatingBranchName,
(CASE
WHEN SUBSTR(lp.EXTID3, 1, 1) = 'P' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+')
ELSE NULL END
) AS ReferredPersonNbr,
(CASE
WHEN SUBSTR(lp.EXTID3, 1, 1) = 'O' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+')
ELSE NULL END
) AS ReferredOrgNbr,
lp.EXTID3 AS ReferredPersOrgNbr
FROM ACTIVITYMANAGER.LF_LEAD ll
JOIN ACTIVITYMANAGER.LF_LEAD_CUSTOM llc ON
ll.ID = llc.ID
JOIN SAF.PERSUSER safp ON
safp.USERID = ll.ORIGINATOR
JOIN SAF.PERSPROD safprod ON
SAFPROD.PERSNBR = safp.PERSNBR AND
SAFPROD.PRODNBR = '3'
JOIN OSIBANK.PERS p ON
p.PERSNBR = SAFPROD.PRODPERSID
LEFT JOIN EmployeeEmail ee ON
ee.SafPersNbr = SAFP.PERSNBR
JOIN ACTIVITYMANAGER.LF_PERSON lp ON
lp.ID = ll.PERSONID
JOIN ACTIVITYMANAGER.ACTIVITY_TIME_TRACKING att
ON att.ACTIVITY_ID = ll.ID AND SEQUENCE_NUMBER = (
SELECT MAX(SEQUENCE_NUMBER)
FROM ACTIVITYMANAGER.ACTIVITY_TIME_TRACKING att2
WHERE att2.ACTIVITY_ID = ll.ID
)
WHERE ll.Id IN :activityIds
@@ -0,0 +1,43 @@
With PhoneMetaData as (
Select p.persnbr, ListAgg((pp.areacd || pp.exchange || pp.phonenbr), ',') As PhoneNumbers
From Osibank.Pers p
Left Join Osibank.PersPhone pp on p.persnbr = pp.persnbr and pp.phoneusecd != 'BUS'
Group By p.persnbr
),
EmailMetaData as (
Select p.persnbr, ListAgg(al.text, ',') As EmailAddresses
From Osibank.Pers p
Left Join Osibank.PersAddrUse pa on p.persnbr = pa.persnbr and pa.ADDRUSECD IN ('EHOM', 'EML')
Left Join Osibank.AddrLine al on pa.addrnbr = al.addrnbr and al.linenbr = 1
Group By p.persnbr),
ActivityData as (
Select activity.subjacctnbr as AccountNumber, activity.actvnbr as ActivityNumber, activity.datelastmaint as ActivityDateTime
From (Select av.subjacctnbr, asv.actvnbr, asv.datelastmaint, ROW_NUMBER() Over (Partition by av.subjacctnbr Order by asv.datelastmaint asc) deliveryUpdate
From Osibank.ActvSubActv asv
Join Osibank.Actv av on asv.actvnbr = av.actvnbr
where (
asv.columnID = 'OvrDeliveryMethCd'
and asv.OldValue = 'PRNT'
and asv.databaseactvcd = 'UPD'
and asv.NewValue = 'WWW'
and asv.datelastmaint > TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
)
) activity
Where deliveryUpdate = 1 and activity.datelastmaint > TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS'))
Select ad.*, ma.shareacctnbr as ShareAccountNumber,
ma.primarypersnbr as PersonNumber,
ac.taxrptfororgnbr as OrganizationNumber,
ac.currmiaccttypcd as MinorAccountType,
pe.firstname as FirstName, pe.lastname as LastName,
pmd.phonenumbers, emd.emailaddresses
From Osibank.Acct ac
Join ActivityData ad on ad.AccountNumber = ac.acctnbr
Join Osibank.MemberAgreement ma on ma.shareacctnbr = ac.acctnbr
Join Osibank.Pers pe on pe.persnbr = ma.primarypersnbr
Left Join PhoneMetaData pmd on pe.persnbr = pmd.persnbr
Left Join EmailMetaData emd on pe.persnbr = emd.persnbr
where ac.OvrDeliveryMethCd = 'WWW'
@@ -0,0 +1,38 @@
/*ActivityAccountDetailsByAccountNbr
-----------------------------------
Get Account Details that are used by Activities. Used to Re-query accounts to check for
relevant account fields changes.
--Notes
It is expected that this will grow over time and require joining on more fields, it is therefore kept separate from
a more generic account query.
*/
WITH DebtProtection AS (
SELECT a.ACCTNBR,
MAX(var.CALCTYPEFFDATE) AS EffectiveDate,
MAX(var.CALCINACTIVEDATE) AS InactiveDate,
a.BALCATCD AS DPCategory
FROM OSIBANK.ACCTSUBACCT a
INNER JOIN (
SELECT sa.ACCTNBR, sa.SUBACCTNBR AS SUBACCTNBR
FROM OSIBANK.ACCTSUBACCT sa
WHERE sa.BALTYPCD = 'SINS'
GROUP BY ACCTNBR, sa.SUBACCTNBR
) b ON a.ACCTNBR = b.ACCTNBR AND a.SUBACCTNBR = b.SUBACCTNBR
INNER JOIN OSIBANK.ACCTSUBACCTCALCVAR var ON a.ACCTNBR = var.ACCTNBR AND a.SUBACCTNBR = var.SUBACCTNBR
GROUP BY a.ACCTNBR, var.CALCTYPEFFDATE, var.CALCINACTIVEDATE, a.BALCATCD
)
SELECT acc.ACCTNBR AS AccountNumber,
acc.CURRACCTSTATCD AS CurrentAccountStatus,
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
acc.BRANCHORGNBR As BranchOrgNbr,
acc.MJACCTTYPCD AS MajorAccountType,
acc.CURRMIACCTTYPCD AS MinorAccountType,
acc.CONTRACTDATE AS AccountContractDate,
dp.EffectiveDate AS DebtProtectionEffectiveDate,
dp.InactiveDate AS DebtProtectionInactiveDate,
dp.DPCategory AS DebtProtectionCategory
FROM OSIBANK.ACCT acc
LEFT JOIN DebtProtection dp ON dp.ACCTNBR = acc.ACCTNBR
WHERE acc.ACCTNBR IN :accountNumbers
@@ -0,0 +1,5 @@
SELECT ap.AgreeNbr AS AgreeNumber,
ap.PersNbr AS PersonNumber,
ap.UserId
FROM OSIBANK.agreepers ap
WHERE ap.UserId = :userId
@@ -0,0 +1,10 @@
select AP.USERID As UserId,
AP.PERSNBR As PersonNumber,
AG.AGREENBR As AgreeNumber
FROM OSIBANK.AGREE AG
INNER JOIN OSIBANK.AGREEPERS AP ON AP.AGREENBR=AG.AGREENBR AND
AP.ACTIVEYN='Y'
INNER JOIN OSIBANK.AGREEPERSACCESSTYP APAT ON APAT.AGREENBR=AP.AGREENBR AND
APAT.PERSNBR=AP.PERSNBR AND
APAT.ACCESSTYPCD='WWW'
WHERE AP.USERID LIKE '%-%'
@@ -0,0 +1,12 @@
select distinct
a.primarypersnbr AS PersonNumber
from memberagreement a
JOIN PERS b ON a.PRIMARYPERSNBR = b.PERSNBR
JOIN ACCT c ON b.PERSNBR = c.TAXRPTFORPERSNBR AND a.MEMBERAGREENBR = c.MEMBERAGREENBR
JOIN acctacctrolepers d ON c.acctnbr = d.ACCTNBR
JOIN PERS g ON d.PERSNBR = g.PERSNBR
JOIN AGREEPERSACCESSTYPACCT e ON e.ACCTNBR = c.acctnbr and e.PERSNBR = c.taxrptforpersnbr
JOIN AGREEPERSACCESSTYP f ON e.AGREENBR = f.AGREENBR
LEFT JOIN osibank.CARDAGREEMENT ca ON b.PERSNBR = ca.OWNERPERSNBR AND ca.AGREETYPCD = 'VRU'
WHERE d.acctrolecd in ('CUST','GUAD','REPP','PREP','VAFI')
AND activeyn = 'Y'
@@ -0,0 +1,15 @@
select distinct
ca.agreenbr AS AgreeNumber,
a.PRIMARYPERSNBR AS PersonNumber,
f.UserId AS UserId
from memberagreement a
JOIN PERS b ON a.PRIMARYPERSNBR = b.PERSNBR
JOIN ACCT c ON b.PERSNBR = c.TAXRPTFORPERSNBR AND a.MEMBERAGREENBR = c.MEMBERAGREENBR
JOIN acctacctrolepers d ON c.acctnbr = d.ACCTNBR
JOIN PERS g ON d.PERSNBR = g.PERSNBR
JOIN AGREEPERSACCESSTYPACCT e ON e.ACCTNBR = c.acctnbr and e.PERSNBR = c.taxrptforpersnbr
JOIN AGREEPERSACCESSTYP f ON e.AGREENBR = f.AGREENBR
INNER JOIN osibank.CARDAGREEMENT ca ON b.PERSNBR = ca.OWNERPERSNBR AND ca.AGREETYPCD = 'VRU'
INNER JOIN osibank.CARDMEMBERISSUE cmi ON cmi.AGREENBR = ca.AGREENBR
WHERE d.acctrolecd in ('CUST','GUAD','REPP','PREP','VAFI')
AND cmi.currstatuscd != 'CLOS'
@@ -0,0 +1,5 @@
select ap.AgreeNbr,
ap.PersNbr,
ap.UserId
from OSIBANK.agreepers ap
fetch first :fetchAmount rows only
@@ -0,0 +1,38 @@
SELECT A.ACCTNBR AS AccountNumber,
COALESCE(Y.AGREENBR,Z.AGREENBR) AS AgreeNumber,
CAST(TRIM(COALESCE(Y.USERID,Z.USERID,CASE WHEN A.MEMBERAGREENBR IS NULL THEN NULL ELSE 'M'||A.MEMBERAGREENBR END)) AS VARCHAR2(32)) AS UserId
FROM OSIBANK.ACCT A
LEFT JOIN (/*FIND PPL WHO HAVE ACCESS TO ACCT AS WWW AND ARE ACTIVE(IN TWO TABLES), BREAK TIES WITH LOWEST AGREENBR*/
SELECT ROW_NUMBER() OVER (PARTITION BY APATA.ACCTNBR,APATA.PERSNBR ORDER BY APATA.AGREENBR) AS ID,
APATA.ACCTNBR,
APATA.PERSNBR,
AP.USERID,
AG.AGREENBR
FROM OSIBANK.AGREE AG /*[PK:AGREENBR]*/
INNER JOIN OSIBANK.AGREEPERS AP ON AP.AGREENBR=AG.AGREENBR
AND AP.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR] [NEEDS TO BE ACTIVE]*/
INNER JOIN OSIBANK.AGREEPERSACCESSTYP APAT ON APAT.AGREENBR=AP.AGREENBR
AND APAT.PERSNBR=AP.PERSNBR
AND APAT.ACCESSTYPCD='WWW'
AND APAT.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR, ACCESSTYPCD('WWW')] [NEEDS TO BE ACTIVE]*/
INNER JOIN OSIBANK.AGREEPERSACCESSTYPACCT APATA ON APATA.AGREENBR=AP.AGREENBR
AND APATA.PERSNBR=AP.PERSNBR
AND APATA.ACCESSTYPCD=APAT.ACCESSTYPCD /*[PK:AGREENBR, PERSNBR, ACCESSTYPCD('WWW'), ACCTNBR]*/
) Y ON Y.ACCTNBR=A.ACCTNBR AND Y.PERSNBR=A.TAXRPTFORPERSNBR AND Y.ID=1
LEFT JOIN (/*FIND PPL WHO HAVE ACCESS TO ORG AS WWW AND ARE ACTIVE(IN TWO TABLES), BREAK TIES WITH PERSON WHO IS CURRENTLY ACTIVE, WAS ACTIVE FIRST, LOWEST AGREENBR, LOWEST PERSNBR*/
SELECT ROW_NUMBER() OVER (PARTITION BY AG.BYORGNBR ORDER BY CASE WHEN RO.EFFDATE<=TRUNC(CURRENT_DATE) AND (RO.INACTIVEDATE IS NULL OR RO.INACTIVEDATE>TRUNC(CURRENT_DATE)) THEN 0 ELSE 1 END,RO.EFFDATE,AG.AGREENBR,AP.PERSNBR) AS ID,
AG.BYORGNBR,
AP.USERID,
AG.AGREENBR
FROM OSIBANK.AGREE AG /*[PK:AGREENBR]*/
INNER JOIN OSIBANK.AGREEPERS AP ON AP.AGREENBR=AG.AGREENBR
AND AP.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR] [NEEDS TO BE ACTIVE]*/
INNER JOIN OSIBANK.AGREEPERSACCESSTYP APAT ON APAT.AGREENBR=AP.AGREENBR
AND APAT.PERSNBR=AP.PERSNBR
AND APAT.ACCESSTYPCD='WWW'
AND APAT.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR, ACCESSTYPCD('WWW')] [NEEDS TO BE ACTIVE]*/
LEFT JOIN OSIBANK.ORGPERSROLE RO ON RO.ORGNBR=AG.BYORGNBR
AND RO.PERSNBR=AP.PERSNBR
AND RO.PERSROLECD=APAT.ACCESSTYPCD /*[PK:ORGNBR, PERSROLECD, EFFDATE, PERSNBR]*/
) Z ON Z.BYORGNBR=A.TAXRPTFORORGNBR AND Z.ID=1
WHERE A.ACCTNBR in ({AccountNumbersHolder})
@@ -0,0 +1,8 @@
SELECT AP.USERID
FROM OSIBANK.AGREE AG /*[PK:AGREENBR]*/
INNER JOIN OSIBANK.AGREEPERS AP ON AP.AGREENBR=AG.AGREENBR AND AP.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR] [NEEDS TO BE ACTIVE]*/
INNER JOIN OSIBANK.AGREEPERSACCESSTYP APAT ON APAT.AGREENBR=AP.AGREENBR AND APAT.PERSNBR=AP.PERSNBR AND APAT.ACCESSTYPCD='WWW' AND APAT.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR, ACCESSTYPCD('WWW')] [NEEDS TO BE ACTIVE]*/
LEFT JOIN OSIBANK.ORGPERSROLE RO ON RO.ORGNBR=AG.BYORGNBR AND RO.PERSNBR=AP.PERSNBR AND RO.PERSROLECD=APAT.ACCESSTYPCD /*[PK:ORGNBR, PERSROLECD, EFFDATE, PERSNBR]*/
WHERE AG.BYORGNBR = :organizationNumber
ORDER BY ROW_NUMBER() OVER (PARTITION BY AG.BYORGNBR ORDER BY CASE WHEN RO.EFFDATE<=CURRENT_DATE AND (RO.INACTIVEDATE IS NULL OR RO.INACTIVEDATE>CURRENT_DATE) THEN 0 ELSE 1 END,RO.EFFDATE,AG.AGREENBR,AP.PERSNBR)
FETCH NEXT 1 ROWS ONLY
@@ -0,0 +1,5 @@
SELECT AP.USERID
FROM OSIBANK.AGREE AG /*[PK:AGREENBR]*/
INNER JOIN OSIBANK.AGREEPERS AP ON AP.AGREENBR=AG.AGREENBR AND AP.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR] [NEEDS TO BE ACTIVE]*/
INNER JOIN OSIBANK.AGREEPERSACCESSTYP APAT ON APAT.AGREENBR=AP.AGREENBR AND APAT.PERSNBR=AP.PERSNBR AND APAT.ACCESSTYPCD='WWW' AND APAT.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR, ACCESSTYPCD('WWW')] [NEEDS TO BE ACTIVE]*/
WHERE AG.BYORGNBR IS NULL AND AP.PERSNBR = :personNumber
@@ -0,0 +1,3 @@
SELECT ACCTNBR AS AccountNumber, ACCTDESC AS AccountDescription, MJACCTTYPCD as MajorAccountTypeCode, TAXRPTFORPERSNBR AS TaxReportForPersonNumber, TAXRPTFORORGNBR AS TaxReportForOrgNumber, OVRDELIVERYMETHCD
FROM OSIBANK.ACCT
WHERE ACCTNBR = :accountNumber
@@ -0,0 +1,6 @@
SELECT a4.ACCTNBR AS AccountNumber, a4.ACCTDESC AS AccountDescription, a4.MJACCTTYPCD as MajorAccountTypeCode, a4.TAXRPTFORPERSNBR AS TaxReportForPersonNumber, a4.TAXRPTFORORGNBR AS TaxReportForOrgNumber, a4.OVRDELIVERYMETHCD
FROM osibank.AGREEPERS a
INNER JOIN OSIBANK.AGREEPERSACCESSTYPACCT a2 ON a.PERSNBR = a2.PERSNBR AND a.AGREENBR = a2.AGREENBR AND a2.ACCESSTYPCD = 'WWW'
INNER JOIN OSIBANK.AGREE a3 ON a.AGREENBR = a3.AGREENBR AND a3.ACTIVEDATETIME <= CURRENT_DATE AND (a3.TERMINATEDATETIME IS NULL OR a3.TERMINATEDATETIME > CURRENT_DATE)
INNER JOIN OSIBANK.ACCT a4 ON a2.ACCTNBR = a4.ACCTNBR
WHERE a.USERID = :userId
@@ -0,0 +1,3 @@
SELECT ACCTNBR AS AccountNumber, ACCTDESC AS AccountDescription, MJACCTTYPCD as MajorAccountTypeCode, TAXRPTFORPERSNBR AS TaxReportForPersonNumber, TAXRPTFORORGNBR AS TaxReportForOrgNumber, OVRDELIVERYMETHCD
FROM OSIBANK.ACCT
WHERE TAXRPTFORORGNBR = :organizationId
@@ -0,0 +1,11 @@
SELECT a.AGREENBR AS AgreementNumber, a.USERID, a.PERSNBR AS PersonNumber,
a3.BYORGNBR,
o.ORGNAME AS OrganizationName,
p.FIRSTNAME, p.MDLINIT AS MiddleInitial, p.MDLNAME AS MiddleName, p.LASTNAME, p.SUFFIX
FROM OSIBANK.AGREEPERS a
INNER JOIN OSIBANK.AGREEPERSACCESSTYPACCT a2 ON a.AGREENBR = a2.AGREENBR AND a.PERSNBR = a2.PERSNBR AND a2.ACCESSTYPCD = 'WWW'
INNER JOIN OSIBANK.PERS p ON a2.PERSNBR = p.PERSNBR
INNER JOIN OSIBANK.AGREE a3 ON a2.AGREENBR = a3.AGREENBR AND a3.ACTIVEDATETIME <= CURRENT_DATE AND (a3.TERMINATEDATETIME IS NULL OR a3.TERMINATEDATETIME > CURRENT_DATE)
LEFT OUTER JOIN OSIBANK.ORG o ON a3.BYORGNBR = o.ORGNBR
WHERE a.AGREENBR = :agreementId
FETCH FIRST 1 ROWS ONLY
@@ -0,0 +1,11 @@
SELECT a.AGREENBR AS AgreementNumber, a.USERID, a.PERSNBR AS PersonNumber,
a3.BYORGNBR,
o.ORGNAME AS OrganizationName,
p.FIRSTNAME, p.MDLINIT AS MiddleInitial, p.MDLNAME AS MiddleName, p.LASTNAME, p.SUFFIX
FROM OSIBANK.AGREEPERS a
INNER JOIN OSIBANK.AGREEPERSACCESSTYPACCT a2 ON a.AGREENBR = a2.AGREENBR AND a.PERSNBR = a2.PERSNBR AND a2.ACCESSTYPCD = 'WWW'
INNER JOIN OSIBANK.PERS p ON a2.PERSNBR = p.PERSNBR
INNER JOIN OSIBANK.AGREE a3 ON a2.AGREENBR = a3.AGREENBR AND a3.ACTIVEDATETIME <= CURRENT_DATE AND (a3.TERMINATEDATETIME IS NULL OR a3.TERMINATEDATETIME > CURRENT_DATE)
LEFT OUTER JOIN OSIBANK.ORG o ON a3.BYORGNBR = o.ORGNBR
WHERE a.UserId = :userId
FETCH FIRST 1 ROWS ONLY
@@ -0,0 +1,28 @@
SELECT A.ACCTNBR AS AccountNumber,
COALESCE(Y.AGREENBR,Z.AGREENBR) AS AgreementNumber,
COALESCE(Y.USERID,Z.USERID) AS UserId,
COALESCE(Y.PERSNBR, Z.PERSNBR) AS PersonNumber
FROM OSIBANK.ACCT A
LEFT JOIN (
SELECT ROW_NUMBER() OVER (PARTITION BY APATA.ACCTNBR,APATA.PERSNBR ORDER BY APATA.AGREENBR) AS ID,
APATA.ACCTNBR,
APATA.PERSNBR,
APATA.AGREENBR,
AP.USERID
FROM OSIBANK.AGREE AG
INNER JOIN OSIBANK.AGREEPERS AP ON AP.AGREENBR=AG.AGREENBR AND AP.ACTIVEYN='Y'
INNER JOIN OSIBANK.AGREEPERSACCESSTYP APAT ON APAT.AGREENBR=AP.AGREENBR AND APAT.PERSNBR=AP.PERSNBR AND APAT.ACCESSTYPCD='WWW' AND APAT.ACTIVEYN='Y'
INNER JOIN OSIBANK.AGREEPERSACCESSTYPACCT APATA ON APATA.AGREENBR=AP.AGREENBR AND APATA.PERSNBR=AP.PERSNBR AND APATA.ACCESSTYPCD=APAT.ACCESSTYPCD
) Y ON Y.ACCTNBR=A.ACCTNBR AND Y.PERSNBR=A.TAXRPTFORPERSNBR AND Y.ID=1
LEFT JOIN (
SELECT ROW_NUMBER() OVER (PARTITION BY AG.BYORGNBR ORDER BY CASE WHEN RO.EFFDATE<=TRUNC(CURRENT_DATE) AND (RO.INACTIVEDATE IS NULL OR RO.INACTIVEDATE>TRUNC(CURRENT_DATE)) THEN 0 ELSE 1 END,RO.EFFDATE,AP.AGREENBR,AP.PERSNBR) AS ID,
AG.BYORGNBR,
AG.AGREENBR,
AP.USERID,
AP.PERSNBR
FROM OSIBANK.AGREE AG
INNER JOIN OSIBANK.AGREEPERS AP ON AP.AGREENBR=AG.AGREENBR AND AP.ACTIVEYN='Y'
INNER JOIN OSIBANK.AGREEPERSACCESSTYP APAT ON APAT.AGREENBR = AP.AGREENBR AND APAT.PERSNBR = AP.PERSNBR AND APAT.ACCESSTYPCD = 'WWW' AND APAT.ACTIVEYN = 'Y'
LEFT JOIN OSIBANK.ORGPERSROLE RO ON RO.ORGNBR=AG.BYORGNBR AND RO.PERSNBR = AP.PERSNBR AND RO.PERSROLECD=APAT.ACCESSTYPCD
) Z ON Z.BYORGNBR=A.TAXRPTFORORGNBR AND Z.ID=1
WHERE A.ACCTNBR in ({AccountNumbersHolder})
@@ -0,0 +1,11 @@
SELECT a.AGREENBR AS AgreementNumber, a.USERID, a.PERSNBR AS PersonNumber,
a3.BYORGNBR,
o.ORGNAME AS OrganizationName,
p.FIRSTNAME, p.MDLINIT AS MiddleInitial, p.MDLNAME AS MiddleName, p.LASTNAME, p.SUFFIX
FROM OSIBANK.Acct a4
INNER JOIN OSIBANK.AGREEPERSACCESSTYPACCT a2 ON a4.ACCTNBR = a2.ACCTNBR AND a2.ACCESSTYPCD = 'WWW'
INNER JOIN OSIBANK.AGREEPERS a ON a2.AGREENBR = a.AGREENBR AND a2.PERSNBR = a.PERSNBR
INNER JOIN OSIBANK.PERS p ON a2.PERSNBR = p.PERSNBR
INNER JOIN OSIBANK.AGREE a3 ON a2.AGREENBR = a3.AGREENBR AND a3.ACTIVEDATETIME <= CURRENT_DATE AND (a3.TERMINATEDATETIME IS NULL OR a3.TERMINATEDATETIME > CURRENT_DATE)
LEFT OUTER JOIN OSIBANK.ORG o ON a3.BYORGNBR = o.ORGNBR
WHERE a4.ACCTNBR = :accountNumber
@@ -0,0 +1,9 @@
SELECT DISTINCT CASE WHEN UPPER(a.TABLEID) = 'AGREEPERSACCESSTYPACCT' AND UPPER(a.DATABASEACTVCD) = 'DEL' AND UPPER(a.COLUMNID) = 'ACCTNBR' AND a2.SUBJACCTNBR IS NULL THEN TO_NUMBER(a.OLDVALUE)
WHEN UPPER(a.TABLEID) = 'AGREEPERSACCESSTYPACCT' AND UPPER(a.DATABASEACTVCD) = 'ADD' AND UPPER(a.COLUMNID) = 'ACCTNBR' AND a2.SUBJACCTNBR IS NULL THEN TO_NUMBER(a.NEWVALUE)
ELSE a2.SUBJACCTNBR END AS AccountNumber
FROM osibank.ACTVSUBACTV a
LEFT OUTER JOIN OSIBANK.ACTV a2 ON a.ACTVNBR = a2.ACTVNBR AND a2.ACTVDATETIME > TO_DATE(:dateLastMaintained, 'YYYY-MM-DD HH24:MI:SS')
WHERE a2.SUBJACCTNBR IS NOT NULL
AND ((UPPER(a.TABLEID) = 'ACCT' AND (UPPER(COLUMNID) = 'TAXRPTFORPERSNBR' OR UPPER(COLUMNID) = 'TAXRPTFORORGNBR' OR UPPER(COLUMNID) = 'OVRDELIVERYMETHCD'))
OR ((UPPER(a.TABLEID) = 'AGREEPERSACCESSTYPACCT' AND UPPER(DATABASEACTVCD) = 'DEL') AND UPPER(COLUMNID) = 'ACCTNBR' AND a2.ACTVDATETIME > TO_DATE(:dateLastMaintained, 'YYYY-MM-DD HH24:MI:SS'))
OR ((UPPER(a.TABLEID) = 'AGREEPERSACCESSTYPACCT' AND UPPER(DATABASEACTVCD) = 'ADD') AND UPPER(COLUMNID) = 'ACCTNBR' AND a2.ACTVDATETIME > TO_DATE(:dateLastMaintained, 'YYYY-MM-DD HH24:MI:SS')))
@@ -0,0 +1,7 @@
SELECT DISTINCT a2.SUBJAGREENBR
FROM OSIBANK.LCU_MVIEW_ACTVSUBACTV a
LEFT OUTER JOIN OSIBANK.LCU_MVIEW_ACTV a2 ON a.ACTVNBR = a2.ACTVNBR
WHERE a2.SUBJAGREENBR IS NOT NULL
AND ((UPPER(a.TABLEID) = 'AGREEPERS' AND UPPER(COLUMNID) = 'ACTIVEYN' AND a.DATELASTMAINT > TO_DATE(:dateLastMaintained, 'YYYY-MM-DD HH24:MI:SS'))
OR (UPPER(a.TABLEID) = 'AGREEPERSACCESSTYP' AND UPPER(COLUMNID) = 'ACTIVEYN' AND a.DATELASTMAINT > TO_DATE(:dateLastMaintained, 'YYYY-MM-DD HH24:MI:SS'))
OR (UPPER(a.TABLEID) = 'AGREEPERSACCESSTYPACCT' AND UPPER(COLUMNID) = 'ACCESSTYPCD' AND (UPPER(OLDVALUE) LIKE '%WWW%' OR UPPER(NEWVALUE) LIKE '%WWWW%') AND a.DATELASTMAINT > TO_DATE(:dateLastMaintained, 'YYYY-MM-DD HH24:MI:SS')))
@@ -0,0 +1,8 @@
SELECT DISTINCT a2.SUBJORGNBR
FROM osibank.LCU_MVIEW_ACTVSUBACTV a
LEFT OUTER JOIN OSIBANK.LCU_MVIEW_ACTV a2 ON a.ACTVNBR = a2.ACTVNBR
WHERE a2.SUBJORGNBR IS NOT NULL
AND ((UPPER(a.TABLEID) = 'ORGPERSROLE' AND UPPER(COLUMNID) = 'INACTIVEDATE' AND OLDVALUE IS NOT NULL
AND NEWVALUE IS NOT NULL AND a.DATELASTMAINT > TO_DATE(:dateLastMaintained, 'YYYY-MM-DD HH24:MI:SS'))
OR (UPPER(a.TABLEID) = 'ORGPERSROLE' AND UPPER(COLUMNID) = 'PERSROLECD' AND (UPPER(OLDVALUE) LIKE '%WWW%' OR UPPER(NEWVALUE) LIKE '%WWW%')
AND a.DATELASTMAINT > TO_DATE(:dateLastMaintained, 'YYYY-MM-DD HH24:MI:SS')))
@@ -0,0 +1,10 @@
SELECT appl.applname As ApplicationName,
qah.applnbr As ApplicationNumber,
qah.quenbr AS QueueNumber,
qah.stopdatetime As StopDateTime,
que.EffDate AS EffectiveDate
FROM QUEAPPLHIST qah
INNER JOIN appl ON qah.APPLNBR = appl.APPLNBR
INNER JOIN que ON que.quenbr = qah.quenbr
WHERE qah.APPLNBR in ({ApplicationNumbersHolder})
AND que.EffDate = TO_TIMESTAMP(:EffectiveDate, 'YYYY-MM-DD HH24:MI:SS')
@@ -0,0 +1,30 @@
SELECT DISTINCT base.Person as AssociateName,
base.ActiveEmp as ActiveEmployee,
base.PERSTYPDESC as PersonType,
base.PERSNBR as PersonNumber
FROM (
SELECT
P.PERSNBR,
P.FIRSTNAME || ' ' || P.LASTNAME AS Person,
CASE
WHEN PE.PERSNBR is not null and ((PE.INACTIVEDATE is null) or (PE.INACTIVEDATE is not null and PE.INACTIVEDATE > CURRENT_DATE)) THEN 1
WHEN PE.PERSNBR is not null and PE.INACTIVEDATE is not null and PE.INACTIVEDATE <= CURRENT_DATE THEN 0
WHEN PE.PERSNBR is null THEN null
ELSE null
END AS ActiveEmp,
ppt.PERSTYPDESC,
P.TAXID
FROM OSIBANK.PERS P
LEFT JOIN OSIBANK.PERSEMPL PE ON PE.PERSNBR = P.PERSNBR
JOIN (
SELECT ppt.PERSNBR, LISTAGG(PT.PERSTYPDESC, ',') as PERSTYPDESC
FROM OSIBANK.PERSPERSTYP ppt
JOIN OSIBANK.PERSTYP PT ON ppt.PERSTYPCD = pt.PERSTYPCD
WHERE ppt.PERSTYPCD IN ('AUD','DIR','EMP','EOFF','OFF','REPI')
GROUP BY ppt.PERSNBR
) ppt ON P.PERSNBR = ppt.PERSNBR
LEFT JOIN OSIBANK.ACCT A ON P.PERSNBR = A.TAXRPTFORPERSNBR
LEFT JOIN OSIBANK.VIEWPERSTAXID V ON P.PERSNBR = V.PERSNBR
WHERE V.TAXID = :taxId
) base
ORDER BY AssociateName
@@ -0,0 +1,120 @@
SELECT
Coalesce(MA.MemberAgreeNbr, MAOrg.MemberAgreeNbr) AS MemberNumber,
AC.ACCTNBR AS LoanNumber,
AUFAI.Value AS ApplicationId,
RTRIM(PERS.FirstName) AS MemberFirstName,
PERS.mdlinit AS MemberInitial,
COALESCE(RTRIM(PERS.LastName), RTRIM(ORGM.OrgName)) AS MemberLastName,
OUFDC.Value AS DealerCode,
DGA.AcctNbr AS DealerAccountNumber,
DGA.taxrptfororgnbr AS DealerOrganizationNumber,
ORGD.OrgName AS DealerName,
CASE WHEN AUFWA.Value = 'Y' OR ASAW.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS Warranty,
CASE WHEN AUFG.Value = 'Y' OR ASAG.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS GAP,
CASE WHEN ASADL.SubAcctNbr IS NOT NULL OR ASADI.SubAcctNbr IS NOT NULL OR ASADLLD.SubAcctNbr IS NOT NULL OR ASADLLF.SubACctNbr IS NOT NULL THEN 1 ELSE 0 END AS CreditLife,
CASE WHEN ASADD.SubAcctNbr IS NOT NULL OR ASADI.SubAcctNbr IS NOT NULL OR ASADLLD.SubAcctNbr IS NOT NULL OR ASADLDS.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS CreditDisability,
CASE WHEN ASAMBP.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS Mbp,
AC.currmiaccttypcd AS AccountType,
MMA.MIACCTTYPDESC AS AccountDescription,
AC.CONTRACTDATE AS LoanDate,
Coalesce(RTXN.OrigPostDate,TO_DATE(AUFAD.Value, 'YYYY-MM-DD' )) AS PostedDate,
AL.date1stpmtdue AS FirstPmtDate,
AC.DATEMAT AS FinalPmtDate,
AC.ORIGTERM AS OriginalTermInDays,
ASA.OrigBal AS LoanAmount,
To_number(AUFBR.Value) AS BuyRate,
AUFLT.Value AS LoanType,
RTC.INTRATE * 100 AS ContractRate,
PT.PMTAMT AS MonthlyPmt,
RTRIM(PR.PROPID) AS Vin,
RTRIM(PR.PropMake) AS Make,
RTRIM(PR.PropModel) AS Model,
PR.propyearnbr AS Year,
RTRIM(PR.PropColor) AS Color,
PR.PropVehicleOdometer AS Mileage,
AAA.PostDate AS PaidLoanDate
FROM ACCT AC
LEFT JOIN PERS
ON PERS.PersNbr = AC.TAXRPTFORPERSNBR
LEFT JOIN ORG ORGM
ON ORGM.OrgNbr = AC.TaxrptForORgNbr
LEFT JOIN MEMBERAGREEMENT MA
ON MA.PrimaryPersNbr = PERS.PersNbr
LEFT JOIN MEMBERAGREEMENT MAOrg
ON MAOrg.PrimaryOrgNbr = ORGM.OrgNbr
LEFT JOIN ACCTGRPACCT AGA
ON AC.AcctNbr = AGA.AcctNbr
LEFT JOIN (select acctgrpnbr, acct.acctnbr, acct.taxrptfororgnbr from acctgrpacct aga
inner join acct
on acct.acctnbr = aga.acctnbr and acct.currmiaccttypcd = 'DLR') DGA
ON DGA.AcctGrpNbr = AGA.AcctGrpNbr
LEFT JOIN ORG ORGD
ON ORGD.ORGNbr = DGA.taxrptfororgnbr
LEFT JOIN ACCTLOAN AL
ON AL.AcctNbr = AC.AcctNbr
LEFT JOIN (SELECT Propnbr, AcctNbr,ROW_NUMBER() OVER(PARTITION BY ACCTNBR ORDER BY PropNbr) PPP_RNK
FROM ACCTPROP) AP ON AP.AcctNbr = AC.AcctNbr AND AP.PPP_RNK = 1
LEFT JOIN PROP PR
ON PR.Propnbr = AP.Propnbr
LEFT JOIN ACCTSUBACCT ASA
ON ASA.ACCTNBR = AC.ACCTNBR AND ASA.BALCATCD = 'NOTE' AND ASA.BALTYPCD = 'BAL'
LEFT JOIN (SELECT PS.ACCTNBR,PS.SUBACCTNBR,PS.EFFDATE,PS.INACTIVEDATE,PMT.PMTNBR, PMT.PMTTYPCD,T.PMTTYPDESC,PMT.PMTAMT,PMT.PMTPERCENT,
PMT.EFFDATE PMT_EFFDATE,PMT.PMTCALPERIODCD,PMT.INACTIVEDATE PMT_INACTIVEDATE,PMT.DATELASTMAINT,
ROW_NUMBER() OVER(PARTITION BY PS.ACCTNBR,PS.SUBACCTNBR ORDER BY PMT.EFFDATE DESC ) P_RNK
FROM ACCTPMTSUBACCTHIST PS
JOIN ACCTSUBACCT ASA ON ASA.ACCTNBR = PS.ACCTNBR AND ASA.SUBACCTNBR = PS.SUBACCTNBR AND ASA.BALCATCD = 'NOTE' AND ASA.BALTYPCD = 'DUE'
JOIN ACCTPMTHIST PMT ON PMT.ACCTNBR = PS.ACCTNBR AND PMT.PMTNBR = PS.PMTNBR
JOIN PMTTYP T ON T.PMTTYPCD = PMT.PMTTYPCD) PT ON PT.ACCTNBR = AC.ACCTNBR AND P_RNK = 1
LEFT JOIN (SELECT R.DATELASTMAINT,R.ACCTNBR,R.SUBACCTNBR, R.EFFDATE ,R.INTRATE,R.INACTIVEDATE,R.DELQRATEYN,R.POSTDATE,R.DISCLOSEDINTRATE
,ROW_NUMBER() OVER(PARTITION BY R.ACCTNBR,R.SUBACCTNBR ORDER BY R.POSTDATE DESC ) RTB_RNK
FROM ACCTRATEHIST R
JOIN ACCTSUBACCT ASA ON ASA.ACCTNBR = R.ACCTNBR AND ASA.SUBACCTNBR = R.SUBACCTNBR AND ASA.BALCATCD = 'UPFR' AND ASA.BALTYPCD = 'DLR') RTB
ON RTB.ACCTNBR = AC.ACCTNBR AND RTB_RNK = 1
LEFT JOIN (SELECT R.DATELASTMAINT,R.ACCTNBR,R.SUBACCTNBR, R.EFFDATE,R.INTRATE,R.INACTIVEDATE,R.DELQRATEYN,R.POSTDATE,R.DISCLOSEDINTRATE
,ROW_NUMBER() OVER(PARTITION BY R.ACCTNBR,R.SUBACCTNBR ORDER BY R.POSTDATE DESC) RTC_RNK
FROM ACCTRATEHIST R
JOIN ACCTSUBACCT ASA ON ASA.ACCTNBR = R.ACCTNBR AND ASA.SUBACCTNBR = R.SUBACCTNBR AND ASA.BALCATCD = 'NOTE' AND ASA.BALTYPCD = 'BAL') RTC
ON RTC.ACCTNBR = AC.ACCTNBR AND RTC_RNK = 1
LEFT JOIN MJMIACCTTYP MMA
ON MMA.MIACCTTYPCD = AC.CURRMIACCTTYPCD
LEFT JOIN ACCTUSERFIELD AUFLT
ON AUFLT.Acctnbr = AC.Acctnbr AND AUFLT.userfieldCD = 'COMC'
LEFT JOIN ACCTUSERFIELD AUFAI
ON AUFAI.Acctnbr = AC.Acctnbr AND AUFAI.userfieldCD = 'LOSA'
LEFT JOIN ORGUSERFIELD OUFDC
ON OUFDC.OrgNbr = ORGD.OrgNbr AND OUFDC.UserFieldCD = 'DLCD'
LEFT JOIN RTXN
ON RTXN.ACCTNBR = AC.ACCTNBR AND rtxntypcd = 'NDSB'
LEFT JOIN ACCTUSERFIELD AUFAD
ON AUFAD.Acctnbr = AC.Acctnbr AND AUFAD.userfieldCD = 'LOSD'
LEFT JOIN ACCTUSERFIELD AUFBR
ON AUFBR.Acctnbr = AC.Acctnbr AND AUFBR.userfieldCD = 'BUYR'
LEFT JOIN ACCTUSERFIELD AUFWA
ON AUFWA.Acctnbr = AC.Acctnbr AND AUFWA.userfieldCD = 'WRYN'
LEFT JOIN ACCTUSERFIELD AUFG
ON AUFG.Acctnbr = AC.Acctnbr AND AUFG.userfieldCD = 'GPYN'
LEFT JOIN ACCTSUBACCT ASADL
ON ASADL.AcctNbr = AC.AcctNbr AND ASADL.BALTYPCD = 'SINS' AND ASADL.BALCATCD = 'DL'
LEFT JOIN ACCTSUBACCT ASADD
ON ASADD.AcctNbr = AC.AcctNbr AND ASADD.BALTYPCD = 'SINS' AND ASADD.BALCATCD = 'DD'
LEFT JOIN ACCTSUBACCT ASADI
ON ASADI.AcctNbr = AC.AcctNbr AND ASADI.BALTYPCD = 'SINS' AND ASADI.BALCATCD = 'DI'
LEFT JOIN ACCTSUBACCT ASADLLD
ON ASADLLD.AcctNbr = AC.AcctNbr AND ASADLLD.BALTYPCD = 'COST' AND ASADLLD.BALCATCD = 'DLLD'
LEFT JOIN ACCTSUBACCT ASADLDS
ON ASADLDS.AcctNbr = AC.AcctNbr AND ASADLDS.BALTYPCD = 'COST' AND ASADLDS.BALCATCD = 'DLDS'
LEFT JOIN ACCTSUBACCT ASADLLF
ON ASADLLF.AcctNbr = AC.AcctNbr AND ASADLLF.BALTYPCD = 'COST' AND ASADLLF.BALCATCD = 'DLLF'
LEFT JOIN ACCTSUBACCT ASAG
ON ASAG.AcctNbr = AC.AcctNbr AND ASAG.BALTYPCD = 'COST' AND ASAG.BALCATCD = 'GAP'
LEFT JOIN ACCTSUBACCT ASAW
ON ASAW.AcctNbr = AC.AcctNbr AND ASAW.BALTYPCD = 'COST' AND ASAW.BALCATCD = 'WARA'
LEFT JOIN ACCTSUBACCT ASAMBP
ON ASAMBP.AcctNbr = AC.AcctNbr AND ASAMBP.BALTYPCD = 'COST' AND ASAMBP.BALCATCD = 'ODLR'
LEFT JOIN (SELECT aas.ACCTNBR,aas.EFFDATETIME ,aas.acctstatcd,aas.POSTDATE
,ROW_NUMBER() OVER(PARTITION BY aas.ACCTNBR ORDER BY aas.EFFDATETIME DESC ) AAS_RNK
FROM acctacctstathist aas ) aaa
ON aaa.ACCTNBR = ac.ACCTNBR AND AAS_RNK = 1
WHERE AC.currmiaccttypcd IN ('DL01','DL02','DL03','DL04','DL05','DL06','DL07','DL08','DL09','DL10','DL11','DL12','DL13','DL14','DL15','DL16')
AND AC.CURRACCTSTATCD = 'CLS'
AND AAA.EffDateTime >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
@@ -0,0 +1,10 @@
SELECT
AC.ACCTNBR AS LoanNumber,
AAA.PostDate AS PaidLoanDate
FROM ACCT AC
LEFT JOIN (SELECT aas.ACCTNBR,aas.EFFDATETIME, aas.POSTDATE
,ROW_NUMBER() OVER(PARTITION BY aas.ACCTNBR ORDER BY aas.EFFDATETIME DESC ) AAS_RNK
FROM acctacctstathist aas ) aaa
ON aaa.ACCTNBR = ac.ACCTNBR AND AAS_RNK = 1
WHERE AC.curracctstatcd = 'CLS' AND AAA.EFFDATETIME >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
AND AC.currmiaccttypcd IN ('DL01','DL02','DL03','DL04','DL05','DL06','DL07','DL08','DL09','DL10','DL11','DL12','DL13','DL14','DL15','DL16')
@@ -0,0 +1,118 @@
SELECT
Coalesce(MA.MemberAgreeNbr, MAOrg.MemberAgreeNbr) AS MemberNumber,
AC.ACCTNBR AS LoanNumber,
AUFAI.Value AS ApplicationId,
RTRIM(PERS.FirstName) AS MemberFirstName,
PERS.mdlinit AS MemberInitial,
COALESCE(RTRIM(PERS.LastName), RTRIM(ORGM.OrgName)) AS MemberLastName,
OUFDC.Value AS DealerCode,
DGA.AcctNbr AS DealerAccountNumber,
DGA.taxrptfororgnbr AS DealerOrganizationNumber,
ORGD.OrgName AS DealerName,
CASE WHEN AUFWA.Value = 'Y' OR ASAW.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS Warranty,
CASE WHEN AUFG.Value = 'Y' OR ASAG.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS GAP,
CASE WHEN ASADL.SubAcctNbr IS NOT NULL OR ASADI.SubAcctNbr IS NOT NULL OR ASADLLD.SubAcctNbr IS NOT NULL OR ASADLLF.SubACctNbr IS NOT NULL THEN 1 ELSE 0 END AS CreditLife,
CASE WHEN ASADD.SubAcctNbr IS NOT NULL OR ASADI.SubAcctNbr IS NOT NULL OR ASADLLD.SubAcctNbr IS NOT NULL OR ASADLDS.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS CreditDisability,
CASE WHEN ASAM.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END As Mbp,
AC.currmiaccttypcd AS AccountType,
MMA.MIACCTTYPDESC AS AccountDescription,
AC.CONTRACTDATE AS LoanDate,
Coalesce(RTXN.OrigPostDate,TO_DATE(AUFAD.Value, 'YYYY-MM-DD' )) AS PostedDate,
AL.date1stpmtdue AS FirstPmtDate,
AC.DATEMAT AS FinalPmtDate,
AC.ORIGTERM AS OriginalTermInDays,
ASA.OrigBal AS LoanAmount,
COALESCE(RTB.INTRATE * 100, To_number(AUFBR.Value)) AS BuyRate,
AUFLT.Value AS LoanType,
RTC.INTRATE * 100 AS ContractRate,
PT.PMTAMT AS MonthlyPmt,
RTRIM(PR.PROPID) AS Vin,
RTRIM(PR.PropMake) AS Make,
RTRIM(PR.PropModel) AS Model,
PR.propyearnbr AS Year,
RTRIM(PR.PropColor) AS Color,
PR.PropVehicleOdometer AS Mileage,
AAA.PostDate AS PaidLoanDate
FROM ACCT AC
LEFT JOIN PERS
ON PERS.PersNbr = AC.TAXRPTFORPERSNBR
LEFT JOIN ORG ORGM
ON ORGM.OrgNbr = AC.TaxrptForORgNbr
LEFT JOIN MEMBERAGREEMENT MA
ON MA.PrimaryPersNbr = PERS.PersNbr
LEFT JOIN MEMBERAGREEMENT MAOrg
ON MAOrg.PrimaryOrgNbr = ORGM.OrgNbr
LEFT JOIN ACCTGRPACCT AGA
ON AC.AcctNbr = AGA.AcctNbr
LEFT JOIN (select acctgrpnbr, acct.acctnbr, acct.taxrptfororgnbr from acctgrpacct aga
inner join acct
on acct.acctnbr = aga.acctnbr and acct.currmiaccttypcd = 'DLR') DGA
ON DGA.AcctGrpNbr = AGA.AcctGrpNbr
LEFT JOIN ORG ORGD
ON ORGD.ORGNbr = DGA.taxrptfororgnbr
LEFT JOIN ACCTLOAN AL
ON AL.AcctNbr = AC.AcctNbr
LEFT JOIN (SELECT Propnbr, AcctNbr,ROW_NUMBER() OVER(PARTITION BY ACCTNBR ORDER BY PropNbr) PPP_RNK
FROM ACCTPROP) AP ON AP.AcctNbr = AC.AcctNbr AND AP.PPP_RNK = 1
LEFT JOIN PROP PR
ON PR.Propnbr = AP.Propnbr
LEFT JOIN ACCTSUBACCT ASA
ON ASA.ACCTNBR = AC.ACCTNBR AND ASA.BALCATCD = 'NOTE' AND ASA.BALTYPCD = 'BAL'
LEFT JOIN (SELECT PS.ACCTNBR,PS.SUBACCTNBR,PS.EFFDATE,PS.INACTIVEDATE,PMT.PMTNBR, PMT.PMTTYPCD,T.PMTTYPDESC,PMT.PMTAMT,PMT.PMTPERCENT,
PMT.EFFDATE PMT_EFFDATE,PMT.PMTCALPERIODCD,PMT.INACTIVEDATE PMT_INACTIVEDATE,PMT.DATELASTMAINT,
ROW_NUMBER() OVER(PARTITION BY PS.ACCTNBR,PS.SUBACCTNBR ORDER BY PMT.EFFDATE DESC ) P_RNK
FROM ACCTPMTSUBACCTHIST PS
JOIN ACCTSUBACCT ASA ON ASA.ACCTNBR = PS.ACCTNBR AND ASA.SUBACCTNBR = PS.SUBACCTNBR AND ASA.BALCATCD = 'NOTE' AND ASA.BALTYPCD = 'DUE'
JOIN ACCTPMTHIST PMT ON PMT.ACCTNBR = PS.ACCTNBR AND PMT.PMTNBR = PS.PMTNBR
JOIN PMTTYP T ON T.PMTTYPCD = PMT.PMTTYPCD) PT ON PT.ACCTNBR = AC.ACCTNBR AND P_RNK = 1
LEFT JOIN (SELECT R.DATELASTMAINT,R.ACCTNBR,R.SUBACCTNBR, R.EFFDATE ,R.INTRATE,R.INACTIVEDATE,R.DELQRATEYN,R.POSTDATE,R.DISCLOSEDINTRATE
,ROW_NUMBER() OVER(PARTITION BY R.ACCTNBR,R.SUBACCTNBR ORDER BY R.POSTDATE DESC ) RTB_RNK
FROM ACCTRATEHIST R
JOIN ACCTSUBACCT ASA ON ASA.ACCTNBR = R.ACCTNBR AND ASA.SUBACCTNBR = R.SUBACCTNBR AND ASA.BALCATCD = 'UPFR' AND ASA.BALTYPCD = 'DLR') RTB
ON RTB.ACCTNBR = AC.ACCTNBR AND RTB_RNK = 1
LEFT JOIN (SELECT R.DATELASTMAINT,R.ACCTNBR,R.SUBACCTNBR, R.EFFDATE,R.INTRATE,R.INACTIVEDATE,R.DELQRATEYN,R.POSTDATE,R.DISCLOSEDINTRATE
,ROW_NUMBER() OVER(PARTITION BY R.ACCTNBR,R.SUBACCTNBR ORDER BY R.POSTDATE DESC) RTC_RNK
FROM ACCTRATEHIST R
JOIN ACCTSUBACCT ASA ON ASA.ACCTNBR = R.ACCTNBR AND ASA.SUBACCTNBR = R.SUBACCTNBR AND ASA.BALCATCD = 'NOTE' AND ASA.BALTYPCD = 'BAL') RTC
ON RTC.ACCTNBR = AC.ACCTNBR AND RTC_RNK = 1
LEFT JOIN MJMIACCTTYP MMA
ON MMA.MIACCTTYPCD = AC.CURRMIACCTTYPCD
LEFT JOIN ACCTUSERFIELD AUFLT
ON AUFLT.Acctnbr = AC.Acctnbr AND AUFLT.userfieldCD = 'COMC'
LEFT JOIN ACCTUSERFIELD AUFAI
ON AUFAI.Acctnbr = AC.Acctnbr AND AUFAI.userfieldCD = 'LOSA'
LEFT JOIN ORGUSERFIELD OUFDC
ON OUFDC.OrgNbr = ORGD.OrgNbr AND OUFDC.UserFieldCD = 'DLCD'
LEFT JOIN RTXN
ON RTXN.ACCTNBR = AC.ACCTNBR AND rtxntypcd = 'NDSB'
LEFT JOIN ACCTUSERFIELD AUFAD
ON AUFAD.Acctnbr = AC.Acctnbr AND AUFAD.userfieldCD = 'LOSD'
LEFT JOIN ACCTUSERFIELD AUFBR
ON AUFBR.Acctnbr = AC.Acctnbr AND AUFBR.userfieldCD = 'BUYR'
LEFT JOIN ACCTUSERFIELD AUFWA
ON AUFWA.Acctnbr = AC.Acctnbr AND AUFWA.userfieldCD = 'WRYN'
LEFT JOIN ACCTUSERFIELD AUFG
ON AUFG.Acctnbr = AC.Acctnbr AND AUFG.userfieldCD = 'GPYN'
LEFT JOIN ACCTSUBACCT ASADL
ON ASADL.AcctNbr = AC.AcctNbr AND ASADL.BALTYPCD = 'SINS' AND ASADL.BALCATCD = 'DL'
LEFT JOIN ACCTSUBACCT ASADI
ON ASADI.AcctNbr = AC.AcctNbr AND ASADI.BALTYPCD = 'SINS' AND ASADI.BALCATCD = 'DI'
LEFT JOIN ACCTSUBACCT ASADD
ON ASADD.AcctNbr = AC.AcctNbr AND ASADD.BALTYPCD = 'SINS' AND ASADD.BALCATCD = 'DD'
LEFT JOIN ACCTSUBACCT ASADLLD
ON ASADLLD.AcctNbr = AC.AcctNbr AND ASADLLD.BALTYPCD = 'FIN' AND ASADLLD.BALCATCD = 'DLLD'
LEFT JOIN ACCTSUBACCT ASADLDS
ON ASADLDS.AcctNbr = AC.AcctNbr AND ASADLDS.BALTYPCD = 'FIN' AND ASADLDS.BALCATCD = 'DLDS'
LEFT JOIN ACCTSUBACCT ASADLLF
ON ASADLLF.AcctNbr = AC.AcctNbr AND ASADLLF.BALTYPCD = 'FIN' AND ASADLLF.BALCATCD = 'DLLF'
LEFT JOIN ACCTSUBACCT ASAG
ON ASAG.AcctNbr = AC.AcctNbr AND ASAG.BALTYPCD = 'FIN' AND ASAG.BALCATCD = 'GAP'
LEFT JOIN ACCTSUBACCT ASAW
ON ASAW.AcctNbr = AC.AcctNbr AND ASAW.BALTYPCD = 'FIN' AND ASAW.BALCATCD = 'WARA'
LEFT JOIN ACCTSUBACCT ASAM
ON ASAW.AcctNbr = AC.AcctNbr AND ASAW.BALTYPCD = 'FIN' AND ASAW.BALCATCD = 'ODLR'
LEFT JOIN (SELECT aas.ACCTNBR,aas.EFFDATETIME ,aas.acctstatcd,aas.POSTDATE
,ROW_NUMBER() OVER(PARTITION BY aas.ACCTNBR ORDER BY aas.EFFDATETIME DESC ) AAS_RNK
FROM acctacctstathist aas ) aaa
ON aaa.ACCTNBR = ac.ACCTNBR AND AAS_RNK = 1
WHERE AC.AcctNbr = :AcctNbr
@@ -0,0 +1,129 @@
With Cte_IndirectActiveLoans as (
SELECT
Coalesce(MA.MemberAgreeNbr, MAOrg.MemberAgreeNbr) AS MemberNumber,
AC.ACCTNBR AS LoanNumber,
AUFAI.Value AS ApplicationId,
RTRIM(PERS.FirstName) AS MemberFirstName,
PERS.mdlinit AS MemberInitial,
COALESCE(RTRIM(PERS.LastName), RTRIM(ORGM.OrgName)) AS MemberLastName,
OUFDC.Value AS DealerCode,
DGA.AcctNbr AS DealerAccountNumber,
DGA.taxrptfororgnbr AS DealerOrganizationNumber,
ORGD.OrgName AS DealerName,
CASE WHEN AUFWA.Value = 'Y' OR ASAW.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS Warranty,
CASE WHEN AUFG.Value = 'Y' OR ASAG.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS GAP,
CASE WHEN ASADLLD.SubAcctNbr IS NOT NULL OR ASADLLF.SubACctNbr IS NOT NULL THEN 1 ELSE 0 END AS CreditLife,
CASE WHEN ASADLLD.SubAcctNbr IS NOT NULL OR ASADLDS.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS CreditDisability,
CASE WHEN ASAMBP.SubAcctNbr IS NOT NULL THEN 1 ELSE 0 END AS Mbp,
AC.currmiaccttypcd AS AccountType,
MMA.MIACCTTYPDESC AS AccountDescription,
AC.CONTRACTDATE AS LoanDate,
Coalesce(RTXN.OrigPostDate,TO_DATE(AUFAD.Value, 'YYYY-MM-DD' )) AS PostedDate,
AL.date1stpmtdue AS FirstPmtDate,
AC.DATEMAT AS FinalPmtDate,
AC.ORIGTERM AS OriginalTermInDays,
ASA.OrigBal AS LoanAmount,
To_number(AUFBR.Value) AS BuyRate,
AUFLT.Value AS LoanType,
RTC.INTRATE * 100 AS ContractRate,
PT.PMTAMT AS MonthlyPmt,
RTRIM(PR.PROPID) AS Vin,
RTRIM(PR.PropMake) AS Make,
RTRIM(PR.PropModel) AS Model,
PR.propyearnbr AS Year,
RTRIM(PR.PropColor) AS Color,
PR.PropVehicleOdometer AS Mileage
FROM ACCT AC
LEFT JOIN PERS
ON PERS.PersNbr = AC.TAXRPTFORPERSNBR
LEFT JOIN ORG ORGM
ON ORGM.OrgNbr = AC.TaxrptForORgNbr
LEFT JOIN MEMBERAGREEMENT MA
ON MA.PrimaryPersNbr = PERS.PersNbr
LEFT JOIN MEMBERAGREEMENT MAOrg
ON MAOrg.PrimaryOrgNbr = ORGM.OrgNbr
LEFT JOIN ACCTGRPACCT AGA
ON AC.AcctNbr = AGA.AcctNbr
LEFT JOIN (select acctgrpnbr, acct.acctnbr, acct.taxrptfororgnbr from acctgrpacct aga
inner join acct
on acct.acctnbr = aga.acctnbr and acct.currmiaccttypcd = 'DLR') DGA
ON DGA.AcctGrpNbr = AGA.AcctGrpNbr
LEFT JOIN ORG ORGD
ON ORGD.ORGNbr = DGA.taxrptfororgnbr
LEFT JOIN ACCTLOAN AL
ON AL.AcctNbr = AC.AcctNbr
LEFT JOIN (SELECT Propnbr, AcctNbr,ROW_NUMBER() OVER(PARTITION BY ACCTNBR ORDER BY PropNbr) PPP_RNK
FROM ACCTPROP) AP ON AP.AcctNbr = AC.AcctNbr AND AP.PPP_RNK = 1
LEFT JOIN PROP PR
ON PR.Propnbr = AP.Propnbr
LEFT JOIN ACCTSUBACCT ASA
ON ASA.ACCTNBR = AC.ACCTNBR AND ASA.BALCATCD = 'NOTE' AND ASA.BALTYPCD = 'BAL'
LEFT JOIN (SELECT PS.ACCTNBR,PS.SUBACCTNBR,PS.EFFDATE,PS.INACTIVEDATE,PMT.PMTNBR, PMT.PMTTYPCD,T.PMTTYPDESC,PMT.PMTAMT,PMT.PMTPERCENT,
PMT.EFFDATE PMT_EFFDATE,PMT.PMTCALPERIODCD,PMT.INACTIVEDATE PMT_INACTIVEDATE,PMT.DATELASTMAINT,
ROW_NUMBER() OVER(PARTITION BY PS.ACCTNBR,PS.SUBACCTNBR ORDER BY PMT.EFFDATE DESC ) P_RNK
FROM ACCTPMTSUBACCTHIST PS
JOIN ACCTSUBACCT ASA ON ASA.ACCTNBR = PS.ACCTNBR AND ASA.SUBACCTNBR = PS.SUBACCTNBR AND ASA.BALCATCD = 'NOTE' AND ASA.BALTYPCD = 'DUE'
JOIN ACCTPMTHIST PMT ON PMT.ACCTNBR = PS.ACCTNBR AND PMT.PMTNBR = PS.PMTNBR
JOIN PMTTYP T ON T.PMTTYPCD = PMT.PMTTYPCD) PT ON PT.ACCTNBR = AC.ACCTNBR AND P_RNK = 1
LEFT JOIN (SELECT R.DATELASTMAINT,R.ACCTNBR,R.SUBACCTNBR, R.EFFDATE,R.INTRATE,R.INACTIVEDATE,R.DELQRATEYN,R.POSTDATE,R.DISCLOSEDINTRATE
,ROW_NUMBER() OVER(PARTITION BY R.ACCTNBR,R.SUBACCTNBR ORDER BY R.POSTDATE DESC) RTC_RNK
FROM ACCTRATEHIST R
JOIN ACCTSUBACCT ASA ON ASA.ACCTNBR = R.ACCTNBR AND ASA.SUBACCTNBR = R.SUBACCTNBR AND ASA.BALCATCD = 'NOTE' AND ASA.BALTYPCD = 'BAL') RTC
ON RTC.ACCTNBR = AC.ACCTNBR AND RTC_RNK = 1
LEFT JOIN MJMIACCTTYP MMA
ON MMA.MIACCTTYPCD = AC.CURRMIACCTTYPCD
LEFT JOIN ACCTUSERFIELD AUFLT
ON AUFLT.Acctnbr = AC.Acctnbr AND AUFLT.userfieldCD = 'COMC'
LEFT JOIN ACCTUSERFIELD AUFAI
ON AUFAI.Acctnbr = AC.Acctnbr AND AUFAI.userfieldCD = 'LOSA'
LEFT JOIN ORGUSERFIELD OUFDC
ON OUFDC.OrgNbr = ORGD.OrgNbr AND OUFDC.UserFieldCD = 'DLCD'
LEFT JOIN RTXN
ON RTXN.ACCTNBR = AC.ACCTNBR AND rtxntypcd = 'NDSB'
LEFT JOIN ACCTUSERFIELD AUFAD
ON AUFAD.Acctnbr = AC.Acctnbr AND AUFAD.userfieldCD = 'LOSD'
LEFT JOIN ACCTUSERFIELD AUFBR
ON AUFBR.Acctnbr = AC.Acctnbr AND AUFBR.userfieldCD = 'BUYR'
LEFT JOIN ACCTUSERFIELD AUFWA
ON AUFWA.Acctnbr = AC.Acctnbr AND AUFWA.userfieldCD = 'WRYN'
LEFT JOIN ACCTUSERFIELD AUFG
ON AUFG.Acctnbr = AC.Acctnbr AND AUFG.userfieldCD = 'GPYN'
LEFT JOIN ACCTSUBACCT ASADLLD
ON ASADLLD.AcctNbr = AC.AcctNbr AND ASADLLD.BALTYPCD = 'COST' AND ASADLLD.BALCATCD = 'DLLD'
LEFT JOIN ACCTSUBACCT ASADLDS
ON ASADLDS.AcctNbr = AC.AcctNbr AND ASADLDS.BALTYPCD = 'COST' AND ASADLDS.BALCATCD = 'DLDS'
LEFT JOIN ACCTSUBACCT ASADLLF
ON ASADLLF.AcctNbr = AC.AcctNbr AND ASADLLF.BALTYPCD = 'COST' AND ASADLLF.BALCATCD = 'DLLF'
LEFT JOIN ACCTSUBACCT ASAG
ON ASAG.AcctNbr = AC.AcctNbr AND ASAG.BALTYPCD = 'COST' AND ASAG.BALCATCD = 'GAP'
LEFT JOIN ACCTSUBACCT ASAW
ON ASAW.AcctNbr = AC.AcctNbr AND ASAW.BALTYPCD = 'COST' AND ASAW.BALCATCD = 'WARA'
LEFT JOIN ACCTSUBACCT ASAMBP
ON ASAMBP.AcctNbr = AC.AcctNbr AND ASAMBP.BALTYPCD = 'COST' AND ASAMBP.BALCATCD = 'ODLR'
WHERE AC.currmiaccttypcd IN ('DL01','DL02','DL03','DL04','DL05','DL06','DL07','DL08','DL09','DL10','DL11','DL12','DL13','DL14','DL15','DL16')
AND AC.CURRACCTSTATCD = 'ACT'
AND (Coalesce(RTXN.OrigPostDate,TO_DATE(AUFAD.Value, 'YYYY-MM-DD' )) >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR AC.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR AL.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR PERS.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR MA.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR AUFAI.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR PR.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR ORGD.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR PT.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR AUFLT.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR OUFDC.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR RTC.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR AUFAD.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR AUFBR.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR AUFWA.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR AUFG.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR ASADLLD.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR ASADLDS.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR ASADLLF.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR ASAW.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR ASAMBP.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
OR ASAG.DATELASTMAINT >= TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
))
Select * from Cte_IndirectActiveLoans
Where NOT EXISTS (select null from ACTV AV Where AV.ACTVTYPCD = 'MDFY' and av.subjacctnbr = Cte_IndirectActiveLoans.LoanNumber)
@@ -0,0 +1,231 @@
--BASED ON SPEC 1.6 BATCH PAYOFF QUOTES
WITH CTE_DATES AS (
SELECT Y.*,
Y.DATE_RUN+Y.PAYOFF_DAYS AS EXPIRATION_DATE,
CASE
WHEN Y.DAYS_LEFT_IN_MONTH<=11 OR Y.DAY_OF_MONTH<=2 THEN 1
ELSE 0
END AS PAYOFF_INDICATOR
FROM (/*DO IN TWO STEPS TO TROUBLESHOOT*/
SELECT X.DATE_RUN,
11 AS PAYOFF_DAYS,
ADD_MONTHS(TRUNC(X.DATE_RUN,'YEAR'),12)-TRUNC(X.DATE_RUN,'YEAR') AS DAYS_IN_YEAR,
(ADD_MONTHS(TRUNC(X.DATE_RUN,'MONTH'),1)-1)-X.DATE_RUN AS DAYS_LEFT_IN_MONTH,
CAST(TO_CHAR(X.DATE_RUN,'DD') AS INT) AS DAY_OF_MONTH
FROM (
SELECT TO_DATE(:dateRange,'YYYY-MM-DD') AS DATE_RUN
FROM DUAL
) X
) Y
), CTE_LOANS_IN_SCOPE AS (/*PAYOFF CALCULATIONS ARE REALLY IMPORTANT, IF FAILS NEED TO FILL IN DAYS*/
SELECT A.ACCTNBR,
A.TAXRPTFORORGNBR,
A.TAXRPTFORPERSNBR,
COALESCE(CAST(AMT.VALUE AS NUMERIC(12,2)),0) AS PAYOFF_VALUE,
DR.PAYOFF_DAYS+(DR.DATE_RUN-TO_DATE(DT.VALUE,'YYYY-MM-DD')) AS PAYOFF_DAYS,
DR.EXPIRATION_DATE,
DR.PAYOFF_INDICATOR,
DR.DAYS_IN_YEAR,
DR.DATE_RUN,
A.DATEMAT
FROM OSIBANK.ACCT A
INNER JOIN CTE_DATES DR ON 1=1
INNER JOIN OSIBANK.ACCTUSERFIELD AMT ON AMT.ACCTNBR=A.ACCTNBR AND AMT.USERFIELDCD='8AUF'
INNER JOIN OSIBANK.ACCTUSERFIELD DT ON DT.ACCTNBR=AMT.ACCTNBR AND DT.USERFIELDCD='8DUF' AND DT.VALUE IS NOT NULL
WHERE A.CURRACCTSTATCD IN ('ACT','NPFM')
AND (
(A.MJACCTTYPCD='CNS' AND A.CURRMIACCTTYPCD LIKE 'DL%')
OR
(A.MJACCTTYPCD='CNS' AND A.CURRMIACCTTYPCD LIKE 'DV%')
OR
(A.MJACCTTYPCD='CML' AND A.CURRMIACCTTYPCD='BE21')
)
AND A.ACCTNBR = :accountNumber
), CTE_PRIMARY AS (
SELECT X.ACCTNBR,
UPPER(X.LASTNAME) AS LASTNAME,
UPPER(X.FIRSTNAME) AS FIRSTNAME,
UPPER(X.MDLINIT) AS MDLINIT,
X.ORGNAME,
X.PRIVACYYN AS OPTOUTCODE,
TRIM(REGEXP_REPLACE(AD.CITYNAME,'( ){2,}',' ')) AS CITY,
TRIM(AD.STATECD) AS STATE,
TRIM(REGEXP_REPLACE(AL.LINE1,'( ){2,}',' ')) AS ADDRESS_1,
TRIM(REGEXP_REPLACE(AL.LINE2||' '||AL.LINE3,'( ){2,}',' ')) AS ADDRESS_2,
TRIM(REGEXP_REPLACE(AD.ZIPCD||CASE WHEN LPAD(AD.ZIPSUF,4,'0')='0000' THEN NULL ELSE LPAD(AD.ZIPSUF,4,'0') END,'( ){2,}',' ')) AS ZIP
FROM
(
SELECT A.ACCTNBR,
PAU.ADDRNBR,
P1.PRIVACYYN,
P1.LASTNAME,
P1.FIRSTNAME,
P1.MDLINIT,
NULL AS ORGNAME
FROM CTE_LOANS_IN_SCOPE A
INNER JOIN OSIBANK.PERS P1 ON P1.PERSNBR=A.TAXRPTFORPERSNBR
LEFT JOIN OSIBANK.PERSADDRUSE PAU ON PAU.PERSNBR=P1.PERSNBR AND PAU.ADDRUSECD='PRI'
UNION ALL
SELECT A.ACCTNBR,
OAU.ADDRNBR,
O1.PRIVACYYN,
NULL AS LASTNAME,
NULL AS FIRSTNAME,
NULL AS MDLINIT,
O1.ORGNAME
FROM CTE_LOANS_IN_SCOPE A
INNER JOIN OSIBANK.ORG O1 ON O1.ORGNBR=A.TAXRPTFORORGNBR
LEFT JOIN OSIBANK.ORGADDRUSE OAU ON OAU.ORGNBR=O1.ORGNBR AND OAU.ADDRUSECD='PRI'
) X
LEFT JOIN OSIBANK.ADDR AD ON AD.ADDRNBR=X.ADDRNBR
LEFT JOIN (
SELECT X.ADDRNBR,
MAX(DECODE(X.LINENUM,1,X.TEXT,NULL)) AS LINE1,
MAX(DECODE(X.LINENUM,2,X.TEXT,NULL)) AS LINE2,
MAX(DECODE(X.LINENUM,3,X.TEXT,NULL)) AS LINE3
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY AL.ADDRNBR ORDER BY AL.LINENBR) AS LINENUM,
AL.ADDRNBR,
AL.TEXT
FROM OSIBANK.ADDRLINE AL
INNER JOIN OSIBANK.ADDRLINETYP ALT ON AL.ADDRLINETYPCD=ALT.ADDRLINETYPCD
WHERE ALT.MAILADDRYN='Y'
) X
GROUP BY X.ADDRNBR
) AL ON AL.ADDRNBR=AD.ADDRNBR
), CTE_EXCLUSIONS AS (
SELECT LIS.ACCTNBR
FROM CTE_LOANS_IN_SCOPE LIS
WHERE LIS.PAYOFF_INDICATOR=1 /*END/START OF MONTH*/
AND EXISTS (
SELECT 1
FROM OSIBANK.ACCTSUBACCT ASA
INNER JOIN OSIBANK.ACCTSUBACCTCALCVAR ASACV ON ASACV.ACCTNBR=ASA.ACCTNBR AND ASACV.SUBACCTNBR=ASA.SUBACCTNBR AND ASACV.CALCTYPCD=ASA.BALTYPCD
WHERE LIS.ACCTNBR=ASA.ACCTNBR
AND UPPER(ASA.BALTYPCD)='SINS'/*SIMPLE*/
AND UPPER(ASACV.CALCVARCD)='SCHD'/*SCHEDULE NUMBER*/
AND ASACV.CALCVALUEEFFDATE<=LIS.DATE_RUN
AND (ASACV.CALCINACTIVEDATE IS NULL OR ASACV.CALCINACTIVEDATE>=LIS.DATE_RUN)
AND (
/*MOB INSURANCE*/
UPPER(ASA.BALCATCD) IN ('JDIS'/*JOINT-DISAB*/,'JLIF'/*JOINT-LIFE*/,'SDIS'/*SINGLE-DISAB*/,'SING'/*SINGLE-LIFE*/)
OR
/*DEBT PROTECTION*/
UPPER(ASA.BALCATCD) IN ('DJD'/*DEBT-PRO-JOINT-DISAB*/,'DJL'/*DEBT-PRO-JOINT-LIFE*/,'DJLD'/*DEBT-PRO-JOINT-LIFE-DISAB*/,'DSD'/*DEBT-PRO-SINGLE-DISAB*/,'DSL'/*DEBT-PRO-SINGLE-LIFE*/,'DSLD'/*DEBT-PRO-SINGLE-LIFE-DISAB*/)
)
)
), CTE_STAGE AS (
SELECT LIS.ACCTNBR as ACCOUNTNUMBER,/*FOR TROUBLESHOOTING*/
CE.ACCTNBR AS EXCLUSIONS,/*FOR TROUBLESHOOTING*/
CAST(SUBSTR(CP.ACCTNBR,-4,4) AS VARCHAR2(4)) AS ACCOUNT,/*RIGHTMOST 4 DIGITS, MAXLENGTH 4*/
CAST(
CASE
WHEN LENGTH(AU.VALUE) IS NULL OR LENGTH(AU.VALUE)>3 THEN '1234'
ELSE AU.VALUE
END AS VARCHAR2(20)) AS LENDERID,/*LOOK IN USERFIELD MAXLENGTH 20*/
CP.OPTOUTCODE,/*MAIL MARKETING, MAXLENGTH 1*/
CAST(SUBSTR(COALESCE(CP.FIRSTNAME,CP.ORGNAME),0,20) AS VARCHAR2(20)) AS FIRSTNAME,/*MAXLENGTH 20*/
CAST(SUBSTR(CP.MDLINIT,0,1) AS VARCHAR2(1)) AS MIDDLENAME,/*MAXLENGTH 1*/
CAST(SUBSTR(COALESCE(CP.LASTNAME,CP.ORGNAME),0,20) AS VARCHAR2(20)) AS LASTNAME,/*MAXLENGTH 20*/
CAST(SUBSTR(CP.ADDRESS_1,0,20) AS VARCHAR2(20)) AS ADDRESS1,/*CLEAN UP IN ABOVE CTE, MAXLENGTH 20*/
CAST(SUBSTR(CP.ADDRESS_2,0,20) AS VARCHAR2(20)) AS ADDRESS2,/*CLEAN UP IN ABOVE CTE, MAXLENGTH 20*/
CAST(SUBSTR(CP.CITY,0,20) AS VARCHAR2(20)) AS CITY,/*CLEAN UP IN ABOVE CTE, MAXLENGTH 20*/
CAST(SUBSTR(CP.STATE,0,2) AS VARCHAR2(2)) AS STATE,/*DNA ALLOWS LONGER, MAXLENGTH 2*/
CAST(SUBSTR(CP.ZIP,0,9) AS VARCHAR2(9)) AS ZIPCODE, /*MAXLENGTH 9*/
CAST(NULL AS VARCHAR2(10)) AS HOMEPHONE, /*NULL IN PREVIOUS VERSION MAXLENGTH 10*/
CAST(NULL AS VARCHAR2(10)) AS BUSINESSPHONE, /*NULL IN PREVIOUS VERSION MAXLENGTH 10*/
CAST(SUBSTR(PR.PROPID,0,17) AS VARCHAR2(17)) AS VEHICLEVIN, /*DNA ALLOWS LONGER, MAXLENGTH 17*/
CAST(
CASE
WHEN LENGTH(PR.PROPYEARNBR)> 4 THEN NULL
ELSE PR.PROPYEARNBR
END
AS VARCHAR2(4)) AS VEHICLEYEAR, /*DNA ALLOWS LONGER, MAXLENGTH 4, NEEDS TO BE NUMERIC, WHICH DNA IS*/
CAST(SUBSTR(PR.PROPMAKE,0,20) AS VARCHAR2(20)) AS VEHICLEMAKE, /*DNA IS SHORTER, MAXLENGTH 20*/
CAST(SUBSTR(PR.PROPMODEL,0,20) AS VARCHAR2(20)) AS VEHICLEMODEL, /*DNA IS SHORTER, MAXLENGTH 20*/
CAST(NULL AS VARCHAR2(20)) AS VEHICLETRIM,/*NULL IN PREVIOUS VERSION MAXLENGTH 20*/
CAST(NULL AS VARCHAR2(40)) AS VEHICLEDESCRIPTION,/*NULL IN PREVIOUS VERSION MAXLENGTH 40*/
CAST('R' AS VARCHAR2(1)) AS PRODUCT,/*HARD-CODED IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 1*/
CAST(NULL AS VARCHAR2(20)) AS SUBPRODUCT,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 20*/
TO_CHAR(
CASE WHEN CE.ACCTNBR IS NOT NULL THEN 0
ELSE ROUND(LIS.PAYOFF_VALUE+(LIS.PAYOFF_DAYS*RATE.INTRATE/LIS.DAYS_IN_YEAR*CNB.BALAMT),2)
END
,'FM999990.00') AS NETPAYOFFAMOUNT,/*PER: KYLE MATHER-IF MOB OR DEBT PROTECTION THEN ZERO. MAXLENGTH 6.2*/
TO_CHAR(LIS.EXPIRATION_DATE,'YYYYMMDD') AS GOODUNTILDATE, /*CALCULATED, MAXLENGTH 8*/
TO_CHAR(LIS.DATEMAT,'YYYYMMDD') AS MATURITYDATE,
CASE
WHEN AC.ORIGTERM IS NULL OR AC.CONTRACTDATE IS NULL THEN 0--NO EXAMPLE OF NULL CONTRACT DATE BUT SYSTEM DOES NOT PREVENT IT
ELSE ROUND(MONTHS_BETWEEN(AC.CONTRACTDATE+AC.ORIGTERM, AC.CONTRACTDATE))
END AS TERMINMONTHS,/*MAXLENGTH2, PER KYLE MATHER SHOULD NOT BE LIMITED TO THIS*/
CASE
WHEN MONTHS_BETWEEN(LIS.DATEMAT,CDD.DUEDATE)<=0 THEN 0
ELSE MONTHS_BETWEEN(LIS.DATEMAT,CDD.DUEDATE)+1
END AS MONTHS_LEFT, /*MAXLENGTH 2, PER KYLE MATHER SHOULD NOT BE LIMITED TO THIS*/
CAST(NULL AS VARCHAR2(8)) AS NEXTPAYMENTDATE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 8*/
TO_CHAR(ROUND(NVL(PMT.PMTAMT,0),2),'FM99990.00') AS MONTHLYPAYMENT, /*MAXLENGTH 5.2*/
CAST(NULL AS VARCHAR2(9)) AS GROSSPAYOFF,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 6.2*/
CAST(NULL AS VARCHAR2(9)) AS SECURITYDEPOSIT,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 6.2*/
CAST(NULL AS VARCHAR2(9)) AS RESIDUALVALUE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 6.2*/
TO_CHAR(ROUND((RATE.INTRATE/LIS.DAYS_IN_YEAR*CNB.BALAMT),2),'FM999990.00') AS DOLLARDAYRATE,/*MAXLENGTH 6.2*/
CAST(NULL AS VARCHAR2(9)) AS BALLOONAMOUNT,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 6.2*/
CAST(
CASE
WHEN CE.ACCTNBR IS NOT NULL THEN 'Contact lender for payoff'
ELSE NULL
END
AS VARCHAR2(80)) AS PAYOFFMESSAGE,/*MAXLENGTH 80*/
CAST(NULL AS VARCHAR2(1)) AS PREAPPROVEDCODE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 1*/
CAST(NULL AS VARCHAR2(20)) AS REFERENCENUMBER,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 20*/
CAST(NULL AS VARCHAR2(8)) AS EXPIRATIONDATE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 8*/
CAST(NULL AS VARCHAR2(9)) AS BUYRATE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 2.6*/
CAST(NULL AS VARCHAR2(8)) AS ACQUISITIONFEE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 5.2*/
CAST(NULL AS VARCHAR2(8)) AS PARTICIPATIONPERCENT/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 3.2*/
FROM CTE_LOANS_IN_SCOPE LIS
INNER JOIN OSIBANK.ACCT AC ON AC.ACCTNBR=LIS.ACCTNBR
INNER JOIN CTE_PRIMARY CP ON CP.ACCTNBR=LIS.ACCTNBR
LEFT JOIN (
SELECT PMT.ACCTNBR,
SUM(PMT.PMTAMT) AS PMTAMT
FROM OSIBANK.ACCTPMTHIST PMT
INNER JOIN CTE_DATES CD ON 1=1
INNER JOIN OSIBANK.ACCTPMTSUBACCTHIST APSH ON APSH.ACCTNBR=PMT.ACCTNBR AND APSH.PMTNBR=PMT.PMTNBR AND APSH.EFFDATE=PMT.EFFDATE
INNER JOIN OSIBANK.ACCTSUBACCT ASA ON ASA.ACCTNBR=APSH.ACCTNBR AND ASA.SUBACCTNBR=APSH.SUBACCTNBR AND ASA.BALCATCD='NOTE' AND ASA.BALTYPCD IN ('OINT','BAL','DUE')
WHERE PMT.PMTTYPCD IN ('FB','FBI','FDUE')
AND PMT.EFFDATE<=CD.DATE_RUN
AND (PMT.INACTIVEDATE>CD.DATE_RUN OR PMT.INACTIVEDATE IS NULL)
AND (APSH.INACTIVEDATE>CD.DATE_RUN OR APSH.INACTIVEDATE IS NULL)
GROUP BY PMT.ACCTNBR
) PMT ON PMT.ACCTNBR=LIS.ACCTNBR
LEFT JOIN (
SELECT ARH.ACCTNBR,
ARH.INTRATE,
ROW_NUMBER() OVER (PARTITION BY ARH.ACCTNBR, ARH.SUBACCTNBR ORDER BY ARH.EFFDATE DESC) AS RWN
FROM OSIBANK.ACCTRATEHIST ARH
INNER JOIN OSIBANK.ACCTSUBACCT ASA ON ASA.ACCTNBR=ARH.ACCTNBR AND ASA.SUBACCTNBR=ARH.SUBACCTNBR AND ASA.BALCATCD='NOTE' AND ASA.BALTYPCD='BAL'
INNER JOIN CTE_DATES CD ON 1=1
WHERE ARH.EFFDATE<=CD.DATE_RUN AND (ARH.INACTIVEDATE>CD.DATE_RUN OR ARH.INACTIVEDATE IS NULL)
) RATE ON RATE.ACCTNBR=LIS.ACCTNBR AND RATE.RWN=1
LEFT JOIN OSIBANK.VIEW_LN_CURR_NOTEBAL CNB ON CNB.ACCTNBR=LIS.ACCTNBR
LEFT JOIN OSIBANK.ACCTPROP AP ON AP.ACCTNBR=LIS.ACCTNBR
LEFT JOIN OSIBANK.PROP PR ON PR.PROPNBR=AP.PROPNBR
LEFT JOIN OSIBANK.VIEW_LN_CURR_DUEDATE CDD ON CDD.ACCTNBR=LIS.ACCTNBR
LEFT JOIN OSIBANK.ACCTUSERFIELD AU ON AU.ACCTNBR=LIS.ACCTNBR AND AU.USERFIELDCD='DECD'
LEFT JOIN CTE_EXCLUSIONS CE ON CE.ACCTNBR=LIS.ACCTNBR
) /*MATCH REQUIREMENTS ON SPEC DOCUMENT*/
SELECT DISTINCT *
FROM CTE_STAGE S
WHERE S.ACCOUNT IS NOT NULL
AND S.LENDERID IS NOT NULL
AND S.FIRSTNAME IS NOT NULL
AND S.LASTNAME IS NOT NULL
AND S.ADDRESS1 IS NOT NULL
AND S.CITY IS NOT NULL
/*PER KYLE MATHER INCLUDE RECORDS WITHOUT STATE, REJECT ON DEALERTRACK INGEST SIDE*/
AND S.ZIPCODE IS NOT NULL
AND S.VEHICLEVIN IS NOT NULL
AND S.PRODUCT IS NOT NULL
AND S.NETPAYOFFAMOUNT IS NOT NULL
AND S.GOODUNTILDATE IS NOT NULL
AND S.MATURITYDATE IS NOT NULL
/*PER KYLE MATHER INCLUDE LOANS WITH MOB INSURANCE AND/OR DEBT PROTECTION*/
@@ -0,0 +1,233 @@
--BASED ON SPEC 1.6 BATCH PAYOFF QUOTES
WITH CTE_DATES AS (
SELECT Y.*,
Y.DATE_RUN+Y.PAYOFF_DAYS AS EXPIRATION_DATE,
CASE
WHEN Y.DAYS_LEFT_IN_MONTH<=11 OR Y.DAY_OF_MONTH<=2 THEN 1
ELSE 0
END AS PAYOFF_INDICATOR
FROM (/*DO IN TWO STEPS TO TROUBLESHOOT*/
SELECT X.DATE_RUN,
11 AS PAYOFF_DAYS,
ADD_MONTHS(TRUNC(X.DATE_RUN,'YEAR'),12)-TRUNC(X.DATE_RUN,'YEAR') AS DAYS_IN_YEAR,
(ADD_MONTHS(TRUNC(X.DATE_RUN,'MONTH'),1)-1)-X.DATE_RUN AS DAYS_LEFT_IN_MONTH,
CAST(TO_CHAR(X.DATE_RUN,'DD') AS INT) AS DAY_OF_MONTH
FROM (
SELECT TO_DATE(:dateRange,'YYYY-MM-DD') AS DATE_RUN
FROM DUAL
) X
) Y
), CTE_LOANS_IN_SCOPE AS (/*PAYOFF CALCULATIONS ARE REALLY IMPORTANT, IF FAILS NEED TO FILL IN DAYS*/
SELECT A.ACCTNBR,
A.TAXRPTFORORGNBR,
A.TAXRPTFORPERSNBR,
COALESCE(CAST(AMT.VALUE AS NUMERIC(12,2)),0) AS PAYOFF_VALUE,
DR.PAYOFF_DAYS+(DR.DATE_RUN-TO_DATE(DT.VALUE,'YYYY-MM-DD')) AS PAYOFF_DAYS,
DR.EXPIRATION_DATE,
DR.PAYOFF_INDICATOR,
DR.DAYS_IN_YEAR,
DR.DATE_RUN,
A.DATEMAT
FROM OSIBANK.ACCT A
INNER JOIN CTE_DATES DR ON 1=1
INNER JOIN OSIBANK.ACCTUSERFIELD AMT ON AMT.ACCTNBR=A.ACCTNBR AND AMT.USERFIELDCD='8AUF'
INNER JOIN OSIBANK.ACCTUSERFIELD DT ON DT.ACCTNBR=AMT.ACCTNBR AND DT.USERFIELDCD='8DUF' AND DT.VALUE IS NOT NULL
INNER JOIN OSIBANK.ACCTPROP AP ON AP.ACCTNBR=A.ACCTNBR
INNER JOIN OSIBANK.PROP PR ON PR.PROPNBR=AP.PROPNBR
WHERE A.CURRACCTSTATCD IN ('ACT','NPFM')
AND (
(A.MJACCTTYPCD='CNS' AND A.CURRMIACCTTYPCD LIKE 'DL%')
OR
(A.MJACCTTYPCD='CNS' AND A.CURRMIACCTTYPCD LIKE 'DV%')
OR
(A.MJACCTTYPCD='CML' AND A.CURRMIACCTTYPCD='BE21')
)
AND PR.PROPID = :VIN
), CTE_PRIMARY AS (
SELECT X.ACCTNBR,
UPPER(X.LASTNAME) AS LASTNAME,
UPPER(X.FIRSTNAME) AS FIRSTNAME,
UPPER(X.MDLINIT) AS MDLINIT,
X.ORGNAME,
X.PRIVACYYN AS OPTOUTCODE,
TRIM(REGEXP_REPLACE(AD.CITYNAME,'( ){2,}',' ')) AS CITY,
TRIM(AD.STATECD) AS STATE,
TRIM(REGEXP_REPLACE(AL.LINE1,'( ){2,}',' ')) AS ADDRESS_1,
TRIM(REGEXP_REPLACE(AL.LINE2||' '||AL.LINE3,'( ){2,}',' ')) AS ADDRESS_2,
TRIM(REGEXP_REPLACE(AD.ZIPCD||CASE WHEN LPAD(AD.ZIPSUF,4,'0')='0000' THEN NULL ELSE LPAD(AD.ZIPSUF,4,'0') END,'( ){2,}',' ')) AS ZIP
FROM
(
SELECT A.ACCTNBR,
PAU.ADDRNBR,
P1.PRIVACYYN,
P1.LASTNAME,
P1.FIRSTNAME,
P1.MDLINIT,
NULL AS ORGNAME
FROM CTE_LOANS_IN_SCOPE A
INNER JOIN OSIBANK.PERS P1 ON P1.PERSNBR=A.TAXRPTFORPERSNBR
LEFT JOIN OSIBANK.PERSADDRUSE PAU ON PAU.PERSNBR=P1.PERSNBR AND PAU.ADDRUSECD='PRI'
UNION ALL
SELECT A.ACCTNBR,
OAU.ADDRNBR,
O1.PRIVACYYN,
NULL AS LASTNAME,
NULL AS FIRSTNAME,
NULL AS MDLINIT,
O1.ORGNAME
FROM CTE_LOANS_IN_SCOPE A
INNER JOIN OSIBANK.ORG O1 ON O1.ORGNBR=A.TAXRPTFORORGNBR
LEFT JOIN OSIBANK.ORGADDRUSE OAU ON OAU.ORGNBR=O1.ORGNBR AND OAU.ADDRUSECD='PRI'
) X
LEFT JOIN OSIBANK.ADDR AD ON AD.ADDRNBR=X.ADDRNBR
LEFT JOIN (
SELECT X.ADDRNBR,
MAX(DECODE(X.LINENUM,1,X.TEXT,NULL)) AS LINE1,
MAX(DECODE(X.LINENUM,2,X.TEXT,NULL)) AS LINE2,
MAX(DECODE(X.LINENUM,3,X.TEXT,NULL)) AS LINE3
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY AL.ADDRNBR ORDER BY AL.LINENBR) AS LINENUM,
AL.ADDRNBR,
AL.TEXT
FROM OSIBANK.ADDRLINE AL
INNER JOIN OSIBANK.ADDRLINETYP ALT ON AL.ADDRLINETYPCD=ALT.ADDRLINETYPCD
WHERE ALT.MAILADDRYN='Y'
) X
GROUP BY X.ADDRNBR
) AL ON AL.ADDRNBR=AD.ADDRNBR
), CTE_EXCLUSIONS AS (
SELECT LIS.ACCTNBR
FROM CTE_LOANS_IN_SCOPE LIS
WHERE LIS.PAYOFF_INDICATOR=1 /*END/START OF MONTH*/
AND EXISTS (
SELECT 1
FROM OSIBANK.ACCTSUBACCT ASA
INNER JOIN OSIBANK.ACCTSUBACCTCALCVAR ASACV ON ASACV.ACCTNBR=ASA.ACCTNBR AND ASACV.SUBACCTNBR=ASA.SUBACCTNBR AND ASACV.CALCTYPCD=ASA.BALTYPCD
WHERE LIS.ACCTNBR=ASA.ACCTNBR
AND UPPER(ASA.BALTYPCD)='SINS'/*SIMPLE*/
AND UPPER(ASACV.CALCVARCD)='SCHD'/*SCHEDULE NUMBER*/
AND ASACV.CALCVALUEEFFDATE<=LIS.DATE_RUN
AND (ASACV.CALCINACTIVEDATE IS NULL OR ASACV.CALCINACTIVEDATE>=LIS.DATE_RUN)
AND (
/*MOB INSURANCE*/
UPPER(ASA.BALCATCD) IN ('JDIS'/*JOINT-DISAB*/,'JLIF'/*JOINT-LIFE*/,'SDIS'/*SINGLE-DISAB*/,'SING'/*SINGLE-LIFE*/)
OR
/*DEBT PROTECTION*/
UPPER(ASA.BALCATCD) IN ('DJD'/*DEBT-PRO-JOINT-DISAB*/,'DJL'/*DEBT-PRO-JOINT-LIFE*/,'DJLD'/*DEBT-PRO-JOINT-LIFE-DISAB*/,'DSD'/*DEBT-PRO-SINGLE-DISAB*/,'DSL'/*DEBT-PRO-SINGLE-LIFE*/,'DSLD'/*DEBT-PRO-SINGLE-LIFE-DISAB*/)
)
)
), CTE_STAGE AS (
SELECT LIS.ACCTNBR as ACCOUNTNUMBER,/*FOR TROUBLESHOOTING*/
CE.ACCTNBR AS EXCLUSIONS,/*FOR TROUBLESHOOTING*/
CAST(SUBSTR(CP.ACCTNBR,-4,4) AS VARCHAR2(4)) AS ACCOUNT,/*RIGHTMOST 4 DIGITS, MAXLENGTH 4*/
CAST(
CASE
WHEN LENGTH(AU.VALUE) IS NULL OR LENGTH(AU.VALUE)>3 THEN '1234'
ELSE AU.VALUE
END AS VARCHAR2(20)) AS LENDERID,/*LOOK IN USERFIELD MAXLENGTH 20*/
CP.OPTOUTCODE,/*MAIL MARKETING, MAXLENGTH 1*/
CAST(SUBSTR(COALESCE(CP.FIRSTNAME,CP.ORGNAME),0,20) AS VARCHAR2(20)) AS FIRSTNAME,/*MAXLENGTH 20*/
CAST(SUBSTR(CP.MDLINIT,0,1) AS VARCHAR2(1)) AS MIDDLENAME,/*MAXLENGTH 1*/
CAST(SUBSTR(COALESCE(CP.LASTNAME,CP.ORGNAME),0,20) AS VARCHAR2(20)) AS LASTNAME,/*MAXLENGTH 20*/
CAST(SUBSTR(CP.ADDRESS_1,0,20) AS VARCHAR2(20)) AS ADDRESS1,/*CLEAN UP IN ABOVE CTE, MAXLENGTH 20*/
CAST(SUBSTR(CP.ADDRESS_2,0,20) AS VARCHAR2(20)) AS ADDRESS2,/*CLEAN UP IN ABOVE CTE, MAXLENGTH 20*/
CAST(SUBSTR(CP.CITY,0,20) AS VARCHAR2(20)) AS CITY,/*CLEAN UP IN ABOVE CTE, MAXLENGTH 20*/
CAST(SUBSTR(CP.STATE,0,2) AS VARCHAR2(2)) AS STATE,/*DNA ALLOWS LONGER, MAXLENGTH 2*/
CAST(SUBSTR(CP.ZIP,0,9) AS VARCHAR2(9)) AS ZIPCODE, /*MAXLENGTH 9*/
CAST(NULL AS VARCHAR2(10)) AS HOMEPHONE, /*NULL IN PREVIOUS VERSION MAXLENGTH 10*/
CAST(NULL AS VARCHAR2(10)) AS BUSINESSPHONE, /*NULL IN PREVIOUS VERSION MAXLENGTH 10*/
CAST(SUBSTR(PR.PROPID,0,17) AS VARCHAR2(17)) AS VEHICLEVIN, /*DNA ALLOWS LONGER, MAXLENGTH 17*/
CAST(
CASE
WHEN LENGTH(PR.PROPYEARNBR)> 4 THEN NULL
ELSE PR.PROPYEARNBR
END
AS VARCHAR2(4)) AS VEHICLEYEAR, /*DNA ALLOWS LONGER, MAXLENGTH 4, NEEDS TO BE NUMERIC, WHICH DNA IS*/
CAST(SUBSTR(PR.PROPMAKE,0,20) AS VARCHAR2(20)) AS VEHICLEMAKE, /*DNA IS SHORTER, MAXLENGTH 20*/
CAST(SUBSTR(PR.PROPMODEL,0,20) AS VARCHAR2(20)) AS VEHICLEMODEL, /*DNA IS SHORTER, MAXLENGTH 20*/
CAST(NULL AS VARCHAR2(20)) AS VEHICLETRIM,/*NULL IN PREVIOUS VERSION MAXLENGTH 20*/
CAST(NULL AS VARCHAR2(40)) AS VEHICLEDESCRIPTION,/*NULL IN PREVIOUS VERSION MAXLENGTH 40*/
CAST('R' AS VARCHAR2(1)) AS PRODUCT,/*HARD-CODED IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 1*/
CAST(NULL AS VARCHAR2(20)) AS SUBPRODUCT,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 20*/
TO_CHAR(
CASE WHEN CE.ACCTNBR IS NOT NULL THEN 0
ELSE ROUND(LIS.PAYOFF_VALUE+(LIS.PAYOFF_DAYS*RATE.INTRATE/LIS.DAYS_IN_YEAR*CNB.BALAMT),2)
END
,'FM999990.00') AS NETPAYOFFAMOUNT,/*PER: KYLE MATHER-IF MOB OR DEBT PROTECTION THEN ZERO. MAXLENGTH 6.2*/
TO_CHAR(LIS.EXPIRATION_DATE,'YYYYMMDD') AS GOODUNTILDATE, /*CALCULATED, MAXLENGTH 8*/
TO_CHAR(LIS.DATEMAT,'YYYYMMDD') AS MATURITYDATE,
CASE
WHEN AC.ORIGTERM IS NULL OR AC.CONTRACTDATE IS NULL THEN 0--NO EXAMPLE OF NULL CONTRACT DATE BUT SYSTEM DOES NOT PREVENT IT
ELSE ROUND(MONTHS_BETWEEN(AC.CONTRACTDATE+AC.ORIGTERM, AC.CONTRACTDATE))
END AS TERMINMONTHS,/*MAXLENGTH2, PER KYLE MATHER SHOULD NOT BE LIMITED TO THIS*/
CASE
WHEN MONTHS_BETWEEN(LIS.DATEMAT,CDD.DUEDATE)<=0 THEN 0
ELSE MONTHS_BETWEEN(LIS.DATEMAT,CDD.DUEDATE)+1
END AS MONTHS_LEFT, /*MAXLENGTH 2, PER KYLE MATHER SHOULD NOT BE LIMITED TO THIS*/
CAST(NULL AS VARCHAR2(8)) AS NEXTPAYMENTDATE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 8*/
TO_CHAR(ROUND(NVL(PMT.PMTAMT,0),2),'FM99990.00') AS MONTHLYPAYMENT, /*MAXLENGTH 5.2*/
CAST(NULL AS VARCHAR2(9)) AS GROSSPAYOFF,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 6.2*/
CAST(NULL AS VARCHAR2(9)) AS SECURITYDEPOSIT,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 6.2*/
CAST(NULL AS VARCHAR2(9)) AS RESIDUALVALUE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 6.2*/
TO_CHAR(ROUND((RATE.INTRATE/LIS.DAYS_IN_YEAR*CNB.BALAMT),2),'FM999990.00') AS DOLLARDAYRATE,/*MAXLENGTH 6.2*/
CAST(NULL AS VARCHAR2(9)) AS BALLOONAMOUNT,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 6.2*/
CAST(
CASE
WHEN CE.ACCTNBR IS NOT NULL THEN 'Contact lender for payoff'
ELSE NULL
END
AS VARCHAR2(80)) AS PAYOFFMESSAGE,/*MAXLENGTH 80*/
CAST(NULL AS VARCHAR2(1)) AS PREAPPROVEDCODE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 1*/
CAST(NULL AS VARCHAR2(20)) AS REFERENCENUMBER,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 20*/
CAST(NULL AS VARCHAR2(8)) AS EXPIRATIONDATE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 8*/
CAST(NULL AS VARCHAR2(9)) AS BUYRATE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 2.6*/
CAST(NULL AS VARCHAR2(8)) AS ACQUISITIONFEE,/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 5.2*/
CAST(NULL AS VARCHAR2(8)) AS PARTICIPATIONPERCENT/*NULL IN PREVIOUS VERSION IN PREVIOUS VERSION MAXLENGTH 3.2*/
FROM CTE_LOANS_IN_SCOPE LIS
INNER JOIN OSIBANK.ACCT AC ON AC.ACCTNBR=LIS.ACCTNBR
INNER JOIN CTE_PRIMARY CP ON CP.ACCTNBR=LIS.ACCTNBR
LEFT JOIN (
SELECT PMT.ACCTNBR,
SUM(PMT.PMTAMT) AS PMTAMT
FROM OSIBANK.ACCTPMTHIST PMT
INNER JOIN CTE_DATES CD ON 1=1
INNER JOIN OSIBANK.ACCTPMTSUBACCTHIST APSH ON APSH.ACCTNBR=PMT.ACCTNBR AND APSH.PMTNBR=PMT.PMTNBR AND APSH.EFFDATE=PMT.EFFDATE
INNER JOIN OSIBANK.ACCTSUBACCT ASA ON ASA.ACCTNBR=APSH.ACCTNBR AND ASA.SUBACCTNBR=APSH.SUBACCTNBR AND ASA.BALCATCD='NOTE' AND ASA.BALTYPCD IN ('OINT','BAL','DUE')
WHERE PMT.PMTTYPCD IN ('FB','FBI','FDUE')
AND PMT.EFFDATE<=CD.DATE_RUN
AND (PMT.INACTIVEDATE>CD.DATE_RUN OR PMT.INACTIVEDATE IS NULL)
AND (APSH.INACTIVEDATE>CD.DATE_RUN OR APSH.INACTIVEDATE IS NULL)
GROUP BY PMT.ACCTNBR
) PMT ON PMT.ACCTNBR=LIS.ACCTNBR
LEFT JOIN (
SELECT ARH.ACCTNBR,
ARH.INTRATE,
ROW_NUMBER() OVER (PARTITION BY ARH.ACCTNBR, ARH.SUBACCTNBR ORDER BY ARH.EFFDATE DESC) AS RWN
FROM OSIBANK.ACCTRATEHIST ARH
INNER JOIN OSIBANK.ACCTSUBACCT ASA ON ASA.ACCTNBR=ARH.ACCTNBR AND ASA.SUBACCTNBR=ARH.SUBACCTNBR AND ASA.BALCATCD='NOTE' AND ASA.BALTYPCD='BAL'
INNER JOIN CTE_DATES CD ON 1=1
WHERE ARH.EFFDATE<=CD.DATE_RUN AND (ARH.INACTIVEDATE>CD.DATE_RUN OR ARH.INACTIVEDATE IS NULL)
) RATE ON RATE.ACCTNBR=LIS.ACCTNBR AND RATE.RWN=1
LEFT JOIN OSIBANK.VIEW_LN_CURR_NOTEBAL CNB ON CNB.ACCTNBR=LIS.ACCTNBR
LEFT JOIN OSIBANK.ACCTPROP AP ON AP.ACCTNBR=LIS.ACCTNBR
LEFT JOIN OSIBANK.PROP PR ON PR.PROPNBR=AP.PROPNBR
LEFT JOIN OSIBANK.VIEW_LN_CURR_DUEDATE CDD ON CDD.ACCTNBR=LIS.ACCTNBR
LEFT JOIN OSIBANK.ACCTUSERFIELD AU ON AU.ACCTNBR=LIS.ACCTNBR AND AU.USERFIELDCD='DECD'
LEFT JOIN CTE_EXCLUSIONS CE ON CE.ACCTNBR=LIS.ACCTNBR
) /*MATCH REQUIREMENTS ON SPEC DOCUMENT*/
SELECT DISTINCT *
FROM CTE_STAGE S
WHERE S.ACCOUNT IS NOT NULL
AND S.LENDERID IS NOT NULL
AND S.FIRSTNAME IS NOT NULL
AND S.LASTNAME IS NOT NULL
AND S.ADDRESS1 IS NOT NULL
AND S.CITY IS NOT NULL
/*PER KYLE MATHER INCLUDE RECORDS WITHOUT STATE, REJECT ON DEALERTRACK INGEST SIDE*/
AND S.ZIPCODE IS NOT NULL
AND S.VEHICLEVIN IS NOT NULL
AND S.PRODUCT IS NOT NULL
AND S.NETPAYOFFAMOUNT IS NOT NULL
AND S.GOODUNTILDATE IS NOT NULL
AND S.MATURITYDATE IS NOT NULL
/*PER KYLE MATHER INCLUDE LOANS WITH MOB INSURANCE AND/OR DEBT PROTECTION*/
@@ -0,0 +1,3 @@
SELECT COUNT(1)
FROM OSIBANK.ORG
WHERE LOWER(ORGNAME) LIKE '%' || :organizationName || '%'
@@ -0,0 +1,4 @@
SELECT ORGNBR
FROM OSIBANK.ORG
WHERE LOWER(ORGNAME) LIKE '%' || :organizationName || '%'
AND ROWNUM <= :limit
@@ -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
@@ -0,0 +1,10 @@
SELECT q.QUENBR AS QueueNumber,
q.ApplNbr AS ApplicationNumber,
q.ParameterCd AS ParameterCode,
q.ParameterValue AS ParameterValue,
q.DateLastMaint AS DateLastMaint
FROM QUEAPPLPARAM q
INNER JOIN que ON que.quenbr = q.quenbr
WHERE q.APPLNBR in ({ApplicationNumbersHolder})
AND que.EffDate = TO_TIMESTAMP(:EffectiveDate, 'YYYY-MM-DD HH24:MI:SS')
ORDER BY q.QUENBR DESC
@@ -0,0 +1,18 @@
/*
Query to map SAF UserIDs to a known Core Person and Employee
*/
SELECT
pers.USERID AS SafUserId,
prod.PERSNBR AS SafPersNbr,
prod.PRODPERSID AS CorePersNbr,
addr.TEXT AS EmployeeEmail
FROM
SAF.PERSUSER pers
JOIN SAF.PERSPROD prod ON
pers.PERSNBR = PROD.PERSNBR
AND prod.PRODNBR = '3'
JOIN OSIBANK.PERSADDRUSE paddr ON
prod.PRODPERSID = PADDR.PERSNBR
JOIN OSIBANK.ADDRLINE addr ON
paddr.ADDRNBR = addr.ADDRNBR
AND paddr.ADDRUSECD = 'EMPE'
@@ -0,0 +1,8 @@
select *
from (SELECT EXTRTXNDESCNBR AS ExternalDescriptionNumber,
EXTRTXNDESCTEXT AS ExternalDescriptionText,
DATELASTMAINT AS DateLastMaintained
FROM osibank.EXTRTXNDESC
WHERE EXTRTXNDESCTEXT LIKE '%State of Wisc - SSI%'
AND EXTRTXNDESCTEXT NOT LIKE '%*XXXXX%') t
where length(regexp_substr(t.externaldescriptiontext, '\*[0-9]{9}\*')) > 0
@@ -0,0 +1,48 @@
WITH ABC AS (
SELECT
to_date(:startDateTime, 'YYYY-MM-DD HH24:MI:SS') AS start_date,
to_date(:endDateTime, 'YYYY-MM-DD HH24:MI:SS') AS end_date
FROM DUAL
), Transactions AS (
SELECT r2.ACCTNBR, r2.RTXNNBR, r2.POSTDATE, r.TRANAMT, r.CHECKNBR, r.EXTRTXNDESCNBR, r.INTRRTXNDESCNBR, r.CURRRTXNSTATCD, r.RTXNTYPCD
FROM osibank.RTXNSTATHIST r2
INNER JOIN osibank.rtxn r ON R.ACCTNBR = R2.ACCTNBR AND R.RTXNNBR = R2.RTXNNBR
INNER JOIN ABC D ON r2.ACTDATETIME > D.start_date and r2.ACTDATETIME <= D.end_date
WHERE r.TRANAMT != 0 AND ({RtxnTypCdQueryVerifyHolder} IS NULL OR {RtxnTypCdQueryVerifyHolder} = '' OR r.RTXNTYPCD NOT IN ({RtxnTypCdQueryParamHolder}))
), AccountSubAccounts AS (
SELECT ASA.ACCTNBR, ASA.SUBACCTNBR
FROM OSIBANK.AcctSubAcct ASA
WHERE ASA.BalCatCd = 'NOTE' AND ASA.BalTypCd = 'BAL'
AND EXISTS (SELECT 1 FROM Transactions T WHERE T.ACCTNBR = ASA.ACCTNBR)
), MostRecentAccountBalanceHistory AS (
SELECT ABH.ACCTNBR,
ABH.BALAMT
FROM AccountSubAccounts ASA
INNER JOIN OSIBANK.ACCTBALHIST ABH ON ASA.ACCTNBR=ABH.ACCTNBR AND ASA.SubAcctNbr = ABH.SubAcctNbr AND ABH.EFFDATE =
(SELECT MAX(D.EffDate) AS MA
FROM OSIBANK.AcctBalHist D
INNER JOIN AccountSubAccounts ASA ON ASA.ACCTNBR=D.ACCTNBR AND ASA.SUBACCTNBR = D.SUBACCTNBR
INNER JOIN ABC A ON D.EFFDATE <= A.end_date
WHERE D.AcctNbr = abh.AcctNbr
AND D.SubAcctNbr = abh.SubAcctNbr
)
)
SELECT T.ACCTNBR as AccountNumber,
T.RTXNNBR as TransactionNumber,
e.EXTRTXNDESCTEXT as ExternalTransactionDescription,
i.INTRTXNDESCTEXT as InternalTransactionDescription,
T.TRANAMT as Amount,
T.POSTDATE as PostingDate,
T.RTXNTYPCD as TransactionCode,
abh.BALAMT as CurrentBalance,
T.CHECKNBR as CheckNumber,
rs.RTXNSTATDESC as CurrRtxnStatCd,
r3.RTXNTYPDESC AS TransactionTypeDescription,
CASE WHEN T.TRANAMT > 0 THEN 'C' ELSE 'D' END as DebitCredit
-- SELECT COUNT(1)
FROM Transactions T
INNER JOIN osibank.RTXNSTAT rs ON rs.RTXNSTATCD = T.CURRRTXNSTATCD
INNER JOIN osibank.RTXNTYP r3 ON r3.RTXNTYPCD = T.RTXNTYPCD
INNER JOIN MostRecentAccountBalanceHistory ABH ON ABH.ACCTNBR = T.ACCTNBR
LEFT JOIN osibank.EXTRTXNDESC e ON T.EXTRTXNDESCNBR = e.EXTRTXNDESCNBR
LEFT JOIN osibank.INTRTXNDESC i ON T.INTRRTXNDESCNBR = i.INTRTXNDESCNBR
@@ -0,0 +1,4 @@
UPDATE osibank.EXTRTXNDESC
SET Extrtxndesctext = :externaldescriptiontext,
DATELASTMAINT = SYSDATE
WHERE Extrtxndescnbr = :externaldescriptionnumber