doc/KNOWLEDGE_BASE
author viric@llimona
Thu, 18 May 2006 23:05:01 +0200
changeset 0 04114bce8fd0
permissions -rw-r--r--
Initial from sourceforge's cvs.


                 Base de coneixement per desenvolupar YAGL
                 -----------------------------------------

		     Lluís Batlle i Rossell
		     viric@users.sourceforge.net

		     Iniciat el 12/08/2003


     1. Introducció als conceptes que hi ha al voltant de la comptabilitat

Els programes de comptabilitat serveixen perquè la gent pugui treure conclusions
del funcionament de l'empresa a partir de dades que introdueix el comptable.

Aquestes dades tenen forma d'assentaments, i fan referència als moviments de
diners que fan referència a l'empresa: compres, vendes, inversions, crèdits, ...

En un moviment de diners hi ha un origen i un destí; aquests es localitzen en el
que anomenem "comptes". Els comptes són entitats que poden donar i rebre diners,
i estan catalogats en quatre tipus: Actiu, Passiu, Ingressos i Despeses. Això
significa que els origens i els destins dels diners han de ser per força
d'aquests quatre tipus.

Un assentament fa referència a un conjunt de moviments concret i quadrat. Això
vol dir que tots els diners que algunes comptes dónen han d'anar a parar
íntegrament a altres comptes. Per exemple, en un assentament el compte de
"clients" pot donar diners a "ventes" i a "IVA".
Els diners que "clients" dóna representen deutes de clients. Quan els clients
ens paguin, tindrem que 

Hi ha el que s'anomenen 'subcomptes' que són comptes fets pel comptable que
l'ajuden a tenir més diferenciats els moviments. Això es sol fer per obtenir
conclusions sobre elements més particulars, i per a tenir valors precalculats.
Per exemple, si tenim subcomptes d'IVA per cada percentatge aplicat, podem
calcular els valors a presentar en un informe d'IVA.


                        2. Dades poc utilitzades

Molts programes de comptabilitat permeten vincular subcomptes de clients a dades
de persones o empreses. Això només és pels que utilitzen el programa de
comptabilitat com a base de dades de clients; no te res a veure amb informes que
es puguin generar.

El mateix passa amb els proveidors.

Les dades de l'empresa a qui portem els comptes són més importants, però només
es necessiten pels informes


                         3. Informació a guardar


                                3.1 Comptes

Els comptes es divideixen, segons el Pla General Comptable, en Grups, Subgrups i
Comptes, a més d'alguns casos on apareixen Subcomptes. Cada un s'identifica per
1, 2, 3 i 4 dígits respectivament. A més, com que és una estructura d'arbre, en
un subcompte de 4 dígits, els tres primers coincidiran amb els del compte a què
pertany, i així també amb els subgrups i els grups.

Seguint aquesta regla, podem tenir subcomptes de tants de dígits com volem. Es
solen fer subcomptes personals de vuit dígits, donant marge per exemple fins a
100000 clients.
Alguns programes de comptabilitat assumeixen que la compta 1 és la mateixa que
la 10, i també la mateixa que la 100... i no tenen en compte els aniuaments que
hi ha (la 10 és el conjunt de totes les que comencen amb 10, i això és diferent
que la 100). Suposo que tenen tots els grups i subgrups "hardcoded"; de fet, no
són programes massa flexibles.

Cada compte pot ser de quatre tipus, com hem dit abans. És el que anomenarem
categoria. A més, cada compte té una descripció associada. També podem mantenir
un camp anomenat "link" (idea del SQL-Ledger) que ens permeti vincular cada
compta a diferents tipus de quadres de diàleg; quan tinguem assentaments
tipificats (compres amb IVA, vendes, ...), ens indicarà en quins tipus
d'assentaments té a veure cada compte.


                               3.2 Assentaments

Cada assentament està composat per diferents moviments, cadascun referint-se a
un compte únic en aquell assentament (CERT?). Un assentament té a veure amb un
tipus d'intercanvi de bens, i per tant un assentament té un "Concepte"
associat. Podem fins i tot tenir un camp de "Document" que ens indiqui a quin
document fa referència l'assentament (Factura, ...). Tot això podria estar de
tota manera inclòs en el concepte.

Si pensem implementar cerques per "concepte" sèries, podriem separar-ho i tenir
els camps "Tipus de document" (ComboBox) i "Número de document". Fins i tot
podem guardar la "Data del document".

