@forestadmin/datasource-demo-fintech 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +40 -0
- package/dist/customizations/aml_alerts.d.ts +3 -0
- package/dist/customizations/aml_alerts.js +135 -0
- package/dist/customizations/cards.d.ts +3 -0
- package/dist/customizations/cards.js +95 -0
- package/dist/customizations/chargebacks.d.ts +3 -0
- package/dist/customizations/chargebacks.js +271 -0
- package/dist/customizations/customers.d.ts +3 -0
- package/dist/customizations/customers.js +15 -0
- package/dist/customizations/kyc_cases.d.ts +3 -0
- package/dist/customizations/kyc_cases.js +105 -0
- package/dist/customizations/kyc_documents.d.ts +3 -0
- package/dist/customizations/kyc_documents.js +62 -0
- package/dist/customizations/refund_requests.d.ts +3 -0
- package/dist/customizations/refund_requests.js +151 -0
- package/dist/customizations/sar_reports.d.ts +3 -0
- package/dist/customizations/sar_reports.js +27 -0
- package/dist/customizations/utils.d.ts +21 -0
- package/dist/customizations/utils.js +22 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +97 -0
- package/dist/seed/aml.d.ts +9 -0
- package/dist/seed/aml.js +131 -0
- package/dist/seed/cards.d.ts +9 -0
- package/dist/seed/cards.js +57 -0
- package/dist/seed/chargebacks.d.ts +9 -0
- package/dist/seed/chargebacks.js +118 -0
- package/dist/seed/customers.d.ts +9 -0
- package/dist/seed/customers.js +106 -0
- package/dist/seed/dates.d.ts +7 -0
- package/dist/seed/dates.js +28 -0
- package/dist/seed/index.d.ts +9 -0
- package/dist/seed/index.js +39 -0
- package/dist/seed/kyc.d.ts +9 -0
- package/dist/seed/kyc.js +102 -0
- package/dist/seed/pools.d.ts +27 -0
- package/dist/seed/pools.js +296 -0
- package/dist/seed/refunds.d.ts +9 -0
- package/dist/seed/refunds.js +72 -0
- package/dist/seed/types.d.ts +17 -0
- package/dist/seed/types.js +5 -0
- package/dist/seed/utils.d.ts +16 -0
- package/dist/seed/utils.js +40 -0
- package/package.json +33 -0
package/dist/seed/kyc.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = seedKyc;
|
|
4
|
+
const dates_1 = require("./dates");
|
|
5
|
+
const pools_1 = require("./pools");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
/**
|
|
8
|
+
* Opens KYC cases (1–2 per customer) plus their documents. Case status mirrors the
|
|
9
|
+
* customer's compliance profile: sanctioned/PEP customers escalate, approved ones
|
|
10
|
+
* tend to resolve cleanly.
|
|
11
|
+
*/
|
|
12
|
+
async function seedKyc(knex, customers) {
|
|
13
|
+
await knex.schema.createTable('kyc_cases', table => {
|
|
14
|
+
table.increments('id').primary();
|
|
15
|
+
table.integer('customer_id');
|
|
16
|
+
table.string('status');
|
|
17
|
+
table.datetime('opened_at');
|
|
18
|
+
table.datetime('resolved_at');
|
|
19
|
+
table.string('rejection_reason');
|
|
20
|
+
table.string('escalation_reason');
|
|
21
|
+
table.string('notes');
|
|
22
|
+
});
|
|
23
|
+
await knex.schema.createTable('kyc_documents', table => {
|
|
24
|
+
table.increments('id').primary();
|
|
25
|
+
table.integer('kyc_case_id');
|
|
26
|
+
table.integer('customer_id');
|
|
27
|
+
table.string('document_type');
|
|
28
|
+
table.string('file_url');
|
|
29
|
+
table.datetime('uploaded_at');
|
|
30
|
+
table.boolean('verified');
|
|
31
|
+
table.datetime('verified_at');
|
|
32
|
+
});
|
|
33
|
+
const kycCases = [];
|
|
34
|
+
const docs = [];
|
|
35
|
+
let kid = 0;
|
|
36
|
+
let did = 0;
|
|
37
|
+
for (const c of customers) {
|
|
38
|
+
const ncases = (0, utils_1.chance)(0.85) ? 1 : 2;
|
|
39
|
+
for (let k = 0; k < ncases; k += 1) {
|
|
40
|
+
kid += 1;
|
|
41
|
+
let st;
|
|
42
|
+
if (c.is_sanctioned)
|
|
43
|
+
st = (0, utils_1.pick)(['ESCALATED', 'REJECTED']);
|
|
44
|
+
else if (c.is_pep)
|
|
45
|
+
st = (0, utils_1.pick)(['ESCALATED', 'IN_REVIEW', 'PENDING_APPROVAL']);
|
|
46
|
+
else if (c.onboarding_status === 'APPROVED')
|
|
47
|
+
st = (0, utils_1.pick)(['APPROVED', 'APPROVED', 'IN_REVIEW']);
|
|
48
|
+
else if (c.onboarding_status === 'REJECTED')
|
|
49
|
+
st = 'REJECTED';
|
|
50
|
+
else if (c.risk_rating === 'HIGH')
|
|
51
|
+
st = (0, utils_1.pick)(['ESCALATED', 'IN_REVIEW', 'PENDING_APPROVAL']);
|
|
52
|
+
else
|
|
53
|
+
st = (0, utils_1.pick)(['IN_REVIEW', 'PENDING_APPROVAL', 'OPEN']);
|
|
54
|
+
const opened = (0, utils_1.randint)(30, 210);
|
|
55
|
+
kycCases.push({
|
|
56
|
+
id: kid,
|
|
57
|
+
customer_id: c.id,
|
|
58
|
+
status: st,
|
|
59
|
+
opened_at: (0, dates_1.daysAgo)(opened),
|
|
60
|
+
resolved_at: ['APPROVED', 'REJECTED'].includes(st)
|
|
61
|
+
? (0, dates_1.daysAgo)((0, utils_1.randint)(1, Math.max(2, opened - 10)))
|
|
62
|
+
: null,
|
|
63
|
+
rejection_reason: st === 'REJECTED'
|
|
64
|
+
? (0, utils_1.pick)(['Document mismatch', 'Failed liveness check', 'Sanctions concern'])
|
|
65
|
+
: null,
|
|
66
|
+
escalation_reason: st === 'ESCALATED'
|
|
67
|
+
? (0, utils_1.pick)([
|
|
68
|
+
'PEP match requires senior review',
|
|
69
|
+
'High-risk jurisdiction',
|
|
70
|
+
'Adverse media hit',
|
|
71
|
+
])
|
|
72
|
+
: null,
|
|
73
|
+
notes: (0, utils_1.chance)(0.5)
|
|
74
|
+
? null
|
|
75
|
+
: (0, utils_1.pick)([
|
|
76
|
+
'Awaiting proof of address.',
|
|
77
|
+
'Customer responsive.',
|
|
78
|
+
'Second review scheduled.',
|
|
79
|
+
'Source of funds requested.',
|
|
80
|
+
]),
|
|
81
|
+
});
|
|
82
|
+
for (const dt of (0, utils_1.sample)(pools_1.DOC_TYPES, (0, utils_1.randint)(2, 5))) {
|
|
83
|
+
did += 1;
|
|
84
|
+
const verified = st === 'APPROVED' || (0, utils_1.chance)(0.5);
|
|
85
|
+
const up = (0, utils_1.randint)(1, Math.max(2, opened - 2));
|
|
86
|
+
docs.push({
|
|
87
|
+
id: did,
|
|
88
|
+
kyc_case_id: kid,
|
|
89
|
+
customer_id: c.id,
|
|
90
|
+
document_type: dt,
|
|
91
|
+
file_url: `https://kyc.neobank.eu/docs/${c.id}/${dt.toLowerCase()}.pdf`,
|
|
92
|
+
uploaded_at: (0, dates_1.daysAgo)(up),
|
|
93
|
+
verified,
|
|
94
|
+
verified_at: verified ? (0, dates_1.daysAgo)((0, utils_1.randint)(1, up)) : null,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
await (0, utils_1.insertAll)(knex, 'kyc_cases', kycCases);
|
|
100
|
+
await (0, utils_1.insertAll)(knex, 'kyc_documents', docs);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlZWQva3ljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBWUEsMEJBMkZDO0FBcEdELG1DQUFrQztBQUNsQyxtQ0FBb0M7QUFDcEMsbUNBQW1FO0FBRW5FOzs7O0dBSUc7QUFDWSxLQUFLLFVBQVUsT0FBTyxDQUFDLElBQVUsRUFBRSxTQUFxQjtJQUNyRSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNqRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QixLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDckQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdCLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQVUsRUFBRSxDQUFDO0lBQzNCLE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQztJQUN2QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFFWixLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTSxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ1QsSUFBSSxFQUFVLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxhQUFhO2dCQUFFLEVBQUUsR0FBRyxJQUFBLFlBQUksRUFBQyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUNyRCxJQUFJLENBQUMsQ0FBQyxNQUFNO2dCQUFFLEVBQUUsR0FBRyxJQUFBLFlBQUksRUFBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2lCQUN4RSxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxVQUFVO2dCQUFFLEVBQUUsR0FBRyxJQUFBLFlBQUksRUFBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztpQkFDekYsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEtBQUssVUFBVTtnQkFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDO2lCQUN4RCxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssTUFBTTtnQkFBRSxFQUFFLEdBQUcsSUFBQSxZQUFJLEVBQUMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQzs7Z0JBQ3hGLEVBQUUsR0FBRyxJQUFBLFlBQUksRUFBQyxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sTUFBTSxHQUFHLElBQUEsZUFBTyxFQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLEVBQUUsRUFBRSxHQUFHO2dCQUNQLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDakIsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsU0FBUyxFQUFFLElBQUEsZUFBTyxFQUFDLE1BQU0sQ0FBQztnQkFDMUIsV0FBVyxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ2hELENBQUMsQ0FBQyxJQUFBLGVBQU8sRUFBQyxJQUFBLGVBQU8sRUFBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQy9DLENBQUMsQ0FBQyxJQUFJO2dCQUNSLGdCQUFnQixFQUNkLEVBQUUsS0FBSyxVQUFVO29CQUNmLENBQUMsQ0FBQyxJQUFBLFlBQUksRUFBQyxDQUFDLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixDQUFDLENBQUM7b0JBQzNFLENBQUMsQ0FBQyxJQUFJO2dCQUNWLGlCQUFpQixFQUNmLEVBQUUsS0FBSyxXQUFXO29CQUNoQixDQUFDLENBQUMsSUFBQSxZQUFJLEVBQUM7d0JBQ0gsa0NBQWtDO3dCQUNsQyx3QkFBd0I7d0JBQ3hCLG1CQUFtQjtxQkFDcEIsQ0FBQztvQkFDSixDQUFDLENBQUMsSUFBSTtnQkFDVixLQUFLLEVBQUUsSUFBQSxjQUFNLEVBQUMsR0FBRyxDQUFDO29CQUNoQixDQUFDLENBQUMsSUFBSTtvQkFDTixDQUFDLENBQUMsSUFBQSxZQUFJLEVBQUM7d0JBQ0gsNEJBQTRCO3dCQUM1QixzQkFBc0I7d0JBQ3RCLDBCQUEwQjt3QkFDMUIsNEJBQTRCO3FCQUM3QixDQUFDO2FBQ1AsQ0FBQyxDQUFDO1lBRUgsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFBLGNBQU0sRUFBQyxpQkFBUyxFQUFFLElBQUEsZUFBTyxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxRQUFRLEdBQUcsRUFBRSxLQUFLLFVBQVUsSUFBSSxJQUFBLGNBQU0sRUFBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxFQUFFLEdBQUcsSUFBQSxlQUFPLEVBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNSLEVBQUUsRUFBRSxHQUFHO29CQUNQLFdBQVcsRUFBRSxHQUFHO29CQUNoQixXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQ2pCLGFBQWEsRUFBRSxFQUFFO29CQUNqQixRQUFRLEVBQUUsK0JBQStCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxNQUFNO29CQUN2RSxXQUFXLEVBQUUsSUFBQSxlQUFPLEVBQUMsRUFBRSxDQUFDO29CQUN4QixRQUFRO29CQUNSLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUEsZUFBTyxFQUFDLElBQUEsZUFBTyxFQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2lCQUN2RCxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLElBQUEsaUJBQVMsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sSUFBQSxpQkFBUyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQyJ9
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const FIRST: string[];
|
|
2
|
+
export declare const LAST: string[];
|
|
3
|
+
export declare const COUNTRIES: string[];
|
|
4
|
+
export declare const HIGH_RISK_COUNTRIES: string[];
|
|
5
|
+
export declare const CITIES: Record<string, [string, string][]>;
|
|
6
|
+
export declare const DIAL: Record<string, string>;
|
|
7
|
+
export declare const STREETS: string[];
|
|
8
|
+
export declare const MERCHANTS: [string, string, string][];
|
|
9
|
+
export declare const CB_REASONS: [string, string][];
|
|
10
|
+
export declare const CB_STATUS: string[];
|
|
11
|
+
export declare const ANALYSTS: string[];
|
|
12
|
+
export declare const DOC_TYPES: string[];
|
|
13
|
+
export declare const ATYPES: string[];
|
|
14
|
+
export declare const REFUND_REASONS: string[];
|
|
15
|
+
export declare const SOURCES: string[];
|
|
16
|
+
export declare const ONBOARDING_STATUSES: string[];
|
|
17
|
+
export declare const RISK_RATINGS: string[];
|
|
18
|
+
export declare const CARD_TYPES: string[];
|
|
19
|
+
export declare const CARD_STATUSES: string[];
|
|
20
|
+
export declare const AML_SEVERITIES: string[];
|
|
21
|
+
export declare const AML_STATUSES: string[];
|
|
22
|
+
export declare const KYC_STATUSES: string[];
|
|
23
|
+
export declare const NETWORKS: string[];
|
|
24
|
+
export declare const REFUND_STATUSES: string[];
|
|
25
|
+
export declare const SAR_STATUSES: string[];
|
|
26
|
+
export declare const deaccent: (s: string) => string;
|
|
27
|
+
//# sourceMappingURL=pools.d.ts.map
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Curated reference pools. Kept hand-written (rather than delegated to faker) so
|
|
3
|
+
// that geography stays internally consistent — country, city, postal code and
|
|
4
|
+
// dial code always agree — which the compliance narrative relies on.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.deaccent = exports.SAR_STATUSES = exports.REFUND_STATUSES = exports.NETWORKS = exports.KYC_STATUSES = exports.AML_STATUSES = exports.AML_SEVERITIES = exports.CARD_STATUSES = exports.CARD_TYPES = exports.RISK_RATINGS = exports.ONBOARDING_STATUSES = exports.SOURCES = exports.REFUND_REASONS = exports.ATYPES = exports.DOC_TYPES = exports.ANALYSTS = exports.CB_STATUS = exports.CB_REASONS = exports.MERCHANTS = exports.STREETS = exports.DIAL = exports.CITIES = exports.HIGH_RISK_COUNTRIES = exports.COUNTRIES = exports.LAST = exports.FIRST = void 0;
|
|
7
|
+
exports.FIRST = [
|
|
8
|
+
'Emma',
|
|
9
|
+
'Lucas',
|
|
10
|
+
'Sofia',
|
|
11
|
+
'Liam',
|
|
12
|
+
'Mia',
|
|
13
|
+
'Noah',
|
|
14
|
+
'Olivia',
|
|
15
|
+
'Hugo',
|
|
16
|
+
'Léa',
|
|
17
|
+
'Jonas',
|
|
18
|
+
'Priya',
|
|
19
|
+
'Mateo',
|
|
20
|
+
'Ingrid',
|
|
21
|
+
'Youssef',
|
|
22
|
+
'Anna',
|
|
23
|
+
'Marco',
|
|
24
|
+
'Fatima',
|
|
25
|
+
'Erik',
|
|
26
|
+
'Chloé',
|
|
27
|
+
'Viktor',
|
|
28
|
+
'Aisha',
|
|
29
|
+
'Daniel',
|
|
30
|
+
'Elena',
|
|
31
|
+
'Tomas',
|
|
32
|
+
'Nadia',
|
|
33
|
+
'Pablo',
|
|
34
|
+
'Greta',
|
|
35
|
+
'Kemal',
|
|
36
|
+
'Sara',
|
|
37
|
+
'Andrei',
|
|
38
|
+
'Maja',
|
|
39
|
+
'Stefan',
|
|
40
|
+
'Camille',
|
|
41
|
+
'Dimitri',
|
|
42
|
+
'Zofia',
|
|
43
|
+
'Omar',
|
|
44
|
+
'Linnea',
|
|
45
|
+
'Rafael',
|
|
46
|
+
'Yara',
|
|
47
|
+
'Janusz',
|
|
48
|
+
'Beatriz',
|
|
49
|
+
'Henrik',
|
|
50
|
+
'Amara',
|
|
51
|
+
'Niko',
|
|
52
|
+
'Wei',
|
|
53
|
+
'Ravi',
|
|
54
|
+
'Sasha',
|
|
55
|
+
'Lena',
|
|
56
|
+
];
|
|
57
|
+
exports.LAST = [
|
|
58
|
+
'Johansson',
|
|
59
|
+
'Müller',
|
|
60
|
+
'Rossi',
|
|
61
|
+
'Dubois',
|
|
62
|
+
'Nowak',
|
|
63
|
+
'García',
|
|
64
|
+
'Andersen',
|
|
65
|
+
'Schneider',
|
|
66
|
+
'Kowalski',
|
|
67
|
+
'Ferretti',
|
|
68
|
+
'Sharma',
|
|
69
|
+
'Weber',
|
|
70
|
+
'Lindqvist',
|
|
71
|
+
'Haddad',
|
|
72
|
+
'Novak',
|
|
73
|
+
'Petrov',
|
|
74
|
+
'Bianchi',
|
|
75
|
+
'Mensah',
|
|
76
|
+
'Costa',
|
|
77
|
+
'Ahmadi',
|
|
78
|
+
'Berg',
|
|
79
|
+
'Romano',
|
|
80
|
+
'Fischer',
|
|
81
|
+
'Sørensen',
|
|
82
|
+
'Marchetti',
|
|
83
|
+
'Khan',
|
|
84
|
+
'Olsen',
|
|
85
|
+
'Demir',
|
|
86
|
+
'Vargas',
|
|
87
|
+
'Ivanov',
|
|
88
|
+
'Lefebvre',
|
|
89
|
+
'Kovač',
|
|
90
|
+
'Jensen',
|
|
91
|
+
'Moreau',
|
|
92
|
+
'Santos',
|
|
93
|
+
'Hassan',
|
|
94
|
+
'Eriksson',
|
|
95
|
+
'Lopez',
|
|
96
|
+
'Popescu',
|
|
97
|
+
'Wójcik',
|
|
98
|
+
];
|
|
99
|
+
exports.COUNTRIES = [
|
|
100
|
+
'DE',
|
|
101
|
+
'FR',
|
|
102
|
+
'SE',
|
|
103
|
+
'IT',
|
|
104
|
+
'ES',
|
|
105
|
+
'NL',
|
|
106
|
+
'PL',
|
|
107
|
+
'BE',
|
|
108
|
+
'DK',
|
|
109
|
+
'NO',
|
|
110
|
+
'FI',
|
|
111
|
+
'PT',
|
|
112
|
+
'AT',
|
|
113
|
+
'IE',
|
|
114
|
+
'CZ',
|
|
115
|
+
];
|
|
116
|
+
exports.HIGH_RISK_COUNTRIES = ['RU', 'IR', 'SY', 'AF', 'MM', 'BY'];
|
|
117
|
+
exports.CITIES = {
|
|
118
|
+
DE: [
|
|
119
|
+
['Berlin', '10117'],
|
|
120
|
+
['Munich', '80331'],
|
|
121
|
+
['Hamburg', '20095'],
|
|
122
|
+
],
|
|
123
|
+
FR: [
|
|
124
|
+
['Paris', '75001'],
|
|
125
|
+
['Lyon', '69001'],
|
|
126
|
+
['Marseille', '13001'],
|
|
127
|
+
],
|
|
128
|
+
SE: [
|
|
129
|
+
['Stockholm', '11129'],
|
|
130
|
+
['Gothenburg', '41103'],
|
|
131
|
+
],
|
|
132
|
+
IT: [
|
|
133
|
+
['Milan', '20121'],
|
|
134
|
+
['Rome', '00184'],
|
|
135
|
+
],
|
|
136
|
+
ES: [
|
|
137
|
+
['Madrid', '28013'],
|
|
138
|
+
['Barcelona', '08001'],
|
|
139
|
+
],
|
|
140
|
+
NL: [['Amsterdam', '1011']],
|
|
141
|
+
PL: [['Warsaw', '00-001']],
|
|
142
|
+
BE: [['Brussels', '1000']],
|
|
143
|
+
DK: [['Copenhagen', '1050']],
|
|
144
|
+
NO: [['Oslo', '0150']],
|
|
145
|
+
FI: [['Helsinki', '00100']],
|
|
146
|
+
PT: [['Lisbon', '1100']],
|
|
147
|
+
AT: [['Vienna', '1010']],
|
|
148
|
+
IE: [['Dublin', 'D01']],
|
|
149
|
+
CZ: [['Prague', '11000']],
|
|
150
|
+
RU: [['Moscow', '101000']],
|
|
151
|
+
IR: [['Tehran', '11369']],
|
|
152
|
+
SY: [['Damascus', '00963']],
|
|
153
|
+
AF: [['Kabul', '1001']],
|
|
154
|
+
MM: [['Yangon', '11181']],
|
|
155
|
+
BY: [['Minsk', '220000']],
|
|
156
|
+
};
|
|
157
|
+
exports.DIAL = {
|
|
158
|
+
DE: '49',
|
|
159
|
+
FR: '33',
|
|
160
|
+
SE: '46',
|
|
161
|
+
IT: '39',
|
|
162
|
+
ES: '34',
|
|
163
|
+
NL: '31',
|
|
164
|
+
PL: '48',
|
|
165
|
+
BE: '32',
|
|
166
|
+
DK: '45',
|
|
167
|
+
NO: '47',
|
|
168
|
+
FI: '358',
|
|
169
|
+
PT: '351',
|
|
170
|
+
AT: '43',
|
|
171
|
+
IE: '353',
|
|
172
|
+
CZ: '420',
|
|
173
|
+
RU: '7',
|
|
174
|
+
IR: '98',
|
|
175
|
+
SY: '963',
|
|
176
|
+
AF: '93',
|
|
177
|
+
MM: '95',
|
|
178
|
+
BY: '375',
|
|
179
|
+
};
|
|
180
|
+
exports.STREETS = [
|
|
181
|
+
'Hauptstraße',
|
|
182
|
+
'Rue de la Paix',
|
|
183
|
+
'Storgatan',
|
|
184
|
+
'Via Roma',
|
|
185
|
+
'Calle Mayor',
|
|
186
|
+
'Damrak',
|
|
187
|
+
'Marszałkowska',
|
|
188
|
+
'Rue Royale',
|
|
189
|
+
'Nørregade',
|
|
190
|
+
'Karl Johans gate',
|
|
191
|
+
'Mannerheimintie',
|
|
192
|
+
];
|
|
193
|
+
exports.MERCHANTS = [
|
|
194
|
+
['Amazon EU SARL', 'E-COMMERCE', '5942'],
|
|
195
|
+
['Spotify AB', 'STREAMING', '4899'],
|
|
196
|
+
['Steam (Valve)', 'DIGITAL_GOODS', '5816'],
|
|
197
|
+
['Wolt', 'FOOD_DELIVERY', '5814'],
|
|
198
|
+
['Uber BV', 'RIDESHARE', '4121'],
|
|
199
|
+
['Booking.com', 'TRAVEL', '4722'],
|
|
200
|
+
['Ryanair', 'AIRLINE', '3000'],
|
|
201
|
+
['MediaMarkt', 'ELECTRONICS', '5732'],
|
|
202
|
+
['Zalando SE', 'FASHION', '5651'],
|
|
203
|
+
['CryptoExchange XYZ', 'CRYPTO', '6051'],
|
|
204
|
+
['Netflix Intl', 'STREAMING', '4899'],
|
|
205
|
+
['Apple Distribution', 'DIGITAL_GOODS', '5816'],
|
|
206
|
+
['Carrefour', 'GROCERY', '5411'],
|
|
207
|
+
['Shell', 'FUEL', '5541'],
|
|
208
|
+
['IKEA', 'FURNITURE', '5712'],
|
|
209
|
+
['Glovo', 'FOOD_DELIVERY', '5814'],
|
|
210
|
+
['Binance', 'CRYPTO', '6051'],
|
|
211
|
+
['Decathlon', 'SPORTING', '5941'],
|
|
212
|
+
];
|
|
213
|
+
exports.CB_REASONS = [
|
|
214
|
+
['4853', 'Cardholder Dispute — Services Not Provided'],
|
|
215
|
+
['4831', 'Disputed Amount'],
|
|
216
|
+
['10.4', 'Fraud — Card-Not-Present'],
|
|
217
|
+
['10.5', 'Fraud — Card-Present Environment'],
|
|
218
|
+
['13.1', 'Merchandise Not Received'],
|
|
219
|
+
['12.6', 'Duplicate Processing'],
|
|
220
|
+
['4837', 'No Cardholder Authorization'],
|
|
221
|
+
];
|
|
222
|
+
exports.CB_STATUS = [
|
|
223
|
+
'INITIATED',
|
|
224
|
+
'PRESENTED',
|
|
225
|
+
'REPRESENTED',
|
|
226
|
+
'WON',
|
|
227
|
+
'LOST',
|
|
228
|
+
'PRE_ARBITRATION',
|
|
229
|
+
'ACCEPTED',
|
|
230
|
+
'ARBITRATION',
|
|
231
|
+
];
|
|
232
|
+
exports.ANALYSTS = [
|
|
233
|
+
'a.kowalski@neobank.eu',
|
|
234
|
+
's.bauer@neobank.eu',
|
|
235
|
+
'm.rossi@neobank.eu',
|
|
236
|
+
'compliance@neobank.eu',
|
|
237
|
+
];
|
|
238
|
+
exports.DOC_TYPES = [
|
|
239
|
+
'PASSPORT',
|
|
240
|
+
'NATIONAL_ID',
|
|
241
|
+
'DRIVERS_LICENSE',
|
|
242
|
+
'PROOF_OF_ADDRESS',
|
|
243
|
+
'SELFIE',
|
|
244
|
+
'BANK_STATEMENT',
|
|
245
|
+
];
|
|
246
|
+
exports.ATYPES = [
|
|
247
|
+
'UNUSUAL_VOLUME',
|
|
248
|
+
'SUSPICIOUS_PATTERN',
|
|
249
|
+
'SANCTIONS_MATCH',
|
|
250
|
+
'HIGH_RISK_COUNTRY',
|
|
251
|
+
'RAPID_MOVEMENT',
|
|
252
|
+
'STRUCTURING',
|
|
253
|
+
];
|
|
254
|
+
exports.REFUND_REASONS = [
|
|
255
|
+
'DUPLICATE_CHARGE',
|
|
256
|
+
'SERVICE_NOT_RENDERED',
|
|
257
|
+
'ITEM_NOT_RECEIVED',
|
|
258
|
+
'UNAUTHORIZED',
|
|
259
|
+
'CANCELLED_ORDER',
|
|
260
|
+
];
|
|
261
|
+
exports.SOURCES = ['CUSTOMER_DISPUTE', 'INTERNAL_DETECTION', 'MERCHANT_ALERT'];
|
|
262
|
+
// Enum domains — the single source of truth for the values the seed emits, reused
|
|
263
|
+
// both by the builders (where they enumerate a full set) and by the enum re-typing
|
|
264
|
+
// in `src/index.ts`. Values only ever written by Smart Actions (e.g. `SAR_FILED`,
|
|
265
|
+
// `DISMISSED`) are added at the enum site, not here, since the seed never emits them.
|
|
266
|
+
exports.ONBOARDING_STATUSES = ['STARTED', 'PENDING_REVIEW', 'APPROVED', 'REJECTED'];
|
|
267
|
+
exports.RISK_RATINGS = ['LOW', 'MEDIUM', 'HIGH'];
|
|
268
|
+
exports.CARD_TYPES = ['VIRTUAL', 'PHYSICAL'];
|
|
269
|
+
exports.CARD_STATUSES = ['ACTIVE', 'BLOCKED', 'EXPIRED', 'PENDING', 'CANCELLED'];
|
|
270
|
+
exports.AML_SEVERITIES = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
|
|
271
|
+
exports.AML_STATUSES = ['OPEN', 'IN_REVIEW', 'CLEARED', 'ESCALATED'];
|
|
272
|
+
exports.KYC_STATUSES = [
|
|
273
|
+
'OPEN',
|
|
274
|
+
'IN_REVIEW',
|
|
275
|
+
'PENDING_APPROVAL',
|
|
276
|
+
'APPROVED',
|
|
277
|
+
'REJECTED',
|
|
278
|
+
'ESCALATED',
|
|
279
|
+
];
|
|
280
|
+
exports.NETWORKS = ['VISA', 'MASTERCARD'];
|
|
281
|
+
exports.REFUND_STATUSES = ['PENDING', 'APPROVED', 'DECLINED', 'ESCALATED'];
|
|
282
|
+
exports.SAR_STATUSES = ['DRAFT', 'SUBMITTED', 'FILED'];
|
|
283
|
+
const ACCENTS = {
|
|
284
|
+
ø: 'o',
|
|
285
|
+
č: 'c',
|
|
286
|
+
š: 's',
|
|
287
|
+
é: 'e',
|
|
288
|
+
ü: 'u',
|
|
289
|
+
ć: 'c',
|
|
290
|
+
ä: 'a',
|
|
291
|
+
ö: 'o',
|
|
292
|
+
å: 'a',
|
|
293
|
+
};
|
|
294
|
+
const deaccent = (s) => s.replace(/[øčšéüćäöå]/g, c => ACCENTS[c] ?? c);
|
|
295
|
+
exports.deaccent = deaccent;
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VlZC9wb29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUZBQWlGO0FBQ2pGLDhFQUE4RTtBQUM5RSxxRUFBcUU7OztBQUV4RCxRQUFBLEtBQUssR0FBRztJQUNuQixNQUFNO0lBQ04sT0FBTztJQUNQLE9BQU87SUFDUCxNQUFNO0lBQ04sS0FBSztJQUNMLE1BQU07SUFDTixRQUFRO0lBQ1IsTUFBTTtJQUNOLEtBQUs7SUFDTCxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxRQUFRO0lBQ1IsU0FBUztJQUNULE1BQU07SUFDTixPQUFPO0lBQ1AsUUFBUTtJQUNSLE1BQU07SUFDTixPQUFPO0lBQ1AsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsTUFBTTtJQUNOLFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsT0FBTztJQUNQLE1BQU07SUFDTixRQUFRO0lBQ1IsUUFBUTtJQUNSLE1BQU07SUFDTixRQUFRO0lBQ1IsU0FBUztJQUNULFFBQVE7SUFDUixPQUFPO0lBQ1AsTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sT0FBTztJQUNQLE1BQU07Q0FDUCxDQUFDO0FBQ1csUUFBQSxJQUFJLEdBQUc7SUFDbEIsV0FBVztJQUNYLFFBQVE7SUFDUixPQUFPO0lBQ1AsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsVUFBVTtJQUNWLFdBQVc7SUFDWCxVQUFVO0lBQ1YsVUFBVTtJQUNWLFFBQVE7SUFDUixPQUFPO0lBQ1AsV0FBVztJQUNYLFFBQVE7SUFDUixPQUFPO0lBQ1AsUUFBUTtJQUNSLFNBQVM7SUFDVCxRQUFRO0lBQ1IsT0FBTztJQUNQLFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtJQUNSLFNBQVM7SUFDVCxVQUFVO0lBQ1YsV0FBVztJQUNYLE1BQU07SUFDTixPQUFPO0lBQ1AsT0FBTztJQUNQLFFBQVE7SUFDUixRQUFRO0lBQ1IsVUFBVTtJQUNWLE9BQU87SUFDUCxRQUFRO0lBQ1IsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsVUFBVTtJQUNWLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtDQUNULENBQUM7QUFDVyxRQUFBLFNBQVMsR0FBRztJQUN2QixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7Q0FDTCxDQUFDO0FBQ1csUUFBQSxtQkFBbUIsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsUUFBQSxNQUFNLEdBQXVDO0lBQ3hELEVBQUUsRUFBRTtRQUNGLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUNuQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7UUFDbkIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO0tBQ3JCO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2xCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNqQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7S0FDdkI7SUFDRCxFQUFFLEVBQUU7UUFDRixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7UUFDdEIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDO0tBQ3hCO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2xCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztLQUNsQjtJQUNELEVBQUUsRUFBRTtRQUNGLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUNuQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7S0FDdkI7SUFDRCxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QixFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztDQUMxQixDQUFDO0FBQ1csUUFBQSxJQUFJ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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Customer, Refund } from './types';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
export interface RefundsResult {
|
|
4
|
+
refunds: Refund[];
|
|
5
|
+
refundsByCust: Record<number, Refund[]>;
|
|
6
|
+
}
|
|
7
|
+
/** 55 refund requests; resolved ones carry a reviewer and resolution notes. */
|
|
8
|
+
export default function seedRefunds(knex: Knex, customers: Customer[]): Promise<RefundsResult>;
|
|
9
|
+
//# sourceMappingURL=refunds.d.ts.map
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = seedRefunds;
|
|
4
|
+
const dates_1 = require("./dates");
|
|
5
|
+
const pools_1 = require("./pools");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
/** 55 refund requests; resolved ones carry a reviewer and resolution notes. */
|
|
8
|
+
async function seedRefunds(knex, customers) {
|
|
9
|
+
var _a;
|
|
10
|
+
await knex.schema.createTable('refund_requests', table => {
|
|
11
|
+
table.increments('id').primary();
|
|
12
|
+
table.string('reference');
|
|
13
|
+
table.integer('customer_id');
|
|
14
|
+
table.string('transaction_id');
|
|
15
|
+
table.date('transaction_date');
|
|
16
|
+
table.datetime('requested_at');
|
|
17
|
+
table.float('amount');
|
|
18
|
+
table.string('currency');
|
|
19
|
+
table.string('reason');
|
|
20
|
+
table.string('reason_detail');
|
|
21
|
+
table.string('status');
|
|
22
|
+
table.datetime('reviewed_at');
|
|
23
|
+
table.string('reviewed_by');
|
|
24
|
+
table.string('resolution_notes');
|
|
25
|
+
table.string('escalated_to');
|
|
26
|
+
table.datetime('created_at');
|
|
27
|
+
});
|
|
28
|
+
const refunds = [];
|
|
29
|
+
const refundsByCust = {};
|
|
30
|
+
for (let rid = 1; rid <= 55; rid += 1) {
|
|
31
|
+
const c = (0, utils_1.pick)(customers);
|
|
32
|
+
const txdate = (0, utils_1.randint)(10, 90);
|
|
33
|
+
const st = (0, utils_1.choices)(pools_1.REFUND_STATUSES, [30, 35, 20, 15]);
|
|
34
|
+
const refund = {
|
|
35
|
+
id: rid,
|
|
36
|
+
reference: `RR-2026-${String(rid).padStart(5, '0')}`,
|
|
37
|
+
customer_id: c.id,
|
|
38
|
+
transaction_id: `TXN-${(0, utils_1.randint)(10000, 99999)}`,
|
|
39
|
+
transaction_date: (0, dates_1.dayOnlyAgo)(txdate),
|
|
40
|
+
requested_at: (0, dates_1.daysAgo)(txdate - (0, utils_1.randint)(1, 5)),
|
|
41
|
+
amount: (0, utils_1.round2)((0, utils_1.uniform)(9, 1200)),
|
|
42
|
+
currency: 'EUR',
|
|
43
|
+
reason: (0, utils_1.pick)(pools_1.REFUND_REASONS),
|
|
44
|
+
reason_detail: (0, utils_1.chance)(0.5)
|
|
45
|
+
? null
|
|
46
|
+
: (0, utils_1.pick)([
|
|
47
|
+
'Charged twice for one order.',
|
|
48
|
+
'Subscription not delivered.',
|
|
49
|
+
'Parcel never arrived.',
|
|
50
|
+
'Card used without consent.',
|
|
51
|
+
]),
|
|
52
|
+
status: st,
|
|
53
|
+
reviewed_at: st !== 'PENDING' ? (0, dates_1.daysAgo)((0, utils_1.randint)(1, Math.max(2, txdate - 3))) : null,
|
|
54
|
+
reviewed_by: st !== 'PENDING' ? (0, utils_1.pick)(pools_1.ANALYSTS) : null,
|
|
55
|
+
resolution_notes: st === 'PENDING'
|
|
56
|
+
? null
|
|
57
|
+
: (0, utils_1.pick)([
|
|
58
|
+
'Refunded to source.',
|
|
59
|
+
'Declined — merchant evidence.',
|
|
60
|
+
'Escalated to chargeback.',
|
|
61
|
+
'Approved as goodwill.',
|
|
62
|
+
]),
|
|
63
|
+
escalated_to: st === 'ESCALATED' ? 'chargebacks' : null,
|
|
64
|
+
created_at: (0, dates_1.daysAgo)(txdate - (0, utils_1.randint)(0, 4)),
|
|
65
|
+
};
|
|
66
|
+
refunds.push(refund);
|
|
67
|
+
(refundsByCust[_a = c.id] || (refundsByCust[_a] = [])).push(refund);
|
|
68
|
+
}
|
|
69
|
+
await (0, utils_1.insertAll)(knex, 'refund_requests', refunds);
|
|
70
|
+
return { refunds, refundsByCust };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWVkL3JlZnVuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFhQSw4QkFzRUM7QUFoRkQsbUNBQThDO0FBQzlDLG1DQUFvRTtBQUNwRSxtQ0FBcUY7QUFPckYsK0VBQStFO0FBQ2hFLEtBQUssVUFBVSxXQUFXLENBQ3ZDLElBQVUsRUFDVixTQUFxQjs7SUFFckIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUN2RCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QixLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QixLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakMsS0FBSyxDQUFD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
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type Row = Record<string, unknown>;
|
|
2
|
+
export interface Customer extends Row {
|
|
3
|
+
id: number;
|
|
4
|
+
risk_rating: string;
|
|
5
|
+
is_pep: boolean;
|
|
6
|
+
is_sanctioned: boolean;
|
|
7
|
+
onboarding_status: string;
|
|
8
|
+
}
|
|
9
|
+
export interface Card extends Row {
|
|
10
|
+
id: number;
|
|
11
|
+
customer_id: number;
|
|
12
|
+
}
|
|
13
|
+
export interface Refund extends Row {
|
|
14
|
+
id: number;
|
|
15
|
+
customer_id: number;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Shared shapes passed between seed builders so that foreign keys and business
|
|
3
|
+
// rules stay coherent across tables (e.g. alerts are weighted by customer risk).
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VlZC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLGlGQUFpRiJ9
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
export declare const randint: (lo: number, hi: number) => number;
|
|
3
|
+
export declare const uniform: (lo: number, hi: number) => number;
|
|
4
|
+
export declare const chance: (p: number) => boolean;
|
|
5
|
+
export declare const pick: <T>(arr: T[]) => T;
|
|
6
|
+
export declare const sample: <T>(arr: T[], k: number) => T[];
|
|
7
|
+
export declare const shuffle: <T>(arr: T[]) => T[];
|
|
8
|
+
export declare const round2: (n: number) => number;
|
|
9
|
+
/** Weighted pick mirroring the original generator (tolerates zero weights). */
|
|
10
|
+
export declare function choices<T>(items: T[], weights: number[]): T;
|
|
11
|
+
/**
|
|
12
|
+
* Bulk-insert in chunks to stay under SQLite's bound-parameter limit, regardless
|
|
13
|
+
* of how wide a table is or how many rows a builder produces.
|
|
14
|
+
*/
|
|
15
|
+
export declare function insertAll(knex: Knex, table: string, rows: Record<string, unknown>[]): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.round2 = exports.shuffle = exports.sample = exports.pick = exports.chance = exports.uniform = exports.randint = void 0;
|
|
4
|
+
exports.choices = choices;
|
|
5
|
+
exports.insertAll = insertAll;
|
|
6
|
+
const faker_1 = require("@faker-js/faker");
|
|
7
|
+
const randint = (lo, hi) => faker_1.faker.number.int({ min: lo, max: hi });
|
|
8
|
+
exports.randint = randint;
|
|
9
|
+
const uniform = (lo, hi) => faker_1.faker.number.float({ min: lo, max: hi });
|
|
10
|
+
exports.uniform = uniform;
|
|
11
|
+
const chance = (p) => faker_1.faker.number.float() < p;
|
|
12
|
+
exports.chance = chance;
|
|
13
|
+
const pick = (arr) => faker_1.faker.helpers.arrayElement(arr);
|
|
14
|
+
exports.pick = pick;
|
|
15
|
+
const sample = (arr, k) => faker_1.faker.helpers.arrayElements(arr, k);
|
|
16
|
+
exports.sample = sample;
|
|
17
|
+
const shuffle = (arr) => faker_1.faker.helpers.shuffle(arr);
|
|
18
|
+
exports.shuffle = shuffle;
|
|
19
|
+
const round2 = (n) => Math.round(n * 100) / 100;
|
|
20
|
+
exports.round2 = round2;
|
|
21
|
+
/** Weighted pick mirroring the original generator (tolerates zero weights). */
|
|
22
|
+
function choices(items, weights) {
|
|
23
|
+
const total = weights.reduce((a, b) => a + b, 0);
|
|
24
|
+
let r = faker_1.faker.number.float({ min: 0, max: total });
|
|
25
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
26
|
+
r -= weights[i];
|
|
27
|
+
if (r < 0)
|
|
28
|
+
return items[i];
|
|
29
|
+
}
|
|
30
|
+
return items[items.length - 1];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Bulk-insert in chunks to stay under SQLite's bound-parameter limit, regardless
|
|
34
|
+
* of how wide a table is or how many rows a builder produces.
|
|
35
|
+
*/
|
|
36
|
+
async function insertAll(knex, table, rows) {
|
|
37
|
+
if (rows.length)
|
|
38
|
+
await knex.batchInsert(table, rows, 100);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VlZC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnQkEsMEJBVUM7QUFNRCw4QkFNQztBQWpDRCwyQ0FBd0M7QUFFakMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFVLEVBQUUsQ0FBQyxhQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFBckYsUUFBQSxPQUFPLFdBQThFO0FBQzNGLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQVUsRUFBVSxFQUFFLENBQUMsYUFBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQXZGLFFBQUEsT0FBTyxXQUFnRjtBQUM3RixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQVMsRUFBVyxFQUFFLENBQUMsYUFBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFBMUQsUUFBQSxNQUFNLFVBQW9EO0FBQ2hFLE1BQU0sSUFBSSxHQUFHLENBQUksR0FBUSxFQUFLLEVBQUUsQ0FBQyxhQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUEzRCxRQUFBLElBQUksUUFBdUQ7QUFDakUsTUFBTSxNQUFNLEdBQUcsQ0FBSSxHQUFRLEVBQUUsQ0FBUyxFQUFPLEVBQUUsQ0FBQyxhQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFBOUUsUUFBQSxNQUFNLFVBQXdFO0FBQ3BGLE1BQU0sT0FBTyxHQUFHLENBQUksR0FBUSxFQUFPLEVBQUUsQ0FBQyxhQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUEzRCxRQUFBLE9BQU8sV0FBb0Q7QUFDakUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFTLEVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUExRCxRQUFBLE1BQU0sVUFBb0Q7QUFFdkUsK0VBQStFO0FBQy9FLFNBQWdCLE9BQU8sQ0FBSSxLQUFVLEVBQUUsT0FBaUI7SUFDdEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLFNBQVMsQ0FDN0IsSUFBVSxFQUNWLEtBQWEsRUFDYixJQUErQjtJQUUvQixJQUFJLElBQUksQ0FBQyxNQUFNO1FBQUUsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUQsQ0FBQyJ9
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@forestadmin/datasource-demo-fintech",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"license": "GPL-3.0",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/ForestAdmin/agent-nodejs.git",
|
|
12
|
+
"directory": "packages/datasource-demo-fintech"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@faker-js/faker": "^9.0.0",
|
|
16
|
+
"@forestadmin/datasource-customizer": "1.69.3",
|
|
17
|
+
"@forestadmin/datasource-sql": "1.17.10",
|
|
18
|
+
"@forestadmin/datasource-toolkit": "1.53.1",
|
|
19
|
+
"knex": "^3.1.0",
|
|
20
|
+
"sqlite3": "^5.1.7"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist/**/*.js",
|
|
24
|
+
"dist/**/*.d.ts"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc",
|
|
28
|
+
"build:watch": "tsc --watch",
|
|
29
|
+
"clean": "rm -rf coverage dist",
|
|
30
|
+
"lint": "eslint src test",
|
|
31
|
+
"test": "jest"
|
|
32
|
+
}
|
|
33
|
+
}
|