'' THEN C3.CPTCOL ELSE C3.CPT END AS CPT_NUMERO_GENERAL,
CASE WHEN C3.CPTCOL <> '' THEN C3.CPTCOL || '-' || C3.CPT ELSE C3.CPT END AS CPT_NUMERO,
CASE WHEN C3.CPTCOL <> '' THEN C3.CPT ELSE '' END AS CPT_PARTENAIRE,
CASE WHEN C3.CPTCOL <> '' THEN COALESCE(C3_COLL.LIB,C3.CPTCOL) || ' - ' || C3.LIB ELSE C3.LIB END AS CPT_LIB,
CASE WHEN C3.CPTCOL <> '' THEN C3.LIB ELSE '' END AS PARTENAIRE_LIB
FROM prod_divalto.C3
LEFT JOIN prod_divalto.C3 C3_COLL ON
C3.DOS = C3_COLL.DOS AND
C3.CPTCOL = C3_COLL.CPT
);
-- On rajoute le numéro de l'établissement si les noms sont différents entre établissements
UPDATE w_C3 SET
CPT_NUMERO = w_C3.CPT_NUMERO || '-' || w_C3.DOS,
CPT_PARTENAIRE = CASE WHEN CPT_PARTENAIRE <> '' THEN w_C3.CPT_PARTENAIRE || '-' || w_C3.DOS ELSE '' END
FROM
(
SELECT CPT_NUMERO, COUNT(DISTINCT CPT_LIB)
FROM w_C3
GROUP BY 1
HAVING count(DISTINCT CPT_LIB) > 1
) subview
WHERE w_C3.CPT_NUMERO = subview.CPT_NUMERO
;
UPDATE w_C3 SET
CPT_NUMERO_GENERAL = subview.CPT_NUMERO
FROM
(
SELECT DOS, CPT_NUMERO_GENERAL, CPT_NUMERO
FROM w_C3
WHERE cpt_partenaire = '' AND
CPT_NUMERO <> CPT_NUMERO_GENERAL
) subview
WHERE w_c3.DOS = subview.DOS AND
w_c3.CPT_NUMERO_GENERAL = subview.CPT_NUMERO_GENERAL
;
ANALYSE w_C3
;
DROP TABLE IF EXISTS w_compte;
CREATE TEMP TABLE w_compte AS
SELECT
CPT_NUMERO,
MAX(CPT_LIB) AS CPT_LIB,
MAX(CPT_NUMERO_GENERAL) AS CPT_NUMERO_GENERAL
FROM w_C3
GROUP BY 1
;
--------------------------
------- COMPTES --------
--------------------------
INSERT INTO compta.t_comptes (type_compta_id, numero, texte, clinique_honoraire, banque)
SELECT 0, CPT_NUMERO, CPT_LIB, 'C', CASE WHEN CPT_NUMERO LIKE '512%' THEN '1' ELSE '0' END AS banque
FROM w_compte
WHERE CPT_NUMERO_GENERAL = CPT_NUMERO AND
CPT_NUMERO NOT IN (SELECT numero FROM compta.t_comptes)
;
INSERT INTO compta.t_comptes (type_compta_id, numero, texte, clinique_honoraire, banque, compte_general_id)
SELECT 0, CPT_NUMERO, CPT_LIB, 'C' , CASE WHEN CPT_NUMERO LIKE '512%' THEN '1' ELSE '0' END AS banque, t_compte_general.oid
FROM w_compte
JOIN compta.t_comptes t_compte_general ON CPT_NUMERO_GENERAL = t_compte_general.numero
WHERE CPT_NUMERO_GENERAL <> CPT_NUMERO AND
CPT_NUMERO NOT IN (SELECT numero FROM compta.t_comptes)
;
UPDATE compta.t_comptes
SET compte_general_id = oid
WHERE oid <> 0 AND
(compte_general_id = 0 OR compte_general_id IS NULL)
;
UPDATE compta.t_comptes
SET texte = CPT_LIB
FROM w_compte
WHERE CPT_NUMERO = t_comptes.numero AND
(
t_comptes.texte IS DISTINCT FROM CPT_LIB
)
;
-------
---- Type de compta
-------
UPDATE compta.t_comptes
SET type_compta_id = t_types_compta.oid
FROM (
SELECT
oid,
CASE
WHEN numero LIKE '6%' THEN 'GES'
WHEN numero LIKE '7%' THEN 'GES'
WHEN numero LIKE '8%' THEN 'RES'
ELSE 'BIL'
END AS w_type_compta_code
FROM compta.t_comptes
) subview
JOIN compta.t_types_compta ON subview.w_type_compta_code = t_types_compta.code
WHERE subview.oid = t_comptes.oid AND
type_compta_id IS DISTINCT FROM t_types_compta.oid
;
-------
--- Type de compta extra
-------
UPDATE compta.t_comptes
SET type_compta_extra_id = t_comptes.type_compta_id
WHERE t_comptes.compte_general_id = t_comptes.oid AND
(
type_compta_extra_id IS DISTINCT FROM t_comptes.type_compta_id
)
;
UPDATE compta.t_comptes
SET type_compta_extra_id = t_types_compta.oid, type_compta_id = t_types_compta.oid
FROM (
SELECT
oid,
substr(numero,1,2),
CASE
WHEN numero LIKE '40%' THEN 'FOU'
WHEN numero LIKE '41%' THEN 'CLI'
WHEN numero LIKE '46%' THEN 'MED'
ELSE ''
END AS w_type_compta_code
FROM compta.t_comptes
WHERE compte_general_id <> oid
) subview
JOIN compta.t_types_compta ON subview.w_type_compta_code = t_types_compta.code
WHERE subview.oid = t_comptes.oid AND
(
type_compta_extra_id IS DISTINCT FROM t_types_compta.oid OR
type_compta_id IS DISTINCT FROM t_types_compta.oid
)
;
--------------------------------
-------- PARTENAIRES ---------
--------------------------------
INSERT INTO compta.t_partenaires(code, code_original, texte, texte_court)
SELECT CPT_PARTENAIRE, CPT_PARTENAIRE, MAX(PARTENAIRE_LIB),MAX(PARTENAIRE_LIB)
FROM w_C3
where CPT_PARTENAIRE <> ''
AND CPT_PARTENAIRE NOT IN (SELECT code_original FROM compta.t_partenaires)
GROUP BY 1
ORDER BY 1
;
UPDATE compta.t_partenaires SET
texte = PARTENAIRE_LIB,
texte_court = PARTENAIRE_LIB
FROM w_C3
WHERE CPT_PARTENAIRE = t_partenaires.code_original AND
(
t_partenaires.texte IS DISTINCT FROM PARTENAIRE_LIB OR
t_partenaires.texte_court IS DISTINCT FROM PARTENAIRE_LIB
)
;
----------------------------
------- JOURNAUX ---------
----------------------------
DROP TABLE IF EXISTS w_C4;
CREATE TEMP TABLE w_C4 AS (
SELECT
JNL AS JNL_CODE,
JNL AS JNL,
LIB AS JNL_LIB,
DOS,
CASE WHEN (JNL LIKE 'AN' OR JNL LIKE 'C10') THEN '1' ELSE '0' END AS a_nouveaux
FROM prod_divalto.C4
GROUP BY 1,2,3,4
);
-- On rajoute le numéro de l'établissement si les noms sont différents entre établissements
UPDATE w_C4 SET
JNL_CODE = w_C4.JNL_CODE || '-' || w_C4.DOS
FROM
(
SELECT JNL_CODE, COUNT(DISTINCT JNL_LIB)
FROM w_C4
GROUP BY 1
HAVING count(DISTINCT JNL_LIB) > 1
) subview
WHERE w_C4.JNL_CODE = subview.JNL_CODE
;
DROP TABLE IF EXISTS w_journaux;
CREATE TEMP TABLE w_journaux AS (
SELECT JNL_CODE, MAX(JNL_LIB) AS JNL_LIB, MAX(a_nouveaux) as a_nouveaux
FROM w_C4
GROUP BY 1
)
;
INSERT INTO compta.t_journaux(code, code_original, texte, a_nouveaux)
SELECT JNL_CODE, JNL_CODE, JNL_LIB, a_nouveaux
FROM w_journaux
WHERE JNL_CODE NOT IN (SELECT code_original FROM compta.t_journaux)
;
UPDATE compta.t_journaux SET
texte = JNL_LIB
FROM w_journaux
WHERE w_journaux.JNL_CODE = t_journaux.code_original AND
(
t_journaux.texte IS DISTINCT FROM JNL_LIB
)
;
-------------------------
------- CLASSES DE COMPTES
-------------------------
-------------------------
------- COMPTES GÉNÉRIQUES
-------------------------
----------------------------------------
-------- SECTIONS ANALYTIQUES --------
----------------------------------------
DROP TABLE IF EXISTS w_sections_analytiques;
CREATE TEMP TABLE w_sections_analytiques AS (
SELECT axeno || '-' || axe || '-' || dos as CODE_ANAL, LIB AS LIB_ANAL
FROM prod_divalto.C5
group by AXE, AXENO, DOS, LIB_ANAL
);
ANALYSE w_sections_analytiques;
INSERT INTO compta.t_sections_analytiques(code_original, code, texte)
SELECT
CODE_ANAL,
CODE_ANAL AS code,
LIB_ANAL AS texte
FROM w_sections_analytiques
WHERE CODE_ANAL NOT IN (SELECT code_original FROM compta.t_sections_analytiques WHERE code_original IS NOT NULL)
;
UPDATE compta.t_sections_analytiques SET
code = CODE_ANAL,
texte = LIB_ANAL
FROM w_sections_analytiques
WHERE CODE_ANAL = code_original AND
(
code IS DISTINCT FROM w_sections_analytiques.CODE_ANAL OR
texte IS DISTINCT FROM LIB_ANAL
)
;
-------------------------------------------------------------------
-- Comptes auxiliaires
-- comptes non présents
-- Classes de comptes
]]>
-->
'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;
-- Précision cli/hon (cli prioritaire)
UPDATE compta.t_comptes
SET clinique_honoraire = subview.clinique_honoraire
FROM
(
SELECT
compte_id AS compte_id,
MIN(CASE WHEN p_historique_ecritures.clinique_honoraire = 'H' THEN 'H' ELSE 'C' END) AS clinique_honoraire
FROM compta.p_historique_ecritures
JOIN compta.t_comptes ON compte_id = t_comptes.oid
GROUP BY 1
) subview
WHERE t_comptes.oid = subview.compte_id AND
t_comptes.clinique_honoraire <> subview.clinique_honoraire;
UPDATE compta.t_comptes
SET clinique_honoraire = subview.clinique_honoraire
FROM
(
SELECT
t_comptes.oid AS compte_id,
t_comptes.numero,
MIN(CASE WHEN p_historique_ecritures.clinique_honoraire = 'H' THEN 'H' ELSE 'C' END) AS clinique_honoraire
FROM compta.p_historique_ecritures
JOIN compta.t_comptes ON compte_extra_id = t_comptes.oid
GROUP BY 1,2
) subview
WHERE t_comptes.oid = subview.compte_id AND
t_comptes.clinique_honoraire <> subview.clinique_honoraire;
UPDATE compta.t_journaux
SET clinique_honoraire = subview.clinique_honoraire
FROM
(
SELECT
journal_id,
MIN(CASE WHEN p_historique_ecritures.clinique_honoraire = 'H' THEN 'H' ELSE 'C' END) AS clinique_honoraire
FROM compta.p_historique_ecritures
GROUP BY 1
) subview
WHERE t_journaux.oid = subview.journal_id AND
t_journaux.clinique_honoraire <> subview.clinique_honoraire;
]]>