'' OR i = 1) AND PRC_array[i] > 0 ; -- Trim des champs text SELECT base.cti_execute('UPDATE w_ETL010 SET ' || array_to_string(base.cti_array_accum(trim_set),',') || ' WHERE ' || array_to_string(base.cti_array_accum(trim_where),' OR '),1) FROM ( SELECT column_name||'=trim('||column_name||')' AS trim_set, column_name||' IS DISTINCT FROM trim('||column_name||')' AS trim_where FROM information_schema.columns WHERE table_name = 'w_etl010' AND data_type = 'text' GROUP BY 1,2 ) subview ; -- Identification des Entreprises. DROP TABLE IF EXISTS temp.x_ref_ent ; CREATE TABLE temp.x_ref_ent AS SELECT ent_code_original AS code_original, CODE_ETS AS code, MAX(ETB_SIRET_NOM) AS texte, MAX(NUM_SIREN_EMPL::text) AS siren, null::text AS texte_court FROM w_ETL016 GROUP BY 1,2 ; -- Identification des Etablissements. DROP TABLE IF EXISTS temp.x_ref_ets ; CREATE TABLE temp.x_ref_ets AS SELECT ent_code_original, ety_code_original, ets_code_original AS code_original, '1' AS code, MAX(ETB_SIRET_NUMER::text) AS siret, MAX(ETB_SIRET_NOM) AS texte, null::text AS texte_court FROM w_ETL016 GROUP BY 1,2,3,4 ; ]]> '' GROUP BY 1 ) SELECT IMPUTATION_xx::bigint AS oid, IMPUTATION_xx AS code_original, IMPUTATION_xx AS code, IMPUTATION_xx AS texte, null::text AS texte_court FROM ttt ; -- Identification des rubriques de paie. DROP TABLE IF EXISTS temp.x_ref_rubrique ; CREATE TABLE temp.x_ref_rubrique AS WITH rub_det_1 AS ( SELECT NUMERO_RUB, MAX(LIB_RUBRIQUE) AS LIB_RUBRIQUE, ( NUMERO_RUB BETWEEN 500 AND 9989 OR NUMERO_RUB BETWEEN 11000 AND 19800 ) AND MAX(LIB_RUBRIQUE) NOT LIKE '*%' AS p_detail, CASE WHEN SUM(abs(INFO_COMP)) <> 0 THEN true ELSE false END p_nombre, CASE WHEN SUM(abs(BASE)) <> 0 THEN true ELSE false END p_base, false AS p_heures_payees, false AS p_heures_travaillees, (NUMERO_RUB BETWEEN 500 AND 9989 AND MAX(LIB_RUBRIQUE) NOT LIKE '*%') OR (SUM(abs(MONTANT_SALAR)) <> 0 OR SUM(abs(MONT_PATRONAL)) <> 0) AS p_masse_salariale, NUMERO_RUB BETWEEN 500 AND 9989 AND MAX(LIB_RUBRIQUE) NOT LIKE '*%' AS p_brut, false AS p_avantage_nature, false AS p_frais_imposables, NUMERO_RUB BETWEEN 11000 AND 19800 AND MAX(LIB_RUBRIQUE) NOT LIKE '*%' AS p_cotisation_salarie, NUMERO_RUB BETWEEN 11000 AND 19800 AND MAX(LIB_RUBRIQUE) NOT LIKE '*%' AS p_cotisation_patronale, false AS p_od_net_salarie, false AS p_od_net_patronale, (NUMERO_RUB BETWEEN 500 AND 9989 AND MAX(LIB_RUBRIQUE) NOT LIKE '*%') OR (NUMERO_RUB BETWEEN 11000 AND 19000 AND MAX(LIB_RUBRIQUE) NOT LIKE '*%') AS p_net_imposable, 1 AS c_net_imposable, (NUMERO_RUB BETWEEN 500 AND 9989 AND MAX(LIB_RUBRIQUE) NOT LIKE '*%') OR (NUMERO_RUB BETWEEN 11000 AND 19800 AND MAX(LIB_RUBRIQUE) NOT LIKE '*%') AS p_net_a_payer, 1 AS c_net_a_payer FROM w_ETL016 GROUP BY 1 ), rub_cum_0 AS ( SELECT 'C000' AS code, 'Ecart cumulé' AS texte UNION ALL SELECT 'C001' AS code, 'Heures payées' AS texte UNION ALL SELECT 'C002' AS code, 'Heures travaillées' AS texte UNION ALL SELECT 'C003' AS code, 'Net à payer' AS texte UNION ALL SELECT 'C004' AS code, 'Net imposable' AS texte UNION ALL SELECT 'C005' AS code, 'Avantage en nature' AS texte UNION ALL SELECT 'C006' AS code, 'Cotisations patronales' AS texte UNION ALL SELECT 'C007' AS code, 'Cotisations salariales' AS texte UNION ALL SELECT 'C008' AS code, 'Brut' AS texte UNION ALL SELECT 'C009' AS code, 'Heures Cadres Forfaits Jours' AS texte ) SELECT NUMERO_RUB::text AS code_original, to_char(NUMERO_RUB,'FM00000') AS code, LIB_RUBRIQUE AS texte, null::text AS texte_court, NUMERO_RUB::int AS rang_edition, false AS p_cumul, p_detail AS p_detail, p_nombre AS p_nombre, 0 AS s_nombre, 1 AS c_nombre, p_base AS p_base, 1 AS s_base, 1 AS c_base, false AS p_heures_contrat, 0 AS s_heures_contrat, 1 AS c_heures_contrat, p_heures_payees AS p_heures_payees, 0 AS s_heures_payees, 1 AS c_heures_payees, p_heures_travaillees AS p_heures_travaillees, 0 AS s_heures_travaillees, 1 AS c_heures_travaillees, p_masse_salariale AS p_masse_salariale, case when p_cotisation_patronale OR p_od_net_patronale then 5 else 3 end AS s_masse_salariale, case when p_cotisation_patronale then -1 else 1 end AS c_masse_salariale, p_brut AS p_brut, 3 AS s_brut, 1 AS c_brut, p_avantage_nature AS p_avantage_nature, 3 AS s_avantage_nature, 1 AS c_avantage_nature, p_frais_imposables AS p_frais_imposables, 3 AS s_frais_imposables, 1 AS c_frais_imposables, p_cotisation_salarie AS p_cotisation_salarie, 3 AS s_cotisation_salarie, 1 AS c_cotisation_salarie, p_cotisation_patronale AS p_cotisation_patronale, 5 AS s_cotisation_patronale, -1 AS c_cotisation_patronale, p_od_net_salarie AS p_od_net_salarie, 3 AS s_od_net_salarie, 1 AS c_od_net_salarie, p_od_net_patronale AS p_od_net_patronale, 5 AS s_od_net_patronale, 1 AS c_od_net_patronale, p_net_imposable AS p_net_imposable, 3 AS s_net_imposable, c_net_imposable AS c_net_imposable, p_net_a_payer AS p_net_a_payer, 3 AS s_net_a_payer, c_net_a_payer AS c_net_a_payer FROM rub_det_1 UNION ALL SELECT code AS code_original, code AS code, texte AS texte, null::text AS texte_court, -1 AS rang_edition, true AS p_cumul, false AS p_detail, false AS p_nombre, 0 AS s_nombre, 1 AS c_nombre, false AS p_base, 1 AS s_base, 1 AS c_base, false AS p_heures_contrat, 0 AS s_heures_contrat, 1 AS c_heures_contrat, false AS p_heures_payees, 0 AS s_heures_payees, 1 AS c_heures_payees, false AS p_heures_travaillees, 0 AS s_heures_travaillees, 1 AS c_heures_travaillees, false AS p_masse_salariale, 3 AS s_masse_salariale, -1 AS c_masse_salariale, false AS p_brut, 3 AS s_brut, 1 AS c_brut, false AS p_avantage_nature, 3 AS s_avantage_nature, 1 AS c_avantage_nature, false AS p_frais_imposables, 3 AS s_frais_imposables, 1 AS c_frais_imposables, false AS p_cotisation_salarie, 3 AS s_cotisation_salarie, 1 AS c_cotisation_salarie, false AS p_cotisation_patronale, 5 AS s_cotisation_patronale, -1 AS c_cotisation_patronale, false AS p_od_net_salarie, 3 AS s_od_net_salarie, 1 AS c_od_net_salarie, false AS p_od_net_patronale, 5 AS s_od_net_patronale, 1 AS c_od_net_patronale, false AS p_net_imposable, 3 AS s_net_imposable, 1 AS c_net_imposable, false AS p_net_a_payer, 3 AS s_net_a_payer, 1 AS c_net_a_payer FROM rub_cum_0 ; ]]> x_hst_bulletin.date_debut WHERE x_hst_bulletin.cnt_code_original is null GROUP BY 1 ) UPDATE temp.x_hst_bulletin set cnt_code_original = toto.cnt_code_original, est_hors_periode = 1 FROM toto WHERE x_hst_bulletin.row_id = toto.row_id ; -- ICI : Tous les bulletins doivent avoir un contrat de renseigné. -- A remonter plus tard dans une table spéciale avant suppression pour controle expert. DELETE FROM temp.x_hst_bulletin WHERE cnt_code_original is null ; -- La date min du premier contrat et/ou du premier bulletin détermine le début de la ventilation du salarié. DROP TABLE IF EXISTS w_lim_sal ; CREATE TEMP TABLE w_lim_sal AS WITH toto AS ( SELECT sal_code_original, min(date_debut) AS date_debut, max(case when date_fin = '2099-12-31'::date then base.cti_last_day(current_date) else date_fin end) AS date_fin FROM temp.x_hst_contrat GROUP BY 1 UNION ALL SELECT sal_code_original, min(date_debut) AS date_debut, max(case when date_fin = '2099-12-31'::date then base.cti_last_day(current_date) else date_fin end) AS date_fin FROM temp.x_hst_bulletin GROUP BY 1 ) SELECT sal_code_original, min(date_debut) AS date_debut, to_char(min(date_debut), 'YYYYMM')::int AS mois_debut, max(date_fin) AS date_fin, to_char(max(date_fin), 'YYYYMM')::int AS mois_fin FROM toto GROUP BY 1 ; -- HISTORIQUE ETP Théorique contrat. DROP TABLE IF EXISTS temp.x_hst_etp_contrat ; CREATE TABLE temp.x_hst_etp_contrat AS SELECT w_cnt.ety_code_original, w_cnt.sal_code_original, w_cnt.cnt_code_original, GREATEST(w_cnt.DATE_ENTREE, w_lim_sal.date_debut) AS date_effet, w_cnt.PRC_TEMP_PAR / 100 AS etp_contrat FROM w_ETL009 w_cnt JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original ; -- HISTORIQUE CSP. DROP TABLE IF EXISTS temp.x_hst_categorie_socio_professionnelle ; CREATE TABLE temp.x_hst_categorie_socio_professionnelle AS SELECT w_cnt.ety_code_original, w_cnt.sal_code_original, w_cnt.cnt_code_original, GREATEST(w_cnt.DATE_ENTREE, w_lim_sal.date_debut) AS date_effet, LOWER(C_EMPLOI_PCSESE) AS categorie_socio_professionnelle_code_original FROM w_ETL009 w_cnt JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original ; -- HISTORIQUE Motif de début. DROP TABLE IF EXISTS temp.x_hst_motif_debut_contrat ; CREATE TABLE temp.x_hst_motif_debut_contrat AS SELECT w_cnt.ety_code_original, w_cnt.sal_code_original, w_cnt.cnt_code_original, GREATEST(w_cnt.DATE_ENTREE, w_lim_sal.date_debut) AS date_effet, CASE WHEN w_cnt.MOTIF_EMBAUCHE <> '' THEN 'GCMEB' || w_cnt.MOTIF_EMBAUCHE WHEN w_cnt.MOTIF_CDD <> '' THEN 'MRCDD' || w_cnt.MOTIF_CDD ELSE '' END AS motif_debut_code_original FROM w_ETL009 w_cnt JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original ; -- HISTORIQUE Motif de fin. DROP TABLE IF EXISTS temp.x_hst_motif_fin_contrat ; CREATE TABLE temp.x_hst_motif_fin_contrat AS SELECT w_cnt.ety_code_original, w_cnt.sal_code_original, w_cnt.cnt_code_original, GREATEST(w_cnt.DATE_ENTREE, w_lim_sal.date_debut) AS date_effet, CASE WHEN w_cnt.DEPART_CAUSE <> '' THEN 'CCDEP' || w_cnt.DEPART_CAUSE ELSE '' END AS motif_fin_code_original FROM w_ETL009 w_cnt JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original ; -- HISTORIQUE Types de contrat. DROP TABLE IF EXISTS temp.x_hst_type_contrat ; CREATE TABLE temp.x_hst_type_contrat AS SELECT w_cnt.ety_code_original, w_cnt.sal_code_original, w_cnt.cnt_code_original, GREATEST(w_cnt.DATE_ENTREE, w_lim_sal.date_debut) AS date_effet, w_cnt.NATURE_CONTRAT AS type_contrat_code_original FROM w_ETL009 w_cnt JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original ; -- -- HISTORIQUE CSP. -- DROP TABLE IF EXISTS temp.x_hst_organisme_cotisation -- ; -- CREATE TABLE temp.x_hst_organisme_cotisation AS -- SELECT -- w_cnt.ent_code_original||'-'||w_cnt.ets_code_original AS ety_code_original, -- w_cnt.sal_code_original, -- w_cnt.cnt_code_original, -- greatest(w_cnt.date_debut, w_lim_sal.date_debut) AS date_effet, -- w_cnt.codinseeemploi2003 AS categorie_socio_professionnelle_code_original -- FROM w_cnt -- JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original -- ; -- HISTORIQUE CSP. DROP TABLE IF EXISTS temp.x_hst_qualification ; CREATE TABLE temp.x_hst_qualification AS SELECT w_cnt.ety_code_original, w_cnt.sal_code_original, w_cnt.cnt_code_original, GREATEST(w_cnt.DATE_ENTREE, w_lim_sal.date_debut) AS date_effet, w_cnt.CODE_EMPLOI AS qualification_code_original FROM w_ETL009 w_cnt JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original ; -- HISTORIQUE CSP. DROP TABLE IF EXISTS temp.x_hst_statut ; CREATE TABLE temp.x_hst_statut AS SELECT w_cnt.ety_code_original, w_cnt.sal_code_original, w_cnt.cnt_code_original, GREATEST(w_cnt.DATE_ENTREE, w_lim_sal.date_debut) AS date_effet, w_cnt.CATEGORIE AS statut_code_original FROM w_ETL009 w_cnt JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original ; -- HISTORIQUE CSP. DROP TABLE IF EXISTS temp.x_hst_type_temps_travail ; CREATE TABLE temp.x_hst_type_temps_travail AS SELECT w_cnt.ety_code_original, w_cnt.sal_code_original, w_cnt.cnt_code_original, GREATEST(w_cnt.DATE_ENTREE, w_lim_sal.date_debut) AS date_effet, w_cnt.MODALITE_TRAV::text||'-'||w_cnt.PRC_TEMP_PAR::text AS type_temps_travail_code_original FROM w_ETL009 w_cnt JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original ; -- HISTORIQUE CSP. DROP TABLE IF EXISTS temp.x_hst_service ; CREATE TABLE temp.x_hst_service AS SELECT w_cnt.ety_code_original, w_cnt.sal_code_original, w_cnt.cnt_code_original, GREATEST(w_cnt.DATE_ENTREE, w_lim_sal.date_debut) AS date_effet, w_cnt.CTR_A_02 AS service_code_original FROM w_ETL009 w_cnt JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original ; -- HISTORIQUE CSP. DROP TABLE IF EXISTS temp.x_hst_code_emploi ; CREATE TABLE temp.x_hst_code_emploi AS SELECT w_cnt.ety_code_original, w_cnt.sal_code_original, w_cnt.cnt_code_original, GREATEST(w_cnt.DATE_ENTREE, w_lim_sal.date_debut) AS date_effet, ''::text AS code_emploi_code_original FROM w_ETL009 w_cnt JOIN w_lim_sal ON w_lim_sal.sal_code_original = w_cnt.sal_code_original ; -- HISTORIQUE GRILLE. DROP TABLE IF EXISTS temp.x_hst_grille ; CREATE TABLE temp.x_hst_grille AS SELECT null::text as ety_code_original, null::text as sal_code_original, null::text as cnt_code_original, null::date as date_effet, null::text as grille_code_original limit 0 ; ]]> = 202101 ) AS suqb ) SELECT bulletins.bul_id, bulletins.ety_code_original, bulletins.sal_code_original, bulletins.cnt_code_original, bulletins.bul_code_original, bulletins.date_debut, bulletins.date_fin, bulletins.mois_paie AS mois_activite, bulletins.date_paie, bulletins.mois_paie, NUMERO_RUB::text AS rub_code_original, COALESCE(nullif(BASE, 0), 0)::numeric AS base, COALESCE(nullif(TAUX_SALAR, 0), 0)::numeric AS txsal, COALESCE(nullif(MONTANT_SALAR, 0), 0)::numeric AS mntsal, COALESCE(nullif(TAUX_PATRONAL, 0), 0)::numeric AS txpat, COALESCE(nullif(MONT_PATRONAL, 0), 0)::numeric AS mntpat FROM temp.x_hst_bulletin AS bulletins JOIN temp.x_ref_ets ON x_ref_ets.ety_code_original = bulletins.ety_code_original JOIN w_ETL016 ON bulletins.bul_code_original = w_ETL016.bul_code_original WHERE 1=1 AND bulletins.mois_paie >= 202101 AND (1!=1 OR MONTANT_SALAR != 0 OR MONT_PATRONAL != 0 OR BASE != 0) UNION ALL SELECT bul_id, ety_code_original, sal_code_original, cnt_code_original, bul_code_original, date_debut, date_fin, mois_paie AS mois_activite, date_paie, mois_paie, rub AS rub_code_original, case when rub in ('C001', 'C002', 'C009') then val::numeric else 0::numeric end AS base, 0 AS txsal, case when rub in ('C003', 'C004', 'C008') then val::numeric when rub = 'C007' then -val::numeric else 0::numeric end AS mnt_sal, 0 AS txpat, case when rub = 'C006' then val::numeric else 0::numeric end AS mnt_pat FROM w_cum ; ]]> '' THEN w_ETL010.IMPUTATION_XX ELSE '0' END::bigint,0) AS section_analytique_id, w_ETL010.IMPUTATION_XX AS section_analytique_code_original, COALESCE(nullif(PRC_XX, 0), 100.0) AS pct FROM temp.x_hst_bulletin LEFT JOIN w_ETL010 ON 1=1 AND x_hst_bulletin.ety_code_original = w_ETL010.ety_code_original AND x_hst_bulletin.cnt_code_original = w_ETL010.cnt_code_original ) , ven AS ( SELECT bul_id, section_analytique_id, section_analytique_code_original, base.cti_division(pct, sum(pct) over (partition by bul_id)) AS ratio FROM base ) SELECT bul_id, section_analytique_id, section_analytique_code_original, sum(ratio) AS ratio FROM ven GROUP BY 1,2,3 ; ]]>