Skip to content

KLIM Datatape

Comprehensive loan information for KLIM portfolio, processed with a unified customer data pipeline including loan details, customer demographics, payment history, and account information.

Overview

Generation Frequency: Monthly Development Status: Stable

Key Features: - Unified customer pipeline - Comprehensive loan tracking - Payment history analysis - Customer demographics

Key Stakeholders: - Treasury Reporting Team - KLIM

Output Columns

The following columns are included in the final datatape output (filtered from SQL queries based on configuration):

Column Analysis Summary

  • Total columns found in SQL queries: 95
  • Columns specified in output_columns config: 75
  • Columns found in SQL and included in output: 31
  • Missing columns (in config but not found in SQL): 46

Note: Only columns that exist in SQL queries are included in the final output.

Column Name Required Source Query Source Table Source Field Derived Transformations
Address1 Yes main_loan_data_query filtered_systems Address1 No
City1 Yes main_loan_data_query filtered_systems City1 No
CurrentRate Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c CurrentRate No
Dealer Yes main_loan_data_query sfdc_staging.vw_account Dealer No
DraftDate Yes main_loan_data_query filtered_systems DraftDate No
FICO Yes main_loan_data_query sfdc_staging.vw_system_project__c FICO No
FeesBalance Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c FeesBalance No
FirstPaymentDueDate Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c FirstPaymentDueDate No
FullPayoffBalance Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c FullPayoffBalance No
In-Service Date Yes main_loan_data_query sfdc_staging.vw_system_project__c In-Service Date No
InterestAccruedThrough Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c InterestAccruedThrough No
InterestBalance Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c InterestBalance No
LastPaymentAmount Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c LastPaymentAmount No
LastPaymentDate Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c LastPaymentDate No
LoanNumber Yes main_loan_data_query filtered_systems LoanNumber No
LoanStatus Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c LoanStatus No
MaturityDate Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c MaturityDate No
MonthlyPaymentAmount Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c MonthlyPaymentAmount No
NextPaymentDueToBePaid Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c NextPaymentDueToBePaid No
OriginalLoanAmount Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c OriginalLoanAmount No
OriginationDate Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c OriginationDate No
OriginationState Yes main_loan_data_query filtered_systems OriginationState No
PaymentFrequency Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c PaymentFrequency No
PaymentsMade Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c PaymentsMade No
Portfolio Yes main_loan_data_query filtered_systems Portfolio No
PrincipalBalance Yes main_loan_data_query sfdc_staging.vwx_loan__loan_account__c PrincipalBalance No
State1 Yes main_loan_data_query filtered_systems State1 No
System Yes main_loan_data_query filtered_systems System No
System Yes ach_info_query sfdc_staging.vw_system__c System No
System Yes customer_data_query filtered_systems System No
ZIP1 Yes main_loan_data_query filtered_systems ZIP1 Yes

Note: Columns marked as 'Derived' are calculated or transformed rather than directly selected from the source table.

Data Sources

The configuration pulls data from the following sources:

Source Name Type Query/File Description
main_loan_data_query database main_loan_data_query.sql SQL query for main_loan_data_query data
ach_info_query database ach_info_query.sql SQL query for ach_info_query data
customer_data_query database customer_data_query.sql SQL query for customer_data_query data
product_info_query database product_info_query.sql SQL query for product_info_query data
latest_dunning_query database latest_dunning_query.sql SQL query for latest_dunning_query data

Configuration

Portfolio Groups

klim_portfolios: - LibertyAgg2

Database Configuration

  • dbcreds_environment: fusionods

Paths

  • sql_dir: ./sql
  • cache_dir: ./query_cache
  • output_dir: ./completed_output
  • log_dir: ./logs

SQL Queries

-- file: sql/main_loan_data_query.sql
-- Description: (Optimized) Retrieves the main loan account data for the specified portfolios.

