0 AND
p_patients_e.no_patient NOT IN (SELECT no_patient_source FROM w_correspondances_patients);
CREATE INDEX w_correspondances_patients_1
ON w_correspondances_patients
USING btree
(no_patient_source);
]]>
0
WHERE date_arret < '20991231' AND
no_sejour IN (SELECT no_sejour FROM activite[PX].p_factures WHERE code_facture = '0') AND
(
code_prevu = '1' OR
type_sejour IN ('1','5','6') AND code_sorti <> '1' OR
type_sejour IN ('1','5','6') AND date_sortie > date_arret OR
type_sejour IN ('2','3','9') AND date_entree > date_arret
)
) subview
WHERE no_sejour NOT IN (SELECT no_sejour FROM activite.t_sejour)
;
-- Génération auto ignorés d'après selon date demarrage
INSERT INTO activite.t_sejour (no_sejour, est_ignore)
SELECT no_sejour, '1'
FROM
(
SELECT '[TPX]'||no_sejour AS no_sejour, type_sejour, code_sorti, code_prevu, date_entree, date_sortie, date_arret
FROM activite[PX].p_sejours
JOIN activite.t_providers ON t_providers.oid = [PPX] AND [PPX] = 0
WHERE date_demarrage > '00010101' AND
no_sejour NOT IN (SELECT no_sejour FROM activite[PX].p_factures WHERE code_facture = '1') AND
(
type_sejour IN ('1','5','6') AND date_sortie < date_demarrage OR
type_sejour IN ('2','3','9') AND code_sorti <> '1' AND date_entree < date_demarrage
)
) subview
WHERE no_sejour NOT IN (SELECT no_sejour FROM activite.t_sejour)
;
DROP TABLE IF EXISTS w_sejours_ignore;
CREATE TEMP TABLE w_sejours_ignore AS
SELECT p_sejours.no_sejour AS no_sejour_ignore, p_sejours.oid AS sejour_id_ignore
FROM activite[PX].p_sejours
JOIN activite.t_sejour ON '[CPX]' || p_sejours.no_sejour = t_sejour.no_sejour
WHERE t_sejour.est_ignore = '1';
INSERT INTO w_sejours_ignore
SELECT p_sejours.no_sejour AS no_sejour_ignore, p_sejours.oid AS sejour_id_ignore
FROM activite[PX].p_sejours
JOIN activite.t_sejour ON '[TPX]' || p_sejours.no_sejour = t_sejour.no_sejour
WHERE t_sejour.est_ignore = '1' AND '[CPX]' = '';
CREATE INDEX w_sejours_ignore_1
ON w_sejours_ignore
USING btree
(no_sejour_ignore);
DROP TABLE IF EXISTS w_factures_ignore;
CREATE TEMP TABLE w_factures_ignore AS
SELECT no_facture AS no_facture_ignore
FROM activite[PX].p_factures
JOIN w_sejours_ignore ON p_factures.no_sejour = w_sejours_ignore.no_sejour_ignore;
CREATE INDEX w_factures_ignore_1
ON w_factures_ignore
USING btree
(no_facture_ignore);
INSERT INTO activite.p_sejours(
finess,
no_sejour,
date_entree,
date_sortie,
no_patient,
code_sexe,
age,
code_sorti,
code_prevu,
type_sejour,
date_facture,
date_solde,
delai_facture,
delai_solde,
montant_facture_c,
montant_facture_h,
montant_regle_c,
montant_regle_h,
nb_factures,
nb_factures_regularisation,
date_expedition,
delai_expedition,
lieu_sortie_id,
medecin_sejour_id,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_0_id,
tiers_payant_22_id,
montant_facture_0_c,
montant_facture_0_h,
montant_facture_1_c,
montant_facture_1_h,
montant_facture_12_c,
montant_facture_12_h,
montant_facture_2_c,
montant_facture_2_h,
montant_facture_22_c,
montant_facture_22_h,
montant_regle_0_c,
montant_regle_0_h,
montant_regle_1_c,
montant_regle_1_h,
montant_regle_12_c,
montant_regle_12_h,
montant_regle_2_c,
montant_regle_2_h,
montant_regle_22_c,
montant_regle_22_h,
date_expedition_0,
date_expedition_1,
date_expedition_12,
date_expedition_2,
date_expedition_22,
delai_expedition_0,
delai_expedition_1,
delai_expedition_12,
delai_expedition_2,
delai_expedition_22,
date_solde_0,
date_solde_1,
date_solde_12,
date_solde_2,
date_solde_22,
delai_solde_0,
delai_solde_1,
delai_solde_12,
delai_solde_2,
delai_solde_22,
ghs_id,
ghm_id,
gmt_id,
gme_id,
particularite_t2a,
code_postal_id,
mode_traitement_id,
date_groupage,
delai_groupage,
nb_factures_rejet,
etat,
code_cp_demandee,
ghs_bebe1_id,
ghs_bebe2_id,
ghs_bebe3_id,
mode_entree,
provenance,
mode_sortie,
destination,
heure_entree,
heure_sortie,
code_original,
montant_comptabilise_c,
montant_comptabilise_h,
montant_comptabilise_0_c,
montant_comptabilise_0_h,
montant_comptabilise_1_c,
montant_comptabilise_1_h,
montant_comptabilise_2_c,
montant_comptabilise_2_h,
montant_comptabilise_22_c,
montant_comptabilise_22_h,
montant_facture_c_actes_inclus_dans_sejour,
montant_facture_h_actes_inclus_dans_sejour,
est_budget_global,
montant_comptabilise_budget_global_c,
oid,
provider_id,
est_sans_facturation,
type_pmsi,
risque_id,
medecin_traitant_id)
SELECT
finess,
'[CPX]' || no_sejour,
date_entree,
date_sortie,
COALESCE(w_correspondances_patients.no_patient, p_sejours.no_patient),
code_sexe,
age,
code_sorti,
code_prevu,
type_sejour,
date_facture,
date_solde,
delai_facture,
delai_solde,
montant_facture_c,
montant_facture_h,
montant_regle_c,
montant_regle_h,
nb_factures,
nb_factures_regularisation,
date_expedition,
delai_expedition,
CASE WHEN lieu_sortie_id <> 0 THEN lieu_sortie_id + [IPX] ELSE 0 END AS lieu_sortie_id,
CASE WHEN medecin_sejour_id <> 0 THEN medecin_sejour_id + [IPX] ELSE 0 END AS medecin_sejour_id,
CASE WHEN tiers_payant_1_id <> 0 THEN tiers_payant_1_id + [IPX] ELSE 0 END AS tiers_payant_1_id,
CASE WHEN tiers_payant_2_id <> 0 THEN tiers_payant_2_id + [IPX] ELSE 0 END AS tiers_payant_2_id,
CASE WHEN tiers_payant_0_id <> 0 THEN tiers_payant_0_id + [IPX] ELSE 0 END AS tiers_payant_0_id,
CASE WHEN tiers_payant_22_id <> 0 THEN tiers_payant_22_id + [IPX] ELSE 0 END AS tiers_payant_22_id,
montant_facture_0_c,
montant_facture_0_h,
montant_facture_1_c,
montant_facture_1_h,
montant_facture_12_c,
montant_facture_12_h,
montant_facture_2_c,
montant_facture_2_h,
montant_facture_22_c,
montant_facture_22_h,
montant_regle_0_c,
montant_regle_0_h,
montant_regle_1_c,
montant_regle_1_h,
montant_regle_12_c,
montant_regle_12_h,
montant_regle_2_c,
montant_regle_2_h,
montant_regle_22_c,
montant_regle_22_h,
date_expedition_0,
date_expedition_1,
date_expedition_12,
date_expedition_2,
date_expedition_22,
delai_expedition_0,
delai_expedition_1,
delai_expedition_12,
delai_expedition_2,
delai_expedition_22,
date_solde_0,
date_solde_1,
date_solde_12,
date_solde_2,
date_solde_22,
delai_solde_0,
delai_solde_1,
delai_solde_12,
delai_solde_2,
delai_solde_22,
ghs_id,
COALESCE(ghm_id,0) AS ghm_id,
gmt_id,
gme_id,
particularite_t2a,
code_postal_id,
mode_traitement_id,
date_groupage,
delai_groupage,
nb_factures_rejet,
etat,
code_cp_demandee,
ghs_bebe1_id,
ghs_bebe2_id,
ghs_bebe3_id,
mode_entree,
provenance,
mode_sortie,
destination,
heure_entree,
heure_sortie,
code_original,
montant_comptabilise_c,
montant_comptabilise_h,
montant_comptabilise_0_c,
montant_comptabilise_0_h,
montant_comptabilise_1_c,
montant_comptabilise_1_h,
montant_comptabilise_2_c,
montant_comptabilise_2_h,
montant_comptabilise_22_c,
montant_comptabilise_22_h,
montant_facture_c_actes_inclus_dans_sejour,
montant_facture_h_actes_inclus_dans_sejour,
est_budget_global,
montant_comptabilise_budget_global_c,
CASE WHEN p_sejours.oid <> 0 THEN p_sejours.oid + [IPX] ELSE 0 END AS oid,
[PPX]::bigint AS provider_id,
COALESCE(est_sans_facturation,'0'),
type_pmsi,
COALESCE(w_correspondances_risque.oid, 0) as risque_id,
CASE WHEN medecin_traitant_id <> 0 THEN medecin_traitant_id + [IPX] ELSE 0 END AS medecin_traitant_id
FROM activite[PX].p_sejours
LEFT JOIN w_sejours_ignore ON p_sejours.no_sejour = no_sejour_ignore
LEFT JOIN w_correspondances_patients ON p_sejours.no_patient = w_correspondances_patients.no_patient_source
LEFT JOIN w_correspondances_risque ON p_sejours.risque_id = w_correspondances_risque.oid_source
WHERE no_sejour_ignore IS NULL;
-- Médecin séjour forcé
UPDATE activite.p_sejours
SET medecin_sejour_id = t_sejour.medecin_sejour_id
FROM activite.t_sejour
WHERE t_sejour.no_sejour = p_sejours.no_sejour AND
t_sejour.medecin_sejour_id <> 0 AND
p_sejours.medecin_sejour_id IS DISTINCT FROM t_sejour.medecin_sejour_id;
INSERT INTO activite.p_sejours_assurance(
sejour_id,
nom_assure,
prenom_assure,
tiers_payant_0_id,
tiers_payant_1_id,
matricule_1,
tiers_payant_2_id,
matricule_2,
tiers_payant_22_id,
matricule_22)
SELECT
CASE WHEN sejour_id <> 0 THEN sejour_id + [IPX] ELSE 0 END AS sejour_id,
nom_assure,
prenom_assure,
CASE WHEN tiers_payant_0_id <> 0 THEN tiers_payant_0_id + [IPX] ELSE 0 END AS tiers_payant_0_id,
CASE WHEN tiers_payant_1_id <> 0 THEN tiers_payant_1_id + [IPX] ELSE 0 END AS tiers_payant_1_id,
matricule_1,
CASE WHEN tiers_payant_2_id <> 0 THEN tiers_payant_2_id + [IPX] ELSE 0 END AS tiers_payant_2_id,
matricule_2,
CASE WHEN tiers_payant_22_id <> 0 THEN tiers_payant_22_id + [IPX] ELSE 0 END AS tiers_payant_22_id,
matricule_22
FROM activite[PX].p_sejours_assurance
LEFT JOIN w_sejours_ignore ON p_sejours_assurance.sejour_id = sejour_id_ignore
WHERE no_sejour_ignore IS NULL;
INSERT INTO activite.p_sejours_transferts(
sejour_id,
provenance_id,
destination_id)
SELECT
CASE WHEN sejour_id <> 0 THEN sejour_id + [IPX] ELSE 0 END AS sejour_id,
provenance_id,
destination_id
FROM activite[PX].p_sejours_transferts
LEFT JOIN w_sejours_ignore ON p_sejours_transferts.sejour_id = sejour_id_ignore
WHERE no_sejour_ignore IS NULL;
INSERT INTO activite.p_coordonnees_patient (
sejour_id,
adresse,
code_postal_id,
commune,
telephone_fixe,
telephone_portable,
email
)
SELECT
CASE WHEN sejour_id <> 0 THEN sejour_id + [IPX] ELSE 0 END AS sejour_id,
adresse,
code_postal_id,
commune,
telephone_fixe,
telephone_portable,
email
FROM activite[PX].p_coordonnees_patient
LEFT JOIN w_sejours_ignore ON p_coordonnees_patient.sejour_id = sejour_id_ignore
WHERE no_sejour_ignore IS NULL;
INSERT INTO activite.p_sejours_groupes_smr(
no_sejour
, date_entree
, date_sortie
, date_groupage
, gmt_code
, gmt_id
, gme_code
, gme_id
, date_debut_gmt
, date_fin_gmt
, nb_jours_presence
, types_gmt_code
)
SELECT
'[CPX]' || no_sejour
, date_entree
, date_sortie
, date_groupage
, gmt_code
, gmt_id
, gme_code
, gme_id
, date_debut_gmt
, date_fin_gmt
, nb_jours_presence
, types_gmt_code
FROM activite[PX].p_sejours_groupes_smr
;
]]>
0 THEN lieu_id + [IPX] ELSE 0 END AS lieu_id,
nb_entrees_directes,
nb_sorties_directes,
nb_urgences,
nb_externes,
nb_ambulatoires,
CASE WHEN medecin_sejour_id <> 0 THEN medecin_sejour_id + [IPX] ELSE 0 END AS medecin_sejour_id,
nb_jours_js_inclus,
nb_seances,
nb_entrees_mutation_service,
nb_sorties_mutation_service,
nb_entrees_mutation_activite,
nb_sorties_mutation_activite,
nb_entrees_mutation_etage,
nb_sorties_mutation_etage,
nb_chambres_particulieres,
heure_debut,
heure_fin,
est_jour_entree,
est_jour_sortie,
est_jour_hospitalisation,
est_chambre_particuliere,
est_chambre_particuliere_facturee,
nb_entrees_mutation_unite_medicale,
nb_sorties_mutation_unite_medicale,
nb_bebes,
CASE WHEN sejour_id <> 0 THEN sejour_id + [IPX] ELSE 0 END AS sejour_id,
est_premier_mouvement_jour,
est_dernier_mouvement_jour,
jour_semaine,
is_weekend,
COALESCE(est_facture,'1') AS est_facture
FROM activite[PX].p_mouvements_sejour
LEFT JOIN w_sejours_ignore ON p_mouvements_sejour.no_sejour = no_sejour_ignore
WHERE no_sejour_ignore IS NULL;
INSERT INTO activite.t_lieux(
oid,
code_original_1,
code_original_2,
code_original_3,
code_original_4,
code_original_5,
service_facturation_id,
activite_id,
lit_id,
unite_medicale_id,
unite_fonctionnelle_id,
code_original_6,
code_original_7,
mode_traitement_id)
SELECT
CASE WHEN oid <> 0 THEN oid + [IPX] ELSE 0 END AS oid,
CASE WHEN code_original_1 <> '' THEN '[TPX]' || code_original_1 ELSE '' END AS code_original_1,
CASE WHEN code_original_2 <> '' THEN '[TPX]' || code_original_2 ELSE '' END AS code_original_2,
CASE WHEN code_original_3 <> '' THEN '[TPX]' || code_original_3 ELSE '' END AS code_original_3,
CASE WHEN code_original_4 <> '' THEN '[TPX]' || code_original_4 ELSE '' END AS code_original_4,
CASE WHEN code_original_5 <> '' THEN '[TPX]' || code_original_5 ELSE '' END AS code_original_5,
CASE WHEN service_facturation_id <> 0 THEN service_facturation_id + [IPX] ELSE 0 END AS service_facturation_id,
CASE WHEN activite_id <> 0 THEN activite_id + [IPX] ELSE 0 END AS activite_id,
CASE WHEN lit_id <> 0 THEN lit_id + [IPX] ELSE 0 END AS lit_id,
CASE WHEN unite_medicale_id <> 0 THEN unite_medicale_id + [IPX] ELSE 0 END AS unite_medicale_id,
CASE WHEN unite_fonctionnelle_id <> 0 THEN unite_fonctionnelle_id + [IPX] ELSE 0 END AS unite_fonctionnelle_id,
CASE WHEN code_original_6 <> '' THEN '[TPX]' || code_original_6 ELSE '' END AS code_original_6,
CASE WHEN code_original_7 <> '' THEN '[TPX]' || code_original_7 ELSE '' END AS code_original_7,
mode_traitement_id
FROM activite[PX].t_lieux
WHERE CASE WHEN oid <> 0 THEN oid + [IPX] ELSE 0 END NOT IN (SELECT oid FROM activite.t_lieux)
;
UPDATE activite.t_lieux
SET
code_original_1 = CASE WHEN t_lieux_src.code_original_1 <> '' THEN '[TPX]' || t_lieux_src.code_original_1 ELSE '' END,
code_original_2 = CASE WHEN t_lieux_src.code_original_2 <> '' THEN '[TPX]' || t_lieux_src.code_original_2 ELSE '' END,
code_original_3 = CASE WHEN t_lieux_src.code_original_3 <> '' THEN '[TPX]' || t_lieux_src.code_original_3 ELSE '' END,
code_original_4 = CASE WHEN t_lieux_src.code_original_4 <> '' THEN '[TPX]' || t_lieux_src.code_original_4 ELSE '' END,
code_original_5 = CASE WHEN t_lieux_src.code_original_5 <> '' THEN '[TPX]' || t_lieux_src.code_original_5 ELSE '' END,
service_facturation_id = CASE WHEN t_lieux_src.service_facturation_id <> 0 THEN t_lieux_src.service_facturation_id + [IPX] ELSE 0 END,
activite_id = CASE WHEN t_lieux_src.activite_id <> 0 THEN t_lieux_src.activite_id + [IPX] ELSE 0 END,
lit_id = CASE WHEN t_lieux_src.lit_id <> 0 THEN t_lieux_src.lit_id + [IPX] ELSE 0 END,
unite_medicale_id = CASE WHEN t_lieux_src.unite_medicale_id <> 0 THEN t_lieux_src.unite_medicale_id + [IPX] ELSE 0 END,
unite_fonctionnelle_id = CASE WHEN t_lieux_src.unite_fonctionnelle_id <> 0 THEN t_lieux_src.unite_fonctionnelle_id + [IPX] ELSE 0 END,
code_original_6 = CASE WHEN t_lieux_src.code_original_6 <> '' THEN '[TPX]' || t_lieux_src.code_original_6 ELSE '' END,
code_original_7 = CASE WHEN t_lieux_src.code_original_7 <> '' THEN '[TPX]' || t_lieux_src.code_original_7 ELSE '' END,
mode_traitement_id = t_lieux_src.mode_traitement_id
FROM activite[PX].t_lieux t_lieux_src
WHERE CASE WHEN t_lieux_src.oid <> 0 THEN t_lieux_src.oid + [IPX] ELSE 0 END = t_lieux.oid
AND (
CASE WHEN t_lieux_src.code_original_1 <> '' THEN '[TPX]' || t_lieux_src.code_original_1 ELSE '' END != t_lieux.code_original_1 OR
CASE WHEN t_lieux_src.code_original_2 <> '' THEN '[TPX]' || t_lieux_src.code_original_2 ELSE '' END != t_lieux.code_original_2 OR
CASE WHEN t_lieux_src.code_original_3 <> '' THEN '[TPX]' || t_lieux_src.code_original_3 ELSE '' END != t_lieux.code_original_3 OR
CASE WHEN t_lieux_src.code_original_4 <> '' THEN '[TPX]' || t_lieux_src.code_original_4 ELSE '' END != t_lieux.code_original_4 OR
CASE WHEN t_lieux_src.code_original_5 <> '' THEN '[TPX]' || t_lieux_src.code_original_5 ELSE '' END != t_lieux.code_original_5 OR
CASE WHEN t_lieux_src.service_facturation_id <> 0 THEN t_lieux_src.service_facturation_id + [IPX] ELSE 0 END != t_lieux.service_facturation_id OR
CASE WHEN t_lieux_src.activite_id <> 0 THEN t_lieux_src.activite_id + [IPX] ELSE 0 END != t_lieux.activite_id OR
CASE WHEN t_lieux_src.lit_id <> 0 THEN t_lieux_src.lit_id + [IPX] ELSE 0 END != t_lieux.lit_id OR
CASE WHEN t_lieux_src.unite_medicale_id <> 0 THEN t_lieux_src.unite_medicale_id + [IPX] ELSE 0 END != t_lieux.unite_medicale_id OR
CASE WHEN t_lieux_src.unite_fonctionnelle_id <> 0 THEN t_lieux_src.unite_fonctionnelle_id + [IPX] ELSE 0 END != t_lieux.unite_fonctionnelle_id OR
CASE WHEN t_lieux_src.code_original_6 <> '' THEN '[TPX]' || t_lieux_src.code_original_6 ELSE '' END != t_lieux.code_original_6 OR
CASE WHEN t_lieux_src.code_original_7 <> '' THEN '[TPX]' || t_lieux_src.code_original_7 ELSE '' END != t_lieux.code_original_7 OR
t_lieux_src.mode_traitement_id != t_lieux.mode_traitement_id
)
;
]]>
0 FROM information_schema.tables WHERE table_schema = 'prod_web100t'
]]>
0 THEN tiers_payant_1_id + [IPX] ELSE 0 END AS tiers_payant_1_id,
CASE WHEN tiers_payant_2_id <> 0 THEN tiers_payant_2_id + [IPX] ELSE 0 END AS tiers_payant_2_id,
CASE WHEN tiers_payant_22_id <> 0 THEN tiers_payant_22_id + [IPX] ELSE 0 END AS tiers_payant_22_id,
CASE WHEN tiers_payant_0_id <> 0 THEN tiers_payant_0_id + [IPX] ELSE 0 END AS tiers_payant_0_id,
date_solde_0_c,
date_solde_0_h,
date_solde_1_c,
date_solde_1_h,
date_solde_2_c,
date_solde_2_h,
date_solde_22_c,
date_solde_22_h,
date_expedition_0,
date_expedition_1,
date_expedition_2,
date_expedition_22,
code_expedie_0,
code_expedie_1,
code_expedie_2,
code_expedie_22,
no_bordereau_0,
no_bordereau_1,
no_bordereau_2,
no_bordereau_22,
montant_facture_0_c,
montant_facture_0_h,
montant_facture_1_c,
montant_facture_1_h,
montant_facture_2_c,
montant_facture_2_h,
montant_facture_22_c,
montant_facture_22_h,
montant_regle_0_c,
montant_regle_0_h,
montant_regle_1_c,
montant_regle_1_h,
montant_regle_2_c,
montant_regle_2_h,
montant_regle_22_c,
montant_regle_22_h,
delai_expedition_0,
delai_expedition_1,
delai_expedition_2,
delai_expedition_22,
delai_solde_0_c,
delai_solde_0_h,
delai_solde_1_c,
delai_solde_1_h,
delai_solde_2_c,
delai_solde_2_h,
delai_solde_22_c,
delai_solde_22_h,
ghs_id,
particularite_t2a,
date_vente,
code_cloture,
montant_encours_c,
montant_encours_0_c,
montant_encours_1_c,
montant_encours_2_c,
montant_encours_22_c,
montant_encours_h,
montant_encours_0_h,
montant_encours_1_h,
montant_encours_2_h,
montant_encours_22_h,
code_cp_demandee,
date_encours,
ghs_bebe1_id,
ghs_bebe2_id,
ghs_bebe3_id,
nb_rejets,
montant_comptabilise_c,
montant_comptabilise_h,
montant_comptabilise_0_c,
montant_comptabilise_0_h,
montant_comptabilise_1_c,
montant_comptabilise_1_h,
montant_comptabilise_2_c,
montant_comptabilise_2_h,
montant_comptabilise_22_c,
montant_comptabilise_22_h,
CASE WHEN no_facture_reference <> '' THEN '[CPX]' || no_facture_reference ELSE '' END AS no_facture_reference,
date_solde_reference,
date_solde_reference_c,
date_solde_reference_h,
date_solde_reference_0_c,
date_solde_reference_1_c,
date_solde_reference_2_c,
date_solde_reference_22_c,
date_solde_reference_0_h,
date_solde_reference_1_h,
date_solde_reference_2_h,
date_solde_reference_22_h,
date_solde_c,
date_solde_h,
montant_facture_c_actes_inclus_dans_sejour,
montant_facture_h_actes_inclus_dans_sejour,
montant_comptabilise_budget_global_c,
CASE WHEN no_facture_od_avoir <> '' THEN '[CPX]' || no_facture_od_avoir ELSE '' END AS no_facture_od_avoir,
CASE WHEN oid <> 0 THEN oid + [IPX] ELSE 0 END AS oid,
CASE WHEN sejour_id <> 0 THEN sejour_id + [IPX] ELSE 0 END AS sejour_id,
CASE WHEN facture_reference_id <> 0 THEN facture_reference_id + [IPX] ELSE 0 END AS facture_reference_id,
CASE WHEN facture_od_avoir_id <> 0 THEN facture_od_avoir_id + [IPX] ELSE 0 END AS facture_od_avoir_id,
[PPX]::bigint AS provider_id,
CASE WHEN motif_non_facturation_id <> 0 THEN motif_non_facturation_id + [IPX] ELSE 0 END AS motif_non_facturation_id,
motif_non_facturation_comment
FROM activite[PX].p_factures
LEFT JOIN w_factures_ignore ON p_factures.no_facture = no_facture_ignore
WHERE no_facture_ignore IS NULL;
-- Ajustement des motifs de non facturation génériques
UPDATE activite.p_factures
SET motif_non_facturation_id = subview.oid
FROM
(
SELECT t_motif_non_facturation_source.oid AS oid_source, t_motif_non_facturation.oid
FROM activite.t_motif_non_facturation
JOIN activite.t_motif_non_facturation t_motif_non_facturation_source ON
(
t_motif_non_facturation.code_original = '*CTING' AND t_motif_non_facturation_source.code_original LIKE '%*CTING' OR
t_motif_non_facturation.code_original = '*CTIZZZ' AND t_motif_non_facturation_source.code_original LIKE '%*CTIZZZ'
) AND
t_motif_non_facturation.oid <> t_motif_non_facturation_source.oid
) subview
WHERE motif_non_facturation_id <> 0 AND
motif_non_facturation_id = subview.oid_source
;
]]>
0 THEN rubrique_facturation_id + [IPX] ELSE 0 END AS rubrique_facturation_id,
prestation_id,
ucd_id,
lpp_id,
prix_unitaire,
CASE WHEN lieu_id <> 0 THEN lieu_id + [IPX] ELSE 0 END AS lieu_id,
CASE WHEN facture_id <> 0 THEN facture_id + [IPX] ELSE 0 END AS facture_id
FROM activite[PX].p_factures_lignes_non_facturees_c
LEFT JOIN w_factures_ignore ON p_factures_lignes_non_facturees_c.no_facture = no_facture_ignore
WHERE no_facture_ignore IS NULL;
]]>
0 THEN rubrique_facturation_id + [IPX] ELSE 0 END AS rubrique_facturation_id,
CASE WHEN rubrique_comptabilisation_id <> 0 THEN rubrique_comptabilisation_id + [IPX] ELSE 0 END AS rubrique_comptabilisation_id,
prestation_id,
COALESCE(w_correspondances_compte.oid,0) AS compte_produit_id
FROM activite[PX].t_rubrique_facture_c
LEFT JOIN w_correspondances_compte ON compte_produit_id = w_correspondances_compte.oid_source
WHERE (t_rubrique_facture_c.oid + [IPX]) NOT IN (SELECT oid FROM activite.t_rubrique_facture_c);
INSERT INTO activite.p_factures_lignes_c(
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
coefficient_mco,
rubrique_facture_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
compte_produit_id,
prestation_id,
ucd_id,
lpp_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
montant_facture_22,
taux_0,
taux_1,
taux_2,
taux_22,
finess,
prix_unitaire,
lieu_id,
nb_prestation,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22,
montant_facture_actes_inclus_dans_sejour,
montant_facture_0_actes_inclus_dans_sejour,
montant_facture_1_actes_inclus_dans_sejour,
montant_facture_2_actes_inclus_dans_sejour,
montant_facture_22_actes_inclus_dans_sejour,
origine_facturation_id,
montant_comptabilise_budget_global_1,
facture_id,
taux_tva)
SELECT
'[CPX]' || no_facture AS no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
coefficient_mco,
CASE WHEN rubrique_facture_id <> 0 THEN rubrique_facture_id + [IPX] ELSE 0 END AS rubrique_facture_id,
CASE WHEN rubrique_facturation_id <> 0 THEN rubrique_facturation_id + [IPX] ELSE 0 END AS rubrique_facturation_id,
CASE WHEN rubrique_comptabilisation_id <> 0 THEN rubrique_comptabilisation_id + [IPX] ELSE 0 END AS rubrique_comptabilisation_id,
COALESCE(w_correspondances_compte.oid,0),
prestation_id,
ucd_id,
lpp_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
montant_facture_22,
taux_0,
taux_1,
taux_2,
taux_22,
finess,
prix_unitaire,
CASE WHEN lieu_id <> 0 THEN lieu_id + [IPX] ELSE 0 END AS lieu_id,
nb_prestation,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22,
montant_facture_actes_inclus_dans_sejour,
montant_facture_0_actes_inclus_dans_sejour,
montant_facture_1_actes_inclus_dans_sejour,
montant_facture_2_actes_inclus_dans_sejour,
montant_facture_22_actes_inclus_dans_sejour,
origine_facturation_id,
montant_comptabilise_budget_global_1,
CASE WHEN facture_id <> 0 THEN facture_id + [IPX] ELSE 0 END AS facture_id,
taux_tva
FROM activite[PX].p_factures_lignes_c
LEFT JOIN w_correspondances_compte ON compte_produit_id = w_correspondances_compte.oid_source
LEFT JOIN w_factures_ignore ON p_factures_lignes_c.no_facture = no_facture_ignore
WHERE no_facture_ignore IS NULL;
]]>
0 THEN rubrique_comptabilisee_id + [IPX] ELSE 0 END AS rubrique_comptabilisee_id,
prestation_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22,
finess,
od_avoir,
CASE WHEN facture_id <> 0 THEN facture_id + [IPX] ELSE 0 END AS facture_id,
od_non_comptabilise
FROM activite[PX].p_factures_soldes_c
LEFT JOIN w_factures_ignore ON p_factures_soldes_c.no_facture = no_facture_ignore
WHERE no_facture_ignore IS NULL;
]]>
0 THEN medecin_facture_id + [IPX] ELSE 0 END AS medecin_facture_id,
prestation_id,
prix_unitaire,
montant_depassement,
CASE WHEN lieu_id <> 0 THEN lieu_id + [IPX] ELSE 0 END AS lieu_id,
acte_id,
phase_ccam,
activite_ccam,
extension_ccam,
modificateur_ccam_1,
modificateur_ccam_2,
modificateur_ccam_3,
modificateur_ccam_4,
CASE WHEN facture_id <> 0 THEN facture_id + [IPX] ELSE 0 END AS facture_id
FROM activite[PX].p_factures_lignes_non_facturees_h
LEFT JOIN w_factures_ignore ON p_factures_lignes_non_facturees_h.no_facture = no_facture_ignore
WHERE no_facture_ignore IS NULL;
]]>
0 THEN rubrique_facturation_id + [IPX] ELSE 0 END AS rubrique_facturation_id,
CASE WHEN rubrique_comptabilisation_id <> 0 THEN rubrique_comptabilisation_id + [IPX] ELSE 0 END AS rubrique_comptabilisation_id,
nb_rubrique,
nb_prestation,
prix_unitaire,
taux_0,
taux_1,
taux_2,
taux_22,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
montant_facture_22,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
CASE WHEN lieu_id <> 0 THEN lieu_id + [IPX] ELSE 0 END AS lieu_id,
montant_depassement,
acte_id,
CASE WHEN COALESCE(protocole_id,0) <> 0 THEN protocole_id + [IPX] ELSE 0 END AS protocole_id,
CASE WHEN medecin_facture_id <> 0 THEN medecin_facture_id + [IPX] ELSE 0 END AS medecin_facture_id,
CASE WHEN medecin_comptabilise_id <> 0 THEN medecin_comptabilise_id + [IPX] ELSE 0 END AS medecin_comptabilise_id,
heure_debut,
phase_ccam,
activite_ccam,
extension_ccam,
modificateur_ccam_1,
modificateur_ccam_2,
modificateur_ccam_3,
modificateur_ccam_4,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22,
montant_facture_actes_inclus_dans_sejour,
montant_facture_0_actes_inclus_dans_sejour,
montant_facture_1_actes_inclus_dans_sejour,
montant_facture_2_actes_inclus_dans_sejour,
montant_facture_22_actes_inclus_dans_sejour,
CASE WHEN facture_id <> 0 THEN facture_id + [IPX] ELSE 0 END AS facture_id,
montant_non_facture
FROM activite[PX].p_factures_lignes_h
LEFT JOIN w_factures_ignore ON p_factures_lignes_h.no_facture = no_facture_ignore
WHERE no_facture_ignore IS NULL;
]]>
0 THEN rubrique_comptabilisee_id + [IPX] ELSE 0 END AS rubrique_comptabilisee_id,
prestation_id,
CASE WHEN medecin_comptabilise_id <> 0 THEN medecin_comptabilise_id + [IPX] ELSE 0 END AS medecin_comptabilise_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22,
montant_solde,
montant_solde_0,
montant_solde_1,
montant_solde_2,
montant_solde_22,
finess,
od_avoir,
CASE WHEN facture_id <> 0 THEN facture_id + [IPX] ELSE 0 END AS facture_id,
od_non_comptabilise
FROM activite[PX].p_factures_soldes_h
LEFT JOIN w_factures_ignore ON p_factures_soldes_h.no_facture = no_facture_ignore
WHERE no_facture_ignore IS NULL;
]]>
0 THEN 0 - (oid + [IPX]) ELSE 0 END AS oid,
CASE WHEN sejour_id <> 0 THEN sejour_id + [IPX] ELSE 0 END AS sejour_id,
'[CPX]' || no_sejour AS no_sejour,
'[CPX]' || no_facture AS no_facture,
'[CPX]' || no_facture_reference AS no_facture_reference,
date_debut,
date_fin,
date_encours,
code_origine,
code_sorti,
CASE WHEN tiers_payant_1_id <> 0 THEN tiers_payant_1_id + [IPX] ELSE 0 END AS tiers_payant_1_id,
CASE WHEN tiers_payant_2_id <> 0 THEN tiers_payant_2_id + [IPX] ELSE 0 END AS tiers_payant_2_id,
CASE WHEN tiers_payant_22_id <> 0 THEN tiers_payant_22_id + [IPX] ELSE 0 END AS tiers_payant_22_id,
CASE WHEN tiers_payant_0_id <> 0 THEN tiers_payant_0_id + [IPX] ELSE 0 END AS tiers_payant_0_id,
ghs_id,
ghs_bebe1_id,
ghs_bebe2_id,
ghs_bebe3_id,
code_cp_demandee,
montant_encours_c,
montant_encours_0_c,
montant_encours_1_c,
montant_encours_2_c,
montant_encours_22_c,
montant_encours_h,
montant_encours_0_h,
montant_encours_1_h,
montant_encours_2_h,
montant_encours_22_h
FROM activite[PX].p_factures_encours
LEFT JOIN w_factures_ignore ON p_factures_encours.no_facture = no_facture_ignore
WHERE no_facture_ignore IS NULL AND
code_origine = 'P';
INSERT INTO activite.p_factures_encours_lignes_c(
finess,
facture_id,
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
coefficient_mco,
rubrique_facturation_id,
rubrique_comptabilisation_id,
compte_produit_id,
prestation_id,
taux_0,
taux_1,
taux_2,
taux_22,
prix_unitaire,
lieu_id,
nb_prestation,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22
)
SELECT
finess,
CASE WHEN facture_id <> 0 THEN 0 - (facture_id + [IPX]) ELSE 0 END AS facture_id,
'[CPX]' || no_facture AS no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
coefficient_mco,
CASE WHEN rubrique_facturation_id <> 0 THEN rubrique_facturation_id + [IPX] ELSE 0 END AS rubrique_facturation_id,
CASE WHEN rubrique_comptabilisation_id <> 0 THEN rubrique_comptabilisation_id + [IPX] ELSE 0 END AS rubrique_comptabilisation_id,
COALESCE(w_correspondances_compte.oid,0),
prestation_id,
taux_0,
taux_1,
taux_2,
taux_22,
prix_unitaire,
CASE WHEN lieu_id <> 0 THEN lieu_id + [IPX] ELSE 0 END AS lieu_id,
nb_prestation,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22
FROM activite[PX].p_factures_encours_lignes_c
LEFT JOIN w_correspondances_compte ON compte_produit_id = w_correspondances_compte.oid_source
LEFT JOIN w_factures_ignore ON p_factures_encours_lignes_c.no_facture = no_facture_ignore
WHERE no_facture_ignore IS NULL AND
facture_id IN (SELECT oid FROM activite[PX].p_factures_encours WHERE code_origine = 'P');
]]>
0 THEN facture_id + [IPX] ELSE 0 END AS facture_id
FROM activite[PX].p_factures_rejets
LEFT JOIN w_factures_ignore ON p_factures_rejets.no_facture = no_facture_ignore
WHERE no_facture_ignore IS NULL;
]]>
0 THEN journal_id + [IPX] ELSE 0 END AS journal_id,
CASE WHEN sejour_id <> 0 THEN sejour_id + [IPX] ELSE 0 END AS sejour_id,
'[CPX]' || no_sejour,
CASE WHEN facture_id <> 0 THEN facture_id + [IPX] ELSE 0 END AS facture_id,
'[CPX]' || no_facture,
CASE WHEN medecin_id <> 0 THEN medecin_id + [IPX] ELSE 0 END AS medecin_id,
CASE WHEN tiers_payant_id <> 0 THEN tiers_payant_id + [IPX] ELSE 0 END AS tiers_payant_id,
texte,
montant_credit,
montant_debit,
code_erreur,
est_comptabilise,
mode_reglement_code,
taux_tva
FROM activite[PX].p_ecriture_comptable
LEFT JOIN w_correspondances_compte ON compte_id = w_correspondances_compte.oid_source
;
]]>
0 THEN facture_id + [IPX] ELSE 0 END AS facture_id,
[PPX]::bigint AS provider_id
FROM activite[PX].p_factures_comptables;
]]>
= 20100101 AND to_char(date_sortie, 'YYYYMM')::numeric <= to_char(now() + interval '1 month', 'YYYYMM')::numeric
) subview
;
DELETE FROM activite.p_chiffrier WHERE mois > to_char(now() + interval '1 month', 'YYYYMM')::numeric
;
]]>
0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_tiers_payant);
UPDATE activite.t_tiers_payant
SET
type_tiers_payant = source.type_tiers_payant,
code = source.code,
texte = source.texte,
texte_court = source.texte_court,
adresse = source.adresse,
code_postal_id = source.code_postal_id,
ville = source.ville,
telephone = source.telephone,
fax = source.fax,
email = source.email
FROM activite[PX].t_tiers_payant source
WHERE
source.oid + [IPX] = t_tiers_payant.oid AND
(
t_tiers_payant.type_tiers_payant IS DISTINCT FROM source.type_tiers_payant OR
t_tiers_payant.texte IS DISTINCT FROM source.texte OR
t_tiers_payant.texte_court IS DISTINCT FROM source.texte_court OR
t_tiers_payant.adresse IS DISTINCT FROM source.adresse OR
t_tiers_payant.code_postal_id IS DISTINCT FROM source.code_postal_id OR
t_tiers_payant.ville IS DISTINCT FROM source.ville OR
t_tiers_payant.telephone IS DISTINCT FROM source.telephone OR
t_tiers_payant.fax IS DISTINCT FROM source.fax OR
t_tiers_payant.email IS DISTINCT FROM source.email
)
;
]]>
0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_medecins_administratifs);
UPDATE activite.t_medecins_administratifs
SET
nom = source.nom,
prenom = source.prenom,
adresse = source.adresse,
code_postal_id = source.code_postal_id,
ville = source.ville,
telephone = source.telephone,
fax = source.fax,
email = source.email,
no_adeli = COALESCE(source.no_adeli,''),
code_rpps = CASE WHEN source.code_rpps <> '' AND length(source.code_rpps) = 11 THEN source.code_rpps ELSE '' END
FROM activite[PX].t_medecins_administratifs source
WHERE
source.oid + [IPX] = t_medecins_administratifs.oid AND
'[TPX]' || source.code_original = t_medecins_administratifs.code_original AND
(
t_medecins_administratifs.nom IS DISTINCT FROM source.nom OR
t_medecins_administratifs.prenom IS DISTINCT FROM source.prenom OR
t_medecins_administratifs.adresse IS DISTINCT FROM source.adresse OR
t_medecins_administratifs.code_postal_id IS DISTINCT FROM source.code_postal_id OR
t_medecins_administratifs.ville IS DISTINCT FROM source.ville OR
t_medecins_administratifs.telephone IS DISTINCT FROM source.telephone OR
t_medecins_administratifs.fax IS DISTINCT FROM source.fax OR
t_medecins_administratifs.email IS DISTINCT FROM source.email OR
t_medecins_administratifs.no_adeli IS DISTINCT FROM COALESCE(source.no_adeli,'') OR
t_medecins_administratifs.code_rpps IS DISTINCT FROM CASE WHEN source.code_rpps <> '' AND length(source.code_rpps) = 11 THEN source.code_rpps ELSE '' END
)
;
SELECT base.cti_execute('TRUNCATE activite.t_medecins_traitants_administratifs',1)
WHERE [IPX]=0
;
INSERT INTO activite.t_medecins_traitants_administratifs(oid, code_original, code, nom, prenom, specialite_id, medecin_id)
SELECT 0, '0', '****', 'Non renseigné', '', 0, 0 WHERE 0 NOT IN (SELECT oid FROM activite.t_medecins_administratifs);
INSERT INTO activite.t_medecins_traitants_administratifs(
oid,
code,
code_original,
nom,
prenom,
statut,
specialite_id,
is_medecin_sejour,
medecin_id,
is_medecin_executant)
SELECT
oid + [IPX],
'[CPX]' || code,
'[TPX]' || code_original,
nom,
prenom,
statut,
specialite_id,
is_medecin_sejour,
medecin_id,
is_medecin_executant
FROM activite[PX].t_medecins_traitants_administratifs
WHERE oid <> 0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_medecins_traitants_administratifs);
UPDATE activite.t_medecins_traitants_administratifs
SET nom = source.nom,
prenom = source.prenom,
adresse = source.adresse,
code_postal_id = source.code_postal_id,
ville = source.ville,
no_adeli = COALESCE(source.no_adeli, ''),
no_rpps = CASE
WHEN source.no_rpps <> ''
AND length(source.no_rpps) = 11 THEN source.no_rpps
ELSE ''
END
FROM activite[PX].t_medecins_traitants_administratifs source
WHERE source.oid + [IPX] = t_medecins_traitants_administratifs.oid
AND '[TPX]' || source.code_original = t_medecins_traitants_administratifs.code_original
AND (
t_medecins_traitants_administratifs.nom IS DISTINCT
FROM source.nom
OR t_medecins_traitants_administratifs.prenom IS DISTINCT
FROM source.prenom
OR t_medecins_traitants_administratifs.adresse IS DISTINCT
FROM source.adresse
OR t_medecins_traitants_administratifs.code_postal_id IS DISTINCT
FROM source.code_postal_id
OR t_medecins_traitants_administratifs.ville IS DISTINCT
FROM source.ville
OR t_medecins_traitants_administratifs.no_adeli IS DISTINCT
FROM COALESCE(source.no_adeli, '')
OR t_medecins_traitants_administratifs.no_rpps IS DISTINCT
FROM CASE
WHEN source.no_rpps <> ''
AND length(source.no_rpps) = 11 THEN source.no_rpps
ELSE ''
END
);
]]>
0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_services_facturation);
UPDATE activite.t_services_facturation SET
code = t_services_facturation_in.code,
texte = t_services_facturation_in.texte,
texte_court = t_services_facturation_in.texte_court
FROM activite[PX].t_services_facturation t_services_facturation_in
WHERE t_services_facturation.oid = (t_services_facturation_in.oid + [IPX]) AND
(
t_services_facturation.code IS DISTINCT FROM t_services_facturation_in.code OR
t_services_facturation.texte IS DISTINCT FROM t_services_facturation_in.texte OR
t_services_facturation.texte_court IS DISTINCT FROM t_services_facturation_in.texte_court
)
;
UPDATE activite.t_services_facturation SET
code = t_services_facturation_in.code,
texte = t_services_facturation_in.texte,
texte_court = t_services_facturation_in.texte_court
FROM activite[PX].t_services_facturation t_services_facturation_in
WHERE t_services_facturation.oid = (t_services_facturation_in.oid + [IPX]) AND
(
t_services_facturation.code IS DISTINCT FROM t_services_facturation_in.code OR
t_services_facturation.texte IS DISTINCT FROM t_services_facturation_in.texte OR
t_services_facturation.texte_court IS DISTINCT FROM t_services_facturation_in.texte_court
)
;
-- Unités médicales
INSERT INTO activite.t_unites_medicales(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite.t_unites_medicales);
INSERT INTO activite.t_unites_medicales(
oid,
code,
code_original,
texte,
texte_court)
SELECT
oid + [IPX],
'[CPX]' || code,
'[TPX]' || code_original,
texte,
texte_court
FROM activite[PX].t_unites_medicales
WHERE oid <> 0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_unites_medicales);
UPDATE activite.t_unites_medicales SET
code = t_unites_medicales_in.code,
texte = t_unites_medicales_in.texte,
texte_court = t_unites_medicales_in.texte_court
FROM activite[PX].t_unites_medicales t_unites_medicales_in
WHERE t_unites_medicales.oid = (t_unites_medicales_in.oid + [IPX]) AND
(
t_unites_medicales.code IS DISTINCT FROM t_unites_medicales_in.code OR
t_unites_medicales.texte IS DISTINCT FROM t_unites_medicales_in.texte OR
t_unites_medicales.texte_court IS DISTINCT FROM t_unites_medicales_in.texte_court
)
;
-- Unités fonctionnelles
INSERT INTO activite.t_unites_fonctionnelles(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite.t_unites_fonctionnelles);
INSERT INTO activite.t_unites_fonctionnelles(
oid,
code,
code_original,
texte,
texte_court)
SELECT
oid + [IPX],
'[CPX]' || code,
'[TPX]' || code_original,
texte,
texte_court
FROM activite[PX].t_unites_fonctionnelles
WHERE oid <> 0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_unites_fonctionnelles);
UPDATE activite.t_unites_fonctionnelles SET
code = t_unites_fonctionnelles_in.code,
texte = t_unites_fonctionnelles_in.texte,
texte_court = t_unites_fonctionnelles_in.texte_court
FROM activite[PX].t_unites_fonctionnelles t_unites_fonctionnelles_in
WHERE t_unites_fonctionnelles.oid = (t_unites_fonctionnelles_in.oid + [IPX]) AND
(
t_unites_fonctionnelles.code IS DISTINCT FROM t_unites_fonctionnelles_in.code OR
t_unites_fonctionnelles.texte IS DISTINCT FROM t_unites_fonctionnelles_in.texte OR
t_unites_fonctionnelles.texte_court IS DISTINCT FROM t_unites_fonctionnelles_in.texte_court
)
;
-- Activités
INSERT INTO activite.t_activites(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite.t_activites);
INSERT INTO activite.t_activites(
oid,
code,
code_original,
texte,
texte_court)
SELECT
oid + [IPX],
'[CPX]' || code,
'[TPX]' || code_original,
texte,
texte_court
FROM activite[PX].t_activites
WHERE oid <> 0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_activites);
UPDATE activite.t_activites SET
code = t_activites_in.code,
texte = t_activites_in.texte,
texte_court = t_activites_in.texte_court
FROM activite[PX].t_activites t_activites_in
WHERE t_activites.oid = (t_activites_in.oid + [IPX]) AND
(
t_activites.code IS DISTINCT FROM t_activites_in.code OR
t_activites.texte IS DISTINCT FROM t_activites_in.texte OR
t_activites.texte_court IS DISTINCT FROM t_activites_in.texte_court
)
;
-- Etages et lits
INSERT INTO activite.t_etages(oid, code_original, code, texte, texte_court, nb_lits)
SELECT 0, 0, '', 'Non renseigné', 'Non renseigné', 0 WHERE 0 NOT IN (SELECT oid FROM activite.t_etages);
INSERT INTO activite.t_etages(
oid,
code,
code_original,
texte,
texte_court,
nb_lits,
nb_cp)
SELECT
oid + [IPX],
'[CPX]' || code,
'[TPX]' || code_original,
texte,
texte_court,
nb_lits,
nb_cp
FROM activite[PX].t_etages
WHERE oid <> 0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_etages);
UPDATE activite.t_etages SET
code = t_etages_in.code,
texte = t_etages_in.texte,
texte_court = t_etages_in.texte_court
FROM activite[PX].t_etages t_etages_in
WHERE t_etages.oid = (t_etages_in.oid + [IPX]) AND
(
t_etages.code IS DISTINCT FROM t_etages_in.code OR
t_etages.texte IS DISTINCT FROM t_etages_in.texte OR
t_etages.texte_court IS DISTINCT FROM t_etages_in.texte_court
)
;
INSERT INTO activite.t_lits(oid, code_original, code, texte, texte_court, etage_id, chambre_particuliere)
SELECT 0, 0, '', 'Non renseigné', 'Non renseigné', 0, 'N' WHERE 0 NOT IN (SELECT oid FROM activite.t_lits);
-- suppression des anciennes entrées
DELETE FROM activite.t_lits
USING activite[PX].t_lits t_lits_px
WHERE 1=1
AND t_lits.code = '[CPX]' || t_lits_px.code
AND t_lits.etage_id = t_lits_px.etage_id + [IPX]
AND t_lits.oid IS DISTINCT FROM t_lits_px.oid + [IPX];
UPDATE activite.t_lits SET
code = t_lits_px.code || '_BAK',
texte = t_lits_px.texte,
texte_court = t_lits_px.texte_court,
etage_id = CASE WHEN t_lits_px.etage_id <> 0 THEN t_lits_px.etage_id + [IPX] ELSE 0 END
FROM activite[PX].t_lits t_lits_px
WHERE t_lits_px.oid + [IPX] = t_lits.oid AND
(
t_lits.code IS DISTINCT FROM t_lits_px.code OR
t_lits.texte IS DISTINCT FROM t_lits_px.texte OR
t_lits.texte IS DISTINCT FROM t_lits_px.texte OR
t_lits.etage_id IS DISTINCT FROM (CASE WHEN t_lits_px.etage_id <> 0 THEN t_lits_px.etage_id + [IPX] ELSE 0 END)
);
INSERT INTO activite.t_lits(
oid,
code,
code_original,
texte,
texte_court,
chambre_particuliere,
etage_id)
SELECT
oid + [IPX],
'[CPX]' || code,
'[TPX]' || code_original,
texte,
texte_court,
chambre_particuliere,
CASE WHEN etage_id <> 0 THEN etage_id + [IPX] ELSE 0 END AS etage_id
FROM activite[PX].t_lits
WHERE oid <> 0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_lits);
UPDATE activite.t_lits SET
code = t_lits_px.code,
texte = t_lits_px.texte,
texte_court = t_lits_px.texte_court,
etage_id = CASE WHEN t_lits_px.etage_id <> 0 THEN t_lits_px.etage_id + [IPX] ELSE 0 END
FROM activite[PX].t_lits t_lits_px
WHERE t_lits_px.oid + [IPX] = t_lits.oid AND
(
t_lits.code IS DISTINCT FROM t_lits_px.code OR
t_lits.texte IS DISTINCT FROM t_lits_px.texte OR
t_lits.texte IS DISTINCT FROM t_lits_px.texte OR
t_lits.etage_id IS DISTINCT FROM (CASE WHEN t_lits_px.etage_id <> 0 THEN t_lits_px.etage_id + [IPX] ELSE 0 END)
);
]]>
0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_rubriques_facturation);
UPDATE activite.t_rubriques_facturation SET
code = t_rubriques_facturation_in.code,
texte = t_rubriques_facturation_in.texte,
texte_court = t_rubriques_facturation_in.texte_court
FROM activite[PX].t_rubriques_facturation t_rubriques_facturation_in
WHERE t_rubriques_facturation.oid = (t_rubriques_facturation_in.oid + [IPX]) AND
(
t_rubriques_facturation.code IS DISTINCT FROM t_rubriques_facturation_in.code OR
t_rubriques_facturation.texte IS DISTINCT FROM t_rubriques_facturation_in.texte OR
t_rubriques_facturation.texte_court IS DISTINCT FROM t_rubriques_facturation_in.texte_court
)
;
INSERT INTO activite.t_prestations(oid, code_original, code, texte, texte_court, clinique_honoraire)
SELECT 0, 0, '', 'Non renseignée', 'Non renseignée', '' WHERE 0 NOT IN (SELECT oid FROM activite.t_prestations);
INSERT INTO activite[PX].t_prestations(
oid,
code,
code_original,
texte,
texte_court,
clinique_honoraire)
SELECT
oid,
code,
code_original,
texte,
texte_court,
clinique_honoraire
FROM activite.t_prestations
WHERE oid NOT IN (SELECT oid FROM activite[PX].t_prestations) AND
code NOT IN (SELECT code FROM activite[PX].t_prestations);
INSERT INTO activite.t_protocoles(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '***', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECT oid FROM activite.t_protocoles);
UPDATE activite.t_protocoles SET
code = '[CPX]'::text || prot_px.code::text,
texte = prot_px.texte,
texte_court = prot_px.texte
FROM
activite[PX].t_protocoles prot_px
WHERE 1=1
AND t_protocoles.oid = (prot_px.oid + [IPX])
AND ((t_protocoles.code::text <> ('[CPX]'::text || prot_px.code::text)) OR (t_protocoles.texte <> prot_px.texte));
INSERT INTO activite.t_protocoles(
oid,
code,
code_original,
texte,
texte_court)
SELECT
oid + [IPX],
'[CPX]' || code,
'[TPX]' || code_original,
texte,
texte_court
FROM activite[PX].t_protocoles
WHERE oid <> 0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_protocoles);
-- Motifs de non facturation
-- Attention, il y a des codes génériques
DELETE FROM activite.t_motif_non_facturation
USING activite[PX].t_motif_non_facturation t_motif_non_facturation_source
WHERE t_motif_non_facturation.oid = t_motif_non_facturation_source.oid AND
t_motif_non_facturation.code <> t_motif_non_facturation_source.code AND
[IPX] = 0
;
DELETE FROM activite.t_motif_non_facturation
WHERE [IPX] = 0 AND
oid < 100000000000 AND
oid NOT IN (SELECT oid FROM activite[PX].t_motif_non_facturation)
;
INSERT INTO activite.t_motif_non_facturation(
oid,
code,
code_original,
texte,
texte_court)
SELECT
oid + [IPX],
'[CPX]' || code,
CASE WHEN [IPX] = 0 AND code_original LIKE '*CTI%' THEN '' ELSE '[TPX]' END || code_original,
texte,
texte_court
FROM activite[PX].t_motif_non_facturation
WHERE oid <> 0 AND
oid + [IPX] NOT IN (SELECT oid FROM activite.t_motif_non_facturation)
AND '[CPX]' || code NOT IN (SELECT code FROM activite.t_motif_non_facturation)
;
INSERT INTO activite.t_compte(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECt oid FROM activite.t_compte);
INSERT INTO activite.t_compte(
code,
code_original,
texte,
texte_court)
SELECT
code,
code_original,
texte,
texte_court
FROM activite[PX].t_compte
WHERE oid <> 0
AND code_original NOT IN (SELECT code_original FROM activite.t_compte)
;
UPDATE activite.t_compte SET
texte = t_compte_from.texte,
texte_court = t_compte_from.texte_court,
taux_tva = CASE WHEN t_compte_from.taux_tva > 0 THEN t_compte_from.taux_tva ELSE t_compte.taux_tva END
FROM activite[PX].t_compte t_compte_from
WHERE t_compte.code = t_compte_from.code AND
[IPX] = 0 AND
(
t_compte.texte <> t_compte_from.texte OR
t_compte.texte_court <> t_compte_from.texte_court OR
t_compte.taux_tva <> CASE WHEN t_compte_from.taux_tva > 0 THEN t_compte_from.taux_tva ELSE t_compte.taux_tva END
)
;
DROP TABLE IF EXISTS w_correspondances_compte;
CREATE TEMP TABLE w_correspondances_compte AS
SELECT
t_compte_source.oid AS oid_source,
coalesce(t_compte.oid,0) AS oid
FROM activite[PX].t_compte AS t_compte_source
LEFT JOIN activite.t_compte ON t_compte_source.code = t_compte.code AND t_compte_source.code <> '';
CREATE INDEX w_correspondances_compte_1
ON w_correspondances_compte
USING btree
(oid_source);
INSERT INTO activite.t_journal(oid, code_original, code, texte)
SELECT 0, 0, '***', 'Non renseigné' WHERE 0 NOT IN (SELECT oid FROM activite.t_journal);
UPDATE activite.t_journal SET
code = '[CPX]'::text || journal_from.code::text,
texte = journal_from.texte
FROM
activite[PX].t_journal journal_from
WHERE 1=1
AND t_journal.oid = (journal_from.oid + [IPX])
AND ((t_journal.code::text <> ('[CPX]'::text || journal_from.code::text)) OR (t_journal.texte <> journal_from.texte));
INSERT INTO activite.t_journal(
oid,
code,
code_original,
texte)
SELECT
oid + [IPX],
'[CPX]' || code,
'[TPX]' || code_original,
texte
FROM activite[PX].t_journal
WHERE oid <> 0 AND oid + [IPX] NOT IN (SELECT oid FROM activite.t_journal);
INSERT INTO activite.t_risque (oid, code, texte)
SELECT 0, '**', 'Non renseigné' WHERE 0 NOT IN (SELECT oid FROM activite.t_risque);
INSERT INTO activite.t_risque (
code,
texte)
SELECT
t_risque.code,
t_risque.texte
FROM
activite[PX].t_risque
LEFT JOIN activite.t_risque ris ON ris.code = t_risque.code
WHERE t_risque.oid <> 0 AND ris.code IS NULL;
DROP TABLE IF EXISTS w_correspondances_risque;
CREATE TEMP TABLE w_correspondances_risque AS
SELECT
t_risque_source.oid AS oid_source,
coalesce(t_risque.oid,0) AS oid
FROM activite[PX].t_risque AS t_risque_source
LEFT JOIN activite.t_risque ON t_risque_source.code = t_risque.code;
CREATE INDEX w_correspondances_risque_1
ON w_correspondances_risque
USING btree
(oid_source);
]]>
'' AND
p_mouvements_sejour.no_sejour = p_sejours_fusion.no_sejour AND
p_mouvements_sejour.date = p_sejours_fusion.date_entree AND
p_mouvements_sejour.nb_entrees_directes > 0;
UPDATE activite.p_mouvements_sejour SET
no_sejour = p_sejours.no_sejour,
sejour_id = p_sejours.oid,
nb_sorties_directes = 0,
est_dernier_mouvement_jour = CASE WHEN nb_sorties_directes > 0 OR (p_mouvements_sejour.date = p_sejours.date_entree AND p_mouvements_sejour.heure_fin = 240000) THEN '0' ELSE p_mouvements_sejour.est_dernier_mouvement_jour END,
heure_fin = CASE WHEN nb_sorties_directes > 0 OR (p_mouvements_sejour.date = p_sejours.date_entree AND p_mouvements_sejour.heure_fin = 240000) THEN to_char(to_timestamp(to_char(p_sejours.heure_entree,'FM000000'),'HH24MISS')::timestamp without time zone - interval '1 second','HH24MISS')::numeric ELSE p_mouvements_sejour.heure_fin END
FROM activite.t_sejour
JOIN activite.p_sejours ON t_sejour.no_sejour_fusion = p_sejours.no_sejour
WHERE t_sejour.no_sejour_fusion <> '' AND
p_mouvements_sejour.no_sejour = t_sejour.no_sejour AND
(p_mouvements_sejour.date < p_sejours.date_entree OR
(p_mouvements_sejour.date = p_sejours.date_entree AND
p_mouvements_sejour.heure_debut < p_sejours.heure_entree)
);
-- Fusion automatique sur nom, date de naissance (séjours présents chez les deux prestataires avec même date entrée)
DROP TABLE IF EXISTS w_fusion_sejours;
CREATE TEMP TABLE w_fusion_sejours AS
SELECT
p_sejours_1.no_sejour AS no_sejour_source,
p_sejours_1.oid AS oid_source,
p_sejours_1.date_entree AS date_entree_source,
p_patients_1.nom AS nom_source,
p_sejours_2.no_sejour AS no_sejour_cible,
p_sejours_2.oid AS oid_cible,
p_sejours_2.date_entree AS date_entree_cible,
p_patients_2.nom AS nom_cible
FROM activite.p_sejours p_sejours_1
JOIN activite.p_patients p_patients_1 ON p_sejours_1.no_patient = p_patients_1.no_patient
JOIN activite.p_sejours p_sejours_2 ON
p_sejours_1.date_entree = p_sejours_2.date_entree AND
p_sejours_1.no_sejour <> p_sejours_2.no_sejour AND
p_sejours_1.oid >= 200000000000 AND
p_sejours_2.oid < 200000000000 AND
(p_sejours_1.date_sortie = p_sejours_2.date_sortie OR p_sejours_1.code_sorti <> '1')
JOIN activite.p_patients p_patients_2 ON p_sejours_2.no_patient = p_patients_2.no_patient
WHERE
(base.cti_soundex_nom(p_patients_1.nom) = base.cti_soundex_nom(p_patients_2.nom) AND
base.cti_soundex_nom(p_patients_1.prenom) = base.cti_soundex_nom(p_patients_2.prenom) AND
p_patients_1.date_naissance = p_patients_2.date_naissance)
OR
(base.cti_soundex_nom(p_patients_1.nom) = base.cti_soundex_nom(p_patients_2.nom_naissance) AND
base.cti_soundex_nom(p_patients_1.prenom) = base.cti_soundex_nom(p_patients_2.prenom) AND
p_patients_1.date_naissance = p_patients_2.date_naissance)
OR
(upper(p_patients_1.nom) = upper(p_patients_2.nom) AND
p_patients_1.date_naissance = p_patients_2.date_naissance);
-- Fusion automatique sur n° de séjour
INSERT INTO w_fusion_sejours
SELECT
p_sejours_1.no_sejour AS no_sejour_source,
p_sejours_1.oid AS oid_source,
p_sejours_1.date_entree AS date_entree_source,
p_patients_1.nom AS nom_source,
p_sejours_2.no_sejour AS no_sejour_cible,
p_sejours_2.oid AS oid_cible,
p_sejours_2.date_entree AS date_entree_cible,
p_patients_2.nom AS nom_cible
FROM activite.p_sejours p_sejours_1
JOIN activite.p_patients p_patients_1 ON p_sejours_1.no_patient = p_patients_1.no_patient
JOIN activite.p_sejours p_sejours_2 ON
substr(p_sejours_1.no_sejour,4) = p_sejours_2.no_sejour AND
p_sejours_1.oid >= 200000000000 AND
p_sejours_2.oid < 200000000000 AND
(p_sejours_1.date_entree = p_sejours_2.date_entree)
JOIN activite.p_patients p_patients_2 ON p_sejours_2.no_patient = p_patients_2.no_patient
WHERE
p_sejours_1.no_sejour NOT IN (SELECT no_sejour_source FROM w_fusion_sejours) AND
(base.cti_soundex_nom(p_patients_1.nom) = base.cti_soundex_nom(p_patients_2.nom) AND
base.cti_soundex_nom(p_patients_1.prenom) = base.cti_soundex_nom(p_patients_2.prenom) AND
p_patients_1.date_naissance = p_patients_2.date_naissance)
OR
(base.cti_soundex_nom(p_patients_1.nom) = base.cti_soundex_nom(p_patients_2.nom_naissance) AND
base.cti_soundex_nom(p_patients_1.prenom) = base.cti_soundex_nom(p_patients_2.prenom) AND
p_patients_1.date_naissance = p_patients_2.date_naissance)
OR
(upper(p_patients_1.nom) = upper(p_patients_2.nom) AND
p_patients_1.date_naissance = p_patients_2.date_naissance)
OR
(upper(p_patients_1.nom) = 'INDISPONIBLE');
-- Cas des doublons à supprimer complètement de l'ancien prestataire.
INSERT INTO activite.t_divers (code, texte, valeur, description)
SELECT
'FUSION_DELETE',
'Fusion. Suppression sejour ancien prestataire si sejour commun entre deux prestataires',
'0'::text,
''
WHERE 'FUSION_DELETE' NOT IN (SELECT code FROM activite.t_divers);
DELETE FROM activite.p_mouvements_sejour
USING activite.t_divers
WHERE t_divers.code = 'FUSION_DELETE' AND
t_divers.valeur = '1' AND
p_mouvements_sejour.no_sejour IN (SELECT oid_source FROM w_fusion_sejours)
;
DELETE FROM activite.p_sejours_assurance
USING activite.t_divers
WHERE t_divers.code = 'FUSION_DELETE' AND
t_divers.valeur = '1' AND
p_sejours_assurance.sejour_id IN (SELECT no_sejour_source FROM w_fusion_sejours)
;
DELETE FROM activite.p_factures_lignes_c
USING activite.p_factures,
activite.t_divers
WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND
t_divers.code = 'FUSION_DELETE' AND
t_divers.valeur = '1' AND
p_factures.no_sejour IN (SELECT no_sejour_source FROM w_fusion_sejours)
;
DELETE FROM activite.p_factures_lignes_h
USING activite.p_factures,
activite.t_divers
WHERE p_factures_lignes_h.no_facture = p_factures.no_facture AND
t_divers.code = 'FUSION_DELETE' AND
t_divers.valeur = '1' AND
p_factures.no_sejour IN (SELECT no_sejour_source FROM w_fusion_sejours)
;
DELETE FROM activite.p_factures_soldes_c
USING activite.p_factures,
activite.t_divers
WHERE p_factures_soldes_c.no_facture = p_factures.no_facture AND
t_divers.code = 'FUSION_DELETE' AND
t_divers.valeur = '1' AND
p_factures.no_sejour IN (SELECT no_sejour_source FROM w_fusion_sejours)
;
DELETE FROM activite.p_factures_soldes_h
USING activite.p_factures,
activite.t_divers
WHERE p_factures_soldes_h.no_facture = p_factures.no_facture AND
t_divers.code = 'FUSION_DELETE' AND
t_divers.valeur = '1' AND
p_factures.no_sejour IN (SELECT no_sejour_source FROM w_fusion_sejours)
;
DELETE FROM activite.p_factures
USING activite.t_divers
WHERE t_divers.code = 'FUSION_DELETE' AND
t_divers.valeur = '1' AND
p_factures.no_sejour IN (SELECT no_sejour_source FROM w_fusion_sejours)
;
DELETE FROM activite.p_factures_reference
USING activite.t_divers
WHERE t_divers.code = 'FUSION_DELETE' AND
t_divers.valeur = '1' AND
p_factures_reference.no_sejour IN (SELECT no_sejour_source FROM w_fusion_sejours)
;
DELETE FROM activite.p_factures_reference_tiers
USING activite.t_divers
WHERE t_divers.code = 'FUSION_DELETE' AND
t_divers.valeur = '1' AND
p_factures_reference_tiers.no_sejour IN (SELECT no_sejour_source FROM w_fusion_sejours)
;
UPDATE activite.p_factures
SET sejour_id = oid_cible,
no_sejour = no_sejour_cible
FROM w_fusion_sejours
WHERE p_factures.no_sejour = no_sejour_source;
UPDATE activite.p_factures_reference
SET sejour_id = oid_cible,
no_sejour = no_sejour_cible
FROM w_fusion_sejours
WHERE p_factures_reference.no_sejour = no_sejour_source;
UPDATE activite.p_factures_reference_tiers
SET sejour_id = oid_cible,
no_sejour = no_sejour_cible
FROM w_fusion_sejours
WHERE p_factures_reference_tiers.no_sejour = no_sejour_source;
UPDATE activite.p_factures_encours
SET sejour_id = oid_cible
FROM w_fusion_sejours
WHERE p_factures_encours.sejour_id = oid_source;
UPDATE activite.p_factures_lignes_c
SET lieu_id = p_mouvements_sejour.lieu_id
FROM activite.p_factures,
activite.p_mouvements_sejour
WHERE
p_factures_lignes_c.no_facture = p_factures.no_facture AND
p_factures.no_sejour IN (SELECT no_sejour_cible FROM w_fusion_sejours) AND
p_factures.no_sejour = p_mouvements_sejour.no_sejour AND
p_factures_lignes_c.date_fin = p_mouvements_sejour.date AND
(230000 BETWEEN p_mouvements_sejour.heure_debut AND p_mouvements_sejour.heure_fin OR
nb_entrees_directes = 1 AND heure_fin = 240000 OR
nb_sorties_directes = 1 ) AND
p_factures_lignes_c.lieu_id <> p_mouvements_sejour.lieu_id;
UPDATE activite.p_factures_lignes_h
SET lieu_id = p_mouvements_sejour.lieu_id
FROM activite.p_factures,
activite.p_mouvements_sejour
WHERE
p_factures_lignes_h.no_facture = p_factures.no_facture AND
p_factures.no_sejour IN (SELECT no_sejour_cible FROM w_fusion_sejours) AND
p_factures.no_sejour = p_mouvements_sejour.no_sejour AND
p_factures_lignes_h.date_fin = p_mouvements_sejour.date AND
(230000 BETWEEN p_mouvements_sejour.heure_debut AND p_mouvements_sejour.heure_fin OR
nb_entrees_directes = 1 AND heure_fin = 240000 OR
nb_sorties_directes = 1 ) AND
p_factures_lignes_h.lieu_id <> p_mouvements_sejour.lieu_id;
-- Suppression des factures BG qui ont été récupérées 2 fois (on garde celle du provider en cours)
DROP TABLE IF EXISTS w_factures_bg_double;
CREATE TEMP TABLE w_factures_bg_double AS
SELECT no_sejour, (MAX(ARRAY[provider_id::text, no_facture]))[2] AS no_facture_double
FROM activite.p_factures
WHERE no_facture LIKE '%BG' AND
code_facture = '1'
GROUP BY 1
HAVING count(DISTINCT provider_id) > 1
;
ANALYSE w_factures_bg_double
;
INSERT INTO w_factures_bg_double
SELECT no_sejour, no_facture
FROM
(
SELECT
MAX(CASE WHEN no_sejour = replace(no_facture,'.BG','') THEN '' ELSE no_sejour END) AS no_sejour,
MAX(CASE WHEN no_sejour = replace(no_facture,'.BG','') THEN '' ELSE no_facture END) AS no_facture,
CASE WHEN substr(no_facture,3,1) = '_' THEN substr(no_facture,4) ELSE no_facture END AS no_facture_g
FROM activite.p_factures
WHERE no_facture LIKE '%BG' AND
code_facture = '1'
GROUP BY 3
HAVING count(DISTINCT no_sejour) > 1 AND
count(DISTINCT provider_id) > 1 AND
MAX(CASE WHEN no_sejour = replace(no_facture,'.BG','') THEN 1 ELSE 0 END) > 0
) subview
WHERE no_sejour NOT IN (SELECT w_factures_bg_double.no_sejour FROM w_factures_bg_double)
;
-- BG sur ancien prestataire et en cours sur nouveau -> Supprimer encours
INSERT INTO w_factures_bg_double
SELECT no_sejour, (MIN(ARRAY[code_facture, no_facture]))[2] AS no_facture_double
FROM activite.p_factures
WHERE no_facture LIKE '%BG' AND
no_sejour NOT IN (SELECT w_factures_bg_double.no_sejour FROM w_factures_bg_double)
GROUP BY 1
HAVING count(DISTINCT provider_id) > 1 AND MAX(code_facture) = '1'
;
INSERT INTO w_factures_bg_double
SELECT no_sejour, no_facture
FROM
(
SELECT
MAX(CASE WHEN no_sejour = replace(no_facture,'.BG','') THEN '' ELSE no_sejour END) AS no_sejour,
MAX(CASE WHEN no_sejour = replace(no_facture,'.BG','') THEN '' ELSE no_facture END) AS no_facture,
CASE WHEN substr(no_facture,3,1) = '_' THEN substr(no_facture,4) ELSE no_facture END AS no_facture_g
FROM activite.p_factures
WHERE no_facture LIKE '%BG'
GROUP BY 3
HAVING count(DISTINCT no_sejour) > 1 AND
count(DISTINCT provider_id) > 1 AND
MAX(CASE WHEN no_sejour = replace(no_facture,'.BG','') THEN 1 ELSE 0 END) > 0
) subview
WHERE no_sejour NOT IN (SELECT w_factures_bg_double.no_sejour FROM w_factures_bg_double)
;
ANALYSE w_factures_bg_double
;
DELETE FROM activite.p_factures
USING w_factures_bg_double
WHERE no_facture = no_facture_double
;
DELETE FROM activite.p_factures_lignes_c
USING w_factures_bg_double
WHERE no_facture = no_facture_double
;
DELETE FROM activite.p_factures_lignes_h
USING w_factures_bg_double
WHERE no_facture = no_facture_double
;
-- Suppression encours calculés chez les deux prestataires pour même séjour
UPDATE activite.p_factures
SET type_facture = 'E'
FROM activite.t_providers
WHERE provider_id = t_providers.oid AND
t_providers.code ILIKE 'SH' AND
code_facture = '0' AND type_facture = '0'
;
DROP TABLE IF EXISTS w_factures_encours_trop;
CREATE TEMP TABLE w_factures_encours_trop AS
SELECT p_factures.no_sejour
FROM activite.p_factures
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour AND p_sejours.provider_id = 0
GROUP BY 1
HAVING count(DISTINCT CASE WHEN type_facture = 'E' AND p_factures.provider_id > 0 THEN no_facture ELSE NULL END) > 0 AND
count(DISTINCT CASE WHEN p_factures.provider_id = 0 THEN no_facture ELSE NULL END) > 0 AND
count(DISTINCT CASE WHEN p_factures.provider_id > 0 THEN no_facture ELSE NULL END) > 0
ORDER BY 1;
-- Transfert des lignes non facturées sur les autres factures
UPDATE activite.p_factures_lignes_non_facturees_c SET
no_facture = p_factures_0.no_facture,
facture_id = p_factures_0.oid
FROM activite.p_factures p_factures_2
JOIN w_factures_encours_trop ON w_factures_encours_trop.no_sejour = p_factures_2.no_sejour
JOIN activite.p_factures p_factures_0 ON p_factures_2.no_sejour = p_factures_0.no_sejour AND
p_factures_0.provider_id = 0 AND
p_factures_0.type_facture = 'E'
WHERE p_factures_lignes_non_facturees_c.no_facture = p_factures_2.no_facture AND
p_factures_2.provider_id > 0 AND
p_factures_2.type_facture = 'E' AND
p_factures_lignes_non_facturees_c.date_debut BETWEEN p_factures_0.date_debut AND p_factures_0.date_fin AND
p_factures_0.no_facture || '-' || p_factures_lignes_non_facturees_c.prestation_id NOT IN
(SELECT p_factures_lignes_non_facturees_c.no_facture || '-' || p_factures_lignes_non_facturees_c.prestation_id
FROM activite.p_factures_lignes_non_facturees_c)
;
-- Suppression lignes en trop
DELETE
FROM activite.p_factures_lignes_c
USING activite.p_factures
WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND
p_factures.type_facture = 'E' AND
p_factures.provider_id > 0 AND
p_factures.no_sejour IN (SELECT no_sejour FROM w_factures_encours_trop);
-- Suppression factures en cours en trop
DELETE
FROM activite.p_factures
WHERE no_sejour IN (SELECT no_sejour FROM w_factures_encours_trop) AND
p_factures.type_facture = 'E' AND
p_factures.provider_id > 0;
-- Suppression factures en cours prestataire actuel qui ont été facturées par le précédent
DROP TABLE IF EXISTS w_factures_encours_trop;
CREATE TEMP TABLE w_factures_encours_trop AS
SELECT p_factures.no_sejour,
MIN(CASE WHEN p_factures.provider_id > 0 AND code_facture = '1' THEN date_debut ELSE null END) AS date_debut,
MAX(CASE WHEN p_factures.provider_id > 0 AND code_facture = '1' THEN date_fin ELSE null END) AS date_fin
FROM activite.p_factures
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour AND p_sejours.provider_id = 0
GROUP BY 1
HAVING count(DISTINCT CASE WHEN type_facture = 'E' AND p_factures.provider_id = 0 THEN no_facture ELSE NULL END) > 0 AND
count(DISTINCT CASE WHEN type_facture <> 'E' AND p_factures.provider_id > 0 THEN no_facture ELSE NULL END) > 0 AND
MIN(CASE WHEN p_factures.provider_id = 0 AND code_facture <> '1' THEN date_debut ELSE null END) <=
MAX(CASE WHEN p_factures.provider_id > 0 AND code_facture = '1' THEN date_fin ELSE null END)
ORDER BY 1;
DELETE
FROM activite.p_factures_lignes_c
USING activite.p_factures
JOIN w_factures_encours_trop ON w_factures_encours_trop.no_sejour = p_factures.no_sejour AND
p_factures.date_debut < w_factures_encours_trop.date_fin
WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND
p_factures.type_facture = 'E' AND
p_factures.provider_id = 0 ;
DELETE
FROM activite.p_factures
USING w_factures_encours_trop
WHERE w_factures_encours_trop.no_sejour = p_factures.no_sejour AND
p_factures.date_debut < w_factures_encours_trop.date_fin AND
p_factures.type_facture = 'E' AND
p_factures.provider_id = 0;
DELETE FROM activite.p_sejours WHERE no_sejour IN (SELECT no_sejour_source FROM w_fusion_sejours);
DELETE FROM activite.p_mouvements_sejour WHERE no_sejour IN (SELECT no_sejour_source FROM w_fusion_sejours);
DELETE FROM activite.p_sejours_assurance WHERE sejour_id IN (SELECT oid_source FROM w_fusion_sejours);
-- Si séjours en double complet, les factures ont été supprimées et donc le chiffrier ne veux plus rien dire
UPDATE activite.p_chiffrier_comptable SET
montant_ventes_c = 0,
montant_ventes_h = 0,
montant_reglements_c = 0,
montant_reglements_h = 0,
montant_solde_client_c = 0,
montant_solde_client_h = 0
FROM activite.t_divers
WHERE t_divers.code = 'FUSION_DELETE' AND
t_divers.valeur = '1' AND
provider_id = 2
;
]]>
0 AND
substr(p_factures_encours.no_sejour,3,1) <> '_'
;
]]>
= date_entree
AND date_sortie < '2099-12-31'::date
GROUP BY 2
ORDER BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'c_postaux', code_postal_id
FROM activite.p_sejours
WHERE code_postal_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'c_postaux')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'medecin_s', medecin_sejour_id
FROM activite.p_sejours
WHERE medecin_sejour_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'medecin_s')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'medecin_s', medecin_sejour_id
FROM activite.p_mouvements_sejour
WHERE medecin_sejour_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'medecin_s')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'ghs', ghs_id
FROM activite.p_sejours
WHERE ghs_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'ghs')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'ghs', ghs_id
FROM activite.p_factures
WHERE ghs_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'ghs')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'medecin_x', medecin_facture_id
FROM activite.p_factures_lignes_h
WHERE medecin_facture_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'medecin_x')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'rubrique_c', rubrique_facturation_id
FROM activite.p_factures_lignes_c WHERE rubrique_facturation_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'rubrique_c')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'rubrique_c', rubrique_comptabilisation_id
FROM activite.p_factures_lignes_c WHERE rubrique_comptabilisation_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'rubrique_c')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'rubrique_c', rubrique_comptabilisee_id
FROM activite.p_factures_soldes_c WHERE rubrique_comptabilisee_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'rubrique_c')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'prestation_c', prestation_id
FROM activite.p_factures_lignes_c WHERE prestation_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'prestation_c')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'prestation_c', prestation_id
FROM activite.p_factures_soldes_c WHERE prestation_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'prestation_c')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'prestation_h', prestation_id
FROM activite.p_factures_lignes_h WHERE prestation_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'prestation_h')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'acte_h', acte_id
FROM activite.p_factures_lignes_h WHERE acte_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'acte_h')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'protocole_h', protocole_id
FROM activite.p_factures_lignes_h
WHERE protocole_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'protocole_h')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'tiers_payant', tiers_payant_0_id
FROM activite.p_factures WHERE tiers_payant_0_id <> 0 AND tiers_payant_0_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'tiers_payant')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'tiers_payant', tiers_payant_1_id
FROM activite.p_factures WHERE tiers_payant_1_id <> 0 AND tiers_payant_1_id NOT IN (SELECT oid
FROM activite.p_oids WHERE code_table = 'tiers_payant')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'tiers_payant', tiers_payant_2_id
FROM activite.p_factures WHERE tiers_payant_2_id <> 0 AND tiers_payant_2_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'tiers_payant')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'tiers_payant', tiers_payant_22_id
FROM activite.p_factures WHERE tiers_payant_22_id <> 0 AND tiers_payant_22_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'tiers_payant')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'mode_traitement', t_services_facturation.mode_traitement_id
FROM activite.t_lieux JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid
WHERE
t_services_facturation.mode_traitement_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'mode_traitement' AND oid IS NOT NULL) AND t_services_facturation.mode_traitement_id IS NOT NULL
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'lit', lit_id
FROM activite.t_lieux WHERE lit_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'lit')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'service', service_facturation_id
FROM activite.t_lieux WHERE service_facturation_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'service')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'etage', etage_id
FROM activite.t_lieux, activite.t_lits WHERE lit_id = t_lits.oid AND etage_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'etage')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'uf', unite_fonctionnelle_id
FROM activite.t_lieux WHERE unite_fonctionnelle_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'uf')
GROUP BY 2;
INSERT INTO activite.p_oids (code_table, oid)
SELECT 'um', unite_medicale_id
FROM activite.t_lieux WHERE unite_medicale_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'um')
GROUP BY 2;
INSERT INTO activite[PX].p_oids (code_table, oid)
SELECT 'medecin_t', medecin_traitant_id
FROM activite[PX].p_sejours
WHERE medecin_traitant_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'medecin_t')
GROUP BY 2;
]]>