mdebs

The Minimalistic Double-Entry Bookkeeping System


Copyright (C) 1997, by Nathan L. Cutler 

V�echna pr�va vyhrazena. Tento dokument m��e b�t voln� ���en jako
celek. Proveden�m jak�koliv zm�ny v�ak tato mo�nost zanikne.

Datum posledn� aktualizace 31. b�ezna 1997

Obsah


�vod

Softwarov� bal�k s n�zvem "mdebs" si klade za c�l st�t se �e�en�m pro ty, kdo by r�di vedli sv� podvojn� ��etnictv� pod Linuxem.

mdebs je soubor program� v c��ku (ANSI C), shell-skript� a datab�ze implementovan� pomoc� Postgres95 (nebo, chcete-li, PostgreSQL).

Autorem mdebs je Nathan L. Cutler <[email protected]>.

Spolupracuj� na projektu

Projektu laskav� v�novali m�sto na serverech:

[N.B. pokud jsem zkomolil n�kter� jm�no �i adresu, p�edem pros�m o prominut� a oznamen� spr�vn�ho zn�n�!]


Filozofie

Rozhodl jsem se za��t ps�t mdebs proto, �e jsem nena�el ��dn� software voln� �i�iteln� pod licenc� GPL a b��c� pod Linuxem, kter� by um�l d�lat podvojn� ��etnictv�. P�itom jako majitel a z�rove� hlavn� ��etn� a v�bec jedin� zam�stnanec mal� firmy jsem n�co takov�ho velmi pot�eboval.

Jednodu�en� �e�eno, veden� ��etnictv� je souborem �kon�. Tyto �kony mohou b�t od sebe odd�leny a dob�e definov�ny. V n�kter�m jin�m ��etn�m softwaru se tyto �kony prov�d� prost�ednictv�m jedin�ho, v�t�inou obrovsk�ho programu s bezpo�tem r�zn� vno�en�ch oken a screen�. V mdebsu je ka�d� �kon �e�en jedn�m men��m programem.

Cel� syst�m je koncipov�n tak, aby byl "minimalistick�". To znamen�, �e nemus� nutn� um�t to, co zrovna ten kter� u�ivatel moment�ln� pot�ebuje. Toto je v�ak vedlej��. Podstatn� je, aby to um�lo ��tovat. Vystavov�n� faktur, sestavov�n� ��etn�ch z�v�rek, veden� dodavatelsk�ch agend, v�tisknut� v�platn�ch p�sek apod. nech� zaji��uj� jin� programy.


Sou�asn� stav a postup pr�ce

31. b�ezna 1997

V pr�b�hu dal��ho dne provedeno vy��tov�n� za cel� lo�sk� rok v�etn� ��etn� z�v�rky jedn� spole�nosti s ru�en�m omezen�m, tak�e mdebs u� m� za sebou prvn� pou�it� "naostro". Toho se doc�lilo za cenu dal��ch nepo��tan�ch bugfix� a jin�ch �prav zdroj�k�. P�ibyl program odpisplan na vyjet� pl�n� zrychlen�ho odpisov�n�.

30. b�ezna 1997

Nalezen bug v load_denik, jeho� odstran�n� vy�aduje podstatn� p�epracov�n� programu. Program nyn� vypisuje chybn� transakce do souboru s p��ponou .rej. Dopracov�na funkce valiDate() v souboru generalized.c. D�le zlid�t�n skript inputop. P�ejmenov�no: osninput na inputosn, osndump na dumposn. Dopln�n program rmtrans. Dopln�n skript printacct.

29. b�ezna 1997

dumpacct nyn� vypisuje i po�adov� ��slo operace a nesna�� se zjistit proti��et. Proti��et lze zjistit prost�ednictv�m nov�ho programu dumptrans. dumpacct roz���en o mo�nost ur�it obdob�, kter� m� b�t vyps�no. Z�sadn� p�epracov�n skript recreate (a p�ejmenov�n na dbinit). create p�ejmenov�no na dbinit_create pro p�ehlednost. P�id�n progr�mek dbinit_validate pro validaci dat.