WITH filtered_systems AS (
    SELECT 
        "Record ID",
        "Asset Portfolio - Customer",
        "System Name",
        "Installation State",
        "Payment Date",
        "Installation Address Line 1",
        "Installation Address City",
        "Installation Address State",
        "Installation Address Zip Code",
        "Contract Type",
        "UCC Filing Date",
        "UCC Termination Date",
        "Oldest Outstanding Due Date"
    FROM 
        sfdc_staging.vw_system__c
    WHERE 
        "Asset Portfolio - Customer" IN :portfolio_names
)
SELECT
    s."Record ID" AS "System",
    s."Asset Portfolio - Customer" AS "Portfolio",
    s."System Name" AS "LoanNumber",
    s."Installation State" AS "OriginationState",
    s."Payment Date" AS "DraftDate",
    s."Installation Address Line 1" AS "Address1",
    s."Installation Address City" AS "City1",
    s."Installation Address State" AS "State1",
    s."Installation Address Zip Code"::text AS "ZIP1",
    s."Contract Type",
    cl."Contract Date" AS "OriginationDate",
    cl."Maturity Date" AS "MaturityDate",
    cl."Last Interest Posting Date" AS "InterestAccruedThrough",
    cl."Interest Rate" AS "CurrentRate",
    cl."Term",
    cl."Payment Frequency" AS "PaymentFrequency",
    cl."Loan Amount" AS "OriginalLoanAmount",
    cl."Principal/Advance Remaining" AS "PrincipalBalance",
    cl."Interest Remaining" AS "InterestBalance",
    cl."Fees Remaining" AS "FeesBalance",
    cl."Payment Amount" AS "MonthlyPaymentAmount",
    cl."Last Payment Amount" AS "LastPaymentAmount",
    cl."Last Payment Date" AS "LastPaymentDate",
    cl."First Payment Date" AS "FirstPaymentDueDate",
    cl."Next Due Date" AS "NextPaymentDueToBePaid",
    cl."Repayments Count" AS "PaymentsMade",
    cl."Status" AS "LoanStatus",
    cl."Today's Payoff" AS "FullPayoffBalance",
    sp."Stage",
    sp."FICO High" AS "FICO",
    sp."InService Date" AS "In-Service Date",
    sp."Primary Customer Name First Name",
    sp."Primary Customer Name Last Name",
    ac."Legal Name" AS "Dealer",
    s."UCC Filing Date",
    s."UCC Termination Date",
    s."Oldest Outstanding Due Date"
FROM 
    filtered_systems s
JOIN 
    sfdc_staging.vwx_loan__loan_account__c cl ON cl."System" = s."Record ID"
JOIN 
    sfdc_staging.vw_system_project__c sp ON sp."System" = s."Record ID"
LEFT JOIN 
    sfdc_staging.vw_account ac ON ac."Account ID (2)" = sp."Installation Partner Account";
-- file: sql/ach_info_query.sql
-- Description: (Optimized) Determines if a loan account has an ACH payment method on record.

WITH filtered_loan_accounts AS (
    -- Get all loan accounts for the target portfolios
    SELECT 
        cl."Record ID" AS "Loan Account", 
        s."Record ID" AS "System"
    FROM 
        sfdc_staging.vw_system__c s
    JOIN 
        sfdc_staging.vwx_loan__loan_account__c cl ON cl."System" = s."Record ID"
    WHERE 
        s."Asset Portfolio - Customer" IN :portfolio_names
),
ach_payment_accounts AS (
    -- Find all unique loan accounts that have ever used ACH
    SELECT DISTINCT lpt."Loan Account"
    FROM sfdc_staging.vw_loan__loan_payment_transaction__c lpt
    JOIN sfdc_staging.vw_loan__payment_mode__c lpm ON lpm."Record ID" = lpt."Payment Mode"
    WHERE lpm."Payment Mode Name" = 'ACH'
)
SELECT
    fla."System",
    CASE
        WHEN apa."Loan Account" IS NOT NULL THEN 'Yes'
        ELSE 'No'
    END AS "Is ACH"
FROM 
    filtered_loan_accounts fla
LEFT JOIN 
    ach_payment_accounts apa ON fla."Loan Account" = apa."Loan Account";
-- file: sql/customer_data_query.sql
-- Description: (Optimized and Corrected) Retrieves data for all customers associated with the target systems.

