doc/KNOWLEDGE_BASE
changeset 0 04114bce8fd0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/KNOWLEDGE_BASE	Thu May 18 23:05:01 2006 +0200
@@ -0,0 +1,194 @@
+
+                 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.