src: |
  SELECT p_sejours.finess,
      p_sejours.provider_id,
      p_sejours.no_sejour,
      p_sejours.oid AS sejour_id,
      p_sejours.no_patient,
      p_sejours.code_sexe,
          CASE
              WHEN p_sejours.code_sexe = '1'::bpchar THEN 'M'::bpchar
              WHEN p_sejours.code_sexe = '2'::bpchar THEN 'F'::bpchar
              ELSE p_sejours.code_sexe
          END AS sexe_texte_court,
      p_sejours.age,
      p_sejours.code_postal_id,
      p_sejours.code_prevu,
      p_sejours.type_sejour,
      p_sejours.forme_activite_id,
      p_sejours.filiere_soin_principale_id,
      p_sejours.est_budget_global,
      to_char(p_sejours.date_entree::timestamp with time zone, 'YYYYMM'::text)::numeric AS mois_entree,
      p_sejours.date_entree,
      p_sejours.heure_entree,
      p_sejours.mode_entree,
      p_sejours.provenance,
      to_char(p_sejours.date_sortie::timestamp with time zone, 'YYYYMM'::text)::numeric AS mois_sortie,
      p_sejours.code_sorti,
      p_sejours.date_sortie,
      p_sejours.heure_sortie,
      p_sejours.mode_sortie,
      p_sejours.destination,
      p_sejours.code_cp_demandee,
      p_sejours.ghs_id,
      p_sejours.ghm_id,
      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.medecin_sejour_id AS medecin_adm_sejour_id,
      p_sejours.lieu_sortie_id,
      to_char(
          CASE
              WHEN p_sejours.ghs_id > 0 OR p_sejours.gme_id > 0 THEN p_sejours.date_groupage
              ELSE '2099-12-31'::date
          END::timestamp with time zone, 'YYYYMM'::text)::numeric AS mois_groupage,
          CASE
              WHEN p_sejours.ghs_id > 0 OR p_sejours.gme_id > 0 THEN p_sejours.date_groupage
              ELSE '2099-12-31'::date
          END AS date_groupage,
      p_sejours.delai_groupage,
          CASE
              WHEN p_sejours.type_sejour <> ALL (ARRAY['1'::bpchar::text, '2'::bpchar::text, '5'::bpchar::text, '6'::bpchar::text]) THEN 0
              WHEN p_sejours.code_sorti <> 1::numeric OR p_sejours.type_pmsi <> '1'::bpchar OR p_sejours.date_groupage < '2099-12-31'::date AND p_sejours.ghs_id > 0 OR p_sejours.date_facture < '2099-12-31'::date THEN 0
              ELSE 1
          END AS nb_non_groupe,
      p_sejours.est_sans_facturation,
      to_char(p_sejours.date_facture::timestamp with time zone, 'YYYYMM'::text)::numeric AS mois_facture,
      p_sejours.date_facture,
          CASE
              WHEN p_sejours.est_sans_facturation = '1'::bpchar THEN 0
              WHEN p_sejours.date_facture < '2099-12-31'::date THEN 1
              ELSE 0
          END AS nb_delai_facture,
          CASE
              WHEN p_sejours.est_sans_facturation = '1'::bpchar THEN 0::numeric
              WHEN p_sejours.date_facture < '2099-12-31'::date THEN p_sejours.delai_facture
              ELSE 0::numeric
          END AS delai_facture,
          CASE
              WHEN p_sejours.est_sans_facturation = '1'::bpchar THEN 0
              WHEN p_sejours.date_facture = '2099-12-31'::date THEN 1
              ELSE 0
          END AS nb_non_facture,
      to_char(p_sejours.date_expedition::timestamp with time zone, 'YYYYMM'::text)::numeric AS mois_expedition,
      p_sejours.date_expedition,
          CASE
              WHEN p_sejours.date_facture < '2099-12-31'::date AND p_sejours.date_expedition < '2099-12-31'::date THEN 1
              ELSE 0
          END AS nb_delai_expedition,
          CASE
              WHEN p_sejours.date_facture = '2099-12-31'::date THEN 1
              WHEN p_sejours.date_expedition_1 = '2099-12-31'::date AND (p_sejours.montant_comptabilise_1_c <> p_sejours.montant_regle_1_c OR p_sejours.montant_comptabilise_1_h <> p_sejours.montant_regle_1_h) THEN 1
              WHEN p_sejours.date_expedition_2 = '2099-12-31'::date AND (p_sejours.montant_comptabilise_2_c <> p_sejours.montant_regle_2_c OR p_sejours.montant_comptabilise_2_h <> p_sejours.montant_regle_2_h) THEN 1
              WHEN p_sejours.date_expedition_22 = '2099-12-31'::date AND (p_sejours.montant_comptabilise_22_c <> p_sejours.montant_regle_22_c OR p_sejours.montant_comptabilise_22_h <> p_sejours.montant_regle_22_h) THEN 1
              ELSE 0
          END AS nb_non_expedie,
          CASE
              WHEN p_sejours.date_facture = '2099-12-31'::date OR p_sejours.date_expedition_1 = '2099-12-31'::date THEN p_sejours.montant_comptabilise_1_c + p_sejours.montant_comptabilise_1_h - p_sejours.montant_regle_1_c - p_sejours.montant_regle_1_h
              ELSE 0::numeric
          END +
          CASE
              WHEN p_sejours.date_facture = '2099-12-31'::date OR p_sejours.date_expedition_2 = '2099-12-31'::date THEN p_sejours.montant_comptabilise_2_c + p_sejours.montant_comptabilise_2_h - p_sejours.montant_regle_2_c - p_sejours.montant_regle_2_h
              ELSE 0::numeric
          END +
          CASE
              WHEN p_sejours.date_facture = '2099-12-31'::date OR p_sejours.date_expedition_22 = '2099-12-31'::date THEN p_sejours.montant_comptabilise_22_c + p_sejours.montant_comptabilise_22_h - p_sejours.montant_regle_22_c - p_sejours.montant_regle_22_h
              ELSE 0::numeric
          END AS montant_non_expedie,
          CASE
              WHEN p_sejours.date_facture < '2099-12-31'::date OR p_sejours.date_expedition < '2099-12-31'::date THEN p_sejours.delai_expedition
              ELSE 0::numeric
          END AS delai_expedition,
      to_char(p_sejours.date_solde::timestamp with time zone, 'YYYYMM'::text)::numeric AS mois_solde,
      p_sejours.date_solde,
          CASE
              WHEN p_sejours.date_facture < '2099-12-31'::date AND p_sejours.date_solde < '2099-12-31'::date AND p_sejours.montant_regle_c = p_sejours.montant_comptabilise_c AND p_sejours.montant_regle_h = p_sejours.montant_comptabilise_h THEN 1
              ELSE 0
          END AS nb_delai_solde,
          CASE
              WHEN p_sejours.date_facture = '2099-12-31'::date OR p_sejours.montant_regle_c <> p_sejours.montant_comptabilise_c OR p_sejours.montant_regle_h <> p_sejours.montant_comptabilise_h THEN 1
              ELSE 0
          END AS nb_non_solde,
          CASE
              WHEN p_sejours.date_facture < '2099-12-31'::date AND p_sejours.montant_regle_c = p_sejours.montant_comptabilise_c AND p_sejours.montant_regle_h = p_sejours.montant_comptabilise_h THEN 0::numeric
              ELSE p_sejours.montant_comptabilise_c + p_sejours.montant_comptabilise_h - p_sejours.montant_regle_c - p_sejours.montant_regle_h
          END AS montant_non_solde,
          CASE
              WHEN p_sejours.date_facture < '2099-12-31'::date AND p_sejours.date_solde < '2099-12-31'::date AND p_sejours.montant_regle_c = p_sejours.montant_comptabilise_c AND p_sejours.montant_regle_h = p_sejours.montant_comptabilise_h THEN p_sejours.delai_solde
              ELSE 0::numeric
          END AS delai_solde,
      p_sejours.montant_facture_c,
      p_sejours.montant_facture_0_c,
      p_sejours.montant_facture_1_c,
      p_sejours.montant_facture_2_c,
      p_sejours.montant_facture_22_c,
      p_sejours.montant_facture_h,
      p_sejours.montant_facture_0_h,
      p_sejours.montant_facture_1_h,
      p_sejours.montant_facture_2_h,
      p_sejours.montant_facture_22_h,
      p_sejours.montant_facture_c_actes_inclus_dans_sejour,
      p_sejours.montant_facture_h_actes_inclus_dans_sejour,
      p_sejours.montant_comptabilise_c,
      p_sejours.montant_comptabilise_h,
      p_sejours.montant_comptabilise_budget_global_c,
      p_sejours.montant_regle_c,
      p_sejours.montant_regle_h,
      1 AS nb_sejours,
      p_sejours.nb_factures,
      p_sejours.nb_factures_regularisation,
      p_sejours.nb_factures_rejet,
      0 AS no_oid,
          CASE
              WHEN p_sejours.type_sejour = ANY (ARRAY['3'::bpchar::text, '5'::bpchar::text]) THEN 0
              WHEN p_sejours.date_sortie <> '2099-12-31'::date AND p_sejours.date_sortie <= date(now()) AND p_sejours.date_sortie IS NOT NULL AND p_sejours.date_sortie >= p_sejours.date_entree THEN p_sejours.date_sortie - p_sejours.date_entree
              WHEN p_sejours.type_sejour = '1'::text AND p_sejours.date_entree > '1970-01-01'::date AND date(now()) > p_sejours.date_entree THEN date(now()) - p_sejours.date_entree
              ELSE 0
          END AS duree,
      p_sejours.gme_id,
      p_sejours.risque_id,
      t_etat_sejour.oid AS etat_sejour_id,
      t_etat_sejour.code AS etat_sejour_code,
      t_etat_sejour.texte AS etat_sejour_texte,
          CASE
              WHEN t_ghm_c.ghm_code ~~* '28%'::text THEN '1'::text
              WHEN t_ghm_c.severite_ghm_code = 'J'::bpchar THEN '2'::text
              WHEN t_ghm_c.severite_ghm_code = 'T'::bpchar THEN '3'::text
              WHEN t_ghm_c.severite_ghm_code = 'Z'::bpchar THEN '4'::text
              WHEN t_ghm_c.severite_ghm_code = '1'::bpchar THEN '5'::text
              WHEN t_ghm_c.severite_ghm_code = ANY (ARRAY['A'::bpchar, 'B'::bpchar, 'C'::bpchar, 'D'::bpchar, 'E'::bpchar]) THEN '6'::text
              WHEN
              CASE
                  WHEN p_sejours.date_sortie <> '2099-12-31'::date AND p_sejours.date_sortie <= date(now()) AND p_sejours.date_sortie IS NOT NULL AND p_sejours.date_sortie >= p_sejours.date_entree THEN p_sejours.date_sortie - p_sejours.date_entree
                  ELSE 0
              END::numeric > 2::numeric THEN '7'::text
              WHEN t_ghm_c.severite_ghm_code = '*'::bpchar THEN '8'::text
              ELSE NULL::text
          END AS severite_cti_code,
          CASE
              WHEN t_ghm_c.ghm_code ~~* '28%'::text THEN 'Séances'::text
              WHEN t_ghm_c.severite_ghm_code = 'J'::bpchar THEN 'Sévérité J'::text
              WHEN t_ghm_c.severite_ghm_code = 'T'::bpchar THEN 'Sévérité T'::text
              WHEN t_ghm_c.severite_ghm_code = 'Z'::bpchar THEN 'Sévérité Z'::text
              WHEN t_ghm_c.severite_ghm_code = '1'::bpchar THEN 'Sévérité 1'::text
              WHEN t_ghm_c.severite_ghm_code = ANY (ARRAY['A'::bpchar, 'B'::bpchar, 'C'::bpchar, 'D'::bpchar, 'E'::bpchar]) THEN 'Sévérité ABCDE'::text
              WHEN
              CASE
                  WHEN p_sejours.date_sortie <> '2099-12-31'::date AND p_sejours.date_sortie <= date(now()) AND p_sejours.date_sortie IS NOT NULL AND p_sejours.date_sortie >= p_sejours.date_entree THEN p_sejours.date_sortie - p_sejours.date_entree
                  ELSE 0
              END::numeric > 2::numeric THEN 'DS > 2 nuits'::text
              WHEN t_ghm_c.severite_ghm_code = '*'::bpchar THEN 'Non PMSI'::text
              ELSE NULL::text
          END AS severite_cti_texte,
          CASE
              WHEN t_ghm_c.ghm_code ~~* '28%'::text THEN '1'::text
              WHEN t_ghm_c.severite_ghm_code = 'J'::bpchar THEN '2'::text
              WHEN t_ghm_c.severite_ghm_code = 'T'::bpchar THEN '3'::text
              WHEN t_ghm_c.severite_ghm_code = 'Z'::bpchar THEN '4'::text
              WHEN t_ghm_c.severite_ghm_code = '1'::bpchar THEN '5'::text
              WHEN t_ghm_c.severite_ghm_code = ANY (ARRAY['A'::bpchar, 'B'::bpchar, 'C'::bpchar, 'D'::bpchar, 'E'::bpchar]) THEN '6'::text
              WHEN
              CASE
                  WHEN p_sejours.date_sortie <> '2099-12-31'::date AND p_sejours.date_sortie <= date(now()) AND p_sejours.date_sortie IS NOT NULL AND p_sejours.date_sortie >= p_sejours.date_entree THEN p_sejours.date_sortie - p_sejours.date_entree
                  ELSE 0
              END::numeric > 2::numeric THEN '7'::text
              WHEN t_ghm_c.severite_ghm_code = '*'::bpchar THEN '8'::text
              ELSE NULL::text
          END AS severite_cti_id,
      p_sejours.medecin_traitant_id,
      p_sejours.traitement_epmsi_id,
      p_sejours.ghmgme_id,
      p_sejours.type_hospi_pmsi_id,
      p_sejours.gmt_id,
      t_gmt_c.gmt_code
     FROM activite.p_sejours
       LEFT JOIN activite.t_etat_sejour ON p_sejours.etat_sejour = t_etat_sejour.code
       JOIN activite.t_ghm_c ON p_sejours.ghm_id = t_ghm_c.ghm_id
       LEFT JOIN activite.t_gmt_c ON p_sejours.gmt_id = t_gmt_c.gmt_id
    WHERE p_sejours.etat = ''::bpchar;