CashYou

Вітаємо! CashYou допоможе вам керувати фінансами, відстежувати доходи та витрати, активи та пасиви.

📊Аналітика і прогнози
🤖AI-сканування чеків
Крипто і акції онлайн
☁️Google Drive синхронізація
🔒Шифрування AES-256
📶Офлайн режим

Всі дані зберігаються на пристрої

Сьогодні
Встановити
📅
⚙️
CashFlow ✏️
0 ₴
Капітал
0 ₴
💰
Доходи
0 ₴
КатегоріяСума
📜 Історія
📂 Категорії
🤖 AI Скан
💸
Витрати
0 ₴
КатегоріяСума
📜 Історія
📂 Категорії
🤖 AI Скан
🏦
Активи
0 ₴
КатегоріяСума
📜 Історія
📂 Категорії
🔄 Ціни
💳
Пасиви
0 ₴
КатегоріяСума
📜 Історія
📂 Категорії
📊 Аналітика
💸 Cashflow по місяцях
🍕 Витрати по категоріях
📈 Динаміка капіталу
💎 Чистий капітал (з урахуванням пасивів)
🥧 Розподіл активів
🤖 AI Поради
Натисніть «Оновити» щоб отримати персональні поради від AI на основі ваших фінансів
🔮 Прогноз на 3 місяці
Календар
🔄
⚠️
📡 Офлайн режим — дані збережено локально
Встановити CashYou
Працює офлайн, без браузера
CashYou
CashYou
Фінанси · Трекер
★★★★★ 5.0
💸
Доходи
📊
Витрати
🏦
Активи
📅
Календар
🔒
Офлайн
Особистий фінансовий трекер. Всі дані зберігаються лише на вашому пристрої — без серверів і реєстрації.
1
Натисніть Поділитися ⎋ внизу Safari
2
Виберіть На екран «Домів»
3
Натисніть Додати у правому куті
function renderTable(type,tableId,cats){ const tb=$id(tableId);if(!tb)return; tb.innerHTML=''; const isAL=(type==='asset'||type==='liability'); const realCats=isAL?cats:null; const sr=(type==='asset'||type==='liability'); const entries=Object.entries(cats); if(!isAL && entries.every(([,d])=>!d.amount)){ const icons={income:'💰',expense:'💸'}; const msgs={income:'Немає доходів за цей місяць',expense:'Немає витрат за цей місяць'}; const subs={income:'Додайте перший дохід нижче',expense:'Додайте першу витрату нижче'}; const acts={income:'+ Дохід',expense:'+ Витрата'}; const fns ={income:`openFab()`,expense:`openFab()`}; _showEmptyState(tableId,icons[type]||'📋',msgs[type]||'Немає даних',subs[type]||'',acts[type]||null,fns[type]||''); return; } // Sort entries: by amount descending entries.sort((a,b)=>(b[1].amount||0)-(a[1].amount||0)); entries.forEach(([key,d])=>{ if(!d||typeof d.amount==='undefined')return; const tr=document.createElement('tr'); tr.onclick=()=>openQuickModal(type,key); if(sr){ const realD=realCats[key]||d; const icon=d.icon||''; const assetCurr=d.currency||curr; const dc=data.settings?.displayCurrency; const dispAmt=dc ? toDisplayCurr(realD.amount,assetCurr) : realD.amount; const dispCurr=dc||assetCurr; const amtStr=Math.abs(dispAmt).toFixed(2)+' '+dispCurr; const origStr=(dc&&dc!==assetCurr)? `(${realD.amount.toFixed(2)} ${assetCurr})`:''; const intBadge=realD.interestRate>0? `${realD.interestRate}%`:''; const priceBadge=(realD.assetType==='crypto'||realD.assetType==='stock')&&realD.ticker&&realD.priceChange!=null? `${realD.priceChange>=0?'▲':'▼'}${Math.abs(realD.priceChange||0).toFixed(1)}%` :(type==='asset'?`⚙️`:''); tr.innerHTML=`${icon} ${catName(key)}${intBadge}${priceBadge}${amtStr}${origStr}`; } else { const lim = getLimit(type, key); const pct = lim > 0 ? Math.min(d.amount / lim * 100, 100) : 0; const overBudget = lim > 0 && d.amount > lim; const limitBar = lim > 0 ? `
${fmt(d.amount)}/${fmt(lim)}
` : ''; const overIcon = overBudget ? '⚠️' : ''; tr.innerHTML=`${catName(key)}${overIcon} ${lim?'':fmt(d.amount)}${limitBar}`; } tb.appendChild(tr); }); }