-- -----------------------------------------------------------------------------
-- OpenSi : Outils libres de gestion d'entreprise                             --
-- Copyright (C) 2003 Speedinfo.fr S.A.R.L.                                   --
-- Contact: contact@opensi.org                                                --
--                                                                            --
-- This program is free software; you can redistribute it and/or              --
-- modify it under the terms of the GNU General Public License                --
-- as published by the Free Software Foundation; either version 2             --
-- of the License, or (at your option) any later version.                     --
--                                                                            --
-- This program is distributed in the hope that it will be useful,            --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of             --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the               --
-- GNU General Public License for more details.                               --
--                                                                            --
-- You should have received a copy of the GNU General Public License          --
-- along with this program; if not, write to the Free Software                --
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
-- -----------------------------------------------------------------------------

-- SCHEMA BASE DE DONNÉES OSAMES COMPTA << EXERCICE >>


create table SOLDE_COMPTE (
  Numero_Compte    char(8) not null,           -- Numéro de compte
  -- Libelle          varchar(100) default '',    -- Libellé du compte
  -- Compte_Gen       char(1) default 'G',        -- Type de compte (C=Client, F=Fournisseur, G=Généraux)
  -- Code_TVA         int unsigned default 1,     -- Code de TVA applicable
  Lettre           varchar(3) default '',      -- Dernière lettre utilisée pour le lettrage
  -- Centraliser      char(1) default 'n',        -- Centraliser le compte (y=oui/n=non)
  -- Cumul_Journal    char(1) default 'n',        -- Cumul journal (y=oui/n=non)
  -- Detail_Cloture   char(1) default 'y',        -- Détail en cloture (y=oui/n=non)
  Solde            decimal(16,2) default 0,    -- Solde du compte
  -- Date_Creation    bigint unsigned default 0,  -- Date de création du compte
  Total_Credit     decimal(16,2) default 0,    -- Solde total au crédit
  Total_Debit      decimal(16,2) default 0,    -- Solde total au débit
  primary key(Numero_Compte)
) engine=InnoDB;


create table NB_OP_JOURNAUX (
  Code_Journal    char(3) not null,                    -- Code d'identification du journal
  Periode         bigint unsigned not null default 0,  -- Mois de l'écriture (date au 1er jour du mois)
  Nb_Op           int unsigned default 0,              -- Nombre d'opérations du journal dans la période
  primary key(Code_Journal, Periode)
) engine=InnoDB;


create table ECRITURE (
  Num_Ecriture    int unsigned not null auto_increment,  -- Identifiant unique de l'écriture comptable
  Code_Journal    char(3) not null,                      -- Code du journal rattaché à l'écriture
  Date_Ecriture   bigint unsigned default 0,             -- Mois de l'écriture (date au 1er jour du mois)
  Vide            tinyint unsigned default 1,            -- 1 => l'écriture est vide; 0 => l'écriture contient des opérations
  Numero          int unsigned default 0,                -- Numéro de l'écriture en liaison avec le code journal
  primary key(Num_Ecriture),
  index idx_code_journal (Code_Journal)
) engine=InnoDB;


create table OPERATION (
  Op_Id            int unsigned not null auto_increment,   -- Identifiant unique de l'opération
  Num_Ligne        int unsigned not null,                  -- Numéro de la ligne dans le tableau de saisie
  Num_Ecriture     int unsigned not null,                  -- Identifiant de l'écriture comptable
  Numero_Compte    char(8) not null,                       -- Numéro de compte
  Montant_D        decimal(14,2) unsigned default 0,       -- Montant de l'opération si débit sinon 0
  Montant_C        decimal(14,2) unsigned default 0,       -- Montant de l'opération si crédit sinon 0
  Libelle          varchar(100) default '',                -- Libellé de l'opération
  Num_Piece        varchar(20) default '',                 -- Numéro de pièce
  Contrepartie     varchar(8) default '',                  -- Numéro de compte de contrepartie
  Type             varchar(8) default '',                  -- Type (CB, Cheque...)
  Raccourci        char(1) default '',                     -- Raccourci pour le type d'opération
  Lettre           varchar(3) default '',                  -- Lettre pour lettrage
  Date_Op          bigint unsigned default 0,              -- Date de l'opération
  Date_Echeance    bigint unsigned default 0,              -- Date d'échéance
  Pointage         tinyint unsigned default 0,             -- Pointage de l'opération (oui/non)
  primary key(Op_Id),
  index idx_numero_compte (Numero_Compte),
  index idx_num_ecriture (Num_Ecriture),
	constraint cfk_operation_numero_compte foreign key (Numero_Compte) references SOLDE_COMPTE (Numero_Compte),
  constraint cfk_operation_num_ecriture foreign key (Num_Ecriture) references ECRITURE (Num_Ecriture)
) engine=InnoDB;
