0 LEFT JOIN base.t_ghm ON ghm_code = t_ghm.code LEFT JOIN base.t_ghs ON ghs_code = t_ghs.code LEFT JOIN base.t_codes_postaux ON w_ASSURES.CP = t_codes_postaux.code WHERE OK = 'O' ; SELECT base.cti_disable_index('activite[PX]', 'i_sejours_2'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_3'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_4'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_5'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_6'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_7'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_8'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_9'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_10'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_11'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_12'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_13'); -- Forcage type selon séjour UPDATE w_sejours SET type_sejour = t_sejour.type_sejour::int FROM activite.t_sejour WHERE t_sejour.no_sejour = w_sejours.no_sejour AND t_sejour.type_sejour IN ('1','2','3','4','5','6','9') AND t_sejour.type_sejour is not NULL ; INSERT INTO activite[PX].p_sejours ( no_sejour, code_original, no_patient, date_entree, heure_entree, date_sortie, heure_sortie, code_sexe, age, code_sorti, code_prevu, type_sejour, code_postal_id, medecin_sejour_id, date_groupage, code_cp_demandee, mode_traitement_id, mode_entree, provenance, mode_sortie, destination, ghm_id, ghs_id, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, est_budget_global, finess ) SELECT w_sejours.no_sejour, w_sejours.code_original, w_sejours.no_patient, w_sejours.date_entree, w_sejours.heure_entree, w_sejours.date_sortie, w_sejours.heure_sortie, w_sejours.code_sexe::char(1), w_sejours.age, w_sejours.code_sorti, w_sejours.code_prevu, w_sejours.type_sejour::char(1), w_sejours.code_postal_id, w_sejours.medecin_sejour_id, w_sejours.date_groupage, w_sejours.type_sejour::char(1), w_sejours.mode_traitement_id, w_sejours.mode_entree::char(1), w_sejours.provenance::char(1), w_sejours.mode_sortie::char(1), w_sejours.destination::char(1), w_sejours.ghm_id, w_sejours.ghs_id, w_sejours.tiers_payant_0_id, w_sejours.tiers_payant_1_id, w_sejours.tiers_payant_2_id, w_sejours.tiers_payant_22_id, w_sejours.est_budget_global, w_sejours.finess FROM w_sejours ; ANALYSE activite.p_sejours ; -- Séjours ignorés UPDATE activite[PX].p_sejours SET etat = 'I' FROM activite.t_sejour WHERE t_sejour.no_sejour = p_sejours.no_sejour AND est_ignore = '1' AND etat <> 'I' AND '[PX]' = ''; -- GHM selon ghs dialyse UPDATE activite.p_sejours SET ghm_id = t_ghm.oid FROM base.t_ghs, base.t_ghm WHERE ghs_id = t_ghs.oid AND t_ghm.code = '28Z04Z' AND p_sejours.ghm_id = 0 ; -- Médecin séjour forcé UPDATE activite[PX].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 AND '[PX]' = ''; -- recréation index SELECT base.cti_enable_index('activite[PX]', 'i_sejours_2'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_3'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_4'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_5'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_6'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_7'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_8'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_9'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_10'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_11'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_12'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_13'); -- assurance SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_1'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_2'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_3'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_4'); INSERT INTO activite.p_sejours_assurance( sejour_id, tiers_payant_0_id, tiers_payant_1_id, matricule_1, tiers_payant_2_id, matricule_2, tiers_payant_22_id, matricule_22) SELECT oid AS sejour_id, p_sejours.tiers_payant_0_id, p_sejours.tiers_payant_1_id, NUM_SECU, p_sejours.tiers_payant_2_id, '', p_sejours.tiers_payant_22_id, ''::text AS matricule_22 FROM w_ASSURES JOIN activite.p_sejours ON code_original = NUM_PAT AND p_sejours.etat = ''; SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_1'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_2'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_3'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_4'); ]]> 1 ) subview WHERE w_mouvements_sejour.no_sejour = subview.no_sejour AND w_mouvements_sejour.date = subview.date AND w_mouvements_sejour.heure_debut = subview.heure_debut ; DELETE FROM w_mouvements_sejour USING ( SELECT no_sejour, date, heure_debut, MAX(CTID) AS fromCTID FROM w_mouvements_sejour GROUP BY 1,2,3 HAVING count(*) > 1) subview WHERE 1=1 AND subview.no_sejour = w_mouvements_sejour.no_sejour AND subview.date = w_mouvements_sejour.date AND subview.heure_debut = w_mouvements_sejour.heure_debut AND subview.fromCTID != w_mouvements_sejour.CTID; -- Mise en production des mouvements SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_1'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_2'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_3'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_4'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_5'); INSERT INTO activite.p_mouvements_sejour( sejour_id, no_sejour, date, est_mouvement_previsionnel, nb_jours_js_non_inclus, lieu_id, nb_entrees_directes, nb_sorties_directes, nb_urgences, nb_externes, nb_ambulatoires, 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, nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes, jour_semaine, is_weekend) SELECT sejour_id, no_sejour, date, est_mouvement_previsionnel ,nb_jours_js_non_inclus, lieu_id, nb_entrees_directes, nb_sorties_directes, nb_urgences, nb_externes, nb_ambulatoires, 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, nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes, jour_semaine, is_weekend FROM w_mouvements_sejour WHERE heure_fin >= heure_debut ORDER BY no_sejour; SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_1'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_2'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_3'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_4'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_5'); ANALYSE activite.p_mouvements_sejour ; -- Ajout des séances non rapportées par la facturation selon la présence par jour des 28 derniers jours DROP TABLE IF EXISTS w_sejours_seances; CREATE TEMP TABLE w_sejours_seances AS SELECT p_mouvements_sejour.no_sejour, date_part('dow',date) AS jour_semaine, (MAX(ARRAY[date::text,lieu_id::text]))[2]::bigint AS lieu_id, date(MAX(date_max + interval '1 day')) AS date_first, count(*), max(date_max) FROM activite.p_mouvements_sejour JOIN ( SELECT p_mouvements_sejour.no_sejour, MAX(date) AS date_max FROM activite.p_mouvements_sejour JOIN activite.p_sejours ON p_mouvements_sejour.no_sejour = p_sejours.no_sejour WHERE nb_seances > 0 AND code_sorti = 0 GROUP BY 1 ) subview ON p_mouvements_sejour.no_sejour = subview.no_sejour AND p_mouvements_sejour.date > date(date_max - interval '28 days') WHERE nb_seances > 0 GROUP BY 1,2 HAVING count(*) >= 3 ORDER BY 1,2,3 ; ANALYSE w_sejours_seances ; UPDATE w_sejours_seances SET jour_semaine = 7 WHERE jour_semaine = 0 ; INSERT INTO activite.p_mouvements_sejour( sejour_id, no_sejour, date, est_mouvement_previsionnel, nb_jours_js_non_inclus, lieu_id, nb_entrees_directes, nb_sorties_directes, nb_urgences, nb_externes, nb_ambulatoires, 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, nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes, jour_semaine, is_weekend) SELECT p_sejours.oid AS sejour_id, w_sejours_seances.no_sejour, p_calendrier.date, '0' AS est_mouvement_previsionnel , 0 AS nb_jours_js_non_inclus, w_sejours_seances.lieu_id, 0 AS nb_entrees_directes, 0 AS nb_sorties_directes, 0 AS nb_urgences, 0 AS nb_externes, 0 AS nb_ambulatoires, p_sejours.medecin_sejour_id, 0 AS nb_jours_js_inclus, 1 AS nb_seances, 0 AS nb_entrees_mutation_service, 0 AS nb_sorties_mutation_service, 0 AS nb_entrees_mutation_activite, 0 AS nb_sorties_mutation_activite, 0 AS nb_entrees_mutation_etage, 0 AS nb_sorties_mutation_etage, 0 AS nb_chambres_particulieres, 080000 AS heure_debut, 180000 AS heure_fin, '0' AS est_jour_entree, '0' AS est_jour_sortie, '0' AS est_jour_hospitalisation, '0' AS est_chambre_particuliere, 0 AS nb_entrees_mutation_unite_medicale, 0 AS nb_sorties_mutation_unite_medicale, 0 AS nb_bebes, p_calendrier.jour_semaine, p_calendrier.is_weekend FROM w_sejours_seances JOIN activite.p_sejours ON w_sejours_seances.no_sejour = p_sejours.no_sejour JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_first AND date(now()) AND p_calendrier.jour_semaine = w_sejours_seances.jour_semaine ; -- Lieux de sortie UPDATE activite.p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id FROM activite.p_mouvements_sejour WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.date = p_sejours.date_sortie AND (lieu_sortie_id <> p_mouvements_sejour.lieu_id OR lieu_sortie_id IS NULL); UPDATE activite.p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id FROM activite.p_mouvements_sejour WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.date = p_sejours.date_sortie AND p_mouvements_sejour.nb_sorties_directes = 1 AND (lieu_sortie_id <> p_mouvements_sejour.lieu_id OR lieu_sortie_id IS NULL); UPDATE activite.p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id FROM activite.p_mouvements_sejour WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND (p_sejours.lieu_sortie_id = 0 OR lieu_sortie_id IS NULL) ; UPDATE activite.p_sejours SET lieu_sortie_id = 0 WHERE lieu_sortie_id IS NULL ; UPDATE activite.p_sejours SET lieu_sortie_id = 0 WHERE p_sejours.code_prevu = '1' AND (p_sejours.lieu_sortie_id = 0 OR lieu_sortie_id IS NULL); ]]> '6' AND p_sejours.type_sejour <> '9' GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13; INSERT INTO activite[PX].p_factures( finess, no_sejour, no_facture, no_facture_reference, type_facture, code_facture, date_facture, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee, ghs_id, date_debut, date_fin) SELECT finess, no_sejour, 'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || substr(p_calendrier.mois,3,4) ELSE '' END, 'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || substr(p_calendrier.mois,3,4) ELSE '' END, 'E', '0', '20991231'::date, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee , ghs_id, MIN(GREATEST(date_debut_encours, p_calendrier.date)), MAX(LEAST(date_fin_encours, p_calendrier.date, CASE WHEN avec_facturation_intermediaire = '1' THEN date(date_trunc('month',p_calendrier.date) + interval '1 month' - interval '1 day') ELSE NULL END)) FROM w_factures_trous JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_debut_encours AND date_fin_encours WHERE (date_debut_encours <= date_fin_encours or date_fin_facture is null) GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13 HAVING MIN(GREATEST(date_debut_encours, p_calendrier.date)) >= '[ENV_ADM_ANNEEDEBUT]0101' ; UPDATE activite[PX].p_factures SET date_debut = date_entree, date_fin = CASE WHEN code_sorti = 1 THEN date_sortie ELSE date_fin END FROM activite[PX].p_sejours JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid AND avec_facturation_intermediaire IS DISTINCT FROM '1' WHERE p_factures.no_sejour = p_sejours.no_sejour AND CASE WHEN code_sorti = 1 THEN date_sortie ELSE date(now()) END - date_entree < 30 AND ( p_factures.date_debut <> date_entree OR p_factures.date_fin <> CASE WHEN code_sorti = 1 THEN date_sortie ELSE date_fin END ); ]]> 0 THEN PRIX_UNIT / PRIX_UNIT_NATIONAL ELSE 1 END AS coefficient_mco, COALESCE(W_RUBRIQUE_FACTUR_source.rubrique_facturation_id,0) AS rubrique_facturation_id, COALESCE(W_RUBRIQUE_FACTUR_source.rubrique_facturation_id,0) AS rubrique_comptabilisation_id, COALESCE(W_RUBRIQUE_FACTUR_source.compte_produit_id,0) AS compte_produit_id, COALESCE(W_RUBRIQUE_FACTUR_source.prestation_id,0) AS prestation_id, MT_FACT AS montant_facture, PART_ASS AS montant_facture_0, PART_CAISSE AS montant_facture_1, PART_MUT AS montant_facture_2, 0::numeric AS montant_facture_22, round(base.cti_division(PART_ASS,MT_FACT)*100.0,0) AS taux_0, round(base.cti_division(PART_CAISSE,MT_FACT)*100.0,0) AS taux_1, round(base.cti_division(PART_MUT,MT_FACT)*100.0,0) AS taux_2, 0::numeric AS taux_22, CASE WHEN PRIX_UNIT_NATIONAL > 0 THEN PRIX_UNIT_NATIONAL ELSE PRIX_UNIT END AS prix_unitaire, COALESCE(t_lieux.oid,0) AS lieu_id, MT_FACT AS montant_comptabilise, PART_ASS AS montant_comptabilise_0, PART_CAISSE AS montant_comptabilise_1, PART_MUT AS montant_comptabilise_2, 0::numeric AS montant_comptabilise_22, 0, 0, 0, 0, 0, 1::integer AS origine_facturation_id, 0::numeric AS montant_facture_actes_inclus_dans_sejour, 0::numeric AS montant_facture_0_actes_inclus_dans_sejour, 0::numeric AS montant_facture_1_actes_inclus_dans_sejour, 0::numeric AS montant_facture_2_actes_inclus_dans_sejour, 0::numeric AS montant_facture_22_actes_inclus_dans_sejour FROM w_LIGNES_FACTURES JOIN activite.p_factures ON w_LIGNES_FACTURES.NUM_FACT = p_factures.no_facture JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour LEFT JOIN w_RUBRIQUE_FACTUR_source ON w_RUBRIQUE_FACTUR_source.NUM_ACTE = w_LIGNES_FACTURES.NUM_ACTE LEFT JOIN activite.t_lieux ON t_lieux.code_original_1 = w_LIGNES_FACTURES.service_facturation_code_original AND t_lieux.code_original_2 = '' AND t_lieux.code_original_4 = '' AND t_lieux.code_original_5 = w_LIGNES_FACTURES.unite_fonctionnelle_code_original AND t_lieux.code_original_6 = w_LIGNES_FACTURES.unite_fonctionnelle_code_original WHERE w_LIGNES_FACTURES.HONO_SEJ = 'false' ; SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_2'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_5'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_6'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_7'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_8'); ANALYSE activite.p_factures_lignes_c ; SELECT activite[PX].cti_reorganize_rubrique_facture_c('activite.p_factures_lignes_c'); -- Eclatement des supplements par jour DROP TABLE IF EXISTS w_factures_lignes_sup_c; CREATE TEMP TABLE w_factures_lignes_sup_c AS SELECT p_factures_lignes_c.CTID AS from_CTID, t_prestations.code AS prestation_code, CASE WHEN p_sejours.type_sejour <> '5' THEN date(p_sejours.date_entree) ELSE p_factures_lignes_c.date_debut END AS date_debut_ghs, CASE WHEN p_sejours.type_sejour <> '5' THEN date(p_sejours.date_sortie - interval '1 day') ELSE p_factures_lignes_c.date_fin END AS date_fin_ghs, (date(date_sortie) - date(date_entree)) * CASE WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation_ghs, CASE WHEN type_sejour = '5' THEN p_factures_lignes_c.date_debut WHEN t_prestations.code = 'GHS' THEN date(date_entree + interval '1 day') ELSE date(p_factures_lignes_c.date_debut + interval '1 day') END AS date_debut_det, CASE WHEN type_sejour = '5' THEN p_factures_lignes_c.date_fin WHEN t_prestations.code = 'GHS' THEN date(p_sejours.date_sortie - interval '1 day') ELSE date(p_factures_lignes_c.date_debut + ((ABS(nb_prestation)-1) || ' day')::interval) END AS date_fin_det, ABS(CASE WHEN type_sejour <> '5' AND t_prestations.code = 'GHS' THEN date(date_sortie) - date(date_entree) ELSE nb_prestation END) AS nb_det, p_factures_lignes_c.* FROM activite[PX].p_factures_lignes_c JOIN activite[PX].p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code IN ('PJ', 'PJ1', 'PJ2', 'FJ', 'SSM', 'GHS', 'EXH', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO') WHERE (nb_prestation > 1 or nb_prestation < -1 OR (type_sejour <> '5' AND t_prestations.code = 'GHS' AND date(date_sortie) - date(date_entree) > 1)) ; UPDATE w_factures_lignes_sup_c SET date_fin_ghs = date(date_debut_exh - interval '1 day'), date_fin_det = date(date_debut_exh - interval '1 day'), nb_prestation_ghs = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1, nb_det = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1 FROM ( SELECT no_facture, date(MIN(date_debut)) AS date_debut_exh FROM activite[PX].p_factures_lignes_c JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code = 'EXH' GROUP BY 1) subview WHERE w_factures_lignes_sup_c.no_facture = subview.no_facture; CREATE INDEX w_factures_lignes_sup_c_i1 ON w_factures_lignes_sup_c USING btree (date_debut); DROP TABLE IF EXISTS w_factures_lignes_sup_c_sup; CREATE TEMP TABLE w_factures_lignes_sup_c_sup AS SELECT from_CTID, no_facture, date AS date_debut, date AS date_fin, CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_rubrique, CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, round(montant_facture / ABS(nb_det),2) AS montant_facture, round(montant_facture_0 / ABS(nb_det),2) AS montant_facture_0, round(montant_facture_1 / ABS(nb_det),2) AS montant_facture_1, round(montant_facture_2 / ABS(nb_det),2) AS montant_facture_2, round(montant_facture_22 / ABS(nb_det),2) AS montant_facture_22, taux_0, taux_1, taux_2, taux_22, finess, prix_unitaire, lieu_id, round(montant_comptabilise / ABS(nb_det),2) AS montant_comptabilise, round(montant_comptabilise_0 / ABS(nb_det),2) AS montant_comptabilise_0, round(montant_comptabilise_1 / ABS(nb_det),2) AS montant_comptabilise_1, round(montant_comptabilise_2 / ABS(nb_det),2) AS montant_comptabilise_2, round(montant_comptabilise_22 / ABS(nb_det),2) AS montant_comptabilise_22, round(montant_encours / ABS(nb_det),2) AS montant_encours, round(montant_encours_0 / ABS(nb_det),2) AS montant_encours_0, round(montant_encours_1 / ABS(nb_det),2) AS montant_encours_1, round(montant_encours_2 / ABS(nb_det),2) AS montant_encours_2, round(montant_encours_22 / ABS(nb_det),2) AS montant_encours_22, round(montant_facture_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_actes_inclus_dans_sejour, round(montant_facture_0_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_0_actes_inclus_dans_sejour, round(montant_facture_1_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_1_actes_inclus_dans_sejour, round(montant_facture_2_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_2_actes_inclus_dans_sejour, round(montant_facture_22_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_22_actes_inclus_dans_sejour, origine_facturation_id, round(montant_comptabilise_budget_global_1 / ABS(nb_det),2) AS montant_comptabilise_budget_global_1, facture_id FROM w_factures_lignes_sup_c JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_debut_det AND date_fin_det ; DROP TABLE IF EXISTS w_factures_lignes_sup_c_sup_tot; CREATE TEMP TABLE w_factures_lignes_sup_c_sup_tot AS SELECT from_CTID, SUM(nb_rubrique) AS nb_rubrique, SUM(nb_prestation) AS nb_prestation, SUM(montant_facture) AS montant_facture, SUM(montant_facture_0) AS montant_facture_0, SUM(montant_facture_1) AS montant_facture_1, SUM(montant_facture_2) AS montant_facture_2, SUM(montant_facture_22) AS montant_facture_22, SUM(montant_comptabilise) AS montant_comptabilise, SUM(montant_comptabilise_0) AS montant_comptabilise_0, SUM(montant_comptabilise_1) AS montant_comptabilise_1, SUM(montant_comptabilise_2) AS montant_comptabilise_2, SUM(montant_comptabilise_22) AS montant_comptabilise_22, SUM(montant_encours) AS montant_encours, SUM(montant_encours_0) AS montant_encours_0, SUM(montant_encours_1) AS montant_encours_1, SUM(montant_encours_2) AS montant_encours_2, SUM(montant_encours_22) AS montant_encours_22, SUM(montant_facture_actes_inclus_dans_sejour) AS montant_facture_actes_inclus_dans_sejour, SUM(montant_facture_0_actes_inclus_dans_sejour) AS montant_facture_0_actes_inclus_dans_sejour, SUM(montant_facture_1_actes_inclus_dans_sejour) AS montant_facture_1_actes_inclus_dans_sejour, SUM(montant_facture_2_actes_inclus_dans_sejour) AS montant_facture_2_actes_inclus_dans_sejour, SUM(montant_facture_22_actes_inclus_dans_sejour) AS montant_facture_22_actes_inclus_dans_sejour, SUM(montant_comptabilise_budget_global_1) AS montant_comptabilise_budget_global_1 FROM w_factures_lignes_sup_c_sup GROUP BY 1; UPDATE activite[PX].p_factures_lignes_c SET date_fin = p_factures_lignes_c.date_debut, nb_rubrique = p_factures_lignes_c.nb_rubrique - w_factures_lignes_sup_c_sup_tot.nb_rubrique, nb_prestation = p_factures_lignes_c.nb_prestation - w_factures_lignes_sup_c_sup_tot.nb_prestation, montant_facture = p_factures_lignes_c.montant_facture - w_factures_lignes_sup_c_sup_tot.montant_facture, montant_facture_0 = p_factures_lignes_c.montant_facture_0 - w_factures_lignes_sup_c_sup_tot.montant_facture_0, montant_facture_1 = p_factures_lignes_c.montant_facture_1 - w_factures_lignes_sup_c_sup_tot.montant_facture_1, montant_facture_2 = p_factures_lignes_c.montant_facture_2 - w_factures_lignes_sup_c_sup_tot.montant_facture_2, montant_facture_22 = p_factures_lignes_c.montant_facture_22 - w_factures_lignes_sup_c_sup_tot.montant_facture_22, montant_comptabilise = p_factures_lignes_c.montant_comptabilise - w_factures_lignes_sup_c_sup_tot.montant_comptabilise, montant_comptabilise_0 = p_factures_lignes_c.montant_comptabilise_0 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_0, montant_comptabilise_1 = p_factures_lignes_c.montant_comptabilise_1 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_1, montant_comptabilise_2 = p_factures_lignes_c.montant_comptabilise_2 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_2, montant_comptabilise_22 = p_factures_lignes_c.montant_comptabilise_22 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_22, montant_encours = p_factures_lignes_c.montant_encours - w_factures_lignes_sup_c_sup_tot.montant_encours, montant_encours_0 = p_factures_lignes_c.montant_encours_0 - w_factures_lignes_sup_c_sup_tot.montant_encours_0, montant_encours_1 = p_factures_lignes_c.montant_encours_1 - w_factures_lignes_sup_c_sup_tot.montant_encours_1, montant_encours_2 = p_factures_lignes_c.montant_encours_2 - w_factures_lignes_sup_c_sup_tot.montant_encours_2, montant_encours_22 = p_factures_lignes_c.montant_encours_22 - w_factures_lignes_sup_c_sup_tot.montant_encours_22, montant_facture_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_0_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_1_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_2_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_22_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_22_actes_inclus_dans_sejour, montant_comptabilise_budget_global_1 = p_factures_lignes_c.montant_comptabilise_budget_global_1 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_budget_global_1 FROM w_factures_lignes_sup_c_sup_tot WHERE p_factures_lignes_c.CTID = from_CTID; -- Rubriques internes cti SELECT activite[PX].cti_reorganize_rubrique_facture_c('w_factures_lignes_sup_c_sup'); INSERT INTO activite[PX].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, 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) SELECT 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, 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 FROM w_factures_lignes_sup_c_sup; DROP TABLE IF EXISTS w_mouvements_sejour_lieu_jour; CREATE TEMP TABLE w_mouvements_sejour_lieu_jour AS SELECT no_sejour, date, (MAX(CASE WHEN est_absence <> '1' THEN Array[heure_fin, lieu_id] ELSE NULL END))[2] AS lieu_id, (MAX(Array[heure_fin, lieu_id]))[2] AS lieu_id_avec_absence FROM activite[PX].p_mouvements_sejour JOIN activite[PX].t_lieux ON lieu_id = t_lieux.oid JOIN activite[PX].t_services_facturation On service_facturation_id = t_services_facturation.oid GROUP BY 1,2 ; UPDATE activite[PX].p_factures_lignes_c SET lieu_id = COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence) FROM activite[PX].p_factures, w_mouvements_sejour_lieu_jour WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND p_factures.no_sejour = w_mouvements_sejour_lieu_jour.no_sejour AND p_factures_lignes_c.date_debut = w_mouvements_sejour_lieu_jour.date AND p_factures_lignes_c.lieu_id = 0 ; ]]> 0 AND code_sorti = 0 AND t_prestations.code <> 'GHS' AND t_prestations.code NOT LIKE 'D%' AND p_factures_lignes_c.date_fin > date(date_extraction - interval '56 days') GROUP BY 1 ) subview ON p_factures.no_sejour = subview.no_sejour AND p_factures_lignes_c.date_fin > date(date_max - interval '28 days') WHERE montant_facture > 0 AND t_prestations.code <> 'GHS' AND t_prestations.code NOT LIKE 'D%' GROUP BY 1,2,3,4,5 HAVING count(*) >= 3 ORDER BY 6,1,2,3 ; ANALYSE w_prestations_jour ; INSERT INTO activite.p_factures_lignes_non_facturees_c( no_facture, date_debut, date_fin, nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, prix_unitaire, lieu_id) SELECT p_factures.no_facture, p_calendrier.date AS date_debut, p_calendrier.date AS date_fin, 1::numeric AS nb_rubrique, 1::numeric AS coefficient, w_prestations_jour.rubrique_facturation_id, w_prestations_jour.prestation_id, w_prestations_jour.prix_unitaire, w_prestations_jour.lieu_id FROM w_prestations_jour JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_first AND date(now()) AND p_calendrier.jour_semaine = w_prestations_jour.jour_semaine JOIN activite.p_factures ON p_factures.no_sejour = w_prestations_jour.no_sejour AND p_factures.type_facture = 'E' AND p_calendrier.date BETWEEN p_factures.date_debut AND p_factures.date_fin ; ]]> '20991231' AND ( p_factures_lignes_c.montant_comptabilise <> 0 OR p_factures_lignes_c.montant_comptabilise_0 <> 0 OR p_factures_lignes_c.montant_comptabilise_1 <> 0 OR p_factures_lignes_c.montant_comptabilise_2 <> 0 OR p_factures_lignes_c.montant_comptabilise_22 <> 0 ) GROUP BY 1,2,3,4 ; -- Comptes clients (REG) INSERT INTO activite.p_factures_soldes_c( no_facture, date_comptable, 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 ) SELECT p_factures.no_facture, w_REGLEMENTS.DATE_REGLE, COALESCE(w_RUBRIQUE_FACTUR_source.rubrique_facturation_id,0), COALESCE(w_RUBRIQUE_FACTUR_source.prestation_id,0), 0, 0, 0, 0, 0, SUM(w_REGLEMENTS.MTTOTAL) AS montant_regle, SUM(w_REGLEMENTS.MTASS) AS montant_regle_0, SUM(w_REGLEMENTS.MTCAISS) AS montant_regle_1, SUM(w_REGLEMENTS.MTMUT) AS montant_regle_2, 0 AS montant_regle_22 FROM w_REGLEMENTS JOIN activite.p_factures ON w_REGLEMENTS.NUMFACT = p_factures.no_facture LEFT JOIN w_RUBRIQUE_FACTUR_source ON w_REGLEMENTS.NUM_ACTE = w_RUBRIQUE_FACTUR_source.NUM_ACTE WHERE DATE_REGLE IS NOT NULL AND w_REGLEMENTS.HONO_SEJ = 'false' GROUP BY 1,2,3,4 ; SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_2'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_8'); ANALYSE activite.p_factures_soldes_c ; ]]> 0 THEN PRIX_UNIT / PRIX_UNIT_NATIONAL ELSE 1 END AS coefficient_mco, COALESCE(t_medecins_administratifs.oid,0) AS medecin_facture_id, COALESCE(t_medecins_administratifs.oid,0) AS medecin_comptabilise_id, COALESCE(W_RUBRIQUE_FACTUR_source.rubrique_facturation_id,0) AS rubrique_facturation_id, COALESCE(W_RUBRIQUE_FACTUR_source.prestation_id,0) AS prestation_id, MT_FACT AS montant_facture, PART_ASS AS montant_facture_0, PART_CAISSE AS montant_facture_1, PART_MUT AS montant_facture_2, 0::numeric AS montant_facture_22, CASE WHEN MT_FACT = (PRIX_UNIT*COEF) + DEPASS THEN DEPASS ELSE 0 END AS montant_depassement, round(base.cti_division(PART_ASS,MT_FACT)*100.0,0) AS taux_0, round(base.cti_division(PART_CAISSE,MT_FACT)*100.0,0) AS taux_1, round(base.cti_division(PART_MUT,MT_FACT)*100.0,0) AS taux_2, 0::numeric AS taux_22, CASE WHEN PRIX_UNIT_NATIONAL > 0 THEN PRIX_UNIT_NATIONAL ELSE PRIX_UNIT END AS prix_unitaire, COALESCE(t_lieux.oid,0) AS lieu_id, LC_HON AS montant_comptabilise, LC_HON_PAT AS montant_comptabilise_0, LC_HON_AMO AS montant_comptabilise_1, LC_HON_AMC AS montant_comptabilise_2, 0::numeric AS montant_comptabilise_22, 0, 0, 0, 0, 0, 0::numeric AS montant_facture_actes_inclus_dans_sejour, 0::numeric AS montant_facture_0_actes_inclus_dans_sejour, 0::numeric AS montant_facture_1_actes_inclus_dans_sejour, 0::numeric AS montant_facture_2_actes_inclus_dans_sejour, 0::numeric AS montant_facture_22_actes_inclus_dans_sejour, COALESCE(w_RUBRIQUE_FACTUR_source.acte_id,0) AS acte_id FROM w_LIGNES_FACTURES JOIN activite.p_factures ON w_LIGNES_FACTURES.NUM_FACT = p_factures.no_facture JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour LEFT JOIN w_RUBRIQUE_FACTUR_source ON w_RUBRIQUE_FACTUR_source.NUM_ACTE = w_LIGNES_FACTURES.NUM_ACTE LEFT JOIN activite.t_medecins_administratifs ON medecin_executant_code_original = t_medecins_administratifs.code_original LEFT JOIN activite.t_lieux ON t_lieux.code_original_1 = w_LIGNES_FACTURES.service_facturation_code_original AND t_lieux.code_original_2 = '' AND t_lieux.code_original_4 = '' AND t_lieux.code_original_5 = w_LIGNES_FACTURES.unite_fonctionnelle_code_original AND t_lieux.code_original_6 = w_LIGNES_FACTURES.unite_fonctionnelle_code_original WHERE w_LIGNES_FACTURES.HONO_SEJ = 'true' ; DROP TABLE IF EXISTS w_mouvements_sejour_lieu_jour; CREATE TEMP TABLE w_mouvements_sejour_lieu_jour AS SELECT no_sejour, date, (MAX(CASE WHEN est_absence <> '1' THEN Array[heure_fin, lieu_id] ELSE NULL END))[2] AS lieu_id, (MAX(Array[heure_fin, lieu_id]))[2] AS lieu_id_avec_absence FROM activite[PX].p_mouvements_sejour JOIN activite[PX].t_lieux ON lieu_id = t_lieux.oid JOIN activite[PX].t_services_facturation On service_facturation_id = t_services_facturation.oid GROUP BY 1,2; UPDATE activite[PX].p_factures_lignes_h SET lieu_id = COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence) FROM activite[PX].p_factures, w_mouvements_sejour_lieu_jour WHERE p_factures_lignes_h.no_facture = p_factures.no_facture AND p_factures.no_sejour = w_mouvements_sejour_lieu_jour.no_sejour AND p_factures_lignes_h.date_debut = w_mouvements_sejour_lieu_jour.date AND p_factures_lignes_h.lieu_id = 0; SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_2'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_5'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_6'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_7'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_8'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_9'); ANALYSE activite.p_factures_lignes_h ; ]]> 0 AND code_sorti = 0 AND p_factures_lignes_h.date_fin > date(date_extraction - interval '56 days') GROUP BY 1 ) subview ON p_factures.no_sejour = subview.no_sejour AND p_factures_lignes_h.date_fin > date(date_max - interval '28 days') WHERE montant_facture > 0 GROUP BY 1,2,3,4,5,6,7 HAVING count(*) >= 3 ; ANALYSE w_actes_jour ; INSERT INTO activite.p_factures_lignes_non_facturees_h( no_facture, date_debut, date_fin, nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, prix_unitaire, lieu_id, medecin_facture_id, acte_id, phase_ccam, activite_ccam, extension_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4) SELECT p_factures.no_facture, p_calendrier.date AS date_debut, p_calendrier.date AS date_fin, 1::numeric AS nb_rubrique, w_actes_jour.coefficient, w_actes_jour.rubrique_facturation_id, w_actes_jour.prestation_id, w_actes_jour.prix_unitaire, w_actes_jour.lieu_id, w_actes_jour.medecin_facture_id, w_actes_jour.acte_id, ''::text AS phase_ccam, '1'::text AS activite_ccam, ''::text AS extension_ccam, ''::text AS modificateur_ccam_1, ''::text AS modificateur_ccam_2, ''::text AS modificateur_ccam_3, ''::text AS modificateur_ccam_4 FROM w_actes_jour JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_first AND date(now()) AND p_calendrier.jour_semaine = w_actes_jour.jour_semaine JOIN activite.p_factures ON p_factures.no_sejour = w_actes_jour.no_sejour AND p_factures.type_facture = 'E' AND p_calendrier.date BETWEEN p_factures.date_debut AND p_factures.date_fin order by 1,2 ; ]]> 0 OR montant_comptabilise_0 <> 0 OR montant_comptabilise_1 <> 0 OR montant_comptabilise_2 <> 0 OR montant_comptabilise_22 <> 0 ) GROUP BY 1,2,3,4,5 ; -- Réglements INSERT INTO activite.p_factures_soldes_h( no_facture, date_comptable, medecin_comptabilise_id, 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 ) SELECT p_factures.no_facture, w_REGLEMENTS.DATE_REGLE, COALESCE(t_medecins_administratifs.oid,0) AS medecin_comptabilise_id, COALESCE(w_RUBRIQUE_FACTUR_source.rubrique_facturation_id,0), COALESCE(w_RUBRIQUE_FACTUR_source.prestation_id,0), 0, 0, 0, 0, 0, SUM(w_REGLEMENTS.MTTOTAL) AS montant_regle, SUM(w_REGLEMENTS.MTASS) AS montant_regle_0, SUM(w_REGLEMENTS.MTCAISS) AS montant_regle_1, SUM(w_REGLEMENTS.MTMUT) AS montant_regle_2, 0 AS montant_regle_22 FROM w_REGLEMENTS JOIN activite.p_factures ON w_REGLEMENTS.NUMFACT = p_factures.no_facture LEFT JOIN w_RUBRIQUE_FACTUR_source ON w_REGLEMENTS.NUM_ACTE = w_RUBRIQUE_FACTUR_source.NUM_ACTE LEFT JOIN activite.t_medecins_administratifs On medecin_executant_code_original = t_medecins_administratifs.code_original WHERE DATE_REGLE IS NOT NULL AND w_REGLEMENTS.HONO_SEJ = 'true' GROUP BY 1,2,3,4,5 ; SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_8'); ANALYSE activite.p_factures_soldes_h ; ]]> = '20190101' GROUP BY 1; ]]> '00' THEN date((LEFT(NUM_FACT,6)||'01')::date + interval '1 month' - interval '1 day') ELSE date((LEFT(NUM_FACT,4)||'1231')::date) END AS date_vente, TT_SEJ AS TT_SEJ_AMO, 0::numeric AS TT_SEJ_AMC, 0::numeric AS TT_SEJ_PAT, TT_HONO AS TT_HON_AMO, 0::numeric AS TT_HON_AMC, 0::numeric AS TT_HON_PAT, TT_HONO AS TC_HON, TT_HONO AS TC_HON_AMO, 0::numeric AS TC_HON_AMC, 0::numeric AS TC_HON_PAT, '20991231'::date AS DATE_REGLE, 0::numeric AS TR_SEJ, 0::numeric AS TR_SEJ_AMO, 0::numeric AS TR_SEJ_AMC, 0::numeric AS TR_SEJ_PAT, 0::numeric AS TR_HON, 0::numeric AS TR_HON_AMO, 0::numeric AS TR_HON_AMC, 0::numeric AS TR_HON_PAT FROM prod_hemat2a.FACTURES ; INSERT INTO w_FACTURES SELECT NUM_PAT, NUM_FACT::text, VALID, TT_SEJOUR, TT_HONO, MT_CAISS, MT_MUT, MT_ASS, DATE_EDIT, DATE_TRANSMI, EDITE, TRANSMIS, NUM_BORDEREAU, DATE_GENE_COMPT, GENE_CPT, NUM_JNL, RAPPEL, COMPLET, AVOIR, SEJOUR_DU, SEJOUR_AU, MT_TT, NUM_CAISS, NUM_SOC, TELETRANS, NUMLOT, GENAUTO, REGUL_POSITIVE, REGUL_NEGATIVE, CPT_ANA, NBR_ACT_DIAL, MUTUELLE, NUM_MUTUELLE, AVOIR_FACTINITIALE::text, FORCER_ARCHIVAGE, AVOIR_NUMFACT, '1'::text AS FACT_last, date(SEJOUR_DU) AS SEJOUR_DU_D, date(SEJOUR_AU) AS SEJOUR_AU_D, '1'::text AS gen_sejour, CASE WHEN substr(num_fact,5,2) BETWEEN '01' AND '12' THEN date((LEFT(NUM_FACT,6)||'01')::date + interval '1 month' - interval '1 day') ELSE date((LEFT(NUM_FACT,4)||'1231')::date) END AS date_vente, TT_SEJOUR AS TT_SEJ_AMO, 0::numeric AS TT_SEJ_AMC, 0::numeric AS TT_SEJ_PAT, TT_HONO AS TT_HON_AMO, 0::numeric AS TT_HON_AMC, 0::numeric AS TT_HON_PAT, TT_HONO AS TC_HON, TT_HONO AS TC_HON_AMO, 0::numeric AS TC_HON_AMC, 0::numeric AS TC_HON_PAT, '20991231'::date AS DATE_REGLE, 0::numeric AS TR_SEJ, 0::numeric AS TR_SEJ_AMO, 0::numeric AS TR_SEJ_AMC, 0::numeric AS TR_SEJ_PAT, 0::numeric AS TR_HON, 0::numeric AS TR_HON_AMO, 0::numeric AS TR_HON_AMC, 0::numeric AS TR_HON_PAT FROM prod_hemat2a.ARCH_FACT WHERE SEJOUR_AU >= '20100101' ; ANALYSE w_FACTURES ; DROP TABLE IF EXISTS w_LIGNES_FACTURES; CREATE TEMP TABLE w_LIGNES_FACTURES AS SELECT NUM_FACT::text, PRESTATION, NUM_ACTE, SEJOUR_DU, SEJOUR_AU, QUANTITE, COEF, PRIX_UNIT, MAJORATION, MT_FACT, BASE_REMB, DEPASS, PART_CAISSE, PART_MUT, PART_ASS, EXECUTANT, DENOMBREMENT, RMO, NUM_PAT, NUM_EXE, CPT_COMPTA, DMT, CODE_TVA, NUM_LIG, HONO_SEJ, CT_EPO, XMT_EPO, CODIF_AFF, NUM_SOC, TIERPERS, FELEC, TYPE_PRODUIT, DATE_PRESCRIPTION_PRODUIT, PRIX_UNIT_NATIONAL, COEF_NATIONAL, COEF_REGIONAL, ACTE_PMSI, CODE_PRODUIT, TYPE_ETI, CODE_ASSOCIATION, NUM_PRODUIT, ID_CLEFPRIMAIRE, FINESS_ETAB_DESTINATAIRE, ''::text AS medecin_executant_code_original, NUM_SOC::text||'_'||LEFT(DMT,2) AS service_facturation_code_original, CASE WHEN HONO_SEJ = 'false' AND PRESTATION LIKE 'D%' THEN NUM_SOC::text||'_'||PRESTATION ELSE '' END AS unite_fonctionnelle_code_original, 0::numeric AS LC_HON, 0::numeric AS LC_HON_AMO, 0::numeric AS LC_HON_AMC, 0::numeric AS LC_HON_PAT FROM prod_hemat2a.LIGNES_FACTURES ; INSERT INTO w_LIGNES_FACTURES SELECT NUM_FACT::text, PRESTATION, NUM_ACTE, SEJOUR_DU, SEJOUR_AU, QUANTITE, COEF, PRIX_UNIT, MAJORATION, MT_FACT, BASE_REMB, DEPASS, PART_CAISS, PART_MUT, PART_ASS, EXECUTANT, DENOMBREMENT, RMO, NUM_PAT, NUM_EXE, CPT_COMPTA, DMT, CODE_TVA, NUM_LIGG, HONO_SEJ, CPTEPO, XMT_EPO, CODIF_AFF, NUM_SOC, TIERPERS, FELEC, TYPE_PRODUIT, DATE_PRESCRIPTION_PRODUIT, PRIX_UNIT_NATIONAL, COEF_NATIONAL, COEF_REGIONAL, ACTE_PMSI, CODE_PRODUIT, TYPE_ETI, CODE_ASSOCIATION, NUM_PRODUIT, ID_CLEFPRIMAIRE, FINESS_ETAB_DESTINATAIRE, ''::text AS medecin_executant_code_original, NUM_SOC::text||'_'||LEFT(DMT,2) AS service_facturation_code_original, CASE WHEN HONO_SEJ = 'false' AND PRESTATION LIKE 'D%' THEN NUM_SOC::text||'_'||PRESTATION ELSE '' END AS unite_fonctionnelle_code_original, 0::numeric AS LC_HON, 0::numeric AS LC_HON_AMO, 0::numeric AS LC_HON_AMC, 0::numeric AS LC_HON_PAT FROM prod_hemat2a.ARCH_LIG_FACT ; ANALYSE w_LIGNES_FACTURES ; UPDATE w_LIGNES_FACTURES SET medecin_executant_code_original = MEDECINS.NUM_MED::text FROM prod_hemat2a.MEDECINS WHERE HONO_SEJ = 'true' AND NUM_EXE = MEDECINS.FINESS AND EXECUTANT = MEDECINS.NOM ; UPDATE w_LIGNES_FACTURES SET medecin_executant_code_original = MEDECINS.NUM_MED::text FROM prod_hemat2a.MEDECINS WHERE HONO_SEJ = 'true' AND EXECUTANT = MEDECINS.NOM AND medecin_executant_code_original = '' ; UPDATE w_LIGNES_FACTURES SET LC_HON = MT_FACT, LC_HON_AMO = PART_CAISSE, LC_HON_AMC = PART_MUT, LC_HON_PAT = PART_ASS FROM prod_hemat2a.MEDECINS WHERE HONO_SEJ = 'true' AND medecin_executant_code_original = NUM_MED::text AND REGLEMENT_HONO = 'false' ; UPDATE w_FACTURES SET SEJOUR_DU_D = subview.SEJOUR_DU_D, SEJOUR_AU_D = subview.SEJOUR_AU_D FROM ( SELECT NUM_FACT, MIN(SEJOUR_DU) AS SEJOUR_DU_D, MAX(SEJOUR_AU) AS SEJOUR_AU_D FROM w_LIGNES_FACTURES WHERE HONO_SEJ = 'false' AND PRESTATION LIKE 'D%' AND PRESTATION NOT LIKE 'DTP' GROUP BY 1 ) subview WHERE subview.NUM_FACT = w_FACTURES.NUM_FACT AND ( w_FACTURES.SEJOUR_DU_D IS DISTINCT FROM subview.SEJOUR_DU_D OR w_FACTURES.SEJOUR_AU_D IS DISTINCT FROM subview.SEJOUR_AU_D ) ; UPDATE w_FACTURES SET TT_SEJ = subview.TT_SEJ, TT_SEJ_AMO = subview.TT_SEJ_AMO, TT_SEJ_AMC = subview.TT_SEJ_AMC, TT_SEJ_PAT = subview.TT_SEJ_PAT, TC_HON = subview.TC_HON, TC_HON_AMO = subview.TC_HON_AMO, TC_HON_AMC = subview.TC_HON_AMC, TC_HON_PAT = subview.TC_HON_PAT, TT_HONO = subview.TT_HON, TT_HON_AMO = subview.TT_HON_AMO, TT_HON_AMC = subview.TT_HON_AMC, TT_HON_PAT = subview.TT_HON_PAT FROM ( SELECT NUM_FACT, SUM(CASE WHEN HONO_SEJ = 'false' THEN MT_FACT ELSE 0 END) AS TT_SEJ, SUM(CASE WHEN HONO_SEJ = 'false' THEN PART_CAISSE ELSE 0 END) AS TT_SEJ_AMO, SUM(CASE WHEN HONO_SEJ = 'false' THEN PART_MUT ELSE 0 END) AS TT_SEJ_AMC, SUM(CASE WHEN HONO_SEJ = 'false' THEN PART_ASS ELSE 0 END) AS TT_SEJ_PAT, SUM(CASE WHEN HONO_SEJ = 'true' THEN MT_FACT ELSE 0 END) AS TT_HON, SUM(CASE WHEN HONO_SEJ = 'true' THEN PART_CAISSE ELSE 0 END) AS TT_HON_AMO, SUM(CASE WHEN HONO_SEJ = 'true' THEN PART_MUT ELSE 0 END) AS TT_HON_AMC, SUM(CASE WHEN HONO_SEJ = 'true' THEN PART_ASS ELSE 0 END) AS TT_HON_PAT, SUM(CASE WHEN HONO_SEJ = 'true' THEN LC_HON ELSE 0 END) AS TC_HON, SUM(CASE WHEN HONO_SEJ = 'true' THEN LC_HON_AMO ELSE 0 END) AS TC_HON_AMO, SUM(CASE WHEN HONO_SEJ = 'true' THEN LC_HON_AMC ELSE 0 END) AS TC_HON_AMC, SUM(CASE WHEN HONO_SEJ = 'true' THEN LC_HON_PAT ELSE 0 END) AS TC_HON_PAT FROM w_LIGNES_FACTURES GROUP BY 1 ) subview WHERE subview.NUM_FACT = w_FACTURES.NUM_FACT AND ( w_FACTURES.TT_SEJ IS DISTINCT FROM subview.TT_SEJ OR w_FACTURES.TT_SEJ_AMO IS DISTINCT FROM subview.TT_SEJ_AMO OR w_FACTURES.TT_SEJ_AMC IS DISTINCT FROM subview.TT_SEJ_AMC OR w_FACTURES.TT_SEJ_PAT IS DISTINCT FROM subview.TT_SEJ_PAT OR w_FACTURES.TC_HON IS DISTINCT FROM subview.TC_HON OR w_FACTURES.TC_HON_AMO IS DISTINCT FROM subview.TC_HON_AMO OR w_FACTURES.TC_HON_AMC IS DISTINCT FROM subview.TC_HON_AMC OR w_FACTURES.TC_HON_PAT IS DISTINCT FROM subview.TC_HON_PAT OR w_FACTURES.TT_HONO IS DISTINCT FROM subview.TT_HON OR w_FACTURES.TT_HON_AMO IS DISTINCT FROM subview.TT_HON_AMO OR w_FACTURES.TT_HON_AMC IS DISTINCT FROM subview.TT_HON_AMC OR w_FACTURES.TT_HON_PAT IS DISTINCT FROM subview.TT_HON_PAT ) ; DROP TABLE IF EXISTS w_REGLEMENTS; CREATE TEMP TABLE w_REGLEMENTS AS SELECT REGLEMENTS.NUMFACT::text, REGLEMENTS.DATE_REGLE, REGLEMENTS.MTCAISS, REGLEMENTS.MTMUT, REGLEMENTS.MTASS, REGLEMENTS.MTTOTAL, REGLEMENTS.NUMPAT, REGLEMENTS.MEDECIN, REGLEMENTS.NUMBORD, REGLEMENTS.PRESTATION, REGLEMENTS.NUMCAISS, REGLEMENTS.NUM_SOC, CASE WHEN MEDECIN = 'SEJOUR' THEN 'false'::text ELSE 'true' END AS HONO_SEJ, 0::bigint AS NUM_ACTE, ''::text AS medecin_executant_code_original FROM prod_hemat2a.REGLEMENTS JOIN w_FACTURES ON w_FACTURES.NUM_FACT = REGLEMENTS.NUMFACT ; ANALYSE w_REGLEMENTS ; UPDATE w_REGLEMENTS SET HONO_SEJ = subview.HONO_SEJ FROM ( SELECT PRESTATION, MAX(HONO_SEJ) AS HONO_SEJ FROM w_LIGNES_FACTURES GROUP BY 1 ) subview WHERE w_REGLEMENTS.PRESTATION = subview.PRESTATION AND w_REGLEMENTS.HONO_SEJ IS DISTINCT FROM subview.HONO_SEJ ; UPDATE w_REGLEMENTS SET NUM_ACTE = subview.NUM_ACTE FROM ( SELECT NUM_FACT, PRESTATION, MAX(NUM_ACTE) AS NUM_ACTE FROM w_LIGNES_FACTURES GROUP BY 1,2 ) subview WHERE w_REGLEMENTS.NUMFACT = subview.NUM_FACT AND w_REGLEMENTS.PRESTATION = subview.PRESTATION ; UPDATE w_REGLEMENTS SET medecin_executant_code_original = MEDECINS.NUM_MED::text FROM prod_hemat2a.MEDECINS WHERE HONO_SEJ = 'true' AND MEDECIN = MEDECINS.NOM AND medecin_executant_code_original = '' ; UPDATE w_FACTURES SET DATE_REGLE = subview.DATE_REGLE, TR_SEJ = subview.TR_SEJ, TR_SEJ_AMO = subview.TR_SEJ_AMO, TR_SEJ_AMC = subview.TR_SEJ_AMC, TR_SEJ_PAT = subview.TR_SEJ_PAT, TR_HON = subview.TR_HON, TR_HON_AMO = subview.TR_HON_AMO, TR_HON_AMC = subview.TR_HON_AMC, TR_HON_PAT = subview.TR_HON_PAT FROM ( SELECT NUMFACT AS NUM_FACT, MAX(DATE_REGLE) AS DATE_REGLE, SUM(CASE WHEN HONO_SEJ = 'false' THEN MTTOTAL ELSE 0 END) AS TR_SEJ, SUM(CASE WHEN HONO_SEJ = 'false' THEN MTCAISS ELSE 0 END) AS TR_SEJ_AMO, SUM(CASE WHEN HONO_SEJ = 'false' THEN MTMUT ELSE 0 END) AS TR_SEJ_AMC, SUM(CASE WHEN HONO_SEJ = 'false' THEN MTASS ELSE 0 END) AS TR_SEJ_PAT, SUM(CASE WHEN HONO_SEJ = 'true' THEN MTTOTAL ELSE 0 END) AS TR_HON, SUM(CASE WHEN HONO_SEJ = 'true' THEN MTCAISS ELSE 0 END) AS TR_HON_AMO, SUM(CASE WHEN HONO_SEJ = 'true' THEN MTMUT ELSE 0 END) AS TR_HON_AMC, SUM(CASE WHEN HONO_SEJ = 'true' THEN MTASS ELSE 0 END) AS TR_HON_PAT FROM w_REGLEMENTS GROUP BY 1 ) subview WHERE subview.NUM_FACT = w_FACTURES.NUM_FACT ; -- Ménage dans les factures anciennes DELETE FROM w_factures WHERE date(SEJOUR_AU) < '20150101' ; DELETE FROM w_FACTURES USING ( SELECT NUM_PAT, date(COALESCE(MAX(CASE WHEN SEJOUR_DU <= '20190101' AND TT_SEJ <> TR_SEJ THEN SEJOUR_DU ELSE NULL END),'20190101')) AS SEJOUR_DU FROM w_FACTURES GROUP BY 1 ) subview WHERE w_FACTURES.NUM_PAT = subview.NUM_PAT AND w_FACTURES.SEJOUR_DU < subview.SEJOUR_DU ; -- Traitement des avoirs -- Regul sans avoir précisé, il faut tenter de le retrouver UPDATE w_FACTURES SET AVOIR_FACTINITIALE = subview.AVOIR_FACTINITIALE FROM ( SELECT w_FACTURES.NUM_FACT, MIN(w_FACTURES_avoir.NUM_FACT) AS AVOIR_FACTINITIALE FROM w_FACTURES JOIN w_FACTURES w_FACTURES_avoir ON w_FACTURES.NUM_PAT = w_FACTURES_avoir.NUM_PAT AND w_FACTURES.SEJOUR_DU_D = w_FACTURES_avoir.SEJOUR_DU_D AND w_FACTURES.SEJOUR_AU_D = w_FACTURES_avoir.SEJOUR_AU_D AND w_FACTURES.NUM_FACT > w_FACTURES_avoir.NUM_FACT WHERE w_FACTURES.REGUL_POSITIVE = 'true' AND w_FACTURES.AVOIR_FACTINITIALE = '0' GROUP BY 1 ) subview WHERE w_FACTURES.NUM_FACT = subview.NUM_FACT ; -- Ajout des avoirs INSERT INTO w_FACTURES SELECT w_FACTURES.NUM_PAT, w_FACTURES.NUM_FACT || 'A'::text AS NUM_FACT, w_FACTURES_regul.VALID, 0-w_FACTURES.TT_SEJ, 0-w_FACTURES.TT_HONO, 0-w_FACTURES.MT_CAISSE, 0-w_FACTURES.MT_MUT, 0-w_FACTURES.MT_ASS, w_FACTURES_regul.DATE_EDITION, w_FACTURES_regul.DATE_TRANSMIS, w_FACTURES_regul.EDITE, w_FACTURES_regul.TRANSMIS, w_FACTURES_regul.NUM_BORDEREAU, w_FACTURES_regul.DATE_GENE_CPT, w_FACTURES_regul.GENE_CPT, w_FACTURES_regul.NUM_JNL, w_FACTURES_regul.RAPPEL, w_FACTURES_regul.COMPLET, 'autocti'::text AS AVOIR, w_FACTURES.SEJOUR_DU, w_FACTURES.SEJOUR_AU, 0-w_FACTURES.MT_TT, w_FACTURES.NUM_CAISSE, w_FACTURES.NUM_SOC, w_FACTURES_regul.TELETRANS, w_FACTURES_regul.NUMLOT, w_FACTURES.GENAUTO, 'false'::text AS REGUL_POSITIVE, 'true'::text AS REGUL_NEGATIVE, w_FACTURES.CPT_ANA, w_FACTURES.NBR_ACT_DIAL, w_FACTURES.MUTUELLE, w_FACTURES.NUM_MUTUELLE, w_FACTURES.NUM_FACT AS AVOIR_FACTINITIALE, w_FACTURES.FORCER_ARCHIVAGE, 0::numeric AS AVOIR_NUMFACT, '0'::text AS FACT_last, w_FACTURES.SEJOUR_DU_D, w_FACTURES.SEJOUR_AU_D, '0'::text AS gen_sejour, w_FACTURES_regul.date_vente, 0-w_FACTURES.TT_SEJ_AMO, 0-w_FACTURES.TT_SEJ_AMC, 0-w_FACTURES.TT_SEJ_PAT, 0-w_FACTURES.TT_HON_AMO, 0-w_FACTURES.TT_HON_AMC, 0-w_FACTURES.TT_HON_PAT, 0-w_FACTURES.TC_HON, 0-w_FACTURES.TC_HON_AMO, 0-w_FACTURES.TC_HON_AMC, 0-w_FACTURES.TC_HON_PAT, w_FACTURES_regul.DATE_REGLE, 0-w_FACTURES.TR_SEJ, 0-w_FACTURES.TR_SEJ_AMO, 0-w_FACTURES.TR_SEJ_AMC, 0-w_FACTURES.TR_SEJ_PAT, 0-w_FACTURES.TR_HON, 0-w_FACTURES.TR_HON_AMO, 0-w_FACTURES.TR_HON_AMC, 0-w_FACTURES.TR_HON_PAT FROM w_FACTURES JOIN w_FACTURES w_FACTURES_regul ON w_FACTURES.NUM_FACT = w_FACTURES_regul.AVOIR_FACTINITIALE ; INSERT INTO w_LIGNES_FACTURES SELECT w_FACTURES.NUM_FACT::text, w_LIGNES_FACTURES.PRESTATION, w_LIGNES_FACTURES.NUM_ACTE, w_LIGNES_FACTURES.SEJOUR_DU, w_LIGNES_FACTURES.SEJOUR_AU, 0-w_LIGNES_FACTURES.QUANTITE, w_LIGNES_FACTURES.COEF, w_LIGNES_FACTURES.PRIX_UNIT, w_LIGNES_FACTURES.MAJORATION, 0-w_LIGNES_FACTURES.MT_FACT, 0-w_LIGNES_FACTURES.BASE_REMB, 0-w_LIGNES_FACTURES.DEPASS, 0-w_LIGNES_FACTURES.PART_CAISSE, 0-w_LIGNES_FACTURES.PART_MUT, 0-w_LIGNES_FACTURES.PART_ASS, w_LIGNES_FACTURES.EXECUTANT, w_LIGNES_FACTURES.DENOMBREMENT, w_LIGNES_FACTURES.RMO, w_LIGNES_FACTURES.NUM_PAT, w_LIGNES_FACTURES.NUM_EXE, w_LIGNES_FACTURES.CPT_COMPTA, w_LIGNES_FACTURES.DMT, w_LIGNES_FACTURES.CODE_TVA, w_LIGNES_FACTURES.NUM_LIG, w_LIGNES_FACTURES.HONO_SEJ, w_LIGNES_FACTURES.CT_EPO, w_LIGNES_FACTURES.XMT_EPO, w_LIGNES_FACTURES.CODIF_AFF, w_LIGNES_FACTURES.NUM_SOC, w_LIGNES_FACTURES.TIERPERS, w_LIGNES_FACTURES.FELEC, w_LIGNES_FACTURES.TYPE_PRODUIT, w_LIGNES_FACTURES.DATE_PRESCRIPTION_PRODUIT, w_LIGNES_FACTURES.PRIX_UNIT_NATIONAL, w_LIGNES_FACTURES.COEF_NATIONAL, w_LIGNES_FACTURES.COEF_REGIONAL, w_LIGNES_FACTURES.ACTE_PMSI, w_LIGNES_FACTURES.CODE_PRODUIT, w_LIGNES_FACTURES.TYPE_ETI, w_LIGNES_FACTURES.CODE_ASSOCIATION, w_LIGNES_FACTURES.NUM_PRODUIT, w_LIGNES_FACTURES.ID_CLEFPRIMAIRE, w_LIGNES_FACTURES.FINESS_ETAB_DESTINATAIRE, w_LIGNES_FACTURES.medecin_executant_code_original, w_LIGNES_FACTURES.service_facturation_code_original, w_LIGNES_FACTURES.unite_fonctionnelle_code_original, 0-w_LIGNES_FACTURES.LC_HON, 0-w_LIGNES_FACTURES.LC_HON_AMO, 0-w_LIGNES_FACTURES.LC_HON_AMC, 0-w_LIGNES_FACTURES.LC_HON_PAT FROM w_LIGNES_FACTURES JOIN w_FACTURES ON w_LIGNES_FACTURES.NUM_FACT || 'A'::text = w_FACTURES.NUM_FACT ; INSERT INTO w_REGLEMENTS SELECT w_FACTURES.NUM_FACT, w_FACTURES.date_vente AS DATE_REGLE, 0-w_REGLEMENTS.MTCAISS, 0-w_REGLEMENTS.MTMUT, 0-w_REGLEMENTS.MTASS, 0-w_REGLEMENTS.MTTOTAL, w_REGLEMENTS.NUMPAT, w_REGLEMENTS.MEDECIN, w_REGLEMENTS.NUMBORD, w_REGLEMENTS.PRESTATION, w_REGLEMENTS.NUMCAISS, w_REGLEMENTS.NUM_SOC, w_REGLEMENTS.HONO_SEJ, w_REGLEMENTS.NUM_ACTE, w_REGLEMENTS.medecin_executant_code_original FROM w_REGLEMENTS JOIN w_FACTURES ON w_REGLEMENTS.NUMFACT || 'A'::text = w_FACTURES.NUM_FACT ; UPDATE w_FACTURES SET AVOIR = 'autocti' WHERE NUM_FACT IN (SELECT AVOIR_FACTINITIALE FROM w_FACTURES) AND AVOIR = 'false' ; DROP TABLE IF EXISTS w_ASSURES; CREATE TEMP TABLE w_ASSURES AS SELECT NUM_PAT , NOM , PRENOM , NOM_JF , CP , DATE_NAISS , SEXE , CAISSE_NUM , MUT_NUM , NUM_SOCIETE::text AS service_facturation_code_original , NUM_SECU , 'N'::text AS OK , NULL::date AS date_entree , NULL::date AS date_sortie , 0::numeric AS code_sorti , ''::text AS medecin_sejour_code_original , ''::text AS unite_fonctionnelle_code_original , ''::text AS ghm_code , 0::numeric AS ghs_code FROM prod_hemat2a.ASSURES WHERE NUM_PAT IN (SELECT NUM_PAT FROM w_FACTURES) ; ANALYSE w_ASSURES ; UPDATE w_ASSURES SET OK = 'O' WHERE NUM_PAT IN ( SELECT NUM_PAT FROM w_FACTURES WHERE SEJOUR_DU >= '20190101' OR DATE_EDITION >= '20190101' OR DATE_TRANSMIS >= '20190101' ) ; UPDATE w_ASSURES SET OK = 'O' WHERE OK = 'N' AND NUM_PAT IN ( SELECT NUM_PAT FROM w_FACTURES JOIN prod_hemat2a.REGLEMENTS ON w_FACTURES.NUM_FACT = REGLEMENTS.NUMFACT WHERE REGLEMENTS.DATE_REGLE >= '20190101' ) ; UPDATE w_ASSURES SET date_entree = subview.date_entree, date_sortie = subview.date_sortie, code_sorti = subview.code_sorti, CAISSE_NUM = subview.NUM_CAISSE, MUT_NUM = subview.NUM_MUTUELLE FROM ( SELECT w_FACTURES.NUM_PAT, date(MIN(SEJOUR_DU)) AS date_entree, CASE WHEN MAX(date_extraction) - date(MAX(LEAST(now(),SEJOUR_AU))) > 30 THEN date(MAX(LEAST(now(),SEJOUR_AU))) ELSE '20991231' END AS date_sortie, CASE WHEN MAX(date_extraction) - date(MAX(LEAST(now(),SEJOUR_AU))) > 30 THEN 1 ELSE 0 END AS code_sorti, (MAX(ARRAY[SEJOUR_AU::text,NUM_CAISSE::text]))[2]::numeric AS NUM_CAISSE, (MAX(ARRAY[SEJOUR_AU::text,NUM_MUTUELLE::text]))[2]::numeric AS NUM_MUTUELLE FROM w_FACTURES JOIN w_ASSURES ON w_FACTURES.NUM_PAT = w_ASSURES.NUM_PAT JOIN w_periode ON 1=1 WHERE OK = 'O' GROUP BY 1 ) subview WHERE w_ASSURES.NUM_PAT = subview.NUM_PAT ; UPDATE w_ASSURES SET service_facturation_code_original = subview.service_facturation_code_original, unite_fonctionnelle_code_original = subview.unite_fonctionnelle_code_original, ghm_code = CASE WHEN subview.ghm_code <> '' THEN '28'::text||subview.ghm_code ELSE '' END, ghs_code = CASE WHEN subview.ghm_code <> '' THEN CASE WHEN subview.ghs_code <> '0' THEN subview.ghs_code::numeric ELSE 9999 END ELSE 0 END FROM ( SELECT w_FACTURES.NUM_PAT, (MAX(ARRAY[w_LIGNES_FACTURES.SEJOUR_AU::text,w_LIGNES_FACTURES.service_facturation_code_original]))[2] AS service_facturation_code_original, (MAX(ARRAY[w_LIGNES_FACTURES.SEJOUR_AU::text,w_LIGNES_FACTURES.unite_fonctionnelle_code_original]))[2] AS unite_fonctionnelle_code_original, (MAX(ARRAY[w_LIGNES_FACTURES.SEJOUR_AU::text,RUBRIQUE_FACTUR.PMSI_GHM_ASSOCIE]))[2] AS ghm_code, (MAX(ARRAY[w_LIGNES_FACTURES.SEJOUR_AU::text,COALESCE(RUBRIQUE_FACTUR.NUMEROGHS,'0')::text]))[2]::numeric AS ghs_code FROM w_FACTURES JOIN w_ASSURES ON w_FACTURES.NUM_PAT = w_ASSURES.NUM_PAT JOIN w_LIGNES_FACTURES ON w_FACTURES.NUM_FACT = w_LIGNES_FACTURES.NUM_FACT LEFT JOIN prod_hemat2a.RUBRIQUE_FACTUR ON w_LIGNES_FACTURES.NUM_ACTE = RUBRIQUE_FACTUR.NUM_ACTE WHERE OK = 'O' AND w_LIGNES_FACTURES.HONO_SEJ = 'false' AND w_LIGNES_FACTURES.PRESTATION LIKE 'D%' AND w_LIGNES_FACTURES.PRESTATION NOT LIKE 'DTP' GROUP BY 1 ) subview WHERE w_ASSURES.NUM_PAT = subview.NUM_PAT ; UPDATE w_ASSURES SET medecin_sejour_code_original = subview.medecin_sejour_code_original FROM ( SELECT NUM_PAT, (MAX(ARRAY[SEJOUR_AU::text, medecin_executant_code_original]))[2] AS medecin_sejour_code_original FROM w_LIGNES_FACTURES JOIN prod_hemat2a.MEDECINS ON medecin_executant_code_original = NUM_MED::text WHERE HONO_SEJ = 'true' AND specialite <> 30 GROUP BY 1 ) subview WHERE w_ASSURES.NUM_PAT = subview.NUM_PAT ; ]]> '' GROUP BY 1; INSERT INTO activite.t_tiers_payant(oid, code, code_original, type_tiers_payant, texte, texte_court) SELECT 0, '', '', '0', 'Non saisi', 'Non saisi' WHERE 0 NOT IN (SELECT oid FROM activite.t_tiers_payant); INSERT INTO activite.t_tiers_payant(code, code_original, type_tiers_payant, texte, texte_court) SELECT 'PATIENTS', '0', '0', 'Patients', 'Patients' WHERE '0' NOT IN (SELECT code_original FROM activite.t_tiers_payant); INSERT INTO activite.t_tiers_payant(code_original, code, type_tiers_payant, texte, texte_court) SELECT NUMERO::text, to_char(NUMERO,'FM9990000'), '1'::text, NOM, NOM FROM prod_hemat2a.CAISSES WHERE NUMERO IN (SELECT NUM_CAISSE FROM w_FACTURES) AND NUMERO::text NOT IN (SELECT code_original FROM activite.t_tiers_payant WHERE code_original IS NOT NULL) ; INSERT INTO activite.t_tiers_payant(code_original, code, type_tiers_payant, texte, texte_court) SELECT NUMERO::text||'M', to_char(NUMERO,'FM9990000')||'M', '2'::text, NOM, NOM FROM prod_hemat2a.CAISSES WHERE NUMERO IN (SELECT NUM_MUTUELLE FROM w_FACTURES) AND NUMERO::text||'M' NOT IN (SELECT code_original FROM activite.t_tiers_payant WHERE code_original IS NOT NULL) ; UPDATE activite.t_tiers_payant SET grand_regime_id = t_grands_regimes.oid FROM prod_hemat2a.CAISSES JOIN base.t_grands_regimes ON CODEGR = code WHERE t_tiers_payant.code_original = NUMERO AND grand_regime_id IS DISTINCT FROM t_grands_regimes.oid AND CODEGR <> ''; UPDATE activite.t_tiers_payant SET grand_regime_id = t_grands_regimes.oid FROM prod_hemat2a.CAISSES JOIN base.t_grands_regimes ON CODEGR = code WHERE t_tiers_payant.code_original = NUMERO::text||'M' AND grand_regime_id IS DISTINCT FROM t_grands_regimes.oid AND CODEGR <> ''; ]]> w_medecins.NOM OR t_medecins_administratifs.prenom <> w_medecins.PRENOM OR t_medecins_administratifs.specialite_id <> COALESCE(t_specialites_medecin.oid,t_specialites_medecin_2.oid,0) OR t_medecins_administratifs.medecin_id <> w_medecins.medecin_id ); UPDATE activite.t_medecins_administratifs SET specialite_id = subview.specialite_medecin_id FROM ( SELECT t_medecins_administratifs.oid,t_specialites_medecin.oid AS specialite_medecin_id FROM activite.t_medecins_administratifs JOIN base.t_specialites_medecin t_specialites_medecin_2 ON specialite_id = t_specialites_medecin_2.oid JOIN base.t_specialites_medecin ON t_specialites_medecin_2.code || '..' = t_specialites_medecin.code ) subview WHERE t_medecins_administratifs.oid = subview.oid; UPDATE base.t_medecins SET specialite_id = subview.specialite_id FROM (SELECT t_medecins.oid, MIN(t_medecins_administratifs.specialite_id) as specialite_id FROM base.t_medecins, activite.t_medecins_administratifs , base.t_specialites_medecin WHERE t_medecins.oid = t_medecins_administratifs.medecin_id AND t_medecins_administratifs.specialite_id = t_specialites_medecin.oid GROUP BY t_medecins.oid) subview WHERE t_medecins.oid = subview.oid AND t_medecins.oid <> 0 AND t_medecins.specialite_id = 0; -- no_adeli UPDATE activite.t_medecins_administratifs SET no_adeli = ADELIE FROM prod_hemat2a.MEDECINS WHERE t_medecins_administratifs.code_original = NUM_MED::text AND t_medecins_administratifs.NO_ADELI IS DISTINCT FROM ADELIE ; ]]> '' THEN LIBELLE_ACTE ELSE COALESCE(t_prestations.code,CODE_CETEL) END) AS texte FROM w_RUBRIQUE_FACTUR_source LEFT JOIN activite.t_prestations ON CODE_CETEL = t_prestations.code WHERE PRESTATION <> '' GROUP BY 1 ORDER BY 1 ; INSERT INTO activite.t_rubriques_facturation(code_original, code, texte, texte_court) SELECT code_original, code_original, texte, texte FROM w_rubriques_facturation WHERE code_original NOT IN (SELECT code_original FROM activite.t_rubriques_facturation) ; INSERT INTO activite.t_prestations(code, code_original, texte, texte_court) SELECT CODE_CETEL, CODE_CETEL,CODE_CETEL, CODE_CETEL FROM w_RUBRIQUE_FACTUR_source WHERE CODE_CETEL NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL) GROUP BY 1 ; 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); INSERT INTO base.t_actes(code, texte, texte_court, nomenclature) SELECT UPPER(CODE_CCAM), UPPER(CODE_CCAM), UPPER(CODE_CCAM), 'CCAM' FROM w_RUBRIQUE_FACTUR_source WHERE CODE_CCAM <> '' AND UPPER(CODE_CCAM) NOT IN (SELECT code FROM base.t_actes WHERE code IS NOT NULL) GROUP BY UPPER(CODE_CCAM) ; INSERT INTO base.t_actes(code, texte, texte_court, nomenclature) SELECT CODE_CETEL, CODE_CETEL, CODE_CETEL, 'NGAP' FROM w_RUBRIQUE_FACTUR_source WHERE HONO_SEJ = 'true' AND ACTE_CCAM = 'false' AND CODE_CETEL NOT IN (SELECT code FROM base.t_actes WHERE code IS NOT NULL) GROUP BY CODE_CETEL ; INSERT INTO activite[PX].t_compte(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_compte); INSERT INTO activite.t_compte(code_original, code, texte, texte_court) SELECT CPT_COMPTA,CPT_COMPTA, CPT_COMPTA, CPT_COMPTA FROM w_RUBRIQUE_FACTUR_source WHERE CPT_COMPTA <> '' AND CPT_COMPTA NOT IN (SELECT code FROM activite.t_compte WHERE code IS NOT NULL) GROUP BY 1 ORDER BY 1; INSERT INTO activite.t_compte(code_original, code, texte, texte_court) SELECT CPT_COMPTA,CPT_COMPTA, CPT_COMPTA, CPT_COMPTA FROM w_LIGNES_FACTURES WHERE CPT_COMPTA <> '' AND CPT_COMPTA NOT IN (SELECT code FROM activite.t_compte WHERE code IS NOT NULL) GROUP BY 1 ORDER BY 1; UPDATE w_RUBRIQUE_FACTUR_source SET rubrique_facturation_id = t_rubriques_facturation.oid FROM activite.t_rubriques_facturation WHERE PRESTATION = t_rubriques_facturation.code_original ; UPDATE w_RUBRIQUE_FACTUR_source SET prestation_id = t_prestations.oid FROM activite.t_prestations WHERE CODE_CETEL = t_prestations.code ; UPDATE w_RUBRIQUE_FACTUR_source SET acte_id = t_actes.oid FROM base.t_actes WHERE CODE_CETEL = t_actes.code AND HONO_SEJ = 'true' ; UPDATE w_RUBRIQUE_FACTUR_source SET acte_id = t_actes.oid FROM base.t_actes WHERE CODE_CCAM = t_actes.code AND HONO_SEJ = 'true' AND CODE_CCAM <> '' ; UPDATE w_RUBRIQUE_FACTUR_source SET compte_produit_id = t_compte.oid FROM activite.t_compte WHERE CPT_COMPTA = t_compte.code AND CPT_COMPTA <> '' ; ]]>