''
AND h_person.er_qua_ss NOT IN(
SELECT
code FROM base.t_specialites_medecin)
GROUP BY 1, 3;
INSERT INTO activite[PX].t_specialites_medecin(oid, code, code_original, texte, texte_court)
SELECT 0, '', '0', 'Non saisie', 'Non saisie'
WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_specialites_medecin);
INSERT INTO activite[PX].t_specialites_medecin (code, code_original, texte, texte_court)
SELECT
h_person.er_qua_ss,
h_person.er_qua_ss,
h_person.er_qualif,
h_person.er_qualif
FROM prod_edlxplore.h_person
WHERE 1=1
AND h_person.er_qua_ss <> ''
AND h_person.er_qua_ss NOT IN(
SELECT
code FROM activite[PX].t_specialites_medecin)
GROUP BY 1, 3;
INSERT INTO base.t_medecins(oid, nom, prenom, numero_ordre, specialite_id )
SELECT 0, 'Non renseigne', '', '', 0 WHERE 0 NOT IN (SELECT oid FROM base.t_medecins);
INSERT INTO activite[PX].t_medecins_administratifs(oid, code_original, code, nom, prenom, specialite_id, medecin_id)
SELECT 0, '0', '****', 'Non renseigne', '', 0, 0 WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_medecins_administratifs);
DROP TABLE IF EXISTS w_medecins_source;
CREATE TEMP TABLE w_medecins_source AS
SELECT
*,
er_rpps AS rpps,
er_qua_ss AS specialite
FROM
prod_edlxplore.h_person
WHERE 1=1
AND er_codper IN (
SELECT
em_codtit FROM prod_edlxplore.H_DEMAND
);
DROP TABLE IF EXISTS w_medecins;
CREATE TEMP TABLE w_medecins AS
SELECT
er_codper::text,
er_codper::text AS mede_code,
base.cti_soundex_nom(w_medecins_source.er_nomage) AS nom_soundex,
base.cti_soundex_nom(COALESCE(w_medecins_source.er_pnoage, '')) AS prenom_soundex,
w_medecins_source.er_nomage AS nom,
COALESCE(w_medecins_source.er_pnoage, '') AS prenom,
COALESCE(w_medecins_source.rpps, '') AS RPPS,
COALESCE(w_medecins_source.specialite, '') AS SPECIALITE,
COALESCE(t_medecins_administratifs.medecin_id, 0) AS medecin_id,
er_numpra as no_adeli
FROM
w_medecins_source
LEFT JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = w_medecins_source.specialite::text;
INSERT INTO base.t_medecins (nom, prenom, numero_ordre, specialite_id)
SELECT
nom,
prenom,
rpps,
specialite_id
FROM (
SELECT
nom,
prenom,
SUBSTR(nom_soundex, 1, 8) AS nom_soundex,
SUBSTR(prenom_soundex, 1, 8) AS prenom_soundex,
rpps,
coalesce(t_specialites_medecin.oid, 0) AS specialite_id
FROM
w_medecins
LEFT JOIN base.t_specialites_medecin ON t_specialites_medecin.code = w_medecins.specialite) subview
WHERE
subview.nom_soundex || ',' || subview.prenom_soundex || ',' || subview.rpps NOT IN(
SELECT
substr(base.cti_soundex_nom (nom), 1, 8) || ',' || substr(base.cti_soundex_nom (prenom), 1, 8) || ',' || numero_ordre FROM base.t_medecins);
UPDATE
w_medecins
SET
medecin_id = subview.medecin_id
FROM (
SELECT
substr(base.cti_soundex_nom (nom), 1, 8) AS nom,
substr(base.cti_soundex_nom (prenom), 1, 8) AS prenom,
numero_ordre,
MIN(oid) AS medecin_id
FROM
base.t_medecins
GROUP BY
1,
2,
3) subview
WHERE
SUBSTR(nom_soundex, 1, 8) = subview.nom
AND SUBSTR(prenom_soundex, 1, 8) = subview.prenom
AND rpps = subview.numero_ordre
AND w_medecins.medecin_id = 0;
UPDATE
w_medecins
SET
medecin_id = subview.medecin_id
FROM (
SELECT
base.cti_soundex_nom (nom) AS nom,
base.cti_soundex_nom (prenom) AS prenom,
MIN(oid) AS medecin_id
FROM
base.t_medecins
GROUP BY
1,
2) subview
WHERE
SUBSTR(nom_soundex, 1, 8) = subview.nom
AND SUBSTR(prenom_soundex, 1, 8) = subview.prenom
AND w_medecins.medecin_id = 0;
INSERT INTO activite[PX].t_medecins_administratifs (code_original, code, nom, prenom, specialite_id, medecin_id, no_adeli)
SELECT DISTINCT
er_codper::text,
er_codper::text,
nom,
prenom,
COALESCE(t_specialites_medecin.oid::bigint, 0),
medecin_id,
no_adeli
FROM
w_medecins
LEFT JOIN base.t_specialites_medecin ON t_specialites_medecin.code_original = specialite
WHERE
er_codper::text NOT IN(
SELECT
code_original FROM activite[PX].t_medecins_administratifs);
UPDATE
activite[PX].t_medecins_administratifs
SET
nom = w_medecins.nom,
prenom = w_medecins.prenom,
specialite_id = COALESCE(t_specialites_medecin.oid, t_specialites_medecin_2.oid, 0),
medecin_id = w_medecins.medecin_id
FROM
w_medecins
LEFT JOIN base.t_specialites_medecin ON t_specialites_medecin.code = specialite || '..'
LEFT JOIN base.t_specialites_medecin t_specialites_medecin_2 ON t_specialites_medecin_2.code = specialite
WHERE
w_medecins.er_codper::text = t_medecins_administratifs.code_original
AND(t_medecins_administratifs.nom <> w_medecins.nom
OR t_medecins_administratifs.prenom <> w_medecins.prenom
OR t_medecins_administratifs.specialite_id <> COALESCE(t_specialites_medecin.oid, t_specialites_medecin_2.oid, 0)
OR t_medecins_administratifs.medecin_id <> w_medecins.medecin_id);
UPDATE activite[PX].t_medecins_administratifs
SET specialite_id = subview.specialite_medecin_id
FROM
(
SELECT t_medecins_administratifs.oid,t_specialites_medecin.oid AS specialite_medecin_id
FROM activite[PX].t_medecins_administratifs
JOIN base.t_specialites_medecin t_specialites_medecin_2 ON specialite_id = t_specialites_medecin_2.oid
JOIN base.t_specialites_medecin ON t_specialites_medecin_2.code || '..' = t_specialites_medecin.code
) subview
WHERE t_medecins_administratifs.oid = subview.oid;
UPDATE
base.t_medecins
SET
specialite_id = subview.specialite_id
FROM (
SELECT
t_medecins.oid,
MIN(t_medecins_administratifs.specialite_id) AS specialite_id
FROM
base.t_medecins,
activite[PX].t_medecins_administratifs,
base.t_specialites_medecin
WHERE
t_medecins.oid = t_medecins_administratifs.medecin_id
AND t_medecins_administratifs.specialite_id = t_specialites_medecin.oid
GROUP BY
t_medecins.oid) subview
WHERE
t_medecins.oid = subview.oid
AND t_medecins.specialite_id IS DISTINCT FROM subview.specialite_id
AND t_medecins.oid <> 0
AND t_medecins.specialite_id = 0;
]]>
''
AND EM_NATURE NOT IN (SELECT code FROM activite[PX].t_activites)
GROUP BY 1;
-- Etages et lits (SOCIETE)
INSERT INTO activite[PX].t_etages(oid, code_original, code, texte, texte_court, nb_lits)
SELECT 0, 0, '', 'Non renseigne', 'Non renseigne', 0
WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_etages);
INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits)
SELECT
un_codser,
un_codser,
un_lib30,
un_lib30,
0
FROM prod_edlxplore.h_unit
WHERE un_codser <> '' AND un_codser NOT IN (SELECT code FROM activite[PX].t_etages)
GROUP BY 1, 3
;
INSERT INTO activite[PX].t_lits(oid, code_original, code, texte, texte_court, etage_id, chambre_particuliere)
SELECT 0, '', '***', 'Non renseigne', 'Non renseigne', 0, 'N'
WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_lits)
;
INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere)
SELECT code_original || '-0' , '', 'Non renseigne', 'Non renseigne', oid, 'N'
FROM activite[PX].t_etages
WHERE oid > 0 AND
code_original || '-0' NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL)
;
]]>
''
AND UPPER(za_cod_acte)
NOT IN(
SELECT
code FROM base.t_actes
WHERE
code IS NOT NULL)
GROUP BY
1;
INSERT INTO activite[PX].t_compte(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '', 'Non renseigne', 'Non renseigne' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_compte);
INSERT INTO activite[PX].t_compte (code_original, code, texte, texte_court)
SELECT
mc_numcpt,
mc_numcpt,
mc_numcpt,
mc_numcpt
FROM
prod_edlxplore.h_mvtcpt
WHERE
mc_numcpt <> ''
AND mc_numcpt NOT IN(
SELECT
code FROM activite[PX].t_compte
WHERE
code IS NOT NULL)
GROUP BY
1
ORDER BY
1;
]]>
= '[ENV_ADM_ANNEEDEBUT]0101' THEN 'OK' ELSE ''::text END AS OK
FROM prod_edlxplore.H_DEMAND
WHERE EM_CODSIT <> 'XA'
;
ANALYSE w_H_DEMAND_select
;
UPDATE w_H_DEMAND_select
SET OK = 'OK'
WHERE OK = '' AND
EM_NUMDEM IN (SELECT HF_NUMDEM FROM prod_edlxplore.H_HISFAC WHERE HF_DATFAC >= '[ENV_ADM_ANNEEDEBUT]0101')
;
UPDATE w_H_DEMAND_select
SET OK = 'OK'
WHERE OK = '' AND
EM_NUMDEM IN (SELECT GG_NUMDEM FROM prod_edlxplore.H_REGLEM WHERE GG_DATREG >= '[ENV_ADM_ANNEEDEBUT]0101')
;
UPDATE w_H_DEMAND_select
SET OK = 'OK'
WHERE OK = '' AND
EM_NUMDEM IN (SELECT MC_TABIDX FROM prod_edlxplore.H_MVTCPT WHERE MC_PERIODE >= '[ENV_ADM_ANNEEDEBUT]0101')
;
DELETE FROM w_H_DEMAND_select
WHERE OK = ''
;
VACUUM FULL ANALYSE w_H_DEMAND_select
;
]]>
'' AND
left(H_PATIEN.AT_NJFPAT,1) BETWEEN 'A' AND 'Z' AND
length(AT_NJFPAT) > 2 AND
H_PATIEN.AT_NJFPAT <> H_PATIEN.AT_NOMPAT AND
w_H_PATIEN_numper.AT_NUMPER IS NULL
GROUP BY 1,2,3,4
;
-- Si pas de NIP, creation numero provisoire
UPDATE w_H_PATIEN_numper
SET AT_NUMPER = subview.AT_NUMPER
FROM
(
SELECT
AT_NOMPAT,
AT_PNOPAT,
AT_DATNAI,
AT_SEXE,
'Z'::text || to_char(AT_DATNAI,'YYMMDD') || AT_SEXE::text || to_char(rank() OVER (PARTITION BY to_char(AT_DATNAI,'YYMMDD'), AT_SEXE ORDER BY AT_NOMPAT, AT_PNOPAT),'FM990') AS AT_NUMPER
FROM w_H_PATIEN_numper
WHERE AT_NUMPER = ''
) subview
WHERE subview.AT_NOMPAT = w_H_PATIEN_numper.AT_NOMPAT AND
subview.AT_PNOPAT = w_H_PATIEN_numper.AT_PNOPAT AND
subview.AT_DATNAI = w_H_PATIEN_numper.AT_DATNAI AND
subview.AT_SEXE = w_H_PATIEN_numper.AT_SEXE AND
w_H_PATIEN_numper.AT_NUMPER = ''
;
UPDATE prod_edlxplore.H_PATIEN
SET AT_NUMPER = w_H_PATIEN_numper.AT_NUMPER
FROM w_H_PATIEN_numper
WHERE H_PATIEN.AT_NUMPER = '' AND
w_H_PATIEN_numper.AT_NUMPER <> '' AND
H_PATIEN.AT_NOMPAT = w_H_PATIEN_numper.AT_NOMPAT AND
H_PATIEN.AT_PNOPAT = w_H_PATIEN_numper.AT_PNOPAT AND
H_PATIEN.AT_DATNAI = w_H_PATIEN_numper.AT_DATNAI AND
H_PATIEN.AT_SEXE = w_H_PATIEN_numper.AT_SEXE
;
UPDATE prod_edlxplore.H_PATIEN
SET AT_NUMPER = w_H_PATIEN_numper.AT_NUMPER
FROM w_H_PATIEN_numper
WHERE H_PATIEN.AT_NUMPER = '' AND
w_H_PATIEN_numper.AT_NUMPER <> '' AND
H_PATIEN.AT_NJFPAT = w_H_PATIEN_numper.AT_NOMPAT AND
H_PATIEN.AT_PNOPAT = w_H_PATIEN_numper.AT_PNOPAT AND
H_PATIEN.AT_DATNAI = w_H_PATIEN_numper.AT_DATNAI AND
H_PATIEN.AT_SEXE = w_H_PATIEN_numper.AT_SEXE
;
TRUNCATE activite[PX].p_patients
;
INSERT INTO activite[PX].p_patients (no_patient, nom, nom_naissance, prenom, date_naissance, code_sexe)
SELECT
AT_NUMPER,
(MAX(ARRAY[AT_NUMDOS,AT_NOMPAT]))[2],
(MAX(ARRAY[AT_NUMDOS,AT_PNOPAT]))[2],
(MAX(ARRAY[AT_NUMDOS,AT_NJFPAT]))[2],
date(MAX(AT_DATNAI)),
MAX(CASE WHEN AT_SEXE = 0 THEN '2' ELSE '1' END) AS sexe
FROM prod_edlxplore.H_PATIEN
WHERE AT_NUMDOS IN (SELECT EM_NUMDOS FROM w_H_DEMAND_select)
GROUP BY 1
;
]]>
COALESCE(t_services_facturation.oid,0) OR
t_lieux.mode_traitement_id <> COALESCE(t_services_facturation.mode_traitement_id,0)
)
;
UPDATE activite[PX].t_lieux SET
activite_id = COALESCE(t_activites.oid,0)
FROM activite[PX].t_activites
WHERE code_original_2 = t_activites.code_original AND
t_lieux.activite_id <> COALESCE(t_activites.oid,0)
;
UPDATE activite[PX].t_lieux SET
lit_id = COALESCE(t_lits.oid,0)
FROM activite[PX].t_lits
WHERE code_original_4||'-'||'0' = t_lits.code_original
AND lit_id <> COALESCE(t_lits.oid,0)
;
UPDATE activite[PX].t_lieux SET
unite_medicale_id = COALESCE(t_unites_medicales.oid,0)
FROM activite[PX].t_unites_medicales
WHERE code_original_5 = t_unites_medicales.code_original
AND unite_medicale_id <> COALESCE(t_unites_medicales.oid,0)
;
UPDATE activite[PX].t_lieux SET
unite_fonctionnelle_id = COALESCE(t_unites_fonctionnelles.oid,0)
FROM activite[PX].t_unites_fonctionnelles
WHERE code_original_6 = t_unites_fonctionnelles.code_original
AND unite_fonctionnelle_id <> COALESCE(t_unites_fonctionnelles.oid,0)
;
-- Sejours
DROP TABLE IF EXISTS w_sejours;
CREATE TEMP TABLE w_sejours AS
SELECT
H_DEMAND.em_numdem AS no_sejour,
H_DEMAND.em_numdem AS code_original,
H_PATIEN.AT_NUMPER AS no_patient,
H_DEMAND.em_DATARR AS date_entree,
REPLACE(H_DEMAND.em_HEUARR, ':', '') || '00' AS heure_entree,
H_DEMAND.em_DATARR AS date_sortie,
REPLACE(H_DEMAND.em_HEUARR, ':', '') || '00' AS heure_sortie,
CASE WHEN H_PATIEN.at_prefix ILIKE 'Mr%' THEN '1' ELSE '2' END AS code_sexe ,
EXTRACT(YEAR FROM AGE(H_PATIEN.at_datnai)) AS age,
1 AS code_sorti,
0 AS code_prevu,
CASE em_etape WHEN 'S' THEN '9'::text ELSE '3'::text END AS type_sejour,
COALESCE(t_codes_postaux.oid,0) AS code_postal_id,
CASE WHEN t_sejour.medecin_sejour_id <> 0 THEN t_sejour.medecin_sejour_id ELSE COALESCE(t_medecins_administratifs.oid,0) END AS medecin_sejour_id,
0 as ghm_id,
0 AS ghs_id,
'20991231'::date AS date_groupage,
0::numeric AS code_cp_demandee,
0 AS mode_traitement_id,
CASE WHEN em_codser IN ('EXT', '') THEN '8'::character(1) ELSE '0'::character(1) END AS mode_entree,
'0'::character(1) AS provenance,
CASE WHEN em_codser IN ('EXT', '') THEN '8'::character(1) ELSE '0'::character(1) END AS mode_sortie,
'0'::character(1) AS destination,
COALESCE(t_tiers_payant_0.oid, 0) AS tiers_payant_0_id,
COALESCE(t_tiers_payant_1.oid, 0) AS tiers_payant_1_id,
COALESCE(t_tiers_payant_2.oid, 0) AS tiers_payant_2_id,
0 AS tiers_payant_22_id,
0 AS est_budget_global,
em_finess AS finess,
CASE WHEN t_sejour.est_ignore = '1' THEN 'I' ELSE '' END AS etat,
em_codsit as service_facturation,
em_codsit as uf,
COALESCE(t_lieux.oid, 0) as lieu_sortie_id
FROM w_H_DEMAND_select H_DEMAND
JOIN prod_edlxplore.H_PATIEN ON H_PATIEN.at_numdos = H_DEMAND.em_numdos
LEFT JOIN base.t_codes_postaux ON H_PATIEN.at_codpos = t_codes_postaux.code
LEFT JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = H_DEMAND.em_codtit
LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_1 ON H_DEMAND.em_numcai::text || 'C' = t_tiers_payant_1.code_original
LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_2 ON H_DEMAND.em_nummut::text || 'M' = t_tiers_payant_2.code_original
LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_0 ON t_tiers_payant_0.code_original = 'PATIENT'
LEFT JOIN activite.t_sejour ON t_sejour.no_sejour = H_DEMAND.em_numdem
LEFT JOIN activite[PX].t_lieux ON
t_lieux.code_original_1 = H_DEMAND.EM_CODSIT AND
t_lieux.code_original_2 = H_DEMAND.EM_NATURE AND
t_lieux.code_original_4 = H_DEMAND.EM_CODSER AND
t_lieux.code_original_5 = H_DEMAND.EM_CODSER AND
t_lieux.code_original_6 = H_DEMAND.EM_CODSER
;
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_2');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_3');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_4');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_5');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_6');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_7');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_8');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_9');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_10');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_11');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_12');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_13');
INSERT INTO activite[PX].p_sejours (
no_sejour,
code_original,
no_patient,
date_entree,
heure_entree,
date_sortie,
heure_sortie,
code_sexe,
age,
code_sorti,
code_prevu,
type_sejour,
code_postal_id,
medecin_sejour_id,
date_groupage,
code_cp_demandee,
mode_traitement_id,
mode_entree,
provenance,
mode_sortie,
destination,
ghm_id,
ghs_id,
tiers_payant_0_id,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
est_budget_global,
finess,
etat,
lieu_sortie_id
)
SELECT
w_sejours.no_sejour,
w_sejours.code_original,
w_sejours.no_patient,
w_sejours.date_entree,
w_sejours.heure_entree::numeric,
w_sejours.date_sortie,
w_sejours.heure_sortie::numeric,
w_sejours.code_sexe::char(1),
w_sejours.age,
w_sejours.code_sorti,
w_sejours.code_prevu,
w_sejours.type_sejour::char(1),
w_sejours.code_postal_id,
w_sejours.medecin_sejour_id,
w_sejours.date_groupage,
w_sejours.code_cp_demandee,
w_sejours.mode_traitement_id,
w_sejours.mode_entree::char(1),
w_sejours.provenance::char(1),
w_sejours.mode_sortie::char(1),
w_sejours.destination::char(1),
w_sejours.ghm_id,
w_sejours.ghs_id,
w_sejours.tiers_payant_0_id,
w_sejours.tiers_payant_1_id,
w_sejours.tiers_payant_2_id,
w_sejours.tiers_payant_22_id,
w_sejours.est_budget_global,
w_sejours.finess,
w_sejours.etat,
w_sejours.lieu_sortie_id
FROM w_sejours
;
ANALYSE activite[PX].p_sejours
;
-- recreation index
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_2');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_3');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_4');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_5');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_6');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_7');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_8');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_9');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_10');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_11');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_12');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_13');
-- assurance
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_1');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_2');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_3');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_4');
INSERT INTO activite[PX].p_sejours_assurance (sejour_id, tiers_payant_0_id, tiers_payant_1_id, matricule_1, tiers_payant_2_id, matricule_2, tiers_payant_22_id, matricule_22)
SELECT
oid AS sejour_id,
p_sejours.tiers_payant_0_id,
p_sejours.tiers_payant_1_id,
at_numss,
p_sejours.tiers_payant_2_id,
'',
p_sejours.tiers_payant_22_id,
''::text AS matricule_22
FROM
activite[PX].p_sejours
LEFT JOIN prod_edlxplore.H_PATIEN ON H_PATIEN.at_numdos = p_sejours.no_patient
WHERE
p_sejours.etat = '';
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_1');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_2');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_3');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_4');
]]>
= heure_debut
ORDER BY
no_sejour;
SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_1');
SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_2');
SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_3');
SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_4');
SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_5');
ANALYSE activite[PX].p_mouvements_sejour
;
]]>
0 THEN 1 ELSE -1 END AS sens_facture,
0::numeric AS rang
FROM prod_edlxplore.H_MVTCPT
JOIN w_H_DEMAND_select ON MC_TABIDX = EM_NUMDEM
JOIN activite[PX].p_sejours ON MC_TABIDX = no_sejour
WHERE MC_NUMCPT NOT LIKE '41%' AND
MC_CODJRN LIKE 'VENTE%' AND
MC_TABIDX NOT IN (SELECT HF_NUMDEM FROM w_H_HISFAC)
GROUP BY MC_NUMPIECE, MC_CATECR, MC_PERIODE, MC_NUMFAC, MC_TABIDX, EM_DATARR, MC_TYPECR
HAVING SUM(CASE WHEN MC_NUMCPT NOT LIKE '41%' THEN MC_MTCREDIT - MC_MTDEBIT ELSE 0 END) <> 0
;
ANALYSE w_H_HISFAC_autre
;
UPDATE w_H_HISFAC_autre SET
HF_DATENV = date(subview.B6_DATENV),
HF_NUMBOT = subview.D6_NUMBOT
FROM
(
SELECT HF_NUM_HF,
MAX(B6_DATENV) AS B6_DATENV,
(MAX(ARRAY[B6_DATENV::text, D6_NUMBOT]))[2] AS D6_NUMBOT
FROM prod_edlxplore.H_DET615
JOIN prod_edlxplore.H_BORD615 ON D6_NUMBOT = B6_NUMBOT
JOIN w_H_HISFAC_autre ON D6_NUMDEM = HF_NUMDEM
GROUP BY 1
) subview
WHERE w_h_HISFAC_autre.HF_NUM_HF = subview.HF_NUM_HF
;
DROP TABLE IF EXISTS w_H_HISFAC_ord;
CREATE TEMP TABLE w_H_HISFAC_ord AS
SELECT *,
row_number() OVER(PARTITION BY HF_NUMDEM ORDER BY MC_NUMPIECE, HF_DATFAC) AS HF_NUMORD,
COALESCE(lead(MC_NUMPIECE) OVER (PARTITION BY HF_NUMDEM ORDER BY MC_NUMPIECE, HF_DATFAC),'Z99999999999') AS MC_NUMPIECE_next
FROM
(
SELECT HF_NUMDEM, MC_NUMPIECE, HF_DATFAC, MC_TYPECR
FROM w_H_HISFAC_autre
WHERE MC_TYPECR = 'Facture'
GROUP BY 1,2,3,4
) subview
;
ANALYSE w_H_HISFAC_ord
;
INSERT INTO w_H_HISFAC_ord
SELECT w_H_HISFAC_autre.HF_NUMDEM, w_H_HISFAC_autre.MC_NUMPIECE, w_H_HISFAC_autre.HF_DATFAC, w_H_HISFAC_autre.MC_TYPECR, MAX(w_H_HISFAC_ord.HF_NUMORD), ''::text
FROM w_H_HISFAC_autre
LEFT JOIN w_H_HISFAC_ord ON w_H_HISFAC_autre.HF_NUMDEM = w_H_HISFAC_ord.HF_NUMDEM AND
w_H_HISFAC_autre.MC_NUMPIECE > w_H_HISFAC_ord.MC_NUMPIECE AND
w_H_HISFAC_autre.MC_NUMPIECE < w_H_HISFAC_ord.MC_NUMPIECE_next
WHERE w_H_HISFAC_autre.MC_TYPECR = 'Avoir'
GROUP BY 1,2,3,4
;
UPDATE w_H_HISFAC_autre
SET HF_NUMORD = w_H_HISFAC_ord.HF_NUMORD
FROM w_H_HISFAC_ord
WHERE w_H_HISFAC_autre.MC_NUMPIECE = w_H_HISFAC_ord.MC_NUMPIECE
;
UPDATE w_H_HISFAC_autre SET
HF_IDFAC = HF_IDFAC || '.' || to_char(HF_NUMORD,'FM990') || CASE WHEN sens_facture < 0 THEN 'A' ELSE '' END
;
-- Ajout des factures
SELECT base.cti_disable_index('activite[PX]', 'i_factures_3');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_4');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_5');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_6');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_7');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_8');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_9');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_10');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_11');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_12');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_13');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_14');
INSERT INTO activite[PX].p_factures(
sejour_id,
no_sejour,
no_facture,
date_debut,
date_fin,
type_facture,
code_facture,
date_facture,
code_vente,
date_vente,
mois_vente,
date_solde,
montant_facture_c,
montant_facture_h,
montant_regle_c,
montant_regle_h,
delai_facture,
delai_solde,
date_expedition,
delai_expedition,
tiers_payant_0_id,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
date_solde_0_c,
date_solde_0_h,
date_solde_1_c,
date_solde_1_h,
date_solde_2_c,
date_solde_2_h,
date_solde_22_c,
date_solde_22_h,
date_expedition_0,
date_expedition_1,
date_expedition_2,
date_expedition_22,
code_expedie_0,
code_expedie_1,
code_expedie_2,
code_expedie_22,
no_bordereau_0,
no_bordereau_1,
no_bordereau_2,
no_bordereau_22,
montant_facture_0_c,
montant_facture_0_h,
montant_facture_1_c,
montant_facture_1_h,
montant_facture_2_c,
montant_facture_2_h,
montant_facture_22_c,
montant_facture_22_h,
montant_regle_0_c,
montant_regle_0_h,
montant_regle_1_c,
montant_regle_1_h,
montant_regle_2_c,
montant_regle_2_h,
montant_regle_22_c,
montant_regle_22_h,
delai_expedition_0,
delai_expedition_1,
delai_expedition_2,
delai_expedition_22,
delai_solde_0_c,
delai_solde_0_h,
delai_solde_1_c,
delai_solde_1_h,
delai_solde_2_c,
delai_solde_2_h,
delai_solde_22_c,
delai_solde_22_h,
ghs_id,
particularite_t2a,
code_cloture,
code_cp_demandee,
ghs_bebe1_id,
ghs_bebe2_id,
ghs_bebe3_id,
montant_comptabilise_c,
montant_comptabilise_h,
montant_comptabilise_0_c,
montant_comptabilise_0_h,
montant_comptabilise_1_c,
montant_comptabilise_1_h,
montant_comptabilise_2_c,
montant_comptabilise_2_h,
montant_comptabilise_22_c,
montant_comptabilise_22_h,
nb_rejets,
montant_facture_c_actes_inclus_dans_sejour,
montant_facture_h_actes_inclus_dans_sejour
)
SELECT
p_sejours.oid AS sejour_id,
p_sejours.no_sejour,
HF_IDFAC AS no_facture,
p_sejours.date_entree AS date_debut,
p_sejours.date_sortie AS date_fin,
MAX(CASE WHEN H_HISFAC.sens_facture > 0 THEN '0'::text ELSE '1' END) AS type_facture,
'1'::text AS code_facture,
MAX(HF_DATFAC) AS date_facture,
'1'::text AS code_vente,
MAX(HF_DATFAC) as date_vente,
MAX(to_char(HF_DATFAC,'YYYYMM')::numeric) AS mois_vente,
'2099-12-31' AS date_solde,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END) AS montant_facture_c,
SUM(CASE WHEN HF_PART = 'H' THEN HF_FACTUR ELSE 0 END) AS montant_facture_h,
0::numeric AS montant_regle_c,
0::numeric AS montant_regle_h,
0::numeric AS delai_facture,
0::numeric AS delai_solde,
MAX(HF_DATENV) as date_expedition,
0::numeric AS delai_expedition,
MAX(p_sejours.tiers_payant_0_id),
MAX(p_sejours.tiers_payant_1_id),
MAX(p_sejours.tiers_payant_2_id),
0::bigint AS tiers_payant_22_id,
'2099-12-31' AS date_solde_0_c,
'2099-12-31' AS date_solde_0_h,
'2099-12-31' AS date_solde_1_c,
'2099-12-31' AS date_solde_1_h,
'2099-12-31' AS date_solde_2_c,
'2099-12-31' AS date_solde_2_h,
'2099-12-31' AS date_solde_22_c,
'2099-12-31' AS date_solde_22_h,
'2099-12-31' AS date_expedition_0,
MAX(HF_DATENV) AS date_expedition_1,
MAX(HF_DATENV) AS date_expedition_2,
'2099-12-31' AS date_expedition_22,
'0'::text AS code_expedie_0,
MAX(CASE WHEN HF_DATENV < '20991231' THEN '1'::text ELSE '0'::text END) AS code_expedie_1,
MAX(CASE WHEN HF_DATENV < '20991231' THEN '1'::text ELSE '0'::text END) AS code_expedie_2,
'0'::text AS code_expedie_22,
'' AS no_bordereau_0,
MAX(HF_NUMBOT) AS no_bordereau_1,
MAX(HF_NUMBOT) AS no_bordereau_2,
'' AS no_bordereau_22,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUPAT / 100) AS montant_facture_0_c,
SUM(CASE WHEN HF_PART = 'H' THEN HF_FACTUR ELSE 0 END * EM_TAUPAT / 100) AS montant_facture_0_h,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUCAI / 100) AS montant_facture_1_c,
SUM(CASE WHEN HF_PART = 'H' THEN HF_FACTUR ELSE 0 END * EM_TAUCAI / 100) AS montant_facture_1_h,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUMUT / 100) AS montant_facture_2_c,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUMUT / 100) AS montant_facture_2_h,
0 AS montant_facture_22_c,
0 AS montant_facture_22_h,
0 AS montant_regle_0_c,
0 AS montant_regle_0_h,
0 AS montant_regle_1_c,
0 AS montant_regle_1_h,
0 AS montant_regle_2_c,
0 AS montant_regle_2_h,
0::numeric AS montant_regle_22_c,
0::numeric AS montant_regle_22_h,
0 AS delai_expedition_0,
0 AS delai_expedition_1,
0 AS delai_expedition_2,
0 AS delai_expedition_22,
0 AS delai_solde_0_c,
0 AS delai_solde_0_h,
0 AS delai_solde_1_c,
0 AS delai_solde_1_h,
0 AS delai_solde_2_c,
0 AS delai_solde_2_h,
0 AS delai_solde_22_c,
0 AS delai_solde_22_h,
0 AS ghs_id,
'' as particularite_t2a,
'0' as code_cloture,
'0' as code_cp_demandee,
0 AS ghs_bebe1_id,
0 AS ghs_bebe2_id,
0 AS ghs_bebe3_id,
0 AS montant_comptabilise_c,
0 AS montant_comptabilise_h,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUPAT / 100) AS montant_comptabilise_0_c,
SUM(CASE WHEN HF_PART = 'H' THEN HF_FACTUR ELSE 0 END * EM_TAUPAT / 100) AS montant_comptabilise_0_h,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUCAI / 100) AS montant_comptabilise_1_c,
SUM(CASE WHEN HF_PART = 'H' THEN HF_FACTUR ELSE 0 END * EM_TAUCAI / 100) AS montant_comptabilise_1_h,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUMUT / 100) AS montant_comptabilise_2_c,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUMUT / 100) AS montant_comptabilise_2_h,
0::numeric AS montant_comptabilise_22_c,
0::numeric AS montant_comptabilise_22_h,
0::numeric AS nb_rejets,
0,
0
FROM w_H_HISFAC H_HISFAC
JOIN activite[PX].p_sejours ON HF_NUMDEM = p_sejours.code_original
JOIN w_H_DEMAND_select H_DEMAND ON HF_NUMDEM = EM_NUMDEM
GROUP BY 1,2,3
;
INSERT INTO activite[PX].p_factures(
sejour_id,
no_sejour,
no_facture,
date_debut,
date_fin,
type_facture,
code_facture,
date_facture,
code_vente,
date_vente,
mois_vente,
date_solde,
montant_facture_c,
montant_facture_h,
montant_regle_c,
montant_regle_h,
delai_facture,
delai_solde,
date_expedition,
delai_expedition,
tiers_payant_0_id,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
date_solde_0_c,
date_solde_0_h,
date_solde_1_c,
date_solde_1_h,
date_solde_2_c,
date_solde_2_h,
date_solde_22_c,
date_solde_22_h,
date_expedition_0,
date_expedition_1,
date_expedition_2,
date_expedition_22,
code_expedie_0,
code_expedie_1,
code_expedie_2,
code_expedie_22,
no_bordereau_0,
no_bordereau_1,
no_bordereau_2,
no_bordereau_22,
montant_facture_0_c,
montant_facture_0_h,
montant_facture_1_c,
montant_facture_1_h,
montant_facture_2_c,
montant_facture_2_h,
montant_facture_22_c,
montant_facture_22_h,
montant_regle_0_c,
montant_regle_0_h,
montant_regle_1_c,
montant_regle_1_h,
montant_regle_2_c,
montant_regle_2_h,
montant_regle_22_c,
montant_regle_22_h,
delai_expedition_0,
delai_expedition_1,
delai_expedition_2,
delai_expedition_22,
delai_solde_0_c,
delai_solde_0_h,
delai_solde_1_c,
delai_solde_1_h,
delai_solde_2_c,
delai_solde_2_h,
delai_solde_22_c,
delai_solde_22_h,
ghs_id,
particularite_t2a,
code_cloture,
code_cp_demandee,
ghs_bebe1_id,
ghs_bebe2_id,
ghs_bebe3_id,
montant_comptabilise_c,
montant_comptabilise_h,
montant_comptabilise_0_c,
montant_comptabilise_0_h,
montant_comptabilise_1_c,
montant_comptabilise_1_h,
montant_comptabilise_2_c,
montant_comptabilise_2_h,
montant_comptabilise_22_c,
montant_comptabilise_22_h,
nb_rejets,
montant_facture_c_actes_inclus_dans_sejour,
montant_facture_h_actes_inclus_dans_sejour
)
SELECT
p_sejours.oid AS sejour_id,
p_sejours.no_sejour,
HF_IDFAC AS no_facture,
p_sejours.date_entree AS date_debut,
p_sejours.date_sortie AS date_fin,
MAX(CASE WHEN H_HISFAC.sens_facture > 0 THEN '0'::text ELSE '1' END) AS type_facture,
'1'::text AS code_facture,
MAX(HF_DATFAC) AS date_facture,
'1'::text AS code_vente,
MAX(HF_DATFAC) as date_vente,
MAX(to_char(HF_DATFAC,'YYYYMM')::numeric) AS mois_vente,
'2099-12-31' AS date_solde,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END) AS montant_facture_c,
SUM(CASE WHEN HF_PART = 'H' THEN HF_FACTUR ELSE 0 END) AS montant_facture_h,
0::numeric AS montant_regle_c,
0::numeric AS montant_regle_h,
0::numeric AS delai_facture,
0::numeric AS delai_solde,
MAX(HF_DATENV) as date_expedition,
0::numeric AS delai_expedition,
MAX(p_sejours.tiers_payant_0_id),
MAX(p_sejours.tiers_payant_1_id),
MAX(p_sejours.tiers_payant_2_id),
0::bigint AS tiers_payant_22_id,
'2099-12-31' AS date_solde_0_c,
'2099-12-31' AS date_solde_0_h,
'2099-12-31' AS date_solde_1_c,
'2099-12-31' AS date_solde_1_h,
'2099-12-31' AS date_solde_2_c,
'2099-12-31' AS date_solde_2_h,
'2099-12-31' AS date_solde_22_c,
'2099-12-31' AS date_solde_22_h,
'2099-12-31' AS date_expedition_0,
MAX(HF_DATENV) AS date_expedition_1,
MAX(HF_DATENV) AS date_expedition_2,
'2099-12-31' AS date_expedition_22,
'0'::text AS code_expedie_0,
MAX(CASE WHEN HF_DATENV < '20991231' THEN '1'::text ELSE '0'::text END) AS code_expedie_1,
MAX(CASE WHEN HF_DATENV < '20991231' THEN '1'::text ELSE '0'::text END) AS code_expedie_2,
'0'::text AS code_expedie_22,
'' AS no_bordereau_0,
MAX(HF_NUMBOT) AS no_bordereau_1,
MAX(HF_NUMBOT) AS no_bordereau_2,
'' AS no_bordereau_22,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUPAT / 100) AS montant_facture_0_c,
SUM(CASE WHEN HF_PART = 'H' THEN HF_FACTUR ELSE 0 END * EM_TAUPAT / 100) AS montant_facture_0_h,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUCAI / 100) AS montant_facture_1_c,
SUM(CASE WHEN HF_PART = 'H' THEN HF_FACTUR ELSE 0 END * EM_TAUCAI / 100) AS montant_facture_1_h,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUMUT / 100) AS montant_facture_2_c,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUMUT / 100) AS montant_facture_2_h,
0 AS montant_facture_22_c,
0 AS montant_facture_22_h,
0 AS montant_regle_0_c,
0 AS montant_regle_0_h,
0 AS montant_regle_1_c,
0 AS montant_regle_1_h,
0 AS montant_regle_2_c,
0 AS montant_regle_2_h,
0::numeric AS montant_regle_22_c,
0::numeric AS montant_regle_22_h,
0 AS delai_expedition_0,
0 AS delai_expedition_1,
0 AS delai_expedition_2,
0 AS delai_expedition_22,
0 AS delai_solde_0_c,
0 AS delai_solde_0_h,
0 AS delai_solde_1_c,
0 AS delai_solde_1_h,
0 AS delai_solde_2_c,
0 AS delai_solde_2_h,
0 AS delai_solde_22_c,
0 AS delai_solde_22_h,
0 AS ghs_id,
'' as particularite_t2a,
'0' as code_cloture,
'0' as code_cp_demandee,
0 AS ghs_bebe1_id,
0 AS ghs_bebe2_id,
0 AS ghs_bebe3_id,
0 AS montant_comptabilise_c,
0 AS montant_comptabilise_h,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUPAT / 100) AS montant_comptabilise_0_c,
SUM(CASE WHEN HF_PART = 'H' THEN HF_FACTUR ELSE 0 END * EM_TAUPAT / 100) AS montant_comptabilise_0_h,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUCAI / 100) AS montant_comptabilise_1_c,
SUM(CASE WHEN HF_PART = 'H' THEN HF_FACTUR ELSE 0 END * EM_TAUCAI / 100) AS montant_comptabilise_1_h,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUMUT / 100) AS montant_comptabilise_2_c,
SUM(CASE WHEN HF_PART = 'F' THEN HF_FACTUR ELSE 0 END * EM_TAUMUT / 100) AS montant_comptabilise_2_h,
0::numeric AS montant_comptabilise_22_c,
0::numeric AS montant_comptabilise_22_h,
0::numeric AS nb_rejets,
0,
0
FROM w_H_HISFAC_autre H_HISFAC
JOIN activite[PX].p_sejours ON HF_NUMDEM = p_sejours.code_original
JOIN w_H_DEMAND_select H_DEMAND ON HF_NUMDEM = EM_NUMDEM
GROUP BY 1,2,3
;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_5');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_6');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_7');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_8');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_9');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_10');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_11');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_12');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_13');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_14');
ANALYSE activite[PX].p_factures
;
-- Non facturees
DROP TABLE IF EXISTS w_factures_trous;
CREATE TEMP TABLE w_factures_trous AS
SELECT
p_sejours.finess,
p_sejours.oid AS sejour_id,
p_sejours.no_sejour,
p_sejours.date_entree,
p_sejours.tiers_payant_0_id,
p_sejours.tiers_payant_1_id,
p_sejours.tiers_payant_2_id,
p_sejours.tiers_payant_22_id,
p_sejours.code_cp_demandee,
COALESCE(t_services_facturation.avec_facturation_intermediaire,'') AS avec_facturation_intermediaire,
p_sejours.code_sorti,
CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_sortie,
MAX(CASE WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END ELSE p_factures.date_fin END) AS date_fin_facture,
date(MAX(COALESCE(CASE WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 AND code_sorti = '1' THEN date_sortie ELSE p_factures.date_fin END + interval '1 day', p_sejours.date_entree))) AS date_debut_encours,
CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_fin_encours
FROM activite[PX].p_sejours
LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND no_facture NOT LIKE 'E%' AND type_facture IS DISTINCT FROM 'P'
JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid
JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid
WHERE p_sejours.etat = '' AND p_sejours.est_sans_facturation IS DISTINCT FROM '1' AND date_entree <= now() AND p_sejours.type_sejour <> '6' AND p_sejours.type_sejour <> '9'
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12
;
INSERT INTO activite[PX].p_factures(
finess,
sejour_id,
no_sejour,
no_facture,
no_facture_reference,
type_facture,
code_facture,
date_facture,
tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id,
code_cp_demandee,
date_debut,
date_fin)
SELECT
finess,
sejour_id,
no_sejour,
'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || substr(p_calendrier.mois,3,4) ELSE '' END,
'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || substr(p_calendrier.mois,3,4) ELSE '' END,
'E',
'0',
'20991231'::date,
tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id,
code_cp_demandee ,
MIN(GREATEST(date_debut_encours, p_calendrier.date)),
MAX(LEAST(date_fin_encours, p_calendrier.date))
FROM w_factures_trous
JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_debut_encours AND date_fin_encours
WHERE (date_debut_encours <= date_fin_encours or date_fin_facture is null)
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13
;
]]>
''
GROUP BY 1
;
ANALYSE w_H_MVTCPT_cpt
;
UPDATE w_H_MVTCPT_cpt
SET compte_produit_id = t_compte.oid
FROM activite[PX].t_compte
WHERE MC_NUMCPT = t_compte.code
;
UPDATE activite[PX].p_factures_lignes_c
SET compte_produit_id = w_H_MVTCPT_cpt.compte_produit_id
FROM w_H_MVTCPT_cpt
WHERE split_part(p_factures_lignes_c.no_facture,'.',1) = MC_NUMFAC
;
-- Arrondis
UPDATE activite[PX].p_factures_lignes_c SET
montant_facture_0 = montant_facture - montant_facture_1,
montant_comptabilise_0 = montant_comptabilise - montant_comptabilise_1
WHERE montant_facture_1 + montant_facture_2 + montant_facture_0 <> montant_facture AND
montant_facture_1 <> 0 AND
montant_facture_2 = 0 AND
montant_facture_0 <> 0
;
UPDATE activite[PX].p_factures_lignes_c SET
montant_facture_2 = montant_facture - montant_facture_1,
montant_comptabilise_2 = montant_comptabilise - montant_comptabilise_1
WHERE montant_facture_1 + montant_facture_2 + montant_facture_0 <> montant_facture AND
montant_facture_1 <> 0 AND
montant_facture_2 <> 0 AND
montant_facture_0 = 0
;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_1');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_2');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_5');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_6');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_7');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_8');
ANALYSE activite[PX].p_factures_lignes_c
;
SELECT activite[PX].cti_reorganize_rubrique_facture_c('activite[PX].p_factures_lignes_c');
]]>
'20991231' AND
(
p_factures_lignes_c.montant_comptabilise <> 0 OR
p_factures_lignes_c.montant_comptabilise_0 <> 0 OR
p_factures_lignes_c.montant_comptabilise_1 <> 0 OR
p_factures_lignes_c.montant_comptabilise_2 <> 0 OR
p_factures_lignes_c.montant_comptabilise_22 <> 0
)
GROUP BY 1,2,3,4
;
DROP TABLE IF EXISTS w_H_HISFAC_last;
CREATE TEMP TABLE w_H_HISFAC_last AS
SELECT HF_NUMDEM,
(MAX(ARRAY[HF_DATFAC::text,HF_IDFAC]))[2] AS no_facture
FROM w_H_HISFAC
WHERE sens_facture > 0
GROUP BY 1
;
ANALYSE w_H_HISFAC_last
;
-- Reglements
INSERT INTO activite[PX].p_factures_soldes_c(
no_facture,
date_comptable,
rubrique_comptabilisee_id,
prestation_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22
)
SELECT
p_factures.no_facture,
date(GG_DATREG) AS date_comptable,
0::bigint AS rubrique_comptabilisation_id,
0::bigint AS prestation_id,
0,
0,
0,
0,
0,
SUM(GG_REGFOR),
SUM(CASE WHEN GG_TYPREG = 'P' THEN GG_REGFOR ELSE 0 END),
SUM(CASE WHEN GG_TYPREG = 'C' THEN GG_REGFOR ELSE 0 END),
SUM(CASE WHEN GG_TYPREG = 'M' THEN GG_REGFOR ELSE 0 END),
0
FROM w_H_HISFAC_last
JOIN prod_edlxplore.H_REGLEM ON HF_NUMDEM = GG_NUMDEM
JOIN activite[PX].p_factures ON p_factures.no_facture = w_H_HISFAC_last.no_facture
WHERE GG_REGFOR <> 0
GROUP BY 1,2,3,4
;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_1');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_2');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_8');
ANALYSE activite[PX].p_factures_soldes_c
;
]]>
montant_facture AND
montant_facture_1 <> 0 AND
montant_facture_2 = 0 AND
montant_facture_0 <> 0
;
UPDATE activite[PX].p_factures_lignes_h SET
montant_facture_2 = montant_facture - montant_facture_1,
montant_comptabilise_2 = montant_comptabilise - montant_comptabilise_1
WHERE montant_facture_1 + montant_facture_2 + montant_facture_0 <> montant_facture AND
montant_facture_1 <> 0 AND
montant_facture_2 <> 0 AND
montant_facture_0 = 0
;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_1');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_2');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_5');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_6');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_7');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_8');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_9');
ANALYSE activite[PX].p_factures_lignes_h
;
]]>
0 OR
montant_comptabilise_0 <> 0 OR
montant_comptabilise_1 <> 0 OR
montant_comptabilise_2 <> 0 OR
montant_comptabilise_22 <> 0
)
GROUP BY 1,2,3,4,5
;
-- Reglements
INSERT INTO activite[PX].p_factures_soldes_h(
no_facture,
date_comptable,
medecin_comptabilise_id,
rubrique_comptabilisee_id,
prestation_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22
)
SELECT
p_factures.no_facture,
date(GG_DATREG) AS date_comptable,
0::bigint AS medecin_comptabilise_id,
0::bigint AS rubrique_comptabilisation_id,
0::bigint AS prestation_id,
0,
0,
0,
0,
0,
SUM(GG_REGHON),
SUM(CASE WHEN GG_TYPREG = 'P' THEN GG_REGHON ELSE 0 END),
SUM(CASE WHEN GG_TYPREG = 'C' THEN GG_REGHON ELSE 0 END),
SUM(CASE WHEN GG_TYPREG = 'M' THEN GG_REGHON ELSE 0 END),
0
FROM w_H_HISFAC_last
JOIN prod_edlxplore.H_REGLEM ON HF_NUMDEM = GG_NUMDEM
JOIN activite[PX].p_factures ON p_factures.no_facture = w_H_HISFAC_last.no_facture
WHERE GG_REGFOR = 0 AND GG_REGHON <> 0
GROUP BY 1,2,3,4
;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_1');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_8');
ANALYSE activite[PX].p_factures_soldes_h
;
-- Medecin sur reglements selon facturation
UPDATE activite[PX].p_factures_soldes_h
SET medecin_comptabilise_id = subview.medecin_comptabilise_id
FROM
(
SELECT no_facture, MAX(medecin_comptabilise_id) AS medecin_comptabilise_id
FROM activite[PX].p_factures_soldes_h
WHERE medecin_comptabilise_id <> 0
GROUP BY 1
HAVING count(DISTINCT medecin_comptabilise_id) = 1
) subview
WHERE p_factures_soldes_h.no_facture = subview.no_facture AND
p_factures_soldes_h.medecin_comptabilise_id = 0
;
]]>
0
GROUP BY 1
;
ANALYSE w_facture_cliaxium
;
UPDATE activite[PX].p_factures_soldes_c SET
montant_regle_2 = montant_comptabilise_2,
montant_regle = montant_regle + montant_comptabilise_2
FROM w_facture_cliaxium
WHERE p_factures_soldes_c.no_facture = w_facture_cliaxium.no_facture AND
montant_comptabilise_2 <> 0
;
DROP TABLE IF EXISTS w_facture_cliaxium;
CREATE TEMP TABLE w_facture_cliaxium AS
SELECT p_factures_soldes_h.no_facture
FROM activite[PX].p_factures_soldes_h
JOIN activite[PX].p_factures ON p_factures_soldes_h.no_facture = p_factures.no_facture
JOIN activite[PX].t_tiers_payant ON p_factures.tiers_payant_2_id = t_tiers_payant.oid
WHERE t_tiers_payant.code = 'CLIAXIUMM' AND montant_comptabilise_2 <> 0
GROUP BY 1
;
ANALYSE w_facture_cliaxium
;
UPDATE activite[PX].p_factures_soldes_h
SET montant_regle_2 = montant_comptabilise_2,
montant_regle = montant_regle + montant_comptabilise_2
FROM w_facture_cliaxium
WHERE p_factures_soldes_h.no_facture = w_facture_cliaxium.no_facture AND
montant_comptabilise_2 <> 0
;
-- OD avoir
UPDATE activite[PX].p_factures SET
no_facture_od_avoir = p_factures_2.no_facture,
facture_od_avoir_id = p_factures_2.oid
FROM activite[PX].p_factures p_factures_2
WHERE p_factures.no_facture = p_factures_2.no_facture || 'A' AND
p_factures.type_facture = '1'
;
UPDATE activite[PX].p_factures SET
no_facture_od_avoir = p_factures_2.no_facture,
facture_od_avoir_id = p_factures_2.oid
FROM activite[PX].p_factures p_factures_2
WHERE p_factures.no_facture || 'A' = p_factures_2.no_facture AND
p_factures.type_facture = '0'
;
INSERT INTO activite[PX].p_factures_soldes_c(
no_facture,
date_comptable,
rubrique_comptabilisee_id,
prestation_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22,
od_non_comptabilise
)
SELECT
p_factures_soldes_c.no_facture,
CASE WHEN p_factures.type_facture = '0' THEN p_factures.date_vente ELSE p_factures_2.date_vente END,
p_factures_soldes_c.rubrique_comptabilisee_id,
p_factures_soldes_c.prestation_id,
0,
0,
0,
0,
0,
SUM(p_factures_soldes_c.montant_comptabilise - p_factures_soldes_c.montant_regle),
SUM(p_factures_soldes_c.montant_comptabilise_0 - p_factures_soldes_c.montant_regle_0),
SUM(p_factures_soldes_c.montant_comptabilise_1 - p_factures_soldes_c.montant_regle_1),
SUM(p_factures_soldes_c.montant_comptabilise_2 - p_factures_soldes_c.montant_regle_2),
SUM(p_factures_soldes_c.montant_comptabilise_22 - p_factures_soldes_c.montant_regle_22),
'1'::text
FROM activite[PX].p_factures_soldes_c
JOIN activite[PX].p_factures ON p_factures_soldes_c.no_facture = p_factures.no_facture
JOIN activite[PX].p_factures p_factures_2 ON p_factures.no_facture_od_avoir = p_factures_2.no_facture
WHERE p_factures.no_facture_od_avoir <> ''
GROUP BY 1,2,3,4
HAVING SUM(p_factures_soldes_c.montant_comptabilise - p_factures_soldes_c.montant_regle) <> 0
;
INSERT INTO activite[PX].p_factures_soldes_h(
no_facture,
date_comptable,
medecin_comptabilise_id,
rubrique_comptabilisee_id,
prestation_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22,
od_non_comptabilise
)
SELECT
p_factures_soldes_h.no_facture,
CASE WHEN p_factures.type_facture = '0' THEN p_factures.date_vente ELSE p_factures_2.date_vente END,
p_factures_soldes_h.medecin_comptabilise_id,
p_factures_soldes_h.rubrique_comptabilisee_id,
p_factures_soldes_h.prestation_id,
0,
0,
0,
0,
0,
SUM(p_factures_soldes_h.montant_comptabilise - p_factures_soldes_h.montant_regle),
SUM(p_factures_soldes_h.montant_comptabilise_0 - p_factures_soldes_h.montant_regle_0),
SUM(p_factures_soldes_h.montant_comptabilise_1 - p_factures_soldes_h.montant_regle_1),
SUM(p_factures_soldes_h.montant_comptabilise_2 - p_factures_soldes_h.montant_regle_2),
SUM(p_factures_soldes_h.montant_comptabilise_22 - p_factures_soldes_h.montant_regle_22),
'1'::text
FROM activite[PX].p_factures_soldes_h
JOIN activite[PX].p_factures ON p_factures_soldes_h.no_facture = p_factures.no_facture
JOIN activite[PX].p_factures p_factures_2 ON p_factures.no_facture_od_avoir = p_factures_2.no_facture
WHERE p_factures.no_facture_od_avoir <> ''
GROUP BY 1,2,3,4,5
HAVING SUM(p_factures_soldes_h.montant_comptabilise - p_factures_soldes_h.montant_regle) <> 0
;
-- Honoraires payes directement aux medecins
INSERT INTO activite[PX].p_factures_soldes_h(
no_facture,
date_comptable,
medecin_comptabilise_id,
rubrique_comptabilisee_id,
prestation_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22,
od_non_comptabilise
)
SELECT
p_factures_soldes_h.no_facture,
MIN(p_factures_soldes_h.date_comptable),
p_factures_soldes_h.medecin_comptabilise_id,
p_factures_soldes_h.rubrique_comptabilisee_id,
p_factures_soldes_h.prestation_id,
0,
0,
0,
0,
0,
SUM(p_factures_soldes_h.montant_comptabilise_1 - p_factures_soldes_h.montant_regle_1),
0,
SUM(p_factures_soldes_h.montant_comptabilise_1 - p_factures_soldes_h.montant_regle_1),
0,
0,
'1'::text
FROM activite[PX].p_factures_soldes_h
GROUP BY 1,3,4,5
HAVING SUM(p_factures_soldes_h.montant_comptabilise_1 - p_factures_soldes_h.montant_regle_1) <> 0
;
-- totaux facture
UPDATE activite[PX].p_factures SET
montant_facture_c = subview.montant_facture,
montant_facture_0_c = subview.montant_facture_0,
montant_facture_1_c = subview.montant_facture_1,
montant_facture_2_c = subview.montant_facture_2,
montant_comptabilise_c = subview.montant_comptabilise,
montant_comptabilise_0_c = subview.montant_comptabilise_0,
montant_comptabilise_1_c = subview.montant_comptabilise_1,
montant_comptabilise_2_c = subview.montant_comptabilise_2
FROM (
SELECT no_facture,
SUM(montant_facture) AS montant_facture,
SUM(montant_facture_0) AS montant_facture_0,
SUM(montant_facture_1) AS montant_facture_1,
SUM(montant_facture_2) AS montant_facture_2,
SUM(montant_comptabilise) AS montant_comptabilise,
SUM(montant_comptabilise_0) AS montant_comptabilise_0,
SUM(montant_comptabilise_1) AS montant_comptabilise_1,
SUM(montant_comptabilise_2) AS montant_comptabilise_2
FROM activite[PX].p_factures_lignes_c
GROUP BY 1
) subview
WHERE p_factures.no_facture = subview.no_facture
;
UPDATE activite[PX].p_factures SET
montant_facture_h = subview.montant_facture,
montant_facture_0_h = subview.montant_facture_0,
montant_facture_1_h = subview.montant_facture_1,
montant_facture_2_h = subview.montant_facture_2,
montant_comptabilise_h = subview.montant_comptabilise,
montant_comptabilise_0_h = subview.montant_comptabilise_0,
montant_comptabilise_1_h = subview.montant_comptabilise_1,
montant_comptabilise_2_h = subview.montant_comptabilise_2
FROM (
SELECT no_facture,
SUM(montant_facture) AS montant_facture,
SUM(montant_facture_0) AS montant_facture_0,
SUM(montant_facture_1) AS montant_facture_1,
SUM(montant_facture_2) AS montant_facture_2,
SUM(montant_comptabilise) AS montant_comptabilise,
SUM(montant_comptabilise_0) AS montant_comptabilise_0,
SUM(montant_comptabilise_1) AS montant_comptabilise_1,
SUM(montant_comptabilise_2) AS montant_comptabilise_2
FROM activite[PX].p_factures_lignes_h
GROUP BY 1
) subview
WHERE p_factures.no_facture = subview.no_facture
;
UPDATE activite[PX].p_factures SET
montant_regle_c = subview.montant_regle,
montant_regle_0_c = subview.montant_regle_0,
montant_regle_1_c = subview.montant_regle_1,
montant_regle_2_c = subview.montant_regle_2,
date_solde = COALESCE(subview.date_solde,p_factures.date_solde),
date_solde_c = COALESCE(subview.date_solde,p_factures.date_solde),
date_solde_0_c = COALESCE(subview.date_solde,p_factures.date_solde_0_c),
date_solde_1_c = COALESCE(subview.date_solde,p_factures.date_solde_1_c),
date_solde_2_c = COALESCE(subview.date_solde,p_factures.date_solde_2_c)
FROM (
SELECT no_facture,
SUM(montant_regle) AS montant_regle,
SUM(montant_regle_0) AS montant_regle_0,
SUM(montant_regle_1) AS montant_regle_1,
SUM(montant_regle_2) AS montant_regle_2,
MAX(CASE WHEN montant_regle <> 0 THEN date_comptable ELSE NULL END) AS date_solde,
MAX(CASE WHEN montant_regle_0 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_0,
MAX(CASE WHEN montant_regle_1 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_1,
MAX(CASE WHEN montant_regle_2 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_2
FROM activite[PX].p_factures_soldes_c
WHERE montant_regle <> 0 OR
montant_regle_0 <> 0 OR
montant_regle_1 <> 0 OR
montant_regle_2 <> 0
GROUP BY 1
) subview
WHERE p_factures.no_facture = subview.no_facture
;
UPDATE activite[PX].p_factures SET
montant_regle_h = subview.montant_regle,
montant_regle_0_h = subview.montant_regle_0,
montant_regle_1_h = subview.montant_regle_1,
montant_regle_2_h = subview.montant_regle_2,
date_solde = GREATEST(p_factures.date_solde,COALESCE(subview.date_solde,p_factures.date_solde)),
date_solde_h = COALESCE(subview.date_solde,p_factures.date_solde),
date_solde_0_h = COALESCE(subview.date_solde,p_factures.date_solde_0_h),
date_solde_1_h = COALESCE(subview.date_solde,p_factures.date_solde_1_h),
date_solde_2_h = COALESCE(subview.date_solde,p_factures.date_solde_2_h)
FROM (
SELECT no_facture,
SUM(montant_regle) AS montant_regle,
SUM(montant_regle_0) AS montant_regle_0,
SUM(montant_regle_1) AS montant_regle_1,
SUM(montant_regle_2) AS montant_regle_2,
MAX(CASE WHEN montant_regle <> 0 THEN date_comptable ELSE NULL END) AS date_solde,
MAX(CASE WHEN montant_regle_0 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_0,
MAX(CASE WHEN montant_regle_1 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_1,
MAX(CASE WHEN montant_regle_2 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_2
FROM activite[PX].p_factures_soldes_h
WHERE montant_regle <> 0 OR
montant_regle_0 <> 0 OR
montant_regle_1 <> 0 OR
montant_regle_2 <> 0
GROUP BY 1
) subview
WHERE p_factures.no_facture = subview.no_facture
;
-- Attention, en comptabilisation, prendre en compte le fait que le taux n'est pas toujours applique en comptabilisation
-- On garde le taux facture mais la compta va a l'AMO (car tout est regle sur l'AMO
DROP TABLE IF EXISTS w_factures_ajust_t;
CREATE TEMP TABLE w_factures_ajust_t AS
SELECT no_facture
FROM activite[PX].p_factures
WHERE montant_regle_1_c = montant_comptabilise_c AND
montant_regle_1_c <> 0 AND
(
montant_comptabilise_2_c <> 0 OR
montant_comptabilise_0_c <> 0
)
;
ANALYSE w_factures_ajust_t
;
UPDATE activite[PX].p_factures SET
montant_comptabilise_1_c = montant_comptabilise_1_c + montant_comptabilise_2_c + montant_comptabilise_0_c,
montant_comptabilise_2_c = 0,
montant_comptabilise_0_c = 0
FROM w_factures_ajust_t
WHERE p_factures.no_facture = w_factures_ajust_t.no_facture
;
UPDATE activite[PX].p_factures_lignes_c SET
montant_comptabilise_1 = montant_comptabilise_1 + montant_comptabilise_2 + montant_comptabilise_0,
montant_comptabilise_2 = 0,
montant_comptabilise_0 = 0
FROM w_factures_ajust_t
WHERE p_factures_lignes_c.no_facture = w_factures_ajust_t.no_facture
;
UPDATE activite[PX].p_factures_soldes_c SET
montant_comptabilise_1 = montant_comptabilise_1 + montant_comptabilise_2 + montant_comptabilise_0,
montant_comptabilise_2 = 0,
montant_comptabilise_0 = 0
FROM w_factures_ajust_t
WHERE p_factures_soldes_c.no_facture = w_factures_ajust_t.no_facture
;
]]>
'2099-12-31';
DROP TABLE IF EXISTS w_sejours_total;
CREATE TEMP TABLE w_sejours_total AS
SELECT
p_sejours.no_sejour AS no_sejour,
p_sejours.code_sorti,
p_sejours.date_sortie,
p_sejours.date_groupage,
p_sejours.ghs_id,
MAX(COALESCE(p_factures.date_facture,'20991231')) AS date_facture,
MAX(COALESCE(p_factures.date_expedition,'20991231')) AS date_expedition,
MAX(COALESCE(p_factures.date_solde,'20991231')) AS date_solde,
SUM(COALESCE(p_factures.montant_facture_c,0)) AS montant_facture_c,
SUM(COALESCE(p_factures.montant_facture_h,0)) AS montant_facture_h,
SUM(COALESCE(p_factures.montant_regle_c,0)) AS montant_regle_c,
SUM(COALESCE(p_factures.montant_regle_h,0)) AS montant_regle_h,
SUM(COALESCE(CASE WHEN p_factures.type_facture <> 'P' AND p_factures.type_facture <> 'E' AND p_factures.type_facture <> 'G' THEN 1 ELSE 0 END,0)) AS nb_factures,
SUM(COALESCE(CASE WHEN p_factures.type_facture = '0' THEN 0 ELSE 1 END,0)) AS nb_factures_regularisation,
SUM(COALESCE(p_factures.nb_rejets,0)) AS nb_rejets,
SUM(COALESCE(p_factures.montant_facture_0_c,0)) AS montant_facture_0_c,
SUM(COALESCE(p_factures.montant_facture_0_h,0)) AS montant_facture_0_h,
SUM(COALESCE(p_factures.montant_regle_0_c,0)) AS montant_regle_0_c,
SUM(COALESCE(p_factures.montant_regle_0_h,0)) AS montant_regle_0_h,
MAX(COALESCE(CASE WHEN (p_factures.montant_facture_0_c <> 0 OR p_factures.montant_facture_0_h <> 0) THEN p_factures.date_expedition_0 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_0,
MAX(COALESCE(CASE WHEN p_factures.date_solde_0_c < '2099-12-31' AND p_factures.date_solde_0_c > p_factures.date_solde_0_h THEN p_factures.date_solde_0_c ELSE p_factures.date_solde_0_h END,'20991231' )) AS date_solde_0,
SUM(COALESCE(p_factures.montant_facture_1_c,0)) AS montant_facture_1_c,
SUM(COALESCE(p_factures.montant_facture_1_h,0)) AS montant_facture_1_h,
SUM(COALESCE(p_factures.montant_regle_1_c,0)) AS montant_regle_1_c,
SUM(COALESCE(p_factures.montant_regle_1_h,0)) AS montant_regle_1_h,
MAX(COALESCE(CASE WHEN (p_factures.montant_facture_1_c <> 0 OR p_factures.montant_facture_1_h <> 0) THEN p_factures.date_expedition_1 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_1,
MAX(COALESCE(CASE WHEN p_factures.date_solde_1_c < '2099-12-31' AND p_factures.date_solde_1_c > p_factures.date_solde_1_h THEN p_factures.date_solde_1_c ELSE p_factures.date_solde_1_h END,'20991231' )) AS date_solde_1,
SUM(COALESCE(p_factures.montant_facture_2_c,0)) AS montant_facture_2_c,
SUM(COALESCE(p_factures.montant_facture_2_h,0)) AS montant_facture_2_h,
SUM(COALESCE(p_factures.montant_regle_2_c,0)) AS montant_regle_2_c,
SUM(COALESCE(p_factures.montant_regle_2_h,0)) AS montant_regle_2_h,
MAX(COALESCE(CASE WHEN (p_factures.montant_facture_2_c <> 0 OR p_factures.montant_facture_2_h <> 0) THEN p_factures.date_expedition_2 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_2,
MAX(COALESCE(CASE WHEN p_factures.date_solde_2_c < '2099-12-31' AND p_factures.date_solde_2_c > p_factures.date_solde_2_h THEN p_factures.date_solde_2_c ELSE p_factures.date_solde_2_h END,'20991231' )) AS date_solde_2,
SUM(COALESCE(p_factures.montant_facture_22_c,0)) AS montant_facture_22_c,
SUM(COALESCE(p_factures.montant_facture_22_h,0)) AS montant_facture_22_h,
SUM(COALESCE(p_factures.montant_regle_22_c,0)) AS montant_regle_22_c,
SUM(COALESCE(p_factures.montant_regle_22_h,0)) AS montant_regle_22_h,
MAX(COALESCE(CASE WHEN (p_factures.montant_facture_22_c <> 0 OR p_factures.montant_facture_22_h <> 0) THEN p_factures.date_expedition_22 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_22,
MAX(COALESCE(CASE WHEN p_factures.date_solde_22_c < '2099-12-31' AND p_factures.date_solde_22_c > p_factures.date_solde_22_h THEN p_factures.date_solde_22_c ELSE p_factures.date_solde_22_h END,'20991231' )) AS date_solde_22 ,
SUM(COALESCE(p_factures.montant_comptabilise_c,0)) AS montant_comptabilise_c,
SUM(COALESCE(p_factures.montant_comptabilise_h,0)) AS montant_comptabilise_h,
SUM(COALESCE(p_factures.montant_comptabilise_0_c,0)) AS montant_comptabilise_0_c,
SUM(COALESCE(p_factures.montant_comptabilise_0_h,0)) AS montant_comptabilise_0_h,
SUM(COALESCE(p_factures.montant_comptabilise_1_c,0)) AS montant_comptabilise_1_c,
SUM(COALESCE(p_factures.montant_comptabilise_1_h,0)) AS montant_comptabilise_1_h,
SUM(COALESCE(p_factures.montant_comptabilise_2_c,0)) AS montant_comptabilise_2_c,
SUM(COALESCE(p_factures.montant_comptabilise_2_h,0)) AS montant_comptabilise_2_h,
SUM(COALESCE(p_factures.montant_comptabilise_22_c,0)) AS montant_comptabilise_22_c,
SUM(COALESCE(p_factures.montant_comptabilise_22_h,0)) AS montant_comptabilise_22_h,
SUM(COALESCE(p_factures.montant_comptabilise_budget_global_c,0)) AS montant_comptabilise_budget_global_c,
SUM(COALESCE(p_factures.montant_facture_c_actes_inclus_dans_sejour,0)) AS montant_facture_c_actes_inclus_dans_sejour,
SUM(COALESCE(p_factures.montant_facture_h_actes_inclus_dans_sejour,0)) AS montant_facture_h_actes_inclus_dans_sejour,
0::numeric AS delai_groupage,
0::numeric AS delai_facture,
0::numeric AS delai_expedition,
0::numeric AS delai_solde,
0::numeric AS delai_expedition_0,
0::numeric AS delai_solde_0,
0::numeric AS delai_expedition_1,
0::numeric AS delai_solde_1,
0::numeric AS delai_expedition_2,
0::numeric AS delai_solde_2,
0::numeric AS delai_expedition_22,
0::numeric AS delai_solde_22
FROM activite[PX].p_sejours LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND type_facture <> 'P'
GROUP BY 1,2,3,4,5;
UPDATE w_sejours_total
SET date_groupage = date_facture
WHERE (date_groupage IS null OR date_groupage = '20991231' OR date_groupage = '00010101') AND
date_facture <> '2099-12-31';
UPDATE w_sejours_total SET
date_groupage = CASE WHEN date_groupage > '00010101' THEN date_groupage ELSE '20991231' END,
date_facture = CASE WHEN date_facture> '00010101' THEN date_facture ELSE '20991231' END,
date_expedition = CASE WHEN date_expedition > '00010101' THEN date_expedition ELSE '20991231' END,
date_solde = CASE WHEN date_solde > '00010101' THEN date_solde ELSE '20991231' END,
date_expedition_0 = CASE WHEN date_expedition_0 > '00010101' THEN date_expedition_0 ELSE '20991231' END,
date_solde_0 = CASE WHEN date_solde_0 > '00010101' THEN date_solde_0 ELSE '20991231' END,
date_expedition_1 = CASE WHEN date_expedition_1 > '00010101' THEN date_expedition_1 ELSE '20991231' END,
date_solde_1 = CASE WHEN date_solde_1 > '00010101' THEN date_solde_1 ELSE '20991231' END,
date_expedition_2 = CASE WHEN date_expedition_2 > '00010101' THEN date_expedition_2 ELSE '20991231' END,
date_solde_2 = CASE WHEN date_solde_2 > '00010101' THEN date_solde_2 ELSE '20991231' END,
date_expedition_22 = CASE WHEN date_expedition_22 > '00010101' THEN date_expedition_22 ELSE '20991231' END,
date_solde_22 = CASE WHEN date_solde_22 > '00010101' THEN date_solde_22 ELSE '20991231' END;
UPDATE w_sejours_total SET
delai_groupage = CASE WHEN code_sorti = '1' AND date_groupage > date_sortie AND date_groupage < '2099-12-31' AND ghs_id <> 0
THEN date_groupage - date_sortie ELSE 0 END,
delai_facture = CASE WHEN code_sorti = '1' AND date_facture > date_sortie AND date_facture < '2099-12-31' AND date_facture > date_sortie
THEN date_facture - date_sortie ELSE 0 END,
delai_expedition = CASE WHEN code_sorti = '1' AND date_expedition > date_sortie AND date_facture < '2099-12-31' AND date_expedition < '2099-12-31'
THEN date_expedition - date_sortie ELSE 0 END,
delai_solde = CASE WHEN code_sorti = '1' AND date_solde > date_sortie AND date_facture < '2099-12-31' AND date_solde < '2099-12-31'
THEN date_solde - date_sortie ELSE 0 END,
delai_expedition_0 = CASE WHEN code_sorti = '1' AND date_expedition_0 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_0 < '2099-12-31'
THEN date_expedition_0 - date_sortie ELSE 0 END,
delai_solde_0 = CASE WHEN code_sorti = '1'AND date_solde_0 > date_sortie AND date_facture < '2099-12-31' AND date_solde_0 < '2099-12-31'
THEN date_solde_0 - date_sortie ELSE 0 END,
delai_expedition_1 = CASE WHEN code_sorti = '1' AND date_expedition_1 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_1 < '2099-12-31'
THEN date_expedition_1 - date_sortie ELSE 0 END,
delai_solde_1 = CASE WHEN code_sorti = '1' AND date_solde_1 > date_sortie AND date_facture < '2099-12-31' AND date_solde_1 < '2099-12-31'
THEN date_solde_1 - date_sortie ELSE 0 END,
delai_expedition_2 = CASE WHEN code_sorti = '1' AND date_expedition_2 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_2 < '2099-12-31'
THEN date_expedition_2 - date_sortie ELSE 0 END,
delai_solde_2 = CASE WHEN code_sorti = '1' AND date_solde_2 > date_sortie AND date_facture < '2099-12-31' AND date_solde_2 < '2099-12-31'
THEN date_solde_2 - date_sortie ELSE 0 END,
delai_expedition_22 = CASE WHEN code_sorti = '1' AND date_expedition_22 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_22 < '2099-12-31'
THEN date_expedition_22 - date_sortie ELSE 0 END,
delai_solde_22 = CASE WHEN code_sorti = '1' AND date_solde_22 > date_sortie AND date_facture < '2099-12-31' AND date_solde_22 < '2099-12-31'
THEN date_solde_22 - date_sortie ELSE 0 END;
ALTER TABLE w_sejours_total ADD CONSTRAINT w_sejours_total_pkey PRIMARY KEY(no_sejour);
UPDATE activite[PX].p_sejours SET
date_facture = w_sejours_total.date_facture,
date_expedition = w_sejours_total.date_expedition,
date_solde = w_sejours_total.date_solde,
montant_facture_c = w_sejours_total.montant_facture_c,
montant_facture_h = w_sejours_total.montant_facture_h,
montant_regle_c = w_sejours_total.montant_regle_c,
montant_regle_h = w_sejours_total.montant_regle_h,
nb_factures = w_sejours_total.nb_factures,
nb_factures_regularisation = w_sejours_total.nb_factures_regularisation,
nb_factures_rejet = w_sejours_total.nb_rejets,
montant_facture_0_c = w_sejours_total.montant_facture_0_c,
montant_facture_0_h = w_sejours_total.montant_facture_0_h,
montant_regle_0_c = w_sejours_total.montant_regle_0_c,
montant_regle_0_h = w_sejours_total.montant_regle_0_h,
date_expedition_0 = w_sejours_total.date_expedition_0,
date_solde_0 = w_sejours_total.date_solde_0,
montant_facture_1_c = w_sejours_total.montant_facture_1_c,
montant_facture_1_h = w_sejours_total.montant_facture_1_h,
montant_regle_1_c = w_sejours_total.montant_regle_1_c,
montant_regle_1_h = w_sejours_total.montant_regle_1_h,
date_expedition_1 = w_sejours_total.date_expedition_1,
date_solde_1 = w_sejours_total.date_solde_1,
montant_facture_2_c = w_sejours_total.montant_facture_2_c,
montant_facture_2_h = w_sejours_total.montant_facture_2_h,
montant_regle_2_c = w_sejours_total.montant_regle_2_c,
montant_regle_2_h = w_sejours_total.montant_regle_2_h,
date_expedition_2 = w_sejours_total.date_expedition_2,
date_solde_2 = w_sejours_total.date_solde_2,
montant_facture_22_c = w_sejours_total.montant_facture_22_c,
montant_facture_22_h = w_sejours_total.montant_facture_22_h,
montant_regle_22_c = w_sejours_total.montant_regle_22_c,
montant_regle_22_h = w_sejours_total.montant_regle_22_h,
date_expedition_22 = w_sejours_total.date_expedition_22,
date_solde_22 = w_sejours_total.date_solde_22,
montant_comptabilise_c = w_sejours_total.montant_comptabilise_c,
montant_comptabilise_h = w_sejours_total.montant_comptabilise_h,
montant_comptabilise_0_c = w_sejours_total.montant_comptabilise_0_c,
montant_comptabilise_0_h = w_sejours_total.montant_comptabilise_0_h,
montant_comptabilise_1_c = w_sejours_total.montant_comptabilise_1_c,
montant_comptabilise_1_h = w_sejours_total.montant_comptabilise_1_h,
montant_comptabilise_2_c = w_sejours_total.montant_comptabilise_2_c,
montant_comptabilise_2_h = w_sejours_total.montant_comptabilise_2_h,
montant_comptabilise_22_c = w_sejours_total.montant_comptabilise_22_c,
montant_comptabilise_22_h = w_sejours_total.montant_comptabilise_22_h,
montant_comptabilise_budget_global_c = w_sejours_total.montant_comptabilise_budget_global_c,
montant_facture_c_actes_inclus_dans_sejour = w_sejours_total.montant_facture_c_actes_inclus_dans_sejour,
montant_facture_h_actes_inclus_dans_sejour = w_sejours_total.montant_facture_h_actes_inclus_dans_sejour,
delai_groupage = w_sejours_total.delai_groupage,
delai_facture = w_sejours_total.delai_facture,
delai_expedition = w_sejours_total.delai_expedition,
delai_solde = w_sejours_total.delai_solde,
delai_expedition_0 = w_sejours_total.delai_expedition_0,
delai_solde_0 = w_sejours_total.delai_solde_0,
delai_expedition_1 = w_sejours_total.delai_expedition_1,
delai_solde_1 = w_sejours_total.delai_solde_1,
delai_expedition_2 = w_sejours_total.delai_expedition_2,
delai_solde_2 = w_sejours_total.delai_solde_2,
delai_expedition_22 = w_sejours_total.delai_expedition_22,
delai_solde_22 = w_sejours_total.delai_solde_22
FROM w_sejours_total
WHERE w_sejours_total.no_sejour = p_sejours.no_sejour
AND (
p_sejours.date_facture IS DISTINCT FROM w_sejours_total.date_facture OR
p_sejours.date_expedition IS DISTINCT FROM w_sejours_total.date_expedition OR
p_sejours.date_solde IS DISTINCT FROM w_sejours_total.date_solde OR
p_sejours.montant_facture_c IS DISTINCT FROM w_sejours_total.montant_facture_c OR
p_sejours.montant_facture_h IS DISTINCT FROM w_sejours_total.montant_facture_h OR
p_sejours.montant_regle_c IS DISTINCT FROM w_sejours_total.montant_regle_c OR
p_sejours.montant_regle_h IS DISTINCT FROM w_sejours_total.montant_regle_h OR
p_sejours.nb_factures IS DISTINCT FROM w_sejours_total.nb_factures OR
p_sejours.nb_factures_regularisation IS DISTINCT FROM w_sejours_total.nb_factures_regularisation OR
p_sejours.nb_factures_rejet IS DISTINCT FROM w_sejours_total.nb_rejets OR
p_sejours.montant_facture_0_c IS DISTINCT FROM w_sejours_total.montant_facture_0_c OR
p_sejours.montant_facture_0_h IS DISTINCT FROM w_sejours_total.montant_facture_0_h OR
p_sejours.montant_regle_0_c IS DISTINCT FROM w_sejours_total.montant_regle_0_c OR
p_sejours.montant_regle_0_h IS DISTINCT FROM w_sejours_total.montant_regle_0_h OR
p_sejours.date_expedition_0 IS DISTINCT FROM w_sejours_total.date_expedition_0 OR
p_sejours.date_solde_0 IS DISTINCT FROM w_sejours_total.date_solde_0 OR
p_sejours.montant_facture_1_c IS DISTINCT FROM w_sejours_total.montant_facture_1_c OR
p_sejours.montant_facture_1_h IS DISTINCT FROM w_sejours_total.montant_facture_1_h OR
p_sejours.montant_regle_1_c IS DISTINCT FROM w_sejours_total.montant_regle_1_c OR
p_sejours.montant_regle_1_h IS DISTINCT FROM w_sejours_total.montant_regle_1_h OR
p_sejours.date_expedition_1 IS DISTINCT FROM w_sejours_total.date_expedition_1 OR
p_sejours.date_solde_1 IS DISTINCT FROM w_sejours_total.date_solde_1 OR
p_sejours.montant_facture_2_c IS DISTINCT FROM w_sejours_total.montant_facture_2_c OR
p_sejours.montant_facture_2_h IS DISTINCT FROM w_sejours_total.montant_facture_2_h OR
p_sejours.montant_regle_2_c IS DISTINCT FROM w_sejours_total.montant_regle_2_c OR
p_sejours.montant_regle_2_h IS DISTINCT FROM w_sejours_total.montant_regle_2_h OR
p_sejours.date_expedition_2 IS DISTINCT FROM w_sejours_total.date_expedition_2 OR
p_sejours.date_solde_2 IS DISTINCT FROM w_sejours_total.date_solde_2 OR
p_sejours.montant_facture_22_c IS DISTINCT FROM w_sejours_total.montant_facture_22_c OR
p_sejours.montant_facture_22_h IS DISTINCT FROM w_sejours_total.montant_facture_22_h OR
p_sejours.montant_regle_22_c IS DISTINCT FROM w_sejours_total.montant_regle_22_c OR
p_sejours.montant_regle_22_h IS DISTINCT FROM w_sejours_total.montant_regle_22_h OR
p_sejours.date_expedition_22 IS DISTINCT FROM w_sejours_total.date_expedition_22 OR
p_sejours.date_solde_22 IS DISTINCT FROM w_sejours_total.date_solde_22 OR
p_sejours.montant_comptabilise_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_c OR
p_sejours.montant_comptabilise_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_h OR
p_sejours.montant_comptabilise_0_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_0_c OR
p_sejours.montant_comptabilise_0_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_0_h OR
p_sejours.montant_comptabilise_1_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_1_c OR
p_sejours.montant_comptabilise_1_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_1_h OR
p_sejours.montant_comptabilise_2_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_2_c OR
p_sejours.montant_comptabilise_2_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_2_h OR
p_sejours.montant_comptabilise_22_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_22_c OR
p_sejours.montant_comptabilise_22_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_22_h OR
p_sejours.montant_comptabilise_budget_global_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_budget_global_c OR
p_sejours.montant_facture_c_actes_inclus_dans_sejour IS DISTINCT FROM w_sejours_total.montant_facture_c_actes_inclus_dans_sejour OR
p_sejours.montant_facture_h_actes_inclus_dans_sejour IS DISTINCT FROM w_sejours_total.montant_facture_h_actes_inclus_dans_sejour OR
p_sejours.delai_groupage IS DISTINCT FROM w_sejours_total.delai_groupage OR
p_sejours.delai_facture IS DISTINCT FROM w_sejours_total.delai_facture OR
p_sejours.delai_expedition IS DISTINCT FROM w_sejours_total.delai_expedition OR
p_sejours.delai_solde IS DISTINCT FROM w_sejours_total.delai_solde OR
p_sejours.delai_expedition_0 IS DISTINCT FROM w_sejours_total.delai_expedition_0 OR
p_sejours.delai_solde_0 IS DISTINCT FROM w_sejours_total.delai_solde_0 OR
p_sejours.delai_expedition_1 IS DISTINCT FROM w_sejours_total.delai_expedition_1 OR
p_sejours.delai_solde_1 IS DISTINCT FROM w_sejours_total.delai_solde_1 OR
p_sejours.delai_expedition_2 IS DISTINCT FROM w_sejours_total.delai_expedition_2 OR
p_sejours.delai_solde_2 IS DISTINCT FROM w_sejours_total.delai_solde_2 OR
p_sejours.delai_expedition_22 IS DISTINCT FROM w_sejours_total.delai_expedition_22 OR
p_sejours.delai_solde_22 IS DISTINCT FROM w_sejours_total.delai_solde_22
);
]]>
= '[ENV_ADM_ANNEEDEBUT]0101' AND
MC_CODJRN LIKE 'VENTE%' AND
MC_NUMCPT LIKE '41%'
GROUP BY 1
;
TRUNCATE activite[PX].p_factures_comptables;
INSERT INTO activite[PX].p_factures_comptables(
no_facture,
date_comptable,
montant_ventes_c,
montant_reglements_c,
montant_ventes_h,
montant_reglements_h
)
SELECT MC_NUMFAC,
date(date_trunc('month',MC_PERIODE)) AS date_comptable,
SUM(CASE WHEN MC_CATECR = 'E' THEN MC_MTDEBIT - MC_MTCREDIT ELSE 0 END) AS montant_ventes_c,
0::numeric AS montant_reglements_c,
SUM(CASE WHEN MC_CATECR = 'H' THEN MC_MTDEBIT - MC_MTCREDIT ELSE 0 END) AS montant_ventes_h,
0::numeric AS montant_reglements_h
FROM prod_edlxplore.h_mvtcpt
WHERE date(MC_PERIODE) >= '20180101' AND
MC_CODJRN LIKE 'VENTE%' AND
MC_NUMCPT LIKE '41%'
GROUP BY 1,2
;
ANALYSE activite[PX].p_factures_comptables
;
]]>