'' 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
;
]]>