[ADD] explanation + interaction of journals + chart of accounts
After discussion with fp this probably isn't the direction (ish), but want to checkpoint this in order to work on other stuff earlier in the document, but not commit a single gigantic blob of stuff.
This commit is contained in:
parent
0ab12904e1
commit
931c1c8ec3
48
_static/atom.js
Normal file
48
_static/atom.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
function createAtom(val, options) {
|
||||||
|
var watchers = {};
|
||||||
|
var validator = options && options.validator || function () { return true; };
|
||||||
|
|
||||||
|
function transition(next) {
|
||||||
|
if (!validator(next)) {
|
||||||
|
var err = new Error(next + " failed validation");
|
||||||
|
err.name = "AssertionError";
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
var prev = val;
|
||||||
|
val = next;
|
||||||
|
|
||||||
|
Object.keys(watchers).forEach(function (k) {
|
||||||
|
watchers[k](k, atom, prev, next);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var atom = {
|
||||||
|
addWatch: function (key, fn) {
|
||||||
|
watchers[key] = fn;
|
||||||
|
},
|
||||||
|
|
||||||
|
removeWatch: function (key) {
|
||||||
|
delete watchers[key];
|
||||||
|
},
|
||||||
|
|
||||||
|
swap: function (fn) {
|
||||||
|
var args = [val].concat([].slice.call(arguments, 1));
|
||||||
|
transition(fn.apply(null, args));
|
||||||
|
},
|
||||||
|
|
||||||
|
reset: function (v) {
|
||||||
|
transition(v);
|
||||||
|
},
|
||||||
|
|
||||||
|
deref: function () {
|
||||||
|
return val;
|
||||||
|
},
|
||||||
|
|
||||||
|
toString: function () {
|
||||||
|
return "Atom(" + JSON.stringify(val) + ")";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return atom;
|
||||||
|
}
|
355
_static/chart-of-accounts.js
Normal file
355
_static/chart-of-accounts.js
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// .journals
|
||||||
|
// .t-accounts
|
||||||
|
// .chart-of-accounts
|
||||||
|
// document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
// React.render(
|
||||||
|
// React.createElement(CoA),
|
||||||
|
// document.querySelector('.chart-of-accounts'));
|
||||||
|
// });
|
||||||
|
var data = createAtom();
|
||||||
|
|
||||||
|
function toKey(s, postfix) {
|
||||||
|
if (postfix) {
|
||||||
|
s += ' ' + postfix;
|
||||||
|
}
|
||||||
|
return s.replace(/[^0-9a-z ]/gi, '').toLowerCase().split(/\s+/).join('-');
|
||||||
|
|
||||||
|
}
|
||||||
|
var isFulfilled = (function () {
|
||||||
|
var enabledTransactions = Immutable.Seq();
|
||||||
|
// memoize enabled ops so they don't have to be recomputed all the time
|
||||||
|
data.addWatch('enableds', function (k, m, prev, next) {
|
||||||
|
enabledTransactions = next.filter(function (v, k) {
|
||||||
|
return v.get('enabled');
|
||||||
|
}).keySeq();
|
||||||
|
});
|
||||||
|
return function isFulfilled(deps) {
|
||||||
|
var d = Immutable.Set(deps);
|
||||||
|
return d.isEmpty() || d.subtract(enabledTransactions).isEmpty();
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
function isEnabled(transaction) {
|
||||||
|
var item = data.deref().get(transaction);
|
||||||
|
return item.get('enabled') && isFulfilled(item.get('depends'));
|
||||||
|
}
|
||||||
|
var Controls = React.createClass({
|
||||||
|
getInitialState: function () {
|
||||||
|
return { folded: true };
|
||||||
|
},
|
||||||
|
toggle: function () {
|
||||||
|
this.setState({folded: !this.state.folded});
|
||||||
|
},
|
||||||
|
render: function () {
|
||||||
|
return React.DOM.div(
|
||||||
|
null,
|
||||||
|
React.DOM.h4(
|
||||||
|
{ onClick: this.toggle, style: { cursor: 'pointer' } },
|
||||||
|
this.state.folded ? "\u25B8 " : "\u25BE ",
|
||||||
|
"Operations"),
|
||||||
|
this.state.folded ? undefined : this.props.p.map(function (v, k) {
|
||||||
|
return React.DOM.label(
|
||||||
|
{key: k, style: {display: 'block' } },
|
||||||
|
React.DOM.input({
|
||||||
|
type: 'checkbox',
|
||||||
|
disabled: !isFulfilled(v.get('depends')),
|
||||||
|
checked: v.get('enabled'),
|
||||||
|
onChange: function () {
|
||||||
|
data.swap(function (d) {
|
||||||
|
return d.updateIn(
|
||||||
|
[k, 'enabled'],
|
||||||
|
function (check) { return !check; });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
" ",
|
||||||
|
v.get('label')
|
||||||
|
);
|
||||||
|
}, this).toArray()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var Journal = React.createClass({
|
||||||
|
render: function () {
|
||||||
|
return React.DOM.div(
|
||||||
|
null,
|
||||||
|
React.createElement(Controls, this.props),
|
||||||
|
React.DOM.table(
|
||||||
|
{className: 'table'},
|
||||||
|
React.DOM.thead(
|
||||||
|
null,
|
||||||
|
React.DOM.tr(
|
||||||
|
null,
|
||||||
|
React.DOM.th(),
|
||||||
|
React.DOM.th({width: '20%'}, "Debit"),
|
||||||
|
React.DOM.th({width: '20%'}, "Credit")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
React.DOM.tbody(
|
||||||
|
null,
|
||||||
|
this.props.p
|
||||||
|
.filter(function (v, k) { return isEnabled(k); })
|
||||||
|
.valueSeq()
|
||||||
|
.flatMap(function (tx) {
|
||||||
|
if (tx.get('operations').isEmpty()) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
var label = tx.get('label');
|
||||||
|
var k = toKey(label);
|
||||||
|
return tx.get('operations').toSeq().map(function (op) {
|
||||||
|
var credit = op.get('credit'), debit = op.get('debit');
|
||||||
|
return React.DOM.tr(
|
||||||
|
{key: toKey(label, op.get('account'))},
|
||||||
|
React.DOM.td(
|
||||||
|
null,
|
||||||
|
credit ? '\u2001' : '',
|
||||||
|
accounts[op.get('account')].label
|
||||||
|
),
|
||||||
|
React.DOM.td(null, debit && debit(this.props.p)),
|
||||||
|
React.DOM.td(null, credit && credit(this.props.p))
|
||||||
|
);
|
||||||
|
}, this).concat(
|
||||||
|
React.DOM.tr(
|
||||||
|
{key: k + '-label'},
|
||||||
|
React.DOM.td(
|
||||||
|
{colSpan: 3, style: {textAlign: 'center'}},
|
||||||
|
label)),
|
||||||
|
React.DOM.tr(
|
||||||
|
{key: k + '-spacer'},
|
||||||
|
React.DOM.td({colSpan: 3}, "\u00A0"))
|
||||||
|
);
|
||||||
|
}, this)
|
||||||
|
.toArray()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
data.addWatch('journals', function (k, m, prev, next) {
|
||||||
|
React.render(
|
||||||
|
React.createElement(Journal, {p: next}),
|
||||||
|
document.querySelector('.journals')
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
var Chart = React.createClass({
|
||||||
|
render: function () {
|
||||||
|
return React.DOM.div(
|
||||||
|
null,
|
||||||
|
React.createElement(Controls, {p: this.props.p}),
|
||||||
|
DOM.table(
|
||||||
|
{className: 'table'},
|
||||||
|
DOM.tr(
|
||||||
|
null,
|
||||||
|
DOM.th(),
|
||||||
|
DOM.th({className: 'text-right'}, "Debit"),
|
||||||
|
DOM.th({className: 'text-right'}, "Credit"),
|
||||||
|
DOM.th({className: 'text-right'}, "Balance")),
|
||||||
|
this.accounts().map(function (data) {
|
||||||
|
return DOM.tr(
|
||||||
|
{key: data.code},
|
||||||
|
DOM.th(null,
|
||||||
|
data.level ? '\u2001 ' : '',
|
||||||
|
data.code, ' ', data.label),
|
||||||
|
DOM.td({className: 'text-right'}, data.debit),
|
||||||
|
DOM.td({className: 'text-right'}, data.credit),
|
||||||
|
DOM.td({className: 'text-right'}, data.debit - data.credit)
|
||||||
|
);
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
accounts: function() {
|
||||||
|
var _this = this;
|
||||||
|
var out = [];
|
||||||
|
var zero = function () { return 0; }
|
||||||
|
var data = this.props.p;
|
||||||
|
// for each operated-on account, apply all operations and save the
|
||||||
|
// resulting (debit, credit) state
|
||||||
|
var chart = data
|
||||||
|
.filter(function (v, k) { return isEnabled(k); })
|
||||||
|
.valueSeq()
|
||||||
|
.flatMap(function (v) { return v.get('operations'); })
|
||||||
|
.reduce(function (acc, op) {
|
||||||
|
// update operation's account debit and credit by adding
|
||||||
|
// operation's debit and credit to them, initialize to 0
|
||||||
|
// if not set yet
|
||||||
|
return acc
|
||||||
|
.updateIn([op.get('account'), 'debit'], 0, function (d) {
|
||||||
|
return d + op.get('debit', zero)(data);
|
||||||
|
})
|
||||||
|
.updateIn([op.get('account'), 'credit'], 0, function (c) {
|
||||||
|
return c + op.get('credit', zero)(data);
|
||||||
|
});
|
||||||
|
}, Immutable.Map());
|
||||||
|
categories.forEach(function (cat) {
|
||||||
|
var current = { level: 0, label: cat.label, code: cat.code, credit: 0, debit: 0 };
|
||||||
|
var values = accs(cat).map(function (acc) {
|
||||||
|
// If no operation has been performed on an account, 0 debit or credit
|
||||||
|
var it = chart.get(acc.code, Immutable.Map({credit: 0, debit: 0}));
|
||||||
|
var debit = it.get('debit') || 0;
|
||||||
|
var credit = it.get('credit') || 0;
|
||||||
|
current.debit += debit;
|
||||||
|
current.credit += credit;
|
||||||
|
return {
|
||||||
|
level: 1,
|
||||||
|
code: acc.code,
|
||||||
|
label: acc.label,
|
||||||
|
debit: debit,
|
||||||
|
credit: credit
|
||||||
|
}
|
||||||
|
});
|
||||||
|
values.unshift(current);
|
||||||
|
out.push.apply(out, values);
|
||||||
|
});
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
data.addWatch('chart', function (k, m, prev, next) {
|
||||||
|
React.render(
|
||||||
|
React.createElement(Chart, {p: next}),
|
||||||
|
document.querySelector('.chart-of-accounts'));
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
var sale = 100,
|
||||||
|
tax = sale * 0.09,
|
||||||
|
total = sale + tax,
|
||||||
|
refund = sale * 0.1,
|
||||||
|
purchase = 80;
|
||||||
|
data.reset(Immutable.fromJS({
|
||||||
|
customer_invoice: {
|
||||||
|
enabled: false,
|
||||||
|
label: "Customer Invoice ($100 + 9% tax)",
|
||||||
|
depends: [],
|
||||||
|
operations: [
|
||||||
|
{account: ASSETS.ACCOUNTS_RECEIVABLE.code, debit: function () { return total; }},
|
||||||
|
{account: REVENUE.SALES.code, credit: function () { return sale; }},
|
||||||
|
{account: LIABILITIES.TAXES_PAYABLE.code, credit: function () { return tax; }}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// TODO: dependencies?
|
||||||
|
customer_refund: {
|
||||||
|
enabled: false,
|
||||||
|
label: "Customer Refund 10%",
|
||||||
|
depends: ['customer_invoice'],
|
||||||
|
operations: [
|
||||||
|
{account: REVENUE.SALES.code, debit: function () { return refund; }},
|
||||||
|
{account: ASSETS.ACCOUNTS_RECEIVABLE.code, credit: function () { return refund; }}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
customer_payment: {
|
||||||
|
enabled: false,
|
||||||
|
label: "Customer Payment",
|
||||||
|
depends: ['customer_invoice'],
|
||||||
|
operations: [
|
||||||
|
// TODO: depends of refund
|
||||||
|
{account: ASSETS.CASH.code, debit: function (ops) {
|
||||||
|
return ops.getIn(['customer_refund', 'enabled'])
|
||||||
|
? total - refund
|
||||||
|
: total;
|
||||||
|
}},
|
||||||
|
{account: ASSETS.ACCOUNTS_RECEIVABLE.code, credit: function (ops) {
|
||||||
|
return ops.getIn(['customer_refund', 'enabled'])
|
||||||
|
? total - refund
|
||||||
|
: total;
|
||||||
|
}}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
supplier_invoice: {
|
||||||
|
enabled: false,
|
||||||
|
label: "Supplier Invoice",
|
||||||
|
depends: [],
|
||||||
|
operations: [
|
||||||
|
{account: EXPENSES.PURCHASES.code, debit: function () { return purchase; }},
|
||||||
|
{account: LIABILITIES.ACCOUNTS_PAYABLE.code, credit: function () { return purchase; }},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
supplier_invoice_paid: {
|
||||||
|
enabled: false,
|
||||||
|
label: "Supplier Invoice Paid",
|
||||||
|
depends: ['supplier_invoice'],
|
||||||
|
operations: [
|
||||||
|
{account: LIABILITIES.ACCOUNTS_PAYABLE.code, debit: function () { return purchase; }},
|
||||||
|
{account: ASSETS.CASH.code, credit: function () { return purchase; }}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
inventory_reception: {
|
||||||
|
enabled: false,
|
||||||
|
label: "Inventory Reception",
|
||||||
|
depends: ['supplier_invoice'],
|
||||||
|
// TODO: ???
|
||||||
|
operations: []
|
||||||
|
},
|
||||||
|
customer_delivery: {
|
||||||
|
enabled: false,
|
||||||
|
label: "Customer Delivery",
|
||||||
|
depends: ['customer_invoice', 'inventory_reception'],
|
||||||
|
// TODO: ???
|
||||||
|
operations: [],
|
||||||
|
},
|
||||||
|
taxes: {
|
||||||
|
enabled: false,
|
||||||
|
label: "Pay Taxes Due",
|
||||||
|
depends: [],
|
||||||
|
// TODO: no taxes due if no customer invoice?
|
||||||
|
operations: [
|
||||||
|
{account: LIABILITIES.TAXES_PAYABLE.code, debit: function () { return tax; }},
|
||||||
|
{account: ASSETS.CASH.code, credit: function () { return tax; }}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
var DOM = React.DOM;
|
||||||
|
|
||||||
|
var ASSETS = {
|
||||||
|
code: 1,
|
||||||
|
label: "Assets",
|
||||||
|
CASH: { code: 10100, label: "Cash" },
|
||||||
|
ACCOUNTS_RECEIVABLE: { code: 12100, label: "Accounts Receivable" }
|
||||||
|
};
|
||||||
|
var LIABILITIES = {
|
||||||
|
code: 2,
|
||||||
|
label: "Liabilities",
|
||||||
|
ACCOUNTS_PAYABLE: { code: 21000, label: "Accounts Payable" },
|
||||||
|
TAXES_PAYABLE: { code: 23100, label: "Taxes Payable" }
|
||||||
|
};
|
||||||
|
var REVENUE = {
|
||||||
|
code: 4,
|
||||||
|
label: "Revenue",
|
||||||
|
SALES: { code: 40100, label: "Sales" }
|
||||||
|
};
|
||||||
|
var EXPENSES = {
|
||||||
|
code: 5,
|
||||||
|
label: "Expenses",
|
||||||
|
PURCHASES: { code: 50100, label: "Purchases" }
|
||||||
|
};
|
||||||
|
var categories = [ASSETS, LIABILITIES, REVENUE, EXPENSES];
|
||||||
|
var accounts = (function () {
|
||||||
|
var acs = {};
|
||||||
|
categories.forEach(function (cat) {
|
||||||
|
acs[cat.code] = cat;
|
||||||
|
accs(cat).forEach(function (acc) {
|
||||||
|
acs[acc.code] = acc;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return acs;
|
||||||
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
function accs(category) {
|
||||||
|
var out = [];
|
||||||
|
for(var k in category) {
|
||||||
|
if (k.toUpperCase() === k) {
|
||||||
|
out.push(category[k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
})();
|
@ -1,46 +1,22 @@
|
|||||||
(function () {
|
(function () {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var Table = React.createClass({
|
|
||||||
getInitialState: function () {
|
|
||||||
return {text: [], counter: 0};
|
|
||||||
},
|
|
||||||
render: function () {
|
|
||||||
return React.createElement(
|
|
||||||
'div', null,
|
|
||||||
React.createElement('button', {
|
|
||||||
style: {color: 'red'},
|
|
||||||
onClick: this.handleClick,
|
|
||||||
}, "Click Me!"),
|
|
||||||
React.createElement('ul', null, this.state.text.map(function (item) {
|
|
||||||
return React.createElement(
|
|
||||||
'li', null, "This is number ", item);
|
|
||||||
}))
|
|
||||||
);
|
|
||||||
},
|
|
||||||
handleClick: function () {
|
|
||||||
this.setState({
|
|
||||||
text: this.state.text.concat([this.state.counter]),
|
|
||||||
counter: this.state.counter + 1,
|
|
||||||
})
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
function item(it) {
|
function item(it) {
|
||||||
if (it.credit && it.debit) {
|
if (it.credit && it.debit) {
|
||||||
throw new Error("A journal item can't have both credit and debit, got " + JSON.stringify(it));
|
throw new Error("A journal item can't have both credit and debit, got " + JSON.stringify(it));
|
||||||
}
|
}
|
||||||
return React.createElement(
|
return React.DOM.tr(
|
||||||
'tr', null,
|
{key: it.label.toLowerCase().split(' ').concat(
|
||||||
React.createElement('td', null, (it.credit ? '\u2001' : '') + it.label),
|
['debit', it.debit, 'credit', it.credit]
|
||||||
React.createElement('td', null, it.debit),
|
).join('-')
|
||||||
React.createElement('td', null, it.credit)
|
},
|
||||||
|
React.DOM.td(null, (it.credit ? '\u2001' : '') + it.label),
|
||||||
|
React.DOM.td(null, it.debit),
|
||||||
|
React.DOM.td(null, it.credit)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
function spacer() {
|
function spacer(key) {
|
||||||
return React.createElement(
|
return React.DOM.tr({key: 'spacer-' + key}, React.DOM.td({colSpan: 3}, "\u00A0"));
|
||||||
'tr', null, React.createElement(
|
|
||||||
'td', {colSpan: 3}, "\u00A0"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var ClotureTable = React.createClass({
|
var ClotureTable = React.createClass({
|
||||||
@ -68,18 +44,18 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
render: function () {
|
render: function () {
|
||||||
return React.createElement(
|
return React.DOM.div(
|
||||||
'div', null,
|
null,
|
||||||
this.controls(),
|
this.controls(),
|
||||||
React.createElement(
|
React.DOM.table(
|
||||||
'table', {className: 'table'},
|
{className: 'table'},
|
||||||
this.makeHeader(),
|
this.makeHeader(),
|
||||||
React.createElement(
|
React.DOM.tbody(
|
||||||
'tbody', null,
|
null,
|
||||||
this.revenues(this.state.revenues),
|
this.revenues(this.state.revenues),
|
||||||
spacer(),
|
spacer('table-1'),
|
||||||
this.expenses(this.state.expenses),
|
this.expenses(this.state.expenses),
|
||||||
spacer(),
|
spacer('table-2'),
|
||||||
this.closure({
|
this.closure({
|
||||||
dividends: this.state.dividends,
|
dividends: this.state.dividends,
|
||||||
income: this.income(),
|
income: this.income(),
|
||||||
@ -89,13 +65,13 @@
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
makeHeader: function () {
|
makeHeader: function () {
|
||||||
return React.createElement(
|
return React.DOM.thead(
|
||||||
'thead', null,
|
null,
|
||||||
React.createElement(
|
React.DOM.tr(
|
||||||
'tr', null,
|
null,
|
||||||
React.createElement('th'),
|
React.DOM.th(),
|
||||||
React.createElement('th', null, "Debit"),
|
React.DOM.th(null, "Debit"),
|
||||||
React.createElement('th', null, "Credit")
|
React.DOM.th(null, "Credit")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@ -103,12 +79,12 @@
|
|||||||
controls: function () {
|
controls: function () {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
return [
|
return [
|
||||||
React.createElement(
|
React.DOM.fieldset(
|
||||||
'fieldset', null,
|
{key: 'income'},
|
||||||
React.createElement('legend', null, "Income"),
|
React.DOM.legend(null, "Income"),
|
||||||
React.createElement(
|
React.DOM.label(
|
||||||
'label', null, "Cash ",
|
null, "Cash ",
|
||||||
React.createElement('input', {
|
React.DOM.input({
|
||||||
type: 'number',
|
type: 'number',
|
||||||
step: 1,
|
step: 1,
|
||||||
value: this.state.revenues.cash,
|
value: this.state.revenues.cash,
|
||||||
@ -123,9 +99,10 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
React.createElement(
|
' ',
|
||||||
'label', null, " Accounts Receivable ",
|
React.DOM.label(
|
||||||
React.createElement('input', {
|
null, " Accounts Receivable ",
|
||||||
|
React.DOM.input({
|
||||||
type: 'number',
|
type: 'number',
|
||||||
step: 1,
|
step: 1,
|
||||||
value: this.state.revenues.receivable,
|
value: this.state.revenues.receivable,
|
||||||
@ -141,12 +118,12 @@
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
React.createElement(
|
React.DOM.fieldset(
|
||||||
'fieldset', null,
|
{key: 'expenses'},
|
||||||
React.createElement('legend', null, "Expenses"),
|
React.DOM.legend(null, "Expenses"),
|
||||||
React.createElement(
|
React.DOM.label(
|
||||||
'label', null, "Cash ",
|
null, "Cash ",
|
||||||
React.createElement('input', {
|
React.DOM.input({
|
||||||
type: 'number',
|
type: 'number',
|
||||||
step: 1,
|
step: 1,
|
||||||
value: this.state.expenses.cash,
|
value: this.state.expenses.cash,
|
||||||
@ -161,9 +138,10 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
React.createElement(
|
' ',
|
||||||
'label', null, " Accounts Payable ",
|
React.DOM.label(
|
||||||
React.createElement('input', {
|
null, " Accounts Payable ",
|
||||||
|
React.DOM.input({
|
||||||
type: 'number',
|
type: 'number',
|
||||||
step: 1,
|
step: 1,
|
||||||
value: this.state.expenses.payable,
|
value: this.state.expenses.payable,
|
||||||
@ -179,13 +157,13 @@
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
React.createElement(
|
React.DOM.fieldset(
|
||||||
'fieldset', null,
|
{key: 'dividends'},
|
||||||
React.createElement('legend', null, "Dividends"),
|
React.DOM.legend(null, "Dividends"),
|
||||||
React.createElement(
|
React.DOM.label(
|
||||||
'label', null,
|
null,
|
||||||
"Ratio (from retained earnings) ",
|
"Ratio (from retained earnings) ",
|
||||||
React.createElement('input', {
|
React.DOM.input({
|
||||||
type: 'range',
|
type: 'range',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 1,
|
max: 1,
|
||||||
@ -220,7 +198,7 @@
|
|||||||
}
|
}
|
||||||
if (dividends) {
|
if (dividends) {
|
||||||
result = result.concat([
|
result = result.concat([
|
||||||
spacer(),
|
spacer('closure'),
|
||||||
item({label: "Retained Earnings", debit: dividends}),
|
item({label: "Retained Earnings", debit: dividends}),
|
||||||
item({label: "Dividends Payable", credit: dividends})
|
item({label: "Dividends Payable", credit: dividends})
|
||||||
]);
|
]);
|
||||||
@ -233,13 +211,10 @@
|
|||||||
item({label: "Cash", debit: props.cash}),
|
item({label: "Cash", debit: props.cash}),
|
||||||
item({label: "Accounts Receivable", debit: props.receivable}),
|
item({label: "Accounts Receivable", debit: props.receivable}),
|
||||||
item({label: "Revenue", credit: total}),
|
item({label: "Revenue", credit: total}),
|
||||||
React.createElement(
|
React.DOM.tr({key: 'revenue-notes'}, React.DOM.td(
|
||||||
'tr', null, React.createElement(
|
{colSpan: 3},
|
||||||
'td', {colSpan: 3},
|
"\u2001\u2001Consolidation of revenues")),
|
||||||
"\u2001\u2001Consolidation of revenues"
|
spacer('revenues'),
|
||||||
)
|
|
||||||
),
|
|
||||||
spacer(),
|
|
||||||
item({label: "Revenue", debit: total}),
|
item({label: "Revenue", debit: total}),
|
||||||
item({label: "Income Summary", credit: total})
|
item({label: "Income Summary", credit: total})
|
||||||
];
|
];
|
||||||
@ -250,13 +225,13 @@
|
|||||||
item({label: "Expenses", debit: total}),
|
item({label: "Expenses", debit: total}),
|
||||||
item({label: "Cash", credit: props.cash}),
|
item({label: "Cash", credit: props.cash}),
|
||||||
item({label: "Accounts Payable", credit: props.payable}),
|
item({label: "Accounts Payable", credit: props.payable}),
|
||||||
React.createElement(
|
React.DOM.tr(
|
||||||
'tr', null, React.createElement(
|
{key: 'expenses-note'}, React.DOM.td(
|
||||||
'td', {colSpan: 3},
|
{colSpan: 3},
|
||||||
"\u2001\u2001Consolidation of expenses"
|
"\u2001\u2001Consolidation of expenses"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
spacer(),
|
spacer('expenses'),
|
||||||
item({label: "Income Summary", debit: total}),
|
item({label: "Income Summary", debit: total}),
|
||||||
item({label: "Expenses", credit: total})
|
item({label: "Expenses", credit: total})
|
||||||
];
|
];
|
4856
_static/immutable.js
Normal file
4856
_static/immutable.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -68,8 +68,13 @@ def visit_table(self, node):
|
|||||||
self._table_row_index = 0
|
self._table_row_index = 0
|
||||||
self.context.append(self.compact_p)
|
self.context.append(self.compact_p)
|
||||||
self.compact_p = True
|
self.compact_p = True
|
||||||
classes = ' '.join({'table', self.settings.table_style}).strip()
|
|
||||||
self.body.append(self.starttag(node, 'table', CLASS=classes))
|
classes = {self.settings.table_style}
|
||||||
|
node_classes = node.get('classes', [])
|
||||||
|
if 'no-table' in node_classes: node_classes.remove('no-table')
|
||||||
|
else: classes.add('table')
|
||||||
|
|
||||||
|
self.body.append(self.starttag(node, 'table', CLASS=' '.join(classes).strip()))
|
||||||
|
|
||||||
def starttag_data(self, node, tagname, suffix='\n', empty=False, **attributes):
|
def starttag_data(self, node, tagname, suffix='\n', empty=False, **attributes):
|
||||||
attributes.update(
|
attributes.update(
|
||||||
|
@ -1 +1 @@
|
|||||||
@import "style.css";
|
@import url("style.css");
|
||||||
|
@ -6811,58 +6811,58 @@ td.field-body > ul {
|
|||||||
margin-bottom: 2em;
|
margin-bottom: 2em;
|
||||||
}
|
}
|
||||||
@media (min-width: 992px) {
|
@media (min-width: 992px) {
|
||||||
.stripe .section > *,
|
.stripe .section:not(.force-right) > *,
|
||||||
.stripe .section > .force-left {
|
.stripe .section:not(.force-right) > .force-left {
|
||||||
width: 49%;
|
width: 49%;
|
||||||
float: left;
|
float: left;
|
||||||
clear: left;
|
clear: left;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right {
|
.stripe .section:not(.force-right) > .force-right {
|
||||||
padding-left: 1em;
|
padding-left: 1em;
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right,
|
.stripe .section:not(.force-right) > .force-right,
|
||||||
.stripe .section > [class*=highlight] {
|
.stripe .section:not(.force-right) > [class*=highlight] {
|
||||||
float: none;
|
float: none;
|
||||||
clear: none;
|
clear: none;
|
||||||
margin-left: 50%;
|
margin-left: 50%;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
color: #eeeeee;
|
color: #eeeeee;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right legend,
|
.stripe .section:not(.force-right) > .force-right legend,
|
||||||
.stripe .section > [class*=highlight] legend {
|
.stripe .section:not(.force-right) > [class*=highlight] legend {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right input,
|
.stripe .section:not(.force-right) > .force-right input,
|
||||||
.stripe .section > [class*=highlight] input {
|
.stripe .section:not(.force-right) > [class*=highlight] input {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
background-color: #555555;
|
background-color: #555555;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right a,
|
.stripe .section:not(.force-right) > .force-right a,
|
||||||
.stripe .section > [class*=highlight] a {
|
.stripe .section:not(.force-right) > [class*=highlight] a {
|
||||||
color: #d9a8cc;
|
color: #d9a8cc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right code,
|
.stripe .section:not(.force-right) > .force-right code,
|
||||||
.stripe .section > [class*=highlight] code,
|
.stripe .section:not(.force-right) > [class*=highlight] code,
|
||||||
.stripe .section > .force-right .literal,
|
.stripe .section:not(.force-right) > .force-right .literal,
|
||||||
.stripe .section > [class*=highlight] .literal {
|
.stripe .section:not(.force-right) > [class*=highlight] .literal {
|
||||||
color: #f9f2f4;
|
color: #f9f2f4;
|
||||||
background-color: #555555;
|
background-color: #555555;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right:not(.highlight-json) .highlight,
|
.stripe .section:not(.force-right) > .force-right:not(.highlight-json) .highlight,
|
||||||
.stripe .section > [class*=highlight]:not(.highlight-json) .highlight {
|
.stripe .section:not(.force-right) > [class*=highlight]:not(.highlight-json) .highlight {
|
||||||
border-bottom-color: #777777;
|
border-bottom-color: #777777;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right.admonition,
|
.stripe .section:not(.force-right) > .force-right.admonition,
|
||||||
.stripe .section > [class*=highlight].admonition {
|
.stripe .section:not(.force-right) > [class*=highlight].admonition {
|
||||||
margin-left: 51%;
|
margin-left: 51%;
|
||||||
width: 49%;
|
width: 49%;
|
||||||
border-top-color: #777777;
|
border-top-color: #777777;
|
||||||
border-bottom-color: #777777;
|
border-bottom-color: #777777;
|
||||||
border-right-color: #777777;
|
border-right-color: #777777;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight,
|
.stripe .section:not(.force-right) > .force-right .highlight,
|
||||||
.stripe .section > [class*=highlight] .highlight {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight {
|
||||||
border-color: #555555;
|
border-color: #555555;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-width: 1px 0;
|
border-width: 1px 0;
|
||||||
@ -6939,302 +6939,302 @@ td.field-body > ul {
|
|||||||
/* Name.Variable.Instance */
|
/* Name.Variable.Instance */
|
||||||
/* Literal.Number.Integer.Long */
|
/* Literal.Number.Integer.Long */
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .lineno,
|
.stripe .section:not(.force-right) > .force-right .highlight .lineno,
|
||||||
.stripe .section > [class*=highlight] .highlight .lineno {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .lineno {
|
||||||
color: #586e75;
|
color: #586e75;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .c,
|
.stripe .section:not(.force-right) > .force-right .highlight .c,
|
||||||
.stripe .section > [class*=highlight] .highlight .c {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .c {
|
||||||
color: #586e75;
|
color: #586e75;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .err,
|
.stripe .section:not(.force-right) > .force-right .highlight .err,
|
||||||
.stripe .section > [class*=highlight] .highlight .err {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .err {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .g,
|
.stripe .section:not(.force-right) > .force-right .highlight .g,
|
||||||
.stripe .section > [class*=highlight] .highlight .g {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .g {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .k,
|
.stripe .section:not(.force-right) > .force-right .highlight .k,
|
||||||
.stripe .section > [class*=highlight] .highlight .k {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .k {
|
||||||
color: #859900;
|
color: #859900;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .l,
|
.stripe .section:not(.force-right) > .force-right .highlight .l,
|
||||||
.stripe .section > [class*=highlight] .highlight .l {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .l {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .n,
|
.stripe .section:not(.force-right) > .force-right .highlight .n,
|
||||||
.stripe .section > [class*=highlight] .highlight .n {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .n {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .o,
|
.stripe .section:not(.force-right) > .force-right .highlight .o,
|
||||||
.stripe .section > [class*=highlight] .highlight .o {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .o {
|
||||||
color: #859900;
|
color: #859900;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .x,
|
.stripe .section:not(.force-right) > .force-right .highlight .x,
|
||||||
.stripe .section > [class*=highlight] .highlight .x {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .x {
|
||||||
color: #cb4b16;
|
color: #cb4b16;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .p,
|
.stripe .section:not(.force-right) > .force-right .highlight .p,
|
||||||
.stripe .section > [class*=highlight] .highlight .p {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .p {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .cm,
|
.stripe .section:not(.force-right) > .force-right .highlight .cm,
|
||||||
.stripe .section > [class*=highlight] .highlight .cm {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .cm {
|
||||||
color: #586e75;
|
color: #586e75;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .cp,
|
.stripe .section:not(.force-right) > .force-right .highlight .cp,
|
||||||
.stripe .section > [class*=highlight] .highlight .cp {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .cp {
|
||||||
color: #859900;
|
color: #859900;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .c1,
|
.stripe .section:not(.force-right) > .force-right .highlight .c1,
|
||||||
.stripe .section > [class*=highlight] .highlight .c1 {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .c1 {
|
||||||
color: #586e75;
|
color: #586e75;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .cs,
|
.stripe .section:not(.force-right) > .force-right .highlight .cs,
|
||||||
.stripe .section > [class*=highlight] .highlight .cs {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .cs {
|
||||||
color: #859900;
|
color: #859900;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .gd,
|
.stripe .section:not(.force-right) > .force-right .highlight .gd,
|
||||||
.stripe .section > [class*=highlight] .highlight .gd {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gd {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .ge,
|
.stripe .section:not(.force-right) > .force-right .highlight .ge,
|
||||||
.stripe .section > [class*=highlight] .highlight .ge {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ge {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .gr,
|
.stripe .section:not(.force-right) > .force-right .highlight .gr,
|
||||||
.stripe .section > [class*=highlight] .highlight .gr {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gr {
|
||||||
color: #dc322f;
|
color: #dc322f;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .gh,
|
.stripe .section:not(.force-right) > .force-right .highlight .gh,
|
||||||
.stripe .section > [class*=highlight] .highlight .gh {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gh {
|
||||||
color: #cb4b16;
|
color: #cb4b16;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .gi,
|
.stripe .section:not(.force-right) > .force-right .highlight .gi,
|
||||||
.stripe .section > [class*=highlight] .highlight .gi {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gi {
|
||||||
color: #859900;
|
color: #859900;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .go,
|
.stripe .section:not(.force-right) > .force-right .highlight .go,
|
||||||
.stripe .section > [class*=highlight] .highlight .go {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .go {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .gp,
|
.stripe .section:not(.force-right) > .force-right .highlight .gp,
|
||||||
.stripe .section > [class*=highlight] .highlight .gp {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gp {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .gs,
|
.stripe .section:not(.force-right) > .force-right .highlight .gs,
|
||||||
.stripe .section > [class*=highlight] .highlight .gs {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gs {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .gu,
|
.stripe .section:not(.force-right) > .force-right .highlight .gu,
|
||||||
.stripe .section > [class*=highlight] .highlight .gu {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gu {
|
||||||
color: #cb4b16;
|
color: #cb4b16;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .gt,
|
.stripe .section:not(.force-right) > .force-right .highlight .gt,
|
||||||
.stripe .section > [class*=highlight] .highlight .gt {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gt {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .kc,
|
.stripe .section:not(.force-right) > .force-right .highlight .kc,
|
||||||
.stripe .section > [class*=highlight] .highlight .kc {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kc {
|
||||||
color: #cb4b16;
|
color: #cb4b16;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .kd,
|
.stripe .section:not(.force-right) > .force-right .highlight .kd,
|
||||||
.stripe .section > [class*=highlight] .highlight .kd {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kd {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .kn,
|
.stripe .section:not(.force-right) > .force-right .highlight .kn,
|
||||||
.stripe .section > [class*=highlight] .highlight .kn {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kn {
|
||||||
color: #859900;
|
color: #859900;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .kp,
|
.stripe .section:not(.force-right) > .force-right .highlight .kp,
|
||||||
.stripe .section > [class*=highlight] .highlight .kp {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kp {
|
||||||
color: #859900;
|
color: #859900;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .kr,
|
.stripe .section:not(.force-right) > .force-right .highlight .kr,
|
||||||
.stripe .section > [class*=highlight] .highlight .kr {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kr {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .kt,
|
.stripe .section:not(.force-right) > .force-right .highlight .kt,
|
||||||
.stripe .section > [class*=highlight] .highlight .kt {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kt {
|
||||||
color: #dc322f;
|
color: #dc322f;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .ld,
|
.stripe .section:not(.force-right) > .force-right .highlight .ld,
|
||||||
.stripe .section > [class*=highlight] .highlight .ld {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ld {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .m,
|
.stripe .section:not(.force-right) > .force-right .highlight .m,
|
||||||
.stripe .section > [class*=highlight] .highlight .m {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .m {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .s,
|
.stripe .section:not(.force-right) > .force-right .highlight .s,
|
||||||
.stripe .section > [class*=highlight] .highlight .s {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .s {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .na,
|
.stripe .section:not(.force-right) > .force-right .highlight .na,
|
||||||
.stripe .section > [class*=highlight] .highlight .na {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .na {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .nb,
|
.stripe .section:not(.force-right) > .force-right .highlight .nb,
|
||||||
.stripe .section > [class*=highlight] .highlight .nb {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nb {
|
||||||
color: #b58900;
|
color: #b58900;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .nc,
|
.stripe .section:not(.force-right) > .force-right .highlight .nc,
|
||||||
.stripe .section > [class*=highlight] .highlight .nc {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nc {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .no,
|
.stripe .section:not(.force-right) > .force-right .highlight .no,
|
||||||
.stripe .section > [class*=highlight] .highlight .no {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .no {
|
||||||
color: #cb4b16;
|
color: #cb4b16;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .nd,
|
.stripe .section:not(.force-right) > .force-right .highlight .nd,
|
||||||
.stripe .section > [class*=highlight] .highlight .nd {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nd {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .ni,
|
.stripe .section:not(.force-right) > .force-right .highlight .ni,
|
||||||
.stripe .section > [class*=highlight] .highlight .ni {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ni {
|
||||||
color: #cb4b16;
|
color: #cb4b16;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .ne,
|
.stripe .section:not(.force-right) > .force-right .highlight .ne,
|
||||||
.stripe .section > [class*=highlight] .highlight .ne {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ne {
|
||||||
color: #cb4b16;
|
color: #cb4b16;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .nf,
|
.stripe .section:not(.force-right) > .force-right .highlight .nf,
|
||||||
.stripe .section > [class*=highlight] .highlight .nf {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nf {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .nl,
|
.stripe .section:not(.force-right) > .force-right .highlight .nl,
|
||||||
.stripe .section > [class*=highlight] .highlight .nl {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nl {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .nn,
|
.stripe .section:not(.force-right) > .force-right .highlight .nn,
|
||||||
.stripe .section > [class*=highlight] .highlight .nn {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nn {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .nx,
|
.stripe .section:not(.force-right) > .force-right .highlight .nx,
|
||||||
.stripe .section > [class*=highlight] .highlight .nx {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nx {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .py,
|
.stripe .section:not(.force-right) > .force-right .highlight .py,
|
||||||
.stripe .section > [class*=highlight] .highlight .py {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .py {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .nt,
|
.stripe .section:not(.force-right) > .force-right .highlight .nt,
|
||||||
.stripe .section > [class*=highlight] .highlight .nt {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nt {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .nv,
|
.stripe .section:not(.force-right) > .force-right .highlight .nv,
|
||||||
.stripe .section > [class*=highlight] .highlight .nv {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nv {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .ow,
|
.stripe .section:not(.force-right) > .force-right .highlight .ow,
|
||||||
.stripe .section > [class*=highlight] .highlight .ow {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ow {
|
||||||
color: #859900;
|
color: #859900;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .w,
|
.stripe .section:not(.force-right) > .force-right .highlight .w,
|
||||||
.stripe .section > [class*=highlight] .highlight .w {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .w {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .mf,
|
.stripe .section:not(.force-right) > .force-right .highlight .mf,
|
||||||
.stripe .section > [class*=highlight] .highlight .mf {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .mf {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .mh,
|
.stripe .section:not(.force-right) > .force-right .highlight .mh,
|
||||||
.stripe .section > [class*=highlight] .highlight .mh {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .mh {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .mi,
|
.stripe .section:not(.force-right) > .force-right .highlight .mi,
|
||||||
.stripe .section > [class*=highlight] .highlight .mi {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .mi {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .mo,
|
.stripe .section:not(.force-right) > .force-right .highlight .mo,
|
||||||
.stripe .section > [class*=highlight] .highlight .mo {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .mo {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .sb,
|
.stripe .section:not(.force-right) > .force-right .highlight .sb,
|
||||||
.stripe .section > [class*=highlight] .highlight .sb {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sb {
|
||||||
color: #586e75;
|
color: #586e75;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .sc,
|
.stripe .section:not(.force-right) > .force-right .highlight .sc,
|
||||||
.stripe .section > [class*=highlight] .highlight .sc {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sc {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .sd,
|
.stripe .section:not(.force-right) > .force-right .highlight .sd,
|
||||||
.stripe .section > [class*=highlight] .highlight .sd {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sd {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .s2,
|
.stripe .section:not(.force-right) > .force-right .highlight .s2,
|
||||||
.stripe .section > [class*=highlight] .highlight .s2 {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .s2 {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .se,
|
.stripe .section:not(.force-right) > .force-right .highlight .se,
|
||||||
.stripe .section > [class*=highlight] .highlight .se {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .se {
|
||||||
color: #cb4b16;
|
color: #cb4b16;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .sh,
|
.stripe .section:not(.force-right) > .force-right .highlight .sh,
|
||||||
.stripe .section > [class*=highlight] .highlight .sh {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sh {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .si,
|
.stripe .section:not(.force-right) > .force-right .highlight .si,
|
||||||
.stripe .section > [class*=highlight] .highlight .si {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .si {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .sx,
|
.stripe .section:not(.force-right) > .force-right .highlight .sx,
|
||||||
.stripe .section > [class*=highlight] .highlight .sx {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sx {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .sr,
|
.stripe .section:not(.force-right) > .force-right .highlight .sr,
|
||||||
.stripe .section > [class*=highlight] .highlight .sr {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sr {
|
||||||
color: #dc322f;
|
color: #dc322f;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .s1,
|
.stripe .section:not(.force-right) > .force-right .highlight .s1,
|
||||||
.stripe .section > [class*=highlight] .highlight .s1 {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .s1 {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .ss,
|
.stripe .section:not(.force-right) > .force-right .highlight .ss,
|
||||||
.stripe .section > [class*=highlight] .highlight .ss {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ss {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .bp,
|
.stripe .section:not(.force-right) > .force-right .highlight .bp,
|
||||||
.stripe .section > [class*=highlight] .highlight .bp {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .bp {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .vc,
|
.stripe .section:not(.force-right) > .force-right .highlight .vc,
|
||||||
.stripe .section > [class*=highlight] .highlight .vc {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .vc {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .vg,
|
.stripe .section:not(.force-right) > .force-right .highlight .vg,
|
||||||
.stripe .section > [class*=highlight] .highlight .vg {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .vg {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .vi,
|
.stripe .section:not(.force-right) > .force-right .highlight .vi,
|
||||||
.stripe .section > [class*=highlight] .highlight .vi {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .vi {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
.stripe .section > .force-right .highlight .il,
|
.stripe .section:not(.force-right) > .force-right .highlight .il,
|
||||||
.stripe .section > [class*=highlight] .highlight .il {
|
.stripe .section:not(.force-right) > [class*=highlight] .highlight .il {
|
||||||
color: #2aa198;
|
color: #2aa198;
|
||||||
}
|
}
|
||||||
.stripe .body > .section > .section {
|
.stripe .body > .section > .section {
|
||||||
border-top: 1px solid #eeeeee;
|
border-top: 1px solid #eeeeee;
|
||||||
}
|
}
|
||||||
.stripe .section > h1,
|
.stripe .section:not(.force-right) > h1,
|
||||||
.stripe .section > h2,
|
.stripe .section:not(.force-right) > h2,
|
||||||
.stripe .section > h3,
|
.stripe .section:not(.force-right) > h3,
|
||||||
.stripe .section > h4,
|
.stripe .section:not(.force-right) > h4,
|
||||||
.stripe .section > h5,
|
.stripe .section:not(.force-right) > h5,
|
||||||
.stripe .section > h6 {
|
.stripe .section:not(.force-right) > h6 {
|
||||||
max-width: 50%;
|
max-width: 50%;
|
||||||
}
|
}
|
||||||
.stripe .section > h1,
|
.stripe .section:not(.force-right) > h1,
|
||||||
.stripe .section > h2,
|
.stripe .section:not(.force-right) > h2,
|
||||||
.stripe .section > h3,
|
.stripe .section:not(.force-right) > h3,
|
||||||
.stripe .section > h4,
|
.stripe .section:not(.force-right) > h4,
|
||||||
.stripe .section > h5,
|
.stripe .section:not(.force-right) > h5,
|
||||||
.stripe .section > h6,
|
.stripe .section:not(.force-right) > h6,
|
||||||
.stripe .section > .section {
|
.stripe .section > .section:not(.force-right) {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: auto;
|
width: auto;
|
||||||
float: none;
|
float: none;
|
||||||
|
@ -610,19 +610,19 @@ td.field-body {
|
|||||||
// === columning only on medium+ ===
|
// === columning only on medium+ ===
|
||||||
@media (min-width: @screen-md-min) {
|
@media (min-width: @screen-md-min) {
|
||||||
// column 1
|
// column 1
|
||||||
.section > *,
|
.section:not(.force-right) > *,
|
||||||
.section > .force-left {
|
.section:not(.force-right) > .force-left {
|
||||||
width: 49%;
|
width: 49%;
|
||||||
float: left;
|
float: left;
|
||||||
clear: left;
|
clear: left;
|
||||||
}
|
}
|
||||||
// column 2
|
// column 2
|
||||||
.section > .force-right {
|
.section:not(.force-right) > .force-right {
|
||||||
padding-left: 1em;
|
padding-left: 1em;
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
}
|
}
|
||||||
.section > .force-right,
|
.section:not(.force-right) > .force-right,
|
||||||
.section > [class*=highlight] {
|
.section:not(.force-right) > [class*=highlight] {
|
||||||
float: none;
|
float: none;
|
||||||
clear: none;
|
clear: none;
|
||||||
margin-left: 50%;
|
margin-left: 50%;
|
||||||
@ -735,13 +735,16 @@ td.field-body {
|
|||||||
.body > .section > .section {
|
.body > .section > .section {
|
||||||
border-top: 1px solid @color-right;
|
border-top: 1px solid @color-right;
|
||||||
}
|
}
|
||||||
.section > h1, .section > h2, .section > h3, .section > h4, .section > h5,
|
.section:not(.force-right) > h1, .section:not(.force-right) > h2,
|
||||||
.section > h6 {
|
.section:not(.force-right) > h3, .section:not(.force-right) > h4,
|
||||||
|
.section:not(.force-right) > h5, .section:not(.force-right) > h6 {
|
||||||
max-width: 50%;
|
max-width: 50%;
|
||||||
|
|
||||||
}
|
}
|
||||||
.section > h1, .section > h2, .section > h3, .section > h4, .section > h5,
|
.section:not(.force-right) > h1, .section:not(.force-right) > h2,
|
||||||
.section > h6, .section > .section {
|
.section:not(.force-right) > h3, .section:not(.force-right) > h4,
|
||||||
|
.section:not(.force-right) > h5, .section:not(.force-right) > h6,
|
||||||
|
.section > .section:not(.force-right) {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: auto;
|
width: auto;
|
||||||
float: none;
|
float: none;
|
||||||
|
5
conf.py
5
conf.py
@ -265,5 +265,8 @@ texinfo_documents = [
|
|||||||
#texinfo_no_detailmenu = False
|
#texinfo_no_detailmenu = False
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
|
app.add_javascript('atom.js')
|
||||||
|
app.add_javascript('immutable.js')
|
||||||
app.add_javascript('react.js')
|
app.add_javascript('react.js')
|
||||||
app.add_javascript('accounting.js')
|
app.add_javascript('chart-of-accounts.js')
|
||||||
|
app.add_javascript('fiscalyear.js')
|
||||||
|
159
index.rst
159
index.rst
@ -52,35 +52,37 @@ them being consumed for the company to "work".
|
|||||||
What is owned has been financed through debts to reimburse or acquired
|
What is owned has been financed through debts to reimburse or acquired
|
||||||
assets (profits, capical).
|
assets (profits, capical).
|
||||||
|
|
||||||
Journal Entries
|
Journals
|
||||||
===============
|
========
|
||||||
|
|
||||||
The chart of accounts is a list of P&L and balance sheet accounts. Journal
|
Accounting journals record business financial transactions as *journal
|
||||||
entries record debits and credits to accounts. For instance, for a banking
|
entries* before posting entries to account-specific ledgers.
|
||||||
account:
|
|
||||||
|
|
||||||
* debit 500€ (500€ income)
|
|
||||||
* Credit 200€ (paid out 200€)
|
|
||||||
* Balance: 300€ (300€ left on the account)
|
|
||||||
|
|
||||||
Operations on an account are sometimes represented by T-accounts.
|
|
||||||
|
|
||||||
To each financial document (invoice, bank statement, receipt, loan agreement)
|
To each financial document (invoice, bank statement, receipt, loan agreement)
|
||||||
corresponds a *Journal Entry*, which is itself composed of multiple *journal
|
corresponds a *journal entry*.
|
||||||
items*. Each journal item represents a single change to a single account, but
|
|
||||||
entries must be balanced, the sum of all credits in an entry must be equal to
|
|
||||||
the sum of all debits.
|
|
||||||
|
|
||||||
Example: a house doesn't get owned out of thin air, it must have been paid
|
Each journal entry is composed of multiple *journal items*.
|
||||||
(conversion of an asset to an other asset, no change in wealth) and that money
|
|
||||||
generally comes from a loan (liability to asset).
|
Each journal item represents a single change (debit or credit) to a single
|
||||||
|
account.
|
||||||
|
|
||||||
|
In *double-entry bookkeeping*, a journal entry must be balanced by having the
|
||||||
|
sum of all its debits be equal to the sum of all its credits. A journal entry
|
||||||
|
is thus composed of at least two *journal items*, a debit and a credit, and
|
||||||
|
involves at least two accounts.
|
||||||
|
|
||||||
|
Conventionally, all *debits* in journal entries are written first, with the
|
||||||
|
account name flush with their column, followed by all *credits* indented
|
||||||
|
slightly (to match the position/offset of the corresponding amount
|
||||||
|
column). Journal entries can include a note providing context for the
|
||||||
|
transaction.
|
||||||
|
|
||||||
A journal entry almost always corresponds to a separate justifying document:
|
A journal entry almost always corresponds to a separate justifying document:
|
||||||
invoice, pay slip, …. Financial audits may include matching "hard" evidence to
|
invoice, pay slip, …. Financial audits may include matching "hard" evidence to
|
||||||
journal entries.
|
journal entries.
|
||||||
|
|
||||||
Journal entries are generally triaged into **accounting journals** based on
|
Journal entries are generally triaged into accounting journals based on their
|
||||||
their classification or frequency. Common accounting journals are:
|
classification or frequency. Common accounting journals are:
|
||||||
|
|
||||||
* Sales journals with all client transactions
|
* Sales journals with all client transactions
|
||||||
* Purchase journals with supplier transactions
|
* Purchase journals with supplier transactions
|
||||||
@ -89,30 +91,56 @@ their classification or frequency. Common accounting journals are:
|
|||||||
|
|
||||||
.. rst-class:: force-right
|
.. rst-class:: force-right
|
||||||
|
|
||||||
.. todo::
|
Transactions
|
||||||
|
------------
|
||||||
|
|
||||||
Switch: European | Storno | Anglo-Saxon
|
.. h:div:: journals
|
||||||
|
|
||||||
Balance = Debit - Credit
|
needs javascript
|
||||||
|
|
||||||
By convention, on financial accounts.
|
Ledgers
|
||||||
|
=======
|
||||||
|
|
||||||
Active Documents To Show Impact:
|
Where journals are general transaction logs (usually contextual on transaction
|
||||||
Customer Invoice $100 + 9% tax
|
type or frequency), ledgers are change logs for a single account (or as a
|
||||||
Customer Refund
|
central repository for all account changes when it comes to *general
|
||||||
Customer Payment
|
ledgers*).
|
||||||
Customer Delivery
|
|
||||||
Pay Taxes Due
|
|
||||||
Supplier Invoice (an Asset)
|
|
||||||
Supplier Invoice (an Expense)
|
|
||||||
Inventory Reception
|
|
||||||
|
|
||||||
* provide a bunch of pre-defined operations (customisable accounts?)
|
.. todo:: is there a concept of ledger in Odoo?
|
||||||
* some operations enable further operations (e.g. a customer can only pay
|
|
||||||
if he got an invoice)
|
Ledgers are collections of T-accounts which summarize operations affecting a
|
||||||
* selected operations get reflected on the ledger
|
specific account. T-accounts are shaped thus because they are shaped as a T,
|
||||||
* update the chart of accounts with content of each account?
|
with debits under the left arm and all credits under the right arm of the T:
|
||||||
* provide multiple GAAP accounts things?
|
|
||||||
|
T-accounts can also be used as temporary scratch space when preparing
|
||||||
|
transactions by hand.
|
||||||
|
|
||||||
|
.. rst-class:: force-right
|
||||||
|
|
||||||
|
T-accounts for the transactions
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
.. h:div:: t-accounts
|
||||||
|
|
||||||
|
needs javascript
|
||||||
|
|
||||||
|
Chart of Accounts
|
||||||
|
=================
|
||||||
|
|
||||||
|
The **chart of accounts** lists all balance sheet (assets, liabilities) and
|
||||||
|
P&L (revenue, expense) accounts. These accounts are used to organize and
|
||||||
|
classify the finances of the company to better understand the company's
|
||||||
|
financial state, and the chart can be used to get a snapshot of a company's
|
||||||
|
financial period.
|
||||||
|
|
||||||
|
.. rst-class:: force-right
|
||||||
|
|
||||||
|
Balance = debit - credit
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
.. h:div:: chart-of-accounts
|
||||||
|
|
||||||
|
Requires javascript
|
||||||
|
|
||||||
Debit and credit
|
Debit and credit
|
||||||
================
|
================
|
||||||
@ -135,31 +163,39 @@ that adding money to a bank account is a *debit* (in accounting terms):
|
|||||||
credit on the receivable
|
credit on the receivable
|
||||||
* the invoice must thus be a debit on receivable and a credit on income.
|
* the invoice must thus be a debit on receivable and a credit on income.
|
||||||
|
|
||||||
.. h:div:: force-right
|
.. rst-class:: force-right
|
||||||
|
|
||||||
Follow the money:
|
Follow the money
|
||||||
|
----------------
|
||||||
|
|
||||||
1. Customer Payment: Increase bank account, it's a Debit. Thus, the
|
1. Customer Payment: Increase bank account, it's a Debit. Thus, the receivable
|
||||||
receivable is a credit.
|
is a credit.
|
||||||
|
|
||||||
================== ===== ======
|
+---------------------+-----+------+
|
||||||
\ Debit Credit
|
| |Debit|Credit|
|
||||||
================== ===== ======
|
+=====================+=====+======+
|
||||||
Bank Account 109€
|
|Bank Account | 109 | |
|
||||||
Account Receivable 109€
|
+---------------------+-----+------+
|
||||||
================== ===== ======
|
|| Account Receivable| | 109 |
|
||||||
|
+---------------------+-----+------+
|
||||||
|
|| Payment by customer XXX |
|
||||||
|
+---------------------+-----+------+
|
||||||
|
|
||||||
2. As the invoice should compensate the receivable
|
2. As the invoice should compensate the receivable
|
||||||
|
|
||||||
================== ===== ======
|
+---------------------+-----+------+
|
||||||
\ Debit Credit
|
| |Debit|Credit|
|
||||||
================== ===== ======
|
+=====================+=====+======+
|
||||||
Account Receivable 109€
|
|Account Receivable | 109 | |
|
||||||
Income 100€
|
+---------------------+-----+------+
|
||||||
Taxes 9€
|
|| Income | | 100 |
|
||||||
================== ===== ======
|
+---------------------+-----+------+
|
||||||
|
|| Taxes | | 9 |
|
||||||
|
+---------------------+-----+------+
|
||||||
|
|| Invoicing of customer XXX |
|
||||||
|
+---------------------+-----+------+
|
||||||
|
|
||||||
→ The income should be negative (a credit)
|
→ The income should be negative (a credit)
|
||||||
|
|
||||||
Closing Fiscal Years
|
Closing Fiscal Years
|
||||||
====================
|
====================
|
||||||
@ -179,7 +215,12 @@ E.g. if a company had 1000€ revenue and 600€ expenses it had a 400€ net
|
|||||||
income. At FY closure the following closure operation is applied: net income
|
income. At FY closure the following closure operation is applied: net income
|
||||||
(debit 400) to retained earnings (credit 400).
|
(debit 400) to retained earnings (credit 400).
|
||||||
|
|
||||||
.. h:div:: force-right fiscal-year-closing
|
.. rst-class:: force-right
|
||||||
|
|
||||||
|
Ledger for a fiscal year
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
.. h:div:: fiscal-year-closing
|
||||||
|
|
||||||
+--------------------------+-------------------------+-------------------------+
|
+--------------------------+-------------------------+-------------------------+
|
||||||
| |Debit |Credit |
|
| |Debit |Credit |
|
||||||
|
Loading…
Reference in New Issue
Block a user