La "data" de l'assentament és important per situar l'intercanvi de bens en
el temps. Segurament serà igual que la data del document.


                                3.3 Moviments

Un moviment es fa en una compta, i està vinculat a un assentament. No sol tenir
cap camp de concepte o descripció, ja que un moviment per si sol no té massa
valor. L'entitat que representa un canvi de bens és l'assentament.

De tota manera ens pot interessar tenir els moviments guardats en el mateix
ordre que van ser entrats; així faria falta un camp de "index".
Podem tenir una clau primària múltiple (ES DIU AIXÍ?) aquí, que sigui per
assentament i número de compta. Sempre i quan sigui cert que en un sol
assentament només hi pot haver un moviment com a màxim per cada compta. Això
permetria no haver de tenir una clau primària autonumèrica, i ajudaria molt als
motors de bases de dades.


                    4. Diagrama Entitat-Relació bàsic

+-----+ 1    N +---------+ N    1 +------------+
|chart|---<>---|movements|---<>---|transactions|
+-----+        +---------+        +------------+
  |                 |                   |
/-----------\  /-----------\     /----------\
|account_num|  |trans_ID   |     | ID       |
\-----------/  |account_num|     \----------/
               \-----------/

La traducció dels termes de comptabilitat està al fitxer ENGLISH_TERMS.


                        5. Informes a generar


                         5.1. Balanç de saldos

El que corre més pressa és el balanç de saldos. Això vol dir calcular el Deure,
l'Haver i la seva diferència per cada compta, i mostrar-ho en una taula. És dels
més senzills que haurem de generar.

                         5.2. Balanç de guanys

Ens indica la diferència entre ingressos i despeses. Simplement és la diferència
entre el grup d'ingressos i el de despeses.

                         5.3. Balanç de situació

Aquest és un document més complexe... la llei catalana/espanyola suggereix dos
tipus de balanços de situació: el normal i el reduit. Els dos inclouen totes les
comptes d'actiu i passiu de forma diferenciada, i les seves línies no estan
composades per les "comptes", sinó per conjunts de comptes amb un nom concret.

Els càlculs de les diferents parts del balanç s'obtenen mitjançant sumes dels
conjunts anomenats... per tant, o tenim un bon disseny de base de dades (una
taula nova que vinculi els conjunts de comptes a els comptes), o bé tenim una
configuració de l'informe de balanç en XML on ens ajudem del QSA.

Els ingressos o despeses són necessàries per quadrar el balanç de situació.


                            6. Primers passos al GUI

El primer que hem de poder fer és modificar el quadre de comptes. Llavors, poder
insertar/modificar/eliminar assentaments. D'alguna manera (al quadre de comptes
mateix) hauriem de poder llistar els "haver" i "deure" de cada compta.

Més endavant, haurem de generar un informe de balanç de saldos. Aquí entrarà la
part XML per primera vegada. Un cop tinguem això, podem continuar per afegir
nous informes / noves funcionalitats. Tot tinguent en compte la portabilitat a
altres llengües / països.


                                7. Eines

Tot es programarà en C++, utilitzant les QT a l'extrem; hem d'aprofitar-les al
màxim. Això significa cedir feina als de Trolltech; com menys feina tinguem
millor.

El motor de base de dades de prova serà MySQL, ja que és el que sol venir
compilat per defecte amb les QT. Si volem portabilitat de DBMS, només hauriem de
fer servir les funcions de Relational DBMS; si ens vinculem als objectes de
PostgreSQL només podrem utilitzar aquest o Oracle, i de moment sembla que no és
pas millor que anar amb taules relacionades.


                 8. Primers passos de disseny i programació

Primer de tot s'ha d'elaborar i aprovar el disseny de la base de dades. Llavors,
construir les taules amb SQL (creant fitxers amb codi SQL que ens faci aquesta
feina, de moment). 

Llavors, decidir el disseny del GUI. Més endavant un diagrama de classes, i
posteriorment començar a implementar un cop ens haguem repartit la feina.

De moment, s'aplicaran les normes d'escriptura de codi de Galadriel Parts
(GaladrielCodingStyle.txt).

S'ha de pensar com guardarem diferents empreses.... altres programes ho solen
fer en diferents bases de dades. Cada una té les seves taules. Així sembla que
és la millor idea.