Script 1 : Basic Strategy – Fast Tracking Condition
Scenario 1: Branching Logic in Decision/Segmentation Tree
Implementation Overview
Insert a Branch node early in the decision flow that evaluates fast-track conditions. If conditions are met, route directly to an
Outcome node or next-stage object, bypassing intermediate rule sets, models, or treatments.
Sample Data Structure Unsecured Loans
Customer Application Data:
- CustomerID: String
- CustomerType: String (NTB/ETB)
- PriorityFlag: Boolean (Priority Banking, Wealth Management)
- RiskBand: String (Low/Medium/High)
- CreditScore: Integer (300-850)
- MonthlyIncome: Decimal (IDR 5,000,000 - 100,000,000)
- ExistingRelationship: Boolean
- ProductType: String (Credit Card/KTA Personal Loan)
- EmploymentType: String (Karyawan/Wiraswasta/Professional/PNS)
- WorkExperience: Integer (years)
- DebtBurdenRatio: Decimal (percentage)
- ExistingCreditCardLimit: Decimal (IDR)
- BankingHistory: Integer (months with bank)
- BureauScore: String (Thick/Thin/None)
Credit Limit Guidelines
Credit Card Limits:
o Entry Level: IDR 3,000,000 - 15,000,000 (2-3x monthly income)
o Standard: IDR 15,000,000 - 50,000,000 (3-4x monthly income)
o Premium: IDR 50,000,000 - 200,000,000 (4-5x monthly income)
KTA Personal Loan Limits:
o Entry Level: IDR 10,000,000 - 50,000,000 (10-15x monthly income)
o Standard: IDR 50,000,000 - 200,000,000 (15-20x monthly income)
o Premium: IDR 200,000,000 - 500,000,000 (20-25x monthly income)
Maximum DBR (Debt Burden Ratio): 30-40% of monthly income
Example Decision Flow Implementation
Fast-Track Branch Node Configuration
Branch Condition: "Fast Track Eligibility Check Unsecured Loans"
IF (PriorityFlag = TRUE AND MonthlyIncome >= 20000000)
OR (CustomerType = "ETB" AND RiskBand = "Low" AND CreditScore >= 750 AND BankingHistory >= 12)
OR (ExistingRelationship = TRUE AND MonthlyIncome >= 15000000 AND DebtBurdenRatio <= 30 AND
EmploymentType IN ("PNS","Karyawan"))
OR (ProductType = "Credit Card" AND ExistingCreditCardLimit >= 50000000 AND BureauScore = "Thick")
THEN
Route to: "Fast Track Approval Outcome"
ELSE
Route to: "Standard Processing Flow"
Sample Test Cases
Case 1: High-Income Priority Banking Customer (Credit Card)
Input Data:
- CustomerID: "CC001"
- CustomerType: "ETB"
- PriorityFlag: TRUE (Priority Banking)
- RiskBand: "Low"
- CreditScore: 780
- MonthlyIncome: 35000000 (IDR 35 million)
- ExistingRelationship: TRUE
- ProductType: "Credit Card"
- EmploymentType: "Professional"
- WorkExperience: 8
- DebtBurdenRatio: 25
- ExistingCreditCardLimit: 75000000
- BankingHistory: 36
- BureauScore: "Thick"
Flow Result: Routes to "Fast Track Approval Outcome"
Decision: Instant approval - Premium Credit Card
Approved Limit: IDR 140,000,000 (4x monthly income)
Processing Time: 3 minutes vs 2 hours standard
Interest Rate: 1.95% per month (preferential rate)
Case 2: Existing Customer KTA Personal Loan Fast-Track
Input Data:
- CustomerID: "PL002"
- CustomerType: "ETB"
- PriorityFlag: FALSE
- RiskBand: "Low"
- CreditScore: 720
- MonthlyIncome: 18000000 (IDR 18 million)
- ExistingRelationship: TRUE
- ProductType: "KTA Personal Loan"
- EmploymentType: "Karyawan"
- WorkExperience: 5
- DebtBurdenRatio: 28
- ExistingCreditCardLimit: 30000000
- BankingHistory: 24
- BureauScore: "Thick"
Flow Result: Routes to "Fast Track Approval Outcome"
Decision: Auto-approved KTA Personal Loan
Approved Limit: IDR 270,000,000 (15x monthly income)
Processing Time: 5 minutes vs 3 hours standard
Interest Rate: 1.25% per month
Tenor: Up to 60 months
Case 3: PNS (Civil Servant) Fast-Track
Input Data:
- CustomerID: "PL003"
- CustomerType: "NTB"
- PriorityFlag: FALSE
- RiskBand: "Low"
- CreditScore: 695
- MonthlyIncome: 12000000 (IDR 12 million)
- ExistingRelationship: FALSE
- ProductType: "KTA Personal Loan"
- EmploymentType: "PNS"
- WorkExperience: 10
- DebtBurdenRatio: 20
- ExistingCreditCardLimit: 0
- BankingHistory: 0
- BureauScore: "Thin"
Flow Result: Routes to "Fast Track Approval Outcome"
Decision: Auto-approved (PNS preference)
Approved Limit: IDR 144,000,000 (12x monthly income)
Processing Time: 10 minutes vs 4 hours standard
Interest Rate: 1.35% per month (PNS preferential rate)
Required Documents: Payslip + SK PNS only
Case 4: Standard Processing Required - High DBR
Input Data:
- CustomerID: "CC004"
- CustomerType: "NTB"
- PriorityFlag: FALSE
- RiskBand: "Medium"
- CreditScore: 650
- MonthlyIncome: 8000000 (IDR 8 million)
- ExistingRelationship: FALSE
- ProductType: "Credit Card"
- EmploymentType: "Wiraswasta"
- WorkExperience: 3
- DebtBurdenRatio: 45
- ExistingCreditCardLimit: 0
- BankingHistory: 0
- BureauScore: "None"
Flow Result: Routes to "Standard Processing Flow"
Decision: Requires full underwriting review
Processing Time: Standard 4-6 hours
Required Actions: Income verification, business documents, guarantor
Case 5: Wealth Management Customer - Ultra Fast-Track
Input Data:
- CustomerID: "CC005"
- CustomerType: "ETB"
- PriorityFlag: TRUE (Wealth Management)
- RiskBand: "Low"
- CreditScore: 820
- MonthlyIncome: 85000000 (IDR 85 million)
- ExistingRelationship: TRUE
- ProductType: "Credit Card"
- EmploymentType: "Professional"
- WorkExperience: 15
- DebtBurdenRatio: 15
- ExistingCreditCardLimit: 150000000
- BankingHistory: 60
- BureauScore: "Thick"
Flow Result: Routes to "Ultra Fast Track Outcome"
Decision: Instant approval - Platinum/World Elite Card
Approved Limit: IDR 350,000,000 (4x monthly income)
Processing Time: 1 minute
Interest Rate: 1.75% per month
Special Benefits: No annual fee, premium rewards
Decision Tree Structure for Indonesian Unsecured Loans
Start
├── Fast Track Branch Node
│ ├── [TRUE] → Fast Track Outcome
│ │ ├── Ultra Fast (Wealth Mgmt) → 1 min processing
│ │ ├── Priority Fast (Priority Banking) → 3 min processing
│ │ ├── ETB Fast (Existing Low Risk) → 5 min processing
│ │ └── PNS Fast (Civil Servant) → 10 min processing
│ └── [FALSE] → Standard Flow
│ ├── Income Verification (Salary Certificate/Tax Return)
│ ├── Bureau Check (BI Checking/SLIK OJK)
│ ├── Employment Verification
│ ├── DBR Calculation & Affordability
│ ├── A-Score/B-Score Calculation
│ └── Final Decision (2-6 hours)
Scenario 2: Conditional Execution Inside Rule Sets/Code Files
Implementation Overview
Allow the decision flow to continue through all nodes, but use conditional expressions within Rule Sets or Custom Code
Files. When fast-track criteria are met, internal logic is skipped while maintaining structural flow.
Sample Rule Set Implementation
Rule Set 1: "Risk Assessment Rules"
javascript
// Custom Code File: IndonesianRiskAssessmentRules.js
function executeRiskAssessment(customerData) {
var fastTrackEligible = checkFastTrackEligibility(customerData);
if (fastTrackEligible) {
// Skip complex risk calculations, return appropriate defaults
var riskScore = calculateFastTrackRiskScore(customerData);
return {
riskScore: riskScore,
riskBand: determineRiskBand(riskScore),
skipFlag: true,
processingTime: 30,
reviewRequired: false,
fastTrackReason: getFastTrackReason(customerData)
};
} else {
return performFullRiskAssessment(customerData);
}
}
function calculateFastTrackRiskScore(data) {
// Indonesian specific fast-track scoring
if (data.EmploymentType === "PNS") return 90; // Civil servants lowest risk
if (data.PriorityFlag && data.MonthlyIncome >= 50000000) return 95; // Wealth management
if (data.CustomerType === "ETB" && data.BankingHistory >= 36) return 88; // Long relationship
return 85; // Default fast-track score
}
function checkFastTrackEligibility(data) {
// Indonesian specific conditions
return (data.PriorityFlag === true && data.MonthlyIncome >= 20000000) ||
(data.EmploymentType === "PNS" && data.WorkExperience >= 5) ||
(data.CustomerType === "ETB" && data.CreditScore >= 750 && data.DebtBurdenRatio <= 30) ||
(data.ExistingCreditCardLimit >= 50000000 && data.BureauScore === "Thick");
}
Rule Set 2: "Indonesian DBR and Limit Calculation Rules"
javascript
// Custom Code File: IndonesianLimitCalculationRules.js
function executeAffordabilityCheck(customerData) {
var fastTrackEligible = checkFastTrackEligibility(customerData);
if (fastTrackEligible) {
return calculateFastTrackLimit(customerData);
} else {
return performDetailedAffordabilityCheck(customerData);
}
}
function calculateFastTrackLimit(data) {
var baseLimit = 0;
var maxDBR = getMaxDBR(data.EmploymentType);
var availableDBR = (data.MonthlyIncome * maxDBR / 100) - getCurrentDebtPayment(data);
if (data.ProductType === "Credit Card") {
// Credit Card limit calculation
baseLimit = Math.min(
data.MonthlyIncome * getCCMultiplier(data),
availableDBR * 36 // 36 months average CC usage
);
// Indonesian CC specific caps
if (data.MonthlyIncome <= 10000000) baseLimit = Math.min(baseLimit, 30000000);
else if (data.MonthlyIncome <= 25000000) baseLimit = Math.min(baseLimit, 100000000);
} else if (data.ProductType === "KTA Personal Loan") {
// KTA limit calculation
var maxTenor = getMaxTenor(data.EmploymentType);
baseLimit = Math.min(
data.MonthlyIncome * getKTAMultiplier(data),
availableDBR * maxTenor
);
// KTA specific caps based on income tier
if (data.MonthlyIncome <= 15000000) baseLimit = Math.min(baseLimit, 150000000);
else if (data.MonthlyIncome <= 50000000) baseLimit = Math.min(baseLimit, 500000000);
}
return {
approvedLimit: Math.round(baseLimit / 1000000) * 1000000, // Round to nearest million
maxDBR: maxDBR,
availableDBR: availableDBR,
calculationMethod: "Fast Track - Indonesian Standard",
skipFlag: true
};
}
function getCCMultiplier(data) {
if (data.PriorityFlag) return 5.0; // Wealth management
if (data.EmploymentType === "PNS") return 3.5; // Civil servant
if (data.CustomerType === "ETB") return 4.0; // Existing customer
return 3.0; // Standard multiplier
}
function getKTAMultiplier(data) {
if (data.PriorityFlag) return 25.0; // Wealth management
if (data.EmploymentType === "PNS") return 20.0; // Civil servant
if (data.CustomerType === "ETB") return 18.0; // Existing customer
return 15.0; // Standard multiplier
}
function getMaxDBR(employmentType) {
switch(employmentType) {
case "PNS": return 40; // Civil servants higher DBR
case "Karyawan": return 35; // Employees
case "Professional": return 35; // Professionals
case "Wiraswasta": return 30; // Self-employed lower DBR
default: return 30;
}
}
Rule Set 3: "Indonesian Bureau and Document Verification Rules"
javascript
// Custom Code File: IndonesianBureauRules.js
function executeBureauCheck(customerData) {
var fastTrackEligible = checkFastTrackEligibility(customerData);
if (fastTrackEligible) {
return {
bureauStatus: "Fast Track Approved",
slikOjkStatus: customerData.BureauScore,
biCheckingRequired: false,
documentVerification: getMinimalDocuments(customerData),
skipFlag: true,
verificationTime: "Real-time"
};
} else {
return performFullBureauCheck(customerData);
}
}
function getMinimalDocuments(data) {
var docs = ["KTP", "NPWP"];
switch(data.EmploymentType) {
case "PNS":
docs.push("SK PNS", "Slip Gaji");
break;
case "Karyawan":
docs.push("Slip Gaji", "Surat Keterangan Kerja");
break;
case "Professional":
docs.push("Surat Izin Praktik", "SPT Tahunan");
break;
case "Wiraswasta":
docs.push("SIUP", "Laporan Keuangan", "Rekening Koran 3 bulan");
break;
}
if (data.PriorityFlag) {
docs = ["KTP", "NPWP"]; // Minimal docs for priority customers
}
return docs;
}