Adding
This commit is contained in:
+231
@@ -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*/
|
||||
+233
@@ -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*/
|
||||
Reference in New Issue
Block a user