|
|
return: text
|
|
|
lang: plpgsql
|
|
|
parameters:
|
|
|
p0:
|
|
|
type: date
|
|
|
name: i_date_encours
|
|
|
p1:
|
|
|
type: text
|
|
|
name: i_option
|
|
|
src: |
|
|
|
DECLARE
|
|
|
w_NOW date;
|
|
|
w_date_traitement date;
|
|
|
w_date_encours_actuelle date;
|
|
|
w_date_encours_actuelle_shs date;
|
|
|
w_date_encours date;
|
|
|
w_date_encours_YYMM text;
|
|
|
w_date_histo_18 date;
|
|
|
w_date_histo_12 date;
|
|
|
w_date_histo_xx date;
|
|
|
w_date_sortie_max date;
|
|
|
w_date_histo_coeff_presta date;
|
|
|
w_OPTION_ENCOURSVALOCP text;
|
|
|
w_OPTION_ENCOURSMCOSUP text;
|
|
|
_DATEENCOURS numeric;
|
|
|
_DATESTARTENCOURS date;
|
|
|
_NBSEJMIN_HISTOGHS numeric;
|
|
|
_ENCOURSECARTGHSV numeric;
|
|
|
_ENCOURSRETROSUP text;
|
|
|
w_nbsejours_min text;
|
|
|
w_simul text;
|
|
|
|
|
|
BEGIN
|
|
|
-- Date du jour = now sauf si date de fermeture
|
|
|
w_NOW = (SELECT
|
|
|
MIN(CASE WHEN code = 'DATEFERMETURE' AND
|
|
|
valeur <> '' AND
|
|
|
valeur < to_char(now(),'YYYYMMDD') THEN valeur::date
|
|
|
ELSE date(now()) END
|
|
|
)
|
|
|
FROM activite.t_divers)
|
|
|
;
|
|
|
RAISE NOTICE '%' , 'Parametres. Aujourd''hui : ' || w_NOW;
|
|
|
|
|
|
-- Ne rien calculer sur etablissement fermé
|
|
|
|
|
|
IF EXISTS (
|
|
|
SELECT valeur
|
|
|
FROM activite.t_divers
|
|
|
WHERE code IN ('DATEFERMETURE','ACT_DAT_FIN') AND
|
|
|
valeur <> '' AND
|
|
|
(
|
|
|
(
|
|
|
valeur_date IS NOT NULL AND
|
|
|
valeur_date < date(now())
|
|
|
) OR
|
|
|
valeur::date < date(now())
|
|
|
)
|
|
|
LIMIT 1
|
|
|
) THEN
|
|
|
DELETE FROM activite.p_factures_lignes_c WHERE montant_encours <> 0;
|
|
|
DELETE FROM activite.p_factures_lignes_h WHERE montant_encours <> 0;
|
|
|
|
|
|
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.montant_encours_c <> 0
|
|
|
;
|
|
|
DELETE
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
USING activite.p_factures
|
|
|
WHERE p_factures_lignes_h.no_facture = p_factures.no_facture AND
|
|
|
(p_factures.montant_encours_c <> 0 OR p_factures.montant_encours_h)
|
|
|
;
|
|
|
|
|
|
UPDATE activite.p_factures SET
|
|
|
montant_encours_c = 0,
|
|
|
montant_encours_0_c = 0,
|
|
|
montant_encours_1_c = 0,
|
|
|
montant_encours_2_c = 0,
|
|
|
montant_encours_22_c = 0,
|
|
|
montant_encours_h = 0,
|
|
|
montant_encours_0_h = 0,
|
|
|
montant_encours_1_h = 0,
|
|
|
montant_encours_2_h = 0,
|
|
|
montant_encours_22_h = 0
|
|
|
WHERE montant_encours_c <> 0 OR montant_encours_h <> 0;
|
|
|
|
|
|
TRUNCATE activite.p_facture_ligne_valorise_c
|
|
|
;
|
|
|
|
|
|
return 'Valorisation désactivée car établissement fermé';
|
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
-- Paramétrage
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'DATEENCOURS',
|
|
|
'Date cloture encours',
|
|
|
'5',
|
|
|
'Décalage pour cloture encours en nombre de jours '
|
|
|
WHERE 'DATEENCOURS' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
_DATEENCOURS = base.cti_to_number((SELECT valeur FROM activite.t_divers WHERE code = 'DATEENCOURS'));
|
|
|
IF _DATEENCOURS <= 0 THEN
|
|
|
_DATEENCOURS = 5;
|
|
|
END IF;
|
|
|
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'DATESTARTENCOURS',
|
|
|
'Date démarrage stockage encours encours',
|
|
|
'20110101',
|
|
|
'Date démarrage stockage encours encours (AAAAMMJJ)'
|
|
|
WHERE 'DATESTARTENCOURS' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
_DATESTARTENCOURS = (SELECT base.cti_to_date(valeur) FROM activite.t_divers WHERE code = 'DATESTARTENCOURS');
|
|
|
IF _DATESTARTENCOURS < '20120101' OR _DATESTARTENCOURS IS NULL THEN
|
|
|
_DATESTARTENCOURS = '20120101';
|
|
|
END IF;
|
|
|
RAISE NOTICE '%' , 'Parametres. Demarrage en-cours : ' || _DATESTARTENCOURS;
|
|
|
_DATESTARTENCOURS = date_trunc('month',_DATESTARTENCOURS) - interval '1 day';
|
|
|
-- Paramètres pour génération fictive d'EXH
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSBORNEHAUTE',
|
|
|
'Borne haute pour génération EXH en plus du GHS moyen',
|
|
|
'15',
|
|
|
'Borne haute pour génération EXH en plus du GHS moyen sur encours dossiers non groupés (voir ENCOURSEXHMOYEN)'
|
|
|
WHERE 'ENCOURSBORNEHAUTE' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSEXHMOYEN',
|
|
|
'EXH moyen pour génération EXH en plus du GHS moyen',
|
|
|
'50',
|
|
|
'Valeur EXH moyen pour génération EXH en plus du GHS moyen sur encours dossiers non groupés (voir ENCOURSBORNEHAUTE)'
|
|
|
WHERE 'ENCOURSEXHMOYEN' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
-- Paramètres pour génération fictive GHS sur esthétique
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSGHMSANSGHS',
|
|
|
'Pas de génération de GHS pour les GHM',
|
|
|
'14Z08Z',
|
|
|
'Pas de génération de GHS pour les GHM'
|
|
|
WHERE 'ENCOURSGHMSANSGHS' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
-- Paramètres pour génération fictive GHS sur esthétique
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSRETROSUP',
|
|
|
'Nombre de mois pour calcul taux prestations',
|
|
|
'18',
|
|
|
'18 ou 12'
|
|
|
WHERE 'ENCOURSRETROSUP' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
|
|
|
_ENCOURSRETROSUP = (SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSRETROSUP');
|
|
|
|
|
|
-- Nombre de séjours minimum par catégorie (= par règle) d'historique de facturation du GHS
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'NBSEJMIN_HISTOGHS',
|
|
|
'Histo factu GHS : nb séjours min',
|
|
|
'10',
|
|
|
'Valorisation : nombre minimum de séjours par catégorie pour l''historique de facturation GHS (par défaut 10)'
|
|
|
WHERE 'NBSEJMIN_HISTOGHS' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
_NBSEJMIN_HISTOGHS = base.cti_to_number((SELECT valeur FROM activite.t_divers WHERE code = 'NBSEJMIN_HISTOGHS'));
|
|
|
IF _NBSEJMIN_HISTOGHS <= 0 THEN
|
|
|
_NBSEJMIN_HISTOGHS = 10;
|
|
|
END IF;
|
|
|
w_nbsejours_min = to_char(_NBSEJMIN_HISTOGHS, 'FM999');
|
|
|
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSACTIVE',
|
|
|
'Encours activés',
|
|
|
'0',
|
|
|
'1 = Stockage des encours activé'
|
|
|
WHERE 'ENCOURSACTIVE' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSVALOCP',
|
|
|
'Valorisation CP',
|
|
|
'0',
|
|
|
'1 = Ne pas tenir compte de la demande CP dans la valorisation'
|
|
|
WHERE 'ENCOURSVALOCP' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
w_OPTION_ENCOURSVALOCP = (SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSVALOCP');
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSGHSMBB',
|
|
|
'GHS moyen des bébés sur encours',
|
|
|
'0',
|
|
|
'Pour les séjours en maternité sans GHS bébé, PU du GHS bébé à générer'
|
|
|
WHERE 'ENCOURSGHSMBB' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSMCOSUP',
|
|
|
'Valorisation Suppléments MCO',
|
|
|
'0',
|
|
|
'1 = Sur dossiers groupés validés, valoriser les suppléments (SRC,REA,NNx,STF) saisis (pour les autres utiliser la moyenne)'
|
|
|
WHERE 'ENCOURSMCOSUP' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
w_OPTION_ENCOURSMCOSUP = (SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSMCOSUP');
|
|
|
|
|
|
-- Paramètres pour generation encours sur honoraires medecins salaries
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSMEDSAL',
|
|
|
'Génération encours sur médecins salariés',
|
|
|
'0',
|
|
|
'1 = Génération encours sur médecins salariés'
|
|
|
WHERE 'ENCOURSMEDSAL' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
|
|
|
|
|
|
|
|
|
-- Paramètres pour comparer ghs valorisé avec moyenne / médecin -> Alerte expert
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSECARTGHSV',
|
|
|
'Montant écart pour alerter si le GHS connu est sous valorisé / moyenne médecin',
|
|
|
'0',
|
|
|
'Les GHS groupés sont valorisés aussi par la méthode des moyennes et les deux résultats sont comparés'
|
|
|
WHERE 'ENCOURSECARTGHSV' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
|
|
|
_ENCOURSECARTGHSV = base.cti_to_number(valeur) FROM activite.t_divers WHERE code = 'ENCOURSECARTGHSV';
|
|
|
|
|
|
-- Paramètre pour génération des en-cours SUR BG
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'ENCOURSACTIVEBG',
|
|
|
'Encours activés sur BG',
|
|
|
'0',
|
|
|
'1 = Stockage des encours BG activé'
|
|
|
WHERE 'ENCOURSACTIVEBG' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
|
|
|
|
|
|
|
|
|
IF EXISTS (SELECT date_encours FROM activite.p_factures_encours LIMIT 1) THEN
|
|
|
UPDATE activite.t_divers
|
|
|
SET valeur = '1'
|
|
|
WHERE code = 'ENCOURSACTIVE';
|
|
|
END IF;
|
|
|
_DATEENCOURS = base.cti_to_number((SELECT valeur FROM activite.t_divers WHERE code = 'DATEENCOURS'));
|
|
|
IF _DATEENCOURS <= 0 THEN
|
|
|
_DATEENCOURS = 5;
|
|
|
END IF;
|
|
|
-- Initialisations
|
|
|
-- Mise à jour factures externes pour affecter à la date d'entrée
|
|
|
UPDATE activite.p_factures
|
|
|
SET date_fin = date_debut
|
|
|
FROM activite.p_sejours
|
|
|
WHERE p_factures.no_sejour = p_sejours.no_sejour AND
|
|
|
type_sejour = '3' AND
|
|
|
(
|
|
|
date_fin = date(date_debut + interval '1 day') OR
|
|
|
date_fin = '20991231'
|
|
|
)
|
|
|
;
|
|
|
-- Les GMT saisis en hospitalisation complète ne doivent pas être traités
|
|
|
DELETE FROM activite.p_factures_lignes_non_facturees_c
|
|
|
USING(
|
|
|
SELECT
|
|
|
no_facture
|
|
|
, prestation_id
|
|
|
FROM activite.p_factures_lignes_non_facturees_c
|
|
|
JOIN activite.t_prestations ON p_factures_lignes_non_facturees_c.prestation_id = t_prestations.oid
|
|
|
JOIN activite.t_lieux ON t_lieux.oid = p_factures_lignes_non_facturees_c.lieu_id
|
|
|
JOIN activite.t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid
|
|
|
JOIN base.t_modes_traitement ON t_services_facturation.mode_traitement_id = t_modes_traitement.oid
|
|
|
WHERE t_prestations.code = 'GMT'
|
|
|
AND t_modes_traitement.code = '03'
|
|
|
GROUP BY
|
|
|
no_facture
|
|
|
, prestation_id
|
|
|
) subview
|
|
|
WHERE
|
|
|
p_factures_lignes_non_facturees_c.no_facture = subview.no_facture
|
|
|
AND p_factures_lignes_non_facturees_c.prestation_id = subview.prestation_id
|
|
|
;
|
|
|
-- Initialisation des tiers payant sur les non facturés (cas de CEGI LOGHOS ou de SIGEMS, les tiers payant ne sont pas connu sur les non facturés
|
|
|
|
|
|
|
|
|
-- D'abord selon le tiers connu sur le patient
|
|
|
UPDATE activite.p_factures SET
|
|
|
tiers_payant_1_id = subview.tiers_payant_1_id,
|
|
|
tiers_payant_2_id = subview.tiers_payant_2_id
|
|
|
FROM
|
|
|
(
|
|
|
SELECT p_factures.no_facture, subview.tiers_payant_1_id, subview.tiers_payant_2_id
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN
|
|
|
(
|
|
|
SELECT no_patient,
|
|
|
(MAX(ARRAY[date_entree::text,p_factures.tiers_payant_1_id::text]))[2]::bigint AS tiers_payant_1_id,
|
|
|
(MAX(ARRAY[date_entree::text,p_factures.tiers_payant_2_id::text]))[2]::bigint AS tiers_payant_2_id
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
WHERE p_factures.tiers_payant_1_id <> 0
|
|
|
GROUP BY 1
|
|
|
) subview ON p_sejours.no_patient = subview.no_patient
|
|
|
WHERE p_factures.code_facture = '0' AND
|
|
|
p_factures.tiers_payant_1_id = 0
|
|
|
) subview
|
|
|
WHERE p_factures.no_facture = subview.no_facture
|
|
|
;
|
|
|
|
|
|
-- Pour le reste, le code NR1
|
|
|
UPDATE activite.p_factures
|
|
|
SET tiers_payant_1_id = t_tiers_payant.oid
|
|
|
FROM activite.t_tiers_payant
|
|
|
WHERE p_factures.code_facture = '0' AND
|
|
|
p_factures.tiers_payant_1_id = 0 AND
|
|
|
t_tiers_payant.code_original = '*CTINR1'
|
|
|
;
|
|
|
|
|
|
|
|
|
-- désactivation index
|
|
|
RAISE NOTICE '%' , 'Initialisations. Desactivation index';
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_2');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_4');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_5');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_6');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_7');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_8');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_9');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_10');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_11');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_lignes_c_2');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_lignes_c_3');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_lignes_c_4');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_lignes_c_5');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_lignes_c_6');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_lignes_c_7');
|
|
|
PERFORM base.cti_disable_index('activite', 'i_factures_encours_lignes_c_8');
|
|
|
RAISE NOTICE '%' , 'Initialisations. Creation tables de travail';
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_calcul_parametres') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_calcul_parametres
|
|
|
(
|
|
|
date_encours date,
|
|
|
coefficient_mco numeric,
|
|
|
rubrique_facturation_ghs_id bigint,
|
|
|
rubrique_comptabilisation_ghs_id bigint,
|
|
|
prestation_ghs_id bigint,
|
|
|
rubrique_facturation_ghs_sea_id bigint,
|
|
|
rubrique_comptabilisation_ghs_sea_id bigint,
|
|
|
prestation_ghs_sea_id bigint,
|
|
|
rubrique_facturation_exh_id bigint,
|
|
|
rubrique_comptabilisation_exh_id bigint,
|
|
|
prestation_exh_id bigint,
|
|
|
rubrique_facturation_i01_id bigint,
|
|
|
rubrique_comptabilisation_i01_id bigint,
|
|
|
prestation_i01_id bigint
|
|
|
) ;
|
|
|
END IF;
|
|
|
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_calcul_parametres_services') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_calcul_parametres_services
|
|
|
(
|
|
|
service_facturation_id bigint,
|
|
|
type_sejour text,
|
|
|
rubrique_facturation_ghs_id bigint,
|
|
|
prestation_ghs_id bigint,
|
|
|
rubrique_facturation_exh_id bigint,
|
|
|
prestation_exh_id bigint
|
|
|
);
|
|
|
END IF;
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_calcul_parametres_services_prestations') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_calcul_parametres_services_prestations
|
|
|
(
|
|
|
coefficient_mco numeric,
|
|
|
lieu_service_id bigint,
|
|
|
lieu_unite_fonctionnelle_id bigint,
|
|
|
nb_ambulatoires numeric,
|
|
|
nb_externes numeric,
|
|
|
nb_seances numeric,
|
|
|
nb_journees numeric,
|
|
|
nb_journees_cp numeric,
|
|
|
prestation_id bigint,
|
|
|
prestation_code text,
|
|
|
tranche_ght text,
|
|
|
prestation_type_valorisation text,
|
|
|
rubrique_facturation_id bigint,
|
|
|
prix_unitaire numeric,
|
|
|
nombre numeric,
|
|
|
coefficient numeric,
|
|
|
prix_unitaire_moyen_1 numeric,
|
|
|
nb_prix_unitaire_moyen_1 numeric,
|
|
|
prix_unitaire_moyen_3 numeric,
|
|
|
nb_prix_unitaire_moyen_3 numeric,
|
|
|
prix_unitaire_moyen numeric,
|
|
|
regle_prestation_texte text,
|
|
|
coefficient_calcule numeric DEFAULT 0,
|
|
|
prix_unitaire_calcule numeric DEFAULT 0,
|
|
|
coefficient_is_force text DEFAULT '0',
|
|
|
prix_unitaire_is_force text DEFAULT '0',
|
|
|
type_ligne text DEFAULT '',
|
|
|
prestation_10p_code text DEFAULT '',
|
|
|
rubrique_code text DEFAULT '',
|
|
|
rubrique_10p_code text DEFAULT '',
|
|
|
prestation_10p_id bigint DEFAULT 0,
|
|
|
rubrique_10p_id bigint DEFAULT 0
|
|
|
);
|
|
|
END IF;
|
|
|
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_calcul_parametres_services_journees') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_calcul_parametres_services_journees
|
|
|
(
|
|
|
lieu_service_id bigint,
|
|
|
lieu_unite_fonctionnelle_id bigint,
|
|
|
nb_ambulatoires numeric,
|
|
|
nb_externes numeric,
|
|
|
nb_seances numeric,
|
|
|
nb_journees bigint,
|
|
|
nb_journees_cp bigint
|
|
|
);
|
|
|
END IF;
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_sejours') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_sejours
|
|
|
(
|
|
|
sejour_id bigint NOT NULL,
|
|
|
no_sejour text NOT NULL,
|
|
|
type_sejour character(1),
|
|
|
est_budget_global text,
|
|
|
secteur_tarif text default '2',
|
|
|
medecin_sejour_id bigint,
|
|
|
specialite_medecin_sejour_id bigint,
|
|
|
lieu_sortie_service_id bigint,
|
|
|
lieu_sortie_unite_fonctionnelle_id bigint,
|
|
|
code_sorti numeric(1),
|
|
|
lieu_sortie_id bigint,
|
|
|
mode_sortie character(1),
|
|
|
date_groupage date,
|
|
|
tiers_payant_1_id bigint,
|
|
|
tiers_payant_2_id bigint,
|
|
|
nb_ghs numeric,
|
|
|
ghm_id bigint,
|
|
|
ghs_id bigint,
|
|
|
ghs_bebe1_id bigint,
|
|
|
ghs_bebe2_id bigint,
|
|
|
ghs_bebe3_id bigint,
|
|
|
particularites_encours_service text,
|
|
|
type_t2a text,
|
|
|
CONSTRAINT w_cti_encours_sejours_pkey PRIMARY KEY (no_sejour)
|
|
|
) ;
|
|
|
END IF;
|
|
|
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_histo_sejour_facture') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_histo_sejour_facture
|
|
|
(
|
|
|
no_sejour text,
|
|
|
date_fin date,
|
|
|
classe_ghm text default '',
|
|
|
medecin_sejour_id bigint,
|
|
|
specialite_medecin_sejour_id bigint,
|
|
|
lieu_sortie_service_id bigint,
|
|
|
lieu_sortie_unite_fonctionnelle_id bigint,
|
|
|
nb_ghs numeric,
|
|
|
tranche_sejour text,
|
|
|
duree_sejour integer,
|
|
|
montant_ghs numeric,
|
|
|
montant_ghs_original numeric,
|
|
|
taux_0 numeric,
|
|
|
taux_1 numeric,
|
|
|
taux_2 numeric
|
|
|
) ;
|
|
|
END IF;
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_histo_ghs') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_histo_ghs
|
|
|
(
|
|
|
classe_ghm text,
|
|
|
regle text,
|
|
|
medecin_sejour_id bigint,
|
|
|
specialite_medecin_sejour_id bigint,
|
|
|
lieu_sortie_service_id bigint,
|
|
|
lieu_sortie_unite_fonctionnelle_id bigint,
|
|
|
tranche_sejour text,
|
|
|
duree_sejour integer,
|
|
|
nombre bigint,
|
|
|
montant_moyen_ghs numeric,
|
|
|
medecin_sejour_texte text default '',
|
|
|
specialite_medecin_sejour_texte text default '',
|
|
|
lieu_sortie_service_texte text default '',
|
|
|
lieu_sortie_unite_fonctionnelle_texte text default '',
|
|
|
tranche_sejour_texte text default '',
|
|
|
duree_sejour_texte text default ''
|
|
|
) ;
|
|
|
CREATE INDEX w_cti_encours_histo_ghs_i1
|
|
|
ON w_cti_encours_histo_ghs
|
|
|
USING btree
|
|
|
(medecin_sejour_id, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id)
|
|
|
;
|
|
|
END IF;
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_histo_dms_sejours') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_histo_dms_sejours
|
|
|
(
|
|
|
no_sejour text,
|
|
|
medecin_sejour_id bigint,
|
|
|
specialite_medecin_sejour_id bigint,
|
|
|
lieu_sortie_service_id bigint,
|
|
|
lieu_sortie_unite_fonctionnelle_id bigint,
|
|
|
date_fin date,
|
|
|
date_debut date
|
|
|
) ;
|
|
|
END IF;
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_histo_dms') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_histo_dms
|
|
|
(
|
|
|
regle text,
|
|
|
medecin_sejour_id bigint,
|
|
|
specialite_medecin_sejour_id bigint,
|
|
|
lieu_sortie_service_id bigint,
|
|
|
lieu_sortie_unite_fonctionnelle_id bigint,
|
|
|
dms numeric,
|
|
|
occurences bigint
|
|
|
) ;
|
|
|
END IF;
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_ghm_sans_ghs') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_ghm_sans_ghs
|
|
|
(
|
|
|
ghm_id bigint
|
|
|
) ;
|
|
|
END IF;
|
|
|
TRUNCATE w_cti_encours_ghm_sans_ghs;
|
|
|
INSERT INTO w_cti_encours_ghm_sans_ghs
|
|
|
SELECT oid
|
|
|
FROM base.t_ghm
|
|
|
WHERE code IN ('14Z08Z')
|
|
|
;
|
|
|
INSERT INTO w_cti_encours_ghm_sans_ghs
|
|
|
SELECT oid
|
|
|
FROM base.t_ghm
|
|
|
JOIN activite.t_divers ON t_divers.code = 'ENCOURSGHMSANSGHS'
|
|
|
WHERE t_divers.valeur LIKE '%' || t_ghm.code || '%' AND
|
|
|
oid <> 0 AND
|
|
|
length(t_ghm.code) = 6 AND
|
|
|
t_ghm.code <> '14Z08Z'
|
|
|
;
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_encours_factures
|
|
|
(
|
|
|
oid bigint,
|
|
|
sejour_id bigint NOT NULL,
|
|
|
no_sejour text NOT NULL,
|
|
|
type_sejour text,
|
|
|
classe_ghm text,
|
|
|
no_facture text NOT NULL,
|
|
|
no_facture_encours text NOT NULL,
|
|
|
no_facture_reference text NOT NULL,
|
|
|
date_encours date,
|
|
|
date_debut date,
|
|
|
date_fin date,
|
|
|
lieu_sortie_id bigint,
|
|
|
mode_sortie text,
|
|
|
ghs_id bigint DEFAULT 0,
|
|
|
ghm_id bigint DEFAULT 0,
|
|
|
code_cp_demandee character(1) DEFAULT 0,
|
|
|
montant_valorise_c numeric(13,2) DEFAULT 0,
|
|
|
montant_valorise_0_c numeric(13,2) DEFAULT 0,
|
|
|
montant_valorise_1_c numeric(13,2) DEFAULT 0,
|
|
|
montant_valorise_2_c numeric(13,2) DEFAULT 0,
|
|
|
montant_encours_c numeric(13,2) DEFAULT 0,
|
|
|
montant_encours_0_c numeric(13,2) DEFAULT 0,
|
|
|
montant_encours_1_c numeric(13,2) DEFAULT 0,
|
|
|
montant_encours_2_c numeric(13,2) DEFAULT 0,
|
|
|
montant_valorise_h numeric(13,2) DEFAULT 0,
|
|
|
etat character(1) DEFAULT ''::bpchar,
|
|
|
type_t2a character(1) DEFAULT '0'::bpchar,
|
|
|
est_budget_global text,
|
|
|
secteur_tarif text default '2',
|
|
|
ghs_bebe1_id bigint DEFAULT 0,
|
|
|
ghs_bebe2_id bigint DEFAULT 0,
|
|
|
ghs_bebe3_id bigint DEFAULT 0,
|
|
|
code_sorti character(1) DEFAULT '0'::bpchar,
|
|
|
lieu_sortie_service_id bigint DEFAULT 0,
|
|
|
lieu_sortie_unite_fonctionnelle_id bigint DEFAULT 0,
|
|
|
medecin_sejour_id bigint DEFAULT 0,
|
|
|
specialite_medecin_sejour_id bigint,
|
|
|
duree_sejour integer DEFAULT 0,
|
|
|
tranche_sejour character(1) DEFAULT '0'::bpchar,
|
|
|
regle_ghs text DEFAULT ''::text,
|
|
|
regle_dms text DEFAULT '0'::text,
|
|
|
dms numeric default 0,
|
|
|
tiers_payant_1_id bigint,
|
|
|
tiers_payant_2_id bigint,
|
|
|
particularites_encours_service text,
|
|
|
uniquement_prestations_saisies text default '0',
|
|
|
ignorer text default '0',
|
|
|
CONSTRAINT w_cti_encours_factures_pkey PRIMARY KEY (no_facture)
|
|
|
);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS w_cti_encours_factures_i1
|
|
|
ON w_cti_encours_factures
|
|
|
USING btree
|
|
|
(no_sejour);
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_encours_factures_deja_cpc
|
|
|
(
|
|
|
no_facture_reference text NOT NULL,
|
|
|
CONSTRAINT w_cti_encours_factures_deja_cpc_pkey PRIMARY KEY (no_facture_reference)
|
|
|
);
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_encours_factures_histo_taux
|
|
|
(
|
|
|
service_facturation_id bigint,
|
|
|
taux_ghs_1 numeric,
|
|
|
nb numeric,
|
|
|
regle_taux_texte text,
|
|
|
CONSTRAINT w_cti_encours_factures_histo_taux_pkey PRIMARY KEY (service_facturation_id)
|
|
|
);
|
|
|
|
|
|
CREATE TEMP SEQUENCE IF NOT EXISTS w_cti_encours_factures_lignes_c_sequence;
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_encours_factures_lignes_c
|
|
|
(
|
|
|
oid bigint NOT NULL DEFAULT nextval('w_cti_encours_factures_lignes_c_sequence'::regclass),
|
|
|
no_sejour text NOT NULL,
|
|
|
no_facture text NOT NULL,
|
|
|
date_debut date,
|
|
|
date_fin date,
|
|
|
nb_rubrique numeric(5) DEFAULT 1,
|
|
|
coefficient numeric(7,2) DEFAULT 1,
|
|
|
coefficient_mco numeric(7,4) DEFAULT 1,
|
|
|
prestation_id bigint DEFAULT 0,
|
|
|
lpp_id bigint DEFAULT 0,
|
|
|
ucd_id bigint DEFAULT 0,
|
|
|
rubrique_facturation_id bigint DEFAULT 0,
|
|
|
rubrique_comptabilisation_id bigint DEFAULT 0,
|
|
|
ghs_id bigint DEFAULT 0,
|
|
|
prix_unitaire numeric(13,2) DEFAULT 0,
|
|
|
borne_basse numeric(5) DEFAULT 0,
|
|
|
borne_haute numeric(5) DEFAULT 0,
|
|
|
forfait_exb numeric(13,2) DEFAULT 0,
|
|
|
tarif_exb numeric(13,2) DEFAULT 0,
|
|
|
duree_sejour numeric(7) DEFAULT 0,
|
|
|
nb_prestation numeric(5) DEFAULT 1,
|
|
|
montant_encours numeric(13,2) DEFAULT 0,
|
|
|
montant_encours_0 numeric(13,2) DEFAULT 0,
|
|
|
montant_encours_1 numeric(13,2) DEFAULT 0,
|
|
|
montant_encours_2 numeric(13,2) DEFAULT 0,
|
|
|
montant_encours_22 numeric(13,2) DEFAULT 0,
|
|
|
type_ligne text DEFAULT ''::text,
|
|
|
regle_ghs text DEFAULT ''::text,
|
|
|
lieu_id bigint DEFAULT 0,
|
|
|
regle_coefficient numeric DEFAULT 0,
|
|
|
regle_texte text,
|
|
|
prix_unitaire_calcule numeric(13,2) DEFAULT 0,
|
|
|
coefficient_calcule numeric(13,2) DEFAULT 0,
|
|
|
ignorer text default '0'
|
|
|
);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS w_cti_encours_factures_lignes_c_i1
|
|
|
ON w_cti_encours_factures_lignes_c
|
|
|
USING btree
|
|
|
(no_facture);
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_factures_lignes_non_facturees_c
|
|
|
(
|
|
|
no_sejour text,
|
|
|
no_facture text,
|
|
|
prestation_code character varying,
|
|
|
only_jour_sortie text,
|
|
|
type_valorisation_non_facture text
|
|
|
);
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_encours_actes_se1234
|
|
|
(
|
|
|
oid bigint,
|
|
|
code text,
|
|
|
prestation_code text
|
|
|
);
|
|
|
CREATE INDEX IF NOT EXISTS w_cti_encours_actes_se1234_i1
|
|
|
ON w_cti_encours_actes_se1234
|
|
|
USING btree
|
|
|
(oid);
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_encours_se1234
|
|
|
(
|
|
|
no_facture text,
|
|
|
acte_se text,
|
|
|
type_se text
|
|
|
);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS w_cti_encours_se1234_i1
|
|
|
ON w_cti_encours_se1234
|
|
|
USING btree
|
|
|
(no_facture);
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_encours_factures_lignes_sup_c
|
|
|
(
|
|
|
from_oid bigint,
|
|
|
prestation_code text,
|
|
|
date_debut_ghs date,
|
|
|
date_fin_ghs date,
|
|
|
nb_prestation_ghs integer,
|
|
|
oid bigint,
|
|
|
no_sejour text,
|
|
|
no_facture text,
|
|
|
date_debut date,
|
|
|
date_fin date,
|
|
|
nb_rubrique numeric(5),
|
|
|
coefficient numeric(7,2),
|
|
|
coefficient_mco numeric(7,4),
|
|
|
prestation_id bigint,
|
|
|
lpp_id bigint DEFAULT 0,
|
|
|
ucd_id bigint DEFAULT 0,
|
|
|
rubrique_facturation_id bigint,
|
|
|
rubrique_comptabilisation_id bigint,
|
|
|
ghs_id bigint,
|
|
|
prix_unitaire numeric(13,2),
|
|
|
borne_basse numeric(5),
|
|
|
borne_haute numeric(5),
|
|
|
forfait_exb numeric(13,2),
|
|
|
tarif_exb numeric(13,2),
|
|
|
duree_sejour numeric(7),
|
|
|
nb_prestation numeric(5),
|
|
|
montant_encours numeric(13,2),
|
|
|
montant_encours_0 numeric(13,2),
|
|
|
montant_encours_1 numeric(13,2),
|
|
|
montant_encours_2 numeric(13,2),
|
|
|
montant_encours_22 numeric(13,2),
|
|
|
type_ligne text,
|
|
|
regle_ghs text,
|
|
|
lieu_id bigint,
|
|
|
regle_coefficient numeric,
|
|
|
regle_texte text,
|
|
|
prix_unitaire_calcule numeric(13,2) DEFAULT 0,
|
|
|
coefficient_calcule numeric(13,2) DEFAULT 0,
|
|
|
ignorer text default '0'
|
|
|
);
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_encours_factures_lignes_sup_c_gen
|
|
|
(
|
|
|
from_oid bigint,
|
|
|
no_sejour text,
|
|
|
no_facture text,
|
|
|
date_debut date,
|
|
|
date_fin date,
|
|
|
lieu_id bigint,
|
|
|
rubrique_facturation_id bigint,
|
|
|
rubrique_comptabilisation_id bigint,
|
|
|
prestation_id bigint,
|
|
|
lpp_id bigint DEFAULT 0,
|
|
|
ucd_id bigint DEFAULT 0,
|
|
|
nb_rubrique integer,
|
|
|
nb_prestation integer,
|
|
|
coefficient numeric(7,2),
|
|
|
coefficient_mco numeric(7,4),
|
|
|
prix_unitaire numeric(13,2),
|
|
|
oid bigint,
|
|
|
montant_encours numeric,
|
|
|
type_ligne text,
|
|
|
regle_ghs text,
|
|
|
regle_coefficient numeric,
|
|
|
regle_texte text
|
|
|
);
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_encours_factures_lignes_sup_c_gen_tot
|
|
|
(
|
|
|
from_oid bigint,
|
|
|
nb_rubrique bigint,
|
|
|
nb_prestation bigint,
|
|
|
montant_encours numeric
|
|
|
);
|
|
|
|
|
|
CREATE TEMP TABLE IF NOT EXISTS w_cti_encours_repartition_tp
|
|
|
(
|
|
|
rubrique_facturation_id bigint NOT NULL,
|
|
|
coeff_1 numeric,
|
|
|
coeff_2 numeric,
|
|
|
CONSTRAINT w_cti_encours_repartition_tp_pk PRIMARY KEY (rubrique_facturation_id)
|
|
|
);
|
|
|
|
|
|
RAISE NOTICE '%' , 'Initialisations. Repartition par tiers payant';
|
|
|
|
|
|
TRUNCATE w_cti_encours_repartition_tp;
|
|
|
|
|
|
INSERT INTO w_cti_encours_repartition_tp
|
|
|
SELECT
|
|
|
rubrique_facturation_id,
|
|
|
base.cti_division(SUM(montant_facture_1) , SUM(montant_facture)) AS coeff_1,
|
|
|
base.cti_division(SUM(montant_facture_2 + montant_facture_22) , SUM(montant_facture)) AS coeff_2
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture
|
|
|
WHERE tiers_payant_1_id <> 0 ANd montant_facture <> 0 AND
|
|
|
p_factures_lignes_c.date_fin BETWEEN '20100301' AND w_NOW
|
|
|
GROUP BY 1;
|
|
|
UPDATE w_cti_encours_repartition_tp SET coeff_2 = 0 WHERE coeff_2 < 0.01;
|
|
|
UPDATE w_cti_encours_repartition_tp SET coeff_2 = 1 - coeff_1 WHERE coeff_2 >= 0.01 AND 1 - coeff_1 - coeff_2 < 0.01;
|
|
|
|
|
|
-- Ménage selon paramétrage
|
|
|
IF i_option NOT ILIKE '%-nogen%' THEN
|
|
|
DELETE
|
|
|
FROM activite.p_factures_encours
|
|
|
WHERE code_origine = 'C' AND date_encours < (SELECT date(date_trunc('month',base.cti_to_date(valeur))) FROM activite.t_divers WHERE code = 'DATESTARTENCOURS')
|
|
|
;
|
|
|
DELETE FROM activite.p_factures_encours_lignes_c
|
|
|
WHERE NOT EXISTS (SELECT 'NOT_TO_DELETE' FROM activite.p_factures_encours WHERE p_factures_encours.no_facture = p_factures_encours_lignes_c.no_facture)
|
|
|
AND p_factures_encours_lignes_c IS NOT NULL;
|
|
|
END IF;
|
|
|
-- Retraitement d'un mois
|
|
|
IF i_date_encours IS NOT NULL AND i_option NOT ILIKE '%-nogen%' THEN
|
|
|
DELETE FROM activite.p_factures_encours
|
|
|
USING w_cti_encours_calcul_parametres
|
|
|
WHERE date_trunc('month',p_factures_encours.date_encours) >= date_trunc('month',i_date_encours) AND
|
|
|
code_origine = 'C';
|
|
|
|
|
|
DELETE FROM activite.p_factures_encours_lignes_c
|
|
|
WHERE NOT EXISTS (SELECT 'NOT_TO_DELETE' FROM activite.p_factures_encours WHERE p_factures_encours.no_facture = p_factures_encours_lignes_c.no_facture)
|
|
|
AND p_factures_encours_lignes_c IS NOT NULL;
|
|
|
END IF;
|
|
|
-- Génération ou regénération des encours
|
|
|
RAISE NOTICE '%' , 'Generation encours';
|
|
|
-- date encours actuelle spécial SHS
|
|
|
w_date_encours_actuelle_shs =
|
|
|
CASE WHEN EXISTS(SELECT nspname from pg_namespace where nspname = 'prod_shs')
|
|
|
THEN (SELECT date(date_trunc('month', MAX(date_vente)) + interval '2 month' - interval '1 day')
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_rubriques_facturation ON rubrique_facturation_id = t_rubriques_facturation.oid AND t_rubriques_facturation.code_original = '111'
|
|
|
WHERE code_vente = '1')
|
|
|
ELSE '2099-12-31' END;
|
|
|
-- date encours actuelle standard
|
|
|
w_date_encours_actuelle = date(CASE WHEN EXTRACT('day' FROM w_NOW) <= _DATEENCOURS THEN date_trunc('month', w_NOW) - interval '1 day' ELSE date_trunc('month', w_NOW) + interval '1 month' - interval '1 day' END);
|
|
|
-- Pour SHS, Si date en cours < date standard (ventes pas faites)
|
|
|
IF w_date_encours_actuelle_shs < w_date_encours_actuelle THEN
|
|
|
w_date_encours_actuelle = w_date_encours_actuelle_shs;
|
|
|
END IF;
|
|
|
-- Stockage date encours active
|
|
|
INSERT INTO activite.t_divers (code, texte, valeur, description, valeur_date)
|
|
|
SELECT
|
|
|
'ENCOURSNOW',
|
|
|
'Date encours calculés',
|
|
|
w_date_encours_actuelle::text,
|
|
|
'Date des encours actuellement calculés (non modifiable)',
|
|
|
w_date_encours_actuelle
|
|
|
WHERE 'ENCOURSNOW' NOT IN (SELECT code FROM activite.t_divers);
|
|
|
UPDATE activite.t_divers SET
|
|
|
valeur = w_date_encours_actuelle::text,
|
|
|
valeur_date = w_date_encours_actuelle
|
|
|
WHERE code = 'ENCOURSNOW'
|
|
|
;
|
|
|
|
|
|
w_date_encours = _DATESTARTENCOURS;
|
|
|
IF i_option ILIKE '%-nogen%' THEN
|
|
|
w_date_encours = date(date_trunc('month', w_date_encours_actuelle) - interval '1 day');
|
|
|
END IF;
|
|
|
IF NOT EXISTS (SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSACTIVE' AND valeur = '1') THEN
|
|
|
w_date_encours = date(date_trunc('month', w_date_encours_actuelle) - interval '1 day');
|
|
|
END IF;
|
|
|
LOOP
|
|
|
w_date_encours = date(date_trunc('month', w_date_encours) + interval '2 month' - interval '1 day');
|
|
|
w_date_encours_YYMM = to_char(w_date_encours, 'MM YYYY');
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Generation encours. Analyse.';
|
|
|
IF w_date_encours > date(date_trunc('month',now())+interval '2 month') THEN
|
|
|
EXIT;
|
|
|
END IF;
|
|
|
IF w_date_encours > w_date_encours_actuelle THEN
|
|
|
EXIT;
|
|
|
END IF;
|
|
|
IF i_date_encours IS NOT NULL AND w_date_encours > i_date_encours THEN
|
|
|
EXIT;
|
|
|
END IF;
|
|
|
IF w_date_encours < w_date_encours_actuelle AND
|
|
|
EXISTS (SELECT date_encours FROM activite.p_factures_encours WHERE code_origine = 'C' AND date_trunc('month', date_encours) = date_trunc('month', w_date_encours) LIMIT 1) THEN
|
|
|
CONTINUE;
|
|
|
END IF;
|
|
|
IF w_date_encours < w_date_encours_actuelle AND
|
|
|
NOT EXISTS (SELECT date_vente FROM activite.p_factures WHERE code_vente = '1' AND date_trunc('month', date_vente) = date_trunc('month', w_date_encours) LIMIT 1) THEN
|
|
|
CONTINUE;
|
|
|
END IF;
|
|
|
|
|
|
IF w_date_encours = w_date_encours_actuelle THEN
|
|
|
w_date_traitement = w_NOW;
|
|
|
w_date_sortie_max = w_NOW + CASE WHEN date_part('hour' ,w_NOW) > 18 THEN interval '1 day' ELSE interval '0 day' END;
|
|
|
ELSE
|
|
|
w_date_traitement = w_date_encours + interval '15 days';
|
|
|
w_date_sortie_max = w_date_traitement;
|
|
|
END IF;
|
|
|
w_date_traitement = date(w_date_traitement);
|
|
|
|
|
|
w_date_histo_18 = date(date_trunc('month',w_date_encours) - interval '18 month');
|
|
|
w_date_histo_12 = date(date_trunc('month',w_date_encours) - interval '12 month');
|
|
|
w_date_histo_xx = w_date_histo_18;
|
|
|
w_date_histo_coeff_presta = date(date_trunc('month',w_date_encours) - (_ENCOURSRETROSUP || 'month')::interval);
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_histo_coeff_presta, 'Date de calcul coefficient prestations ENCOURSRETROSUP';
|
|
|
|
|
|
w_date_sortie_max = date(w_date_sortie_max);
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Generation encours ' || w_date_encours_YYMM || ' ' || w_date_traitement::text;
|
|
|
-- Raz tables de travail
|
|
|
TRUNCATE w_cti_encours_calcul_parametres;
|
|
|
TRUNCATE w_cti_encours_calcul_parametres_services;
|
|
|
TRUNCATE w_cti_encours_calcul_parametres_services_prestations;
|
|
|
TRUNCATE w_cti_encours_calcul_parametres_services_journees;
|
|
|
TRUNCATE w_cti_encours_sejours;
|
|
|
TRUNCATE w_cti_encours_histo_sejour_facture;
|
|
|
TRUNCATE w_cti_encours_histo_ghs;
|
|
|
TRUNCATE w_cti_encours_histo_dms_sejours;
|
|
|
TRUNCATE w_cti_encours_histo_dms;
|
|
|
TRUNCATE w_cti_encours_factures_histo_taux;
|
|
|
TRUNCATE w_cti_encours_factures;
|
|
|
TRUNCATE w_cti_encours_factures_deja_cpc;
|
|
|
TRUNCATE w_cti_encours_factures_lignes_c;
|
|
|
TRUNCATE w_cti_factures_lignes_non_facturees_c;
|
|
|
TRUNCATE w_cti_encours_se1234;
|
|
|
TRUNCATE w_cti_encours_actes_se1234;
|
|
|
TRUNCATE w_cti_encours_factures_lignes_sup_c;
|
|
|
TRUNCATE w_cti_encours_factures_lignes_sup_c_gen;
|
|
|
TRUNCATE w_cti_encours_factures_lignes_sup_c_gen_tot;
|
|
|
-- Correction coefficient MCO
|
|
|
-- Initialisation du coefficient MCO non alimenté (exemple WEB100T)
|
|
|
UPDATE activite.p_factures_lignes_c
|
|
|
SET coefficient_mco = coefficient_mco_calcul
|
|
|
FROM activite.t_prestations, base.v_coefficient_mco
|
|
|
WHERE
|
|
|
prestation_id = t_prestations.oid AND
|
|
|
t_prestations.code IN ('GHS', 'EXH') AND
|
|
|
montant_facture <> 0 AND
|
|
|
coefficient_mco = 1 AND
|
|
|
date(p_factures_lignes_c.date_fin) BETWEEN v_coefficient_mco.date_debut AND v_coefficient_mco.date_fin
|
|
|
;
|
|
|
|
|
|
|
|
|
-- Paramétrage des GHS
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Parametrage GHS';
|
|
|
INSERT INTO w_cti_encours_calcul_parametres
|
|
|
SELECT
|
|
|
w_date_encours as date_encours,
|
|
|
(MAX(Array[date(p_factures_lignes_c.date_fin) - w_NOW, coefficient_mco]))[2] AS coefficient_mco,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'GHS' AND type_sejour <> '5' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, rubrique_facturation_id]))[2] AS rubrique_facturation_ghs_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'GHS' AND type_sejour <> '5' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, rubrique_comptabilisation_id]))[2] AS rubrique_comptabilisation_ghs_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'GHS' AND type_sejour <> '5' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, prestation_id]))[2] AS prestation_ghs_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'GHS' AND type_sejour = '5' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, rubrique_facturation_id]))[2] AS rubrique_facturation_ghs_sea_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'GHS' AND type_sejour = '5' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, rubrique_comptabilisation_id]))[2] AS rubrique_comptabilisation_ghs_sea_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'GHS' AND type_sejour = '5' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, prestation_id]))[2] AS prestation_ghs_sea_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'EXH' AND type_sejour <> '5' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, rubrique_facturation_id]))[2] AS rubrique_facturation_exh_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'EXH' AND type_sejour <> '5' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, rubrique_comptabilisation_id]))[2] AS rubrique_comptabilisation_exh_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'EXH' AND type_sejour <> '5' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, prestation_id]))[2] AS prestation_exh_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'I01' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, rubrique_facturation_id]))[2] AS rubrique_facturation_I01_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'I01' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, rubrique_comptabilisation_id]))[2] AS rubrique_comptabilisation_I01_id,
|
|
|
(MAX(Array[CASE WHEN t_prestations.code = 'I01' THEN date(p_factures_lignes_c.date_fin) - w_NOW ELSE -99999999 END, prestation_id]))[2] AS prestation_I01_id
|
|
|
FROM
|
|
|
activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture AND p_factures.date_fin >= w_date_histo_18
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND t_prestations.code IN ('GHS', 'EXH', 'I01')
|
|
|
WHERE montant_facture <> 0 AND
|
|
|
p_factures_lignes_c.date_fin BETWEEN w_date_histo_18 AND w_date_traitement AND montant_facture > 0;
|
|
|
-- Prestations et rubriques par défaut
|
|
|
UPDATE w_cti_encours_calcul_parametres SET
|
|
|
coefficient_mco = COALESCE(coefficient_mco, 1),
|
|
|
prestation_ghs_id = COALESCE(prestation_ghs_id, (SELECT oid FROM activite.t_prestations WHERE code = 'GHS')),
|
|
|
rubrique_facturation_ghs_id = COALESCE(rubrique_facturation_ghs_id, (SELECT oid FROM activite.t_rubriques_facturation WHERE code = 'GHS')),
|
|
|
rubrique_comptabilisation_ghs_id = COALESCE(rubrique_comptabilisation_ghs_id, (SELECT oid FROM activite.t_rubriques_facturation WHERE code = 'GHS')),
|
|
|
prestation_ghs_sea_id = COALESCE(prestation_ghs_sea_id, (SELECT oid FROM activite.t_prestations WHERE code = 'GHS')),
|
|
|
rubrique_facturation_ghs_sea_id = COALESCE(rubrique_facturation_ghs_sea_id, (SELECT oid FROM activite.t_rubriques_facturation WHERE code = 'GHS')),
|
|
|
rubrique_comptabilisation_ghs_sea_id = COALESCE(rubrique_comptabilisation_ghs_sea_id, (SELECT oid FROM activite.t_rubriques_facturation WHERE code = 'GHS')),
|
|
|
prestation_exh_id = COALESCE(prestation_exh_id, (SELECT oid FROM activite.t_prestations WHERE code = 'EXH')),
|
|
|
rubrique_facturation_exh_id = COALESCE(rubrique_facturation_exh_id, (SELECT oid FROM activite.t_rubriques_facturation WHERE code = 'EXH')),
|
|
|
rubrique_comptabilisation_exh_id = COALESCE(rubrique_comptabilisation_exh_id, (SELECT oid FROM activite.t_rubriques_facturation WHERE code = 'EXH')),
|
|
|
prestation_i01_id = COALESCE(prestation_i01_id, (SELECT oid FROM activite.t_prestations WHERE code = 'I01')),
|
|
|
rubrique_facturation_i01_id = COALESCE(rubrique_facturation_i01_id, (SELECT oid FROM activite.t_rubriques_facturation WHERE code = 'I01')),
|
|
|
rubrique_comptabilisation_i01_id = COALESCE(rubrique_comptabilisation_i01_id, (SELECT oid FROM activite.t_rubriques_facturation WHERE code = 'I01'))
|
|
|
;
|
|
|
-- forcage coefficient mco selon calcul et non plus depuis la facturation
|
|
|
UPDATE w_cti_encours_calcul_parametres
|
|
|
SET coefficient_mco = coefficient_mco_calcul
|
|
|
FROM base.v_coefficient_mco
|
|
|
WHERE date(now()) BETWEEN v_coefficient_mco.date_debut AND v_coefficient_mco.date_fin
|
|
|
;
|
|
|
-- Par service
|
|
|
INSERT INTO w_cti_encours_calcul_parametres_services
|
|
|
SELECT
|
|
|
service_facturation_id,
|
|
|
type_sejour,
|
|
|
(MAX(CASE WHEN prestation_code = 'GHS' THEN ARRAY[to_char(nb,'FM0000000000'),rubrique_facturation_id::text] ELSE NULL END))[2]::bigint,
|
|
|
(MAX(CASE WHEN prestation_code = 'GHS' THEN ARRAY[to_char(nb,'FM0000000000'),prestation_id::text] ELSE NULL END))[2]::bigint,
|
|
|
(MAX(CASE WHEN prestation_code = 'EXH' THEN ARRAY[to_char(nb,'FM0000000000'),rubrique_facturation_id::text] ELSE NULL END))[2]::bigint,
|
|
|
(MAX(CASE WHEN prestation_code = 'EXH' THEN ARRAY[to_char(nb,'FM0000000000'),prestation_id::text] ELSE NULL END))[2]::bigint
|
|
|
FROM
|
|
|
(
|
|
|
SELECT
|
|
|
type_sejour,
|
|
|
t_lieux.service_facturation_id,
|
|
|
t_prestations.code AS prestation_code,
|
|
|
prestation_id,
|
|
|
rubrique_facturation_id,
|
|
|
count(*) AS nb
|
|
|
FROM
|
|
|
activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND t_prestations.code IN ('GHS', 'EXH')
|
|
|
JOIN activite.t_lieux ON lieu_id = t_lieux.oid
|
|
|
WHERE montant_facture <> 0 AND
|
|
|
p_factures_lignes_c.date_fin BETWEEN w_date_histo_18 AND w_date_traitement AND montant_facture > 0
|
|
|
GROUP BY 1,2,3,4,5
|
|
|
HAVING count(*) > 10
|
|
|
) subview
|
|
|
GROUP BY 1,2
|
|
|
;
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Historique facturation prestations';
|
|
|
|
|
|
INSERT INTO w_cti_encours_calcul_parametres_services_prestations
|
|
|
SELECT w_cti_encours_calcul_parametres.coefficient_mco,
|
|
|
t_lieux.service_facturation_id AS lieu_service_id,
|
|
|
t_lieux.unite_fonctionnelle_id AS lieu_unite_fonctionnelle_id,
|
|
|
0::numeric AS nb_ambulatoires,
|
|
|
0::numeric AS nb_externes,
|
|
|
0::numeric AS nb_seances,
|
|
|
0::numeric AS nb_journees,
|
|
|
0::numeric AS nb_journees_cp,
|
|
|
prestation_id,
|
|
|
t_prestations.code AS prestation_code,
|
|
|
CASE
|
|
|
WHEN t_prestations.code = 'GHT' AND p_factures_lignes_c.date_debut - p_sejours.date_entree <= 3 THEN '1'
|
|
|
WHEN t_prestations.code = 'GHT' AND p_factures_lignes_c.date_debut - p_sejours.date_entree BETWEEN 4 AND 8 THEN '2'
|
|
|
WHEN t_prestations.code = 'GHT' AND p_factures_lignes_c.date_debut - p_sejours.date_entree BETWEEN 9 AND 30 THEN '3'
|
|
|
WHEN t_prestations.code = 'GHT' AND p_factures_lignes_c.date_debut - p_sejours.date_entree > 30 THEN '9'
|
|
|
ELSE '' END AS tranche_ght,
|
|
|
COALESCE(t_prestations.type_valorisation_non_facture,'') AS prestation_type_valorisation,
|
|
|
rubrique_facturation_id,
|
|
|
COALESCE((MAX(Array[date(p_factures_lignes_c.date_fin) - w_NOW, prix_unitaire]))[2],0) as prix_unitaire,
|
|
|
SUM(nb_rubrique * CASE WHEN coefficient <> 0 THEN coefficient ELSE 1 END) -
|
|
|
SUM(CASE WHEN p_sejours.type_sejour = '1' AND p_factures_lignes_c.date_fin = p_sejours.date_sortie AND (t_prestations.code IN ('CPC', 'SHO', 'CP') OR t_prestations.type_valorisation_non_facture IN ('CP')) THEN 1 ELSE 0 END) as nombre,
|
|
|
0::numeric AS coefficient,
|
|
|
base.cti_division(
|
|
|
SUM(CASE WHEN p_factures_lignes_c.date_debut >= date(date_trunc('month',w_cti_encours_calcul_parametres.date_encours)) THEN CASE WHEN taux_1+taux_2+taux_0 = 100 THEN montant_facture ELSE nb_rubrique * CASE WHEN coefficient <> 0 THEN coefficient ELSE 1 END * prix_unitaire END ELSE 0 END) ,
|
|
|
SUM(CASE WHEN p_factures_lignes_c.date_debut >= date(date_trunc('month',w_cti_encours_calcul_parametres.date_encours)) THEN nb_rubrique * CASE WHEN coefficient <> 0 THEN coefficient ELSE 1 END ELSE 0 END)
|
|
|
) AS prix_unitaire_moyen_1,
|
|
|
SUM(CASE WHEN p_factures_lignes_c.date_debut >= date(date_trunc('month',w_cti_encours_calcul_parametres.date_encours)) THEN nb_rubrique * CASE WHEN coefficient <> 0 THEN coefficient ELSE 1 END ELSE 0 END) AS nb_prix_unitaire_moyen_1,
|
|
|
base.cti_division(
|
|
|
SUM(CASE WHEN p_factures_lignes_c.date_debut >= w_cti_encours_calcul_parametres.date_encours - interval '3 month' THEN CASE WHEN taux_1+taux_2+taux_0 = 100 THEN montant_facture ELSE nb_rubrique * CASE WHEN coefficient <> 0 THEN coefficient ELSE 1 END * prix_unitaire END ELSE 0 END) ,
|
|
|
SUM(CASE WHEN p_factures_lignes_c.date_debut >= w_cti_encours_calcul_parametres.date_encours - interval '3 month' THEN nb_rubrique * CASE WHEN coefficient <> 0 THEN coefficient ELSE 1 END ELSE 0 END)
|
|
|
) AS prix_unitaire_moyen_3,
|
|
|
SUM(CASE WHEN p_factures_lignes_c.date_debut >= w_cti_encours_calcul_parametres.date_encours - interval '3 month' THEN nb_rubrique * CASE WHEN coefficient <> 0 THEN coefficient ELSE 1 END ELSE 0 END) AS nb_prix_unitaire_moyen_3,
|
|
|
base.cti_division(
|
|
|
SUM(CASE WHEN taux_1+taux_2+taux_0 = 100 THEN montant_facture ELSE nb_rubrique * CASE WHEN coefficient <> 0 THEN coefficient ELSE 1 END * prix_unitaire END),
|
|
|
SUM(nb_rubrique * CASE WHEN coefficient <> 0 THEN coefficient ELSE 1 END)
|
|
|
) AS prix_unitaire_moyen,
|
|
|
''::text AS regle_prestation_texte,
|
|
|
0::numeric AS coefficient_calcule,
|
|
|
0::numeric AS prix_unitaire_calcule,
|
|
|
'0'::text AS coefficient_is_force,
|
|
|
'0'::text AS prix_unitaire_is_force,
|
|
|
''::text AS type_ligne,
|
|
|
''::text AS prestation_10p_code,
|
|
|
''::text AS rubrique_code,
|
|
|
''::text AS rubrique_10p_code,
|
|
|
0::bigint AS prestation_10p_id,
|
|
|
0::bigint AS rubrique_10p_id
|
|
|
FROM w_cti_encours_calcul_parametres, activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture AND type_facture NOT IN ('E') AND code_facture >= '1' AND p_factures.date_fin >= w_date_histo_coeff_presta
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
JOIN activite.t_lieux ON lieu_id = t_lieux.oid
|
|
|
JOIN activite.p_sejours On p_factures.no_sejour = p_sejours.no_sejour
|
|
|
WHERE p_factures_lignes_c.montant_facture <> 0 AND p_factures_lignes_c.date_fin <= w_cti_encours_calcul_parametres.date_encours AND
|
|
|
(t_prestations.code IN ('GMT', 'PJ', 'FJ', 'ENT', 'I01', 'PMS', 'CPC', 'SHO', 'CP','SRC','STF','REA','FJA','ATU','FPU','SE1','SE2','SE3','SE4','SE5','SE6','SE7', 'IGM', 'IGP', 'APD', 'AMD', 'AMF', 'APD', 'IMD', 'IMI', 'IPD', 'IVG', 'GHT', 'NN1', 'NN2', 'NN3', 'D09', 'D11', 'D13', 'D15', 'D16', 'DTP', 'DMASSR') OR
|
|
|
t_prestations.type_valorisation_non_facture IN ('GMT', 'CP','PJ','ENT','*AVGJOUSER')
|
|
|
)
|
|
|
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13
|
|
|
ORDER BY 1,2,3,4,5,6;
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET rubrique_code = t_rubriques_facturation.code
|
|
|
FROM activite.t_rubriques_facturation
|
|
|
WHERE rubrique_facturation_id = t_rubriques_facturation.oid
|
|
|
;
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET prestation_10p_code = t_prestations.code,
|
|
|
prestation_10p_id = t_prestations.oid
|
|
|
FROM activite.t_prestations
|
|
|
WHERE ('M'||w_cti_encours_calcul_parametres_services_prestations.prestation_code = t_prestations.code AND t_prestations.code <> 'MPJ' OR
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('GMT', 'PJ') AND t_prestations.code = 'MPJS')
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET rubrique_10p_id = subview.rubrique_10p_id, rubrique_10p_code = subview.rubrique_10p_code
|
|
|
FROM
|
|
|
(
|
|
|
SELECT prestation_10p_id,
|
|
|
(MAX(Array[date_debut::text,p_factures_lignes_c.rubrique_facturation_id::text]))[2]::bigint AS rubrique_10p_id,
|
|
|
(MAX(Array[date_debut::text,t_rubriques_facturation.code::text]))[2]::text AS rubrique_10p_code
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON p_factures_lignes_c.prestation_id = prestation_10p_id AND prestation_10p_id > 0
|
|
|
JOIN activite.t_rubriques_facturation ON p_factures_lignes_c.rubrique_facturation_id = t_rubriques_facturation.oid
|
|
|
WHERE montant_facture <> 0
|
|
|
group by 1
|
|
|
) subview
|
|
|
WHERE w_cti_encours_calcul_parametres_services_prestations.prestation_10p_id = subview.prestation_10p_id
|
|
|
;
|
|
|
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET nombre = CASE WHEN w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id = subview.rubrique_facturation_id
|
|
|
THEN w_cti_encours_calcul_parametres_services_prestations.nombre
|
|
|
ELSE 0 END
|
|
|
FROM
|
|
|
(
|
|
|
SELECT lieu_service_id,
|
|
|
lieu_unite_fonctionnelle_id,
|
|
|
prestation_id,
|
|
|
count(*),
|
|
|
(MAX(Array[nombre, rubrique_facturation_id]))[2] AS rubrique_facturation_id
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
WHERE prestation_code NOT IN ('CPC', 'SHO', 'CP') AND prestation_type_valorisation NOT IN ('CP')
|
|
|
GROUP BY 1,2,3
|
|
|
HAVING count(*) > 1
|
|
|
) subview
|
|
|
WHERE w_cti_encours_calcul_parametres_services_prestations.lieu_service_id = subview.lieu_service_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id = subview.lieu_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_id = subview.prestation_id;
|
|
|
DELETE FROM w_cti_encours_calcul_parametres_services_prestations WHERE nombre = 0;
|
|
|
INSERT INTO w_cti_encours_calcul_parametres_services_prestations
|
|
|
SELECT
|
|
|
coefficient_mco,
|
|
|
lieu_service_id,
|
|
|
lieu_unite_fonctionnelle_id,
|
|
|
nb_ambulatoires,
|
|
|
nb_externes,
|
|
|
nb_seances,
|
|
|
nb_journees,
|
|
|
nb_journees_cp,
|
|
|
(SELECT oid FROM activite.t_prestations WHERE code = 'FJA') AS prestation_id,
|
|
|
'FJA' AS prestation_code,
|
|
|
''::text AS tranche_ght,
|
|
|
''::text AS prestation_type_valorisation,
|
|
|
rubrique_facturation_id,
|
|
|
prix_unitaire,
|
|
|
nombre,
|
|
|
coefficient,
|
|
|
prix_unitaire_moyen_1,
|
|
|
nb_prix_unitaire_moyen_1,
|
|
|
prix_unitaire_moyen_3,
|
|
|
nb_prix_unitaire_moyen_3,
|
|
|
prix_unitaire_moyen,
|
|
|
''::text AS regle_prestation_texte,
|
|
|
0::numeric AS coefficient_calcule,
|
|
|
0::numeric AS prix_unitaire_calcule,
|
|
|
'0'::text AS coefficient_is_force,
|
|
|
'0'::text AS prix_unitaire_is_force,
|
|
|
''::text AS type_ligne
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
WHERE prestation_code = 'FJ' AND
|
|
|
'FJA' || '|' || lieu_service_id::text || '|' || lieu_unite_fonctionnelle_id::text NOT IN (SELECT prestation_code || '|' || lieu_service_id::text || '|' || lieu_unite_fonctionnelle_id::text FROM w_cti_encours_calcul_parametres_services_prestations);
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET prix_unitaire =
|
|
|
CASE
|
|
|
WHEN prix_unitaire_moyen_1 <> 0 AND nb_prix_unitaire_moyen_1 > 100 THEN
|
|
|
CASE WHEN prix_unitaire - prix_unitaire_moyen_1 BETWEEN -2 AND 2 THEN prix_unitaire ELSE round(prix_unitaire_moyen_1,2) END
|
|
|
WHEN prix_unitaire_moyen_3 <> 0 AND nb_prix_unitaire_moyen_1 > 100 THEN
|
|
|
CASE WHEN prix_unitaire - prix_unitaire_moyen_3 BETWEEN -2 AND 2 THEN prix_unitaire ELSE round(prix_unitaire_moyen_3,2) END
|
|
|
WHEN prix_unitaire_moyen <> 0 THEN
|
|
|
CASE WHEN prix_unitaire - prix_unitaire_moyen BETWEEN -2 AND 2 THEN prix_unitaire ELSE round(prix_unitaire_moyen,2) END
|
|
|
ELSE prix_unitaire
|
|
|
END;
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Historique occupation ' || w_date_histo_coeff_presta::text;
|
|
|
INSERT INTO w_cti_encours_calcul_parametres_services_journees
|
|
|
SELECT t_lieux.service_facturation_id AS lieu_service_id,
|
|
|
t_lieux.unite_fonctionnelle_id AS lieu_unite_fonctionnelle_id,
|
|
|
SUM(nb_ambulatoires) AS nb_ambulatoires,
|
|
|
SUM(nb_externes) AS nb_externes,
|
|
|
SUM(nb_seances) AS nb_seances,
|
|
|
COUNT(DISTINCT CASE WHEN heure_fin = 240000 OR heure_debut > 0 AND heure_fin < 240000 THEN p_mouvements_sejour.no_sejour || p_mouvements_sejour.date::text ELSE NULL END) as nb_journees,
|
|
|
COUNT(DISTINCT CASE WHEN est_chambre_particuliere <> '1' THEN NULL
|
|
|
WHEN heure_fin = 240000 OR heure_debut > 0 AND heure_fin < 240000 THEN p_mouvements_sejour.no_sejour || p_mouvements_sejour.date::text
|
|
|
ELSE NULL END
|
|
|
) as nb_journees_cp
|
|
|
FROM w_cti_encours_calcul_parametres,
|
|
|
activite.p_mouvements_sejour
|
|
|
JOIN activite.p_sejours ON p_mouvements_sejour.no_sejour = p_sejours.no_sejour
|
|
|
JOIN activite.t_lieux ON lieu_id = t_lieux.oid
|
|
|
WHERE p_mouvements_sejour.date <= w_cti_encours_calcul_parametres.date_encours AND
|
|
|
p_mouvements_sejour.date >= w_date_histo_coeff_presta AND
|
|
|
p_mouvements_sejour.no_sejour IN (SELECT no_sejour FROM activite.p_factures WHERE type_facture NOT IN ('E') AND code_facture >= '1' AND p_factures.date_fin >= w_date_histo_18)
|
|
|
GROUP BY 1,2;
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations SET
|
|
|
nb_ambulatoires = w_cti_encours_calcul_parametres_services_journees.nb_ambulatoires,
|
|
|
nb_externes = w_cti_encours_calcul_parametres_services_journees.nb_externes,
|
|
|
nb_seances = w_cti_encours_calcul_parametres_services_journees.nb_seances,
|
|
|
nb_journees = w_cti_encours_calcul_parametres_services_journees.nb_journees,
|
|
|
nb_journees_cp = w_cti_encours_calcul_parametres_services_journees.nb_journees_cp
|
|
|
FROM w_cti_encours_calcul_parametres_services_journees
|
|
|
WHERE w_cti_encours_calcul_parametres_services_journees.lieu_service_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
w_cti_encours_calcul_parametres_services_journees.lieu_unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id;
|
|
|
|
|
|
|
|
|
|
|
|
-- Récupération historique d'un autre environnement (saint gatien)
|
|
|
IF EXISTS (
|
|
|
SELECT table_name
|
|
|
FROM information_schema.tables
|
|
|
WHERE table_schema || '.' || table_name = 'activite.t_encours_calcul_parametres_services_prestations_histo' ) THEN
|
|
|
|
|
|
INSERT INTO w_cti_encours_calcul_parametres_services_prestations
|
|
|
(
|
|
|
coefficient_mco,
|
|
|
lieu_service_id,
|
|
|
lieu_unite_fonctionnelle_id,
|
|
|
nb_ambulatoires,
|
|
|
nb_externes,
|
|
|
nb_seances,
|
|
|
nb_journees,
|
|
|
nb_journees_cp,
|
|
|
prestation_id,
|
|
|
prestation_code,
|
|
|
tranche_ght,
|
|
|
prestation_type_valorisation,
|
|
|
rubrique_facturation_id,
|
|
|
prix_unitaire,
|
|
|
nombre,
|
|
|
coefficient,
|
|
|
prix_unitaire_moyen_1,
|
|
|
nb_prix_unitaire_moyen_1,
|
|
|
prix_unitaire_moyen_3,
|
|
|
nb_prix_unitaire_moyen_3,
|
|
|
prix_unitaire_moyen,
|
|
|
regle_prestation_texte,
|
|
|
coefficient_calcule,
|
|
|
prix_unitaire_calcule,
|
|
|
coefficient_is_force,
|
|
|
prix_unitaire_is_force,
|
|
|
type_ligne,
|
|
|
prestation_10p_code,
|
|
|
rubrique_code,
|
|
|
rubrique_10p_code,
|
|
|
prestation_10p_id,
|
|
|
rubrique_10p_id
|
|
|
)
|
|
|
SELECT
|
|
|
t_encours_calcul_parametres_services_prestations_histo.coefficient_mco,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.lieu_service_id,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.lieu_unite_fonctionnelle_id,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.nb_ambulatoires,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.nb_externes,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.nb_seances,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.nb_journees,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.nb_journees_cp,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prestation_id,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prestation_code,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.tranche_ght,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prestation_type_valorisation,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.rubrique_facturation_id,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prix_unitaire,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.nombre,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.coefficient,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prix_unitaire_moyen_1,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.nb_prix_unitaire_moyen_1,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prix_unitaire_moyen_3,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.nb_prix_unitaire_moyen_3,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prix_unitaire_moyen,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.regle_prestation_texte,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.coefficient_calcule,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prix_unitaire_calcule,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.coefficient_is_force,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prix_unitaire_is_force,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.type_ligne,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prestation_10p_code,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.rubrique_code,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.rubrique_10p_code,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prestation_10p_id,
|
|
|
t_encours_calcul_parametres_services_prestations_histo.rubrique_10p_id
|
|
|
FROM activite.t_encours_calcul_parametres_services_prestations_histo
|
|
|
LEFT JOIN w_cti_encours_calcul_parametres_services_prestations ON
|
|
|
t_encours_calcul_parametres_services_prestations_histo.lieu_service_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_encours_calcul_parametres_services_prestations_histo.lieu_unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
t_encours_calcul_parametres_services_prestations_histo.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id AND
|
|
|
t_encours_calcul_parametres_services_prestations_histo.tranche_ght = w_cti_encours_calcul_parametres_services_prestations.tranche_ght
|
|
|
WHERE w_cti_encours_calcul_parametres_services_prestations.lieu_service_id IS NULL
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations SET
|
|
|
nb_ambulatoires = w_cti_encours_calcul_parametres_services_prestations.nb_ambulatoires + t_encours_calcul_parametres_services_prestations_histo.nb_ambulatoires,
|
|
|
nb_externes = w_cti_encours_calcul_parametres_services_prestations.nb_externes + t_encours_calcul_parametres_services_prestations_histo.nb_externes,
|
|
|
nb_seances = w_cti_encours_calcul_parametres_services_prestations.nb_seances + t_encours_calcul_parametres_services_prestations_histo.nb_seances,
|
|
|
nb_journees = w_cti_encours_calcul_parametres_services_prestations.nb_journees + t_encours_calcul_parametres_services_prestations_histo.nb_journees,
|
|
|
nb_journees_cp = w_cti_encours_calcul_parametres_services_prestations.nb_journees_cp + t_encours_calcul_parametres_services_prestations_histo.nb_journees_cp,
|
|
|
nombre = w_cti_encours_calcul_parametres_services_prestations.nombre + t_encours_calcul_parametres_services_prestations_histo.nombre
|
|
|
FROM activite.t_encours_calcul_parametres_services_prestations_histo
|
|
|
WHERE t_encours_calcul_parametres_services_prestations_histo.lieu_service_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_encours_calcul_parametres_services_prestations_histo.lieu_unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
t_encours_calcul_parametres_services_prestations_histo.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
t_encours_calcul_parametres_services_prestations_histo.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id AND
|
|
|
t_encours_calcul_parametres_services_prestations_histo.tranche_ght = w_cti_encours_calcul_parametres_services_prestations.tranche_ght
|
|
|
;
|
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
--
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET coefficient =
|
|
|
CASE
|
|
|
WHEN base.cti_division(nombre, nb_seances) < 0.1 THEN 0
|
|
|
WHEN base.cti_division(nombre, nb_seances) > 0.4 THEN 1
|
|
|
ELSE round(base.cti_division(nombre, nb_seances),2)
|
|
|
END
|
|
|
WHERE prestation_code IN ('D09', 'D11', 'D13', 'D13', 'D15', 'D16', 'DTP');
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET coefficient =
|
|
|
CASE
|
|
|
WHEN base.cti_division(nombre, nb_journees) < 0.05 THEN 0
|
|
|
WHEN base.cti_division(nombre, nb_journees) < 0.1 AND nombre < 100 THEN 0
|
|
|
WHEN base.cti_division(nombre, nb_journees) > 0.95 THEN 1
|
|
|
ELSE round(base.cti_division(nombre, nb_journees),2)
|
|
|
END
|
|
|
WHERE prestation_code IN ('SRC', 'REA', 'STF');
|
|
|
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET coefficient =
|
|
|
CASE
|
|
|
WHEN base.cti_division(nombre, nb_journees_cp) < 0.05 THEN 0
|
|
|
WHEN base.cti_division(nombre, nb_journees_cp) > 1 THEN 1
|
|
|
ELSE round(base.cti_division(nombre, nb_journees_cp),2)
|
|
|
END
|
|
|
WHERE prestation_code IN ('CPC', 'SHO', 'CP') OR prestation_type_valorisation IN ('CP');
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET nb_journees = w_cti_encours_calcul_parametres_services_prestations.nombre,
|
|
|
coefficient =
|
|
|
CASE
|
|
|
WHEN base.cti_division(nombre, nb_journees) < 0.1 THEN 0
|
|
|
ELSE 1
|
|
|
END
|
|
|
FROM
|
|
|
(
|
|
|
SELECT lieu_service_id, lieu_unite_fonctionnelle_id,
|
|
|
base.cti_division(SUM(nombre), MAX(nb_journees))
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
WHERE prestation_code IN ('GHT')
|
|
|
GROUP BY 1,2
|
|
|
) subview
|
|
|
WHERE w_cti_encours_calcul_parametres_services_prestations.lieu_service_id = subview.lieu_service_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id = subview.lieu_unite_fonctionnelle_id AND
|
|
|
prestation_code IN ('GHT');
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET coefficient =
|
|
|
CASE
|
|
|
WHEN base.cti_division(nombre, nb_ambulatoires + nb_externes) < 0.05 THEN 0
|
|
|
WHEN base.cti_division(nombre, nb_ambulatoires + nb_externes) > 1 THEN 1
|
|
|
ELSE round(base.cti_division(nombre, nb_ambulatoires + nb_externes),2)
|
|
|
END
|
|
|
WHERE prestation_code IN ('AMD', 'AMF', 'IGM', 'IGP', 'APD', 'IMD', 'IMI', 'IPD', 'IVG');
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET coefficient =
|
|
|
CASE
|
|
|
WHEN base.cti_division(nombre, nb_journees) < 0.05 THEN 0
|
|
|
WHEN base.cti_division(nombre, nb_journees) > 1 THEN 1
|
|
|
ELSE round(base.cti_division(nombre, nb_journees),2)
|
|
|
END
|
|
|
WHERE prestation_code IN ('NN1', 'NN2', 'NN3');
|
|
|
|
|
|
-- FPU à compter de janvier 2022. Initialisation provisoire
|
|
|
INSERT INTO activite.t_prestations(code_original, code, texte, texte_court)
|
|
|
SELECT 'FPU'::text, 'FPU'::text, 'Forfait patient urgences'::text, 'Forfait patient urgences'::text
|
|
|
WHERE 'FPU'::text NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL )
|
|
|
;
|
|
|
|
|
|
INSERT INTO w_cti_encours_calcul_parametres_services_prestations
|
|
|
SELECT coefficient_mco,
|
|
|
lieu_service_id,
|
|
|
lieu_unite_fonctionnelle_id,
|
|
|
nb_ambulatoires,
|
|
|
nb_externes,
|
|
|
nb_seances,
|
|
|
nb_journees,
|
|
|
nb_journees_cp,
|
|
|
t_prestations.oid AS prestation_id,
|
|
|
t_prestations.code AS prestation_code,
|
|
|
''::text AS tranche_ght,
|
|
|
prestation_type_valorisation,
|
|
|
rubrique_facturation_id,
|
|
|
19.61::numeric as prix_unitaire,
|
|
|
0::numeric as nombre,
|
|
|
0::numeric AS coefficient,
|
|
|
19.61::numeric as prix_unitaire_moyen_1,
|
|
|
0::numeric as nb_prix_unitaire_moyen_1,
|
|
|
19.61::numeric as prix_unitaire_moyen_3,
|
|
|
0::numeric as nb_prix_unitaire_moyen_3,
|
|
|
19.61::numeric as prix_unitaire_moyen,
|
|
|
regle_prestation_texte,
|
|
|
coefficient_calcule,
|
|
|
19.61::numeric AS prix_unitaire_calcule,
|
|
|
coefficient_is_force,
|
|
|
prix_unitaire_is_force,
|
|
|
''::text AS type_ligne
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
JOIN activite.t_prestations ON t_prestations.code = 'FPU'
|
|
|
WHERE prestation_code = 'ATU' AND
|
|
|
(lieu_service_id::text||'-'||lieu_unite_fonctionnelle_id::text||'-'||t_prestations.code::text) NOT IN
|
|
|
(
|
|
|
SELECT lieu_service_id::text||'-'||lieu_unite_fonctionnelle_id::text||'-'||prestation_code::text FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
)
|
|
|
;
|
|
|
|
|
|
-- Le coefficient calculé est la somme des ATU FPU
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET coefficient = subview.coefficient
|
|
|
FROM
|
|
|
(
|
|
|
SELECT lieu_service_id, lieu_unite_fonctionnelle_id,
|
|
|
CASE
|
|
|
WHEN base.cti_division(SUM(nombre), MAX(nb_externes)) < 0.05 THEN 0
|
|
|
WHEN base.cti_division(SUM(nombre), MAX(nb_externes)) > 0.95 THEN 1
|
|
|
ELSE round(base.cti_division(SUM(nombre), MAX(nb_externes)),2)
|
|
|
END AS coefficient
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
WHERE prestation_code IN ('ATU','FPU')
|
|
|
GROUP BY 1,2
|
|
|
) subview
|
|
|
WHERE prestation_code IN ('ATU','FPU') AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.lieu_service_id = subview.lieu_service_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id = subview.lieu_unite_fonctionnelle_id
|
|
|
;
|
|
|
|
|
|
-- Prix unitaire moyen par jour
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET prix_unitaire = base.cti_division(prix_unitaire_moyen * nombre , nb_journees + nb_ambulatoires)
|
|
|
WHERE prestation_type_valorisation = '*AVGJOUSER';
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET prix_unitaire = 0
|
|
|
WHERE prestation_type_valorisation = '*AVGJOUSER' AND
|
|
|
(prix_unitaire < 20 AND base.cti_division(nombre,nb_journees + nb_ambulatoires) < 0.8 OR
|
|
|
prix_unitaire < 1
|
|
|
);
|
|
|
|
|
|
-- pas de séjour si absence
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET prix_unitaire = 0
|
|
|
WHERE lieu_service_id IN
|
|
|
(
|
|
|
SELECT oid
|
|
|
FROM activite.t_services_facturation
|
|
|
WHERE est_absence = '1'
|
|
|
)
|
|
|
;
|
|
|
|
|
|
-- Prestations comme séjour, seulement si significatif
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET prix_unitaire = 0
|
|
|
WHERE (prestation_type_valorisation IN ('PJ', 'GMT') OR prestation_code IN ('PJ', 'GMT')) AND
|
|
|
(prix_unitaire < 20 AND base.cti_division(nombre,nb_journees + nb_ambulatoires) < 0.8 OR
|
|
|
prix_unitaire < 1
|
|
|
);
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET prix_unitaire = 0
|
|
|
WHERE (prestation_type_valorisation IN ('PJ', 'GMT') OR prestation_code IN ('PJ', 'GMT')) AND
|
|
|
(base.cti_division(nombre,nb_journees + nb_ambulatoires) < 0.2
|
|
|
);
|
|
|
|
|
|
-- Sauvegarde des prix calcules
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations SET
|
|
|
coefficient_calcule = coefficient,
|
|
|
prix_unitaire_calcule = prix_unitaire
|
|
|
;
|
|
|
|
|
|
-- Paramètres qui ne sont pas dans l'historique
|
|
|
INSERT INTO w_cti_encours_calcul_parametres_services_prestations
|
|
|
SELECT
|
|
|
t_calcul_encours.coefficient_mco
|
|
|
, t_calcul_encours.lieu_service_id
|
|
|
, t_calcul_encours.lieu_unite_fonctionnelle_id
|
|
|
, 0::numeric AS nb_ambulatoires
|
|
|
, 0::numeric AS nb_externes
|
|
|
, 0::numeric AS nb_seances
|
|
|
, 0::numeric AS nb_journees
|
|
|
, 0::numeric AS nb_journees_cp
|
|
|
, t_calcul_encours.prestation_id
|
|
|
, t_prestations.code AS prestation_code
|
|
|
, ''::text AS tranche_ght
|
|
|
, COALESCE(t_prestations.type_valorisation_non_facture,'') AS prestation_type_valorisation
|
|
|
, rubrique_facturation_id
|
|
|
, 0::numeric AS prix_unitaire
|
|
|
, 0::numeric AS nombre
|
|
|
, 0::numeric AS coefficient
|
|
|
, 0::numeric AS prix_unitaire_moyen_1
|
|
|
, 0::numeric AS nb_prix_unitaire_moyen_1
|
|
|
, 0::numeric AS prix_unitaire_moyen_3
|
|
|
, 0::numeric AS nb_prix_unitaire_moyen_3
|
|
|
, 0::numeric AS prix_unitaire_moyen
|
|
|
, ''::text AS regle_prestation_texte
|
|
|
, 0::numeric AS coefficient_calcule
|
|
|
, 0::numeric AS prix_unitaire_calcule
|
|
|
, '0'::text AS coefficient_is_force
|
|
|
, '0'::text AS prix_unitaire_is_force
|
|
|
, ''::text AS type_ligne
|
|
|
FROM activite.t_calcul_encours
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE
|
|
|
type_ligne = 'PRESTA-PC'
|
|
|
AND (
|
|
|
coefficient_is_force = '1'
|
|
|
OR prix_unitaire_is_force = '1'
|
|
|
)
|
|
|
AND (lieu_service_id::text||'-'||lieu_unite_fonctionnelle_id::text||'-'||prestation_id::text||'-'||rubrique_facturation_id::text) NOT IN
|
|
|
(
|
|
|
SELECT lieu_service_id::text||'-'||lieu_unite_fonctionnelle_id::text||'-'||prestation_id::text||'-'||rubrique_facturation_id::text
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
)
|
|
|
;
|
|
|
|
|
|
DELETE FROM activite.t_calcul_encours
|
|
|
WHERE type_ligne = 'PRESTA-PC'
|
|
|
AND NOT (
|
|
|
coefficient_is_force = '1'
|
|
|
OR prix_unitaire_is_force = '1'
|
|
|
)
|
|
|
AND (lieu_service_id::text||'-'||lieu_unite_fonctionnelle_id::text||'-'||prestation_id::text||'-'||rubrique_facturation_id::text) NOT IN
|
|
|
(
|
|
|
SELECT lieu_service_id::text||'-'||lieu_unite_fonctionnelle_id::text||'-'||prestation_id::text||'-'||rubrique_facturation_id::text
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
)
|
|
|
;
|
|
|
|
|
|
-- Coefficients et prix unitaire force
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations SET
|
|
|
coefficient = t_calcul_encours.coefficient_force,
|
|
|
coefficient_is_force = '1'
|
|
|
FROM activite.t_calcul_encours
|
|
|
WHERE t_calcul_encours.lieu_service_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_calcul_encours.lieu_unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
t_calcul_encours.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
t_calcul_encours.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id AND
|
|
|
t_calcul_encours.type_ligne LIKE 'PRESTA%' AND
|
|
|
t_calcul_encours.coefficient_is_force = '1'
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations SET
|
|
|
prix_unitaire = t_calcul_encours.prix_unitaire_force,
|
|
|
prix_unitaire_is_force = '1'
|
|
|
FROM activite.t_calcul_encours
|
|
|
WHERE t_calcul_encours.lieu_service_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_calcul_encours.lieu_unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
t_calcul_encours.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
t_calcul_encours.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id AND
|
|
|
t_calcul_encours.type_ligne LIKE 'PRESTA%' AND
|
|
|
t_calcul_encours.prix_unitaire_is_force = '1'
|
|
|
;
|
|
|
|
|
|
-- Texte des règles appliquéées
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET regle_prestation_texte =
|
|
|
'Coefficient ' || to_char(coefficient,'FM90D00') ||
|
|
|
CASE WHEN coefficient_is_force <> '1'
|
|
|
THEN ' issu du taux de facturation de ' || prestation_code || ' (rubrique ' || t_rubriques_facturation.code || ')' ||
|
|
|
' : ' || to_char(nombre,'FM999999999999') || ' journées facturées sur ' ||
|
|
|
to_char(nb_journees,'FM999999999999') || ' journées dans le service ' ||
|
|
|
t_services_facturation.texte || ' (' || t_services_facturation.code || ') ' ||
|
|
|
'des séjours facturés sortis des ' || _ENCOURSRETROSUP || ' derniers mois (' || to_char(w_date_histo_coeff_presta,'DD/MM/YYYY') || ')'
|
|
|
ELSE ' forcé dans le paramétrage de la génération des encours ' END
|
|
|
FROM activite.t_services_facturation, activite.t_rubriques_facturation
|
|
|
WHERE lieu_service_id = t_services_facturation.oid AND
|
|
|
rubrique_facturation_id = t_rubriques_facturation.oid AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.coefficient > 0 AND
|
|
|
prestation_code IN ('SRC', 'REA', 'STF', 'AMD', 'AMF', 'IGM', 'IGP', 'APD', 'IMD', 'IMI', 'IPD', 'IVG', 'NN1', 'NN2', 'NN3');
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET regle_prestation_texte =
|
|
|
'Coefficient ' || to_char(coefficient,'FM90D00') ||
|
|
|
CASE WHEN coefficient_is_force <> '1'
|
|
|
THEN ' issu du taux de facturation de ' || prestation_code || ' (rubrique ' || t_rubriques_facturation.code || ')' ||
|
|
|
' : ' || to_char(nombre,'FM999999999999') || ' journées facturées sur ' ||
|
|
|
to_char(nb_journees_cp,'FM999999999999') || ' journées en CP dans le service ' ||
|
|
|
t_services_facturation.texte || ' (' || t_services_facturation.code || ') ' ||
|
|
|
'des séjours facturés sortis des ' || _ENCOURSRETROSUP || ' derniers mois (' || to_char(w_date_histo_coeff_presta,'DD/MM/YYYY') || ')'
|
|
|
ELSE ' forcé dans le paramétrage de la génération des encours ' END
|
|
|
FROM activite.t_services_facturation, activite.t_rubriques_facturation
|
|
|
WHERE lieu_service_id = t_services_facturation.oid AND
|
|
|
rubrique_facturation_id = t_rubriques_facturation.oid AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.coefficient > 0 AND
|
|
|
(prestation_code IN ('CPC', 'SHO', 'CP') OR prestation_type_valorisation IN ('CP'));
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET regle_prestation_texte =
|
|
|
'Coefficient ' || to_char(coefficient,'FM90D00') ||
|
|
|
CASE WHEN coefficient_is_force <> '1'
|
|
|
THEN ' issu du taux de facturation de ' || prestation_code || ' (rubrique ' || t_rubriques_facturation.code || ')' ||
|
|
|
' : ' || to_char(nombre,'FM999999999999') || ' séances facturées sur ' ||
|
|
|
to_char(nb_seances,'FM999999999999') || ' séances dans le service ' ||
|
|
|
t_services_facturation.texte || ' (' || t_services_facturation.code || ') ' ||
|
|
|
'des séjours facturés sortis des ' || _ENCOURSRETROSUP || ' derniers mois (' || to_char(w_date_histo_coeff_presta,'DD/MM/YYYY') || ')'
|
|
|
ELSE ' forcé dans le paramétrage de la génération des encours ' END
|
|
|
FROM activite.t_services_facturation, activite.t_rubriques_facturation
|
|
|
WHERE lieu_service_id = t_services_facturation.oid AND
|
|
|
rubrique_facturation_id = t_rubriques_facturation.oid AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.coefficient > 0 AND
|
|
|
prestation_code IN ('D09','D11', 'D13', 'D13', 'D15', 'D16', 'DTP');
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET regle_prestation_texte =
|
|
|
'P.U. ' || to_char(prix_unitaire,'FM99999999990D00') ||
|
|
|
CASE WHEN prix_unitaire_is_force <> '1'
|
|
|
THEN ' issu du P.U. moyen quotidien ' ||
|
|
|
CASE
|
|
|
WHEN tranche_ght = '1' THEN '(<= 4j)'
|
|
|
WHEN tranche_ght = '2' THEN '(5-9j)'
|
|
|
WHEN tranche_ght = '3' THEN '(10-30j)'
|
|
|
ELSE '(> 30j)' END || ' de ' || prestation_code || ' (rubrique ' || t_rubriques_facturation.code || ')' ||
|
|
|
' : ' || to_char(nb_journees + nb_ambulatoires,'FM999999999999') || ' journées facturées pour un montant de ' ||
|
|
|
to_char(prix_unitaire_moyen * nombre,'FM999999999999') || ' euros dans le service ' ||
|
|
|
t_services_facturation.texte || ' (' || t_services_facturation.code || ') ' ||
|
|
|
'des séjours facturés sortis des ' || _ENCOURSRETROSUP || ' derniers mois (' || to_char(w_date_histo_coeff_presta,'DD/MM/YYYY') || ')'
|
|
|
ELSE ' forcé dans le paramétrage de la génération des encours ' END
|
|
|
FROM activite.t_services_facturation, activite.t_rubriques_facturation
|
|
|
WHERE lieu_service_id = t_services_facturation.oid AND
|
|
|
rubrique_facturation_id = t_rubriques_facturation.oid AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prix_unitaire > 0 AND
|
|
|
(prestation_code IN ('GHT'))
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET regle_prestation_texte =
|
|
|
'P.U. ' || to_char(prix_unitaire,'FM99999999990D00') ||
|
|
|
CASE WHEN prix_unitaire_is_force <> '1'
|
|
|
THEN ' issu du P.U. moyen quotidien de ' || prestation_code || ' (rubrique ' || t_rubriques_facturation.code || ')' ||
|
|
|
' : ' || to_char(nb_journees + nb_ambulatoires,'FM999999999999') || ' journées facturées pour un montant de ' ||
|
|
|
to_char(prix_unitaire_moyen * nombre,'FM999999999999') || ' euros dans le service ' ||
|
|
|
t_services_facturation.texte || ' (' || t_services_facturation.code || ') ' ||
|
|
|
'des séjours facturés sortis des ' || _ENCOURSRETROSUP || ' derniers mois (' || to_char(w_date_histo_coeff_presta,'DD/MM/YYYY') || ')'
|
|
|
ELSE ' forcé dans le paramétrage de la génération des encours ' END
|
|
|
FROM activite.t_services_facturation, activite.t_rubriques_facturation
|
|
|
WHERE lieu_service_id = t_services_facturation.oid AND
|
|
|
rubrique_facturation_id = t_rubriques_facturation.oid AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prix_unitaire > 0 AND
|
|
|
(prestation_type_valorisation = '*AVGJOUSER' OR prestation_code IN ('GHT'))
|
|
|
;
|
|
|
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Historique taux facturation AMO BG';
|
|
|
DROP TABLE IF EXISTS w_actes_120;
|
|
|
CREATE TEMP TABLE w_actes_120 AS
|
|
|
SELECT p_factures.no_sejour
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
JOIN activite.p_factures ON p_factures_lignes_h.no_facture = p_factures.no_facture
|
|
|
WHERE p_factures_lignes_h.prix_unitaire >= 120
|
|
|
GROUP BY 1;
|
|
|
INSERT INTO w_actes_120
|
|
|
SELECT p_factures.no_sejour
|
|
|
FROM activite.p_factures_lignes_non_facturees_h
|
|
|
JOIN activite.p_factures ON p_factures_lignes_non_facturees_h.no_facture = p_factures.no_facture
|
|
|
WHERE p_factures_lignes_non_facturees_h.prix_unitaire >= 120
|
|
|
GROUP BY 1;
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_histo_taux
|
|
|
SELECT service_facturation_id, AVG(taux_ghs_1) AS taux_ghs_1, count(*) AS nb, ''::text AS regle_taux_texte
|
|
|
FROM
|
|
|
(
|
|
|
SELECT p_factures.no_sejour,
|
|
|
MAX(t_lieux.service_facturation_id) AS service_facturation_id,
|
|
|
MAX(COALESCE(taux_1,0)) AS taux_ghs_1
|
|
|
FROM activite.p_sejours
|
|
|
JOIN activite.p_factures ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN activite.t_lieux ON lieu_sortie_id = t_lieux.oid
|
|
|
JOIN activite.t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid AND type_t2a = '1'
|
|
|
LEFT JOIN activite.p_factures_lignes_c ON p_factures_lignes_c.no_facture = p_factures.no_facture AND
|
|
|
prestation_id IN (SELECT oid FROM activite.t_prestations WHERE code = 'GHS')
|
|
|
WHERE p_sejours.est_budget_global = '1' AND
|
|
|
p_sejours.date_sortie BETWEEN w_date_histo_18 AND w_date_traitement AND
|
|
|
p_sejours.no_sejour NOT IN (SELECT no_sejour FROM w_actes_120) AND
|
|
|
(p_sejours.date_sortie - p_sejours.date_entree) <= 30
|
|
|
GROUP BY 1
|
|
|
HAVING MIN(p_factures.code_facture) >= '1'
|
|
|
) subview
|
|
|
GROUP BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_histo_taux
|
|
|
SELECT oid, 0, 0, ''::text AS regle_taux_texte
|
|
|
FROM activite.t_services_facturation
|
|
|
WHERE oid NOT IN (SELECT service_facturation_id FROM w_cti_encours_factures_histo_taux) AND
|
|
|
est_budget_global = '1'
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_factures_histo_taux
|
|
|
SET taux_ghs_1 =
|
|
|
round(CASE
|
|
|
WHEN nb < 10 THEN (SELECT base.cti_division(SUM(taux_ghs_1*nb),SUM(nb)) FROM w_cti_encours_factures_histo_taux)
|
|
|
WHEN taux_ghs_1 > 99 THEN 100
|
|
|
ELSE taux_ghs_1
|
|
|
END,2),
|
|
|
nb = CASE
|
|
|
WHEN nb < 10 THEN (SELECT SUM(nb) FROM w_cti_encours_factures_histo_taux)
|
|
|
ELSE w_cti_encours_factures_histo_taux.nb END
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_factures_histo_taux
|
|
|
SET regle_taux_texte = 'Ticket modérateur moyen ' || to_char(100-taux_ghs_1,'FM9990D00%') || ' des ' ||
|
|
|
to_char(nb,'FM99999990') || ' séjours Budget Global MCO facturés sortis depuis 18 mois (' || to_char(w_date_histo_18,'DD/MM/YYYY') || ') pour le service ' ||
|
|
|
t_services_facturation.texte || ' (' || t_services_facturation.code || ')'
|
|
|
FROM activite.t_services_facturation
|
|
|
WHERE service_facturation_id = t_services_facturation.oid AND
|
|
|
nb >= 10
|
|
|
;
|
|
|
|
|
|
|
|
|
UPDATE w_cti_encours_factures_histo_taux
|
|
|
SET regle_taux_texte = 'Ticket modérateur moyen ' || to_char(100-taux_ghs_1,'FM9990D00%') || ' des ' ||
|
|
|
to_char(nb,'FM99999990') || ' séjours Budget Global MCO sortis depuis 18 mois (' || to_char(w_date_histo_18,'DD/MM/YYYY') || ') pour tous les services'
|
|
|
WHERE nb < 10
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET coefficient = 0, prix_unitaire = 0, prix_unitaire_moyen_1 = 0, prix_unitaire_moyen_3 = 0
|
|
|
FROM activite.t_services_facturation
|
|
|
WHERE lieu_service_id = t_services_facturation.oid AND
|
|
|
t_services_facturation.est_absence = '1'
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Sejours a traiter';
|
|
|
INSERT INTO w_cti_encours_sejours
|
|
|
SELECT p_sejours.oid AS sejour_id,
|
|
|
p_sejours.no_sejour,
|
|
|
p_sejours.type_sejour,
|
|
|
p_sejours.est_budget_global,
|
|
|
CASE WHEN p_sejours.est_budget_global = '1' THEN '1' ELSE '2' END AS secteur_tarif,
|
|
|
t_medecins_administratifs.medecin_id AS medecin_sejour_id,
|
|
|
COALESCE(t_medecins.specialite_id,0) AS specialite_medecin_sejour_id,
|
|
|
t_lieux.service_facturation_id AS lieu_sortie_service_id,
|
|
|
t_lieux.unite_fonctionnelle_id AS lieu_sortie_unite_fonctionnelle_id,
|
|
|
code_sorti,
|
|
|
lieu_sortie_id,
|
|
|
mode_sortie,
|
|
|
date_groupage,
|
|
|
tiers_payant_1_id,
|
|
|
tiers_payant_2_id,
|
|
|
COALESCE(SUM(nb_seances),1) AS nb_ghs,
|
|
|
p_sejours.ghm_id,
|
|
|
p_sejours.ghs_id,
|
|
|
p_sejours.ghs_bebe1_id,
|
|
|
p_sejours.ghs_bebe2_id,
|
|
|
p_sejours.ghs_bebe3_id,
|
|
|
COALESCE(t_services_facturation.particularites_encours,''),
|
|
|
CASE WHEN p_sejours.type_sejour <> '3' THEN COALESCE(t_services_facturation.type_t2a,'0') ELSE '0' END
|
|
|
FROM w_cti_encours_calcul_parametres,
|
|
|
activite.p_sejours
|
|
|
JOIN activite.t_lieux ON lieu_sortie_id = t_lieux.oid
|
|
|
JOIN activite.t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid
|
|
|
JOIN activite.t_medecins_administratifs ON p_sejours.medecin_sejour_id = t_medecins_administratifs.oid
|
|
|
LEFT JOIN base.t_medecins ON t_medecins_administratifs.medecin_id = t_medecins.oid
|
|
|
LEFT JOIN activite.p_mouvements_sejour ON
|
|
|
p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND
|
|
|
p_sejours.type_sejour = '5' AND nb_seances > 0
|
|
|
WHERE p_sejours.etat = '' AND
|
|
|
code_prevu = '0' AND
|
|
|
date_entree <= w_date_traitement AND
|
|
|
(code_sorti = '1' OR date_sortie >= w_date_histo_18) AND
|
|
|
p_sejours.type_sejour <> '9'
|
|
|
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_sejours
|
|
|
SET code_sorti = '1'
|
|
|
WHERE type_sejour = '5' AND
|
|
|
code_sorti <> '1'
|
|
|
;
|
|
|
|
|
|
ANALYSE w_cti_encours_sejours
|
|
|
;
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Prix unitaire honoraires non factures' ;
|
|
|
|
|
|
UPDATE activite.p_factures_lignes_non_facturees_h
|
|
|
SET prix_unitaire = subview.prix_unitaire
|
|
|
FROM
|
|
|
(
|
|
|
SELECT acte_id, activite_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4,
|
|
|
base.cti_division(SUM(montant_facture_1),SUM(nb_prestation*coefficient)) AS prix_unitaire
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
WHERE acte_id IN (SELECT acte_id FROM activite.p_factures_lignes_non_facturees_h WHERE prix_unitaire = 0) AND
|
|
|
montant_facture_1 > 0
|
|
|
GROUP BY 1,2,3,4,5,6
|
|
|
) subview
|
|
|
WHERE p_factures_lignes_non_facturees_h.prix_unitaire = 0 AND
|
|
|
p_factures_lignes_non_facturees_h.acte_id = subview.acte_id AND
|
|
|
p_factures_lignes_non_facturees_h.activite_ccam = subview.activite_ccam AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_1 = subview.modificateur_ccam_1 AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_2 = subview.modificateur_ccam_2 AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_3 = subview.modificateur_ccam_3 AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_4 = subview.modificateur_ccam_4 AND
|
|
|
p_factures_lignes_non_facturees_h.prix_unitaire = 0
|
|
|
;
|
|
|
|
|
|
UPDATE activite.p_factures_lignes_non_facturees_h
|
|
|
SET prix_unitaire = subview.prix_unitaire
|
|
|
FROM
|
|
|
(
|
|
|
SELECT acte_id, activite_ccam,
|
|
|
base.Cti_division(SUM(montant_facture_1),SUM(nb_prestation*coefficient)) AS prix_unitaire
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
WHERE acte_id IN (SELECT acte_id FROM activite.p_factures_lignes_non_facturees_h WHERE prix_unitaire = 0) AND
|
|
|
montant_facture_1 > 0
|
|
|
GROUP BY 1,2
|
|
|
) subview
|
|
|
WHERE p_factures_lignes_non_facturees_h.prix_unitaire = 0 AND
|
|
|
p_factures_lignes_non_facturees_h.acte_id = subview.acte_id AND
|
|
|
p_factures_lignes_non_facturees_h.activite_ccam = subview.activite_ccam AND
|
|
|
p_factures_lignes_non_facturees_h.prix_unitaire = 0
|
|
|
|
|
|
;
|
|
|
|
|
|
UPDATE activite.p_factures_lignes_non_facturees_h
|
|
|
SET prix_unitaire = subview.prix_unitaire
|
|
|
FROM
|
|
|
(
|
|
|
SELECT acte_id, prestation_id, (MAX(Array[date_debut::text,prix_unitaire::text]))[2]::numeric AS prix_unitaire
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
WHERE prix_unitaire <> 0 AND
|
|
|
acte_id IN (SELECT acte_id FROM activite.p_factures_lignes_non_facturees_h WHERE prix_unitaire = 0)
|
|
|
GROUP BY 1,2
|
|
|
) subview
|
|
|
WHERE p_factures_lignes_non_facturees_h.prix_unitaire = 0 AND
|
|
|
p_factures_lignes_non_facturees_h.acte_id = subview.acte_id AND
|
|
|
p_factures_lignes_non_facturees_h.prestation_id = subview.prestation_id
|
|
|
;
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Historique facturation GHS' ;
|
|
|
|
|
|
-- Sur HM, il y a un séjour spécifique pour bébé, il ne faut donc pas tenir compte du GHS bébé du prestataire précédent pour calculer les moyennes
|
|
|
-- Création d'une table de travail avec les GHS mères (cas de 2 prix unitaires GHS, on prend le plus grand)
|
|
|
DROP TABLE IF EXISTS w_cti_encours_calcul_ghs_hm_mat_mere;
|
|
|
CREATE TEMP TABLE w_cti_encours_calcul_ghs_hm_mat_mere AS
|
|
|
SELECT p_factures_lignes_c.no_facture AS no_facture_mat_mere,
|
|
|
p_factures_lignes_c.prestation_id AS prestation_id_mat_mere,
|
|
|
MAX(prix_unitaire) AS prix_unitaire_mat_mere
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN base.t_ghm ON p_sejours.ghm_id = t_ghm.oid
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
JOIN (
|
|
|
SELECT 1::integer AS ok_hm
|
|
|
FROM activite.t_providers
|
|
|
HAVING MAX(CASE WHEN oid = 0 AND code ILIKE 'HM' THEN 1 ELSE 0 END) = 1 AND
|
|
|
MAX(CASE WHEN oid <> 0 AND code NOT ILIKE 'HM' THEN 1 ELSE 0 END) = 1
|
|
|
) subview ON ok_hm = 1
|
|
|
WHERE t_prestations.code = 'GHS' AND p_factures.date_fin > '20170101' AND t_ghm.code LIKE '14%' AND
|
|
|
montant_facture > 0
|
|
|
GROUP BY 1,2
|
|
|
HAVING count(DISTINCT prix_unitaire) > 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO w_cti_encours_histo_sejour_facture
|
|
|
SELECT
|
|
|
w_cti_encours_sejours.no_sejour,
|
|
|
p_factures.date_fin,
|
|
|
CASE WHEN MAX(t_ghm.code) LIKE '05C19%' THEN '05C19' WHEN MAX(t_prestations.code) = 'I01' THEN 'I01' ELSE '' END AS classe_ghm,
|
|
|
w_cti_encours_sejours.medecin_sejour_id,
|
|
|
w_cti_encours_sejours.specialite_medecin_sejour_id,
|
|
|
w_cti_encours_sejours.lieu_sortie_service_id,
|
|
|
w_cti_encours_sejours.lieu_sortie_unite_fonctionnelle_id,
|
|
|
w_cti_encours_sejours.nb_ghs,
|
|
|
CASE WHEN w_cti_encours_sejours.type_sejour = '5' THEN 'S'
|
|
|
WHEN p_factures.date_fin - p_factures.date_debut <= 1 THEN '1'
|
|
|
WHEN p_factures.date_fin - p_factures.date_debut <= 3 THEN '2'
|
|
|
WHEN p_factures.date_fin - p_factures.date_debut <= 6 THEN '3'
|
|
|
WHEN p_factures.date_fin - p_factures.date_debut <= 10 THEN '4'
|
|
|
ELSE '5' END as tranche_sejour,
|
|
|
CASE WHEN w_cti_encours_sejours.type_sejour = '5' THEN 0 ELSE p_factures.date_fin - p_factures.date_debut END as duree_sejour,
|
|
|
SUM(CASE WHEN base.cti_division(t_ghs_tarifs.tarif_ghs,t_ghs_tarifs_a.tarif_ghs) > 0 THEN montant_facture * base.cti_division(t_ghs_tarifs.tarif_ghs,t_ghs_tarifs_a.tarif_ghs) ELSE montant_facture END) AS montant_ghs,
|
|
|
SUM(montant_facture) AS montant_ghs_original,
|
|
|
MAX(p_factures_lignes_c.taux_0),
|
|
|
MAX(p_factures_lignes_c.taux_1),
|
|
|
MAX(p_factures_lignes_c.taux_2+p_factures_lignes_c.taux_22)
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
LEFT JOIN w_cti_encours_calcul_ghs_hm_mat_mere ON
|
|
|
w_cti_encours_calcul_ghs_hm_mat_mere.no_facture_mat_mere = p_factures_lignes_c.no_facture AND
|
|
|
w_cti_encours_calcul_ghs_hm_mat_mere.prestation_id_mat_mere = p_factures_lignes_c.prestation_id
|
|
|
JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture AND
|
|
|
p_factures.date_fin BETWEEN w_date_histo_18 AND w_date_traitement AND
|
|
|
p_factures.type_facture IN ('0','H','G') AND
|
|
|
p_factures.code_facture >= '1' AND p_factures.ghs_id > 0 AND p_factures.no_facture = p_factures.no_facture_reference
|
|
|
JOIN w_cti_encours_sejours ON p_factures.no_sejour = w_cti_encours_sejours.no_sejour AND w_cti_encours_sejours.code_sorti = '1'
|
|
|
LEFT JOIN base.t_ghs_tarifs ON t_ghs_tarifs.ghs_id = p_factures.ghs_id AND
|
|
|
t_ghs_tarifs.secteur = w_cti_encours_sejours.secteur_tarif AND t_ghs_tarifs.tarif_ghs <> 0 AND
|
|
|
w_date_encours BETWEEN t_ghs_tarifs.date_debut AND t_ghs_tarifs.date_fin
|
|
|
LEFT JOIN base.t_ghs_tarifs t_ghs_tarifs_a ON t_ghs_tarifs_a.ghs_id = p_factures.ghs_id AND
|
|
|
t_ghs_tarifs_a.secteur = w_cti_encours_sejours.secteur_tarif AND t_ghs_tarifs_a.tarif_ghs <> 0 AND
|
|
|
p_factures.date_fin BETWEEN t_ghs_tarifs_a.date_debut AND t_ghs_tarifs_a.date_fin
|
|
|
LEFT JOIN base.t_ghm ON w_cti_encours_sejours.ghm_id = t_ghm.oid
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE prestation_id IN (SELECT oid FROM activite.t_prestations WHERE code IN ('GHS', 'EXH', 'I01')) AND
|
|
|
montant_facture <> 0 AND
|
|
|
(
|
|
|
w_cti_encours_calcul_ghs_hm_mat_mere.no_facture_mat_mere IS NULL OR
|
|
|
w_cti_encours_calcul_ghs_hm_mat_mere.prix_unitaire_mat_mere = p_factures_lignes_c.prix_unitaire
|
|
|
)
|
|
|
GROUP BY 1,2,4,5,6,7,8,9,10;
|
|
|
-- Ajustement pour QSP (plusieurs factures pour le GHS
|
|
|
UPDATE w_cti_encours_histo_sejour_facture SET
|
|
|
montant_ghs = montant_ghs / taux_1 * 100,
|
|
|
montant_ghs_original = montant_ghs_original / taux_1 * 100
|
|
|
WHERE taux_1 BETWEEN 80 AND 90 AND
|
|
|
taux_0 = 0 AND
|
|
|
taux_2 = 0
|
|
|
;
|
|
|
|
|
|
-- Récupération historique d'un autre environnement (saint gatien)
|
|
|
IF EXISTS (
|
|
|
SELECT table_name
|
|
|
FROM information_schema.tables
|
|
|
WHERE table_schema || '.' || table_name = 'activite.t_encours_histo_sejour_facture_histo' ) THEN
|
|
|
|
|
|
INSERT INTO w_cti_encours_histo_sejour_facture
|
|
|
(
|
|
|
no_sejour,
|
|
|
date_fin,
|
|
|
classe_ghm,
|
|
|
medecin_sejour_id,
|
|
|
specialite_medecin_sejour_id,
|
|
|
lieu_sortie_service_id,
|
|
|
lieu_sortie_unite_fonctionnelle_id,
|
|
|
nb_ghs,
|
|
|
tranche_sejour,
|
|
|
duree_sejour,
|
|
|
montant_ghs,
|
|
|
montant_ghs_original,
|
|
|
taux_0,
|
|
|
taux_1,
|
|
|
taux_2
|
|
|
)
|
|
|
SELECT
|
|
|
no_sejour,
|
|
|
date_fin,
|
|
|
classe_ghm,
|
|
|
medecin_sejour_id,
|
|
|
specialite_medecin_sejour_id,
|
|
|
lieu_sortie_service_id,
|
|
|
lieu_sortie_unite_fonctionnelle_id,
|
|
|
nb_ghs,
|
|
|
tranche_sejour,
|
|
|
duree_sejour,
|
|
|
montant_ghs,
|
|
|
montant_ghs_original,
|
|
|
taux_0,
|
|
|
taux_1,
|
|
|
taux_2
|
|
|
FROM activite.t_encours_histo_sejour_facture_histo
|
|
|
;
|
|
|
|
|
|
END IF;
|
|
|
|
|
|
INSERT INTO w_cti_encours_histo_ghs (
|
|
|
classe_ghm,
|
|
|
regle,
|
|
|
medecin_sejour_id,
|
|
|
specialite_medecin_sejour_id,
|
|
|
lieu_sortie_service_id,
|
|
|
lieu_sortie_unite_fonctionnelle_id,
|
|
|
tranche_sejour,
|
|
|
duree_sejour,
|
|
|
nombre,
|
|
|
montant_moyen_ghs
|
|
|
)
|
|
|
(SELECT
|
|
|
classe_ghm,'01-MSD12'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, tranche_sejour::text, duree_sejour::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs) as montant_moyen_ghs
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'02-MST12'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, tranche_sejour, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'03-MSD18'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, tranche_sejour::text, duree_sejour::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs) as montant_moyen_ghs
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'04-MST18'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, tranche_sejour, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'05-PSD12'::text AS regle, NULL::bigint AS medecin_sejour_id, specialite_medecin_sejour_id, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, tranche_sejour::text, duree_sejour::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs) as montant_moyen_ghs
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'06-PST12'::text AS regle, NULL::bigint AS medecin_sejour_id, specialite_medecin_sejour_id, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, tranche_sejour, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'07-MXD12'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, NULL::bigint, NULL::bigint, tranche_sejour::text, duree_sejour::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs) as montant_moyen_ghs
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'08-MXT12'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, NULL::bigint, NULL::bigint, tranche_sejour, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'09-MXD18'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, NULL::bigint, NULL::bigint, tranche_sejour::text, duree_sejour::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs) as montant_moyen_ghs
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'10-MXT18'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, NULL::bigint, NULL::bigint, tranche_sejour, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'11-PXD12'::text AS regle, NULL::bigint AS medecin_sejour_id, specialite_medecin_sejour_id, NULL::bigint, NULL::bigint, tranche_sejour::text, duree_sejour::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs) as montant_moyen_ghs
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'12-PXT12'::text AS regle, NULL::bigint AS medecin_sejour_id, specialite_medecin_sejour_id, NULL::bigint, NULL::bigint, tranche_sejour, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'13-XSD18'::text AS regle, NULL::bigint, NULL::bigint, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, tranche_sejour, duree_sejour::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'21-MSX12'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, null::text, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'22-MSX18'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, null::text, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'51-MXX12'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, null::bigint, null::bigint, null::text, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0 AND date_fin >= w_date_histo_12
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'52-MXX18'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, null::bigint, null::bigint, null::text, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT
|
|
|
classe_ghm,'61-XSX18'::text AS regle, null::bigint, null::bigint, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, null::text, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0
|
|
|
GROUP BY 1,2,3,4,5,6,7,8
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS)
|
|
|
UNION
|
|
|
(SELECT classe_ghm,'99-XXX18'::text AS regle, null::bigint, null::bigint, null::bigint, null::bigint, null::text, null::integer,
|
|
|
count(*) as nombre, AVG(montant_ghs / nb_ghs)
|
|
|
FROM w_cti_encours_histo_sejour_facture
|
|
|
WHERE montant_ghs <> 0
|
|
|
GROUP BY 1,2,3,4,5,6,7,8)
|
|
|
ORDER BY 1,2,3,4;
|
|
|
|
|
|
-- Textes
|
|
|
UPDATE w_cti_encours_histo_ghs
|
|
|
SET medecin_sejour_texte = t_medecins.nom || ' ' || t_medecins.prenom || ' (' || t_medecins.code || ')'
|
|
|
FROM base.t_medecins
|
|
|
WHERE medecin_sejour_id = t_medecins.oid AND
|
|
|
medecin_sejour_id <> 0 AND
|
|
|
medecin_sejour_id IS NOT NULL
|
|
|
;
|
|
|
UPDATE w_cti_encours_histo_ghs
|
|
|
SET specialite_medecin_sejour_texte = t_specialites_medecin.texte || ' (' || t_specialites_medecin.code || ')'
|
|
|
FROM base.t_specialites_medecin
|
|
|
WHERE specialite_medecin_sejour_id = t_specialites_medecin.oid AND
|
|
|
specialite_medecin_sejour_id <> 0 AND
|
|
|
specialite_medecin_sejour_id IS NOT NULL
|
|
|
;
|
|
|
UPDATE w_cti_encours_histo_ghs
|
|
|
SET lieu_sortie_service_texte = t_services_facturation.texte || ' (' || t_services_facturation.code || ')'
|
|
|
FROM activite.t_services_facturation
|
|
|
WHERE lieu_sortie_service_id = t_services_facturation.oid AND
|
|
|
lieu_sortie_service_id <> 0 AND
|
|
|
lieu_sortie_service_id IS NOT NULL
|
|
|
;
|
|
|
UPDATE w_cti_encours_histo_ghs
|
|
|
SET lieu_sortie_unite_fonctionnelle_texte = t_unites_fonctionnelles.texte || ' (' || t_unites_fonctionnelles.code || ')'
|
|
|
FROM activite.t_unites_fonctionnelles
|
|
|
WHERE lieu_sortie_unite_fonctionnelle_id = t_unites_fonctionnelles.oid AND
|
|
|
lieu_sortie_unite_fonctionnelle_id <> 0 AND
|
|
|
lieu_sortie_unite_fonctionnelle_id IS NOT NULL
|
|
|
;
|
|
|
UPDATE w_cti_encours_histo_ghs
|
|
|
SET tranche_sejour_texte =
|
|
|
CASE tranche_sejour
|
|
|
WHEN 'S' THEN 'Séances'
|
|
|
WHEN '1' THEN '0 ou 1 nuit'
|
|
|
WHEN '2' THEN '2 ou 3 nuits'
|
|
|
WHEN '3' THEN '4,5 ou 6 nuits'
|
|
|
WHEN '4' THEN '7,8,9 ou 10 nuits'
|
|
|
WHEN '5' THEN '11 nuits et plus'
|
|
|
END
|
|
|
WHERE tranche_sejour IS NOT NULL
|
|
|
;
|
|
|
UPDATE w_cti_encours_histo_ghs
|
|
|
SET duree_sejour_texte =
|
|
|
CASE duree_sejour
|
|
|
WHEN 0 THEN '0 nuit'
|
|
|
WHEN 1 THEN '1 nuit'
|
|
|
ELSE duree_sejour::text || ' nuits'
|
|
|
END
|
|
|
WHERE duree_sejour IS NOT NULL
|
|
|
;
|
|
|
|
|
|
-- Calcul moyennes DMS
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Historique DMS';
|
|
|
|
|
|
INSERT INTO w_cti_encours_histo_dms_sejours
|
|
|
SELECT w_cti_encours_sejours.no_sejour, w_cti_encours_sejours.medecin_sejour_id, w_cti_encours_sejours.specialite_medecin_sejour_id, w_cti_encours_sejours.lieu_sortie_service_id, w_cti_encours_sejours.lieu_sortie_unite_fonctionnelle_id,
|
|
|
p_factures.date_fin, p_factures.date_debut
|
|
|
FROM activite.p_factures
|
|
|
JOIN w_cti_encours_sejours ON p_factures.no_sejour = w_cti_encours_sejours.no_sejour AND code_sorti = '1'
|
|
|
WHERE p_factures.date_fin BETWEEN w_date_histo_18 AND w_date_traitement AND type_facture IN ('0','H','G') AND p_factures.no_facture = p_factures.no_facture_reference;
|
|
|
|
|
|
INSERT INTO w_cti_encours_histo_dms
|
|
|
SELECT '1'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, round(AVG(date_fin - date_debut),0) AS dms, count(*) AS occurences
|
|
|
FROM w_cti_encours_histo_dms_sejours
|
|
|
GROUP BY 1,2,3,4,5
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS
|
|
|
UNION
|
|
|
SELECT '2'::text AS regle, medecin_sejour_id, specialite_medecin_sejour_id, null::bigint, null::bigint, round(AVG(date_fin - date_debut),0) AS dms, count(*) AS occurences
|
|
|
FROM w_cti_encours_histo_dms_sejours
|
|
|
GROUP BY 1,2,3,4,5
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS
|
|
|
UNION
|
|
|
SELECT '3'::text AS regle, null::bigint, null::bigint, lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, round(AVG(date_fin - date_debut),0) AS dms, count(*) AS occurences
|
|
|
FROM w_cti_encours_histo_dms_sejours
|
|
|
GROUP BY 1,2,3,4,5
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS
|
|
|
UNION
|
|
|
SELECT '9'::text AS regle, null::bigint, null::bigint, null::bigint, null::bigint, round(AVG(date_fin - date_debut),0) AS dms, count(*) AS occurences
|
|
|
FROM w_cti_encours_histo_dms_sejours
|
|
|
GROUP BY 1,2,3,4,5
|
|
|
HAVING count(*) >= _NBSEJMIN_HISTOGHS;
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Extraction factures à valoriser';
|
|
|
INSERT INTO w_cti_encours_factures(
|
|
|
oid, sejour_id, no_sejour, type_sejour, classe_ghm, no_facture, no_facture_encours, no_facture_reference,
|
|
|
etat, code_sorti, date_encours, date_debut, date_fin, lieu_sortie_id, mode_sortie,
|
|
|
ghs_id, ghm_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, type_t2a, est_budget_global, secteur_tarif, code_cp_demandee,
|
|
|
lieu_sortie_service_id, lieu_sortie_unite_fonctionnelle_id, medecin_sejour_id, specialite_medecin_sejour_id,
|
|
|
tiers_payant_1_id, tiers_payant_2_id, particularites_encours_service, uniquement_prestations_saisies)
|
|
|
SELECT
|
|
|
p_factures.oid, w_cti_encours_sejours.sejour_id, p_factures.no_sejour, w_cti_encours_sejours.type_sejour, ''::text AS classe_ghm, p_factures.no_facture,
|
|
|
p_factures.no_facture || '.EC' || substr(to_char(date_part('year', w_cti_encours_calcul_parametres.date_encours),'FM0000'),3,2) || to_char(date_part('month', w_cti_encours_calcul_parametres.date_encours),'FM00'),
|
|
|
p_factures.no_facture_reference,
|
|
|
CASE WHEN code_sorti <> '1' THEN 'E' WHEN p_factures.date_fin > w_date_traitement THEN 'E' ELSE 'S' END AS etat,
|
|
|
CASE WHEN code_sorti <> '1' THEN '0' WHEN p_factures.date_fin > w_date_traitement THEN '0' ELSE '1' END AS code_sorti,
|
|
|
w_cti_encours_calcul_parametres.date_encours,
|
|
|
p_factures.date_debut,
|
|
|
CASE WHEN date_fin <= w_date_traitement + interval '10 days' THEN p_factures.date_fin ELSE '20991231' END AS date_fin,
|
|
|
lieu_sortie_id,
|
|
|
mode_sortie,
|
|
|
CASE WHEN code_sorti <> '1' THEN 0 WHEN date_groupage <= w_date_traitement OR date_groupage = '20991231' THEN w_cti_encours_sejours.ghs_id ELSE 0 END AS ghs_id,
|
|
|
CASE WHEN code_sorti <> '1' THEN 0 WHEN date_groupage <= w_date_traitement OR date_groupage = '20991231' THEN w_cti_encours_sejours.ghm_id ELSE 0 END AS ghm_id,
|
|
|
CASE WHEN code_sorti <> '1' THEN 0 WHEN date_groupage <= w_date_traitement OR date_groupage = '20991231' THEN w_cti_encours_sejours.ghs_bebe1_id ELSE 0 END AS ghs_bebe1_id,
|
|
|
CASE WHEN code_sorti <> '1' THEN 0 WHEN date_groupage <= w_date_traitement OR date_groupage = '20991231' THEN w_cti_encours_sejours.ghs_bebe2_id ELSE 0 END AS ghs_bebe2_id,
|
|
|
CASE WHEN code_sorti <> '1' THEN 0 WHEN date_groupage <= w_date_traitement OR date_groupage = '20991231' THEN w_cti_encours_sejours.ghs_bebe3_id ELSE 0 END AS ghs_bebe3_id,
|
|
|
w_cti_encours_sejours.type_t2a,
|
|
|
est_budget_global,
|
|
|
CASE WHEN est_budget_global = '1' THEN '1' ELSE '2' END AS secteur_tarif,
|
|
|
p_factures.code_cp_demandee,
|
|
|
lieu_sortie_service_id,
|
|
|
lieu_sortie_unite_fonctionnelle_id,
|
|
|
medecin_sejour_id,
|
|
|
specialite_medecin_sejour_id,
|
|
|
CASE WHEN p_factures.tiers_payant_1_id <> 0 THEN p_factures.tiers_payant_1_id ELSE w_cti_encours_sejours.tiers_payant_1_id END,
|
|
|
CASE WHEN p_factures.tiers_payant_1_id <> 0 THEN p_factures.tiers_payant_2_id ELSE w_cti_encours_sejours.tiers_payant_2_id END,
|
|
|
w_cti_encours_sejours.particularites_encours_service,
|
|
|
CASE
|
|
|
WHEN p_factures.type_facture IN ('0','E') AND p_factures.no_facture = p_factures.no_facture_reference THEN '0'
|
|
|
WHEN p_factures.code_facture = '0' AND p_factures.no_facture LIKE '%BG' THEN '0'
|
|
|
WHEN est_budget_global = '1' THEN '0'
|
|
|
ELSE '1' END AS uniquement_prestations_saisies
|
|
|
FROM w_cti_encours_calcul_parametres,
|
|
|
activite.p_factures
|
|
|
JOIN w_cti_encours_sejours ON w_cti_encours_sejours.no_sejour = p_factures.no_sejour
|
|
|
WHERE
|
|
|
p_factures.type_facture <> 'P' AND
|
|
|
((p_factures.type_facture IN ('0','E') AND
|
|
|
p_factures.no_facture = p_factures.no_facture_reference)
|
|
|
OR
|
|
|
(p_factures.code_facture = '0' AND
|
|
|
p_factures.no_facture IN (SELECT no_facture FROM activite.p_factures_lignes_non_facturees_c))
|
|
|
OR
|
|
|
(p_factures.code_facture = '0' AND
|
|
|
p_factures.no_facture LIKE '%BG'
|
|
|
)
|
|
|
) AND
|
|
|
p_factures.date_debut <= w_date_traitement AND
|
|
|
(
|
|
|
(p_factures.code_facture = '0' AND p_factures.date_debut <= w_date_traitement)
|
|
|
OR
|
|
|
(p_factures.code_facture >= '1' AND date_facture > w_date_traitement AND date_facture <> '20991231' AND date_vente > w_date_encours)
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
UPDATE w_cti_encours_factures
|
|
|
SET date_fin =
|
|
|
GREATEST(date(date_debut +
|
|
|
COALESCE(
|
|
|
w_cti_encours_histo_dms_1.dms,
|
|
|
w_cti_encours_histo_dms_2.dms,
|
|
|
w_cti_encours_histo_dms_3.dms,
|
|
|
w_cti_encours_histo_dms_9.dms,
|
|
|
0
|
|
|
)::integer),w_date_sortie_max ),
|
|
|
dms = COALESCE(
|
|
|
w_cti_encours_histo_dms_1.dms,
|
|
|
w_cti_encours_histo_dms_2.dms,
|
|
|
w_cti_encours_histo_dms_3.dms,
|
|
|
w_cti_encours_histo_dms_9.dms,
|
|
|
0
|
|
|
),
|
|
|
regle_dms =
|
|
|
COALESCE(
|
|
|
w_cti_encours_histo_dms_1.regle,
|
|
|
w_cti_encours_histo_dms_2.regle,
|
|
|
w_cti_encours_histo_dms_3.regle,
|
|
|
w_cti_encours_histo_dms_9.regle,
|
|
|
'0'
|
|
|
)
|
|
|
FROM w_cti_encours_sejours
|
|
|
LEFT JOIN w_cti_encours_histo_dms w_cti_encours_histo_dms_1 ON
|
|
|
w_cti_encours_histo_dms_1.medecin_sejour_id = w_cti_encours_sejours.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_dms_1.lieu_sortie_service_id = w_cti_encours_sejours.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_dms_1.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_sejours.lieu_sortie_unite_fonctionnelle_id
|
|
|
LEFT JOIN w_cti_encours_histo_dms w_cti_encours_histo_dms_2 ON
|
|
|
w_cti_encours_histo_dms_2.medecin_sejour_id = w_cti_encours_sejours.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_dms_2.lieu_sortie_service_id IS NULL AND
|
|
|
w_cti_encours_histo_dms_2.lieu_sortie_unite_fonctionnelle_id IS NULL
|
|
|
LEFT JOIN w_cti_encours_histo_dms w_cti_encours_histo_dms_3 ON
|
|
|
w_cti_encours_histo_dms_3.medecin_sejour_id IS NULL AND
|
|
|
w_cti_encours_histo_dms_3.lieu_sortie_service_id = w_cti_encours_sejours.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_dms_3.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_sejours.lieu_sortie_unite_fonctionnelle_id
|
|
|
LEFT JOIN w_cti_encours_histo_dms w_cti_encours_histo_dms_9 ON
|
|
|
w_cti_encours_histo_dms_9.medecin_sejour_id IS NULL AND
|
|
|
w_cti_encours_histo_dms_9.lieu_sortie_service_id IS NULL AND
|
|
|
w_cti_encours_histo_dms_9.lieu_sortie_unite_fonctionnelle_id IS NULL
|
|
|
WHERE w_cti_encours_factures.no_sejour = w_cti_encours_sejours.no_sejour AND
|
|
|
w_cti_encours_factures.code_sorti = '0' AND
|
|
|
w_cti_encours_factures.type_sejour NOT IN ('2','3') AND
|
|
|
w_cti_encours_factures.date_fin = '20991231';
|
|
|
UPDATE w_cti_encours_factures
|
|
|
SET date_fin = date_debut,
|
|
|
dms = 0,
|
|
|
regle_dms = '0'
|
|
|
FROM w_cti_encours_sejours
|
|
|
WHERE w_cti_encours_factures.no_sejour = w_cti_encours_sejours.no_sejour AND
|
|
|
w_cti_encours_factures.code_sorti = '0' AND
|
|
|
w_cti_encours_factures.type_sejour IN ('2','3') AND
|
|
|
w_cti_encours_factures.date_fin = '20991231';
|
|
|
|
|
|
UPDATE w_cti_encours_factures
|
|
|
SET duree_sejour = CASE WHEN type_sejour <> '5' THEN date_fin - date_debut ELSE 0 END,
|
|
|
tranche_sejour =
|
|
|
CASE
|
|
|
WHEN type_sejour = '5' THEN 'S'
|
|
|
WHEN date_fin - date_debut <= 1 THEN '1'
|
|
|
WHEN date_fin - date_debut <= 3 THEN '2'
|
|
|
WHEN date_fin - date_debut <= 6 THEN '3'
|
|
|
WHEN date_fin - date_debut <= 10 THEN '4'
|
|
|
ELSE '5' END;
|
|
|
|
|
|
-- En ESPIC, les actes non factures sont peut être sur une autre facture que BG
|
|
|
UPDATE activite.p_factures_lignes_non_facturees_h
|
|
|
SET no_facture = subview.no_facture_bg
|
|
|
FROM
|
|
|
(
|
|
|
SELECT p_factures_lignes_non_facturees_h.no_facture, MAX(w_cti_encours_factures.no_facture) AS no_facture_bg
|
|
|
FROM activite.p_factures_lignes_non_facturees_h
|
|
|
JOIN activite.p_factures ON p_factures_lignes_non_facturees_h.no_facture = p_factures.no_facture
|
|
|
JOIN w_cti_encours_factures ON
|
|
|
p_factures.no_sejour = w_cti_encours_factures.no_sejour AND
|
|
|
w_cti_encours_factures.no_facture LIKE '%BG'
|
|
|
WHERE p_factures_lignes_non_facturees_h.date_debut BETWEEN w_cti_encours_factures.date_debut AND w_cti_encours_factures.date_fin
|
|
|
GROUP BY 1
|
|
|
HAVING p_factures_lignes_non_facturees_h.no_facture <> MAX(w_cti_encours_factures.no_facture)
|
|
|
) subview
|
|
|
WHERE p_factures_lignes_non_facturees_h.no_facture = subview.no_facture
|
|
|
;
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Extraction CPC deja facturee';
|
|
|
INSERT INTO w_cti_encours_factures_deja_cpc(
|
|
|
no_facture_reference)
|
|
|
SELECT p_factures.no_facture_reference
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE p_factures_lignes_c.montant_facture <> 0 AND
|
|
|
p_factures.no_facture_reference IN (SELECT no_facture_reference FROM w_cti_encours_factures) AND
|
|
|
(t_prestations.code IN ('CPC', 'SHO', 'CP') OR
|
|
|
t_prestations.type_valorisation_non_facture IN ('CP')
|
|
|
)
|
|
|
GROUP BY 1
|
|
|
HAVING SUM(nb_prestation) > 0
|
|
|
;
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Forcage code GHS';
|
|
|
--UPDATE w_cti_encours_factures
|
|
|
--SET ghs_id = t_ghs.oid
|
|
|
--FROM activite.t_forcage_encours_factures
|
|
|
--JOIN base.t_ghs ON t_ghs.code = t_forcage_encours_factures.ghs_code
|
|
|
--WHERE w_cti_encours_factures.no_sejour = t_forcage_encours_factures.no_sejour AND
|
|
|
-- t_forcage_encours_factures.etat_forcage_ghs = 'F' AND
|
|
|
-- t_forcage_encours_factures.ghs_code <> 0 AND
|
|
|
-- date_trunc('month',t_forcage_encours_factures.date_encours) = date_trunc('month',w_cti_encours_factures.date_encours)
|
|
|
--;
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Generation des lignes valorisees';
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'GHS';
|
|
|
|
|
|
|
|
|
-- Deux passages pour la valorisation
|
|
|
-- premier passage sans tenir compte des GHS
|
|
|
-- second en en tenant compte
|
|
|
-- pour comparer les deux
|
|
|
|
|
|
IF _ENCOURSECARTGHSV > 0 THEN
|
|
|
w_simul = '';
|
|
|
ELSE
|
|
|
w_simul = '1';
|
|
|
END IF;
|
|
|
WHILE w_simul <> '0' LOOP
|
|
|
w_simul = CASE WHEN w_simul = '' THEN '1' ELSE '0' END;
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'GHS ' || w_simul;
|
|
|
TRUNCATE w_cti_encours_factures_lignes_c;
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id, ghs_id,
|
|
|
prix_unitaire, nb_prestation, montant_encours, lieu_id)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'GHS' AS type_ligne, date_debut, date_fin, GREATEST(date_fin - date_debut,1), 1, w_cti_encours_calcul_parametres.coefficient_mco,
|
|
|
COALESCE(w_cti_encours_calcul_parametres_services.prestation_ghs_id, w_cti_encours_calcul_parametres.prestation_ghs_id),
|
|
|
COALESCE(w_cti_encours_calcul_parametres_services.rubrique_facturation_ghs_id, w_cti_encours_calcul_parametres.rubrique_facturation_ghs_id),
|
|
|
COALESCE(w_cti_encours_calcul_parametres_services.rubrique_facturation_ghs_id, w_cti_encours_calcul_parametres.rubrique_facturation_ghs_id),
|
|
|
ghs_id,
|
|
|
0, 1, 0, lieu_sortie_id
|
|
|
FROM w_cti_encours_calcul_parametres,
|
|
|
w_cti_encours_factures
|
|
|
LEFT JOIN w_cti_encours_calcul_parametres_services ON
|
|
|
lieu_sortie_service_id = w_cti_encours_calcul_parametres_services.service_facturation_id AND
|
|
|
w_cti_encours_factures.type_sejour = w_cti_encours_calcul_parametres_services.type_sejour
|
|
|
WHERE w_cti_encours_factures.type_t2a = '1' AND w_cti_encours_factures.type_sejour <> '5' AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
w_cti_encours_factures.ghm_id NOT IN (SELECT ghm_id FROM w_cti_encours_ghm_sans_ghs) AND
|
|
|
w_cti_encours_factures.particularites_encours_service NOT ILIKE '%IVG%' AND
|
|
|
COALESCE(w_cti_encours_calcul_parametres_services.prestation_ghs_id, w_cti_encours_calcul_parametres.prestation_ghs_id) <> 0 AND
|
|
|
COALESCE(w_cti_encours_calcul_parametres_services.rubrique_facturation_ghs_id, w_cti_encours_calcul_parametres.rubrique_facturation_ghs_id) <> 0 AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG') AND
|
|
|
w_cti_encours_factures.no_facture NOT IN (
|
|
|
SELECT no_facture
|
|
|
FROM activite.p_factures_lignes_non_facturees_c
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE t_prestations.code IN ('I01')
|
|
|
);
|
|
|
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id, ghs_id,
|
|
|
prix_unitaire, nb_prestation, montant_encours, lieu_id)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'GHS' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, nb_seances, 1, w_cti_encours_calcul_parametres.coefficient_mco,
|
|
|
COALESCE(w_cti_encours_calcul_parametres_services.prestation_ghs_id, w_cti_encours_calcul_parametres.prestation_ghs_sea_id),
|
|
|
COALESCE(w_cti_encours_calcul_parametres_services.rubrique_facturation_ghs_id, w_cti_encours_calcul_parametres.rubrique_facturation_ghs_sea_id),
|
|
|
COALESCE(w_cti_encours_calcul_parametres_services.rubrique_facturation_ghs_id, w_cti_encours_calcul_parametres.rubrique_facturation_ghs_sea_id),
|
|
|
ghs_id,
|
|
|
0, nb_seances, 0, lieu_sortie_id
|
|
|
FROM w_cti_encours_calcul_parametres,
|
|
|
w_cti_encours_factures
|
|
|
LEFT JOIN w_cti_encours_calcul_parametres_services ON
|
|
|
lieu_sortie_service_id = w_cti_encours_calcul_parametres_services.service_facturation_id AND
|
|
|
w_cti_encours_factures.type_sejour = w_cti_encours_calcul_parametres_services.type_sejour
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour AND nb_seances > 0 AND p_mouvements_sejour.date BETWEEN w_cti_encours_factures.Date_debut AND w_cti_encours_factures.date_fin
|
|
|
WHERE
|
|
|
w_cti_encours_factures.type_t2a = '1' AND w_cti_encours_factures.type_sejour = '5' AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
COALESCE(w_cti_encours_calcul_parametres_services.prestation_ghs_id, w_cti_encours_calcul_parametres.prestation_ghs_sea_id) <> 0 AND
|
|
|
COALESCE(w_cti_encours_calcul_parametres_services.rubrique_facturation_ghs_id, w_cti_encours_calcul_parametres.rubrique_facturation_ghs_sea_id) <> 0 AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG') AND
|
|
|
lieu_sortie_service_id NOT IN (select lieu_service_id FROM w_cti_encours_calcul_parametres_services_prestations where prestation_code IN ('D09','D11','D13', 'D13', 'D15', 'D16', 'DTP') AND coefficient = 1);
|
|
|
|
|
|
-- GHS déjà connu
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
prix_unitaire = t_ghs_tarifs.tarif_ghs,
|
|
|
montant_encours = t_ghs_tarifs.tarif_ghs * w_cti_encours_factures_lignes_c.coefficient_mco,
|
|
|
borne_basse = t_ghs_tarifs.borne_basse,
|
|
|
borne_haute = t_ghs_tarifs.borne_haute,
|
|
|
forfait_exb = t_ghs_tarifs.forfait_exb,
|
|
|
tarif_exb = t_ghs_tarifs.tarif_exb,
|
|
|
duree_sejour = w_cti_encours_factures.date_fin - w_cti_encours_factures.date_debut,
|
|
|
regle_texte = 'GHS pour dossier groupé : ' || to_char(t_ghs.code,'FM0000') || ' (' || COALESCE(t_ghm.code || '-','') || COALESCE(t_ghm.texte,t_ghs.texte) || ')'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN base.t_ghs ON t_ghs.oid = w_cti_encours_factures.ghs_id
|
|
|
JOIN base.t_ghs_tarifs ON t_ghs_tarifs.ghs_id = t_ghs.oid AND t_ghs_tarifs.secteur = w_cti_encours_factures.secteur_tarif AND w_cti_encours_factures.date_fin BETWEEN t_ghs_tarifs.date_debut AND t_ghs_tarifs.date_fin
|
|
|
LEFT JOIN base.t_ghm ON t_ghm.oid = w_cti_encours_factures.ghm_id
|
|
|
WHERE w_simul = '0' AND
|
|
|
w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
w_cti_encours_factures.ghs_id <> 0 AND
|
|
|
type_ligne = 'GHS'
|
|
|
;
|
|
|
-- EXB sur GHS déjà connus
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET montant_encours =
|
|
|
CASE
|
|
|
WHEN forfait_exb > 0 THEN round(prix_unitaire - forfait_exb * w_cti_encours_factures_lignes_c.coefficient_mco,2)
|
|
|
WHEN forfait_exb = 0 AND tarif_exb > 0 AND duree_sejour = 0 THEN round(tarif_exb / 2 * coefficient_mco,2)
|
|
|
WHEN forfait_exb = 0 AND tarif_exb > 0 THEN round(prix_unitaire - (tarif_exb * (borne_basse-duree_sejour) * coefficient_mco),2)
|
|
|
ELSE montant_encours
|
|
|
END,
|
|
|
regle_texte = 'EXB pour dossier groupé'
|
|
|
WHERE w_simul = '0' AND
|
|
|
duree_sejour < borne_basse AND
|
|
|
prix_unitaire <> 0 AND
|
|
|
ghs_id <> 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'EXH';
|
|
|
-- EXH
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, lieu_id, nb_rubrique, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, nb_prestation, montant_encours, regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'EXH' AS type_ligne, date(w_cti_encours_factures.date_debut + (t_ghs_tarifs.borne_haute || ' day')::interval),
|
|
|
w_cti_encours_factures.date_fin, w_cti_encours_factures.lieu_sortie_id, w_cti_encours_factures.date_fin - w_cti_encours_factures.date_debut - t_ghs_tarifs.borne_haute, 1, w_cti_encours_calcul_parametres.coefficient_mco,
|
|
|
prestation_exh_id, rubrique_facturation_exh_id, rubrique_comptabilisation_ghs_id,
|
|
|
t_ghs_tarifs.tarif_exh, w_cti_encours_factures.date_fin - w_cti_encours_factures.date_debut - t_ghs_tarifs.borne_haute, round(t_ghs_tarifs.tarif_exh * (w_cti_encours_factures.date_fin - w_cti_encours_factures.date_debut - t_ghs_tarifs.borne_haute) * w_cti_encours_calcul_parametres.coefficient_mco,2),
|
|
|
'EXH pour dossier groupé : Borne haute ' || t_ghs_tarifs.borne_haute || ' pour GHS ' || to_char(t_ghs.code,'FM0000') || ' (' || COALESCE(t_ghm.code || '-','') || COALESCE(t_ghm.texte,t_ghs.texte) || ')'
|
|
|
FROM w_cti_encours_calcul_parametres, w_cti_encours_factures
|
|
|
JOIN base.t_ghs ON t_ghs.oid = w_cti_encours_factures.ghs_id
|
|
|
LEFT JOIN base.t_ghm ON t_ghm.oid = w_cti_encours_factures.ghm_id
|
|
|
JOIN base.t_ghs_tarifs ON t_ghs_tarifs.ghs_id = t_ghs.oid AND
|
|
|
t_ghs_tarifs.secteur = w_cti_encours_factures.secteur_tarif AND
|
|
|
w_cti_encours_factures.date_fin BETWEEN t_ghs_tarifs.date_debut AND t_ghs_tarifs.date_fin
|
|
|
WHERE w_simul = '0' AND
|
|
|
w_cti_encours_factures.type_t2a = '1' AND type_sejour <> '5' AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
w_cti_encours_factures.ghs_id > 0 AND
|
|
|
t_ghs_tarifs.borne_haute > 0 AND
|
|
|
w_cti_encours_factures.date_fin - w_cti_encours_factures.date_debut > t_ghs_tarifs.borne_haute AND
|
|
|
COALESCE(rubrique_facturation_exh_id,0) <> 0 AND
|
|
|
COALESCE(prestation_exh_id,0) <> 0 AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG') ;
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'EXH (non groupes)';
|
|
|
-- EXH
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, lieu_id, nb_rubrique, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, nb_prestation, montant_encours, regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'EXHNG' AS type_ligne, date(w_cti_encours_factures.date_debut + (base.cti_to_number(t_divers_bh.valeur) || ' day')::interval),
|
|
|
w_cti_encours_factures.date_fin, w_cti_encours_factures.lieu_sortie_id, w_cti_encours_factures.date_fin - w_cti_encours_factures.date_debut - base.cti_to_number(t_divers_bh.valeur), 1,
|
|
|
w_cti_encours_calcul_parametres.coefficient_mco,
|
|
|
prestation_exh_id, rubrique_facturation_exh_id, rubrique_comptabilisation_ghs_id,
|
|
|
base.cti_to_number(t_divers_xh.valeur), w_cti_encours_factures.date_fin - w_cti_encours_factures.date_debut - base.cti_to_number(t_divers_bh.valeur),
|
|
|
round(base.cti_to_number(t_divers_xh.valeur) * (w_cti_encours_factures.date_fin - w_cti_encours_factures.date_debut - base.cti_to_number(t_divers_bh.valeur)) * w_cti_encours_calcul_parametres.coefficient_mco,2),
|
|
|
'EXH fictif (pour dossiers non groupés) de ' || t_divers_xh.valeur || ' euros par journée au delà de ' || t_divers_bh.valeur || ' jours'
|
|
|
FROM w_cti_encours_calcul_parametres, w_cti_encours_factures
|
|
|
JOIN activite.t_divers t_divers_bh ON t_divers_bh.code = 'ENCOURSBORNEHAUTE' AND base.cti_to_number(t_divers_bh.valeur) > 0
|
|
|
JOIN activite.t_divers t_divers_xh ON t_divers_xh.code = 'ENCOURSEXHMOYEN' AND base.cti_to_number(t_divers_xh.valeur) > 0
|
|
|
WHERE
|
|
|
w_cti_encours_factures.type_t2a = '1' AND type_sejour <> '5' AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
(w_cti_encours_factures.ghs_id <= 0 OR w_simul = '1') AND
|
|
|
w_cti_encours_factures.date_fin - w_cti_encours_factures.date_debut > base.cti_to_number(t_divers_bh.valeur) AND
|
|
|
COALESCE(rubrique_facturation_exh_id,0) <> 0 AND
|
|
|
COALESCE(prestation_exh_id,0) <> 0 AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG')
|
|
|
;
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'GHS bebes';
|
|
|
-- GHS bébés
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, nb_prestation, montant_encours, lieu_id, regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'GHSBB' AS type_ligne, w_cti_encours_factures.date_debut, w_cti_encours_factures.date_fin, 1, 1, w_cti_encours_calcul_parametres.coefficient_mco,
|
|
|
prestation_ghs_id, rubrique_facturation_ghs_id, rubrique_comptabilisation_ghs_id,
|
|
|
t_ghs_tarifs.tarif_ghs, 1, t_ghs_tarifs.tarif_ghs * w_cti_encours_calcul_parametres.coefficient_mco, lieu_sortie_id,
|
|
|
'GHS bébé pour dossier groupé : ' || to_char(t_ghs.code,'FM0000') || ' (' || t_ghs.texte || ')'
|
|
|
FROM w_cti_encours_calcul_parametres, w_cti_encours_factures
|
|
|
JOIN base.t_ghs ON t_ghs.oid = w_cti_encours_factures.ghs_bebe1_id
|
|
|
JOIN base.t_ghs_tarifs ON t_ghs.oid = w_cti_encours_factures.ghs_bebe1_id AND
|
|
|
t_ghs_tarifs.ghs_id = t_ghs.oid AND t_ghs_tarifs.secteur = w_cti_encours_factures.secteur_tarif AND w_cti_encours_factures.date_fin BETWEEN t_ghs_tarifs.date_debut AND t_ghs_tarifs.date_fin
|
|
|
WHERE w_simul = '0' AND
|
|
|
w_cti_encours_factures.type_t2a = '1' AND w_cti_encours_factures.ghs_bebe1_id > 0 AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG')
|
|
|
UNION
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'GHSBB', w_cti_encours_factures.date_debut, w_cti_encours_factures.date_fin, 1, 1, w_cti_encours_calcul_parametres.coefficient_mco,
|
|
|
prestation_ghs_id, rubrique_facturation_ghs_id, rubrique_comptabilisation_ghs_id,
|
|
|
t_ghs_tarifs.tarif_ghs, 1, t_ghs_tarifs.tarif_ghs * w_cti_encours_calcul_parametres.coefficient_mco, lieu_sortie_id,
|
|
|
'GHS bébé pour dossier groupé : ' || to_char(t_ghs.code,'FM0000') || ' (' || t_ghs.texte || ')'
|
|
|
FROM w_cti_encours_calcul_parametres, w_cti_encours_factures
|
|
|
JOIN base.t_ghs ON t_ghs.oid = w_cti_encours_factures.ghs_bebe2_id
|
|
|
JOIN base.t_ghs_tarifs ON t_ghs.oid = w_cti_encours_factures.ghs_bebe2_id AND
|
|
|
t_ghs_tarifs.ghs_id = t_ghs.oid AND t_ghs_tarifs.secteur = w_cti_encours_factures.secteur_tarif AND w_cti_encours_factures.date_fin BETWEEN t_ghs_tarifs.date_debut AND t_ghs_tarifs.date_fin
|
|
|
WHERE w_simul = '0' AND
|
|
|
w_cti_encours_factures.type_t2a = '1' AND w_cti_encours_factures.ghs_bebe2_id > 0 AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG')
|
|
|
UNION
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'GHSBB', w_cti_encours_factures.date_debut, w_cti_encours_factures.date_fin, 1, 1, w_cti_encours_calcul_parametres.coefficient_mco,
|
|
|
prestation_ghs_id, rubrique_facturation_ghs_id, rubrique_comptabilisation_ghs_id,
|
|
|
t_ghs_tarifs.tarif_ghs, 1, t_ghs_tarifs.tarif_ghs * w_cti_encours_calcul_parametres.coefficient_mco, lieu_sortie_id,
|
|
|
'GHS bébé pour dossier groupé : ' || to_char(t_ghs.code,'FM0000') || ' (' || t_ghs.texte || ')'
|
|
|
FROM w_cti_encours_calcul_parametres, w_cti_encours_factures
|
|
|
JOIN base.t_ghs ON t_ghs.oid = w_cti_encours_factures.ghs_bebe3_id
|
|
|
JOIN base.t_ghs_tarifs ON t_ghs.oid = w_cti_encours_factures.ghs_bebe3_id AND
|
|
|
t_ghs_tarifs.ghs_id = t_ghs.oid AND t_ghs_tarifs.secteur = w_cti_encours_factures.secteur_tarif AND w_cti_encours_factures.date_fin BETWEEN t_ghs_tarifs.date_debut AND t_ghs_tarifs.date_fin
|
|
|
WHERE w_simul = '0' AND
|
|
|
w_cti_encours_factures.type_t2a = '1' AND w_cti_encours_factures.ghs_bebe3_id > 0 AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG');
|
|
|
-- Valorisation non groupes
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Valorisation GHS non groupes';
|
|
|
|
|
|
UPDATE w_cti_encours_factures
|
|
|
SET classe_ghm = '05C19'
|
|
|
WHERE EXISTS (
|
|
|
SELECT no_sejour
|
|
|
FROM activite.p_factures_lignes_non_facturees_h
|
|
|
JOIN activite.p_factures ON p_factures_lignes_non_facturees_h.no_facture = p_factures.no_facture
|
|
|
JOIN base.t_actes ON acte_id = t_actes.oid
|
|
|
WHERE t_actes.code IN ('DELF013', 'DELF020', 'DELF014', 'DELF016', 'DELF086', 'DELA004','DEKA002')
|
|
|
AND w_cti_encours_factures.no_sejour = p_factures.no_sejour
|
|
|
);
|
|
|
|
|
|
UPDATE w_cti_encours_factures
|
|
|
SET classe_ghm = '05C19'
|
|
|
WHERE EXISTS (
|
|
|
SELECT no_sejour
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
JOIN activite.p_factures ON p_factures_lignes_h.no_facture = p_factures.no_facture
|
|
|
JOIN base.t_actes ON acte_id = t_actes.oid
|
|
|
WHERE t_actes.code IN ('DELF013', 'DELF020', 'DELF014', 'DELF016', 'DELA004','DEKA002')
|
|
|
AND classe_ghm = ''
|
|
|
AND p_factures.no_sejour = w_cti_encours_factures.no_sejour
|
|
|
)
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_factures
|
|
|
SET classe_ghm = 'I01'
|
|
|
WHERE EXISTS (
|
|
|
SELECT no_sejour
|
|
|
FROM activite.p_factures_lignes_non_facturees_h
|
|
|
JOIN activite.p_factures ON p_factures_lignes_non_facturees_h.no_facture = p_factures.no_facture
|
|
|
WHERE acte_id = ANY(SELECT oid FROM base.t_actes WHERE code IN('JGNJ900'))
|
|
|
AND w_cti_encours_factures.no_sejour = p_factures.no_sejour
|
|
|
);
|
|
|
|
|
|
UPDATE w_cti_encours_factures
|
|
|
SET classe_ghm = 'I01'
|
|
|
WHERE EXISTS (
|
|
|
SELECT no_sejour
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
JOIN activite.p_factures ON p_factures_lignes_h.no_facture = p_factures.no_facture
|
|
|
WHERE acte_id = ANY(SELECT oid FROM base.t_actes WHERE code IN('JGNJ900'))
|
|
|
AND classe_ghm = ''
|
|
|
AND w_cti_encours_factures.no_sejour = p_factures.no_sejour
|
|
|
)
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
rubrique_facturation_id = rubrique_facturation_I01_id,
|
|
|
rubrique_comptabilisation_id = rubrique_comptabilisation_I01_id,
|
|
|
prestation_id = prestation_I01_id
|
|
|
FROM activite.t_prestations,
|
|
|
w_cti_encours_factures
|
|
|
JOIN w_cti_encours_calcul_parametres ON
|
|
|
rubrique_facturation_I01_id IS NOT NULL AND
|
|
|
rubrique_facturation_I01_id <> 0
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
w_cti_encours_factures_lignes_c.prestation_id = t_prestations.oid AND
|
|
|
classe_ghm = 'I01' AND
|
|
|
t_prestations.code = 'GHS'
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 12 derniers mois (' || w_date_histo_12 || ') du médecin ' || medecin_sejour_texte || ' dans le service ' || lieu_sortie_service_texte || ' avec une durée de séjour de ' || duree_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_service_id = w_cti_encours_factures.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_factures.lieu_sortie_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_histo_ghs.duree_sejour = w_cti_encours_factures.duree_sejour AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '01-MSD12'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 12 derniers mois (' || w_date_histo_12 || ') du médecin ' || medecin_sejour_texte || ' dans le service ' || lieu_sortie_service_texte || ' avec une durée de séjour de ' || tranche_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_service_id = w_cti_encours_factures.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_factures.lieu_sortie_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '02-MST12'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 18 derniers mois (' || w_date_histo_18 || ') du médecin ' || medecin_sejour_texte || ' dans le service ' || lieu_sortie_service_texte || ' avec une durée de séjour de ' || duree_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_service_id = w_cti_encours_factures.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_factures.lieu_sortie_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_histo_ghs.duree_sejour = w_cti_encours_factures.duree_sejour AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '03-MSD18'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 18 derniers mois (' || w_date_histo_18 || ') du médecin ' || medecin_sejour_texte || ' dans le service ' || lieu_sortie_service_texte || ' avec une durée de séjour de ' || tranche_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_service_id = w_cti_encours_factures.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_factures.lieu_sortie_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '04-MST18'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 12 derniers mois (' || w_date_histo_12 || ') de la spécialité ' || specialite_medecin_sejour_texte || ' dans le service ' || lieu_sortie_service_texte || ' avec une durée de séjour de ' || duree_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.specialite_medecin_sejour_id = w_cti_encours_factures.specialite_medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_service_id = w_cti_encours_factures.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_factures.lieu_sortie_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_histo_ghs.duree_sejour = w_cti_encours_factures.duree_sejour AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '05-PSD12'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 12 derniers mois (' || w_date_histo_12 || ') de la spécialité ' || specialite_medecin_sejour_texte || ' dans le service ' || lieu_sortie_service_texte || ' avec une durée de séjour de ' || tranche_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.specialite_medecin_sejour_id = w_cti_encours_factures.specialite_medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_service_id = w_cti_encours_factures.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_factures.lieu_sortie_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '06-PST12'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 12 derniers mois (' || w_date_histo_12 || ') du médecin ' || medecin_sejour_texte || ' avec une durée de séjour de ' || duree_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.duree_sejour = w_cti_encours_factures.duree_sejour AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '07-MXD12'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 12 derniers mois (' || w_date_histo_12 || ') du médecin ' || medecin_sejour_texte || ' avec une durée de séjour de ' || tranche_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '08-MXT12'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 18 derniers mois (' || w_date_histo_18 || ') du médecin ' || medecin_sejour_texte || ' avec une durée de séjour de ' || duree_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.duree_sejour = w_cti_encours_factures.duree_sejour AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '09-MXD18'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 18 derniers mois (' || w_date_histo_18 || ') du médecin ' || medecin_sejour_texte || ' avec une durée de séjour de ' || tranche_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '10-MXT18'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 12 derniers mois (' || w_date_histo_12 || ') de la spécialité ' || specialite_medecin_sejour_texte || ' avec une durée de séjour de ' || duree_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.specialite_medecin_sejour_id = w_cti_encours_factures.specialite_medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.duree_sejour = w_cti_encours_factures.duree_sejour AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '11-PXD12'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 12 derniers mois (' || w_date_histo_12 || ') de la spécialité ' || specialite_medecin_sejour_texte || ' avec une durée de séjour de ' || tranche_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.specialite_medecin_sejour_id = w_cti_encours_factures.specialite_medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '12-PXT12'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 18 derniers mois (' || w_date_histo_18 || ') dans le service ' || lieu_sortie_service_texte || ' avec une durée de séjour de ' || duree_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_service_id = w_cti_encours_factures.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_factures.lieu_sortie_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_histo_ghs.duree_sejour = w_cti_encours_factures.duree_sejour AND
|
|
|
w_cti_encours_histo_ghs.tranche_sejour = w_cti_encours_factures.tranche_sejour AND
|
|
|
regle = '13-XSD18'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 12 derniers mois (' || w_date_histo_12 || ') du médecin ' || medecin_sejour_texte || ' dans le service ' || lieu_sortie_service_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_service_id = w_cti_encours_factures.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_factures.lieu_sortie_unite_fonctionnelle_id AND
|
|
|
regle = '21-MSX12'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 18 derniers mois (' || w_date_histo_18 || ') du médecin ' || medecin_sejour_texte || ' dans le service ' || lieu_sortie_service_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_service_id = w_cti_encours_factures.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_factures.lieu_sortie_unite_fonctionnelle_id AND
|
|
|
regle = '22-MSX18'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 12 derniers mois (' || w_date_histo_12 || ') du médecin ' || medecin_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
regle = '51-MXX12'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 18 derniers mois (' || w_date_histo_18 || ') du médecin ' || medecin_sejour_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.medecin_sejour_id = w_cti_encours_factures.medecin_sejour_id AND
|
|
|
regle = '52-MXX18'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 18 derniers mois (' || w_date_histo_18 || ') dans le service ' || lieu_sortie_service_texte,
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_service_id = w_cti_encours_factures.lieu_sortie_service_id AND
|
|
|
w_cti_encours_histo_ghs.lieu_sortie_unite_fonctionnelle_id = w_cti_encours_factures.lieu_sortie_unite_fonctionnelle_id AND
|
|
|
regle = '61-XSX18'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_moyen_ghs,
|
|
|
prix_unitaire = montant_moyen_ghs,
|
|
|
prix_unitaire_calcule = montant_moyen_ghs,
|
|
|
regle_ghs = regle,
|
|
|
regle_texte = 'P.U. Moyen GHS calculé sur les ' || nombre || ' séjours des 18 derniers mois (' || w_date_histo_18 || ')',
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN w_cti_encours_histo_ghs ON
|
|
|
w_cti_encours_histo_ghs.classe_ghm = w_cti_encours_factures.classe_ghm AND
|
|
|
regle = '99-XXX18'
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
montant_encours = 0 AND
|
|
|
type_ligne = 'GHS';
|
|
|
|
|
|
-- Forcage prix GHS selon paramétrage dossier
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = prix_unitaire_force,
|
|
|
prix_unitaire = prix_unitaire_force,
|
|
|
regle_ghs = '00-FORCE',
|
|
|
regle_texte = 'P.U. Moyen GHS forcé',
|
|
|
type_ligne = 'GHSNG'
|
|
|
FROM activite.t_calcul_encours
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_sejour = t_calcul_encours.no_sejour AND
|
|
|
t_calcul_encours.type_ligne = 'GHSNG' AND
|
|
|
t_calcul_encours.prix_unitaire_is_force = '1' AND
|
|
|
w_cti_encours_factures_lignes_c.type_ligne = 'GHSNG';
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'GHS bebe moyen';
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id, ghs_id,
|
|
|
prix_unitaire, nb_prestation, montant_encours, lieu_id, regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'GHSBBM' AS type_ligne, date_debut, date_fin, GREATEST(date_fin - date_debut,1), 1, w_cti_encours_calcul_parametres.coefficient_mco,
|
|
|
prestation_ghs_id, rubrique_facturation_ghs_id, rubrique_comptabilisation_ghs_id, -9981,
|
|
|
base.cti_to_number(t_divers.valeur), 1, base.cti_to_number(t_divers.valeur), w_cti_encours_factures.lieu_sortie_id,
|
|
|
'GHS Moyen paramétré pour les séjours bébés pour une maman dont le GHS est connu' AS regle_texte
|
|
|
FROM w_cti_encours_calcul_parametres,
|
|
|
w_cti_encours_factures
|
|
|
JOIN activite.t_divers ON t_divers.code = 'ENCOURSGHSMBB' AND base.cti_to_number(t_divers.valeur) <> 0
|
|
|
WHERE w_cti_encours_factures.type_t2a = '1' AND w_cti_encours_factures.type_sejour = '1' AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
(w_cti_encours_factures.ghs_bebe1_id <= 0 OR w_simul = '1') AND
|
|
|
w_cti_encours_factures.ghm_id NOT IN (SELECT oid FROM base.t_ghm WHERE code IN ('14Z08Z')) AND
|
|
|
w_cti_encours_factures.ghm_id IN (SELECT oid FROM base.t_ghm WHERE code LIKE ('14%') AND (texte ILIKE '%sarienne%' OR texte ILIKE '%accouchement%') AND texte NOT ILIKE '%faux%') AND
|
|
|
COALESCE(rubrique_facturation_ghs_id,0) <> 0 AND
|
|
|
COALESCE(prestation_ghs_id,0) <> 0 AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG') ;
|
|
|
|
|
|
-- A la fin du premier passage, conserver le résultat
|
|
|
IF _ENCOURSECARTGHSV > 0 AND w_simul = '1' THEN
|
|
|
DROP TABLE IF EXISTS w_cti_encours_factures_lignes_c_simul_ng;
|
|
|
CREATE TEMP TABLE w_cti_encours_factures_lignes_c_simul_ng AS
|
|
|
SELECT w_cti_encours_factures_lignes_c.*
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE t_prestations.code IN ('GHS','EXH')
|
|
|
;
|
|
|
END IF;
|
|
|
|
|
|
IF _ENCOURSECARTGHSV > 0 AND w_simul = '0' THEN
|
|
|
INSERT INTO activite.t_prestations
|
|
|
(code_original, code, texte, texte_court, clinique_honoraire)
|
|
|
VALUES
|
|
|
('*GHSECARTV', 'GHS-ECART', 'Alerte écart valorisation GHS groupé', 'Alerte écart valorisation GHS groupé', '')
|
|
|
ON CONFLICT ON CONSTRAINT t_prestations_code_key
|
|
|
DO UPDATE SET
|
|
|
code_original = EXCLUDED.code_original -- couvre le cas où code_original aurait été modifié (cf. import SIGEMS notamment)
|
|
|
, texte = EXCLUDED.texte
|
|
|
, texte_court = EXCLUDED.texte_court
|
|
|
, clinique_honoraire = EXCLUDED.clinique_honoraire
|
|
|
;
|
|
|
|
|
|
-- A la fin du second passage, enregistrer les écarts importants
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
type_ligne,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
nb_rubrique,
|
|
|
coefficient,
|
|
|
coefficient_mco,
|
|
|
prestation_id,
|
|
|
rubrique_facturation_id,
|
|
|
rubrique_comptabilisation_id,
|
|
|
ghs_id,
|
|
|
prix_unitaire,
|
|
|
nb_prestation,
|
|
|
montant_encours,
|
|
|
lieu_id,
|
|
|
regle_texte)
|
|
|
|
|
|
SELECT subview_simul.no_sejour,
|
|
|
subview_simul.no_facture,
|
|
|
'GHSECART' AS type_ligne,
|
|
|
subview.date_debut,
|
|
|
subview.date_fin,
|
|
|
0::numeric AS nb_rubrique,
|
|
|
0::numeric AS coefficient,
|
|
|
0::numeric AS coefficient_mco,
|
|
|
t_prestations.oid AS prestation_id,
|
|
|
0::bigint AS rubrique_facturation_id,
|
|
|
0::bigint AS rubrique_comptabilisation_id,
|
|
|
subview.ghs_id,
|
|
|
0::numeric AS prix_unitaire,
|
|
|
0::numeric AS nb_prestation,
|
|
|
0::numeric AS montant_encours,
|
|
|
subview.lieu_id,
|
|
|
'Montant GHS inférieur (-' || (montant_encours_simul-montant_encours)::text || 'E) / ' || subview_simul.regle_texte
|
|
|
FROM
|
|
|
(
|
|
|
SELECT no_sejour, no_facture,
|
|
|
SUM(montant_encours) AS montant_encours_simul,
|
|
|
MAX(CASE WHEN t_prestations.code = 'GHS' THEN regle_texte ELSE '' END) AS regle_texte
|
|
|
FROM w_cti_encours_factures_lignes_c_simul_ng
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE t_prestations.code IN ('GHS','EXH')
|
|
|
GROUP BY 1,2
|
|
|
) subview_simul
|
|
|
JOIN
|
|
|
(
|
|
|
SELECT no_sejour,
|
|
|
no_facture,
|
|
|
SUM(montant_encours) AS montant_encours,
|
|
|
MAX(ghs_id) AS ghs_id,
|
|
|
MIN(date_debut) AS date_debut,
|
|
|
MAX(date_fin) AS date_fin,
|
|
|
MAX(lieu_id) AS lieu_id
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE t_prestations.code IN ('GHS','EXH')
|
|
|
GROUP BY 1,2
|
|
|
) subview ON
|
|
|
subview_simul.no_sejour = subview.no_sejour AND
|
|
|
subview_simul.no_facture = subview.no_facture
|
|
|
JOIN activite.t_prestations ON t_prestations.code_original = '*GHSECARTV'
|
|
|
left JOIN activite.t_rubriques_facturation ON t_rubriques_facturation.code_original = '*GHSECARTV'
|
|
|
WHERE subview_simul.montant_encours_simul - montant_encours >= _ENCOURSECARTGHSV
|
|
|
;
|
|
|
END IF;
|
|
|
END LOOP;
|
|
|
|
|
|
|
|
|
-- Ne pas générer ce qui est deja saisi en non facturé
|
|
|
|
|
|
INSERT INTO w_cti_factures_lignes_non_facturees_c
|
|
|
SELECT w_cti_encours_factures.no_sejour,
|
|
|
w_cti_encours_factures.no_facture,
|
|
|
CASE WHEN t_prestations.code IN ('FJA', 'FJR', 'FJS') THEN 'FJA'
|
|
|
WHEN t_prestations.code IN ('FJ') AND type_t2a = '1' THEN 'FJA'
|
|
|
ELSE t_prestations.code END AS prestation_code,
|
|
|
MIN(CASE WHEN code_sorti = '1' AND type_sejour = '1' AND (p_factures_lignes_non_facturees_c.date_debut = w_cti_encours_factures.date_fin OR p_factures_lignes_non_facturees_c.date_fin = w_cti_encours_factures.date_fin AND nb_rubrique = 1) THEN '1' ELSE '0' END),
|
|
|
MIN(COALESCE(t_prestations.type_valorisation_non_facture,'')) AS type_valorisation_non_facture
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_factures_lignes_non_facturees_c ON w_cti_encours_factures.no_facture = p_factures_lignes_non_facturees_c.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE t_prestations.code NOT IN ('GHS', 'EXH', 'SRC', 'REA', 'STF')
|
|
|
OR
|
|
|
(
|
|
|
t_prestations.code IN ('SRC', 'REA', 'STF') AND
|
|
|
w_cti_encours_factures.ghs_id > 0 AND
|
|
|
w_OPTION_ENCOURSMCOSUP = '1'
|
|
|
)
|
|
|
GROUP BY 1,2,3
|
|
|
UNION
|
|
|
SELECT w_cti_encours_factures.no_sejour,
|
|
|
w_cti_encours_factures.no_facture,
|
|
|
CASE WHEN t_prestations.code IN ('FJA', 'FJR', 'FJS') THEN 'FJA'
|
|
|
WHEN t_prestations.code IN ('FJ') AND type_t2a = '1' THEN 'FJA'
|
|
|
ELSE t_prestations.code END AS prestation_code,
|
|
|
MIN(CASE WHEN code_sorti = '1' AND type_sejour = '1' AND (p_factures_lignes_c.date_debut = w_cti_encours_factures.date_fin OR p_factures_lignes_c.date_fin = w_cti_encours_factures.date_fin AND nb_rubrique = 1) THEN '1' ELSE '0' END),
|
|
|
MIN(COALESCE(t_prestations.type_valorisation_non_facture,'')) AS type_valorisation_non_facture
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_factures_lignes_c ON w_cti_encours_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE t_prestations.code NOT IN ('GHS', 'EXH', 'SRC', 'REA', 'STF', 'GMT') AND
|
|
|
w_cti_encours_factures.particularites_encours_service NOT ILIKE '%MAT%' AND
|
|
|
w_cti_encours_factures.particularites_encours_service NOT ILIKE '%PASDEFJA%' AND
|
|
|
montant_facture <> 0 AND
|
|
|
w_cti_encours_factures.date_fin <= w_date_traitement
|
|
|
GROUP BY 1,2,3
|
|
|
;
|
|
|
|
|
|
-- Si PJ en saisi, il faut considérer que le FJ est inclus si le FJ n'est pas saisi
|
|
|
INSERT INTO w_cti_factures_lignes_non_facturees_c
|
|
|
SELECT
|
|
|
w_cti_factures_lignes_non_facturees_c.no_sejour,
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture,
|
|
|
'FJ' AS prestation_code,
|
|
|
w_cti_factures_lignes_non_facturees_c.only_jour_sortie,
|
|
|
''::text AS type_valorisation_non_facture
|
|
|
FROM w_cti_factures_lignes_non_facturees_c
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c w_cti_factures_lignes_non_facturees_c_fj ON
|
|
|
w_cti_factures_lignes_non_facturees_c.no_sejour = w_cti_factures_lignes_non_facturees_c_fj.no_sejour AND
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture = w_cti_factures_lignes_non_facturees_c_fj.no_facture AND
|
|
|
w_cti_factures_lignes_non_facturees_c_fj.prestation_code = 'FJ'
|
|
|
WHERE w_cti_factures_lignes_non_facturees_c.prestation_code = 'PJ' AND
|
|
|
w_cti_factures_lignes_non_facturees_c_fj.no_facture IS NULL
|
|
|
;
|
|
|
|
|
|
-- PJ FJ ENT GMT
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'PJ FJ ENT GMT';
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id, prix_unitaire, montant_encours, lieu_id, regle_texte)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_sejour
|
|
|
, w_cti_encours_factures.no_facture
|
|
|
, CASE
|
|
|
WHEN w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation IN ('PJ') THEN 'PJ'
|
|
|
WHEN w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation IN ('GMT') THEN 'GMT'
|
|
|
ELSE w_cti_encours_calcul_parametres_services_prestations.prestation_code END AS type_ligne
|
|
|
, p_mouvements_sejour.date
|
|
|
, p_mouvements_sejour.date
|
|
|
, 1
|
|
|
, 1
|
|
|
, 1
|
|
|
, 1
|
|
|
, prestation_id
|
|
|
, rubrique_facturation_id
|
|
|
, rubrique_facturation_id
|
|
|
, MAX(prix_unitaire)
|
|
|
, MAX(round(prix_unitaire,2))
|
|
|
, MAX(p_mouvements_sejour.lieu_id)
|
|
|
, 'GMT et forfaits journaliers'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_sejours ON w_cti_encours_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN activite.t_divers ON t_divers.code = 'OPTADM_DAYOUT'
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id
|
|
|
AND t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id
|
|
|
AND (
|
|
|
prestation_code IN ('GMT', 'PJ', 'FJ', 'ENT', 'PMS')
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation IN ('GMT', 'PJ','ENT')
|
|
|
)
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_facture = w_cti_encours_factures.no_facture
|
|
|
AND w_cti_factures_lignes_non_facturees_c.prestation_code = w_cti_encours_calcul_parametres_services_prestations.prestation_code
|
|
|
WHERE
|
|
|
type_t2a IN ('2','3')
|
|
|
AND uniquement_prestations_saisies <> '1'
|
|
|
AND (est_jour_hospitalisation = '1'
|
|
|
OR p_mouvements_sejour.nb_ambulatoires = 1)
|
|
|
AND w_cti_factures_lignes_non_facturees_c.no_facture IS NULL
|
|
|
AND (
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('PJ', 'FJ') AND type_t2a = 3 AND nb_sorties_directes = 0 AND p_mouvements_sejour.date <> p_sejours.date_sortie
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('PJ', 'FJ') AND type_t2a = 3 AND nb_sorties_directes = 1 AND p_mouvements_sejour.date = p_sejours.date_sortie AND (p_mouvements_sejour.heure_fin > 130000 OR t_divers.valeur = '2')
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('PJ', 'FJ') AND type_t2a = 3 AND p_mouvements_sejour.nb_ambulatoires = 1
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('GMT', 'FJ') AND type_t2a = 2 AND nb_sorties_directes = 0 AND p_mouvements_sejour.date <> p_sejours.date_sortie
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('GMT', 'FJ') AND type_t2a = 2 AND nb_sorties_directes = 1 AND p_mouvements_sejour.date = p_sejours.date_sortie AND (p_mouvements_sejour.heure_fin > 130000 OR t_divers.valeur = '2')
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('GMT', 'FJ') AND type_t2a = 2 AND p_mouvements_sejour.nb_ambulatoires = 1
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation IN ('PJ') AND nb_sorties_directes = 0 AND p_mouvements_sejour.date <> p_sejours.date_sortie
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation IN ('PJ') AND nb_sorties_directes = 1 AND p_mouvements_sejour.date = p_sejours.date_sortie AND (p_mouvements_sejour.heure_fin > 130000 OR t_divers.valeur = '2')
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation IN ('PJ') AND p_mouvements_sejour.nb_ambulatoires = 1
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('ENT') AND nb_entrees_directes = 1
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation IN ('ENT') AND nb_entrees_directes = 1
|
|
|
OR w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('PMS') AND p_mouvements_sejour.jour_semaine = 7
|
|
|
)
|
|
|
AND COALESCE(rubrique_facturation_id,0) <> 0
|
|
|
AND COALESCE(prestation_id,0) <> 0
|
|
|
AND (
|
|
|
p_mouvements_sejour.date BETWEEN w_cti_encours_factures.date_debut AND w_cti_encours_factures.date_fin
|
|
|
OR service_facturation_id NOT IN (SELECT oid FROM activite.t_services_facturation WHERE avec_facturation_intermediaire = '1'
|
|
|
)
|
|
|
)
|
|
|
GROUP BY
|
|
|
w_cti_encours_factures.no_sejour
|
|
|
, w_cti_encours_factures.no_facture
|
|
|
, 3
|
|
|
, p_mouvements_sejour.date
|
|
|
, 6
|
|
|
, 7
|
|
|
, 8
|
|
|
, 9
|
|
|
, prestation_id
|
|
|
, rubrique_facturation_id
|
|
|
, 16
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET
|
|
|
montant_encours = p_gmt_valorises.montant_valorise_par_jour
|
|
|
, prix_unitaire = p_gmt_valorises.montant_valorise_par_jour
|
|
|
FROM activite.p_gmt_valorises
|
|
|
WHERE 1 = 1
|
|
|
AND w_cti_encours_factures_lignes_c.no_sejour = p_gmt_valorises.no_sejour
|
|
|
AND w_cti_encours_factures_lignes_c.type_ligne = 'GMT'
|
|
|
AND w_cti_encours_factures_lignes_c.date_debut BETWEEN p_gmt_valorises.date_debut_gmt::date AND p_gmt_valorises.date_fin_gmt::date
|
|
|
;
|
|
|
|
|
|
-- Sur budget global, il faut générer le Ticket modérateur
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'TM Budget Global MCO';
|
|
|
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, lieu_id, regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'TMBG' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, 1, (100-taux_ghs_1)/100, 1, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, round(prix_unitaire*(100-taux_ghs_1)/100), p_mouvements_sejour.lieu_id,
|
|
|
regle_taux_texte
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
(prestation_code IN ('PJ')
|
|
|
)
|
|
|
JOIN w_cti_encours_factures_histo_taux ON lieu_sortie_service_id = w_cti_encours_factures_histo_taux.service_facturation_id AND taux_ghs_1 < 100
|
|
|
|
|
|
WHERE
|
|
|
type_t2a = '1' AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
w_cti_encours_factures.no_facture NOT LIKE '%BG' AND
|
|
|
w_cti_encours_factures.no_sejour IN (SELECT no_sejour FROM w_cti_encours_factures_lignes_c WHERE prestation_id IN (SELECT oid FROM activite.t_prestations WHERE code = 'GHS')) AND
|
|
|
(est_jour_hospitalisation = '1' OR p_mouvements_sejour.nb_ambulatoires = 1) AND
|
|
|
(
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('PJ') AND nb_sorties_directes = 0 AND p_mouvements_sejour.date <> w_cti_encours_factures.date_fin OR
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('PJ') AND nb_sorties_directes = 0 AND p_mouvements_sejour.date = w_cti_encours_factures.date_fin AND p_mouvements_sejour.heure_fin > 130000 OR
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('PJ') AND p_mouvements_sejour.nb_ambulatoires = 1
|
|
|
) AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0 AND
|
|
|
(p_mouvements_sejour.date BETWEEN w_cti_encours_factures.date_debut AND w_cti_encours_factures.date_fin ) AND
|
|
|
w_cti_encours_factures.duree_sejour <= 30 AND
|
|
|
w_cti_encours_factures.no_sejour NOT IN (SELECT no_sejour FROm w_actes_120)
|
|
|
;
|
|
|
|
|
|
-- Sur budget global, il faut générer éventuellement les suppléments irradiation
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Suppléments irradiation';
|
|
|
|
|
|
|
|
|
|
|
|
-- GHT (HAD)
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'GHT';
|
|
|
|
|
|
-- Tranche manquante
|
|
|
DROP TABLE IF EXISTS w_cti_encours_calcul_parametres_services_prestations_t;
|
|
|
CREATE TEMP TABLE w_cti_encours_calcul_parametres_services_prestations_t AS
|
|
|
SELECT w_cti_encours_calcul_parametres_services_prestations.*,
|
|
|
tranche_ght_req
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
JOIN (
|
|
|
SELECT tranche_ght_req, lieu_service_id, lieu_unite_fonctionnelle_id, MAX(tranche_ght) AS tranche_ght_sel
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
JOIN
|
|
|
(SELECT '1'::text AS tranche_ght_req UNION SELECT '2'::text UNION SELECT '3' UNION SELECT '9') subview ON 1=1
|
|
|
WHERE prestation_code = 'GHT' AND
|
|
|
(lieu_service_id || '-' || lieu_unite_fonctionnelle_id) NOT IN
|
|
|
(SELECT lieu_service_id || '-' || lieu_unite_fonctionnelle_id
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
WHERE prestation_code = 'GHT' AND
|
|
|
tranche_ght = tranche_ght_req
|
|
|
)
|
|
|
GROUP BY 1,2,3
|
|
|
) subview ON
|
|
|
w_cti_encours_calcul_parametres_services_prestations.lieu_service_id = subview.lieu_service_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id = subview.lieu_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.tranche_ght = tranche_ght_sel
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations_t
|
|
|
SET tranche_ght = tranche_ght_req
|
|
|
;
|
|
|
|
|
|
ALTER TABLE w_cti_encours_calcul_parametres_services_prestations_t DROP COLUMN tranche_ght_req
|
|
|
;
|
|
|
|
|
|
INSERT INTO w_cti_encours_calcul_parametres_services_prestations
|
|
|
SELECT *
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations_t
|
|
|
;
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, lieu_id, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, regle_texte)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'GHT' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, p_mouvements_sejour.lieu_id, 1, 1, coefficient, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, round(prix_unitaire * coefficient,2), regle_prestation_texte
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN activite.p_factures ON w_cti_encours_factures.no_facture = p_factures.no_facture
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('GHT') AND
|
|
|
CASE
|
|
|
WHEN p_mouvements_sejour.date - p_sejours.date_entree <= 3 THEN '1'
|
|
|
WHEN p_mouvements_sejour.date - p_sejours.date_entree BETWEEN 4 AND 8 THEN '2'
|
|
|
WHEN p_mouvements_sejour.date - p_sejours.date_entree BETWEEN 9 AND 30 THEN '3'
|
|
|
ELSE '9' END = tranche_ght
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code = w_cti_encours_calcul_parametres_services_prestations.prestation_code
|
|
|
WHERE
|
|
|
type_t2a <> '1' AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
est_jour_hospitalisation = '1' AND
|
|
|
p_mouvements_sejour.date BETWEEN w_cti_encours_factures.date_debut AND w_cti_encours_factures.date_fin AND
|
|
|
(p_mouvements_sejour.date <> w_cti_encours_factures.date_fin OR p_mouvements_sejour.heure_fin > 130000 OR p_sejours.date_sortie = p_sejours.date_entree) AND
|
|
|
(nb_sorties_directes = 0 OR p_sejours.date_sortie = p_sejours.date_entree) AND
|
|
|
coefficient > 0 AND
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture IS NULL AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0
|
|
|
ORDER BY 1,4;
|
|
|
|
|
|
-- Chambres particulières
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Chambres particulieres';
|
|
|
|
|
|
-- Si plusieurs factures de référence (SSR), essayer de trouver la bonne prestation
|
|
|
DROP TABLE IF EXISTS w_cti_encours_sejour_deja_cpc;
|
|
|
CREATE TEMP TABLE w_cti_encours_sejour_deja_cpc AS
|
|
|
SELECT p_factures.no_sejour,
|
|
|
prestation_id,
|
|
|
MAX(t_prestations.code) AS prestation_code,
|
|
|
MAX(rubrique_facturation_id) AS rubrique_facturation_id,
|
|
|
MAX(p_factures_lignes_c.date_debut) AS date_debut,
|
|
|
(MAX(Array[p_factures_lignes_c.date_debut::text,
|
|
|
to_char(prix_unitaire,'FM000000000.00')]))[2]::numeric AS prix_unitaire
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE p_factures_lignes_c.montant_facture <> 0 AND
|
|
|
p_factures.no_sejour IN (SELECT no_sejour FROM w_cti_encours_factures) AND
|
|
|
p_factures.no_sejour IN (SELECT no_sejour FROM activite.p_factures WHERE no_facture = no_facture_reference GROUP BY 1 HAVING count(*) > 1) AND
|
|
|
(t_prestations.code IN ('CPC', 'SHO', 'CP') OR
|
|
|
t_prestations.type_valorisation_non_facture IN ('CP')
|
|
|
)
|
|
|
GROUP BY 1,2
|
|
|
HAVING SUM(nb_prestation) > 0
|
|
|
;
|
|
|
|
|
|
DELETE FROM w_cti_encours_sejour_deja_cpc
|
|
|
USING
|
|
|
(
|
|
|
SELECT no_sejour, MAX(date_debut) AS date_debut
|
|
|
FROM w_cti_encours_sejour_deja_cpc
|
|
|
GROUP BY 1
|
|
|
HAVING count(DISTINCT date_debut) > 1
|
|
|
) subview
|
|
|
WHERE w_cti_encours_sejour_deja_cpc.no_sejour = subview.no_sejour AND
|
|
|
w_cti_encours_sejour_deja_cpc.date_debut < subview.date_debut
|
|
|
;
|
|
|
|
|
|
-- Pas de CPC déjà facturées, prendre les moyennes
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, lieu_id, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, regle_coefficient, regle_texte)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'CPC' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, p_mouvements_sejour.lieu_id, 1, 1, coefficient, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, round(prix_unitaire * coefficient,2), coefficient,
|
|
|
regle_prestation_texte
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN activite.p_factures ON w_cti_encours_factures.no_facture = p_factures.no_facture
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation <> ('*SAISIE') AND
|
|
|
(w_cti_encours_calcul_parametres_services_prestations.prestation_code IN ('CPC', 'SHO', 'CP') OR
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation IN ('CP')
|
|
|
)
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
(
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code IN ('CPC', 'SHO', 'CP', 'FORAMB') OR
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code = w_cti_encours_calcul_parametres_services_prestations.prestation_code OR
|
|
|
w_cti_factures_lignes_non_facturees_c.type_valorisation_non_facture IN ('CP')
|
|
|
) AND
|
|
|
only_jour_sortie <> '1'
|
|
|
WHERE
|
|
|
(p_mouvements_sejour.heure_fin = 240000 OR p_mouvements_sejour.nb_ambulatoires = 1) AND
|
|
|
est_chambre_particuliere = '1' AND
|
|
|
coefficient <> 0 AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
(p_mouvements_sejour.date <> w_cti_encours_factures.date_fin OR p_mouvements_sejour.heure_fin > 130000 OR p_mouvements_sejour.nb_ambulatoires = 1) AND
|
|
|
p_mouvements_sejour.date <= w_cti_encours_factures.date_fin AND
|
|
|
(p_factures.code_cp_demandee = '1' OR w_OPTION_ENCOURSVALOCP = '1') AND
|
|
|
nb_sorties_directes = 0 AND
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture IS NULL AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0 AND
|
|
|
w_cti_encours_factures.no_facture NOT LIKE '%BG' AND
|
|
|
w_cti_encours_factures.no_facture_reference NOT IN (SELECT no_facture_reference FROM w_cti_encours_factures_deja_cpc) AND
|
|
|
w_cti_encours_factures.no_sejour NOT IN (SELECT no_sejour FROM w_cti_encours_sejour_deja_cpc) AND
|
|
|
(
|
|
|
p_mouvements_sejour.date BETWEEN w_cti_encours_factures.date_debut AND w_cti_encours_factures.date_fin OR
|
|
|
service_facturation_id NOT IN (SELECT oid FROM activite.t_services_facturation WHERE avec_facturation_intermediaire = '1')
|
|
|
)
|
|
|
|
|
|
ORDER BY 1,4;
|
|
|
|
|
|
-- CPC déjà facturées, prendre le dernier PU
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, lieu_id, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, regle_coefficient, regle_texte)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'CPC' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, p_mouvements_sejour.lieu_id, 1, 1, 1::numeric AS coefficient, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
w_cti_encours_sejour_deja_cpc.prix_unitaire, w_cti_encours_sejour_deja_cpc.prix_unitaire, 1::numeric AS coefficient,
|
|
|
'Reconduite facturation antérieure ('||w_cti_encours_sejour_deja_cpc.date_debut::text||')' AS regle_prestation_texte
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN activite.p_factures ON w_cti_encours_factures.no_facture = p_factures.no_facture
|
|
|
JOIN w_cti_encours_sejour_deja_cpc ON w_cti_encours_factures.no_sejour = w_cti_encours_sejour_deja_cpc.no_sejour
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
(
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code IN ('CPC', 'SHO', 'CP', 'FORAMB') OR
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code = w_cti_encours_sejour_deja_cpc.prestation_code OR
|
|
|
w_cti_factures_lignes_non_facturees_c.type_valorisation_non_facture IN ('CP')
|
|
|
) AND
|
|
|
only_jour_sortie <> '1'
|
|
|
WHERE
|
|
|
(p_mouvements_sejour.heure_fin = 240000 OR p_mouvements_sejour.nb_ambulatoires = 1) AND
|
|
|
est_chambre_particuliere = '1' AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
(p_mouvements_sejour.date <> w_cti_encours_factures.date_fin OR p_mouvements_sejour.heure_fin > 130000 OR p_mouvements_sejour.nb_ambulatoires = 1) AND
|
|
|
p_mouvements_sejour.date <= w_cti_encours_factures.date_fin AND
|
|
|
nb_sorties_directes = 0 AND
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture IS NULL AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0 AND
|
|
|
w_cti_encours_factures.no_facture NOT LIKE '%BG' AND
|
|
|
w_cti_encours_factures.no_facture_reference NOT IN (SELECT no_facture_reference FROM w_cti_encours_factures_deja_cpc) AND
|
|
|
(
|
|
|
p_mouvements_sejour.date BETWEEN w_cti_encours_factures.date_debut AND w_cti_encours_factures.date_fin OR
|
|
|
service_facturation_id NOT IN (SELECT oid FROM activite.t_services_facturation WHERE avec_facturation_intermediaire = '1')
|
|
|
)
|
|
|
ORDER BY 1,4;
|
|
|
|
|
|
-- SRC, REA, STF
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'SRC, REA, STF';
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, lieu_id, regle_coefficient, regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'SSS' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, 1, 1, coefficient, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, round(prix_unitaire * coefficient * coefficient_mco), (MAX(Array[p_mouvements_sejour.heure_fin,p_mouvements_sejour.lieu_id]))[2],
|
|
|
coefficient, regle_prestation_texte
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
prestation_code IN ('SRC', 'REA', 'STF')
|
|
|
WHERE
|
|
|
|
|
|
type_t2a = '1' AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation <> ('*SAISIE') AND
|
|
|
coefficient > 0 AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0 AND
|
|
|
p_mouvements_sejour.date <= w_cti_encours_factures.date_fin AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG') AND
|
|
|
NOT (
|
|
|
w_OPTION_ENCOURSMCOSUP = '1' AND
|
|
|
w_cti_encours_factures.ghs_id > 0
|
|
|
)
|
|
|
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17
|
|
|
HAVING
|
|
|
(MAX(p_mouvements_sejour.heure_fin) = 240000 OR MIN(p_mouvements_sejour.heure_debut) > 0 AND MAX(p_mouvements_sejour.heure_fin) < 240000 OR
|
|
|
MAX(nb_sorties_directes) = 1 AND MAX(mode_sortie) IN ('9'))
|
|
|
;
|
|
|
-- IGM, IGP, IMD, IMI, IPD
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'AMD, AMF, APD, IGM, IGP, IMD, IMI, IPD, IVG';
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, lieu_id, regle_coefficient,regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'IVG' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, 1, 1, coefficient, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, round(prix_unitaire * coefficient * coefficient_mco), p_mouvements_sejour.lieu_id,
|
|
|
coefficient, regle_prestation_texte
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
prestation_code IN ('AMD', 'AMF', 'APD', 'IGM', 'IGP', 'IMD', 'IMI', 'IPD', 'IVG')
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_sejour = w_cti_encours_factures.no_sejour AND
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code IN ('AMD', 'AMF', 'APD', 'IGM', 'IGP', 'IMD', 'IMI', 'IPD', 'IVG')
|
|
|
WHERE
|
|
|
(
|
|
|
p_mouvements_sejour.nb_externes = 1 OR
|
|
|
p_mouvements_sejour.nb_ambulatoires = 1 AND type_t2a <> '1' OR
|
|
|
w_cti_encours_factures.particularites_encours_service ILIKE '%IVG%' OR
|
|
|
w_cti_encours_factures.ghm_id IN (SELECT oid FROM base.t_ghm WHERE code IN ('14Z08Z'))
|
|
|
) AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation <> ('*SAISIE') AND
|
|
|
(p_mouvements_sejour.nb_externes = 1 OR p_mouvements_sejour.nb_ambulatoires = 1 OR p_mouvements_sejour.nb_entrees_directes = 1) AND
|
|
|
coefficient > 0 AND
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture IS NULL AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG') AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0;
|
|
|
-- NN1, NN2, NN3
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'NN1, NN2, NN3';
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, lieu_id, regle_coefficient, regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'NNX' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, 1, 1, coefficient, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
(MAX(ARRAY[p_mouvements_sejour.heure_fin,prix_unitaire]))[2],
|
|
|
(MAX(ARRAY[p_mouvements_sejour.heure_fin,round(prix_unitaire * coefficient * coefficient_mco)]))[2],
|
|
|
(MAX(ARRAY[p_mouvements_sejour.heure_fin,p_mouvements_sejour.lieu_id]))[2],
|
|
|
(MAX(ARRAY[p_mouvements_sejour.heure_fin,coefficient]))[2],
|
|
|
(MAX(ARRAY[to_char(p_mouvements_sejour.heure_fin,'000000'),regle_prestation_texte]))[2]
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour AND
|
|
|
p_mouvements_sejour.date BETWEEN w_cti_encours_factures.date_debut AND w_cti_encours_factures.date_fin
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
prestation_code IN ('NN1', 'NN2', 'NN3')
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code LIKE 'NN%'
|
|
|
WHERE
|
|
|
(p_mouvements_sejour.heure_fin = 240000 OR p_mouvements_sejour.heure_debut > 0 AND p_mouvements_sejour.heure_fin < 240000) AND
|
|
|
type_t2a = '1' AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation <> ('*SAISIE') AND
|
|
|
coefficient > 0 AND
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture IS NULL AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0 AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG')
|
|
|
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12;
|
|
|
-- D09 D11 D13
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Dxx';
|
|
|
-- Seances de dialyse dans les actes non facturés
|
|
|
DROP TABLE IF EXISTS w_actes_seance_jvj;
|
|
|
CREATE TEMP TABLE w_actes_seance_jvj AS
|
|
|
SELECT p_factures.no_sejour, p_factures_lignes_non_facturees_h.date_debut AS date_seance
|
|
|
FROM activite.p_factures_lignes_non_facturees_h
|
|
|
JOIN activite.p_factures ON p_factures_lignes_non_facturees_h.no_facture = p_factures.no_facture
|
|
|
JOIN base.t_actes ON acte_id = t_actes.oid
|
|
|
WHERE t_actes.code LIKE 'JVJ%' AND t_actes.code NOT LIKE 'JVJF002%'
|
|
|
GROUP BY 1,2
|
|
|
;
|
|
|
-- Seances deja facturées
|
|
|
DROP TABLE IF EXISTS w_cti_factures_seances_deja_facturees;
|
|
|
CREATE TEMP TABLE w_cti_factures_seances_deja_facturees AS
|
|
|
SELECT p_sejours.no_sejour, p_factures_lignes_c.date_debut
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours ON p_sejours.no_sejour = p_factures.no_sejour
|
|
|
JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE type_sejour = '5' AND
|
|
|
montant_facture <> 0 AND
|
|
|
t_prestations.code IN ('D09','D11','D13', 'D13', 'D15', 'D16', 'DTP') AND
|
|
|
p_sejours.no_sejour IN (SElECT no_sejour FROM activite.p_factures WHERE code_facture = '0')
|
|
|
GROUP BY 1,2
|
|
|
HAVING SUM(montant_facture) > 0
|
|
|
;
|
|
|
|
|
|
CREATE INDEX i_w_cti_factures_seances_deja_facturees_1
|
|
|
ON w_cti_factures_seances_deja_facturees
|
|
|
USING btree (no_sejour)
|
|
|
;
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, lieu_id, regle_coefficient, regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'DIA' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, 1, 1, coefficient, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, round(prix_unitaire * coefficient * coefficient_mco), p_mouvements_sejour.lieu_id,
|
|
|
coefficient, regle_prestation_texte
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.date BETWEEN w_cti_encours_factures.date_debut AND w_cti_encours_factures.date_fin
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
LEFT JOIN w_actes_seance_jvj ON w_actes_seance_jvj.no_sejour = w_cti_encours_factures.no_sejour AND
|
|
|
w_actes_seance_jvj.date_seance = p_mouvements_sejour.date
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
prestation_code IN ('D09','D11','D13', 'D13', 'D15', 'D16', 'DTP')
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code = w_cti_encours_calcul_parametres_services_prestations.prestation_code
|
|
|
LEFT JOIN w_cti_factures_seances_deja_facturees ON
|
|
|
p_mouvements_sejour.no_sejour = w_cti_factures_seances_deja_facturees.no_sejour AND
|
|
|
p_mouvements_sejour.date = w_cti_factures_seances_deja_facturees.date_debut
|
|
|
|
|
|
WHERE
|
|
|
(p_mouvements_sejour.nb_seances > 0) AND
|
|
|
coefficient > 0 AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation <> ('*SAISIE') AND
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture IS NULL AND
|
|
|
w_cti_factures_seances_deja_facturees.no_sejour IS NULL AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0 AND
|
|
|
(w_actes_seance_jvj.no_sejour IS NOT NULL OR w_cti_encours_factures.type_sejour = '5') AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG');
|
|
|
-- FJA
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'FJA';
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, lieu_id, regle_texte)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'FJA' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, 1, 1, 1, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, prix_unitaire, p_mouvements_sejour.lieu_id, 'Forfait jour de sortie (Sauf maternité) '
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
prestation_code IN ('FJA')
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code = w_cti_encours_calcul_parametres_services_prestations.prestation_code
|
|
|
WHERE nb_sorties_directes = 1 AND
|
|
|
mode_sortie IN ('6', '8') AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
base.cti_division(w_cti_encours_calcul_parametres_services_prestations.nombre,w_cti_encours_calcul_parametres_services_prestations.nb_journees)*100 >= 1 AND
|
|
|
w_cti_encours_factures.particularites_encours_service NOT ILIKE '%MAT%' AND
|
|
|
w_cti_encours_factures.particularites_encours_service NOT ILIKE '%PASDEFJA%' AND
|
|
|
prix_unitaire > 0 AND
|
|
|
w_cti_encours_factures.duree_sejour > 0 AND
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture IS NULL AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0 AND
|
|
|
w_cti_encours_factures.no_facture NOT LIKE '%BG' AND
|
|
|
(p_mouvements_sejour.date BETWEEN w_cti_encours_factures.date_debut AND w_cti_encours_factures.date_fin OR
|
|
|
service_facturation_id NOT IN (SELECT oid FROM activite.t_services_facturation WHERE avec_facturation_intermediaire = '1')
|
|
|
);
|
|
|
-- ATU
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'ATU';
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, lieu_id, regle_coefficient)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'ATU' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, 1, 1, coefficient, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, round(prix_unitaire * coefficient), p_mouvements_sejour.lieu_id,
|
|
|
coefficient
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
(
|
|
|
prestation_code = 'ATU' AND p_mouvements_sejour.date <= '20211231' OR
|
|
|
prestation_code = 'FPU' AND p_mouvements_sejour.date >= '20220101'
|
|
|
)
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_sejour = w_cti_encours_factures.no_sejour AND
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code IN ('ATU','FPU')
|
|
|
WHERE
|
|
|
p_mouvements_sejour.nb_externes = 1 AND
|
|
|
p_mouvements_sejour.nb_externes = 1 AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation <> ('*SAISIE') AND
|
|
|
coefficient > 0 AND
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture IS NULL AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG') AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0;
|
|
|
|
|
|
|
|
|
-- Identification des SE pour ne pas générer de GHS
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'SE1, SE2, SE3, SE4';
|
|
|
INSERT INTO w_cti_encours_actes_se1234
|
|
|
SELECT t_actes.oid, t_actes.code,
|
|
|
CASE
|
|
|
WHEN t_actes.code IN ('FEJF003')
|
|
|
THEN 'SE4'
|
|
|
WHEN t_actes.code IN ('AGLB001', 'AHLB003', 'AHLB015', 'AHLB016', 'AHLH014', 'GGHB002', 'GGJB001', 'GGJB002', 'HPJB001', 'JGHB001', 'JGHB002', 'JGHD001', 'JGHJ001', 'JGHJ002', 'JPHJ001', 'JPHJ002')
|
|
|
THEN 'SE3'
|
|
|
WHEN t_actes.code IN ('AELB002', 'AHHA001', 'AHHA002', 'BAGA001', 'BBGA001', 'BDCA003', 'BEJB001', 'BEJB002', 'BELB001', 'BEPA001', 'BGHA001', 'BGJB001', 'BGLB001', 'BGLB002', 'BKLB001', 'CAEA002', 'CAFA006', 'CBLD001', 'CBLD003', 'EBGA001', 'EBHA001', 'EBNE002', 'EGFA007', 'FCFA012', 'FCFA028', 'GBJD002', 'JAHB001', 'JAHJ002', 'JAHJ006', 'JAKD001', 'JCKD001', 'JDLF001', 'JHSB001', 'LHNH001', 'MDGB001', 'MHDB001', 'NJAB001', 'NJMB001', 'PAGB002', 'PAGH001', 'PDFA001', 'QAGA004', 'QZFA001', 'QZFA002', 'QZFA005', 'QZFA007', 'QZGA003', 'QZGA006')
|
|
|
THEN 'SE2'
|
|
|
WHEN t_actes.code IN ('BBCE001', 'DZQJ001', 'DZQJ008', 'DZQJ010', 'DZQJ011', 'GBQA002', 'GDQE004', 'GEQE002', 'GEQE004', 'GEQE006', 'GEQE007', 'GEQE009', 'GEQE010', 'GEQH002', 'HEGE001', 'HEGE002', 'HEQE001', 'HEQE002', 'HEQE003', 'HEQE005', 'HGNE001', 'HGQE002', 'HJQE001', 'HMQH007', 'JCGE003', 'JCGE004', 'JDQE001', 'JDQE002', 'JDQE003', 'JEGE001', 'JEHE002')
|
|
|
THEN 'SE1'
|
|
|
ELSE ''
|
|
|
END AS prestation_code
|
|
|
FROM base.t_actes
|
|
|
WHERE t_actes.code IN ('FEJF003',
|
|
|
'AGLB001', 'AHLB003', 'AHLB015', 'AHLB016', 'AHLH014', 'GGHB002', 'GGJB001', 'GGJB002', 'HPJB001', 'JGHB001', 'JGHB002', 'JGHD001', 'JGHJ001', 'JGHJ002', 'JPHJ001', 'JPHJ002',
|
|
|
'AELB002', 'AHHA001', 'AHHA002', 'BAGA001', 'BBGA001', 'BDCA003', 'BEJB001', 'BEJB002', 'BELB001', 'BEPA001', 'BGHA001', 'BGJB001', 'BGLB001', 'BGLB002', 'BKLB001', 'CAEA002', 'CAFA006', 'CBLD001', 'CBLD003', 'EBGA001', 'EBHA001', 'EBNE002', 'EGFA007', 'FCFA012', 'FCFA028', 'GBJD002', 'JAHB001', 'JAHJ002', 'JAHJ006', 'JAKD001', 'JCKD001', 'JDLF001', 'JHSB001', 'LHNH001', 'MDGB001', 'MHDB001', 'NJAB001', 'NJMB001', 'PAGB002', 'PAGH001', 'PDFA001', 'QAGA004', 'QZFA001', 'QZFA002', 'QZFA005', 'QZFA007', 'QZGA003', 'QZGA006',
|
|
|
'BBCE001', 'DZQJ001', 'DZQJ008', 'DZQJ010', 'DZQJ011', 'GBQA002', 'GDQE004', 'GEQE002', 'GEQE004', 'GEQE006', 'GEQE007', 'GEQE009', 'GEQE010', 'GEQH002', 'HEGE001', 'HEGE002', 'HEQE001', 'HEQE002', 'HEQE003', 'HEQE005', 'HGNE001', 'HGQE002', 'HJQE001', 'HMQH007', 'JCGE003', 'JCGE004', 'JDQE001', 'JDQE002', 'JDQE003', 'JEGE001', 'JEHE002'
|
|
|
)
|
|
|
;
|
|
|
INSERT INTO w_cti_encours_se1234
|
|
|
SELECT p_factures_lignes_h.no_facture,
|
|
|
(MAX(ARRAY[w_cti_encours_actes_se1234.prestation_code,w_cti_encours_actes_se1234.code]))[2] AS acte_se,
|
|
|
(MAX(ARRAY[w_cti_encours_actes_se1234.prestation_code,w_cti_encours_actes_se1234.code]))[1] AS type_se
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
JOIN w_cti_encours_factures ON p_factures_lignes_h.no_facture = w_cti_encours_factures.no_facture AND type_sejour IN ('3')
|
|
|
JOIN w_cti_encours_actes_se1234 ON acte_id = w_cti_encours_actes_se1234.oid
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_facture = p_factures_lignes_h.no_facture AND
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code IN ('SE1','SE2','SE3','SE4','SE5','SE6','SE7')
|
|
|
WHERE w_cti_factures_lignes_non_facturees_c.no_facture IS NULL
|
|
|
GROUP BY 1;
|
|
|
INSERT INTO w_cti_encours_se1234
|
|
|
SELECT p_factures_lignes_non_facturees_h.no_facture,
|
|
|
(MAX(ARRAY[w_cti_encours_actes_se1234.prestation_code,w_cti_encours_actes_se1234.code]))[2] AS acte_se,
|
|
|
(MAX(ARRAY[w_cti_encours_actes_se1234.prestation_code,w_cti_encours_actes_se1234.code]))[1] AS type_se
|
|
|
FROM activite.p_factures_lignes_non_facturees_h
|
|
|
JOIN w_cti_encours_factures ON p_factures_lignes_non_facturees_h.no_facture = w_cti_encours_factures.no_facture AND type_sejour IN ('3')
|
|
|
JOIN w_cti_encours_actes_se1234 ON acte_id = w_cti_encours_actes_se1234.oid
|
|
|
LEFT JOIN w_cti_encours_se1234 ON p_factures_lignes_non_facturees_h.no_facture = w_cti_encours_se1234.no_facture
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_facture = p_factures_lignes_non_facturees_h.no_facture AND
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code IN ('SE1','SE2','SE3','SE4','SE5','SE6','SE7')
|
|
|
WHERE w_cti_encours_se1234.no_facture IS NULL AND w_cti_factures_lignes_non_facturees_c.no_facture IS NULL
|
|
|
GROUP BY 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, lieu_id, regle_texte)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'SEH' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, 1, 1, 1, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, prix_unitaire, p_mouvements_sejour.lieu_id,
|
|
|
'Prestation générée par l''acte : '||acte_se AS regle_texte
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour AND nb_externes > 0
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN w_cti_encours_se1234 ON w_cti_encours_factures.no_facture = w_cti_encours_se1234.no_facture
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id
|
|
|
WHERE
|
|
|
prix_unitaire > 0 AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
w_cti_encours_se1234.type_se = prestation_code AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0 AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG');
|
|
|
|
|
|
-- Prestations valorisées selon prix unitaire moyen par jour de présence dans service
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Prestations selon PU moyen par jour';
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, lieu_id, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, regle_texte)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'PRESTAM' AS type_ligne, p_mouvements_sejour.date, p_mouvements_sejour.date, p_mouvements_sejour.lieu_id, 1, 1, 1, 1,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, round(prix_unitaire,2), regle_prestation_texte
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_mouvements_sejour ON w_cti_encours_factures.no_sejour = p_mouvements_sejour.no_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN activite.p_factures ON w_cti_encours_factures.no_facture = p_factures.no_facture
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation = '*AVGJOUSER'
|
|
|
LEFT JOIN w_cti_factures_lignes_non_facturees_c ON w_cti_factures_lignes_non_facturees_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
w_cti_factures_lignes_non_facturees_c.prestation_code = w_cti_encours_calcul_parametres_services_prestations.prestation_code
|
|
|
WHERE
|
|
|
(p_mouvements_sejour.heure_fin = 240000 OR p_mouvements_sejour.heure_debut > 0 AND p_mouvements_sejour.heure_fin < 240000) AND
|
|
|
w_cti_factures_lignes_non_facturees_c.no_facture IS NULL AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prix_unitaire > 0 AND
|
|
|
COALESCE(rubrique_facturation_id,0) <> 0 AND
|
|
|
COALESCE(prestation_id,0) <> 0 AND
|
|
|
uniquement_prestations_saisies <> '1' AND
|
|
|
(w_cti_encours_factures.est_budget_global <> '1' OR w_cti_encours_factures.no_facture LIKE '%BG') AND
|
|
|
(p_mouvements_sejour.date BETWEEN w_cti_encours_factures.date_debut AND w_cti_encours_factures.date_fin OR
|
|
|
service_facturation_id NOT IN (SELECT oid FROM activite.t_services_facturation WHERE avec_facturation_intermediaire = '1')
|
|
|
)
|
|
|
ORDER BY 1,4;
|
|
|
-- Prestations saisies
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Prestations saisies';
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, lpp_id, ucd_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'SAISIE' AS type_ligne, p_factures_lignes_non_facturees_c.date_debut, p_factures_lignes_non_facturees_c.date_fin, nb_rubrique, nb_rubrique, coefficient,
|
|
|
COALESCE(p_factures_lignes_non_facturees_c.coefficient_mco,1) AS coefficient_mco,
|
|
|
prestation_id, COALESCE(p_factures_lignes_non_facturees_c.lpp_id,0) AS lpp_id, COALESCE(p_factures_lignes_non_facturees_c.ucd_id,0) AS ucd_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, round(nb_rubrique * coefficient * COALESCE(p_factures_lignes_non_facturees_c.coefficient_mco,1) * prix_unitaire * CASE WHEN t_prestations.code IN ('PJ', 'GMT') AND taux_1_bg BETWEEN 1 AND 99 THEN 100-taux_1_bg ELSE 100 END / 100,2), 'Prestation saisie'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_factures_lignes_non_facturees_c ON w_cti_encours_factures.no_facture = p_factures_lignes_non_facturees_c.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
LEFT JOIN
|
|
|
(
|
|
|
SELECT p_factures.no_sejour, MAX(taux_1) AS taux_1_bg
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
JOIN w_cti_encours_factures ON p_factures.no_sejour = w_cti_encours_factures.no_sejour
|
|
|
WHERE p_factures.no_facture LIKE '%BG' AND t_prestations.code = 'GHS' AND taux_1 > 0
|
|
|
GROUP BY 1
|
|
|
) subview_fac_bg ON w_cti_encours_factures.no_sejour = subview_fac_bg.no_sejour
|
|
|
WHERE
|
|
|
(
|
|
|
t_prestations.code NOT IN ('GHS', 'EXH', 'SRC', 'REA', 'STF')
|
|
|
OR w_OPTION_ENCOURSMCOSUP = '1'
|
|
|
AND w_cti_encours_factures.ghs_id > 0
|
|
|
AND t_prestations.code IN ('SRC', 'REA', 'STF'))
|
|
|
AND (
|
|
|
t_prestations.code NOT IN ('GMT', 'PJ','PII')
|
|
|
OR t_prestations.code IN ('PII') AND est_budget_global <> '1'
|
|
|
OR t_prestations.code IN ('GMT', 'PJ') AND type_t2a <> '1'
|
|
|
OR t_prestations.code IN ('GMT', 'PJ','PII')
|
|
|
AND est_budget_global = '1'
|
|
|
AND NOT EXISTS (
|
|
|
SELECT no_sejour
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE
|
|
|
t_prestations.code = 'GHS'
|
|
|
AND w_cti_encours_factures.no_sejour = w_cti_encours_factures_lignes_c.no_sejour
|
|
|
)
|
|
|
AND taux_1_bg IS DISTINCT FROM 100
|
|
|
OR t_prestations.code IN ('PII')
|
|
|
AND est_budget_global = '1'
|
|
|
AND w_cti_encours_factures.no_facture LIKE '%BG'
|
|
|
)
|
|
|
;
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, lpp_id, ucd_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'SAISIE' AS type_ligne, p_factures_lignes_c.date_debut, p_factures_lignes_c.date_fin, nb_rubrique, nb_rubrique, coefficient, 1,
|
|
|
prestation_id, COALESCE(p_factures_lignes_c.lpp_id,0) AS lpp_id, COALESCE(p_factures_lignes_c.ucd_id,0) AS ucd_id, rubrique_facturation_id, rubrique_facturation_id,
|
|
|
prix_unitaire, montant_facture
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_factures_lignes_c ON w_cti_encours_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE t_prestations.code NOT IN ('GHS', 'EXH', 'SRC', 'REA', 'STF') AND
|
|
|
montant_facture <> 0 AND
|
|
|
w_cti_encours_factures.date_fin <= w_date_traitement;
|
|
|
|
|
|
-- En budget global, supprimer en cours GHS si 100% PJ facturé sur mutuelles ou patient ou tp1
|
|
|
DELETE FROM w_cti_encours_factures_lignes_c
|
|
|
USING
|
|
|
(
|
|
|
SELECT no_sejour,
|
|
|
MAX(no_facture_bg) AS no_facture_bg,
|
|
|
MAX(taux_mut) AS taux_mut
|
|
|
FROM
|
|
|
(
|
|
|
SELECT p_factures.no_sejour,
|
|
|
NULL::text AS no_facture_bg,
|
|
|
MAX(taux_0+CASE WHEN montant_facture_1 <> 0 THEN taux_1 ELSE 0 END+taux_2) AS taux_mut
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours on p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations on prestation_id = t_prestations.oid
|
|
|
WHERE est_budget_global = '1' and t_prestations.code IN ('PJ') and
|
|
|
p_factures.no_facture NOT LIKE '%BG' AND
|
|
|
code_facture <> '0' AND
|
|
|
(
|
|
|
montant_facture_0 <> 0 OR
|
|
|
montant_facture_1 <> 0 OR
|
|
|
montant_facture_2 <> 0
|
|
|
)
|
|
|
GROUP BY 1
|
|
|
HAVING MAX(taux_0+CASE WHEN montant_facture_1 <> 0 THEN taux_1 ELSE 0 END+taux_2) = 100 AND
|
|
|
SUM(montant_facture_0+montant_facture_1+montant_facture_2) <> 0
|
|
|
UNION
|
|
|
SELECT p_factures.no_sejour,
|
|
|
MAX(p_factures.no_facture) AS no_facture_bg,
|
|
|
0 AS taux_mut
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours on p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN w_cti_encours_factures_lignes_c ON p_factures.no_facture = w_cti_encours_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations on prestation_id = t_prestations.oid
|
|
|
WHERE est_budget_global = '1' and t_prestations.code IN ('GHS') and
|
|
|
p_factures.no_facture LIKE '%BG' AND
|
|
|
code_facture = '0'
|
|
|
GROUP BY 1
|
|
|
) subview
|
|
|
GROUP BY 1
|
|
|
HAVING MAX(no_facture_bg) IS NOT NULL AND
|
|
|
MAX(taux_mut) = 100
|
|
|
) subview
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = subview.no_facture_bg
|
|
|
;
|
|
|
|
|
|
-- En budget global, diminuer en cours GHS si 20% PJ facturé sur mutuelles ou patient
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours = montant_encours*(100-LEAST(taux_mut,20))/100,
|
|
|
regle_texte = regle_texte || ' - TM facturé déduit'
|
|
|
FROM
|
|
|
(
|
|
|
SELECT no_sejour,
|
|
|
MAX(no_facture_bg) AS no_facture_bg,
|
|
|
MAX(taux_mut) AS taux_mut
|
|
|
FROM
|
|
|
(
|
|
|
SELECT p_factures.no_sejour,
|
|
|
NULL::text AS no_facture_bg,
|
|
|
MAX(taux_0+taux_2) AS taux_mut
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours on p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations on prestation_id = t_prestations.oid
|
|
|
WHERE est_budget_global = '1' and t_prestations.code IN ('PJ') and
|
|
|
p_factures.no_facture NOT LIKE '%BG' AND
|
|
|
code_facture <> '0' AND
|
|
|
(
|
|
|
montant_facture_0 <> 0 OR
|
|
|
montant_facture_2 <> 0
|
|
|
)
|
|
|
GROUP BY 1
|
|
|
HAVING MAX(taux_0+taux_2) <> 0 AND
|
|
|
SUM(montant_facture_0+montant_facture_2) <> 0
|
|
|
UNION
|
|
|
SELECT p_factures.no_sejour,
|
|
|
MAX(p_factures.no_facture) AS no_facture_bg,
|
|
|
0 AS taux_mut
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours on p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN w_cti_encours_factures_lignes_c ON p_factures.no_facture = w_cti_encours_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations on prestation_id = t_prestations.oid
|
|
|
WHERE est_budget_global = '1' and t_prestations.code IN ('GHS') and
|
|
|
p_factures.no_facture LIKE '%BG' AND
|
|
|
code_facture = '0'
|
|
|
GROUP BY 1
|
|
|
) subview
|
|
|
GROUP BY 1
|
|
|
HAVING MAX(no_facture_bg) IS NOT NULL AND
|
|
|
MAX(taux_mut) <> 0
|
|
|
) subview
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = subview.no_facture_bg
|
|
|
;
|
|
|
|
|
|
-- En budget global, diminuer en cours GHS de l'encours TM
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET montant_encours = montant_encours - montant_encours_tm,
|
|
|
regle_texte = regle_texte || ' - TM moyen déduit'
|
|
|
FROM
|
|
|
(
|
|
|
SELECT w_cti_encours_factures_lignes_c.no_sejour,
|
|
|
SUM(montant_encours) AS montant_encours_tm
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.p_sejours on w_cti_encours_factures_lignes_c.no_sejour = p_sejours.no_sejour
|
|
|
|
|
|
JOIN activite.t_prestations on prestation_id = t_prestations.oid
|
|
|
WHERE est_budget_global = '1' and
|
|
|
prestation_id IN (SELECT oid FROM activite.t_prestations WHERE code IN ('PJ')) and
|
|
|
w_cti_encours_factures_lignes_c.no_facture NOT LIKE '%BG'
|
|
|
GROUP BY 1
|
|
|
HAVING SUM(montant_encours) > 0
|
|
|
ORDER BY 1
|
|
|
) subview
|
|
|
WHERE w_cti_encours_factures_lignes_c. no_sejour = subview.no_sejour AND
|
|
|
prestation_id IN (SELECT oid FROM activite.t_prestations WHERE code IN ('GHS')) AND
|
|
|
w_cti_encours_factures_lignes_c.no_facture LIKE '%BG'
|
|
|
;
|
|
|
|
|
|
-- Honoraires medecins salaries
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Honoraires medecins salaries';
|
|
|
|
|
|
IF EXISTS (SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSMEDSAL' AND valeur = '1') THEN
|
|
|
|
|
|
DROP TABLE IF EXISTS w_cti_encours_prestation_rubrique
|
|
|
;
|
|
|
CREATE TEMP TABLE w_cti_encours_prestation_rubrique AS
|
|
|
SELECT prestation_id, (MAX(Array[nb,rubrique_facturation_id]))[2]::bigint AS rubrique_facturation_id
|
|
|
FROM
|
|
|
(
|
|
|
SELECT prestation_id, rubrique_facturation_id, count(*) AS nb
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
WHERE montant_comptabilise > 0
|
|
|
GROUP BY 1,2
|
|
|
ORDER BY 1,2
|
|
|
) subview
|
|
|
GROUP BY 1
|
|
|
;
|
|
|
|
|
|
UPDATE activite.p_factures_lignes_non_facturees_h
|
|
|
SET prix_unitaire = subview.prix_unitaire
|
|
|
FROM
|
|
|
(
|
|
|
SELECT acte_id, activite_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4,
|
|
|
base.Cti_division(SUM(montant_facture_1),SUM(nb_prestation*coefficient)) AS prix_unitaire
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
WHERE acte_id IN (SELECT acte_id FROM activite.p_factures_lignes_non_facturees_h WHERE prix_unitaire = 0) AND
|
|
|
montant_facture_1 > 0
|
|
|
GROUP BY 1,2,3,4,5,6
|
|
|
) subview
|
|
|
WHERE p_factures_lignes_non_facturees_h.acte_id = subview.acte_id AND
|
|
|
p_factures_lignes_non_facturees_h.activite_ccam = subview.activite_ccam AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_1 = subview.modificateur_ccam_1 AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_2 = subview.modificateur_ccam_2 AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_3 = subview.modificateur_ccam_3 AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_4 = subview.modificateur_ccam_4 AND
|
|
|
p_factures_lignes_non_facturees_h.prix_unitaire = 0
|
|
|
;
|
|
|
|
|
|
UPDATE activite.p_factures_lignes_non_facturees_h
|
|
|
SET prix_unitaire = subview.prix_unitaire
|
|
|
FROM
|
|
|
(
|
|
|
SELECT acte_id, activite_ccam,
|
|
|
base.Cti_division(SUM(montant_facture_1),SUM(nb_prestation*coefficient)) AS prix_unitaire
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
WHERE acte_id IN (SELECT acte_id FROM activite.p_factures_lignes_non_facturees_h WHERE prix_unitaire = 0) AND
|
|
|
montant_facture_1 > 0
|
|
|
GROUP BY 1,2
|
|
|
) subview
|
|
|
WHERE p_factures_lignes_non_facturees_h.acte_id = subview.acte_id AND
|
|
|
p_factures_lignes_non_facturees_h.activite_ccam = subview.activite_ccam AND
|
|
|
p_factures_lignes_non_facturees_h.prix_unitaire = 0
|
|
|
|
|
|
;
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c(
|
|
|
no_sejour, no_facture, type_ligne, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco,
|
|
|
prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id,
|
|
|
prix_unitaire, montant_encours, regle_texte)
|
|
|
SELECT w_cti_encours_factures.no_sejour, w_cti_encours_factures.no_facture, 'SAISIE' AS type_ligne, p_factures_lignes_non_facturees_h.date_debut, p_factures_lignes_non_facturees_h.date_fin, nb_rubrique, nb_rubrique, coefficient, 1,
|
|
|
p_factures_lignes_non_facturees_h.prestation_id, w_cti_encours_prestation_rubrique.rubrique_facturation_id, w_cti_encours_prestation_rubrique.rubrique_facturation_id,
|
|
|
prix_unitaire, round(nb_rubrique * coefficient * prix_unitaire,2), 'Honoraire salarié saisi'
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_factures_lignes_non_facturees_h ON w_cti_encours_factures.no_facture = p_factures_lignes_non_facturees_h.no_facture
|
|
|
JOIN activite.t_prestations ON p_factures_lignes_non_facturees_h.prestation_id = t_prestations.oid
|
|
|
JOIN activite.t_medecins_administratifs ON medecin_facture_id = t_medecins_administratifs.oid
|
|
|
JOIN w_cti_encours_prestation_rubrique ON p_factures_lignes_non_facturees_h.prestation_id = w_cti_encours_prestation_rubrique.prestation_id
|
|
|
WHERE t_medecins_administratifs.est_medecin_salarie = 1
|
|
|
;
|
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
-- Réaffectation forfait journalier sur GHS
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Deduction FJ du GHS';
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET montant_encours = w_cti_encours_factures_lignes_c.montant_encours - mt_fjpas,
|
|
|
regle_texte = regle_texte || ' - FJ Déduit'
|
|
|
FROM
|
|
|
(
|
|
|
SELECT w_cti_encours_factures.no_facture,
|
|
|
SUM(CASE WHEN t_prestations.code = 'GHS' THEN 1 ELSE 0 END) AS nb_ghs,
|
|
|
MAX(CASE WHEN t_prestations.code = 'GHS' THEN w_cti_encours_factures_lignes_c.CTID ELSE NULL END) AS CTID_ghs,
|
|
|
SUM(CASE WHEN t_prestations.code IN ('FJ','PAS') THEN montant_encours ELSE 0 END) AS mt_fjpas
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
JOIN w_cti_encours_factures ON
|
|
|
w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture
|
|
|
WHERE w_cti_encours_factures.ghs_id > 0 AND
|
|
|
type_ligne <> 'GHSBB' AND
|
|
|
type_ligne <> 'GHSBBM' AND
|
|
|
w_cti_encours_factures.no_facture NOT LIKE '%BG' AND
|
|
|
t_prestations.code IN ('GHS','FJ', 'PAS')
|
|
|
GROUP BY 1
|
|
|
HAVING SUM(CASE WHEN t_prestations.code IN ('FJ','PAS') THEN montant_encours ELSE 0 END) <> 0 AND
|
|
|
SUM(CASE WHEN t_prestations.code = 'GHS' THEN 1 ELSE 0 END) = 1
|
|
|
) subview
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = subview.no_facture AND
|
|
|
w_cti_encours_factures_lignes_c.CTID = subview.CTID_ghs
|
|
|
;
|
|
|
|
|
|
--Déduction du FJ du GHS dans le cas où le PJ facturé et valorisé est à 0
|
|
|
DROP TABLE IF EXISTS w_montant_fj_par_sejour
|
|
|
;
|
|
|
CREATE TEMP TABLE w_montant_fj_par_sejour AS
|
|
|
SELECT
|
|
|
p_sejours.no_sejour
|
|
|
,SUM(CASE WHEN t_prestations.code LIKE 'FJ%'
|
|
|
THEN montant_facture_0 + montant_facture_2
|
|
|
ELSE 0
|
|
|
END) as montant_fj
|
|
|
FROM activite.p_sejours
|
|
|
JOIN activite.p_factures ON p_sejours.no_sejour = p_factures.no_sejour
|
|
|
JOIN activite.p_factures_lignes_c on p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations on p_factures_lignes_c.prestation_id = t_prestations.oid
|
|
|
WHERE p_factures.no_facture NOT LIKE '%BG'
|
|
|
AND p_sejours.no_sejour IN (
|
|
|
SELECT DISTINCT(no_sejour) FROM w_cti_encours_factures_lignes_c
|
|
|
)
|
|
|
GROUP BY p_sejours.no_sejour
|
|
|
HAVING
|
|
|
SUM(CASE WHEN t_prestations.code LIKE 'PJ%'
|
|
|
THEN montant_facture_0 + montant_facture_2 + p_factures_lignes_c.montant_encours
|
|
|
ELSE 0 END) = 0 AND
|
|
|
SUM(CASE WHEN t_prestations.code LIKE 'FJ%'
|
|
|
THEN montant_facture_0 + montant_facture_2
|
|
|
ELSE 0 END) <> 0
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET
|
|
|
montant_encours = montant_encours - montant_fj
|
|
|
,regle_texte = regle_texte || ' - FJ facturé déduit'
|
|
|
FROM w_montant_fj_par_sejour
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_sejour = w_montant_fj_par_sejour.no_sejour
|
|
|
AND w_cti_encours_factures_lignes_c.no_facture LIKE '%BG'
|
|
|
AND prestation_id = (
|
|
|
SELECT oid
|
|
|
FROM activite.t_prestations
|
|
|
WHERE code = 'GHS'
|
|
|
)
|
|
|
;
|
|
|
|
|
|
-- Réaffectation forfait journalier sur GMT
|
|
|
WITH factures_smr_avec_fj AS (
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_facture
|
|
|
, MAX(CASE WHEN t_prestations.code = 'GMT' AND type_ligne = 'GMT' THEN prestation_id ELSE 0 END) AS prestation_gmt_id
|
|
|
, SUM(CASE WHEN t_prestations.code = 'FJ' THEN montant_encours ELSE 0 END) AS montant_fj_total
|
|
|
, SUM(CASE WHEN t_prestations.code = 'GMT' AND type_ligne = 'GMT' THEN 1 ELSE 0 END) AS nb_lignes_gmt
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
JOIN w_cti_encours_factures ON w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture
|
|
|
WHERE w_cti_encours_factures.no_facture NOT LIKE '%BG'
|
|
|
AND t_prestations.code IN ('GMT','FJ')
|
|
|
GROUP BY
|
|
|
w_cti_encours_factures.no_facture
|
|
|
HAVING SUM(CASE WHEN t_prestations.code = 'FJ' THEN montant_encours ELSE 0 END) <> 0
|
|
|
AND SUM(CASE WHEN t_prestations.code = 'GMT' AND type_ligne = 'GMT' THEN 1 ELSE 0 END) > 0
|
|
|
),
|
|
|
montant_fj_ventile_par_jour AS (
|
|
|
SELECT
|
|
|
no_facture
|
|
|
, prestation_gmt_id
|
|
|
, round(montant_fj_total / nb_lignes_gmt, 2) AS prix_unitaire_fj
|
|
|
FROM factures_smr_avec_fj
|
|
|
)
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET
|
|
|
montant_encours = w_cti_encours_factures_lignes_c.montant_encours - prix_unitaire_fj,
|
|
|
regle_texte = regle_texte || ' - FJ Déduit'
|
|
|
FROM montant_fj_ventile_par_jour
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = montant_fj_ventile_par_jour.no_facture
|
|
|
AND w_cti_encours_factures_lignes_c.prestation_id = montant_fj_ventile_par_jour.prestation_gmt_id
|
|
|
AND w_cti_encours_factures_lignes_c.type_ligne = 'GMT'
|
|
|
;
|
|
|
|
|
|
-- Pour la valorisation SMR, les lignes de rubrique de facturation TJP ne doivent pas être valorisées
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET montant_encours = 0
|
|
|
FROM activite.t_rubriques_facturation
|
|
|
WHERE w_cti_encours_factures_lignes_c.rubrique_facturation_id = t_rubriques_facturation.oid
|
|
|
AND t_rubriques_facturation.code ILIKE 'TJP%'
|
|
|
AND w_cti_encours_factures_lignes_c.montant_encours <> 0
|
|
|
;
|
|
|
|
|
|
-- Factures à ignorer
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Factures ignorees';
|
|
|
UPDATE w_cti_encours_factures
|
|
|
SET ignorer = '1'
|
|
|
FROM activite.t_calcul_encours
|
|
|
WHERE t_calcul_encours.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
t_calcul_encours.type_ligne = 'FACTURE' AND
|
|
|
t_calcul_encours.ignorer = '1'
|
|
|
;
|
|
|
|
|
|
-- Forcage par dossier et prestation
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Lignes forcees ou ignorees';
|
|
|
-- Paramètres de génération
|
|
|
UPDATE w_cti_encours_calcul_parametres_services_prestations
|
|
|
SET type_ligne = 'PRESTA-' ||
|
|
|
CASE
|
|
|
WHEN prestation_code IN ('SRC', 'REA', 'STF', 'AMD', 'AMF', 'IGM', 'IGP', 'APD', 'IMD', 'IMI', 'IPD', 'IVG', 'NN1', 'NN2', 'NN3', 'GHT') THEN 'PC'
|
|
|
WHEN prestation_code IN ('CPC', 'SHO', 'CP') THEN 'PC'
|
|
|
WHEN prestation_code IN ('D09', 'D11', 'D13', 'D13', 'D15', 'D16', 'DTP') THEN 'PC'
|
|
|
WHEN prestation_code IN ('ATU','FPU') THEN 'PC'
|
|
|
WHEN prestation_type_valorisation IN ('CP') THEN 'PC'
|
|
|
WHEN prestation_code IN ('GMT', 'PJ', 'FJ', 'FJA', 'ENT', 'PMS') THEN 'PU'
|
|
|
WHEN prestation_type_valorisation IN ('ENT') THEN 'PU'
|
|
|
WHEN prestation_code IN ('SE1','SE2','SE3','SE4','SE5','SE6','SE7') THEN 'PU'
|
|
|
WHEN prestation_type_valorisation = '*AVGJOUSER' THEN 'PU'
|
|
|
ELSE '' END
|
|
|
;
|
|
|
|
|
|
-- Initialisation coefficient et prix unitaire calcule
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET coefficient_calcule = w_cti_encours_factures_lignes_c.coefficient
|
|
|
FROM activite.t_lieux,
|
|
|
w_cti_encours_calcul_parametres_services_prestations
|
|
|
WHERE
|
|
|
w_cti_encours_factures_lignes_c.lieu_id = t_lieux.oid AND
|
|
|
t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_factures_lignes_c.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.type_ligne LIKE 'PRESTA%' AND
|
|
|
w_cti_encours_factures_lignes_c.coefficient_calcule = 0
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET prix_unitaire_calcule = w_cti_encours_factures_lignes_c.prix_unitaire
|
|
|
FROM activite.t_lieux,
|
|
|
w_cti_encours_calcul_parametres_services_prestations
|
|
|
WHERE
|
|
|
w_cti_encours_factures_lignes_c.lieu_id = t_lieux.oid AND
|
|
|
t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_factures_lignes_c.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.type_ligne LIKE 'PRESTA%' AND
|
|
|
w_cti_encours_factures_lignes_c.prix_unitaire_calcule = 0
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
coefficient = CASE WHEN t_calcul_encours.coefficient_is_force = '1' THEN t_calcul_encours.coefficient_force ELSE w_cti_encours_factures_lignes_c.coefficient END,
|
|
|
prix_unitaire = CASE WHEN t_calcul_encours.prix_unitaire_is_force = '1' THEN t_calcul_encours.prix_unitaire_force ELSE w_cti_encours_factures_lignes_c.prix_unitaire END,
|
|
|
ignorer = CASE WHEN t_calcul_encours.ignorer = '1' THEN '1' ELSE '0' END,
|
|
|
regle_texte = CASE
|
|
|
WHEN t_calcul_encours.coefficient_is_force = '1' AND w_cti_encours_factures_lignes_c.regle_texte ILIKE 'COEFF%' THEN 'Coefficient forcé dans paramétrage facture : ' || t_calcul_encours.coefficient_force
|
|
|
WHEN t_calcul_encours.prix_unitaire_is_force = '1' AND w_cti_encours_factures_lignes_c.regle_texte ILIKE 'P.U.%' THEN 'P.U. forcé dans paramétrage facture : ' || t_calcul_encours.prix_unitaire_force
|
|
|
ELSE regle_texte END,
|
|
|
montant_encours =
|
|
|
CASE WHEN t_calcul_encours.ignorer IS DISTINCT from '1' THEN
|
|
|
CASE WHEN t_calcul_encours.coefficient_is_force = '1' THEN t_calcul_encours.coefficient_force ELSE w_cti_encours_factures_lignes_c.coefficient END *
|
|
|
CASE WHEN t_calcul_encours.prix_unitaire_is_force = '1' THEN t_calcul_encours.prix_unitaire_force ELSE w_cti_encours_factures_lignes_c.prix_unitaire END *
|
|
|
nb_prestation
|
|
|
ELSE 0 END
|
|
|
FROM activite.t_lieux,
|
|
|
w_cti_encours_calcul_parametres_services_prestations,
|
|
|
activite.t_calcul_encours
|
|
|
WHERE
|
|
|
w_cti_encours_factures_lignes_c.lieu_id = t_lieux.oid AND
|
|
|
t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_factures_lignes_c.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.type_ligne LIKE 'PRESTA%' AND
|
|
|
|
|
|
t_calcul_encours.no_facture = w_cti_encours_factures_lignes_c.no_facture AND
|
|
|
t_calcul_encours.lieu_service_id = t_lieux.service_facturation_id AND
|
|
|
t_calcul_encours.prestation_id = w_cti_encours_factures_lignes_c.prestation_id AND
|
|
|
t_calcul_encours.rubrique_facturation_id = w_cti_encours_factures_lignes_c.rubrique_facturation_id AND
|
|
|
t_calcul_encours.type_ligne LIKE 'PRESEJ%' AND
|
|
|
(
|
|
|
t_calcul_encours.coefficient_is_force = '1' OR
|
|
|
t_calcul_encours.prix_unitaire_is_force = '1' OR
|
|
|
t_calcul_encours.ignorer = '1'
|
|
|
)
|
|
|
;
|
|
|
|
|
|
-- Ecriture du justificatif
|
|
|
IF w_date_encours = w_date_encours_actuelle THEN
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Ecriture justificatif';
|
|
|
TRUNCATE activite.p_facture_ligne_valorise_c;
|
|
|
|
|
|
INSERT INTO activite.p_facture_ligne_valorise_c(
|
|
|
no_facture, facture_id, date_debut, date_fin, lieu_id, nb_rubrique,
|
|
|
nb_prestation, coefficient, coefficient_mco, rubrique_facturation_id,
|
|
|
prestation_id, lpp_id, ucd_id, prix_unitaire, montant_encours, type_ligne_code, mode_calcul_code,
|
|
|
mode_calcul_texte)
|
|
|
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_facture,
|
|
|
w_cti_encours_factures.oid,
|
|
|
MIN(w_cti_encours_factures_lignes_c.date_debut),
|
|
|
MAX(w_cti_encours_factures_lignes_c.date_fin),
|
|
|
CASE WHEN t_prestations.code LIKE 'GHS%' THEN w_cti_encours_factures.lieu_sortie_id ELSE w_cti_encours_factures_lignes_c.lieu_id END,
|
|
|
SUM(nb_rubrique),
|
|
|
SUM(nb_prestation),
|
|
|
coefficient,
|
|
|
coefficient_mco,
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id,
|
|
|
prestation_id,
|
|
|
lpp_id,
|
|
|
ucd_id,
|
|
|
prix_unitaire,
|
|
|
SUM(CASE WHEN w_cti_encours_factures.ignorer IS DISTINCT FROM '1' AND w_cti_encours_factures_lignes_c.ignorer IS DISTINCT FROM '1' THEN montant_encours ELSE 0 END),
|
|
|
w_cti_encours_factures_lignes_c.type_ligne,
|
|
|
CASE
|
|
|
WHEN w_cti_encours_factures.ignorer = '1' AND w_cti_encours_factures_lignes_c.regle_ghs <> '' THEN '00-FORCE'
|
|
|
WHEN w_cti_encours_factures_lignes_c.ignorer = '1' AND w_cti_encours_factures_lignes_c.regle_ghs <> '' THEN '00-FORCE'
|
|
|
ELSE w_cti_encours_factures_lignes_c.regle_ghs END,
|
|
|
CASE
|
|
|
WHEN w_cti_encours_factures.ignorer = '1' THEN 'FACTURE IGNOREE.'
|
|
|
WHEN w_cti_encours_factures_lignes_c.ignorer = '1' THEN 'LIGNE IGNOREE.'
|
|
|
ELSE w_cti_encours_factures_lignes_c.regle_texte END
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN w_cti_encours_factures ON w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE w_cti_encours_factures_lignes_c.rubrique_facturation_id IS NOT NULL AND
|
|
|
(montant_encours <> 0 OR
|
|
|
w_cti_encours_factures_lignes_c.ignorer = '1' OR
|
|
|
type_ligne = 'GHSECART'
|
|
|
)
|
|
|
GROUP BY 1,2,5,8,9,10,11,12,13,14,16,17,18
|
|
|
ORDER BY 1;
|
|
|
|
|
|
|
|
|
-- Stockage des paramètres de calcul
|
|
|
INSERT INTO activite.t_calcul_encours
|
|
|
(
|
|
|
type_ligne,
|
|
|
coefficient_mco,
|
|
|
lieu_service_id,
|
|
|
lieu_unite_fonctionnelle_id,
|
|
|
nb_ambulatoires,
|
|
|
nb_externes,
|
|
|
nb_seances,
|
|
|
nb_journees,
|
|
|
nb_journees_cp,
|
|
|
prestation_id,
|
|
|
prestation_type_valorisation,
|
|
|
rubrique_facturation_id,
|
|
|
nb_prestations_facturees,
|
|
|
prix_unitaire_calcule,
|
|
|
coefficient_calcule
|
|
|
)
|
|
|
SELECT
|
|
|
w_cti_encours_calcul_parametres_services_prestations.type_ligne,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.coefficient_mco,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.lieu_service_id,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.nb_ambulatoires,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.nb_externes,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.nb_seances,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.nb_journees,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.nb_journees_cp,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_id,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.nombre AS nb_prestations_facturees,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.prix_unitaire_calcule,
|
|
|
w_cti_encours_calcul_parametres_services_prestations.coefficient_calcule
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
LEFT JOIN activite.t_calcul_encours ON
|
|
|
t_calcul_encours.lieu_service_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_calcul_encours.lieu_unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
t_calcul_encours.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
t_calcul_encours.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id AND
|
|
|
t_calcul_encours.type_ligne LIKE 'PRESTA%'
|
|
|
WHERE t_calcul_encours.oid IS NULL
|
|
|
;
|
|
|
|
|
|
UPDATE activite.t_calcul_encours SET
|
|
|
type_ligne = w_cti_encours_calcul_parametres_services_prestations.type_ligne,
|
|
|
nb_ambulatoires = w_cti_encours_calcul_parametres_services_prestations.nb_ambulatoires,
|
|
|
nb_externes = w_cti_encours_calcul_parametres_services_prestations.nb_externes,
|
|
|
nb_seances = w_cti_encours_calcul_parametres_services_prestations.nb_seances,
|
|
|
nb_journees = w_cti_encours_calcul_parametres_services_prestations.nb_journees,
|
|
|
nb_journees_cp = w_cti_encours_calcul_parametres_services_prestations.nb_journees_cp,
|
|
|
prestation_type_valorisation = w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation,
|
|
|
nb_prestations_facturees = w_cti_encours_calcul_parametres_services_prestations.nombre,
|
|
|
prix_unitaire_calcule = w_cti_encours_calcul_parametres_services_prestations.prix_unitaire_calcule,
|
|
|
coefficient_calcule = w_cti_encours_calcul_parametres_services_prestations.coefficient_calcule
|
|
|
FROM w_cti_encours_calcul_parametres_services_prestations
|
|
|
WHERE t_calcul_encours.lieu_service_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_calcul_encours.lieu_unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
t_calcul_encours.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
t_calcul_encours.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id AND
|
|
|
t_calcul_encours.type_ligne LIKE 'PRESTA%' AND
|
|
|
(
|
|
|
t_calcul_encours.type_ligne IS DISTINCT FROM w_cti_encours_calcul_parametres_services_prestations.type_ligne OR
|
|
|
t_calcul_encours.nb_ambulatoires IS DISTINCT FROM w_cti_encours_calcul_parametres_services_prestations.nb_ambulatoires OR
|
|
|
t_calcul_encours.nb_externes IS DISTINCT FROM w_cti_encours_calcul_parametres_services_prestations.nb_externes OR
|
|
|
t_calcul_encours.nb_seances IS DISTINCT FROM w_cti_encours_calcul_parametres_services_prestations.nb_seances OR
|
|
|
t_calcul_encours.nb_journees IS DISTINCT FROM w_cti_encours_calcul_parametres_services_prestations.nb_journees OR
|
|
|
t_calcul_encours.nb_journees_cp IS DISTINCT FROM w_cti_encours_calcul_parametres_services_prestations.nb_journees_cp OR
|
|
|
t_calcul_encours.prestation_type_valorisation IS DISTINCT FROM w_cti_encours_calcul_parametres_services_prestations.prestation_type_valorisation OR
|
|
|
t_calcul_encours.nb_prestations_facturees IS DISTINCT FROM w_cti_encours_calcul_parametres_services_prestations.nombre OR
|
|
|
t_calcul_encours.prix_unitaire_calcule IS DISTINCT FROM w_cti_encours_calcul_parametres_services_prestations.prix_unitaire_calcule OR
|
|
|
t_calcul_encours.coefficient_calcule IS DISTINCT FROM w_cti_encours_calcul_parametres_services_prestations.coefficient_calcule
|
|
|
)
|
|
|
;
|
|
|
|
|
|
-- Stockage des données de calcul par séjour (GHS)
|
|
|
|
|
|
INSERT INTO activite.t_calcul_encours
|
|
|
(
|
|
|
type_ligne,
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
coefficient_mco,
|
|
|
lieu_service_id,
|
|
|
lieu_unite_fonctionnelle_id,
|
|
|
nb_ambulatoires,
|
|
|
nb_externes,
|
|
|
nb_seances,
|
|
|
nb_journees,
|
|
|
nb_journees_cp,
|
|
|
prestation_id,
|
|
|
prestation_type_valorisation,
|
|
|
rubrique_facturation_id,
|
|
|
nb_prestations_facturees,
|
|
|
prix_unitaire_calcule,
|
|
|
coefficient_calcule
|
|
|
)
|
|
|
SELECT
|
|
|
w_cti_encours_factures_lignes_c.type_ligne,
|
|
|
w_cti_encours_factures_lignes_c.no_sejour,
|
|
|
w_cti_encours_factures_lignes_c.no_facture,
|
|
|
w_cti_encours_factures_lignes_c.coefficient_mco,
|
|
|
t_lieux.service_facturation_id AS lieu_service_id,
|
|
|
t_lieux.unite_fonctionnelle_id AS lieu_unite_fonctionnelle_id,
|
|
|
0::numeric AS nb_ambulatoires,
|
|
|
0::numeric AS nb_externes,
|
|
|
0::numeric AS nb_seances,
|
|
|
0::numeric AS nb_journees,
|
|
|
0::numeric AS nb_journees_cp,
|
|
|
w_cti_encours_factures_lignes_c.prestation_id,
|
|
|
w_cti_encours_factures_lignes_c.regle_ghs AS prestation_type_valorisation,
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id,
|
|
|
w_cti_encours_factures_lignes_c.nb_prestation AS nb_prestations_facturees,
|
|
|
w_cti_encours_factures_lignes_c.prix_unitaire_calcule,
|
|
|
0::numeric AS coefficient_calcule
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.t_lieux ON lieu_id = t_lieux.oid
|
|
|
LEFT JOIN activite.t_calcul_encours ON
|
|
|
t_calcul_encours.no_facture = w_cti_encours_factures_lignes_c.no_facture AND
|
|
|
t_calcul_encours.prestation_id = w_cti_encours_factures_lignes_c.prestation_id AND
|
|
|
t_calcul_encours.rubrique_facturation_id = w_cti_encours_factures_lignes_c.rubrique_facturation_id AND
|
|
|
t_calcul_encours.type_ligne LIKE 'GHSNG%'
|
|
|
WHERE w_cti_encours_factures_lignes_c.type_ligne = 'GHSNG' AND
|
|
|
t_calcul_encours.no_facture IS NULL
|
|
|
;
|
|
|
|
|
|
UPDATE activite.t_calcul_encours SET
|
|
|
type_ligne = w_cti_encours_factures_lignes_c.type_ligne,
|
|
|
prix_unitaire_calcule = w_cti_encours_factures_lignes_c.prix_unitaire_calcule
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
WHERE t_calcul_encours.no_facture = w_cti_encours_factures_lignes_c.no_facture AND
|
|
|
t_calcul_encours.prestation_id = w_cti_encours_factures_lignes_c.prestation_id AND
|
|
|
t_calcul_encours.rubrique_facturation_id = w_cti_encours_factures_lignes_c.rubrique_facturation_id AND
|
|
|
t_calcul_encours.type_ligne LIKE 'GHSNG%' AND
|
|
|
(
|
|
|
t_calcul_encours.type_ligne IS DISTINCT FROM w_cti_encours_factures_lignes_c.type_ligne OR
|
|
|
t_calcul_encours.prix_unitaire_calcule IS DISTINCT FROM w_cti_encours_factures_lignes_c.prix_unitaire_calcule
|
|
|
)
|
|
|
;
|
|
|
|
|
|
DELETE FROM activite.t_calcul_encours
|
|
|
WHERE type_ligne = 'GHSNG' AND
|
|
|
no_facture NOT IN (SELECT no_facture FROM w_cti_encours_factures_lignes_c WHERE w_cti_encours_factures_lignes_c.type_ligne = 'GHSNG')
|
|
|
;
|
|
|
|
|
|
-- Stockage des séjours calculés (prestations)
|
|
|
|
|
|
INSERT INTO activite.t_calcul_encours
|
|
|
(
|
|
|
type_ligne,
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
coefficient_mco,
|
|
|
lieu_service_id,
|
|
|
lieu_unite_fonctionnelle_id,
|
|
|
nb_ambulatoires,
|
|
|
nb_externes,
|
|
|
nb_seances,
|
|
|
nb_journees,
|
|
|
nb_journees_cp,
|
|
|
prestation_id,
|
|
|
prestation_type_valorisation,
|
|
|
rubrique_facturation_id,
|
|
|
nb_prestations_facturees,
|
|
|
prix_unitaire_calcule,
|
|
|
coefficient_calcule
|
|
|
)
|
|
|
SELECT
|
|
|
replace(w_cti_encours_calcul_parametres_services_prestations.type_ligne,'PRESTA','PRESEJ') AS type_ligne,
|
|
|
w_cti_encours_factures_lignes_c.no_sejour,
|
|
|
w_cti_encours_factures_lignes_c.no_facture,
|
|
|
w_cti_encours_factures_lignes_c.coefficient_mco,
|
|
|
t_lieux.service_facturation_id AS lieu_service_id,
|
|
|
t_lieux.unite_fonctionnelle_id AS lieu_unite_fonctionnelle_id,
|
|
|
0::numeric AS nb_ambulatoires,
|
|
|
0::numeric AS nb_externes,
|
|
|
0::numeric AS nb_seances,
|
|
|
0::numeric AS nb_journees,
|
|
|
0::numeric AS nb_journees_cp,
|
|
|
w_cti_encours_factures_lignes_c.prestation_id,
|
|
|
w_cti_encours_factures_lignes_c.regle_ghs AS prestation_type_valorisation,
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id,
|
|
|
SUM(w_cti_encours_factures_lignes_c.nb_prestation) AS nb_prestations_facturees,
|
|
|
w_cti_encours_factures_lignes_c.prix_unitaire_calcule,
|
|
|
w_cti_encours_factures_lignes_c.coefficient_calcule
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.t_lieux ON lieu_id = t_lieux.oid
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON
|
|
|
t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_factures_lignes_c.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id
|
|
|
LEFT JOIN activite.t_calcul_encours ON
|
|
|
t_calcul_encours.no_facture = w_cti_encours_factures_lignes_c.no_facture AND
|
|
|
t_calcul_encours.lieu_service_id = t_lieux.service_facturation_id AND
|
|
|
t_calcul_encours.prestation_id = w_cti_encours_factures_lignes_c.prestation_id AND
|
|
|
t_calcul_encours.rubrique_facturation_id = w_cti_encours_factures_lignes_c.rubrique_facturation_id AND
|
|
|
t_calcul_encours.type_ligne LIKE 'PRESEJ%'
|
|
|
WHERE w_cti_encours_factures_lignes_c.type_ligne <> 'SAISIE' AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.type_ligne LIKE 'PRESTA%' AND
|
|
|
t_calcul_encours.no_facture IS NULL
|
|
|
GROUP BY 1,2,3,4,5,6,12,13,14,16,17
|
|
|
;
|
|
|
|
|
|
UPDATE activite.t_calcul_encours SET
|
|
|
coefficient_calcule = w_cti_encours_factures_lignes_c.coefficient_calcule,
|
|
|
prix_unitaire_calcule = w_cti_encours_factures_lignes_c.prix_unitaire_calcule
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.t_lieux ON lieu_id = t_lieux.oid
|
|
|
WHERE t_calcul_encours.no_facture = w_cti_encours_factures_lignes_c.no_facture AND
|
|
|
t_calcul_encours.lieu_service_id = t_lieux.service_facturation_id AND
|
|
|
t_calcul_encours.prestation_id = w_cti_encours_factures_lignes_c.prestation_id AND
|
|
|
t_calcul_encours.rubrique_facturation_id = w_cti_encours_factures_lignes_c.rubrique_facturation_id AND
|
|
|
t_calcul_encours.type_ligne LIKE 'PRESEJ%' AND
|
|
|
(
|
|
|
t_calcul_encours.coefficient_calcule IS DISTINCT FROM w_cti_encours_factures_lignes_c.coefficient OR
|
|
|
t_calcul_encours.prix_unitaire_calcule IS DISTINCT FROM w_cti_encours_factures_lignes_c.prix_unitaire
|
|
|
)
|
|
|
;
|
|
|
|
|
|
DELETE
|
|
|
FROM activite.t_calcul_encours
|
|
|
WHERE t_calcul_encours.type_ligne LIKE 'PRESEJ%' AND
|
|
|
(
|
|
|
t_calcul_encours.no_facture || '-' ||
|
|
|
t_calcul_encours.lieu_service_id || '-' ||
|
|
|
t_calcul_encours.prestation_id || '-' ||
|
|
|
t_calcul_encours.rubrique_facturation_id
|
|
|
) NOT IN
|
|
|
(SELECT
|
|
|
w_cti_encours_factures_lignes_c.no_facture || '-' ||
|
|
|
t_lieux.service_facturation_id || '-' ||
|
|
|
w_cti_encours_factures_lignes_c.prestation_id || '-' ||
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.t_lieux ON lieu_id = t_lieux.oid
|
|
|
JOIN w_cti_encours_calcul_parametres_services_prestations ON
|
|
|
t_lieux.service_facturation_id = w_cti_encours_calcul_parametres_services_prestations.lieu_service_id AND
|
|
|
t_lieux.unite_fonctionnelle_id = w_cti_encours_calcul_parametres_services_prestations.lieu_unite_fonctionnelle_id AND
|
|
|
w_cti_encours_factures_lignes_c.prestation_id = w_cti_encours_calcul_parametres_services_prestations.prestation_id AND
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id = w_cti_encours_calcul_parametres_services_prestations.rubrique_facturation_id
|
|
|
WHERE w_cti_encours_factures_lignes_c.type_ligne <> 'SAISIE' AND
|
|
|
w_cti_encours_calcul_parametres_services_prestations.type_ligne LIKE 'PRESTA%'
|
|
|
)
|
|
|
;
|
|
|
|
|
|
|
|
|
-- Stockage des séjours calculés (pour paramétrer séjours à ne pas calculer)
|
|
|
INSERT INTO activite.t_calcul_encours
|
|
|
(
|
|
|
type_ligne,
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
coefficient_mco,
|
|
|
lieu_service_id,
|
|
|
lieu_unite_fonctionnelle_id,
|
|
|
nb_ambulatoires,
|
|
|
nb_externes,
|
|
|
nb_seances,
|
|
|
nb_journees,
|
|
|
nb_journees_cp,
|
|
|
prestation_id,
|
|
|
prestation_type_valorisation,
|
|
|
rubrique_facturation_id,
|
|
|
nb_prestations_facturees,
|
|
|
prix_unitaire_calcule,
|
|
|
coefficient_calcule
|
|
|
)
|
|
|
SELECT
|
|
|
'FACTURE'::text,
|
|
|
w_cti_encours_factures_lignes_c.no_sejour,
|
|
|
w_cti_encours_factures_lignes_c.no_facture,
|
|
|
0::numeric AS coefficient_mco,
|
|
|
0::bigint AS lieu_service_id,
|
|
|
0::bigint AS lieu_unite_fonctionnelle_id,
|
|
|
0::numeric AS nb_ambulatoires,
|
|
|
0::numeric AS nb_externes,
|
|
|
0::numeric AS nb_seances,
|
|
|
0::numeric AS nb_journees,
|
|
|
0::numeric AS nb_journees_cp,
|
|
|
0::bigint AS prestation_id,
|
|
|
0::bigint AS prestation_type_valorisation,
|
|
|
0::bigint AS rubrique_facturation_id,
|
|
|
0::bigint AS nb_prestation,
|
|
|
SUM(montant_encours) AS prix_unitaire_calcule,
|
|
|
0::numeric AS coefficient_calcule
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
LEFT JOIN activite.t_calcul_encours ON
|
|
|
t_calcul_encours.no_facture = w_cti_encours_factures_lignes_c.no_facture AND
|
|
|
t_calcul_encours.type_ligne LIKE 'FACTURE%'
|
|
|
WHERE t_calcul_encours.no_facture IS NULL
|
|
|
GROUP BY 2,3
|
|
|
;
|
|
|
|
|
|
DELETE FROM activite.t_calcul_encours
|
|
|
WHERE type_ligne = 'FACTURE' AND
|
|
|
no_facture NOT IN (SELECT no_facture FROM w_cti_encours_factures_lignes_c)
|
|
|
;
|
|
|
|
|
|
END IF;
|
|
|
-- Eclatement des prestations jour par jour
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Eclatement jour par jour';
|
|
|
INSERT INTO w_cti_encours_factures_lignes_sup_c
|
|
|
SELECT
|
|
|
w_cti_encours_factures_lignes_c.oid AS from_oid,
|
|
|
t_prestations.code AS prestation_code,
|
|
|
date(p_sejours.date_entree) AS date_debut_ghs,
|
|
|
date(date_fin - interval '1 day') AS date_fin_ghs,
|
|
|
(date(date_fin) - date(date_entree)) * CASE WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation_ghs,
|
|
|
w_cti_encours_factures_lignes_c.*
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.p_sejours ON w_cti_encours_factures_lignes_c.no_sejour = p_sejours.no_sejour
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code IN ('GMT', 'PJ', 'FJ', 'PHJ','SSM', 'GHS', 'GHT', 'EXH', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO')
|
|
|
WHERE type_sejour = '1' AND (nb_prestation > 1 or nb_prestation < -1 OR (t_prestations.code = 'GHS' AND date(date_fin) - date(date_entree) > 1 )) ;
|
|
|
UPDATE w_cti_encours_factures_lignes_sup_c SET
|
|
|
date_fin_ghs = date(date_debut_exh - interval '1 day'),
|
|
|
nb_prestation_ghs = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1
|
|
|
FROM (
|
|
|
SELECT no_facture, date(MIN(date_debut)) AS date_debut_exh
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code = 'EXH'
|
|
|
GROUP BY 1) subview
|
|
|
WHERE w_cti_encours_factures_lignes_sup_c.no_facture = subview.no_facture ;
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_sup_c_gen
|
|
|
SELECT
|
|
|
from_oid,
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
date AS date_debut,
|
|
|
date AS date_fin,
|
|
|
lieu_id,
|
|
|
rubrique_facturation_id,
|
|
|
rubrique_comptabilisation_id,
|
|
|
prestation_id,
|
|
|
lpp_id,
|
|
|
ucd_id,
|
|
|
CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs AND t_rubriques_facturation.code = '111' THEN 1 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,
|
|
|
prix_unitaire,
|
|
|
w_cti_encours_factures_lignes_sup_c.oid,
|
|
|
round(montant_encours / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_encours,
|
|
|
type_ligne,
|
|
|
regle_ghs,
|
|
|
regle_coefficient,
|
|
|
regle_texte
|
|
|
FROM w_cti_encours_factures_lignes_sup_c
|
|
|
JOIN base.p_calendrier ON date_debut BETWEEN p_calendrier.date - ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END)::integer + 1 AND p_calendrier.date AND
|
|
|
p_calendrier.date <> date_debut
|
|
|
JOIN activite.t_rubriques_facturation ON rubrique_facturation_id = t_rubriques_facturation.oid;
|
|
|
|
|
|
|
|
|
INSERT INTO w_cti_encours_factures_lignes_sup_c_gen_tot
|
|
|
SELECT from_oid,
|
|
|
SUM(nb_rubrique) AS nb_rubrique,
|
|
|
SUM(nb_prestation) AS nb_prestation,
|
|
|
SUM(montant_encours) AS montant_encours
|
|
|
FROM w_cti_encours_factures_lignes_sup_c_gen
|
|
|
GROUP BY 1;
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET
|
|
|
date_fin = w_cti_encours_factures_lignes_c.date_debut,
|
|
|
nb_rubrique = w_cti_encours_factures_lignes_c.nb_rubrique - w_cti_encours_factures_lignes_sup_c_gen_tot.nb_rubrique,
|
|
|
nb_prestation = w_cti_encours_factures_lignes_c.nb_prestation - w_cti_encours_factures_lignes_sup_c_gen_tot.nb_prestation,
|
|
|
montant_encours = w_cti_encours_factures_lignes_c.montant_encours - w_cti_encours_factures_lignes_sup_c_gen_tot.montant_encours
|
|
|
FROM w_cti_encours_factures_lignes_sup_c_gen_tot
|
|
|
WHERE w_cti_encours_factures_lignes_c.oid = from_oid;
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET
|
|
|
nb_rubrique = nb_prestation
|
|
|
FROM activite.t_rubriques_facturation, activite.t_prestations
|
|
|
WHERE w_cti_encours_factures_lignes_c.prestation_id = t_prestations.oid AND t_prestations.code = 'GHS' AND
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id = t_rubriques_facturation.oid AND t_rubriques_facturation.code <> '111';
|
|
|
INSERT INTO w_cti_encours_factures_lignes_c (
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
nb_rubrique,
|
|
|
coefficient,
|
|
|
coefficient_mco,
|
|
|
prestation_id,
|
|
|
lpp_id,
|
|
|
ucd_id,
|
|
|
rubrique_facturation_id,
|
|
|
rubrique_comptabilisation_id,
|
|
|
prix_unitaire,
|
|
|
nb_prestation,
|
|
|
montant_encours,
|
|
|
type_ligne,
|
|
|
regle_ghs,
|
|
|
lieu_id,
|
|
|
regle_coefficient,
|
|
|
regle_texte)
|
|
|
SELECT
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
nb_rubrique,
|
|
|
coefficient,
|
|
|
coefficient_mco,
|
|
|
prestation_id,
|
|
|
lpp_id,
|
|
|
ucd_id,
|
|
|
rubrique_facturation_id,
|
|
|
rubrique_comptabilisation_id,
|
|
|
prix_unitaire,
|
|
|
nb_prestation,
|
|
|
montant_encours,
|
|
|
type_ligne,
|
|
|
regle_ghs,
|
|
|
lieu_id,
|
|
|
regle_coefficient,
|
|
|
regle_texte
|
|
|
FROM w_cti_encours_factures_lignes_sup_c_gen;
|
|
|
-- sur ambulatoires avec une nuit,
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET date_fin = date_debut
|
|
|
WHERE prestation_id IN (SELECT oid FROM activite.t_prestations WHERE code = 'GHS') AND
|
|
|
nb_rubrique = 1 AND
|
|
|
date_fin - date_debut = 1;
|
|
|
|
|
|
|
|
|
-- Lieu
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET lieu_id = p_mouvements_sejour.lieu_id
|
|
|
FROM
|
|
|
activite.p_factures,
|
|
|
activite.p_mouvements_sejour
|
|
|
WHERE
|
|
|
w_cti_encours_factures_lignes_c.no_facture = p_factures.no_facture AND
|
|
|
p_factures.no_sejour = p_mouvements_sejour.no_sejour AND
|
|
|
w_cti_encours_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_mouvements_sejour.lieu_id IS DISTINCT FROM w_cti_encours_factures_lignes_c.lieu_id;
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET lieu_id = p_sejours.lieu_sortie_id
|
|
|
FROM activite.p_sejours
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_sejour = p_sejours.no_sejour
|
|
|
AND (lieu_id = 0 OR lieu_id is null);
|
|
|
|
|
|
-- Lieu des lignes de factures (en tenant compte des absences)
|
|
|
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.p_mouvements_sejour
|
|
|
JOIN activite.t_lieux ON lieu_id = t_lieux.oid
|
|
|
JOIN activite.t_services_facturation On service_facturation_id = t_services_facturation.oid
|
|
|
WHERE p_mouvements_sejour.no_sejour IN (SELECT no_sejour FROM w_cti_encours_factures_lignes_c )
|
|
|
GROUP BY 1,2
|
|
|
HAVING MAX(est_absence) = '1'
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c
|
|
|
SET lieu_id = COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence)
|
|
|
FROM w_mouvements_sejour_lieu_jour
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_sejour = w_mouvements_sejour_lieu_jour.no_sejour AND
|
|
|
w_cti_encours_factures_lignes_c.date_fin = w_mouvements_sejour_lieu_jour.date AND
|
|
|
w_cti_encours_factures_lignes_c.lieu_id <> COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence)
|
|
|
;
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Reaffectation prestation TDE sur budget global';
|
|
|
DROP TABLE IF EXISTS w_factures_e;
|
|
|
CREATE TEMP TABLE w_factures_e AS
|
|
|
SELECT p_factures.no_sejour,
|
|
|
p_factures_bg.no_facture AS no_facture_bg,
|
|
|
p_factures.no_facture AS no_facture_nbg
|
|
|
FROM w_cti_encours_factures p_factures
|
|
|
JOIN w_cti_encours_factures p_factures_bg ON p_factures_bg.no_sejour = p_factures.no_sejour AND p_factures_bg.no_facture LIKE '%BG'
|
|
|
WHERE p_factures.no_facture NOT LIKE '%BG'
|
|
|
;
|
|
|
|
|
|
ANALYSE w_factures_e
|
|
|
;
|
|
|
|
|
|
UPDATE w_cti_encours_factures_lignes_c p_factures_lignes_c
|
|
|
SET no_facture = no_facture_bg
|
|
|
FROM w_factures_e, activite.t_prestations
|
|
|
WHERE p_factures_lignes_c.no_facture = no_facture_nbg AND
|
|
|
prestation_id = t_prestations.oid AND
|
|
|
t_prestations.code LIKE 'TDE%'
|
|
|
;
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Repartition par tiers payant';
|
|
|
UPDATE w_cti_encours_factures_lignes_c SET
|
|
|
montant_encours_1 = CASE WHEN tiers_payant_1_id <> 0 THEN round(montant_encours * coeff_1,2) ELSE 0 END,
|
|
|
montant_encours_2 = CASE WHEN tiers_payant_2_id <> 0 THEN round(montant_encours * coeff_2,2) ELSE 0 END,
|
|
|
montant_encours_0 = montant_encours - CASE WHEN tiers_payant_1_id <> 0 THEN round(montant_encours * coeff_1,2) ELSE 0 END
|
|
|
- CASE WHEN tiers_payant_2_id <> 0 THEN round(montant_encours * coeff_2,2) ELSE 0 END
|
|
|
FROM w_cti_encours_factures, w_cti_encours_repartition_tp
|
|
|
WHERE w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id = w_cti_encours_repartition_tp.rubrique_facturation_id;
|
|
|
UPDATE w_cti_encours_factures SET
|
|
|
regle_ghs = COALESCE(subview.regle_ghs,'0'),
|
|
|
montant_valorise_c = COALESCE(subview.montant_valorise,0),
|
|
|
montant_valorise_0_c = COALESCE(subview.montant_valorise_0,0),
|
|
|
montant_valorise_1_c = COALESCE(subview.montant_valorise_1,0),
|
|
|
montant_valorise_2_c = COALESCE(subview.montant_valorise_2,0),
|
|
|
montant_encours_c = COALESCE(subview.montant_encours,0),
|
|
|
montant_encours_0_c = COALESCE(subview.montant_encours_0,0),
|
|
|
montant_encours_1_c = COALESCE(subview.montant_encours_1,0),
|
|
|
montant_encours_2_c = COALESCE(subview.montant_encours_2,0),
|
|
|
etat = ''
|
|
|
FROM
|
|
|
(SELECT w_cti_encours_factures.no_facture,
|
|
|
MAX(w_cti_encours_factures_lignes_c.regle_ghs) AS regle_ghs,
|
|
|
SUM(montant_encours) AS montant_valorise,
|
|
|
SUM(montant_encours_0) AS montant_valorise_0,
|
|
|
SUM(montant_encours_1) AS montant_valorise_1,
|
|
|
SUM(montant_encours_2) AS montant_valorise_2,
|
|
|
SUM(CASE WHEN w_cti_encours_factures_lignes_c.date_fin <= w_cti_encours_factures.date_encours THEN montant_encours ELSE 0 END) AS montant_encours,
|
|
|
SUM(CASE WHEN w_cti_encours_factures_lignes_c.date_fin <= w_cti_encours_factures.date_encours THEN montant_encours_0 ELSE 0 END) AS montant_encours_0,
|
|
|
SUM(CASE WHEN w_cti_encours_factures_lignes_c.date_fin <= w_cti_encours_factures.date_encours THEN montant_encours_1 ELSE 0 END) AS montant_encours_1,
|
|
|
SUM(CASE WHEN w_cti_encours_factures_lignes_c.date_fin <= w_cti_encours_factures.date_encours THEN montant_encours_2 ELSE 0 END) AS montant_encours_2
|
|
|
FROM w_cti_encours_factures
|
|
|
LEFT JOIN w_cti_encours_factures_lignes_c ON w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture AND
|
|
|
w_cti_encours_factures_lignes_c.ignorer IS DISTINCT FROM '1'
|
|
|
WHERE w_cti_encours_factures.ignorer IS DISTINCT FROM '1'
|
|
|
GROUP BY 1
|
|
|
) subview
|
|
|
WHERE subview.no_facture = w_cti_encours_factures.no_facture;
|
|
|
|
|
|
-- Génération encours
|
|
|
|
|
|
IF w_date_encours = w_date_encours_actuelle THEN
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Generation valorisation non factures';
|
|
|
DELETE FROM activite.p_factures_lignes_c WHERE montant_encours <> 0;
|
|
|
DELETE FROM activite.p_factures_lignes_h WHERE montant_encours <> 0;
|
|
|
|
|
|
DELETE
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
WHERE montant_encours = 0 AND
|
|
|
montant_facture = 0 AND
|
|
|
montant_comptabilise = 0 AND
|
|
|
no_facture IN (SELECT no_facture FROM w_cti_encours_factures_lignes_c)
|
|
|
;
|
|
|
|
|
|
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.montant_encours_c <> 0
|
|
|
;
|
|
|
DELETE
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
USING activite.p_factures
|
|
|
WHERE p_factures_lignes_h.no_facture = p_factures.no_facture AND
|
|
|
p_factures.montant_encours_c <> 0
|
|
|
;
|
|
|
|
|
|
UPDATE activite.p_factures SET
|
|
|
montant_encours_c = 0,
|
|
|
montant_encours_0_c = 0,
|
|
|
montant_encours_1_c = 0,
|
|
|
montant_encours_2_c = 0,
|
|
|
montant_encours_22_c = 0,
|
|
|
montant_encours_h = 0,
|
|
|
montant_encours_0_h = 0,
|
|
|
montant_encours_1_h = 0,
|
|
|
montant_encours_2_h = 0,
|
|
|
montant_encours_22_h = 0
|
|
|
WHERE montant_encours_c <> 0 OR montant_encours_h <> 0;
|
|
|
|
|
|
INSERT INTO activite.p_factures_lignes_c(
|
|
|
facture_id, no_facture, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, prix_unitaire,
|
|
|
prestation_id, lpp_id, ucd_id, rubrique_facturation_id, rubrique_comptabilisation_id, lieu_id,
|
|
|
montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22,
|
|
|
taux_0, taux_1, taux_2, taux_22,
|
|
|
montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22,
|
|
|
montant_encours, montant_encours_1, montant_encours_2, montant_encours_0)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.oid, w_cti_encours_factures.no_facture, w_cti_encours_factures_lignes_c.date_debut, w_cti_encours_factures_lignes_c.date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, prix_unitaire,
|
|
|
prestation_id, lpp_id, ucd_id, w_cti_encours_factures_lignes_c.rubrique_facturation_id, rubrique_comptabilisation_id, lieu_id,
|
|
|
0, 0, 0, 0, 0,
|
|
|
0, 0, 0, 0,
|
|
|
0, 0, 0, 0, 0,
|
|
|
montant_encours,
|
|
|
montant_encours_1,
|
|
|
montant_encours_2,
|
|
|
montant_encours_0
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN w_cti_encours_factures ON w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture
|
|
|
WHERE w_cti_encours_factures_lignes_c.rubrique_facturation_id IS NOT NULL AND
|
|
|
w_cti_encours_factures.ignorer IS DISTINCT FROM '1' AND
|
|
|
w_cti_encours_factures_lignes_c.ignorer IS DISTINCT FROM '1' AND
|
|
|
type_ligne <> 'GHSECART';
|
|
|
|
|
|
UPDATE activite.p_factures SET
|
|
|
tiers_payant_1_id = w_cti_encours_factures.tiers_payant_1_id,
|
|
|
tiers_payant_2_id = w_cti_encours_factures.tiers_payant_2_id,
|
|
|
montant_encours_c = w_cti_encours_factures.montant_valorise_c,
|
|
|
montant_encours_1_c = w_cti_encours_factures.montant_valorise_1_c,
|
|
|
montant_encours_2_c = w_cti_encours_factures.montant_valorise_2_c,
|
|
|
montant_encours_0_c = w_cti_encours_factures.montant_valorise_0_c
|
|
|
FROM w_cti_encours_factures
|
|
|
WHERE w_cti_encours_factures.no_facture = p_factures.no_facture AND
|
|
|
w_cti_encours_factures.ignorer <> '1';
|
|
|
|
|
|
|
|
|
UPDATE activite.p_factures_lignes_non_facturees_h
|
|
|
SET prix_unitaire = subview.prix_unitaire
|
|
|
FROM
|
|
|
(
|
|
|
SELECT acte_id, activite_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4,
|
|
|
base.Cti_division(SUM(montant_facture_1),SUM(nb_prestation*coefficient)) AS prix_unitaire
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
WHERE acte_id IN (SELECT acte_id FROM activite.p_factures_lignes_non_facturees_h WHERE prix_unitaire = 0) AND
|
|
|
montant_facture_1 > 0
|
|
|
GROUP BY 1,2,3,4,5,6
|
|
|
) subview
|
|
|
WHERE p_factures_lignes_non_facturees_h.acte_id = subview.acte_id AND
|
|
|
p_factures_lignes_non_facturees_h.activite_ccam = subview.activite_ccam AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_1 = subview.modificateur_ccam_1 AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_2 = subview.modificateur_ccam_2 AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_3 = subview.modificateur_ccam_3 AND
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_4 = subview.modificateur_ccam_4 AND
|
|
|
p_factures_lignes_non_facturees_h.prix_unitaire = 0
|
|
|
;
|
|
|
|
|
|
UPDATE activite.p_factures_lignes_non_facturees_h
|
|
|
SET prix_unitaire = subview.prix_unitaire
|
|
|
FROM
|
|
|
(
|
|
|
SELECT acte_id, activite_ccam,
|
|
|
base.Cti_division(SUM(montant_facture_1),SUM(nb_prestation*coefficient)) AS prix_unitaire
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
WHERE acte_id IN (SELECT acte_id FROM activite.p_factures_lignes_non_facturees_h WHERE prix_unitaire = 0) AND
|
|
|
montant_facture_1 > 0
|
|
|
GROUP BY 1,2
|
|
|
) subview
|
|
|
WHERE p_factures_lignes_non_facturees_h.acte_id = subview.acte_id AND
|
|
|
p_factures_lignes_non_facturees_h.activite_ccam = subview.activite_ccam AND
|
|
|
p_factures_lignes_non_facturees_h.prix_unitaire = 0
|
|
|
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.p_factures_lignes_h (
|
|
|
no_facture,
|
|
|
facture_id,
|
|
|
date_debut,
|
|
|
heure_debut,
|
|
|
date_fin,
|
|
|
coefficient,
|
|
|
coefficient_mco,
|
|
|
lieu_id,
|
|
|
prestation_id,
|
|
|
rubrique_facturation_id,
|
|
|
rubrique_comptabilisation_id,
|
|
|
acte_id,
|
|
|
phase_ccam,
|
|
|
activite_ccam,
|
|
|
extension_ccam,
|
|
|
modificateur_ccam_1,
|
|
|
modificateur_ccam_2,
|
|
|
modificateur_ccam_3,
|
|
|
modificateur_ccam_4,
|
|
|
medecin_facture_id,
|
|
|
medecin_comptabilise_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,
|
|
|
montant_depassement,
|
|
|
montant_encours,
|
|
|
montant_encours_0,
|
|
|
montant_encours_1,
|
|
|
montant_encours_2,
|
|
|
montant_encours_22,
|
|
|
montant_non_facture
|
|
|
)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_facture,
|
|
|
w_cti_encours_factures.oid AS facture_id,
|
|
|
p_factures_lignes_non_facturees_h.date_debut,
|
|
|
p_factures_lignes_non_facturees_h.heure_debut,
|
|
|
p_factures_lignes_non_facturees_h.date_fin,
|
|
|
p_factures_lignes_non_facturees_h.coefficient,
|
|
|
1::numeric AS coefficient_mco,
|
|
|
w_cti_encours_factures.lieu_sortie_id AS lieu_id,
|
|
|
p_factures_lignes_non_facturees_h.prestation_id,
|
|
|
0::bigint AS rubrique_facturation_id,
|
|
|
0::bigint AS rubrique_comptabilisation_id,
|
|
|
p_factures_lignes_non_facturees_h.acte_id,
|
|
|
p_factures_lignes_non_facturees_h.phase_ccam,
|
|
|
p_factures_lignes_non_facturees_h.activite_ccam,
|
|
|
p_factures_lignes_non_facturees_h.extension_ccam,
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_1,
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_2,
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_3,
|
|
|
p_factures_lignes_non_facturees_h.modificateur_ccam_4,
|
|
|
p_factures_lignes_non_facturees_h.medecin_facture_id,
|
|
|
p_factures_lignes_non_facturees_h.medecin_facture_id AS medecin_comptabilise_id,
|
|
|
p_factures_lignes_non_facturees_h.nb_rubrique,
|
|
|
p_factures_lignes_non_facturees_h.nb_rubrique AS nb_prestation,
|
|
|
p_factures_lignes_non_facturees_h.prix_unitaire,
|
|
|
0::numeric AS taux_0,
|
|
|
0::numeric AS taux_1,
|
|
|
0::numeric AS taux_2,
|
|
|
0::numeric AS taux_22,
|
|
|
0::numeric AS montant_facture,
|
|
|
0::numeric AS montant_facture_0,
|
|
|
0::numeric AS montant_facture_1,
|
|
|
0::numeric AS montant_facture_2,
|
|
|
0::numeric AS montant_facture_22,
|
|
|
0::numeric AS montant_comptabilise,
|
|
|
0::numeric AS montant_comptabilise_0,
|
|
|
0::numeric AS montant_comptabilise_1,
|
|
|
0::numeric AS montant_comptabilise_2,
|
|
|
0::numeric AS montant_comptabilise_22,
|
|
|
0::numeric AS montant_depassement,
|
|
|
nb_rubrique * prix_unitaire * p_factures_lignes_non_facturees_h.coefficient AS montant_encours,
|
|
|
0::numeric AS montant_encours_0,
|
|
|
nb_rubrique * prix_unitaire * p_factures_lignes_non_facturees_h.coefficient AS montant_encours_1,
|
|
|
0::numeric AS montant_encours_2,
|
|
|
0::numeric AS montant_encours_22,
|
|
|
nb_rubrique * prix_unitaire * p_factures_lignes_non_facturees_h.coefficient AS montant_non_facture
|
|
|
FROM activite.p_factures_lignes_non_facturees_h
|
|
|
JOIN w_cti_encours_factures ON p_factures_lignes_non_facturees_h.no_facture = w_cti_encours_factures.no_facture
|
|
|
WHERE w_cti_encours_factures.ignorer <> '1'
|
|
|
;
|
|
|
|
|
|
-- Total honoraires valorisés
|
|
|
UPDATE activite.p_factures SET
|
|
|
montant_encours_h = COALESCE(subview.montant_valorise,0)
|
|
|
FROM
|
|
|
(SELECT
|
|
|
w_cti_encours_factures.no_facture,
|
|
|
SUM(nb_rubrique * prix_unitaire * p_factures_lignes_non_facturees_h.coefficient) AS montant_valorise
|
|
|
FROM activite.p_factures_lignes_non_facturees_h
|
|
|
JOIN w_cti_encours_factures ON p_factures_lignes_non_facturees_h.no_facture = w_cti_encours_factures.no_facture
|
|
|
WHERE w_cti_encours_factures.ignorer <> '1'
|
|
|
GROUP BY 1
|
|
|
) subview
|
|
|
WHERE subview.no_facture = p_factures.no_facture;
|
|
|
|
|
|
END IF;
|
|
|
-- Transformation factures non valorisées en en cours
|
|
|
UPDATE activite.p_factures_lignes_c SET
|
|
|
montant_encours = montant_facture,
|
|
|
montant_encours_0 = montant_facture_0,
|
|
|
montant_encours_1 = montant_facture_1,
|
|
|
montant_encours_2 = montant_facture_2,
|
|
|
montant_encours_22 = montant_facture_22,
|
|
|
montant_facture = 0,
|
|
|
montant_facture_0 = 0,
|
|
|
montant_facture_1 = 0,
|
|
|
montant_facture_2 = 0,
|
|
|
montant_facture_22 = 0
|
|
|
FROM activite.p_factures
|
|
|
WHERE p_factures.no_facture = p_factures_lignes_c.no_facture AND
|
|
|
p_factures.code_facture = '3';
|
|
|
UPDATE activite.p_factures_lignes_h SET
|
|
|
montant_encours = montant_facture,
|
|
|
montant_encours_0 = montant_facture_0,
|
|
|
montant_encours_1 = montant_facture_1,
|
|
|
montant_encours_2 = montant_facture_2,
|
|
|
montant_encours_22 = montant_facture_22,
|
|
|
montant_facture = 0,
|
|
|
montant_facture_0 = 0,
|
|
|
montant_facture_1 = 0,
|
|
|
montant_facture_2 = 0,
|
|
|
montant_facture_22 = 0
|
|
|
FROM activite.p_factures
|
|
|
WHERE p_factures.no_facture = p_factures_lignes_h.no_facture AND
|
|
|
p_factures.code_facture = '3';
|
|
|
UPDATE activite.p_factures SET
|
|
|
type_facture = 'E',
|
|
|
code_facture = '0',
|
|
|
montant_encours_c = montant_facture_c,
|
|
|
montant_encours_0_c = montant_facture_0_c,
|
|
|
montant_encours_1_c = montant_facture_1_c,
|
|
|
montant_encours_2_c = montant_facture_2_c,
|
|
|
montant_encours_22_c = montant_facture_22_c,
|
|
|
montant_facture_c = 0,
|
|
|
montant_facture_0_c = 0,
|
|
|
montant_facture_1_c = 0,
|
|
|
montant_facture_2_c = 0,
|
|
|
montant_facture_22_c = 0,
|
|
|
montant_encours_h = montant_facture_h,
|
|
|
montant_encours_0_h = montant_facture_0_h,
|
|
|
montant_encours_1_h = montant_facture_1_h,
|
|
|
montant_encours_2_h = montant_facture_2_h,
|
|
|
montant_encours_22_h = montant_facture_22_h,
|
|
|
montant_facture_h = 0,
|
|
|
montant_facture_0_h = 0,
|
|
|
montant_facture_1_h = 0,
|
|
|
montant_facture_2_h = 0,
|
|
|
montant_facture_22_h = 0
|
|
|
WHERE code_facture = '3';
|
|
|
-- Génération encours comptables
|
|
|
IF (i_option NOT ILIKE '%-nogen%') THEN
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Generation en-cours comptables';
|
|
|
|
|
|
IF EXISTS (SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSACTIVE' AND valeur = '1') THEN
|
|
|
|
|
|
-- Effacer encours Budget Global
|
|
|
DELETE FROM activite.p_factures_encours
|
|
|
WHERE code_origine = 'C' AND no_facture LIKE '%BG%' AND
|
|
|
(SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSACTIVEBG') IS DISTINCT FROM '1';
|
|
|
-- Effacer factures encours comptabilisées sur même mois
|
|
|
DELETE FROM activite.p_factures_encours
|
|
|
USING activite.p_factures
|
|
|
WHERE code_origine = 'C' AND
|
|
|
p_factures_encours.no_facture_reference = p_factures.no_facture AND
|
|
|
p_factures.code_vente = '1' AND p_factures_encours.date_encours >= p_factures.date_vente AND
|
|
|
date(date_trunc('month',p_factures_encours.date_encours)) >=
|
|
|
(SELECT date(date_trunc('month',t_divers.valeur_date)) FROM activite.t_divers WHERE t_divers.code = 'ENCOURSNOW');
|
|
|
|
|
|
|
|
|
-- Effacer génération précédente
|
|
|
DELETE FROM activite.p_factures_encours
|
|
|
USING w_cti_encours_calcul_parametres
|
|
|
WHERE date_trunc('month',p_factures_encours.date_encours) = date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
code_origine = 'C';
|
|
|
-- Lignes non référencées
|
|
|
DELETE FROM activite.p_factures_encours_lignes_c
|
|
|
WHERE NOT EXISTS (SELECT 'NOT_TO_DELETE' FROM activite.p_factures_encours WHERE p_factures_encours.no_facture = p_factures_encours_lignes_c.no_facture)
|
|
|
AND p_factures_encours_lignes_c IS NOT NULL;
|
|
|
DELETE FROM activite.p_facture_encours_ligne_valorise_c
|
|
|
WHERE NOT EXISTS (SELECT 'NOT_TO_DELETE' FROM activite.p_factures_encours WHERE p_factures_encours.no_facture = p_facture_encours_ligne_valorise_c.no_facture)
|
|
|
AND p_facture_encours_ligne_valorise_c IS NOT NULL;
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Entetes (valorisees)';
|
|
|
|
|
|
-- Ajout encours
|
|
|
INSERT INTO activite.p_factures_encours(
|
|
|
sejour_id,
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
no_facture_reference,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
code_origine,
|
|
|
code_sorti,
|
|
|
date_encours,
|
|
|
date_calcul,
|
|
|
tiers_payant_1_id,
|
|
|
tiers_payant_2_id,
|
|
|
tiers_payant_22_id,
|
|
|
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,
|
|
|
date_entree,
|
|
|
heure_entree,
|
|
|
date_sortie,
|
|
|
heure_sortie,
|
|
|
type_sejour,
|
|
|
lieu_sortie_id,
|
|
|
date_groupage,
|
|
|
provider_id,
|
|
|
ghm_id,
|
|
|
filiere_soin_principale_id
|
|
|
)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.sejour_id,
|
|
|
w_cti_encours_factures.no_sejour,
|
|
|
w_cti_encours_factures.no_facture_encours,
|
|
|
p_factures.no_facture_reference,
|
|
|
w_cti_encours_factures.date_debut,
|
|
|
w_cti_encours_factures.date_fin,
|
|
|
'C' AS code_origine,
|
|
|
CASE
|
|
|
WHEN p_sejours.code_sorti = '1' AND p_sejours.type_sejour <> '3' AND date_trunc('month',p_sejours.date_sortie) <= date_trunc('month',w_cti_encours_factures.date_encours) THEN '1'
|
|
|
WHEN p_sejours.type_sejour = '3' THEN '1'
|
|
|
ELSE '0' END AS code_sorti,
|
|
|
w_cti_encours_factures.date_encours AS date_encours,
|
|
|
w_NOW AS date_calcul,
|
|
|
w_cti_encours_factures.tiers_payant_1_id,
|
|
|
w_cti_encours_factures.tiers_payant_2_id,
|
|
|
0 AS tiers_payant_22_id,
|
|
|
p_factures.tiers_payant_0_id,
|
|
|
w_cti_encours_factures.ghs_id,
|
|
|
w_cti_encours_factures.ghs_bebe1_id,
|
|
|
w_cti_encours_factures.ghs_bebe2_id,
|
|
|
w_cti_encours_factures.ghs_bebe3_id,
|
|
|
w_cti_encours_factures.code_cp_demandee,
|
|
|
w_cti_encours_factures.montant_encours_c,
|
|
|
w_cti_encours_factures.montant_encours_0_c,
|
|
|
w_cti_encours_factures.montant_encours_1_c,
|
|
|
w_cti_encours_factures.montant_encours_2_c,
|
|
|
0 AS montant_encours_22_c,
|
|
|
0 AS montant_encours_h,
|
|
|
0 AS montant_encours_0_h,
|
|
|
0 AS montant_encours_1_h,
|
|
|
0 AS montant_encours_2_h,
|
|
|
0 AS montant_encours_22_h,
|
|
|
p_sejours.date_entree,
|
|
|
p_sejours.heure_entree,
|
|
|
p_sejours.date_sortie,
|
|
|
p_sejours.heure_sortie,
|
|
|
p_sejours.type_sejour,
|
|
|
p_sejours.lieu_sortie_id,
|
|
|
p_sejours.date_groupage,
|
|
|
p_sejours.provider_id,
|
|
|
p_sejours.ghm_id,
|
|
|
p_sejours.filiere_soin_principale_id
|
|
|
FROM w_cti_encours_factures
|
|
|
JOIN activite.p_factures ON w_cti_encours_factures.no_facture = p_factures.no_facture
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
LEFT JOIN activite.t_divers t_divers_encoreactivebg ON t_divers_encoreactivebg.code = 'ENCOURSACTIVEBG'
|
|
|
WHERE w_cti_encours_factures.montant_encours_c <> 0 AND
|
|
|
w_cti_encours_factures.date_debut <= w_cti_encours_factures.date_encours AND
|
|
|
(
|
|
|
w_cti_encours_factures.no_facture NOT LIKE '%BG' OR
|
|
|
t_divers_encoreactivebg.valeur = '1'
|
|
|
) AND
|
|
|
w_cti_encours_factures.ignorer <> '1';
|
|
|
-- detail encours
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Lignes (valorisees)';
|
|
|
|
|
|
INSERT INTO activite.p_factures_encours_lignes_c(
|
|
|
facture_id,
|
|
|
no_facture,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
nb_rubrique,
|
|
|
coefficient,
|
|
|
coefficient_mco,
|
|
|
rubrique_facturation_id,
|
|
|
prestation_id,
|
|
|
lpp_id,
|
|
|
ucd_id,
|
|
|
prix_unitaire,
|
|
|
lieu_id,
|
|
|
nb_prestation,
|
|
|
rubrique_comptabilisation_id,
|
|
|
montant_encours,
|
|
|
montant_encours_0,
|
|
|
montant_encours_1,
|
|
|
montant_encours_2,
|
|
|
montant_encours_22
|
|
|
)
|
|
|
SELECT
|
|
|
p_factures_encours.oid AS facture_id,
|
|
|
w_cti_encours_factures.no_facture_encours,
|
|
|
MIN(w_cti_encours_factures_lignes_c.date_debut),
|
|
|
LEAST(MAX(w_cti_encours_factures_lignes_c.date_fin),MAX(p_factures_encours.date_encours)),
|
|
|
SUM(w_cti_encours_factures_lignes_c.nb_rubrique),
|
|
|
w_cti_encours_factures_lignes_c.coefficient,
|
|
|
w_cti_encours_factures_lignes_c.coefficient_mco,
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id,
|
|
|
w_cti_encours_factures_lignes_c.prestation_id,
|
|
|
w_cti_encours_factures_lignes_c.lpp_id,
|
|
|
w_cti_encours_factures_lignes_c.ucd_id,
|
|
|
w_cti_encours_factures_lignes_c.prix_unitaire,
|
|
|
w_cti_encours_factures_lignes_c.lieu_id,
|
|
|
SUM(w_cti_encours_factures_lignes_c.nb_prestation),
|
|
|
w_cti_encours_factures_lignes_c.rubrique_comptabilisation_id,
|
|
|
SUM(w_cti_encours_factures_lignes_c.montant_encours),
|
|
|
SUM(w_cti_encours_factures_lignes_c.montant_encours_0),
|
|
|
SUM(w_cti_encours_factures_lignes_c.montant_encours_1),
|
|
|
SUM(w_cti_encours_factures_lignes_c.montant_encours_2),
|
|
|
SUM(w_cti_encours_factures_lignes_c.montant_encours_22)
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN w_cti_encours_factures ON w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture
|
|
|
JOIN activite.p_factures_encours ON w_cti_encours_factures.no_facture_encours = p_factures_encours.no_facture
|
|
|
LEFT JOIN activite.t_divers t_divers_encoreactivebg ON t_divers_encoreactivebg.code = 'ENCOURSACTIVEBG'
|
|
|
WHERE w_cti_encours_factures_lignes_c.montant_encours <> 0 AND
|
|
|
w_cti_encours_factures_lignes_c.date_debut <= w_cti_encours_factures.date_encours AND
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id IS NOT NULL AND
|
|
|
(
|
|
|
w_cti_encours_factures.no_facture NOT LIKE '%BG' OR
|
|
|
t_divers_encoreactivebg.valeur = '1'
|
|
|
) AND
|
|
|
w_cti_encours_factures.ignorer <> '1' AND
|
|
|
w_cti_encours_factures_lignes_c.ignorer <> '1'
|
|
|
GROUP BY
|
|
|
p_factures_encours.oid,
|
|
|
date_trunc('month',w_cti_encours_factures_lignes_c.date_fin),
|
|
|
w_cti_encours_factures.no_facture_encours,
|
|
|
w_cti_encours_factures_lignes_c.coefficient,
|
|
|
w_cti_encours_factures_lignes_c.coefficient_mco,
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id,
|
|
|
w_cti_encours_factures_lignes_c.prestation_id,
|
|
|
w_cti_encours_factures_lignes_c.lpp_id,
|
|
|
w_cti_encours_factures_lignes_c.ucd_id,
|
|
|
w_cti_encours_factures_lignes_c.prix_unitaire,
|
|
|
w_cti_encours_factures_lignes_c.lieu_id,
|
|
|
w_cti_encours_factures_lignes_c.rubrique_comptabilisation_id;
|
|
|
|
|
|
-- Justificatif valorisation
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Justificatif (valorisees)';
|
|
|
INSERT INTO activite.p_facture_encours_ligne_valorise_c(
|
|
|
no_facture, facture_id, date_debut, date_fin, lieu_id, nb_rubrique,
|
|
|
nb_prestation, coefficient, coefficient_mco, rubrique_facturation_id,
|
|
|
prestation_id, lpp_id, ucd_id, prix_unitaire, montant_valorise_total, montant_encours, type_ligne_code, mode_calcul_code,
|
|
|
mode_calcul_texte)
|
|
|
SELECT
|
|
|
w_cti_encours_factures.no_facture_encours,
|
|
|
p_factures_encours.oid AS facture_id,
|
|
|
MIN(w_cti_encours_factures_lignes_c.date_debut),
|
|
|
MAX(w_cti_encours_factures_lignes_c.date_fin),
|
|
|
CASE
|
|
|
WHEN t_prestations.code LIKE 'GHS%' THEN w_cti_encours_factures.lieu_sortie_id
|
|
|
WHEN w_cti_encours_factures_lignes_c.type_ligne = 'SAISIE' THEN 0
|
|
|
ELSE w_cti_encours_factures_lignes_c.lieu_id END,
|
|
|
SUM(nb_rubrique),
|
|
|
SUM(nb_prestation),
|
|
|
coefficient,
|
|
|
coefficient_mco,
|
|
|
w_cti_encours_factures_lignes_c.rubrique_facturation_id,
|
|
|
prestation_id,
|
|
|
lpp_id,
|
|
|
ucd_id,
|
|
|
prix_unitaire,
|
|
|
SUM(CASE WHEN w_cti_encours_factures.ignorer IS DISTINCT FROM '1' AND w_cti_encours_factures_lignes_c.ignorer IS DISTINCT FROM '1' THEN montant_encours ELSE 0 END),
|
|
|
SUM(CASE WHEN w_cti_encours_factures.ignorer IS DISTINCT FROM '1' AND w_cti_encours_factures_lignes_c.ignorer IS DISTINCT FROM '1' AND w_cti_encours_factures_lignes_c.date_debut <= w_cti_encours_factures.date_encours THEN montant_encours ELSE 0 END),
|
|
|
w_cti_encours_factures_lignes_c.type_ligne,
|
|
|
CASE
|
|
|
WHEN w_cti_encours_factures.ignorer = '1' AND w_cti_encours_factures_lignes_c.regle_ghs <> '' THEN '00-FORCE'
|
|
|
WHEN w_cti_encours_factures_lignes_c.ignorer = '1' AND w_cti_encours_factures_lignes_c.regle_ghs <> '' THEN '00-FORCE'
|
|
|
ELSE w_cti_encours_factures_lignes_c.regle_ghs END,
|
|
|
CASE
|
|
|
WHEN w_cti_encours_factures.ignorer = '1' THEN 'FACTURE IGNOREE.'
|
|
|
WHEN w_cti_encours_factures_lignes_c.ignorer = '1' THEN 'LIGNE IGNOREE.'
|
|
|
ELSE w_cti_encours_factures_lignes_c.regle_texte END
|
|
|
FROM w_cti_encours_factures_lignes_c
|
|
|
JOIN w_cti_encours_factures ON w_cti_encours_factures_lignes_c.no_facture = w_cti_encours_factures.no_facture
|
|
|
JOIN activite.p_factures_encours ON w_cti_encours_factures.no_facture_encours = p_factures_encours.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
WHERE w_cti_encours_factures_lignes_c.rubrique_facturation_id IS NOT NULL AND
|
|
|
(montant_encours <> 0 OR
|
|
|
w_cti_encours_factures_lignes_c.ignorer = '1'
|
|
|
)
|
|
|
GROUP BY 1,2,5,8,9,10,11,12,13,14,17,18,19
|
|
|
ORDER BY 1;
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Entetes (facturees debut de mois)';
|
|
|
|
|
|
-- Ajout encours
|
|
|
INSERT INTO activite.p_factures_encours(
|
|
|
sejour_id,
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
no_facture_reference,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
code_origine,
|
|
|
code_sorti,
|
|
|
date_encours,
|
|
|
date_calcul,
|
|
|
tiers_payant_1_id,
|
|
|
tiers_payant_2_id,
|
|
|
tiers_payant_22_id,
|
|
|
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,
|
|
|
date_entree,
|
|
|
heure_entree,
|
|
|
date_sortie,
|
|
|
heure_sortie,
|
|
|
type_sejour,
|
|
|
lieu_sortie_id,
|
|
|
date_groupage,
|
|
|
provider_id,
|
|
|
ghm_id,
|
|
|
filiere_soin_principale_id
|
|
|
)
|
|
|
SELECT
|
|
|
p_factures.sejour_id,
|
|
|
p_factures.no_sejour,
|
|
|
p_factures.no_facture || '.EV' || substr(to_char(date_part('year', w_cti_encours_calcul_parametres.date_encours),'FM0000'),3,2) || to_char(date_part('month', w_cti_encours_calcul_parametres.date_encours),'FM00') AS no_facture_encours,
|
|
|
p_factures.no_facture_reference,
|
|
|
p_factures.date_debut,
|
|
|
p_factures.date_fin,
|
|
|
'C' AS code_origine,
|
|
|
CASE
|
|
|
WHEN p_sejours.code_sorti = '1' AND p_sejours.type_sejour <> '3' AND date_trunc('month',p_sejours.date_sortie) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) THEN '1'
|
|
|
WHEN p_sejours.type_sejour = '3' THEN '1'
|
|
|
ELSE '0' END AS code_sorti,
|
|
|
w_cti_encours_calcul_parametres.date_encours AS date_encours,
|
|
|
w_NOW AS date_calcul,
|
|
|
p_factures.tiers_payant_1_id,
|
|
|
p_factures.tiers_payant_2_id,
|
|
|
0 AS tiers_payant_22_id,
|
|
|
p_factures.tiers_payant_0_id,
|
|
|
p_factures.ghs_id,
|
|
|
p_factures.ghs_bebe1_id,
|
|
|
p_factures.ghs_bebe2_id,
|
|
|
p_factures.ghs_bebe3_id,
|
|
|
p_factures.code_cp_demandee,
|
|
|
p_factures.montant_comptabilise_c AS montant_encours_c,
|
|
|
p_factures.montant_comptabilise_0_c AS montant_encours_0_c,
|
|
|
p_factures.montant_comptabilise_1_c AS montant_encours_1_c,
|
|
|
p_factures.montant_comptabilise_2_c AS montant_encours_2_c,
|
|
|
0 AS montant_encours_22_c,
|
|
|
0 AS montant_encours_h,
|
|
|
0 AS montant_encours_0_h,
|
|
|
0 AS montant_encours_1_h,
|
|
|
0 AS montant_encours_2_h,
|
|
|
0 AS montant_encours_22_h,
|
|
|
p_sejours.date_entree,
|
|
|
p_sejours.heure_entree,
|
|
|
p_sejours.date_sortie,
|
|
|
p_sejours.heure_sortie,
|
|
|
p_sejours.type_sejour,
|
|
|
p_sejours.lieu_sortie_id,
|
|
|
p_sejours.date_groupage,
|
|
|
p_sejours.provider_id,
|
|
|
p_sejours.ghm_id,
|
|
|
p_sejours.filiere_soin_principale_id
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN w_cti_encours_calcul_parametres ON 1=1
|
|
|
WHERE date_trunc('month',p_factures.date_fin) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.code_facture >= '1' AND
|
|
|
date_trunc('month',p_factures.date_vente) > date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.no_facture NOT LIKE '%BG';
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Lignes (facturees debut de mois)';
|
|
|
INSERT INTO activite.p_factures_encours_lignes_c(
|
|
|
facture_id,
|
|
|
no_facture,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
nb_rubrique,
|
|
|
coefficient,
|
|
|
coefficient_mco,
|
|
|
rubrique_facturation_id,
|
|
|
prestation_id,
|
|
|
prix_unitaire,
|
|
|
lieu_id,
|
|
|
nb_prestation,
|
|
|
rubrique_comptabilisation_id,
|
|
|
compte_produit_id,
|
|
|
montant_encours,
|
|
|
montant_encours_0,
|
|
|
montant_encours_1,
|
|
|
montant_encours_2,
|
|
|
montant_encours_22
|
|
|
)
|
|
|
SELECT
|
|
|
p_factures_encours.oid AS facture_id,
|
|
|
p_factures_encours.no_facture AS no_facture_encours,
|
|
|
MIN(p_factures_lignes_c.date_debut),
|
|
|
MAX(p_factures_lignes_c.date_fin),
|
|
|
SUM(p_factures_lignes_c.nb_rubrique),
|
|
|
p_factures_lignes_c.coefficient,
|
|
|
p_factures_lignes_c.coefficient_mco,
|
|
|
p_factures_lignes_c.rubrique_facturation_id,
|
|
|
p_factures_lignes_c.prestation_id,
|
|
|
p_factures_lignes_c.prix_unitaire,
|
|
|
p_factures_lignes_c.lieu_id,
|
|
|
SUM(p_factures_lignes_c.nb_prestation),
|
|
|
p_factures_lignes_c.rubrique_comptabilisation_id,
|
|
|
p_factures_lignes_c.compte_produit_id,
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise),
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_0),
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_1),
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_2),
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_22)
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN w_cti_encours_calcul_parametres ON 1=1
|
|
|
JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.p_factures_encours ON (p_factures.no_facture || '.EV' || substr(to_char(date_part('year', w_cti_encours_calcul_parametres.date_encours),'FM0000'),3,2) || to_char(date_part('month', w_cti_encours_calcul_parametres.date_encours),'FM00')) = p_factures_encours.no_facture
|
|
|
WHERE date_trunc('month',p_factures.date_fin) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.code_facture >= '1' AND
|
|
|
date_trunc('month',p_factures.date_vente) > date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.no_facture NOT LIKE '%BG' AND
|
|
|
p_factures_lignes_c.montant_comptabilise <> 0
|
|
|
GROUP BY
|
|
|
p_factures_encours.oid,
|
|
|
p_factures_encours.no_facture,
|
|
|
date_trunc('month',p_factures_lignes_c.date_fin),
|
|
|
p_factures_lignes_c.coefficient,
|
|
|
p_factures_lignes_c.coefficient_mco,
|
|
|
p_factures_lignes_c.rubrique_facturation_id,
|
|
|
p_factures_lignes_c.prestation_id,
|
|
|
p_factures_lignes_c.prix_unitaire,
|
|
|
p_factures_lignes_c.lieu_id,
|
|
|
p_factures_lignes_c.rubrique_comptabilisation_id,
|
|
|
p_factures_lignes_c.compte_produit_id
|
|
|
;
|
|
|
-- Justificatif valorisation
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Justificatif (facturees debut de mois)';
|
|
|
INSERT INTO activite.p_facture_encours_ligne_valorise_c(
|
|
|
no_facture, facture_id, date_debut, date_fin, lieu_id, nb_rubrique,
|
|
|
nb_prestation, coefficient, coefficient_mco, rubrique_facturation_id,
|
|
|
prestation_id, prix_unitaire, montant_valorise_total, montant_encours, type_ligne_code, mode_calcul_code,
|
|
|
mode_calcul_texte)
|
|
|
SELECT
|
|
|
p_factures_encours.no_facture,
|
|
|
p_factures_encours.oid AS facture_id,
|
|
|
MIN(p_factures_lignes_c.date_debut),
|
|
|
MAX(p_factures_lignes_c.date_fin),
|
|
|
CASE WHEN t_prestations.code LIKE 'GHS%' THEN p_sejours.lieu_sortie_id ELSE p_factures_lignes_c.lieu_id END,
|
|
|
SUM(p_factures_lignes_c.nb_rubrique),
|
|
|
SUM(p_factures_lignes_c.nb_prestation),
|
|
|
p_factures_lignes_c.coefficient,
|
|
|
p_factures_lignes_c.coefficient_mco,
|
|
|
p_factures_lignes_c.rubrique_facturation_id,
|
|
|
p_factures_lignes_c.prestation_id,
|
|
|
p_factures_lignes_c.prix_unitaire,
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise),
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise),
|
|
|
CASE
|
|
|
WHEN t_prestations.code = 'GHS' AND p_sejours.ghs_id > 0 THEN 'GHS'
|
|
|
WHEN t_prestations.code = 'GHS' AND p_sejours.ghs_id <= 0 THEN 'GHSNG'
|
|
|
WHEN t_prestations.code = 'EXH' AND p_sejours.ghs_id > 0 THEN 'EXH'
|
|
|
WHEN t_prestations.code = 'EXH' AND p_sejours.ghs_id <= 0 THEN 'EXHNG'
|
|
|
WHEN t_prestations.code = 'PJ' OR type_valorisation_non_facture = 'PJ' THEN 'PJ'
|
|
|
WHEN t_prestations.code = 'GMT' OR type_valorisation_non_facture = 'GMT' THEN 'GMT'
|
|
|
WHEN t_prestations.code = 'FJ' THEN 'FJ'
|
|
|
WHEN t_prestations.code = 'PMS' THEN 'PMS'
|
|
|
WHEN t_prestations.code = 'ENT' OR type_valorisation_non_facture = 'ENT' THEN 'ENT'
|
|
|
WHEN t_prestations.code IN ('SRC','STF','REA') THEN 'SSS'
|
|
|
WHEN t_prestations.code IN ('NN1','NN2','NN3') THEN 'NNX'
|
|
|
WHEN t_prestations.code IN ('FJA') THEN 'FJA'
|
|
|
WHEN t_prestations.code IN ('CPC') OR type_valorisation_non_facture = 'CP' THEN 'CPC'
|
|
|
WHEN t_prestations.code LIKE 'ATU' THEN 'ATU'
|
|
|
WHEN t_prestations.code LIKE 'FPU' THEN 'ATU'
|
|
|
WHEN t_prestations.code LIKE 'SE%' THEN 'SEH'
|
|
|
ELSE '' END AS type_ligne,
|
|
|
CASE
|
|
|
WHEN p_factures_encours.no_facture LIKE '%.EV%' AND p_factures_encours.code_sorti = '1' THEN 'FROMJVTSOR'
|
|
|
WHEN p_factures_encours.no_facture LIKE '%.EV%' AND p_factures_encours.code_sorti <> '1' THEN 'FROMJVTPRE'
|
|
|
ELSE 'NOJUSTIF'::text END AS mode_calcul_code,
|
|
|
CASE
|
|
|
WHEN p_factures_encours.no_facture LIKE '%.EV%' AND p_factures_encours.code_sorti = '1' THEN 'Encours depuis facturation (sorti)'
|
|
|
WHEN p_factures_encours.no_facture LIKE '%.EV%' AND p_factures_encours.code_sorti <> '1' THEN 'Encours depuis facturation (présent)'
|
|
|
ELSE 'Sans justificatif de valorisation'::text END AS mode_calcul_texte
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN w_cti_encours_calcul_parametres ON 1=1
|
|
|
JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
JOIN activite.p_factures_encours ON (p_factures.no_facture || '.EV' || substr(to_char(date_part('year', w_cti_encours_calcul_parametres.date_encours),'FM0000'),3,2) || to_char(date_part('month', w_cti_encours_calcul_parametres.date_encours),'FM00')) = p_factures_encours.no_facture
|
|
|
WHERE date_trunc('month',p_factures.date_fin) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.code_facture >= '1' AND
|
|
|
date_trunc('month',p_factures.date_vente) > date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.no_facture NOT LIKE '%BG' AND
|
|
|
p_factures_lignes_c.montant_comptabilise <> 0
|
|
|
GROUP BY 1,2,5,8,9,10,11,12,15,16,17
|
|
|
;
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Entetes (facturees debut de mois a cheval)';
|
|
|
|
|
|
-- Ajout encours
|
|
|
INSERT INTO activite.p_factures_encours(
|
|
|
sejour_id,
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
no_facture_reference,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
code_origine,
|
|
|
code_sorti,
|
|
|
date_encours,
|
|
|
date_calcul,
|
|
|
tiers_payant_1_id,
|
|
|
tiers_payant_2_id,
|
|
|
tiers_payant_22_id,
|
|
|
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,
|
|
|
date_entree,
|
|
|
heure_entree,
|
|
|
date_sortie,
|
|
|
heure_sortie,
|
|
|
type_sejour,
|
|
|
lieu_sortie_id,
|
|
|
date_groupage,
|
|
|
provider_id,
|
|
|
ghm_id,
|
|
|
filiere_soin_principale_id
|
|
|
)
|
|
|
SELECT
|
|
|
p_factures.sejour_id,
|
|
|
p_factures.no_sejour,
|
|
|
p_factures.no_facture || '.EV' || substr(to_char(date_part('year', w_cti_encours_calcul_parametres.date_encours),'FM0000'),3,2) || to_char(date_part('month', w_cti_encours_calcul_parametres.date_encours),'FM00') AS no_facture_encours,
|
|
|
p_factures.no_facture_reference,
|
|
|
p_factures.date_debut,
|
|
|
p_factures.date_fin,
|
|
|
'C' AS code_origine,
|
|
|
CASE
|
|
|
WHEN p_sejours.code_sorti = '1' AND p_sejours.type_sejour <> '3' AND date_trunc('month',p_sejours.date_sortie) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) THEN '1'
|
|
|
WHEN p_sejours.type_sejour = '3' THEN '1'
|
|
|
ELSE '0' END AS code_sorti,
|
|
|
w_cti_encours_calcul_parametres.date_encours AS date_encours,
|
|
|
w_NOW AS date_calcul,
|
|
|
p_factures.tiers_payant_1_id,
|
|
|
p_factures.tiers_payant_2_id,
|
|
|
0 AS tiers_payant_22_id,
|
|
|
p_factures.tiers_payant_0_id,
|
|
|
p_factures.ghs_id,
|
|
|
p_factures.ghs_bebe1_id,
|
|
|
p_factures.ghs_bebe2_id,
|
|
|
p_factures.ghs_bebe3_id,
|
|
|
p_factures.code_cp_demandee,
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise) AS montant_encours_c,
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_0) AS montant_encours_0_c,
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_1) AS montant_encours_1_c,
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_2) AS montant_encours_2_c,
|
|
|
0 AS montant_encours_22_c,
|
|
|
0 AS montant_encours_h,
|
|
|
0 AS montant_encours_0_h,
|
|
|
0 AS montant_encours_1_h,
|
|
|
0 AS montant_encours_2_h,
|
|
|
0 AS montant_encours_22_h,
|
|
|
p_sejours.date_entree,
|
|
|
p_sejours.heure_entree,
|
|
|
p_sejours.date_sortie,
|
|
|
p_sejours.heure_sortie,
|
|
|
p_sejours.type_sejour,
|
|
|
p_sejours.lieu_sortie_id,
|
|
|
p_sejours.date_groupage,
|
|
|
p_sejours.provider_id,
|
|
|
p_sejours.ghm_id,
|
|
|
p_sejours.filiere_soin_principale_id
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN w_cti_encours_calcul_parametres ON 1=1
|
|
|
JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
WHERE date_trunc('month',p_factures.date_debut) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
date_trunc('month',p_factures.date_fin) > date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
date_trunc('month',p_factures_lignes_c.date_debut) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.code_facture >= '1' AND
|
|
|
date_trunc('month',p_factures.date_vente) > date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.no_facture NOT LIKE '%BG' AND
|
|
|
p_factures_lignes_c.montant_comptabilise <> 0
|
|
|
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,30,31,32,33,34,35,36,37,38,39
|
|
|
;
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Lignes (facturees debut de mois a cheval)';
|
|
|
INSERT INTO activite.p_factures_encours_lignes_c(
|
|
|
facture_id,
|
|
|
no_facture,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
nb_rubrique,
|
|
|
coefficient,
|
|
|
coefficient_mco,
|
|
|
rubrique_facturation_id,
|
|
|
prestation_id,
|
|
|
prix_unitaire,
|
|
|
lieu_id,
|
|
|
nb_prestation,
|
|
|
rubrique_comptabilisation_id,
|
|
|
compte_produit_id,
|
|
|
montant_encours,
|
|
|
montant_encours_0,
|
|
|
montant_encours_1,
|
|
|
montant_encours_2,
|
|
|
montant_encours_22
|
|
|
)
|
|
|
SELECT
|
|
|
p_factures_encours.oid AS facture_id,
|
|
|
p_factures_encours.no_facture AS no_facture_encours,
|
|
|
MIN(p_factures_lignes_c.date_debut),
|
|
|
MAX(p_factures_lignes_c.date_fin),
|
|
|
SUM(p_factures_lignes_c.nb_rubrique),
|
|
|
p_factures_lignes_c.coefficient,
|
|
|
p_factures_lignes_c.coefficient_mco,
|
|
|
p_factures_lignes_c.rubrique_facturation_id,
|
|
|
p_factures_lignes_c.prestation_id,
|
|
|
p_factures_lignes_c.prix_unitaire,
|
|
|
p_factures_lignes_c.lieu_id,
|
|
|
SUM(p_factures_lignes_c.nb_prestation),
|
|
|
p_factures_lignes_c.rubrique_comptabilisation_id,
|
|
|
p_factures_lignes_c.compte_produit_id,
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise),
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_0),
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_1),
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_2),
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise_22)
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN w_cti_encours_calcul_parametres ON 1=1
|
|
|
JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.p_factures_encours ON (p_factures.no_facture || '.EV' || substr(to_char(date_part('year', w_cti_encours_calcul_parametres.date_encours),'FM0000'),3,2) || to_char(date_part('month', w_cti_encours_calcul_parametres.date_encours),'FM00')) = p_factures_encours.no_facture
|
|
|
WHERE date_trunc('month',p_factures.date_debut) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
date_trunc('month',p_factures.date_fin) > date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
date_trunc('month',p_factures_lignes_c.date_debut) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.code_facture >= '1' AND
|
|
|
date_trunc('month',p_factures.date_vente) > date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.no_facture NOT LIKE '%BG' AND
|
|
|
p_factures_lignes_c.montant_comptabilise <> 0
|
|
|
GROUP BY
|
|
|
p_factures_encours.oid,
|
|
|
p_factures_encours.no_facture,
|
|
|
date_trunc('month',p_factures_lignes_c.date_fin),
|
|
|
p_factures_lignes_c.coefficient,
|
|
|
p_factures_lignes_c.coefficient_mco,
|
|
|
p_factures_lignes_c.rubrique_facturation_id,
|
|
|
p_factures_lignes_c.prestation_id,
|
|
|
p_factures_lignes_c.prix_unitaire,
|
|
|
p_factures_lignes_c.lieu_id,
|
|
|
p_factures_lignes_c.rubrique_comptabilisation_id,
|
|
|
p_factures_lignes_c.compte_produit_id
|
|
|
;
|
|
|
|
|
|
-- Justificatif valorisation
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Justificatif (facturees debut de mois a cheval)';
|
|
|
INSERT INTO activite.p_facture_encours_ligne_valorise_c(
|
|
|
no_facture, facture_id, date_debut, date_fin, lieu_id, nb_rubrique,
|
|
|
nb_prestation, coefficient, coefficient_mco, rubrique_facturation_id,
|
|
|
prestation_id, prix_unitaire, montant_valorise_total, montant_encours, type_ligne_code, mode_calcul_code,
|
|
|
mode_calcul_texte)
|
|
|
SELECT
|
|
|
p_factures_encours.no_facture,
|
|
|
p_factures_encours.oid AS facture_id,
|
|
|
MIN(p_factures_lignes_c.date_debut),
|
|
|
MAX(p_factures_lignes_c.date_fin),
|
|
|
CASE WHEN t_prestations.code LIKE 'GHS%' THEN p_sejours.lieu_sortie_id ELSE p_factures_lignes_c.lieu_id END,
|
|
|
SUM(p_factures_lignes_c.nb_rubrique),
|
|
|
SUM(p_factures_lignes_c.nb_prestation),
|
|
|
p_factures_lignes_c.coefficient,
|
|
|
p_factures_lignes_c.coefficient_mco,
|
|
|
p_factures_lignes_c.rubrique_facturation_id,
|
|
|
p_factures_lignes_c.prestation_id,
|
|
|
p_factures_lignes_c.prix_unitaire,
|
|
|
SUM(p_factures_lignes_c.montant_comptabilise),
|
|
|
SUM(CASE WHEN date_trunc('month',p_factures_lignes_c.date_debut) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) THEN p_factures_lignes_c.montant_comptabilise ELSE 0 END),
|
|
|
CASE
|
|
|
WHEN t_prestations.code = 'GHS' AND p_sejours.ghs_id > 0 THEN 'GHS'
|
|
|
WHEN t_prestations.code = 'GHS' AND p_sejours.ghs_id <= 0 THEN 'GHSNG'
|
|
|
WHEN t_prestations.code = 'EXH' AND p_sejours.ghs_id > 0 THEN 'EXH'
|
|
|
WHEN t_prestations.code = 'EXH' AND p_sejours.ghs_id <= 0 THEN 'EXHNG'
|
|
|
WHEN t_prestations.code = 'PJ' OR type_valorisation_non_facture = 'PJ' THEN 'PJ'
|
|
|
WHEN t_prestations.code = 'GMT' OR type_valorisation_non_facture = 'GMT' THEN 'GMT'
|
|
|
WHEN t_prestations.code = 'FJ' THEN 'FJ'
|
|
|
WHEN t_prestations.code = 'PMS' THEN 'PMS'
|
|
|
WHEN t_prestations.code = 'ENT' OR type_valorisation_non_facture = 'ENT' THEN 'ENT'
|
|
|
WHEN t_prestations.code IN ('SRC','STF','REA') THEN 'SSS'
|
|
|
WHEN t_prestations.code IN ('NN1','NN2','NN3') THEN 'NNX'
|
|
|
WHEN t_prestations.code IN ('FJA') THEN 'FJA'
|
|
|
WHEN t_prestations.code IN ('CPC') OR type_valorisation_non_facture = 'CP' THEN 'CPC'
|
|
|
WHEN t_prestations.code LIKE 'ATU' THEN 'ATU'
|
|
|
WHEN t_prestations.code LIKE 'FPU' THEN 'ATU'
|
|
|
WHEN t_prestations.code LIKE 'SE%' THEN 'SEH'
|
|
|
ELSE '' END AS type_ligne,
|
|
|
CASE
|
|
|
WHEN p_factures_encours.no_facture LIKE '%.EV%' AND p_factures_encours.code_sorti = '1' THEN 'FROMJVTSOR'
|
|
|
WHEN p_factures_encours.no_facture LIKE '%.EV%' AND p_factures_encours.code_sorti <> '1' THEN 'FROMJVTPRE'
|
|
|
ELSE 'NOJUSTIF'::text END AS mode_calcul_code,
|
|
|
CASE
|
|
|
WHEN p_factures_encours.no_facture LIKE '%.EV%' AND p_factures_encours.code_sorti = '1' THEN 'Encours depuis facturation (sorti)'
|
|
|
WHEN p_factures_encours.no_facture LIKE '%.EV%' AND p_factures_encours.code_sorti <> '1' THEN 'Encours depuis facturation (présent)'
|
|
|
ELSE 'Sans justificatif de valorisation'::text END AS mode_calcul_texte
|
|
|
FROM activite.p_factures
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN w_cti_encours_calcul_parametres ON 1=1
|
|
|
JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
|
|
|
JOIN activite.p_factures_encours ON (p_factures.no_facture || '.EV' || substr(to_char(date_part('year', w_cti_encours_calcul_parametres.date_encours),'FM0000'),3,2) || to_char(date_part('month', w_cti_encours_calcul_parametres.date_encours),'FM00')) = p_factures_encours.no_facture
|
|
|
WHERE date_trunc('month',p_factures.date_debut) <= date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
date_trunc('month',p_factures.date_fin) > date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.code_facture >= '1' AND
|
|
|
date_trunc('month',p_factures.date_vente) > date_trunc('month',w_cti_encours_calcul_parametres.date_encours) AND
|
|
|
p_factures.no_facture NOT LIKE '%BG' AND
|
|
|
p_factures_lignes_c.montant_comptabilise <> 0
|
|
|
GROUP BY 1,2,5,8,9,10,11,12,15,16,17
|
|
|
;
|
|
|
END IF;
|
|
|
|
|
|
END IF;
|
|
|
END LOOP;
|
|
|
-- Moulinettes sur encours déjà calculés
|
|
|
IF EXISTS (SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSACTIVE' AND valeur = '1') THEN
|
|
|
-- Réactualisation oid séjour
|
|
|
UPDATE activite.p_factures_encours
|
|
|
SET no_sejour = p_factures.no_sejour
|
|
|
FROM activite.p_factures
|
|
|
WHERE code_origine = 'C' AND
|
|
|
p_factures_encours.no_facture_reference = p_factures.no_facture AND
|
|
|
(p_factures_encours.no_sejour = '' OR p_factures_encours.no_sejour IS NULL);
|
|
|
UPDATE activite.p_factures_encours
|
|
|
SET no_sejour = p_sejours.no_sejour
|
|
|
FROM activite.p_sejours
|
|
|
WHERE code_origine = 'C' AND
|
|
|
split_part(p_factures_encours.no_facture,'.',1) = 'E' || p_sejours.no_sejour AND
|
|
|
(p_factures_encours.no_sejour = '' OR p_factures_encours.no_sejour IS NULL);
|
|
|
UPDATE activite.p_factures_encours
|
|
|
SET no_sejour = p_sejours.no_sejour
|
|
|
FROM activite.p_sejours
|
|
|
WHERE code_origine = 'C' AND
|
|
|
split_part(p_factures_encours.no_facture,'.',1) = p_sejours.no_sejour AND
|
|
|
(p_factures_encours.no_sejour = '' OR p_factures_encours.no_sejour IS NULL);
|
|
|
UPDATE activite.p_factures_encours
|
|
|
SET sejour_id = p_sejours.oid
|
|
|
FROM activite.p_sejours
|
|
|
WHERE p_factures_encours.no_sejour = p_sejours.no_sejour AND
|
|
|
sejour_id IS DISTINCT FROM p_sejours.oid;
|
|
|
|
|
|
UPDATE activite.p_factures_encours
|
|
|
SET no_sejour = split_part(p_factures_encours.no_facture,'.',1), sejour_id = 0
|
|
|
WHERE p_factures_encours.no_sejour IS NULL OR p_factures_encours.no_sejour = '';
|
|
|
|
|
|
UPDATE activite.p_factures_encours
|
|
|
SET sejour_id = 0
|
|
|
WHERE no_sejour NOT IN (SELECT no_sejour FROM activite.p_sejours) AND
|
|
|
sejour_id <> 0;
|
|
|
|
|
|
|
|
|
UPDATE activite.p_factures_encours
|
|
|
SET lieu_sortie_id = p_sejours.lieu_sortie_id
|
|
|
FROM activite.p_sejours
|
|
|
WHERE p_sejours.no_sejour = p_factures_encours.no_sejour AND
|
|
|
p_sejours.lieu_sortie_id <> p_factures_encours.lieu_sortie_id
|
|
|
;
|
|
|
-- Ajout factures du mois comptabilisées en début de mois suivant (avant date cloture encours)
|
|
|
|
|
|
RAISE NOTICE '%. %' , w_date_encours_YYMM, 'Ajout factures comptabilisee debut du mois suivant';
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_encours_vente') THEN
|
|
|
CREATE TEMP TABLE w_cti_encours_vente
|
|
|
(
|
|
|
no_sejour text,
|
|
|
date_encours date,
|
|
|
no_facture text,
|
|
|
no_facture_encours text
|
|
|
);
|
|
|
END IF;
|
|
|
TRUNCATE w_cti_encours_vente;
|
|
|
INSERT INTO w_cti_encours_vente
|
|
|
SELECT p_factures.no_sejour,
|
|
|
date(date_trunc('month', p_factures.date_fin) + interval '1 month' - interval '1 day') AS date_encours,
|
|
|
(MAX(ARRAY[p_factures.date_vente::text, p_factures.no_facture]))[2] AS no_facture,
|
|
|
(MAX(ARRAY[p_factures.date_vente::text, p_factures.no_facture]))[2] || '.EV' || to_char(p_factures.date_fin,'YYMM') AS no_facture_encours
|
|
|
FROM activite.p_factures
|
|
|
JOIN (SELECT
|
|
|
COALESCE(
|
|
|
MAX(CASE WHEN no_facture LIKE '%.EV%' THEN date(date_encours+interval '1 day') ELSE NULL END),
|
|
|
MIN(date(date_trunc('month',date_encours)))
|
|
|
) AS date_encours_debut,
|
|
|
MAX(date_encours) AS date_encours_fin
|
|
|
FROM activite.p_factures_encours
|
|
|
WHERE date_encours >= '20140101' AND
|
|
|
code_origine = 'C') w_periode_encours ON 1=1
|
|
|
JOIN activite.t_divers ON t_divers.code = 'DATEENCOURS'
|
|
|
LEFT JOIN activite.p_factures p_factures_vente ON
|
|
|
p_factures_vente.no_sejour = p_factures.no_sejour AND
|
|
|
p_factures_vente.date_vente BETWEEN date_trunc('month', p_factures.date_fin) AND date_trunc('month', p_factures.date_fin) + interval '1 month' - interval '1 day'
|
|
|
LEFT JOIN activite.p_factures_encours ON
|
|
|
p_factures_encours.no_sejour = p_factures.no_sejour AND
|
|
|
code_origine = 'C' AND
|
|
|
p_factures_encours.date_encours BETWEEN date_trunc('month', p_factures.date_fin) AND date_trunc('month', p_factures.date_fin) + interval '1 month' - interval '1 day'
|
|
|
WHERE p_factures.date_fin BETWEEN date_encours_debut AND date_encours_fin AND
|
|
|
p_factures.date_vente BETWEEN date_trunc('month', p_factures.date_fin) + interval '1 month' - interval '1 day' AND date_trunc('month', p_factures.date_fin) + interval '1 month' - interval '1 day' + (t_divers.valeur||' day')::INTERVAL AND
|
|
|
p_factures.montant_facture_c > 0 AND
|
|
|
p_factures.no_facture NOT LIKE '%BG' AND
|
|
|
p_factures.code_vente = '1' AND
|
|
|
p_factures_vente.no_facture IS NULL AND
|
|
|
p_factures_encours.no_facture IS NULL
|
|
|
GROUP BY 1,2,to_char(p_factures.date_fin,'YYMM')
|
|
|
ORDER BY 1,2
|
|
|
;
|
|
|
INSERT INTO activite.p_factures_encours(
|
|
|
sejour_id,
|
|
|
no_sejour,
|
|
|
no_facture,
|
|
|
no_facture_reference,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
code_origine,
|
|
|
code_sorti,
|
|
|
date_encours,
|
|
|
tiers_payant_1_id,
|
|
|
tiers_payant_2_id,
|
|
|
tiers_payant_22_id,
|
|
|
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,
|
|
|
date_entree,
|
|
|
heure_entree,
|
|
|
date_sortie,
|
|
|
heure_sortie,
|
|
|
type_sejour,
|
|
|
lieu_sortie_id,
|
|
|
date_groupage,
|
|
|
provider_id,
|
|
|
ghm_id,
|
|
|
filiere_soin_principale_id
|
|
|
)
|
|
|
SELECT
|
|
|
p_sejours.oid,
|
|
|
p_sejours.no_sejour,
|
|
|
w_cti_encours_vente.no_facture_encours,
|
|
|
p_factures.no_facture_reference,
|
|
|
p_factures.date_debut,
|
|
|
p_factures.date_fin,
|
|
|
'C' AS code_origine,
|
|
|
'1' AS code_sorti,
|
|
|
w_cti_encours_vente.date_encours AS date_encours,
|
|
|
p_factures.tiers_payant_1_id,
|
|
|
p_factures.tiers_payant_2_id,
|
|
|
0 AS tiers_payant_22_id,
|
|
|
p_factures.tiers_payant_0_id,
|
|
|
p_factures.ghs_id,
|
|
|
p_factures.ghs_bebe1_id,
|
|
|
p_factures.ghs_bebe2_id,
|
|
|
p_factures.ghs_bebe3_id,
|
|
|
p_factures.code_cp_demandee,
|
|
|
p_factures.montant_facture_c,
|
|
|
p_factures.montant_facture_0_c,
|
|
|
p_factures.montant_facture_1_c,
|
|
|
p_factures.montant_facture_2_c,
|
|
|
0 AS montant_encours_22_c,
|
|
|
0 AS montant_encours_h,
|
|
|
0 AS montant_encours_0_h,
|
|
|
0 AS montant_encours_1_h,
|
|
|
0 AS montant_encours_2_h,
|
|
|
0 AS montant_encours_22_h,
|
|
|
p_sejours.date_entree,
|
|
|
p_sejours.heure_entree,
|
|
|
p_sejours.date_sortie,
|
|
|
p_sejours.heure_sortie,
|
|
|
p_sejours.type_sejour,
|
|
|
p_sejours.lieu_sortie_id,
|
|
|
p_sejours.date_groupage,
|
|
|
p_sejours.provider_id,
|
|
|
p_sejours.ghm_id,
|
|
|
p_sejours.filiere_soin_principale_id
|
|
|
FROM w_cti_encours_vente
|
|
|
JOIN activite.p_factures ON w_cti_encours_vente.no_facture = p_factures.no_facture
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
;
|
|
|
INSERT INTO activite.p_factures_encours_lignes_c(
|
|
|
facture_id,
|
|
|
no_facture,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
nb_rubrique,
|
|
|
coefficient,
|
|
|
coefficient_mco,
|
|
|
rubrique_facturation_id,
|
|
|
prestation_id,
|
|
|
prix_unitaire,
|
|
|
lieu_id,
|
|
|
nb_prestation,
|
|
|
rubrique_comptabilisation_id,
|
|
|
compte_produit_id,
|
|
|
montant_encours,
|
|
|
montant_encours_0,
|
|
|
montant_encours_1,
|
|
|
montant_encours_2,
|
|
|
montant_encours_22
|
|
|
)
|
|
|
SELECT
|
|
|
p_factures_encours.oid AS facture_id,
|
|
|
w_cti_encours_vente.no_facture_encours,
|
|
|
MIN(p_factures_lignes_c.date_debut),
|
|
|
MAX(p_factures_lignes_c.date_fin),
|
|
|
SUM(p_factures_lignes_c.nb_rubrique),
|
|
|
p_factures_lignes_c.coefficient,
|
|
|
p_factures_lignes_c.coefficient_mco,
|
|
|
p_factures_lignes_c.rubrique_facturation_id,
|
|
|
p_factures_lignes_c.prestation_id,
|
|
|
p_factures_lignes_c.prix_unitaire,
|
|
|
p_factures_lignes_c.lieu_id,
|
|
|
SUM(p_factures_lignes_c.nb_prestation),
|
|
|
p_factures_lignes_c.rubrique_comptabilisation_id,
|
|
|
p_factures_lignes_c.compte_produit_id,
|
|
|
SUM(p_factures_lignes_c.montant_facture),
|
|
|
SUM(p_factures_lignes_c.montant_facture_0),
|
|
|
SUM(p_factures_lignes_c.montant_facture_1),
|
|
|
SUM(p_factures_lignes_c.montant_facture_2),
|
|
|
SUM(p_factures_lignes_c.montant_facture_22)
|
|
|
FROM w_cti_encours_vente
|
|
|
JOIN activite.p_factures ON w_cti_encours_vente.no_facture = p_factures.no_facture
|
|
|
JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
|
|
|
JOIN activite.p_factures_encours ON w_cti_encours_vente.no_facture_encours = p_factures_encours.no_facture
|
|
|
WHERE p_factures_lignes_c.montant_facture <> 0 AND
|
|
|
p_factures_lignes_c.date_debut <= w_cti_encours_vente.date_encours AND
|
|
|
p_factures_lignes_c.rubrique_facturation_id IS NOT NULL
|
|
|
GROUP BY
|
|
|
p_factures_encours.oid,
|
|
|
w_cti_encours_vente.no_facture_encours,
|
|
|
p_factures_lignes_c.coefficient,
|
|
|
p_factures_lignes_c.coefficient_mco,
|
|
|
p_factures_lignes_c.rubrique_facturation_id,
|
|
|
p_factures_lignes_c.prestation_id,
|
|
|
p_factures_lignes_c.prix_unitaire,
|
|
|
p_factures_lignes_c.lieu_id,
|
|
|
p_factures_lignes_c.rubrique_comptabilisation_id,
|
|
|
p_factures_lignes_c.compte_produit_id
|
|
|
;
|
|
|
END IF;
|
|
|
|
|
|
-- désactivation index
|
|
|
RAISE NOTICE '%' , 'Finalisation. Reactivation index';
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_2');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_4');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_5');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_6');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_7');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_8');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_9');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_10');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_11');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_lignes_c_2');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_lignes_c_3');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_lignes_c_4');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_lignes_c_5');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_lignes_c_6');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_lignes_c_7');
|
|
|
PERFORM base.cti_enable_index('activite', 'i_factures_encours_lignes_c_8');
|
|
|
|
|
|
-- Reconstitution LPP et UCD sur encours
|
|
|
IF EXISTS (SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSACTIVE' AND valeur = '1') THEN
|
|
|
UPDATE activite.p_factures_encours_lignes_c
|
|
|
SET lpp_id = subview.lpp_id, ucd_id = subview.ucd_id
|
|
|
FROM activite.p_factures_encours,
|
|
|
(
|
|
|
SELECT p_factures.no_sejour,
|
|
|
prestation_id,
|
|
|
ABS(montant_facture + montant_encours) AS montant,
|
|
|
COUNT(DISTINCT lpp_id::text||ucd_id::text),
|
|
|
MAX(lpp_id) AS lpp_id,
|
|
|
MAX(ucd_id) AS ucd_id
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture
|
|
|
WHERE (montant_facture <> 0 OR montant_encours <> 0) AND
|
|
|
(ucd_id <> 0 OR lpp_id <> 0)
|
|
|
GROUP BY 1,2,3
|
|
|
) subview
|
|
|
WHERE p_factures_encours.no_facture = p_factures_encours_lignes_c.no_facture AND
|
|
|
p_factures_encours.no_sejour = subview.no_sejour AND
|
|
|
p_factures_encours_lignes_c.prestation_id = subview.prestation_id AND
|
|
|
p_factures_encours_lignes_c.montant_encours = subview.montant AND
|
|
|
COALESCE(p_factures_encours_lignes_c.lpp_id,0) = 0 AND
|
|
|
COALESCE(p_factures_encours_lignes_c.ucd_id,0) = 0
|
|
|
;
|
|
|
|
|
|
UPDATE activite.p_facture_encours_ligne_valorise_c
|
|
|
SET lpp_id = subview.lpp_id, ucd_id = subview.ucd_id
|
|
|
FROM (
|
|
|
SELECT p_factures_encours_lignes_c.no_facture,
|
|
|
prestation_id,
|
|
|
ABS(montant_encours) AS montant,
|
|
|
COUNT(DISTINCT lpp_id::text||ucd_id::text),
|
|
|
MAX(lpp_id) AS lpp_id,
|
|
|
MAX(ucd_id) AS ucd_id
|
|
|
FROM activite.p_factures_encours_lignes_c
|
|
|
WHERE montant_encours <> 0 AND
|
|
|
(ucd_id <> 0 OR lpp_id <> 0)
|
|
|
GROUP BY 1,2,3
|
|
|
) subview
|
|
|
WHERE p_facture_encours_ligne_valorise_c.no_facture = subview.no_facture AND
|
|
|
p_facture_encours_ligne_valorise_c.prestation_id = subview.prestation_id AND
|
|
|
p_facture_encours_ligne_valorise_c.montant_encours = subview.montant AND
|
|
|
COALESCE(p_facture_encours_ligne_valorise_c.lpp_id,0) = 0 AND
|
|
|
COALESCE(p_facture_encours_ligne_valorise_c.ucd_id,0) = 0
|
|
|
;
|
|
|
END IF;
|
|
|
|
|
|
-- Récupérer le bon compte sur les ventes (WEB100T) car quelque fois, le compte des ventes est provisoire (02020000) au moment des en cours
|
|
|
IF EXISTS (SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSACTIVE' AND valeur = '1') THEN
|
|
|
IF (SELECT count(*) FROM activite.p_factures_encours_lignes_c JOIN activite.t_compte ON compte_produit_id = t_compte.oid WHERE t_compte.code LIKE '02%') > 0 THEN
|
|
|
UPDATE activite.p_factures_encours_lignes_c
|
|
|
SET compte_produit_id = subview.compte_produit_id
|
|
|
FROM
|
|
|
(
|
|
|
SELECT p_factures_encours_lignes_c.no_facture, p_factures_encours_lignes_c.rubrique_facturation_id, p_factures_encours_lignes_c.CTID AS toCTID, MAX(subview.compte_produit_id) AS compte_produit_id
|
|
|
FROM activite.p_factures_encours_lignes_c
|
|
|
JOIN activite.t_compte ON compte_produit_id = t_compte.oid
|
|
|
JOIN (SELECT no_facture, rubrique_facturation_id, MAX(compte_produit_id) AS compte_produit_id FROM activite.p_factures_lignes_c GROUP BY 1,2) subview ON
|
|
|
subview.no_facture = split_part(p_factures_encours_lignes_c.no_facture,'.EV',1) AND
|
|
|
subview.rubrique_facturation_id = p_factures_encours_lignes_c.rubrique_facturation_id
|
|
|
WHERE p_factures_encours_lignes_c.no_facture LIKE '%EV%' AND
|
|
|
t_compte.code LIKE '02%'
|
|
|
GROUP BY 1,2,3
|
|
|
) subview
|
|
|
WHERE subview.no_facture = p_factures_encours_lignes_c.no_facture AND
|
|
|
subview.rubrique_facturation_id = p_factures_encours_lignes_c.rubrique_facturation_id AND
|
|
|
p_factures_encours_lignes_c.CTID = toCTID
|
|
|
;
|
|
|
END IF;
|
|
|
END IF;
|
|
|
-- Initialiser les filieres de soin anterieurs a partir de la valeur courante
|
|
|
IF EXISTS (SELECT valeur FROM activite.t_divers WHERE code = 'ENCOURSACTIVE' AND valeur = '1') THEN
|
|
|
UPDATE activite.p_factures_encours
|
|
|
SET filiere_soin_principale_id = p_sejours.filiere_soin_principale_id
|
|
|
FROM activite.p_sejours
|
|
|
WHERE p_factures_encours.no_sejour = p_sejours.no_sejour AND
|
|
|
p_factures_encours.filiere_soin_principale_id = 0 AND
|
|
|
p_sejours.filiere_soin_principale_id <> 0
|
|
|
;
|
|
|
END IF;
|
|
|
RETURN 'OK' ;
|
|
|
END;
|