WITH filtered_systems AS (
    SELECT 
        "Record ID",
        "System Name",
        "Asset Portfolio - Customer",
        "Installation Address Line 1",
        "Installation Address Line 2", -- Assuming this is the correct column name for line 2
        "Installation Address City",
        "Installation Address State",
        "Installation Address Zip Code",
        "Installation Address Country", -- Using the installation country
        "Multi Signer",
        "Status"
    FROM 
        sfdc_staging.vw_system__c
    WHERE 
        "Asset Portfolio - Customer" IN :portfolio_names
        AND "Status" NOT IN ('Cancelled', 'Terminated')
)
SELECT
    s."Record ID" AS "System",
    s."System Name",
    s."Asset Portfolio - Customer",
    cn."First Name",
    cn."Last Name",
    c."Suffix",
    c."Birthdate",
    cn."Phone",
    c."Work Phone",
    c."Home Phone",
    c."Preferred Phone Type",
    CASE 
        -- For Primary contact, prefer the system's installation address, fall back to contact's mailing street.
        WHEN cn."Role" = 'Primary' THEN COALESCE(s."Installation Address Line 1", c."Mailing Street") 
        ELSE c."Mailing Street" 
    END AS "Mailing Street",
    CASE 
        -- For Primary contact, use system's line 2. For others, there is no line 2 from vw_contact.
        WHEN cn."Role" = 'Primary' THEN s."Installation Address Line 2"
        ELSE NULL -- vw_contact does not have a standard "Mailing Street 2"
    END AS "Mailing Street 2",
    CASE 
        WHEN cn."Role" = 'Primary' THEN COALESCE(s."Installation Address City", c."Mailing City") 
        ELSE c."Mailing City" 
    END AS "Mailing City",
    CASE 
        WHEN cn."Role" = 'Primary' THEN COALESCE(s."Installation Address State", c."Mailing State/Province") 
        ELSE c."Mailing State/Province" 
    END AS "Mailing State/Province",
    CASE 
        WHEN cn."Role" = 'Primary' THEN COALESCE(s."Installation Address Zip Code", c."Mailing Zip/Postal Code") 
        ELSE c."Mailing Zip/Postal Code" 
    END AS "Mailing Zip/Postal Code",
    CASE 
        WHEN cn."Role" = 'Primary' THEN COALESCE(s."Installation Address Country", c."Mailing Country") 
        ELSE c."Mailing Country" 
    END AS "Mailing Country",
    cn."Email",
    c."Billing Contact",
    c."Accept Electronic Communications  T&Cs",
    cn."Role",
    s."Multi Signer"
FROM 
    filtered_systems s
JOIN 
    sfdc_staging.vw_contact_system__c cn ON cn."System" = s."Record ID"
JOIN 
    sfdc_staging.vw_contact c ON cn."Contact" = c."Contact ID";
-- file: sql/product_info_query.sql
-- Description: (Optimized) Aggregates product descriptions for the specified portfolios.

WITH filtered_systems AS (
    SELECT "Record ID"
    FROM sfdc_staging.vw_system__c
    WHERE "Asset Portfolio - Customer" IN :portfolio_names
)
SELECT
    s."Record ID",
    STRING_AGG(DISTINCT qli."Description", ', ') AS "Unique Descriptions"
FROM 
    filtered_systems s
JOIN 
    sfdc_staging.vw_quote_line_item__c qli ON qli."System" = s."Record ID"
JOIN 
    sfdc_staging.vw_product2 p ON p."Product ID"::text = qli."Product"::text
WHERE 
    qli."Description" NOT LIKE '%Accessory Loan%'
GROUP BY 
    s."Record ID";
-- file: sql/latest_dunning_query.sql
-- Description: (Optimized) Retrieves the latest payment delinquency information.

WITH filtered_systems AS (
    SELECT "Record ID"
    FROM sfdc_staging.vwx_system__c
    WHERE "Asset Portfolio - Customer" IN :portfolio_names
)
SELECT DISTINCT ON (dunning."System")
    dunning."System",
    dunning."Days Past Due",
    dunning."Outstanding Balance"
FROM 
    sfdc_staging.vw_billingdunning__c dunning
JOIN 
    filtered_systems s ON dunning."System" = s."Record ID"
ORDER BY 
    dunning."System", dunning."Created Date" DESC;

Data Processing

Data processing is handled by: datatapes/klim/run_klim.py

Processing Steps

The data processing includes: 1. SQL query execution 2. Data transformation and cleaning 3. Column mapping and validation 4. Output file generation