28. b�ezna 1997

P�id�n skript inputop, co� je pokus o u�ivatelsky friendly prost�ed� pro tvorbu vstupn�ho souboru k load_denik. Skript pou��v� dialog. P�id�n progr�mky times100, kter� konvertuje ��stku v korun�ch na ��stku v hal���ch, a acct_query, kter� zji��uje p��tomnost ��tu v ��tov� osnov�. Zlep�en zp�sob identifikace datab�ze (vy�ato #define DATABASE ze zdroj�k� - dopln�na podpora getenv()). Nyn� jm�no datab�ze nastavuje s�m u�ivatel prost�ednictv�m enviro-prom�nn� $MDEBS.

20. b�ezna 1997

P�id�ny dal�� kontroly. Naps�n program dumpacct pro prohl�en� pohyb� na ��tu. �tvrt� alpha release.

19. b�ezna 1997

Dopln�ny kontroly v load_denik. Program loguje sv� kecy do souboru, aby nezat�oval jimi u�ivatele. T�et� alpha release.

18. b�ezna 1997

load_denik funguje, by� polovi�at�. Chyb� kontroly. Program ignoruje informace o ��etn�m obdob�. Druh� alpha release.

15. b�ezna 1997

Prvn� alpha release. Sice to neum� skoro nic, ale p�esto m� dokumentaci!

9. b�ezna 1997

Za��tek pr�ce na ��etn�m den�ku. P�id�ny nov� datov� struktury. Naps�n program init_fiscyear pro inicializaci ��etn�ho obdob�. Za��tek pr�ce na load_denik, programu pro vstup ��etn�ch operac� do datab�ze.

6. b�ezna 1997

P�id�no pol��ko pro analytick� pod��et. Funk�n� load_osnova. Prvn� verze inicializa�n�ho programu recreate dokon�ena.

5. b�ezna 1997

Funk�n� inputosn a dumposn.

28. �nora 1997

Vznik� velmi pochybn� program, kter� pomoc� knihovny Curses p�edst�r�, �e n�co d�l�.


P�edpoklady

Aby mdebs n�co d�lal na va�em syst�mu mus�te m�t funk�n� instalaci gcc a Postgres95 (also known as PostgreSQL). Aby fungoval inputop, u�ivatelsk� friendly prost�ed� pro vstup ��etn�ch operac�, mus� b�t instalov�n rovn� dialog.

V Makefile je t�eba se p�edem ujistit, �e gcc bude v�d�t, kde najde include soubor libpq-fe.h a sd�lenou knihovnu libpq.so. M�j Makefile by m�l fungovat na syst�mech postaven�ch za z�klad� distribuce Debian 1.2 s pou�it�m bal�k� postgres95 a postgres95-dev.

Informace o Postgres95 je k dispozici na URL http://www.postgresql.org/


FAQ


Datov� struktury

Struktura jednotliv�ch datab�zov�ch tabulek.

fiscyear je tabulka, kter� definuje ��etn� obdob�. startd je prvn� den a endd posledn� den tohoto obdob�.

fiscyear
startd DATE
endd DATE

osnova definuje ��etn� osnovu. acct je t��m�stn� ozna�en� ��tu, anal je dvoum�stn� ozna�en� analytick�ho pod��tu, a desig je popis ��tu.

osnova
acct CHAR(3)
anal CHAR(2)
desig VARCHAR(60)

descs zachycuje jednotliv� operace ��etn�ho den�ku, a obsahuje pol��ko ent_date a por_cislo, je� spolu slou�� jako odkaz na tabulku denik, a pol��ko descr, co� je popis operace.

descs
ent_date DATE
por_cislo INT
desig VARCHAR(80)

porad je zvl�tn� tabul�i�ka, jej� existence vynutil syst�m odkazu mezi tabulkami descs a denik. P�i vkl�d�n� ��etn�ch operac� je t�eba rychle zjistit posledn� pou�it� po�adov� ��slo pro ur�it� datum. Pr�v� tato informace je zachycena zde.

porad
ent_date DATE
max_cislo INT

V neposledn� �ad� je tabulka denik, kter� obsahuje pol��ka pro zachycen� jednotliv�ch ��dk� ��etn� operace. Pol��ka ent_date a por_cislo jsou odkazem na tabulku descs. Pol��ka [m]d_acct a [m]d_anal odkazuj� na tabulku osnova. Jedna z trojic pol��ek [m]d_acct, [m]d_anal a [m]d_amt v�dy obsahuje sam� nuly. ��stky v pol��k�ch [m]d_amt jsou vyj�d�eny v hal���ch. Kdy� jsou se�teny v�echny z�pisy, kter� maj� stejn� ent_date a por_cislo, strany M� d�ti a Dal si mus� b�t rovny.

denik
ent_date DATE
por_cislo INT
md_acct CHAR(3)
md_anal CHAR(2)
md_amt INT
d_acct CHAR(3)
d_anal CHAR(2)
d_amt INT

Jednotliv� d�l�� programy

Popisy jednotliv�ch existuj�c�ch program�, kter� jsou sou��stmi mdebsu.

dbinit

shell script pro inicializaci, pop�. reinicializaci datab�ze. Bere dva parametry ozna�uj�c� za��tek a konec ��etn�ho obdob� pro tuto datab�zi. Nezapome�te, �e pro v�echny sou��sti mdebsu je prom�nn� environmentu $MDEBSDB z�vazn�. Tak�e dob�e si ji zkontrolujte p�ed spu�t�n�m t�to d�vky.

Postup d�vky:

  1. Zlikvidovat datab�zi, pokud existuje
  2. Vytvo�it datab�zi, zat�m bez dat a tabulek
  3. Vytvo�it strukturu tabulek v datab�zi
  4. Inicializovat ��etn� obdob� (fiscal year) dle zadan�ch parametr�
  5. Nat�hnout ��etn� osnovu z ASCII souboru ./osnova.dat do datab�ze

dbinit_create

Program, kter� v existuj�c� "hol�" datab�zi vytvo�� syst�m tabulek. Vol�n z dbinit.

dbinit_validate

Program, kter� ov��� spr�vnost zadan�ho data prost�ednictv�m vol�n�m funkce valiDate ze souboru generalized.c. Tato funkce zat�m prov�d� pouze velmi r�mcovou kontrolu, nap�. 19979999 ohodnot� jako spr�vn� datum.

dumpacct

Tento program bere �ty�i argumenty: ��slo ��tu, ��slo analytick�ho pod��tu (nebo "--", pokud neni vedena analytika), po��te�n� datum a kone�n� datum obdob�, kter� m� b�t vyps�no.

Program pak vypisuje v�echny pohyby na tomto ��t� b�hem zadan�ho obdob�. Na konci vypisuje celkov� pohyby pro ob� strany ��tu. P�i datech shodn�ch s ��etn�m obdob�m by tento progr�m m�l b�t u�ite�n� p�i sestaven� ��etn� z�v�rky.

dumposn

Program, kter� vyp�e celou ��etn� osnovu na stdout.

dumptrans

Program bere jako argumenty datum a po�adov� ��slo n�jak� ��etn� operace a vyp�e ji na obrazovku. Zat�m jedin� zp�sob, jak zjistit proti��et.

fiscyear

Program, kter� do tabulky fiscyear zap�e po��te�n� a kone�n� data ��etn�ho obdob�. Pokud je uveden bez parametru, vyp�e stav t�to tabulky. Pokud je uveden s parametry a ��etn� obdob� je ji� inicializov�no, ��etn� obdob� se zm�n� na hodnoty uveden� v parametrech.

load_denik

Program, kter� nat�hne ��etn� operace z libovoln�ho ASCII souboru a cpe je jednu po druh� do tabulek tvo��c�ch ��etn� den�k.

Program bere zat�m jeden argument, kter� interpretuje jako jm�no ASCII souboru, kter� m� zpracovat. Form�t tohoto souboru je mo�n� do��st ze vzorov�ho souboru load_denik.dat, kter� je sou��st� distribuce.

Vzhledem k tomu, �e tento progr�mek byl nejn�ro�n�j�� ze v�ech, do�lo b�hem debugov�n� k tomu, �e program vypisuje mno�stv� verb�zn�ch hl�ek, kter� nemus� u�ivatele ve v�ech p��padech zaj�mat. Proto jsou tyto hl�ky sm�rov�ny do souboru, jeho� jm�no je shodn� se zadan�m jm�nem datov�ho souboru s p�id�n�m p��pony ".dat".

Program je naps�n tak, �e kdy� dojde ke chyb� p�i zpracov�n� n�jak� operace, a� u� tuto chybu zavinil autor datov�ho souboru nebo autor programu, m�sto vzniku chyby je v�cem�n� patrn� z logovac�ho souboru - posledn� hl�ka v n�m obsa�en� ozna�uje posledn� �sp�n� proveden� �kon p�ed chybou.

Proto�e Postgres95 um� transak�n� zpracov�n� dotaz�, nem�lo by doj�t k ��ste�n�mu ulo�en� chybn� zadan� ��etn� operace.

inputop

Tento shell-script pou��v� utilitku dialog k zaji�t�n� pohodln�mu zp�sobu po��zen� prim�rn�ch dat ��etn�ho den�ku od u�ivatele. Skript zat�m m� �adu nev�hod, nap�. nen� mo�n� zadat slo�enou operaci, skript nekontroluje shodnost ��stek atd. Mo�n�, �e nejv�t�� nev�hodou tohoto programu je to, �e je implementov�n jako skript.

inputosn

Program, jeho� prost�ednictv�m lze vymaz�vat, p�id�vat a dotazovat jednotliv� ��ty ��etn� osnovy podle jejich ��sla (v�etn� p��padn�ho analytick�ho pod��sla)

load_osnova

Program, kter� nat�hne z ASCII souboru ��etn� osnovu a cpe ji do tabulky osnova. Tento progr�mek se v�bec neohl�� po tom, zda je, �i nen� tato tabulka pr�zdn�, a v�bec nekontroluje p��padnou duplicitu ��t�. Proto je moudr� ho spustit pouze jako sou��st scriptu dbinit s t�m, �e ��etn� osnovu pro dan� ��etn� obdob� se vkl�d� do souboru OSNOVA_DAT (viz n�e) celou.

Prozat�m je jm�no ASCII souboru doslova uveden� v zdroj�ku load_osnova.h jako OSNOVA_DAT.

Form�t souboru OSNOVA_DAT je n�sleduj�c�:

Sou��st� distribuce je i vzorov� soubor osnova.dat.

odpisplan

Tento malinkat� progr�mek vypisuje pl�ny zrychlen�ch odpis�.

printacct

Tento skript je zde pouze jako ilustrace toho, jak lze kombinovat z�kladn� funkce mdebsu s jin�mi programy (v tomto p��pad� program a2ps) a t�m doplnit mdebs o chyb�j�c� funkce (v tomto p��pad� tisk).

rmtrans

Program bere jako argument ozna�en� ��etn� operace. Pokud takov� operace existuje, vyma�e ji.

times100

Program bere jeden argument, string ve tvaru ####.##, co� m� b�t ��stka v korun�ch, a vyp�e na stdout odpov�daj�c� ��stku v hal���ch. Vol�n z inputop.


Pozn�mky ke zdrojov�mu k�du

N�sleduj� n�kter� pozn�mky na adresu zdroj�k�.

generalized.c

Soubor generalized.c obsahuje ty funkce, ktere svou obecnou povahou mohou slou�it vice soucastem mdebsu.