= 79900
THEN false
ELSE t_hbns.coderubrique is not null
END as brut,
CASE WHEN 1=1
AND t_rub.coderubrique > 19990
AND t_rub.dasavnat != 1
and t_hbns.coderubrique is not null
THEN true
ELSE false
END as odns,
false as odnp,
false as cosd,
false as copa
from prod_sage.t_rub
left join prod_sage.t_hbns on t_hbns.coderubrique = t_rub.coderubrique
where 1=1
and t_rub.imprimable NOT IN (1, 3)
AND t_hbns.valeurmontant != 0
group by 1,2,3
UNION
select
t_rub.coderubrique,
CASE WHEN 1!=1
OR t_rub.dasavnat = 1
OR t_rub.coderubrique >= 79900
THEN false
ELSE T_BNSSAL.coderubrique is not null
END as brut,
CASE WHEN 1=1
AND t_rub.coderubrique > 19990
AND t_rub.dasavnat != 1
and T_BNSSAL.coderubrique is not null
THEN true
ELSE false
END as odns,
false as odnp,
false as cosd,
false as copa
from prod_sage.t_rub
left join prod_sage.t_bnssal on t_bnssal.coderubrique = t_rub.coderubrique
where 1=1
and t_rub.imprimable NOT IN (1, 3)
AND t_bnssal.valeurmontantsalarial != 0
group by 1,2,3
UNION
select
t_rub.coderubrique,
false as brut,
false as odns,
false as odnp,
true as cosd,
true as copa
FROM prod_sage.t_hcot
JOIN prod_sage.t_rub ON t_rub.coderubrique = t_hcot.coderubrique
WHERE 1=1
AND t_rub.imprimable != 1
and (false
or t_hcot.valeursmontantsalarial != 0
OR t_hcot.valeursmontantpatronal != 0)
group by 1,2,3
UNION
select
t_rub.coderubrique,
false as brut,
false as odns,
false as odnp,
true as cosd,
true as copa
FROM prod_sage.T_COTSAL
JOIN prod_sage.t_rub ON t_rub.coderubrique = T_COTSAL.coderubrique
WHERE 1=1
AND t_rub.imprimable != 1
and (false
or t_cotsal.valeurmontantsal != 0
or t_cotsal.valeurmontantpatronal != 0)
group by 1,2,3
) as subq
group by 1) as subqq
where 1=1
AND t_rubriques.code_original = subqq.coderubrique
AND NOT t_rubriques.user_modified
;
]]>
= to_char(rhp('rhprovider_start')::date, 'YYYY')::int
AND date_part('year', t_hcum.datehist) <= date_part('year', now() + interval '5 years')
GROUP BY 1,2,3,4
HAVING sum(round((CASE WHEN entite IN (3, 4, 6, 7, 8, 84, 86) THEN valeurcumul ELSE 0 END)::numeric,2))::numeric != 0) as subq
group by 1,2,3
;
]]>
= to_char(rhp('rhprovider_start')::date, 'YYYY')::int
AND date_part('year', t_hcum.datehist) <= date_part('year', now() + interval '5 years')
GROUP BY 1,2,3,4
HAVING sum(round((CASE WHEN entite IN (3, 4, 6, 7, 8, 84, 86) THEN valeurcumul ELSE 0 END)::numeric,2))::numeric != 0) as subq
group by 1,2,3
;
]]>
aux dates de fin.
DROP TABLE IF EXISTS w_hst_contrat_0
;
CREATE TEMP TABLE w_hst_contrat_0 AS
SELECT *
FROM prod_sage.t_hst_contrat
;
UPDATE w_hst_contrat_0 SET
datedebutcontrat = datefincontrat,
datefincontrat = datedebutcontrat
WHERE datedebutcontrat > datefincontrat
;
-- Préparation contrats (pb chevauchement)
DROP TABLE IF EXISTS w_hst_contrat
;
CREATE TEMP TABLE w_hst_contrat AS
WITH hst_cnt as (
SELECT
-- nettoie l'historique (infoencours = 0) de manière séquentielle.
case when lead(datedebutcontrat) over w = datedebutcontrat then true else false end as to_ex1, -- date de début suivante identique à celle de la ligne actuelle
-- nettoie l'historique (infoencours = 0) par rapport à la ligne infoencours.
case when last_value(datedebutcontrat) over w <= datedebutcontrat and infoencours = 0 then true else false end as to_ex2, -- date infoencours <= date ligne actuelle
*
FROM w_hst_contrat_0
where 1=1
and datedebutcontrat is not null -- la date de début doit être renseignée.
and case when infoencours = 0 and datefincontrat is null then false else true end -- l'historique doit avoir des des dates de fin.
window w as (partition by numsalarie order by infoencours, datedebutcontrat, datehist rows between UNBOUNDED PRECEDING and UNBOUNDED following)),
hst_soc as (
SELECT
-- nettoie l'historique (infoencours = 0) de manière séquentielle.
case when lead(datedepart) over w = datedepart then true else false end as to_ex1, -- date de début suivante identique à celle de la ligne actuelle
-- nettoie l'historique (infoencours = 0) par rapport à la ligne infoencours.
case when last_value(datedepart) over w <= datedepart and infoencours = 0 then true else false end as to_ex2, -- date infoencours <= date ligne actuelle
*
FROM prod_sage.t_hst_infossociete
where 1=1
and datedepart is not null -- la date de début doit être renseignée.
and case when infoencours = 0 and datedepart is null then false else true end -- l'historique doit avoir des des dates d'embauche.
window w as (partition by numsalarie order by infoencours, datedepart, datehist rows between UNBOUNDED PRECEDING and UNBOUNDED following))
-- selection avec correction des dates de fin chevauchantes.
select
rank() OVER (ORDER BY hst_cnt.numsalarie, hst_cnt.infoencours, datedebutcontrat, hst_cnt.datehist) as sequence,
hst_cnt.numsalarie::text||'-'::text||rank() OVER (PARTITION BY hst_cnt.numsalarie ORDER BY hst_cnt.infoencours, datedebutcontrat, hst_cnt.datehist) as cti_cnt,
datedebutcontrat::date as date_debut,
(case when lead(datedebutcontrat) over w <= datefincontrat then lead(datedebutcontrat) over w - '1 day'::interval else coalesce(datefincontrat, '2099-12-31'::date) end)::date as date_fin,
coalesce(hst_soc.codemotifdepart, chr(1) || '*') as soc_codemotifdepart,
hst_cnt.*
from hst_cnt
left join hst_soc on 1=1
and hst_soc.numsalarie = hst_cnt.numsalarie
and hst_soc.datedepart = hst_cnt.datefincontrat
AND NOT hst_soc.to_ex1
AND NOT hst_soc.to_ex2
where 1=1
AND NOT hst_cnt.to_ex1
AND NOT hst_cnt.to_ex2
window w as (PARTITION BY hst_cnt.numsalarie ORDER BY hst_cnt.infoencours, datedebutcontrat, hst_cnt.datehist)
;
CREATE INDEX i_hst_contrat_numsalarie ON w_hst_contrat USING btree(numsalarie);
CREATE INDEX i_hst_contrat_dates ON w_hst_contrat USING btree(date_debut, date_fin);
-- Salaries
DROP TABLE IF EXISTS w_sal_ets
;
CREATE TEMP TABLE w_sal_ets AS
with hst_pre as (
select
numsalarie,
coalesce(dateentree, datedebut) as dateentree,
datehist,
codeetab,
datesortie,
infoencours
FROM prod_sage.t_hst_etablissement)
, hst_corr as (
select
numsalarie,
coalesce(case when infoencours = 1 and dateentree is null then greatest(lag(datehist) over w, lag(dateentree) over w) + '1 day'::interval else dateentree end, '1900-01-01'::date) as dateentree,
datehist,
codeetab,
datesortie,
infoencours
FROM hst_pre
where not (infoencours = 0 and dateentree is null) -- On exclu les historiques (infoencours = 0) avec une dateentree nulle.
window w as (partition by numsalarie order by infoencours, dateentree, datehist rows between UNBOUNDED PRECEDING and UNBOUNDED following))
, hst_ets as (
select
lead(dateentree) over w,
case when lead(dateentree) over w = dateentree then true else false end as to_ex1,
case when last_value(dateentree) over w <= dateentree and infoencours = 0 then true else false end as to_ex2
,*
FROM hst_corr
where dateentree is not null
window w as (partition by numsalarie order by infoencours, dateentree, datehist rows between UNBOUNDED PRECEDING and UNBOUNDED following))
select
rank() OVER (ORDER BY numsalarie, infoencours, dateentree, datehist) as sequence,
numsalarie::text||'-'::text||rank() OVER w as cti_ets,
case when rank() OVER w = 1
then '1900-01-01'::date
else dateentree::date
end as date_debut,
case when rank() OVER wd = 1
then '2099-12-31'::date
else (case when lead(dateentree) over w <= coalesce(datesortie, '2099-12-31'::date) then lead(dateentree) over w - '1 day'::interval else coalesce(datesortie, '2099-12-31'::date) end)::date
end as date_fin,
min(dateentree::date) over wu as date_entree_ets,
max(coalesce(datesortie::date, '2099-12-31'::date)) over wu as date_sortie_ets,
*
from hst_ets
where 1=1
AND NOT to_ex1
AND NOT to_ex2
window w as (PARTITION BY numsalarie ORDER BY infoencours, dateentree, datehist),
wd as (PARTITION BY numsalarie ORDER BY infoencours desc, dateentree desc, datehist desc),
wu as (PARTITION BY numsalarie)
;
CREATE INDEX i_sal_ets_numsalarie ON w_sal_ets USING btree(numsalarie);
CREATE INDEX i_sal_ets_dates ON w_sal_ets USING btree(date_debut, date_fin);
-- Historique des affectations. On ne se base plus que sur la date de début.
DROP TABLE IF EXISTS w_hst_aff
;
CREATE TEMP TABLE w_hst_aff AS
with hst_corr as (
select
coalesce(case when infoencours = 1 and datedebut is null then greatest(lag(datehist) over w, lag(datedebut) over w) + '1 day'::interval else datedebut end, '1900-01-01'::date) as datedebut,
numsalarie,
datehist,
infoencours,
departement,
service,
unite,
categorie,
emploioccupe,
qualification,
niveau,
coefficient,
indice
FROM prod_sage.t_hst_affectation
where true
and not (infoencours = 0 and datedebut is null) -- Mais on exclu les historiques (infoencours = 0) avec une datedebut nulle.
window w as (partition by numsalarie order by infoencours, datedebut, datehist rows between UNBOUNDED PRECEDING and UNBOUNDED following))
, hst_aff as (
select
lead(datedebut) over w,
case when lead(datedebut) over w = datedebut then true else false end as to_ex1,
case when last_value(datedebut) over w <= datedebut and infoencours = 0 then true else false end as to_ex2
,*
FROM hst_corr
window w as (partition by numsalarie order by infoencours, datedebut, datehist rows between UNBOUNDED PRECEDING and UNBOUNDED following))
select
rank() OVER (ORDER BY numsalarie, infoencours, datedebut, datehist) as sequence,
numsalarie::text||'-'::text||rank() OVER w as cti_aff,
case when rank() OVER w = 1
then '1900-01-01'::date
else datedebut::date
end as date_debut,
case when rank() OVER wd = 1
then '2099-12-31'::date
else lead(datedebut) over w - '1 day'::interval
end as date_fin,
*
from hst_aff
where 1=1
AND NOT to_ex1
AND NOT to_ex2
window w as (PARTITION BY numsalarie ORDER BY infoencours, datedebut, datehist),
wd as (PARTITION BY numsalarie ORDER BY infoencours desc, datedebut desc, datehist desc),
wu as (PARTITION BY numsalarie)
;
CREATE INDEX i_hst_aff_numsalarie ON w_hst_aff USING btree(numsalarie);
CREATE INDEX i_hst_aff_dates ON w_hst_aff USING btree(date_debut, date_fin);
-- Historique des postes.
DROP TABLE IF EXISTS w_hst_pst
;
CREATE TEMP TABLE w_hst_pst AS
with hst_corr as (
select
coalesce(case when infoencours = 1 and datedebut is null then greatest(lag(datehist) over w, lag(datedebut) over w) + '1 day'::interval else datedebut end, '1900-01-01'::date) as datedebut,
numsalarie,
datehist,
infoencours,
codeposte
FROM prod_sage.t_hst_poste
where true
and not (infoencours = 0 and datedebut is null) -- Mais on exclu les historiques (infoencours = 0) avec une datedebut nulle.
and trim(codeposte) is distinct from ''
window w as (partition by numsalarie order by infoencours, datehist, datedebut rows between UNBOUNDED PRECEDING and UNBOUNDED following))
, hst_pst as (
select
lead(datedebut) over w,
case when lead(datedebut) over w = datedebut then true else false end as to_ex1,
case when last_value(datedebut) over w <= datedebut and infoencours = 0 then true else false end as to_ex2
,*
FROM hst_corr
window w as (partition by numsalarie order by infoencours, datehist, datedebut rows between UNBOUNDED PRECEDING and UNBOUNDED following))
select
rank() OVER (ORDER BY numsalarie, infoencours, datedebut, datehist) as sequence,
numsalarie::text||'-'::text||rank() OVER w as cti_pst,
case when rank() OVER w = 1
then '1900-01-01'::date
else datedebut::date
end as date_debut,
case when rank() OVER wd = 1
then '2099-12-31'::date
else lead(datedebut) over w - '1 day'::interval
end as date_fin,
*
from hst_pst
where 1=1
AND NOT to_ex1
AND NOT to_ex2
window w as (PARTITION BY numsalarie ORDER BY infoencours, datedebut, datehist),
wd as (PARTITION BY numsalarie ORDER BY infoencours desc, datedebut desc, datehist desc),
wu as (PARTITION BY numsalarie)
;
CREATE INDEX i_hst_pst_numsalarie ON w_hst_pst USING btree(numsalarie);
CREATE INDEX i_hst_pst_dates ON w_hst_pst USING btree(date_debut, date_fin);
-- Historique des affections au travers des bulletins.
DROP TABLE IF EXISTS w_hst_affbul
;
CREATE TEMP TABLE w_hst_affbul AS
with temp_affbul as (
select
numsalarie,
datehist::date,
case when typedubulletin != 0 then base.cti_first_day(datehist::date) else datehist::date end as datehist_cti, -- Permet de revenir vers un cas standard de bulletin exceptionnel émi le 1er du mois.
debutpaiement::date,
finpaiement::date,
departement,
service,
unite,
categorie,
codeetab,
typedubulletin
from prod_sage.t_haff
where datehist != '2069-09-16'::date) -- TOUS les datehist à 2069-09-16 n'ont aucune données renseignées.
select
numsalarie,
numsalarie::text||'-'::text||rank() OVER w AS cti_affbul,
datehist,
typedubulletin,
coalesce(lag(datehist_cti + 1) over w, base.cti_first_day(datehist_cti)) as date_debut,
datehist_cti as date_fin,
debutpaiement::date,
finpaiement::date,
departement,
service,
unite,
categorie,
codeetab
from temp_affbul
window w as (partition by numsalarie order by datehist_cti, typedubulletin)
;
CREATE INDEX i_hst_affbul_numsalarie ON w_hst_affbul USING btree(numsalarie);
CREATE INDEX i_hst_affbul_dates ON w_hst_affbul USING btree(date_debut, date_fin);
-- Historique des bulletins (basé sur l'historique des cumuls t_hcum + w_periode pour le mois en cours).
DROP TABLE IF EXISTS w_hst_bul
;
CREATE TEMP TABLE w_hst_bul AS
with w_hcum as (
select
numsalarie,
datehist::date,
case when typedubulletin != 0 then base.cti_first_day(datehist::date) else datehist::date end as datehist_cti, -- Permet de revenir vers un cas standard de bulletin exceptionnel émi le 1er du mois.
typedubulletin,
max(case when codeconstante = 'ETP' then VALEURCUMUL else null end) as cumul_68,
max(case when codeconstante = 'HORAIRE' then VALEURCUMUL else null end) as cumul_81
from prod_sage.t_hcum
join prod_sage.t_cst on 1=1
AND typeconstante = 6
AND t_cst.CodeOperande1 = t_hcum.entite
where datehist != '2069-09-16'::date -- TOUS les datehist à 2069-09-16 n'ont aucune données renseignées.
group by 1,2,3,4
union
select
numsalarie,
date_paie_encours as datehist,
date_paie_encours as datehist_cti,
0 as typedubulletin,
null as cumul_68,
null as cumul_81
from prod_sage.t_bnssal
join w_periode on true
where t_bnssal.valeurmontantsalarial != 0 -- repris depuis l'historique de la paie.
group by 1,2,3,4
union
select
numsalarie,
date_paie_encours as datehist,
date_paie_encours as datehist_cti,
0 as typedubulletin,
null as cumul_68,
null as cumul_81
FROM prod_sage.t_cotsal
join w_periode on true
WHERE false
OR t_cotsal.valeurmontantsal != 0
or t_cotsal.valeurmontantpatronal != 0
group by 1,2,3,4)
, w_hcum2 as (
select
numsalarie,
numsalarie::text||'-'::text||rank() OVER w AS cti_bul,
coalesce(cumul_68, -- si la valeur est renseignée sur la ligne courante, on la prend.
(max(case when cumul_68 is null then null else ARRAY[extract(epoch from datehist_cti)::numeric, cumul_68] end) over wb)[2], -- sinon on prend la valeur renseignée la plus proche dans le passé
(min(case when cumul_68 is null then null else ARRAY[extract(epoch from datehist_cti)::numeric, cumul_68] end) over wf)[2], -- sinon on prend la valeur renseignée la plus proche dans le futur
null -- sinon on prend null
) as cumul_68,
coalesce(cumul_81, -- si la valeur est renseignée sur la ligne courante, on la prend.
(max(case when cumul_81 is null then null else ARRAY[extract(epoch from datehist_cti)::numeric, cumul_81] end) over wb)[2], -- sinon on prend la valeur renseignée la plus proche dans le passé
(min(case when cumul_81 is null then null else ARRAY[extract(epoch from datehist_cti)::numeric, cumul_81] end) over wf)[2], -- sinon on prend la valeur renseignée la plus proche dans le futur
null -- sinon on prend null
) as cumul_81,
datehist,
datehist_cti,
typedubulletin,
coalesce(lag(datehist_cti + 1) over w, base.cti_first_day(datehist_cti)) as date_debut,
datehist_cti as date_fin
from w_hcum
window w as (partition by numsalarie order by datehist_cti, typedubulletin),
wb as (PARTITION BY numsalarie ORDER BY datehist_cti, typedubulletin rows unbounded preceding), -- sélectionne les lignes précédentes
wf as (PARTITION BY numsalarie ORDER BY datehist_cti, typedubulletin rows between current row and unbounded following)) -- sélectionne les lignes suivantes
select
numsalarie,
cti_bul,
cumul_68,
cumul_81,
coalesce(
CASE
WHEN sage_temps_travail.valeur = 'ETP' THEN cumul_68 -- Pour calculer un ETP contrat théorique, on prend la valeur ETP si non nulle...
WHEN sage_temps_travail.valeur = 'HORAIRE' THEN case when round(cumul_81::numeric, 2) = 151.67 then 1.0 else round(cumul_81::numeric, 2) / 151.67 end
END,
CASE
WHEN sage_temps_travail.valeur = 'HORAIRE' THEN case when round(cumul_81::numeric, 2) = 151.67 then 1.0 else round(cumul_81::numeric, 2) / 151.67 end
WHEN sage_temps_travail.valeur = 'ETP' THEN cumul_68 -- ... sinon on prend le nombre d'heures contrat...
END,
1.0) as etp_contrat, -- ... sinon on met 1 par défaut.
datehist,
datehist_cti,
typedubulletin,
date_debut,
date_fin
from w_hcum2
join (SELECT valeur FROM rh.t_divers WHERE code = 'SAGE_TEMPS_TRAVAIL') as sage_temps_travail on true
;
CREATE INDEX i_hst_bul_numsalarie ON w_hst_bul USING btree(numsalarie);
CREATE INDEX i_hst_bul_dates ON w_hst_bul USING btree(date_debut, date_fin);
-- Historique codes insee
DROP TABLE IF EXISTS w_hst_insee
;
CREATE TEMP TABLE w_hst_insee AS
with hst_insee as (
select
lead(datedebut) over w,
case when lead(datedebut) over w = datedebut then true else false end as to_ex1,
case when last_value(datedebut) over w <= datedebut and infoencours = 0 then true else false end as to_ex2
,*
FROM prod_sage.t_hst_dadsu
WHERE case when infoencours = 0 and datedebut is null then false else true end -- on exclu de facto les datedebut null pour les infos pas en cours.
window w as (partition by numsalarie order by infoencours, datedebut, datehist rows between UNBOUNDED PRECEDING and UNBOUNDED following))
select
rank() OVER (ORDER BY numsalarie, infoencours, datedebut, datehist) as sequence,
numsalarie::text||'-'::text||rank() OVER w as cti_insee,
numsalarie,
coalesce(lag(datedebut::date + 1) over w, '0001-01-01'::date) as date_debut,
coalesce(datedebut::date, '2099-12-31'::date) as date_fin,
coalesce(nullif(codeinsee, ''), -- si la valeur est renseignée sur la ligne courante, on la prend.
(max(ARRAY[case when codeinsee = '' then null else coalesce(datedebut::date, '2099-12-31'::date)::text end, nullif(codeinsee, '')::text]) over wb)[2], -- sinon on prend la valeur renseignée la plus proche dans le passé
(min(ARRAY[case when codeinsee = '' then null else coalesce(datedebut::date, '2099-12-31'::date)::text end, nullif(codeinsee, '')::text]) over wf)[2], -- sinon on prend la valeur renseignée la plus proche dans le futur
null -- sinon on prend null
) as codeinsee
from hst_insee
where 1=1
AND NOT to_ex1
AND NOT to_ex2
window w as (PARTITION BY numsalarie ORDER BY infoencours, datedebut, datehist),
wb as (PARTITION BY numsalarie ORDER BY infoencours, datedebut, datehist rows unbounded preceding), -- sélectionne les lignes précédentes
wf as (PARTITION BY numsalarie ORDER BY infoencours, datedebut, datehist rows between current row and unbounded following) -- sélectionne les lignes suivantes
;
CREATE INDEX i_hst_insee_numsalarie ON w_hst_insee USING btree(numsalarie);
CREATE INDEX i_hst_insee_dates ON w_hst_insee USING btree(date_debut, date_fin);
-- Identification des dates limites pour chaque salariés (pour des raisons de performances).
-- Basé sur les contrats et les bulletins (historique des cumuls t_hcum).
DROP TABLE IF EXISTS w_lim_sal
;
CREATE TEMP TABLE w_lim_sal AS
select
numsalarie,
matriculesalarie as matricule,
min(date_debut) as date_debut,
max(date_fin) as date_fin
from (
select
numsalarie,
min(date_debut) as date_debut,
coalesce(nullif(max(date_fin), '2099-12-31'::date), max(date_paie_encours)) as date_fin -- 2099-12-31 correspond à "contrat en cours" => on met le mois de paie en cours (et surtout pas current_date).
from w_hst_contrat, w_periode
group by 1
UNION ALL
select
numsalarie,
min(date_debut) as date_debut,
max(date_fin) as date_fin
from w_hst_bul
group by 1
) as subq
join prod_sage.t_sal on t_sal.sa_compteurnumero = subq.numsalarie
group by 1,2
;
CREATE INDEX i_lim_sal_numsalarie ON w_lim_sal USING btree(numsalarie);
CREATE INDEX i_lim_sal_dates ON w_lim_sal USING btree(date_debut, date_fin);
DROP TABLE IF EXISTS w_evt_mois
;
CREATE TEMP TABLE w_evt_mois AS
with raw_data as(
select
w_lim_sal.numsalarie,
w_lim_sal.matricule,
cti_cnt, -- contrat
cti_ets, -- ets.
cti_aff, -- affectations
cti_pst, -- postes
cti_affbul, -- affectations bulletins
cti_bul, -- bulletins
cti_insee, -- insee
p_calendrier.date
from base.p_calendrier
join w_lim_sal on p_calendrier.date between w_lim_sal.date_debut and w_lim_sal.date_fin
left join w_hst_contrat on 1=1
and w_hst_contrat.numsalarie = w_lim_sal.numsalarie
and p_calendrier.date between w_hst_contrat.date_debut and w_hst_contrat.date_fin
left join w_sal_ets on 1=1
and w_sal_ets.numsalarie = w_lim_sal.numsalarie
and p_calendrier.date between w_sal_ets.date_debut and w_sal_ets.date_fin
left join w_hst_insee on 1=1
and w_hst_insee.numsalarie = w_lim_sal.numsalarie
and p_calendrier.date between w_hst_insee.date_debut and w_hst_insee.date_fin
left join w_hst_aff on 1=1
and w_hst_aff.numsalarie = w_lim_sal.numsalarie
and p_calendrier.date between w_hst_aff.date_debut and w_hst_aff.date_fin
left join w_hst_pst on 1=1
and w_hst_pst.numsalarie = w_lim_sal.numsalarie
and p_calendrier.date between w_hst_pst.date_debut and w_hst_pst.date_fin
left join w_hst_affbul on 1=1
and w_hst_affbul.numsalarie = w_lim_sal.numsalarie
and p_calendrier.date between w_hst_affbul.date_debut and w_hst_affbul.date_fin
left join w_hst_bul on 1=1
and w_hst_bul.numsalarie = w_lim_sal.numsalarie
and p_calendrier.date between w_hst_bul.date_debut and w_hst_bul.date_fin
where 1!=1
or cti_cnt is not null -- on ne conserve que les évenements ou il y a un contrat OU
or cti_bul is not null -- un bulletin
),
clustering as (
select
numsalarie,
matricule,
cti_cnt,
cti_ets,
cti_aff,
cti_pst,
cti_affbul,
cti_bul,
cti_insee,
date,
case when lag(coalesce(cti_cnt, '')||coalesce(cti_ets, '')||coalesce(cti_aff, '')||coalesce(cti_pst, '')||coalesce(cti_affbul, '')||coalesce(cti_bul, '')||coalesce(cti_insee, '')) over w
= coalesce(cti_cnt, '')||coalesce(cti_ets, '')||coalesce(cti_aff, '')||coalesce(cti_pst, '')||coalesce(cti_affbul, '')||coalesce(cti_bul, '')||coalesce(cti_insee, '') then null else true end as new_cluster
from raw_data
window w as (partition by numsalarie order by date)),
assigned_clustering as (
select
numsalarie,
matricule,
cti_cnt,
cti_ets,
cti_aff,
cti_pst,
cti_affbul,
cti_bul,
cti_insee,
date,
to_char(date, 'YYYYMM')::int as mois,
count(new_cluster) over (order by numsalarie, date rows unbounded preceding) as cluster_id
from clustering)
select
numsalarie,
matricule,
cti_cnt,
cti_ets,
cti_aff,
cti_pst,
cti_affbul,
cti_bul,
cti_insee,
mois, -- FIXME PAS SUR PAS SUR PAS SUR PAS SUR PAS SUR PAS SUR PAS SUR PAS SUR PAS SUR PAS SUR PAS SUR PAS SUR
min(date) AS date_debut,
max(date) AS date_fin
from assigned_clustering
group by 1,2,3,4,5,6,7,8,9,10, cluster_id
;
]]>
= 79900
THEN 0
ELSE t_hbns.valeurmontant END)::numeric AS montant_brut,
(CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) *
(CASE WHEN 1!=1
OR t_rubriques.code_calcul NOT IN ('3')
OR t_rub.coderubrique >= 79900
THEN 0
ELSE t_hbns.valeurmontant END)::numeric AS montant_frais_imposables,
t_hbns.valeurtaux::numeric AS taux_sal,
0::numeric AS montant_sal,
0::numeric AS taux_pat,
0::numeric AS montant_pat,
((CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * CASE WHEN t_rub.coderubrique > 19990 AND t_rub.dasavnat != 1 THEN t_hbns.valeurmontant ELSE 0 END)::numeric AS od_net,
0 as od_net_p,
(CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) *
(CASE WHEN 1!=1
OR t_rub.dasavnat = 1 AND montantdequivalence = 0
OR t_rubriques.code_calcul = '4'
THEN t_hbns.valeurmontant
ELSE 0 END)::numeric AS avt_nat,
0 AS net_imposable,
0 AS net_a_payer,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee,
t_rub.nodordre AS ordre,
0 AS type_rub
FROM prod_sage.t_hbns
JOIN w_profils ON 1=1
AND w_profils.numsalarie = t_hbns.numsalarie
AND t_hbns.datehist between w_profils.date_debut and w_profils.date_fin
JOIN prod_sage.t_rub ON t_rub.coderubrique = t_hbns.coderubrique
JOIN rh.t_rubriques ON t_rubriques.code_original = t_rub.coderubrique
WHERE 1=1
AND t_hbns.datehist >= rhp('rhprovider_start')::date
AND t_rub.imprimable NOT IN (1, 3)
AND t_hbns.valeurmontant != 0
and t_rubriques.code_calcul NOT IN ('9')
;
-- BRUT et od (paie non cloturee)
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
date_paie_encours AS date,
0 as typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', date_paie_encours)::text||lpad(date_part('month', date_paie_encours), 2, '0'))::numeric AS mois,
t_rub.coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
T_BNSSAL.valeurbase::numeric AS base,
T_BNSSAL.valeurnombre::numeric AS nombre,
0 as heure_contrat,
0 as heure_payee,
0 as heure_travaillee,
0 as masse_salariale,
(CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN t_rubriques.code_calcul IN ('3', '4') OR t_rub.dasavnat = 1 OR t_rub.coderubrique = '9' OR t_rub.coderubrique >= 79900 THEN 0 ELSE T_BNSSAL.VALEURMONTANTSALARIAL END) AS montant_brut,
(CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN t_rubriques.code_calcul NOT IN ('3') OR t_rub.coderubrique = '9' OR t_rub.coderubrique >= 79900 THEN 0 ELSE T_BNSSAL.VALEURMONTANTSALARIAL END) AS montant_frais_imposables,
T_BNSSAL.VALEURTAUXSALARIAL AS taux_sal,
0 AS montant_sal,
0 AS taux_pat,
0 AS montant_pat,
(CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * CASE WHEN t_rub.coderubrique > 19990 AND t_rub.dasavnat != 1 THEN T_BNSSAL.VALEURMONTANTSALARIAL ELSE 0 END AS od_net,
0 as od_net_p,
(CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * CASE WHEN t_rub.dasavnat = 1 AND montantdequivalence = 0 OR t_rubriques.code_calcul = '4' THEN T_BNSSAL.VALEURMONTANTSALARIAL ELSE 0 END AS avt_nat,
0 AS net_imposable,
0 AS net_a_payer,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee
t_rub.nodordre AS ordre,
0 AS type_rub
FROM prod_sage.T_BNSSAL
JOIN w_periode ON 1=1
JOIN w_profils ON 1=1
AND w_profils.numsalarie = T_BNSSAL.numsalarie
AND date_paie_encours between w_profils.date_debut and w_profils.date_fin
JOIN prod_sage.t_rub ON t_rub.coderubrique = T_BNSSAL.coderubrique
JOIN rh.t_rubriques ON t_rubriques.code_original = t_rub.coderubrique
WHERE 1=1
AND t_rub.imprimable NOT IN (1, 3)
AND T_BNSSAL.VALEURMONTANTSALARIAL != 0
and t_rubriques.code_calcul NOT IN ('9')
;
-- Cotisations (mois clotures)
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
t_hcot.datehcot AS date,
t_hcot.typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', t_hcot.datehcot)::text||lpad(date_part('month', t_hcot.datehcot), 2, '0'))::numeric AS mois,
t_rub.coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
t_hcot.valeursbase AS base,
t_hcot.valeursnombre AS nombre,
0 as heure_contrat,
0 as heure_payee,
0 as heure_travaillee,
0 as masse_salariale,
0 AS montant_brut,
0 AS montant_frais_imposables,
t_hcot.valeurstauxsalarial AS taux_sal,
(CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * t_hcot.valeursmontantsalarial AS montant_sal,
t_hcot.valeurstauxpatronal AS taux_pat,
(CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * t_hcot.valeursmontantpatronal AS montant_pat,
0 AS od_net,
0 as od_net_p,
0 AS avt_nat,
0 AS net_imposable,
0 AS net_a_payer,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee,
t_rub.nodordre AS ordre,
1 AS type_rub
FROM prod_sage.t_hcot
JOIN w_profils ON 1=1
AND w_profils.numsalarie = t_hcot.numsalarie
AND t_hcot.datehcot between w_profils.date_debut and w_profils.date_fin
JOIN prod_sage.t_rub ON t_rub.coderubrique = t_hcot.coderubrique
JOIN rh.t_rubriques ON t_rubriques.code_original = t_rub.coderubrique
WHERE true
AND t_hcot.datehcot >= rhp('rhprovider_start')::date
AND t_rub.imprimable != 1
AND (t_hcot.valeursmontantsalarial != 0 OR t_hcot.valeursmontantpatronal != 0)
;
-- Cotisations (mois non clotures)
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
date_paie_encours AS date,
0 as typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', date_paie_encours)::text||lpad(date_part('month', date_paie_encours), 2, '0'))::numeric AS mois,
t_rub.coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
T_COTSAL.valeurbase AS base,
T_COTSAL.valeurnombre AS nombre,
0 as heure_contrat,
0 as heure_payee,
0 as heure_travaillee,
0 as masse_salariale,
0 AS montant_brut,
0 AS montant_frais_imposables,
T_COTSAL.VALEURTAUXSAL AS taux_sal,
(CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * T_COTSAL.VALEURMONTANTSAL AS montant_sal,
T_COTSAL.VALEURTAUXPATRONAL AS taux_pat,
(CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * T_COTSAL.VALEURMONTANTPATRONAL AS montant_pat,
0 AS od_net,
0 as od_net_p,
0 AS avt_nat,
0 AS net_imposable,
0 AS net_a_payer,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee,
t_rub.nodordre AS ordre,
1 AS type_rub
FROM prod_sage.T_COTSAL
JOIN w_periode ON 1=1
JOIN w_profils ON 1=1
AND w_profils.numsalarie = T_COTSAL.numsalarie
AND date_paie_encours between w_profils.date_debut and w_profils.date_fin
JOIN prod_sage.t_rub ON t_rub.coderubrique = T_COTSAL.coderubrique
JOIN rh.t_rubriques ON t_rubriques.code_original = t_rub.coderubrique
WHERE t_rub.imprimable != 1 AND
(T_COTSAL.VALEURMONTANTSAL != 0 OR T_COTSAL.VALEURMONTANTPATRONAL != 0)
;
-- Cumuls paie cloturee
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
t_hcum.datehist AS date,
t_hcum.typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', t_hcum.datehist)::text||lpad(date_part('month', t_hcum.datehist), 2, '0'))::numeric AS mois,
0 AS coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
CASE WHEN ENTITE IN (84, 86) THEN t_hcum.VALEURCUMUL ELSE 0 END AS base,
CASE WHEN ENTITE IN (84, 86) THEN t_hcum.VALEURCUMUL ELSE 0 END AS nombre,
0 as heure_contrat,
0 as heure_payee,
0 as heure_travaillee,
0 as masse_salariale,
0 AS montant_brut,
0 AS montant_frais_imposables,
0 AS taux_sal,
0 AS montant_sal,
0 AS taux_pat,
0 AS montant_pat,
0 AS od_net,
0 as od_net_p,
0 AS avt_nat,
CASE WHEN ENTITE = 4 THEN t_hcum.VALEURCUMUL ELSE 0 END AS net_imposable,
CASE WHEN ENTITE = 3 THEN t_hcum.VALEURCUMUL ELSE 0 END AS net_a_payer,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee,
t_rubriques.rang_edition AS ordre,
2 AS type_rub
FROM prod_sage.t_hcum
JOIN w_profils ON 1=1
AND w_profils.numsalarie = t_hcum.numsalarie
AND t_hcum.datehist between w_profils.date_debut and w_profils.date_fin
JOIN rh.t_rubriques ON t_rubriques.code_original = 'C' || lpad(t_hcum.ENTITE, 3, '0')
WHERE true
AND t_hcum.datehist >= rhp('rhprovider_start')::date
AND ENTITE IN (3, 4, 84, 86)
;
-- Cumuls paie non cloturee
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
date_paie_encours AS date,
0 as typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', date_paie_encours)::text||lpad(date_part('month', date_paie_encours), 2, '0'))::numeric AS mois,
0 AS coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
CASE WHEN OPCSTCUMUL in (84, 86) THEN T_CUMSAL.VALEURCUMINTERMEDIAIRE ELSE 0 END AS base,
CASE WHEN OPCSTCUMUL in (84, 86) THEN T_CUMSAL.VALEURCUMINTERMEDIAIRE ELSE 0 END AS nombre,
0 as heure_contrat,
0 as heure_payee,
0 as heure_travaillee,
0 as masse_salariale,
0 AS montant_brut,
0 AS montant_frais_imposables,
0 AS taux_sal,
0 AS montant_sal,
0 AS taux_pat,
0 AS montant_pat,
0 AS od_net,
0 as od_net_p,
0 AS avt_nat,
CASE WHEN OPCSTCUMUL = 4 THEN T_CUMSAL.VALEURCUMINTERMEDIAIRE ELSE 0 END AS net_imposable,
CASE WHEN OPCSTCUMUL = 3 THEN T_CUMSAL.VALEURCUMINTERMEDIAIRE ELSE 0 END AS net_a_payer,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee,
t_rubriques.rang_edition AS ordre,
2 AS type_rub
FROM prod_sage.T_CUMSAL
JOIN w_periode ON 1=1
JOIN w_profils ON 1=1
AND w_profils.numsalarie = T_CUMSAL.numsalarie
AND date_paie_encours between w_profils.date_debut and w_profils.date_fin
JOIN rh.t_rubriques ON t_rubriques.code_original = 'C' || lpad(T_CUMSAL.OPCSTCUMUL, 3, '0')
WHERE OPCSTCUMUL IN (3, 4, 84, 86)
;
-- Suppression des bulletins composés uniquement des 3 (ou 4) rubriques de cumul :
-- * 3 (net à payer),
-- * 4 (net imposable),
-- * 86 (heures payées),
-- * [84 (heures travaillées)]
-- toutes à 0.
DELETE FROM w_hp
USING (
select
matricule,
date
from w_hp
group by 1,2
having 1=1
AND sum(base) = 0
AND sum(net_imposable) = 0
AND sum(net_a_payer) = 0
AND count(*) in (3, 4)
) AS subq
WHERE 1=1
AND w_hp.matricule = subq.matricule
AND w_hp.date = subq.date
;
]]>
= rhp('rhprovider_start')::date
-- Filtrer les lignes générées systématiquement tous les mois par Sage pour chaque salarié même s'il n'y a rien.
AND (false
OR t_hbns.valeurmontant != 0
OR t_hbns.valeurnombre != 0)
AND (false
OR p_nombre
OR p_base
OR p_heures_contrat
OR p_heures_payees
OR p_heures_travaillees
OR p_masse_salariale
OR p_brut
OR p_avantage_nature
OR p_frais_imposables
OR p_cotisation_salarie
OR p_cotisation_patronale
OR p_od_net_salarie
OR p_od_net_patronale
OR p_net_imposable
OR p_net_a_payer
OR p_nombre_provisions
OR p_montant_provisions
OR p_masse_salariale_provisionnee)
;
-- BRUT et od (paie non cloturee)
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
date_paie_encours AS date,
0 as typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', date_paie_encours)::text||lpad(date_part('month', date_paie_encours), 2, '0'))::numeric AS mois,
t_rub.coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
t_rubriques.c_base
* case when @t_rubriques.c_base != 1 then coalesce(w_profils.etp_contrat, 1.0) else 1.0 end
* CASE WHEN p_base THEN (CASE s_base
WHEN 0 THEN t_bnssal.valeurnombre::numeric
WHEN 1 THEN t_bnssal.valeurbase::numeric
WHEN 3 THEN t_bnssal.valeurmontantsalarial::numeric
WHEN 5 THEN t_bnssal.valeurmontantsalarial::numeric
END) else 0 end AS base,
t_rubriques.c_nombre
* case when @t_rubriques.c_nombre != 1 then coalesce(w_profils.etp_contrat, 1.0) else 1.0 end
* CASE WHEN p_nombre THEN (CASE s_nombre
WHEN 0 THEN t_bnssal.valeurnombre::numeric
WHEN 1 THEN t_bnssal.valeurbase::numeric
WHEN 3 THEN t_bnssal.valeurmontantsalarial::numeric
WHEN 5 THEN t_bnssal.valeurmontantsalarial::numeric
END) else 0 end AS nombre,
t_rubriques.c_heures_contrat
* case when @t_rubriques.c_heures_contrat != 1 then coalesce(w_profils.etp_contrat, 1.0) else 1.0 end
* CASE WHEN p_heures_contrat
then (CASE s_heures_contrat
WHEN 0 THEN t_bnssal.valeurnombre::numeric
WHEN 1 THEN t_bnssal.valeurbase::numeric
WHEN 3 THEN t_bnssal.valeurmontantsalarial::numeric
WHEN 5 THEN t_bnssal.valeurmontantsalarial::numeric
END)
else 0 end
AS heure_contrat,
t_rubriques.c_heures_payees
* case when @t_rubriques.c_heures_payees != 1 then coalesce(w_profils.etp_contrat, 1.0) else 1.0 end
* CASE WHEN p_heures_payees
then (CASE s_heures_payees
WHEN 0 THEN t_bnssal.valeurnombre::numeric
WHEN 1 THEN t_bnssal.valeurbase::numeric
WHEN 3 THEN t_bnssal.valeurmontantsalarial::numeric
WHEN 5 THEN t_bnssal.valeurmontantsalarial::numeric
END)
else 0 end
AS heure_payee,
t_rubriques.c_heures_travaillees
* case when @t_rubriques.c_heures_travaillees != 1 then coalesce(w_profils.etp_contrat, 1.0) else 1.0 end
* CASE WHEN p_heures_travaillees
then (CASE s_heures_travaillees
WHEN 0 THEN t_bnssal.valeurnombre::numeric
WHEN 1 THEN t_bnssal.valeurbase::numeric
WHEN 3 THEN t_bnssal.valeurmontantsalarial::numeric
WHEN 5 THEN t_bnssal.valeurmontantsalarial::numeric
END)
else 0 end
AS heure_travaillee,
t_rubriques.c_masse_salariale * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN p_masse_salariale THEN t_bnssal.valeurmontantsalarial::numeric else 0 end) AS masse_salariale,
t_rubriques.c_brut * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN p_brut THEN t_bnssal.valeurmontantsalarial::numeric else 0 end) AS montant_brut,
t_rubriques.c_frais_imposables * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (case when p_frais_imposables then t_bnssal.valeurmontantsalarial::numeric else 0 end) AS montant_frais_imposables,
t_rubriques.coefficient_txs * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (case when p_cotisation_salarie then t_bnssal.valeurtauxsalarial::numeric else 0 end) AS taux_sal,
t_rubriques.c_cotisation_salarie * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (case when p_cotisation_salarie then t_bnssal.valeurmontantsalarial::numeric else 0 end) AS montant_sal,
t_rubriques.coefficient_txp * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (case when p_cotisation_patronale then 0 else 0 end) AS taux_pat,
t_rubriques.c_cotisation_patronale * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (case when p_cotisation_patronale then 0 else 0 end) AS montant_pat,
t_rubriques.c_od_net_salarie * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN p_od_net_salarie THEN t_bnssal.valeurmontantsalarial::numeric ELSE 0 END) AS od_net,
t_rubriques.c_od_net_patronale * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN p_od_net_patronale then 0 ELSE 0 END) AS od_net_p,
t_rubriques.c_avantage_nature * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN p_avantage_nature THEN t_bnssal.valeurmontantsalarial::numeric ELSE 0 END) AS avt_nat,
t_rubriques.c_net_imposable * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN p_net_imposable THEN t_bnssal.valeurmontantsalarial::numeric ELSE 0 END) AS net_imposable,
t_rubriques.c_net_a_payer * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN p_net_a_payer THEN t_bnssal.valeurmontantsalarial::numeric ELSE 0 END) AS net_a_payer,
t_rubriques.c_nombre_provisions * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END)
* CASE WHEN p_nombre_provisions
then (CASE s_nombre_provisions
WHEN 0 THEN t_bnssal.valeurnombre::numeric
WHEN 1 THEN t_bnssal.valeurbase::numeric
WHEN 3 THEN t_bnssal.valeurmontantsalarial::numeric
WHEN 5 THEN t_bnssal.valeurmontantsalarial::numeric
END)
else 0 end
AS nombre_provisions,
t_rubriques.c_montant_provisions * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END)
* CASE WHEN p_montant_provisions
then (CASE s_montant_provisions
WHEN 0 THEN t_bnssal.valeurnombre::numeric
WHEN 1 THEN t_bnssal.valeurbase::numeric
WHEN 3 THEN t_bnssal.valeurmontantsalarial::numeric
WHEN 5 THEN t_bnssal.valeurmontantsalarial::numeric
END)
else 0 end
AS montant_provisions,
t_rubriques.c_masse_salariale_provisionnee * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END)
* CASE WHEN p_masse_salariale_provisionnee
then (CASE s_masse_salariale_provisionnee
WHEN 0 THEN t_bnssal.valeurnombre::numeric
WHEN 1 THEN t_bnssal.valeurbase::numeric
WHEN 3 THEN t_bnssal.valeurmontantsalarial::numeric
WHEN 5 THEN t_bnssal.valeurmontantsalarial::numeric
END)
else 0 end
AS masse_salariale_provisionnee,
t_rub.nodordre AS ordre,
0 AS type_rub
FROM prod_sage.t_bnssal
JOIN w_periode ON 1=1
JOIN w_profils ON 1=1
AND w_profils.numsalarie = t_bnssal.numsalarie
AND date_paie_encours between w_profils.date_debut and w_profils.date_fin
JOIN prod_sage.t_rub ON t_rub.coderubrique = t_bnssal.coderubrique
JOIN rh.t_rubriques ON t_rubriques.code_original = t_rub.coderubrique
where 1=1
-- Filtrer les lignes générées systématiquement tous les mois par Sage pour chaque salarié même s'il n'y a rien.
AND (false
OR t_bnssal.valeurmontantsalarial != 0
OR t_bnssal.valeurnombre != 0)
AND (false
OR p_nombre
OR p_base
OR p_heures_contrat
OR p_heures_payees
OR p_heures_travaillees
OR p_masse_salariale
OR p_brut
OR p_avantage_nature
OR p_frais_imposables
OR p_cotisation_salarie
OR p_cotisation_patronale
OR p_od_net_salarie
OR p_od_net_patronale
OR p_net_imposable
OR p_net_a_payer
OR p_nombre_provisions
OR p_montant_provisions
OR p_masse_salariale_provisionnee)
;
-- Cotisations (mois clotures)
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
t_hcot.datehcot AS date,
t_hcot.typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', t_hcot.datehcot)::text||lpad(date_part('month', t_hcot.datehcot), 2, '0'))::numeric AS mois,
t_rub.coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
t_rubriques.c_base
* case when @t_rubriques.c_base != 1 then coalesce(w_hst_bul.etp_contrat, 1.0) else 1.0 end
* CASE WHEN p_base THEN (CASE s_base
WHEN 0 THEN t_hcot.valeursnombre::numeric
WHEN 1 THEN t_hcot.valeursbase::numeric
WHEN 2 THEN t_hcot.valeurstauxsalarial::numeric
WHEN 3 THEN t_hcot.valeursmontantsalarial::numeric
WHEN 4 THEN t_hcot.valeurstauxpatronal::numeric
WHEN 5 THEN t_hcot.valeursmontantpatronal::numeric
WHEN 6 THEN t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
WHEN 7 THEN t_hcot.valeursmontantsalarial::numeric - t_hcot.valeursmontantpatronal::numeric
WHEN 8 THEN -t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
END) else 0 end AS base,
t_rubriques.c_nombre
* case when @t_rubriques.c_nombre != 1 then coalesce(w_hst_bul.etp_contrat, 1.0) else 1.0 end
* CASE WHEN p_nombre THEN (CASE s_nombre
WHEN 0 THEN t_hcot.valeursnombre::numeric
WHEN 1 THEN t_hcot.valeursbase::numeric
WHEN 2 THEN t_hcot.valeurstauxsalarial::numeric
WHEN 3 THEN t_hcot.valeursmontantsalarial::numeric
WHEN 4 THEN t_hcot.valeurstauxpatronal::numeric
WHEN 5 THEN t_hcot.valeursmontantpatronal::numeric
WHEN 6 THEN t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
WHEN 7 THEN t_hcot.valeursmontantsalarial::numeric - t_hcot.valeursmontantpatronal::numeric
WHEN 8 THEN -t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
END) else 0 end AS nombre,
t_rubriques.c_heures_contrat * CASE WHEN p_heures_contrat THEN t_hcot.valeursnombre::numeric else 0 end AS heure_contrat,
t_rubriques.c_heures_payees * CASE WHEN p_heures_payees THEN t_hcot.valeursnombre::numeric else 0 end AS heure_payee,
t_rubriques.c_heures_travaillees * CASE WHEN p_heures_travaillees THEN t_hcot.valeursnombre::numeric else 0 end AS heure_travaillee,
t_rubriques.c_masse_salariale * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (CASE WHEN p_masse_salariale THEN t_hcot.valeursmontantpatronal::numeric else 0 end) AS masse_salariale,
t_rubriques.c_brut * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (CASE WHEN p_brut THEN t_hcot.valeursmontantsalarial::numeric else 0 end) AS montant_brut,
t_rubriques.c_frais_imposables * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (case when p_frais_imposables then t_hcot.valeursmontantsalarial::numeric else 0 end) AS montant_frais_imposables,
t_rubriques.coefficient_txs * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (case when p_cotisation_salarie then t_hcot.valeurstauxsalarial::numeric else 0 end) AS taux_sal,
t_rubriques.c_cotisation_salarie * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (case when p_cotisation_salarie then t_hcot.valeursmontantsalarial::numeric else 0 end) AS montant_sal,
t_rubriques.coefficient_txp * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (case when p_cotisation_patronale then t_hcot.valeurstauxpatronal::numeric else 0 end) AS taux_pat,
t_rubriques.c_cotisation_patronale * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (case when p_cotisation_patronale then t_hcot.valeursmontantpatronal::numeric else 0 end) AS montant_pat,
t_rubriques.c_od_net_salarie * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (CASE WHEN p_od_net_salarie THEN t_hcot.valeursmontantsalarial::numeric ELSE 0 END) AS od_net,
t_rubriques.c_od_net_patronale * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (CASE WHEN p_od_net_patronale THEN t_hcot.valeursmontantpatronal::numeric ELSE 0 END) AS od_net_p,
t_rubriques.c_avantage_nature * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (CASE WHEN p_avantage_nature THEN t_hcot.valeursmontantsalarial::numeric ELSE 0 END) AS avt_nat,
t_rubriques.c_net_imposable * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * CASE WHEN p_net_imposable THEN (CASE s_net_imposable
WHEN 0 THEN t_hcot.valeursnombre::numeric
WHEN 1 THEN t_hcot.valeursbase::numeric
WHEN 2 THEN t_hcot.valeurstauxsalarial::numeric
WHEN 3 THEN t_hcot.valeursmontantsalarial::numeric
WHEN 4 THEN t_hcot.valeurstauxpatronal::numeric
WHEN 5 THEN t_hcot.valeursmontantpatronal::numeric
WHEN 6 THEN t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
WHEN 7 THEN t_hcot.valeursmontantsalarial::numeric - t_hcot.valeursmontantpatronal::numeric
WHEN 8 THEN -t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
END) ELSE 0 END AS net_imposable,
t_rubriques.c_net_a_payer * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN p_net_a_payer THEN t_hcot.valeursmontantsalarial::numeric ELSE 0 END) AS net_a_payer,
t_rubriques.c_nombre_provisions * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END)
* CASE WHEN p_nombre_provisions
then (CASE s_nombre_provisions
WHEN 0 THEN t_hcot.valeursnombre::numeric
WHEN 1 THEN t_hcot.valeursbase::numeric
WHEN 2 THEN t_hcot.valeurstauxsalarial::numeric
WHEN 3 THEN t_hcot.valeursmontantsalarial::numeric
WHEN 4 THEN t_hcot.valeurstauxpatronal::numeric
WHEN 5 THEN t_hcot.valeursmontantpatronal::numeric
WHEN 6 THEN t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
WHEN 7 THEN t_hcot.valeursmontantsalarial::numeric - t_hcot.valeursmontantpatronal::numeric
WHEN 8 THEN -t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
END)
else 0 end
AS nombre_provisions,
t_rubriques.c_montant_provisions * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END)
* CASE WHEN p_montant_provisions
then (CASE s_montant_provisions
WHEN 0 THEN t_hcot.valeursnombre::numeric
WHEN 1 THEN t_hcot.valeursbase::numeric
WHEN 2 THEN t_hcot.valeurstauxsalarial::numeric
WHEN 3 THEN t_hcot.valeursmontantsalarial::numeric
WHEN 4 THEN t_hcot.valeurstauxpatronal::numeric
WHEN 5 THEN t_hcot.valeursmontantpatronal::numeric
WHEN 6 THEN t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
WHEN 7 THEN t_hcot.valeursmontantsalarial::numeric - t_hcot.valeursmontantpatronal::numeric
WHEN 8 THEN -t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
END)
else 0 end
AS montant_provisions,
t_rubriques.c_masse_salariale_provisionnee * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END)
* CASE WHEN p_masse_salariale_provisionnee
then (CASE s_masse_salariale_provisionnee
WHEN 0 THEN t_hcot.valeursnombre::numeric
WHEN 1 THEN t_hcot.valeursbase::numeric
WHEN 2 THEN t_hcot.valeurstauxsalarial::numeric
WHEN 3 THEN t_hcot.valeursmontantsalarial::numeric
WHEN 4 THEN t_hcot.valeurstauxpatronal::numeric
WHEN 5 THEN t_hcot.valeursmontantpatronal::numeric
WHEN 6 THEN t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
WHEN 7 THEN t_hcot.valeursmontantsalarial::numeric - t_hcot.valeursmontantpatronal::numeric
WHEN 8 THEN -t_hcot.valeursmontantsalarial::numeric + t_hcot.valeursmontantpatronal::numeric
END)
else 0 end
AS masse_salariale_provisionnee,
t_rub.nodordre AS ordre,
1 AS type_rub
FROM prod_sage.t_hcot
JOIN w_hst_bul ON 1=1
AND w_hst_bul.numsalarie = t_hcot.numsalarie
AND w_hst_bul.datehist = t_hcot.datehcot
AND w_hst_bul.typedubulletin = t_hcot.typedubulletin
JOIN w_profils ON 1=1
AND w_profils.numsalarie = t_hcot.numsalarie
AND w_hst_bul.datehist_cti between w_profils.date_debut and w_profils.date_fin
AND w_profils.typedubulletin = t_hcot.typedubulletin
JOIN prod_sage.t_rub ON t_rub.coderubrique = t_hcot.coderubrique
JOIN rh.t_rubriques ON t_rubriques.code_original = t_rub.coderubrique
WHERE true
AND t_hcot.datehcot >= rhp('rhprovider_start')::date
-- Filtrer les lignes générées systématiquement tous les mois par Sage pour chaque salarié même s'il n'y a rien.
AND (false
OR t_hcot.valeursnombre != 0
OR t_hcot.valeursmontantsalarial != 0
OR t_hcot.valeursmontantpatronal != 0)
AND (false
OR p_nombre
OR p_base
OR p_heures_contrat
OR p_heures_payees
OR p_heures_travaillees
OR p_masse_salariale
OR p_brut
OR p_avantage_nature
OR p_frais_imposables
OR p_cotisation_salarie
OR p_cotisation_patronale
OR p_od_net_salarie
OR p_od_net_patronale
OR p_net_imposable
OR p_net_a_payer
OR p_nombre_provisions
OR p_montant_provisions
OR p_masse_salariale_provisionnee)
;
-- Cotisations (mois non clotures)
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
date_paie_encours AS date,
0 as typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', date_paie_encours)::text||lpad(date_part('month', date_paie_encours), 2, '0'))::numeric AS mois,
t_rub.coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
t_rubriques.c_base
* case when @t_rubriques.c_base != 1 then coalesce(w_profils.etp_contrat, 1.0) else 1.0 end
* CASE WHEN p_base THEN (CASE s_base
WHEN 0 THEN t_cotsal.valeurnombre::numeric
WHEN 1 THEN t_cotsal.valeurbase::numeric
WHEN 2 THEN t_cotsal.valeurtauxsal::numeric
WHEN 3 THEN t_cotsal.valeurmontantsal::numeric
WHEN 4 THEN t_cotsal.valeurtauxpatronal::numeric
WHEN 5 THEN t_cotsal.valeurmontantpatronal::numeric
WHEN 6 THEN t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
WHEN 7 THEN t_cotsal.valeurmontantsal::numeric - t_cotsal.valeurmontantpatronal::numeric
WHEN 8 THEN -t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
END) else 0 end AS base,
t_rubriques.c_nombre
* case when @t_rubriques.c_nombre != 1 then coalesce(w_profils.etp_contrat, 1.0) else 1.0 end
* CASE WHEN p_nombre THEN (CASE s_nombre
WHEN 0 THEN t_cotsal.valeurnombre::numeric
WHEN 1 THEN t_cotsal.valeurbase::numeric
WHEN 2 THEN t_cotsal.valeurtauxsal::numeric
WHEN 3 THEN t_cotsal.valeurmontantsal::numeric
WHEN 4 THEN t_cotsal.valeurtauxpatronal::numeric
WHEN 5 THEN t_cotsal.valeurmontantpatronal::numeric
WHEN 6 THEN t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
WHEN 7 THEN t_cotsal.valeurmontantsal::numeric - t_cotsal.valeurmontantpatronal::numeric
WHEN 8 THEN -t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
END) else 0 end AS nombre,
t_rubriques.c_heures_contrat * CASE WHEN p_heures_contrat THEN t_cotsal.valeurnombre::numeric else 0 end AS heure_contrat,
t_rubriques.c_heures_payees * CASE WHEN p_heures_payees THEN t_cotsal.valeurnombre::numeric else 0 end AS heure_payee,
t_rubriques.c_heures_travaillees * CASE WHEN p_heures_travaillees THEN t_cotsal.valeurnombre::numeric else 0 end AS heure_travaillee,
t_rubriques.c_masse_salariale * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (CASE WHEN p_masse_salariale THEN t_cotsal.valeurmontantpatronal::numeric else 0 end) AS masse_salariale,
t_rubriques.c_brut * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (CASE WHEN p_brut THEN t_cotsal.valeurmontantsal::numeric else 0 end) AS montant_brut,
t_rubriques.c_frais_imposables * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (case when p_frais_imposables then t_cotsal.valeurmontantsal::numeric else 0 end) AS montant_frais_imposables,
t_rubriques.coefficient_txs * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (case when p_cotisation_salarie then t_cotsal.valeurtauxsal::numeric else 0 end) AS taux_sal,
t_rubriques.c_cotisation_salarie * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (case when p_cotisation_salarie then t_cotsal.valeurmontantsal::numeric else 0 end) AS montant_sal,
t_rubriques.coefficient_txp * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (case when p_cotisation_patronale then t_cotsal.valeurtauxpatronal::numeric else 0 end) AS taux_pat,
t_rubriques.c_cotisation_patronale * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (case when p_cotisation_patronale then t_cotsal.valeurmontantpatronal::numeric else 0 end) AS montant_pat,
t_rubriques.c_od_net_salarie * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (CASE WHEN p_od_net_salarie THEN t_cotsal.valeurmontantsal::numeric ELSE 0 END) AS od_net,
t_rubriques.c_od_net_patronale * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (CASE WHEN p_od_net_patronale THEN t_cotsal.valeurmontantpatronal::numeric ELSE 0 END) AS od_net_p,
t_rubriques.c_avantage_nature * (CASE WHEN t_rub.gain = 1 THEN -1 ELSE 1 END) * (CASE WHEN p_avantage_nature THEN t_cotsal.valeurmontantsal::numeric ELSE 0 END) AS avt_nat,
t_rubriques.c_net_imposable * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * CASE WHEN p_net_imposable THEN (CASE s_net_imposable
WHEN 0 THEN t_cotsal.valeurnombre::numeric
WHEN 1 THEN t_cotsal.valeurbase::numeric
WHEN 2 THEN t_cotsal.valeurtauxsal::numeric
WHEN 3 THEN t_cotsal.valeurmontantsal::numeric
WHEN 4 THEN t_cotsal.valeurtauxpatronal::numeric
WHEN 5 THEN t_cotsal.valeurmontantpatronal::numeric
WHEN 6 THEN t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
WHEN 7 THEN t_cotsal.valeurmontantsal::numeric - t_cotsal.valeurmontantpatronal::numeric
WHEN 8 THEN -t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
END) ELSE 0 END AS net_imposable,
t_rubriques.c_net_a_payer * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN p_net_a_payer THEN t_cotsal.valeurmontantsal::numeric ELSE 0 END) AS net_a_payer,
t_rubriques.c_nombre_provisions * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END)
* CASE WHEN p_nombre_provisions
then (CASE s_nombre_provisions
WHEN 0 THEN t_cotsal.valeurnombre::numeric
WHEN 1 THEN t_cotsal.valeurbase::numeric
WHEN 2 THEN t_cotsal.valeurtauxsal::numeric
WHEN 3 THEN t_cotsal.valeurmontantsal::numeric
WHEN 4 THEN t_cotsal.valeurtauxpatronal::numeric
WHEN 5 THEN t_cotsal.valeurmontantpatronal::numeric
WHEN 6 THEN t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
WHEN 7 THEN t_cotsal.valeurmontantsal::numeric - t_cotsal.valeurmontantpatronal::numeric
WHEN 8 THEN -t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
END)
else 0 end
AS nombre_provisions,
t_rubriques.c_montant_provisions * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END)
* CASE WHEN p_montant_provisions
then (CASE s_montant_provisions
WHEN 0 THEN t_cotsal.valeurnombre::numeric
WHEN 1 THEN t_cotsal.valeurbase::numeric
WHEN 2 THEN t_cotsal.valeurtauxsal::numeric
WHEN 3 THEN t_cotsal.valeurmontantsal::numeric
WHEN 4 THEN t_cotsal.valeurtauxpatronal::numeric
WHEN 5 THEN t_cotsal.valeurmontantpatronal::numeric
WHEN 6 THEN t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
WHEN 7 THEN t_cotsal.valeurmontantsal::numeric - t_cotsal.valeurmontantpatronal::numeric
WHEN 8 THEN -t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
END)
else 0 end
AS montant_provisions,
t_rubriques.c_masse_salariale_provisionnee * (CASE WHEN t_rub.gain = 1 THEN 1 ELSE -1 END)
* CASE WHEN p_masse_salariale_provisionnee
then (CASE s_masse_salariale_provisionnee
WHEN 0 THEN t_cotsal.valeurnombre::numeric
WHEN 1 THEN t_cotsal.valeurbase::numeric
WHEN 2 THEN t_cotsal.valeurtauxsal::numeric
WHEN 3 THEN t_cotsal.valeurmontantsal::numeric
WHEN 4 THEN t_cotsal.valeurtauxpatronal::numeric
WHEN 5 THEN t_cotsal.valeurmontantpatronal::numeric
WHEN 6 THEN t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
WHEN 7 THEN t_cotsal.valeurmontantsal::numeric - t_cotsal.valeurmontantpatronal::numeric
WHEN 8 THEN -t_cotsal.valeurmontantsal::numeric + t_cotsal.valeurmontantpatronal::numeric
END)
else 0 end
AS masse_salariale_provisionnee,
t_rub.nodordre AS ordre,
1 AS type_rub
FROM prod_sage.t_cotsal
JOIN w_periode ON 1=1
JOIN w_profils ON 1=1
AND w_profils.numsalarie = T_COTSAL.numsalarie
AND date_paie_encours between w_profils.date_debut and w_profils.date_fin
JOIN prod_sage.t_rub ON t_rub.coderubrique = T_COTSAL.coderubrique
JOIN rh.t_rubriques ON t_rubriques.code_original = t_rub.coderubrique
WHERE true
-- Filtrer les lignes générées systématiquement tous les mois par Sage pour chaque salarié même s'il n'y a rien.
AND (false
OR t_cotsal.valeurnombre != 0
OR t_cotsal.valeurmontantsal != 0
OR t_cotsal.valeurmontantpatronal != 0)
AND (false
OR p_nombre
OR p_base
OR p_heures_contrat
OR p_heures_payees
OR p_heures_travaillees
OR p_masse_salariale
OR p_brut
OR p_avantage_nature
OR p_frais_imposables
OR p_cotisation_salarie
OR p_cotisation_patronale
OR p_od_net_salarie
OR p_od_net_patronale
OR p_net_imposable
OR p_net_a_payer
OR p_nombre_provisions
OR p_montant_provisions
OR p_masse_salariale_provisionnee)
;
-- Cumuls paie cloturee
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
t_hcum.datehist AS date,
t_hcum.typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', t_hcum.datehist)::text||lpad(date_part('month', t_hcum.datehist), 2, '0'))::numeric AS mois,
0 AS coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
t_rubriques.c_base * CASE WHEN p_base THEN t_hcum.valeurcumul::numeric else 0 end AS base,
t_rubriques.c_nombre * CASE WHEN p_nombre THEN t_hcum.valeurcumul::numeric else 0 end AS nombre,
t_rubriques.c_heures_contrat * CASE WHEN p_heures_contrat THEN t_hcum.valeurcumul::numeric else 0 end AS heure_contrat,
t_rubriques.c_heures_payees * CASE WHEN p_heures_payees THEN t_hcum.valeurcumul::numeric else 0 end AS heure_payee,
t_rubriques.c_heures_travaillees * CASE WHEN p_heures_travaillees THEN t_hcum.valeurcumul::numeric else 0 end AS heure_travaillee,
t_rubriques.c_masse_salariale * CASE WHEN p_masse_salariale THEN t_hcum.valeurcumul::numeric else 0 end AS masse_salariale,
t_rubriques.c_brut * CASE WHEN p_brut THEN t_hcum.valeurcumul::numeric else 0 end AS montant_brut,
t_rubriques.c_frais_imposables * case when p_frais_imposables then t_hcum.valeurcumul::numeric else 0 end AS montant_frais_imposables,
t_rubriques.coefficient_txs * case when p_cotisation_salarie then t_hcum.valeurcumul::numeric else 0 end AS taux_sal,
t_rubriques.c_cotisation_salarie * case when p_cotisation_salarie then t_hcum.valeurcumul::numeric else 0 end AS montant_sal,
t_rubriques.coefficient_txp * case when p_cotisation_patronale then t_hcum.valeurcumul::numeric else 0 end AS taux_pat,
t_rubriques.c_cotisation_patronale * case when p_cotisation_patronale then t_hcum.valeurcumul::numeric else 0 end AS montant_pat,
t_rubriques.c_od_net_salarie * CASE WHEN p_od_net_salarie THEN t_hcum.valeurcumul::numeric ELSE 0 END AS od_net,
t_rubriques.c_od_net_patronale * CASE WHEN p_od_net_patronale THEN t_hcum.valeurcumul::numeric ELSE 0 END AS od_net_p,
t_rubriques.c_avantage_nature * CASE WHEN p_avantage_nature THEN t_hcum.valeurcumul::numeric ELSE 0 END AS avt_nat,
t_rubriques.c_net_imposable * CASE WHEN p_net_imposable THEN t_hcum.valeurcumul::numeric ELSE 0 END AS net_imposable,
t_rubriques.c_net_a_payer * CASE WHEN p_net_a_payer THEN t_hcum.valeurcumul::numeric ELSE 0 END AS net_a_payer,
t_rubriques.c_nombre_provisions * CASE WHEN p_nombre_provisions THEN t_hcum.valeurcumul::numeric ELSE 0 END AS nombre_provisions,
t_rubriques.c_montant_provisions * CASE WHEN p_montant_provisions THEN t_hcum.valeurcumul::numeric ELSE 0 END AS montant_provisions,
t_rubriques.c_masse_salariale_provisionnee * CASE WHEN p_masse_salariale_provisionnee THEN t_hcum.valeurcumul::numeric ELSE 0 END AS masse_salariale_provisionnee,
t_rubriques.rang_edition AS ordre,
2 AS type_rub
FROM prod_sage.t_hcum
JOIN w_hst_bul ON 1=1
AND w_hst_bul.numsalarie = t_hcum.numsalarie
AND w_hst_bul.datehist = t_hcum.datehist
AND w_hst_bul.typedubulletin = t_hcum.typedubulletin
JOIN w_profils ON 1=1
AND w_profils.numsalarie = t_hcum.numsalarie
AND w_hst_bul.datehist_cti between w_profils.date_debut and w_profils.date_fin
AND w_profils.typedubulletin = t_hcum.typedubulletin
JOIN rh.t_rubriques ON t_rubriques.code_original = 'C' || lpad(t_hcum.entite, 3, '0')
WHERE true
AND t_hcum.datehist >= rhp('rhprovider_start')::date
AND (false
OR p_base
OR p_nombre
OR p_heures_contrat
OR p_heures_payees
OR p_heures_travaillees
OR p_masse_salariale
OR p_brut
OR p_avantage_nature
OR p_frais_imposables
OR p_cotisation_salarie
OR p_cotisation_patronale
OR p_od_net_salarie
OR p_od_net_patronale
OR p_net_imposable
OR p_net_a_payer
OR p_nombre_provisions
OR p_montant_provisions
OR p_masse_salariale_provisionnee)
;
-- Cumuls paie non cloturee
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
date_paie_encours AS date,
0 as typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', date_paie_encours)::text||lpad(date_part('month', date_paie_encours), 2, '0'))::numeric AS mois,
0 AS coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
t_rubriques.c_base * CASE WHEN p_base THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS base,
t_rubriques.c_nombre * CASE WHEN p_nombre THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS nombre,
t_rubriques.c_heures_contrat * CASE WHEN p_heures_contrat THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS heure_contrat,
t_rubriques.c_heures_payees * CASE WHEN p_heures_payees THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS heure_payee,
t_rubriques.c_heures_travaillees * CASE WHEN p_heures_travaillees THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS heure_travaillee,
t_rubriques.c_masse_salariale * CASE WHEN p_masse_salariale THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS masse_salariale,
t_rubriques.c_brut * CASE WHEN p_brut THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS montant_brut,
t_rubriques.c_frais_imposables * case when p_frais_imposables then t_cumsal.valeurcumintermediaire::numeric else 0 end AS montant_frais_imposables,
t_rubriques.coefficient_txs * case when p_cotisation_salarie then t_cumsal.valeurcumintermediaire::numeric else 0 end AS taux_sal,
t_rubriques.c_cotisation_salarie * case when p_cotisation_salarie then t_cumsal.valeurcumintermediaire::numeric else 0 end AS montant_sal,
t_rubriques.coefficient_txp * case when p_cotisation_patronale then t_cumsal.valeurcumintermediaire::numeric else 0 end AS taux_pat,
t_rubriques.c_cotisation_patronale * case when p_cotisation_patronale then t_cumsal.valeurcumintermediaire::numeric else 0 end AS montant_pat,
t_rubriques.c_od_net_salarie * CASE WHEN p_od_net_salarie THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS od_net,
t_rubriques.c_od_net_patronale * CASE WHEN p_od_net_patronale THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS od_net_p,
t_rubriques.c_avantage_nature * CASE WHEN p_avantage_nature THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS avt_nat,
t_rubriques.c_net_imposable * CASE WHEN p_net_imposable THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS net_imposable,
t_rubriques.c_net_a_payer * CASE WHEN p_net_a_payer THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS net_a_payer,
t_rubriques.c_nombre_provisions * CASE WHEN p_nombre_provisions THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS nombre_provisions,
t_rubriques.c_montant_provisions * CASE WHEN p_montant_provisions THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS montant_provisions,
t_rubriques.c_masse_salariale_provisionnee * CASE WHEN p_masse_salariale_provisionnee THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS masse_salariale_provisionnee,
t_rubriques.rang_edition AS ordre,
2 AS type_rub
FROM prod_sage.t_cumsal
JOIN w_periode ON 1=1
JOIN w_profils ON 1=1
AND w_profils.numsalarie = t_cumsal.numsalarie
AND date_paie_encours between w_profils.date_debut and w_profils.date_fin
JOIN rh.t_rubriques ON t_rubriques.code_original = 'C' || lpad(t_cumsal.opcstcumul, 3, '0')
WHERE false
OR p_base
OR p_nombre
OR p_heures_contrat
OR p_heures_payees
OR p_heures_travaillees
OR p_masse_salariale
OR p_brut
OR p_avantage_nature
OR p_frais_imposables
OR p_cotisation_salarie
OR p_cotisation_patronale
OR p_od_net_salarie
OR p_od_net_patronale
OR p_net_imposable
OR p_net_a_payer
OR p_nombre_provisions
OR p_montant_provisions
OR p_masse_salariale_provisionnee
;
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
t_hcum.datehist AS date,
t_hcum.typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', t_hcum.datehist)::text||lpad(date_part('month', t_hcum.datehist), 2, '0'))::numeric AS mois,
0 AS coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
t_rubriques.c_base * CASE WHEN p_base THEN t_hcum.valeurcumul::numeric else 0 end AS base,
t_rubriques.c_nombre * CASE WHEN p_nombre THEN t_hcum.valeurcumul::numeric else 0 end AS nombre,
t_rubriques.c_heures_contrat * CASE WHEN p_heures_contrat THEN t_hcum.valeurcumul::numeric else 0 end AS heure_contrat,
t_rubriques.c_heures_payees * CASE WHEN p_heures_payees THEN t_hcum.valeurcumul::numeric else 0 end AS heure_payee,
t_rubriques.c_heures_travaillees * CASE WHEN p_heures_travaillees THEN t_hcum.valeurcumul::numeric else 0 end AS heure_travaillee,
t_rubriques.c_masse_salariale * CASE WHEN p_masse_salariale THEN t_hcum.valeurcumul::numeric else 0 end AS masse_salariale,
t_rubriques.c_brut * CASE WHEN p_brut THEN t_hcum.valeurcumul::numeric else 0 end AS montant_brut,
t_rubriques.c_frais_imposables * case when p_frais_imposables then t_hcum.valeurcumul::numeric else 0 end AS montant_frais_imposables,
t_rubriques.coefficient_txs * case when p_cotisation_salarie then t_hcum.valeurcumul::numeric else 0 end AS taux_sal,
t_rubriques.c_cotisation_salarie * case when p_cotisation_salarie then t_hcum.valeurcumul::numeric else 0 end AS montant_sal,
t_rubriques.coefficient_txp * case when p_cotisation_patronale then t_hcum.valeurcumul::numeric else 0 end AS taux_pat,
t_rubriques.c_cotisation_patronale * case when p_cotisation_patronale then t_hcum.valeurcumul::numeric else 0 end AS montant_pat,
t_rubriques.c_od_net_salarie * CASE WHEN p_od_net_salarie THEN t_hcum.valeurcumul::numeric ELSE 0 END AS od_net,
t_rubriques.c_od_net_patronale * CASE WHEN p_od_net_patronale THEN t_hcum.valeurcumul::numeric ELSE 0 END AS od_net_p,
t_rubriques.c_avantage_nature * CASE WHEN p_avantage_nature THEN t_hcum.valeurcumul::numeric ELSE 0 END AS avt_nat,
t_rubriques.c_net_imposable * CASE WHEN p_net_imposable THEN t_hcum.valeurcumul::numeric ELSE 0 END AS net_imposable,
t_rubriques.c_net_a_payer * CASE WHEN p_net_a_payer THEN t_hcum.valeurcumul::numeric ELSE 0 END AS net_a_payer,
t_rubriques.c_nombre_provisions * CASE WHEN p_nombre_provisions THEN t_hcum.valeurcumul::numeric ELSE 0 END AS nombre_provisions,
t_rubriques.c_montant_provisions * CASE WHEN p_montant_provisions THEN t_hcum.valeurcumul::numeric ELSE 0 END AS montant_provisions,
t_rubriques.c_masse_salariale_provisionnee * CASE WHEN p_masse_salariale_provisionnee THEN t_hcum.valeurcumul::numeric ELSE 0 END AS masse_salariale_provisionnee,
t_rubriques.rang_edition AS ordre,
2 AS type_rub
FROM prod_sage.t_hcum
JOIN w_hst_bul ON 1=1
AND w_hst_bul.numsalarie = t_hcum.numsalarie
AND w_hst_bul.datehist = t_hcum.datehist
AND w_hst_bul.typedubulletin = t_hcum.typedubulletin
JOIN w_profils ON 1=1
AND w_profils.numsalarie = t_hcum.numsalarie
AND w_hst_bul.datehist_cti between w_profils.date_debut and w_profils.date_fin
AND w_profils.typedubulletin = t_hcum.typedubulletin
JOIN prod_sage.t_cst ON 1=1
AND typeconstante = 6
AND t_cst.CodeOperande1 = t_hcum.entite
JOIN rh.t_rubriques ON t_rubriques.code_original = t_cst.CodeConstante
WHERE true
AND t_hcum.datehist >= rhp('rhprovider_start')::date
AND t_hcum.valeurcumul::numeric != 0
AND (false
OR p_base
OR p_nombre
OR p_heures_contrat
OR p_heures_payees
OR p_heures_travaillees
OR p_masse_salariale
OR p_brut
OR p_avantage_nature
OR p_frais_imposables
OR p_cotisation_salarie
OR p_cotisation_patronale
OR p_od_net_salarie
OR p_od_net_patronale
OR p_net_imposable
OR p_net_a_payer
OR p_nombre_provisions
OR p_montant_provisions
OR p_masse_salariale_provisionnee)
;
-- Cumuls paie non cloturee
INSERT INTO w_hp
SELECT
w_profils.contrat_mois_id,
w_profils.contrat_id,
w_profils.salarie_id,
w_profils.profil_id,
w_profils.matricule AS code_original,
w_profils.matricule AS matricule,
w_profils.numsalarie,
w_profils.unite,
w_profils.categorie,
date_paie_encours AS date,
0 as typedubulletin,
w_profils.bul_date_debut as date_debut,
w_profils.bul_date_fin as date_fin,
(date_part('year', date_paie_encours)::text||lpad(date_part('month', date_paie_encours), 2, '0'))::numeric AS mois,
0 AS coderubrique,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
t_rubriques.c_base * CASE WHEN p_base THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS base,
t_rubriques.c_nombre * CASE WHEN p_nombre THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS nombre,
t_rubriques.c_heures_contrat * CASE WHEN p_heures_contrat THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS heure_contrat,
t_rubriques.c_heures_payees * CASE WHEN p_heures_payees THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS heure_payee,
t_rubriques.c_heures_travaillees * CASE WHEN p_heures_travaillees THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS heure_travaillee,
t_rubriques.c_masse_salariale * CASE WHEN p_masse_salariale THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS masse_salariale,
t_rubriques.c_brut * CASE WHEN p_brut THEN t_cumsal.valeurcumintermediaire::numeric else 0 end AS montant_brut,
t_rubriques.c_frais_imposables * case when p_frais_imposables then t_cumsal.valeurcumintermediaire::numeric else 0 end AS montant_frais_imposables,
t_rubriques.coefficient_txs * case when p_cotisation_salarie then t_cumsal.valeurcumintermediaire::numeric else 0 end AS taux_sal,
t_rubriques.c_cotisation_salarie * case when p_cotisation_salarie then t_cumsal.valeurcumintermediaire::numeric else 0 end AS montant_sal,
t_rubriques.coefficient_txp * case when p_cotisation_patronale then t_cumsal.valeurcumintermediaire::numeric else 0 end AS taux_pat,
t_rubriques.c_cotisation_patronale * case when p_cotisation_patronale then t_cumsal.valeurcumintermediaire::numeric else 0 end AS montant_pat,
t_rubriques.c_od_net_salarie * CASE WHEN p_od_net_salarie THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS od_net,
t_rubriques.c_od_net_patronale * CASE WHEN p_od_net_patronale THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS od_net_p,
t_rubriques.c_avantage_nature * CASE WHEN p_avantage_nature THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS avt_nat,
t_rubriques.c_net_imposable * CASE WHEN p_net_imposable THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS net_imposable,
t_rubriques.c_net_a_payer * CASE WHEN p_net_a_payer THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS net_a_payer,
t_rubriques.c_nombre_provisions * CASE WHEN p_nombre_provisions THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS nombre_provisions,
t_rubriques.c_montant_provisions * CASE WHEN p_montant_provisions THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS montant_provisions,
t_rubriques.c_masse_salariale_provisionnee * CASE WHEN p_masse_salariale_provisionnee THEN t_cumsal.valeurcumintermediaire::numeric ELSE 0 END AS masse_salariale_provisionnee,
t_rubriques.rang_edition AS ordre,
2 AS type_rub
FROM prod_sage.t_cumsal
JOIN w_periode ON 1=1
JOIN w_profils ON 1=1
AND w_profils.numsalarie = t_cumsal.numsalarie
AND date_paie_encours between w_profils.date_debut and w_profils.date_fin
JOIN prod_sage.t_cst ON 1=1
AND typeconstante = 6
AND t_cst.CodeOperande1 = t_cumsal.opcstcumul
JOIN rh.t_rubriques ON t_rubriques.code_original = t_cst.CodeConstante
WHERE true
AND t_cumsal.valeurcumintermediaire::numeric != 0
AND (false
OR p_base
OR p_nombre
OR p_heures_contrat
OR p_heures_payees
OR p_heures_travaillees
OR p_masse_salariale
OR p_brut
OR p_avantage_nature
OR p_frais_imposables
OR p_cotisation_salarie
OR p_cotisation_patronale
OR p_od_net_salarie
OR p_od_net_patronale
OR p_net_imposable
OR p_net_a_payer
OR p_nombre_provisions
OR p_montant_provisions
OR p_masse_salariale_provisionnee)
;
]]>
1 AND w_MOD_SAUF.NOLIEN IS NOT NULL THEN T_RUB.CODERUBRIQUE ELSE 0 END) AS RUBRIQUES_SAUF,
MAX(CASE WHEN NUMERO = 4 THEN BORNEINF ELSE NULL END) AS BORNEINF_CATEGORIE,
MAX(CASE WHEN NUMERO = 4 THEN BORNESUP ELSE NULL END) AS BORNESUP_CATEGORIE,
MAX(CASE WHEN NUMERO = 3 THEN BORNEINF ELSE NULL END) AS BORNEINF_UNITE,
MAX(CASE WHEN NUMERO = 3 THEN BORNESUP ELSE NULL END) AS BORNESUP_UNITE,
MAX(CASE WHEN NUMERO = 9 THEN BORNEINF ELSE NULL END) AS BORNEINF_MATRICULE,
MAX(CASE WHEN NUMERO = 9 THEN BORNESUP ELSE NULL END) AS BORNESUP_MATRICULE
FROM prod_sage.T_MOD
LEFT JOIN w_MOD_SAUF ON W_MOD_SAUF.NOLIEN = T_MOD.NOLIEN AND
W_MOD_SAUF.NOLIGNE = T_MOD.NOLIGNE
JOIN prod_sage.T_ECR ON T_MOD.NOLIEN = T_ECR.NOLIEN AND
T_MOD.NOLIGNE = T_ECR.NOLIGNE AND
COMPTEGENERAL BETWEEN '6' AND '799999'
JOIN prod_sage.T_SEL ON T_MOD.NOLIEN = T_SEL.NOLIEN
AND T_MOD.NOLIGNE = T_SEL.NOLIGNE
JOIN prod_sage.t_CRITERESSEL ON t_CRITERESSEL.IDSEL = T_SEL.IDSEL
LEFT JOIN prod_sage.T_RUB ON (CODEELEMENT = T_RUB.CODERUBRIQUE OR TYPEELEMENT = 2 AND CODEELEMENT = 'BRUT' AND
T_RUB.CODERUBRIQUE IN (SELECT coderubrique FROM prod_sage.T_RUB WHERE TYPERUBRIQUE = 1))
GROUP BY 1,2,3
;
UPDATE w_SEL SET
BORNEINF_CATEGORIE = COALESCE(BORNEINF_CATEGORIE,''),
BORNESUP_CATEGORIE = COALESCE(BORNESUP_CATEGORIE,'99999999'),
BORNEINF_UNITE = COALESCE(BORNEINF_UNITE,''),
BORNESUP_UNITE = COALESCE(BORNESUP_UNITE,'99999999')
;
DROP TABLE IF EXISTS w_HP_CPT;
CREATE TEMP TABLE w_HP_CPT AS
SELECT NUMSALARIE, UNITE, CATEGORIE, CODERUBRIQUE, ''::text AS COMPTEGENERAL, NULL::bigint AS compte_id
FROM w_hp
WHERE CODERUBRIQUE <> 0
GROUP BY 1,2,3,4
;
UPDATE w_HP_CPT
SET COMPTEGENERAL = w_SEL.COMPTEGENERAL
FROM w_SEL
WHERE w_hp_CPT.CODERUBRIQUE = ANY(w_SEL.RUBRIQUES) AND
w_hp_CPT.CODERUBRIQUE <> ALL(w_SEL.RUBRIQUES_SAUF) AND
UNITE BETWEEN BORNEINF_UNITE AND BORNESUP_UNITE AND
CATEGORIE BETWEEN BORNEINF_CATEGORIE AND BORNESUP_CATEGORIE
;
UPDATE w_HP_CPT
SET compte_id = t_compte.oid
FROM rh.t_compte
WHERE COMPTEGENERAL = t_compte.code
;
CREATE INDEX i_HP_CPT_1
ON w_HP_CPT
USING btree (NUMSALARIE)
;
-- Génération paie
SELECT base.cti_stash_table_indexes('rh', 'p_historique_paie')
;
TRUNCATE rh.p_historique_paie
;
INSERT INTO rh.p_historique_paie(
code_original,
age_id,
base,
nombre,
contrat_id,
contrat_mois_id,
date_debut,
date_fin,
date_paie,
mois_activite,
mois_paie,
heure_contrat,
heure_payee,
heure_travaillee,
montant_avantage_nature,
montant_brut,
montant_masse_salariale,
montant_cotisation_patronale,
montant_cotisation_salarie,
montant_frais_imposables,
montant_net_a_payer_salarie,
montant_net_imposable_salarie,
montant_od_net_salarie,
organisme_cotisation_id,
profil_id,
rubrique_id,
compte_id,
salarie_id,
taux_cotisation_patronale,
taux_cotisation_salarie,
nombre_provisions,
montant_provisions,
montant_masse_salariale_provisionnee)
SELECT
w_hp.matricule||date::date||typedubulletin::text as code_original,
date_part('year', age(date, date_naissance)) AS age_id,
base,
nombre,
contrat_id,
contrat_mois_id,
w_hp.date_debut,
w_hp.date_fin,
date::date AS date_paie,
w_hp.mois AS mois_activite,
w_hp.mois AS mois_paie,
heure_contrat,
heure_payee,
heure_travaillee,
avt_nat AS montant_avantage_nature,
montant_brut AS montant_brut,
masse_salariale as montant_masse_salariale,
montant_pat AS montant_cotisation_patronale,
montant_sal AS montant_cotisation_salarie,
montant_frais_imposables,
net_a_payer AS montant_net_a_payer_salarie,
net_imposable AS montant_net_imposable_salarie,
od_net AS montant_od_net_salarie,
0 AS organisme_cotisation_id,
w_hp.profil_id,
t_rubriques.oid AS rubrique_id,
COALESCE(w_HP_CPT.compte_id, w_RUB_CPG.compte_id,0) AS compte_id,
p_salaries.oid,
taux_pat AS taux_cotisation_patronale,
taux_sal AS taux_cotisation_salarie,
nombre_provisions,
montant_provisions,
masse_salariale_provisionnee AS montant_masse_salariale_provisionnee
FROM w_hp
JOIN rh.p_salaries ON p_salaries.matricule = w_hp.matricule
JOIN rh.t_rubriques ON t_rubriques.code_original = w_hp.rub_code
LEFT JOIN w_HP_CPT ON
w_hp.NUMSALARIE = w_HP_CPT.NUMSALARIE AND
w_hp.UNITE = w_HP_CPT.UNITE AND
w_hp.CATEGORIE = w_HP_CPT.CATEGORIE AND
w_hp.CODERUBRIQUE = w_HP_CPT.CODERUBRIQUE
LEFT JOIN w_RUB_CPG ON w_hp.rub_code = w_RUB_CPG.CODERUBRIQUE
WHERE t_rubriques.p_detail
;
SELECT base.cti_stash_pop_table_indexes('rh', 'p_historique_paie')
;
]]>
= rhp('rhprovider_start')::date
GROUP BY 1,2,3
;
-- Insérer pour chaque bulletin une ligne qui va faire le compte avec le total (rubrique 'C000' nommée 'Ecart cumulé')
INSERT INTO rh.p_historique_paie (
age_id,
contrat_id,
contrat_mois_id,
date_debut,
date_fin,
date_paie,
mois_activite,
mois_paie,
base,
nombre,
heure_contrat,
heure_payee,
heure_travaillee,
montant_masse_salariale,
montant_avantage_nature,
montant_brut,
montant_cotisation_patronale,
montant_cotisation_salarie,
montant_frais_imposables,
montant_net_a_payer_salarie,
montant_net_imposable_salarie,
montant_od_net_salarie,
organisme_cotisation_id,
profil_id,
rubrique_id,
compte_id,
salarie_id,
taux_cotisation_patronale,
taux_cotisation_salarie,
nombre_provisions,
montant_provisions,
montant_masse_salariale_provisionnee)
SELECT
subq.age_id,
subq.contrat_id,
subq.contrat_mois_id,
subq.date_debut,
subq.date_fin,
subq.date_paie,
subq.mois_activite,
subq.mois_paie,
0 AS base,
0 as nombre,
0 as heure_contrat,
0 as heure_payee,
0 as heure_travaillee,
0 as montant_masse_salariale,
COALESCE(hcum_avantage_nature,0) - subq.montant_avantage_nature AS montant_avantage_nature,
COALESCE(hcum_brut,0) - subq.montant_brut AS montant_brut,
0 AS montant_cotisation_patronale,
0 AS montant_cotisation_salarie,
0 AS montant_frais_imposables,
COALESCE(hcum_net_a_payer_salarie,0) - subq.montant_net_a_payer_salarie AS montant_net_a_payer_salarie,
COALESCE(hcum_net_imposable_salarie,0) - subq.montant_net_imposable_salarie AS montant_net_imposable_salarie,
0 AS montant_od_net_salarie,
subq.organisme_cotisation_id AS organisme_cotisation_id,
subq.profil_id AS profil_id,
(SELECT oid FROM rh.t_rubriques WHERE code = 'C000') AS rubrique_id,
0 AS compte_id,
subq.salarie_id AS salarie_id,
0 AS taux_cotisation_patronale,
0 AS taux_cotisation_salarie,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee
FROM (
SELECT
p_historique_paie.age_id,
p_historique_paie.contrat_id,
p_historique_paie.contrat_mois_id,
p_historique_paie.date_debut,
p_historique_paie.date_fin,
p_historique_paie.date_paie,
p_historique_paie.mois_activite,
p_historique_paie.mois_paie,
sum(montant_avantage_nature) AS montant_avantage_nature,
sum(montant_brut) AS montant_brut,
sum(montant_cotisation_patronale) AS montant_cotisation_patronale,
sum(montant_cotisation_salarie) AS montant_cotisation_salarie,
0 AS montant_frais_imposables,
sum(montant_net_a_payer_salarie) AS montant_net_a_payer_salarie,
sum(montant_net_imposable_salarie) AS montant_net_imposable_salarie,
0 AS montant_od_net_salarie,
p_historique_paie.organisme_cotisation_id,
p_historique_paie.profil_id,
(SELECT oid FROM rh.t_rubriques WHERE code = 'C000'),
p_historique_paie.salarie_id,
0 AS taux_cotisation_patronale,
0 AS taux_cotisation_salarie,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee
FROM rh.p_historique_paie
JOIN rh.p_salaries ON p_salaries.oid = p_historique_paie.salarie_id
GROUP BY 1,2,3,4,5,6,7,8, 17,18,19,20) AS subq
JOIN rh.p_salaries ON p_salaries.oid = subq.salarie_id
JOIN w_totaux ON 1=1
AND w_totaux.matricule = p_salaries.matricule
AND w_totaux.date = subq.date_paie
WHERE 1!=1
OR COALESCE(hcum_avantage_nature,0) - subq.montant_avantage_nature <> 0
OR COALESCE(hcum_brut,0) - subq.montant_brut <> 0
OR COALESCE(hcum_net_a_payer_salarie,0) - subq.montant_net_a_payer_salarie <> 0
OR COALESCE(hcum_net_imposable_salarie,0) - subq.montant_net_imposable_salarie <> 0
;
-- Insérer pour chaque bulletin une ligne qui va faire le compte avec le total (rubrique 'C006' nommée 'Ecart cumulé patronal')
INSERT INTO rh.p_historique_paie
(
age_id,
contrat_id,
contrat_mois_id,
date_debut,
date_fin,
date_paie,
mois_activite,
mois_paie,
base,
nombre,
heure_contrat,
heure_payee,
heure_travaillee,
montant_masse_salariale,
montant_avantage_nature,
montant_brut,
montant_cotisation_patronale,
montant_cotisation_salarie,
montant_frais_imposables,
montant_net_a_payer_salarie,
montant_net_imposable_salarie,
montant_od_net_salarie,
organisme_cotisation_id,
profil_id,
rubrique_id,
compte_id,
salarie_id,
taux_cotisation_patronale,
taux_cotisation_salarie,
nombre_provisions,
montant_provisions,
montant_masse_salariale_provisionnee
)
SELECT
subq.age_id,
subq.contrat_id,
subq.contrat_mois_id,
subq.date_debut,
subq.date_fin,
subq.date_paie,
subq.mois_activite,
subq.mois_paie,
0 AS base,
0 AS nombre,
0 as heure_contrat,
0 as heure_payee,
0 as heure_travaillee,
0 as montant_masse_salariale,
0 AS montant_avantage_nature,
0 AS montant_brut,
COALESCE(hcum_cotisation_patronale,0) - subq.montant_cotisation_patronale AS montant_cotisation_patronale,
0 AS montant_cotisation_salarie,
0 AS montant_frais_imposables,
0 AS montant_net_a_payer_salarie,
0 AS montant_net_imposable_salarie,
0 AS montant_od_net_salarie,
subq.organisme_cotisation_id AS organisme_cotisation_id,
subq.profil_id AS profil_id,
(SELECT oid FROM rh.t_rubriques WHERE code = 'C006') AS rubrique_id,
0 AS compte_id,
subq.salarie_id AS salarie_id,
0 AS taux_cotisation_patronale,
0 AS taux_cotisation_salarie,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee
FROM (
SELECT
p_historique_paie.age_id,
p_historique_paie.contrat_id,
p_historique_paie.contrat_mois_id,
p_historique_paie.date_debut,
p_historique_paie.date_fin,
p_historique_paie.date_paie,
p_historique_paie.mois_activite,
p_historique_paie.mois_paie,
sum(montant_avantage_nature) AS montant_avantage_nature,
sum(montant_brut) AS montant_brut,
sum(montant_cotisation_patronale) AS montant_cotisation_patronale,
sum(montant_cotisation_salarie) AS montant_cotisation_salarie,
0 AS montant_frais_imposables,
sum(montant_net_a_payer_salarie) AS montant_net_a_payer_salarie,
sum(montant_net_imposable_salarie) AS montant_net_imposable_salarie,
0 AS montant_od_net_salarie,
p_historique_paie.organisme_cotisation_id,
p_historique_paie.profil_id,
(SELECT oid FROM rh.t_rubriques WHERE code = 'C006'),
p_historique_paie.salarie_id,
0 AS taux_cotisation_patronale,
0 AS taux_cotisation_salarie,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee
FROM rh.p_historique_paie
JOIN rh.p_salaries ON p_salaries.oid = p_historique_paie.salarie_id
GROUP BY 1,2,3,4,5,6,7,8, 17,18,19,20) AS subq
JOIN rh.p_salaries ON p_salaries.oid = subq.salarie_id
JOIN w_totaux ON 1=1
AND w_totaux.matricule = p_salaries.matricule
AND w_totaux.date = subq.date_paie
WHERE 1!=1
OR COALESCE(hcum_cotisation_patronale,0) - subq.montant_cotisation_patronale <> 0
;
-- Insérer pour chaque bulletin une ligne qui va faire le compte avec le total (rubrique 'C007' nommée 'Ecart cumulé cotisations salariales')
INSERT INTO rh.p_historique_paie
(
age_id,
contrat_id,
contrat_mois_id,
date_debut,
date_fin,
date_paie,
mois_activite,
mois_paie,
base,
nombre,
heure_contrat,
heure_payee,
heure_travaillee,
montant_masse_salariale,
montant_avantage_nature,
montant_brut,
montant_cotisation_patronale,
montant_cotisation_salarie,
montant_frais_imposables,
montant_net_a_payer_salarie,
montant_net_imposable_salarie,
montant_od_net_salarie,
organisme_cotisation_id,
profil_id,
rubrique_id,
compte_id,
salarie_id,
taux_cotisation_patronale,
taux_cotisation_salarie,
nombre_provisions,
montant_provisions,
montant_masse_salariale_provisionnee)
SELECT
subq.age_id,
subq.contrat_id,
subq.contrat_mois_id,
subq.date_debut,
subq.date_fin,
subq.date_paie,
subq.mois_activite,
subq.mois_paie,
0 AS base,
0 as nombre,
0 as heure_contrat,
0 as heure_payee,
0 as heure_travaillee,
0 as montant_masse_salariale,
0 AS montant_avantage_nature,
0 AS montant_brut,
0 AS montant_cotisation_patronale,
COALESCE(hcum_cotisation_salarie,0) - subq.montant_cotisation_salarie AS montant_cotisation_salarie,
0 AS montant_frais_imposables,
0 AS montant_net_a_payer_salarie,
0 AS montant_net_imposable_salarie,
0 AS montant_od_net_salarie,
subq.organisme_cotisation_id AS organisme_cotisation_id,
subq.profil_id AS profil_id,
(SELECT oid FROM rh.t_rubriques WHERE code = 'C007') AS rubrique_id,
0 AS compte_id,
subq.salarie_id AS salarie_id,
0 AS taux_cotisation_patronale,
0 AS taux_cotisation_salarie,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee
FROM (
SELECT
p_historique_paie.age_id,
p_historique_paie.contrat_id,
p_historique_paie.contrat_mois_id,
p_historique_paie.date_debut,
p_historique_paie.date_fin,
p_historique_paie.date_paie,
p_historique_paie.mois_activite,
p_historique_paie.mois_paie,
sum(montant_avantage_nature) AS montant_avantage_nature,
sum(montant_brut) AS montant_brut,
sum(montant_cotisation_patronale) AS montant_cotisation_patronale,
sum(montant_cotisation_salarie) AS montant_cotisation_salarie,
0 AS montant_frais_imposables,
sum(montant_net_a_payer_salarie) AS montant_net_a_payer_salarie,
sum(montant_net_imposable_salarie) AS montant_net_imposable_salarie,
0 AS montant_od_net_salarie,
p_historique_paie.organisme_cotisation_id,
p_historique_paie.profil_id,
(SELECT oid FROM rh.t_rubriques WHERE code = 'C000'),
p_historique_paie.salarie_id,
0 AS taux_cotisation_patronale,
0 AS taux_cotisation_salarie,
0 AS nombre_provisions,
0 AS montant_provisions,
0 AS montant_masse_salariale_provisionnee
FROM rh.p_historique_paie
JOIN rh.p_salaries ON p_salaries.oid = p_historique_paie.salarie_id
GROUP BY 1,2,3,4,5,6,7,8, 17,18,19,20) AS subq
JOIN rh.p_salaries ON p_salaries.oid = subq.salarie_id
JOIN w_totaux ON 1=1
AND w_totaux.matricule = p_salaries.matricule
AND w_totaux.date = subq.date_paie
WHERE 1!=1
OR COALESCE(hcum_cotisation_salarie,0) - subq.montant_cotisation_salarie <> 0
;
-- Supprimer les C000 qui contrepassent exactement
DROP TABLE IF EXISTS w_historique_paie_c000
;
CREATE TEMP TABLE w_historique_paie_c000 AS
SELECT
contrat_mois_id,
mois_paie,
SUM(montant_brut) AS montant_brut_c000,
MIN(rubrique_id) AS rubrique_c000_id
FROM rh.p_historique_paie
WHERE rubrique_id IN (SELECT oid FROM rh.t_rubriques WHERE code = 'C000')
GROUP BY 1,2
HAVING SUM(montant_brut) <> 0
;
DROP TABLE IF EXISTS w_historique_paie_frais
;
CREATE TEMP TABLE w_historique_paie_frais AS
SELECT
p_historique_paie.contrat_mois_id,
p_historique_paie.mois_paie,
rubrique_c000_id,
MIN(rubrique_id) AS rubrique_frais_id
FROM rh.p_historique_paie
JOIN w_historique_paie_c000 ON
p_historique_paie.contrat_mois_id = w_historique_paie_c000.contrat_mois_id AND
p_historique_paie.mois_paie = w_historique_paie_c000.mois_paie AND
p_historique_paie.montant_brut = 0 - w_historique_paie_c000.montant_brut_c000
GROUP BY 1,2,3
HAVING count(*) = 1
;
UPDATE rh.p_historique_paie
SET
montant_frais_imposables = CASE WHEN rubrique_id = rubrique_frais_id THEN montant_brut ELSE 0 END,
montant_brut = 0
FROM w_historique_paie_frais
WHERE 1=1
AND p_historique_paie.contrat_mois_id = w_historique_paie_frais.contrat_mois_id
AND p_historique_paie.mois_paie = w_historique_paie_frais.mois_paie
AND p_historique_paie.rubrique_id IN (rubrique_frais_id, rubrique_c000_id)
;
]]>
= '2008-01-01'
GROUP BY 1,2,3,4
;
-- Peuplement de rh.p_visites_medicales
TRUNCATE rh.p_visites_medicales
;
ALTER SEQUENCE rh.s_visites_medicales RESTART WITH 1
;
INSERT INTO rh.p_visites_medicales(
salarie_id,
contrat_id,
contrat_mois_id,
mois_activite,
date,
motif_visite_id)
SELECT
p_salaries.oid,
p_contrats_mois.contrat_id,
p_contrats_mois.oid,
w_visites.mois_activite,
w_visites.date,
coalesce(t_motifs_visite.oid, 0)
FROM w_visites
JOIN rh.p_salaries ON p_salaries.matricule = w_visites.matricule
JOIN rh.p_contrats_mois ON 1=1
AND p_contrats_mois.salarie_id = p_salaries.oid
AND w_visites.date BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin
LEFT JOIN rh.t_motifs_visite ON t_motifs_visite.code_original = w_visites.motif
;
]]>