doc/KNOWLEDGE_BASE
changeset 0 04114bce8fd0
equal deleted inserted replaced
-1:000000000000 0:04114bce8fd0
       
     1 
       
     2                  Base de coneixement per desenvolupar YAGL
       
     3                  -----------------------------------------
       
     4 
       
     5 		     Lluís Batlle i Rossell
       
     6 		     viric@users.sourceforge.net
       
     7 
       
     8 		     Iniciat el 12/08/2003
       
     9 
       
    10 
       
    11      1. Introducció als conceptes que hi ha al voltant de la comptabilitat
       
    12 
       
    13 Els programes de comptabilitat serveixen perquè la gent pugui treure conclusions
       
    14 del funcionament de l'empresa a partir de dades que introdueix el comptable.
       
    15 
       
    16 Aquestes dades tenen forma d'assentaments, i fan referència als moviments de
       
    17 diners que fan referència a l'empresa: compres, vendes, inversions, crèdits, ...
       
    18 
       
    19 En un moviment de diners hi ha un origen i un destí; aquests es localitzen en el
       
    20 que anomenem "comptes". Els comptes són entitats que poden donar i rebre diners,
       
    21 i estan catalogats en quatre tipus: Actiu, Passiu, Ingressos i Despeses. Això
       
    22 significa que els origens i els destins dels diners han de ser per força
       
    23 d'aquests quatre tipus.
       
    24 
       
    25 Un assentament fa referència a un conjunt de moviments concret i quadrat. Això
       
    26 vol dir que tots els diners que algunes comptes dónen han d'anar a parar
       
    27 íntegrament a altres comptes. Per exemple, en un assentament el compte de
       
    28 "clients" pot donar diners a "ventes" i a "IVA".
       
    29 Els diners que "clients" dóna representen deutes de clients. Quan els clients
       
    30 ens paguin, tindrem que 
       
    31 
       
    32 Hi ha el que s'anomenen 'subcomptes' que són comptes fets pel comptable que
       
    33 l'ajuden a tenir més diferenciats els moviments. Això es sol fer per obtenir
       
    34 conclusions sobre elements més particulars, i per a tenir valors precalculats.
       
    35 Per exemple, si tenim subcomptes d'IVA per cada percentatge aplicat, podem
       
    36 calcular els valors a presentar en un informe d'IVA.
       
    37 
       
    38 
       
    39                         2. Dades poc utilitzades
       
    40 
       
    41 Molts programes de comptabilitat permeten vincular subcomptes de clients a dades
       
    42 de persones o empreses. Això només és pels que utilitzen el programa de
       
    43 comptabilitat com a base de dades de clients; no te res a veure amb informes que
       
    44 es puguin generar.
       
    45 
       
    46 El mateix passa amb els proveidors.
       
    47 
       
    48 Les dades de l'empresa a qui portem els comptes són més importants, però només
       
    49 es necessiten pels informes
       
    50 
       
    51 
       
    52                          3. Informació a guardar
       
    53 
       
    54 
       
    55                                 3.1 Comptes
       
    56 
       
    57 Els comptes es divideixen, segons el Pla General Comptable, en Grups, Subgrups i
       
    58 Comptes, a més d'alguns casos on apareixen Subcomptes. Cada un s'identifica per
       
    59 1, 2, 3 i 4 dígits respectivament. A més, com que és una estructura d'arbre, en
       
    60 un subcompte de 4 dígits, els tres primers coincidiran amb els del compte a què
       
    61 pertany, i així també amb els subgrups i els grups.
       
    62 
       
    63 Seguint aquesta regla, podem tenir subcomptes de tants de dígits com volem. Es
       
    64 solen fer subcomptes personals de vuit dígits, donant marge per exemple fins a
       
    65 100000 clients.
       
    66 Alguns programes de comptabilitat assumeixen que la compta 1 és la mateixa que
       
    67 la 10, i també la mateixa que la 100... i no tenen en compte els aniuaments que
       
    68 hi ha (la 10 és el conjunt de totes les que comencen amb 10, i això és diferent
       
    69 que la 100). Suposo que tenen tots els grups i subgrups "hardcoded"; de fet, no
       
    70 són programes massa flexibles.
       
    71 
       
    72 Cada compte pot ser de quatre tipus, com hem dit abans. És el que anomenarem
       
    73 categoria. A més, cada compte té una descripció associada. També podem mantenir
       
    74 un camp anomenat "link" (idea del SQL-Ledger) que ens permeti vincular cada
       
    75 compta a diferents tipus de quadres de diàleg; quan tinguem assentaments
       
    76 tipificats (compres amb IVA, vendes, ...), ens indicarà en quins tipus
       
    77 d'assentaments té a veure cada compte.
       
    78 
       
    79 
       
    80                                3.2 Assentaments
       
    81 
       
    82 Cada assentament està composat per diferents moviments, cadascun referint-se a
       
    83 un compte únic en aquell assentament (CERT?). Un assentament té a veure amb un
       
    84 tipus d'intercanvi de bens, i per tant un assentament té un "Concepte"
       
    85 associat. Podem fins i tot tenir un camp de "Document" que ens indiqui a quin
       
    86 document fa referència l'assentament (Factura, ...). Tot això podria estar de
       
    87 tota manera inclòs en el concepte.
       
    88 
       
    89 Si pensem implementar cerques per "concepte" sèries, podriem separar-ho i tenir
       
    90 els camps "Tipus de document" (ComboBox) i "Número de document". Fins i tot
       
    91 podem guardar la "Data del document".
       
    92 
       
    93 La "data" de l'assentament és important per situar l'intercanvi de bens en
       
    94 el temps. Segurament serà igual que la data del document.
       
    95 
       
    96 
       
    97                                 3.3 Moviments
       
    98 
       
    99 Un moviment es fa en una compta, i està vinculat a un assentament. No sol tenir
       
   100 cap camp de concepte o descripció, ja que un moviment per si sol no té massa
       
   101 valor. L'entitat que representa un canvi de bens és l'assentament.
       
   102 
       
   103 De tota manera ens pot interessar tenir els moviments guardats en el mateix
       
   104 ordre que van ser entrats; així faria falta un camp de "index".
       
   105 Podem tenir una clau primària múltiple (ES DIU AIXÍ?) aquí, que sigui per
       
   106 assentament i número de compta. Sempre i quan sigui cert que en un sol
       
   107 assentament només hi pot haver un moviment com a màxim per cada compta. Això
       
   108 permetria no haver de tenir una clau primària autonumèrica, i ajudaria molt als
       
   109 motors de bases de dades.
       
   110 
       
   111 
       
   112                     4. Diagrama Entitat-Relació bàsic
       
   113 
       
   114 +-----+ 1    N +---------+ N    1 +------------+
       
   115 |chart|---<>---|movements|---<>---|transactions|
       
   116 +-----+        +---------+        +------------+
       
   117   |                 |                   |
       
   118 /-----------\  /-----------\     /----------\
       
   119 |account_num|  |trans_ID   |     | ID       |
       
   120 \-----------/  |account_num|     \----------/
       
   121                \-----------/
       
   122 
       
   123 La traducció dels termes de comptabilitat està al fitxer ENGLISH_TERMS.
       
   124 
       
   125 
       
   126                         5. Informes a generar
       
   127 
       
   128 
       
   129                          5.1. Balanç de saldos
       
   130 
       
   131 El que corre més pressa és el balanç de saldos. Això vol dir calcular el Deure,
       
   132 l'Haver i la seva diferència per cada compta, i mostrar-ho en una taula. És dels
       
   133 més senzills que haurem de generar.
       
   134 
       
   135                          5.2. Balanç de guanys
       
   136 
       
   137 Ens indica la diferència entre ingressos i despeses. Simplement és la diferència
       
   138 entre el grup d'ingressos i el de despeses.
       
   139 
       
   140                          5.3. Balanç de situació
       
   141 
       
   142 Aquest és un document més complexe... la llei catalana/espanyola suggereix dos
       
   143 tipus de balanços de situació: el normal i el reduit. Els dos inclouen totes les
       
   144 comptes d'actiu i passiu de forma diferenciada, i les seves línies no estan
       
   145 composades per les "comptes", sinó per conjunts de comptes amb un nom concret.
       
   146 
       
   147 Els càlculs de les diferents parts del balanç s'obtenen mitjançant sumes dels
       
   148 conjunts anomenats... per tant, o tenim un bon disseny de base de dades (una
       
   149 taula nova que vinculi els conjunts de comptes a els comptes), o bé tenim una
       
   150 configuració de l'informe de balanç en XML on ens ajudem del QSA.
       
   151 
       
   152 Els ingressos o despeses són necessàries per quadrar el balanç de situació.
       
   153 
       
   154 
       
   155                             6. Primers passos al GUI
       
   156 
       
   157 El primer que hem de poder fer és modificar el quadre de comptes. Llavors, poder
       
   158 insertar/modificar/eliminar assentaments. D'alguna manera (al quadre de comptes
       
   159 mateix) hauriem de poder llistar els "haver" i "deure" de cada compta.
       
   160 
       
   161 Més endavant, haurem de generar un informe de balanç de saldos. Aquí entrarà la
       
   162 part XML per primera vegada. Un cop tinguem això, podem continuar per afegir
       
   163 nous informes / noves funcionalitats. Tot tinguent en compte la portabilitat a
       
   164 altres llengües / països.
       
   165 
       
   166 
       
   167                                 7. Eines
       
   168 
       
   169 Tot es programarà en C++, utilitzant les QT a l'extrem; hem d'aprofitar-les al
       
   170 màxim. Això significa cedir feina als de Trolltech; com menys feina tinguem
       
   171 millor.
       
   172 
       
   173 El motor de base de dades de prova serà MySQL, ja que és el que sol venir
       
   174 compilat per defecte amb les QT. Si volem portabilitat de DBMS, només hauriem de
       
   175 fer servir les funcions de Relational DBMS; si ens vinculem als objectes de
       
   176 PostgreSQL només podrem utilitzar aquest o Oracle, i de moment sembla que no és
       
   177 pas millor que anar amb taules relacionades.
       
   178 
       
   179 
       
   180                  8. Primers passos de disseny i programació
       
   181 
       
   182 Primer de tot s'ha d'elaborar i aprovar el disseny de la base de dades. Llavors,
       
   183 construir les taules amb SQL (creant fitxers amb codi SQL que ens faci aquesta
       
   184 feina, de moment). 
       
   185 
       
   186 Llavors, decidir el disseny del GUI. Més endavant un diagrama de classes, i
       
   187 posteriorment començar a implementar un cop ens haguem repartit la feina.
       
   188 
       
   189 De moment, s'aplicaran les normes d'escriptura de codi de Galadriel Parts
       
   190 (GaladrielCodingStyle.txt).
       
   191 
       
   192 S'ha de pensar com guardarem diferents empreses.... altres programes ho solen
       
   193 fer en diferents bases de dades. Cada una té les seves taules. Així sembla que
       
   194 és la millor idea.