From 7ba7df7648f277aac3efbfd66b7df057525bfe34 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Fri, 20 Mar 2026 08:29:37 +0100 Subject: [PATCH] feat: Add initial PostgreSQL schema with tables and indexes for articles, nomenclature, suppliers, stock, movements, ranking, and supplier orders. --- init.sql | 312 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 312 insertions(+) create mode 100644 init.sql diff --git a/init.sql b/init.sql new file mode 100644 index 0000000..0e2e60e --- /dev/null +++ b/init.sql @@ -0,0 +1,312 @@ +-- ============================================================ +-- Schéma PostgreSQL — foirfouille API +-- Tables sélectionnées depuis SQL Server (copie nightly via sync) +-- ============================================================ + +-- Contrôle de synchronisation +CREATE TABLE IF NOT EXISTS sync_log ( + table_name TEXT PRIMARY KEY, + last_sync TIMESTAMP, + rows_synced INTEGER, + status TEXT, + error_msg TEXT +); + +-- ============================================================ +-- Référentiel articles +-- ============================================================ + +CREATE TABLE IF NOT EXISTS articles ( + no_id BIGINT PRIMARY KEY, + codein TEXT, + libelle1 TEXT, + libelle2 TEXT, + lib_ticket TEXT, + tax_code TEXT, + ach_code TEXT, + utilisable TEXT, + actif TEXT, + suspendu TEXT, + suividatecreation TIMESTAMP, + suividatemodif TIMESTAMP, + nom_no_id BIGINT +); +CREATE INDEX IF NOT EXISTS idx_articles_codein ON articles (codein); +CREATE INDEX IF NOT EXISTS idx_articles_libelle1 ON articles (libelle1); +CREATE INDEX IF NOT EXISTS idx_articles_nom_no_id ON articles (nom_no_id); + +CREATE TABLE IF NOT EXISTS article_infosup ( + artnoid BIGINT PRIMARY KEY, + prix_vente_mini NUMERIC(12,4), + prix_vente_maxi NUMERIC(12,4), + eco_ht NUMERIC(12,4), + eco_ttc NUMERIC(12,4), + on_web TEXT, + interdit_remise TEXT, + nomphoto TEXT, + datedebvente TIMESTAMP, + datefinvente TIMESTAMP, + datevaliditeachat TIMESTAMP, + commentaire TEXT, + pv_conseille NUMERIC(12,4), + fraislogistic NUMERIC(12,4), + transit NUMERIC(12,4), + distribution NUMERIC(12,4) +); + +CREATE TABLE IF NOT EXISTS art_gtin ( + idarticle BIGINT, + gtin TEXT, + preferentiel SMALLINT, + PRIMARY KEY (idarticle, gtin) +); +CREATE INDEX IF NOT EXISTS idx_art_gtin_article ON art_gtin (idarticle); + +-- ============================================================ +-- Nomenclature & Gammes +-- ============================================================ + +CREATE TABLE IF NOT EXISTS nomenclature ( + no_id BIGINT PRIMARY KEY, + code TEXT, + libelle TEXT, + niveau INTEGER, + chemin_pere TEXT +); +CREATE INDEX IF NOT EXISTS idx_nomenclature_niveau ON nomenclature (niveau); + +CREATE TABLE IF NOT EXISTS gammes ( + no_id BIGINT PRIMARY KEY, + code TEXT, + libelle TEXT +); + +CREATE TABLE IF NOT EXISTS saisons ( + no_id BIGINT PRIMARY KEY, + code TEXT, + libelle TEXT +); + +CREATE TABLE IF NOT EXISTS art_gamme_saison ( + artnoid BIGINT, + idgamme BIGINT, + idsaison BIGINT, + PRIMARY KEY (artnoid, idgamme, idsaison) +); +CREATE INDEX IF NOT EXISTS idx_ags_artnoid ON art_gamme_saison (artnoid); + +-- ============================================================ +-- Fournisseurs +-- ============================================================ + +CREATE TABLE IF NOT EXISTS artfou1 ( + no_id BIGINT PRIMARY KEY, + art_no_id BIGINT, + code TEXT, + reference TEXT, + ean13 TEXT, + itf TEXT, + qteua NUMERIC(10,3), + pcb NUMERIC(10,3), + spcb NUMERIC(10,3), + delai INTEGER, + securite NUMERIC(10,3), + preference INTEGER, + suspendu TEXT, + suividatecreation TIMESTAMP, + suividatemodif TIMESTAMP +); +CREATE INDEX IF NOT EXISTS idx_artfou1_art_no_id ON artfou1 (art_no_id); +CREATE INDEX IF NOT EXISTS idx_artfou1_code ON artfou1 (code); + +CREATE TABLE IF NOT EXISTS artfou2 ( + idartfou1 BIGINT PRIMARY KEY, + prixachat NUMERIC(12,4), + remise_promotion NUMERIC(10,4) +); + +CREATE TABLE IF NOT EXISTS fouadr1 ( + code TEXT, + sit_code TEXT, + raisonsociale TEXT, + adrligne1 TEXT, + telephone TEXT, + email TEXT, + PRIMARY KEY (code, sit_code) +); + +-- ============================================================ +-- Cubes de stock et prix +-- ============================================================ + +CREATE TABLE IF NOT EXISTS cube_stock ( + artnoid BIGINT, + site TEXT, + qte NUMERIC(12,3), + prmp NUMERIC(12,4), + valstock NUMERIC(14,4), + pv NUMERIC(12,4), + stockdispo NUMERIC(12,3), + stockmort NUMERIC(12,3), + stockcolis NUMERIC(12,3), + dernierevente TIMESTAMP, + dernierereception TIMESTAMP, + premierevente TIMESTAMP, + nbjoursdernierMouvement INTEGER, + nbjoursdernierevente INTEGER, + nbjoursdernierrereception INTEGER, + interditachat TEXT, + codefou TEXT, + PRIMARY KEY (artnoid, site) +); +CREATE INDEX IF NOT EXISTS idx_cube_stock_site ON cube_stock (site); + +CREATE TABLE IF NOT EXISTS cube_pa ( + artnoid BIGINT PRIMARY KEY, + pa NUMERIC(12,4) +); + +CREATE TABLE IF NOT EXISTS cube_pv ( + artnoid BIGINT, + site TEXT, + pv NUMERIC(12,4), + PRIMARY KEY (artnoid, site) +); +CREATE INDEX IF NOT EXISTS idx_cube_pv_site ON cube_pv (site); + +-- ============================================================ +-- Mouvements +-- ============================================================ + +CREATE TABLE IF NOT EXISTS mvtart ( + artnoid BIGINT, + datmvt TIMESTAMP, + site TEXT, + libmvt TEXT, + genremvt INTEGER, + qtemvt NUMERIC(12,3), + valmvt NUMERIC(14,4), + mntmvtht NUMERIC(14,4), + mntmvtttc NUMERIC(14,4), + margemvt NUMERIC(14,4), + qtestock NUMERIC(12,3), + prmp NUMERIC(12,4), + valstock NUMERIC(14,4), + codefou TEXT +); +CREATE INDEX IF NOT EXISTS idx_mvtart_artnoid ON mvtart (artnoid); +CREATE INDEX IF NOT EXISTS idx_mvtart_datmvt ON mvtart (datmvt); +CREATE INDEX IF NOT EXISTS idx_mvtart_site ON mvtart (site); +CREATE INDEX IF NOT EXISTS idx_mvtart_genremvt ON mvtart (genremvt); + +CREATE TABLE IF NOT EXISTS mvtreg ( + datmvt TIMESTAMP, + codtick TEXT, + codcartecli TEXT, + coddev TEXT, + mntreg NUMERIC(14,4), + mntregdev NUMERIC(14,4), + clientnom TEXT, + echeance TIMESTAMP, + reference TEXT, + typereg TEXT, + suividatecreation TIMESTAMP +); +CREATE INDEX IF NOT EXISTS idx_mvtreg_datmvt ON mvtreg (datmvt); + +-- ============================================================ +-- Ranking réseau / magasin +-- ============================================================ + +CREATE TABLE IF NOT EXISTS ranking ( + gencod TEXT, + site TEXT, + libelle TEXT, + foucentrale TEXT, + nomfoucentrale TEXT, + ranking_ca NUMERIC(10,2), + ranking_qte NUMERIC(10,2), + ranking_mag_ca NUMERIC(10,2), + ranking_mag_qte NUMERIC(10,2), + ranking_mag_marge NUMERIC(10,2), + pv_calcule NUMERIC(12,4), + pv_mag NUMERIC(12,4), + pv_cen NUMERIC(12,4), + codefamille TEXT, + libellefamille TEXT, + fichier TEXT, + date_maj TIMESTAMP, + date_integration TIMESTAMP, + date_calcul_mag TIMESTAMP, + PRIMARY KEY (gencod, site) +); +CREATE INDEX IF NOT EXISTS idx_ranking_gencod ON ranking (gencod); +CREATE INDEX IF NOT EXISTS idx_ranking_site ON ranking (site); + +-- ============================================================ +-- Commandes fournisseurs +-- ============================================================ + +CREATE TABLE IF NOT EXISTS cdefou_vivant ( + cdefou_ligne_com_no_id BIGINT, + artfou1_no_id BIGINT, + articles_codein TEXT, + articles_libelle1 TEXT, + articles_libelle2 TEXT, + artfou1_reference TEXT, + artfou1_ean13 TEXT, + artfou1_itf TEXT, + cdefou_ligne_qtecde NUMERIC(12,3), + cdefou_ligne_prixbrut NUMERIC(12,4), + cdefou_ligne_remise NUMERIC(10,4), + cdefou_ligne_remise2 NUMERIC(10,4), + cdefou_ligne_remise3 NUMERIC(10,4), + cdefou_ligne_prixnet NUMERIC(12,4), + cdefou_ligne_montant NUMERIC(14,4), + cdefou_ligne_prixvente NUMERIC(12,4), + cdefou_ligne_gratuit NUMERIC(12,3), + cdefou_ligne_qteacc NUMERIC(12,3), + cdefou_ligne_qteann NUMERIC(12,3), + cdefou_ligne_qteatt NUMERIC(12,3), + cdefou_ligne_qterel NUMERIC(12,3), + cdefou_ligne_cdeligtard TIMESTAMP, + cdefou_ligne_cdeligtot TIMESTAMP, + cotisation_logistique NUMERIC(14,4), + fraislogistic NUMERIC(12,4), + transit NUMERIC(12,4), + distribution NUMERIC(12,4), + taxe NUMERIC(12,4), + commentaire TEXT, + suividatecreation TIMESTAMP, + PRIMARY KEY (cdefou_ligne_com_no_id, artfou1_no_id) +); +CREATE INDEX IF NOT EXISTS idx_cdefou_vivant_artfou1 ON cdefou_vivant (artfou1_no_id); +CREATE INDEX IF NOT EXISTS idx_cdefou_vivant_date ON cdefou_vivant (suividatecreation); + +CREATE TABLE IF NOT EXISTS cdefou_reception ( + no_id BIGINT PRIMARY KEY, + suividatecreation TIMESTAMP, + suividatemodif TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS cdefou_receplig ( + no_id BIGINT PRIMARY KEY, + cdefou_reception_no_id BIGINT, + artfou1_no_id BIGINT, + qtebl NUMERIC(12,3), + qterec NUMERIC(12,3), + qteacc NUMERIC(12,3), + qteref NUMERIC(12,3), + qteaff NUMERIC(12,3), + pribrut NUMERIC(12,4), + remise NUMERIC(10,4), + prirec NUMERIC(12,4), + mntrec NUMERIC(14,4), + motifrefus TEXT, + recpb SMALLINT, + recpbok SMALLINT, + suividatecreation TIMESTAMP, + suividatemodif TIMESTAMP +); +CREATE INDEX IF NOT EXISTS idx_receplig_artfou1 ON cdefou_receplig (artfou1_no_id); +CREATE INDEX IF NOT EXISTS idx_receplig_date ON cdefou_receplig (suividatecreation);