You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

2105 lines
105 KiB

<?xml version="1.0" encoding="ISO-8859-15"?>
<ROOT>
<NODE name="INIT" label="INITIALISATIONS">
<NODE label="Complément prod_adp">
<condition><![CDATA[
]]></condition>
<sqlcmd><![CDATA[
-- Cas ADP Charmilles dans lequel il manque des champs / ELSAN ( periode de paie, numero contrat, dates et nombres mal formes)
UPDATE prod_adp.etablissement SET
CODEETAB = VALTABCODEARGUMENT,
SOCJURID = CODEETAB
WHERE CODEETAB IS DISTINCT FROM VALTABCODEARGUMENT
;
ALTER TABLE prod_adp.etaciv ADD COLUMN IF NOT EXISTS ETCDNA date;
UPDATE prod_adp.etaciv SET
ETCDNA = COALESCE(ETCDNA,base.cti_to_date(IN_ETCDNA))
;
ALTER TABLE prod_adp.contrat ADD COLUMN IF NOT EXISTS H1DDEB date;
ALTER TABLE prod_adp.contrat ADD COLUMN IF NOT EXISTS H1DFIN date;
ALTER TABLE prod_adp.contrat ADD COLUMN IF NOT EXISTS CNHMENS numeric;
ALTER TABLE prod_adp.contrat ADD COLUMN IF NOT EXISTS ACT_MOTIF_DEBUT text;
ALTER TABLE prod_adp.contrat ADD COLUMN IF NOT EXISTS ACT_MOTIF_FIN text;
UPDATE prod_adp.contrat SET
IN_CNHMENS = replace(IN_CNHMENS,' ','')
;
UPDATE prod_adp.contrat SET
H1DDEB = COALESCE(H1DDEB,base.cti_to_date(IN_H1DDEB)),
H1DFIN = COALESCE(H1DFIN,base.cti_to_date(IN_H1DFIN)),
CNHMENS = COALESCE(CNHMENS,base.cti_to_number(IN_CNHMENS))
;
ALTER TABLE prod_adp.gremme ADD COLUMN IF NOT EXISTS PERPAIE integer;
ALTER TABLE prod_adp.gremme ADD COLUMN IF NOT EXISTS H1DDEB date;
ALTER TABLE prod_adp.gremme ADD COLUMN IF NOT EXISTS H1DFIN date;
ALTER TABLE prod_adp.gremme ADD COLUMN IF NOT EXISTS RESBRU numeric;
ALTER TABLE prod_adp.gremme ADD COLUMN IF NOT EXISTS REHPAY numeric;
ALTER TABLE prod_adp.gremme ADD COLUMN IF NOT EXISTS REHTRA numeric;
UPDATE prod_adp.gremme SET
IN_RESBRU = replace(IN_RESBRU,' ','')
;
UPDATE prod_adp.gremme SET
H1DDEB = COALESCE(H1DDEB,base.cti_to_date(IN_H1DDEB)),
H1DFIN = COALESCE(H1DFIN,base.cti_to_date(IN_H1DFIN)),
RESBRU = COALESCE(RESBRU,base.cti_to_number(IN_RESBRU)),
REHPAY = COALESCE(REHPAY,base.cti_to_number(IN_REHPAY)),
REHTRA = COALESCE(REHTRA,base.cti_to_number(IN_REHTRA))
;
UPDATE prod_adp.gremme
SET PERPAIE = to_char(H1DDEB,'YYYYMM')::numeric
WHERE PERPAIE IS NULL
;
ALTER TABLE prod_adp.admchs ADD COLUMN IF NOT EXISTS ADC_ADDDEB date;
ALTER TABLE prod_adp.admchs ADD COLUMN IF NOT EXISTS ADC_ADDCOT date;
ALTER TABLE prod_adp.admchs ADD COLUMN IF NOT EXISTS ADC_ADDEC date;
ALTER TABLE prod_adp.admchs ADD COLUMN IF NOT EXISTS ADC_ADDDEBPENS date;
UPDATE prod_adp.admchs SET
ADC_ADDDEB = COALESCE(ADC_ADDDEB,base.cti_to_date(IN_ADC_ADDDEB)),
ADC_ADDCOT = COALESCE(ADC_ADDCOT,base.cti_to_date(IN_ADC_ADDCOT)),
ADC_ADDDEBPENS = COALESCE(ADC_ADDDEBPENS,base.cti_to_date(IN_ADC_ADDDEBPENS))
;
ALTER TABLE prod_adp.positp ADD COLUMN IF NOT EXISTS H1DDEB date;
ALTER TABLE prod_adp.positp ADD COLUMN IF NOT EXISTS H1DFIN date;
UPDATE prod_adp.positp SET
H1DDEB = COALESCE(H1DDEB,base.cti_to_date(IN_H1DDEB)),
H1DFIN = COALESCE(H1DFIN,base.cti_to_date(IN_H1DFIN))
;
ALTER TABLE prod_adp.rubrique ADD COLUMN IF NOT EXISTS PERPAIE integer;
ALTER TABLE prod_adp.rubrique ADD COLUMN IF NOT EXISTS RUBDATE date;
ALTER TABLE prod_adp.rubrique ADD COLUMN IF NOT EXISTS PERIODE_AFFECTATION date;
ALTER TABLE prod_adp.rubrique ADD COLUMN IF NOT EXISTS RUBMNT00 numeric;
ALTER TABLE prod_adp.rubrique ADD COLUMN IF NOT EXISTS RUBNB00 numeric;
ALTER TABLE prod_adp.rubrique ADD COLUMN IF NOT EXISTS RUBTAUX00 numeric;
UPDATE prod_adp.rubrique SET
IN_RUBMNT00 = replace(IN_RUBMNT00,' ',''),
IN_RUBNB00 = replace(IN_RUBNB00,' ',''),
IN_RUBTAUX00 = replace(IN_RUBTAUX00,' ','')
;
UPDATE prod_adp.rubrique SET
RUBDATE = COALESCE(RUBDATE,base.cti_to_date(IN_RUBDATE)),
PERIODE_AFFECTATION = COALESCE(PERIODE_AFFECTATION,base.cti_to_date(IN_PERIODE_AFFECTATION)),
RUBMNT00 = COALESCE(RUBMNT00,base.cti_to_number(IN_RUBMNT00)),
RUBNB00 = COALESCE(RUBNB00,base.cti_to_number(IN_RUBNB00)),
RUBTAUX00 = COALESCE(RUBTAUX00,base.cti_to_number(IN_RUBTAUX00))
;
UPDATE prod_adp.rubrique
SET PERPAIE = to_char(RUBDATE,'YYYYMM')::numeric
WHERE PERPAIE IS NULL
;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS H1DDEB date;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS H1DFIN date;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS DEBH2 date;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS FINH2 date;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS FINH2 date;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SACAFFEC03 text;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SALAFFEC03 text;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SACAFFEC04 text;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SALAFFEC04 text;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SACAFFEC05 text;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SALAFFEC05 text;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SACAFFEC06 text;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SALAFFEC06 text;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SACAFFEC07 text;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SALAFFEC07 text;
ALTER TABLE prod_adp.sadmin ADD COLUMN IF NOT EXISTS SAD_LIB35 text;
UPDATE prod_adp.sadmin SET
H1DDEB = COALESCE(H1DDEB,base.cti_to_date(IN_H1DDEB)),
H1DFIN = COALESCE(H1DFIN,base.cti_to_date(IN_H1DFIN)),
DEBH2 = COALESCE(DEBH2,base.cti_to_date(IN_DEBH2)),
FINH2 = COALESCE(FINH2,base.cti_to_date(IN_FINH2))
;
ALTER TABLE prod_adp.rgl_pp_tabrub ADD COLUMN IF NOT EXISTS NOORDRE numeric;
UPDATE prod_adp.rgl_pp_tabrub SET
IN_NOORDRE = replace(IN_NOORDRE,' ','')
;
UPDATE prod_adp.rgl_pp_tabrub SET
NOORDRE = COALESCE(NOORDRE,base.cti_to_number(IN_NOORDRE))
;
]]></sqlcmd>
</NODE>
<NODE label="Complément prod_adp - Almaviva">
<condition><![CDATA[
SELECT current_database() = 'icti_528'
;
]]></condition>
<sqlcmd><![CDATA[
UPDATE prod_adp.gremme
SET GRMCOD06 = '03301'
WHERE GRMCOD06 = '01101'
;
]]></sqlcmd>
</NODE>
<NODE label="Pré-traitements">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_ets
;
CREATE TEMP TABLE w_ets AS
SELECT
socjurid as ent_code,
max(name) as ent_texte,
codeetab as ets_code,
max(name) as ets_texte,
siret as ets_siret
FROM prod_adp.etablissement
WHERE 1!=1
OR codeetab IN (SELECT rhp_in('siren')) -- et/ou soit un ou plusieurs codes établissment.
OR SIRET IN (SELECT rhp_in('siren')) -- et/ou soit un ou plusieurs codes établissment.
OR left(SIRET,9) IN (SELECT rhp_in('siren')) -- et/ou soit un ou plusieurs codes établissment.
GROUP BY 1,3,5
;
-- Màj des Entreprises.
INSERT INTO rh.t_entreprises(code_original, code, texte, texte_court, siren)
select
ent_code,
ent_code,
ent_texte,
substr(ent_texte, 1, 50),
substr(ets_siret, 1, 9)
from w_ets
where ent_code NOT IN (SELECT code_original FROM rh.t_entreprises WHERE code_original IS NOT NULL)
group by 1,2,3,4,5
;
with ent as (
SELECT
t_entreprises.oid,
substr(ets_siret, 1, 9) AS siren
FROM rh.t_entreprises
JOIN w_ets on w_ets.ent_code = t_entreprises.code_original)
UPDATE rh.t_entreprises
SET siren = ent.siren
FROM ent
WHERE 1=1
and t_entreprises.oid = ent.oid
and t_entreprises.siren IS DISTINCT FROM ent.siren
;
-- Màj des Etablissements.
INSERT INTO rh.t_etablissements(code_original, code, texte, texte_court, entreprise_id, siret)
SELECT
ets_code,
ets_code,
ets_texte,
substr(ets_texte, 1, 50),
t_entreprises.oid,
ets_siret
FROM w_ets
JOIN rh.t_entreprises ON t_entreprises.code_original = w_ets.ent_code
where ets_code NOT IN (SELECT code_original FROM rh.t_etablissements WHERE code_original IS NOT NULL)
group by 1,2,3,4,5,6
;
with eta as (
SELECT
t_etablissements.oid,
ets_siret as siret
FROM rh.t_etablissements
JOIN w_ets on ets_code = t_etablissements.code_original)
UPDATE rh.t_etablissements
SET siret = eta.siret
FROM eta
WHERE 1=1
and t_etablissements.oid = eta.oid
and t_etablissements.siret IS DISTINCT FROM eta.siret
;
DROP TABLE IF EXISTS w_sal_ets
;
CREATE TEMP TABLE w_sal_ets AS
SELECT
etcmat as etcmat,
grmcod06 as ets
FROM prod_adp.gremme
join w_ets on w_ets.ets_code = grmcod06
WHERE COALESCE(H1DFIN, '2099-12-31') >= rhp('rhprovider_start')::date
group by 1,2
;
]]></sqlcmd>
</NODE>
<NODE name="INIT" type="common" />
</NODE>
<NODE name="PROD" label="RECUPERATION DES DONNEES DE PRODUCTION">
<NODE label="Récupération des bulletins">
<sqlcmd><![CDATA[
DROP SEQUENCE IF EXISTS s_bulletins
;
CREATE SEQUENCE s_bulletins
;
ALTER SEQUENCE s_bulletins RESTART WITH 1
;
-- Récupération des bulletins. Ne semble servir uniquement pour trouver l'affectation de l'établissement
DROP TABLE IF EXISTS w_bulletins
;
CREATE TEMP TABLE w_bulletins AS (
with gestion_multi_bulletins AS (
-- Gestion des cas de plusieurs bulletins sur le même mois
SELECT
etcmat AS matricule,
gremme.perpaie::int AS mois,
MIN(gremme.h1ddeb::date) AS date_debut,
MAX(coalesce(gremme.h1dfin::date, base.cti_last_day(gremme.h1ddeb))) AS date_fin,
(MIN(array[to_char(gremme.h1ddeb::date, 'YYYYMMDD')::int, t_etablissements.entreprise_id::int]))[2] AS entreprise_id,
(MIN(array[to_char(gremme.h1ddeb::date, 'YYYYMMDD')::int, t_etablissements.oid::int]))[2] AS etablissement_id,
SUM(gremme.resbru) AS resbru,
SUM(gremme.rehpay) AS rehpay,
SUM(gremme.rehtra) AS rehtra
FROM prod_adp.gremme
JOIN rh.t_etablissements ON t_etablissements.code_original = gremme.grmcod06
WHERE
COALESCE(H1DFIN, '2099-12-31') >= rhp('rhprovider_start')::date
AND t_etablissements.oid != 0
GROUP BY 1,2
)
SELECT
nextval('s_bulletins'::regclass) AS bulletin_id,
entreprise_id,
etablissement_id,
'BULLETIN' || '-' || matricule || '-' || mois AS numero_bulletin,
date_debut,
date_fin,
mois,
matricule,
resbru,
rehpay,
rehtra,
0::bigint AS affectation_contrat_mois_id,
0::int AS est_hors_periode_contrat
FROM gestion_multi_bulletins
)
;
]]></sqlcmd>
</NODE>
<NODE label="Récupération des contrats">
<sqlcmd><![CDATA[
DROP SEQUENCE IF EXISTS s_contrats
;
CREATE SEQUENCE s_contrats;
ALTER SEQUENCE s_contrats RESTART WITH 1
;
-- Récupération des contrats
DROP TABLE IF EXISTS w_contrats
;
CREATE TEMP TABLE w_contrats AS (
with dernier_bulletin_salaries AS (
SELECT
matricule,
MAX(date_fin) AS date_fin_dernier_bulletin
FROM w_bulletins
GROUP BY 1
)
SELECT
nextval('s_contrats'::regclass) AS contrat_id,
contrat.etcmat AS matricule,
0::bigint AS salarie_id,
H1DDEB AS date_debut_contrat,
COALESCE(H1DFIN, '2099-12-31') AS date_fin_contrat,
'CONTRAT' || '-' || contrat.ETCMAT || '-' || to_char(row_number() OVER (PARTITION BY contrat.ETCMAT ORDER BY H1DDEB), 'FM99900') AS numero_contrat,
'CONTRAT' || '-' || contrat.ETCMAT || '-' || to_char(row_number() OVER (PARTITION BY contrat.ETCMAT ORDER BY H1DDEB),'FM99900') AS code_original,
CASE
WHEN t_divers.valeur = '0' THEN cnlcnt -- Nature du contrat
WHEN t_divers.valeur = '1' THEN lnmcnt -- Type du contrat
END AS type_contrat,
0::bigint AS etablissement_id,
0::bigint AS entreprise_id,
0::bigint AS profil_id,
cnhmens AS heures_theoriques,
coalesce(case when cnhmens >= 151.67 then 'TC' else 'TP' end||round(cnhmens::numeric, 2)::text, chr(1)||'*') AS type_temps_travail,
coalesce(nullif(cnhmens / 151.67, 0), 1.0) AS etp_theorique,
0::int AS est_hors_periode,
dernier_bulletin_salaries.date_fin_dernier_bulletin
FROM prod_adp.contrat
JOIN w_sal_ets ON w_sal_ets.etcmat = contrat.etcmat -- Limiter la remontée des contrats aux seuls salariés ayant un bulletin
JOIN rh.t_divers ON code = 'ADP_TYPE_CONTRAT'
LEFT JOIN dernier_bulletin_salaries ON dernier_bulletin_salaries.matricule = contrat.etcmat
WHERE (cnlcnt != '' OR lnmcnt != '') -- exclu les contrats "en erreur".
ORDER BY H1DDEB
)
;
]]></sqlcmd>
</NODE>
<NODE label="Attribution de l'établissement aux contrats">
<sqlcmd><![CDATA[
-- Mise à jour de l'établissement dans les contrats
-- Si plusieurs contrats sur le même mois.
UPDATE w_contrats
SET
etablissement_id = w_bulletins.etablissement_id,
entreprise_id = w_bulletins.entreprise_id
FROM w_bulletins
WHERE
w_bulletins.matricule = w_contrats.matricule
AND w_bulletins.date_debut >= w_contrats.date_debut_contrat
AND w_bulletins.date_fin <= w_contrats.date_fin_contrat
;
-- Si etablissement_id restant à 0, on renseigne le dernier id connu dans les contrats
UPDATE w_contrats
SET
etablissement_id = subview.etablissement_id,
entreprise_id = subview.entreprise_id
FROM
(
SELECT
matricule,
(MAX(array[w_contrats.date_fin_contrat::text, w_contrats.etablissement_id::text]))[2]::int AS etablissement_id,
(MAX(array[w_contrats.date_fin_contrat::text, w_contrats.entreprise_id::text]))[2]::int AS entreprise_id
FROM w_contrats
WHERE etablissement_id <> 0
GROUP BY 1
) AS subview
WHERE
w_contrats.etablissement_id = 0
AND w_contrats.matricule = subview.matricule
;
-- Si etablissement_id restant à 0, on renseigne l'établissement le plus récent
UPDATE w_contrats
SET
etablissement_id = subview.etablissement_id,
entreprise_id = subview.entreprise_id
FROM
(
SELECT
matricule,
(MAX(array[w_bulletins.date_fin::text, w_bulletins.etablissement_id::text]))[2]::int AS etablissement_id,
(MAX(array[w_bulletins.date_fin::text, w_bulletins.entreprise_id::text]))[2]::int AS entreprise_id
FROM w_bulletins
GROUP BY 1
) AS subview
WHERE
w_contrats.etablissement_id = 0
AND w_contrats.matricule = subview.matricule
;
ANALYZE w_contrats
;
-- Mise à jours des bulletins hors période de contrat
UPDATE w_bulletins
SET est_hors_periode_contrat = 1
FROM
(
SELECT
w_bulletins.matricule,
w_bulletins.bulletin_id
FROM w_bulletins
LEFT JOIN w_contrats ON w_contrats.matricule = w_bulletins.matricule AND w_bulletins.date_debut BETWEEN w_contrats.date_debut_contrat AND w_contrats.date_fin_contrat
WHERE w_contrats.contrat_id IS NULL
) AS subview
WHERE
w_bulletins.matricule = subview.matricule
AND w_bulletins.bulletin_id = subview.bulletin_id
;
ANALYZE w_bulletins
;
]]></sqlcmd>
</NODE>
<NODE label="Création des contrats mois">
<sqlcmd><![CDATA[
DROP SEQUENCE IF EXISTS s_contrats_mois
;
CREATE SEQUENCE s_contrats_mois;
ALTER SEQUENCE s_contrats_mois RESTART WITH 1
;
-- Ventilation (découpage) des contrats par mois
DROP TABLE IF EXISTS w_contrats_mois
;
CREATE TEMP TABLE w_contrats_mois AS (
with date_debut_mois AS (
SELECT
*,
generate_series(
date_trunc('month', date_debut_contrat),
CASE
WHEN date_fin_contrat = '2099-12-31' AND w_contrats.date_fin_dernier_bulletin IS NOT NULL THEN w_contrats.date_fin_dernier_bulletin
WHEN date_fin_contrat = '2099-12-31' AND w_contrats.date_fin_dernier_bulletin IS NULL THEN NOW()
ELSE date_fin_contrat END,
'1 month'
)::date AS date_debut_mois
FROM w_contrats
WINDOW w AS (PARTITION BY matricule ORDER BY date_debut_contrat DESC)
)
SELECT
nextval('s_contrats_mois'::regclass) AS contrat_mois_id,
row_number() over (PARTITION BY matricule, date_debut_mois) AS nombre_contrats_mois,
*,
CASE
WHEN to_char(date_debut_mois,'YYYYMM')::numeric = to_char(date_debut_contrat,'YYYYMM')::numeric
THEN date_debut_contrat
ELSE date_debut_mois
END AS date_debut_contrat_mois,
CASE
WHEN to_char(base.cti_last_day(date_debut_mois),'YYYYMM')::numeric = to_char(date_fin_contrat,'YYYYMM')::numeric
THEN date_fin_contrat
ELSE base.cti_last_day(date_debut_mois)
END AS date_fin_contrat_mois,
CASE
WHEN to_char(date_debut_mois,'YYYYMM')::numeric = to_char(date_debut_contrat,'YYYYMM')::numeric
THEN to_char(date_debut_contrat,'YYYYMM')::numeric
ELSE to_char(date_debut_mois,'YYYYMM')::numeric
END AS mois_activite,
chr(1)||'*' AS motif_debut_code,
chr(1)||'*' AS motif_debut_texte,
chr(1)||'*' AS motif_fin_code,
chr(1)||'*' AS motif_fin_texte,
chr(1)||'*' AS categorie_socio_professionnelle_code,
chr(1)||'*' AS categorie_socio_professionnelle_texte,
chr(1)||'*' AS qualification_code,
chr(1)||'*' AS qualification_texte,
chr(1)||'*' AS service_code,
chr(1)||'*' AS service_texte,
chr(1)||'*' AS code_emploi_code,
chr(1)||'*' AS code_emploi_texte,
chr(1)||'*' AS grille_code,
chr(1)||'*' AS grille_texte,
chr(1)||'*' AS grille_groupe_code,
chr(1)||'*' AS grille_groupe_texte,
chr(1)||'*' AS statut_code,
chr(1)||'*' AS statut_texte,
COALESCE(type_contrat, chr(1)||'*') AS type_contrat_code,
COALESCE(type_contrat, chr(1)||'*') AS type_contrat_texte,
COALESCE(type_temps_travail, chr(1)||'*') AS type_temps_travail_code,
COALESCE(type_temps_travail, chr(1)||'*') AS type_temps_travail_texte,
chr(1)||'*' AS specialite_code,
chr(1)||'*' AS groupe_cotisant_code,
chr(1)||'*' AS section_analytique_code,
chr(1)||'*' AS section_analytique_paie_code,
chr(1)||'*' AS societe_interim_code,
chr(1)||'*' AS type_horaire_code,
chr(1)||'*' AS cadre_emploi_code, -- public
chr(1)||'*' AS categorie_conge_code, -- public
chr(1)||'*' AS categorie_statutaire_code, -- public
chr(1)||'*' AS commission_paritaire_code, -- public
chr(1)||'*' AS compte_salarie_code, -- public
chr(1)||'*' AS filiere_code, -- public
chr(1)||'*' AS lettre_budgetaire_code, -- public
chr(1)||'*' AS unite_fonctionnelle_code -- public
FROM date_debut_mois
WHERE date_debut_mois >= (rhp('rhprovider_start')::date - interval '2 YEAR')
)
;
]]></sqlcmd>
</NODE>
<NODE label="Récupération des informations administratives des salariés">
<sqlcmd><![CDATA[
-- Récupération des informations positp des salariés
DROP TABLE IF EXISTS w_infos_positp
;
CREATE TEMP TABLE w_infos_positp AS (
SELECT
row_number() OVER() AS id,
w_contrats_mois.contrat_mois_id,
positp.h1ddeb AS date_debut,
positp.h1dfin AS date_fin,
LOWER(positp.pocins) AS categorie_socio_professionnelle_code,
positp.pocemp AS qualification_code,
positp.polemp AS qualification_texte,
positp.pocatp AS statut_code,
positp.polcatp AS statut_texte,
COALESCE(positp.pocemp,'') AS code_emploi_code,
COALESCE(positp.polemp,'') AS code_emploi_texte
FROM w_contrats_mois
JOIN prod_adp.positp ON positp.etcmat = w_contrats_mois.matricule
AND base.cti_overlaps(w_contrats_mois.date_debut_contrat_mois, w_contrats_mois.date_fin_contrat_mois, positp.h1ddeb, COALESCE(positp.h1dfin, '2099-12-31'::date))
)
;
-- Récupération des informations administratives des salariés
DROP TABLE IF EXISTS w_infos_administratives
;
CREATE TEMP TABLE w_infos_administratives AS (
SELECT
row_number() OVER() AS id,
w_contrats_mois.contrat_mois_id,
sadmin.h1ddeb AS date_debut,
sadmin.h1dfin AS date_fin,
sadmin.sadcfinctr AS motif_fin_code,
sadmin.sadlfinctr AS motif_fin_texte,
CASE
WHEN UPPER(COALESCE(t_divers.valeur,'')) = 'SACAFF' THEN sadmin.SACAFF
WHEN UPPER(COALESCE(t_divers.valeur,'')) = 'SACAFFEC01' THEN sadmin.SACAFFEC01
WHEN UPPER(COALESCE(t_divers.valeur,'')) = 'SACAFFEC02' THEN sadmin.SACAFFEC02
ELSE COALESCE(sadmin.sacaffec05,'')
END AS service_code,
CASE
WHEN UPPER(COALESCE(t_divers.valeur,'')) = 'SACAFF' THEN sadmin.SALAFF
WHEN UPPER(COALESCE(t_divers.valeur,'')) = 'SACAFFEC01' THEN sadmin.SALAFFEC01
WHEN UPPER(COALESCE(t_divers.valeur,'')) = 'SACAFFEC02' THEN sadmin.SALAFFEC02
ELSE COALESCE(sadmin.salaffec05,'')
END AS service_texte,
COALESCE(sadmin.sacaffec04,'') AS grille_groupe_code,
COALESCE(sadmin.salaffec04,'') AS grille_groupe_texte
FROM w_contrats_mois
JOIN prod_adp.sadmin ON sadmin.etcmat = w_contrats_mois.matricule
AND base.cti_overlaps(w_contrats_mois.date_debut_contrat_mois, w_contrats_mois.date_fin_contrat_mois, sadmin.h1ddeb, COALESCE(sadmin.h1dfin, '2099-12-31'::date))
JOIN rh.t_divers ON t_divers.code = 'ADP_SERVICE_COLUMN'
)
;
-- Récupération pour chaque contrat_mois des informations les plus récentes du salarié
DROP TABLE IF EXISTS dernieres_infos_contrat_mois
;
CREATE TEMP TABLE dernieres_infos_contrat_mois AS
with dernieres_infos_par_contrat_mois AS (
SELECT
w_contrats_mois.contrat_mois_id,
(MAX(ARRAY[EXTRACT(EPOCH FROM w_infos_positp.date_debut), w_infos_positp.id]))[2] AS dernier_infos_positp_id,
(MAX(ARRAY[EXTRACT(EPOCH FROM w_infos_administratives.date_debut), w_infos_administratives.id]))[2] AS dernier_infos_administratives_id
FROM w_contrats_mois
LEFT JOIN w_infos_positp ON w_infos_positp.contrat_mois_id = w_contrats_mois.contrat_mois_id
LEFT JOIN w_infos_administratives ON w_infos_administratives.contrat_mois_id = w_contrats_mois.contrat_mois_id
GROUP BY 1
)
SELECT
w_contrats_mois.contrat_mois_id,
w_infos_positp.categorie_socio_professionnelle_code,
w_infos_administratives.motif_fin_code,
w_infos_administratives.motif_fin_texte,
w_infos_positp.qualification_code,
w_infos_positp.qualification_texte,
w_infos_positp.statut_code,
w_infos_positp.statut_texte,
w_infos_administratives.service_code,
w_infos_administratives.service_texte,
w_infos_administratives.grille_groupe_code,
w_infos_administratives.grille_groupe_texte,
w_infos_positp.code_emploi_code,
w_infos_positp.code_emploi_texte
FROM w_contrats_mois
LEFT JOIN dernieres_infos_par_contrat_mois ON dernieres_infos_par_contrat_mois.contrat_mois_id = w_contrats_mois.contrat_mois_id
LEFT JOIN w_infos_positp ON w_infos_positp.contrat_mois_id = w_contrats_mois.contrat_mois_id
AND w_infos_positp.id = dernieres_infos_par_contrat_mois.dernier_infos_positp_id
LEFT JOIN w_infos_administratives ON w_infos_administratives.contrat_mois_id = w_infos_administratives.contrat_mois_id
AND w_infos_administratives.id = dernieres_infos_par_contrat_mois.dernier_infos_administratives_id
;
-- Mise à jour des éléments de positp et sadmin sur les contrats_mois
UPDATE w_contrats_mois
SET
motif_debut_code = COALESCE(chr(1)||'*', chr(1)||'*'),
motif_debut_texte = COALESCE(chr(1)||'*', chr(1)||'*'),
motif_fin_code = COALESCE(dernieres_infos_contrat_mois.motif_fin_code, chr(1)||'*'),
motif_fin_texte = COALESCE(dernieres_infos_contrat_mois.motif_fin_texte, chr(1)||'*'),
categorie_socio_professionnelle_code = COALESCE(dernieres_infos_contrat_mois.categorie_socio_professionnelle_code, chr(1)||'*'),
categorie_socio_professionnelle_texte = COALESCE(dernieres_infos_contrat_mois.categorie_socio_professionnelle_code, chr(1)||'*'),
qualification_code = COALESCE(dernieres_infos_contrat_mois.qualification_code, chr(1)||'*'),
qualification_texte = COALESCE(dernieres_infos_contrat_mois.qualification_texte, chr(1)||'*'),
service_code = COALESCE(dernieres_infos_contrat_mois.service_code, chr(1)||'*'),
service_texte = COALESCE(dernieres_infos_contrat_mois.service_texte, chr(1)||'*'),
code_emploi_code = COALESCE(dernieres_infos_contrat_mois.code_emploi_code, chr(1)||'*'),
code_emploi_texte = COALESCE(dernieres_infos_contrat_mois.code_emploi_texte, chr(1)||'*'),
grille_groupe_code = COALESCE(dernieres_infos_contrat_mois.grille_groupe_code, chr(1)||'*'),
grille_groupe_texte = COALESCE(dernieres_infos_contrat_mois.grille_groupe_texte, chr(1)||'*'),
statut_code = COALESCE(dernieres_infos_contrat_mois.statut_code, chr(1)||'*'),
statut_texte = COALESCE(dernieres_infos_contrat_mois.statut_texte, chr(1)||'*')
FROM dernieres_infos_contrat_mois
WHERE dernieres_infos_contrat_mois.contrat_mois_id = w_contrats_mois.contrat_mois_id
;
ANALYZE w_contrats_mois
;
]]></sqlcmd>
</NODE>
<NODE label="Profils">
<sqlcmd><![CDATA[
-- Création des profils
DROP TABLE IF EXISTS w_profils
;
CREATE TEMP TABLE w_profils AS (
SELECT
0::bigint AS profil_id, -- Mis à jour dans le SHARE
motif_debut_code AS motif_debut_code_original,
motif_fin_code AS motif_fin_code_original,
categorie_socio_professionnelle_code AS categorie_socio_professionnelle_code_original,
qualification_code AS qualification_code_original,
service_code AS service_code_original,
code_emploi_code AS code_emploi_code_original,
grille_code AS grille_code_original,
grille_groupe_code AS grille_groupe_code_original,
specialite_code AS specialite_code_original,
groupe_cotisant_code AS groupe_cotisant_code_original,
section_analytique_code AS section_analytique_code_original,
section_analytique_paie_code AS section_analytique_paie_code_original,
societe_interim_code AS societe_interim_code_original,
type_horaire_code AS type_horaire_code_original,
statut_code AS statut_code_original,
type_contrat_code AS type_contrat_code_original,
type_temps_travail_code AS type_temps_travail_code_original,
cadre_emploi_code AS cadre_emploi_code_original,
categorie_conge_code AS categorie_conge_code_original,
categorie_conge_code AS categorie_statutaire_code_original,
commission_paritaire_code AS commission_paritaire_code_original,
compte_salarie_code AS compte_salarie_code_original,
filiere_code AS filiere_code_original,
lettre_budgetaire_code AS lettre_budgetaire_code_original,
unite_fonctionnelle_code AS unite_fonctionnelle_code_original
FROM w_contrats_mois
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
)
;
]]></sqlcmd>
</NODE>
<NODE name="PROFIL" type="common" />
<NODE label="Attribution profil_id aux contrats_mois">
<sqlcmd><![CDATA[
-- Mise à jour du profil_id dans w_contrats_mois
UPDATE w_contrats_mois
SET profil_id = p_profils.oid
FROM rh.p_profils
WHERE 1=1
AND p_profils.cadre_emploi_code_original = w_contrats_mois.cadre_emploi_code
AND p_profils.categorie_conge_code_original = w_contrats_mois.categorie_conge_code
AND p_profils.categorie_socio_professionnelle_code_original = w_contrats_mois.categorie_socio_professionnelle_code
AND p_profils.categorie_statutaire_code_original = w_contrats_mois.categorie_statutaire_code
AND p_profils.code_emploi_code_original = w_contrats_mois.code_emploi_code
AND p_profils.commission_paritaire_code_original = w_contrats_mois.commission_paritaire_code
AND p_profils.compte_salarie_code_original = w_contrats_mois.compte_salarie_code
AND p_profils.filiere_code_original = w_contrats_mois.filiere_code
AND p_profils.grille_code_original = w_contrats_mois.grille_code
AND p_profils.grille_groupe_code_original = w_contrats_mois.grille_groupe_code
AND p_profils.groupe_cotisant_code_original = w_contrats_mois.groupe_cotisant_code
AND p_profils.lettre_budgetaire_code_original = w_contrats_mois.lettre_budgetaire_code
AND p_profils.motif_debut_code_original = w_contrats_mois.motif_debut_code
AND p_profils.motif_fin_code_original = w_contrats_mois.motif_fin_code
AND p_profils.qualification_code_original = w_contrats_mois.qualification_code
AND p_profils.section_analytique_code_original = w_contrats_mois.section_analytique_code
AND p_profils.section_analytique_paie_code_original = w_contrats_mois.section_analytique_paie_code
AND p_profils.service_code_original = w_contrats_mois.service_code
AND p_profils.societe_interim_code_original = w_contrats_mois.societe_interim_code
AND p_profils.specialite_code_original = w_contrats_mois.specialite_code
AND p_profils.statut_code_original = w_contrats_mois.statut_code
AND p_profils.type_contrat_code_original = w_contrats_mois.type_contrat_code
AND p_profils.type_horaire_code_original = w_contrats_mois.type_horaire_code
AND p_profils.type_temps_travail_code_original = w_contrats_mois.type_temps_travail_code
AND p_profils.unite_fonctionnelle_code_original = w_contrats_mois.unite_fonctionnelle_code
;
]]></sqlcmd>
</NODE>
<NODE label="Gestion des bulletins hors période de contrat">
<sqlcmd><![CDATA[
-- Création de contrats_mois fictifs avec les données de profil du plus proche contrat_mois existant
INSERT INTO w_contrats_mois (matricule, date_debut_contrat_mois, date_fin_contrat_mois, mois_activite, contrat_mois_id, nombre_contrats_mois, contrat_id, etablissement_id, entreprise_id, profil_id, est_hors_periode)
SELECT
w_bulletins.matricule,
w_bulletins.date_debut,
w_bulletins.date_fin,
to_char(w_bulletins.date_debut,'YYYYMM')::numeric AS mois_activite,
nextval('s_contrats_mois'::regclass) AS contrat_mois_id,
row_number() over (PARTITION BY w_bulletins.matricule, to_char(w_bulletins.date_debut,'YYYYMM')) AS nombre_contrats_mois,
(MAX(array[to_char(w_contrats_mois.date_fin_contrat_mois, 'YYYYMMDD')::int, w_contrats_mois.contrat_id::int]))[2] AS contrat_id,
(MAX(array[to_char(w_contrats_mois.date_fin_contrat_mois, 'YYYYMMDD')::int, w_contrats_mois.etablissement_id::int]))[2] AS etablissement_id,
(MAX(array[to_char(w_contrats_mois.date_fin_contrat_mois, 'YYYYMMDD')::int, w_contrats_mois.entreprise_id::int]))[2] AS entreprise_id,
(MAX(array[to_char(w_contrats_mois.date_fin_contrat_mois, 'YYYYMMDD')::int, w_contrats_mois.profil_id::int]))[2] AS profil_id,
1 AS est_hors_periode
FROM w_bulletins
JOIN w_contrats_mois AS w_contrats_mois ON w_contrats_mois.matricule = w_bulletins.matricule AND w_contrats_mois.date_fin_contrat_mois < w_bulletins.date_debut
WHERE w_bulletins.est_hors_periode_contrat = 1
GROUP BY 1,2,3,4
;
-- Affectation au premier contrat_mois_id sur le mois au bulletin concerné
UPDATE w_bulletins
SET affectation_contrat_mois_id = w_contrats_mois.contrat_mois_id
FROM w_contrats_mois
WHERE
w_contrats_mois.matricule = w_bulletins.matricule
AND w_contrats_mois.mois_activite = w_bulletins.mois
AND w_contrats_mois.nombre_contrats_mois = 1
;
]]></sqlcmd>
</NODE>
<NODE label="Salariés">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_salaries
;
CREATE TEMP TABLE w_salaries AS
SELECT
rhp('finess') AS finess,
etaciv.etcmat AS matricule,
etaciv.etcmat AS matricule_planning,
etaciv.etcmat AS code,
etaciv.etcmat AS code_original,
etaciv.etnss AS nir,
COALESCE(w_contrats_mois.entreprise_id, 0) AS entreprise_id,
etaciv.etcnom AS nom,
etaciv.etcnjf AS nom_naissance,
etaciv.etcpre AS prenom,
etaciv.etcdna::date AS date_naissance,
etaciv.etcsex AS sexe,
coalesce(t_nationalites.oid, 0) AS nationalite_id, -- etcnat, etlnat
coalesce(t_codes_postaux.oid,0) AS code_postal_id,
coalesce(t_situations_famille.oid, 0) AS situation_famille_id, -- etlsfa, etcsfa
etaciv.nvoie AS adresse1,
etaciv.lvoie AS adresse2,
COALESCE((MAX(ARRAY[EXTRACT(EPOCH FROM w_contrats_mois.date_debut_contrat_mois), w_contrats_mois.profil_id]))[2], 0) AS profil_id,
MAX(w_contrats_mois.date_debut_contrat) AS date_debut,
MAX(w_contrats_mois.date_fin_contrat) AS date_fin,
MIN(w_contrats_mois.date_debut_contrat) AS date_entree_ets,
MAX(w_contrats_mois.date_fin_contrat) AS date_sortie_ets,
-- Champs dédiés au public.
null::date AS date_entree_fp,
null::date AS date_entree_fph,
0 AS no_adeli,
0 AS code_cotisation_id,
0 AS matricule_retraite
FROM prod_adp.etaciv
LEFT JOIN w_contrats_mois ON w_contrats_mois.matricule = etaciv.etcmat
LEFT join rh.t_nationalites ON t_nationalites.code_original = etaciv.etcnat
LEFT join rh.t_situations_famille ON t_situations_famille.code_original = etaciv.etcsfa
LEFT JOIN rh.t_codes_postaux ON t_codes_postaux.code = etaciv.etcpst
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
;
]]></sqlcmd>
</NODE>
<NODE name="SALARIE" type="common" />
<NODE label="Salariés (Màj oid)">
<sqlcmd><![CDATA[
UPDATE w_contrats_mois SET
salarie_id = p_salaries.oid
FROM rh.p_salaries
WHERE w_contrats_mois.matricule = p_salaries.matricule
;
]]></sqlcmd>
</NODE>
<NODE label="Contrats">
<sqlcmd><![CDATA[
TRUNCATE rh.p_contrats
;
ALTER SEQUENCE rh.s_contrats RESTART WITH 1
;
WITH dernier_profil_id AS (
SELECT
contrat_id,
(MAX(ARRAY[EXTRACT(EPOCH FROM date_fin_contrat_mois), profil_id]))[2] AS profil_id
FROM w_contrats_mois
GROUP BY 1
)
INSERT INTO rh.p_contrats(
oid,
salarie_id,
date_debut,
date_fin,
numero_contrat,
code_original,
etablissement_id,
profil_id)
SELECT
w_contrats.contrat_id,
p_salaries.oid AS salarie_id,
w_contrats.date_debut_contrat,
w_contrats.date_fin_contrat,
w_contrats.numero_contrat,
w_contrats.code_original,
w_contrats.etablissement_id,
dernier_profil_id.profil_id
FROM w_contrats
JOIN rh.p_salaries ON p_salaries.code_original = w_contrats.matricule
JOIN dernier_profil_id on dernier_profil_id.contrat_id = w_contrats.contrat_id
;
TRUNCATE rh.p_contrats_mois
;
ALTER SEQUENCE rh.s_contrats_mois RESTART WITH 1
;
INSERT INTO rh.p_contrats_mois(
oid,
salarie_id,
contrat_id,
profil_id,
code_original,
mois_activite,
date_debut,
date_fin,
nombre_entrees,
nombre_departs,
nombre_debut_contrat,
nombre_fin_contrat,
present_debut_mois,
present_fin_mois,
equivalent_temps_plein,
age_jours,
etablissement_id)
SELECT
w_contrats_mois.contrat_mois_id,
w_contrats_mois.salarie_id,
w_contrats_mois.contrat_id,
w_contrats_mois.profil_id,
w_contrats_mois.salarie_id || ' - ' || w_contrats_mois.contrat_mois_id,
w_contrats_mois.mois_activite,
w_contrats_mois.date_debut_contrat_mois,
w_contrats_mois.date_fin_contrat_mois,
CASE WHEN p_salaries.date_entree_ets BETWEEN w_contrats_mois.date_debut_contrat_mois AND w_contrats_mois.date_fin_contrat_mois THEN 1 ELSE 0 END AS nombre_entrees,
CASE WHEN p_salaries.date_sortie_ets BETWEEN w_contrats_mois.date_debut_contrat_mois AND w_contrats_mois.date_fin_contrat_mois THEN 1 ELSE 0 END AS nombre_departs,
CASE WHEN p_contrats.date_debut BETWEEN date_debut_contrat_mois AND w_contrats_mois.date_fin_contrat_mois THEN 1 ELSE 0 END AS nombre_debut_contrat,
CASE WHEN p_contrats.date_fin BETWEEN date_debut_contrat_mois AND w_contrats_mois.date_fin_contrat_mois THEN 1 ELSE 0 END AS nombre_fin_contrat,
case when w_contrats_mois.date_debut_contrat > base.cti_first_day(w_contrats_mois.date_debut_contrat_mois) then 0 else 1 end AS present_debut_mois,
case when w_contrats_mois.date_fin_contrat < base.cti_last_day(w_contrats_mois.date_debut_contrat_mois) then 0 else 1 end AS present_fin_mois,
w_contrats_mois.etp_theorique AS equivalent_temps_plein,
w_contrats_mois.date_fin_contrat_mois - coalesce(p_salaries.date_naissance, '1962-04-18'::date) AS age_jours,
w_contrats_mois.etablissement_id
FROM rh.p_contrats
JOIN w_contrats_mois on w_contrats_mois.contrat_id = p_contrats.oid
JOIN rh.p_salaries on p_salaries.oid = w_contrats_mois.salarie_id
;
]]></sqlcmd>
</NODE>
<NODE label="Mise à jour des informations permanentes">
<sqlcmd><![CDATA[
-- Màj des catégories socio-professionnelles
INSERT INTO rh.t_categories_socio_professionnelle (code_original, code, texte, texte_court)
SELECT categorie_socio_professionnelle_code, categorie_socio_professionnelle_code, categorie_socio_professionnelle_code, substr(categorie_socio_professionnelle_code, 1, 50)
FROM w_contrats_mois
WHERE
categorie_socio_professionnelle_code <> chr(1)||'*'
AND categorie_socio_professionnelle_code NOT IN (SELECT code_original FROM rh.t_categories_socio_professionnelle WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
;
-- Màj des motifs de début de contrat.
INSERT INTO rh.t_motifs_debut_contrat(code_original, code, texte, texte_court)
SELECT substr(md5(act_motif_debut), 1, 5), substr(md5(act_motif_debut), 1, 5), act_motif_debut, substr(max(act_motif_debut),1,50)
FROM prod_adp.contrat
WHERE substr(md5(act_motif_debut), 1, 5) NOT IN (SELECT code_original FROM rh.t_motifs_debut_contrat WHERE code_original IS NOT NULL)
GROUP BY 1,2,3
ORDER BY 2
;
-- Màj des motifs de fin de contrat.
INSERT INTO rh.t_motifs_fin_contrat(code_original, code, texte, texte_court)
SELECT motif_fin_code, motif_fin_code, MAX(motif_fin_texte), substr(MAX(motif_fin_texte), 1, 50)
FROM w_contrats_mois
WHERE
motif_fin_code <> chr(1)||'*'
AND motif_fin_code NOT IN (SELECT code_original FROM rh.t_motifs_fin_contrat WHERE code_original IS NOT NULL)
GROUP BY 1,2
;
-- Màj des nationalités.
INSERT INTO rh.t_nationalites(code, texte, texte_court, code_original)
SELECT etcnat, max(etlnat), max(substr(etlnat,1,50)), etcnat
FROM prod_adp.etaciv
WHERE etcnat NOT IN (SELECT code_original FROM rh.t_nationalites WHERE code_original IS NOT NULL)
GROUP BY 1,4
;
-- Màj des qualifications
INSERT INTO rh.t_qualifications(code_original, code, texte, texte_court)
SELECT qualification_code, qualification_code, max(qualification_texte), substr(max(qualification_texte), 1, 50)
FROM w_contrats_mois
WHERE
qualification_code <> chr(1)||'*'
AND qualification_code NOT IN (SELECT code_original FROM rh.t_qualifications WHERE code_original IS NOT NULL)
GROUP BY 1,2
;
-- Màj des rubriques
INSERT INTO rh.t_rubriques(code_original, code, texte, texte_court, rang_edition)
select rubid, rubid, libelle, substr(libelle, 1, 50), noordre
from prod_adp.rgl_pp_tabrub
WHERE rubid NOT IN (SELECT code_original FROM rh.t_rubriques WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4,5
;
-- Màj des situations de famille
INSERT INTO rh.t_situations_famille(code_original, code, texte_court, texte)
SELECT etcsfa, etcsfa, MAX(substr(etlsfa,1,50)), MAX(etlsfa)
FROM prod_adp.etaciv
WHERE etcsfa NOT IN (SELECT code_original FROM rh.t_situations_famille WHERE code_original IS NOT NULL)
GROUP BY 1,2
;
-- Màj des types de contrat
INSERT INTO rh.t_types_contrat(code_original, code, texte, texte_court)
SELECT type_contrat_code, type_contrat_code, type_contrat_texte, substr(type_contrat_texte, 1, 50)
FROM w_contrats_mois
WHERE
type_contrat_code <> chr(1)||'*'
AND type_contrat_code NOT IN (SELECT code_original FROM rh.t_types_contrat WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
;
-- Màj des statuts
INSERT INTO rh.t_statuts(code_original, code, texte, texte_court)
SELECT statut_code, statut_code, statut_texte, substr(statut_texte, 1, 50)
FROM w_contrats_mois
WHERE
statut_code <> chr(1)||'*'
AND statut_code NOT IN (SELECT code_original FROM rh.t_statuts WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
;
-- Màj des types de temps de travail
INSERT INTO rh.t_types_temps_travail(code_original, code, texte, texte_court)
SELECT
CASE WHEN heures_theoriques >= 151.67 THEN 'TC' ELSE 'TP' END||ROUND(heures_theoriques::numeric, 2)::text,
CASE WHEN heures_theoriques >= 151.67 THEN 'TC' ELSE 'TP' END||ROUND(heures_theoriques::numeric, 2)::text,
CASE WHEN heures_theoriques >= 151.67 THEN 'Temps Complet ' ELSE 'Temps Partiel ' end||round(heures_theoriques::numeric, 2)::text,
CASE WHEN heures_theoriques >= 151.67 THEN 'TC ' ELSE 'TP ' END||ROUND(heures_theoriques::numeric, 2)::text
FROM w_contrats_mois
WHERE CASE WHEN heures_theoriques >= 151.67 THEN 'TC' ELSE 'TP' END||ROUND(heures_theoriques::numeric, 2)::text NOT IN (SELECT code_original FROM rh.t_types_temps_travail WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
;
-- Màj des services
INSERT INTO rh.t_services(code_original, code, texte, texte_court)
SELECT service_code, service_code, max(service_texte), max(substr(service_texte, 1, 50))
FROM w_contrats_mois
WHERE
service_code <> chr(1)||'*'
AND service_code NOT IN (SELECT code_original FROM rh.t_services WHERE code_original IS NOT NULL)
GROUP BY 1,2
;
-- Màj des codes emploi. avec LTR ADP ELSAN.
INSERT INTO rh.t_codes_emploi(code_original, code, texte, texte_court)
SELECT code_emploi_code, code_emploi_code, max(code_emploi_texte), max(substr(code_emploi_texte, 1, 50))
FROM w_contrats_mois
WHERE
code_emploi_code <> chr(1)||'*'
AND code_emploi_code NOT IN (SELECT code_original FROM rh.t_codes_emploi WHERE code_original IS NOT NULL)
GROUP BY 1,2
;
-- Màj des groupes de grilles
INSERT INTO rh.t_grilles_groupes(code_original, code, texte, texte_court)
SELECT grille_groupe_code, grille_groupe_code, max(grille_groupe_texte), max(substr(grille_groupe_texte, 1, 50))
FROM w_contrats_mois
WHERE
grille_groupe_code <> chr(1)||'*'
AND grille_groupe_code NOT IN (SELECT code_original FROM rh.t_grilles_groupes WHERE code_original IS NOT NULL)
GROUP BY 1,2
;
]]></sqlcmd>
</NODE>
<NODE label="Paramétrage des rubriques">
<sqlcmd><![CDATA[
-- Pré-paramétrage automatique des rubriques (au mieux).
-- Cette requéte n'intervient pas sur les rubriques paramétrées à la main.
-- s_* (source_) :
-- - 0 = nombre
-- - 1 = base
-- - 2 = taux salarial
-- - 3 = montant salarial
-- - 4 = taux patronal
-- - 5 = montant patronal
-- - 6 = montant salarial + montant patronal
update rh.t_rubriques set
p_detail = subq.p_detail,
p_nombre = subq.p_nombre,
s_nombre = 0,
c_nombre = 1,
p_base = subq.p_base,
s_base = 1,
c_base = 1,
p_heures_contrat = subq.p_heures_contrat,
s_heures_contrat = 0,
c_heures_contrat = 1,
p_heures_payees = subq.p_heures_payees,
s_heures_payees = 0,
c_heures_payees = 1,
p_heures_travaillees = subq.p_heures_travaillees,
s_heures_travaillees = 0,
c_heures_travaillees = 1,
p_masse_salariale = subq.p_masse_salariale,
s_masse_salariale = case when subq.p_cotisation_patronale or subq.p_od_net_patronale then 5 else 3 end,
c_masse_salariale = 1,
p_brut = subq.p_brut,
s_brut = 3,
c_brut = 1,
p_avantage_nature = subq.p_avantage_nature,
s_avantage_nature = 3,
c_avantage_nature = 1,
p_frais_imposables = subq.p_frais_imposables,
s_frais_imposables = 3,
c_frais_imposables = 1,
p_cotisation_salarie = subq.p_cotisation_salarie,
s_cotisation_salarie = 3,
c_cotisation_salarie = 1,
p_cotisation_patronale = subq.p_cotisation_patronale,
s_cotisation_patronale = 5,
c_cotisation_patronale = 1,
p_od_net_salarie = subq.p_od_net_salarie,
s_od_net_salarie = 3,
c_od_net_salarie = 1,
p_od_net_patronale = subq.p_od_net_patronale,
s_od_net_patronale = 5,
c_od_net_patronale = 1,
p_net_imposable = subq.p_net_imposable,
s_net_imposable = 3,
c_net_imposable = 1,
p_net_a_payer = subq.p_net_a_payer,
s_net_a_payer = 3,
c_net_a_payer = 1
from (
select
oid,
code,
typerub = 'P' or (typerub = 'G' AND plage = 'P' and nullif(trim(cvcg), '') is not null and interditdvdr is distinct from 'O') AS p_detail,
typerub = 'G' AS p_nombre,
typerub in ('P', 'G') AS p_base,
false AS p_heures_contrat,
false AS p_heures_payees,
false AS p_heures_travaillees,
(typerub = 'P' AND plage = 'B') OR (typerub = 'G' AND plage = 'P' and nullif(trim(cvcg), '') is not null and interditdvdr is distinct from 'O') AS p_masse_salariale,
typerub = 'P' AND plage = 'B' AS p_brut,
false AS p_avantage_nature,
false AS p_frais_imposables,
-- typerub = 'P' AND plage in ('C', 'D', 'R', 'S') as p_cotisation_salarie,
typerub = 'P' AND plage||cotisation in ('C1', 'S1') as p_cotisation_salarie,
typerub = 'G' AND plage = 'P' and nullif(trim(cvcg), '') is not null and interditdvdr is distinct from 'O' as p_cotisation_patronale,
--typerub = 'P' AND plage = 'I' as p_od_net_salarie,
typerub = 'P' AND plage||cotisation in ('C0', 'I0', 'D0', 'R0', 'R1') as p_od_net_salarie,
false AS p_od_net_patronale,
typerub = 'P' AND plage||cotisation in ('B0', 'C1', 'S1') AS p_net_imposable,
typerub = 'P' AND plage in ('B', 'C', 'D', 'I', 'R', 'S') AS p_net_a_payer
from prod_adp.rgl_pp_tabrub
join rh.t_rubriques on t_rubriques.code_original = rgl_pp_tabrub.rubid
where 1=1
and t_rubriques.oid != 0
and t_rubriques.code not ilike 'C%'
) as subq
where 1=1
and t_rubriques.oid = subq.oid
and NOT t_rubriques.user_modified
;
]]></sqlcmd>
</NODE>
<NODE label="Pre-traitement de la paie">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_hp
;
CREATE TEMP TABLE w_hp AS
SELECT
w_contrats_mois.contrat_mois_id AS bul_code,
w_contrats_mois.contrat_mois_id,
w_contrats_mois.contrat_id,
w_contrats_mois.salarie_id,
w_bulletins.date_debut,
w_bulletins.date_fin,
0 AS profil_id,
rubrique.etcmat AS matricule,
rubrique.rubdate::date AS date_paie,
rubrique.perpaie::int AS mois_paie,
t_rubriques.oid AS rubrique_id,
t_rubriques.p_detail,
t_rubriques.p_cumul,
t_rubriques.c_base
* case when @t_rubriques.c_base != 1 then coalesce(case when proratiser_conversion then etp_theorique else 1.0 end, 1.0) else 1.0 end
* CASE WHEN p_base THEN (CASE s_base
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END) else 0 end AS base,
t_rubriques.c_nombre
* case when @t_rubriques.c_nombre != 1 then coalesce(case when proratiser_conversion then etp_theorique else 1.0 end, 1.0) else 1.0 end
* CASE WHEN p_nombre THEN (CASE s_nombre
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END) else 0 end AS nombre,
t_rubriques.c_heures_contrat
* case when @t_rubriques.c_heures_contrat != 1 then coalesce(case when proratiser_conversion then etp_theorique else 1.0 end, 1.0) else 1.0 end
* CASE WHEN p_heures_contrat
then (CASE s_heures_contrat
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
else 0 end
AS heure_contrat,
t_rubriques.c_heures_payees
* case when @t_rubriques.c_heures_payees != 1 then coalesce(case when proratiser_conversion then etp_theorique else 1.0 end, 1.0) else 1.0 end
* CASE WHEN p_heures_payees
then (CASE s_heures_payees
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END) else 0 end AS heure_payee,
t_rubriques.c_heures_travaillees
* case when @t_rubriques.c_heures_travaillees != 1 then coalesce(case when proratiser_conversion then etp_theorique else 1.0 end, 1.0) else 1.0 end
* CASE WHEN p_heures_travaillees
then (CASE s_heures_travaillees
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END) else 0 end AS heure_travaillee,
t_rubriques.c_masse_salariale
* (CASE WHEN p_masse_salariale THEN
(CASE s_masse_salariale
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
else 0 end) AS masse_salariale,
t_rubriques.c_brut
* (CASE WHEN p_brut THEN
(CASE s_brut
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
else 0 end) AS montant_brut,
t_rubriques.c_frais_imposables
* (case when p_frais_imposables then
(CASE s_frais_imposables
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
else 0 end) AS montant_frais_imposables,
t_rubriques.coefficient_txs * (case when p_cotisation_salarie then rubrique.rubtaux00 else 0 end) AS taux_sal,
t_rubriques.c_cotisation_salarie
* (case when p_cotisation_salarie then
(CASE s_cotisation_salarie
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_salWHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
else 0 end) AS montant_cot_sal,
t_rubriques.coefficient_txp * (case when p_cotisation_patronale then rubrique.rubtaux00 else 0 end) AS taux_pat,
t_rubriques.c_cotisation_patronale
* (case when p_cotisation_patronale then
(CASE s_cotisation_patronale
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_salWHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
else 0 end) AS montant_cot_pat,
t_rubriques.c_od_net_salarie
* (CASE WHEN p_od_net_salarie THEN
(CASE s_od_net_salarie
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_salWHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
ELSE 0 END) AS od_net,
t_rubriques.c_od_net_patronale
* (CASE WHEN p_od_net_patronale THEN
(CASE s_od_net_patronale
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_salWHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
ELSE 0 END) AS od_net_p,
t_rubriques.c_avantage_nature
* (CASE WHEN p_avantage_nature THEN
(CASE s_avantage_nature
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_salWHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
ELSE 0 END) AS avt_nat,
t_rubriques.c_net_imposable
* (CASE WHEN p_net_imposable THEN
(CASE s_net_imposable
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
ELSE 0 END) AS net_imposable,
t_rubriques.c_net_a_payer
* (CASE WHEN p_net_a_payer THEN
(CASE s_net_a_payer
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
ELSE 0 END) AS net_a_payer,
t_rubriques.c_nombre_provisions
* (CASE WHEN p_nombre_provisions THEN
(CASE s_nombre_provisions
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
ELSE 0 END) AS nombre_provisions,
t_rubriques.c_montant_provisions
* (CASE WHEN p_montant_provisions THEN
(CASE s_montant_provisions
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
ELSE 0 END) AS montant_provisions,
t_rubriques.c_masse_salariale_provisionnee
* (CASE WHEN p_masse_salariale_provisionnee THEN
(CASE s_masse_salariale_provisionnee
WHEN 0 THEN rubrique.rubmnt00
WHEN 1 THEN rubrique.rubnb00
WHEN 2 THEN rubrique.rubtaux00
WHEN 3 THEN rubrique.rubmnt00
--WHEN 4 THEN rubrique.tx_pat
WHEN 5 THEN rubrique.rubmnt00
--WHEN 6 THEN rubrique.mt_sal + rubrique.mt_pat
--WHEN 7 THEN rubrique.mt_sal - rubrique.mt_pat
--WHEN 8 THEN rubrique.mt_pat - rubrique.mt_sal
END)
ELSE 0 END) AS masse_salariale_provisionnee
FROM prod_adp.rubrique
JOIN rh.t_rubriques ON t_rubriques.code_original = rubrique.rubcode
JOIN w_bulletins ON w_bulletins.matricule = rubrique.etcmat AND w_bulletins.mois = rubrique.PERPAIE
JOIN w_contrats_mois ON w_contrats_mois.contrat_mois_id = w_bulletins.affectation_contrat_mois_id
WHERE 1=1
AND rubrique.perpaie::int >= 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 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)
;
]]></sqlcmd>
</NODE>
<NODE label="Chiffrier">
<sqlcmd><![CDATA[
TRUNCATE rh.p_chiffrier_production
;
INSERT INTO rh.p_chiffrier_production (entreprise_id, etablissement_id, mois, nombre_salaries, montant_brut, nombre_heures)
SELECT
entreprise_id,
etablissement_id,
mois,
count(DISTINCT matricule),
sum(resbru),
sum(rehpay)
FROM w_bulletins
group by 1,2,3
;
]]></sqlcmd>
</NODE>
<NODE label="Historique de la paie">
<sqlcmd><![CDATA[
-- -- Génération paie
SELECT base.cti_stash_table_indexes('rh', 'p_historique_paie')
;
TRUNCATE rh.p_historique_paie
;
ALTER SEQUENCE rh.s_historique_paie RESTART WITH 1
;
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.bul_code as code_original,
date_part('year', age(w_hp.date_paie, date_naissance)) AS age_id,
w_hp.base,
w_hp.nombre,
w_hp.contrat_id,
w_hp.contrat_mois_id,
w_hp.date_debut,
w_hp.date_fin,
w_hp.date_paie AS date_paie,
w_hp.mois_paie AS mois_activite,
w_hp.mois_paie AS mois_paie,
w_hp.heure_contrat,
w_hp.heure_payee,
w_hp.heure_travaillee,
w_hp.avt_nat AS montant_avantage_nature,
w_hp.montant_brut AS montant_brut,
w_hp.masse_salariale as montant_masse_salariale,
w_hp.montant_cot_pat AS montant_cotisation_patronale,
w_hp.montant_cot_sal AS montant_cotisation_salarie,
w_hp.montant_frais_imposables,
w_hp.net_a_payer AS montant_net_a_payer_salarie,
w_hp.net_imposable AS montant_net_imposable_salarie,
w_hp.od_net AS montant_od_net_salarie,
0 AS organisme_cotisation_id,
w_hp.profil_id,
w_hp.rubrique_id,
0 AS compte_id,
w_hp.salarie_id,
w_hp.taux_pat AS taux_cotisation_patronale,
w_hp.taux_sal AS taux_cotisation_salarie,
w_hp.nombre_provisions,
w_hp.montant_provisions,
w_hp.masse_salariale_provisionnee AS montant_masse_salariale_provisionnee
FROM w_hp
JOIN rh.p_salaries ON p_salaries.oid = w_hp.salarie_id
WHERE p_detail
;
SELECT base.cti_stash_pop_table_indexes('rh', 'p_historique_paie')
;
-- Création d'une table récapitulative des écarts à calculer par indicateur de paie (1 seule ligne).
DROP TABLE IF EXISTS w_cumul
;
CREATE TEMP TABLE w_cumul AS
SELECT
bool_or(p_cumul and p_heures_contrat) as total_h_contrat,
bool_or(p_cumul and p_heures_travaillees) as total_h_travaillees,
bool_or(p_cumul and p_heures_payees) as total_h_payees,
bool_or(p_cumul and p_masse_salariale) as total_masse_salariale,
bool_or(p_cumul and p_brut) as total_brut,
bool_or(p_cumul and p_avantage_nature) as total_avantage_nature,
bool_or(p_cumul and p_cotisation_salarie) as total_cot_sal,
bool_or(p_cumul and p_cotisation_patronale) as total_cot_pat,
bool_or(p_cumul and p_od_net_salarie) as total_od_net,
bool_or(p_cumul and p_net_imposable) as total_imposable,
bool_or(p_cumul and p_net_a_payer) as total_payer,
bool_or(p_cumul and p_nombre_provisions) as total_nombre_provisions,
bool_or(p_cumul and p_montant_provisions) as total_montant_provisions,
bool_or(p_cumul and p_masse_salariale_provisionnee) as total_masse_salariale_provisionnee
FROM rh.t_rubriques
;
-- Création d'une table temp qui regroupe tous les totaux à atteindre pour calculer l'écart.
DROP TABLE IF EXISTS w_totaux
;
CREATE TEMP TABLE w_totaux AS
WITH all_buls as ( -- Permet de s'assurer que l'on a bien TOUS les totaux même ceux qui n'existent pas (cas des suspensions de contrat rub. 0595)
SELECT
w_hp.bul_code,
w_hp.matricule,
w_hp.date_paie,
w_hp.mois_paie
FROM w_hp
WHERE p_detail
GROUP BY 1,2,3,4
)
SELECT
all_buls.bul_code as code_original,
all_buls.matricule,
all_buls.date_paie as date,
all_buls.mois_paie,
coalesce(sum(case when p_cumul then heure_contrat else 0 end), 0) AS hcum_heures_contrat,
coalesce(sum(case when p_cumul then heure_payee else 0 end), 0) AS hcum_heures_payees,
coalesce(sum(case when p_cumul then heure_travaillee else 0 end), 0) AS hcum_heures_travaillees,
coalesce(round(sum(case when p_cumul then masse_salariale else 0 end), 2), 0) AS hcum_masse_salariale,
coalesce(round(sum(case when p_cumul then montant_brut else 0 end), 2), 0) AS hcum_brut,
coalesce(round(sum(case when p_cumul then avt_nat else 0 end), 2), 0) AS hcum_avantage_nature,
0::numeric AS hcum_frais_imposables,
coalesce(round(sum(case when p_cumul then montant_cot_sal else 0 end), 2), 0) AS hcum_cotisation_salarie,
coalesce(round(sum(case when p_cumul then montant_cot_pat else 0 end), 2), 0) AS hcum_cotisation_patronale,
coalesce(round(sum(case when p_cumul then od_net else 0 end), 2), 0) AS hcum_od_net_salarie,
coalesce(round(sum(case when p_cumul then net_imposable else 0 end), 2), 0) AS hcum_net_imposable_salarie,
coalesce(round(sum(case when p_cumul then net_a_payer else 0 end), 2), 0) AS hcum_net_a_payer_salarie,
coalesce(round(sum(case when p_cumul then nombre_provisions else 0 end), 2), 0) AS hcum_nombre_provisions,
coalesce(round(sum(case when p_cumul then montant_provisions else 0 end), 2), 0) AS hcum_montant_provisions,
coalesce(round(sum(case when p_cumul then masse_salariale_provisionnee else 0 end), 2), 0) AS hcum_masse_salariale_provisionnee
FROM all_buls
left join w_hp on true
and w_hp.bul_code = all_buls.bul_code
and w_hp.p_cumul
GROUP BY 1,2,3,4
;
-- 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 (
code_original,
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_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
subq.code_original,
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,
case when total_h_contrat then COALESCE(hcum_heures_contrat, 0) - subq.heure_contrat else 0.0 end AS heure_contrat,
case when total_h_payees then COALESCE(hcum_heures_payees,0) - subq.heure_payee else 0.0 end AS heure_payee,
case when total_h_travaillees then COALESCE(hcum_heures_travaillees,0) - subq.heure_travaillee else 0.0 end AS heure_travaillee,
case when total_avantage_nature then COALESCE(hcum_avantage_nature,0) - subq.montant_avantage_nature else 0.0 end AS montant_avantage_nature,
case when total_brut then COALESCE(hcum_brut,0) - subq.montant_brut else 0.0 end AS montant_brut,
case when total_masse_salariale then COALESCE(hcum_masse_salariale, 0) - subq.montant_masse_salariale else 0.0 end AS montant_masse_salariale,
case when total_cot_pat then COALESCE(hcum_cotisation_patronale,0) - subq.montant_cotisation_patronale else 0.0 end AS montant_cotisation_patronale,
case when total_cot_sal then COALESCE(hcum_cotisation_salarie,0) - subq.montant_cotisation_salarie else 0.0 end AS montant_cotisation_salarie,
0 AS montant_frais_imposables,
case when total_payer then COALESCE(hcum_net_a_payer_salarie,0) - subq.montant_net_a_payer_salarie else 0.0 end AS montant_net_a_payer_salarie,
case when total_imposable then COALESCE(hcum_net_imposable_salarie,0) - subq.montant_net_imposable_salarie else 0.0 end AS montant_net_imposable_salarie,
case when total_imposable then COALESCE(hcum_od_net_salarie,0) - subq.montant_od_net_salarie else 0.0 end 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,
case when total_nombre_provisions then COALESCE(hcum_nombre_provisions, 0) - subq.nombre_provisions else 0.0 end AS nombre_provisions,
case when total_montant_provisions then COALESCE(hcum_montant_provisions, 0) - subq.montant_provisions else 0.0 end AS montant_provisions,
case when total_masse_salariale_provisionnee then COALESCE(hcum_masse_salariale_provisionnee, 0) - subq.montant_masse_salariale_provisionnee else 0.0 end AS montant_masse_salariale_provisionnee
FROM (
SELECT
p_historique_paie.code_original,
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,
0 AS base,
0 AS nombre,
sum(heure_contrat) AS heure_contrat,
sum(heure_payee) AS heure_payee,
sum(heure_travaillee) AS heure_travaillee,
sum(montant_avantage_nature) AS montant_avantage_nature,
sum(montant_brut) AS montant_brut,
sum(montant_masse_salariale) AS montant_masse_salariale,
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,
sum(montant_od_net_salarie) 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,
sum(nombre_provisions) AS nombre_provisions,
sum(montant_provisions) AS montant_provisions,
sum(montant_masse_salariale_provisionnee) 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,9,10,11, 24,25,26,27,28,29) AS subq
JOIN w_totaux ON w_totaux.code_original = subq.code_original
JOIN w_cumul ON true
WHERE 1!=1
OR case when total_avantage_nature then COALESCE(hcum_avantage_nature,0) - subq.montant_avantage_nature != 0 else false end
OR case when total_brut then COALESCE(hcum_brut,0) - subq.montant_brut != 0 else false end
OR case when total_masse_salariale then COALESCE(hcum_masse_salariale,0) - subq.montant_masse_salariale != 0 else false end
OR case when total_payer then COALESCE(hcum_net_a_payer_salarie,0) - subq.montant_net_a_payer_salarie != 0 else false end
OR case when total_imposable then COALESCE(hcum_net_imposable_salarie,0) - subq.montant_net_imposable_salarie != 0 else false end
OR case when total_od_net then COALESCE(hcum_od_net_salarie,0) - subq.montant_od_net_salarie != 0 else false end
OR case when total_cot_pat then COALESCE(hcum_cotisation_patronale,0) - subq.montant_cotisation_patronale != 0 else false end
OR case when total_cot_sal then COALESCE(hcum_cotisation_salarie,0) - subq.montant_cotisation_salarie != 0 else false end
OR case when total_h_contrat then COALESCE(hcum_heures_contrat, 0) - subq.heure_contrat != 0 else false end
OR case when total_h_payees then COALESCE(hcum_heures_payees,0) - subq.heure_payee != 0 else false end
OR case when total_h_travaillees then COALESCE(hcum_heures_travaillees,0) - subq.heure_travaillee != 0 else false end
OR case when total_nombre_provisions then COALESCE(hcum_nombre_provisions,0) - subq.heure_travaillee != 0 else false end
OR case when total_montant_provisions then COALESCE(hcum_montant_provisions,0) - subq.heure_travaillee != 0 else false end
OR case when total_masse_salariale_provisionnee then COALESCE(hcum_masse_salariale_provisionnee,0) - subq.montant_masse_salariale_provisionnee != 0 else false end
;
]]></sqlcmd>
</NODE>
<NODE label="Ventilation des profils">
<sqlcmd><![CDATA[
-- Alimentation des profils simultanés.
TRUNCATE rh.p_profil_contrat_mois
;
ALTER SEQUENCE rh.s_profil_contrat_mois RESTART WITH 1
;
INSERT INTO rh.p_profil_contrat_mois (
profil_id,
contrat_mois_id,
salarie_id,
ratio,
mois)
SELECT
p_contrats_mois.profil_id,
p_contrats_mois.oid AS contrat_mois_id,
p_contrats_mois.salarie_id,
1 AS ratio,
p_contrats_mois.mois_activite
FROM rh.p_contrats_mois
GROUP BY 1,2,3,4,5
;
]]></sqlcmd>
</NODE>
<NODE label="Handicap 2">
<sqlcmd><![CDATA[
TRUNCATE rh.p_handicap2
;
INSERT INTO rh.p_handicap2(
salarie_id,
statut_boeth,
lib_boeth,
type_reco,
lib_reco,
taux_ipp,
deb_validite,
fin_validite,
cat_invalide_pension,
deb_pension,
lourd_handicap,
decision
)
SELECT p_salaries.oid,
admchs.adc_statutboeth,
admchs.adc_boethlib1,
admchs.adc_modcod01,
admchs.adc_modlib01,
coalesce(nullif(replace(admchs.adc_adcipp, ',', '.'), '')::numeric,0),
admchs.adc_adddeb,
coalesce(admchs.adc_addcot, '20991231'::date),
admchs.adc_adcatinvpens,
admchs.adc_adddebpens,
admchs.adc_adcotor,
admchs.adc_addec
FROM rh.p_salaries
JOIN prod_adp.admchs ON p_salaries.matricule = admchs.etcmat
WHERE 1 = 1
and adc_modcod01 >= 1
;
]]></sqlcmd>
</NODE>
<NODE label="Arrêts de travail">
<condition><![CDATA[
-- Si la table prod_adp.absences est présente
SELECT COUNT(*) = 1
FROM information_schema.tables
WHERE table_schema = 'prod_adp' AND table_name = 'absences'
;
]]></condition>
<sqlcmd><![CDATA[
-- Insertion des motifs d'arrêt de travail
INSERT INTO rh.t_motifs_arret(code_original, code, texte, texte_court)
SELECT code, code, code, substr(code, 1, 50)
FROM prod_adp.absences
WHERE code NOT IN (SELECT code_original FROM rh.t_motifs_arret)
GROUP BY 1,2,3,4
;
DROP TABLE IF EXISTS w_arrets
;
CREATE TEMP TABLE w_arrets AS
SELECT
absences.etcmat AS matricule,
to_char(absences.in_h1ddeb::date, 'YYYYMM')::numeric AS mois_activite,
absences.in_h1ddeb AS date_debut,
absences.in_h1dfin AS date_fin,
(absences.in_h1dfin::date + '1 day'::interval)::date AS date_reprise,
absences.code AS code_arret,
((absences.in_h1dfin - absences.in_h1ddeb) + 1)::numeric AS nb_jours,
(((absences.in_h1dfin - absences.in_h1ddeb) + 1) * 7)::numeric AS nb_heures
FROM prod_adp.absences
;
TRUNCATE rh.p_arrets_travail
;
ALTER SEQUENCE rh.s_arrets_travail RESTART WITH 1
;
INSERT INTO rh.p_arrets_travail (
salarie_id,
contrat_id,
mois_activite,
date_debut,
date_fin,
date_reprise,
motif_arret_id,
nb_jours,
nb_heures
)
SELECT
p_salaries.oid,
MAX(p_contrats.oid), -- On prend le max car il peut y avoir un changement de contrat pendant un arrêt,
w_arrets.mois_activite,
w_arrets.date_debut,
w_arrets.date_fin,
w_arrets.date_reprise,
t_motifs_arret.oid,
w_arrets.nb_jours,
w_arrets.nb_heures
FROM w_arrets
JOIN rh.p_salaries ON p_salaries.matricule = w_arrets.matricule
JOIN rh.p_contrats ON p_contrats.salarie_id = p_salaries.oid
AND base.cti_overlaps(w_arrets.date_debut, w_arrets.date_fin, p_contrats.date_debut, p_contrats.date_fin)
LEFT JOIN rh.t_motifs_arret ON t_motifs_arret.code_original = w_arrets.code_arret
GROUP BY 1,3,4,5,6,7,8,9
;
-- Ventilation mensuelle des arrêts de travail
TRUNCATE rh.p_arrets_travail_mois
;
INSERT INTO rh.p_arrets_travail_mois(
arret_travail_id,
salarie_id,
contrat_id,
contrat_mois_id,
mois_activite,
nb_debut_arret,
nb_fin_arret,
nb_reprise_apres_arret,
date_debut,
date_fin,
nb_jours,
nb_heures,
nb_arret
)
SELECT
p_arrets_travail.oid AS arret_travail_id,
p_arrets_travail.salarie_id AS salarie_id,
p_arrets_travail.contrat_id AS contrat_id,
(max(DISTINCT ARRAY[p_contrats_mois.date_fin - p_contrats_mois.date_debut, p_contrats_mois.oid]))[2] AS contrat_mois_id, -- On ratache l'arrêt au contrat le plus long dans le mois lorsque plusieurs contrat sur la même période.
p_contrats_mois.mois_activite,
CASE WHEN p_arrets_travail.date_debut BETWEEN min(p_contrats_mois.date_debut) AND max(p_contrats_mois.date_fin) THEN 1 ELSE 0 END AS nombre_debut_arret,
CASE WHEN p_arrets_travail.date_fin BETWEEN min(p_contrats_mois.date_debut) AND max(p_contrats_mois.date_fin) THEN 1 ELSE 0 END AS nombre_fin_arret,
CASE WHEN p_arrets_travail.date_reprise BETWEEN min(p_contrats_mois.date_debut) AND max(p_contrats_mois.date_fin) THEN 1 ELSE 0 END AS nb_reprise_apres_arret,
min(GREATEST(p_contrats_mois.date_debut, p_arrets_travail.date_debut)) AS date_debut,
max(LEAST(p_contrats_mois.date_fin, p_arrets_travail.date_fin)) AS date_fin,
max(LEAST(p_contrats_mois.date_fin, p_arrets_travail.date_fin)::date) - min(GREATEST(p_contrats_mois.date_debut, p_arrets_travail.date_debut)::date) + 1 AS nb_jours,
nb_heures * base.cti_division(max(LEAST(p_contrats_mois.date_fin, p_arrets_travail.date_fin)::date) - min(GREATEST(p_contrats_mois.date_debut, p_arrets_travail.date_debut)::date) + 1, nb_jours) as nb_heures,
CASE WHEN base.cti_overlaps(p_arrets_travail.date_debut, p_arrets_travail.date_fin, p_contrats_mois.date_debut, p_contrats_mois.date_fin) THEN 1 ELSE 0 END AS nb_arret
FROM rh.p_contrats_mois
JOIN rh.p_arrets_travail ON 1=1
AND p_contrats_mois.contrat_id = p_arrets_travail.contrat_id
AND base.cti_overlaps(p_arrets_travail.date_debut, p_arrets_travail.date_reprise, p_contrats_mois.date_debut, p_contrats_mois.date_fin)
GROUP BY 1,2,3,5, p_arrets_travail.date_debut, p_arrets_travail.date_fin, p_arrets_travail.date_reprise, nb_heures, nb_jours, 13
ORDER BY 9
;
-- Suppression des nb_reprise_apres_arret lorsqu'un arrêt suit un autre arrêt.
update rh.p_arrets_travail_mois
set nb_reprise_apres_arret = 0
from (
select
t1.arret_travail_id,
t1.mois_activite
from rh.p_arrets_travail_mois as t1
join rh.p_arrets_travail ON p_arrets_travail.oid = t1.arret_travail_id
left join rh.p_arrets_travail_mois as t2 ON 1=1
AND t1.salarie_id = t2.salarie_id
AND t1.arret_travail_id != t2.arret_travail_id
WHERE t1.nb_reprise_apres_arret = 1
GROUP BY 1,2
HAVING min(case when p_arrets_travail.date_reprise between t2.date_debut and t2.date_fin then 0 else 1 end) = 0
) as subq
where 1=1
and p_arrets_travail_mois.arret_travail_id = subq.arret_travail_id
and p_arrets_travail_mois.mois_activite = subq.mois_activite
;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="POST" label="POST-TRAITEMENTS">
<NODE name="DIVERS" type="common"/>
<NODE label="Fusion salaries en double">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_map_doublons
;
CREATE TEMP TABLE w_map_doublons AS
SELECT
p_salaries.oid AS from_oid, subview.to_oid
FROM rh.p_salaries
JOIN
(
SELECT nir,
(MAX(ARRAY[date_fin::text, oid::text]))[2]::bigint AS to_oid
FROM rh.p_salaries
JOIN rh.t_divers ON t_divers.code = 'ADP_FUSION_STRATEGIE'
WHERE t_divers.valeur = '2'
GROUP BY 1
HAVING count(*) > 1
) subview
ON p_salaries.nir = subview.nir
WHERE p_salaries.oid <> subview.to_oid
;
ANALYSE w_map_doublons
;
UPDATE rh.p_accident_travail
SET salarie_id = to_oid
FROM w_map_doublons
WHERE salarie_id = from_oid
;
UPDATE rh.p_arrets_travail
SET salarie_id = to_oid
FROM w_map_doublons
WHERE salarie_id = from_oid
;
UPDATE rh.p_arrets_travail_mois
SET salarie_id = to_oid
FROM w_map_doublons
WHERE salarie_id = from_oid
;
UPDATE rh.p_contrats
SET salarie_id = to_oid
FROM w_map_doublons
WHERE salarie_id = from_oid
;
UPDATE rh.p_contrats_mois
SET salarie_id = to_oid
FROM w_map_doublons
WHERE salarie_id = from_oid
;
UPDATE rh.p_handicap
SET salarie_id = to_oid
FROM w_map_doublons
WHERE salarie_id = from_oid
;
UPDATE rh.p_handicap2
SET salarie_id = to_oid
FROM w_map_doublons
WHERE salarie_id = from_oid
;
UPDATE rh.p_historique_paie
SET salarie_id = to_oid
FROM w_map_doublons
WHERE salarie_id = from_oid
;
UPDATE rh.p_profil_contrat_mois
SET salarie_id = to_oid
FROM w_map_doublons
WHERE salarie_id = from_oid
;
DELETE FROM rh.p_salaries
USING w_map_doublons
WHERE oid = from_oid
;
]]></sqlcmd>
</NODE>
<NODE name="POST" type="common"/>
</NODE>
<NODE name="VACUUM" label="REORGANISATION BASE DE DONNEES">
<NODE name="VACUUM" type="common" />
</NODE>
<NODE name="RAZ" label="RAZ BASE">
<NODE name="RAZ" type="common" />
</NODE>
<NODE name="RAZ_ALL" label="RAZ ALL">
<NODE name="RAZ_ALL" type="common" />
</NODE>
</ROOT>