0
;
INSERT INTO rh.t_entreprises(
oid,
code_original,
code,
texte,
texte_court,
planning_code,
siren)
SELECT
oid + fp('idx')::bigint,
fp('idc')||code_original,
fp('idc')||code,
texte,
texte_court,
planning_code,
siren
FROM rh_src.t_entreprises
WHERE oid > 0
;
-- Màj des Etablissements. NE PAS SUPPRIMER car paramétrage associé.
-- DELETE FROM rh.t_etablissements
-- WHERE true
-- AND oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
-- AND oid > 0
-- ;
INSERT INTO rh.t_etablissements(
oid,
code_original,
code,
texte,
texte_court,
entreprise_id,
base_calcul_etp,
mode_calcul_etp_paye,
planning_code,
siret)
SELECT
oid + fp('idx')::bigint,
fp('idc')||code_original,
fp('idc')||code,
texte,
texte_court,
entreprise_id + fp('idx')::bigint,
base_calcul_etp,
mode_calcul_etp_paye,
planning_code,
siret
FROM rh_src.t_etablissements
WHERE true
and oid > 0
and oid + fp('idx')::bigint not in (select oid from rh.t_etablissements group by 1)
;
-- Màj du siret.
UPDATE rh.t_etablissements SET
siret = src.siret
FROM rh_src.t_etablissements as src
WHERE 1=1
and t_etablissements.oid = src.oid + fp('idx')::bigint
and t_etablissements.siret is distinct from src.siret
;
-- Màj des catégories socio-professionnelles (fusion des codes).
INSERT INTO rh.t_categories_socio_professionnelle (code_original, code, texte, texte_court)
SELECT src_csp.code_original, src_csp.code, src_csp.texte, src_csp.texte_court
FROM rh_src.t_categories_socio_professionnelle AS src_csp
LEFT JOIN rh.t_categories_socio_professionnelle ON t_categories_socio_professionnelle.code_original = src_csp.code_original
WHERE 1=1
AND t_categories_socio_professionnelle.oid IS NULL
AND src_csp.oid > 0
;
-- Màj des groupes cotisants.
SELECT syncTable3('t_groupes_cotisant')
;
-- Màj Motifs début
SELECT syncTable3('t_motifs_debut_contrat')
;
-- Màj des motifs de fin de contrat
SELECT syncTable3('t_motifs_fin_contrat')
;
-- Màj des nationalités
SELECT syncTable3('t_nationalites')
;
-- Màj des organismes de cotisation
SELECT syncTable3('t_organismes_cotisation')
;
-- Màj des qualifications
SELECT syncTable3('t_qualifications')
;
-- Màj des rubriques
SELECT syncTable3('t_rubriques')
;
-- On réplique le paramétrage des rubriques.
-- FIXME besoin de refaire descendre le paramétrage ?
UPDATE rh.t_rubriques
SET
c_avantage_nature = rub_src.c_avantage_nature,
c_base = rub_src.c_base,
c_brut = rub_src.c_brut,
c_cotisation_patronale = rub_src.c_cotisation_patronale,
c_cotisation_salarie = rub_src.c_cotisation_salarie,
c_frais_imposables = rub_src.c_frais_imposables,
c_heures_contrat = rub_src.c_heures_contrat,
c_heures_payees = rub_src.c_heures_payees,
c_heures_travaillees = rub_src.c_heures_travaillees,
c_masse_salariale = rub_src.c_masse_salariale,
c_masse_salariale_provisionnee = rub_src.c_masse_salariale_provisionnee,
c_montant_provisions = rub_src.c_montant_provisions,
c_net_a_payer = rub_src.c_net_a_payer,
c_net_imposable = rub_src.c_net_imposable,
c_nombre = rub_src.c_nombre,
c_nombre_provisions = rub_src.c_nombre_provisions,
c_od_net_patronale = rub_src.c_od_net_patronale,
c_od_net_salarie = rub_src.c_od_net_salarie,
code_calcul = rub_src.code_calcul,
coefficient = rub_src.coefficient,
coefficient_base = rub_src.coefficient_base,
coefficient_nombre = rub_src.coefficient_nombre,
coefficient_txp = rub_src.coefficient_txp,
coefficient_txs = rub_src.coefficient_txs,
heures_payees = rub_src.heures_payees,
p_avantage_nature = rub_src.p_avantage_nature,
p_base = rub_src.p_base,
p_brut = rub_src.p_brut,
p_cotisation_patronale = rub_src.p_cotisation_patronale,
p_cotisation_salarie = rub_src.p_cotisation_salarie,
p_cumul = rub_src.p_cumul,
p_detail = rub_src.p_detail,
p_frais_imposables = rub_src.p_frais_imposables,
p_heures_contrat = rub_src.p_heures_contrat,
p_heures_payees = rub_src.p_heures_payees,
p_heures_travaillees = rub_src.p_heures_travaillees,
p_masse_salariale = rub_src.p_masse_salariale,
p_masse_salariale_provisionnee = rub_src.p_masse_salariale_provisionnee,
p_montant_provisions = rub_src.p_montant_provisions,
p_net_a_payer = rub_src.p_net_a_payer,
p_net_imposable = rub_src.p_net_imposable,
p_nombre = rub_src.p_nombre,
p_nombre_provisions = rub_src.p_nombre_provisions,
p_od_net_patronale = rub_src.p_od_net_patronale,
p_od_net_salarie = rub_src.p_od_net_salarie,
s_avantage_nature = rub_src.s_avantage_nature,
s_base = rub_src.s_base,
s_brut = rub_src.s_brut,
s_cotisation_patronale = rub_src.s_cotisation_patronale,
s_cotisation_salarie = rub_src.s_cotisation_salarie,
s_frais_imposables = rub_src.s_frais_imposables,
s_heures_contrat = rub_src.s_heures_contrat,
s_heures_payees = rub_src.s_heures_payees,
s_heures_travaillees = rub_src.s_heures_travaillees,
s_masse_salariale = rub_src.s_masse_salariale,
s_masse_salariale_provisionnee = rub_src.s_masse_salariale_provisionnee,
s_montant_provisions = rub_src.s_montant_provisions,
s_net_a_payer = rub_src.s_net_a_payer,
s_net_imposable = rub_src.s_net_imposable,
s_nombre = rub_src.s_nombre,
s_nombre_provisions = rub_src.s_nombre_provisions,
s_od_net_patronale = rub_src.s_od_net_patronale,
s_od_net_salarie = rub_src.s_od_net_salarie,
unite = rub_src.unite,
user_modified = rub_src.user_modified
FROM rh_src.t_rubriques AS rub_src
WHERE 1=1
AND t_rubriques.oid = rub_src.oid + fp('idx')::bigint
AND (1!=1
OR t_rubriques.c_avantage_nature IS DISTINCT FROM rub_src.c_avantage_nature
OR t_rubriques.c_base IS DISTINCT FROM rub_src.c_base
OR t_rubriques.c_brut IS DISTINCT FROM rub_src.c_brut
OR t_rubriques.c_cotisation_patronale IS DISTINCT FROM rub_src.c_cotisation_patronale
OR t_rubriques.c_cotisation_salarie IS DISTINCT FROM rub_src.c_cotisation_salarie
OR t_rubriques.c_frais_imposables IS DISTINCT FROM rub_src.c_frais_imposables
OR t_rubriques.c_heures_contrat IS DISTINCT FROM rub_src.c_heures_contrat
OR t_rubriques.c_heures_payees IS DISTINCT FROM rub_src.c_heures_payees
OR t_rubriques.c_heures_travaillees IS DISTINCT FROM rub_src.c_heures_travaillees
OR t_rubriques.c_masse_salariale IS DISTINCT FROM rub_src.c_masse_salariale
OR t_rubriques.c_masse_salariale_provisionnee IS DISTINCT FROM rub_src.c_masse_salariale_provisionnee
OR t_rubriques.c_montant_provisions IS DISTINCT FROM rub_src.c_montant_provisions
OR t_rubriques.c_net_a_payer IS DISTINCT FROM rub_src.c_net_a_payer
OR t_rubriques.c_net_imposable IS DISTINCT FROM rub_src.c_net_imposable
OR t_rubriques.c_nombre IS DISTINCT FROM rub_src.c_nombre
OR t_rubriques.c_nombre_provisions IS DISTINCT FROM rub_src.c_nombre_provisions
OR t_rubriques.c_od_net_patronale IS DISTINCT FROM rub_src.c_od_net_patronale
OR t_rubriques.c_od_net_salarie IS DISTINCT FROM rub_src.c_od_net_salarie
OR t_rubriques.code_calcul IS DISTINCT FROM rub_src.code_calcul
OR t_rubriques.coefficient IS DISTINCT FROM rub_src.coefficient
OR t_rubriques.coefficient_base IS DISTINCT FROM rub_src.coefficient_base
OR t_rubriques.coefficient_nombre IS DISTINCT FROM rub_src.coefficient_nombre
OR t_rubriques.coefficient_txp IS DISTINCT FROM rub_src.coefficient_txp
OR t_rubriques.coefficient_txs IS DISTINCT FROM rub_src.coefficient_txs
OR t_rubriques.heures_payees IS DISTINCT FROM rub_src.heures_payees
OR t_rubriques.p_avantage_nature IS DISTINCT FROM rub_src.p_avantage_nature
OR t_rubriques.p_base IS DISTINCT FROM rub_src.p_base
OR t_rubriques.p_brut IS DISTINCT FROM rub_src.p_brut
OR t_rubriques.p_cotisation_patronale IS DISTINCT FROM rub_src.p_cotisation_patronale
OR t_rubriques.p_cotisation_salarie IS DISTINCT FROM rub_src.p_cotisation_salarie
OR t_rubriques.p_cumul IS DISTINCT FROM rub_src.p_cumul
OR t_rubriques.p_detail IS DISTINCT FROM rub_src.p_detail
OR t_rubriques.p_frais_imposables IS DISTINCT FROM rub_src.p_frais_imposables
OR t_rubriques.p_heures_contrat IS DISTINCT FROM rub_src.p_heures_contrat
OR t_rubriques.p_heures_payees IS DISTINCT FROM rub_src.p_heures_payees
OR t_rubriques.p_heures_travaillees IS DISTINCT FROM rub_src.p_heures_travaillees
OR t_rubriques.p_masse_salariale IS DISTINCT FROM rub_src.p_masse_salariale
OR t_rubriques.p_masse_salariale_provisionnee IS DISTINCT FROM rub_src.p_masse_salariale_provisionnee
OR t_rubriques.p_montant_provisions IS DISTINCT FROM rub_src.p_montant_provisions
OR t_rubriques.p_net_a_payer IS DISTINCT FROM rub_src.p_net_a_payer
OR t_rubriques.p_net_imposable IS DISTINCT FROM rub_src.p_net_imposable
OR t_rubriques.p_nombre IS DISTINCT FROM rub_src.p_nombre
OR t_rubriques.p_nombre_provisions IS DISTINCT FROM rub_src.p_nombre_provisions
OR t_rubriques.p_od_net_patronale IS DISTINCT FROM rub_src.p_od_net_patronale
OR t_rubriques.p_od_net_salarie IS DISTINCT FROM rub_src.p_od_net_salarie
OR t_rubriques.s_avantage_nature IS DISTINCT FROM rub_src.s_avantage_nature
OR t_rubriques.s_base IS DISTINCT FROM rub_src.s_base
OR t_rubriques.s_brut IS DISTINCT FROM rub_src.s_brut
OR t_rubriques.s_cotisation_patronale IS DISTINCT FROM rub_src.s_cotisation_patronale
OR t_rubriques.s_cotisation_salarie IS DISTINCT FROM rub_src.s_cotisation_salarie
OR t_rubriques.s_frais_imposables IS DISTINCT FROM rub_src.s_frais_imposables
OR t_rubriques.s_heures_contrat IS DISTINCT FROM rub_src.s_heures_contrat
OR t_rubriques.s_heures_payees IS DISTINCT FROM rub_src.s_heures_payees
OR t_rubriques.s_heures_travaillees IS DISTINCT FROM rub_src.s_heures_travaillees
OR t_rubriques.s_masse_salariale IS DISTINCT FROM rub_src.s_masse_salariale
OR t_rubriques.s_masse_salariale_provisionnee IS DISTINCT FROM rub_src.s_masse_salariale_provisionnee
OR t_rubriques.s_montant_provisions IS DISTINCT FROM rub_src.s_montant_provisions
OR t_rubriques.s_net_a_payer IS DISTINCT FROM rub_src.s_net_a_payer
OR t_rubriques.s_net_imposable IS DISTINCT FROM rub_src.s_net_imposable
OR t_rubriques.s_nombre IS DISTINCT FROM rub_src.s_nombre
OR t_rubriques.s_nombre_provisions IS DISTINCT FROM rub_src.s_nombre_provisions
OR t_rubriques.s_od_net_patronale IS DISTINCT FROM rub_src.s_od_net_patronale
OR t_rubriques.s_od_net_salarie IS DISTINCT FROM rub_src.s_od_net_salarie
OR t_rubriques.unite IS DISTINCT FROM rub_src.unite
OR t_rubriques.user_modified IS DISTINCT FROM rub_src.user_modified)
;
-- Màj comptes
SELECT syncTable3('t_compte')
;
-- Màj des situations de famille
SELECT syncTable3('t_situations_famille')
;
-- Màj des types de contrat
SELECT syncTable3('t_types_contrat')
;
-- Màj des statuts
SELECT syncTable3('t_statuts')
;
-- Màj des types de temps de travail
SELECT syncTable3('t_types_temps_travail')
;
-- Màj des services
SELECT syncTable3('t_services')
;
-- Màj des spécialités
SELECT syncTable3('t_specialites')
;
-- Màj des codes emploi
SELECT syncTable3('t_codes_emploi')
;
-- Màj des types d'horaire
SELECT syncTable3('t_types_horaire')
;
-- Màj des sociétés d'interim
SELECT syncTable3('t_societes_interim')
;
-- Màj des grilles
SELECT syncTable3('t_grilles')
;
-- Màj des groupes de grilles
SELECT syncTable3('t_grilles_groupes')
;
-- Màj des sections analytiques paie
SELECT syncTable3('t_sections_analytiques_paie')
;
-- Màj des sections analytiques comptable
SELECT syncTable3('t_sections_analytiques')
;
-- Màj des plans analytiques ng
DELETE FROM rh.t_plan_analytique WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint) AND oid > 0
;
INSERT INTO rh.t_plan_analytique(oid, code, texte)
SELECT oid, code, texte
FROM rh_src.t_plan_analytique
WHERE oid > 0
;
-- Màj des sections analytiques ng
SELECT syncTable3('t_section_analytique')
;
-- Màj des motifs d'arret
SELECT syncTable3('t_motifs_arret')
;
-- Màj des précisions du motif d'arrêt
SELECT syncTable3('t_precisions_motif_arret')
;
-- Màj des motifs de visite médicale
SELECT syncTable3('t_motifs_visite')
;
-- Màj des circonstances d'accident du travail
SELECT syncTable3('t_accident_circonstance')
;
-- Màj des lieux d'accident du travail
SELECT syncTable3('t_accident_lieu')
;
-- Màj de la nature de l'accident du travail
SELECT syncTable3('t_accident_nature')
;
-- Màj des sièges d'accident du travail
SELECT syncTable3('t_accident_siege')
;
-- Màj des listes de formations
SELECT syncTable3('t_liste_formations')
;
-- Màj des codes de cotisation.
SELECT syncTable3('t_code_cotisation')
;
]]>
Cegid : 2299Z -> 0000002299. On conserve 0000002299.
-- * 2 = Le n° de SS sert à effectuer le rapprochement. On conserver le matricule le plus récent (celui du prestataire en cours).
DROP TABLE IF EXISTS w_salaries
;
CREATE TEMP TABLE w_salaries AS
SELECT
oid + fp('idx')::bigint AS oid,
finess,
nom,
prenom,
date_naissance,
sexe,
CASE t_divers.valeur
WHEN 0 THEN matricule
WHEN 1 THEN (CASE WHEN length(matricule) = 10 THEN matricule ELSE lpad(substring(matricule from '(....).$'), 10, '0') END)
WHEN 2 THEN matricule
END AS matricule,
matricule_planning,
CASE t_divers.valeur
WHEN 0 THEN p_salaries.code
WHEN 1 THEN (CASE WHEN length(p_salaries.code) = 10 THEN p_salaries.code ELSE lpad(substring(p_salaries.code from '(....).$'), 10, '0') END)
WHEN 2 THEN p_salaries.code
END AS code,
CASE t_divers.valeur
WHEN 0 THEN code_original
WHEN 1 THEN (CASE WHEN length(code_original) = 10 THEN code_original ELSE lpad(substring(code_original from '(....).$'), 10, '0') END)
WHEN 2 THEN code_original
END AS code_original,
coalesce(nir, matricule) as nir, -- prise en du compte matricule pour les salaries sans nir e.g. étrangers
getOid(entreprise_id) as entreprise_id,
getOid(nationalite_id) as nationalite_id,
code_postal_id,
nom_naissance,
getOid(situation_famille_id) as situation_famille_id,
adresse1,
adresse2,
getOid(profil_id) as profil_id,
date_debut,
date_fin,
date_entree_ets,
date_sortie_ets,
date_anciennete,
date_entree_fp,
date_entree_fph,
no_adeli,
case when code_cotisation_id = 0 then 0 else code_cotisation_id + fp('idx')::bigint end as code_cotisation_id,
matricule_retraite as matricule_retraite
FROM rh_src.p_salaries
join rh.t_divers ON t_divers.code = 'FUSION_STRATEGIE'
;
DELETE FROM rh.p_salaries WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
-- Ajout des salariés pas déjà insérés précédemment.
INSERT INTO rh.p_salaries(
oid,
finess,
nom,
prenom,
date_naissance,
sexe,
matricule,
matricule_planning,
code,
code_original,
nir,
entreprise_id,
nationalite_id,
code_postal_id,
nom_naissance,
situation_famille_id,
adresse1,
adresse2,
profil_id,
date_debut,
date_fin,
date_entree_ets,
date_sortie_ets,
date_anciennete,
date_entree_fp,
date_entree_fph,
no_adeli,
code_cotisation_id,
matricule_retraite)
SELECT
oid,
finess,
nom,
prenom,
date_naissance,
sexe,
matricule,
matricule_planning,
code,
code_original,
nir,
entreprise_id,
nationalite_id,
code_postal_id,
nom_naissance,
situation_famille_id,
adresse1,
adresse2,
profil_id,
date_debut,
date_fin,
date_entree_ets,
date_sortie_ets,
date_anciennete,
date_entree_fp,
date_entree_fph,
no_adeli,
code_cotisation_id,
matricule_retraite
FROM w_salaries
WHERE matricule NOT IN (SELECT matricule FROM rh.p_salaries)
;
]]>
rh.oid pour les salariés.
DROP TABLE IF EXISTS w_map_sal
;
CREATE TEMP TABLE w_map_sal AS
SELECT
p_salaries.oid as salarie_src_id,
min(p.oid) as salarie_id, -- Utile lorsque FUSION_STRATEGIE à 2 car plusieurs matricules pour le même n°SS.
-- CASE t_divers.valeur
-- WHEN 0 THEN p_salaries.matricule
-- WHEN 1 THEN (CASE WHEN length(p_salaries.matricule) = 10 THEN p_salaries.matricule ELSE lpad(substring(p_salaries.matricule from '(....).$'), 10, '0') END)
-- WHEN 2 THEN p_salaries.matricule
-- END AS matricule,
p_salaries.nir
FROM rh_src.p_salaries
join rh.t_divers ON t_divers.code = 'FUSION_STRATEGIE'
JOIN rh.p_salaries as p ON
(CASE t_divers.valeur
WHEN 0 THEN p.matricule = p_salaries.matricule
WHEN 1 THEN p.matricule = (CASE WHEN length(p_salaries.matricule) = 10 THEN p_salaries.matricule ELSE lpad(substring(p_salaries.matricule from '(....).$'), 10, '0') END)
WHEN 2 THEN substring(p.nir, 1, 13) = substring(p_salaries.nir, 1, 13)
END)
GROUP BY 1, 3
;
]]>
nouveaux oids.
-- Seuls les contrats avec cnt_to_insert à true seront à insérer.
DROP TABLE IF EXISTS w_map_cnt
;
CREATE TEMP TABLE w_map_cnt AS
with src_contrat_bul as (
select contrat_id
from rh_src.p_historique_paie
where mois_paie BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM')
group by 1)
SELECT
coalesce(cnt_ori.oid, MAX(cnt.oid) + fp('idx')::bigint) AS contrat_id, -- id (à insérer si cnt_to_insert = true) du contrat dans le schéma de rh.
MAX(cnt.oid) AS contrat_src_id, -- id du contrat dans le schéma du prestataire.
cnt_ori.oid IS NULL as cnt_to_insert, -- true : contrat à insérer; false : contrat déjà inséré.
map1.salarie_id -- on met le bon id de salarié issu du mapping.
--coalesce(cnt_ori.date_debut, cnt.date_debut) AS date_debut,
--coalesce(cnt_ori.date_fin, cnt.date_fin) AS date_fin
FROM rh_src.p_contrats as cnt
JOIN w_map_sal as map1 ON map1.salarie_src_id = cnt.salarie_id
left join src_contrat_bul on src_contrat_bul.contrat_id = cnt.oid
LEFT JOIN rh.p_contrats as cnt_ori ON 1=1
AND cnt_ori.salarie_id = map1.salarie_id
AND cnt_ori.date_debut = cnt.date_debut -- On fait uniquement le lien avec la date de début, car la date de fin pouvait ne pas être déterminé dans l'ancien prestataire.
-- AND cnt_ori.date_fin = cnt.date_fin -- <- A laisser commentée.
-- AND base.cti_overlaps(cnt.date_debut, cnt.date_fin, cnt_ori.date_debut, cnt_ori.date_fin) -- Permet de ne pas prendre des contrats en trop qui seraient chevauchant (cf. exemple ci-dessous)
WHERE true
and (false
or base.cti_overlaps(cnt.date_debut, cnt.date_fin, fp('str')::date, fp('end')::date) -- on prend uniquement les contrats relatif à la période prestataire...
or src_contrat_bul.contrat_id is not null) -- ... ou ceux dont le contrat aurait été positionné avant le changement de prestataire (IC-4475).
GROUP BY cnt_ori.oid, map1.salarie_id, cnt.date_debut
;
/**
UPDATE :
--------
Tant pis pour le cas où la reprise des contrat n'a pas été correcte (avec date de début identique).
En effet cela pose problème pour la gestion du multi-contrat.
EXPLICATION ORIGINELLE :
------------------------
Cas d'un salarié.
LEFT JOIN rh.p_contrats as cnt_ori basé sur cnt_ori.date_debut = cnt.date_debut
Cegid (nouveau prestataire) :
"2003-08-02";"2003-08-31";"00000020310001" -- NON (via le WHERE)
"2003-10-01";"2003-10-31";"00000020310002" -- NON (via le WHERE)
"2003-11-01";"2003-11-30";"00000020310003" -- NON (via le WHERE)
"2003-12-01";"2003-12-31";"00000020310004" -- NON (via le WHERE)
"2004-01-01";"2099-12-31";"00000020310005" -- Sélectionné
SHS (ancien prestataire ) :
"2003-08-02";"2003-08-31";"2031H-1" -- Sélectionné
"2003-10-01";"2003-10-31";"2031H-2" -- Sélectionné
"2003-11-01";"2003-11-30";"2031H-3" -- Sélectionné
"2003-12-01";"2003-12-31";"2031H-4" -- Sélectionné
"2004-01-01";"2004-06-30";"2031H-5" -- Non sélectionné car déjà remonté avec Cegid.
"2004-07-01";"2099-12-31";"2031H-6" -- Sélectionné
Fusion (erronée car 2 contrats se terminant en 2099-12-31) :
"2003-08-02";"2003-08-31";"SH_2031H-1"
"2003-10-01";"2003-10-31";"SH_2031H-2"
"2003-11-01";"2003-11-30";"SH_2031H-3"
"2003-12-01";"2003-12-31";"SH_2031H-4"
"2004-01-01";"2099-12-31";"00000020310005"
"2004-07-01";"2099-12-31";"SH_2031H-6" -- ce contrat n'aurait pas du être remonté et c'est le sens du cti_overlaps dans le LEFT JOIN.
*/
INSERT INTO rh.p_contrats (
oid,
salarie_id,
date_debut,
date_fin,
numero_contrat,
code_original,
etablissement_id,
profil_id,
anciennete_anterieure_mois,
anciennete_anterieure_calculee_mois,
salarie_remplace_id,
anciennete_anterieure_jours,
anciennete_anterieure_calculee_jours)
SELECT
cnt.contrat_id,
cnt.salarie_id, -- on met le bon id de salarié issu du mapping.
p_contrats.date_debut,
p_contrats.date_fin,
fp('idc')||p_contrats.numero_contrat,
fp('idc')||p_contrats.code_original,
getOid(p_contrats.etablissement_id),
getOid(p_contrats.profil_id),
p_contrats.anciennete_anterieure_mois,
p_contrats.anciennete_anterieure_calculee_mois,
coalesce(map.salarie_id, 0), -- on met le bon id de salarié remplacé issu du mapping.
p_contrats.anciennete_anterieure_jours,
p_contrats.anciennete_anterieure_calculee_jours
FROM w_map_cnt as cnt
JOIN rh_src.p_contrats on p_contrats.oid = cnt.contrat_src_id
LEFT JOIN w_map_sal as map ON map.salarie_src_id = p_contrats.salarie_remplace_id
WHERE cnt.cnt_to_insert -- on insére uniquement les contrats pas déjà insérés précédemment.
;
-- On conserve uniquement la ventilation sur les périodes propres à chaque prestataire.
-- On considère que la ventilation sur les périodes propres à chaque prestataire est la plus à même de décrire l'évolution du salarié,
-- notamment pour les CDI pour lesquels l'historique n'aura pas été intégralement repris avec le nouveau prestataire.
DELETE FROM rh.p_contrats_mois WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
-- Table qui fait le mapping entre les anciens oid et les éventuels nouveaux.
DROP TABLE IF EXISTS w_map_cnt_mois
;
CREATE TEMP TABLE w_map_cnt_mois AS
with src_contrat_bul as (
select contrat_mois_id
from rh_src.p_historique_paie
where mois_paie BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM')
group by 1)
SELECT
cnt_src.oid + fp('idx')::bigint as contrat_mois_id,
cnt_src.oid as contrat_mois_src_id,
w_map_cnt.contrat_id,
w_map_cnt.contrat_src_id,
cnt_src.mois_activite,
w_map_cnt.salarie_id
FROM rh_src.p_contrats_mois AS cnt_src
left join src_contrat_bul on src_contrat_bul.contrat_mois_id = cnt_src.oid
JOIN w_map_cnt ON 1=1
AND w_map_cnt.contrat_src_id = cnt_src.contrat_id
-- UPDATE : NON -- V Les contrats_mois doivent correspondrent à un seul contrat sur une période donnée.
-- AND base.cti_overlaps(w_map_cnt.date_debut, w_map_cnt.date_fin, cnt_src.date_debut, cnt_src.date_fin)
WHERE true
and (false
or cnt_src.mois_activite BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM') -- on prend uniquement les contrats relatif à la période prestataire...
or src_contrat_bul.contrat_mois_id is not null) -- ... ou ceux dont le contrat aurait été positionné avant le changement de prestataire (IC-4475).
;
INSERT INTO rh.p_contrats_mois(
oid,
contrat_id,
mois_activite,
nombre_debut_contrat,
nombre_fin_contrat,
equivalent_temps_plein,
date_debut,
date_fin,
age_id,
age_jours,
est_hors_periode,
present_fin_mois,
anciennete_mois,
anciennete_annee_id,
nombre_departs,
salarie_id,
anciennete_grade_mois,
anciennete_grade_annee_id,
anciennete_fp_mois,
anciennete_fp_annee_id,
anciennete_fph_mois,
anciennete_fph_annee_id,
fictif,
nombre_entrees,
present_debut_mois,
anciennete_jours,
profil_id,
etablissement_id,
code_original,
effectif_permanent,
nombre_transformation_cdi,
pole_id,
population_id,
ratio_temps_travail,
nombre_heures)
SELECT
w_map_cnt_mois.contrat_mois_id,
w_map_cnt_mois.contrat_id,
w_map_cnt_mois.mois_activite,
p_contrats_mois.nombre_debut_contrat,
p_contrats_mois.nombre_fin_contrat,
p_contrats_mois.equivalent_temps_plein,
p_contrats_mois.date_debut,
p_contrats_mois.date_fin,
p_contrats_mois.age_id,
p_contrats_mois.age_jours,
p_contrats_mois.est_hors_periode,
p_contrats_mois.present_fin_mois,
p_contrats_mois.anciennete_mois,
p_contrats_mois.anciennete_annee_id,
p_contrats_mois.nombre_departs,
w_map_cnt_mois.salarie_id, -- on met le bon id de salarié issu du mapping.
p_contrats_mois.anciennete_grade_mois,
p_contrats_mois.anciennete_grade_annee_id,
p_contrats_mois.anciennete_fp_mois,
p_contrats_mois.anciennete_fp_annee_id,
p_contrats_mois.anciennete_fph_mois,
p_contrats_mois.anciennete_fph_annee_id,
p_contrats_mois.fictif,
p_contrats_mois.nombre_entrees,
p_contrats_mois.present_debut_mois,
p_contrats_mois.anciennete_jours,
getOid(p_contrats_mois.profil_id),
getOid(p_contrats_mois.etablissement_id),
p_contrats_mois.code_original,
p_contrats_mois.effectif_permanent,
p_contrats_mois.nombre_transformation_cdi,
p_contrats_mois.pole_id,
p_contrats_mois.population_id,
p_contrats_mois.ratio_temps_travail,
p_contrats_mois.nombre_heures
FROM w_map_cnt_mois
JOIN rh_src.p_contrats_mois ON p_contrats_mois.oid = w_map_cnt_mois.contrat_mois_src_id
;
]]>