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.
 
 
 

1450 lines
62 KiB

<?xml version="1.0" encoding="ISO-8859-1"?>
<ROOT>
<NODE name="COPIE" label="REPLICATIONS">
<!--
Noeud XML appelé avant de faire l'import RH-Paie de chaque prestataire.
Permet de :
- synchroniser le schéma SQL dédié au PRESTATAIRE (rh_prestataire) avec le schéma SQL GLOBAL (rh) potentiellement mis à jour,
- remonter dans PRESTATAIRE le paramétrage effectué dans GLOBAL pour que l'import PRESTATAIRE se passe bien.
-->
<NODE label="Réplication du schéma rh">
<sqlcmd><![CDATA[
-- rh_ori correspond en temps normal au schéma rh.
-- le schéma rh_prestataire a été renommé rh.
SELECT base.cti_synchronize_schema('rh_ori', 'rh');
]]></sqlcmd>
</NODE>
<NODE label="Réplication du paramétrage">
<sqlcmd><![CDATA[
-- Réplication du paramétrage t_divers.
TRUNCATE rh.t_divers
;
INSERT INTO rh.t_divers(code, texte, valeur, description, valeur_date)
SELECT code, texte, valeur, description, valeur_date
FROM rh_ori.t_divers
;
-- On réplique le paramétrage des rubriques dans le schéma du prestataire.
UPDATE rh.t_rubriques
SET
c_avantage_nature = rub_ori.c_avantage_nature,
c_base = rub_ori.c_base,
c_brut = rub_ori.c_brut,
c_cotisation_patronale = rub_ori.c_cotisation_patronale,
c_cotisation_salarie = rub_ori.c_cotisation_salarie,
c_frais_imposables = rub_ori.c_frais_imposables,
c_heures_contrat = rub_ori.c_heures_contrat,
c_heures_payees = rub_ori.c_heures_payees,
c_heures_travaillees = rub_ori.c_heures_travaillees,
c_masse_salariale = rub_ori.c_masse_salariale,
c_masse_salariale_provisionnee = rub_ori.c_masse_salariale_provisionnee,
c_montant_provisions = rub_ori.c_montant_provisions,
c_net_a_payer = rub_ori.c_net_a_payer,
c_net_imposable = rub_ori.c_net_imposable,
c_nombre = rub_ori.c_nombre,
c_nombre_provisions = rub_ori.c_nombre_provisions,
c_od_net_patronale = rub_ori.c_od_net_patronale,
c_od_net_salarie = rub_ori.c_od_net_salarie,
code_calcul = rub_ori.code_calcul,
coefficient = rub_ori.coefficient,
coefficient_base = rub_ori.coefficient_base,
coefficient_nombre = rub_ori.coefficient_nombre,
coefficient_txp = rub_ori.coefficient_txp,
coefficient_txs = rub_ori.coefficient_txs,
heures_payees = rub_ori.heures_payees,
p_avantage_nature = rub_ori.p_avantage_nature,
p_base = rub_ori.p_base,
p_brut = rub_ori.p_brut,
p_cotisation_patronale = rub_ori.p_cotisation_patronale,
p_cotisation_salarie = rub_ori.p_cotisation_salarie,
p_cumul = rub_ori.p_cumul,
p_detail = rub_ori.p_detail,
p_frais_imposables = rub_ori.p_frais_imposables,
p_heures_contrat = rub_ori.p_heures_contrat,
p_heures_payees = rub_ori.p_heures_payees,
p_heures_travaillees = rub_ori.p_heures_travaillees,
p_masse_salariale = rub_ori.p_masse_salariale,
p_masse_salariale_provisionnee = rub_ori.p_masse_salariale_provisionnee,
p_montant_provisions = rub_ori.p_montant_provisions,
p_net_a_payer = rub_ori.p_net_a_payer,
p_net_imposable = rub_ori.p_net_imposable,
p_nombre = rub_ori.p_nombre,
p_nombre_provisions = rub_ori.p_nombre_provisions,
p_od_net_patronale = rub_ori.p_od_net_patronale,
p_od_net_salarie = rub_ori.p_od_net_salarie,
s_avantage_nature = rub_ori.s_avantage_nature,
s_base = rub_ori.s_base,
s_brut = rub_ori.s_brut,
s_cotisation_patronale = rub_ori.s_cotisation_patronale,
s_cotisation_salarie = rub_ori.s_cotisation_salarie,
s_frais_imposables = rub_ori.s_frais_imposables,
s_heures_contrat = rub_ori.s_heures_contrat,
s_heures_payees = rub_ori.s_heures_payees,
s_heures_travaillees = rub_ori.s_heures_travaillees,
s_masse_salariale = rub_ori.s_masse_salariale,
s_masse_salariale_provisionnee = rub_ori.s_masse_salariale_provisionnee,
s_montant_provisions = rub_ori.s_montant_provisions,
s_net_a_payer = rub_ori.s_net_a_payer,
s_net_imposable = rub_ori.s_net_imposable,
s_nombre = rub_ori.s_nombre,
s_nombre_provisions = rub_ori.s_nombre_provisions,
s_od_net_patronale = rub_ori.s_od_net_patronale,
s_od_net_salarie = rub_ori.s_od_net_salarie,
unite = rub_ori.unite,
user_modified = rub_ori.user_modified,
texte_court = rub_ori.texte_court,
texte = rub_ori.texte
FROM rh_ori.t_rubriques AS rub_ori
WHERE 1=1
AND t_rubriques.oid + fp('idx')::bigint = rub_ori.oid
AND (1!=1
OR t_rubriques.c_avantage_nature IS DISTINCT FROM rub_ori.c_avantage_nature
OR t_rubriques.c_base IS DISTINCT FROM rub_ori.c_base
OR t_rubriques.c_brut IS DISTINCT FROM rub_ori.c_brut
OR t_rubriques.c_cotisation_patronale IS DISTINCT FROM rub_ori.c_cotisation_patronale
OR t_rubriques.c_cotisation_salarie IS DISTINCT FROM rub_ori.c_cotisation_salarie
OR t_rubriques.c_frais_imposables IS DISTINCT FROM rub_ori.c_frais_imposables
OR t_rubriques.c_heures_contrat IS DISTINCT FROM rub_ori.c_heures_contrat
OR t_rubriques.c_heures_payees IS DISTINCT FROM rub_ori.c_heures_payees
OR t_rubriques.c_heures_travaillees IS DISTINCT FROM rub_ori.c_heures_travaillees
OR t_rubriques.c_masse_salariale IS DISTINCT FROM rub_ori.c_masse_salariale
OR t_rubriques.c_masse_salariale_provisionnee IS DISTINCT FROM rub_ori.c_masse_salariale_provisionnee
OR t_rubriques.c_montant_provisions IS DISTINCT FROM rub_ori.c_montant_provisions
OR t_rubriques.c_net_a_payer IS DISTINCT FROM rub_ori.c_net_a_payer
OR t_rubriques.c_net_imposable IS DISTINCT FROM rub_ori.c_net_imposable
OR t_rubriques.c_nombre IS DISTINCT FROM rub_ori.c_nombre
OR t_rubriques.c_nombre_provisions IS DISTINCT FROM rub_ori.c_nombre_provisions
OR t_rubriques.c_od_net_patronale IS DISTINCT FROM rub_ori.c_od_net_patronale
OR t_rubriques.c_od_net_salarie IS DISTINCT FROM rub_ori.c_od_net_salarie
OR t_rubriques.code_calcul IS DISTINCT FROM rub_ori.code_calcul
OR t_rubriques.coefficient IS DISTINCT FROM rub_ori.coefficient
OR t_rubriques.coefficient_base IS DISTINCT FROM rub_ori.coefficient_base
OR t_rubriques.coefficient_nombre IS DISTINCT FROM rub_ori.coefficient_nombre
OR t_rubriques.coefficient_txp IS DISTINCT FROM rub_ori.coefficient_txp
OR t_rubriques.coefficient_txs IS DISTINCT FROM rub_ori.coefficient_txs
OR t_rubriques.heures_payees IS DISTINCT FROM rub_ori.heures_payees
OR t_rubriques.p_avantage_nature IS DISTINCT FROM rub_ori.p_avantage_nature
OR t_rubriques.p_base IS DISTINCT FROM rub_ori.p_base
OR t_rubriques.p_brut IS DISTINCT FROM rub_ori.p_brut
OR t_rubriques.p_cotisation_patronale IS DISTINCT FROM rub_ori.p_cotisation_patronale
OR t_rubriques.p_cotisation_salarie IS DISTINCT FROM rub_ori.p_cotisation_salarie
OR t_rubriques.p_cumul IS DISTINCT FROM rub_ori.p_cumul
OR t_rubriques.p_detail IS DISTINCT FROM rub_ori.p_detail
OR t_rubriques.p_frais_imposables IS DISTINCT FROM rub_ori.p_frais_imposables
OR t_rubriques.p_heures_contrat IS DISTINCT FROM rub_ori.p_heures_contrat
OR t_rubriques.p_heures_payees IS DISTINCT FROM rub_ori.p_heures_payees
OR t_rubriques.p_heures_travaillees IS DISTINCT FROM rub_ori.p_heures_travaillees
OR t_rubriques.p_masse_salariale IS DISTINCT FROM rub_ori.p_masse_salariale
OR t_rubriques.p_masse_salariale_provisionnee IS DISTINCT FROM rub_ori.p_masse_salariale_provisionnee
OR t_rubriques.p_montant_provisions IS DISTINCT FROM rub_ori.p_montant_provisions
OR t_rubriques.p_net_a_payer IS DISTINCT FROM rub_ori.p_net_a_payer
OR t_rubriques.p_net_imposable IS DISTINCT FROM rub_ori.p_net_imposable
OR t_rubriques.p_nombre IS DISTINCT FROM rub_ori.p_nombre
OR t_rubriques.p_nombre_provisions IS DISTINCT FROM rub_ori.p_nombre_provisions
OR t_rubriques.p_od_net_patronale IS DISTINCT FROM rub_ori.p_od_net_patronale
OR t_rubriques.p_od_net_salarie IS DISTINCT FROM rub_ori.p_od_net_salarie
OR t_rubriques.s_avantage_nature IS DISTINCT FROM rub_ori.s_avantage_nature
OR t_rubriques.s_base IS DISTINCT FROM rub_ori.s_base
OR t_rubriques.s_brut IS DISTINCT FROM rub_ori.s_brut
OR t_rubriques.s_cotisation_patronale IS DISTINCT FROM rub_ori.s_cotisation_patronale
OR t_rubriques.s_cotisation_salarie IS DISTINCT FROM rub_ori.s_cotisation_salarie
OR t_rubriques.s_frais_imposables IS DISTINCT FROM rub_ori.s_frais_imposables
OR t_rubriques.s_heures_contrat IS DISTINCT FROM rub_ori.s_heures_contrat
OR t_rubriques.s_heures_payees IS DISTINCT FROM rub_ori.s_heures_payees
OR t_rubriques.s_heures_travaillees IS DISTINCT FROM rub_ori.s_heures_travaillees
OR t_rubriques.s_masse_salariale IS DISTINCT FROM rub_ori.s_masse_salariale
OR t_rubriques.s_masse_salariale_provisionnee IS DISTINCT FROM rub_ori.s_masse_salariale_provisionnee
OR t_rubriques.s_montant_provisions IS DISTINCT FROM rub_ori.s_montant_provisions
OR t_rubriques.s_net_a_payer IS DISTINCT FROM rub_ori.s_net_a_payer
OR t_rubriques.s_net_imposable IS DISTINCT FROM rub_ori.s_net_imposable
OR t_rubriques.s_nombre IS DISTINCT FROM rub_ori.s_nombre
OR t_rubriques.s_nombre_provisions IS DISTINCT FROM rub_ori.s_nombre_provisions
OR t_rubriques.s_od_net_patronale IS DISTINCT FROM rub_ori.s_od_net_patronale
OR t_rubriques.s_od_net_salarie IS DISTINCT FROM rub_ori.s_od_net_salarie
OR t_rubriques.unite IS DISTINCT FROM rub_ori.unite
OR t_rubriques.user_modified IS DISTINCT FROM rub_ori.user_modified
OR t_rubriques.texte_court IS DISTINCT FROM rub_ori.texte_court
OR t_rubriques.texte IS DISTINCT FROM rub_ori.texte
)
;
-- On réplique le paramétrage des entreprises/établissements dans le schéma du prestataire.
UPDATE rh.t_entreprises SET
planning_code = ent_ori.planning_code
FROM rh_ori.t_entreprises AS ent_ori
WHERE 1=1
AND t_entreprises.oid + fp('idx')::bigint = ent_ori.oid
AND t_entreprises.planning_code IS DISTINCT FROM ent_ori.planning_code
;
UPDATE rh.t_etablissements SET
planning_code = ets_ori.planning_code
FROM rh_ori.t_etablissements AS ets_ori
WHERE 1=1
AND t_etablissements.oid + fp('idx')::bigint = ets_ori.oid
AND t_etablissements.planning_code IS DISTINCT FROM ets_ori.planning_code
;
-- Réplication de t_listes_tables.
TRUNCATE rh.t_listes_tables
;
INSERT INTO rh.t_listes_tables(oid, name, texte, select_cmd, code)
SELECT oid, name, texte, select_cmd, code
FROM rh_ori.t_listes_tables
;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="INIT" label="INITIALISATIONS">
<NODE name="INIT" type="common" />
<NODE label="Tables de paramètres.">
<sqlcmd><![CDATA[
-- rh correspond au schéma habituel rh.
-- rh_src correspond au schéma du prestataire.
-- Màj des Entreprises
DELETE FROM rh.t_entreprises
WHERE true
AND oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
AND oid > 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')
;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="FUSION" label="FUSION">
<NODE label="Chiffrier">
<sqlcmd><![CDATA[
DELETE FROM rh.p_chiffrier_production WHERE mois BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM')
;
INSERT INTO rh.p_chiffrier_production (entreprise_id, etablissement_id, mois, nombre_salaries, montant_brut, nombre_heures)
SELECT
getOid(entreprise_id),
getOid(etablissement_id),
mois,
nombre_salaries,
montant_brut,
nombre_heures
FROM rh_src.p_chiffrier_production
WHERE mois BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM')
;
]]></sqlcmd>
</NODE>
<NODE label="Profils">
<sqlcmd><![CDATA[
DELETE FROM rh.p_profils WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
INSERT INTO rh.p_profils(
oid,
cadre_emploi_code_original,
categorie_conge_code_original,
categorie_socio_professionnelle_code_original,
categorie_statutaire_code_original,
code_emploi_code_original,
commission_paritaire_code_original,
compte_salarie_code_original,
filiere_code_original,
grille_code_original,
grille_groupe_code_original,
groupe_cotisant_code_original,
lettre_budgetaire_code_original,
motif_debut_code_original,
motif_fin_code_original,
qualification_code_original,
section_analytique_code_original,
section_analytique_paie_code_original,
service_code_original,
societe_interim_code_original,
specialite_code_original,
statut_code_original,
type_contrat_code_original,
type_horaire_code_original,
type_temps_travail_code_original,
unite_fonctionnelle_code_original)
WITH merged_qua as (
select
src.code_original as code_original,
max(case when dst.oid is null then fp('idc')||src.code_original else dst.code_original end) as merged_code_original
from rh_src.t_qualifications as src
left join rh.t_qualifications as dst on 1=1
and dst.code = src.code
and dst.texte = src.texte
group by 1),
merged_cem as (
select
src.code_original as code_original,
max(case when dst.oid is null then fp('idc')||src.code_original else dst.code_original end) as merged_code_original
from rh_src.t_codes_emploi as src
left join rh.t_codes_emploi as dst on 1=1
and dst.code = src.code
and dst.texte = src.texte
group by 1),
merged_ser as (
select
src.code_original as code_original,
max(case when dst.oid is null then fp('idc')||src.code_original else dst.code_original end) as merged_code_original
from rh_src.t_services as src
left join rh.t_services as dst on 1=1
and dst.code = src.code
and dst.texte = src.texte
group by 1)
SELECT
oid + fp('idx')::bigint,
fp('idc')||p_profils.cadre_emploi_code_original,
fp('idc')||p_profils.categorie_conge_code_original,
p_profils.categorie_socio_professionnelle_code_original, -- les CSP sont fusionnées.
fp('idc')||p_profils.categorie_statutaire_code_original,
coalesce(merged_cem.merged_code_original, fp('idc')||p_profils.code_emploi_code_original) as code_emploi_code_original,
fp('idc')||p_profils.commission_paritaire_code_original,
fp('idc')||p_profils.compte_salarie_code_original,
fp('idc')||p_profils.filiere_code_original,
fp('idc')||p_profils.grille_code_original,
fp('idc')||p_profils.grille_groupe_code_original,
fp('idc')||p_profils.groupe_cotisant_code_original,
fp('idc')||p_profils.lettre_budgetaire_code_original,
fp('idc')||p_profils.motif_debut_code_original,
fp('idc')||p_profils.motif_fin_code_original,
coalesce(merged_qua.merged_code_original, fp('idc')||p_profils.qualification_code_original) as qualification_code_original,
fp('idc')||p_profils.section_analytique_code_original,
fp('idc')||p_profils.section_analytique_paie_code_original,
coalesce(merged_ser.merged_code_original, fp('idc')||p_profils.service_code_original) as service_code_original,
fp('idc')||p_profils.societe_interim_code_original,
fp('idc')||p_profils.specialite_code_original,
fp('idc')||p_profils.statut_code_original,
fp('idc')||p_profils.type_contrat_code_original,
fp('idc')||p_profils.type_horaire_code_original,
fp('idc')||p_profils.type_temps_travail_code_original,
fp('idc')||p_profils.unite_fonctionnelle_code_original
FROM rh_src.p_profils
LEFT JOIN merged_qua ON merged_qua.code_original = p_profils.qualification_code_original
LEFT JOIN merged_ser ON merged_ser.code_original = p_profils.service_code_original
LEFT JOIN merged_cem ON merged_cem.code_original = p_profils.code_emploi_code_original
;
]]></sqlcmd>
</NODE>
<NODE label="Salariés">
<sqlcmd><![CDATA[
-- Stratégie (Divers FUSION_STRATEGIE) :
-- * 0 = les salariés ont leur matricules conservés d'un prestataire à l'autre.
-- * 1 = SHS -> 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)
;
]]></sqlcmd>
</NODE>
<NODE label="Salariés (mapping)">
<sqlcmd><![CDATA[
-- Table de mapping rh_src.oid <-> 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
;
]]></sqlcmd>
</NODE>
<NODE label="Contrats">
<sqlcmd><![CDATA[
DELETE FROM rh.p_contrats WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
-- Création d'une table de mapping ancien oid <-> 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
;
]]></sqlcmd>
</NODE>
<NODE label="Historique de la paie">
<sqlcmd><![CDATA[
DELETE FROM rh.p_historique_paie WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
INSERT INTO rh.p_historique_paie(
oid,
age_id,
base,
compte_id,
contrat_id,
contrat_mois_id,
date_debut,
date_fin,
date_paie,
etablissement_id,
heure_contrat,
heure_payee,
heure_travaillee,
mois_activite,
mois_paie,
montant_avantage_nature,
montant_brut,
montant_cotisation_patronale,
montant_cotisation_salarie,
montant_frais_imposables,
montant_masse_salariale,
montant_masse_salariale_provisionnee,
montant_net_a_payer_salarie,
montant_net_imposable_salarie,
montant_od_net_patronale,
montant_od_net_salarie,
montant_patronal,
montant_provisions,
montant_salarial,
nombre,
nombre_provisions,
organisme_cotisation_id,
rubrique_id,
salarie_id,
taux_cotisation_patronale,
taux_cotisation_salarie,
ventilation_1_id,
ventilation_2_id,
ventilation_3_id)
SELECT
oid + fp('idx')::bigint,
age_id,
base,
getOid(compte_id),
w_map_cnt_mois.contrat_id,
w_map_cnt_mois.contrat_mois_id,
date_debut,
date_fin,
date_paie,
getOid(etablissement_id),
heure_contrat,
heure_payee,
heure_travaillee,
hp.mois_activite,
hp.mois_paie,
montant_avantage_nature,
montant_brut,
montant_cotisation_patronale,
montant_cotisation_salarie,
montant_frais_imposables,
montant_masse_salariale,
montant_masse_salariale_provisionnee,
montant_net_a_payer_salarie,
montant_net_imposable_salarie,
montant_od_net_patronale,
montant_od_net_salarie,
montant_patronal,
montant_provisions,
montant_salarial,
nombre,
nombre_provisions,
getOid(organisme_cotisation_id),
getOid(rubrique_id),
w_map_sal.salarie_id,
taux_cotisation_patronale,
taux_cotisation_salarie,
getOid(ventilation_1_id),
getOid(ventilation_2_id),
getOid(ventilation_3_id)
FROM rh_src.p_historique_paie as hp
JOIN w_map_sal ON w_map_sal.salarie_src_id = hp.salarie_id
LEFT JOIN w_map_cnt_mois on w_map_cnt_mois.contrat_mois_src_id = hp.contrat_mois_id
WHERE 1=1
AND mois_paie BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM')
;
-- Associer les bulletins de paie hors période de contrat avec contrat sur la période précédente appartenant à un autre prestataire.
UPDATE rh.p_historique_paie
SET contrat_id = subq.contrat_id,
contrat_mois_id = subq.contrat_mois_id
FROM (
select
p_historique_paie.oid,
(max(ARRAY[extract(epoch from p_contrats_mois.date_fin), p_contrats_mois.oid]))[2] as contrat_mois_id,
(max(ARRAY[extract(epoch from p_contrats_mois.date_fin), p_contrats_mois.contrat_id]))[2] AS contrat_id
from rh.p_historique_paie
join rh.p_contrats_mois on 1=1
and p_contrats_mois.salarie_id = p_historique_paie.salarie_id
and p_contrats_mois.date_fin < p_historique_paie.date_debut
where p_historique_paie.contrat_id is null
group by 1) AS subq
WHERE p_historique_paie.oid = subq.oid
;
]]></sqlcmd>
</NODE>
<NODE label="Ventilation analytique NG">
<sqlcmd><![CDATA[
DELETE FROM rh.p_ventilation WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
INSERT INTO rh.p_ventilation (
oid,
code,
texte,
plan_analytique_id)
SELECT
oid + fp('idx')::bigint,
code,
texte,
plan_analytique_id
FROM rh_src.p_ventilation
;
DELETE FROM rh.p_ventilation_section WHERE ventilation_id BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
INSERT INTO rh.p_ventilation_section (
ventilation_id,
section_analytique_id,
section_analytique_code,
section_analytique_texte,
ratio)
SELECT
ventilation_id + fp('idx')::bigint,
section_analytique_id + fp('idx')::bigint,
section_analytique_code,
section_analytique_texte,
ratio
FROM rh_src.p_ventilation_section
;
]]></sqlcmd>
</NODE>
<NODE label="Ventilation des profils">
<sqlcmd><![CDATA[
DELETE FROM rh.p_profil_contrat_mois WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
-- Alimentation des profils simultanés.
INSERT INTO rh.p_profil_contrat_mois (
oid,
profil_id,
contrat_mois_id,
salarie_id,
ratio,
mois
)
SELECT
oid + fp('idx')::bigint,
getOid(pcm.profil_id),
w_map_cnt_mois.contrat_mois_id,
w_map_cnt_mois.salarie_id,
pcm.ratio,
pcm.mois
FROM rh_src.p_profil_contrat_mois as pcm
JOIN w_map_cnt_mois ON w_map_cnt_mois.contrat_mois_src_id = pcm.contrat_mois_id
WHERE 1=1
--AND w_map_cnt_mois.contrat_mois_ori_id = 0 -- on insère uniquement les contrats pas déjà insérés précédemment.
-- AND pcm.mois BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM') -- PAS BESOIN DEJA FILTRE.
;
]]></sqlcmd>
</NODE>
<NODE label="Arrêts de travail">
<condition><![CDATA[
SELECT valeur = '0' FROM rh.t_divers
WHERE code = 'FUSION_IGNORE_ARRETS';
]]></condition>
<sqlcmd><![CDATA[
DELETE FROM rh.p_arrets_travail WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
INSERT INTO rh.p_arrets_travail(
oid,
salarie_id,
contrat_id,
mois_activite,
date_debut,
date_fin,
date_reprise,
motif_arret_id,
precision_motif_arret_id,
nb_jours
)
SELECT
oid + fp('idx')::bigint,
w_map_cnt.salarie_id,
w_map_cnt.contrat_id,
p_arrets_travail.mois_activite,
p_arrets_travail.date_debut,
p_arrets_travail.date_fin,
p_arrets_travail.date_reprise,
getOid(p_arrets_travail.motif_arret_id),
0 AS precision_motif_arret_id,
p_arrets_travail.nb_jours
FROM rh_src.p_arrets_travail
JOIN w_map_cnt on w_map_cnt.contrat_src_id = p_arrets_travail.contrat_id
WHERE to_char(p_arrets_travail.date_fin, 'YYYYMM')::int BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM')
-- On prend to_char(p_arrets_travail.date_fin, 'YYYYMM') plutôt que p_arrets_travail.mois_activite car cette dernière est calculée
-- à partir de la date de début.
;
-- Contrairement à la ventilation des contrats, on peut se permettre ici de remonter la ventilation des arrêts même si elle est à cheval.
-- NON car pour les longues durées, ça n'aura pas été ventilé ?.
-- Manifestement, les arrêts longue durée sont recréés dans le nouveau prestataire avec une date de début plus récente (inclue dans la plage du prestataire).
-- Seule la date de reprise sera fausse, il y aura des chevauchements si dans le prestataire précédent ça chevauche...
DELETE FROM rh.p_arrets_travail_mois WHERE arret_travail_id BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
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_arret,
nb_heures)
SELECT
p_arrets_travail.oid,
w_map_sal.salarie_id,
w_map_cnt_mois.contrat_id,
w_map_cnt_mois.contrat_mois_id,
p_arrets_travail_mois.mois_activite,
p_arrets_travail_mois.nb_debut_arret,
p_arrets_travail_mois.nb_fin_arret,
p_arrets_travail_mois.nb_reprise_apres_arret,
p_arrets_travail_mois.date_debut,
p_arrets_travail_mois.date_fin,
p_arrets_travail_mois.nb_jours,
p_arrets_travail_mois.nb_arret,
p_arrets_travail_mois.nb_heures
FROM rh_src.p_arrets_travail_mois
-- JOIN rh.p_arrets_travail : permet de restreindre la remontée des arrets_travail_mois à des arrets_travail précédemment remontés.
JOIN rh.p_arrets_travail ON p_arrets_travail.oid = p_arrets_travail_mois.arret_travail_id + fp('idx')::bigint
JOIN w_map_sal ON w_map_sal.salarie_src_id = p_arrets_travail_mois.salarie_id
JOIN w_map_cnt_mois on w_map_cnt_mois.contrat_mois_src_id = p_arrets_travail_mois.contrat_mois_id
WHERE p_arrets_travail_mois.mois_activite BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM')
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13
;
]]></sqlcmd>
</NODE>
<NODE label="Visites Médicales">
<sqlcmd><![CDATA[
DELETE FROM rh.p_visites_medicales WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint)
;
INSERT INTO rh.p_visites_medicales(
oid,
salarie_id,
contrat_id,
contrat_mois_id,
mois_activite,
date,
motif_visite_id)
SELECT
p_visites_medicales.oid + fp('idx')::bigint,
w_map_cnt_mois.salarie_id,
w_map_cnt_mois.contrat_id,
w_map_cnt_mois.contrat_mois_id,
p_visites_medicales.mois_activite,
p_visites_medicales.date,
getOid(p_visites_medicales.motif_visite_id)
FROM rh_src.p_visites_medicales
JOIN w_map_cnt_mois on w_map_cnt_mois.contrat_mois_src_id = p_visites_medicales.contrat_mois_id
WHERE p_visites_medicales.mois_activite BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM')
;
]]></sqlcmd>
</NODE>
<NODE label="Handicap 2">
<condition><![CDATA[
select fp('idx')::bigint = 0
;
]]></condition>
<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
salarie_id
,statut_boeth
,lib_boeth
,type_reco
,lib_reco
,taux_ipp
,deb_validite
,fin_validite
,cat_invalide_pension
,deb_pension
,lourd_handicap
,decision
FROM rh_src.p_handicap2
;
]]></sqlcmd>
</NODE>
<NODE name="DIVERS" type="common"/>
<NODE label="Mise à jour de la table Divers (mois en cours)">
<sqlcmd><![CDATA[
-- Màj du mois non clôturé.
-- Opération à ne faire qu'une seule fois avec le prestataire courant.
DELETE FROM rh.t_divers
WHERE 1=1
AND code = 'MOIS_EN_COURS'
AND fp('idx')::bigint = 0
;
INSERT INTO rh.t_divers(
code,
texte,
valeur,
valeur_date,
description)
SELECT
code,
texte,
valeur,
valeur_date,
description
FROM rh_src.t_divers
WHERE 1=1
AND code = 'MOIS_EN_COURS'
AND fp('idx')::bigint = 0
;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="POST" label="POST-TRAITEMENTS">
<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>