= 200801 AND
is_budget IS DISTINCT FROM '1'
GROUP BY 1,2
ORDER BY 1,2;
-- Ecritures exercice en cours
DROP TABLE IF EXISTS w_ECRITURES;
CREATE TEMP TABLE w_ECRITURES AS
SELECT to_number(to_char(D_ECR,'YYYYMM'),'FM999999') AS MOIS,
N_CPT,
date_part('year',D_ECR) AS exercice_comptable,
'0'::text AS exercice_precedent,
MIN(D_ECR) AS PERIODEECRITURE_debut,
MAX(D_ECR) AS PERIODEECRITURE_fin,
Count(*) AS COUNT,
round(SUM(DEBIT),2) AS DEBIT,
round(SUM(CREDIT),2) AS CREDIT
FROM prod_qsp.CPTA_COMPTA_MVT
WHERE D_ECR >= '20080101'
GROUP BY 1,2,3
ORDER BY 1,2;
-- Ecritures exercice précédent
INSERT INTO w_ECRITURES
SELECT to_number(to_char(D_ECR,'YYYYMM'),'FM999999') AS MOIS,
N_CPT,
date_part('year',D_ECR) AS exercice_comptable,
'1'::text AS exercice_precedent,
MIN(D_ECR) AS PERIODEECRITURE_debut,
MAX(D_ECR) AS PERIODEECRITURE_fin,
Count(*) AS COUNT,
round(SUM(DEBIT),2) AS DEBIT,
round(SUM(CREDIT),2) AS CREDIT
FROM prod_qsp.CPTA_COMPTA_MVT_HIST
WHERE D_ECR >= '20080101'
GROUP BY 1,2,3
ORDER BY 1,2;
DROP TABLE IF EXISTS w_mois_modifies;
CREATE TEMP TABLE w_mois_modifies AS
SELECT w_ECRITURES.exercice_comptable,
w_ECRITURES.exercice_precedent,
w_ECRITURES.mois AS mois_comptable,
MIN(PERIODEECRITURE_debut) AS PERIODEECRITURE_debut,
MAX(PERIODEECRITURE_fin) AS PERIODEECRITURE_fin
FROM w_ECRITURES
LEFT JOIN w_historique_ecritures_total ON
w_historique_ecritures_total.mois_comptable = w_ECRITURES.mois AND
w_historique_ecritures_total.numero = w_ECRITURES.N_CPT
GROUP BY 1,2,3
HAVING MAX(CASE WHEN w_historique_ecritures_total.count IS DISTINCT FROM w_ECRITURES.count OR
w_historique_ecritures_total.debit IS DISTINCT FROM w_ECRITURES.debit OR
w_historique_ecritures_total.credit IS DISTINCT FROM w_ECRITURES.credit
THEN 1 ELSE 0 END) = 1;
ALTER TABLE w_mois_modifies ADD CONSTRAINT w_mois_modifies_pk PRIMARY KEY(mois_comptable);
CTISELECT_PROPERTY_READ 'MOISMODIFIES', COALESCE(base.cti_group_concat(mois_comptable),'0')
FROM w_mois_modifies;
CTISELECT_PROPERTY_READ 'MOISMODIFIESC', COALESCE(base.cti_group_concat(mois_comptable),'0')
FROM w_mois_modifies
WHERE exercice_precedent = '0';
CTISELECT_PROPERTY_READ 'MOISMODIFIESP', COALESCE(base.cti_group_concat(mois_comptable),'0')
FROM w_mois_modifies
WHERE exercice_precedent = '1';
echo Mois modifiés Exercice en cours : [MOISMODIFIESC];
echo Mois modifiés Exercice précédent : [MOISMODIFIESP];
]]>
'C'
AND site_id IN (SELECT oid FROM compta.t_sites WHERE clinique_honoraire <> 'H');
UPDATE compta.p_historique_ecritures
SET clinique_honoraire = 'H'
FROM compta.t_sites
WHERE p_historique_ecritures.site_id = t_sites.oid
AND p_historique_ecritures.clinique_honoraire <> 'H'
AND site_id IN (SELECT oid FROM compta.t_sites WHERE clinique_honoraire = 'H');
UPDATE compta.p_historique_ecritures
SET compte_id = t_comptes.compte_general_id
FROM compta.t_comptes
WHERE comptabilisee <> '1'
AND compte_id = t_comptes.oid
AND t_comptes.oid <> t_comptes.compte_general_id
AND compte_id = compte_extra_id;
]]>
0 THEN
TP_CPT || to_char(NUM_TIERS,'FM00000')
ELSE '' END AS NUM_TIERS,
CASE WHEN N_CPT IN (SELECT N_CPT FROM prod_QSP.CPTA_COMPTA_MVT) OR
N_CPT IN (SELECT N_CPT FROM prod_QSP.CPTA_COMPTA_MVT_HIST) THEN 1 ELSE 0 END AS USED,
0::bigint AS type_compta_id
FROM prod_QSP.PLAN_C;
INSERT INTO w_PLAN_C
SELECT N_CPT_GENE,
LIB_TYPE_TIERS,
'G'::text,
N_CPT_GENE AS N_CPT_GENE,
SEQ_TYPE_TIERS,
''::text AS NUM_TIERS,
0 AS USED,
0::bigint AS type_compta_id
FROM prod_qsp.TYPE_TIERS_CPT
WHERE N_CPT_GENE <> '' AND
N_CPT_GENE NOT IN (SELECT N_CPT FROm w_PLAN_C);
INSERT INTO w_PLAN_C
SELECT N_CPT_CLI,
LIB_TYPE_TIERS,
'G'::text,
N_CPT_CLI AS N_CPT_GENE,
SEQ_TYPE_TIERS,
''::text AS NUM_TIERS,
0 AS USED,
0::bigint AS type_compta_id
FROM prod_qsp.TYPE_TIERS_CPT
WHERE N_CPT_CLI <> '' AND
N_CPT_CLI NOT IN (SELECT N_CPT FROm w_PLAN_C);
INSERT INTO w_PLAN_C
SELECT N_CPT_TIERS,
LIB_TYPE_TIERS,
'G'::text,
N_CPT_TIERS AS N_CPT_GENE,
SEQ_TYPE_TIERS,
''::text AS NUM_TIERS,
0 AS USED,
0::bigint AS type_compta_id
FROM prod_qsp.TYPE_TIERS_CPT
WHERE N_CPT_TIERS <> '' AND
N_CPT_TIERS NOT IN (SELECT N_CPT FROm w_PLAN_C);
-- Comptes inexistants dans Plan comptable
INSERT INTO w_PLAN_C
SELECT CPTA_COMPTA_MVT.N_CPT,
'Compte ' || CPTA_COMPTA_MVT.N_CPT,
'G'::text,
CPTA_COMPTA_MVT.N_CPT AS N_CPT_GENE,
0,
''::text AS NUM_TIERS,
1 AS USED,
0::bigint AS type_compta_id
FROM prod_qsp.CPTA_COMPTA_MVT_HIST CPTA_COMPTA_MVT
LEFT JOIN prod_qsp.PLAN_C ON CPTA_COMPTA_MVT.N_CPT = PLAN_C.N_CPT
WHERE PLAN_C.N_CPT IS NULL
GROUP BY 1;
-- Type de compte par défaut si non renseigné
UPDATE w_PLAN_C
SET SEQ_TYPE_TIERS = subview.SEQ_TYPE_TIERS
FROM
(
SELECT N_CPT_PX,
(MAX(Array[nb,SEQ_TYPE_TIERS]))[2] AS SEQ_TYPE_TIERS
FROM (
SELECT
CASE WHEN TP_CPT IN ('F') THEN substr(N_CPT,1,3) ELSE substr(N_CPT,1,4) END AS N_CPT_PX,
SEQ_TYPE_TIERS,
count(*) AS nb
FROM w_PLAN_C
WHERE TP_CPT <> 'G' AND SEQ_TYPE_TIERS <> 0
GROUP BY 1,2
ORDER BY 1,3 desc
) subview
GROUP BY 1
) subview
WHERE CASE WHEN TP_CPT IN ('F') THEN substr(N_CPT,1,3) ELSE substr(N_CPT,1,4) END = N_CPT_PX AND
w_PLAN_C.SEQ_TYPE_TIERS = 0;
UPDATE w_PLAN_C
SET N_CPT_GENE =
CASE
WHEN TYPE_TIERS_CPT.N_CPT_GENE <> '' THEN TYPE_TIERS_CPT.N_CPT_GENE
WHEN TYPE_TIERS_CPT.N_CPT_CLI <> '' THEN TYPE_TIERS_CPT.N_CPT_CLI
WHEN TYPE_TIERS_CPT.N_CPT_TIERS <> '' THEN TYPE_TIERS_CPT.N_CPT_TIERS
ELSE w_PLAN_C.N_CPT_GENE END
FROM prod_qsp.TYPE_TIERS_CPT
WHERE TYPE_TIERS_CPT.SEQ_TYPE_TIERS = w_PLAN_C.SEQ_TYPE_TIERS AND
TP_CPT <> 'G';
UPDATE w_PLAN_C
SET N_CPT_GENE = w_PLAN_GEN.N_CPT
FROM w_PLAN_C w_PLAN_GEN
WHERE w_PLAN_C.TP_CPT = 'F' AND
w_PLAN_C.N_CPT = w_PLAN_C.N_CPT_GENE AND
substr(w_PLAN_C.N_CPT,1,3) || '000000' = w_PLAN_GEN.N_CPT AND
w_PLAN_GEN.TP_CPT = 'G';
UPDATE w_PLAN_C
SET N_CPT_GENE = w_PLAN_GEN.N_CPT
FROM w_PLAN_C w_PLAN_GEN
WHERE w_PLAN_C.TP_CPT = 'C' AND
w_PLAN_C.N_CPT = w_PLAN_C.N_CPT_GENE AND
substr(w_PLAN_C.N_CPT,1,4) || '00000' = w_PLAN_GEN.N_CPT AND
w_PLAN_GEN.TP_CPT = 'G';
UPDATE w_PLAN_C
SET N_CPT_GENE = w_PLAN_GEN.N_CPT
FROM w_PLAN_C w_PLAN_GEN
WHERE w_PLAN_C.TP_CPT = 'T' AND
w_PLAN_C.N_CPT = w_PLAN_C.N_CPT_GENE AND
substr(w_PLAN_C.N_CPT,1,4) || '00000' = w_PLAN_GEN.N_CPT AND
w_PLAN_GEN.TP_CPT = 'G';
UPDATE w_PLAN_C
SET USED = 1
WHERE USED = 0 AND
N_CPT IN (SELECT N_CPT_GENE FROM w_PLAN_C WHERE USED = 1);
UPDATE w_PLAN_C
SET TP_CPT = 'G'
WHERE TP_CPT <> 'G' AND
N_CPT = N_CPT_GENE;
UPDATE w_PLAN_C
SET NUM_TIERS = NUM_TIERS || '-' ||
CASE WHEN TP_CPT IN ('F') THEN substr(N_CPT,4) ELSE substr(N_CPT,3) END
WHERE USED = 1 AND
NUM_TIERS IN (
SELECT
NUM_TIERS
FROM w_PLAN_C
WHERE USED = 1 AND NUM_TIERS <> ''
GROUP BY 1
HAVING count(DISTINCT LIB_CPT) > 1
);
UPDATE w_PLAN_C
SET type_compta_id = t_types_compta.oid
FROM compta.t_types_compta
WHERE t_types_compta.code_original =
CASE
WHEN TP_CPT = 'C' THEN 'CLI'
WHEN TP_CPT = 'F' THEN 'FOU'
WHEN TP_CPT = 'R' THEN 'TIE'
WHEN TP_CPT = 'G' AND N_CPT LIKE '6%' OR N_CPT LIKE '7%' OR N_CPT LIKE '8%' THEN 'GES'
ELSE 'BIL' END;
-- Periode comptable
UPDATE base.p_calendrier_mois SET
exercice_mois_comptable_1 = subview.exercice_mois_comptable_1,
exercice_comptable = subview.exercice_comptable
FROM
(
SELECT p_calendrier_mois.mois,
p_calendrier_mois.mois - correcteur_mois AS exercice_mois_comptable_1,
date_part('year',p_calendrier_mois.date_debut) - correcteur_exercice AS exercice_comptable
FROM
base.p_calendrier_mois
JOIN (
SELECT
p_calendrier_mois.mois,
to_number(to_char(D_DEB,'YYYYMM'),'FM999999') AS exercice_mois_comptable_1,
date_part('year',D_FIN) AS exercice_comptable,
p_calendrier_mois.numero_mois,
p_calendrier_mois.mois - to_number(to_char(D_DEB,'YYYYMM'),'FM999999') AS correcteur_mois,
date_part('year',p_calendrier_mois.date_debut) - date_part('year',D_FIN) AS correcteur_exercice
FROM base.p_calendrier_mois
JOIN prod_qsp.DOSSIER_COMPTABLE_EX ON p_calendrier_mois.date_debut BETWEEN date(D_DEB) AND date(D_FIN)
ORDER BY 1
) subview ON p_calendrier_mois.numero_mois = subview.numero_mois
WHERE p_calendrier_mois.exercice_mois_comptable_1 IS DISTINCT FROM p_calendrier_mois.mois - correcteur_mois OR
p_calendrier_mois.exercice_comptable IS DISTINCT FROM date_part('year',p_calendrier_mois.date_debut) - correcteur_exercice
GROUP BY 1,2,3
ORDER BY 1) subview
WHERE p_calendrier_mois.mois = subview.mois;
-- Site = Etablissement
INSERT INTO compta.t_sites(code, texte, clinique_honoraire, code_original)
SELECT N_ETAB, NOM, 'C', N_ETAB
FROM prod_QSP.CPTA_ETABLISSEMENT
WHERE N_ETAB NOT IN (SELECT code_original FROM compta.t_sites WHERE code_original IS NOT NULL)
;
-- Types de compte
INSERT INTO compta.t_types_compta(code, code_original, texte, specialite)
SELECT code, code_original, texte, specialite
FROM
(
SELECT 'GES' AS code, 'GES' AS code_original, 'Gestion' AS texte, 'GES' AS specialite
UNION
SELECT 'BIL', 'BIL', 'Bilan', 'BIL'
UNION
SELECT 'CLI', 'CLI', 'Clients', 'CLI'
UNION
SELECT 'FOU', 'FOU', 'Fournisseurs', 'FOU'
UNION
SELECT 'TIE', 'TIE', 'Autres tiers', 'CLI'
) subview
WHERE code_original NOT IN (SELECT code_original FROM compta.t_types_compta WHERE code_original IS NOT NULL);
INSERT INTO compta.t_sections_analytiques(oid, code, code_original, texte)
SELECT 0, '0000', '', 'Non renseignée'
WHERE 0 NOT IN (SELECT oid FROM compta.t_sections_analytiques);
-- Partenaires
INSERT INTO compta.t_partenaires(oid, code, code_original, texte, texte_court)
SELECT 0, chr(127) || '***', '', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM compta.t_partenaires);
INSERT INTO compta.t_partenaires(code, code_original, texte, texte_court)
SELECT NUM_TIERS, NUM_TIERS, MAX(LIB_CPT), MAX(LIB_CPT)
FROM w_PLAN_C
WHERE TP_CPT <> 'G' AND
NUM_TIERS <> '' AND
NUM_TIERS NOT IN (SELECT code_original FROM compta.t_partenaires WHERE code_original IS NOT NULL) AND
USED = 1
GROUP BY 1
ORDER BY 1;
-- Journaux
INSERT INTO compta.t_journaux(code, code_original, texte, a_nouveaux, clinique_honoraire)
SELECT C_JAL, C_JAL, LIB_JAL, '0', 'C'
FROM prod_QSP.JOURNAL
WHERE C_JAL NOT IN (SELECT code_original FROM compta.t_journaux WHERE code_original IS NOT NULL)
ORDER BY 1;
-- Comptes
UPDATE compta.t_comptes SET
type_compta_id = w_PLAN_c.type_compta_id,
texte = LIB_CPT
FROM w_PLAN_C
WHERE t_comptes.numero = N_CPT AND
(
t_comptes.type_compta_id IS DISTINCT FROM w_PLAN_c.type_compta_id OR
t_comptes.texte IS DISTINCT FROM LIB_CPT
);
INSERT INTO compta.t_comptes(
type_compta_id, numero, texte, compte_general_id, clinique_honoraire,
banque, collectif, type_compta_extra_id, numero_extra, partenaire_id)
SELECT
type_compta_id,
N_CPT AS numero,
MAX(LIB_CPT) AS texte,
0 AS compte_general_id,
'C' AS clinique_honoraire,
MAX(CASE WHEN N_CPT LIKE '512%' THEN '1' ELSE '0' END) AS banque,
'0' AS collectif,
0 AS type_compta_extra_id,
'' AS numero_extra,
0::bigint AS partenaire_id
FROM w_PLAN_C
WHERE USED = 1 AND
N_CPT NOT IN (SELECT numero FROM compta.t_comptes WHERE numero IS NOT NULL)
GROUP BY 1,2
ORDER BY 2;
-- Comptes généraux des extra comptable
UPDATE compta.t_comptes SET
compte_general_id = t_comptes_c.oid,
collectif = (CASE WHEN w_PLAN_C.TP_CPT <> 'G' THEN '0' ELSE '1' END)
FROM w_PLAN_C
JOIN compta.t_comptes t_comptes_c ON N_CPT_GENE = t_comptes_c.numero
WHERE N_CPT = t_comptes.numero AND
(
t_comptes.compte_general_id IS DISTINCT FROM t_comptes_c.oid OR
t_comptes.collectif IS DISTINCT FROM (CASE WHEN w_PLAN_C.TP_CPT <> 'G' THEN '0' ELSE '1' END)
);
-- Partenaire associé à l'extraé comptable
UPDATE compta.t_comptes
SET partenaire_id = t_partenaires.oid
FROM w_PLAN_C
JOIN compta.t_partenaires ON NUM_TIERS = t_partenaires.code_original
WHERE t_comptes.numero = w_PLAN_C.N_CPT AND
w_PLAN_C.TP_CPT <> 'G' AND
partenaire_id IS DISTINCT FROM t_partenaires.oid;
]]>