buhanka-finance-app 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.html +10 -7
- package/package.json +1 -1
package/index.html
CHANGED
|
@@ -235,7 +235,7 @@ tr.subtotal>td:first-child{color:var(--accent);box-shadow:inset 3px 0 0 var(--ac
|
|
|
235
235
|
|
|
236
236
|
<script>
|
|
237
237
|
/* ============================================================ БУХАНКА · Финансы v2 ============================================================ */
|
|
238
|
-
const APP_VERSION='
|
|
238
|
+
const APP_VERSION='4.0';
|
|
239
239
|
const SCHEMA=3; /* версия структуры данных; растёт при доработках */
|
|
240
240
|
const STORE_KEY='buhanka_finance_v9';/* НЕ МЕНЯТЬ НИКОГДА — иначе данные «слетят» при обновлении файла */
|
|
241
241
|
const LEGACY_KEYS=['buhanka_finance_v8','buhanka_finance_v7','buhanka_finance_v6','buhanka_finance_v5'];
|
|
@@ -573,6 +573,9 @@ function opChannel(o){
|
|
|
573
573
|
}
|
|
574
574
|
const FIN_BASE=['Получение займа','Возврат займа','Дивиденды','Прочее (фин)'];
|
|
575
575
|
const INV_BASE=['Покупка оборудования','Ремонт','Обеспечительные платежи','Прочее (инвест)'];
|
|
576
|
+
/* в CF статья называется «Закупки», в PnL остаётся «Себестоимость» */
|
|
577
|
+
const CF_LABEL={'Себестоимость':'Закупки'};
|
|
578
|
+
const cfLabel=c=>CF_LABEL[c]||c;
|
|
576
579
|
/* ── группировка статей по разделам CF ── */
|
|
577
580
|
function cfGroup(cat){
|
|
578
581
|
if(FIN_BASE.includes(cat)) return 'fin';
|
|
@@ -1282,18 +1285,18 @@ function renderCF(C){
|
|
|
1282
1285
|
html+=row('sub','Поступления',M.days.map(d=>cell(num(d.inSum))).join(''),`<b>${num(sumOf(x=>x.inSum))}</b>`);
|
|
1283
1286
|
CHANNELS.forEach(([k,n])=>{ html+=row('val',n,M.days.map(d=>planCell(d,'ch:'+k,num(d.inc[k]||0))).join(''),num(sumOf(x=>x.inc[k]||0))); });
|
|
1284
1287
|
html+=row('sub','Расходы',M.days.map(d=>cell(neg(d.exSum),'neg')).join(''),`<b class="neg">${neg(sumOf(x=>x.exSum))}</b>`);
|
|
1285
|
-
M.cats.op.forEach(c=>{ html+=row('val',esc(c),M.days.map(d=>planCell(d,'ex:'+c,neg(d.exp[c]||0))).join(''),neg(sumOf(x=>x.exp[c]||0))); });
|
|
1288
|
+
M.cats.op.forEach(c=>{ html+=row('val',esc(cfLabel(c)),M.days.map(d=>planCell(d,'ex:'+c,neg(d.exp[c]||0))).join(''),neg(sumOf(x=>x.exp[c]||0))); });
|
|
1286
1289
|
|
|
1287
1290
|
if(M.cats.fin.length){
|
|
1288
1291
|
html+=row('sec','Финансовая деятельность',M.days.map(d=>cell(d.finSum>=0?num(d.finSum):neg(d.finSum),d.finSum>=0?'pos':'neg')).join(''),
|
|
1289
1292
|
(()=>{const t=sumOf(x=>x.finSum);return `<b class="${t>=0?'pos':'neg'}">${t>=0?num(t):neg(t)}</b>`;})());
|
|
1290
|
-
M.cats.fin.forEach(c=>{ html+=row('val',esc(c),M.days.map(d=>planCell(d,'fi:'+c,(d.fin[c]||0)>=0?num(d.fin[c]||0):neg(d.fin[c]||0))).join(''),
|
|
1293
|
+
M.cats.fin.forEach(c=>{ html+=row('val',esc(cfLabel(c)),M.days.map(d=>planCell(d,'fi:'+c,(d.fin[c]||0)>=0?num(d.fin[c]||0):neg(d.fin[c]||0))).join(''),
|
|
1291
1294
|
(()=>{const t=sumOf(x=>x.fin[c]||0);return t>=0?num(t):neg(t);})()); });
|
|
1292
1295
|
}
|
|
1293
1296
|
if(M.cats.inv.length){
|
|
1294
1297
|
html+=row('sec','Инвестиционная деятельность',M.days.map(d=>cell(d.invSum>=0?num(d.invSum):neg(d.invSum),d.invSum>=0?'pos':'neg')).join(''),
|
|
1295
1298
|
(()=>{const t=sumOf(x=>x.invSum);return `<b class="${t>=0?'pos':'neg'}">${t>=0?num(t):neg(t)}</b>`;})());
|
|
1296
|
-
M.cats.inv.forEach(c=>{ html+=row('val',esc(c),M.days.map(d=>planCell(d,'in:'+c,(d.inv[c]||0)>=0?num(d.inv[c]||0):neg(d.inv[c]||0))).join(''),
|
|
1299
|
+
M.cats.inv.forEach(c=>{ html+=row('val',esc(cfLabel(c)),M.days.map(d=>planCell(d,'in:'+c,(d.inv[c]||0)>=0?num(d.inv[c]||0):neg(d.inv[c]||0))).join(''),
|
|
1297
1300
|
(()=>{const t=sumOf(x=>x.inv[c]||0);return t>=0?num(t):neg(t);})()); });
|
|
1298
1301
|
}
|
|
1299
1302
|
|
|
@@ -1334,11 +1337,11 @@ function renderCF(C){
|
|
|
1334
1337
|
html+=rowM('sub','Поступления',x=>x.inSum);
|
|
1335
1338
|
CHANNELS.forEach(([k,n])=>{ html+=rowM('val',n,x=>x.inc[k]||0); });
|
|
1336
1339
|
html+=rowM('sub','Расходы',x=>x.exSum,'neg');
|
|
1337
|
-
catsY.op.forEach(c=>{ html+=rowM('val',esc(c),x=>x.exp[c]||0,'neg'); });
|
|
1340
|
+
catsY.op.forEach(c=>{ html+=rowM('val',esc(cfLabel(c)),x=>x.exp[c]||0,'neg'); });
|
|
1338
1341
|
html+=rowM('sec','Финансовая деятельность',x=>x.finSum,'sgn');
|
|
1339
|
-
catsY.fin.forEach(c=>{ html+=rowM('val',esc(c),x=>x.fin[c]||0,'sgn'); });
|
|
1342
|
+
catsY.fin.forEach(c=>{ html+=rowM('val',esc(cfLabel(c)),x=>x.fin[c]||0,'sgn'); });
|
|
1340
1343
|
html+=rowM('sec','Инвестиционная деятельность',x=>x.invSum,'sgn');
|
|
1341
|
-
catsY.inv.forEach(c=>{ html+=rowM('val',esc(c),x=>x.inv[c]||0,'sgn'); });
|
|
1344
|
+
catsY.inv.forEach(c=>{ html+=rowM('val',esc(cfLabel(c)),x=>x.inv[c]||0,'sgn'); });
|
|
1342
1345
|
{
|
|
1343
1346
|
let cells='',first=null,last=null;
|
|
1344
1347
|
MM.forEach(M=>{ if(!M){ cells+='<td></td>'; return; }
|