-
-
-
-
-
-
-
Flujo por tipo económico
-
CLP
-
-
-
-
-
-
-
Movimientos
-
-
- Todo
- ▲
- ▼
-
-
- Todos los tipos
-
-
-
-
-
-
Sin movimientos para este filtro.
-
+
+
+
+ Overview
+
+
+
+ Where it goes
+
+
+
+ Where it comes from
+
+
+
+ People
+
+
+
+ Cards & credit
+
+
+
+ The cycles
+
+
+
+ Balances
+
+
+
+ Rhythm
+
+
+
+ Platforms
+
+
+
+ Banks
+
+
+
+ Ledger
+
+
+
+ Data quality
+
+
+
+
+
+
The big picture Across these statements, real money came in and went out — but the ledger logged far more movement than that. Here's the real story versus the noise.
+
-
-
-
-
-
+
+
What am I spending my money on, at the end of the day? Every purchase and fee, grouped by what it actually was. Merchant names aren't in the raw statements, so categories are inferred from transaction descriptions.
+
-
-
-
-
-
-
-
-
-
Árbol de trazabilidad
- ✕
-
-
- ← Origen del dinero
- Destino →
-
-
-
Selecciona un movimiento.
+
+
Where does the money come from? Real income only — salary, business deposits, and transfers in from other people. Internal moves are excluded.
+
+
+
+
Who do you exchange money with? Every named payer and person, with money in versus money out and your net position with each. Counterparties are resolved from transaction descriptions.
+
+
+
+
What is credit costing you? Fees, interest, and taxes charged on your cards and credit lines — plus what you paid back to your own cards.
+
+
+
+
Money that just moves in circles The bulk of your statement volume is internal: paying your own cards, sweeping credit lines, and shuffling cash between accounts. None of it is real income or spending.
+
+
+
+
How much did you actually have? Running account balances over time, wherever the statements reported them. This turns the flow of money into the level of money you held.
+
+
+
+
When do you spend? The cadence of your spending — by day of the month and by day of the week. Each cell and bar is real purchase activity.
+
+
+
+
+
12 banks, side by side How activity splits across the banks you reconstructed — and which ones hold real money flow versus pure internal cycling.
+
+
+
+
The full ledger All 725 reconstructed transactions. Search, filter by type or bank, and sort any column.
+
+
+
+
How complete is this picture? What was reconstructed cleanly versus inferred or missing — statement coverage, balance availability, and categorization confidence.
+
+
+
+
+
+
+
+
+
+
-// ── tree renderer ────────────────────────────────────────────────
-function renderTree(branch, isOrig) {
- const lines = [];
- function visit(b) {
- const n = b.node || {};
- const label = n.description || n.subject || n.label || n.name || n.issuerName || n.id || '?';
- const amtH = n.amount ? `
${fmt(n.amount.value,n.amount.currency)} ` : '';
- const dtH = (n.date||n.documentDate) ? `
${n.date||n.documentDate} ` : '';
- const kindH = n.kind ? `
${esc(n.kind)} ` : '';
- if (b.cycle) { lines.push(`
↩ ciclo: ${esc(label)}
`); return }
- if (b.truncated) { lines.push(`
… truncado
`); return }
- lines.push(`
${kindH}${esc(n.id||'')} ${dtH} ${esc(label)} ${amtH}
`);
- const edges = isOrig ? (b.incoming||[]) : (b.outgoing||[]);
- if (edges.length) {
- lines.push('
');
- for (const e of edges) {
- const lk = e.link || {};
- const la = lk.amount ? ' '+fmt(lk.amount.value,lk.amount.currency) : '';
- const lm = lk.method ? `
(${esc(lk.method)}) ` : '';
- lines.push(`
${esc(lk.type||'')} ${la}${lm}
`);
- visit(isOrig ? e.source : e.target);
- }
- lines.push('
');
- }
- lines.push('
');
- }
- visit(branch);
- return lines.join('');
+
+
+
+
+
diff --git a/web/dashboard.js b/web/dashboard.js
new file mode 100644
index 0000000..cc5d147
--- /dev/null
+++ b/web/dashboard.js
@@ -0,0 +1,327 @@
+/* money-trace · dashboard controller + 5 perspective tabs */
+(function () {
+ 'use strict';
+ const $ = s => document.querySelector(s);
+ const C = window.Charts;
+ const col = {
+ income: () => cssv('--c-income'), spend: () => cssv('--c-spend'),
+ person: () => cssv('--c-person'), fee: () => cssv('--c-fee'),
+ internal: () => cssv('--c-internal'), ink: () => cssv('--ink'), mute: () => cssv('--ink-mute')
+ };
+ const cssv = v => getComputedStyle(document.documentElement).getPropertyValue(v).trim();
+ const esc = C.esc;
+
+ // ---------- tooltip ----------
+ const tip = $('#tip');
+ function place(e) {
+ const w = tip.offsetWidth, h = tip.offsetHeight, pad = 16;
+ let x = e.clientX + pad, y = e.clientY + pad;
+ if (x + w > innerWidth - 8) x = e.clientX - w - pad;
+ if (y + h > innerHeight - 8) y = e.clientY - h - pad;
+ tip.style.left = x + 'px'; tip.style.top = y + 'px';
+ }
+ window.MTtip = {
+ raw(e, title, sub, c) {
+ tip.innerHTML = `
${esc(title)}
${esc(sub)}
`;
+ tip.classList.add('show'); place(e);
+ },
+ rows(e, title, c, txns) {
+ const top = txns.slice().sort((a, b) => b.amount - a.amount).slice(0, 6);
+ let html = `
${esc(title)}
+
${window.MT.CLP(txns.reduce((a, t) => a + t.amount, 0))}
+
${txns.length} transactions
`;
+ for (const t of top) html += `
${t.date.slice(5).replace('-', '/')} ${esc(window.MT.cleanDesc(t.description) || t.counterparty || '—')} ${window.MT.CLP(t.amount)}
`;
+ html += '
';
+ if (txns.length > 6) html += `
+${txns.length - 6} more
`;
+ tip.innerHTML = html; tip.classList.add('show'); place(e);
+ },
+ hide() { tip.classList.remove('show'); }
+ };
+
+ // ---------- aggregation ----------
+ const TX = () => window.MT.tx;
+ const sum = arr => arr.reduce((a, t) => a + t.amount, 0);
+ const groupSum = (arr, keyFn) => {
+ const m = {};
+ for (const t of arr) { const k = keyFn(t) || '—'; (m[k] = m[k] || { value: 0, txns: [] }); m[k].value += t.amount; m[k].txns.push(t); }
+ return m;
+ };
+ const sortEntries = m => Object.entries(m).sort((a, b) => b[1].value - a[1].value);
+
+ const isExpense = t => t.flow_type === 'expense';
+ const isFee = t => t.flow_type === 'fee';
+ const isIncome = t => t.flow_type === 'income';
+ const isInterIn = t => t.flow_type === 'inter_person' && t.direction === 'credit';
+ const isInterOut = t => t.flow_type === 'inter_person' && t.direction === 'debit';
+ const isInternal = t => ['self_transfer', 'credit_line', 'card_payment'].includes(t.flow_type);
+
+ // ---------- shared totals ----------
+ let TOT;
+ function computeTotals() {
+ const tx = TX();
+ const realIn = sum(tx.filter(t => isIncome(t) || isInterIn(t)));
+ const realOut = sum(tx.filter(t => isExpense(t) || isFee(t) || isInterOut(t)));
+ const internal = sum(tx.filter(isInternal));
+ TOT = { realIn, realOut, internal, net: realIn - realOut, gross: realIn + realOut + internal };
+ }
+
+ const fmtBig = v => {
+ const sign = v < 0 ? '−' : ''; const a = Math.abs(v);
+ if (a >= 1e6) return sign + '$' + (a / 1e6).toLocaleString('es-CL', { minimumFractionDigits: 1, maximumFractionDigits: 1 }) + '
M ';
+ if (a >= 1e3) return sign + '$' + Math.round(a / 1e3).toLocaleString('es-CL') + '
k ';
+ return sign + window.MT.CLP(a);
+ };
+ const kpi = (lab, val, sub, accent) =>
+ `
${lab}
${val}
${sub ? `
${sub}
` : ''}
`;
+
+ // ============================================================ TAB 1: OVERVIEW
+ function renderOverview(host) {
+ const tx = TX();
+ const months = window.MT.months;
+ const introEl = document.getElementById('ov-intro');
+ if (introEl) introEl.innerHTML = `Across
${months.length} months ,
${window.MT.CLPk(TOT.realIn)} came in and
${window.MT.CLPk(TOT.realOut)} went out — but your statements logged
${window.MT.CLPk(TOT.gross)} of total movement. Here's the real story versus the noise.`;
+ const inByM = {}, outByM = {}, netByM = {};
+ months.forEach(m => {
+ inByM[m] = sum(tx.filter(t => t.ym === m && (isIncome(t) || isInterIn(t))));
+ outByM[m] = sum(tx.filter(t => t.ym === m && (isExpense(t) || isFee(t) || isInterOut(t))));
+ netByM[m] = inByM[m] - outByM[m];
+ });
+ const mult = TOT.gross / (TOT.realIn + TOT.realOut);
+
+ host.innerHTML = `
+
+ ${kpi('Real income', fmtBig(TOT.realIn), '93 deposits & transfers in', col.income())}
+ ${kpi('Real spending', fmtBig(TOT.realOut), 'purchases · fees · people', col.spend())}
+ ${kpi('Net real', (TOT.net < 0 ? '−' : '') + fmtBig(Math.abs(TOT.net)), 'income minus spending', col.ink())}
+
+
+
Income vs spending by monthmonthly, CLP
+
Money in Money out
+
+
Real vs internal
+
+
+ Real money ${window.MT.CLPk(TOT.realIn + TOT.realOut)}
+ Internal shuffle ${window.MT.CLPk(TOT.internal)}
+
+
+
↻
For every $1 of real money, $${mult.toFixed(1)} moved between your own accounts. Most of the statement volume is noise.
+
+
+
Cumulative net positionrunning income − spending
+ `;
+ C.monthlyBars($('#ov-bars'), months, [
+ { key: 'in', label: 'Money in', color: col.income(), values: inByM },
+ { key: 'out', label: 'Money out', color: col.spend(), values: outByM }
+ ], { height: 230 });
+ C.donut($('#ov-donut'), [
+ { label: 'Real money', value: TOT.realIn + TOT.realOut, color: col.income() },
+ { label: 'Internal shuffle', value: TOT.internal, color: col.internal() }
+ ], { size: 176, centerTop: 'x' + mult.toFixed(1), centerBot: 'multiplier' });
+ C.lineChart($('#ov-line'), months, netByM, { height: 200, color: col.income() });
+ }
+
+ // ============================================================ TAB 2: SPENDING
+ function renderSpending(host) {
+ const tx = TX();
+ const spend = tx.filter(t => isExpense(t) || isFee(t));
+ const total = sum(spend);
+ const byCat = groupSum(spend, t => isFee(t) ? 'Fees & interest' : window.MT.spendCategory(t.description));
+ const cats = sortEntries(byCat);
+ const palette = ['#ff5f73', '#ff7a6b', '#ff9460', '#ffae57', '#ffc24b', '#d98cff', '#8c9eff', '#6fd0ff', '#5fd0a0', '#7a8699'];
+ const catColor = i => i < palette.length ? palette[i] : col.mute();
+ const months = window.MT.months;
+ const spendByM = {}; months.forEach(m => spendByM[m] = sum(spend.filter(t => t.ym === m)));
+ // top merchants
+ const byMerch = groupSum(tx.filter(isExpense), t => window.MT.cleanDesc(t.description) || 'Unknown');
+ const merch = sortEntries(byMerch).slice(0, 10);
+ const biggestCat = cats[0];
+
+ host.innerHTML = `
+
+ ${kpi('Total spending', fmtBig(total), `${spend.length} purchases & fees`, col.spend())}
+ ${kpi('Biggest category', biggestCat[0], `${window.MT.CLPk(biggestCat[1].value)} · ${Math.round(biggestCat[1].value / total * 100)}% of spend`, palette[0])}
+ ${kpi('Avg / month', fmtBig(total / months.length), 'across ' + months.length + ' months', col.fee())}
+
+
+
Where it actually goesby category
+
Top merchantssingle payees
+
+
Spending by monthCLP / month
+ `;
+ C.hbars($('#sp-cats'), cats.map(([label, d], i) => ({
+ label, value: d.value, color: catColor(i), sub: d.txns.length + ' txns · ' + Math.round(d.value / total * 100) + '%',
+ _txns: d.txns, _c: catColor(i)
+ })), { max: cats[0][1].value, onHover: (e, d) => window.MTtip.rows(e, d.label, d._c, d._txns) });
+ const ml = $('#sp-merch');
+ merch.forEach(([name, d], i) => {
+ const cat = window.MT.spendCategory(d.txns[0].description);
+ const row = document.createElement('div'); row.className = 'mrow';
+ row.innerHTML = `
${i + 1} ${esc(name)}${esc(cat)} ${d.txns.length}× ${window.MT.CLPk(d.value)} `;
+ row.addEventListener('mousemove', e => window.MTtip.rows(e, name, col.spend(), d.txns));
+ row.addEventListener('mouseleave', () => window.MTtip.hide());
+ ml.appendChild(row);
+ });
+ C.monthlyBars($('#sp-month'), months, [{ key: 'sp', label: 'Spending', color: col.spend(), values: spendByM }], { height: 200 });
+ }
+
+ // ============================================================ TAB 3: INCOME
+ function renderIncome(host) {
+ const tx = TX();
+ const inc = tx.filter(t => isIncome(t) || isInterIn(t));
+ const total = sum(inc);
+ const bySrc = groupSum(inc, t => isIncome(t) ? window.MT.normIncome(t.counterparty) : window.MT.normPerson(t.counterparty));
+ const srcs = sortEntries(bySrc);
+ const palette = ['#2ee6a6', '#3ad6b0', '#46c6ba', '#52b6c4', '#5ea6ce', '#b98cff', '#8c9eff', '#7a8699'];
+ const months = window.MT.months;
+ const incByM = {}; months.forEach(m => incByM[m] = sum(inc.filter(t => t.ym === m)));
+ const top3 = srcs.slice(0, 3).reduce((a, [, d]) => a + d.value, 0);
+ const conc = Math.round(top3 / total * 100);
+
+ host.innerHTML = `
+
+ ${kpi('Total income', fmtBig(total), `${inc.length} deposits & transfers in`, col.income())}
+ ${kpi('Top 3 sources', conc + '%', 'of all income comes from 3 payers', col.income())}
+ ${kpi('Avg / month', fmtBig(total / months.length), 'across ' + months.length + ' months', col.person())}
+
+
+
Where it comes fromby source
+
+
+
Income by monthCLP / month
+ `;
+ C.hbars($('#in-src'), srcs.map(([label, d], i) => ({
+ label, value: d.value, color: i < palette.length ? palette[i] : col.mute(),
+ sub: d.txns.length + ' deposits · ' + Math.round(d.value / total * 100) + '%',
+ _txns: d.txns, _c: i < palette.length ? palette[i] : col.mute()
+ })), { max: srcs[0][1].value, onHover: (e, d) => window.MTtip.rows(e, d.label, d._c, d._txns) });
+ // donut top 5 + other
+ const top5 = srcs.slice(0, 5);
+ const otherV = total - top5.reduce((a, [, d]) => a + d.value, 0);
+ const donutData = top5.map(([label, d], i) => ({ label, value: d.value, color: palette[i] }));
+ if (otherV > 0) donutData.push({ label: 'Other sources', value: otherV, color: col.mute() });
+ C.donut($('#in-donut'), donutData, { size: 176, centerTop: window.MT.CLPk(total).replace('$', '$'), centerBot: 'total in' });
+ $('#in-chips').innerHTML = donutData.map(d => `
${esc(d.label)} ${Math.round(d.value / total * 100)}% `).join('');
+ C.monthlyBars($('#in-month'), months, [{ key: 'in', label: 'Income', color: col.income(), values: incByM }], { height: 200 });
+ }
+
+ // ============================================================ TAB 4: CYCLES
+ function renderCycles(host) {
+ const tx = TX();
+ const internal = tx.filter(isInternal);
+ const total = sum(internal);
+ const byType = {
+ 'Card payments': { value: sum(tx.filter(t => t.flow_type === 'card_payment')), c: tx.filter(t => t.flow_type === 'card_payment'), color: '#6f7b90', label: 'Account → its own credit card' },
+ 'Credit-line sweeps': { value: sum(tx.filter(t => t.flow_type === 'credit_line')), c: tx.filter(t => t.flow_type === 'credit_line'), color: '#566173', label: 'Cuenta corriente ↔ línea de crédito' },
+ 'Self-transfers': { value: sum(tx.filter(t => t.flow_type === 'self_transfer')), c: tx.filter(t => t.flow_type === 'self_transfer'), color: '#7d899e', label: 'Between your own accounts' }
+ };
+ const mult = TOT.gross / (TOT.realIn + TOT.realOut);
+ const byBank = groupSum(internal, t => t.bank);
+ const banks = sortEntries(byBank).slice(0, 8);
+
+ host.innerHTML = `
+
+
×${mult.toFixed(1)}
Your statements show ${window.MT.CLPk(TOT.gross)} of gross movement, but only ${window.MT.CLPk(TOT.realIn + TOT.realOut)} is real money in or out.${window.MT.CLPk(total)} is internal shuffling — money that never left your perimeter.
+
+
+
What the cycling isby type
+
i
These flows net to roughly zero — they're you paying your own cards, sweeping credit lines, and moving cash between accounts.
+
+
Which banks cycle mostinternal volume
+
+ `;
+ const typeArr = Object.entries(byType);
+ C.hbars($('#cy-types'), typeArr.map(([label, d]) => ({
+ label, value: d.value, color: d.color, sub: d.label + ' · ' + d.c.length + ' txns', _txns: d.c, _c: d.color
+ })), { max: Math.max(...typeArr.map(([, d]) => d.value)), onHover: (e, d) => window.MTtip.rows(e, d.label, d._c, d._txns) });
+ C.hbars($('#cy-banks'), banks.map(([label, d]) => ({
+ label, value: d.value, color: col.internal(), sub: d.txns.length + ' txns', _txns: d.txns, _c: col.internal()
+ })), { max: banks[0][1].value, onHover: (e, d) => window.MTtip.rows(e, d.label, d._c, d._txns) });
+ }
+
+ // ============================================================ TAB 5: BANKS
+ function renderBanks(host) {
+ const tx = TX();
+ const raw = window.MT.raw;
+ const banks = window.MT.banks.map(bk => {
+ const bt = tx.filter(t => t.bank === bk);
+ const realIn = sum(bt.filter(t => isIncome(t) || isInterIn(t)));
+ const realOut = sum(bt.filter(t => isExpense(t) || isFee(t) || isInterOut(t)));
+ const internal = sum(bt.filter(isInternal));
+ const vol = realIn + realOut + internal;
+ // docs from raw
+ let docs = 0; for (const s of raw.statements) if (window.MT.bankName(s.bank) === bk) docs++;
+ return { bk, txns: bt.length, docs, realIn, realOut, internal, vol, real: realIn + realOut };
+ }).sort((a, b) => b.vol - a.vol);
+ const maxVol = Math.max(...banks.map(b => b.vol));
+ const totalReal = banks.reduce((a, b) => a + b.real, 0);
+ const totalInt = banks.reduce((a, b) => a + b.internal, 0);
+
+ host.innerHTML = `
+
+ ${kpi('Banks reconstructed', '12', `${window.MT.tx.length} txns · ${raw.statements.length} statements`, col.income())}
+ ${kpi('Most active', banks[0].bk, `${window.MT.CLPk(banks[0].vol)} total volume`, col.income())}
+ ${kpi('Real vs internal', Math.round(totalReal / (totalReal + totalInt) * 100) + '%', 'of all volume is real money', col.fee())}
+
+
Per-bank breakdownsorted by volume
+
+ Bank Txns Real in Real out Internal Volume Real vs internal
+
+
+ `;
+ const tb = $('#bk-rows');
+ banks.forEach(b => {
+ const realPct = b.vol ? b.real / b.vol * 100 : 0;
+ const tr = document.createElement('tr');
+ tr.innerHTML = `
+
${esc(b.bk)}
${b.docs} statements
+
${b.txns}
+
${b.realIn ? window.MT.CLPk(b.realIn) : '— '}
+
${b.realOut ? window.MT.CLPk(b.realOut) : '— '}
+
${b.internal ? window.MT.CLPk(b.internal) : '—'}
+
${window.MT.CLPk(b.vol)}
+
`;
+ tb.appendChild(tr);
+ });
+ }
+
+ // ---------- tab wiring ----------
+ const RENDERERS = { overview: renderOverview, spending: renderSpending, income: renderIncome, cycles: renderCycles, banks: renderBanks };
+ const rendered = {};
+
+ // shared API for the extra-tabs module (dashboard2.js)
+ window.MTdash = {
+ TX, sum, groupSum, sortEntries, col, cssv, esc, fmtBig, kpi,
+ isExpense, isFee, isIncome, isInterIn, isInterOut, isInternal,
+ get TOT() { return TOT; },
+ register(name, fn) { RENDERERS[name] = fn; }
+ };
+ function show(tab) {
+ document.querySelectorAll('.tab').forEach(t => t.classList.toggle('on', t.dataset.tab === tab));
+ document.querySelectorAll('.panel').forEach(p => p.classList.toggle('on', p.id === 'panel-' + tab));
+ const host = $('#host-' + tab);
+ // always re-render to pick up resize/tweak changes
+ RENDERERS[tab](host);
+ rendered[tab] = true;
+ localStorage.setItem('mt-dash-tab', tab);
+ }
+ document.querySelectorAll('.tab').forEach(t => t.addEventListener('click', () => show(t.dataset.tab)));
+
+ let rt; addEventListener('resize', () => { clearTimeout(rt); rt = setTimeout(() => { const cur = document.querySelector('.tab.on'); if (cur && TOT) RENDERERS[cur.dataset.tab]($('#host-' + cur.dataset.tab)); }, 160); });
+
+ // expose for tweaks re-render (no-op until data is loaded)
+ window.MTapply = () => { if (!TOT) return; const cur = document.querySelector('.tab.on'); if (cur) RENDERERS[cur.dataset.tab]($('#host-' + cur.dataset.tab)); };
+
+ // ---------- boot ----------
+ window.MT.load().then(() => {
+ computeTotals();
+ $('.brand .sub').textContent = `${window.MT.tx.length} txns · ${window.MT.banks.length} banks · ${window.MT.months.length} months`;
+ const start = localStorage.getItem('mt-dash-tab') || 'overview';
+ show(RENDERERS[start] ? start : 'overview');
+ $('#loading').style.display = 'none';
+ $('#app').style.display = 'flex';
+ }).catch(err => { $('#loading').textContent = 'failed to load ledger.json — ' + err.message; });
+})();
diff --git a/web/dashboard2.js b/web/dashboard2.js
new file mode 100644
index 0000000..dcbe280
--- /dev/null
+++ b/web/dashboard2.js
@@ -0,0 +1,435 @@
+/* money-trace · dashboard part 2 — extended perspective tabs
+ Balances · People · Cards & credit · Rhythm · Ledger explorer · Data quality
+ Registers into the controller via window.MTdash.register(). */
+(function () {
+ 'use strict';
+ const D = window.MTdash, C = window.Charts, MT = window.MT;
+ const { TX, sum, groupSum, sortEntries, col, cssv, esc, fmtBig, kpi } = D;
+ const { isExpense, isFee, isIncome, isInterIn, isInterOut, isInternal } = D;
+ const $ = s => document.querySelector(s);
+ const CLPk = MT.CLPk, CLP = MT.CLP;
+ const ms = ymd => +new Date(ymd + 'T00:00:00');
+
+ // palette for many-series
+ const SERIES_COLORS = ['#2ee6a6', '#6fd0ff', '#b98cff', '#ffc24b', '#ff8f6b', '#5fd0a0', '#8c9eff', '#ff5f73', '#d0d6e0', '#46c6ba'];
+
+ // ============================================================ BALANCES & RUNWAY
+ function renderBalances(host) {
+ const tx = TX();
+ // group transactions that carry a balance, by account
+ const acctMap = {};
+ for (const t of tx) {
+ if (t.balance == null || t.doc_type === 'tarjeta_credito') continue;
+ const key = t.bank + '·' + (t.last4 || t.doc_type) + '·' + t.doc_type;
+ (acctMap[key] = acctMap[key] || { bank: t.bank, last4: t.last4, doc_type: t.doc_type, pts: [] });
+ acctMap[key].pts.push({ t: ms(t.date), v: t.balance, tx: t });
+ }
+ // keep accounts with >=4 points, sort by point count
+ let accts = Object.entries(acctMap).map(([k, a]) => ({ key: k, ...a }))
+ .filter(a => a.pts.length >= 4)
+ .sort((a, b) => b.pts.length - a.pts.length);
+ accts.forEach((a, i) => { a.color = SERIES_COLORS[i % SERIES_COLORS.length]; a.pts.sort((p, q) => p.t - q.t); a.last = a.pts[a.pts.length - 1].v; a.min = Math.min(...a.pts.map(p => p.v)); });
+
+ // default selection: top 4
+ if (!host._sel) host._sel = new Set(accts.slice(0, 4).map(a => a.key));
+ const sel = host._sel;
+ const lowest = accts.slice().sort((a, b) => a.min - b.min)[0];
+ const liquid = accts.filter(a => a.doc_type !== 'linea_credito').reduce((s, a) => s + a.last, 0);
+
+ host.innerHTML = `
+
+ ${kpi('Accounts with balances', accts.length, 'of 17 reconstructed accounts', col.income())}
+ ${kpi('Latest liquid total', fmtBig(liquid), 'sum of last-known cash balances', col.income())}
+ ${kpi('Lowest point', fmtBig(lowest ? lowest.min : 0), lowest ? `${esc(lowest.bank)} ··${lowest.last4 || ''}` : '', lowest && lowest.min < 0 ? col.spend() : col.fee())}
+
+
+
Balance over timerunning balance, where statements report it
+
+
+
+
i
Credit cards don't report a running balance in these statements, so they're excluded here. Coverage varies by account — lines connect only the points each statement actually logged.
+ `;
+ const chips = $('#bal-chips');
+ accts.forEach(a => {
+ const c = document.createElement('div'); c.className = 'acct-chip' + (sel.has(a.key) ? ' on' : '');
+ c.innerHTML = `
${esc(a.bank)}
${MT.acctShort(a.doc_type)}${a.last4 ? ' ··' + a.last4 : ''} `;
+ c.addEventListener('click', () => { sel.has(a.key) ? sel.delete(a.key) : sel.add(a.key); renderBalances(host); });
+ chips.appendChild(c);
+ });
+ const series = accts.filter(a => sel.has(a.key)).map(a => ({
+ label: a.bank + ' ' + MT.acctShort(a.doc_type) + (a.last4 ? ' ··' + a.last4 : ''),
+ color: a.color, points: a.pts
+ }));
+ C.multiLine($('#bal-chart'), series, { height: 320 });
+ }
+
+ // ============================================================ PEOPLE
+ function renderPeople(host) {
+ const tx = TX();
+ // build per-person ledger from income (in), inter_person (in/out)
+ const ppl = {};
+ function add(name, t, dir) {
+ const k = name;
+ (ppl[k] = ppl[k] || { name, in: 0, out: 0, inTx: [], outTx: [], dates: [] });
+ if (dir === 'in') { ppl[k].in += t.amount; ppl[k].inTx.push(t); }
+ else { ppl[k].out += t.amount; ppl[k].outTx.push(t); }
+ ppl[k].dates.push(t.date);
+ }
+ for (const t of tx) {
+ if (isIncome(t)) add(MT.normIncome(t.counterparty), t, 'in');
+ else if (isInterIn(t)) add(MT.normPerson(t.counterparty), t, 'in');
+ else if (isInterOut(t)) add(MT.normPerson(t.counterparty), t, 'out');
+ }
+ let people = Object.values(ppl).map(p => {
+ p.net = p.in - p.out; p.gross = p.in + p.out; p.n = p.inTx.length + p.outTx.length;
+ p.dates.sort(); p.first = p.dates[0]; p.last = p.dates[p.dates.length - 1];
+ return p;
+ }).filter(p => p.name && p.name !== '—').sort((a, b) => b.gross - a.gross);
+
+ const payers = people.filter(p => p.net > 0).slice(0, 1);
+ const namedIncome = people.reduce((s, p) => s + p.in, 0);
+
+ host.innerHTML = `
+
+ ${kpi('People & payers', people.length, 'distinct counterparties with a name', col.person())}
+ ${kpi('Biggest net source', payers.length ? esc(payers[0].name) : '—', payers.length ? '+' + CLPk(payers[0].net) + ' net to you' : '', col.income())}
+ ${kpi('Named-source income', fmtBig(namedIncome), 'total in from identified people', col.income())}
+
+
Your money relationshipsmoney in · money out · net
+
+ Person / payer Txns Money in Money out Net In vs out Last seen
+
+
+ `;
+ const tb = $('#ppl-rows');
+ const maxGross = Math.max(...people.map(p => p.gross), 1);
+ people.forEach(p => {
+ const inPct = p.gross ? p.in / p.gross * 100 : 0;
+ const tr = document.createElement('tr');
+ tr.innerHTML = `
+
${esc(p.name)}
+
${p.n}
+
${p.in ? CLPk(p.in) : '— '}
+
${p.out ? CLPk(p.out) : '— '}
+
${p.net >= 0 ? '+' : '−'}${CLPk(Math.abs(p.net))}
+
+
${p.last ? p.last.slice(0, 7) : ''} `;
+ tr.addEventListener('mousemove', e => window.MTtip.rows(e, p.name, p.net >= 0 ? col.income() : col.spend(), [...p.inTx, ...p.outTx]));
+ tr.addEventListener('mouseleave', () => window.MTtip.hide());
+ tb.appendChild(tr);
+ });
+ }
+
+ // ============================================================ CARDS & CREDIT
+ function renderCards(host) {
+ const tx = TX();
+ const fees = tx.filter(isFee);
+ const feeTotal = sum(fees);
+ // classify fee descriptions
+ const feeCat = d => {
+ const u = (d || '').toUpperCase();
+ if (/INTERES|MORA|ROTATIV/.test(u)) return 'Interest';
+ if (/IMPUESTO|DL 3475|DECRETO/.test(u)) return 'Taxes & stamp';
+ if (/COBRANZA/.test(u)) return 'Collection charges';
+ if (/COMIS|MANTENCION|MANTENC|ADMIN|SERVICIO|CARGO/.test(u)) return 'Commissions & maintenance';
+ return 'Other charges';
+ };
+ const byFee = groupSum(fees, t => feeCat(t.description));
+ const feeArr = sortEntries(byFee);
+ const FEE_C = { 'Interest': '#ff5f73', 'Taxes & stamp': '#ffc24b', 'Collection charges': '#ff8f6b', 'Commissions & maintenance': '#b98cff', 'Other charges': '#7a8699' };
+
+ // credit-line activity: draws (debit on cuenta = borrowing) vs repayments
+ const lineTx = tx.filter(t => t.flow_type === 'credit_line');
+ const cardPay = tx.filter(t => t.flow_type === 'card_payment');
+ const cardPayTotal = sum(cardPay);
+ const months = MT.months;
+ const feeByM = {}; months.forEach(m => feeByM[m] = sum(fees.filter(t => t.ym === m)));
+
+ // which cards/lines exist
+ const cardAccts = {};
+ for (const t of tx) {
+ if (!MT.isCardType(t.doc_type)) continue;
+ const k = t.bank + ' · ' + MT.acctShort(t.doc_type);
+ (cardAccts[k] = cardAccts[k] || { bank: t.bank, type: t.doc_type, fees: 0, spend: 0, n: 0 });
+ cardAccts[k].n++;
+ if (isFee(t)) cardAccts[k].fees += t.amount;
+ if (isExpense(t)) cardAccts[k].spend += t.amount;
+ }
+ const cardList = Object.entries(cardAccts).sort((a, b) => (b[1].fees + b[1].spend) - (a[1].fees + a[1].spend));
+
+ host.innerHTML = `
+
+ ${kpi('Paid in fees & interest', fmtBig(feeTotal), `${fees.length} charges across all cards & lines`, col.fee())}
+ ${kpi('Card payments made', fmtBig(cardPayTotal), `${cardPay.length} payments to your own cards`, col.internal())}
+ ${kpi('Interest alone', fmtBig(byFee['Interest'] ? byFee['Interest'].value : 0), Math.round((byFee['Interest'] ? byFee['Interest'].value : 0) / feeTotal * 100) + '% of all charges', col.spend())}
+
+
+
What the bank charged youfees & interest by type
+
Charges by monthCLP / month
+
+
Per card & linespend + fees
+
Card / line Txns Spend on it Fees charged Fee rate
+
+ `;
+ C.hbars($('#cd-fees'), feeArr.map(([label, d]) => ({
+ label, value: d.value, color: FEE_C[label] || col.mute(), sub: d.txns.length + ' charges · ' + Math.round(d.value / feeTotal * 100) + '%',
+ _txns: d.txns, _c: FEE_C[label] || col.mute()
+ })), { max: feeArr[0][1].value, onHover: (e, d) => window.MTtip.rows(e, d.label, d._c, d._txns) });
+ C.monthlyBars($('#cd-month'), months, [{ key: 'f', label: 'Fees & interest', color: col.fee(), values: feeByM }], { height: 200 });
+ const tb = $('#cd-rows');
+ cardList.forEach(([name, c]) => {
+ const rate = c.spend ? c.fees / c.spend * 100 : null;
+ const tr = document.createElement('tr');
+ tr.innerHTML = `
+
${esc(name)}
+
${c.n}
+
${c.spend ? CLPk(c.spend) : '— '}
+
${c.fees ? CLPk(c.fees) : '— '}
+
${rate != null ? Math.round(rate) + '%' : '—'} `;
+ tb.appendChild(tr);
+ });
+ }
+
+ // ============================================================ RHYTHM / CALENDAR
+ function renderRhythm(host) {
+ const tx = TX();
+ const spend = tx.filter(t => isExpense(t) || isFee(t));
+ const WD = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
+ // weekday × (none) totals
+ const wdAmt = [0, 0, 0, 0, 0, 0, 0], wdTx = [[], [], [], [], [], [], []];
+ for (const t of spend) { const w = new Date(t.date + 'T00:00:00').getDay(); wdAmt[w] += t.amount; wdTx[w].push(t); }
+ // month × day-of-month heatmap for spending
+ const months = MT.months;
+ const grid = {}; months.forEach(m => grid[m] = {});
+ for (const t of spend) { const day = +t.date.slice(8, 10); (grid[t.ym][day] = grid[t.ym][day] || { v: 0, raw: [] }); grid[t.ym][day].v += t.amount; grid[t.ym][day].raw.push(t); }
+ // busiest weekday
+ const peakWd = wdAmt.indexOf(Math.max(...wdAmt));
+ const totalSpend = sum(spend);
+ const weekendShare = Math.round((wdAmt[0] + wdAmt[6]) / totalSpend * 100);
+ const WDLONG = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
+
+ host.innerHTML = `
+
+ ${kpi('Busiest spending day', WDLONG[peakWd], CLPk(wdAmt[peakWd]) + ' total spent', col.spend())}
+ ${kpi('Weekend share', weekendShare + '%', 'of spending lands Sat–Sun', col.fee())}
+ ${kpi('Active days', Object.values(grid).reduce((s, m) => s + Object.keys(m).length, 0), 'days with at least one purchase', col.income())}
+
+
Spending by day of monthdarker = more spent
+
+
+
Which weekday do you spend?total by day of week
+ `;
+ // heatmap: rows = months, cols = days 1..31
+ const days = Array.from({ length: 31 }, (_, i) => i + 1);
+ const rows = months.map(m => ({
+ label: MT.MONTH_LABEL(m),
+ cells: days.map(d => {
+ const cell = grid[m][d];
+ return { v: cell ? cell.v : 0, raw: cell ? cell.raw : [], title: cell ? MT.MONTH_LABEL(m) + ' ' + d + ' · ' + CLP(cell.v) : '' };
+ })
+ }));
+ const heatHost = $('#rh-heat');
+ heatHost.style.setProperty('--cols', 31);
+ heatHost.querySelectorAll('.hm-row').forEach(r => r.style.setProperty('--cols', 31));
+ C.heatmap(heatHost, rows, days.map(d => d % 2 ? d : ''), { color: col.spend() });
+ heatHost.querySelectorAll('.hm-row').forEach(r => r.style.gridTemplateColumns = '64px repeat(31, 1fr)');
+ // weekday bars
+ C.hbars($('#rh-wd'), WDLONG.map((w, i) => ({
+ label: w, value: wdAmt[i], color: (i === 0 || i === 6) ? col.fee() : col.spend(),
+ _txns: wdTx[i], _c: (i === 0 || i === 6) ? col.fee() : col.spend()
+ })), { max: Math.max(...wdAmt), onHover: (e, d) => window.MTtip.rows(e, d.label, d._c, d._txns) });
+ }
+
+ // ============================================================ LEDGER EXPLORER
+ function renderLedger(host) {
+ const tx = TX().slice();
+ if (!host._state) host._state = { q: '', flow: 'all', bank: 'all', sort: 'date', dir: -1, limit: 60 };
+ const st = host._state;
+ const FLOW_C = { income: col.income(), inter_person: col.person(), expense: col.spend(), fee: col.fee(), self_transfer: col.internal(), credit_line: col.internal(), card_payment: col.internal() };
+ const FLOW_LABEL = { income: 'Income', inter_person: 'Person', expense: 'Spending', fee: 'Fee', self_transfer: 'Self-transfer', credit_line: 'Credit line', card_payment: 'Card payment' };
+
+ host.innerHTML = `
+
+
+ Date Description Account
+ Type Amount
+
+ `;
+ // flow select
+ const flowOpts = ['all', 'income', 'inter_person', 'expense', 'fee', 'self_transfer', 'credit_line', 'card_payment'];
+ $('#lx-flow').innerHTML = flowOpts.map(f => `
${f === 'all' ? 'All types' : FLOW_LABEL[f]} `).join('');
+ $('#lx-bank').innerHTML = `
All banks ` + MT.banks.map(b => `
${esc(b)} `).join('');
+
+ function apply() {
+ let rows = tx;
+ const q = st.q.trim().toLowerCase();
+ if (q) rows = rows.filter(t => (t.description || '').toLowerCase().includes(q) || (t.counterparty || '').toLowerCase().includes(q) || t.bank.toLowerCase().includes(q));
+ if (st.flow !== 'all') rows = rows.filter(t => t.flow_type === st.flow);
+ if (st.bank !== 'all') rows = rows.filter(t => t.bank === st.bank);
+ rows.sort((a, b) => {
+ let av, bv;
+ if (st.sort === 'date') { av = a.date; bv = b.date; }
+ else if (st.sort === 'amount') { av = a.amount; bv = b.amount; }
+ else if (st.sort === 'bank') { av = a.bank; bv = b.bank; }
+ else if (st.sort === 'flow') { av = a.flow_type; bv = b.flow_type; }
+ else { av = a.description || ''; bv = b.description || ''; }
+ return (av < bv ? -1 : av > bv ? 1 : 0) * st.dir;
+ });
+ $('#lx-count').textContent = rows.length + ' of ' + tx.length + ' transactions';
+ const shown = rows.slice(0, st.limit);
+ $('#lx-rows').innerHTML = shown.map(t => `
+
${t.date}
+ ${esc(MT.cleanDesc(t.description) || t.counterparty || '—')}
+ ${esc(t.bank)} ${MT.acctShort(t.doc_type)}${t.last4 ? ' ··' + t.last4 : ''}
+ ${FLOW_LABEL[t.flow_type] || t.flow_type}
+ ${t.direction === 'credit' ? '+' : '−'}${CLP(t.amount)} `).join('');
+ $('#lx-more').innerHTML = rows.length > st.limit ? `
Show ${Math.min(60, rows.length - st.limit)} more (${rows.length - st.limit} hidden)
` : '';
+ const more = $('#lx-more').querySelector('.lx-more');
+ if (more) more.addEventListener('click', () => { st.limit += 60; apply(); });
+ }
+ $('#lx-q').addEventListener('input', e => { st.q = e.target.value; st.limit = 60; apply(); });
+ $('#lx-flow').addEventListener('change', e => { st.flow = e.target.value; st.limit = 60; apply(); });
+ $('#lx-bank').addEventListener('change', e => { st.bank = e.target.value; st.limit = 60; apply(); });
+ host.querySelectorAll('.lx-table th[data-s]').forEach(th => th.addEventListener('click', () => {
+ const s = th.dataset.s; if (st.sort === s) st.dir *= -1; else { st.sort = s; st.dir = s === 'date' || s === 'amount' ? -1 : 1; } apply();
+ }));
+ apply();
+ }
+
+ // ============================================================ DATA QUALITY
+ function renderQuality(host) {
+ const tx = TX();
+ const raw = MT.raw;
+ const months = MT.months;
+ // statement coverage: account -> set of months covered (from period_start..period_end)
+ const acctCov = {};
+ for (const s of raw.statements) {
+ const key = MT.bankName(s.bank) + ' · ' + MT.acctShort(s.doc_type) + (s.account_last4 ? ' ··' + s.account_last4 : '');
+ (acctCov[key] = acctCov[key] || { months: new Set(), docs: 0, bank: MT.bankName(s.bank) });
+ acctCov[key].docs++;
+ if (s.period_start && s.period_end) {
+ let c = new Date(s.period_start.slice(0, 7) + '-01T00:00:00');
+ const end = new Date(s.period_end.slice(0, 7) + '-01T00:00:00');
+ while (c <= end) { acctCov[key].months.add(c.toISOString().slice(0, 7)); c.setMonth(c.getMonth() + 1); }
+ }
+ }
+ const accts = Object.entries(acctCov).sort((a, b) => b[1].docs - a[1].docs);
+
+ // metrics
+ const withBal = tx.filter(t => t.balance != null).length;
+ const withPeriod = raw.statements.filter(s => s.period_start && s.period_end).length;
+ const classified = tx.filter(t => t.flow_type !== 'expense' || MT.spendCategory(t.description) !== 'Other purchases').length;
+ const otherSpend = tx.filter(t => t.flow_type === 'expense' && MT.spendCategory(t.description) === 'Other purchases').length;
+ const namedCp = tx.filter(t => t.counterparty).length;
+ const pct = (a, b) => Math.round(a / b * 100);
+
+ function metric(v, total, label, c) {
+ return `
${pct(v, total)}%
${label}
`;
+ }
+ host.innerHTML = `
+
+ ${metric(withPeriod, raw.statements.length, 'Statements with a clear period', col.income())}
+ ${metric(withBal, tx.length, 'Transactions with a running balance', col.fee())}
+ ${metric(namedCp, tx.length, 'Transactions with a named counterparty', col.person())}
+ ${metric(tx.length - otherSpend, tx.length, 'Transactions confidently categorized', col.income())}
+
+
Statement coverage${accts.length} accounts × ${months.length} months
+
+
Each filled cell = a statement covers that month. Gaps = months with no statement on file.
+
+
+
!
${otherSpend} purchases (${pct(otherSpend, tx.length)}%) couldn't be matched to a spending category and sit in "Other purchases" — the raw statements carry no merchant field, so these are inferred from free-text descriptions.
+
i
Credit-card statements report transactions but not running balances, so the Balances tab covers cash and credit-line accounts only.
+
+ `;
+ // coverage grid
+ const grid = $('#cov-grid');
+ grid.style.setProperty('--cols', months.length);
+ const head = document.createElement('div'); head.className = 'cov-row cov-head'; head.style.setProperty('--cols', months.length);
+ head.innerHTML = `
` + months.map(m => `
${MT.MONTH_LABEL(m)}
`).join('');
+ grid.appendChild(head);
+ accts.forEach(([name, a]) => {
+ const row = document.createElement('div'); row.className = 'cov-row'; row.style.setProperty('--cols', months.length);
+ let html = `
${esc(name)}
${a.docs} stmts · ${a.months.size} mo
`;
+ months.forEach(m => { html += `
`; });
+ row.innerHTML = html;
+ grid.appendChild(row);
+ });
+ }
+
+ // ============================================================ PLATFORMS
+ const RAILS = [
+ ['MercadoPago', /MERCADO ?PAGO|MERPAGO|MERPAG|MP —|MP\*/i, '#6fd0ff'],
+ ['MACH', /\bMACH\b/i, '#2ee6a6'],
+ ['WebPay', /WEBPAY|WEB PAY/i, '#b98cff'],
+ ['PayU', /\bPAYU\b/i, '#ffc24b'],
+ ['Rappi', /RAPPI/i, '#ff8f6b'],
+ ['Uber', /\bUBER\b|UBER ?EATS/i, '#5fd0a0'],
+ ['SumUp', /SUMUP/i, '#8c9eff'],
+ ['Payscan', /PAYSCAN/i, '#ff5f73'],
+ ['Tuu', /\bTUU\b|TUU\*/i, '#d0d6e0'],
+ ['Fintoc', /FINTOC/i, '#46c6ba'],
+ ['Servipag', /SERVIPAG/i, '#ffd45a'],
+ ['Sencillito', /SENCILLITO/i, '#c9a6ff'],
+ ['Khipu', /KHIPU/i, '#7CFFB2'],
+ ['Kushki', /KUSHKI/i, '#FF8FA3'],
+ ['OneClick', /ONECLICK|ONE CLICK/i, '#6fd0ff'],
+ ['Compraqui', /COMPRAQUI/i, '#ff8f6b']
+ ];
+ function railOf(t) {
+ if (t.platform) { for (const [n, re] of RAILS) if (re.test(t.platform)) return n; }
+ for (const [n, re] of RAILS) if (re.test(t.description || '')) return n;
+ return null;
+ }
+ const railColor = name => (RAILS.find(r => r[0] === name) || [, , col.mute()])[2];
+
+ function renderPlatforms(host) {
+ const tx = TX();
+ const railTx = {};
+ for (const t of tx) { const r = railOf(t); if (!r) continue; (railTx[r] = railTx[r] || []).push(t); }
+ let rails = Object.entries(railTx).map(([name, txns]) => {
+ const out = txns.filter(t => t.direction === 'debit'), inn = txns.filter(t => t.direction === 'credit');
+ return { name, txns, n: txns.length, amt: sum(txns), out: sum(out), in: sum(inn), color: railColor(name) };
+ }).sort((a, b) => b.amt - a.amt);
+ const totalAmt = rails.reduce((s, r) => s + r.amt, 0);
+ const totalN = rails.reduce((s, r) => s + r.n, 0);
+ const byCount = rails.slice().sort((a, b) => b.n - a.n);
+ const outTotal = rails.reduce((s, r) => s + r.out, 0), inTotal = rails.reduce((s, r) => s + r.in, 0);
+
+ host.innerHTML = `
+
+ ${kpi('Payment rails seen', rails.length, `across ${totalN} transactions`, col.person())}
+ ${kpi('Most used', byCount.length ? esc(byCount[0].name) : '—', byCount.length ? byCount[0].n + ' transactions' : '', byCount.length ? byCount[0].color : col.mute())}
+ ${kpi('Routed through platforms', fmtBig(totalAmt), '~' + Math.round(totalN / tx.length * 100) + '% of all transactions', col.income())}
+
+
+
Platforms by valuemoney moved per rail
+
By transaction counthow often used
+
+
i
Rails are detected from the platform field and transaction descriptions, so this covers the ~${Math.round(totalN / tx.length * 100)}% of transactions that name a processor. Servipag and MACH move large sums in a few bill-payments, while MercadoPago and PayU appear in many small card purchases.
+ `;
+ C.hbars($('#pf-amt'), rails.map(r => ({
+ label: r.name, value: r.amt, color: r.color,
+ sub: r.n + ' txns' + (r.in && r.out ? ' · in+out' : r.in ? ' · money in' : ' · purchases'),
+ _txns: r.txns, _c: r.color
+ })), { max: rails[0] ? rails[0].amt : 1, onHover: (e, d) => window.MTtip.rows(e, d.label, d._c, d._txns) });
+ C.hbars($('#pf-cnt'), byCount.map(r => ({
+ label: r.name, value: r.n, color: r.color, sub: CLPk(r.amt), _txns: r.txns, _c: r.color
+ })), { max: byCount[0] ? byCount[0].n : 1, money: false, onHover: (e, d) => window.MTtip.rows(e, d.label, d._c, d._txns) });
+ }
+
+ // register all
+ D.register('balances', renderBalances);
+ D.register('people', renderPeople);
+ D.register('cards', renderCards);
+ D.register('rhythm', renderRhythm);
+ D.register('ledger', renderLedger);
+ D.register('quality', renderQuality);
+ D.register('platforms', renderPlatforms);
+})();
diff --git a/web/engine.js b/web/engine.js
new file mode 100644
index 0000000..cb86e11
--- /dev/null
+++ b/web/engine.js
@@ -0,0 +1,348 @@
+/* money-trace · data engine
+ Loads ledger.json, normalizes counterparties, categorizes spend,
+ resolves internal-flow endpoints, and builds a layered node/link graph.
+ Exposes window.MT. Pure vanilla JS — no deps. */
+(function () {
+ 'use strict';
+
+ // ---------- formatting ----------
+ const CLP = n => '$' + Math.round(n).toLocaleString('es-CL');
+ const CLPk = n => {
+ const a = Math.abs(n);
+ if (a >= 1e6) return '$' + (n / 1e6).toLocaleString('es-CL', { maximumFractionDigits: 1 }) + 'M';
+ if (a >= 1e3) return '$' + Math.round(n / 1e3).toLocaleString('es-CL') + 'k';
+ return CLP(n);
+ };
+ const MONTH_LABEL = ym => {
+ const [y, m] = ym.split('-');
+ const names = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'];
+ return names[+m - 1] + " '" + y.slice(2);
+ };
+
+ // ---------- flow categories (visual spine) ----------
+ const CAT = {
+ income: { key: 'income', kind: 'real', label: 'Income' },
+ inter_in: { key: 'inter_in', kind: 'real', label: 'From a person' },
+ inter_out: { key: 'inter_out', kind: 'real', label: 'To a person' },
+ expense: { key: 'expense', kind: 'real', label: 'Spending' },
+ fee: { key: 'fee', kind: 'real', label: 'Fees & interest' },
+ internal_card: { key: 'internal_card', kind: 'internal', label: 'Card payment' },
+ internal_line: { key: 'internal_line', kind: 'internal', label: 'Credit-line sweep' },
+ internal_self: { key: 'internal_self', kind: 'internal', label: 'Between my accounts' }
+ };
+
+ // ---------- counterparty normalization (income + people) ----------
+ function normIncome(cp) {
+ if (!cp) return 'Other income';
+ const u = cp.toUpperCase();
+ if (u.includes('VINOS LABERINTO') || u.includes('LABERINTO')) return 'Vinos Laberinto';
+ if (u.includes('HEIDI') || u.includes('ANDRESEN MULLER HEIDI')) return 'Heidi Andresen';
+ if (u.includes('MURALLA')) return 'Muralla SPA';
+ if (u.startsWith('SDE ') || u.includes('MERCADO PAGO') || u.includes('MERCADOPAGO')) return 'Deposits & checks';
+ if (u.includes('EMA BLANCA') || u.includes('EMA MULLER')) return 'Ema Muller';
+ if (u.includes('RETAMAL')) return 'Bryan Retamal';
+ if (u.includes('MARCELINO')) return 'Marcelino Fuentes';
+ // title-case fallback, trimmed
+ return titleCase(cp);
+ }
+ function normPerson(cp) {
+ if (!cp) return 'Unknown person';
+ const u = cp.toUpperCase();
+ if (u.includes('VICENTE') && u.includes('TIRAD')) return 'Vicente (self)';
+ if (u.includes('MURALLA')) return 'Muralla SPA';
+ if (u.includes('FINTOC')) return 'Fintoc';
+ if (u.includes('ARISMENDI')) return 'Cristian Arismendi';
+ if (u.includes('BRUNA')) return 'Darwin Bruna';
+ if (u.includes('HEIDI') || u.includes('ANDRESEN MULLER HEIDI')) return 'Heidi Andresen';
+ if (u.includes('BUSTOS')) return 'G. Bustos';
+ if (u === 'RUT' || u.includes('MI CUENTA')) return 'Other transfer';
+ return titleCase(cp);
+ }
+ function titleCase(s) {
+ return String(s).toLowerCase().replace(/\b\w/g, c => c.toUpperCase()).trim().slice(0, 26);
+ }
+
+ // ---------- spend categorization (expense has no counterparty) ----------
+ const SPEND_RULES = [
+ ['Debt & loans', /DEUDA|CIERRE DE CUENTA|REPACTAC|PRESTAMO|AVANCE (EN |DE )?EFECTIVO|CUOTA CREDITO/i],
+ ['Cash withdrawals', /RETIRO ATM|RETIRO (DE )?EFECTIVO|GIRO (EN )?CAJERO|RETIRO CAJERO|CARGA DE TRANSFERENCIA/i],
+ ['Utilities & bills',/SERVIPAG|SENCILLITO|\bENEL\b|COMPRAQUI|AGUAS ANDINA|METROGAS|GASCO|CHILECTRA|ESVAL|PAGO DE CUENTA|CUENTA DE LUZ|VTR|MOVISTAR|ENTEL|CLARO|WOM/i],
+ ['Groceries', /SANTA ISABEL|STA ISABEL|JUMBO|\bLIDER\b|HIP LIDER|TOTTUS|UNIMARC|OXXO|MINIMARKET|MAYORISTA|NORTE VERDE|COMERCIAL|ABARROTE|MERCADO\b/i],
+ ['Food & dining', /KFC|MC ?DONALD|BURGER|FORK|DELICIA|RESTAU|CABROS|NARESH|TENDERINO|PIZZA|SUSHI|CAFE|DONDE|COMIDA|EMPANAD|MACKENNA|SENLE|FABRICA|CALETA|IRIS|UBER ?EATS|OISHII|RAPPI|PEDIDOSYA/i],
+ ['Fuel & transport',/COPEC|SHELL|PETROBRAS|PETROBA|\bUBER\b|CABIFY|DIDI|METRO\b|\bBIP\b|ESTACION|PEAJE|PARKING|AUTOPISTA/i],
+ ['Health & pharmacy',/FARMACIA|CRUZ VERDE|SALCOBRAND|AHUMADA|NUTRAFIT|CLINICA|DENTAL|DENTIMAGEN|MEDIC|ULTRA SOLIDAR/i],
+ ['Subscriptions & web',/HETZNER|SITEGROUND|GOOGLE|SPOTIFY|NETFLIX|APPLE\.COM|OPENAI|ANTHROPIC|MICROSOFT|\bAWS\b|HOSTING|GODADDY|NAMECHEAP|CLOUD|GITHUB|VERCEL|NOTION|FIGMA|ADOBE/i],
+ ['Shopping & retail',/FALABELLA|RIPLEY|PARIS|ALIEXPRESS|AMAZON|FOTOGRAFO|TIENDA|SODIMAC|EASY|SHEIN|LOKAL|ELECTRONICA|BACKSTAGE|RETAIL|\bDP\b/i],
+ ['Government & docs',/LICENCIA|IMPUESTO|REGISTRO CIVIL|MUNICIPAL|TESORERIA|NOTARIA|PERMISO/i],
+ ['Wallets & online', /MERCADO ?PAGO|MERPAGO|\bMACH\b|MERCADOPAGO|WEBPAY|\bPAYU\b|\bTUU\b|SUMUP|PAYSCAN|COMPRA POR INTERNET|COMPRA NACIONAL|TARJETA (DIGITAL|VIRTUAL)|\bMP\b|\bCV\b|CUOTAS|ONECLICK|KUSHKI|YAPO|TARJETA ·/i]
+ ];
+ function spendCategory(desc) {
+ const d = desc || '';
+ for (const [name, re] of SPEND_RULES) if (re.test(d)) return name;
+ return 'Other purchases';
+ }
+ // clean a merchant/desc for tooltip display
+ function cleanDesc(desc) {
+ if (!desc) return '—';
+ return desc.replace(/^(MERPAGO|MERCADOPAGO|PAYSCAN|SUMUP|TUU|MACH)\*?/i, '').trim() || desc;
+ }
+
+ // ---------- bank display ----------
+ function bankName(b) {
+ return ({
+ 'Tarjeta_Spin': 'Spin', 'Tarjeta Spin': 'Spin',
+ 'Banco_de_Chile': 'Banco de Chile', 'Ita': 'Itaú'
+ })[b] || b;
+ }
+ const isCardType = dt => dt === 'tarjeta_credito' || dt === 'linea_credito';
+ function acctShort(dt) {
+ return ({ cuenta_corriente: 'Cta Cte', cuenta_vista: 'Cta Vista', linea_credito: 'Línea de crédito', tarjeta_credito: 'Tarjeta' })[dt] || dt;
+ }
+
+ // ---------- load ----------
+ let RAW = null, TX = [], MONTHS = [], BANKS = [], ACCT_LAST4 = new Set();
+
+ async function load() {
+ const res = await fetch('ledger.json');
+ RAW = await res.json();
+ TX = [];
+ for (const s of RAW.statements) {
+ for (const t of (s.transactions || [])) {
+ if (!t.date) continue;
+ TX.push({
+ date: t.date,
+ ym: t.date.slice(0, 7),
+ amount: t.amount,
+ direction: t.direction,
+ description: t.description || '',
+ counterparty: t.counterparty || null,
+ counterparty_rut: t.counterparty_rut || null,
+ platform: t.platform || null,
+ balance: (t.balance === 0 || t.balance == null) ? null : t.balance,
+ flow_type: t.flow_type,
+ internal: !!t.internal,
+ bank: bankName(s.bank),
+ rawBank: s.bank,
+ doc_type: s.doc_type,
+ last4: s.account_last4 || null,
+ pdf: s.pdf_url || null
+ });
+ if (s.account_last4) ACCT_LAST4.add(s.account_last4);
+ }
+ }
+ MONTHS = [...new Set(TX.map(t => t.ym))].sort();
+ BANKS = [...new Set(TX.map(t => t.bank))].sort();
+ return { months: MONTHS, banks: BANKS, totals: RAW.real_totals };
+ }
+
+ // node id helpers
+ const acctId = t => 'acc:' + t.bank + ':' + (t.last4 || t.doc_type);
+ const cardId = t => 'card:' + t.bank + ':' + (t.last4 || t.doc_type);
+ function acctLabel(t) { return { id: acctId(t), col: 1, kind: 'account', bank: t.bank, label: t.bank, sub: acctShort(t.doc_type) + (t.last4 ? ' ··' + t.last4 : '') }; }
+ function cardLabel(t) { return { id: cardId(t), col: 2, kind: 'card', bank: t.bank, label: t.bank, sub: acctShort(t.doc_type) + (t.last4 ? ' ··' + t.last4 : '') }; }
+
+ // find a same-bank node from the live node map, preferring a real (non-synthetic) one
+ function pickSameBank(nodes, bank, col) {
+ let synth = null;
+ for (const n of nodes.values()) {
+ if (n.bank === bank && n.col === col) {
+ if (!/:(pago|linea|cta)$/.test(n.id)) return n;
+ synth = synth || n;
+ }
+ }
+ return synth;
+ }
+ // parse trailing account digits, match to my known last4 set
+ function matchOwnAccount(desc, exclude) {
+ const digits = (desc.match(/\d{3,}/g) || []);
+ for (const d of digits) {
+ for (const l4 of ACCT_LAST4) {
+ if (l4 && l4 !== exclude && d.endsWith(l4)) return l4;
+ }
+ }
+ return null;
+ }
+
+ // ---------- build graph for a filter set ----------
+ function build(opts) {
+ opts = opts || {};
+ const months = opts.months ? new Set(opts.months) : null; // null = all
+ const banks = opts.banks ? new Set(opts.banks) : null;
+ const hideInternal = !!opts.hideInternal;
+
+ let nodes = new Map(); // id -> node
+ let links = new Map(); // key -> link
+ const ensure = (desc) => { if (!nodes.has(desc.id)) nodes.set(desc.id, Object.assign({ value: 0, inLinks: [], outLinks: [] }, desc)); return nodes.get(desc.id); };
+ function addLink(srcId, tgtId, amount, cat, tx) {
+ const key = srcId + '→' + tgtId + '#' + cat;
+ let L = links.get(key);
+ if (!L) { L = { source: srcId, target: tgtId, value: 0, cat, kind: CAT[cat].kind, txns: [] }; links.set(key, L); }
+ L.value += amount; L.txns.push(tx);
+ }
+
+
+ for (const t of TX) {
+ if (months && !months.has(t.ym)) continue;
+ if (banks && !banks.has(t.bank)) continue;
+ const ft = t.flow_type;
+ const internal = ['self_transfer', 'credit_line', 'card_payment'].includes(ft);
+ if (hideInternal && internal) continue;
+
+ const isCard = isCardType(t.doc_type);
+ const selfNodeDesc = isCard ? cardLabel(t) : acctLabel(t);
+
+ if (ft === 'income') {
+ const src = ensure({ id: 'inc:' + normIncome(t.counterparty), col: 0, kind: 'source', label: normIncome(t.counterparty), sub: 'income' });
+ const acc = ensure(selfNodeDesc);
+ addLink(src.id, acc.id, t.amount, 'income', t);
+ } else if (ft === 'inter_person') {
+ const person = { id: 'per:' + normPerson(t.counterparty), kind: 'person' };
+ if (t.direction === 'credit') {
+ const src = ensure({ id: person.id, col: 0, kind: 'person', label: normPerson(t.counterparty), sub: 'transfer in' });
+ const acc = ensure(selfNodeDesc);
+ addLink(src.id, acc.id, t.amount, 'inter_in', t);
+ } else {
+ const acc = ensure(selfNodeDesc);
+ const tgt = ensure({ id: person.id, col: 3, kind: 'person', label: normPerson(t.counterparty), sub: 'transfer out' });
+ addLink(acc.id, tgt.id, t.amount, 'inter_out', t);
+ }
+ } else if (ft === 'expense') {
+ const acc = ensure(selfNodeDesc);
+ const cat = spendCategory(t.description);
+ const tgt = ensure({ id: 'spend:' + cat, col: 3, kind: 'spend', label: cat, sub: 'spending' });
+ addLink(acc.id, tgt.id, t.amount, 'expense', t);
+ } else if (ft === 'fee') {
+ const acc = ensure(selfNodeDesc);
+ const tgt = ensure({ id: 'spend:Fees & interest', col: 3, kind: 'fee', label: 'Fees & interest', sub: 'bank fees' });
+ addLink(acc.id, tgt.id, t.amount, 'fee', t);
+ } else if (ft === 'card_payment') {
+ // resolve account (col1) -> card (col2), within bank where possible
+ let accDesc, cardDesc;
+ if (isCard) {
+ cardDesc = cardLabel(t);
+ const peer = pickSameBank(nodes, t.bank, 1);
+ accDesc = peer || { id: 'acc:' + t.bank + ':pago', col: 1, kind: 'account', bank: t.bank, label: t.bank, sub: 'account' };
+ } else {
+ accDesc = acctLabel(t);
+ const peer = pickSameBank(nodes, t.bank, 2);
+ cardDesc = peer || { id: 'card:' + t.bank + ':pago', col: 2, kind: 'card', bank: t.bank, label: t.bank, sub: 'Tarjeta' };
+ }
+ const a = ensure(accDesc), c = ensure(cardDesc);
+ addLink(a.id, c.id, t.amount, 'internal_card', t);
+ } else if (ft === 'credit_line') {
+ // cuenta (col1) <-> linea (col2)
+ let accDesc, lineDesc;
+ if (t.doc_type === 'linea_credito') {
+ lineDesc = cardLabel(t);
+ const l4 = matchOwnAccount(t.description, t.last4);
+ accDesc = pickSameBank(nodes, t.bank, 1) || { id: 'acc:' + t.bank + ':' + (l4 || 'cta'), col: 1, kind: 'account', bank: t.bank, label: t.bank, sub: l4 ? 'Cta ··' + l4 : 'Cta Cte' };
+ } else {
+ accDesc = acctLabel(t);
+ lineDesc = pickSameBank(nodes, t.bank, 2) || { id: 'card:' + t.bank + ':linea', col: 2, kind: 'card', bank: t.bank, label: t.bank, sub: 'Línea de crédito' };
+ }
+ const a = ensure(accDesc), l = ensure(lineDesc);
+ addLink(a.id, l.id, t.amount, 'internal_line', t);
+ } else if (ft === 'self_transfer') {
+ const anchor = ensure(acctLabel(t));
+ const l4 = matchOwnAccount(t.description, t.last4);
+ let other = anchor;
+ if (l4) {
+ let found = null;
+ for (const n of nodes.values()) if (n.kind === 'account' && n.id.endsWith(':' + l4)) { found = n; break; }
+ other = found || ensure({ id: 'acc:own:' + l4, col: 1, kind: 'account', bank: 'My account', label: 'My account', sub: '··' + l4 });
+ }
+ // unmatched transfers loop back on the same account (visible self-cycle)
+ if (t.direction === 'debit') addLink(anchor.id, other.id, t.amount, 'internal_self', t);
+ else addLink(other.id, anchor.id, t.amount, 'internal_self', t);
+ }
+ }
+
+ // ---- collapse small tail nodes (col0 sources/people, col3 people) into "Other" ----
+ const COLLAPSE_T = 220000;
+ const prelim = {};
+ for (const L of links.values()) {
+ (prelim[L.source] = prelim[L.source] || { in: 0, out: 0 }).out += L.value;
+ (prelim[L.target] = prelim[L.target] || { in: 0, out: 0 }).in += L.value;
+ }
+ const idMap = {}; const otherDescs = {};
+ const OTHER_ACC = { id: 'acc:Other accounts', col: 1, kind: 'account', bank: 'Other', label: 'Other accounts', sub: 'unresolved / small' };
+ const OTHER_CARD = { id: 'card:Other cards', col: 2, kind: 'card', bank: 'Other', label: 'Other cards', sub: 'small' };
+ for (const [id, node] of nodes) {
+ const pv = prelim[id] || { in: 0, out: 0 };
+ const val = Math.max(pv.in, pv.out);
+ // unresolved / phantom accounts created by one-sided internal records — merge regardless of size
+ if (node.col === 1 && node.kind === 'account' && /:(pago|cta)$/.test(id)) { idMap[id] = OTHER_ACC.id; otherDescs[OTHER_ACC.id] = OTHER_ACC; continue; }
+ if (val >= COLLAPSE_T) continue;
+ if (node.col === 0 && (node.kind === 'source' || node.kind === 'person')) {
+ idMap[id] = 'inc:Other income';
+ otherDescs['inc:Other income'] = { id: 'inc:Other income', col: 0, kind: 'source', label: 'Other income', sub: 'small sources' };
+ } else if (node.col === 3 && node.kind === 'person') {
+ idMap[id] = 'per:Other people';
+ otherDescs['per:Other people'] = { id: 'per:Other people', col: 3, kind: 'person', label: 'Other people', sub: 'small transfers' };
+ } else if (node.col === 3 && node.kind === 'spend') {
+ idMap[id] = 'spend:Other purchases';
+ otherDescs['spend:Other purchases'] = { id: 'spend:Other purchases', col: 3, kind: 'spend', label: 'Other purchases', sub: 'spending' };
+ } else if (node.col === 1 && node.kind === 'account' && val < 150000) {
+ idMap[id] = OTHER_ACC.id; otherDescs[OTHER_ACC.id] = OTHER_ACC;
+ } else if (node.col === 2 && node.kind === 'card' && val < 110000) {
+ idMap[id] = OTHER_CARD.id; otherDescs[OTHER_CARD.id] = OTHER_CARD;
+ }
+ }
+ if (Object.keys(idMap).length) {
+ const remap = id => idMap[id] || id;
+ const links2 = new Map();
+ for (const L of links.values()) {
+ const s = remap(L.source), t = remap(L.target);
+ if (s === t && CAT[L.cat].kind !== 'internal') continue;
+ const key = s + '→' + t + '#' + L.cat;
+ let n = links2.get(key);
+ if (!n) { n = { source: s, target: t, value: 0, cat: L.cat, kind: L.kind, txns: [] }; links2.set(key, n); }
+ n.value += L.value; n.txns.push(...L.txns);
+ }
+ const nodes2 = new Map();
+ const descOf = id => otherDescs[id] || nodes.get(id);
+ for (const L of links2.values()) for (const id of [L.source, L.target]) {
+ if (!nodes2.has(id)) nodes2.set(id, Object.assign({ value: 0, inLinks: [], outLinks: [] }, descOf(id)));
+ }
+ nodes = nodes2; links = links2;
+ }
+
+ // wire link refs onto nodes, compute values
+ const linkArr = [...links.values()];
+ for (const L of linkArr) {
+ const s = nodes.get(L.source), tg = nodes.get(L.target);
+ if (!s || !tg) continue;
+ s.outLinks.push(L); tg.inLinks.push(L);
+ }
+ for (const n of nodes.values()) {
+ const inSum = n.inLinks.reduce((a, l) => a + l.value, 0);
+ const outSum = n.outLinks.reduce((a, l) => a + l.value, 0);
+ n.value = Math.max(inSum, outSum);
+ n.inSum = inSum; n.outSum = outSum;
+ }
+
+ // totals (real only)
+ let realIn = 0, realOut = 0, internalAmt = 0;
+ for (const L of linkArr) {
+ if (L.cat === 'income' || L.cat === 'inter_in') realIn += L.value;
+ else if (L.cat === 'expense' || L.cat === 'fee' || L.cat === 'inter_out') realOut += L.value;
+ else internalAmt += L.value;
+ }
+
+ return {
+ nodes: [...nodes.values()].filter(n => n.value > 0),
+ links: linkArr.filter(l => nodes.has(l.source) && nodes.has(l.target)),
+ totals: { realIn, realOut, internal: internalAmt, net: realIn - realOut }
+ };
+ }
+
+ window.MT = {
+ load, build,
+ CLP, CLPk, MONTH_LABEL, cleanDesc, CAT,
+ spendCategory, normIncome, normPerson, bankName, isCardType, acctShort,
+ get months() { return MONTHS; },
+ get banks() { return BANKS; },
+ get tx() { return TX; },
+ get raw() { return RAW; }
+ };
+})();
diff --git a/web/index.html b/web/index.html
new file mode 100644
index 0000000..7755fa2
--- /dev/null
+++ b/web/index.html
@@ -0,0 +1,191 @@
+
+
+
+
+
+
money-trace · ledger
+
+
+
+
+ money‑trace · Santander
+
+
Movimientos –
+
Entradas reales –
+
Salidas reales –
+
Internos –
+
Neto real –
+
+
+
+
+
+ Todo
+ ▲ Entradas
+ ▼ Salidas
+
+
Todos los bancos
+
Todos los flujos
+
Todos los tipos
+
Todas las cuentas
+
+ Ocultar internos
+
+
+
+
+ Fecha
+ Banco
+ Flujo
+ Cuenta
+ Dir
+ Monto
+ Saldo
+ Descripción
+ PDF
+
+
+
+
Sin movimientos para este filtro.
+
+
+
+
diff --git a/web/ledger.json b/web/ledger.json
new file mode 100644
index 0000000..b3eae08
--- /dev/null
+++ b/web/ledger.json
@@ -0,0 +1 @@
+{"banks": {"Santander": {"docs": 28, "txns": 168}, "Falabella": {"docs": 16, "txns": 60}, "BancoEstado": {"docs": 14, "txns": 161}, "Tarjeta_Spin": {"docs": 4, "txns": 82}, "Banco_de_Chile": {"docs": 4, "txns": 62}, "BCI": {"docs": 6, "txns": 38}, "MACH": {"docs": 10, "txns": 23}, "Tenpo": {"docs": 11, "txns": 12}, "CopecPay": {"docs": 11, "txns": 6}, "Prex": {"docs": 2, "txns": 79}, "Ita": {"docs": 1, "txns": 8}, "Rappicard": {"docs": 4, "txns": 26}}, "statements": [{"statement_id": "2038c707", "gmail_id": "19cd8967fa1bf7a5", "bank": "Santander", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "0-070-08-79443-4", "account_last4": "4434", "period_start": "2026-01-30", "period_end": "2026-02-27", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/08d4a3da0a50c3a9-1_15418_007008794434_25022022_CM.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/08d4a3da0a50c3a9-1_15418_007008794434_25022022_CM.pdf"}, {"statement_id": "d6c38079", "gmail_id": "198c9515beee28a7", "bank": "Santander", "doc_type": "linea_credito", "owner": "Vicente", "account_ref": "0-010-09-71703-6", "account_last4": "7036", "period_start": "2025-06-30", "period_end": "2025-07-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/0a51d24c17d7ac98-1_13752_001009717036_24122021_LC.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-07-01", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 26030, "direction": "debit", "balance": -437314, "raw_line": "01/07 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 26.030 -437.314", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-02", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 8090, "direction": "debit", "balance": null, "raw_line": "02/07 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 8.090", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-02", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 3645, "direction": "debit", "balance": -449049, "raw_line": "02/07 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 3.645 -449.049", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-03", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 44427, "direction": "debit", "balance": -493476, "raw_line": "03/07 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 44.427 -493.476", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-04", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 2890, "direction": "debit", "balance": -496366, "raw_line": "04/07 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 2.890 -496.366", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-10", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 7800, "direction": "debit", "balance": -504166, "raw_line": "10/07 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 7.800 -504.166", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-28", "description": "Amortización Periódica LCA N° 000067445503", "doc_number": null, "amount": 504166, "direction": "credit", "balance": 0, "raw_line": "28/07 OPER. CENT Amortización Periódica LCA N° 000067445503 504.166 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-30", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 431018, "direction": "debit", "balance": -431018, "raw_line": "30/07 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 431.018 -431.018", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-31", "description": "Amortización Periódica LCA N° 000067445503", "doc_number": null, "amount": 100000, "direction": "credit", "balance": -331018, "raw_line": "31/07 OPER. CENT Amortización Periódica LCA N° 000067445503 100.000 -331.018", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/0a51d24c17d7ac98-1_13752_001009717036_24122021_LC.pdf"}, {"statement_id": "155a8cef", "gmail_id": "197ec6c58460b95f", "bank": "Santander", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "0-000-67-44550-3", "account_last4": "5503", "period_start": "2025-05-30", "period_end": "2025-06-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/0e081a07f4fcf855-1_13494_000067445503_24122021_CC.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-06-02", "description": "NUTRAFIT", "doc_number": null, "amount": 24732, "direction": "debit", "balance": null, "raw_line": "02/06 O.Gerencia Compra Nacional NUTRAFIT 5150707 24.732", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-02", "description": "FORK", "doc_number": null, "amount": 12580, "direction": "debit", "balance": 600330, "raw_line": "02/06 O.Gerencia Compra Nacional FORK 5150710 12.580 600.330", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-03", "description": "Intereses Línea de Crédito", "doc_number": null, "amount": 11944, "direction": "debit", "balance": null, "raw_line": "03/06 SUC VIRTUA Intereses Línea de Crédito 9717036 11.944", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-03", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 275, "direction": "debit", "balance": 588111, "raw_line": "03/06 SUC VIRTUA Impuesto Sobregiro / Uso LCA 9717036 275 588.111", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-05", "description": "COMERCIAL NORTE VERDE SPA", "doc_number": null, "amount": 8500, "direction": "debit", "balance": null, "raw_line": "05/06 O.Gerencia Compra Nacional COMERCIAL NORTE VERDE SPA 5155648 8.500", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-05", "description": "MERCADOPAGO*DELICIASIRIS", "doc_number": null, "amount": 8300, "direction": "debit", "balance": 571311, "raw_line": "05/06 O.Gerencia Compra Nacional MERCADOPAGO*DELICIASIRIS 5155660 8.300 571.311", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-09", "description": "Transf de VINOS LABERINTO LIM", "doc_number": null, "amount": 1000000, "direction": "credit", "balance": null, "raw_line": "09/06 Agustinas 0788550308 Transf de VINOS LABERINTO LIM 1.000.000", "platform": null, "real_origin": null, "counterparty": "VINOS LABERINTO LIM", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "788550308", "flow_type": "income", "internal": false}, {"date": "2025-06-09", "description": "KFC METRO PAJARITOS", "doc_number": null, "amount": 5500, "direction": "debit", "balance": 1565811, "raw_line": "09/06 O.Gerencia Compra Nacional KFC METRO PAJARITOS 5157765 5.500 1.565.811", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-10", "description": "Pago Automático T. de Crédito", "doc_number": null, "amount": 7600, "direction": "debit", "balance": 1558211, "raw_line": "10/06 G.Finanzas Pago Automático T. de Crédito 8205435 7.600 1.558.211", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-06-11", "description": "Transf de VINOS LABERINTO LIM", "doc_number": null, "amount": 2000000, "direction": "credit", "balance": null, "raw_line": "11/06 Agustinas 0788550308 Transf de VINOS LABERINTO LIM 2.000.000", "platform": null, "real_origin": null, "counterparty": "VINOS LABERINTO LIM", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "788550308", "flow_type": "income", "internal": false}, {"date": "2025-06-11", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 7600, "direction": "credit", "balance": null, "raw_line": "11/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 7.600", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-11", "description": "Transf a Vicente Tirado", "doc_number": null, "amount": 3565811, "direction": "debit", "balance": 0, "raw_line": "11/06 Agustinas 0183930095 Transf a Vicente Tirado 3.565.811 0", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "183930095", "flow_type": "self_transfer", "internal": true}, {"date": "2025-06-12", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 72314, "direction": "credit", "balance": null, "raw_line": "12/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 72.314", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-12", "description": "LICENCIA DE CONDUCIR", "doc_number": null, "amount": 54014, "direction": "debit", "balance": null, "raw_line": "12/06 O.Gerencia Compra Nacional LICENCIA DE CONDUCIR 5163589 54.014", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-12", "description": "MERPAGO*MACKENNA", "doc_number": null, "amount": 13200, "direction": "debit", "balance": null, "raw_line": "12/06 O.Gerencia Compra Nacional MERPAGO*MACKENNA 5163632 13.200", "platform": "MERPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-12", "description": "LA CASA DEL FOTOGRAFO", "doc_number": null, "amount": 4000, "direction": "debit", "balance": null, "raw_line": "12/06 O.Gerencia Compra Nacional LA CASA DEL FOTOGRAFO 5163521 4.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-12", "description": "FARMACIA ULTRA SOLIDAR", "doc_number": null, "amount": 1100, "direction": "debit", "balance": 0, "raw_line": "12/06 O.Gerencia Compra Nacional FARMACIA ULTRA SOLIDAR 5163538 1.100 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-13", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 8450, "direction": "credit", "balance": null, "raw_line": "13/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 8.450", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-13", "description": "COM. MARIA PAZ SENLE", "doc_number": null, "amount": 8450, "direction": "debit", "balance": 0, "raw_line": "13/06 O.Gerencia Compra Nacional COM. MARIA PAZ SENLE 5163668 8.450 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-16", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 28100, "direction": "credit", "balance": null, "raw_line": "16/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 28.100", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-16", "description": "SANTIBANEZ CONCHA LIMITAD", "doc_number": null, "amount": 12540, "direction": "debit", "balance": null, "raw_line": "16/06 O.Gerencia Compra Nacional SANTIBANEZ CONCHA LIMITAD 5166644 12.540", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-16", "description": "MERPAGO*LOS CABROS ASOCIA", "doc_number": null, "amount": 9680, "direction": "debit", "balance": null, "raw_line": "16/06 O.Gerencia Compra Nacional MERPAGO*LOS CABROS ASOCIA 5166736 9.680", "platform": "MERPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-16", "description": "MC DONALDS", "doc_number": null, "amount": 4880, "direction": "debit", "balance": null, "raw_line": "16/06 O.Gerencia Compra Nacional MC DONALDS 5166534 4.880", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-16", "description": "MERCADOPAGO*CALETAABARCA", "doc_number": null, "amount": 1000, "direction": "debit", "balance": 0, "raw_line": "16/06 O.Gerencia Compra Nacional MERCADOPAGO*CALETAABARCA 5166687 1.000 0", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-18", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 39100, "direction": "credit", "balance": null, "raw_line": "18/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 39.100", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-18", "description": "Transf a MEDIO DE PAGO FINTOC", "doc_number": null, "amount": 39100, "direction": "debit", "balance": 0, "raw_line": "18/06 Agustinas 0771433855 Transf a MEDIO DE PAGO FINTOC 39.100 0", "platform": null, "real_origin": null, "counterparty": "MEDIO DE PAGO FINTOC", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "771433855", "flow_type": "inter_person", "internal": false}, {"date": "2025-06-23", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 22880, "direction": "credit", "balance": null, "raw_line": "23/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 22.880", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-23", "description": "FABRICA", "doc_number": null, "amount": 7500, "direction": "debit", "balance": null, "raw_line": "23/06 O.Gerencia Compra Nacional FABRICA 5172154 7.500", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-23", "description": "FABRICA", "doc_number": null, "amount": 4000, "direction": "debit", "balance": null, "raw_line": "23/06 O.Gerencia Compra Nacional FABRICA 5172136 4.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-23", "description": "FABRICA", "doc_number": null, "amount": 4000, "direction": "debit", "balance": null, "raw_line": "23/06 O.Gerencia Compra Nacional FABRICA 5172210 4.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-23", "description": "MERPAGO*CENTRAL DE RESTAU", "doc_number": null, "amount": 2490, "direction": "debit", "balance": null, "raw_line": "23/06 O.Gerencia Compra Nacional MERPAGO*CENTRAL DE RESTAU 5171157 2.490", "platform": "MERPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-23", "description": "PAYSCAN*PUNTO VENDING PUN", "doc_number": null, "amount": 1400, "direction": "debit", "balance": null, "raw_line": "23/06 O.Gerencia Compra Nacional PAYSCAN*PUNTO VENDING PUN 5171161 1.400", "platform": "PAYSCAN", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-23", "description": "PAYSCAN*PUNTO VENDING PUN", "doc_number": null, "amount": 1100, "direction": "debit", "balance": null, "raw_line": "23/06 O.Gerencia Compra Nacional PAYSCAN*PUNTO VENDING PUN 5171159 1.100", "platform": "PAYSCAN", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-23", "description": "PAYSCAN*PUNTO VENDING PUN", "doc_number": null, "amount": 1000, "direction": "debit", "balance": null, "raw_line": "23/06 O.Gerencia Compra Nacional PAYSCAN*PUNTO VENDING PUN 5171160 1.000", "platform": "PAYSCAN", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-23", "description": "PAYSCAN*PUNTO VENDING PUN", "doc_number": null, "amount": 1000, "direction": "debit", "balance": null, "raw_line": "23/06 O.Gerencia Compra Nacional PAYSCAN*PUNTO VENDING PUN 5171160 1.000", "platform": "PAYSCAN", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-23", "description": "MERPAGO*CENTRAL DE RESTAU", "doc_number": null, "amount": 390, "direction": "debit", "balance": 0, "raw_line": "23/06 O.Gerencia Compra Nacional MERPAGO*CENTRAL DE RESTAU 5171158 390 0", "platform": "MERPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-24", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 30600, "direction": "credit", "balance": null, "raw_line": "24/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 30.600", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-24", "description": "TENDERINO", "doc_number": null, "amount": 30600, "direction": "debit", "balance": 0, "raw_line": "24/06 O.Gerencia Compra Nacional TENDERINO 5175015 30.600 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-26", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 12932, "direction": "credit", "balance": null, "raw_line": "26/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 12.932", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-26", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 12932, "direction": "debit", "balance": 0, "raw_line": "26/06 Agustinas COM.MANTENCION PLAN 12.932 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-06-27", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 21925, "direction": "credit", "balance": null, "raw_line": "27/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 21.925", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-27", "description": "DONDE NARESH", "doc_number": null, "amount": 12500, "direction": "debit", "balance": null, "raw_line": "27/06 O.Gerencia Compra Nacional DONDE NARESH 5177739 12.500", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-27", "description": "COMERCIAL BYB LIMITADA", "doc_number": null, "amount": 6590, "direction": "debit", "balance": null, "raw_line": "27/06 O.Gerencia Compra Nacional COMERCIAL BYB LIMITADA 5177795 6.590", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-27", "description": "SumUp * SOCIEDAD DE IN", "doc_number": null, "amount": 2835, "direction": "debit", "balance": 0, "raw_line": "27/06 O.Gerencia Compra Nacional SumUp * SOCIEDAD DE IN 5177800 2.835 0", "platform": "SUMUP", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-30", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 109963, "direction": "credit", "balance": null, "raw_line": "30/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 109.963", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-30", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 57420, "direction": "credit", "balance": null, "raw_line": "30/06 OPER. CENT Traspaso con la Cuenta N° 001009717036 57.420", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-30", "description": "BACKSTAGE", "doc_number": null, "amount": 49478, "direction": "debit", "balance": null, "raw_line": "30/06 O.Gerencia Compra Nacional BACKSTAGE 5180118 49.478", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-30", "description": "MERPAGO*INVERSIONES ENTRO", "doc_number": null, "amount": 29700, "direction": "debit", "balance": null, "raw_line": "30/06 O.Gerencia Compra Nacional MERPAGO*INVERSIONES ENTRO 5179157 29.700", "platform": "MERPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-30", "description": "LAS TINAJAS DE VILLA ALEG", "doc_number": null, "amount": 23600, "direction": "debit", "balance": null, "raw_line": "30/06 O.Gerencia Compra Nacional LAS TINAJAS DE VILLA ALEG 5181646 23.600", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-30", "description": "LAS TINAJAS DE VILLA ALEG", "doc_number": null, "amount": 17215, "direction": "debit", "balance": null, "raw_line": "30/06 O.Gerencia Compra Nacional LAS TINAJAS DE VILLA ALEG 5179735 17.215", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-30", "description": "BAR EL BAJO", "doc_number": null, "amount": 14520, "direction": "debit", "balance": null, "raw_line": "30/06 O.Gerencia Compra Nacional BAR EL BAJO 5178861 14.520", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-30", "description": "JUSTICIA CAFE", "doc_number": null, "amount": 13200, "direction": "debit", "balance": null, "raw_line": "30/06 O.Gerencia Compra Nacional JUSTICIA CAFE 5178717 13.200", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-30", "description": "TENDERINO", "doc_number": null, "amount": 10680, "direction": "debit", "balance": null, "raw_line": "30/06 O.Gerencia Compra Nacional TENDERINO 5180614 10.680", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-30", "description": "SANTA ROSA", "doc_number": null, "amount": 8990, "direction": "debit", "balance": 0, "raw_line": "30/06 O.Gerencia Compra Nacional SANTA ROSA 5180800 8.990 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-26", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 12932, "direction": "debit", "balance": null, "raw_line": "26/06 Agustinas COM.MANTENCION PLAN 12.932", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/0e081a07f4fcf855-1_13494_000067445503_24122021_CC.pdf"}, {"statement_id": "facb9dfb", "gmail_id": "19abe74655daa6d6", "bank": "Santander", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-10-22", "period_end": "2025-11-24", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/10726be9d88ef9c7-80_14622_0350439800058205435_20251124.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-10-30", "description": "GASTO DE COBRANZA", "doc_number": null, "amount": 1382, "direction": "debit", "balance": null, "raw_line": " 30/10/2025 GASTO DE COBRANZA $ 1.382", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-06", "description": "INTERESES CAPITALIZADOS", "doc_number": null, "amount": 11536, "direction": "debit", "balance": null, "raw_line": " 06/11/2025 INTERESES CAPITALIZADOS $ 11.536", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-06", "description": "INTERESES CAPITALIZADOS", "doc_number": null, "amount": 24088, "direction": "debit", "balance": null, "raw_line": " 06/11/2025 INTERESES CAPITALIZADOS $ 24.088", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-24", "description": "INTERESES", "doc_number": null, "amount": 51101, "direction": "debit", "balance": null, "raw_line": " 24/11/2025 INTERESES $ 51.101", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-24", "description": "IMPUESTOS", "doc_number": null, "amount": 814, "direction": "debit", "balance": null, "raw_line": " 24/11/2025 IMPUESTOS $ 814", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/10726be9d88ef9c7-80_14622_0350439800058205435_20251124.pdf"}, {"statement_id": "66ac2114", "gmail_id": "199baab0709ef53e", "bank": "Santander", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "0-070-08-79443-4", "account_last4": "4434", "period_start": "2025-08-29", "period_end": "2025-09-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/17ddfbd2b668dba1-1_14205_007008794434_25022022_CM.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/17ddfbd2b668dba1-1_14205_007008794434_25022022_CM.pdf"}, {"statement_id": "c9c3d122", "gmail_id": "19b4f0c19088cd5b", "bank": "Santander", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-11-24", "period_end": "2025-12-22", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/22e287bcf8bbe334-80_14842_0350439800058205435_20251222.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-12-01", "description": "GASTO DE COBRANZA", "doc_number": null, "amount": 2240, "direction": "debit", "balance": null, "raw_line": " 01/12/2025 GASTO DE COBRANZA $ 2.240", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-12-22", "description": "INTERESES", "doc_number": null, "amount": 73065, "direction": "debit", "balance": null, "raw_line": " 22/12/2025 INTERESES $ 73.065", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-12-22", "description": "IMPUESTOS", "doc_number": null, "amount": 857, "direction": "debit", "balance": null, "raw_line": " 22/12/2025 IMPUESTOS $ 857", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/22e287bcf8bbe334-80_14842_0350439800058205435_20251222.pdf"}, {"statement_id": "90ecb18b", "gmail_id": "197efb4f62e15b11", "bank": "Santander", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "0-070-08-79443-4", "account_last4": "4434", "period_start": "2025-05-30", "period_end": "2025-06-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/3208a9109629b766-1_13496_007008794434_25022022_CM.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/3208a9109629b766-1_13496_007008794434_25022022_CM.pdf"}, {"statement_id": "82f53b59", "gmail_id": "19b98c3877ed0485", "bank": "Santander", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "0-070-08-79443-4", "account_last4": "4434", "period_start": "2025-11-28", "period_end": "2025-12-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/3363848cb4989aa9-1_14903_007008794434_25022022_CM.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/3363848cb4989aa9-1_14903_007008794434_25022022_CM.pdf"}, {"statement_id": "8c0144b4", "gmail_id": "19a603db8e4567c8", "bank": "Santander", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "0-000-67-44550-3", "account_last4": "5503", "period_start": "2025-09-30", "period_end": "2025-10-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/3893b6d55fe32cc3-1_14441_000067445503_24122021_CC.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-10-02", "description": "Intereses Línea de Crédito", "doc_number": null, "amount": 22132, "direction": "debit", "balance": null, "raw_line": "02/10 SUC VIRTUA Intereses Línea de Crédito 9717036 22.132", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-10-02", "description": "Interés Sobregiro Cta.Corriente", "doc_number": null, "amount": 1431, "direction": "debit", "balance": null, "raw_line": "02/10 SUC VIRTUA Interés Sobregiro Cta.Corriente 7445503 1.431", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-10-02", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 462, "direction": "debit", "balance": null, "raw_line": "02/10 SUC VIRTUA Impuesto Sobregiro / Uso LCA 9717036 462", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-10-02", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 24, "direction": "debit", "balance": -71477, "raw_line": "02/10 SUC VIRTUA Impuesto Sobregiro / Uso LCA 7445503 24 -71.477", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-10-28", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 13030, "direction": "debit", "balance": null, "raw_line": "28/10 Agustinas COM.MANTENCION PLAN 13.030", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-10-28", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 13030, "direction": "debit", "balance": null, "raw_line": "28/10 Agustinas COM.MANTENCION PLAN 13.030", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/3893b6d55fe32cc3-1_14441_000067445503_24122021_CC.pdf"}, {"statement_id": "b0fe2c6b", "gmail_id": "19c539f4dc2d431b", "bank": "Santander", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "0-070-08-79443-4", "account_last4": "4434", "period_start": "2025-12-30", "period_end": "2026-01-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/445ab88e51b6b196-1_15175_007008794434_25022022_CM.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/445ab88e51b6b196-1_15175_007008794434_25022022_CM.pdf"}, {"statement_id": "1b71c92a", "gmail_id": "19b9f4fbcc8e04a5", "bank": "Santander", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "0-000-67-44550-3", "account_last4": "5503", "period_start": "2025-11-28", "period_end": "2025-12-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/4670b2c86ddc08c5-1_14901_000067445503_24122021_CC.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-12-02", "description": "Intereses Línea de Crédito", "doc_number": null, "amount": 22077, "direction": "debit", "balance": null, "raw_line": "02/12 SUC VIRTUA Intereses Línea de Crédito 9717036 22.077", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-12-02", "description": "Interés Sobregiro Cta.Corriente", "doc_number": null, "amount": 4523, "direction": "debit", "balance": null, "raw_line": "02/12 SUC VIRTUA Interés Sobregiro Cta.Corriente 7445503 4.523", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-12-02", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 462, "direction": "debit", "balance": null, "raw_line": "02/12 SUC VIRTUA Impuesto Sobregiro / Uso LCA 9717036 462", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-12-02", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 73, "direction": "debit", "balance": -151076, "raw_line": "02/12 SUC VIRTUA Impuesto Sobregiro / Uso LCA 7445503 73 -151.076", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/4670b2c86ddc08c5-1_14901_000067445503_24122021_CC.pdf"}, {"statement_id": "4cbd861c", "gmail_id": "19889ebc631f74dc", "bank": "Santander", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "0-070-08-79443-4", "account_last4": "4434", "period_start": "2025-06-30", "period_end": "2025-07-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/4715ad8d5db12ef3-1_13749_007008794434_25022022_CM.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/4715ad8d5db12ef3-1_13749_007008794434_25022022_CM.pdf"}, {"statement_id": "1b2825c3", "gmail_id": "197ef6f6c26cbadf", "bank": "Santander", "doc_type": "linea_credito", "owner": "Vicente", "account_ref": "0-010-09-71703-6", "account_last4": "7036", "period_start": "2025-05-30", "period_end": "2025-06-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/48789dfb30fbf280-1_13493_001009717036_24122021_LC.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-06-11", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 7600, "direction": "debit", "balance": -7600, "raw_line": "11/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 7.600 -7.600", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-12", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 72314, "direction": "debit", "balance": -79914, "raw_line": "12/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 72.314 -79.914", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-13", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 8450, "direction": "debit", "balance": -88364, "raw_line": "13/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 8.450 -88.364", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-16", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 28100, "direction": "debit", "balance": -116464, "raw_line": "16/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 28.100 -116.464", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-18", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 39100, "direction": "debit", "balance": -155564, "raw_line": "18/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 39.100 -155.564", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-23", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 22880, "direction": "debit", "balance": -178444, "raw_line": "23/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 22.880 -178.444", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-24", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 30600, "direction": "debit", "balance": -209044, "raw_line": "24/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 30.600 -209.044", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-26", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 12932, "direction": "debit", "balance": -221976, "raw_line": "26/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 12.932 -221.976", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-27", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 21925, "direction": "debit", "balance": -243901, "raw_line": "27/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 21.925 -243.901", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-30", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 109963, "direction": "debit", "balance": null, "raw_line": "30/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 109.963", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-30", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 57420, "direction": "debit", "balance": -411284, "raw_line": "30/06 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 57.420 -411.284", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/48789dfb30fbf280-1_13493_001009717036_24122021_LC.pdf"}, {"statement_id": "92073c99", "gmail_id": "199353efc5e29e4d", "bank": "Santander", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "0-070-08-79443-4", "account_last4": "4434", "period_start": "2025-07-31", "period_end": "2025-08-29", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/4a19300b0637d694-1_14062_007008794434_25022022_CM.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/4a19300b0637d694-1_14062_007008794434_25022022_CM.pdf"}, {"statement_id": "f61a9c29", "gmail_id": "1988b32e385159c9", "bank": "Santander", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "0-000-67-44550-3", "account_last4": "5503", "period_start": "2025-06-30", "period_end": "2025-07-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/62d2081013fd0fc6-1_13753_000067445503_24122021_CC.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-07-01", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 26030, "direction": "credit", "balance": null, "raw_line": "01/07 OPER. CENT Traspaso con la Cuenta N° 001009717036 26.030", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-01", "description": "TENDERINO", "doc_number": null, "amount": 16200, "direction": "debit", "balance": null, "raw_line": "01/07 O.Gerencia Compra Nacional TENDERINO 5181843 16.200", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-01", "description": "MC DONALDS", "doc_number": null, "amount": 4850, "direction": "debit", "balance": null, "raw_line": "01/07 O.Gerencia Compra Nacional MC DONALDS 5181848 4.850", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-01", "description": "MC DONALDS", "doc_number": null, "amount": 2990, "direction": "debit", "balance": null, "raw_line": "01/07 O.Gerencia Compra Nacional MC DONALDS 5181845 2.990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-01", "description": "PARADISO CAFE", "doc_number": null, "amount": 1990, "direction": "debit", "balance": 0, "raw_line": "01/07 O.Gerencia Compra Nacional PARADISO CAFE 5181858 1.990 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-02", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 8090, "direction": "credit", "balance": null, "raw_line": "02/07 OPER. CENT Traspaso con la Cuenta N° 001009717036 8.090", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-02", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 3645, "direction": "credit", "balance": null, "raw_line": "02/07 OPER. CENT Traspaso con la Cuenta N° 001009717036 3.645", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-02", "description": "LA CASA DEL FOTOGRAFO", "doc_number": null, "amount": 6100, "direction": "debit", "balance": null, "raw_line": "02/07 O.Gerencia Compra Nacional LA CASA DEL FOTOGRAFO 5182717 6.100", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-02", "description": "Intereses Línea de Crédito", "doc_number": null, "amount": 3535, "direction": "debit", "balance": null, "raw_line": "02/07 SUC VIRTUA Intereses Línea de Crédito 9717036 3.535", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-02", "description": "PARADISO CAFE", "doc_number": null, "amount": 1990, "direction": "debit", "balance": null, "raw_line": "02/07 O.Gerencia Compra Nacional PARADISO CAFE 5182718 1.990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-02", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 110, "direction": "debit", "balance": 0, "raw_line": "02/07 SUC VIRTUA Impuesto Sobregiro / Uso LCA 9717036 110 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-03", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 44427, "direction": "credit", "balance": null, "raw_line": "03/07 OPER. CENT Traspaso con la Cuenta N° 001009717036 44.427", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-03", "description": "DENTIMAGEN NUEVA DE LYON", "doc_number": null, "amount": 39628, "direction": "debit", "balance": null, "raw_line": "03/07 O.Gerencia Compra Nacional DENTIMAGEN NUEVA DE LYON 5184609 39.628", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-03", "description": "SB 731", "doc_number": null, "amount": 4799, "direction": "debit", "balance": 0, "raw_line": "03/07 O.Gerencia Compra Nacional SB 731 5184617 4.799 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-04", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 2890, "direction": "credit", "balance": null, "raw_line": "04/07 OPER. CENT Traspaso con la Cuenta N° 001009717036 2.890", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-04", "description": "MALL VIVO", "doc_number": null, "amount": 2890, "direction": "debit", "balance": 0, "raw_line": "04/07 O.Gerencia Compra Nacional MALL VIVO 5184659 2.890 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-09", "description": "Pago Automático T. de Crédito", "doc_number": null, "amount": 7800, "direction": "debit", "balance": -7800, "raw_line": "09/07 G.Finanzas Pago Automático T. de Crédito 8205435 7.800 -7.800", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-10", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 7800, "direction": "credit", "balance": 0, "raw_line": "10/07 OPER. CENT Traspaso con la Cuenta N° 001009717036 7.800 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-28", "description": "Transf de VINOS LABERINTO LIM", "doc_number": null, "amount": 1000000, "direction": "credit", "balance": null, "raw_line": "28/07 Agustinas 0788550308 Transf de VINOS LABERINTO LIM 1.000.000", "platform": null, "real_origin": null, "counterparty": "VINOS LABERINTO LIM", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "788550308", "flow_type": "income", "internal": false}, {"date": "2025-07-28", "description": "Amortización Periódica LCA N° 001009717036", "doc_number": null, "amount": 504166, "direction": "debit", "balance": 495834, "raw_line": "28/07 OPER. CENT Amortización Periódica LCA N° 001009717036 9717036 504.166 495.834", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-29", "description": "Transf. Heidi Emma Andresen", "doc_number": null, "amount": 3500000, "direction": "credit", "balance": null, "raw_line": "29/07 Agustinas 0086634570 Transf. Heidi Emma Andresen 1120490 3.500.000", "platform": null, "real_origin": null, "counterparty": "Heidi Emma Andresen", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "086634570", "flow_type": "income", "internal": false}, {"date": "2025-07-29", "description": "Transf. Heidi Emma Andresen", "doc_number": null, "amount": 500000, "direction": "credit", "balance": null, "raw_line": "29/07 Agustinas 0086634570 Transf. Heidi Emma Andresen 1120484 500.000", "platform": null, "real_origin": null, "counterparty": "Heidi Emma Andresen", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "086634570", "flow_type": "income", "internal": false}, {"date": "2025-07-29", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 12958, "direction": "debit", "balance": 4482876, "raw_line": "29/07 Agustinas COM.MANTENCION PLAN 12.958 4.482.876", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-30", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 431018, "direction": "credit", "balance": null, "raw_line": "30/07 OPER. CENT Traspaso con la Cuenta N° 001009717036 431.018", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-30", "description": "Transf a Vicente Tirado", "doc_number": null, "amount": 3513894, "direction": "debit", "balance": null, "raw_line": "30/07 O.Gerencia 0183930095 Transf a Vicente Tirado 3.513.894", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "183930095", "flow_type": "self_transfer", "internal": true}, {"date": "2025-07-30", "description": "Transf a Vicente Tirado", "doc_number": null, "amount": 1400000, "direction": "debit", "balance": 0, "raw_line": "30/07 O.Gerencia 0183930095 Transf a Vicente Tirado 1.400.000 0", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "183930095", "flow_type": "self_transfer", "internal": true}, {"date": "2025-07-31", "description": "Transf. Vicente Joaqu?n Tirado An", "doc_number": null, "amount": 100000, "direction": "credit", "balance": null, "raw_line": "31/07 Agustinas 0183930095 Transf. Vicente Joaqu?n Tirado An 8000014 100.000", "platform": null, "real_origin": null, "counterparty": "Vicente Joaqu", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "183930095", "flow_type": "self_transfer", "internal": true}, {"date": "2025-07-31", "description": "Amortización Periódica LCA N° 001009717036", "doc_number": null, "amount": 100000, "direction": "debit", "balance": 0, "raw_line": "31/07 OPER. CENT Amortización Periódica LCA N° 001009717036 9717036 100.000 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-29", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 12958, "direction": "debit", "balance": null, "raw_line": "29/07 Agustinas COM.MANTENCION PLAN 12.958", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/62d2081013fd0fc6-1_13753_000067445503_24122021_CC.pdf"}, {"statement_id": "9f8d7dd4", "gmail_id": "1997d53f67a060b6", "bank": "Santander", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/897e0c9c36ce2366-80_14145_0350439800058205435_20250923.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/897e0c9c36ce2366-80_14145_0350439800058205435_20250923.pdf"}, {"statement_id": "71641deb", "gmail_id": "199c9e5d25c6706e", "bank": "Santander", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "0-000-67-44550-3", "account_last4": "5503", "period_start": "2025-08-29", "period_end": "2025-09-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/97c3be637fe9fd25-1_14209_000067445503_24122021_CC.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-09-02", "description": "Intereses Línea de Crédito", "doc_number": null, "amount": 20992, "direction": "debit", "balance": null, "raw_line": "02/09 SUC VIRTUA Intereses Línea de Crédito 9717036 20.992", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-09-02", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 423, "direction": "debit", "balance": null, "raw_line": "02/09 SUC VIRTUA Impuesto Sobregiro / Uso LCA 9717036 423", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-09-02", "description": "Interés Sobregiro Cta.Corriente", "doc_number": null, "amount": 86, "direction": "debit", "balance": null, "raw_line": "02/09 SUC VIRTUA Interés Sobregiro Cta.Corriente 7445503 86", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-09-02", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 9, "direction": "debit", "balance": -34439, "raw_line": "02/09 SUC VIRTUA Impuesto Sobregiro / Uso LCA 7445503 9 -34.439", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-09-26", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 12989, "direction": "debit", "balance": null, "raw_line": "26/09 Agustinas COM.MANTENCION PLAN 12.989", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-09-26", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 12989, "direction": "debit", "balance": null, "raw_line": "26/09 Agustinas COM.MANTENCION PLAN 12.989", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/97c3be637fe9fd25-1_14209_000067445503_24122021_CC.pdf"}, {"statement_id": "a55ef9df", "gmail_id": "19843f0e00c2e77d", "bank": "Santander", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-06-23", "period_end": "2025-07-23", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/983b9d68011093f9-80_13675_0350439800058205435_20250723.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-07-10", "description": "MONTO CANCELADO", "doc_number": null, "amount": 7800, "direction": "credit", "balance": null, "raw_line": " 10/07/2025 MONTO CANCELADO $ -7.800", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-23", "description": "INTERESES", "doc_number": null, "amount": 7027, "direction": "debit", "balance": null, "raw_line": " 23/07/2025 INTERESES $ 7.027", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-23", "description": "IMPUESTOS", "doc_number": null, "amount": 216, "direction": "debit", "balance": null, "raw_line": " 23/07/2025 IMPUESTOS $ 216", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/983b9d68011093f9-80_13675_0350439800058205435_20250723.pdf"}, {"statement_id": "c819d915", "gmail_id": "19b0a6ded9754f80", "bank": "Santander", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "0-070-08-79443-4", "account_last4": "4434", "period_start": "2025-10-30", "period_end": "2025-11-28", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/9ba605000e171ea1-1_14714_007008794434_25022022_CM.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/9ba605000e171ea1-1_14714_007008794434_25022022_CM.pdf"}, {"statement_id": "7a417394", "gmail_id": "1992b0ffc6f9713b", "bank": "Santander", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "0-000-67-44550-3", "account_last4": "5503", "period_start": "2025-07-31", "period_end": "2025-08-29", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/a2047ecd04c273e5-1_14003_000067445503_24122021_CC.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-08-04", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 15335, "direction": "credit", "balance": null, "raw_line": "04/08 OPER. CENT Traspaso con la Cuenta N° 001009717036 15.335", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-04", "description": "Intereses Línea de Crédito", "doc_number": null, "amount": 14997, "direction": "debit", "balance": null, "raw_line": "04/08 SUC VIRTUA Intereses Línea de Crédito 9717036 14.997", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-04", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 323, "direction": "debit", "balance": null, "raw_line": "04/08 SUC VIRTUA Impuesto Sobregiro / Uso LCA 9717036 323", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-04", "description": "Interés Sobregiro Cta.Corriente", "doc_number": null, "amount": 10, "direction": "debit", "balance": null, "raw_line": "04/08 SUC VIRTUA Interés Sobregiro Cta.Corriente 7445503 10", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-04", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 5, "direction": "debit", "balance": 0, "raw_line": "04/08 SUC VIRTUA Impuesto Sobregiro / Uso LCA 7445503 5 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-05", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 3468, "direction": "credit", "balance": null, "raw_line": "05/08 OPER. CENT Traspaso con la Cuenta N° 001009717036 3.468", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-05", "description": "WORK CAFE AGUSTINAS 920", "doc_number": null, "amount": 3468, "direction": "debit", "balance": 0, "raw_line": "05/08 O.Gerencia Compra Nacional WORK CAFE AGUSTINAS 920 5216714 3.468 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-06", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 350000, "direction": "credit", "balance": null, "raw_line": "06/08 OPER. CENT Traspaso con la Cuenta N° 001009717036 350.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-06", "description": "Transf a Vicente Tirado", "doc_number": null, "amount": 350000, "direction": "debit", "balance": 0, "raw_line": "06/08 O.Gerencia 0183930095 Transf a Vicente Tirado 350.000 0", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "183930095", "flow_type": "self_transfer", "internal": true}, {"date": "2025-08-12", "description": "Traspaso con la Cuenta N° 001009717036", "doc_number": null, "amount": 179, "direction": "credit", "balance": null, "raw_line": "12/08 OPER. CENT Traspaso con la Cuenta N° 001009717036 179", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-12", "description": "Pago Autom Tarj. Crédito Nº 5218921011134586", "doc_number": null, "amount": 179, "direction": "debit", "balance": 0, "raw_line": "12/08 G.Finanzas Pago Autom Tarj. Crédito Nº 5218921011134586 8205435 179 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-08-27", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 12929, "direction": "debit", "balance": null, "raw_line": "27/08 Agustinas COM.MANTENCION PLAN 12.929", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-08-27", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 12929, "direction": "debit", "balance": null, "raw_line": "27/08 Agustinas COM.MANTENCION PLAN 12.929", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/a2047ecd04c273e5-1_14003_000067445503_24122021_CC.pdf"}, {"statement_id": "538db603", "gmail_id": "198e7ec72d57704e", "bank": "Santander", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/b3f1959c0474b99e-80_13942_0350439800058205435_20250825.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/b3f1959c0474b99e-80_13942_0350439800058205435_20250825.pdf"}, {"statement_id": "c17cc312", "gmail_id": "19af037d4c19cd81", "bank": "Santander", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "0-000-67-44550-3", "account_last4": "5503", "period_start": "2025-10-30", "period_end": "2025-11-28", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/ba5474fcc6edf8c5-1_14675_000067445503_24122021_CC.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-11-04", "description": "Intereses Línea de Crédito", "doc_number": null, "amount": 22825, "direction": "debit", "balance": null, "raw_line": "04/11 SUC VIRTUA Intereses Línea de Crédito 9717036 22.825", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-11-04", "description": "Interés Sobregiro Cta.Corriente", "doc_number": null, "amount": 3033, "direction": "debit", "balance": null, "raw_line": "04/11 SUC VIRTUA Interés Sobregiro Cta.Corriente 7445503 3.033", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-11-04", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 462, "direction": "debit", "balance": null, "raw_line": "04/11 SUC VIRTUA Impuesto Sobregiro / Uso LCA 9717036 462", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-11-04", "description": "Impuesto Sobregiro / Uso LCA", "doc_number": null, "amount": 48, "direction": "debit", "balance": -110875, "raw_line": "04/11 SUC VIRTUA Impuesto Sobregiro / Uso LCA 7445503 48 -110.875", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-11-26", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 13066, "direction": "debit", "balance": null, "raw_line": "26/11 Agustinas COM.MANTENCION PLAN 13.066", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-26", "description": "COM.MANTENCION PLAN", "doc_number": null, "amount": 13066, "direction": "debit", "balance": null, "raw_line": "26/11 Agustinas COM.MANTENCION PLAN 13.066", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/ba5474fcc6edf8c5-1_14675_000067445503_24122021_CC.pdf"}, {"statement_id": "ebde8210", "gmail_id": "19980515970b14a1", "bank": "Santander", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-08-25", "period_end": "2025-09-23", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/c25625925d3f4491-80_14147_0350439800058205435_20250923.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-08-29", "description": "GASTO DE COBRANZA", "doc_number": null, "amount": 638, "direction": "debit", "balance": null, "raw_line": " 29/08/2025 GASTO DE COBRANZA $ 638", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-09-10", "description": "TRASPASO A DEUDA NACIONAL", "doc_number": null, "amount": 793296, "direction": "debit", "balance": null, "raw_line": " 10/09/2025 TRASPASO A DEUDA NACIONAL $ 793.296", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-23", "description": "INTERESES", "doc_number": null, "amount": 14527, "direction": "debit", "balance": null, "raw_line": " 23/09/2025 INTERESES $ 14.527", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-09-23", "description": "IMPUESTOS", "doc_number": null, "amount": 787, "direction": "debit", "balance": null, "raw_line": " 23/09/2025 IMPUESTOS $ 787", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/c25625925d3f4491-80_14147_0350439800058205435_20250923.pdf"}, {"statement_id": "24c31ba1", "gmail_id": "19a148aacdd1fa2f", "bank": "Santander", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-09-23", "period_end": "2025-10-22", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/d5bd67874d3f730c-80_14371_0350439800058205435_20251022.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-10-01", "description": "GASTO DE COBRANZA", "doc_number": null, "amount": 1346, "direction": "debit", "balance": null, "raw_line": " 01/10/2025 GASTO DE COBRANZA $ 1.346", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-10-22", "description": "INTERESES", "doc_number": null, "amount": 24088, "direction": "debit", "balance": null, "raw_line": " 22/10/2025 INTERESES $ 24.088", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-10-22", "description": "IMPUESTOS", "doc_number": null, "amount": 797, "direction": "debit", "balance": null, "raw_line": " 22/10/2025 IMPUESTOS $ 797", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/d5bd67874d3f730c-80_14371_0350439800058205435_20251022.pdf"}, {"statement_id": "a09c96aa", "gmail_id": "198e9cf7ca61cba6", "bank": "Santander", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-07-23", "period_end": "2025-08-25", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/e26b6005b2535c85-80_13945_0350439800058205435_20250825.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-08-06", "description": "MERCADOPAGO *OISHIIBO", "doc_number": null, "amount": 30514, "direction": "debit", "balance": null, "raw_line": "Las Condes 06/08/2025 MERCADOPAGO *OISHIIBO $ 30.514", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-06", "description": "STA ISABEL PORTUGAL", "doc_number": null, "amount": 19048, "direction": "debit", "balance": null, "raw_line": "SANTIAGO 06/08/2025 STA ISABEL PORTUGAL $ 19.048", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-07", "description": "MANUEL MONTT 1", "doc_number": null, "amount": 4680, "direction": "debit", "balance": null, "raw_line": "SANTIAGO 07/08/2025 MANUEL MONTT 1 $ 4.680", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-11", "description": "SUCURSAL PLAZA DE AR", "doc_number": null, "amount": 2514, "direction": "debit", "balance": null, "raw_line": "SANTIAGO 11/08/2025 SUCURSAL PLAZA DE AR $ 2.514", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-12", "description": "MONTO CANCELADO", "doc_number": null, "amount": 179, "direction": "credit", "balance": null, "raw_line": " 12/08/2025 MONTO CANCELADO $ -179", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-08-25", "description": "INTERESES", "doc_number": null, "amount": 7635, "direction": "debit", "balance": null, "raw_line": " 25/08/2025 INTERESES $ 7.635", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-08-25", "description": "IMPUESTOS", "doc_number": null, "amount": 220, "direction": "debit", "balance": null, "raw_line": " 25/08/2025 IMPUESTOS $ 220", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/e26b6005b2535c85-80_13945_0350439800058205435_20250825.pdf"}, {"statement_id": "46b961db", "gmail_id": "1991a4c05f01023b", "bank": "Santander", "doc_type": "linea_credito", "owner": "Vicente", "account_ref": "0-010-09-71703-6", "account_last4": "7036", "period_start": "2025-07-31", "period_end": "2025-08-29", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/e6720d5ff89e7953-1_14001_001009717036_24122021_LC.pdf", "parser_version": "santander/1", "transactions": [{"date": "2025-08-04", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 15335, "direction": "debit", "balance": -346353, "raw_line": "04/08 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 15.335 -346.353", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-05", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 3468, "direction": "debit", "balance": -349821, "raw_line": "05/08 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 3.468 -349.821", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-06", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 350000, "direction": "debit", "balance": -699821, "raw_line": "06/08 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 350.000 -699.821", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-12", "description": "Traspaso con la Cuenta N° 000067445503", "doc_number": null, "amount": 179, "direction": "debit", "balance": -700000, "raw_line": "12/08 OPER. CENT Traspaso con la Cuenta N° 000067445503 7445503 179 -700.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/e6720d5ff89e7953-1_14001_001009717036_24122021_LC.pdf"}, {"statement_id": "d72e2264", "gmail_id": "19d87d9cdddd0f84", "bank": "Santander", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "0-070-08-79443-4", "account_last4": "4434", "period_start": "2026-02-27", "period_end": "2026-03-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/ef22e24f56ab90d9-1_15671_007008794434_25022022_CM.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/ef22e24f56ab90d9-1_15671_007008794434_25022022_CM.pdf"}, {"statement_id": "fdbad66c", "gmail_id": "19a5a1fabd1e6e5a", "bank": "Santander", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "0-070-08-79443-4", "account_last4": "4434", "period_start": "2025-09-30", "period_end": "2025-10-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Santander/fae395c2a86163b2-1_14453_007008794434_25022022_CM.pdf", "parser_version": "santander/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Santander/fae395c2a86163b2-1_14453_007008794434_25022022_CM.pdf"}, {"statement_id": "01d3fb8f", "gmail_id": "19b0855e4de53676", "bank": "Falabella", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "01-983-233161-9", "account_last4": "1619", "period_start": "2025-11-01", "period_end": "2025-11-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/1a2b2c2da957ce82-ECBF_CC_202511_01-983-233161-9.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-11-03", "description": "CARGO INTSOBREGIRO NO PACTADO", "doc_number": null, "amount": 1320, "direction": "debit", "balance": -32835, "raw_line": " 03/11/2025 SUCURSAL VIRTUA 0 CARGO INTSOBREGIRO NO PACTADO $1.320 $0 $-32.835", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-11-03", "description": "CARGO INTERES LC CTA CTE", "doc_number": null, "amount": 17282, "direction": "debit", "balance": -50117, "raw_line": " 03/11/2025 SUCURSAL VIRTUA 0 CARGO INTERES LC CTA CTE $17.282 $0 $-50.117", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-03", "description": "IMPUESTO DL 3475", "doc_number": null, "amount": 350, "direction": "debit", "balance": -50467, "raw_line": " 03/11/2025 SUCURSAL VIRTUA 0 IMPUESTO DL 3475 $350 $0 $-50.467", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/1a2b2c2da957ce82-ECBF_CC_202511_01-983-233161-9.pdf"}, {"statement_id": "2d38b81d", "gmail_id": "19a26ce60c38a2df", "bank": "Falabella", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/36e161e32971ed5d-52318912.pdf", "parser_version": "falabella/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/36e161e32971ed5d-52318912.pdf"}, {"statement_id": "d60d5b34", "gmail_id": "19a0871a2e3d9fa9", "bank": "Falabella", "doc_type": "linea_credito", "owner": "Vicente", "account_ref": "02-983-233161-3", "account_last4": "1613", "period_start": "2025-09-01", "period_end": "2025-09-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/581b653ac6fcd97a-ECBF_LC_202510_02-983-233161-3.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-09-01", "description": "TRASPASO PARA CUBRIR SOBREGIRO 0.1058%", "doc_number": null, "amount": 530000, "direction": "credit", "balance": 560, "raw_line": " 01/09/2025 TRASPASO PARA CUBRIR SOBREGIRO $801 $0 $530.000 0.1058% $560", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/581b653ac6fcd97a-ECBF_LC_202510_02-983-233161-3.pdf"}, {"statement_id": "23ea12fa", "gmail_id": "19a73407f5d93044", "bank": "Falabella", "doc_type": "linea_credito", "owner": "Vicente", "account_ref": "02-983-233161-3", "account_last4": "1613", "period_start": "2025-10-01", "period_end": "2025-10-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/6453534478ff5b6f-ECBF_LC_202510_02-983-233161-3.pdf", "parser_version": "falabella/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/6453534478ff5b6f-ECBF_LC_202510_02-983-233161-3.pdf"}, {"statement_id": "33f1139b", "gmail_id": "19b0855e4de53676", "bank": "Falabella", "doc_type": "linea_credito", "owner": "Vicente", "account_ref": "02-983-233161-3", "account_last4": "1613", "period_start": "2025-11-01", "period_end": "2025-11-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/6b09922a7ac56d08-ECBF_LC_202511_02-983-233161-3.pdf", "parser_version": "falabella/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/6b09922a7ac56d08-ECBF_LC_202511_02-983-233161-3.pdf"}, {"statement_id": "f5df88bd", "gmail_id": "19a26ce74efa44e1", "bank": "Falabella", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/6cbe28afa72aec1b-52318913.pdf", "parser_version": "falabella/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/6cbe28afa72aec1b-52318913.pdf"}, {"statement_id": "b828d737", "gmail_id": "19ba3e97c843e6fb", "bank": "Falabella", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "01-983-233161-9", "account_last4": "1619", "period_start": "2025-12-01", "period_end": "2025-12-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/7e0f4b06086be96a-ECBF_CC_202512_01-983-233161-9.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-12-01", "description": "CARGO INTSOBREGIRO NO PACTADO", "doc_number": null, "amount": 2015, "direction": "debit", "balance": -52482, "raw_line": " 01/12/2025 SUCURSAL VIRTUA 0 CARGO INTSOBREGIRO NO PACTADO $2.015 $0 $-52.482", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-12-01", "description": "IMPUESTO DL 3475", "doc_number": null, "amount": 350, "direction": "debit", "balance": -52832, "raw_line": " 01/12/2025 SUCURSAL VIRTUA 0 IMPUESTO DL 3475 $350 $0 $-52.832", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-12-01", "description": "CARGO INTERES LC CTA CTE", "doc_number": null, "amount": 16715, "direction": "debit", "balance": -69547, "raw_line": " 01/12/2025 SUCURSAL VIRTUA 0 CARGO INTERES LC CTA CTE $16.715 $0 $-69.547", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-12-17", "description": "IMPUESTO DL 3475", "doc_number": null, "amount": 350, "direction": "debit", "balance": -69897, "raw_line": " 17/12/2025 SUCURSAL VIRTUA 0 IMPUESTO DL 3475 $350 $0 $-69.897", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-12-17", "description": "CARGO INTERES LC CTA CTE", "doc_number": null, "amount": 9460, "direction": "debit", "balance": -79357, "raw_line": " 17/12/2025 SUCURSAL VIRTUA 0 CARGO INTERES LC CTA CTE $9.460 $0 $-79.357", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-12-17", "description": "TRASPASO POR CIERRE DE CUENTA", "doc_number": null, "amount": 530000, "direction": "debit", "balance": -609357, "raw_line": " 17/12/2025 SUCURSAL VIRTUA 0 TRASPASO POR CIERRE DE CUENTA $530.000 $0 $-609.357", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-12-17", "description": "CARGO INTSOBREGIRO NO PACTADO", "doc_number": null, "amount": 2346, "direction": "debit", "balance": -611703, "raw_line": " 17/12/2025 SUCURSAL VIRTUA 0 CARGO INTSOBREGIRO NO PACTADO $2.346 $0 $-611.703", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-12-17", "description": "CIERRE CTA CTE CON SALDO DEUDOR", "doc_number": null, "amount": 611703, "direction": "credit", "balance": 0, "raw_line": " 17/12/2025 SUCURSAL VIRTUA 0 CIERRE CTA CTE CON SALDO DEUDOR $0 $611.703 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/7e0f4b06086be96a-ECBF_CC_202512_01-983-233161-9.pdf"}, {"statement_id": "6477548f", "gmail_id": "1982f9a6143803f5", "bank": "Falabella", "doc_type": "linea_credito", "owner": "Vicente", "account_ref": "02-983-233161-3", "account_last4": "1613", "period_start": "2025-06-16", "period_end": "2025-06-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/8d8ad7ac5aab9849-ECBF_LC_202507_02-983-233161-3.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-06-30", "description": "TRASPASO PARA CUBRIR SOBREGIRO 0.1063%", "doc_number": null, "amount": 50000, "direction": "credit", "balance": 53, "raw_line": " 30/06/2025 TRASPASO PARA CUBRIR SOBREGIRO $50.000 $0 $50.000 0.1063% $53", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/8d8ad7ac5aab9849-ECBF_LC_202507_02-983-233161-3.pdf"}, {"statement_id": "f05af0e8", "gmail_id": "1993de7a9d7a89dd", "bank": "Falabella", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "01-983-233161-9", "account_last4": "1619", "period_start": "2025-08-01", "period_end": "2025-08-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/93d6bcf5490fd8f7-ECBF_CC_202509_01-983-233161-9.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-08-01", "description": "TRANSF PARA PAGO TARJETA CMR", "doc_number": null, "amount": 400000, "direction": "debit", "balance": -397000, "raw_line": " 01/08/2025 SUCURSAL VIRTUA 0 TRANSF PARA PAGO TARJETA CMR $400.000 $0 $-397.000", "platform": null, "real_origin": null, "counterparty": "PAGO TARJETA CMR", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-08-01", "description": "TRASPASO PARA CUBRIR SOBREGIRO", "doc_number": null, "amount": 397000, "direction": "credit", "balance": 0, "raw_line": " 01/08/2025 SUCURSAL VIRTUA 0 TRASPASO PARA CUBRIR SOBREGIRO $0 $397.000 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-01", "description": "IMPUESTO DL 3475", "doc_number": null, "amount": 121, "direction": "debit", "balance": -121, "raw_line": " 01/08/2025 SUCURSAL VIRTUA 0 IMPUESTO DL 3475 $121 $0 $-121", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-08-01", "description": "CARGO INTERES LC CTA CTE", "doc_number": null, "amount": 5628, "direction": "debit", "balance": -5749, "raw_line": " 01/08/2025 SUCURSAL VIRTUA 0 CARGO INTERES LC CTA CTE $5.628 $0 $-5.749", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-08-04", "description": "TRANSF. DE MURALLA SPA", "doc_number": null, "amount": 12500, "direction": "credit", "balance": 6751, "raw_line": " 04/08/2025 SUCURSAL VIRTUA 0 TRANSF. DE MURALLA SPA $0 $12.500 $6.751", "platform": null, "real_origin": null, "counterparty": "MURALLA SPA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-08-04", "description": "PAGO AUTOM. LINEA DE CREDITO", "doc_number": null, "amount": 6751, "direction": "debit", "balance": 0, "raw_line": " 04/08/2025 SUCURSAL VIRTUA 0 PAGO AUTOM. LINEA DE CREDITO $6.751 $0 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-07", "description": "TRANSF. DE MURALLA SPA", "doc_number": null, "amount": 10050, "direction": "credit", "balance": 10050, "raw_line": " 07/08/2025 SUCURSAL VIRTUA 0 TRANSF. DE MURALLA SPA $0 $10.050 $10.050", "platform": null, "real_origin": null, "counterparty": "MURALLA SPA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-08-07", "description": "PAGO AUTOM. LINEA DE CREDITO", "doc_number": null, "amount": 10050, "direction": "debit", "balance": 0, "raw_line": " 07/08/2025 SUCURSAL VIRTUA 0 PAGO AUTOM. LINEA DE CREDITO $10.050 $0 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-11", "description": "TRANSF PARA PAGO TARJETA CMR", "doc_number": null, "amount": 149000, "direction": "debit", "balance": -149000, "raw_line": " 11/08/2025 SUCURSAL VIRTUA 0 TRANSF PARA PAGO TARJETA CMR $149.000 $0 $-149.000", "platform": null, "real_origin": null, "counterparty": "PAGO TARJETA CMR", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-08-11", "description": "TRASPASO PARA CUBRIR SOBREGIRO", "doc_number": null, "amount": 149000, "direction": "credit", "balance": 0, "raw_line": " 11/08/2025 SUCURSAL VIRTUA 0 TRASPASO PARA CUBRIR SOBREGIRO $0 $149.000 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-18", "description": "0", "doc_number": null, "amount": 200000, "direction": "credit", "balance": 200000, "raw_line": " 18/08/2025 SUCURSAL VIRTUA 0 $0 $200.000 $200.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-08-18", "description": "PAGO AUTOM. LINEA DE CREDITO", "doc_number": null, "amount": 200000, "direction": "debit", "balance": 0, "raw_line": " 18/08/2025 SUCURSAL VIRTUA 0 PAGO AUTOM. LINEA DE CREDITO $200.000 $0 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-25", "description": "TRANSF PARA PAGO TARJETA CMR", "doc_number": null, "amount": 200000, "direction": "debit", "balance": -200000, "raw_line": " 25/08/2025 SUCURSAL VIRTUA 0 TRANSF PARA PAGO TARJETA CMR $200.000 $0 $-200.000", "platform": null, "real_origin": null, "counterparty": "PAGO TARJETA CMR", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-08-25", "description": "TRASPASO PARA CUBRIR SOBREGIRO", "doc_number": null, "amount": 200000, "direction": "credit", "balance": 0, "raw_line": " 25/08/2025 SUCURSAL VIRTUA 0 TRASPASO PARA CUBRIR SOBREGIRO $0 $200.000 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/93d6bcf5490fd8f7-ECBF_CC_202509_01-983-233161-9.pdf"}, {"statement_id": "777e438c", "gmail_id": "19a73407f5d93044", "bank": "Falabella", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "01-983-233161-9", "account_last4": "1619", "period_start": "2025-10-01", "period_end": "2025-10-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/9da49373d67ee09e-ECBF_CC_202510_01-983-233161-9.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-10-01", "description": "CARGO INTSOBREGIRO NO PACTADO", "doc_number": null, "amount": 552, "direction": "debit", "balance": -14408, "raw_line": " 01/10/2025 SUCURSAL VIRTUA 0 CARGO INTSOBREGIRO NO PACTADO $552 $0 $-14.408", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-10-01", "description": "CARGO INTERES LC CTA CTE", "doc_number": null, "amount": 16757, "direction": "debit", "balance": -31165, "raw_line": " 01/10/2025 SUCURSAL VIRTUA 0 CARGO INTERES LC CTA CTE $16.757 $0 $-31.165", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-10-01", "description": "IMPUESTO DL 3475", "doc_number": null, "amount": 350, "direction": "debit", "balance": -31515, "raw_line": " 01/10/2025 SUCURSAL VIRTUA 0 IMPUESTO DL 3475 $350 $0 $-31.515", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/9da49373d67ee09e-ECBF_CC_202510_01-983-233161-9.pdf"}, {"statement_id": "86edbb39", "gmail_id": "198c4904a0a194a6", "bank": "Falabella", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "01-983-233161-9", "account_last4": "1619", "period_start": "2025-07-01", "period_end": "2025-07-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/ae3840696cd4687b-ECBF_CC_202508_01-983-233161-9.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-07-01", "description": "IMPUESTO DL 3475", "doc_number": null, "amount": 33, "direction": "debit", "balance": -33, "raw_line": " 01/07/2025 SUCURSAL VIRTUA 0 IMPUESTO DL 3475 $33 $0 $-33", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-01", "description": "CARGO INTERES LC CTA CTE", "doc_number": null, "amount": 53, "direction": "debit", "balance": -86, "raw_line": " 01/07/2025 SUCURSAL VIRTUA 0 CARGO INTERES LC CTA CTE $53 $0 $-86", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-01", "description": "TRASPASO PARA CUBRIR SOBREGIRO", "doc_number": null, "amount": 86, "direction": "credit", "balance": 0, "raw_line": " 01/07/2025 SUCURSAL VIRTUA 0 TRASPASO PARA CUBRIR SOBREGIRO $0 $86 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-04", "description": "TRANSF PARA PAGO TARJETA CMR", "doc_number": null, "amount": 260110, "direction": "debit", "balance": -260110, "raw_line": " 04/07/2025 SUCURSAL VIRTUA 0 TRANSF PARA PAGO TARJETA CMR $260.110 $0 $-260.110", "platform": null, "real_origin": null, "counterparty": "PAGO TARJETA CMR", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-04", "description": "TRASPASO PARA CUBRIR SOBREGIRO", "doc_number": null, "amount": 260110, "direction": "credit", "balance": 0, "raw_line": " 04/07/2025 SUCURSAL VIRTUA 0 TRASPASO PARA CUBRIR SOBREGIRO $0 $260.110 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-17", "description": "TRANSF. DE VICENTE JOAQUIN TIRADO", "doc_number": null, "amount": 300000, "direction": "credit", "balance": 300000, "raw_line": " 17/07/2025 SUCURSAL VIRTUA 0 TRANSF. DE VICENTE JOAQUIN TIRADO $0 $300.000 $300.000", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-07-17", "description": "PAGO AUTOM. LINEA DE CREDITO", "doc_number": null, "amount": 300000, "direction": "debit", "balance": 0, "raw_line": " 17/07/2025 SUCURSAL VIRTUA 0 PAGO AUTOM. LINEA DE CREDITO $300.000 $0 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-28", "description": "TRANSF. PARA VICENTE TIRAD", "doc_number": null, "amount": 100000, "direction": "debit", "balance": -100000, "raw_line": " 28/07/2025 SUCURSAL VIRTUA 0 TRANSF. PARA VICENTE TIRAD $100.000 $0 $-100.000", "platform": null, "real_origin": null, "counterparty": "VICENTE TIRAD", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-07-28", "description": "TRANSF. PARA VICENTE TIRAD", "doc_number": null, "amount": 400000, "direction": "debit", "balance": -500000, "raw_line": " 28/07/2025 SUCURSAL VIRTUA 0 TRANSF. PARA VICENTE TIRAD $400.000 $0 $-500.000", "platform": null, "real_origin": null, "counterparty": "VICENTE TIRAD", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-07-28", "description": "TRASPASO PARA CUBRIR SOBREGIRO", "doc_number": null, "amount": 500000, "direction": "credit", "balance": 0, "raw_line": " 28/07/2025 SUCURSAL VIRTUA 0 TRASPASO PARA CUBRIR SOBREGIRO $0 $500.000 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-30", "description": "TRANSF. DE MURALLA SPA", "doc_number": null, "amount": 1048040, "direction": "credit", "balance": 1048040, "raw_line": " 30/07/2025 SUCURSAL VIRTUA 0 TRANSF. DE MURALLA SPA $0 $1.048.040 $1.048.040", "platform": null, "real_origin": null, "counterparty": "MURALLA SPA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-07-30", "description": "PAGO DE LINEA DE CREDITO", "doc_number": null, "amount": 510196, "direction": "debit", "balance": 537844, "raw_line": " 30/07/2025 SUCURSAL VIRTUA 0 PAGO DE LINEA DE CREDITO $510.196 $0 $537.844", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-30", "description": "TRANSF. PARA VICENTE TIRAD", "doc_number": null, "amount": 534844, "direction": "debit", "balance": 3000, "raw_line": " 30/07/2025 SUCURSAL VIRTUA 0 TRANSF. PARA VICENTE TIRAD $534.844 $0 $3.000", "platform": null, "real_origin": null, "counterparty": "VICENTE TIRAD", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/ae3840696cd4687b-ECBF_CC_202508_01-983-233161-9.pdf"}, {"statement_id": "62d34c9d", "gmail_id": "19a26ce63a3233b9", "bank": "Falabella", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/b6b74352c377e7ea-52318858.pdf", "parser_version": "falabella/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/b6b74352c377e7ea-52318858.pdf"}, {"statement_id": "4269176c", "gmail_id": "1993de7a9d7a89dd", "bank": "Falabella", "doc_type": "linea_credito", "owner": "Vicente", "account_ref": "02-983-233161-3", "account_last4": "1613", "period_start": "2025-08-01", "period_end": "2025-08-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/b7dace4723724bce-ECBF_LC_202509_02-983-233161-3.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-08-01", "description": "TRASPASO PARA CUBRIR SOBREGIRO 0.1051%", "doc_number": null, "amount": 397000, "direction": "credit", "balance": 417, "raw_line": " 01/08/2025 TRASPASO PARA CUBRIR SOBREGIRO $397.000 $0 $397.000 0.1051% $417", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-04", "description": "PAGO AUTOM LINEA DE CREDITO 0.1051%", "doc_number": null, "amount": 6751, "direction": "debit", "balance": 410, "raw_line": " 04/08/2025 PAGO AUTOM LINEA DE CREDITO $0 $6.751 $390.249 0.1051% $410", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-07", "description": "PAGO AUTOM LINEA DE CREDITO 0.1051%", "doc_number": null, "amount": 10050, "direction": "debit", "balance": 400, "raw_line": " 07/08/2025 PAGO AUTOM LINEA DE CREDITO $0 $10.050 $380.199 0.1051% $400", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-11", "description": "TRASPASO PARA CUBRIR SOBREGIRO 0.1051%", "doc_number": null, "amount": 529199, "direction": "credit", "balance": 556, "raw_line": " 11/08/2025 TRASPASO PARA CUBRIR SOBREGIRO $149.000 $0 $529.199 0.1051% $556", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-18", "description": "PAGO AUTOM LINEA DE CREDITO 0.1058%", "doc_number": null, "amount": 200000, "direction": "debit", "balance": 348, "raw_line": " 18/08/2025 PAGO AUTOM LINEA DE CREDITO $0 $200.000 $329.199 0.1058% $348", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-08-25", "description": "TRASPASO PARA CUBRIR SOBREGIRO 0.1058%", "doc_number": null, "amount": 529199, "direction": "credit", "balance": 560, "raw_line": " 25/08/2025 TRASPASO PARA CUBRIR SOBREGIRO $200.000 $0 $529.199 0.1058% $560", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/b7dace4723724bce-ECBF_LC_202509_02-983-233161-3.pdf"}, {"statement_id": "f5541a19", "gmail_id": "1982f9a6143803f5", "bank": "Falabella", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "01-983-233161-9", "account_last4": "1619", "period_start": "2025-06-16", "period_end": "2025-06-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/c42fc23e20faf175-ECBF_CC_202507_01-983-233161-9.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-06-30", "description": "TRANSF. PARA VICENTE TIRAD", "doc_number": null, "amount": 50000, "direction": "debit", "balance": -50000, "raw_line": " 30/06/2025 SUCURSAL VIRTUA 0 TRANSF. PARA VICENTE TIRAD $50.000 $0 $-50.000", "platform": null, "real_origin": null, "counterparty": "VICENTE TIRAD", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-06-30", "description": "TRASPASO PARA CUBRIR SOBREGIRO", "doc_number": null, "amount": 50000, "direction": "credit", "balance": 0, "raw_line": " 30/06/2025 SUCURSAL VIRTUA 0 TRASPASO PARA CUBRIR SOBREGIRO $0 $50.000 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/c42fc23e20faf175-ECBF_CC_202507_01-983-233161-9.pdf"}, {"statement_id": "e4cee1b5", "gmail_id": "198c4904a0a194a6", "bank": "Falabella", "doc_type": "linea_credito", "owner": "Vicente", "account_ref": "02-983-233161-3", "account_last4": "1613", "period_start": "2025-07-01", "period_end": "2025-07-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/c6317d8220b42a5b-ECBF_LC_202508_02-983-233161-3.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-07-01", "description": "TRASPASO PARA CUBRIR SOBREGIRO 0.1063%", "doc_number": null, "amount": 50086, "direction": "credit", "balance": 53, "raw_line": " 01/07/2025 TRASPASO PARA CUBRIR SOBREGIRO $86 $0 $50.086 0.1063% $53", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-04", "description": "TRASPASO PARA CUBRIR SOBREGIRO 0.1063%", "doc_number": null, "amount": 310196, "direction": "credit", "balance": 330, "raw_line": " 04/07/2025 TRASPASO PARA CUBRIR SOBREGIRO $260.110 $0 $310.196 0.1063% $330", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-17", "description": "PAGO AUTOM LINEA DE CREDITO 0.1051%", "doc_number": null, "amount": 300000, "direction": "debit", "balance": 11, "raw_line": " 17/07/2025 PAGO AUTOM LINEA DE CREDITO $0 $300.000 $10.196 0.1051% $11", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-28", "description": "TRASPASO PARA CUBRIR SOBREGIRO 0.1051%", "doc_number": null, "amount": 510196, "direction": "credit", "balance": 536, "raw_line": " 28/07/2025 TRASPASO PARA CUBRIR SOBREGIRO $500.000 $0 $510.196 0.1051% $536", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-30", "description": "PAGO DE LINEA DE CREDITO 0.1051%", "doc_number": null, "amount": 510196, "direction": "debit", "balance": 0, "raw_line": " 30/07/2025 PAGO DE LINEA DE CREDITO $0 $510.196 $0 0.1051% $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/c6317d8220b42a5b-ECBF_LC_202508_02-983-233161-3.pdf"}, {"statement_id": "6236ac33", "gmail_id": "19a0871a2e3d9fa9", "bank": "Falabella", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "01-983-233161-9", "account_last4": "1619", "period_start": "2025-09-01", "period_end": "2025-09-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/e9ec4eefd8a4d221-ECBF_CC_202510_01-983-233161-9.pdf", "parser_version": "falabella/1", "transactions": [{"date": "2025-09-01", "description": "CARGO INTSOBREGIRO NO PACTADO", "doc_number": null, "amount": 22, "direction": "debit", "balance": -22, "raw_line": " 01/09/2025 SUCURSAL VIRTUA 0 CARGO INTSOBREGIRO NO PACTADO $22 $0 $-22", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-09-01", "description": "IMPUESTO DL 3475", "doc_number": null, "amount": 289, "direction": "debit", "balance": -311, "raw_line": " 01/09/2025 SUCURSAL VIRTUA 0 IMPUESTO DL 3475 $289 $0 $-311", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-09-01", "description": "CARGO INTERES LC CTA CTE", "doc_number": null, "amount": 14346, "direction": "debit", "balance": -14657, "raw_line": " 01/09/2025 SUCURSAL VIRTUA 0 CARGO INTERES LC CTA CTE $14.346 $0 $-14.657", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-09-01", "description": "TRASPASO PARA CUBRIR SOBREGIRO", "doc_number": null, "amount": 801, "direction": "credit", "balance": -13856, "raw_line": " 01/09/2025 SUCURSAL VIRTUA 0 TRASPASO PARA CUBRIR SOBREGIRO $0 $801 $-13.856", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Falabella/e9ec4eefd8a4d221-ECBF_CC_202510_01-983-233161-9.pdf"}, {"statement_id": "ff03009d", "gmail_id": "19bfa87d42cb3b96", "bank": "BancoEstado", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "18393009", "account_last4": "3009", "period_start": "2025-08-04", "period_end": "2025-09-26", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/08b753ac9f3166e4-Cartola_CuentaRUT.pdf", "parser_version": "bancoestado/1", "transactions": [{"date": "2025-08-04", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8048770", "amount": 770, "direction": "debit", "balance": 404201, "raw_line": "8048770 PAGO AUTOMATICO PASAJE QR 001 770 0 04/08/2025 404.201", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-05", "description": "COMISION TEF TERCEROS A OTROS BANCO", "doc_number": "8012104", "amount": 300, "direction": "debit", "balance": 403901, "raw_line": "8012104 COMISION TEF TERCEROS A OTROS BANCO 001 300 0 05/08/2025 403.901", "platform": null, "real_origin": null, "counterparty": "TERCEROS A OTROS BANCO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-08-05", "description": "TEF A VICENTE TIRADO ANDRESEN 19301", "doc_number": "8012104", "amount": 200000, "direction": "debit", "balance": 203901, "raw_line": "8012104 TEF A VICENTE TIRADO ANDRESEN 19301 001 200.000 0 05/08/2025 203.901", "platform": null, "real_origin": null, "counterparty": "VICENTE TIRADO ANDRESEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-08-05", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8082791", "amount": 1580, "direction": "debit", "balance": 202321, "raw_line": "8082791 PAGO AUTOMATICO PASAJE QR 001 1.580 0 05/08/2025 202.321", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-07", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8084122", "amount": 870, "direction": "debit", "balance": 201451, "raw_line": "8084122 PAGO AUTOMATICO PASAJE QR 001 870 0 07/08/2025 201.451", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-08", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8014753", "amount": 2430, "direction": "debit", "balance": 199021, "raw_line": "8014753 PAGO AUTOMATICO PASAJE QR 001 2.430 0 08/08/2025 199.021", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-11", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8062282", "amount": 770, "direction": "debit", "balance": 198251, "raw_line": "8062282 PAGO AUTOMATICO PASAJE QR 001 770 0 11/08/2025 198.251", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-12", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8068021", "amount": 790, "direction": "debit", "balance": 197461, "raw_line": "8068021 PAGO AUTOMATICO PASAJE QR 001 790 0 12/08/2025 197.461", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-13", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8017803", "amount": 790, "direction": "debit", "balance": 196671, "raw_line": "8017803 PAGO AUTOMATICO PASAJE QR 001 790 0 13/08/2025 196.671", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-18", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8079538", "amount": 1560, "direction": "debit", "balance": 195111, "raw_line": "8079538 PAGO AUTOMATICO PASAJE QR 001 1.560 0 18/08/2025 195.111", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-18", "description": "TEF DESDE BANCO DE CREDITOS E INVER", "doc_number": "3706939", "amount": 99060, "direction": "credit", "balance": 294171, "raw_line": "3706939 TEF DESDE BANCO DE CREDITOS E INVER 001 0 99.060 18/08/2025 294.171", "platform": null, "real_origin": null, "counterparty": "SDE BANCO DE CREDITOS E INVER", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-08-18", "description": "COMISION TEF TERCEROS A OTROS BANCO", "doc_number": "8045586", "amount": 300, "direction": "debit", "balance": 293871, "raw_line": "8045586 COMISION TEF TERCEROS A OTROS BANCO 001 300 0 18/08/2025 293.871", "platform": null, "real_origin": null, "counterparty": "TERCEROS A OTROS BANCO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-08-18", "description": "TEF A VICENTE TIRADO 19832331619", "doc_number": "8045586", "amount": 200000, "direction": "debit", "balance": 93871, "raw_line": "8045586 TEF A VICENTE TIRADO 19832331619 001 200.000 0 18/08/2025 93.871", "platform": null, "real_origin": null, "counterparty": "VICENTE TIRADO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-08-18", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8021979", "amount": 770, "direction": "debit", "balance": 93101, "raw_line": "8021979 PAGO AUTOMATICO PASAJE QR 001 770 0 18/08/2025 93.101", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-21", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8071050", "amount": 1540, "direction": "debit", "balance": 91561, "raw_line": "8071050 PAGO AUTOMATICO PASAJE QR 001 1.540 0 21/08/2025 91.561", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-25", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8086722", "amount": 1560, "direction": "debit", "balance": 90001, "raw_line": "8086722 PAGO AUTOMATICO PASAJE QR 001 1.560 0 25/08/2025 90.001", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-25", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8097392", "amount": 770, "direction": "debit", "balance": 89231, "raw_line": "8097392 PAGO AUTOMATICO PASAJE QR 001 770 0 25/08/2025 89.231", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-02", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8072364", "amount": 2370, "direction": "debit", "balance": 86861, "raw_line": "8072364 PAGO AUTOMATICO PASAJE QR 001 2.370 0 02/09/2025 86.861", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-03", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8009985", "amount": 2370, "direction": "debit", "balance": 84491, "raw_line": "8009985 PAGO AUTOMATICO PASAJE QR 001 2.370 0 03/09/2025 84.491", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-04", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8099845", "amount": 2370, "direction": "credit", "balance": 86861, "raw_line": "8099845 PAGO AUTOMATICO PASAJE QR 001 0 2.370 04/09/2025 86.861", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-09-08", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8100857", "amount": 770, "direction": "debit", "balance": 86091, "raw_line": "8100857 PAGO AUTOMATICO PASAJE QR 001 770 0 08/09/2025 86.091", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-09", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8040801", "amount": 770, "direction": "debit", "balance": 85321, "raw_line": "8040801 PAGO AUTOMATICO PASAJE QR 001 770 0 09/09/2025 85.321", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-11", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8075115", "amount": 2270, "direction": "debit", "balance": 83051, "raw_line": "8075115 PAGO AUTOMATICO PASAJE QR 001 2.270 0 11/09/2025 83.051", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-12", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8084701", "amount": 770, "direction": "debit", "balance": 82281, "raw_line": "8084701 PAGO AUTOMATICO PASAJE QR 001 770 0 12/09/2025 82.281", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-15", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8002638", "amount": 1660, "direction": "debit", "balance": 80621, "raw_line": "8002638 PAGO AUTOMATICO PASAJE QR 001 1.660 0 15/09/2025 80.621", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-15", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8055218", "amount": 1580, "direction": "debit", "balance": 79041, "raw_line": "8055218 PAGO AUTOMATICO PASAJE QR 001 1.580 0 15/09/2025 79.041", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-16", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8017772", "amount": 1580, "direction": "debit", "balance": 77461, "raw_line": "8017772 PAGO AUTOMATICO PASAJE QR 001 1.580 0 16/09/2025 77.461", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-17", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8100241", "amount": 1640, "direction": "debit", "balance": 75821, "raw_line": "8100241 PAGO AUTOMATICO PASAJE QR 001 1.640 0 17/09/2025 75.821", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-22", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8072459", "amount": 1540, "direction": "debit", "balance": 74281, "raw_line": "8072459 PAGO AUTOMATICO PASAJE QR 001 1.540 0 22/09/2025 74.281", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-22", "description": "COMISION TEF TERCEROS A OTROS BANCO", "doc_number": "8068832", "amount": 300, "direction": "debit", "balance": 73981, "raw_line": "8068832 COMISION TEF TERCEROS A OTROS BANCO 001 300 0 22/09/2025 73.981", "platform": null, "real_origin": null, "counterparty": "TERCEROS A OTROS BANCO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-09-22", "description": "TEF A VICENTE JOAQUIN TIRADO ANDRES", "doc_number": "8068832", "amount": 20000, "direction": "debit", "balance": 53981, "raw_line": "8068832 TEF A VICENTE JOAQUIN TIRADO ANDRES 001 20.000 0 22/09/2025 53.981", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO ANDRES", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-09-22", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8012175", "amount": 770, "direction": "debit", "balance": 53211, "raw_line": "8012175 PAGO AUTOMATICO PASAJE QR 001 770 0 22/09/2025 53.211", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-22", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8027614", "amount": 1580, "direction": "debit", "balance": 51631, "raw_line": "8027614 PAGO AUTOMATICO PASAJE QR 001 1.580 0 22/09/2025 51.631", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-23", "description": "TEF A LUIS ISAIAS FLORES FUENZALIDA", "doc_number": "8054911", "amount": 3500, "direction": "debit", "balance": 48131, "raw_line": "8054911 TEF A LUIS ISAIAS FLORES FUENZALIDA 001 3.500 0 23/09/2025 48.131", "platform": null, "real_origin": null, "counterparty": "LUIS ISAIAS FLORES FUENZALIDA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-09-24", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8067186", "amount": 1580, "direction": "debit", "balance": 46551, "raw_line": "8067186 PAGO AUTOMATICO PASAJE QR 001 1.580 0 24/09/2025 46.551", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-26", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8053908", "amount": 790, "direction": "debit", "balance": 45761, "raw_line": "8053908 PAGO AUTOMATICO PASAJE QR 001 790 0 26/09/2025 45.761", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/08b753ac9f3166e4-Cartola_CuentaRUT.pdf"}, {"statement_id": "2aa6d4eb", "gmail_id": "19c21bb117be9c43", "bank": "BancoEstado", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "230-0-006888-8", "account_last4": "8888", "period_start": "2025-12-31", "period_end": "2026-01-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/225361fe9acbcff5-Cartola_Cuenta_Corriente.pdf", "parser_version": "bancoestado/1", "transactions": [{"date": "2026-01-12", "description": "TEF DE CUENTA TIRADO ANDRESEN VICEN", "doc_number": "8067673", "amount": 56529, "direction": "credit", "balance": 56529, "raw_line": "8067673 TEF DE CUENTA TIRADO ANDRESEN VICEN 001 56.529 12/01/2026 56.529", "platform": null, "real_origin": null, "counterparty": "CUENTA TIRADO ANDRESEN VICEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-12", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7016049", "amount": 42529, "direction": "debit", "balance": 14000, "raw_line": "7016049 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 42.529 12/01/2026 14.000", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-12", "description": "TEF A ARISMENDI ACEVEDO CRISTIAN YO", "doc_number": "7058622", "amount": 14000, "direction": "debit", "balance": null, "raw_line": "7058622 TEF A ARISMENDI ACEVEDO CRISTIAN YO 001 14.000 12/01/2026", "platform": null, "real_origin": null, "counterparty": "ARISMENDI ACEVEDO CRISTIAN YO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-01-26", "description": "TEF DE CUENTA TIRADO ANDRESEN VICEN", "doc_number": "8032106", "amount": 4510, "direction": "credit", "balance": 4510, "raw_line": "8032106 TEF DE CUENTA TIRADO ANDRESEN VICEN 001 4.510 26/01/2026 4.510", "platform": null, "real_origin": null, "counterparty": "CUENTA TIRADO ANDRESEN VICEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-26", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7036950", "amount": 4510, "direction": "debit", "balance": null, "raw_line": "7036950 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 4.510 26/01/2026", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/225361fe9acbcff5-Cartola_Cuenta_Corriente.pdf"}, {"statement_id": "e8db1168", "gmail_id": "1983b43a39bb0db1", "bank": "BancoEstado", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/25f50d80eb3b9604-CONTRATO_24_HORAS_PERSONA_NATURAL.pdf.pdf", "parser_version": "bancoestado/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/25f50d80eb3b9604-CONTRATO_24_HORAS_PERSONA_NATURAL.pdf.pdf"}, {"statement_id": "2b9896a8", "gmail_id": "1983b43a39bb0db1", "bank": "BancoEstado", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/293e0d2d76636dad-TERMINOS_Y_CONDIONES_CUENTA_CORRIENTE_DIGITAL.pdf.pdf", "parser_version": "bancoestado/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/293e0d2d76636dad-TERMINOS_Y_CONDIONES_CUENTA_CORRIENTE_DIGITAL.pdf.pdf"}, {"statement_id": "5b21f059", "gmail_id": "1983b43a39bb0db1", "bank": "BancoEstado", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/4b13028f732f8376-HOJA_RESUMEN_CUENTA_CORRIENTE.pdf.pdf", "parser_version": "bancoestado/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/4b13028f732f8376-HOJA_RESUMEN_CUENTA_CORRIENTE.pdf.pdf"}, {"statement_id": "6824f9a1", "gmail_id": "1983b43a39bb0db1", "bank": "BancoEstado", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/7c7c9972d225f1d9-CONTRATO_CUENTA_CORRIENTE.pdf.pdf", "parser_version": "bancoestado/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/7c7c9972d225f1d9-CONTRATO_CUENTA_CORRIENTE.pdf.pdf"}, {"statement_id": "61089d66", "gmail_id": "19d82ef0393b3a9f", "bank": "BancoEstado", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "18393009", "account_last4": "3009", "period_start": "2026-01-05", "period_end": "2026-02-17", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/801147633cdabaf1-Cartola_CuentaRUT.pdf", "parser_version": "bancoestado/1", "transactions": [{"date": "2026-01-05", "description": "TEF DE VICENTE JOAQUIN TIRADO ANDRE", "doc_number": "3136093", "amount": 9000, "direction": "credit", "balance": 9501, "raw_line": "3136093 TEF DE VICENTE JOAQUIN TIRADO ANDRE 001 0 9.000 05/01/2026 9.501", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO ANDRE", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-06", "description": "TEF A VICENTE JOAQUIN TIRADO ANDRES", "doc_number": "8044681", "amount": 8000, "direction": "debit", "balance": 1501, "raw_line": "8044681 TEF A VICENTE JOAQUIN TIRADO ANDRES 001 8.000 0 06/01/2026 1.501", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO ANDRES", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-06", "description": "COMISION TEF TERCEROS A OTROS BANCO", "doc_number": "8044681", "amount": 300, "direction": "debit", "balance": 1201, "raw_line": "8044681 COMISION TEF TERCEROS A OTROS BANCO 001 300 0 06/01/2026 1.201", "platform": null, "real_origin": null, "counterparty": "TERCEROS A OTROS BANCO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-01-06", "description": "PAGO APP PASAJE QR", "doc_number": "8090385", "amount": 770, "direction": "debit", "balance": 431, "raw_line": "8090385 PAGO APP PASAJE QR 001 770 0 06/01/2026 431", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-06", "description": "TEF DESDE BANCO SANTANDER-CHILE", "doc_number": "7191781", "amount": 1000000, "direction": "credit", "balance": 1000431, "raw_line": "7191781 TEF DESDE BANCO SANTANDER-CHILE 001 0 1.000.000 06/01/2026 1.000.431", "platform": null, "real_origin": null, "counterparty": "SDE BANCO SANTANDER", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-01-06", "description": "COMISION TEF TERCEROS A OTROS BANCO", "doc_number": "8008360", "amount": 300, "direction": "debit", "balance": 1000131, "raw_line": "8008360 COMISION TEF TERCEROS A OTROS BANCO 001 300 0 06/01/2026 1.000.131", "platform": null, "real_origin": null, "counterparty": "TERCEROS A OTROS BANCO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-01-06", "description": "TEF A VICENTE JOAQUIN TIRADO ANDRES", "doc_number": "8008360", "amount": 1000000, "direction": "debit", "balance": 131, "raw_line": "8008360 TEF A VICENTE JOAQUIN TIRADO ANDRES 001 1.000.000 0 06/01/2026 131", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO ANDRES", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-07", "description": "TEF DESDE MERCADO PAGO", "doc_number": "6453928", "amount": 5000, "direction": "credit", "balance": 5131, "raw_line": "6453928 TEF DESDE MERCADO PAGO 001 0 5.000 07/01/2026 5.131", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": "SDE MERCADO PAGO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-01-07", "description": "PAGO APP PASAJE QR", "doc_number": "8099482", "amount": 1580, "direction": "debit", "balance": 3551, "raw_line": "8099482 PAGO APP PASAJE QR 001 1.580 0 07/01/2026 3.551", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-07", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8053185", "amount": 790, "direction": "debit", "balance": 2761, "raw_line": "8053185 PAGO AUTOMATICO PASAJE QR 001 790 0 07/01/2026 2.761", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-08", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8042554", "amount": 770, "direction": "debit", "balance": 1991, "raw_line": "8042554 PAGO AUTOMATICO PASAJE QR 001 770 0 08/01/2026 1.991", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-12", "description": "TEF DESDE BANCO SANTANDER-CHILE", "doc_number": "0226770", "amount": 400000, "direction": "credit", "balance": 401991, "raw_line": "0226770 TEF DESDE BANCO SANTANDER-CHILE 001 0 400.000 12/01/2026 401.991", "platform": null, "real_origin": null, "counterparty": "SDE BANCO SANTANDER", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-01-12", "description": "TEF A ANGELO JOSE ZARRAGA ACOSTA 77", "doc_number": "8053355", "amount": 5000, "direction": "debit", "balance": 396991, "raw_line": "8053355 TEF A ANGELO JOSE ZARRAGA ACOSTA 77 001 5.000 0 12/01/2026 396.991", "platform": null, "real_origin": null, "counterparty": "ANGELO JOSE ZARRAGA ACOSTA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-01-12", "description": "COMISION TEF TERCEROS A OTROS BANCO", "doc_number": "8053355", "amount": 300, "direction": "debit", "balance": 396691, "raw_line": "8053355 COMISION TEF TERCEROS A OTROS BANCO 001 300 0 12/01/2026 396.691", "platform": null, "real_origin": null, "counterparty": "TERCEROS A OTROS BANCO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-01-12", "description": "TEF A VICENTE JOAQUIN TIRADO ANDRES", "doc_number": "8015864", "amount": 396000, "direction": "debit", "balance": 691, "raw_line": "8015864 TEF A VICENTE JOAQUIN TIRADO ANDRES 001 396.000 0 12/01/2026 691", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO ANDRES", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-12", "description": "COMISION TEF TERCEROS A OTROS BANCO", "doc_number": "8015864", "amount": 300, "direction": "debit", "balance": 391, "raw_line": "8015864 COMISION TEF TERCEROS A OTROS BANCO 001 300 0 12/01/2026 391", "platform": null, "real_origin": null, "counterparty": "TERCEROS A OTROS BANCO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-01-12", "description": "TEF DESDE MERCADO PAGO", "doc_number": "8192666", "amount": 1978, "direction": "credit", "balance": 2369, "raw_line": "8192666 TEF DESDE MERCADO PAGO 001 0 1.978 12/01/2026 2.369", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": "SDE MERCADO PAGO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-01-12", "description": "PAGO APP PASAJE QR", "doc_number": "8016019", "amount": 1540, "direction": "debit", "balance": 829, "raw_line": "8016019 PAGO APP PASAJE QR 001 1.540 0 12/01/2026 829", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-12", "description": "TEF DESDE MERCADO PAGO", "doc_number": "5267741", "amount": 55700, "direction": "credit", "balance": 56529, "raw_line": "5267741 TEF DESDE MERCADO PAGO 001 0 55.700 12/01/2026 56.529", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": "SDE MERCADO PAGO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-01-12", "description": "TEF A MI CUENTA CTE 23000068888", "doc_number": "8067673", "amount": 56529, "direction": "debit", "balance": 0, "raw_line": "8067673 TEF A MI CUENTA CTE 23000068888 001 56.529 0 12/01/2026 0", "platform": null, "real_origin": null, "counterparty": "MI CUENTA CTE", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-01-12", "description": "TEF DE VICENTE JOAQUIN TIRADO ANDRE", "doc_number": "3251102", "amount": 10000, "direction": "credit", "balance": 10000, "raw_line": "3251102 TEF DE VICENTE JOAQUIN TIRADO ANDRE 001 0 10.000 12/01/2026 10.000", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO ANDRE", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-12", "description": "PAGO APP PASAJE QR", "doc_number": "8093479", "amount": 1540, "direction": "debit", "balance": 8460, "raw_line": "8093479 PAGO APP PASAJE QR 001 1.540 0 12/01/2026 8.460", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-13", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8018382", "amount": 2370, "direction": "debit", "balance": 6090, "raw_line": "8018382 PAGO AUTOMATICO PASAJE QR 001 2.370 0 13/01/2026 6.090", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-19", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8010461", "amount": 790, "direction": "debit", "balance": 5300, "raw_line": "8010461 PAGO AUTOMATICO PASAJE QR 001 790 0 19/01/2026 5.300", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-22", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8026029", "amount": 790, "direction": "debit", "balance": 4510, "raw_line": "8026029 PAGO AUTOMATICO PASAJE QR 001 790 0 22/01/2026 4.510", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-26", "description": "TEF A MI CUENTA CTE 23000068888", "doc_number": "8032106", "amount": 4510, "direction": "debit", "balance": 0, "raw_line": "8032106 TEF A MI CUENTA CTE 23000068888 001 4.510 0 26/01/2026 0", "platform": null, "real_origin": null, "counterparty": "MI CUENTA CTE", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-02-06", "description": "TEF DESDE MERCADO PAGO", "doc_number": "6172653", "amount": 105000, "direction": "credit", "balance": 105000, "raw_line": "6172653 TEF DESDE MERCADO PAGO 001 0 105.000 06/02/2026 105.000", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": "SDE MERCADO PAGO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-02-06", "description": "COMPRAQUI WEB ENEL COMPRAQUI", "doc_number": "8081117", "amount": 103019, "direction": "debit", "balance": 1981, "raw_line": "8081117 COMPRAQUI WEB ENEL COMPRAQUI 001 103.019 0 06/02/2026 1.981", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-11", "description": "TEF DESDE MERCADO PAGO", "doc_number": "8384791", "amount": 5000, "direction": "credit", "balance": 6981, "raw_line": "8384791 TEF DESDE MERCADO PAGO 001 0 5.000 11/02/2026 6.981", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": "SDE MERCADO PAGO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-02-11", "description": "PAGO APP PASAJE QR", "doc_number": "8040030", "amount": 2270, "direction": "debit", "balance": 4711, "raw_line": "8040030 PAGO APP PASAJE QR 001 2.270 0 11/02/2026 4.711", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-11", "description": "TEF DESDE MERCADO PAGO", "doc_number": "8411371", "amount": 5000, "direction": "credit", "balance": 9711, "raw_line": "8411371 TEF DESDE MERCADO PAGO 001 0 5.000 11/02/2026 9.711", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": "SDE MERCADO PAGO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-02-11", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8006436", "amount": 790, "direction": "debit", "balance": 8921, "raw_line": "8006436 PAGO AUTOMATICO PASAJE QR 001 790 0 11/02/2026 8.921", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-13", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8081961", "amount": 770, "direction": "debit", "balance": 8151, "raw_line": "8081961 PAGO AUTOMATICO PASAJE QR 001 770 0 13/02/2026 8.151", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-16", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8043949", "amount": 1540, "direction": "debit", "balance": 6611, "raw_line": "8043949 PAGO AUTOMATICO PASAJE QR 001 1.540 0 16/02/2026 6.611", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-16", "description": "TEF A ALEXANDRA VIZCAINO", "doc_number": "8044971", "amount": 2500, "direction": "debit", "balance": 4111, "raw_line": "8044971 TEF A ALEXANDRA VIZCAINO 001 2.500 0 16/02/2026 4.111", "platform": null, "real_origin": null, "counterparty": "ALEXANDRA VIZCAINO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-02-17", "description": "TEF A LUIS ENRIQUE PEROZO VERA 1094", "doc_number": "8086541", "amount": 3000, "direction": "debit", "balance": 1111, "raw_line": "8086541 TEF A LUIS ENRIQUE PEROZO VERA 1094 001 3.000 0 17/02/2026 1.111", "platform": null, "real_origin": null, "counterparty": "LUIS ENRIQUE PEROZO VERA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/801147633cdabaf1-Cartola_CuentaRUT.pdf"}, {"statement_id": "ae523736", "gmail_id": "1983b4158a90df36", "bank": "BancoEstado", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/9c91eaf66a6dc4ee-DECLARACION_FATCA.pdf", "parser_version": "bancoestado/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/9c91eaf66a6dc4ee-DECLARACION_FATCA.pdf"}, {"statement_id": "2f62629d", "gmail_id": "19d4d03bb18f07c5", "bank": "BancoEstado", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "230-0-006888-8", "account_last4": "8888", "period_start": "2025-12-31", "period_end": "2026-03-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/9f2604c99e495d36-Cartola_Cuenta_Corriente.pdf", "parser_version": "bancoestado/1", "transactions": [{"date": "2026-01-12", "description": "TEF DE CUENTA TIRADO ANDRESEN VICEN", "doc_number": "8067673", "amount": 56529, "direction": "credit", "balance": 56529, "raw_line": "8067673 TEF DE CUENTA TIRADO ANDRESEN VICEN 001 56.529 12/01/2026 56.529", "platform": null, "real_origin": null, "counterparty": "CUENTA TIRADO ANDRESEN VICEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-12", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7016049", "amount": 42529, "direction": "debit", "balance": 14000, "raw_line": "7016049 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 42.529 12/01/2026 14.000", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-12", "description": "TEF A ARISMENDI ACEVEDO CRISTIAN YO", "doc_number": "7058622", "amount": 14000, "direction": "debit", "balance": null, "raw_line": "7058622 TEF A ARISMENDI ACEVEDO CRISTIAN YO 001 14.000 12/01/2026", "platform": null, "real_origin": null, "counterparty": "ARISMENDI ACEVEDO CRISTIAN YO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-01-26", "description": "TEF DE CUENTA TIRADO ANDRESEN VICEN", "doc_number": "8032106", "amount": 4510, "direction": "credit", "balance": 4510, "raw_line": "8032106 TEF DE CUENTA TIRADO ANDRESEN VICEN 001 4.510 26/01/2026 4.510", "platform": null, "real_origin": null, "counterparty": "CUENTA TIRADO ANDRESEN VICEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-26", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7036950", "amount": 4510, "direction": "debit", "balance": null, "raw_line": "7036950 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 4.510 26/01/2026", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-03-06", "description": "TEF DE CUENTA TIRADO ANDRESEN VICEN", "doc_number": "8091517", "amount": 513436, "direction": "credit", "balance": 513436, "raw_line": "8091517 TEF DE CUENTA TIRADO ANDRESEN VICEN 001 513.436 06/03/2026 513.436", "platform": null, "real_origin": null, "counterparty": "CUENTA TIRADO ANDRESEN VICEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-03-06", "description": "TEF A RUT 78188363-8", "doc_number": "7022767", "amount": 300000, "direction": "debit", "balance": 213436, "raw_line": "7022767 TEF A RUT 78188363-8 001 300.000 06/03/2026 213.436", "platform": null, "real_origin": null, "counterparty": "RUT", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "78188363", "flow_type": "inter_person", "internal": false}, {"date": "2026-03-11", "description": "PAGO APP PASAJE QR", "doc_number": "4219482", "amount": 795, "direction": "debit", "balance": 212641, "raw_line": "4219482 PAGO APP PASAJE QR 001 795 11/03/2026 212.641", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-11", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7070752", "amount": 100000, "direction": "debit", "balance": 112641, "raw_line": "7070752 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 100.000 11/03/2026 112.641", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-03-11", "description": "PAGO APP PASAJE QR", "doc_number": "4219482", "amount": 895, "direction": "debit", "balance": 111746, "raw_line": "4219482 PAGO APP PASAJE QR 001 895 11/03/2026 111.746", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-12", "description": "", "doc_number": "7046980", "amount": 100000, "direction": "debit", "balance": 11746, "raw_line": "7046980 001 100.000 12/03/2026 11.746", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-16", "description": "TEF A BRUNA PEREZ DARWIN ALEJANDRO", "doc_number": "7054041", "amount": 11746, "direction": "debit", "balance": null, "raw_line": "7054041 TEF A BRUNA PEREZ DARWIN ALEJANDRO 001 11.746 16/03/2026", "platform": null, "real_origin": null, "counterparty": "BRUNA PEREZ DARWIN ALEJANDRO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/9f2604c99e495d36-Cartola_Cuenta_Corriente.pdf"}, {"statement_id": "ebfdaa32", "gmail_id": "19b3b7f183262c27", "bank": "BancoEstado", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "18393009", "account_last4": "3009", "period_start": "2025-01-06", "period_end": "2025-08-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/a2eb2e6068aee2e4-Cartola_CuentaRUT.pdf", "parser_version": "bancoestado/1", "transactions": [{"date": "2025-01-06", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8039355", "amount": 770, "direction": "debit", "balance": 1291, "raw_line": "8039355 PAGO AUTOMATICO PASAJE QR 001 770 0 06/01/2025 1.291", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-01-13", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8056691", "amount": 750, "direction": "debit", "balance": 541, "raw_line": "8056691 PAGO AUTOMATICO PASAJE QR 001 750 0 13/01/2025 541", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-03-18", "description": "TEF DESDE BANCO DE CHILE EDWARDS CR", "doc_number": "1028040", "amount": 20000, "direction": "credit", "balance": 20541, "raw_line": "1028040 TEF DESDE BANCO DE CHILE EDWARDS CR 001 0 20.000 18/03/2025 20.541", "platform": null, "real_origin": null, "counterparty": "SDE BANCO DE CHILE EDWARDS CR", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-03-18", "description": "PAGO APP PASAJE QR", "doc_number": "8098704", "amount": 1620, "direction": "debit", "balance": 18921, "raw_line": "8098704 PAGO APP PASAJE QR 001 1.620 0 18/03/2025 18.921", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-03-19", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8085477", "amount": 2370, "direction": "debit", "balance": 16551, "raw_line": "8085477 PAGO AUTOMATICO PASAJE QR 001 2.370 0 19/03/2025 16.551", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-03-20", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8045242", "amount": 710, "direction": "debit", "balance": 15841, "raw_line": "8045242 PAGO AUTOMATICO PASAJE QR 001 710 0 20/03/2025 15.841", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-03-24", "description": "TEF A DORIS MACARENA LOPEZ RAVANAL", "doc_number": "8049977", "amount": 2000, "direction": "debit", "balance": 13841, "raw_line": "8049977 TEF A DORIS MACARENA LOPEZ RAVANAL 001 2.000 0 24/03/2025 13.841", "platform": null, "real_origin": null, "counterparty": "DORIS MACARENA LOPEZ RAVANAL", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-03-24", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8010945", "amount": 1560, "direction": "debit", "balance": 12281, "raw_line": "8010945 PAGO AUTOMATICO PASAJE QR 001 1.560 0 24/03/2025 12.281", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-03-26", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8008795", "amount": 790, "direction": "debit", "balance": 11491, "raw_line": "8008795 PAGO AUTOMATICO PASAJE QR 001 790 0 26/03/2025 11.491", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-03-31", "description": "TEF A JOSE LOPEZ", "doc_number": "8091575", "amount": 6000, "direction": "debit", "balance": 5491, "raw_line": "8091575 TEF A JOSE LOPEZ 001 6.000 0 31/03/2025 5.491", "platform": null, "real_origin": null, "counterparty": "JOSE LOPEZ", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-03-31", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8080858", "amount": 790, "direction": "debit", "balance": 4701, "raw_line": "8080858 PAGO AUTOMATICO PASAJE QR 001 790 0 31/03/2025 4.701", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-04-01", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8026670", "amount": 790, "direction": "debit", "balance": 3911, "raw_line": "8026670 PAGO AUTOMATICO PASAJE QR 001 790 0 01/04/2025 3.911", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-04-07", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8029122", "amount": 790, "direction": "debit", "balance": 3121, "raw_line": "8029122 PAGO AUTOMATICO PASAJE QR 001 790 0 07/04/2025 3.121", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-04-21", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8035523", "amount": 790, "direction": "debit", "balance": 2331, "raw_line": "8035523 PAGO AUTOMATICO PASAJE QR 001 790 0 21/04/2025 2.331", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-05-02", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8085751", "amount": 1660, "direction": "debit", "balance": 671, "raw_line": "8085751 PAGO AUTOMATICO PASAJE QR 001 1.660 0 02/05/2025 671", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-05-15", "description": "TEF DESDE MERCADO PAGO", "doc_number": "1337784", "amount": 20000, "direction": "credit", "balance": 20671, "raw_line": "1337784 TEF DESDE MERCADO PAGO 001 0 20.000 15/05/2025 20.671", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": "SDE MERCADO PAGO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-05-15", "description": "PAGO APP PASAJE QR", "doc_number": "8054692", "amount": 2370, "direction": "debit", "balance": 18301, "raw_line": "8054692 PAGO APP PASAJE QR 001 2.370 0 15/05/2025 18.301", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-05-16", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8022904", "amount": 1480, "direction": "debit", "balance": 16821, "raw_line": "8022904 PAGO AUTOMATICO PASAJE QR 001 1.480 0 16/05/2025 16.821", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-05-19", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8063766", "amount": 790, "direction": "debit", "balance": 16031, "raw_line": "8063766 PAGO AUTOMATICO PASAJE QR 001 790 0 19/05/2025 16.031", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-05-26", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8052964", "amount": 1480, "direction": "debit", "balance": 14551, "raw_line": "8052964 PAGO AUTOMATICO PASAJE QR 001 1.480 0 26/05/2025 14.551", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-05-27", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8061138", "amount": 1580, "direction": "debit", "balance": 12971, "raw_line": "8061138 PAGO AUTOMATICO PASAJE QR 001 1.580 0 27/05/2025 12.971", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-05-30", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8058515", "amount": 1580, "direction": "debit", "balance": 11391, "raw_line": "8058515 PAGO AUTOMATICO PASAJE QR 001 1.580 0 30/05/2025 11.391", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-02", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8022426", "amount": 1580, "direction": "debit", "balance": 9811, "raw_line": "8022426 PAGO AUTOMATICO PASAJE QR 001 1.580 0 02/06/2025 9.811", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-09", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8035191", "amount": 790, "direction": "debit", "balance": 9021, "raw_line": "8035191 PAGO AUTOMATICO PASAJE QR 001 790 0 09/06/2025 9.021", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-13", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8099227", "amount": 790, "direction": "debit", "balance": 8231, "raw_line": "8099227 PAGO AUTOMATICO PASAJE QR 001 790 0 13/06/2025 8.231", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-16", "description": "PAGO PSJE QR EFE VALPO AUTOMATICO", "doc_number": "8023122", "amount": 880, "direction": "debit", "balance": 7351, "raw_line": "8023122 PAGO PSJE QR EFE VALPO AUTOMATICO 001 880 0 16/06/2025 7.351", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-16", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8064618", "amount": 790, "direction": "debit", "balance": 6561, "raw_line": "8064618 PAGO AUTOMATICO PASAJE QR 001 790 0 16/06/2025 6.561", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-18", "description": "PAGO PSJE QR EFE VALPO AUTOMATICO", "doc_number": "8053471", "amount": 2660, "direction": "debit", "balance": 3901, "raw_line": "8053471 PAGO PSJE QR EFE VALPO AUTOMATICO 001 2.660 0 18/06/2025 3.901", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-23", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8067638", "amount": 790, "direction": "debit", "balance": 3111, "raw_line": "8067638 PAGO AUTOMATICO PASAJE QR 001 790 0 23/06/2025 3.111", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-24", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8086825", "amount": 790, "direction": "debit", "balance": 2321, "raw_line": "8086825 PAGO AUTOMATICO PASAJE QR 001 790 0 24/06/2025 2.321", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-06-27", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8070391", "amount": 1660, "direction": "debit", "balance": 661, "raw_line": "8070391 PAGO AUTOMATICO PASAJE QR 001 1.660 0 27/06/2025 661", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-30", "description": "TEF DESDE BANCO DE CHILE EDWARDS CR", "doc_number": "0322490", "amount": 20000, "direction": "credit", "balance": 20661, "raw_line": "0322490 TEF DESDE BANCO DE CHILE EDWARDS CR 001 0 20.000 30/07/2025 20.661", "platform": null, "real_origin": null, "counterparty": "SDE BANCO DE CHILE EDWARDS CR", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-07-30", "description": "PAGO APP PASAJE QR", "doc_number": "8051343", "amount": 870, "direction": "debit", "balance": 19791, "raw_line": "8051343 PAGO APP PASAJE QR 001 870 0 30/07/2025 19.791", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-31", "description": "TEF DESDE BANCO DE CHILE EDWARDS CR", "doc_number": "2533220", "amount": 390000, "direction": "credit", "balance": 409791, "raw_line": "2533220 TEF DESDE BANCO DE CHILE EDWARDS CR 001 0 390.000 31/07/2025 409.791", "platform": null, "real_origin": null, "counterparty": "SDE BANCO DE CHILE EDWARDS CR", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-07-31", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8067351", "amount": 4030, "direction": "debit", "balance": 405761, "raw_line": "8067351 PAGO AUTOMATICO PASAJE QR 001 4.030 0 31/07/2025 405.761", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-01", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8097135", "amount": 790, "direction": "debit", "balance": 404971, "raw_line": "8097135 PAGO AUTOMATICO PASAJE QR 001 790 0 01/08/2025 404.971", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/a2eb2e6068aee2e4-Cartola_CuentaRUT.pdf"}, {"statement_id": "852b0cb3", "gmail_id": "19df5d98d0be1b5f", "bank": "BancoEstado", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "230-0-006888-8", "account_last4": "8888", "period_start": "2025-12-31", "period_end": "2026-04-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/bda89ef175df002b-Cartola_Cuenta_Corriente.pdf", "parser_version": "bancoestado/1", "transactions": [{"date": "2026-01-12", "description": "TEF DE CUENTA TIRADO ANDRESEN VICEN", "doc_number": "8067673", "amount": 56529, "direction": "credit", "balance": 56529, "raw_line": "8067673 TEF DE CUENTA TIRADO ANDRESEN VICEN 001 56.529 12/01/2026 56.529", "platform": null, "real_origin": null, "counterparty": "CUENTA TIRADO ANDRESEN VICEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-12", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7016049", "amount": 42529, "direction": "debit", "balance": 14000, "raw_line": "7016049 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 42.529 12/01/2026 14.000", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-12", "description": "TEF A ARISMENDI ACEVEDO CRISTIAN YO", "doc_number": "7058622", "amount": 14000, "direction": "debit", "balance": null, "raw_line": "7058622 TEF A ARISMENDI ACEVEDO CRISTIAN YO 001 14.000 12/01/2026", "platform": null, "real_origin": null, "counterparty": "ARISMENDI ACEVEDO CRISTIAN YO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-01-26", "description": "TEF DE CUENTA TIRADO ANDRESEN VICEN", "doc_number": "8032106", "amount": 4510, "direction": "credit", "balance": 4510, "raw_line": "8032106 TEF DE CUENTA TIRADO ANDRESEN VICEN 001 4.510 26/01/2026 4.510", "platform": null, "real_origin": null, "counterparty": "CUENTA TIRADO ANDRESEN VICEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-26", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7036950", "amount": 4510, "direction": "debit", "balance": null, "raw_line": "7036950 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 4.510 26/01/2026", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-03-06", "description": "TEF DE CUENTA TIRADO ANDRESEN VICEN", "doc_number": "8091517", "amount": 513436, "direction": "credit", "balance": 513436, "raw_line": "8091517 TEF DE CUENTA TIRADO ANDRESEN VICEN 001 513.436 06/03/2026 513.436", "platform": null, "real_origin": null, "counterparty": "CUENTA TIRADO ANDRESEN VICEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-03-06", "description": "TEF A RUT 78188363-8", "doc_number": "7022767", "amount": 300000, "direction": "debit", "balance": 213436, "raw_line": "7022767 TEF A RUT 78188363-8 001 300.000 06/03/2026 213.436", "platform": null, "real_origin": null, "counterparty": "RUT", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "counterparty_rut": "78188363", "flow_type": "inter_person", "internal": false}, {"date": "2026-03-11", "description": "PAGO APP PASAJE QR", "doc_number": "4219482", "amount": 795, "direction": "debit", "balance": 212641, "raw_line": "4219482 PAGO APP PASAJE QR 001 795 11/03/2026 212.641", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-11", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7070752", "amount": 100000, "direction": "debit", "balance": 112641, "raw_line": "7070752 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 100.000 11/03/2026 112.641", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-03-11", "description": "PAGO APP PASAJE QR", "doc_number": "4219482", "amount": 895, "direction": "debit", "balance": 111746, "raw_line": "4219482 PAGO APP PASAJE QR 001 895 11/03/2026 111.746", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-12", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7046980", "amount": 100000, "direction": "debit", "balance": 11746, "raw_line": "7046980 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 100.000 12/03/2026 11.746", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-03-16", "description": "TEF A BRUNA PEREZ DARWIN ALEJANDRO", "doc_number": "7054041", "amount": 11746, "direction": "debit", "balance": null, "raw_line": "7054041 TEF A BRUNA PEREZ DARWIN ALEJANDRO 001 11.746 16/03/2026", "platform": null, "real_origin": null, "counterparty": "BRUNA PEREZ DARWIN ALEJANDRO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-04-09", "description": "TEF BANCOESTADO DE TIRADO ANDRESEN", "doc_number": "8040709", "amount": 250000, "direction": "credit", "balance": 250000, "raw_line": "8040709 TEF BANCOESTADO DE TIRADO ANDRESEN 001 250.000 09/04/2026 250.000", "platform": null, "real_origin": null, "counterparty": "BANCOESTADO DE TIRADO ANDRESEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-04-09", "description": "TEF A ANDRESEN MULLER HEIDI EMMA", "doc_number": "7091119", "amount": 250000, "direction": "debit", "balance": null, "raw_line": "7091119 TEF A ANDRESEN MULLER HEIDI EMMA 001 250.000 09/04/2026", "platform": null, "real_origin": null, "counterparty": "ANDRESEN MULLER HEIDI EMMA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-04-17", "description": "DEPOSITO CON DOCUMENTOS 066", "doc_number": "4038980", "amount": 1100000, "direction": "credit", "balance": 1100000, "raw_line": "4038980 DEPOSITO CON DOCUMENTOS 066 1.100.000 17/04/2026 1.100.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-04-21", "description": "TEF DE RETAMAL ARRIAGADA BRYAN ANDR", "doc_number": "0001077", "amount": 400000, "direction": "credit", "balance": 400000, "raw_line": "0001077 TEF DE RETAMAL ARRIAGADA BRYAN ANDR 001 400.000 21/04/2026 400.000", "platform": null, "real_origin": null, "counterparty": "RETAMAL ARRIAGADA BRYAN ANDR", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-04-21", "description": "TEF BANCOESTADO A BUSTOS LILLO GONZ", "doc_number": "7039621", "amount": 370000, "direction": "debit", "balance": 30000, "raw_line": "7039621 TEF BANCOESTADO A BUSTOS LILLO GONZ 001 370.000 21/04/2026 30.000", "platform": null, "real_origin": null, "counterparty": "BANCOESTADO A BUSTOS LILLO GONZ", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-04-22", "description": "TEF DE ANDRESEN MULLER HEIDI EMMA", "doc_number": "0001077", "amount": 200000, "direction": "credit", "balance": 230000, "raw_line": "0001077 TEF DE ANDRESEN MULLER HEIDI EMMA 001 200.000 22/04/2026 230.000", "platform": null, "real_origin": null, "counterparty": "ANDRESEN MULLER HEIDI EMMA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-04-23", "description": "PAGO ENTEL PCS PAGO DE CUENTAS", "doc_number": "4224961", "amount": 8350, "direction": "debit", "balance": 221650, "raw_line": "4224961 PAGO ENTEL PCS PAGO DE CUENTAS 001 8.350 23/04/2026 221.650", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-04-24", "description": "WEB HETZNER ONLINE GMB", "doc_number": "4330124", "amount": 76329, "direction": "debit", "balance": 145321, "raw_line": "4330124 WEB HETZNER ONLINE GMB 001 76.329 24/04/2026 145.321", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-04-24", "description": "COMISION TRANSACCION INTERNACIONAL", "doc_number": "0001212", "amount": 1450, "direction": "debit", "balance": 143871, "raw_line": "0001212 COMISION TRANSACCION INTERNACIONAL 001 1.450 24/04/2026 143.871", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-04-27", "description": "WEB DL RAPPI CHILE RAP", "doc_number": "4320018", "amount": 10300, "direction": "debit", "balance": 133571, "raw_line": "4320018 WEB DL RAPPI CHILE RAP 001 10.300 27/04/2026 133.571", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-04-27", "description": "WEB DL RAPPI CL RAPPI", "doc_number": "4355527", "amount": 354, "direction": "debit", "balance": 133217, "raw_line": "4355527 WEB DL RAPPI CL RAPPI 001 354 27/04/2026 133.217", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-04-27", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7047278", "amount": 100000, "direction": "debit", "balance": 33217, "raw_line": "7047278 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 100.000 27/04/2026 33.217", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-04-27", "description": "WEB UBER LIME HELP.UBE", "doc_number": "1435130", "amount": 2799, "direction": "debit", "balance": 30418, "raw_line": "1435130 WEB UBER LIME HELP.UBE 001 2.799 27/04/2026 30.418", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-04-27", "description": "WEB PAYU *UBER TRIP", "doc_number": "3754316", "amount": 1991, "direction": "debit", "balance": 28427, "raw_line": "3754316 WEB PAYU *UBER TRIP 001 1.991 27/04/2026 28.427", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-04-27", "description": "COMISION TRANSACCION INTERNACIONAL", "doc_number": "0001212", "amount": 463, "direction": "debit", "balance": 27964, "raw_line": "0001212 COMISION TRANSACCION INTERNACIONAL 001 463 27/04/2026 27.964", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-04-27", "description": "PAGO APP PASAJE QR", "doc_number": "4219482", "amount": 795, "direction": "debit", "balance": 27169, "raw_line": "4219482 PAGO APP PASAJE QR 001 795 27/04/2026 27.169", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-04-28", "description": "REGULARIZA TARJETA DEBITO NACIONAL", "doc_number": "0005090", "amount": 354, "direction": "credit", "balance": 27523, "raw_line": "0005090 REGULARIZA TARJETA DEBITO NACIONAL 001 354 28/04/2026 27.523", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/bda89ef175df002b-Cartola_Cuenta_Corriente.pdf"}, {"statement_id": "0eb09c5a", "gmail_id": "1983b43a39bb0db1", "bank": "BancoEstado", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/e9015186380b4d2e-HOJA_DE_RESUMEN_24_HORAS_PERSONA_NATURAL.pdf.pdf", "parser_version": "bancoestado/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/e9015186380b4d2e-HOJA_DE_RESUMEN_24_HORAS_PERSONA_NATURAL.pdf.pdf"}, {"statement_id": "7e046447", "gmail_id": "19c71c658ae35baf", "bank": "BancoEstado", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "18393009", "account_last4": "3009", "period_start": "2025-12-18", "period_end": "2025-12-22", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/f17ca2ef7dc33868-Cartola_CuentaRUT.pdf", "parser_version": "bancoestado/1", "transactions": [{"date": "2025-12-18", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8027848", "amount": 770, "direction": "debit", "balance": 1271, "raw_line": "8027848 PAGO AUTOMATICO PASAJE QR 001 770 0 18/12/2025 1.271", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-12-22", "description": "PAGO AUTOMATICO PASAJE QR", "doc_number": "8078977", "amount": 770, "direction": "debit", "balance": 501, "raw_line": "8078977 PAGO AUTOMATICO PASAJE QR 001 770 0 22/12/2025 501", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/f17ca2ef7dc33868-Cartola_CuentaRUT.pdf"}, {"statement_id": "0183c1aa", "gmail_id": "19cb191ea2bef9af", "bank": "BancoEstado", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": "230-0-006888-8", "account_last4": "8888", "period_start": "2025-12-31", "period_end": "2026-02-27", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/f6cd613befcd2171-Cartola_Cuenta_Corriente.pdf", "parser_version": "bancoestado/1", "transactions": [{"date": "2026-01-12", "description": "TEF DE CUENTA TIRADO ANDRESEN VICEN", "doc_number": "8067673", "amount": 56529, "direction": "credit", "balance": 56529, "raw_line": "8067673 TEF DE CUENTA TIRADO ANDRESEN VICEN 001 56.529 12/01/2026 56.529", "platform": null, "real_origin": null, "counterparty": "CUENTA TIRADO ANDRESEN VICEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-12", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7016049", "amount": 42529, "direction": "debit", "balance": 14000, "raw_line": "7016049 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 42.529 12/01/2026 14.000", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-12", "description": "TEF A ARISMENDI ACEVEDO CRISTIAN YO", "doc_number": "7058622", "amount": 14000, "direction": "debit", "balance": null, "raw_line": "7058622 TEF A ARISMENDI ACEVEDO CRISTIAN YO 001 14.000 12/01/2026", "platform": null, "real_origin": null, "counterparty": "ARISMENDI ACEVEDO CRISTIAN YO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2026-01-26", "description": "TEF DE CUENTA TIRADO ANDRESEN VICEN", "doc_number": "8032106", "amount": 4510, "direction": "credit", "balance": 4510, "raw_line": "8032106 TEF DE CUENTA TIRADO ANDRESEN VICEN 001 4.510 26/01/2026 4.510", "platform": null, "real_origin": null, "counterparty": "CUENTA TIRADO ANDRESEN VICEN", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-01-26", "description": "TEF A TIRADO ANDRESEN VICENTE JOAQU", "doc_number": "7036950", "amount": 4510, "direction": "debit", "balance": null, "raw_line": "7036950 TEF A TIRADO ANDRESEN VICENTE JOAQU 001 4.510 26/01/2026", "platform": null, "real_origin": null, "counterparty": "TIRADO ANDRESEN VICENTE JOAQU", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BancoEstado/f6cd613befcd2171-Cartola_Cuenta_Corriente.pdf"}, {"statement_id": "7c40ef0c", "gmail_id": "199c5a5eb1d1583c", "bank": "Tarjeta Spin", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": "18393009", "account_last4": "3009", "period_start": null, "period_end": "2025-10-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tarjeta_Spin/143f693d85e14495-T-SPIN-VISA-1510202516528.pdf", "parser_version": "tarjeta_spin/1", "transactions": [{"date": "2025-05-16", "description": "MP — COMPRA CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 20322, "direction": "debit", "balance": null, "raw_line": " MP 16/05/2025 COMPRA CUOTAS PRECIO CONTADO 20.322 20.322 05/06 3.387", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "05/06", "flow_type": "expense", "internal": false}, {"date": "2025-08-23", "description": "CV 286 — COMPRA 3 CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 23744, "direction": "debit", "balance": null, "raw_line": " CV 286 23/08/2025 COMPRA 3 CUOTAS PRECIO CONTADO 23.744 23.744 02/03 7.915", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "02/03", "flow_type": "expense", "internal": false}, {"date": "2025-09-02", "description": "SUMUP * MAURICIO IVA — COMPRA NACIONAL", "doc_number": null, "amount": 1800, "direction": "debit", "balance": null, "raw_line": " SUMUP * MAURICIO IVA 02/09/2025 COMPRA NACIONAL 1.800 1.800 01/01 1.800", "platform": "SUMUP", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-02", "description": "SUMUP * MAURICIO IVA — COMPRA NACIONAL", "doc_number": null, "amount": 2250, "direction": "debit", "balance": null, "raw_line": " SUMUP * MAURICIO IVA 02/09/2025 COMPRA NACIONAL 2.250 2.250 01/01 2.250", "platform": "SUMUP", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-04", "description": "DLO RAPPI CHILE RAPP", "doc_number": null, "amount": 17278, "direction": "debit", "balance": null, "raw_line": " DLO RAPPI CHILE RAPP 04/09/2025 COMPRA 17.278 17.278 01/01 17.278", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-08", "description": "DL*RAPPI CHILE", "doc_number": null, "amount": 13670, "direction": "debit", "balance": null, "raw_line": " DL*RAPPI CHILE 08/09/2025 COMPRA 13.670 13.670 01/01 13.670", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-12", "description": "CRUZ VERDE CV 1034 — COMPRA NACIONAL", "doc_number": null, "amount": 15844, "direction": "debit", "balance": null, "raw_line": " CRUZ VERDE CV 1034 12/09/2025 COMPRA NACIONAL 15.844 15.844 01/01 15.844", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-15", "description": "DLOCAL *RAPPI CHILE — COMPRA NACIONAL", "doc_number": null, "amount": 20080, "direction": "debit", "balance": null, "raw_line": " DLOCAL *RAPPI CHILE 15/09/2025 COMPRA NACIONAL 20.080 20.080 01/01 20.080", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-16", "description": "C. VERDE C. FARI A 6 — COMPRA NACIONAL", "doc_number": null, "amount": 4538, "direction": "debit", "balance": null, "raw_line": " C. VERDE C. FARI A 6 16/09/2025 COMPRA NACIONAL 4.538 4.538 01/01 4.538", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-17", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 11363, "direction": "debit", "balance": null, "raw_line": " PAYU 17/09/2025 COMPRA POR INTERNET 11.363 11.363 01/01 11.363", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-18", "description": "VITACURA VITAC — COMPRA NACIONAL", "doc_number": null, "amount": 7660, "direction": "debit", "balance": null, "raw_line": " 60037 VITACURA VITAC 18/09/2025 COMPRA NACIONAL 7.660 7.660 01/01 7.660", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-18", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 20611, "direction": "debit", "balance": null, "raw_line": " PAYU 18/09/2025 COMPRA POR INTERNET 20.611 20.611 01/01 20.611", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-18", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 7995, "direction": "debit", "balance": null, "raw_line": " PAYU 18/09/2025 COMPRA POR INTERNET 7.995 7.995 01/01 7.995", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-18", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 8058, "direction": "debit", "balance": null, "raw_line": " PAYU 18/09/2025 COMPRA POR INTERNET 8.058 8.058 01/01 8.058", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-20", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 19259, "direction": "debit", "balance": null, "raw_line": " PAYU 20/09/2025 COMPRA POR INTERNET 19.259 19.259 01/01 19.259", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-22", "description": "DP — COMPRA NACIONAL", "doc_number": null, "amount": 89990, "direction": "debit", "balance": null, "raw_line": " DP 22/09/2025 COMPRA NACIONAL 89.990 89.990 01/01 89.990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-09-22", "description": "LOKAL — COMPRA POR INTERNET", "doc_number": null, "amount": 134131, "direction": "debit", "balance": null, "raw_line": " LOKAL 22/09/2025 COMPRA POR INTERNET 134.131 134.131 01/01 134.131", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tarjeta_Spin/143f693d85e14495-T-SPIN-VISA-1510202516528.pdf"}, {"statement_id": "00969682", "gmail_id": "19925b2728b74228", "bank": "Tarjeta Spin", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": "18393009", "account_last4": "3009", "period_start": null, "period_end": "2025-09-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tarjeta_Spin/5d05df4599f5db72-T-SPIN-VISA-1509202511096.pdf", "parser_version": "tarjeta_spin/1", "transactions": [{"date": "2025-05-16", "description": "MP — COMPRA CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 20322, "direction": "debit", "balance": null, "raw_line": " MP 16/05/2025 COMPRA CUOTAS PRECIO CONTADO 20.322 20.322 04/06 3.387", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "04/06", "flow_type": "expense", "internal": false}, {"date": "2025-06-04", "description": "MP — COMPRA 3 CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 18048, "direction": "debit", "balance": null, "raw_line": " MP 04/06/2025 COMPRA 3 CUOTAS PRECIO CONTADO 18.048 18.048 03/03 6.016", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "03/03", "flow_type": "expense", "internal": false}, {"date": "2025-08-04", "description": "C. VERDE C. FARI A 6 — COMPRA NACIONAL", "doc_number": null, "amount": 1107, "direction": "debit", "balance": null, "raw_line": " C. VERDE C. FARI A 6 04/08/2025 COMPRA NACIONAL 1.107 1.107 01/01 1.107", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-04", "description": "FCV LOCAL 467 — PAGO", "doc_number": null, "amount": 66720, "direction": "credit", "balance": null, "raw_line": " FCV LOCAL 467 04/08/2025 PAGO -66.720 -66.720 01/01 -66.720", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "income", "internal": false}, {"date": "2025-08-15", "description": "AUDIOVISION LTDA — COMPRA NACIONAL", "doc_number": null, "amount": 3990, "direction": "debit", "balance": null, "raw_line": " AUDIOVISION LTDA 15/08/2025 COMPRA NACIONAL 3.990 3.990 01/01 3.990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-15", "description": "MERCADOPAGO*BARALAME — COMPRA NACIONAL", "doc_number": null, "amount": 18178, "direction": "debit", "balance": null, "raw_line": " MERCADOPAGO*BARALAME 15/08/2025 COMPRA NACIONAL 18.178 18.178 01/01 18.178", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-15", "description": "SOCIEDAD COMERCIAL O — COMPRA NACIONAL", "doc_number": null, "amount": 15000, "direction": "debit", "balance": null, "raw_line": " SOCIEDAD COMERCIAL O 15/08/2025 COMPRA NACIONAL 15.000 15.000 01/01 15.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-16", "description": "CRUZ VERDE L9100 — COMPRA NACIONAL", "doc_number": null, "amount": 9645, "direction": "debit", "balance": null, "raw_line": " CRUZ VERDE L9100 16/08/2025 COMPRA NACIONAL 9.645 9.645 01/01 9.645", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-16", "description": "GET IT — COMPRA NACIONAL", "doc_number": null, "amount": 4290, "direction": "debit", "balance": null, "raw_line": " GET IT 16/08/2025 COMPRA NACIONAL 4.290 4.290 01/01 4.290", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-16", "description": "SAN ISIDRO 2 — COMPRA NACIONAL", "doc_number": null, "amount": 22800, "direction": "debit", "balance": null, "raw_line": " SAN ISIDRO 2 16/08/2025 COMPRA NACIONAL 22.800 22.800 01/01 22.800", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-16", "description": "TESORO PERUANO — COMPRA NACIONAL", "doc_number": null, "amount": 1000, "direction": "debit", "balance": null, "raw_line": " TESORO PERUANO 16/08/2025 COMPRA NACIONAL 1.000 1.000 01/01 1.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-18", "description": "FARM CRUZ VERDE CV75 — COMPRA NACIONAL", "doc_number": null, "amount": 23569, "direction": "debit", "balance": null, "raw_line": " FARM CRUZ VERDE CV75 18/08/2025 COMPRA NACIONAL 23.569 23.569 01/01 23.569", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-18", "description": "IMPERIO — COMPRA NACIONAL", "doc_number": null, "amount": 1490, "direction": "debit", "balance": null, "raw_line": " IMPERIO 18/08/2025 COMPRA NACIONAL 1.490 1.490 01/01 1.490", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-18", "description": "INV. ITALIAN AGUSTIN — COMPRA NACIONAL", "doc_number": null, "amount": 3990, "direction": "debit", "balance": null, "raw_line": " INV. ITALIAN AGUSTIN 18/08/2025 COMPRA NACIONAL 3.990 3.990 01/01 3.990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-19", "description": "C. VERDE ALAMEDA 658 — COMPRA NACIONAL", "doc_number": null, "amount": 10089, "direction": "debit", "balance": null, "raw_line": " C. VERDE ALAMEDA 658 19/08/2025 COMPRA NACIONAL 10.089 10.089 01/01 10.089", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-20", "description": "SOCIEDAD COMERCIAL O — COMPRA NACIONAL", "doc_number": null, "amount": 7500, "direction": "debit", "balance": null, "raw_line": " SOCIEDAD COMERCIAL O 20/08/2025 COMPRA NACIONAL 7.500 7.500 01/01 7.500", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-20", "description": "STA ISABEL PORTUGAL — COMPRA NACIONAL", "doc_number": null, "amount": 5330, "direction": "debit", "balance": null, "raw_line": " STA ISABEL PORTUGAL 20/08/2025 COMPRA NACIONAL 5.330 5.330 01/01 5.330", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-20", "description": "SERVICIO DE REGISTRO — PAGO DE IMPUESTOS", "doc_number": null, "amount": 3820, "direction": "debit", "balance": null, "raw_line": " SERVICIO DE REGISTRO 20/08/2025 PAGO DE IMPUESTOS 3.820 3.820 01/01 3.820", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "fee", "internal": false}, {"date": "2025-08-21", "description": "DL*RAPPI CHILE", "doc_number": null, "amount": 13150, "direction": "debit", "balance": null, "raw_line": " DL*RAPPI CHILE 21/08/2025 COMPRA 13.150 13.150 01/01 13.150", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-21", "description": "C. VERDE APOQUINDO 4 — COMPRA NACIONAL", "doc_number": null, "amount": 5096, "direction": "debit", "balance": null, "raw_line": " C. VERDE APOQUINDO 4 21/08/2025 COMPRA NACIONAL 5.096 5.096 01/01 5.096", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-21", "description": "DLOCAL *RAPPI RAPPI — COMPRA NACIONAL", "doc_number": null, "amount": 16580, "direction": "debit", "balance": null, "raw_line": " DLOCAL *RAPPI RAPPI 21/08/2025 COMPRA NACIONAL 16.580 16.580 01/01 16.580", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-22", "description": "MERPAGO*GRUPOLEDESMA — COMPRA NACIONAL", "doc_number": null, "amount": 5600, "direction": "debit", "balance": null, "raw_line": " MERPAGO*GRUPOLEDESMA 22/08/2025 COMPRA NACIONAL 5.600 5.600 01/01 5.600", "platform": "MERPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-22", "description": "CV 286 — INF. COMPRA EN CUOTAS", "doc_number": null, "amount": 23744, "direction": "debit", "balance": null, "raw_line": " CV 286 22/08/2025 INF. COMPRA EN CUOTAS 23.744 23.744 00/03 7.915", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "00/03", "flow_type": "expense", "internal": false}, {"date": "2025-08-23", "description": "DL*RAPPI CHILE", "doc_number": null, "amount": 8794, "direction": "debit", "balance": null, "raw_line": " DL*RAPPI CHILE 23/08/2025 COMPRA 8.794 8.794 01/01 8.794", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-23", "description": "CV 286 — COMPRA 3 CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 23744, "direction": "debit", "balance": null, "raw_line": " CV 286 23/08/2025 COMPRA 3 CUOTAS PRECIO CONTADO 23.744 23.744 01/03 7.915", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/03", "flow_type": "expense", "internal": false}, {"date": "2025-08-23", "description": "TENDERINI 51 — COMPRA NACIONAL", "doc_number": null, "amount": 7000, "direction": "debit", "balance": null, "raw_line": " TENDERINI 51 23/08/2025 COMPRA NACIONAL 7.000 7.000 01/01 7.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-08-28", "description": "CSF LOCAL 910 — DSCTO MANTENCION MENSUAL", "doc_number": null, "amount": 9652, "direction": "credit", "balance": null, "raw_line": " CSF LOCAL 910 28/08/2025 DSCTO MANTENCION MENSUAL -9.652 -9.652 01/01 -9.652", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tarjeta_Spin/5d05df4599f5db72-T-SPIN-VISA-1509202511096.pdf"}, {"statement_id": "cb85ee9a", "gmail_id": "19885d2c8559dff6", "bank": "Tarjeta Spin", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": "18393009", "account_last4": "3009", "period_start": null, "period_end": "2025-08-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tarjeta_Spin/7f45311802f09c26-T-SPIN-VISA-1508202511334.pdf", "parser_version": "tarjeta_spin/1", "transactions": [{"date": "2025-05-16", "description": "MP — COMPRA CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 20322, "direction": "debit", "balance": null, "raw_line": " MP 16/05/2025 COMPRA CUOTAS PRECIO CONTADO 20.322 20.322 03/06 3.387", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "03/06", "flow_type": "expense", "internal": false}, {"date": "2025-05-20", "description": "MP — COMPRA 3 CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 17938, "direction": "debit", "balance": null, "raw_line": " MP 20/05/2025 COMPRA 3 CUOTAS PRECIO CONTADO 17.938 17.938 03/03 5.980", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "03/03", "flow_type": "expense", "internal": false}, {"date": "2025-05-24", "description": "MP — COMPRA 3 CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 1490, "direction": "debit", "balance": null, "raw_line": " MP 24/05/2025 COMPRA 3 CUOTAS PRECIO CONTADO 1.490 1.490 03/03 496", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "03/03", "flow_type": "expense", "internal": false}, {"date": "2025-06-04", "description": "MP — COMPRA 3 CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 18048, "direction": "debit", "balance": null, "raw_line": " MP 04/06/2025 COMPRA 3 CUOTAS PRECIO CONTADO 18.048 18.048 02/03 6.016", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "02/03", "flow_type": "expense", "internal": false}, {"date": "2025-07-21", "description": "FCV LOCAL 72 — PAGO", "doc_number": null, "amount": 100000, "direction": "credit", "balance": null, "raw_line": " FCV LOCAL 72 21/07/2025 PAGO -100.000 -100.000 01/01 -100.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "income", "internal": false}, {"date": "2025-07-31", "description": "FCV LOCAL 35 — PAGO", "doc_number": null, "amount": 90000, "direction": "credit", "balance": null, "raw_line": " FCV LOCAL 35 31/07/2025 PAGO -90.000 -90.000 01/01 -90.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "income", "internal": false}, {"date": "2025-07-31", "description": "FCV LOCAL 392 — PAGO", "doc_number": null, "amount": 200000, "direction": "credit", "balance": null, "raw_line": " FCV LOCAL 392 31/07/2025 PAGO -200.000 -200.000 01/01 -200.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "income", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tarjeta_Spin/7f45311802f09c26-T-SPIN-VISA-1508202511334.pdf"}, {"statement_id": "944e7679", "gmail_id": "19a59f1d08b5c341", "bank": "Tarjeta Spin", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": "18393009", "account_last4": "3009", "period_start": null, "period_end": "2025-11-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tarjeta_Spin/825a7edb85f2b719-T-SPIN-VISA-1511202516519.pdf", "parser_version": "tarjeta_spin/1", "transactions": [{"date": "2025-05-16", "description": "MP — COMPRA CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 20322, "direction": "debit", "balance": null, "raw_line": " MP 16/05/2025 COMPRA CUOTAS PRECIO CONTADO 20.322 20.322 06/06 3.387", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "06/06", "flow_type": "expense", "internal": false}, {"date": "2025-08-23", "description": "CV 286 — COMPRA 3 CUOTAS PRECIO CONTADO", "doc_number": null, "amount": 23744, "direction": "debit", "balance": null, "raw_line": " CV 286 23/08/2025 COMPRA 3 CUOTAS PRECIO CONTADO 23.744 23.744 03/03 7.914", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "03/03", "flow_type": "expense", "internal": false}, {"date": "2025-10-09", "description": "FCV LOCAL 286 — PAGO", "doc_number": null, "amount": 190000, "direction": "credit", "balance": null, "raw_line": " FCV LOCAL 286 09/10/2025 PAGO -190.000 -190.000 01/01 -190.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "income", "internal": false}, {"date": "2025-10-13", "description": "MODO CONSCIENTE — COMPRA NACIONAL", "doc_number": null, "amount": 3820, "direction": "debit", "balance": null, "raw_line": " MODO CONSCIENTE 13/10/2025 COMPRA NACIONAL 3.820 3.820 01/01 3.820", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-14", "description": "MERPAGO*VICENTETIRAD — COMPRA POR INTERNET", "doc_number": null, "amount": 64190, "direction": "debit", "balance": null, "raw_line": " MERPAGO*VICENTETIRAD 14/10/2025 COMPRA POR INTERNET 64.190 64.190 01/01 64.190", "platform": "MERPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-17", "description": "MERCADO PAGO — COMPRA NACIONAL", "doc_number": null, "amount": 100000, "direction": "debit", "balance": null, "raw_line": " MERCADO PAGO 17/10/2025 COMPRA NACIONAL 100.000 100.000 01/01 100.000", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-17", "description": "STA ISABEL PORTUGAL — COMPRA NACIONAL", "doc_number": null, "amount": 25618, "direction": "debit", "balance": null, "raw_line": " STA ISABEL PORTUGAL 17/10/2025 COMPRA NACIONAL 25.618 25.618 01/01 25.618", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-18", "description": "PARADISO CAFE — COMPRA NACIONAL", "doc_number": null, "amount": 2790, "direction": "debit", "balance": null, "raw_line": " PARADISO CAFE 18/10/2025 COMPRA NACIONAL 2.790 2.790 01/01 2.790", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-18", "description": "SUMUP * DOS R SPA — COMPRA NACIONAL", "doc_number": null, "amount": 21000, "direction": "debit", "balance": null, "raw_line": " SUMUP * DOS R SPA 18/10/2025 COMPRA NACIONAL 21.000 21.000 01/01 21.000", "platform": "SUMUP", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-18", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 1561, "direction": "debit", "balance": null, "raw_line": " PAYU 18/10/2025 COMPRA POR INTERNET 1.561 1.561 01/01 1.561", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-18", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 1723, "direction": "debit", "balance": null, "raw_line": " PAYU 18/10/2025 COMPRA POR INTERNET 1.723 1.723 01/01 1.723", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-18", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 16133, "direction": "debit", "balance": null, "raw_line": " PAYU 18/10/2025 COMPRA POR INTERNET 16.133 16.133 01/01 16.133", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-18", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 17403, "direction": "debit", "balance": null, "raw_line": " PAYU 18/10/2025 COMPRA POR INTERNET 17.403 17.403 01/01 17.403", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-18", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 4010, "direction": "debit", "balance": null, "raw_line": " PAYU 18/10/2025 COMPRA POR INTERNET 4.010 4.010 01/01 4.010", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-18", "description": "UBER — COMPRA POR INTERNET", "doc_number": null, "amount": 3990, "direction": "debit", "balance": null, "raw_line": " UBER 18/10/2025 COMPRA POR INTERNET 3.990 3.990 01/01 3.990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-19", "description": "STA ISABEL PORTUGAL — COMPRA NACIONAL", "doc_number": null, "amount": 5280, "direction": "debit", "balance": null, "raw_line": " STA ISABEL PORTUGAL 19/10/2025 COMPRA NACIONAL 5.280 5.280 01/01 5.280", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-19", "description": "MERPAGO*CABIFY25428C — COMPRA POR INTERNET", "doc_number": null, "amount": 6865, "direction": "debit", "balance": null, "raw_line": " MERPAGO*CABIFY25428C 19/10/2025 COMPRA POR INTERNET 6.865 6.865 01/01 6.865", "platform": "MERPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-19", "description": "MERPAGO*CABIFY2542BL — COMPRA POR INTERNET", "doc_number": null, "amount": 10673, "direction": "debit", "balance": null, "raw_line": " MERPAGO*CABIFY2542BL 19/10/2025 COMPRA POR INTERNET 10.673 10.673 01/01 10.673", "platform": "MERPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-19", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 1000, "direction": "debit", "balance": null, "raw_line": " PAYU 19/10/2025 COMPRA POR INTERNET 1.000 1.000 01/01 1.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-19", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 25125, "direction": "debit", "balance": null, "raw_line": " PAYU 19/10/2025 COMPRA POR INTERNET 25.125 25.125 01/01 25.125", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-21", "description": "MERCADO PAGO — COMPRA NACIONAL", "doc_number": null, "amount": 100000, "direction": "debit", "balance": null, "raw_line": " MERCADO PAGO 21/10/2025 COMPRA NACIONAL 100.000 100.000 01/01 100.000", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-22", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 7975, "direction": "debit", "balance": null, "raw_line": " PAYU 22/10/2025 COMPRA POR INTERNET 7.975 7.975 01/01 7.975", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-23", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 2684, "direction": "debit", "balance": null, "raw_line": " PAYU 23/10/2025 COMPRA POR INTERNET 2.684 2.684 01/01 2.684", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-25", "description": "MERPAGO*CABIFY2543JG — COMPRA POR INTERNET", "doc_number": null, "amount": 2858, "direction": "debit", "balance": null, "raw_line": " MERPAGO*CABIFY2543JG 25/10/2025 COMPRA POR INTERNET 2.858 2.858 01/01 2.858", "platform": "MERPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-26", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 3980, "direction": "debit", "balance": null, "raw_line": " PAYU 26/10/2025 COMPRA POR INTERNET 3.980 3.980 01/01 3.980", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-26", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 5854, "direction": "debit", "balance": null, "raw_line": " PAYU 26/10/2025 COMPRA POR INTERNET 5.854 5.854 01/01 5.854", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-26", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 8531, "direction": "debit", "balance": null, "raw_line": " PAYU 26/10/2025 COMPRA POR INTERNET 8.531 8.531 01/01 8.531", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-28", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 8408, "direction": "debit", "balance": null, "raw_line": " PAYU 28/10/2025 COMPRA POR INTERNET 8.408 8.408 01/01 8.408", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-28", "description": "CSF LOCAL 910 — DSCTO MANTENCION MENSUAL", "doc_number": null, "amount": 9703, "direction": "credit", "balance": null, "raw_line": " CSF LOCAL 910 28/10/2025 DSCTO MANTENCION MENSUAL -9.703 -9.703 01/01 -9.703", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "fee", "internal": false}, {"date": "2025-10-29", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 7307, "direction": "debit", "balance": null, "raw_line": " PAYU 29/10/2025 COMPRA POR INTERNET 7.307 7.307 01/01 7.307", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}, {"date": "2025-10-30", "description": "PAYU — COMPRA POR INTERNET", "doc_number": null, "amount": 7548, "direction": "debit", "balance": null, "raw_line": " PAYU 30/10/2025 COMPRA POR INTERNET 7.548 7.548 01/01 7.548", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "cuota": "01/01", "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tarjeta_Spin/825a7edb85f2b719-T-SPIN-VISA-1511202516519.pdf"}, {"statement_id": "eceadcb4", "gmail_id": "19844f4e4d27fb5f", "bank": "Banco de Chile", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-06-24", "period_end": "2025-07-23", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Banco_de_Chile/3cd5dd9b80511191-EECCTarjetaVisa.pdf", "parser_version": "banco_de_chile/1", "transactions": [{"date": "2025-07-10", "description": "Pago PAP Cuenta Corriente", "doc_number": null, "amount": 156024, "direction": "credit", "balance": null, "raw_line": "te 10/07/25 100700000000 Pago PAP Cuenta Corriente $ -156.024 $ -156.024 01/01 $ -156.024", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-06-28", "description": "ENTEL PCS SANTIAGO (SANTIAGO)", "doc_number": null, "amount": 18261, "direction": "debit", "balance": null, "raw_line": "SANTIAGO 28/06/25 010710951783 ENTEL PCS SANTIAGO $ 18.261 $ 18.261 01/01 $ 18.261", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-08", "description": "TRASPASO DEUDA INTERNACIONAL", "doc_number": null, "amount": 76626, "direction": "debit", "balance": null, "raw_line": " 08/07/25 080700000000 TRASPASO DEUDA INTERNACIONAL $ 76.626 $ 76.626 01/01 $ 76.626", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-23", "description": "IMPUESTO DECRETO LEY 3475 TASA 0,066 %", "doc_number": null, "amount": 2348, "direction": "debit", "balance": null, "raw_line": " 23/07/25 230700000000 IMPUESTO DECRETO LEY 3475 TASA 0,066 % $ 2.348 $ 2.348 01/01 $ 2.348", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-23", "description": "COMISION MENSUAL POR MANTENCION", "doc_number": null, "amount": 2745, "direction": "debit", "balance": null, "raw_line": " 23/07/25 230700000000 COMISION MENSUAL POR MANTENCION $ 2.745 $ 2.745 01/01 $ 2.745", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-23", "description": "INTERESES ROTATIVOS", "doc_number": null, "amount": 88516, "direction": "debit", "balance": null, "raw_line": " 23/07/25 230700000000 INTERESES ROTATIVOS $ 88.516 $ 88.516 01/01 $ 88.516", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-23", "description": "INTERESES DE MORA", "doc_number": null, "amount": 135, "direction": "debit", "balance": null, "raw_line": " 23/07/25 230700000000 INTERESES DE MORA $ 135 $ 135 01/01 $ 135", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Banco_de_Chile/3cd5dd9b80511191-EECCTarjetaVisa.pdf"}, {"statement_id": "784e691f", "gmail_id": "197d8d4d47c6ea47", "bank": "Banco de Chile", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-05-30", "period_end": "2025-06-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Banco_de_Chile/7a726151acb9ed33-CartolaCuentaCorrienteNacionalMensual.pdf", "parser_version": "banco_de_chile/1", "transactions": [{"date": "2025-06-02", "description": "INTERESES LINEA DE CREDITO", "doc_number": null, "amount": 21660, "direction": "debit", "balance": null, "raw_line": " 02/06 INTERESES LINEA DE CREDITO OF. LLOLLEO 21.660", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-02", "description": "IMPUESTO LINEA DE CREDITO", "doc_number": null, "amount": 569, "direction": "debit", "balance": null, "raw_line": " 02/06 IMPUESTO LINEA DE CREDITO OF. LLOLLEO 569", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-02", "description": "AMORTIZACION A LINEA DE CREDITO", "doc_number": null, "amount": 22771, "direction": "debit", "balance": null, "raw_line": " 02/06 AMORTIZACION A LINEA DE CREDITO OF. LLOLLEO 22.771", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-02", "description": "TRASPASO DE:EMA BLANCA MULLER CAST", "doc_number": null, "amount": 45000, "direction": "credit", "balance": 0, "raw_line": " 02/06 TRASPASO DE:EMA BLANCA MULLER CAST INTERNET 45.000 0", "platform": null, "real_origin": null, "counterparty": "EMA BLANCA MULLER CAST", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-06-04", "description": "AMORTIZACION A LINEA DE CREDITO", "doc_number": null, "amount": 335698, "direction": "debit", "balance": null, "raw_line": " 04/06 AMORTIZACION A LINEA DE CREDITO OF. LLOLLEO 335.698", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-04", "description": "TRASPASO DE:VINOS LABERINTO LIMITA", "doc_number": null, "amount": 335698, "direction": "credit", "balance": 0, "raw_line": " 04/06 TRASPASO DE:VINOS LABERINTO LIMITA INTERNET 335.698 0", "platform": null, "real_origin": null, "counterparty": "VINOS LABERINTO LIMITA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-06-11", "description": "AMORTIZACION A LINEA DE CREDITO", "doc_number": null, "amount": 510668, "direction": "debit", "balance": null, "raw_line": " 11/06 AMORTIZACION A LINEA DE CREDITO OF. LLOLLEO 510.668", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-06-11", "description": "PAP CENTINELA TARJ CREDITO", "doc_number": null, "amount": 213530, "direction": "debit", "balance": null, "raw_line": " 11/06 PAP CENTINELA TARJ CREDITO CENTRAL 213.530", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-06-11", "description": "CARGO POR PAGO TC", "doc_number": null, "amount": 921374, "direction": "debit", "balance": null, "raw_line": " 11/06 CARGO POR PAGO TC INTERNET 921.374", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-06-11", "description": "TRASPASO DE:VICENTE JOAQUIN TIRADO", "doc_number": null, "amount": 3565811, "direction": "credit", "balance": 1920239, "raw_line": " 11/06 TRASPASO DE:VICENTE JOAQUIN TIRADO INTERNET 3.565.811 1.920.239", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-06-12", "description": "TRASPASO A:Tarjeta de Credito Tenp", "doc_number": null, "amount": 200000, "direction": "debit", "balance": 1720239, "raw_line": " 12/06 TRASPASO A:Tarjeta de Credito Tenp INTERNET 200.000 1.720.239", "platform": null, "real_origin": null, "counterparty": "Tarjeta de Credito Tenp", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-06-13", "description": "TRASPASO A:Luis Menghini E.", "doc_number": null, "amount": 7800, "direction": "debit", "balance": 1712439, "raw_line": " 13/06 TRASPASO A:Luis Menghini E. INTERNET 7.800 1.712.439", "platform": null, "real_origin": null, "counterparty": "Luis Menghini E.", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-06-23", "description": "TRASPASO A:Joel", "doc_number": null, "amount": 3000, "direction": "debit", "balance": 1709439, "raw_line": " 23/06 TRASPASO A:Joel INTERNET 3.000 1.709.439", "platform": null, "real_origin": null, "counterparty": "Joel", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-06-25", "description": "TRASPASO A:Muralla SPA", "doc_number": null, "amount": 20000, "direction": "debit", "balance": 1689439, "raw_line": " 25/06 TRASPASO A:Muralla SPA INTERNET 20.000 1.689.439", "platform": null, "real_origin": null, "counterparty": "Muralla SPA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-06-26", "description": "TRASPASO A:Tarjeta de Credito Tenp", "doc_number": null, "amount": 413992, "direction": "debit", "balance": 1275447, "raw_line": " 26/06 TRASPASO A:Tarjeta de Credito Tenp INTERNET 413.992 1.275.447", "platform": null, "real_origin": null, "counterparty": "Tarjeta de Credito Tenp", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-06-30", "description": "TRASPASO DE:Heidi Emma Andresen", "doc_number": null, "amount": 135000, "direction": "credit", "balance": null, "raw_line": " 30/06 TRASPASO DE:Heidi Emma Andresen INTERNET 135.000", "platform": null, "real_origin": null, "counterparty": "Heidi Emma Andresen", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Banco_de_Chile/7a726151acb9ed33-CartolaCuentaCorrienteNacionalMensual.pdf"}, {"statement_id": "e50e38a4", "gmail_id": "1987d8e0005c861c", "bank": "Banco de Chile", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-06-30", "period_end": "2025-07-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Banco_de_Chile/83309a3752621c1f-CartolaCuentaCorrienteNacionalMensual.pdf", "parser_version": "banco_de_chile/1", "transactions": [{"date": "2025-07-01", "description": "IMPUESTO LINEA DE CREDITO", "doc_number": null, "amount": 405, "direction": "debit", "balance": null, "raw_line": " 01/07 IMPUESTO LINEA DE CREDITO OF. LLOLLEO 405", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-01", "description": "INTERESES LINEA DE CREDITO", "doc_number": null, "amount": 4968, "direction": "debit", "balance": 1405074, "raw_line": " 01/07 INTERESES LINEA DE CREDITO OF. LLOLLEO 4.968 1.405.074", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-04", "description": "TRASPASO DE:EMA BLANCA MULLER CAST", "doc_number": null, "amount": 50000, "direction": "credit", "balance": 1455074, "raw_line": " 04/07 TRASPASO DE:EMA BLANCA MULLER CAST INTERNET 50.000 1.455.074", "platform": null, "real_origin": null, "counterparty": "EMA BLANCA MULLER CAST", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-07-08", "description": "TRASPASO A:Guzman Bracho", "doc_number": null, "amount": 3000, "direction": "debit", "balance": 1452074, "raw_line": " 08/07 TRASPASO A:Guzman Bracho INTERNET 3.000 1.452.074", "platform": null, "real_origin": null, "counterparty": "Guzman Bracho", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-07-10", "description": "PAP CENTINELA TARJ CREDITO", "doc_number": null, "amount": 156024, "direction": "debit", "balance": 1296050, "raw_line": " 10/07 PAP CENTINELA TARJ CREDITO CENTRAL 156.024 1.296.050", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-17", "description": "TRASPASO A:Tarjeta de Credito Ten", "doc_number": null, "amount": 300000, "direction": "debit", "balance": null, "raw_line": " 17/07 TRASPASO A:Tarjeta de Credito Ten INTERNET 300.000", "platform": null, "real_origin": null, "counterparty": "Tarjeta de Credito Ten", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-17", "description": "TRASPASO A:Tarjeta de Credito Tenp", "doc_number": null, "amount": 324101, "direction": "debit", "balance": 671949, "raw_line": " 17/07 TRASPASO A:Tarjeta de Credito Tenp INTERNET 324.101 671.949", "platform": null, "real_origin": null, "counterparty": "Tarjeta de Credito Tenp", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-21", "description": "PAGO TARJETA DE CREDITO", "doc_number": null, "amount": 78281, "direction": "debit", "balance": null, "raw_line": " 21/07 PAGO TARJETA DE CREDITO INTERNET 78.281", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-21", "description": "TRASPASO A:Darwin Alejandro Bruna", "doc_number": null, "amount": 100000, "direction": "debit", "balance": 493668, "raw_line": " 21/07 TRASPASO A:Darwin Alejandro Bruna INTERNET 100.000 493.668", "platform": null, "real_origin": null, "counterparty": "Darwin Alejandro Bruna", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-07-24", "description": "PAGO TARJETA DE CREDITO", "doc_number": null, "amount": 76491, "direction": "debit", "balance": null, "raw_line": " 24/07 PAGO TARJETA DE CREDITO INTERNET 76.491", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-24", "description": "PAGO EN SERVIPAG.COM*", "doc_number": null, "amount": 614370, "direction": "debit", "balance": null, "raw_line": " 24/07 PAGO EN SERVIPAG.COM* CENTRAL 614.370", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-24", "description": "TRASPASO A:Tarjeta de Credito Ten", "doc_number": null, "amount": 5000, "direction": "debit", "balance": null, "raw_line": " 24/07 TRASPASO A:Tarjeta de Credito Ten INTERNET 5.000", "platform": null, "real_origin": null, "counterparty": "Tarjeta de Credito Ten", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-24", "description": "CARGO POR PAGO TC", "doc_number": null, "amount": 400000, "direction": "debit", "balance": null, "raw_line": " 24/07 CARGO POR PAGO TC INTERNET 400.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-24", "description": "TRASPASO DE:VICENTE JOAQUIN TIRADO", "doc_number": null, "amount": 100000, "direction": "credit", "balance": null, "raw_line": " 24/07 TRASPASO DE:VICENTE JOAQUIN TIRADO INTERNET 100.000", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-07-24", "description": "TRASPASO DE:VINOS LABERINTO LIMITA", "doc_number": null, "amount": 172346, "direction": "credit", "balance": null, "raw_line": " 24/07 TRASPASO DE:VINOS LABERINTO LIMITA INTERNET 172.346", "platform": null, "real_origin": null, "counterparty": "VINOS LABERINTO LIMITA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-07-24", "description": "TRANSFERENCIA DESDE LINEA DE CREDI", "doc_number": null, "amount": 329847, "direction": "credit", "balance": 0, "raw_line": " 24/07 TRANSFERENCIA DESDE LINEA DE CREDI OF. LLOLLEO 329.847 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-28", "description": "TRASPASO A:Muralla SPA", "doc_number": null, "amount": 100000, "direction": "debit", "balance": null, "raw_line": " 28/07 TRASPASO A:Muralla SPA INTERNET 100.000", "platform": null, "real_origin": null, "counterparty": "Muralla SPA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-07-28", "description": "TRANSFERENCIA DESDE LINEA DE CREDI", "doc_number": null, "amount": 100000, "direction": "credit", "balance": 0, "raw_line": " 28/07 TRANSFERENCIA DESDE LINEA DE CREDI OF. LLOLLEO 100.000 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-29", "description": "TRASPASO A:Marisol", "doc_number": null, "amount": 5000, "direction": "debit", "balance": null, "raw_line": " 29/07 TRASPASO A:Marisol INTERNET 5.000", "platform": null, "real_origin": null, "counterparty": "Marisol", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-07-29", "description": "TRANSFERENCIA DESDE LINEA DE CREDI", "doc_number": null, "amount": 5000, "direction": "credit", "balance": 0, "raw_line": " 29/07 TRANSFERENCIA DESDE LINEA DE CREDI OF. LLOLLEO 5.000 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-30", "description": "PAGO LINEA DE CRED:011930152610", "doc_number": null, "amount": 434847, "direction": "debit", "balance": null, "raw_line": " 30/07 PAGO LINEA DE CRED:011930152610 INTERNET 434.847", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-30", "description": "PAGO EN SERVIPAG.COM*", "doc_number": null, "amount": 586209, "direction": "debit", "balance": null, "raw_line": " 30/07 PAGO EN SERVIPAG.COM* CENTRAL 586.209", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-30", "description": "CARGO POR PAGO TC", "doc_number": null, "amount": 3000000, "direction": "debit", "balance": null, "raw_line": " 30/07 CARGO POR PAGO TC INTERNET 3.000.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-30", "description": "GIRO CAJERO AUTOMATICO", "doc_number": null, "amount": 10000, "direction": "debit", "balance": null, "raw_line": " 30/07 GIRO CAJERO AUTOMATICO OF. LLOLLEO 10.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-30", "description": "PAGO:ARAF REIMPRESION", "doc_number": null, "amount": 3820, "direction": "debit", "balance": null, "raw_line": " 30/07 PAGO:ARAF REIMPRESION OF. LLOLLEO 3.820", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-30", "description": "TRASPASO A:Muralla SPA", "doc_number": null, "amount": 2000000, "direction": "debit", "balance": null, "raw_line": " 30/07 TRASPASO A:Muralla SPA INTERNET 2.000.000", "platform": null, "real_origin": null, "counterparty": "Muralla SPA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-07-30", "description": "TRASPASO A:Tarjeta de Credito Ten", "doc_number": null, "amount": 20000, "direction": "debit", "balance": null, "raw_line": " 30/07 TRASPASO A:Tarjeta de Credito Ten INTERNET 20.000", "platform": null, "real_origin": null, "counterparty": "Tarjeta de Credito Ten", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-30", "description": "TRASPASO A:Medio de Pago Fintoc", "doc_number": null, "amount": 9990, "direction": "debit", "balance": null, "raw_line": " 30/07 TRASPASO A:Medio de Pago Fintoc INTERNET 9.990", "platform": null, "real_origin": null, "counterparty": "Medio de Pago Fintoc", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}, {"date": "2025-07-30", "description": "TRASPASO DE:VICENTE JOAQUIN TIRADO", "doc_number": null, "amount": 1400000, "direction": "credit", "balance": null, "raw_line": " 30/07 TRASPASO DE:VICENTE JOAQUIN TIRADO INTERNET 1.400.000", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-07-30", "description": "TRANSFERENCIA DESDE LINEA DE CREDI", "doc_number": null, "amount": 20000, "direction": "credit", "balance": null, "raw_line": " 30/07 TRANSFERENCIA DESDE LINEA DE CREDI OF. LLOLLEO 20.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-30", "description": "TRASPASO DE:Muralla SPA", "doc_number": null, "amount": 1, "direction": "credit", "balance": null, "raw_line": " 30/07 TRASPASO DE:Muralla SPA INTERNET 1", "platform": null, "real_origin": null, "counterparty": "Muralla SPA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-07-30", "description": "TRASPASO DE:VICENTE JOAQUIN TIRADO", "doc_number": null, "amount": 3513894, "direction": "credit", "balance": null, "raw_line": " 30/07 TRASPASO DE:VICENTE JOAQUIN TIRADO INTERNET 3.513.894", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-07-30", "description": "TRASPASO DE:Muralla SPA", "doc_number": null, "amount": 238622, "direction": "credit", "balance": null, "raw_line": " 30/07 TRASPASO DE:Muralla SPA INTERNET 238.622", "platform": null, "real_origin": null, "counterparty": "Muralla SPA", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-07-30", "description": "TRASPASO DE:VICENTE JOAQUIN TIRADO", "doc_number": null, "amount": 534844, "direction": "credit", "balance": null, "raw_line": " 30/07 TRASPASO DE:VICENTE JOAQUIN TIRADO INTERNET 534.844", "platform": null, "real_origin": null, "counterparty": "VICENTE JOAQUIN TIRADO", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-07-30", "description": "TRANSFERENCIA DESDE LINEA DE CREDI", "doc_number": null, "amount": 357505, "direction": "credit", "balance": 0, "raw_line": " 30/07 TRANSFERENCIA DESDE LINEA DE CREDI OF. LLOLLEO 357.505 0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-07-31", "description": "PAGO EN SERVIPAG.COM*", "doc_number": null, "amount": 20000, "direction": "debit", "balance": null, "raw_line": " 31/07 PAGO EN SERVIPAG.COM* CENTRAL 20.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-31", "description": "TRASPASO A:Tarjeta de Credito Ten", "doc_number": null, "amount": 390000, "direction": "debit", "balance": null, "raw_line": " 31/07 TRASPASO A:Tarjeta de Credito Ten INTERNET 390.000", "platform": null, "real_origin": null, "counterparty": "Tarjeta de Credito Ten", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-31", "description": "PAGO:HIP LIDER BUENAVE", "doc_number": null, "amount": 91290, "direction": "debit", "balance": null, "raw_line": " 31/07 PAGO:HIP LIDER BUENAVE OF. LLOLLEO 91.290", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-31", "description": "TRANSFERENCIA DESDE LINEA DE CREDI", "doc_number": null, "amount": 501290, "direction": "credit", "balance": null, "raw_line": " 31/07 TRANSFERENCIA DESDE LINEA DE CREDI OF. LLOLLEO 501.290", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Banco_de_Chile/83309a3752621c1f-CartolaCuentaCorrienteNacionalMensual.pdf"}, {"statement_id": "dd18086a", "gmail_id": "197e85e8fcf66668", "bank": "Banco de Chile", "doc_type": "cuenta_corriente", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": null, "period_end": null, "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Banco_de_Chile/ab302a1b5dc21bde-LiqIntLDCPersona.pdf", "parser_version": "banco_de_chile/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Banco_de_Chile/ab302a1b5dc21bde-LiqIntLDCPersona.pdf"}, {"statement_id": "8053a4cf", "gmail_id": "19b2a33cbb0de2c2", "bank": "BCI", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-11-16", "period_end": "2025-12-15", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BCI/2a440b4fc842128b-170160864.pdf", "parser_version": "bci/1", "transactions": [{"date": "2025-12-01", "description": "IMPUESTO DL 3475 USO LINEA PM", "doc_number": null, "amount": 16, "direction": "debit", "balance": null, "raw_line": " 01/12/2025 IMPUESTO DL 3475 USO LINEA PM (T) $ 16", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-12-01", "description": "IMPUESTO DL 3475 USO LINEA", "doc_number": null, "amount": 125, "direction": "debit", "balance": null, "raw_line": " 01/12/2025 IMPUESTO DL 3475 USO LINEA (T) $ 125", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-12-16", "description": "INT. DE ATRASO O MORA", "doc_number": null, "amount": 801, "direction": "debit", "balance": null, "raw_line": " 16/12/2025 INT. DE ATRASO O MORA (T) $ 801", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-12-16", "description": "INT. LINEA DE CREDITO", "doc_number": null, "amount": 6144, "direction": "debit", "balance": null, "raw_line": " 16/12/2025 INT. LINEA DE CREDITO (T) $ 6.144", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-12-16", "description": "COM ADMINISTRACION|MANTENCION", "doc_number": null, "amount": 8291, "direction": "debit", "balance": null, "raw_line": " 16/12/2025 COM ADMINISTRACION|MANTENCION (T) $ 8.291", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BCI/2a440b4fc842128b-170160864.pdf"}, {"statement_id": "ae630141", "gmail_id": "19a94b008f544101", "bank": "BCI", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-10-16", "period_end": "2025-11-15", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BCI/9c3adca1a299e2d4-170160864.pdf", "parser_version": "bci/1", "transactions": [{"date": "2025-11-01", "description": "IMPUESTO DL 3475 USO LINEA PM", "doc_number": null, "amount": 2, "direction": "debit", "balance": null, "raw_line": " 01/11/2025 IMPUESTO DL 3475 USO LINEA PM (T) $ 2", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-01", "description": "IMPUESTO DL 3475 USO LINEA", "doc_number": null, "amount": 130, "direction": "debit", "balance": null, "raw_line": " 01/11/2025 IMPUESTO DL 3475 USO LINEA (T) $ 130", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-14", "description": "AJUSTE DE SALDOS MENORES", "doc_number": null, "amount": 2644, "direction": "credit", "balance": null, "raw_line": " 14/11/2025 AJUSTE DE SALDOS MENORES (T) $ -2.644", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-11-14", "description": "AJUSTE DE SALDOS MENORES", "doc_number": null, "amount": 2644, "direction": "debit", "balance": null, "raw_line": " 14/11/2025 AJUSTE DE SALDOS MENORES (T) $ 2.644", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-11-16", "description": "INT. DE ATRASO O MORA", "doc_number": null, "amount": 39, "direction": "debit", "balance": null, "raw_line": " 16/11/2025 INT. DE ATRASO O MORA (T) $ 39", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-11-16", "description": "INT. LINEA DE CREDITO", "doc_number": null, "amount": 6181, "direction": "debit", "balance": null, "raw_line": " 16/11/2025 INT. LINEA DE CREDITO (T) $ 6.181", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2025-11-16", "description": "COM ADMINISTRACION|MANTENCION", "doc_number": null, "amount": 8286, "direction": "debit", "balance": null, "raw_line": " 16/11/2025 COM ADMINISTRACION|MANTENCION (T) $ 8.286", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BCI/9c3adca1a299e2d4-170160864.pdf"}, {"statement_id": "67f8a0ea", "gmail_id": "19c6ca4932b14d53", "bank": "BCI", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2026-01-16", "period_end": "2026-02-15", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BCI/b86effc97539a8fa-170160864.pdf", "parser_version": "bci/1", "transactions": [{"date": "2026-01-21", "description": "CARGO COBRANZA", "doc_number": null, "amount": 2228, "direction": "debit", "balance": null, "raw_line": " 21/01/2026 CARGO COBRANZA (T) $ 2.228", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-01", "description": "IMPUESTO DL 3475 USO LINEA PM", "doc_number": null, "amount": 50, "direction": "debit", "balance": null, "raw_line": " 01/02/2026 IMPUESTO DL 3475 USO LINEA PM (T) $ 50", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-02-01", "description": "IMPUESTO DL 3475 USO LINEA", "doc_number": null, "amount": 113, "direction": "debit", "balance": null, "raw_line": " 01/02/2026 IMPUESTO DL 3475 USO LINEA (T) $ 113", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-02-16", "description": "INT. DE ATRASO O MORA", "doc_number": null, "amount": 2124, "direction": "debit", "balance": null, "raw_line": " 16/02/2026 INT. DE ATRASO O MORA (T) $ 2.124", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-16", "description": "INT. LINEA DE CREDITO", "doc_number": null, "amount": 5036, "direction": "debit", "balance": null, "raw_line": " 16/02/2026 INT. LINEA DE CREDITO (T) $ 5.036", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2026-02-16", "description": "COM ADMINISTRACION|MANTENCION", "doc_number": null, "amount": 8302, "direction": "debit", "balance": null, "raw_line": " 16/02/2026 COM ADMINISTRACION|MANTENCION (T) $ 8.302", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BCI/b86effc97539a8fa-170160864.pdf"}, {"statement_id": "cf617128", "gmail_id": "19bd2c9357c830be", "bank": "BCI", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-12-16", "period_end": "2026-01-15", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BCI/c07cf4811f9bdcca-170160864.pdf", "parser_version": "bci/1", "transactions": [{"date": "2025-12-21", "description": "CARGO COBRANZA", "doc_number": null, "amount": 2205, "direction": "debit", "balance": null, "raw_line": " 21/12/2025 CARGO COBRANZA (T) $ 2.205", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-01", "description": "IMPUESTO DL 3475 USO LINEA PM", "doc_number": null, "amount": 33, "direction": "debit", "balance": null, "raw_line": " 01/01/2026 IMPUESTO DL 3475 USO LINEA PM (T) $ 33", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-01-01", "description": "IMPUESTO DL 3475 USO LINEA", "doc_number": null, "amount": 119, "direction": "debit", "balance": null, "raw_line": " 01/01/2026 IMPUESTO DL 3475 USO LINEA (T) $ 119", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-01-16", "description": "INT. DE ATRASO O MORA", "doc_number": null, "amount": 1580, "direction": "debit", "balance": null, "raw_line": " 16/01/2026 INT. DE ATRASO O MORA (T) $ 1.580", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-01-16", "description": "INT. LINEA DE CREDITO", "doc_number": null, "amount": 5852, "direction": "debit", "balance": null, "raw_line": " 16/01/2026 INT. LINEA DE CREDITO (T) $ 5.852", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "credit_line", "internal": true}, {"date": "2026-01-16", "description": "COM ADMINISTRACION|MANTENCION", "doc_number": null, "amount": 8307, "direction": "debit", "balance": null, "raw_line": " 16/01/2026 COM ADMINISTRACION|MANTENCION (T) $ 8.307", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BCI/c07cf4811f9bdcca-170160864.pdf"}, {"statement_id": "4b9937f3", "gmail_id": "198babec804ffbce", "bank": "BCI", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-07-16", "period_end": "2025-08-15", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BCI/da432f04a7bebe88-170160864.pdf", "parser_version": "bci/1", "transactions": [{"date": "2025-07-31", "description": "PAGO", "doc_number": null, "amount": 20000, "direction": "credit", "balance": null, "raw_line": " 31/07/2025 PAGO $ -20.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BCI/da432f04a7bebe88-170160864.pdf"}, {"statement_id": "95041388", "gmail_id": "199eee4813d26c3d", "bank": "BCI", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-09-16", "period_end": "2025-10-15", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/BCI/f994a7c6bbdb158f-170160864.pdf", "parser_version": "bci/1", "transactions": [{"date": "2025-10-01", "description": "RENIMA PORTUGAL · SANTIAGO CL", "doc_number": null, "amount": 2200, "direction": "debit", "balance": null, "raw_line": "SANTIAGO CL 01/10/2025 RENIMA PORTUGAL (T) $ 2.200", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-01", "description": "PIZZA IMPERIO SPA · SANTIAGO CL", "doc_number": null, "amount": 5500, "direction": "debit", "balance": null, "raw_line": "SANTIAGO CL 01/10/2025 PIZZA IMPERIO SPA (T) $ 5.500", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-01", "description": "STA ISABEL PORTUGAL · SANTIAGO CL", "doc_number": null, "amount": 10350, "direction": "debit", "balance": null, "raw_line": "SANTIAGO CL 01/10/2025 STA ISABEL PORTUGAL (T) $ 10.350", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-01", "description": "MERCADOPAGO*COMERCIALIZAD · ADLas Condes CL", "doc_number": null, "amount": 10400, "direction": "debit", "balance": null, "raw_line": "ADLas Condes CL 01/10/2025 MERCADOPAGO*COMERCIALIZAD (T) $ 10.400", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-01", "description": "MERCADO PAGO · SANTIAGO CL", "doc_number": null, "amount": 100000, "direction": "debit", "balance": null, "raw_line": "SANTIAGO CL 01/10/2025 MERCADO PAGO (T) $ 100.000", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-02", "description": "MERCADOPAGO*3PRODUCTOS · Las Condes CL", "doc_number": null, "amount": 35952, "direction": "debit", "balance": null, "raw_line": "Las Condes CL 02/10/2025 MERCADOPAGO*3PRODUCTOS (T) $ 35.952", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-03", "description": "TENDERINO · SANTIAGO CL", "doc_number": null, "amount": 3100, "direction": "debit", "balance": null, "raw_line": "SANTIAGO CL 03/10/2025 TENDERINO (T) $ 3.100", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-03", "description": "PARADISO CAFE · SANTIAGO CL", "doc_number": null, "amount": 3190, "direction": "debit", "balance": null, "raw_line": "SANTIAGO CL 03/10/2025 PARADISO CAFE (T) $ 3.190", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-04", "description": "PAYU *UBER EATS · SANTIAGO CL", "doc_number": null, "amount": 17723, "direction": "debit", "balance": null, "raw_line": "SANTIAGO CL 04/10/2025 PAYU *UBER EATS (T) $ 17.723", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-05", "description": "PAYU *UBER EATS · SANTIAGO CL", "doc_number": null, "amount": 1500, "direction": "debit", "balance": null, "raw_line": "SANTIAGO CL 05/10/2025 PAYU *UBER EATS (T) $ 1.500", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-05", "description": "PARADISO CAFE · SANTIAGO CL", "doc_number": null, "amount": 4380, "direction": "debit", "balance": null, "raw_line": "SANTIAGO CL 05/10/2025 PARADISO CAFE (T) $ 4.380", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-05", "description": "PAYU *UBER EATS · SANTIAGO CL", "doc_number": null, "amount": 20504, "direction": "debit", "balance": null, "raw_line": "SANTIAGO CL 05/10/2025 PAYU *UBER EATS (T) $ 20.504", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-16", "description": "-50% DCTO COM ADM|MANTENCION", "doc_number": null, "amount": 4130, "direction": "debit", "balance": null, "raw_line": " 16/10/2025 -50% DCTO COM ADM|MANTENCION (T) $ 4.130", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/BCI/f994a7c6bbdb158f-170160864.pdf"}, {"statement_id": "1b9830c5", "gmail_id": "199d675223fb0972", "bank": "MACH", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-09-01", "period_end": "2025-10-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/2d8455966b95e753-Cartola_CtaCte_MACHBANK_de_septiembre_2025.pdf", "parser_version": "mach/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/2d8455966b95e753-Cartola_CtaCte_MACHBANK_de_septiembre_2025.pdf"}, {"statement_id": "fb739e37", "gmail_id": "19d89a95c4e26200", "bank": "MACH", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2026-03-01", "period_end": "2026-04-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/2e5b187d2e9ddadd-Cartola_CtaCte_MACHBANK_de_marzo_2026.pdf", "parser_version": "mach/1", "transactions": [{"date": "2026-03-25", "description": "Transferencia de Muralla Spa", "doc_number": null, "amount": 3820, "direction": "credit", "balance": 3820, "raw_line": "25/03/2026 Transferencia de Muralla Spa CLP $3.820 $3.820", "platform": null, "real_origin": null, "counterparty": "Muralla Spa", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-25", "description": "Compra con tarjeta virtual - ARAF REIMPRESION 1", "doc_number": null, "amount": 3820, "direction": "debit", "balance": null, "raw_line": "25/03/2026 Compra con tarjeta virtual - ARAF REIMPRESION 1 CLP $3.820 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/2e5b187d2e9ddadd-Cartola_CtaCte_MACHBANK_de_marzo_2026.pdf"}, {"statement_id": "412462f4", "gmail_id": "19a72a4c4c9e9dd3", "bank": "MACH", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-10-01", "period_end": "2025-11-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/42224cef682ad17b-Cartola_CtaCte_MACHBANK_de_octubre_2025.pdf", "parser_version": "mach/1", "transactions": [{"date": "2025-10-06", "description": "Transferencia de Vicente Tirado Andresen", "doc_number": null, "amount": 250000, "direction": "credit", "balance": 250889, "raw_line": "06/10/2025 Transferencia de Vicente Tirado Andresen CLP $250.000 $250.889", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado Andresen", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-10-06", "description": "Transferencia de Vicente Joaquin Tirado", "doc_number": null, "amount": 90463, "direction": "credit", "balance": 341352, "raw_line": "06/10/2025 Transferencia de Vicente Joaquin Tirado CLP $90.463 $341.352", "platform": null, "real_origin": null, "counterparty": "Vicente Joaquin Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-10-06", "description": "Compra Mach Comercios - Servipag", "doc_number": null, "amount": 274985, "direction": "debit", "balance": 66367, "raw_line": "06/10/2025 Compra Mach Comercios - Servipag CLP $274.985 $66.367", "platform": "MACH", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-09", "description": "Transferencia a Vicente Tirado", "doc_number": null, "amount": 66000, "direction": "debit", "balance": 367, "raw_line": "09/10/2025 Transferencia a Vicente Tirado CLP $66.000 $367", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-10-18", "description": "Transferencia de Vicente Joaquin Tirado", "doc_number": null, "amount": 100000, "direction": "credit", "balance": 100367, "raw_line": "18/10/2025 Transferencia de Vicente Joaquin Tirado CLP $100.000 $100.367", "platform": null, "real_origin": null, "counterparty": "Vicente Joaquin Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-10-18", "description": "Transferencia a Darwin Alejandro Bruna", "doc_number": null, "amount": 50000, "direction": "debit", "balance": 50367, "raw_line": "18/10/2025 Transferencia a Darwin Alejandro Bruna CLP $50.000 $50.367", "platform": null, "real_origin": null, "counterparty": "Darwin Alejandro Bruna", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "inter_person", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/42224cef682ad17b-Cartola_CtaCte_MACHBANK_de_octubre_2025.pdf"}, {"statement_id": "66e49c05", "gmail_id": "19cdd6518488e781", "bank": "MACH", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2026-02-01", "period_end": "2026-03-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/6e5f3b0ecde2ced3-Cartola_CtaCte_MACHBANK_de_febrero_2026.pdf", "parser_version": "mach/1", "transactions": [{"date": "2026-02-19", "description": "Transferencia de Muralla Spa", "doc_number": null, "amount": 35982, "direction": "credit", "balance": 35982, "raw_line": "19/02/2026 Transferencia de Muralla Spa CLP $35.982 $35.982", "platform": null, "real_origin": null, "counterparty": "Muralla Spa", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-02-19", "description": "Compra con tarjeta virtual - 1", "doc_number": null, "amount": 35982, "direction": "debit", "balance": null, "raw_line": "19/02/2026 Compra con tarjeta virtual - 1 CLP $35.982 $0", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/6e5f3b0ecde2ced3-Cartola_CtaCte_MACHBANK_de_febrero_2026.pdf"}, {"statement_id": "c4ebcde6", "gmail_id": "19bace62fc0c4979", "bank": "MACH", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-12-01", "period_end": "2026-01-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/74375ce8fed4ee0c-Cartola_CtaCte_MACHBANK_de_diciembre_2025.pdf", "parser_version": "mach/1", "transactions": [{"date": "2025-12-14", "description": "Compra con tarjeta virtual - APPLE.COM/BILL 1", "doc_number": null, "amount": 1490, "direction": "debit", "balance": 48877, "raw_line": "14/12/2025 Compra con tarjeta virtual - APPLE.COM/BILL 1 CLP $1.490 $48.877", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-12-19", "description": "Compra con tarjeta virtual - 1", "doc_number": null, "amount": 9980, "direction": "debit", "balance": 38897, "raw_line": "19/12/2025 Compra con tarjeta virtual - 1 CLP $9.980 $38.897", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-12-20", "description": "Transferencia a Vicente Tirado", "doc_number": null, "amount": 38897, "direction": "debit", "balance": null, "raw_line": "20/12/2025 Transferencia a Vicente Tirado CLP $38.897 $0", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-12-23", "description": "Transferencia de Marcelino Enrique Fuentes", "doc_number": null, "amount": 50000, "direction": "credit", "balance": 50000, "raw_line": "23/12/2025 Transferencia de Marcelino Enrique Fuentes CLP $50.000 $50.000", "platform": null, "real_origin": null, "counterparty": "Marcelino Enrique Fuentes", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-12-23", "description": "Transferencia a Vicente Tirado", "doc_number": null, "amount": 50000, "direction": "debit", "balance": null, "raw_line": "23/12/2025 Transferencia a Vicente Tirado CLP $50.000 $0", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/74375ce8fed4ee0c-Cartola_CtaCte_MACHBANK_de_diciembre_2025.pdf"}, {"statement_id": "ced18e72", "gmail_id": "198041c74bb52aaa", "bank": "MACH", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-06-01", "period_end": "2025-07-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/7c4c91b26ce45d0a-Cartola_CtaCte_MACHBANK_de_junio_2025.pdf", "parser_version": "mach/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/7c4c91b26ce45d0a-Cartola_CtaCte_MACHBANK_de_junio_2025.pdf"}, {"statement_id": "825d3466", "gmail_id": "198a611dd13b9f12", "bank": "MACH", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-07-01", "period_end": "2025-08-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/b8e1f2646746d733-Cartola_CtaCte_MACHBANK_de_julio_2025.pdf", "parser_version": "mach/1", "transactions": [{"date": "2025-07-24", "description": "Transferencia de Vicente Joaquin Tirado", "doc_number": null, "amount": 5000, "direction": "credit", "balance": 5000, "raw_line": "24/07/2025 Transferencia de Vicente Joaquin Tirado CLP $5.000 $5.000", "platform": null, "real_origin": null, "counterparty": "Vicente Joaquin Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-07-24", "description": "Pago de MACH Premium - Cuenta MACH", "doc_number": null, "amount": 4990, "direction": "debit", "balance": 10, "raw_line": "24/07/2025 Pago de MACH Premium - Cuenta MACH CLP $4.990 $10", "platform": "MACH", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-24", "description": "Recarga con tarjeta crédito", "doc_number": null, "amount": 100000, "direction": "credit", "balance": 100010, "raw_line": "24/07/2025 Recarga con tarjeta crédito CLP $100.000 $100.010", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-07-24", "description": "Transferencia a Vicente Tirado", "doc_number": null, "amount": 100000, "direction": "debit", "balance": 10, "raw_line": "24/07/2025 Transferencia a Vicente Tirado CLP $100.000 $10", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/b8e1f2646746d733-Cartola_CtaCte_MACHBANK_de_julio_2025.pdf"}, {"statement_id": "126eac75", "gmail_id": "199479e366d703ca", "bank": "MACH", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-08-01", "period_end": "2025-09-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/bb8ac304b6ac5d54-Cartola_CtaCte_MACHBANK_de_agosto_2025.pdf", "parser_version": "mach/1", "transactions": [{"date": "2025-08-05", "description": "Recarga con tarjeta crédito", "doc_number": null, "amount": 100000, "direction": "credit", "balance": 100010, "raw_line": "05/08/2025 Recarga con tarjeta crédito CLP $100.000 $100.010", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-08-10", "description": "Compra Mach Comercios - PAGOS.FLOW.CL", "doc_number": null, "amount": 950, "direction": "debit", "balance": 99060, "raw_line": "10/08/2025 Compra Mach Comercios - PAGOS.FLOW.CL CLP $950 $99.060", "platform": "MACH", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-16", "description": "Transferencia a Vicente Tirado", "doc_number": null, "amount": 99060, "direction": "debit", "balance": 0, "raw_line": "16/08/2025 Transferencia a Vicente Tirado CLP $99.060 $0", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-08-31", "description": "Abono cashback de AliExpress - BciPlus+", "doc_number": null, "amount": 889, "direction": "debit", "balance": 889, "raw_line": "31/08/2025 Abono cashback de AliExpress - BciPlus+ CLP $889 $889", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/bb8ac304b6ac5d54-Cartola_CtaCte_MACHBANK_de_agosto_2025.pdf"}, {"statement_id": "894328d5", "gmail_id": "19c5444817abe77c", "bank": "MACH", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2026-01-01", "period_end": "2026-02-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/cf71ad181f6eb3e9-Cartola_CtaCte_MACHBANK_de_enero_2026.pdf", "parser_version": "mach/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/cf71ad181f6eb3e9-Cartola_CtaCte_MACHBANK_de_enero_2026.pdf"}, {"statement_id": "dce72841", "gmail_id": "19b0f6c4b5d5a272", "bank": "MACH", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-11-01", "period_end": "2025-12-01", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/fb5c16f3a8d3472c-Cartola_CtaCte_MACHBANK_de_noviembre_2025.pdf", "parser_version": "mach/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Unknown/fb5c16f3a8d3472c-Cartola_CtaCte_MACHBANK_de_noviembre_2025.pdf"}, {"statement_id": "99284e5f", "gmail_id": "19a4f9b7d0ac96b6", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-10-01", "period_end": "2025-10-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/048200e94f3cc52c-5EA0DEA3_01B1_4C3B_9352_2F2D7256DA4A_11_2025_1762272179664.pdf", "parser_version": "tenpo/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/048200e94f3cc52c-5EA0DEA3_01B1_4C3B_9352_2F2D7256DA4A_11_2025_1762272179664.pdf"}, {"statement_id": "f51d7777", "gmail_id": "19d310060859054e", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2026-02-01", "period_end": "2026-02-28", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/17bc02862e4e6cf7-DC1C7CEF_F645_45A6_BCEA_A4BB40873EC9_03_2026_1774643600002.pdf", "parser_version": "tenpo/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/17bc02862e4e6cf7-DC1C7CEF_F645_45A6_BCEA_A4BB40873EC9_03_2026_1774643600002.pdf"}, {"statement_id": "ee5810e5", "gmail_id": "1991539424243225", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-08-01", "period_end": "2025-08-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/33a17a8bfe203192-B29F7742_7E0A_4A09_9958_E817E510FEF0_09_2025_1756997698041.pdf", "parser_version": "tenpo/1", "transactions": [{"date": "2025-08-05", "description": "Pago a DARWIN ALEJANDRO", "doc_number": null, "amount": 11000, "direction": "debit", "balance": null, "raw_line": "05/08 Pago a DARWIN ALEJANDRO Transferencia $ 11.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-21", "description": "Pago de mora de tarjeta de crédito", "doc_number": null, "amount": 1001, "direction": "debit", "balance": null, "raw_line": "21/08 Pago de mora de tarjeta de crédito Inversión $ 1.001", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-08-21", "description": "Transferencia de Vicente Joaquin Tirado Carga de saldo", "doc_number": null, "amount": 50000, "direction": "credit", "balance": null, "raw_line": "21/08 Transferencia de Vicente Joaquin Tirado Carga de saldo $ 50.000", "platform": null, "real_origin": null, "counterparty": "Vicente Joaquin Tirado Carga de saldo", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-08-21", "description": "Pago de mora de tarjeta de crédito", "doc_number": null, "amount": 17486, "direction": "debit", "balance": null, "raw_line": "21/08 Pago de mora de tarjeta de crédito Inversión $ 17.486", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/33a17a8bfe203192-B29F7742_7E0A_4A09_9958_E817E510FEF0_09_2025_1756997698041.pdf"}, {"statement_id": "d7fe07bf", "gmail_id": "199b19699e599422", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-09-01", "period_end": "2025-09-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/471feae7af5daa94-1741B637_DCF3_4AE7_8073_4F072852805D_10_2025_1759621060408.pdf", "parser_version": "tenpo/1", "transactions": [{"date": "2025-09-02", "description": "SiteGround Spain", "doc_number": null, "amount": 20241, "direction": "debit", "balance": null, "raw_line": "02/09 SiteGround Spain Compra $ 20.241", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-03", "description": "SITEGROUND SPAIN", "doc_number": null, "amount": 20241, "direction": "debit", "balance": null, "raw_line": "03/09 SITEGROUND SPAIN Compra $ 20.241", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-05", "description": "SiteGround Spain", "doc_number": null, "amount": 20241, "direction": "credit", "balance": null, "raw_line": "05/09 SiteGround Spain Devolución $ 20.241", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-09-09", "description": "ANTHROPIC", "doc_number": null, "amount": 5983, "direction": "debit", "balance": null, "raw_line": "09/09 ANTHROPIC Compra $ 5.983", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-18", "description": "Transferencia a Vicente Tirado", "doc_number": null, "amount": 6290, "direction": "debit", "balance": null, "raw_line": "18/09 Transferencia a Vicente Tirado Inversión $ 6.290", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/471feae7af5daa94-1741B637_DCF3_4AE7_8073_4F072852805D_10_2025_1759621060408.pdf"}, {"statement_id": "f0f3cb8d", "gmail_id": "19d8812b7a210380", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2026-03-01", "period_end": "2026-03-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/83ae255c6274246a-A315D9FE_4E97_4136_BC09_EB8B102906DE_04_2026_1776104420682.pdf", "parser_version": "tenpo/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/83ae255c6274246a-A315D9FE_4E97_4136_BC09_EB8B102906DE_04_2026_1776104420682.pdf"}, {"statement_id": "916ee280", "gmail_id": "19b89f439e310517", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-12-01", "period_end": "2025-12-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/92870b2c72ff20d9-F298F6C4_6B64_4DBD_9A28_B0DDE33D5D7F_01_2026_1767546041795.pdf", "parser_version": "tenpo/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/92870b2c72ff20d9-F298F6C4_6B64_4DBD_9A28_B0DDE33D5D7F_01_2026_1767546041795.pdf"}, {"statement_id": "9435cade", "gmail_id": "19ded9a0d2dfd9a1", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2026-04-01", "period_end": "2026-04-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/9d39e8a3d558f322-33094A8F_F3CF_4AFC_9B7C_3B332B5DA381_05_2026_1777807788872.pdf", "parser_version": "tenpo/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/9d39e8a3d558f322-33094A8F_F3CF_4AFC_9B7C_3B332B5DA381_05_2026_1777807788872.pdf"}, {"statement_id": "83e86920", "gmail_id": "19aed26319799439", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-11-01", "period_end": "2025-11-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/a525d960efdf638f-36BF9AD5_2EC6_4CB7_82EB_F802CECCCDF1_12_2025_1764915292635.pdf", "parser_version": "tenpo/1", "transactions": [{"date": "2025-11-25", "description": "Pago de mora de tarjeta de crédito", "doc_number": null, "amount": 2, "direction": "debit", "balance": null, "raw_line": "25/11 Pago de mora de tarjeta de crédito Inversión $2", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-11-25", "description": "Canje Tenpesos por Dinero Carga de saldo", "doc_number": null, "amount": 2, "direction": "credit", "balance": null, "raw_line": "25/11 Canje Tenpesos por Dinero Carga de saldo $2", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/a525d960efdf638f-36BF9AD5_2EC6_4CB7_82EB_F802CECCCDF1_12_2025_1764915292635.pdf"}, {"statement_id": "ecdaaa05", "gmail_id": "19c2d4f021f853d4", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2026-01-01", "period_end": "2026-01-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/d7f5c8978dec43f2-603CFCC8_81D4_4019_84B8_88FA4F8F34A2_02_2026_1770286678123.pdf", "parser_version": "tenpo/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/d7f5c8978dec43f2-603CFCC8_81D4_4019_84B8_88FA4F8F34A2_02_2026_1770286678123.pdf"}, {"statement_id": "6c5b471e", "gmail_id": "197d5d884d12a9e7", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-06-01", "period_end": "2025-06-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/dfdbe70c778984f2-D40FF864_9111_457F_9E69_4B1B50B5E32B_07_2025_1751639425623.pdf", "parser_version": "tenpo/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/dfdbe70c778984f2-D40FF864_9111_457F_9E69_4B1B50B5E32B_07_2025_1751639425623.pdf"}, {"statement_id": "f5be327f", "gmail_id": "19875b1f282789f3", "bank": "Tenpo", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": null, "account_last4": null, "period_start": "2025-07-01", "period_end": "2025-07-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/f8a19cced2e2e619-33C65950_2A9C_4A60_A47F_1DD04BF24145_08_2025_1754321252620.pdf", "parser_version": "tenpo/1", "transactions": [{"date": "2025-07-18", "description": "Canje de Tenpesos por dinero Carga de saldo", "doc_number": null, "amount": 12001, "direction": "credit", "balance": null, "raw_line": "18/07 Canje de Tenpesos por dinero Carga de saldo $ 12.001", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Tenpo/f8a19cced2e2e619-33C65950_2A9C_4A60_A47F_1DD04BF24145_08_2025_1754321252620.pdf"}, {"statement_id": "0b8e3f48", "gmail_id": "197cf2bff6ccccc3", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2025-06-01", "period_end": "2025-06-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/1236758f1b981406-cartola.pdf", "parser_version": "copecpay/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/1236758f1b981406-cartola.pdf"}, {"statement_id": "fe030925", "gmail_id": "19cb2ecc4629e690", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2026-02-01", "period_end": "2026-02-28", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/2e07e71cf8640546-cartola.pdf", "parser_version": "copecpay/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/2e07e71cf8640546-cartola.pdf"}, {"statement_id": "a61159b4", "gmail_id": "199a91e380f028d0", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2025-09-01", "period_end": "2025-09-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/394cba80e4156231-cartola.pdf", "parser_version": "copecpay/1", "transactions": [{"date": "2025-09-18", "description": "Transferencia de Vicente Joaquin Tirado Andresen", "doc_number": null, "amount": 6290, "direction": "credit", "balance": 6823, "raw_line": " 18-09-2025 Transferencia de Vicente Joaquin Tirado Andresen $0 $6.290 $6.823", "platform": null, "real_origin": null, "counterparty": "Vicente Joaquin Tirado Andresen", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-09-18", "description": "Transferencia de Tirado Andresen Vicente Joaquin", "doc_number": null, "amount": 20000, "direction": "credit", "balance": 26823, "raw_line": " 18-09-2025 Transferencia de Tirado Andresen Vicente Joaquin $0 $20.000 $26.823", "platform": null, "real_origin": null, "counterparty": "Tirado Andresen Vicente Joaquin", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2025-09-18", "description": "Compra en Blue Express", "doc_number": null, "amount": 6990, "direction": "debit", "balance": 19833, "raw_line": " 18-09-2025 Compra en Blue Express $6.990 $0 $19.833", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/394cba80e4156231-cartola.pdf"}, {"statement_id": "4da7571d", "gmail_id": "19b82ede7e678a05", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2025-12-01", "period_end": "2025-12-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/4d91dfe0d77019ca-cartola.pdf", "parser_version": "copecpay/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/4d91dfe0d77019ca-cartola.pdf"}, {"statement_id": "e34f2fe3", "gmail_id": "19a4863920651f36", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2025-10-01", "period_end": "2025-10-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/9f5a8f4e7e1ce90a-cartola.pdf", "parser_version": "copecpay/1", "transactions": [{"date": "2025-10-07", "description": "Carga con tarjeta Tarjeta Bancaria", "doc_number": null, "amount": 30000, "direction": "credit", "balance": 49833, "raw_line": " 07-10-2025 Carga con tarjeta Tarjeta Bancaria $0 $30.000 $49.833", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-10-09", "description": "Compra tarjeta digital MERCADOPAGO *8PRODUCT", "doc_number": null, "amount": 39021, "direction": "debit", "balance": 10812, "raw_line": " 09-10-2025 Compra tarjeta digital MERCADOPAGO *8PRODUCT $39.021 $0 $10.812", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/9f5a8f4e7e1ce90a-cartola.pdf"}, {"statement_id": "14a1645e", "gmail_id": "19ded0efca8866c3", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2026-04-01", "period_end": "2026-04-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/a042316ffb2c73db-cartola.pdf", "parser_version": "copecpay/1", "transactions": [{"date": "2026-04-10", "description": "Compra tarjeta digital DL*RAPPI PRO CHILE", "doc_number": null, "amount": 3990, "direction": "debit", "balance": 6822, "raw_line": " 10-04-2026 Compra tarjeta digital DL*RAPPI PRO CHILE $3.990 $0 $6.822", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/a042316ffb2c73db-cartola.pdf"}, {"statement_id": "b7065b52", "gmail_id": "1986ee9ac0715fb0", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2025-07-01", "period_end": "2025-07-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/b11a27c433e90a19-cartola.pdf", "parser_version": "copecpay/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/b11a27c433e90a19-cartola.pdf"}, {"statement_id": "2cbb130b", "gmail_id": "1990e874cdc25f6b", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2025-08-01", "period_end": "2025-08-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/b1592758c8530e8e-cartola.pdf", "parser_version": "copecpay/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/b1592758c8530e8e-cartola.pdf"}, {"statement_id": "f7476c29", "gmail_id": "19c229d0696a0ae2", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2026-01-01", "period_end": "2026-01-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/c29a2bf1ef94c644-cartola.pdf", "parser_version": "copecpay/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/c29a2bf1ef94c644-cartola.pdf"}, {"statement_id": "e2f379d3", "gmail_id": "19ae352e1b45d8a2", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2025-11-01", "period_end": "2025-11-30", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/e2d7e81c8ee9a845-cartola.pdf", "parser_version": "copecpay/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/e2d7e81c8ee9a845-cartola.pdf"}, {"statement_id": "b22b29db", "gmail_id": "19d52d084f4bbcae", "bank": "CopecPay", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "XXXXXXX0901", "account_last4": "0901", "period_start": "2026-03-01", "period_end": "2026-03-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/fcb27fa29b217831-cartola.pdf", "parser_version": "copecpay/1", "transactions": [], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/CopecPay/fcb27fa29b217831-cartola.pdf"}, {"statement_id": "179f2291", "gmail_id": "19d787ed63b1644c", "bank": "Prex", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "11774148", "account_last4": "4148", "period_start": "2026-03-01", "period_end": "2026-03-31", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Prex/16818d3c8489536e-2026-03_CARTOLA_8.PDF", "parser_version": "prex/1", "transactions": [{"date": "2026-03-02", "description": "Rendimiento Diario", "doc_number": null, "amount": 2, "direction": "credit", "balance": null, "raw_line": " 02/03/2026 Rendimiento Diario - 2 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-05", "description": "UBER", "doc_number": null, "amount": 3990, "direction": "debit", "balance": null, "raw_line": " 05/03/2026 UBER - - 3.990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-11", "description": "Carga de transferencia", "doc_number": null, "amount": 100000, "direction": "credit", "balance": null, "raw_line": " 11/03/2026 Carga de transferencia - 100.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-11", "description": "PAYU *UBER EATS", "doc_number": null, "amount": 33817, "direction": "debit", "balance": null, "raw_line": " 11/03/2026 PAYU *UBER EATS - - 33.817", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-11", "description": "PAYU *UBER EATS", "doc_number": null, "amount": 32847, "direction": "credit", "balance": null, "raw_line": " 11/03/2026 PAYU *UBER EATS - 32.847 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-11", "description": "PAYU *UBER EATS", "doc_number": null, "amount": 970, "direction": "credit", "balance": null, "raw_line": " 11/03/2026 PAYU *UBER EATS - 970 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-11", "description": "PAYU *UBER EATS", "doc_number": null, "amount": 1000, "direction": "debit", "balance": null, "raw_line": " 11/03/2026 PAYU *UBER EATS - - 1.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-12", "description": "Carga de transferencia", "doc_number": null, "amount": 100000, "direction": "credit", "balance": null, "raw_line": " 12/03/2026 Carga de transferencia - 100.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-12", "description": "HIP LIDER BUENAVENTURA", "doc_number": null, "amount": 79022, "direction": "debit", "balance": null, "raw_line": " 12/03/2026 HIP LIDER BUENAVENTURA - - 79.022", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-12", "description": "Rendimiento Diario", "doc_number": null, "amount": 7, "direction": "credit", "balance": null, "raw_line": " 12/03/2026 Rendimiento Diario - 7 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-12", "description": "SUMUP * GELATERIA Y M", "doc_number": null, "amount": 1200, "direction": "debit", "balance": null, "raw_line": " 12/03/2026 SUMUP * GELATERIA Y M - - 1.200", "platform": "SUMUP", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-13", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 1000, "direction": "debit", "balance": null, "raw_line": " 13/03/2026 PAYU *UBER TRIP - - 1.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-13", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 1000, "direction": "credit", "balance": null, "raw_line": " 13/03/2026 PAYU *UBER TRIP - 1.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-13", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 1811, "direction": "credit", "balance": null, "raw_line": "\f13/03/2026 PAYU *UBER TRIP - - 1.811", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-13", "description": "Rendimiento Diario", "doc_number": null, "amount": 8, "direction": "credit", "balance": null, "raw_line": "13/03/2026 Rendimiento Diario - 8 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-13", "description": "", "doc_number": null, "amount": 42130, "direction": "credit", "balance": null, "raw_line": "13/03/2026 - - 42.130", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-14", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 7578, "direction": "credit", "balance": null, "raw_line": "14/03/2026 PAYU *UBER TRIP - - 7.578", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-14", "description": "Pago Red Movilidad Santiago", "doc_number": null, "amount": 4000, "direction": "credit", "balance": null, "raw_line": "14/03/2026 Pago Red Movilidad Santiago - - 4.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-15", "description": "MC DONALDS", "doc_number": null, "amount": 8080, "direction": "credit", "balance": null, "raw_line": "15/03/2026 MC DONALDS - - 8.080", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-16", "description": "Rendimiento Diario", "doc_number": null, "amount": 35, "direction": "credit", "balance": null, "raw_line": "16/03/2026 Rendimiento Diario - 35 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-17", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 1000, "direction": "credit", "balance": null, "raw_line": "17/03/2026 PAYU *UBER TRIP - - 1.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-17", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 1000, "direction": "credit", "balance": null, "raw_line": "17/03/2026 PAYU *UBER TRIP - 1.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-17", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 2550, "direction": "credit", "balance": null, "raw_line": "17/03/2026 PAYU *UBER TRIP - - 2.550", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-17", "description": "Rendimiento Diario", "doc_number": null, "amount": 5, "direction": "credit", "balance": null, "raw_line": "17/03/2026 Rendimiento Diario - 5 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-18", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 2445, "direction": "credit", "balance": null, "raw_line": "18/03/2026 PAYU *UBER TRIP - - 2.445", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-18", "description": "STA ISABEL PORTUGAL", "doc_number": null, "amount": 17098, "direction": "credit", "balance": null, "raw_line": "18/03/2026 STA ISABEL PORTUGAL - - 17.098", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-18", "description": "Rendimiento Diario", "doc_number": null, "amount": 5, "direction": "credit", "balance": null, "raw_line": "18/03/2026 Rendimiento Diario - 5 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-18", "description": "STA ISABEL PORTUGAL", "doc_number": null, "amount": 7926, "direction": "credit", "balance": null, "raw_line": "18/03/2026 STA ISABEL PORTUGAL - - 7.926", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-19", "description": "Transferencia a Cristian Arismendi", "doc_number": null, "amount": 11200, "direction": "credit", "balance": null, "raw_line": "19/03/2026 Transferencia a Cristian Arismendi - - 11.200", "platform": null, "real_origin": null, "counterparty": "Cristian Arismendi", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-19", "description": "Rendimiento Diario", "doc_number": null, "amount": 5, "direction": "credit", "balance": null, "raw_line": "19/03/2026 Rendimiento Diario - 5 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-19", "description": "FARMACIA SANTA SOFIA S", "doc_number": null, "amount": 3600, "direction": "credit", "balance": null, "raw_line": "19/03/2026 FARMACIA SANTA SOFIA S - - 3.600", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-20", "description": "Transferencia a Vicente Tirado", "doc_number": null, "amount": 5000, "direction": "credit", "balance": null, "raw_line": "20/03/2026 Transferencia a Vicente Tirado - - 5.000", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-03-20", "description": "Rendimiento Diario", "doc_number": null, "amount": 2, "direction": "credit", "balance": null, "raw_line": "20/03/2026 Rendimiento Diario - 2 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-21", "description": "APPLE.COM/BILL", "doc_number": null, "amount": 1490, "direction": "credit", "balance": null, "raw_line": "21/03/2026 APPLE.COM/BILL - - 1.490", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-21", "description": "MERCADOPAGO *PARADISO", "doc_number": null, "amount": 2100, "direction": "credit", "balance": null, "raw_line": "21/03/2026 MERCADOPAGO *PARADISO - - 2.100", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-22", "description": "Carga de transferencia", "doc_number": null, "amount": 55000, "direction": "credit", "balance": null, "raw_line": "\f22/03/2026 Carga de transferencia - 55.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-23", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 8726, "direction": "credit", "balance": null, "raw_line": "23/03/2026 PAYU *UBER TRIP - - 8.726", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-23", "description": "Rendimiento Diario", "doc_number": null, "amount": 2, "direction": "credit", "balance": null, "raw_line": "23/03/2026 Rendimiento Diario - 2 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-24", "description": "PAYU *UBER EATS", "doc_number": null, "amount": 12426, "direction": "credit", "balance": null, "raw_line": "24/03/2026 PAYU *UBER EATS - - 12.426", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-24", "description": "APPLE.COM/BILL", "doc_number": null, "amount": 990, "direction": "credit", "balance": null, "raw_line": "24/03/2026 APPLE.COM/BILL - - 990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-24", "description": "Red Movilidad Santiago", "doc_number": null, "amount": 815, "direction": "credit", "balance": null, "raw_line": "24/03/2026 Red Movilidad Santiago - - 815", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-25", "description": "GRACIELO BAR", "doc_number": null, "amount": 26235, "direction": "credit", "balance": null, "raw_line": "25/03/2026 GRACIELO BAR - - 26.235", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-25", "description": "VALENTINA SEPULVEDA", "doc_number": null, "amount": 6700, "direction": "credit", "balance": null, "raw_line": "25/03/2026 VALENTINA SEPULVEDA - - 6.700", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-25", "description": "Rendimiento Diario", "doc_number": null, "amount": 8, "direction": "credit", "balance": null, "raw_line": "25/03/2026 Rendimiento Diario - 8 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-25", "description": "Carga de transferencia", "doc_number": null, "amount": 25024, "direction": "credit", "balance": null, "raw_line": "25/03/2026 Carga de transferencia - 25.024 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-25", "description": "Carga de transferencia", "doc_number": null, "amount": 20000, "direction": "credit", "balance": null, "raw_line": "25/03/2026 Carga de transferencia - 20.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-25", "description": "C. VERDE C. FARI A", "doc_number": null, "amount": 25346, "direction": "credit", "balance": null, "raw_line": "25/03/2026 C. VERDE C. FARI A 650 - - 25.346", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-26", "description": "Transferencia a Vicente Tirado", "doc_number": null, "amount": 5000, "direction": "credit", "balance": null, "raw_line": "26/03/2026 Transferencia a Vicente Tirado - - 5.000", "platform": null, "real_origin": null, "counterparty": "Vicente Tirado", "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "self_transfer", "internal": true}, {"date": "2026-03-26", "description": "Carga de transferencia", "doc_number": null, "amount": 10000, "direction": "credit", "balance": null, "raw_line": "26/03/2026 Carga de transferencia - 10.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-27", "description": "Rendimiento Diario", "doc_number": null, "amount": 1, "direction": "credit", "balance": null, "raw_line": "27/03/2026 Rendimiento Diario - 1 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-03-28", "description": "MERCADOPAGO *BOTILLER", "doc_number": null, "amount": 1100, "direction": "credit", "balance": null, "raw_line": "28/03/2026 MERCADOPAGO *BOTILLER - - 1.100", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-28", "description": "HAULMER*FAUNA PROD", "doc_number": null, "amount": 5000, "direction": "credit", "balance": null, "raw_line": "28/03/2026 HAULMER*FAUNA PROD - - 5.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-28", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 1000, "direction": "credit", "balance": null, "raw_line": "28/03/2026 PAYU *UBER TRIP - - 1.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-28", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 1000, "direction": "credit", "balance": null, "raw_line": "28/03/2026 PAYU *UBER TRIP - 1.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-28", "description": "PAYU *UBER TRIP", "doc_number": null, "amount": 5530, "direction": "credit", "balance": null, "raw_line": "28/03/2026 PAYU *UBER TRIP - - 5.530", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-28", "description": "PAYU *UBER EATS", "doc_number": null, "amount": 11578, "direction": "credit", "balance": null, "raw_line": "28/03/2026 PAYU *UBER EATS - - 11.578", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-28", "description": "TIP TOP", "doc_number": null, "amount": 4980, "direction": "credit", "balance": null, "raw_line": "28/03/2026 TIP TOP - - 4.980", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-03-28", "description": "Carga de transferencia", "doc_number": null, "amount": 30940, "direction": "debit", "balance": null, "raw_line": "\f 28/03/2026 Carga de transferencia - 30.940 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-28", "description": "ELECTRONICA RETAIL LIM", "doc_number": null, "amount": 30940, "direction": "debit", "balance": null, "raw_line": " 28/03/2026 ELECTRONICA RETAIL LIM - - 30.940", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-29", "description": "Promo Mastercard Metro", "doc_number": null, "amount": 407, "direction": "debit", "balance": null, "raw_line": " 29/03/2026 Promo Mastercard Metro - 407 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-03-30", "description": "Rendimiento Diario", "doc_number": null, "amount": 8, "direction": "debit", "balance": null, "raw_line": " 30/03/2026 Rendimiento Diario - 8 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Prex/16818d3c8489536e-2026-03_CARTOLA_8.PDF"}, {"statement_id": "11b9c46a", "gmail_id": "19cd39642a16c50e", "bank": "Prex", "doc_type": "cuenta_vista", "owner": "Vicente", "account_ref": "11774148", "account_last4": "4148", "period_start": "2026-02-01", "period_end": "2026-02-28", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Prex/a55c137a21a831ed-2026-02_CARTOLA_1.PDF", "parser_version": "prex/1", "transactions": [{"date": "2026-02-07", "description": "Carga de transferencia", "doc_number": null, "amount": 50000, "direction": "credit", "balance": null, "raw_line": " 07/02/2026 Carga de transferencia - 50.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-02-09", "description": "KUSHKISEGUROS", "doc_number": null, "amount": 18651, "direction": "debit", "balance": null, "raw_line": " 09/02/2026 KUSHKISEGUROS - - 18.651", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-10", "description": "Rendimiento Diario", "doc_number": null, "amount": 5, "direction": "credit", "balance": null, "raw_line": " 10/02/2026 Rendimiento Diario - 5 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-02-11", "description": "YAPO ONECLICK MALL", "doc_number": null, "amount": 23410, "direction": "debit", "balance": null, "raw_line": " 11/02/2026 YAPO ONECLICK MALL - - 23.410", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-11", "description": "Rendimiento Diario", "doc_number": null, "amount": 3, "direction": "credit", "balance": null, "raw_line": " 11/02/2026 Rendimiento Diario - 3 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-02-12", "description": "Rendimiento Diario", "doc_number": null, "amount": 3, "direction": "credit", "balance": null, "raw_line": " 12/02/2026 Rendimiento Diario - 3 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-02-16", "description": "Rendimiento Diario", "doc_number": null, "amount": 2, "direction": "credit", "balance": null, "raw_line": " 16/02/2026 Rendimiento Diario - 2 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-02-20", "description": "Carga de transferencia", "doc_number": null, "amount": 30000, "direction": "credit", "balance": null, "raw_line": " 20/02/2026 Carga de transferencia - 30.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-02-20", "description": "FARMACIA SANTA SOFIA S", "doc_number": null, "amount": 20070, "direction": "debit", "balance": null, "raw_line": " 20/02/2026 FARMACIA SANTA SOFIA S - - 20.070", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-21", "description": "MC DONALDS", "doc_number": null, "amount": 7980, "direction": "debit", "balance": null, "raw_line": " 21/02/2026 MC DONALDS - - 7.980", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-21", "description": "Red Movilidad Santiago", "doc_number": null, "amount": 790, "direction": "debit", "balance": null, "raw_line": " 21/02/2026 Red Movilidad Santiago - - 790", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-21", "description": "Carga de transferencia", "doc_number": null, "amount": 25200, "direction": "credit", "balance": null, "raw_line": " 21/02/2026 Carga de transferencia - 25.200 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2026-02-21", "description": "TUU*grupoTg", "doc_number": null, "amount": 25200, "direction": "debit", "balance": null, "raw_line": " 21/02/2026 TUU*grupoTg - - 25.200", "platform": "TUU*", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-22", "description": "Carga de transferencia", "doc_number": null, "amount": 10000, "direction": "debit", "balance": null, "raw_line": "\f 22/02/2026 Carga de transferencia - 10.000 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-22", "description": "APPLE.COM/BILL", "doc_number": null, "amount": 9990, "direction": "debit", "balance": null, "raw_line": " 22/02/2026 APPLE.COM/BILL - - 9.990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-22", "description": "APPLE.COM/BILL", "doc_number": null, "amount": 1490, "direction": "debit", "balance": null, "raw_line": " 22/02/2026 APPLE.COM/BILL - - 1.490", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2026-02-23", "description": "Rendimiento Diario", "doc_number": null, "amount": 2, "direction": "debit", "balance": null, "raw_line": " 23/02/2026 Rendimiento Diario - 2 -", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2026-02-24", "description": "APPLE.COM/BILL", "doc_number": null, "amount": 990, "direction": "debit", "balance": null, "raw_line": " 24/02/2026 APPLE.COM/BILL - - 990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Prex/a55c137a21a831ed-2026-02_CARTOLA_1.PDF"}, {"statement_id": "be1e55e6", "gmail_id": "19ac2355ac8ac272", "bank": "Itaú", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": "00220001000000294172", "account_last4": "4172", "period_start": "2025-10-24", "period_end": "2025-11-24", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Ita/7441b733fb84afb0-202511_eeccitu__00220001000000294172.pdf", "parser_version": "itau_rappi/1", "transactions": [{"date": "2025-08-21", "description": "Tarjeta · CURICO", "doc_number": null, "amount": 287564, "direction": "debit", "balance": null, "raw_line": "CURICO 21 ago 2025 Tarjeta Digital $287.564 $287.564 4/12 $23.963", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-11-10", "description": "Traspaso de deuda internacional", "doc_number": null, "amount": 295647, "direction": "debit", "balance": null, "raw_line": " 10 nov 2025 Traspaso de deuda internacional - $295.647 $295.647 1/1 $295.647", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-11-10", "description": "Impuesto Decreto Ley 3475", "doc_number": null, "amount": 414, "direction": "debit", "balance": null, "raw_line": " 10 nov 2025 Impuesto Decreto Ley 3475 - $414 $414 1/1 $414", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-10", "description": "Impuesto Decreto Ley 3475", "doc_number": null, "amount": 195, "direction": "debit", "balance": null, "raw_line": " 10 nov 2025 Impuesto Decreto Ley 3475 - $195 $195 1/1 $195", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-10", "description": "Impuesto Decreto Ley 3475", "doc_number": null, "amount": 51, "direction": "debit", "balance": null, "raw_line": " 10 nov 2025 Impuesto Decreto Ley 3475 - $51 $51 1/1 $51", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-24", "description": "INTERES REVOLVENTE", "doc_number": null, "amount": 19069, "direction": "debit", "balance": null, "raw_line": " 24 nov 2025 INTERES REVOLVENTE - $19.069 $19.069 1/1 $19.069", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-24", "description": "INTERES REVOLVENTE", "doc_number": null, "amount": 8969, "direction": "debit", "balance": null, "raw_line": " 24 nov 2025 INTERES REVOLVENTE - $8.969 $8.969 1/1 $8.969", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-11-24", "description": "INTERESES MORATORIOS", "doc_number": null, "amount": 2237, "direction": "debit", "balance": null, "raw_line": " 24 nov 2025 INTERESES MORATORIOS - $2.237 $2.237 1/1 $2.237", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Ita/7441b733fb84afb0-202511_eeccitu__00220001000000294172.pdf"}, {"statement_id": "800b9334", "gmail_id": "198d41730573197a", "bank": "Rappicard", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": "00220001000000294172", "account_last4": "4172", "period_start": "2025-07-24", "period_end": "2025-08-22", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Rappicard/81717fd5a584ca79-00220001000000294172CREDIT_CARD_STATEMENT.pdf", "parser_version": "itau_rappi/1", "transactions": [{"date": "2025-07-24", "description": "Monto Cancelado", "doc_number": null, "amount": 614370, "direction": "credit", "balance": null, "raw_line": " 24 jul 2025 Monto Cancelado - $-614.370 $-614.370 1/1 $-614.370", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-29", "description": "Monto Cancelado", "doc_number": null, "amount": 586209, "direction": "credit", "balance": null, "raw_line": " 29 jul 2025 Monto Cancelado - $-586.209 $-586.209 1/1 $-586.209", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-07-24", "description": "MACH WEBPAY · SANTIAGO", "doc_number": null, "amount": 100000, "direction": "debit", "balance": null, "raw_line": " SANTIAGO 24 jul 2025 MACH WEBPAY ONECLICK $100.000 $100.000 1/1 $100.000", "platform": "MACH", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-30", "description": "YAPO · SANTIAGO", "doc_number": null, "amount": 1990, "direction": "debit", "balance": null, "raw_line": " SANTIAGO 30 jul 2025 YAPO CL $1.990 $1.990 1/1 $1.990", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-31", "description": "RETIRO ATM", "doc_number": null, "amount": 200000, "direction": "debit", "balance": null, "raw_line": " 31 jul 2025 RETIRO ATM NACIONAL $200.000 $200.000 1/1 $200.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-08-01", "description": "MERCADOPAGO*BARALAMEDA · LAS CONDES", "doc_number": null, "amount": 16638, "direction": "debit", "balance": null, "raw_line": " LAS CONDES 01 ago 2025 MERCADOPAGO*BARALAMEDA $16.638 $16.638 1/1 $16.638", "platform": "MERCADOPAGO", "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-31", "description": "Impuesto Decreto Ley", "doc_number": null, "amount": 132, "direction": "debit", "balance": null, "raw_line": " 31 jul 2025 Impuesto Decreto Ley 3475 $132 $132 1/1 $132", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-08-05", "description": "DEVOLUCION", "doc_number": null, "amount": 17631, "direction": "credit", "balance": null, "raw_line": " 05 ago 2025 DEVOLUCION aliexpress $-17.631 $-17.631 1/1 $-17.631", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "income", "internal": false}, {"date": "2025-08-22", "description": "INTERES", "doc_number": null, "amount": 8190, "direction": "debit", "balance": null, "raw_line": " 22 ago 2025 INTERES REVOLVENTE $8.190 $8.190 1/1 $8.190", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Rappicard/81717fd5a584ca79-00220001000000294172CREDIT_CARD_STATEMENT.pdf"}, {"statement_id": "cf4f88f0", "gmail_id": "19978aa3558dd68c", "bank": "Rappicard", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": "00220001000000294172", "account_last4": "4172", "period_start": "2025-08-23", "period_end": "2025-09-23", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Rappicard/b242687dc8a366f3-00220001000000294172CREDIT_CARD_STATEMENT.pdf", "parser_version": "itau_rappi/1", "transactions": [{"date": "2025-09-08", "description": "Impuesto Decreto Ley", "doc_number": null, "amount": 21, "direction": "debit", "balance": null, "raw_line": " 08 sep 2025 Impuesto Decreto Ley 3475 $21 $21 1/1 $21", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-09-08", "description": "Impuesto Decreto Ley", "doc_number": null, "amount": 205, "direction": "debit", "balance": null, "raw_line": " 08 sep 2025 Impuesto Decreto Ley 3475 $205 $205 1/1 $205", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-09-08", "description": "Impuesto Decreto Ley", "doc_number": null, "amount": 295, "direction": "debit", "balance": null, "raw_line": " 08 sep 2025 Impuesto Decreto Ley 3475 $295 $295 1/1 $295", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-09-08", "description": "Traspaso de deuda", "doc_number": null, "amount": 310436, "direction": "debit", "balance": null, "raw_line": " 08 sep 2025 Traspaso de deuda internacional $310.436 $310.436 1/1 $310.436", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-09-23", "description": "INTERESES", "doc_number": null, "amount": 994, "direction": "debit", "balance": null, "raw_line": " 23 sep 2025 INTERESES MORATORIOS $994 $994 1/1 $994", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-09-23", "description": "INTERES", "doc_number": null, "amount": 23900, "direction": "debit", "balance": null, "raw_line": " 23 sep 2025 INTERES REVOLVENTE $23.900 $23.900 1/1 $23.900", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Rappicard/b242687dc8a366f3-00220001000000294172CREDIT_CARD_STATEMENT.pdf"}, {"statement_id": "9a2d471c", "gmail_id": "1983eb070da85a39", "bank": "Rappicard", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": "00220001000000294172", "account_last4": "4172", "period_start": "2025-06-24", "period_end": "2025-07-23", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Rappicard/d28dbd1718dc6820-00220001000000294172CREDIT_CARD_STATEMENT.pdf", "parser_version": "itau_rappi/1", "transactions": [{"date": "2025-07-08", "description": "Traspaso de deuda", "doc_number": null, "amount": 112095, "direction": "debit", "balance": null, "raw_line": " 08 jul 2025 Traspaso de deuda internacional $112.095 $112.095 1/1 $112.095", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-07-08", "description": "Impuesto Decreto Ley", "doc_number": null, "amount": 151, "direction": "debit", "balance": null, "raw_line": " 08 jul 2025 Impuesto Decreto Ley 3475 $151 $151 1/1 $151", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-08", "description": "Impuesto Decreto Ley", "doc_number": null, "amount": 74, "direction": "debit", "balance": null, "raw_line": " 08 jul 2025 Impuesto Decreto Ley 3475 $74 $74 1/1 $74", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-08", "description": "Impuesto Decreto Ley", "doc_number": null, "amount": 542, "direction": "debit", "balance": null, "raw_line": " 08 jul 2025 Impuesto Decreto Ley 3475 $542 $542 1/1 $542", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-23", "description": "INTERESES", "doc_number": null, "amount": 7452, "direction": "debit", "balance": null, "raw_line": " 23 jul 2025 INTERESES MORATORIOS $7.452 $7.452 1/1 $7.452", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-07-23", "description": "INTERES", "doc_number": null, "amount": 30440, "direction": "debit", "balance": null, "raw_line": " 23 jul 2025 INTERES REVOLVENTE $30.440 $30.440 1/1 $30.440", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Rappicard/d28dbd1718dc6820-00220001000000294172CREDIT_CARD_STATEMENT.pdf"}, {"statement_id": "9d4ed2f2", "gmail_id": "19a133101cbdc441", "bank": "Rappicard", "doc_type": "tarjeta_credito", "owner": "Vicente", "account_ref": "00220001000000294172", "account_last4": "4172", "period_start": "2025-09-24", "period_end": "2025-10-23", "saldo_inicial": null, "saldo_final": null, "currency": "CLP", "source_pdf": "/home/kavi/apps/kua-money-trace/documents/decrypted/Rappicard/fea7c2ad84a21790-00220001000000294172CREDIT_CARD_STATEMENT.pdf", "parser_version": "itau_rappi/1", "transactions": [{"date": "2025-10-06", "description": "Monto Cancelado", "doc_number": null, "amount": 274985, "direction": "credit", "balance": null, "raw_line": " 06 oct 2025 Monto Cancelado - $-274.985 $-274.985 1/1 $-274.985", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "card_payment", "internal": true}, {"date": "2025-10-07", "description": "SHEIN CL SHEIN.COM Tarjeta", "doc_number": null, "amount": 27633, "direction": "debit", "balance": null, "raw_line": " 07 oct 2025 SHEIN CL SHEIN.COM Tarjeta Digital $27.633 $27.633 1/1 $27.633", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-07", "description": "COPEC PAY Tarjeta · SANTIAGO", "doc_number": null, "amount": 30000, "direction": "debit", "balance": null, "raw_line": " SANTIAGO 07 oct 2025 COPEC PAY Tarjeta Digital $30.000 $30.000 1/1 $30.000", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "expense", "internal": false}, {"date": "2025-10-08", "description": "Impuesto Decreto Ley", "doc_number": null, "amount": 372, "direction": "debit", "balance": null, "raw_line": " 08 oct 2025 Impuesto Decreto Ley 3475 $372 $372 1/1 $372", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}, {"date": "2025-10-23", "description": "INTERES", "doc_number": null, "amount": 19536, "direction": "debit", "balance": null, "raw_line": " 23 oct 2025 INTERES REVOLVENTE $19.536 $19.536 1/1 $19.536", "platform": null, "real_origin": null, "counterparty": null, "dte_folio": null, "dte_empresa": null, "match_confidence": null, "flow_type": "fee", "internal": false}], "pdf_url": "//home/kavi/apps/kua-money-trace/documents/decrypted/Rappicard/fea7c2ad84a21790-00220001000000294172CREDIT_CARD_STATEMENT.pdf"}], "flow_summary": {"credit_line": {"count": 122, "amount": 13750191}, "expense": {"count": 281, "amount": 7303995}, "income": {"count": 93, "amount": 16041235}, "card_payment": {"count": 30, "amount": 9181538}, "self_transfer": {"count": 56, "amount": 22938438}, "inter_person": {"count": 33, "amount": 4805265}, "fee": {"count": 110, "amount": 742434}}, "real_totals": {"income": 16060683, "expense_outflow": 12832246, "internal": 45870167}}
\ No newline at end of file
diff --git a/web/money-trace.html b/web/money-trace.html
new file mode 100644
index 0000000..2a6cf1f
--- /dev/null
+++ b/web/money-trace.html
@@ -0,0 +1,305 @@
+
+
+
+
+
+
Money Trace
+
+
+
+
+
+
+
reconstructing money flow…
+
+
+
+
+
+
+
+
+ Flow
+
+
+
+ Orbit
+
+
+
+
+
+
+
+
+
+
+
+
+
No flows for this filter.
+
+
Income
+
Spending
+
To/from a person
+
Fees
+
Internal cycle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/orbit-view.js b/web/orbit-view.js
new file mode 100644
index 0000000..2e39343
--- /dev/null
+++ b/web/orbit-view.js
@@ -0,0 +1,156 @@
+/* money-trace · Orbit (radial) renderer
+ My accounts + cards sit on an inner ring. Income sources fan in from the
+ left outer arc; destinations fan out to the right outer arc. Internal
+ flows (card payments, line sweeps, self-transfers) bow through the centre,
+ so the "cycles" show up as a grey rosette you can toggle off. */
+(function () {
+ 'use strict';
+ const SVGNS = 'http://www.w3.org/2000/svg';
+ const el = (n, a) => { const e = document.createElementNS(SVGNS, n); for (const k in (a || {})) e.setAttribute(k, a[k]); return e; };
+ const cssv = v => getComputedStyle(document.documentElement).getPropertyValue(v).trim();
+ const catColor = c => ({
+ income: '--c-income', inter_in: '--c-person', inter_out: '--c-person',
+ expense: '--c-spend', fee: '--c-fee',
+ internal_card: '--c-internal', internal_line: '--c-internal', internal_self: '--c-internal'
+ })[c] || '--ink-mute';
+
+ function render(svg, graph, opts) {
+ const W = opts.width, H = opts.height;
+ while (svg.firstChild) svg.removeChild(svg.firstChild);
+ svg.setAttribute('viewBox', `0 0 ${W} ${H}`);
+ const nodes = graph.nodes, links = graph.links;
+ if (!nodes.length) return false;
+
+ const cx = W / 2, cy = H / 2;
+ const R1 = Math.min(W, H) * 0.215; // inner ring (my accounts + cards)
+ const R2 = Math.min(W, H) * 0.405; // outer ring (sources + destinations)
+
+ const byId = new Map(nodes.map(n => [n.id, n]));
+ const maxVal = Math.max(...nodes.map(n => n.value));
+ const maxLink = Math.max(...links.map(l => l.value));
+ const rOf = v => 4 + Math.sqrt(v / maxVal) * 22;
+ const wOf = v => Math.max(0.7, (v / maxLink) * 15);
+
+ // classify nodes into rings
+ const inner = nodes.filter(n => n.col === 1 || n.col === 2); // accounts + cards
+ const sources = nodes.filter(n => n.col === 0);
+ const dests = nodes.filter(n => n.col === 3);
+ inner.sort((a, b) => (a.col - b.col) || (b.value - a.value));
+ sources.sort((a, b) => b.value - a.value);
+ dests.sort((a, b) => b.value - a.value);
+
+ // place inner ring: accounts across the upper arc, cards across the lower arc
+ const place = (arr, a0, a1, R) => {
+ const n = arr.length;
+ arr.forEach((node, i) => {
+ const t = n === 1 ? 0.5 : i / (n - 1);
+ const ang = a0 + (a1 - a0) * t;
+ node._a = ang; node._x = cx + Math.cos(ang) * R; node._y = cy + Math.sin(ang) * R; node._R = R;
+ });
+ };
+ const accts = inner.filter(n => n.col === 1), cards = inner.filter(n => n.col === 2);
+ const D = Math.PI / 180;
+ // accounts: top arc; cards: bottom arc
+ place(accts, -155 * D, -25 * D, R1);
+ place(cards, 25 * D, 155 * D, R1);
+ // sources: left outer arc; dests: right outer arc
+ place(sources, 130 * D, 230 * D, R2);
+ place(dests, -50 * D, 50 * D, R2);
+
+ const defs = el('defs'); svg.appendChild(defs);
+ const linkG = el('g'); svg.appendChild(linkG);
+ const nodeG = el('g'); svg.appendChild(nodeG);
+
+ // rings (guides)
+ [R1, R2].forEach(R => svg.insertBefore(el('circle', { cx, cy, r: R, class: 'orbit-ring' }), linkG));
+
+ function path(l) {
+ const s = l._sn, t = l._tn;
+ const internal = l.kind === 'internal';
+ // control point: internal bows through centre; real arcs gently toward centre
+ let ctrl;
+ if (internal) {
+ const mx = (s._x + t._x) / 2, my = (s._y + t._y) / 2;
+ ctrl = [cx + (mx - cx) * 0.15, cy + (my - cy) * 0.15];
+ } else {
+ const mx = (s._x + t._x) / 2, my = (s._y + t._y) / 2;
+ ctrl = [cx + (mx - cx) * 0.55, cy + (my - cy) * 0.55];
+ }
+ return `M${s._x},${s._y} Q${ctrl[0]},${ctrl[1]} ${t._x},${t._y}`;
+ }
+
+ const linkEls = [];
+ const ordered = links.slice().sort((a, b) => (a.kind === 'internal' ? -1 : 1) - (b.kind === 'internal' ? -1 : 1));
+ for (const l of ordered) {
+ const s = byId.get(l.source), t = byId.get(l.target);
+ if (!s || !t) continue; l._sn = s; l._tn = t;
+ const p = el('path', {
+ d: path(l),
+ class: 'link ' + (l.kind === 'real' ? 'real glow-real ' : 'internal ') + l.cat,
+ 'stroke-width': wOf(l.value)
+ });
+ p.__link = l; linkG.appendChild(p); linkEls.push(p);
+ }
+
+ // centre hub
+ const hub = el('g');
+ hub.appendChild(el('circle', { cx, cy, r: 46, fill: cssv('--panel-2'), stroke: cssv('--line-2'), 'stroke-width': 1 }));
+ const t1 = el('text', { x: cx, y: cy - 6, class: 'orbit-center-lab', 'text-anchor': 'middle' }); t1.textContent = 'MY MONEY';
+ const t2 = el('text', { x: cx, y: cy + 13, class: 'orbit-sub', 'text-anchor': 'middle' });
+ t2.textContent = 'net ' + window.MT.CLPk(graph.totals.net);
+ hub.appendChild(t1); hub.appendChild(t2); nodeG.appendChild(hub);
+
+ // nodes
+ const nodeEls = [];
+ function dom(n) {
+ const ls = links.filter(l => l._sn === n || l._tn === n);
+ const m = {}; ls.forEach(l => m[l.cat] = (m[l.cat] || 0) + l.value);
+ let b = null, bv = -1; for (const k in m) if (m[k] > bv) { bv = m[k]; b = k; } return b;
+ }
+ for (const n of nodes) {
+ const g = el('g'); g.__node = n;
+ const r = rOf(n.value);
+ const col = cssv(catColor(dom(n))) || cssv('--ink-mute');
+ const isInner = n.col === 1 || n.col === 2;
+ const c = el('circle', { cx: n._x, cy: n._y, r, fill: isInner ? cssv('--panel-2') : col, stroke: col, 'stroke-width': isInner ? 1.6 : 0 });
+ c.style.opacity = 0.95;
+ g.appendChild(c);
+ // label: outer nodes -> radially outward; inner -> outward small
+ const outward = Math.atan2(n._y - cy, n._x - cx);
+ const lx = n._x + Math.cos(outward) * (r + 8);
+ const ly = n._y + Math.sin(outward) * (r + 8);
+ const anchor = Math.cos(outward) < -0.2 ? 'end' : (Math.cos(outward) > 0.2 ? 'start' : 'middle');
+ const lab = el('text', { x: lx, y: ly, class: 'orbit-node-label', 'text-anchor': anchor, 'dominant-baseline': 'middle' });
+ lab.textContent = n.label.length > 18 ? n.label.slice(0, 17) + '…' : n.label;
+ g.appendChild(lab);
+ if (isInner && n.sub) {
+ const sub = el('text', { x: lx, y: ly + 12, class: 'orbit-sub', 'text-anchor': anchor, 'dominant-baseline': 'middle' });
+ sub.textContent = n.sub; g.appendChild(sub);
+ }
+ nodeG.appendChild(g); nodeEls.push(g);
+ }
+
+ // interactions
+ function focus(ls, ns) {
+ linkEls.forEach(p => p.classList.toggle('dim', ls && !ls.has(p.__link)));
+ nodeEls.forEach(g => g.classList.toggle('dim', ns && !ns.has(g.__node)));
+ }
+ const clear = () => { linkEls.forEach(p => p.classList.remove('dim')); nodeEls.forEach(g => g.classList.remove('dim')); };
+ linkEls.forEach(p => {
+ p.addEventListener('mousemove', e => window.MTtip.link(e, p.__link));
+ p.addEventListener('mouseenter', () => focus(new Set([p.__link]), new Set([p.__link._sn, p.__link._tn])));
+ p.addEventListener('mouseleave', () => { window.MTtip.hide(); clear(); });
+ });
+ nodeEls.forEach(g => {
+ const n = g.__node;
+ const ls = new Set(links.filter(l => l._sn === n || l._tn === n));
+ const ns = new Set([n]); ls.forEach(l => { ns.add(l._sn); ns.add(l._tn); });
+ g.addEventListener('mousemove', e => window.MTtip.node(e, n));
+ g.addEventListener('mouseenter', () => focus(ls, ns));
+ g.addEventListener('mouseleave', () => { window.MTtip.hide(); clear(); });
+ });
+ return true;
+ }
+
+ window.OrbitView = { render };
+})();
diff --git a/web/sankey-view.js b/web/sankey-view.js
new file mode 100644
index 0000000..48ca5e9
--- /dev/null
+++ b/web/sankey-view.js
@@ -0,0 +1,225 @@
+/* money-trace · layered Sankey renderer (SVG, vanilla)
+ Columns: 0 sources · 1 accounts · 2 cards/lines · 3 destinations.
+ Real flows pop (solid, glow); internal flows recede (dashed, grey).
+ Self-transfers (col1↔col1) render as right-bulging recirculation loops. */
+(function () {
+ 'use strict';
+ const SVGNS = 'http://www.w3.org/2000/svg';
+ const el = (n, a) => { const e = document.createElementNS(SVGNS, n); for (const k in (a || {})) e.setAttribute(k, a[k]); return e; };
+
+ const COL_HEAD = ['Income sources', 'My accounts', 'Cards & lines', 'Where it goes'];
+
+ function dominantCat(links) {
+ const m = {};
+ for (const l of links) m[l.cat] = (m[l.cat] || 0) + l.value;
+ let best = null, bv = -1; for (const k in m) if (m[k] > bv) { bv = m[k]; best = k; }
+ return best;
+ }
+ const catColor = c => ({
+ income: '--c-income', inter_in: '--c-person', inter_out: '--c-person',
+ expense: '--c-spend', fee: '--c-fee',
+ internal_card: '--c-internal', internal_line: '--c-internal', internal_self: '--c-internal'
+ })[c] || '--ink-mute';
+ const cssv = v => getComputedStyle(document.documentElement).getPropertyValue(v).trim();
+
+ function render(svg, graph, opts) {
+ const W = opts.width, H = opts.height;
+ while (svg.firstChild) svg.removeChild(svg.firstChild);
+ svg.setAttribute('viewBox', `0 0 ${W} ${H}`);
+
+ const nodes = graph.nodes, links = graph.links;
+ if (!nodes.length) { return false; }
+
+ // layout constants
+ const padTop = 40, padBot = 26;
+ const nodeW = 15, nodePad = 12;
+ const mLeft = 168, mRight = 172;
+ const availH = H - padTop - padBot;
+ const innerW = W - mLeft - mRight;
+ const colX = [mLeft, mLeft + innerW * 0.34, mLeft + innerW * 0.67, mLeft + innerW];
+
+ // group + sort nodes by column
+ const cols = [[], [], [], []];
+ for (const n of nodes) cols[n.col].push(n);
+ const orderKind = { source: 0, person: 0, account: 0, card: 0, spend: 0, fee: 1 };
+ for (const c of cols) c.sort((a, b) => b.value - a.value);
+
+ // shared value→px scale (binding column fills availH)
+ let scale = Infinity;
+ cols.forEach(c => {
+ if (!c.length) return;
+ const sum = c.reduce((s, n) => s + n.value, 0);
+ const s = (availH - (c.length - 1) * nodePad) / sum;
+ if (s < scale) scale = s;
+ });
+ if (!isFinite(scale)) scale = 1;
+
+ // position nodes
+ cols.forEach((c, ci) => {
+ const total = c.reduce((s, n) => s + n.value * scale, 0) + (c.length - 1) * nodePad;
+ let y = padTop + (availH - total) / 2;
+ for (const n of c) {
+ n._x = colX[ci]; n._w = nodeW; n._y = y; n._h = Math.max(2, n.value * scale);
+ n._rcur = n._y; n._lcur = n._y; // edge cursors
+ y += n._h + nodePad;
+ }
+ });
+
+ // split links
+ const fwd = [], self = [];
+ for (const l of links) {
+ l._s = graph.nodes.find ? null : null;
+ }
+ const byId = new Map(nodes.map(n => [n.id, n]));
+ for (const l of links) {
+ const s = byId.get(l.source), t = byId.get(l.target);
+ if (!s || !t) continue;
+ l._sn = s; l._tn = t;
+ if (s.col === t.col) self.push(l); else fwd.push(l);
+ }
+
+ // assign forward endpoints: source right edge, target left edge
+ // order each node's links by opposite node center to reduce crossings
+ const sortKey = (l, side) => (side === 'src' ? l._tn._y : l._sn._y);
+ for (const n of nodes) {
+ n._out = fwd.filter(l => l._sn === n).sort((a, b) => sortKey(a, 'src') - sortKey(b, 'src'));
+ n._in = fwd.filter(l => l._tn === n).sort((a, b) => sortKey(a, 'tgt') - sortKey(b, 'tgt'));
+ }
+ for (const n of nodes) {
+ for (const l of n._out) { const w = Math.max(1, l.value * scale); l._sx = n._x + n._w; l._sy = n._rcur + w / 2; n._rcur += w; l._w = w; }
+ for (const l of n._in) { const w = Math.max(1, l.value * scale); l._tx = n._x; l._ty = n._lcur + w / 2; n._lcur += w; }
+ }
+ // self links: both endpoints on right edge, bulge right
+ for (const n of nodes) {
+ n._selfOut = self.filter(l => l._sn === n).sort((a, b) => a._tn._y - b._tn._y);
+ n._selfIn = self.filter(l => l._tn === n).sort((a, b) => a._sn._y - b._sn._y);
+ }
+ for (const n of nodes) {
+ for (const l of n._selfOut) { const w = Math.max(1, l.value * scale); l._sx = n._x + n._w; l._sy = n._rcur + w / 2; n._rcur += w; l._w = w; }
+ for (const l of n._selfIn) { const w = Math.max(1, l.value * scale); l._tx = n._x + n._w; l._ty = n._rcur + w / 2; n._rcur += w; }
+ }
+
+ // ---- draw ----
+ const defs = el('defs');
+ svg.appendChild(defs);
+
+ // label de-collision for outer columns (shift label centres, keep node positions)
+ function spread(colArr, minGap) {
+ const arr = colArr.slice().sort((a, b) => a._y - b._y);
+ let prev = -Infinity;
+ for (const n of arr) { let c = n._y + n._h / 2; if (c < prev + minGap) c = prev + minGap; n._lc = c; prev = c; }
+ }
+ spread(cols[0], 30); spread(cols[3], 30);
+ spread(cols[1], 30); spread(cols[2], 30);
+
+ // column headers
+ cols.forEach((c, ci) => {
+ if (!c.length) return;
+ const x = ci === 3 ? colX[ci] + nodeW : colX[ci];
+ const anchor = ci === 0 ? 'start' : (ci === 3 ? 'end' : 'start');
+ const tx = ci === 0 ? colX[0] - 0 : (ci === 3 ? colX[3] + nodeW : colX[ci]);
+ const th = el('text', { x: tx, y: 22, class: 'colhead', 'text-anchor': ci === 3 ? 'start' : 'start' });
+ th.textContent = COL_HEAD[ci];
+ svg.appendChild(th);
+ });
+
+ const linkG = el('g'); svg.appendChild(linkG);
+ const nodeG = el('g'); svg.appendChild(nodeG);
+
+ function linkPath(l) {
+ if (l._sn.col === l._tn.col) {
+ // self loop, bulge right
+ const depth = 46 + Math.min(70, l._w * 1.2) + (l._sy % 23);
+ const x = l._sx;
+ return `M${x},${l._sy} C${x + depth},${l._sy} ${x + depth},${l._ty} ${x},${l._ty}`;
+ }
+ const sx = l._sx, sy = l._sy, tx = l._tx, ty = l._ty;
+ const mx = (sx + tx) / 2;
+ return `M${sx},${sy} C${mx},${sy} ${mx},${ty} ${tx},${ty}`;
+ }
+
+ const linkEls = [];
+ // draw internal first (under), then real (over)
+ const ordered = links.slice().sort((a, b) => (a.kind === 'internal' ? -1 : 1) - (b.kind === 'internal' ? -1 : 1));
+ for (const l of ordered) {
+ if (l._sx == null || l._tx == null) continue;
+ const p = el('path', {
+ d: linkPath(l),
+ class: 'link ' + (l.kind === 'real' ? 'real glow-real ' : 'internal ') + l.cat,
+ 'stroke-width': l._w
+ });
+ p.__link = l;
+ linkG.appendChild(p);
+ linkEls.push(p);
+ }
+
+ // nodes
+ const nodeEls = [];
+ for (const n of nodes) {
+ const g = el('g'); g.__node = n;
+ const dom = dominantCat([...n._out, ...n._in, ...n._selfOut, ...n._selfIn]);
+ const col = cssv(catColor(dom)) || cssv('--ink-mute');
+ const r = el('rect', { x: n._x, y: n._y, width: n._w, height: n._h, rx: 3, fill: col, class: 'node-rect' });
+ r.style.opacity = n.kind === 'account' || n.kind === 'card' ? 0.92 : 0.85;
+ g.appendChild(r);
+
+ // labels
+ const cy = n._lc != null ? n._lc : n._y + n._h / 2;
+ if (n.col === 0) {
+ const t = el('text', { x: n._x - 9, y: cy - 1, class: 'node-label', 'text-anchor': 'end', 'dominant-baseline': 'middle' });
+ t.textContent = n.label;
+ const v = el('text', { x: n._x - 9, y: cy + 13, class: 'node-val', 'text-anchor': 'end', 'dominant-baseline': 'middle' });
+ v.textContent = MTfmt(n.value);
+ g.appendChild(t); g.appendChild(v);
+ } else if (n.col === 3) {
+ const t = el('text', { x: n._x + n._w + 9, y: cy - 1, class: 'node-label', 'dominant-baseline': 'middle' });
+ t.textContent = n.label;
+ const v = el('text', { x: n._x + n._w + 9, y: cy + 13, class: 'node-val', 'dominant-baseline': 'middle' });
+ v.textContent = MTfmt(n.value);
+ g.appendChild(t); g.appendChild(v);
+ } else {
+ // middle: label above node
+ const t = el('text', { x: n._x + n._w + 8, y: cy - 5, class: 'node-label', 'dominant-baseline': 'middle' });
+ t.textContent = n.label;
+ const s = el('text', { x: n._x + n._w + 8, y: cy + 9, class: 'node-sub', 'dominant-baseline': 'middle' });
+ s.textContent = n.sub + ' ' + MTfmt(n.value);
+ g.appendChild(t); g.appendChild(s);
+ }
+ nodeG.appendChild(g);
+ nodeEls.push(g);
+ }
+
+ // ---- interactions ----
+ function setFocus(activeLinks, activeNodes) {
+ linkEls.forEach(p => {
+ if (!activeLinks || activeLinks.has(p.__link)) p.classList.remove('dim');
+ else p.classList.add('dim');
+ });
+ nodeEls.forEach(g => {
+ if (!activeNodes || activeNodes.has(g.__node)) g.classList.remove('dim');
+ else g.classList.add('dim');
+ });
+ }
+ function clearFocus() { linkEls.forEach(p => p.classList.remove('dim')); nodeEls.forEach(g => g.classList.remove('dim')); }
+
+ linkEls.forEach(p => {
+ p.addEventListener('mousemove', e => { window.MTtip.link(e, p.__link); });
+ p.addEventListener('mouseenter', () => { const s = new Set([p.__link]); setFocus(s, new Set([p.__link._sn, p.__link._tn])); });
+ p.addEventListener('mouseleave', () => { window.MTtip.hide(); clearFocus(); });
+ });
+ nodeEls.forEach(g => {
+ const n = g.__node;
+ const ls = new Set([...n._out, ...n._in, ...n._selfOut, ...n._selfIn]);
+ const ns = new Set([n]); ls.forEach(l => { ns.add(l._sn); ns.add(l._tn); });
+ g.addEventListener('mousemove', e => window.MTtip.node(e, n));
+ g.addEventListener('mouseenter', () => setFocus(ls, ns));
+ g.addEventListener('mouseleave', () => { window.MTtip.hide(); clearFocus(); });
+ });
+
+ return true;
+ }
+
+ function MTfmt(v) { return window.MT.CLPk(v); }
+
+ window.SankeyView = { render };
+})();
diff --git a/web/styles.css b/web/styles.css
new file mode 100644
index 0000000..4d76b84
--- /dev/null
+++ b/web/styles.css
@@ -0,0 +1,193 @@
+/* money-trace · dark finance-terminal aesthetic */
+:root {
+ --bg: #090b0f;
+ --bg-grid: rgba(255,255,255,0.022);
+ --panel: #10141b;
+ --panel-2: #161b24;
+ --line: rgba(255,255,255,0.075);
+ --line-2: rgba(255,255,255,0.13);
+ --ink: #eaeff7;
+ --ink-mute: #8b95a6;
+ --ink-dim: #545d6d;
+
+ --c-income: #2ee6a6; /* real money in */
+ --c-spend: #ff5f73; /* real money out */
+ --c-person: #b98cff; /* inter-person */
+ --c-fee: #ffc24b; /* fees & interest*/
+ --c-internal:#4b5466; /* cycles / noise */
+
+ --glow: 1; /* 0..1, multiplied into drop-shadows */
+ --link-op: 0.62; /* base opacity of real links */
+ --font-ui: 'Space Grotesk', system-ui, sans-serif;
+ --font-num: 'IBM Plex Mono', ui-monospace, monospace;
+}
+
+* { box-sizing: border-box; }
+html, body { margin: 0; height: 100%; }
+body {
+ background:
+ radial-gradient(1200px 700px at 78% -8%, rgba(46,230,166,0.05), transparent 60%),
+ radial-gradient(900px 600px at 6% 110%, rgba(185,140,255,0.045), transparent 55%),
+ linear-gradient(0deg, var(--bg-grid) 1px, transparent 1px) 0 0 / 100% 34px,
+ var(--bg);
+ color: var(--ink);
+ font-family: var(--font-ui);
+ -webkit-font-smoothing: antialiased;
+ overflow: hidden;
+}
+.num { font-family: var(--font-num); font-feature-settings: 'tnum' 1; letter-spacing: -0.01em; }
+
+/* ---- app frame ---- */
+#app { display: flex; flex-direction: column; height: 100vh; }
+
+/* ---- header / summary bar ---- */
+header.bar {
+ display: flex; align-items: stretch; gap: 0;
+ padding: 14px 22px 13px; border-bottom: 1px solid var(--line);
+ background: linear-gradient(180deg, rgba(255,255,255,0.018), transparent);
+}
+.brand { display: flex; flex-direction: column; justify-content: center; min-width: 168px; }
+.brand .mark {
+ font-weight: 600; font-size: 15px; letter-spacing: 0.26em;
+ text-transform: uppercase; color: var(--ink);
+}
+.brand .mark b { color: var(--c-income); font-weight: 600; }
+.brand .sub { font-size: 11px; color: var(--ink-dim); letter-spacing: 0.04em; margin-top: 3px; }
+
+.stats { display: flex; gap: 30px; margin-left: auto; align-items: center; }
+.stat { display: flex; flex-direction: column; gap: 4px; min-width: 132px; }
+.stat .lab {
+ font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase;
+ color: var(--ink-mute); display: flex; align-items: center; gap: 6px;
+}
+.stat .lab i { width: 7px; height: 7px; border-radius: 2px; display: inline-block; }
+.stat .val { font-size: 27px; font-weight: 500; line-height: 1; }
+.stat .val small { font-size: 13px; color: var(--ink-dim); margin-left: 2px; }
+.stat.income .val { color: var(--c-income); }
+.stat.spend .val { color: var(--c-spend); }
+.stat.internal .val { color: var(--ink-mute); }
+.stat.net .val { color: var(--ink); }
+.stat .delta { font-size: 11px; color: var(--ink-dim); }
+
+/* ---- controls strip ---- */
+.controls {
+ display: flex; align-items: center; gap: 18px; flex-wrap: wrap;
+ padding: 11px 22px; border-bottom: 1px solid var(--line);
+ background: var(--panel);
+}
+.seg { display: inline-flex; background: var(--bg); border: 1px solid var(--line); border-radius: 9px; padding: 3px; gap: 2px; }
+.seg button {
+ font-family: var(--font-ui); font-size: 12.5px; color: var(--ink-mute);
+ background: transparent; border: 0; padding: 7px 15px; border-radius: 6px;
+ cursor: pointer; display: flex; align-items: center; gap: 7px; transition: .16s;
+}
+.seg button:hover { color: var(--ink); }
+.seg button.on { background: var(--panel-2); color: var(--ink); box-shadow: inset 0 0 0 1px var(--line-2); }
+.seg button svg { width: 14px; height: 14px; }
+
+.toggle { display: inline-flex; align-items: center; gap: 9px; cursor: pointer; user-select: none; }
+.toggle .track { width: 38px; height: 21px; border-radius: 20px; background: var(--bg); border: 1px solid var(--line-2); position: relative; transition: .18s; }
+.toggle .track::after { content: ''; position: absolute; top: 2px; left: 2px; width: 15px; height: 15px; border-radius: 50%; background: var(--ink-mute); transition: .18s; }
+.toggle.on .track { background: rgba(46,230,166,0.22); border-color: var(--c-income); }
+.toggle.on .track::after { left: 19px; background: var(--c-income); }
+.toggle .lbl { font-size: 12.5px; color: var(--ink); }
+.toggle .hint { font-size: 11px; color: var(--ink-dim); }
+
+.ctl-label { font-size: 10.5px; letter-spacing: 0.13em; text-transform: uppercase; color: var(--ink-dim); margin-right: -8px; }
+
+/* month scrubber */
+.scrub { display: flex; align-items: center; gap: 12px; flex: 1; min-width: 280px; max-width: 560px; }
+.scrub .play { width: 30px; height: 30px; border-radius: 8px; border: 1px solid var(--line); background: var(--bg); color: var(--ink); cursor: pointer; display: grid; place-items: center; }
+.scrub .play:hover { border-color: var(--line-2); }
+.scrub .track-wrap { flex: 1; }
+.scrub .months { display: flex; justify-content: space-between; font-size: 10px; color: var(--ink-dim); margin-bottom: 5px; }
+.scrub .months b { color: var(--c-income); font-weight: 500; font-family: var(--font-num); }
+.bars { display: flex; gap: 2px; align-items: flex-end; height: 30px; }
+.bars .b { flex: 1; background: var(--line); border-radius: 2px 2px 0 0; cursor: pointer; transition: .14s; min-height: 2px; }
+.bars .b:hover { background: var(--ink-dim); }
+.bars .b.active { background: linear-gradient(180deg, var(--c-income), rgba(46,230,166,0.35)); }
+
+/* bank filter */
+.dropdown { position: relative; }
+.dropdown > .btn {
+ font-family: var(--font-ui); font-size: 12.5px; color: var(--ink); background: var(--bg);
+ border: 1px solid var(--line); border-radius: 8px; padding: 8px 13px; cursor: pointer;
+ display: flex; align-items: center; gap: 8px;
+}
+.dropdown > .btn .cnt { color: var(--ink-dim); font-family: var(--font-num); font-size: 11px; }
+.dropdown .menu {
+ position: absolute; top: calc(100% + 6px); right: 0; z-index: 40;
+ background: var(--panel-2); border: 1px solid var(--line-2); border-radius: 10px;
+ padding: 8px; width: 220px; box-shadow: 0 18px 50px rgba(0,0,0,0.55); display: none;
+ max-height: 360px; overflow: auto;
+}
+.dropdown.open .menu { display: block; }
+.dropdown .menu .row { display: flex; align-items: center; gap: 9px; padding: 7px 9px; border-radius: 7px; cursor: pointer; font-size: 12.5px; }
+.dropdown .menu .row:hover { background: var(--panel); }
+.dropdown .menu .row .ck { width: 15px; height: 15px; border-radius: 4px; border: 1px solid var(--line-2); display: grid; place-items: center; color: var(--bg); }
+.dropdown .menu .row.on .ck { background: var(--c-income); border-color: var(--c-income); }
+.dropdown .menu .row .n { color: var(--ink-dim); margin-left: auto; font-family: var(--font-num); font-size: 11px; }
+.dropdown .menu .sep { height: 1px; background: var(--line); margin: 6px 4px; }
+.dropdown .menu .all { font-size: 11px; color: var(--c-income); padding: 6px 9px; cursor: pointer; }
+
+/* ---- legend ---- */
+.legend { display: flex; align-items: center; gap: 16px; margin-left: auto; }
+.legend .item { display: flex; align-items: center; gap: 7px; font-size: 11.5px; color: var(--ink-mute); }
+.legend .item i { width: 16px; height: 3px; border-radius: 2px; display: inline-block; }
+.legend .item.dash i { height: 0; border-top: 2px dashed var(--c-internal); width: 18px; }
+
+/* ---- view area ---- */
+.view { position: relative; flex: 1; overflow: hidden; }
+.view svg { width: 100%; height: 100%; display: block; }
+
+/* sankey */
+.node-rect { transition: opacity .18s; }
+.node-label { fill: var(--ink); font-size: 12.5px; font-family: var(--font-ui); }
+.node-sub { fill: var(--ink-dim); font-size: 10px; font-family: var(--font-num); }
+.node-val { fill: var(--ink-mute); font-size: 10.5px; font-family: var(--font-num); }
+.colhead { fill: var(--ink-dim); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; font-family: var(--font-ui); }
+
+.link { fill: none; transition: opacity .18s, stroke-opacity .18s; }
+.link.real { opacity: var(--link-op); }
+.link.internal { opacity: 0.4; }
+.link.income { stroke: var(--c-income); }
+.link.inter_in, .link.inter_out { stroke: var(--c-person); }
+.link.expense { stroke: var(--c-spend); }
+.link.fee { stroke: var(--c-fee); }
+.link.internal_card, .link.internal_line, .link.internal_self { stroke: var(--c-internal); stroke-dasharray: 5 5; }
+.glow-real { filter: drop-shadow(0 0 calc(5px * var(--glow)) currentColor); }
+
+.dim { opacity: 0.07 !important; }
+.hl { opacity: 0.95 !important; }
+
+/* ---- tooltip ---- */
+#tip {
+ position: fixed; z-index: 80; pointer-events: none; max-width: 320px;
+ background: rgba(13,17,23,0.96); border: 1px solid var(--line-2); border-radius: 11px;
+ padding: 12px 13px; box-shadow: 0 16px 44px rgba(0,0,0,0.6); backdrop-filter: blur(8px);
+ opacity: 0; transform: translateY(4px); transition: opacity .12s, transform .12s; font-size: 12.5px;
+}
+#tip.show { opacity: 1; transform: translateY(0); }
+#tip .t-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
+#tip .t-dot { width: 9px; height: 9px; border-radius: 3px; }
+#tip .t-title { font-weight: 600; font-size: 13px; }
+#tip .t-amt { font-family: var(--font-num); font-size: 19px; margin: 2px 0 9px; }
+#tip .t-meta { color: var(--ink-mute); font-size: 11px; margin-bottom: 9px; }
+#tip .t-rows { display: flex; flex-direction: column; gap: 5px; border-top: 1px solid var(--line); padding-top: 9px; max-height: 200px; overflow: hidden; }
+#tip .t-row { display: flex; gap: 10px; font-size: 11.5px; align-items: baseline; }
+#tip .t-row .d { color: var(--ink-dim); font-family: var(--font-num); font-size: 10.5px; width: 42px; flex: none; }
+#tip .t-row .desc { color: var(--ink-mute); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+#tip .t-row .a { font-family: var(--font-num); color: var(--ink); }
+#tip .t-more { color: var(--ink-dim); font-size: 10.5px; margin-top: 7px; }
+
+/* orbit view */
+.orbit-ring { fill: none; stroke: var(--line); stroke-width: 1; }
+.orbit-node-label { fill: var(--ink); font-size: 11.5px; font-family: var(--font-ui); }
+.orbit-sub { fill: var(--ink-dim); font-size: 9.5px; font-family: var(--font-num); }
+.orbit-center-lab { fill: var(--ink); font-size: 14px; font-family: var(--font-ui); font-weight: 600; }
+
+/* empty state */
+.empty { position: absolute; inset: 0; display: grid; place-items: center; color: var(--ink-dim); font-size: 14px; }
+
+/* loading */
+#loading { position: fixed; inset: 0; display: grid; place-items: center; background: var(--bg); z-index: 200; color: var(--ink-mute); font-family: var(--font-num); font-size: 13px; letter-spacing: 0.1em; }
diff --git a/web/tweaks-panel.jsx b/web/tweaks-panel.jsx
new file mode 100644
index 0000000..2377d30
--- /dev/null
+++ b/web/tweaks-panel.jsx
@@ -0,0 +1,540 @@
+
+/* BEGIN USAGE */
+// tweaks-panel.jsx
+// Reusable Tweaks shell + form-control helpers.
+// Exports (to window): useTweaks, TweaksPanel, TweakSection, TweakRow, TweakSlider,
+// TweakToggle, TweakRadio, TweakSelect, TweakText, TweakNumber, TweakColor, TweakButton.
+//
+// Owns the host protocol (listens for __activate_edit_mode / __deactivate_edit_mode,
+// posts __edit_mode_available / __edit_mode_set_keys / __edit_mode_dismissed) so
+// individual prototypes don't re-roll it. Ships a consistent set of controls so you
+// don't hand-draw
, segmented radios, steppers, etc.
+//
+// Usage (in an HTML file that loads React + Babel):
+//
+// const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
+// "primaryColor": "#D97757",
+// "palette": ["#D97757", "#29261b", "#f6f4ef"],
+// "fontSize": 16,
+// "density": "regular",
+// "dark": false
+// }/*EDITMODE-END*/;
+//
+// function App() {
+// const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
+// return (
+//
+// Hello
+//
+//
+// setTweak('fontSize', v)} />
+// setTweak('density', v)} />
+//
+// setTweak('primaryColor', v)} />
+// setTweak('palette', v)} />
+// setTweak('dark', v)} />
+//
+//
+// );
+// }
+//
+// TweakRadio is the segmented control for 2–3 short options (auto-falls-back to
+// TweakSelect past ~16/~10 chars per label); reach for TweakSelect directly when
+// options are many or long. For color tweaks always curate 3-4 options rather than
+// a free picker; an option can also be a whole 2–5 color palette (the stored value
+// is the array). The Tweak* controls are a floor, not a ceiling — build custom
+// controls inside the panel if a tweak calls for UI they don't cover.
+/* END USAGE */
+// ─────────────────────────────────────────────────────────────────────────────
+
+const __TWEAKS_STYLE = `
+ .twk-panel{position:fixed;right:16px;bottom:16px;z-index:2147483646;width:280px;
+ max-height:calc(100vh - 32px);display:flex;flex-direction:column;
+ transform:scale(var(--dc-inv-zoom,1));transform-origin:bottom right;
+ background:rgba(250,249,247,.78);color:#29261b;
+ -webkit-backdrop-filter:blur(24px) saturate(160%);backdrop-filter:blur(24px) saturate(160%);
+ border:.5px solid rgba(255,255,255,.6);border-radius:14px;
+ box-shadow:0 1px 0 rgba(255,255,255,.5) inset,0 12px 40px rgba(0,0,0,.18);
+ font:11.5px/1.4 ui-sans-serif,system-ui,-apple-system,sans-serif;overflow:hidden}
+ .twk-hd{display:flex;align-items:center;justify-content:space-between;
+ padding:10px 8px 10px 14px;cursor:move;user-select:none}
+ .twk-hd b{font-size:12px;font-weight:600;letter-spacing:.01em}
+ .twk-x{appearance:none;border:0;background:transparent;color:rgba(41,38,27,.55);
+ width:22px;height:22px;border-radius:6px;cursor:default;font-size:13px;line-height:1}
+ .twk-x:hover{background:rgba(0,0,0,.06);color:#29261b}
+ .twk-body{padding:2px 14px 14px;display:flex;flex-direction:column;gap:10px;
+ overflow-y:auto;overflow-x:hidden;min-height:0;
+ scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}
+ .twk-body::-webkit-scrollbar{width:8px}
+ .twk-body::-webkit-scrollbar-track{background:transparent;margin:2px}
+ .twk-body::-webkit-scrollbar-thumb{background:rgba(0,0,0,.15);border-radius:4px;
+ border:2px solid transparent;background-clip:content-box}
+ .twk-body::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.25);
+ border:2px solid transparent;background-clip:content-box}
+ .twk-row{display:flex;flex-direction:column;gap:5px}
+ .twk-row-h{flex-direction:row;align-items:center;justify-content:space-between;gap:10px}
+ .twk-lbl{display:flex;justify-content:space-between;align-items:baseline;
+ color:rgba(41,38,27,.72)}
+ .twk-lbl>span:first-child{font-weight:500}
+ .twk-val{color:rgba(41,38,27,.5);font-variant-numeric:tabular-nums}
+
+ .twk-sect{font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
+ color:rgba(41,38,27,.45);padding:10px 0 0}
+ .twk-sect:first-child{padding-top:0}
+
+ .twk-field{appearance:none;box-sizing:border-box;width:100%;min-width:0;height:26px;padding:0 8px;
+ border:.5px solid rgba(0,0,0,.1);border-radius:7px;
+ background:rgba(255,255,255,.6);color:inherit;font:inherit;outline:none}
+ .twk-field:focus{border-color:rgba(0,0,0,.25);background:rgba(255,255,255,.85)}
+ select.twk-field{padding-right:22px;
+ background-image:url("data:image/svg+xml;utf8,
");
+ background-repeat:no-repeat;background-position:right 8px center}
+
+ .twk-slider{appearance:none;-webkit-appearance:none;width:100%;height:4px;margin:6px 0;
+ border-radius:999px;background:rgba(0,0,0,.12);outline:none}
+ .twk-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;
+ width:14px;height:14px;border-radius:50%;background:#fff;
+ border:.5px solid rgba(0,0,0,.12);box-shadow:0 1px 3px rgba(0,0,0,.2);cursor:default}
+ .twk-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;
+ background:#fff;border:.5px solid rgba(0,0,0,.12);box-shadow:0 1px 3px rgba(0,0,0,.2);cursor:default}
+
+ .twk-seg{position:relative;display:flex;padding:2px;border-radius:8px;
+ background:rgba(0,0,0,.06);user-select:none}
+ .twk-seg-thumb{position:absolute;top:2px;bottom:2px;border-radius:6px;
+ background:rgba(255,255,255,.9);box-shadow:0 1px 2px rgba(0,0,0,.12);
+ transition:left .15s cubic-bezier(.3,.7,.4,1),width .15s}
+ .twk-seg.dragging .twk-seg-thumb{transition:none}
+ .twk-seg button{appearance:none;position:relative;z-index:1;flex:1;border:0;
+ background:transparent;color:inherit;font:inherit;font-weight:500;min-height:22px;
+ border-radius:6px;cursor:default;padding:4px 6px;line-height:1.2;
+ overflow-wrap:anywhere}
+
+ .twk-toggle{position:relative;width:32px;height:18px;border:0;border-radius:999px;
+ background:rgba(0,0,0,.15);transition:background .15s;cursor:default;padding:0}
+ .twk-toggle[data-on="1"]{background:#34c759}
+ .twk-toggle i{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;
+ background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25);transition:transform .15s}
+ .twk-toggle[data-on="1"] i{transform:translateX(14px)}
+
+ .twk-num{display:flex;align-items:center;box-sizing:border-box;min-width:0;height:26px;padding:0 0 0 8px;
+ border:.5px solid rgba(0,0,0,.1);border-radius:7px;background:rgba(255,255,255,.6)}
+ .twk-num-lbl{font-weight:500;color:rgba(41,38,27,.6);cursor:ew-resize;
+ user-select:none;padding-right:8px}
+ .twk-num input{flex:1;min-width:0;height:100%;border:0;background:transparent;
+ font:inherit;font-variant-numeric:tabular-nums;text-align:right;padding:0 8px 0 0;
+ outline:none;color:inherit;-moz-appearance:textfield}
+ .twk-num input::-webkit-inner-spin-button,.twk-num input::-webkit-outer-spin-button{
+ -webkit-appearance:none;margin:0}
+ .twk-num-unit{padding-right:8px;color:rgba(41,38,27,.45)}
+
+ .twk-btn{appearance:none;height:26px;padding:0 12px;border:0;border-radius:7px;
+ background:rgba(0,0,0,.78);color:#fff;font:inherit;font-weight:500;cursor:default}
+ .twk-btn:hover{background:rgba(0,0,0,.88)}
+ .twk-btn.secondary{background:rgba(0,0,0,.06);color:inherit}
+ .twk-btn.secondary:hover{background:rgba(0,0,0,.1)}
+
+ .twk-swatch{appearance:none;-webkit-appearance:none;width:56px;height:22px;
+ border:.5px solid rgba(0,0,0,.1);border-radius:6px;padding:0;cursor:default;
+ background:transparent;flex-shrink:0}
+ .twk-swatch::-webkit-color-swatch-wrapper{padding:0}
+ .twk-swatch::-webkit-color-swatch{border:0;border-radius:5.5px}
+ .twk-swatch::-moz-color-swatch{border:0;border-radius:5.5px}
+
+ .twk-chips{display:flex;gap:6px}
+ .twk-chip{position:relative;appearance:none;flex:1;min-width:0;height:46px;
+ padding:0;border:0;border-radius:6px;overflow:hidden;cursor:default;
+ box-shadow:0 0 0 .5px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.06);
+ transition:transform .12s cubic-bezier(.3,.7,.4,1),box-shadow .12s}
+ .twk-chip:hover{transform:translateY(-1px);
+ box-shadow:0 0 0 .5px rgba(0,0,0,.18),0 4px 10px rgba(0,0,0,.12)}
+ .twk-chip[data-on="1"]{box-shadow:0 0 0 1.5px rgba(0,0,0,.85),
+ 0 2px 6px rgba(0,0,0,.15)}
+ .twk-chip>span{position:absolute;top:0;bottom:0;right:0;width:34%;
+ display:flex;flex-direction:column;box-shadow:-1px 0 0 rgba(0,0,0,.1)}
+ .twk-chip>span>i{flex:1;box-shadow:0 -1px 0 rgba(0,0,0,.1)}
+ .twk-chip>span>i:first-child{box-shadow:none}
+ .twk-chip svg{position:absolute;top:6px;left:6px;width:13px;height:13px;
+ filter:drop-shadow(0 1px 1px rgba(0,0,0,.3))}
+`;
+
+// ── useTweaks ───────────────────────────────────────────────────────────────
+// Single source of truth for tweak values. setTweak persists via the host
+// (__edit_mode_set_keys → host rewrites the EDITMODE block on disk).
+function useTweaks(defaults) {
+ const [values, setValues] = React.useState(defaults);
+ // Accepts either setTweak('key', value) or setTweak({ key: value, ... }) so a
+ // useState-style call doesn't write a "[object Object]" key into the persisted
+ // JSON block.
+ const setTweak = React.useCallback((keyOrEdits, val) => {
+ const edits = typeof keyOrEdits === 'object' && keyOrEdits !== null
+ ? keyOrEdits : { [keyOrEdits]: val };
+ setValues((prev) => ({ ...prev, ...edits }));
+ window.parent.postMessage({ type: '__edit_mode_set_keys', edits }, '*');
+ // Same-window signal so in-page listeners (deck-stage rail thumbnails)
+ // can react — the parent message only reaches the host, not peers.
+ window.dispatchEvent(new CustomEvent('tweakchange', { detail: edits }));
+ }, []);
+ return [values, setTweak];
+}
+
+// ── TweaksPanel ─────────────────────────────────────────────────────────────
+// Floating shell. Registers the protocol listener BEFORE announcing
+// availability — if the announce ran first, the host's activate could land
+// before our handler exists and the toolbar toggle would silently no-op.
+// The close button posts __edit_mode_dismissed so the host's toolbar toggle
+// flips off in lockstep; the host echoes __deactivate_edit_mode back which
+// is what actually hides the panel.
+function TweaksPanel({ title = 'Tweaks', children }) {
+ const [open, setOpen] = React.useState(false);
+ const dragRef = React.useRef(null);
+ const offsetRef = React.useRef({ x: 16, y: 16 });
+ const PAD = 16;
+
+ const clampToViewport = React.useCallback(() => {
+ const panel = dragRef.current;
+ if (!panel) return;
+ const w = panel.offsetWidth, h = panel.offsetHeight;
+ const maxRight = Math.max(PAD, window.innerWidth - w - PAD);
+ const maxBottom = Math.max(PAD, window.innerHeight - h - PAD);
+ offsetRef.current = {
+ x: Math.min(maxRight, Math.max(PAD, offsetRef.current.x)),
+ y: Math.min(maxBottom, Math.max(PAD, offsetRef.current.y)),
+ };
+ panel.style.right = offsetRef.current.x + 'px';
+ panel.style.bottom = offsetRef.current.y + 'px';
+ }, []);
+
+ React.useEffect(() => {
+ if (!open) return;
+ clampToViewport();
+ if (typeof ResizeObserver === 'undefined') {
+ window.addEventListener('resize', clampToViewport);
+ return () => window.removeEventListener('resize', clampToViewport);
+ }
+ const ro = new ResizeObserver(clampToViewport);
+ ro.observe(document.documentElement);
+ return () => ro.disconnect();
+ }, [open, clampToViewport]);
+
+ React.useEffect(() => {
+ const onMsg = (e) => {
+ const t = e?.data?.type;
+ if (t === '__activate_edit_mode') setOpen(true);
+ else if (t === '__deactivate_edit_mode') setOpen(false);
+ };
+ window.addEventListener('message', onMsg);
+ window.parent.postMessage({ type: '__edit_mode_available' }, '*');
+ return () => window.removeEventListener('message', onMsg);
+ }, []);
+
+ const dismiss = () => {
+ setOpen(false);
+ window.parent.postMessage({ type: '__edit_mode_dismissed' }, '*');
+ };
+
+ const onDragStart = (e) => {
+ const panel = dragRef.current;
+ if (!panel) return;
+ const r = panel.getBoundingClientRect();
+ const sx = e.clientX, sy = e.clientY;
+ const startRight = window.innerWidth - r.right;
+ const startBottom = window.innerHeight - r.bottom;
+ const move = (ev) => {
+ offsetRef.current = {
+ x: startRight - (ev.clientX - sx),
+ y: startBottom - (ev.clientY - sy),
+ };
+ clampToViewport();
+ };
+ const up = () => {
+ window.removeEventListener('mousemove', move);
+ window.removeEventListener('mouseup', up);
+ };
+ window.addEventListener('mousemove', move);
+ window.addEventListener('mouseup', up);
+ };
+
+ if (!open) return null;
+ return (
+ <>
+
+
+
+ {title}
+ e.stopPropagation()}
+ onClick={dismiss}>✕
+
+
+ {children}
+
+
+ >
+ );
+}
+
+// ── Layout helpers ──────────────────────────────────────────────────────────
+
+function TweakSection({ label, children }) {
+ return (
+ <>
+
{label}
+ {children}
+ >
+ );
+}
+
+function TweakRow({ label, value, children, inline = false }) {
+ return (
+
+
+ {label}
+ {value != null && {value} }
+
+ {children}
+
+ );
+}
+
+// ── Controls ────────────────────────────────────────────────────────────────
+
+function TweakSlider({ label, value, min = 0, max = 100, step = 1, unit = '', onChange }) {
+ return (
+
+ onChange(Number(e.target.value))} />
+
+ );
+}
+
+function TweakToggle({ label, value, onChange }) {
+ return (
+
+
{label}
+
onChange(!value)}>
+
+ );
+}
+
+function TweakRadio({ label, value, options, onChange }) {
+ const trackRef = React.useRef(null);
+ const [dragging, setDragging] = React.useState(false);
+ // The active value is read by pointer-move handlers attached for the lifetime
+ // of a drag — ref it so a stale closure doesn't fire onChange for every move.
+ const valueRef = React.useRef(value);
+ valueRef.current = value;
+
+ // Segments wrap mid-word once per-segment width runs out. The track is
+ // ~248px (280 panel − 28 body pad − 4 seg pad), each button loses 12px
+ // to its own padding, and 11.5px system-ui averages ~6.3px/char — so 2
+ // options fit ~16 chars each, 3 fit ~10. Past that (or >3 options), fall
+ // back to a dropdown rather than wrap.
+ const labelLen = (o) => String(typeof o === 'object' ? o.label : o).length;
+ const maxLen = options.reduce((m, o) => Math.max(m, labelLen(o)), 0);
+ const fitsAsSegments = maxLen <= ({ 2: 16, 3: 10 }[options.length] ?? 0);
+ if (!fitsAsSegments) {
+ //
emits strings — map back to the original option value so the
+ // fallback stays type-preserving (numbers, booleans) like the segment path.
+ const resolve = (s) => {
+ const m = options.find((o) => String(typeof o === 'object' ? o.value : o) === s);
+ return m === undefined ? s : typeof m === 'object' ? m.value : m;
+ };
+ return onChange(resolve(s))} />;
+ }
+ const opts = options.map((o) => (typeof o === 'object' ? o : { value: o, label: o }));
+ const idx = Math.max(0, opts.findIndex((o) => o.value === value));
+ const n = opts.length;
+
+ const segAt = (clientX) => {
+ const r = trackRef.current.getBoundingClientRect();
+ const inner = r.width - 4;
+ const i = Math.floor(((clientX - r.left - 2) / inner) * n);
+ return opts[Math.max(0, Math.min(n - 1, i))].value;
+ };
+
+ const onPointerDown = (e) => {
+ setDragging(true);
+ const v0 = segAt(e.clientX);
+ if (v0 !== valueRef.current) onChange(v0);
+ const move = (ev) => {
+ if (!trackRef.current) return;
+ const v = segAt(ev.clientX);
+ if (v !== valueRef.current) onChange(v);
+ };
+ const up = () => {
+ setDragging(false);
+ window.removeEventListener('pointermove', move);
+ window.removeEventListener('pointerup', up);
+ };
+ window.addEventListener('pointermove', move);
+ window.addEventListener('pointerup', up);
+ };
+
+ return (
+
+
+
+ {opts.map((o) => (
+
+ {o.label}
+
+ ))}
+
+
+ );
+}
+
+function TweakSelect({ label, value, options, onChange }) {
+ return (
+
+ onChange(e.target.value)}>
+ {options.map((o) => {
+ const v = typeof o === 'object' ? o.value : o;
+ const l = typeof o === 'object' ? o.label : o;
+ return {l} ;
+ })}
+
+
+ );
+}
+
+function TweakText({ label, value, placeholder, onChange }) {
+ return (
+
+ onChange(e.target.value)} />
+
+ );
+}
+
+function TweakNumber({ label, value, min, max, step = 1, unit = '', onChange }) {
+ const clamp = (n) => {
+ if (min != null && n < min) return min;
+ if (max != null && n > max) return max;
+ return n;
+ };
+ const startRef = React.useRef({ x: 0, val: 0 });
+ const onScrubStart = (e) => {
+ e.preventDefault();
+ startRef.current = { x: e.clientX, val: value };
+ const decimals = (String(step).split('.')[1] || '').length;
+ const move = (ev) => {
+ const dx = ev.clientX - startRef.current.x;
+ const raw = startRef.current.val + dx * step;
+ const snapped = Math.round(raw / step) * step;
+ onChange(clamp(Number(snapped.toFixed(decimals))));
+ };
+ const up = () => {
+ window.removeEventListener('pointermove', move);
+ window.removeEventListener('pointerup', up);
+ };
+ window.addEventListener('pointermove', move);
+ window.addEventListener('pointerup', up);
+ };
+ return (
+
+ {label}
+ onChange(clamp(Number(e.target.value)))} />
+ {unit && {unit} }
+
+ );
+}
+
+// Relative-luminance contrast pick — checkmarks drawn over a swatch need to
+// read on both #111 and #fafafa without per-option configuration. Hex input
+// only (#rgb / #rrggbb); named or rgb()/hsl() colors fall through to "light".
+function __twkIsLight(hex) {
+ const h = String(hex).replace('#', '');
+ const x = h.length === 3 ? h.replace(/./g, (c) => c + c) : h.padEnd(6, '0');
+ const n = parseInt(x.slice(0, 6), 16);
+ if (Number.isNaN(n)) return true;
+ const r = (n >> 16) & 255, g = (n >> 8) & 255, b = n & 255;
+ return r * 299 + g * 587 + b * 114 > 148000;
+}
+
+const __TwkCheck = ({ light }) => (
+
+
+
+);
+
+// TweakColor — curated color/palette picker. Each option is either a single
+// hex string or an array of 1-5 hex strings; the card adapts — a lone color
+// renders solid, a palette renders colors[0] as the hero (left ~2/3) with the
+// rest stacked in a sharp column on the right. onChange emits the
+// option in the shape it was passed (string stays string, array stays array).
+// Without options it falls back to the native color input for back-compat.
+function TweakColor({ label, value, options, onChange }) {
+ if (!options || !options.length) {
+ return (
+
+
{label}
+
onChange(e.target.value)} />
+
+ );
+ }
+ // Native emits lowercase hex per the HTML spec, so
+ // compare case-insensitively. String() guards JSON.stringify(undefined),
+ // which returns the primitive undefined (no .toLowerCase).
+ const key = (o) => String(JSON.stringify(o)).toLowerCase();
+ const cur = key(value);
+ return (
+
+
+ {options.map((o, i) => {
+ const colors = Array.isArray(o) ? o : [o];
+ const [hero, ...rest] = colors;
+ const sup = rest.slice(0, 4);
+ const on = key(o) === cur;
+ return (
+ onChange(o)}>
+ {sup.length > 0 && (
+
+ {sup.map((c, j) => )}
+
+ )}
+ {on && <__TwkCheck light={__twkIsLight(hero)} />}
+
+ );
+ })}
+
+
+ );
+}
+
+function TweakButton({ label, onClick, secondary = false }) {
+ return (
+ {label}
+ );
+}
+
+Object.assign(window, {
+ useTweaks, TweaksPanel, TweakSection, TweakRow,
+ TweakSlider, TweakToggle, TweakRadio, TweakSelect,
+ TweakText, TweakNumber, TweakColor, TweakButton,
+});