= to_char(rhp('rhprovider_start')::date, 'YYYY')
AND J0CENT IN (select substr(column2, 1, 3)::numeric from rhp where column1 = 'entreprise')
GROUP BY 1;
CREATE INDEX w_entreprises_select_i1 ON w_entreprises_select USING btree(XXCENT)
;
DROP TABLE IF EXISTS w_etablissements_select;
CREATE TEMP TABLE w_etablissements_select AS
SELECT J0CENT AS XXCENT, J0CETS AS XXCETS
FROM prod_shs.rhlibH_J0P01
WHERE 1=1
AND J0DFPA >= to_char(rhp('rhprovider_start')::date, 'YYYY')
AND (1!=1
OR J0CENT IN (select column2::numeric from rhp where column1 = 'entreprise')
OR to_char(J0CENT,'FM000') || to_char(J0CETS,'FM000') IN (select column2::numeric from rhp where column1 = 'entreprise'))
GROUP BY 1,2;
CREATE INDEX w_etablissements_select_i1 ON w_etablissements_select USING btree(XXCETS)
;
-- Màj des codes postaux
INSERT INTO rh.t_codes_postaux(oid, code, texte, texte_court, longitude, latitude, departement_id,
departement_code, departement_texte)
SELECT
t_codes_postaux.oid,
t_codes_postaux.code,
t_codes_postaux.texte,
t_codes_postaux.texte_court,
t_codes_postaux.longitude,
t_codes_postaux.latitude,
t_codes_postaux.departement_id,
t_codes_postaux.departement_code,
t_codes_postaux.departement_texte
FROM base.t_codes_postaux
LEFT JOIN rh.t_codes_postaux t_codes_postaux_rh ON t_codes_postaux_rh.oid = t_codes_postaux.oid
WHERE t_codes_postaux_rh.oid IS NULL
;
UPDATE rh.t_codes_postaux t_codes_postaux_rh
SET
code = t_codes_postaux.code,
texte = t_codes_postaux.texte,
texte_court = t_codes_postaux.texte_court,
longitude = t_codes_postaux.longitude,
latitude = t_codes_postaux.latitude,
departement_id = t_codes_postaux.departement_id,
departement_code = t_codes_postaux.departement_code,
departement_texte = t_codes_postaux.departement_texte
FROM base.t_codes_postaux
WHERE
t_codes_postaux_rh.oid = t_codes_postaux.oid
AND (
t_codes_postaux_rh.code IS DISTINCT FROM t_codes_postaux.code OR
t_codes_postaux_rh.texte IS DISTINCT FROM t_codes_postaux.texte OR
t_codes_postaux_rh.texte_court IS DISTINCT FROM t_codes_postaux.texte_court OR
t_codes_postaux_rh.longitude IS DISTINCT FROM t_codes_postaux.longitude OR
t_codes_postaux_rh.latitude IS DISTINCT FROM t_codes_postaux.latitude OR
t_codes_postaux_rh.departement_id IS DISTINCT FROM t_codes_postaux.departement_id OR
t_codes_postaux_rh.departement_code IS DISTINCT FROM t_codes_postaux.departement_code OR
t_codes_postaux_rh.departement_texte IS DISTINCT FROM t_codes_postaux.departement_texte
)
;
-- Màj des Depts.
INSERT INTO rh.t_departements(oid, code, texte, texte_court)
SELECT
t_departements.oid,
t_departements.code,
t_departements.texte,
t_departements.texte_court
FROM base.t_departements
LEFT JOIN rh.t_departements t_departements_rh ON t_departements_rh.oid = t_departements.oid
WHERE t_departements_rh.oid IS NULL
;
UPDATE rh.t_departements t_departements_rh
SET
code = t_departements.code,
texte = t_departements.texte,
texte_court = t_departements.texte_court
FROM base.t_departements
WHERE
t_departements_rh.oid = t_departements.oid
AND (
t_departements_rh.code IS DISTINCT FROM t_departements.code OR
t_departements_rh.texte IS DISTINCT FROM t_departements.texte OR
t_departements_rh.texte_court IS DISTINCT FROM t_departements.texte_court
)
;
-- Màj des Entreprises
INSERT INTO rh.t_entreprises(code, texte, texte_court, code_original, siren)
SELECT
to_char(F0CENT,'FM000'),
F0RSOC,
F0NOM,
to_char(F0CENT,'FM000'),
substring(f1csir,1,9)
FROM prod_shs.rhlib_F0P01
JOIN w_entreprises_select ON XXCENT = F0CENT
LEFT JOIN rh.t_entreprises ON code_original = to_char(F0CENT,'FM000')
JOIN prod_shs.rhlib_F1P01 ON to_char(F1CENT,'FM000') = to_char(F0CENT,'FM000')
WHERE 1=1
AND code_original IS NULL
GROUP BY 1,2,3,4,5
;
UPDATE rh.t_entreprises
SET code = code_original
WHERE code <> code_original
;
with ent as (
SELECT
t_entreprises.oid,
substring(f1csir,1,9) AS siren
FROM rh.t_entreprises
JOIN prod_shs.rhlib_F1P01 ON to_char(F1CENT,'FM000') = 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, texte, texte_court, code_original, entreprise_id,siret)
SELECT
to_char(F1CETS,'FM000'),
F1NOM,
F1NOM,
to_char(F1CENT,'FM000')||to_char(F1CETS,'FM000'),
t_entreprises.oid,
f1csir
FROM prod_shs.rhlib_F1P01
JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS
JOIN rh.t_entreprises ON t_entreprises.code_original = lpad(F1CENT, 3, '0')
LEFT JOIN rh.t_etablissements ON t_etablissements.code_original = (to_char(F1CENT,'FM000')||to_char(F1CETS,'FM000'))
WHERE 1=1
AND t_etablissements.code_original IS NULL
;
with eta as (
SELECT
t_etablissements.oid,
f1csir as siret
FROM rh.t_etablissements
JOIN prod_shs.rhlib_F1P01 on to_char(F1CENT,'FM000')||to_char(F1CETS,'FM000') = 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
;
-- Code avec entreprise si plusieurs entreprises
UPDATE rh.t_etablissements
SET code = CASE WHEN (SELECT count(DISTINCT substr(code_original,1,3)) FROM rh.t_etablissements) > 1 THEN substr(code_original,1,3) || '-' ELSE '' END || substr(code_original,4,3)
WHERE code <> (CASE WHEN (SELECT count(DISTINCT substr(code_original,1,3)) FROM rh.t_etablissements) > 1 THEN substr(code_original,1,3) || '-' ELSE '' END || substr(code_original,4,3))
;
-- Màj des nationalités
INSERT INTO rh.t_nationalites(code, texte, texte_court, code_original)
SELECT DISTINCT
F3CNAT, F3CNAT, F3CNAT, F3CNAT
FROM prod_shs.rhlib_F3P01
LEFT JOIN rh.t_nationalites ON (code_original = F3CNAT)
WHERE 1=1
AND F3CNAT <> ''
AND code_original IS NULL
;
-- Màj des situations de famille
INSERT INTO rh.t_situations_famille(code, texte, texte_court, code_original)
SELECT DISTINCT
F3SFAM, F3SFAM, F3SFAM, F3SFAM
FROM
prod_shs.rhlib_F3P01
LEFT JOIN rh.t_situations_famille ON (code_original = F3SFAM)
WHERE
F3SFAM <> '' AND code_original IS NULL
;
-- Màj des statuts
DROP TABLE IF EXISTS w_SHS_statuts;
CREATE TEMP TABLE w_SHS_statuts AS
SELECT F1CENT AS XXCENT, F1CETS AS XXCETS, F1CST0 AS XXCODO, F1CST0 AS XXCODE, F1LST0 AS XXTEXT
FROM prod_shs.rhlib_F1P01 JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS WHERE F1CST0 <> ''
UNION
SELECT F1CENT, F1CETS, F1CST1, F1CST1, F1LST1
FROM prod_shs.rhlib_F1P01 JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS WHERE F1CST1 <> ''
UNION
SELECT F1CENT, F1CETS, F1CST2, F1CST2, F1LST2
FROM prod_shs.rhlib_F1P01 JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS WHERE F1CST2 <> ''
UNION
SELECT F1CENT, F1CETS, F1CST3, F1CST3, F1LST3
FROM prod_shs.rhlib_F1P01 JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS WHERE F1CST3 <> ''
UNION
SELECT F1CENT, F1CETS, F1CST4, F1CST4, F1LST4
FROM prod_shs.rhlib_F1P01 JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS WHERE F1CST4 <> ''
UNION
SELECT F1CENT, F1CETS, F1CST5, F1CST5, F1LST5
FROM prod_shs.rhlib_F1P01 JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS WHERE F1CST5 <> ''
UNION
SELECT F1CENT, F1CETS, F1CST6, F1CST6, F1LST6
FROM prod_shs.rhlib_F1P01 JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS WHERE F1CST6 <> ''
UNION
SELECT F1CENT, F1CETS, F1CST7, F1CST7, F1LST7
FROM prod_shs.rhlib_F1P01 JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS WHERE F1CST7 <> ''
UNION
SELECT F1CENT, F1CETS, F1CST8, F1CST8, F1LST8
FROM prod_shs.rhlib_F1P01 JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS WHERE F1CST8 <> ''
UNION
SELECT F1CENT, F1CETS, F1CST9, F1CST9, F1LST9
FROM prod_shs.rhlib_F1P01 JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS WHERE F1CST9 <> ''
;
SELECT rh.cti_shs_multicode('w_shs_statuts', 'w_cti_statuts')
;
INSERT INTO rh.t_statuts(code, texte, texte_court, code_original)
SELECT
MAX(in_code), MAX(in_texte), MAX(in_texte), in_code_original
FROM w_cti_statuts
LEFT JOIN rh.t_statuts ON t_statuts.code_original = in_code_original
WHERE t_statuts.code_original IS NULL
GROUP BY in_code_original
ORDER BY 1
;
UPDATE rh.t_statuts SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_statuts
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM in_texte
)
;
-- Màj des types de contrat
INSERT INTO rh.t_types_contrat(code, texte, texte_court, code_original)
SELECT
N0CENR,
MAX(N0LIBE),
MAX(N0LIBE),
N0CENR
FROM
prod_shs.rhlib_n0P01
JOIN w_entreprises_select ON XXCENT = to_number('0' || N0ENTR, '0000')
LEFT JOIN rh.t_types_contrat ON (code_original = N0CENR)
WHERE n0ctab = 'TCNT'
AND N0TYPE = 2
AND code_original IS NULL
AND N0CENR <> ''
GROUP BY 1
;
-- Màj des motifs de début de contrat
INSERT INTO rh.t_motifs_debut_contrat(code, texte, texte_court, code_original)
SELECT
N0CENR,
MAX(N0LIBE),
MAX(N0LIBE),
N0CENR
FROM
prod_shs.rhlib_n0P01
JOIN w_entreprises_select ON XXCENT = to_number('0' || N0ENTR, '0000')
LEFT JOIN rh.t_motifs_debut_contrat ON (code_original = N0CENR)
WHERE N0CTAB = 'MOTD'
AND N0TYPE = '2'
AND code_original IS NULL
AND N0CENR <> ''
GROUP BY 1
;
-- Màj des motifs de fin de contrat
INSERT INTO rh.t_motifs_fin_contrat(code, texte, texte_court, code_original)
SELECT
SUBSTR(N0CENR,4,2),
MAX(N0LIBE),
MAX(N0LIBE),
SUBSTR(N0CENR,4,2)
FROM
prod_shs.rhlib_n0P01
JOIN w_entreprises_select ON XXCENT = to_number('0' || N0ENTR, '0000')
LEFT JOIN rh.t_motifs_fin_contrat ON (code_original = SUBSTR(N0CENR,4,2))
WHERE N0CTAB = 'MOTF'
AND N0TYPE = '2'
AND code_original IS NULL
AND N0CENR <> ''
GROUP BY 1
;
-- Màj des qualifications.
-- Le code original est préfixé par les codes Ent. et Ets. car il peut y avoir collision de code d'un établissement à l'autre.
DROP TABLE IF EXISTS w_shs_qualifications;
CREATE TEMP TABLE w_shs_qualifications AS
SELECT
G1CENT AS XXCENT,
G1CETS AS XXCETS,
G1CQUA AS XXCODO,
G1CQUA AS XXCODE,
G1LPAR AS XXTEXT
FROM prod_shs.rhlib_G1P01
JOIN w_etablissements_select ON XXCENT = G1CENT AND XXCETS = G1CETS
;
SELECT rh.cti_shs_multicode('w_shs_qualifications', 'w_cti_qualifications')
;
UPDATE w_cti_qualifications
SET in_code_original = subview.new_in_code_original
FROM
(
SELECT in_code_original,
MIN(to_char(XXCENT, 'FM000') || to_char(XXCETS, 'FM000') || xxcodo) AS new_in_code_original
FROM w_cti_qualifications
GROUP BY 1
) subview
WHERE w_cti_qualifications.in_code_original = subview.in_code_original;
INSERT INTO rh.t_qualifications(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_qualifications
LEFT JOIN rh.t_qualifications ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_qualifications SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_qualifications
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM in_texte
)
;
-- Màj des types de temps de travail
DROP TABLE IF EXISTS w_shs_types_temps_travail
;
CREATE TEMP TABLE w_shs_types_temps_travail AS
SELECT
XXCENT,
XXCETS,
coalesce(subq.code, N0CENR) AS XXCODO,
coalesce(subq.code, N0CENR) AS XXCODE,
MAX(N0LIBE)||coalesce(subq.libelle, ''::text) AS XXTEXT
FROM prod_shs.rhlib_n0P01
JOIN w_etablissements_select ON 1=1
LEFT JOIN (select
F4CTPS,
case when F4CTPS IN ('I', 'P') then F4CTPS||trim(to_char(F4NHRE, '000.00')) else F4CTPS end as code,
' ' || F4NHRE::text as libelle,
F4CENT,
F4CETS
from prod_shs.rhlib_F4P01
JOIN w_etablissements_select ON 1=1
AND XXCENT = F4CENT
AND XXCETS = F4CETS
WHERE F4CTPS IN ('I', 'P')
group by 1,2,3,4,5) as subq on 1=1
AND subq.F4CTPS = N0CENR
AND subq.F4CENT = XXCENT
AND subq.F4CETS = XXCETS
WHERE 1=1
AND N0CTAB = 'TTPS'
AND N0TYPE = '2'
GROUP BY 1,2,3,4, subq.libelle
;
SELECT rh.cti_shs_multicode('w_shs_types_temps_travail', 'w_cti_types_temps_travail')
;
INSERT INTO rh.t_types_temps_travail(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_types_temps_travail
LEFT JOIN rh.t_types_temps_travail ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_types_temps_travail SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_types_temps_travail
WHERE 1=1
AND in_code_original = code_original
AND (1!=1
OR code IS DISTINCT FROM in_code
OR texte IS DISTINCT FROM in_texte
OR texte_court IS DISTINCT FROM in_texte)
;
-- Màj des catégories socio-professionnelles
DROP TABLE IF EXISTS w_shs_categories;
CREATE TEMP TABLE w_shs_categories AS
SELECT
G4CENT AS XXCENT,
G4CETS AS XXCETS,
G4CCSP AS XXCODO,
G4CCSP AS XXCODE,
G4LPAR AS XXTEXT
FROM prod_shs.rhlib_G4P01
JOIN w_etablissements_select ON XXCENT = G4CENT AND XXCETS = G4CETS
;
SELECT rh.cti_shs_multicode('w_shs_categories', 'w_cti_categories')
;
INSERT INTO rh.t_categories_socio_professionnelle(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_categories
LEFT JOIN rh.t_categories_socio_professionnelle ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_categories_socio_professionnelle SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_categories
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM in_texte
)
;
-- Màj des services
DROP TABLE IF EXISTS w_shs_services;
CREATE TEMP TABLE w_shs_services AS
SELECT
G2CENT AS XXCENT,
G2CETS AS XXCETS,
G2SRVC AS XXCODO,
G2SRVC AS XXCODE,
G2LPAR AS XXTEXT
FROM prod_shs.rhlib_G2P01
JOIN w_etablissements_select ON XXCENT = G2CENT AND XXCETS = G2CETS
;
SELECT rh.cti_shs_multicode('w_shs_services', 'w_cti_services')
;
INSERT INTO rh.t_services(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_services
LEFT JOIN rh.t_services ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_services SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_services
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM in_texte
)
;
-- Màj des spécialités
DROP TABLE IF EXISTS w_shs_specialites;
CREATE TEMP TABLE w_shs_specialites AS
SELECT
G3CENT AS XXCENT,
G3CETS AS XXCETS,
G3SPEC AS XXCODO,
G3SPEC AS XXCODE,
G3LPAR AS XXTEXT
FROM prod_shs.rhlib_G3P01
JOIN w_etablissements_select ON XXCENT = G3CENT AND XXCETS = G3CETS
;
SELECT rh.cti_shs_multicode('w_shs_specialites', 'w_cti_specialites')
;
INSERT INTO rh.t_specialites(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_specialites
LEFT JOIN rh.t_specialites ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_specialites SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_specialites
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM in_texte
)
;
-- Màj des Codes Emploi
DROP TABLE IF EXISTS w_shs_codes_emploi;
CREATE TEMP TABLE w_shs_codes_emploi AS
SELECT
G5CENT AS XXCENT,
G5CETS AS XXCETS,
G5CEMP AS XXCODO,
G5CEMP AS XXCODE,
G5LPAR AS XXTEXT
FROM prod_shs.rhlib_G5P01
JOIN w_etablissements_select ON XXCENT = G5CENT AND XXCETS = G5CETS
;
SELECT rh.cti_shs_multicode('w_shs_codes_emploi', 'w_cti_codes_emploi')
;
INSERT INTO rh.t_codes_emploi(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_codes_emploi
LEFT JOIN rh.t_codes_emploi ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_codes_emploi SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_codes_emploi
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM in_texte
)
;
-- Màj des types d'horaire
INSERT INTO rh.t_types_horaire(code, texte, texte_court, code_original)
SELECT DISTINCT
F4CTJN,
F4CTJN,
F4CTJN,
F4CTJN
FROM prod_shs.rhlib_F4P01
JOIN w_etablissements_select ON XXCENT = f4CENT AND XXCETS = f4CETS
LEFT JOIN rh.t_types_horaire ON (code_original = F4CTJN)
WHERE code_original IS NULL AND F4CTJN <> ''
;
-- Màj des sociétés d'interim
INSERT INTO rh.t_societes_interim(code, texte, texte_court, code_original)
SELECT DISTINCT
F4CSOC,
F4CSOC,
F4CSOC,
F4CSOC
FROM prod_shs.rhlib_F4P01
JOIN w_etablissements_select ON XXCENT = f4CENT AND XXCETS = f4CETS
LEFT JOIN rh.t_societes_interim ON (code_original = F4CSOC)
WHERE F4CSOC <> ''
AND code_original IS NULL
;
-- Màj des groupes cotisants.
DROP TABLE IF EXISTS w_shs_groupes_cotisant;
CREATE TEMP TABLE w_shs_groupes_cotisant AS
SELECT
G9CENT AS XXCENT,
G9CETS AS XXCETS,
G9GCOT AS XXCODO,
G9GCOT AS XXCODE,
G9LPAR AS XXTEXT
FROM prod_shs.rhlib_G9P01
JOIN w_etablissements_select ON XXCENT = G9CENT AND XXCETS = G9CETS
;
SELECT rh.cti_shs_multicode('w_shs_groupes_cotisant', 'w_cti_groupes_cotisant')
;
INSERT INTO rh.t_groupes_cotisant(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_groupes_cotisant
LEFT JOIN rh.t_groupes_cotisant ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_groupes_cotisant SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_groupes_cotisant
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM in_texte
)
;
-- Màj des grilles
INSERT INTO rh.t_grilles(code, texte, texte_court, code_original)
SELECT DISTINCT
F4GRIE,
F4GRIE,
F4GRIE,
F4GRIE
FROM prod_shs.rhlib_F4P01
JOIN w_etablissements_select ON XXCENT = f4CENT AND XXCETS = f4CETS
LEFT JOIN rh.t_grilles ON (code_original = F4GRIE)
WHERE code_original IS NULL
AND F4GRIE <> ''
;
-- Màj des groupes de grilles
INSERT INTO rh.t_grilles_groupes(code, texte, texte_court, code_original)
SELECT DISTINCT
F4GRPE,
F4GRPE,
F4GRPE,
F4GRPE
FROM prod_shs.rhlib_F4P01
JOIN w_etablissements_select ON XXCENT = f4CENT AND XXCETS = f4CETS
LEFT JOIN rh.t_grilles_groupes ON (code_original = F4GRPE)
WHERE code_original IS NULL
AND F4GRPE <> ''
;
-- Màj des sections analytiques de paie
DROP TABLE IF EXISTS w_shs_sections_analytiques_paie;
CREATE TEMP TABLE w_shs_sections_analytiques_paie AS
SELECT
G0CENT AS XXCENT,
G0CETS AS XXCETS,
G0SANA AS XXCODO,
G0SANA AS XXCODE,
G0LPAR AS XXTEXT
FROM prod_shs.rhlib_G0P01
JOIN w_etablissements_select ON XXCENT = G0CENT AND XXCETS = G0CETS
;
SELECT rh.cti_shs_multicode('w_shs_sections_analytiques_paie', 'w_cti_sections_analytiques_paie')
;
INSERT INTO rh.t_sections_analytiques_paie(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_sections_analytiques_paie
LEFT JOIN rh.t_sections_analytiques_paie ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_sections_analytiques_paie SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_sections_analytiques_paie
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM in_texte
)
;
-- Màj des sections analytiques (une partie est conditionné à l'existence de ANP01PR).
INSERT INTO rh.t_sections_analytiques(code, texte, texte_court, code_original)
SELECT DISTINCT
G0SCPA,
G0SCPA,
G0SCPA,
G0SCPA
FROM prod_shs.rhlib_G0p01
JOIN w_etablissements_select ON XXCENT = G0CENT AND XXCETS = G0CETS
LEFT JOIN rh.t_sections_analytiques ON (code_original = G0SCPA)
WHERE code_original IS NULL
;
-- Màj des rubriques
DROP TABLE IF EXISTS w_shs_rubriques;
CREATE TEMP TABLE w_shs_rubriques AS
with rubs as (
select G6CRUB as xxcrub
from prod_shs.rhlib_G6P01
union
select H0CCOT as xxcrub
from prod_shs.rhlib_H0P01),
cartesian as (
select
xxcrub,
xxcent,
xxcets
from rubs, w_etablissements_select),
libs_0 as (
select
g6crub as libcrub,
g6lpar as liblpar
from prod_shs.rhlib_G6P01
union
select
H0CCOT,
H0lpar
from prod_shs.rhlib_H0P01),
libs as (
select
libcrub,
max(liblpar) as liblpar
from libs_0
group by 1)
select
XXCENT,
XXCETS,
xxcrub::text as XXCODO,
to_char(xxcrub,'FM0000') AS XXCODE,
coalesce(G6P01.G6LPAR, H0P01.H0LPAR, libLPAR) AS XXTEXT
from cartesian
left join prod_shs.rhlib_G6P01 as G6P01 ON 1=1
and XXCENT = G6P01.G6CENT
AND XXCETS = G6P01.G6CETS
and xxcrub = G6P01.G6CRUB
left join prod_shs.rhlib_H0P01 as H0P01 ON 1=1
and XXCENT = H0P01.H0CENT
AND XXCETS = H0P01.H0CETS
and xxcrub = H0P01.H0CCOT
left join libs ON xxcrub = libcrub
;
SELECT rh.cti_shs_multicode('w_shs_rubriques', 'w_cti_rubriques')
;
INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_rubriques
LEFT JOIN rh.t_rubriques ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_rubriques SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_rubriques
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM in_texte
)
;
UPDATE w_cti_rubriques
SET in_id = t_rubriques.oid
FROM rh.t_rubriques
WHERE code_original = in_code_original;
-- Màj des organismes de cotisation
DROP TABLE IF EXISTS w_shs_organismes_cotisation;
CREATE TEMP TABLE w_shs_organismes_cotisation AS
SELECT
I3CENT AS XXCENT,
I3CETS AS XXCETS,
I3NORG::text AS XXCODO,
I3NORG::text AS XXCODE,
I3NOM AS XXTEXT
FROM prod_shs.rhlib_I3P01
JOIN w_etablissements_select ON XXCENT = I3CENT AND XXCETS = I3CETS
;
SELECT rh.cti_shs_multicode('w_shs_organismes_cotisation', 'w_cti_organismes_cotisation')
;
INSERT INTO rh.t_organismes_cotisation(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_organismes_cotisation
LEFT JOIN rh.t_organismes_cotisation ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_organismes_cotisation SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_organismes_cotisation
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM in_texte
)
;
UPDATE w_cti_organismes_cotisation
SET in_id = t_organismes_cotisation.oid
FROM rh.t_organismes_cotisation
WHERE code_original = in_code_original;
-- Màj des listes
-- Ancienne codification supprimée
DELETE FROM rh.t_listes
WHERE code LIKE 'G8P01%' AND
length(code) <= 10;
DELETE from rh.t_listes_contenu
WHERE liste_id NOT IN (SELECT oid FROM rh.t_listes)
;
INSERT INTO rh.t_listes(
code,
texte,
table_id,
is_cti,
show_omit,
utilisateur_createur,
est_partagee_modification,
chapitre
)
SELECT
'G8P01_' || G8CGRP || '-' || to_char(G8CENT,'FM000') || to_char(G8CETS,'FM000') AS code,
G8LPAR || ' - ' || F1NOM AS texte,
(SELECT oid FROM rh.t_listes_tables WHERE code ='RUP') AS table_id,
'0' AS is_cti,
'0' AS show_omit,
'cti' AS utilisateur_createur,
'0' AS est_partagee_modification,
'Listes SHS ' || F1NOM
FROM prod_shs.rhlib_G8P01
JOIN prod_shs.rhlib_F1P01 ON G8CENT = F1CENT AND G8CETS = F1CETS
JOIN w_etablissements_select ON XXCENT = G8CENT AND XXCETS = G8CETS
WHERE ('G8P01_' || G8CGRP || '-' || to_char(G8CENT,'FM000') || to_char(G8CETS,'FM000') ) NOT IN (SELECT code FROM rh.t_listes);
UPDATE rh.t_listes SET
texte = G8LPAR || ' - ' || F1NOM,
chapitre = 'Listes SHS ' || F1NOM
FROM prod_shs.rhlib_G8P01
JOIN prod_shs.rhlib_F1P01 ON G8CENT = F1CENT AND G8CETS = F1CETS
WHERE t_listes.code = ('G8P01_' || G8CGRP || '-' || to_char(G8CENT,'FM000') || to_char(G8CETS,'FM000')) AND
(
texte IS DISTINCT FROM (G8LPAR || ' - ' || F1NOM) OR
chapitre IS DISTINCT FROM ('Listes SHS ' || F1NOM)
)
;
DROP TABLE IF EXISTS w_G8P01_contenu;
CREATE TEMP TABLE w_G8P01_contenu AS
SELECT
t_listes.code AS liste_code,
G8CENT,
G8CETS,
G8CGRP,
G6CRUB::text AS G8RBXX
FROM prod_shs.rhlib_g8p01
JOIN w_etablissements_select ON XXCENT = G8CENT AND XXCETS = G8CETS
JOIN rh.t_listes ON
'G8P01_' || G8CGRP || '-' || to_char(G8CENT,'FM000') || to_char(G8CETS,'FM000') = t_listes.code
JOIN prod_shs.rhlib_G6P01 ON 1=1
AND G6CENT = G8CENT
AND G6CETS = G8CETS
AND (
G6CRUB BETWEEN G8FRD1 AND G8FRF1 OR
G6CRUB BETWEEN G8FRD2 AND G8FRF2 OR
G6CRUB BETWEEN G8FRD3 AND G8FRF3 OR
G6CRUB BETWEEN G8FRD4 AND G8FRF4 OR
G6CRUB BETWEEN G8FRD5 AND G8FRF5 OR
G6CRUB = G8RB01 OR
G6CRUB = G8RB02 OR
G6CRUB = G8RB03 OR
G6CRUB = G8RB04 OR
G6CRUB = G8RB05 OR
G6CRUB = G8RB06 OR
G6CRUB = G8RB07 OR
G6CRUB = G8RB08 OR
G6CRUB = G8RB09 OR
G6CRUB = G8RB10 OR
G6CRUB = G8RB11 OR
G6CRUB = G8RB12 OR
G6CRUB = G8RB13 OR
G6CRUB = G8RB14 OR
G6CRUB = G8RB15 OR
G6CRUB = G8RB16 OR
G6CRUB = G8RB17 OR
G6CRUB = G8RB18 OR
G6CRUB = G8RB19 OR
G6CRUB = G8RB20 OR
G6CRUB = G8RB21 OR
G6CRUB = G8RB22 OR
G6CRUB = G8RB23 OR
G6CRUB = G8RB24 OR
G6CRUB = G8RB25 OR
G6CRUB = G8RB26 OR
G6CRUB = G8RB27 OR
G6CRUB = G8RB28 OR
G6CRUB = G8RB29 OR
G6CRUB = G8RB30 OR
G6CRUB = G8RB31 OR
G6CRUB = G8RB32 OR
G6CRUB = G8RB33 OR
G6CRUB = G8RB34 OR
G6CRUB = G8RB35 OR
G6CRUB = G8RB36 OR
G6CRUB = G8RB37 OR
G6CRUB = G8RB38 OR
G6CRUB = G8RB39 OR
G6CRUB = G8RB40 OR
G6CRUB = G8RB41 OR
G6CRUB = G8RB42 OR
G6CRUB = G8RB43 OR
G6CRUB = G8RB44 OR
G6CRUB = G8RB45 OR
G6CRUB = G8RB46 OR
G6CRUB = G8RB47 OR
G6CRUB = G8RB48 OR
G6CRUB = G8RB49 OR
G6CRUB = G8RB50
)
;
UPDATE w_G8P01_contenu
SET G8RBXX = in_code_original
FROM w_cti_rubriques
WHERE G8CENT = XXCENT AND
G8CETS = XXCETS AND
G8RBXX = XXCODO AND
G8RBXX <> in_code_original
;
DELETE FROM rh.t_listes_contenu
WHERE liste_id IN (SELECT oid FROM rh.t_listes WHERE code LIKE 'G8P01_%')
;
INSERT INTO rh.t_listes_contenu (liste_id, to_id)
SELECT t_listes.oid, t_rubriques.oid
FROM w_G8P01_contenu
JOIN rh.t_listes ON t_listes.code = liste_code
JOIN rh.t_rubriques ON t_rubriques.code_original = G8RBXX
GROUP BY 1,2;
-- Màj des motifs d'arret
INSERT INTO rh.t_motifs_arret(code, texte, texte_court, code_original)
SELECT DISTINCT
N6MOTA,
N6MOTA,
N6MOTA,
N6MOTA
FROM prod_shs.rhlib_N6P01
JOIN w_etablissements_select ON XXCENT = N6CENT AND XXCETS = N6CETS
LEFT JOIN rh.t_motifs_arret ON (code_original = N6MOTA)
WHERE 1=1
AND code_original IS NULL
AND (select valeur = '0' from rh.t_divers where code = 'SHS_MOTIF')
;
-- Màj des précisions du motif d'arrêt
DROP TABLE IF EXISTS w_shs_precisions_motif_arret;
CREATE TEMP TABLE w_shs_precisions_motif_arret AS
SELECT
to_number('0' || N0ENTR, '0000') AS XXCENT,
to_number('0' || N0ETAB, '0000') AS XXCETS,
N0CENR::text AS XXCODO,
N0CENR::text AS XXCODE,
N0LIBE AS XXTEXT
FROM prod_shs.rhlib_N0P11
JOIN w_etablissements_select ON XXCENT = to_number('0' || N0ENTR, '0000') AND XXCETS = to_number('0' || N0ETAB, '0000')
WHERE N0CTAB = 'ATMO'
AND N0TYPE = '2'
;
SELECT rh.cti_shs_multicode('w_shs_precisions_motif_arret', 'w_cti_precisions_motif_arret')
;
INSERT INTO rh.t_precisions_motif_arret(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
SUBSTR(MAX(in_texte),1,50),
in_code_original
FROM w_cti_precisions_motif_arret
LEFT JOIN rh.t_precisions_motif_arret ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_precisions_motif_arret SET
code = in_code,
texte = in_texte,
texte_court = substr(in_texte,1,50)
FROM w_cti_precisions_motif_arret
WHERE in_code_original = code_original AND
(
code IS DISTINCT FROM in_code OR
texte IS DISTINCT FROM in_texte OR
texte_court IS DISTINCT FROM substr(in_texte,1,50)
)
;
-- Màj des motifs de visite médicale
INSERT INTO rh.t_motifs_visite(code_original, code, texte, texte_court)
SELECT
N0CENR,
N0CENR,
MAX(N0LIBE),
substr(MAX(N0LIBE), 1, 50)
FROM prod_shs.rhlib_n0p01
JOIN w_entreprises_select ON XXCENT = to_number('0' || N0ENTR, '0000')
WHERE 1=1
AND n0ctab = 'MDVI'
AND n0type = '2'
AND N0CENR NOT IN (SELECT code_original FROM rh.t_motifs_visite)
GROUP BY 1,2
;
]]>
= to_char(rhp('rhprovider_start')::date, 'YYYY')
AND (1!=1
OR F1NBSA <> 0
OR F1BRUT <> 0
OR F1NBHR <> 0)
GROUP BY 1,2,3
;
INSERT INTO rh.p_chiffrier_production (entreprise_id, etablissement_id, mois, nombre_salaries, montant_brut, nombre_heures)
SELECT
t_etablissements.entreprise_id,
t_etablissements.oid AS etablissement_id,
f1DFPA * 100 + f1DFPM AS mois,
0 AS nombre_contrats,
0 AS montant_brut,
0 AS nombre_heures
FROM prod_shs.rhlib_F1P01
JOIN w_etablissements_select ON XXCENT = F1CENT AND XXCETS = F1CETS
LEFT JOIN rh.t_etablissements ON lpad(F1CENT, 3, '0')||lpad(F1CETS, 3, '0') = t_etablissements.code_original
LEFT JOIN rh.p_chiffrier_production ON 1=1
AND p_chiffrier_production.entreprise_id = t_etablissements.entreprise_id
AND p_chiffrier_production.etablissement_id = t_etablissements.oid
AND p_chiffrier_production.mois = (f1DFPA * 100 + f1DFPM)
WHERE 1=1
AND f1DFPA >= to_char(rhp('rhprovider_start')::date, 'YYYY')
AND p_chiffrier_production.entreprise_id IS NULL
GROUP BY 1,2,3
;
]]>
0 THEN rh.cti_to_date(F4DC9A, F4DC9M, F4DC9J) ELSE now() END)::date - rh.cti_to_date(F4DC1A, F4DC1M, F4DC1J) + 1 AS duree -- Pour ancienneté iCTI.
FROM prod_shs.rhlib_F4P01 F4P01
JOIN w_etablissements_select ON XXCENT = F4CENT AND XXCETS = F4CETS
JOIN (select valeur = '0' as calcul_shs from rh.t_divers where code = 'SHS_ANCIENNETE' LIMIT 1) as shs_anciennete ON 1=1
LEFT JOIN prod_shs.rhlib_g0p01 ON 1=1
AND F4CENT = G0CENT
AND F4CETS = G0CETS
AND F4SANA = G0SANA
;
-- Services multi etablissements ?
UPDATE w_F4P01
SET F4SRVC_profil = in_code_original
FROM w_cti_services
WHERE F4CENT = XXCENT AND
F4CETS = XXCETS AND
F4SRVC = XXCODO AND
F4SRVC_profil <> in_code_original
;
-- Qualifications multi etablissements ?
UPDATE w_F4P01
SET F4CQUA_profil = in_code_original
FROM w_cti_qualifications
WHERE F4CENT = XXCENT AND
F4CETS = XXCETS AND
F4CQUA = XXCODO AND
F4CQUA_profil <> in_code_original
;
-- Catégories multi etablissements ?
UPDATE w_F4P01
SET F4CCSP_profil = in_code_original
FROM w_cti_categories
WHERE F4CENT = XXCENT AND
F4CETS = XXCETS AND
F4CCSP = XXCODO AND
F4CCSP_profil <> in_code_original
;
-- Statuts différents par établissement ?
UPDATE w_F4P01
SET F4CSTT_profil = in_code_original
FROM w_cti_statuts
WHERE F4CENT = XXCENT AND
F4CETS = XXCETS AND
F4CSTT = XXCODE AND
F4CSTT_profil <> in_code_original
;
-- spéfialités différents par établissement ?
UPDATE w_F4P01
SET F4SPEC_profil = in_code_original
FROM w_cti_specialites
WHERE F4CENT = XXCENT AND
F4CETS = XXCETS AND
F4SPEC = XXCODE AND
F4SPEC_profil <> in_code_original
;
-- Codes emploi différents par établissement ?
UPDATE w_F4P01
SET F4CEMP_profil = in_code_original
FROM w_cti_codes_emploi
WHERE F4CENT = XXCENT AND
F4CETS = XXCETS AND
F4CEMP = XXCODE AND
F4CEMP_profil <> in_code_original
;
-- Groupes cotisant différents par établissement ?
UPDATE w_F4P01
SET F4GCOT_profil = in_code_original
FROM w_cti_groupes_cotisant
WHERE F4CENT = XXCENT AND
F4CETS = XXCETS AND
F4GCOT = XXCODE AND
F4GCOT_profil <> in_code_original
;
-- Sections analytiques différents par établissement ?
UPDATE w_F4P01
SET F4SANA_profil = in_code_original
FROM w_cti_sections_analytiques_paie
WHERE F4CENT = XXCENT AND
F4CETS = XXCETS AND
F4SANA = XXCODE AND
F4SANA_profil <> in_code_original
;
CREATE INDEX w_F4P01_i1 ON w_F4P01 USING btree(F4CMAT)
;
-- Contrats fictifs
DELETE FROM w_F4P01
USING
(
SELECT w_F4P01.ctid
FROM w_F4P01
LEFT JOIN prod_shs.rhlibH_J0P01 ON
F4CENT = J0CENT AND
F4CETS = J0CETS AND
F4CMAT = J0CMAT AND
F4NCNT = J0NCNT
WHERE F4SUSP = '9' AND
J0CMAT IS NULL
) SUBVIEW
WHERE w_F4P01.ctid = subview.ctid
;
UPDATE w_F4P01
SET
F4DC1A = F3DE1A,
F4DC1M = F3DE1M,
F4DC1J = F3DE1J
FROM prod_shs.rhlib_F3P01
JOIN w_entreprises_select ON XXCENT = F3CENT
WHERE 1=1
AND F4CENT = F3CENT
AND F4CMAT = F3CMAT
AND F4DC1A = 0
AND F4DC1M = 0
AND F4DC1J = 0
;
-- Correction etablissement dans lignes de paie (contrat avec autre etablissement dans f4p01)
DROP TABLE IF EXISTS wh_J0P01
;
CREATE TEMP TABLE wh_J0P01 AS
SELECT *,
to_char(J0CENT,'FM000') || to_char(J0CETS,'FM000') || J0CMAT::text || to_char(J0NCNT,'FM0000') || to_char(J0DFPA,'FM0000') || to_char(J0DFPM,'FM00') AS J0SMKEY
FROM prod_shs.rhlibH_J0P01
JOIN w_etablissements_select ON XXCENT = J0CENT AND XXCETS = J0CETS
WHERE J0DFPA >= to_char(rhp('rhprovider_start')::date, 'YYYY')
;
CREATE INDEX wh_J0P01_i1 ON wh_J0P01 USING btree(J0CMAT)
;
CREATE INDEX wh_J0P01_i2 ON wh_J0P01 USING btree(J0CRUB)
;
CREATE INDEX wh_J0P01_i3 ON wh_J0P01 USING btree(J0NORG)
;
CREATE INDEX wh_J0P01_i4 ON wh_J0P01 USING btree(J0SMKEY)
;
DROP TABLE IF EXISTS w_J0P01_pbcnt
;
CREATE TEMP TABLE w_J0P01_pbcnt AS
SELECT
F4P01.F4CENT,
F4P01.F4CMAT,
F4P01.F4NCNT,
min(F4P01.F4CETS) AS F4CETS
FROM wh_J0P01
JOIN prod_shs.rhlib_F4P01 F4P01 ON 1=1
AND J0CENT = F4P01.F4CENT
AND J0CMAT = F4P01.F4CMAT
AND J0NCNT = F4P01.F4NCNT
LEFT JOIN prod_shs.rhlib_F4P01 F4P01_2 ON 1=1
AND J0CENT = F4P01_2.F4CENT
AND J0CETS = F4P01_2.F4CETS
AND J0CMAT = F4P01_2.F4CMAT
AND J0NCNT = F4P01_2.F4NCNT
WHERE 1=1
AND F4P01_2.F4CMAT IS NULL
GROUP BY 1,2,3
;
UPDATE wh_J0P01
SET J0CETS = F4CETS,
J0SMKEY = to_char(J0CENT,'FM000') || to_char(F4CETS,'FM000') || J0CMAT::text || to_char(J0NCNT,'FM0000') || to_char(J0DFPA,'FM0000') || to_char(J0DFPM,'FM00')
FROM w_J0P01_pbcnt
WHERE 1=1
AND J0CENT = F4CENT -- entreprise
AND J0CMAT = F4CMAT -- matricule
AND J0NCNT = F4NCNT -- contrat
;
-- #specifique Spécifiques Les Cèdres 984 (on renseigne dans nombre le nombre d'heures à inscrire dans le champ d'HP base).
with coeff as (
select
t_rubriques.code_original,
t_rubriques.coefficient_nombre
from rh.t_listes
join rh.t_listes_contenu on t_listes_contenu.liste_id = t_listes.oid
join rh.t_rubriques on t_rubriques.oid = t_listes_contenu.to_id
where t_listes.code = 'CED_FORFAITS')
UPDATE wh_J0P01 SET
J0BASE = coefficient_nombre
FROM coeff
WHERE 1=1
AND current_database() = 'icti_984'
AND J0CRUB = coeff.code_original
;
-- #specifique global I et P à 0.00 : on prend depuis les rubriques d'heures contrat.
with rub_hcnt as (
select
t_rubriques.code_original
from rh.t_listes
join rh.t_listes_contenu on t_listes_contenu.liste_id = t_listes.oid
join rh.t_rubriques on t_rubriques.oid = t_listes_contenu.to_id
where t_listes.code = 'CTI_HCNT'
)
,hcnt as (
select
J0CENT,
J0CETS,
J0CMAT,
J0NCNT,
max(J0BASE) as J0BASE
FROM wh_J0P01
join rub_hcnt on rub_hcnt.code_original = wh_J0P01.J0CRUB
where current_database() in ('icti_984', 'icti_971')
group by 1,2,3,4)
UPDATE w_F4P01 SET
F4NHRE = J0BASE
FROM hcnt
where 1=1
and current_database() in ('icti_984', 'icti_971')
AND J0CENT = F4CENT
AND J0CETS = F4CETS
AND J0CMAT = F4CMAT
AND J0NCNT = F4NCNT
and F4CTPS in ('I', 'P')
and F4NHRE = 0
;
-- #specifique 984 par matricule.
UPDATE w_F4P01 SET
F4NHRE = 151.67
WHERE 1=1
AND current_database() = 'icti_984'
AND f4cmat = '2398G'
;
UPDATE w_F4P01 SET
F4NHRE = 113.75
WHERE 1=1
AND current_database() = 'icti_984'
AND f4cmat = '1215W'
;
UPDATE wh_J0P01 SET
J0BASE = 113.75
WHERE 1=1
AND current_database() = 'icti_984'
AND J0CMAT = '1215W'
AND J0CRUB = '1072'
;
UPDATE wh_J0P01 SET
J0BASE = 27.30
WHERE 1=1
AND current_database() = 'icti_984'
AND J0CMAT = '2299Z'
AND J0CRUB = '1072'
;
UPDATE wh_J0P01 SET
J0BASE = 75.84
WHERE 1=1
AND current_database() = 'icti_984'
AND J0CMAT = '1192W'
AND J0CRUB = '1070'
;
-- #specifique Spécifiques Archette 162 (on renseigne dans nombre le nombre d'heures à inscrire dans le champ d'HP base).
UPDATE wh_J0P01 SET
J0BASE = 151.67
WHERE 1=1
AND current_database() = 'icti_162'
AND J0CRUB = '1011'
;
UPDATE wh_J0P01 SET
J0BASE = 60.7
WHERE 1=1
AND current_database() = 'icti_162'
AND J0CRUB = '1015'
;
-- #specifique INKERMANN : on prend depuis les heures forfait depuis les rubriques les rubriques d'heures contrat.
with id as ( -- idenfication des bulletins avec rubrique 1070.
select J0SMKEY
from wh_J0P01
where true
AND current_database() = 'icti_848'
and J0CRUB = '1070'),
valeur as ( -- Récupération de la base de la 0099 à intégrer dans celle de la 1070.
select
wh_J0P01.J0BASE,
wh_J0P01.J0SMKEY
from wh_J0P01
join id on id.J0SMKEY = wh_J0P01.J0SMKEY
where true
AND current_database() = 'icti_848'
and J0CRUB = '0099')
UPDATE wh_J0P01 SET
J0BASE = valeur.J0BASE
FROM valeur
WHERE 1=1
AND current_database() = 'icti_848'
AND wh_J0P01.J0CRUB = '1070' -- Rubrique de forfait dont la base n'est pas alimentée en heures.
AND wh_J0P01.J0SMKEY = valeur.J0SMKEY
;
-- Màj des types de temps de travail
DROP TABLE IF EXISTS w_shs_types_temps_travail
;
CREATE TEMP TABLE w_shs_types_temps_travail AS
SELECT
XXCENT,
XXCETS,
coalesce(subq.code, N0CENR) AS XXCODO,
coalesce(subq.code, N0CENR) AS XXCODE,
MAX(N0LIBE)||coalesce(subq.libelle, ''::text) AS XXTEXT
FROM prod_shs.rhlib_n0P01
JOIN w_etablissements_select ON 1=1
LEFT JOIN (select
F4CTPS,
case when F4CTPS IN ('I', 'P') then F4CTPS||trim(to_char(F4NHRE, '000.00')) else F4CTPS end as code,
' ' || F4NHRE::text as libelle,
F4CENT,
F4CETS
from w_F4P01
JOIN w_etablissements_select ON 1=1
AND XXCENT = F4CENT
AND XXCETS = F4CETS
WHERE F4CTPS IN ('I', 'P')
group by 1,2,3,4,5) as subq on 1=1
AND subq.F4CTPS = N0CENR
AND subq.F4CENT = XXCENT
AND subq.F4CETS = XXCETS
WHERE 1=1
AND N0CTAB = 'TTPS'
AND N0TYPE = '2'
GROUP BY 1,2,3,4, subq.libelle
;
SELECT rh.cti_shs_multicode('w_shs_types_temps_travail', 'w_cti_types_temps_travail')
;
INSERT INTO rh.t_types_temps_travail(code, texte, texte_court, code_original)
SELECT
MAX(in_code),
MAX(in_texte),
MAX(in_texte),
in_code_original
FROM w_cti_types_temps_travail
LEFT JOIN rh.t_types_temps_travail ON (code_original = in_code_original)
WHERE code_original IS NULL
GROUP BY 4
;
UPDATE rh.t_types_temps_travail SET
code = in_code,
texte = in_texte,
texte_court = in_texte
FROM w_cti_types_temps_travail
WHERE 1=1
AND in_code_original = code_original
AND (1!=1
OR code IS DISTINCT FROM in_code
OR texte IS DISTINCT FROM in_texte
OR texte_court IS DISTINCT FROM in_texte)
;
TRUNCATE rh.p_profils
;
ALTER SEQUENCE rh.s_profils RESTART WITH 1
;
INSERT INTO rh.p_profils(
type_contrat_code_original,
type_horaire_code_original,
motif_debut_code_original,
motif_fin_code_original,
qualification_code_original,
service_code_original,
specialite_code_original,
type_temps_travail_code_original,
categorie_socio_professionnelle_code_original,
statut_code_original,
code_emploi_code_original,
societe_interim_code_original,
section_analytique_paie_code_original,
section_analytique_code_original,
grille_code_original,
grille_groupe_code_original,
groupe_cotisant_code_original
)
SELECT
F4TCNT AS type_contrat_code_original,
F4CTJN AS type_horaire_code_original,
F4MOTD AS motif_debut_code_original,
F4MOTF AS motif_fin_code_original,
F4CQUA_profil AS qualification_code_original,
F4SRVC_profil AS service_code_original,
F4SPEC_profil AS specialite_code_original,
F4CTTT AS type_temps_travail_code_original,
F4CCSP_profil AS categorie_socio_professionnelle_code_original,
F4CSTT_profil AS statut_code_original,
F4CEMP_profil AS code_emploi_code_original,
F4CSOC AS societe_interim_code_original,
F4SANA_profil AS section_analytique_paie_code_original,
F4SCPA AS section_analytique_code_original,
F4GRIE AS grille_code_original,
F4GRPE AS grille_groupe_code_original,
F4GCOT_profil AS groupe_cotisant_code_original
FROM w_F4P01
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
;
DROP TABLE IF EXISTS w_J0P01_0
;
CREATE TEMP TABLE w_J0P01_0 AS
SELECT
J0SMKEY AS J0SMKEY_0,
J0CENT AS J0CENT_0,
J0CETS AS J0CETS_0,
J0CMAT AS J0CMAT_0,
to_char(J0CENT,'FM000')|| J0CMAT AS salarie_code_original,
J0NCNT AS J0NCNT_0,
F4CMATNCNT AS J0CMATNCNT_0,
w_F4P01.code_original AS contrat_code_original,
J0DFPA AS J0DFPA_0,
J0DFPM AS J0DFPM_0,
J0DFPA * 100 + J0DFPM AS mois_paie,
rh.cti_to_date(J0DFPA, J0DFPM, 1::numeric) + interval '1 month' - interval '1 day' AS date_paie,
F4TCNT AS J0TCNT_0,
F4CTJN AS J0CTJN_0,
F4MOTD AS J0MOTD_0,
F4MOTF AS J0MOTF_0,
F4CSOC AS J0CSOC_0,
F4GRIE AS J0GRIE_0,
F4GRPE AS J0GRPE_0,
F4GCOT AS J0GCOT_0,
F4GCOT::text AS J0GCOT_0_profil,
case when F4CTPS IN ('I', 'P') then F4CTPS||trim(to_char(F4NHRE, '000.00')) else F4CTPS end as J0CTTT_0,
CASE WHEN F4CTPS = 'C' THEN 1 ELSE round(F4NHRE / 151.67, 7) END ratio_temps_travail,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0CQUA]))[2] AS J0CQUA_0,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0CQUA]))[2]::text AS J0CQUA_0_profil,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0SRVC]))[2] AS J0SRVC_0,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0SRVC]))[2]::text AS J0SRVC_0_profil,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0SPEC]))[2] AS J0SPEC_0,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0SPEC]))[2]::text AS J0SPEC_0_profil,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0CTPS]))[2] AS J0CTPS_0,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0CCSP]))[2] AS J0CCSP_0,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0CCSP]))[2]::text AS J0CCSP_0_profil,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0CSTT]))[2] AS J0CSTT_0,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0CSTT]))[2]::text AS J0CSTT_0_profil,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0CEMP]))[2] AS J0CEMP_0,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0CEMP]))[2]::text AS J0CEMP_0_profil,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0SANA]))[2] AS J0SANA_0,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),J0SANA]))[2]::text AS J0SANA_0_profil,
''::text AS J0SCPA_0,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),(rh.cti_to_date(J0DA1A, J0DA1M, J0DA1J))::text]))[2]::date AS date_debut,
(MIN(ARRAY[to_char(J0CRUB,'FM0000'),(rh.cti_to_date(J0DA9A, J0DA9M, J0DA9J))::text]))[2]::date AS date_fin,
0::bigint AS salarie_id,
0::bigint AS contrat_id,
0::bigint AS contrat_mois_id,
0::bigint AS profil_id,
'H'::text AS est_historique
FROM wh_J0P01
LEFT JOIN w_F4P01 ON 1=1
AND J0CENT = F4CENT
AND J0CETS = F4CETS
AND J0CMAT = F4CMAT
AND J0NCNT = F4NCNT
WHERE 1=1
AND J0CRUB >= 5
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
;
INSERT INTO w_J0P01_0
SELECT
to_char(F9CENT,'FM000') || to_char(F9CETS,'FM000') || F9CMAT::text || to_char(F9NCNT,'FM0000') || to_char(F1DFPA,'FM0000') || to_char(F1DFPM,'FM00') AS J0SMKEY_0,
F9CENT AS J0CENT_0,
F9CETS AS J0CETS_0,
F9CMAT AS J0CMAT_0,
to_char(F9CENT,'FM000')|| F9CMAT AS salarie_code_original,
F9NCNT AS J0NCNT_0,
F4CMATNCNT AS J0CMATNCNT_0,
w_F4P01.code_original AS contrat_code_original,
F1DFPA AS J0DFPA_0,
F1DFPM AS J0DFPM_0,
F1DFPA * 100 + F1DFPM AS mois_paie,
rh.cti_to_date(F1DFPA, F1DFPM, 1::numeric) + interval '1 month' - interval '1 day' AS date_paie,
F4TCNT AS J0TCNT_0,
F4CTJN AS J0CTJN_0,
F4MOTD AS J0MOTD_0,
F4MOTF AS J0MOTF_0,
F4CSOC AS J0CSOC_0,
F4GRIE AS J0GRIE_0,
F4GRPE AS J0GRPE_0,
F4GCOT AS J0GCOT_0,
F4GCOT AS J0GCOT_0_profil,
case when F4CTPS IN ('I', 'P') then F4CTPS||trim(to_char(F4NHRE, '000.00')) else F4CTPS end as J0CTTT_0,
CASE WHEN F4CTPS = 'C' THEN 1 ELSE round(F4NHRE / 151.67, 7) END ratio_temps_travail,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9CQUA]))[2] AS J0CQUA_0,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9CQUA]))[2] AS J0CQUA_0_profil,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9SRVC]))[2] AS J0SRVC_0,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9SRVC]))[2] AS J0SRVC_0_profil,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9SPEC]))[2] AS J0SPEC_0,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9SPEC]))[2] AS J0SPEC_0_profil,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9CTPS]))[2] AS J0CTPS_0,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9CCSP]))[2] AS J0CCSP_0,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9CCSP]))[2] AS J0CCSP_0_profil,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9CSTT]))[2] AS J0CSTT_0,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9CSTT]))[2] AS J0CSTT_0_profil,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9CEMP]))[2] AS J0CEMP_0,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9CEMP]))[2] AS J0CEMP_0_profil,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9SANA]))[2] AS J0SANA_0,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),F9SANA]))[2] AS J0SANA_0_profil,
''::text AS J0SCPA_0,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),(rh.cti_to_date(F9DA1A, F9DA1M, F9DA1J))::text]))[2]::date AS date_debut,
(MIN(ARRAY[to_char(F9CRUB,'FM0000'),(rh.cti_to_date(F9DA9A, F9DA9M, F9DA9J))::text]))[2]::date AS date_fin,
0::bigint AS salarie_id,
0::bigint AS contrat_id,
0::bigint AS contrat_mois_id,
0::bigint AS profil_id,
''::text AS est_historique
FROM prod_shs.rhlib_F9P01
JOIN w_etablissements_select ON XXCENT = F9CENT AND XXCETS = F9CETS
JOIN prod_shs.rhlib_F1P01 ON 1=1
AND F9CENT = F1CENT
AND F9CETS = F1CETS
LEFT JOIN w_F4P01 ON 1=1
AND F9CENT = F4CENT
AND F9CETS = F4CETS
AND F9CMAT = F4CMAT
AND F9NCNT = F4NCNT
WHERE 1=1
AND F9CRUB >= 5
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
;
CREATE INDEX w_J0P01_0_i1 ON w_J0P01_0 USING btree (J0CMAT_0)
;
CREATE INDEX w_J0P01_0_i2 ON w_J0P01_0 USING btree (salarie_code_original)
;
CREATE INDEX w_J0P01_0_i3 ON w_J0P01_0 USING btree (J0SMKEY_0)
;
UPDATE w_J0P01_0
SET
salarie_id = p_salaries.oid
FROM rh.p_salaries
WHERE salarie_code_original = p_salaries.code_original
;
UPDATE w_J0P01_0
SET J0SCPA_0 = G0SCPA
FROM prod_shs.rhlib_g0p01
WHERE 1=1
AND J0CENT_0 = G0CENT
AND J0CETS_0 = G0CETS
AND J0SANA_0 = G0SANA
;
-- Services multi etablissements ?
UPDATE w_J0P01_0
SET J0SRVC_0_profil = in_code_original
FROM w_cti_services
WHERE J0CENT_0 = XXCENT AND
J0CETS_0 = XXCETS AND
J0SRVC_0 = XXCODO AND
J0SRVC_0_profil <> in_code_original
;
-- Qualifications multi etablissements ?
UPDATE w_J0P01_0
SET J0CQUA_0_profil = in_code_original
FROM w_cti_qualifications
WHERE J0CENT_0 = XXCENT AND
J0CETS_0 = XXCETS AND
J0CQUA_0 = XXCODO AND
J0CQUA_0_profil <> in_code_original
;
-- Catégories multi etablissements ?
UPDATE w_J0P01_0
SET J0CCSP_0_profil = in_code_original
FROM w_cti_categories
WHERE J0CENT_0 = XXCENT AND
J0CETS_0 = XXCETS AND
J0CCSP_0 = XXCODO AND
J0CCSP_0_profil <> in_code_original
;
-- Statuts différents par établissement ?
UPDATE w_J0P01_0
SET J0CSTT_0_profil = in_code_original
FROM w_cti_statuts
WHERE J0CENT_0 = XXCENT AND
J0CETS_0 = XXCETS AND
J0CSTT_0 = XXCODE AND
J0CSTT_0_profil <> in_code_original
;
-- Spécialités différents par établissement ?
UPDATE w_J0P01_0
SET J0SPEC_0_profil = in_code_original
FROM w_cti_specialites
WHERE J0CENT_0 = XXCENT AND
J0CETS_0 = XXCETS AND
J0SPEC_0 = XXCODE AND
J0SPEC_0_profil <> in_code_original
;
-- Codes emplois différents par établissement ?
UPDATE w_J0P01_0
SET J0CEMP_0_profil = in_code_original
FROM w_cti_codes_emploi
WHERE J0CENT_0 = XXCENT AND
J0CETS_0 = XXCETS AND
J0CEMP_0 = XXCODE AND
J0CEMP_0_profil <> in_code_original
;
-- Groupes cotisants différents par établissement ?
UPDATE w_J0P01_0
SET J0GCOT_0_profil = in_code_original
FROM w_cti_groupes_cotisant
WHERE J0CENT_0 = XXCENT AND
J0CETS_0 = XXCETS AND
J0GCOT_0 = XXCODE AND
J0GCOT_0_profil <> in_code_original
;
-- Sections analytiques différents par établissement ?
UPDATE w_J0P01_0
SET J0SANA_0_profil = in_code_original
FROM w_cti_sections_analytiques_paie
WHERE J0CENT_0 = XXCENT AND
J0CETS_0 = XXCETS AND
J0SANA_0 = XXCODE AND
J0SANA_0_profil <> in_code_original
;
INSERT INTO rh.p_profils(
type_contrat_code_original,
type_horaire_code_original,
motif_debut_code_original,
motif_fin_code_original,
qualification_code_original,
service_code_original,
specialite_code_original,
type_temps_travail_code_original,
categorie_socio_professionnelle_code_original,
statut_code_original,
code_emploi_code_original,
societe_interim_code_original,
section_analytique_paie_code_original,
section_analytique_code_original,
grille_code_original,
grille_groupe_code_original,
groupe_cotisant_code_original
)
SELECT
J0TCNT_0 AS type_contrat_code_original,
J0CTJN_0 AS type_horaire_code_original,
J0MOTD_0 AS motif_debut_code_original,
J0MOTF_0 AS motif_fin_code_original,
J0CQUA_0_profil AS qualification_code_original,
J0SRVC_0_profil AS service_code_original,
J0SPEC_0_profil AS specialite_code_original,
J0CTTT_0 AS type_temps_travail_code_original,
J0CCSP_0_profil AS categorie_socio_professionnelle_code_original,
J0CSTT_0_profil AS statut_code_original,
J0CEMP_0_profil AS code_emploi_code_original,
J0CSOC_0 AS societe_interim_code_original,
J0SANA_0_profil AS section_analytique_paie_code_original,
J0SCPA_0 AS section_analytique_code_original,
J0GRIE_0 AS grille_code_original,
J0GRPE_0 AS grille_groupe_code_original,
J0GCOT_0_profil AS groupe_cotisant_code_original
FROM w_J0P01_0
LEFT JOIN rh.p_profils ON 1=1
AND J0TCNT_0 = type_contrat_code_original
AND J0CTJN_0 = type_horaire_code_original
AND J0MOTD_0 = motif_debut_code_original
AND J0MOTF_0 = motif_fin_code_original
AND J0CQUA_0_profil = qualification_code_original
AND J0SRVC_0_profil = service_code_original
AND J0SPEC_0_profil = specialite_code_original
AND J0CTTT_0 = type_temps_travail_code_original
AND J0CCSP_0_profil = categorie_socio_professionnelle_code_original
AND J0CSTT_0_profil = statut_code_original
AND J0CEMP_0_profil = code_emploi_code_original
AND J0CSOC_0 = societe_interim_code_original
AND J0SANA_0_profil = section_analytique_paie_code_original
AND J0SCPA_0 = section_analytique_code_original
AND J0GRIE_0 = grille_code_original
AND J0GRPE_0 = grille_groupe_code_original
AND J0GCOT_0_profil = groupe_cotisant_code_original
WHERE p_profils.oid IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
;
UPDATE w_J0P01_0
SET profil_id = p_profils.oid
FROM rh.p_profils
WHERE 1=1
AND J0TCNT_0 = type_contrat_code_original
AND J0CTJN_0 = type_horaire_code_original
AND j0MOTD_0 = motif_debut_code_original
AND j0MOTF_0 = motif_fin_code_original
AND J0CQUA_0_profil = qualification_code_original
AND J0SRVC_0_profil = service_code_original
AND J0SPEC_0_profil = specialite_code_original
AND J0CTTT_0 = type_temps_travail_code_original
AND J0CCSP_0_profil = categorie_socio_professionnelle_code_original
AND J0CSTT_0_profil = statut_code_original
AND J0CEMP_0_profil = code_emploi_code_original
AND J0CSOC_0 = societe_interim_code_original
AND J0SANA_0_profil = section_analytique_paie_code_original
AND J0SCPA_0 = section_analytique_code_original
AND J0GRIE_0 = grille_code_original
AND J0GRPE_0 = grille_groupe_code_original
AND J0GCOT_0_profil = groupe_cotisant_code_original
;
]]>
0 THEN rh.cti_to_date(F4DC9A, F4DC9M, F4DC9J) ELSE '20991231' END AS date_fin,
F4CMATNCNT AS numero_contrat,
COALESCE(t_etablissements.oid,0) AS etablissement_id,
p_profils.oid AS profil_id,
-- Dans le cas où SHS_ANCIENNETE est à 0 (calcul SHS), F4MAXX et F4JMAXX sont bien renseignés.
-- Sinon ils sont à -1 ce qui signifie qu'anciennete_anterieure_mois/jours seront toujours à 0.
-- Et cela ne permturbera pas le mode de calcul iCTI lors de la ventilation par mois des contrats.
CASE WHEN F4MAXX/12 BETWEEN 0 AND 50 THEN F4MAXX ELSE 0 END AS anciennete_anterieure_mois,
CASE WHEN F4MAXX/12 BETWEEN 0 AND 50 THEN F4JAXX ELSE 0 END AS anciennete_anterieure_jours
FROM w_F4P01
JOIN rh.t_etablissements ON lpad(F4CENT, 3, '0')||lpad(F4CETS, 3, '0') = t_etablissements.code_original
JOIN rh.p_salaries ON w_F4P01.salarie_code_original = p_salaries.code_original
JOIN rh.p_profils ON 1=1
AND F4TCNT = type_contrat_code_original
AND F4CTJN = type_horaire_code_original
AND F4MOTD = motif_debut_code_original
AND F4MOTF = motif_fin_code_original
AND F4CQUA_profil = qualification_code_original
AND F4SRVC_profil = service_code_original
AND F4SPEC_profil = specialite_code_original
AND F4CTTT = type_temps_travail_code_original
AND F4CCSP_profil = categorie_socio_professionnelle_code_original
AND F4CSTT_profil = statut_code_original
AND F4CEMP_profil = code_emploi_code_original
AND F4CSOC = societe_interim_code_original
AND F4SANA_profil = section_analytique_paie_code_original
AND F4SCPA = section_analytique_code_original
AND F4GRIE = grille_code_original
AND F4GRPE = grille_groupe_code_original
AND F4GCOT_profil = groupe_cotisant_code_original
LEFT JOIN rh.p_contrats ON w_F4P01.code_original = p_contrats.code_original
WHERE p_contrats.oid IS NULL
;
-- #correction Correction de l'ancienneté SHS antérieure.
UPDATE rh.p_contrats SET
anciennete_anterieure_mois = 0,
anciennete_anterieure_jours = 0
FROM rh.p_salaries
WHERE 1=1
AND salarie_id = p_salaries.oid
AND ((p_contrats.date_debut - date_naissance) / 30) - anciennete_anterieure_mois < 150
;
-- #correction @todo : à mettre soit dans un t_divers + expert.
-- Si les dates d'entrée/sortie d'établissement semblent incohérentes par rapports aux dates des contrats, les corriger.
UPDATE rh.p_salaries
SET date_entree_ets = date_debut_contrat
FROM (SELECT salarie_id, min(date_debut) AS date_debut_contrat from rh.p_contrats group by 1) AS s
WHERE 1=1
AND p_salaries.oid = s.salarie_id
AND date_entree_ets > date_debut_contrat
;
-- #correction @todo : à mettre soit dans un t_divers + expert.
UPDATE rh.p_salaries
SET date_entree_ets = date_debut_contrat
FROM (SELECT salarie_id, min(date_debut) AS date_debut_contrat from rh.p_contrats group by 1) AS s
WHERE 1=1
AND p_salaries.oid = s.salarie_id
AND to_char(date_entree_ets, 'YYYY')::numeric >= 2009
AND date_entree_ets < date_debut_contrat
;
-- #correction @todo : à mettre soit dans un t_divers + expert.
UPDATE rh.p_salaries
SET date_sortie_ets = date_fin_contrat
FROM (SELECT salarie_id, max(date_fin) AS date_fin_contrat from rh.p_contrats group by 1) AS s
WHERE 1=1
AND p_salaries.oid = s.salarie_id
AND date_fin_contrat > date_sortie_ets
;
UPDATE rh.p_salaries
SET date_entree_ets = s.date_debut_contrat
FROM (SELECT salarie_id, min(date_debut) AS date_debut_contrat from rh.p_contrats group by 1) AS s
WHERE 1=1
AND (select valeur = '1' from rh.t_divers where code = 'CORRECTION_DE_ETS' LIMIT 1)
AND p_salaries.oid = s.salarie_id
AND p_salaries.date_entree_ets != s.date_debut_contrat
AND date_entree_ets = '1900-01-01'::date -- uniquement pour les salariés où la date n'est pas renseignée.
;
UPDATE rh.p_salaries
SET date_sortie_ets = s.date_fin_contrat
FROM (SELECT salarie_id, max(date_fin) AS date_fin_contrat from rh.p_contrats group by 1) AS s
WHERE 1=1
AND (select valeur = '1' from rh.t_divers where code = 'CORRECTION_DS_ETS' LIMIT 1)
AND p_salaries.oid = s.salarie_id
AND p_salaries.date_sortie_ets != s.date_fin_contrat
AND p_salaries.date_sortie_ets = '2099-12-31'::date -- uniquement pour les salariés où la date n'est pas renseignée.
;
-- Màj des salariés.
UPDATE rh.p_salaries
SET
date_debut = subview.date_debut,
date_fin = subview.date_fin,
profil_id = subview.profil_id
FROM
(
SELECT salarie_id,
MIN(date_debut) AS date_debut,
MAX(date_fin) AS date_fin,
((base.cti_last(ARRAY[p_contrats.date_fin::text, p_contrats.profil_id::text]))[2])::bigint As profil_id
FROM rh.p_contrats
GROUP BY salarie_id
) AS subview
WHERE 1=1
AND p_salaries.oid = subview.salarie_id
AND (1!=1
OR p_salaries.date_debut IS DISTINCT FROM subview.date_debut
OR p_salaries.date_fin IS DISTINCT FROM subview.date_fin
OR p_salaries.profil_id IS DISTINCT FROM subview.profil_id
)
;
-- Calcul ancienneté SHS.
-- Pas la peine d'alimenter comme dans les autres cas (SHS_ANCIENNETE à 1 ou 2) les 2 champs
-- anciennete_anterieure_jours et anciennete_anterieure_mois car ils sont déjà bien alimentés
-- dans le INSERT INTO rh.p_contrats plus haut.
UPDATE rh.p_contrats SET
anciennete_anterieure_calculee_mois = COALESCE((
SELECT floor(SUM(p_contrats_anterieurs.date_fin - p_contrats_anterieurs.date_debut + 1) / 30)
FROM rh.p_contrats p_contrats_anterieurs
WHERE p_contrats_anterieurs.salarie_id = p_contrats.salarie_id AND p_contrats_anterieurs.date_fin < p_contrats.date_debut
), 0),
anciennete_anterieure_calculee_jours = COALESCE((
SELECT floor(SUM(p_contrats_anterieurs.date_fin - p_contrats_anterieurs.date_debut + 1))
FROM rh.p_contrats p_contrats_anterieurs
WHERE p_contrats_anterieurs.salarie_id = p_contrats.salarie_id AND p_contrats_anterieurs.date_fin < p_contrats.date_debut
), 0)
WHERE (select valeur = '0' from rh.t_divers where code = 'SHS_ANCIENNETE' LIMIT 1)
;
-- Calcul ancienneté iCTI (au début de contrat).
UPDATE rh.p_contrats SET
anciennete_anterieure_jours = subq.anciennete_jours,
anciennete_anterieure_calculee_jours = subq.anciennete_jours,
anciennete_anterieure_mois = subq.anciennete_mois,
anciennete_anterieure_calculee_mois = subq.anciennete_mois
FROM (
SELECT
t1.code_original,
sum(t2.duree) AS anciennete_jours,
sum(t2.duree) / 30 AS anciennete_mois
FROM w_F4P01 AS t1
JOIN w_F4P01 AS t2 ON 1=1
AND t2.f4cent = t1.f4cent
AND t2.f4cmat = t1.f4cmat
AND t2.f4ncnt < t1.f4ncnt
group by 1
) AS subq
WHERE 1=1
AND p_contrats.code_original = subq.code_original
AND anciennete_anterieure_calculee_jours != subq.anciennete_jours
AND (select valeur = '1' from rh.t_divers where code = 'SHS_ANCIENNETE' LIMIT 1)
;
-- Calcul ancienneté iCTI (par rapport à date de début d'entrée ets. SHS sans prendre en compte les contrats).
with anciennete_2 as (
select
p_contrats.oid as contrat_id,
greatest(coalesce(p_contrats.date_debut - p_salaries.date_anciennete, 0), 0) as anciennete_jours,
greatest(round(coalesce(p_contrats.date_debut - p_salaries.date_anciennete, 0) / 30.0), 0) as anciennete_mois
from rh.p_contrats
join rh.p_salaries on p_salaries.oid = p_contrats.salarie_id)
UPDATE rh.p_contrats SET
anciennete_anterieure_jours = anciennete_2.anciennete_jours,
anciennete_anterieure_calculee_jours = anciennete_2.anciennete_jours,
anciennete_anterieure_mois = anciennete_2.anciennete_mois,
anciennete_anterieure_calculee_mois = anciennete_2.anciennete_mois
FROM anciennete_2
WHERE 1=1
AND p_contrats.oid = anciennete_2.contrat_id
AND anciennete_anterieure_calculee_jours != anciennete_2.anciennete_jours
AND (select valeur = '2' from rh.t_divers where code = 'SHS_ANCIENNETE' LIMIT 1)
;
TRUNCATE rh.p_contrats_mois
;
ALTER SEQUENCE rh.s_contrats_mois RESTART WITH 1
;
INSERT INTO rh.p_contrats_mois(
salarie_id,
contrat_id,
mois_activite,
date_debut,
date_fin,
nombre_entrees,
nombre_departs,
nombre_debut_contrat,
nombre_fin_contrat,
est_hors_periode,
present_debut_mois,
present_fin_mois,
equivalent_temps_plein,
nombre_heures,
ratio_temps_travail,
age_id,
age_jours,
anciennete_jours,
anciennete_mois,
anciennete_annee_id
)
SELECT
p_salaries.oid AS salarie_id,
p_contrats.oid AS contrat_id,
p_calendrier_mois.mois AS mois,
GREATEST(p_calendrier_mois.date_debut, p_contrats.date_debut) AS date_debut,
LEAST(p_calendrier_mois.date_fin, p_contrats.date_fin) AS date_fin,
CASE WHEN p_salaries.date_entree_ets BETWEEN p_calendrier_mois.date_debut AND p_calendrier_mois.date_fin THEN 1 ELSE 0 END AS nombre_entrees,
CASE WHEN p_salaries.date_sortie_ets BETWEEN p_calendrier_mois.date_debut AND p_calendrier_mois.date_fin THEN 1 ELSE 0 END AS nombre_departs,
CASE WHEN p_contrats.date_debut BETWEEN p_calendrier_mois.date_debut AND p_calendrier_mois.date_fin THEN 1 ELSE 0 END AS nombre_debut_contrat,
CASE WHEN p_contrats.date_fin BETWEEN p_calendrier_mois.date_debut AND p_calendrier_mois.date_fin THEN 1 ELSE 0 END AS nombre_fin_contrat,
'0' AS est_hors_periode,
CASE WHEN p_calendrier_mois.date_debut BETWEEN p_contrats.date_debut AND p_contrats.date_fin THEN 1 ELSE 0 END AS present_debut_mois,
CASE WHEN p_calendrier_mois.date_fin BETWEEN p_contrats.date_debut AND p_contrats.date_fin THEN 1 ELSE 0 END AS present_fin_mois,
CASE WHEN F4CTPS = 'C' THEN 1 ELSE round(F4NHRE / 151.67,7) END AS equivalent_temps_plein, -- FIXME Prendre depuis la rubrique 1000
CASE WHEN F4CTPS = 'C' THEN 151.67 ELSE F4NHRE END as nombre_heures, -- FIXME prendre depuis la rubrique 1000
CASE WHEN F4CTPS = 'C' THEN 1 ELSE round(F4NHRE / 151.67,7) END ratio_temps_travail,
base.cti_age(LEAST(p_calendrier_mois.date_fin, p_contrats.date_fin), p_salaries.date_naissance, 'ny') AS age_id,
LEAST(p_calendrier_mois.date_fin, p_contrats.date_fin)::date - p_salaries.date_naissance AS age_jours,
(least(p_calendrier_mois.date_fin, p_contrats.date_fin) - p_contrats.date_debut)
+ greatest(p_contrats.anciennete_anterieure_jours, p_contrats.anciennete_anterieure_calculee_jours)
+ 1
AS anciennete_jours,
base.cti_months_between(p_contrats.date_debut, p_calendrier_mois.date_fin)
+ greatest(p_contrats.anciennete_anterieure_mois, p_contrats.anciennete_anterieure_calculee_mois)
AS anciennete_mois,
floor(
(
base.cti_months_between(p_contrats.date_debut, p_calendrier_mois.date_fin)
+ greatest(p_contrats.anciennete_anterieure_mois, p_contrats.anciennete_anterieure_calculee_mois)
) / 12
) AS anciennete_annee_id
FROM rh.p_contrats
JOIN rh.p_salaries ON (p_contrats.salarie_id = p_salaries.oid)
JOIN rh.t_etablissements ON p_contrats.etablissement_id = t_etablissements.oid
JOIN rh.t_entreprises ON t_etablissements.entreprise_id = t_entreprises.oid
JOIN w_F4P01 ON 1=1
AND p_contrats.code_original = w_F4P01.code_original
AND lpad(F4CENT, 3, '0') = t_entreprises.code_original
JOIN prod_shs.rhlib_F1P01 ON lpad(F1CENT, 3, '0')||lpad(F1CETS, 3, '0') = t_etablissements.code_original
JOIN base.p_calendrier_mois ON 1=1
AND p_contrats.date_debut <= p_calendrier_mois.date_fin
AND p_contrats.date_fin >= p_calendrier_mois.date_debut
WHERE 1=1
AND p_calendrier_mois.mois >= to_char(rhp('rhprovider_start')::date, 'YYYYMM')
AND p_calendrier_mois.mois <= (F1DFPA * 100 + F1DFPM)
ORDER BY numero_contrat, p_calendrier_mois.mois
;
-- Affection du contrat_id nouvelle créé à la table temp des paies (version contrat _0).
UPDATE w_J0P01_0
SET contrat_id = p_contrats.oid
FROM rh.p_contrats
WHERE contrat_code_original = p_contrats.code_original
;
-- Le n° de contrat a disparu (remplacé par un autre)
UPDATE w_J0P01_0
SET contrat_id = p_contrats.oid
FROM rh.p_salaries
JOIN rh.p_contrats ON p_salaries.oid = p_contrats.salarie_id
WHERE 1=1
AND w_J0P01_0.contrat_id = 0
AND salarie_code_original = p_salaries.code_original
AND w_J0P01_0.date_debut BETWEEN p_contrats.date_debut AND p_contrats.date_fin
;
UPDATE w_J0P01_0
SET contrat_id = p_contrats.oid
FROM rh.p_salaries
JOIN rh.p_contrats ON p_salaries.oid = p_contrats.salarie_id
WHERE 1=1
AND w_J0P01_0.contrat_id = 0
AND salarie_code_original = p_salaries.code_original
AND w_J0P01_0.date_fin BETWEEN p_contrats.date_debut AND p_contrats.date_fin
;
-- Màj du contrat_mois_id.
UPDATE w_J0P01_0
SET contrat_mois_id = p_contrats_mois.oid
FROM rh.p_contrats_mois
WHERE 1=1
AND contrat_mois_id = 0
AND w_J0P01_0.contrat_id = p_contrats_mois.contrat_id
AND mois_paie = p_contrats_mois.mois_activite
;
INSERT INTO rh.p_contrats_mois(
contrat_id,
salarie_id,
mois_activite,
date_debut,
date_fin,
nombre_debut_contrat,
nombre_fin_contrat,
equivalent_temps_plein,
nombre_heures,
ratio_temps_travail,
age_id,
age_jours,
est_hors_periode,
present_fin_mois,
anciennete_jours,
anciennete_mois,
anciennete_annee_id)
SELECT
contrat_id,
p_contrats.salarie_id,
mois_paie AS mois_activite,
GREATEST(w_J0P01_0.date_debut, date(date_trunc('month',w_J0P01_0.date_fin))) AS date_debut,
w_J0P01_0.date_fin,
0 AS nombre_debut_contrat,
0 AS nombre_fin_contrat,
0 AS equivalent_temps_plein,
0 as nombre_heures,
ratio_temps_travail,
base.cti_age(w_J0P01_0.date_fin, p_salaries.date_naissance, 'ny') AS age_id,
w_J0P01_0.date_fin::date - p_salaries.date_naissance AS age_jours,
'1' AS est_hors_periode,
0 AS present_fin_mois,
(w_J0P01_0.date_fin::date - p_contrats.date_debut::date)
+
p_contrats.anciennete_anterieure_jours
+ 1
AS anciennete_jours,
base.cti_age(
date_trunc('month',w_J0P01_0.date_fin)::date,
date_trunc('month',p_contrats.date_debut)::date,
'nm'
)
+
GREATEST(
p_contrats.anciennete_anterieure_mois,
p_contrats.anciennete_anterieure_calculee_mois
) + 1
AS anciennete_mois,
floor((base.cti_age(date_trunc('month',w_J0P01_0.date_fin::date)::date, date_trunc('month',p_contrats.date_debut)::date, 'nm')
+ GREATEST(p_contrats.anciennete_anterieure_mois, p_contrats.anciennete_anterieure_calculee_mois) + 1) / 12) AS anciennete_annee_id
FROM w_J0P01_0
JOIN rh.p_salaries ON w_J0P01_0.salarie_id = p_salaries.oid
JOIN rh.p_contrats ON w_J0P01_0.contrat_id = p_contrats.oid
WHERE contrat_mois_id = 0
;
UPDATE w_J0P01_0
SET contrat_mois_id = p_contrats_mois.oid
FROM rh.p_contrats_mois
WHERE 1=1
AND contrat_mois_id = 0
AND w_J0P01_0.contrat_id = p_contrats_mois.contrat_id
AND mois_paie = p_contrats_mois.mois_activite
;
UPDATE w_J0P01_0
SET contrat_mois_id = p_contrats_mois.oid
FROM rh.p_contrats_mois
WHERE 1=1
AND contrat_mois_id = 0
AND w_J0P01_0.contrat_id = p_contrats_mois.contrat_id
AND mois_paie = p_contrats_mois.mois_activite
;
-- Salariés remplacés
DROP TABLE IF EXISTS w_remplacements
;
CREATE TEMP TABLE w_remplacements AS
SELECT
p_contrats.oid AS contrat_id,
(MIN(Array[to_char(F5NLIG,'FM000'), p_salaries.oid::text]))[2]::bigint AS salarie_remplace_id
FROM rh.p_contrats
JOIN prod_shs.rhlib_F5P01 ON 1=1
AND p_contrats.code_original = to_char(F5CENT,'FM000') || to_char(F5CETS,'FM000') || F5CMAT || '-' || to_char(F5NCNT,'FM000')
AND F5NLIG = 1
JOIN w_etablissements_select ON XXCENT = F5CENT AND XXCETS = F5CETS
JOIN rh.p_salaries ON (to_char(F5CENT,'FM000') || F5AMAT) = p_salaries.code_original
WHERE 1=1
AND F5AMAT IN (
SELECT F4CMAT
FROM prod_shs.rhlib_F4P01
JOIN w_etablissements_select ON XXCENT = F4CENT AND XXCETS = F4CETS
WHERE F4SUSP <> 9 )
GROUP BY 1
;
UPDATE rh.p_contrats
SET salarie_remplace_id = w_remplacements.salarie_remplace_id
FROM w_remplacements
WHERE 1=1
AND p_contrats.oid = w_remplacements.contrat_id
AND p_contrats.salarie_remplace_id IS DISTINCT FROM w_remplacements.salarie_remplace_id
;
UPDATE rh.p_contrats
SET salarie_remplace_id = 0
WHERE 1=1
AND salarie_remplace_id IS DISTINCT FROM 0
AND oid NOT IN (SELECT contrat_id FROM w_remplacements)
;
-- Contrats suspendus
UPDATE rh.p_contrats_mois
SET
est_hors_periode = CASE WHEN subq.present_debut_mois = 0 AND subq.present_fin_mois = 0 THEN 1 ELSE 0 END,
present_debut_mois = subq.present_debut_mois,
present_fin_mois = subq.present_fin_mois
FROM (
SELECT
p_calendrier_mois.mois,
p_contrats.oid AS contrat_id,
CASE WHEN p_calendrier_mois.date_debut >= rh.cti_to_date(f4ddsa,f4ddsm,f4ddsj)::date then 1 else 0 end AS present_debut_mois,
CASE WHEN p_calendrier_mois.date_fin <= rh.cti_to_date(f4dfsa,f4dfsm,f4dfsj)::date then 1 else 0 end AS present_fin_mois
FROM w_F4P01
JOIN rh.p_contrats ON p_contrats.numero_contrat = w_F4P01.code_original
JOIN base.p_calendrier_mois ON base.cti_overlaps(
p_calendrier_mois.date_debut,
p_calendrier_mois.date_fin,
rh.cti_to_date(f4ddsa,f4ddsm,f4ddsj)::date,
rh.cti_to_date(f4dfsa,f4dfsm,f4dfsj)::date)
WHERE 1=1
AND f4susp != 0 -- qui a un motif de suspension renseigné
GROUP BY 1,2,3,4
) AS subq
WHERE 1=1
AND p_contrats_mois.contrat_id = subq.contrat_id
AND p_contrats_mois.mois_activite = subq.mois
;
-- Pour info : trouver l'"effectif inscrit" :
/*
select f4tcnt,count(* )
from prod_shs.piprso226_f4p01
where 1=1
and '2005-11-30'::date between (f4dc1a::text||'-'||f4dc1m::text||'-'||f4dc1j::text)::date and (case when (f4dc9a::text||f4dc9m::text||f4dc9j::text) = '000' then '2099-12-31' else (f4dc9a::text||'-'||f4dc9m::text||'-'||f4dc9j::text) end)::date
and case when f4susp != 0 then ('2005-11-30'::date not between (f4ddsa||'-'||f4ddsm||'-'||f4ddsj)::date and (f4dfsa||'-'||f4dfsm||'-'||f4dfsj)::date) else true end
and f4cets = 0
and f4cent = 0
group by 1
order by 1
-- Correction date depart non saisie selon code sortie et date dernier contrat
UPDATE rh.p_salaries
SET date_sortie_ets = subview.date_sortie_ets
FROM
(
SELECT p_salaries.oid, MAX(p_contrats.date_fin) AS date_sortie_ets
FROM rh.p_salaries
JOIN rh.p_contrats ON p_contrats.salarie_id = p_salaries.oid
JOIN prod_shs.rhlib_F3P01 ON p_salaries.code_original = (to_char(F3CENT,'FM000')||F3CMAT) AND F3CPST = '1'
WHERE date_sortie_ets = '20991231'
GROUP BY 1
) subview
WHERE p_salaries.oid = subview.oid
*/
DROP TABLE IF EXISTS w_departs
;
CREATE TEMP TABLE w_departs AS
SELECT
F3CMAT,
p_salaries.oid AS salarie_id,
(MAX(ARRAY[p_contrats_mois.date_fin::text, p_contrats_mois.oid::text]))[2]::bigint AS oid
FROM rh.p_contrats_mois
JOIN rh.p_contrats ON p_contrats_mois.contrat_id = p_contrats.oid AND nombre_fin_contrat = 1
JOIN rh.p_salaries ON p_contrats.salarie_id = p_salaries.oid
JOIN prod_shs.rhlib_F3P01 ON p_salaries.code_original = (to_char(F3CENT,'FM000')||F3CMAT) AND F3CPST = '1'
JOIN w_entreprises_select ON XXCENT = F3CENT
WHERE 1=1
AND rh.cti_to_date(F3DS9A, F3DS9M, F3DS9J) >= p_contrats_mois.date_fin
GROUP BY 1,2
;
UPDATE rh.p_contrats_mois
SET nombre_departs = 1
FROM w_departs
WHERE p_contrats_mois.oid = w_departs.oid
;
]]>
9000) THEN 0 - j0mont ELSE 0 END AS montant_cotisation_salarie,
CASE WHEN j0chap = '20' THEN j0tpat ELSE 0 END AS taux_cotisation_patronale,
CASE WHEN j0chap = '20' OR t_rubriques.code_calcul = '8' THEN j0mpat ELSE 0 END AS montant_cotisation_patronale,
CASE
WHEN j0chap = '20' AND (j0crub BETWEEN 7000 AND 8999 OR j0crub > 9000) THEN 0 - j0mont
WHEN j0chap = '30' THEN 0 - j0mont
ELSE 0
END AS montant_od_net_salarie,
CASE WHEN t_rubriques.code_calcul = '7' THEN j0mpat ELSE 0 END +
CASE
WHEN j0chap = '10' THEN j0mont
WHEN j0chap = '20' AND (j0crub BETWEEN 4000 AND 6999 OR j0crub > 9000) THEN j0mont
ELSE 0
END AS montant_net_imposable_salarie,
CASE
WHEN j0chap = '10' AND (CASE WHEN rhp('opt_avt_nature') = '1' THEN (J0CRUB NOT BETWEEN 3000 AND 3499) ELSE true END) THEN j0mont
WHEN j0chap = '20' THEN j0mont
WHEN j0chap = '30' THEN j0mont
ELSE 0
END AS montant_net_a_payer_salarie
FROM wh_J0P01 -- Historique de paie des mois clôturés
JOIN w_J0P01_0 ON 1=1
AND wh_J0P01.J0SMKEY = w_J0P01_0.J0SMKEY_0
AND est_historique = 'H'
JOIN w_cti_rubriques ON
J0CENT = w_cti_rubriques.XXCENT AND
J0CETS = w_cti_rubriques.XXCETS AND
J0CRUB = w_cti_rubriques.XXCODO
JOIN rh.t_rubriques ON t_rubriques.code_original = w_cti_rubriques.in_code_original
LEFT JOIN w_cti_organismes_cotisation ON
J0CENT = w_cti_organismes_cotisation.XXCENT AND
J0CETS = w_cti_organismes_cotisation.XXCETS AND
J0NORG = w_cti_organismes_cotisation.XXCODO
WHERE wh_J0P01.j0dfpa >= to_char(rhp('rhprovider_start')::date, 'YYYY')
;
-- La table principale pour les mois non clotures est F9P01 mais il peut aussi y avoir quelques rubriques dans F6P01
-- F6CGEN = '6' et F6MONT > 0 sont des garde-fous
DROP TABLE IF EXISTS w_F69P01; CREATE TEMP TABLE w_F69P01 AS
(
SELECT
F9BASE,
F9CENT,
F9CETS,
F9CHAP,
F9CMAT,
F9CRUB,
F9MONT,
F9MPAT,
F9NCNT,
F9NORG,
F9PRIX,
F9TPAT,
F9CENT::text || F9CETS::text || F9CRUB::text || F9CMAT::text || F9DA1A::text || F9DA1M::text || F9DA9A::text || F9DA9M::text as F9CKEY
FROM
prod_shs.rhlib_F9P01
);
INSERT INTO w_F69P01
SELECT
F6BASE,
F6CENT,
F6CETS,
'10'::text AS F9CHAP,
F6CMAT,
F6CRUB,
F6MONT,
0 AS F9MPAT,
F6NCNT,
'' AS F9NORG,
F6PRIX,
0 AS F6TPAT,
'' as F9CKEY
FROM
prod_shs.rhlib_F6P01
WHERE 1=1
AND F6CGEN = '6'
AND F6MONT > 0
AND F6CENT::text || F6CETS::text || F6CRUB::text || F6CMAT::text || F6DA1A::text || F6DA1M::text || F6DA9A::text || F6DA9M::text != ALL (ARRAY(SELECT F9CKEY FROM w_F69P01 GROUP BY 1)::text[]);
INSERT INTO rh.p_historique_paie(
salarie_id,
contrat_id,
contrat_mois_id,
profil_id,
mois_activite,
date_debut,
date_fin,
mois_paie,
date_paie,
rubrique_id,
organisme_cotisation_id,
base,
montant_brut,
montant_avantage_nature,
montant_frais_imposables,
taux_cotisation_salarie,
montant_cotisation_salarie,
taux_cotisation_patronale,
montant_cotisation_patronale,
montant_od_net_salarie,
montant_net_imposable_salarie,
montant_net_a_payer_salarie
)
SELECT
w_J0P01_0.salarie_id,
w_J0P01_0.contrat_id,
w_J0P01_0.contrat_mois_id,
w_J0P01_0.profil_id,
date_part('year',w_J0P01_0.date_fin) * 100 + date_part('month',w_J0P01_0.date_fin),
w_J0P01_0.date_debut,
w_J0P01_0.date_fin,
w_J0P01_0.mois_paie,
w_J0P01_0.date_paie,
COALESCE(w_cti_rubriques.in_id,0) AS rubrique_id,
COALESCE(w_cti_organismes_cotisation.in_id,0) AS organisme_cotisation_id,
F9BASE AS base,
CASE WHEN F9chap = '10' AND F9CRUB < 3000 THEN F9mont ELSE 0 END AS montant_brut,
CASE WHEN F9chap = '10' AND F9CRUB BETWEEN 3000 AND 3499 THEN F9mont ELSE 0 END AS montant_avantage_nature,
CASE WHEN F9chap = '10' AND F9CRUB BETWEEN 3500 AND 3999 THEN F9mont ELSE 0 END AS montant_frais_imposables,
CASE WHEN F9chap = '10' THEN F9prix WHEN F9chap = '20' THEN F9prix ELSE 0 END as taux_cotisation_salarie,
CASE WHEN F9chap = '20' AND (F9crub BETWEEN 4000 AND 6999 OR F9crub > 9000) THEN 0 - F9mont ELSE 0 END AS montant_cotisation_salarie,
CASE WHEN F9chap = '20' THEN F9tpat ELSE 0 END AS taux_cotisation_patronale,
CASE WHEN F9chap = '20' OR t_rubriques.code_calcul = '8' THEN F9mpat ELSE 0 END AS montant_cotisation_patronale,
CASE
WHEN F9chap = '20' AND (F9crub BETWEEN 7000 AND 8999 OR F9crub > 9000) THEN 0 - F9mont
WHEN F9chap = '30' THEN 0 - F9mont
ELSE 0
END AS montant_od_net_salarie,
CASE WHEN t_rubriques.code_calcul = '7' THEN F9tpat ELSE 0 END +
CASE
WHEN F9chap = '10' THEN F9mont
WHEN F9chap = '20' AND (F9crub BETWEEN 4000 AND 6999 OR F9crub > 9000) THEN F9mont
ELSE 0
END AS montant_net_imposable_salarie,
CASE
WHEN F9chap = '10' AND (CASE WHEN rhp('opt_avt_nature') = '1' THEN (F9CRUB NOT BETWEEN 3000 AND 3499) ELSE true END) THEN F9mont
WHEN F9chap = '20' THEN F9mont
WHEN F9chap = '30' THEN F9mont
ELSE 0
END AS montant_net_a_payer_salarie
FROM w_F69P01 -- mois non clôturé
JOIN prod_shs.rhlib_F1P01 ON 1=1
AND F9CENT = F1CENT
AND F9CETS = F1CETS
JOIN w_J0P01_0 ON 1=1
AND w_F69P01.F9CENT = w_J0P01_0.J0CENT_0
AND w_F69P01.F9CETS = w_J0P01_0.J0CETS_0
AND w_F69P01.F9CMAT = w_J0P01_0.J0CMAT_0
AND w_F69P01.F9NCNT = w_J0P01_0.J0NCNT_0
AND rhlib_F1p01.F1DFPA = w_J0P01_0.J0DFPA_0
AND rhlib_F1p01.F1DFPM = w_J0P01_0.J0DFPM_0
AND est_historique = ''
JOIN w_cti_rubriques ON
F9CENT = w_cti_rubriques.XXCENT AND
F9CETS = w_cti_rubriques.XXCETS AND
F9CRUB = w_cti_rubriques.XXCODO
JOIN rh.t_rubriques ON t_rubriques.code_original = w_cti_rubriques.in_code_original
LEFT JOIN w_cti_organismes_cotisation ON
F9CENT = w_cti_organismes_cotisation.XXCENT AND
F9CETS = w_cti_organismes_cotisation.XXCETS AND
F9NORG = w_cti_organismes_cotisation.XXCODO
;
-- Correction des périodes incohérentes.
UPDATE rh.p_historique_paie
SET date_debut = date_fin
WHERE date_debut > date_fin
;
-- Re-activation des index
SELECT base.cti_stash_pop_table_indexes('rh', 'p_historique_paie')
;
-- Mise à 0 de l'ETP si pas d'heures payées.
UPDATE rh.p_contrats_mois
SET equivalent_temps_plein = 0
WHERE 1=1
AND equivalent_temps_plein <> 0
AND oid NOT IN
(SELECT contrat_mois_id
FROM rh.p_historique_paie
WHERE rubrique_id IN
(SELECT oid FROM rh.t_rubriques WHERE code = '0099'))
;
-- Renseigner les heures contrats à partir de la rubriques d'heures salaire de base conventionnel lorsque le nombre d'heures contrat n'est pas renseigné.
UPDATE rh.p_contrats_mois SET
nombre_heures = 0
;
UPDATE rh.p_contrats_mois SET
nombre_heures = subq.nombre_heures
FROM (
SELECT
contrat_mois_id,
sum(base) as nombre_heures
FROM rh.p_historique_paie
WHERE rubrique_id IN (SELECT oid FROM rh.t_rubriques WHERE code = '1000')
GROUP BY 1) as subq
WHERE 1=1
AND p_contrats_mois.oid = subq.contrat_mois_id
AND p_contrats_mois.nombre_heures = 0
;
-- Appliquer le type de temps de travail pour les rubriques de paie ayant une base != valeur absolue de 1.
-- UPDATE rh.p_historique_paie SET
-- FROM () as subq
-- WHERE 1=1
-- AND p_contrats_mois.oid = subq.contrat_mois_id
-- AND p_contrats_mois.nombre_heures = 0
-- ;
]]>
in_code_original
;
INSERT INTO rh.p_arrets_travail(
salarie_id,
contrat_id,
mois_activite,
date_debut,
date_fin,
date_reprise,
motif_arret_id,
precision_motif_arret_id,
nb_jours
)
SELECT
p_salaries.oid AS salarie_id,
(max(ARRAY[extract(epoch from p_contrats.date_debut), p_contrats.oid]))[2] AS contrat_id,
N6D1AA * 100 + N6D1AM AS mois_activite,
rh.cti_to_date(N6D1AA, N6D1AM, N6D1AJ) AS date_debut,
CASE WHEN N6D9AA <> 0 THEN rh.cti_to_date(N6D9AA, N6D9AM, N6D9AJ) ELSE '20991231' END AS date_fin,
CASE
WHEN N6DREA BETWEEN 1900 AND 2020 THEN rh.cti_to_date(N6DREA, N6DREM, N6DREJ)
WHEN N6D9AA <> 0 THEN rh.cti_to_date(N6D9AA, N6D9AM, N6D9AJ)::date + 1
ELSE '20991231' END AS date_reprise,
COALESCE(t_motifs_arret.oid, 0) AS motif_arret_id,
COALESCE(t_precisions_motif_arret.oid, 0) AS precision_motif_arret_id,
N6NJOU AS nb_jours
FROM w_N6p01
JOIN w_etablissements_select ON XXCENT = N6CENT AND XXCETS = N6CETS
JOIN rh.p_salaries ON (to_char(N6CENT,'FM000')||N6CMAT) = p_salaries.code_original
JOIN rh.p_contrats ON 1=1
AND p_contrats.salarie_id = p_salaries.oid
AND base.cti_overlaps(
p_contrats.date_debut,
p_contrats.date_fin,
rh.cti_to_date(N6D1AA, N6D1AM, N6D1AJ),
CASE WHEN N6D9AA <> 0 THEN rh.cti_to_date(N6D9AA, N6D9AM, N6D9AJ) ELSE '20991231' END)
LEFT JOIN rh.t_motifs_arret ON (N6MOTA = t_motifs_arret.code_original)
LEFT JOIN rh.t_precisions_motif_arret ON (N6MOPR_code_original = t_precisions_motif_arret.code_original)
GROUP BY 1,3,4,5,6,7,8,9
;
-- Correction des dates de reprises saisies entre les dates de début/fin des arrêts.
-- #correction
UPDATE rh.p_arrets_travail
SET date_reprise = date_fin + 1
WHERE base.cti_overlaps(date_reprise, date_reprise, date_debut, date_fin)
;
-- Màj des dates de reprise à date_fin + 1 lorsque plusieurs arrêts consécutifs ont tous la même date de reprise.
-- Le drapeau nb_reprise_apres_arret dans p_arrets_travail_mois sera tout de même positionné à 0 afin qu'un seul arrêt
-- donne lieu à une seule reprise.
/* EXEMPLE :
Avant :
debut fin reprise drapeau
2005-02-28 2005-03-13 2005-02-05 1
2005-03-14 2005-03-27 2005-02-05 1
2005-03-28 2005-07-17 2005-02-05 1
Après :
debut fin reprise drapeau
2005-02-28 2005-03-13 2005-03-14 0
2005-03-14 2005-03-27 2005-03-28 0
2005-03-28 2005-07-17 2005-02-05 1
*/
UPDATE rh.p_arrets_travail
SET date_reprise = subq.date_reprise
FROM (
SELECT
t1.oid,
t1.mois_activite,
min(case when t1.date_fin + '1 day'::interval = t2.date_debut THEN t1.date_fin + '1 day'::interval ELSE t1.date_reprise END) AS date_reprise
FROM rh.p_arrets_travail AS t1
LEFT JOIN rh.p_arrets_travail AS t2 ON 1=1
AND t1.salarie_id = t2.salarie_id
AND t1.date_debut != t2.date_debut
AND t1.date_fin != t2.date_fin
GROUP BY t1.oid, t1.mois_activite
ORDER BY 2
) AS subq
WHERE 1=1
AND p_arrets_travail.oid = subq.oid
AND p_arrets_travail.mois_activite = subq.mois_activite
;
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_arret,
nb_debut_arret,
nb_fin_arret,
nb_reprise_apres_arret,
date_debut,
date_fin,
nb_jours
)
SELECT
arr.oid AS arret_travail_id,
arr.salarie_id AS salarie_id,
cnt.contrat_id AS contrat_id,
cnt.oid AS contrat_mois_id,
cal.mois AS mois_activite,
CASE WHEN base.cti_overlaps(arr.date_debut, arr.date_fin, cnt.date_debut, cnt.date_fin) THEN 1 ELSE 0 END AS nb_arret,
CASE WHEN arr.date_debut BETWEEN cnt.date_debut AND cnt.date_fin THEN 1 ELSE 0 END AS nb_debut_arret,
CASE WHEN arr.date_fin BETWEEN cnt.date_debut AND cnt.date_fin THEN 1 ELSE 0 END AS nb_fin_arret,
CASE WHEN arr.date_reprise BETWEEN cal.date_debut AND cal.date_fin THEN 1 ELSE 0 END AS nb_reprise_apres_arret,
CASE
WHEN base.cti_overlaps(arr.date_debut, arr.date_fin, cal.date_debut, cal.date_fin)
THEN GREATEST(cnt.date_debut, arr.date_debut)
ELSE arr.date_reprise
END AS date_debut,
CASE
WHEN base.cti_overlaps(arr.date_debut, arr.date_fin, cal.date_debut, cal.date_fin)
THEN LEAST(cnt.date_fin, arr.date_fin)
ELSE arr.date_reprise
END AS date_fin,
CASE
WHEN base.cti_overlaps(arr.date_debut, arr.date_fin, cal.date_debut, cal.date_fin)
THEN
CASE WHEN LEAST(cnt.date_fin, arr.date_fin)::date >= GREATEST(cnt.date_debut, arr.date_debut)::date
THEN LEAST(cnt.date_fin, arr.date_fin)::date - GREATEST(cnt.date_debut, arr.date_debut)::date + 1
ELSE 0
END
ELSE 0
END AS nb_jours
FROM base.p_calendrier_mois AS cal
JOIN rh.p_arrets_travail AS arr ON 1!=1
OR base.cti_overlaps(arr.date_debut, arr.date_fin, cal.date_debut, cal.date_fin)
OR (1=1
AND arr.date_reprise BETWEEN cal.date_debut AND cal.date_fin
AND arr.date_reprise != '2099-12-31')
JOIN rh.p_contrats_mois AS cnt ON 1=1
AND cnt.salarie_id = arr.salarie_id
AND base.cti_overlaps(cnt.date_debut, cnt.date_fin, cal.date_debut, cal.date_fin)
AND base.cti_overlaps(cnt.date_debut, cnt.date_fin, arr.date_debut, arr.date_reprise)
AND est_hors_periode = '0'
AND fictif = '0'
WHERE 1=1
AND cal.mois >= to_char(rhp('rhprovider_start')::date, 'YYYYMM')
;
-- Màj des ventil d'arrêts hors contrat (contrat_mois_id IS NULL)
/*
:: DEV EN COURS :: DEV EN COURS :: DEV EN COURS :: DEV EN COURS :: DEV EN COURS ::
UPDATE rh.p_arrets_travail_mois
SET contrat_mois_id = subq.contrat_mois_id
FROM
:: DEV EN COURS :: DEV EN COURS :: DEV EN COURS :: DEV EN COURS :: DEV EN COURS :: DEV EN COURS ::
*/
-- Màj des reprises.
/*UPDATE rh.p_arrets_travail_mois
SET nb_reprise_apres_arret = subq.nb_reprise_apres_arret
FROM (
SELECT
t1.arret_travail_id,
t1.mois_activite,
min(case when p_arrets_travail.date_reprise between t2.date_debut AND t2.date_fin then 0 else 1 end) AS nb_reprise_apres_arret
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.date_debut != t2.date_debut
AND t1.date_fin != t2.date_fin
GROUP BY t1.arret_travail_id, t1.mois_activite
ORDER BY 2 DESC
) 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
;*/
]]>
= to_char(rhp('rhprovider_start')::date, 'YYYY')
GROUP BY 1,2,3,4,5,6,9
;
-- Peuplement de rh.p_visites_medicales
TRUNCATE rh.p_visites_medicales
;
ALTER SEQUENCE rh.s_visites_medicales RESTART WITH 1
;
INSERT INTO rh.p_visites_medicales(
salarie_id,
contrat_id,
contrat_mois_id,
mois_activite,
date,
motif_visite_id
)
SELECT
salarie_id,
contrat_id,
contrat_mois_id,
mois_activite,
date,
motif_visite_id
FROM w_visites
;
]]>
1) subview
WHERE p_contrats_mois.salarie_id = subview.salarie_id AND
p_contrats_mois.nombre_entrees = 1 AND
p_contrats_mois.oid <> oid_ok
;
]]>