openerp-expert-accounting team mailing list archive
-
openerp-expert-accounting team
-
Mailing list archive
-
Message #00189
[SPAM] Re: Some interesting accounting improvement
Hi Ferdinand,
I'm not sure if I understand what are you trying to accomplish: Are you
trying to have the period sums of the accounts precalculated so when
doing the fiscal year closing (or printing balance reports) only the
last period values have to be considered? Or do you mean than in Austria
you do a sort of period-closing?
I think I better explain how spanish companies are required to work (by
the spanish general accounting plan), and how most of the programs I know :)
How do we work on Spain
First of all, in Spain we have a complex minimal tree-like account chart
(take a look here: http://www.gabilos.com/webcontable/indexn.htm). Small
and medium business are allowed to use a simpler chart (mostly removes
the "8" and "9" accounts). This chart of accounts is required (you can't
delete or modify these accounts, but you may create new sub-accounts) by
Hacienda (the spanish Treasury Department) as it's used to provide
several official reports.
Period operations
Every period (quarterly for S&M business, monthly for big ones) we must
report to Hacienda (Treasury) this official reports (there are more, but
these are the important ones):
* Report of the taxes by tax code (i.e. sum amounts of the taxes and
base amount at 16% rate, at 7% rate, etc...).
/Also called "303 model". This report
(//https://www2.agenciatributaria.gob.es/es13/h/ie93030b.html)//
currently has to be filled in by hand on OpenERP >_< with the
values taken from the "taxes report" from the account module
(though it doesn't seem to work for me: too slow and the RML
doesn't seem to be properly parsed, instead of the amounts it
spurts things like this: "[[ [[ [[formatLang(o['debit'])
formatLang(o['credit'])]] formatLang(o['tax_amount']...").
/
* Report of all the invoices received and sent with detailed taxes.
/Also called "340 model". A (non-official) report with mostly the
same info can currently be printed with the
account_financial_report module. And there is a
l10n_ES_aeat_mod340 being developed on the spanish localization
(though it is not currently usable) to generate the official
report file (an ASCII file with fixed length records).
/
* Report of retained taxes to your employees (part of the employee
salary must be retained and delivered to the Treasury every period).
/Also called "110 model". It has to be filled by hand on OpenERP// :(/
* Report of profits from real state rentings
/Also called "115 model". Currently there is no way on OpenERP to
record or tell apart 'real state renting' invoices :( so it is
obvious that this report must be generated by hand.../ :(
That means that (after) every period (when we have already received all
the invoices of the period) we need to calculate the sums of the tax
accounts on that period ("477" and "472" accounts) and leave them balanced.
(Notice that we don't calculate the P&L or the result of the fiscal year
or anything else here: just taxes)
End of year (fiscal year closing) operations
After the end of year (actually in March) some yearly reports must be
sent to Hacienda (Treasury) or the Registro Mercantil (Commercial Registry):
* P&L: Detailed report of the profit and losses by concept (not by
account!, a concept is a sum of the values of several accounts) of
the closed fiscal year compared to the previous fiscal year.
/This report can be created using the account_balance_reporting
module (that serves as a report engine) and the
l10n_ES_account_balance_report module (the report templates for
Spain). It gets the info from the "6" and "7" accounts.
/
* Net P&L: Detailed report of the profit and losses on the 'net'
accounts by concept. Similar to the P&L report, but only for big
companies with "8" an "9" accounts.
/This report can be created using the account_balance_reporting
module (that serves as a report engine) and the
l10n_ES_account_balance_report module (the report templates for
Spain). It gets the info from the "8" and "9" accounts./
* Balance: Detailed report of the balance of all the accounting by
concept (for example there is a concept "suppliers" that is the
sum of the 400, 401, 403, 404 and 405 accounts minus the 406
account) compared to the previous fiscal year. This report must be
done after computing the P&L and, as the report name states, all
the concepts should be balanced.
/Again, this report can be created using the
account_balance_reporting module (that serves as a report engine)
and the l10n_ES_account_balance_report module (the report
templates for Spain). It gets the info from the "1", "2", "3", "4"
and "5 " accounts.
/
* The Memory: A complex report with several subreports that compare
concepts with the previous fiscal years, and that details
everything worth to notice about how the accounting was performed
(for example if you change an account code you will have to
explain here why).
/This one is currently not supported on OpenERP, but I doubt that
small business generate it by themselves (they usually have an
external accounting manager/adviser)./
* A report of some of the operations (sales, purchases, received
payments) with partners. For example we must report all the
parners that invoiced us (or that we invoiced them) more than
3005.06 euro, all the partners that payed us more than 6000 euro
in cash, etc.
/Also known as "347 model". This report may be generated using the
l10n_ES_aeat_mod347 module from the spanish localization.
/
* Summaries (complete fiscal year versions) of some of the "by
period" reports.
/For example the// "390 model" is a //summary// of the "303
models", the// "190 model" is summary of the "110 models" of the
fiscal year, and the "193 model" is a //summary// of the "115
models"//./
There are more 'models' and reports (I think the accounting in Spain is
too complex), but those are the important ones, and should be enough to
give the accounting experts a good idea of why do the things we do.
So, this is what we do when closing the fiscal year (after 'end of year
operations' like the inventory, the assets amortization/depreciation...):
- Generate the P&L report.
- Do the P&L "regularization": Sum all expenses and purchases accounts
(those that start with "6") with the profit and sales accounts (those
starting with "7") and store the 'profit of the fiscal year' into
another account ("129") that would be used later on one of the concepts
of the 'Balance' report.
- Generate the Net P&L report (if needed).
- Do the Net P&L "regularizations" (if needed): Sum some net expense
accounts (those that start with "8") and net income accounts (those
starting with "9") and store that sums on several accounts
("800"+"801"+"802"+"803" into "133"; "810" + "811" + "812" into "134";
"900" into "135").
- Generate the 'Balance' report.
- 'Close' all the accounts: Sum all the balances of all the accounts
(but the "6", "7", "8" and "9" accounts that already have been balanced)
in a single account move (without using a centralized counterpart). If
there are no errors in the accounting, the move should be balanced and
all the accounts should have a balance of 0 after this operation.
If you think about how the accounting was done by hand (with pen and
paper) this last move is indispensable if you want to assert that the
accounting has no errors.
And this is what we do when opening the next fiscal year:
- 'Open' all the accounts: Make a move, inverse to the closing one, to
restore the balance of the accounts.
*Notice this:* One account with debit "3000" and credit "1000" (balance
2000) will be closed with a debit "0" credit "2000" entry, and will be
reopened on the next year with debit "2000" credit "0". _Currently
OpenERP always shows the cumulative debit/credit from the beginning of
the times, so it will display debit "5000" and credit "3000" instead of
the expected D "2000" C "0" :(_
What Spanish programs do to calculate some reports faster
All the accounting programs I know (ContaPlus, ContaSol, ClassicConta,
Eurowin, Primavera) do the same: They have a table with the
precalculated debit, credit, balance and total amounts per month!
Every time you create or modify an account move, that table would be
updated (sometimes using SQL triggers to ensure consistency).
When you want to print a balance like report (a general ledger for
example) for a given month, or simply want to see the current
credit/debit of the account, the program only has to look at the values
of that summary table (a single and simple query!) instead of
recalculating the sums of each account from the beginning of time (that
is what OpenERP does).
Even Postgres (which is quicker than I thought when doing this
aggregates) has a hard time when an OpenERP user tries to browse a chart
of accounts with thousand of accounts. We have a client that has like
3000 clients itself; opening the 'clients' branch in the account tree
view brings Postgres and OpenERP to his knees, cause it just
recalculates the debit and credit of 3000 accounts (Postgres would have
to sum all the account move lines of those 3000 accounts) every time.
I think we could do something similar in OpenERP:
* Have precalculated debit/credit/balance totals per account and
period (i.e. an account_account_totals table with account_id,
period_id, period_debit, period_credit, period_balance,
period_draft_debit, period_draft_credit, period_draft_balance,
total_debit, total_credit, total_balance, total_draft_debit,
total_draft_credit and total_draft_balance fields).
* Use postgres triggers to update this totals (that would ensure
ACID) each time a account_move_line is created/updated/deleted.
* Use this precalculated totals on the account.account __compute
method (that is used on the debit, credit, balance function fields).
That would pretty much speed up all the accounting in OpenERP. Just
think about this:
Every time we want to get the current balance of some accounts OpenERP
does a query like this:
* "SELECT l.account_id as id, COALESCE(SUM(l.debit),0) -
COALESCE(SUM(l.credit), 0) as balance FROM account_move_line l
WHERE l.account_id IN (%s) GROUP BY l.account_id"
With the precalculated totals table it would be a much (several orders
of magnitude*) quicker query:
* "SELECT t.account_id as id, t.total_balance FROM
account_account_totals t WHERE t.account_id IN (%s) AND
t.period_id = %s"
/(*) We turn the O(n*m) complexity of the first query into O(n)./
Summary
* The way OpenERP calculates the credit/debit/balance is toooooooooo
slow, and can be improved a lot by using precalculated sums by period.
* The way OpenERP calculates the current credit/debit (taking into
account all the fiscal years instead of the current one) may not
be valid (or confortable) on all the countries. We should add a
(configuration) option to show only the current fiscal year
amounts (using precalculated sums it would be much easier to
implement).
* The "close fiscal year" wizard of OpenERP is not valid on
countries that need to regularize, close and reopen the accounting.
* OpenERP lacks lots of accounting/financial reports.
Well, I hope all this rants are useful for the OpenERP accounting experts :)
Best Regards.
Ferdinand Gassauer wrote:
Hello !
I just would like to ask if Spain and other countries really require
account move lines for closing a fiscal year
For some (also very big) companies here in Austria we do not create
closing moves for each account but on a permanent basis we calculate
period sums
* for the fiscal year of the move
** P&L account for all P&L moves - showing the result of the fy
** Balance account - for all P&L moves - showing the result of the fy
* for all following fiscal years (!) : balance carried forward - which
is hold in a special period '00'
the big performance advantage is that for all period orientated
reports and views no detail moves have to be accessed.
We calculate these sums when a move state is set to 'done'
I have created a proof of concept but working module for the balance
carried forward (with PSQL triggers) which I can provide or can be
seen here
Demo
<https://openerp.chricar.at/login?user=demoe&password=demoe&db=demo_ger_2>
look at
Finance / Charts / Accounts with postings
look at 2010 - period 201000 holds the balance carried forward
Please your opinion
--
Borja López Soilán
borjals@xxxxxxxxx
Pexego Sistemas Informáticos S.L.
Avenida de Magoi 66 - 27002 Lugo (España)
Tel./Fax 982801517
http://www.pexego.es
Follow ups
References