You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

575 lines
21 KiB

<?xml version="1.0" encoding="ISO-8859-15"?>
<VUE name="ACTI000100"
label="Activité. Justificatif chambres particulières"
title="= 'Justificatif chambres particulières (' + SELECT.PERIODE_LABEL + ' à ' + SELECT.TOPERIODE_LABEL + ')'"
database="iCTI" swf="*CTI_view1"
softCode="iCTI_activite"
globals="ACTI_globals.XML"
componentsFile="ACTI_components.XML">
<VIEWPROPERTIES>
<PROPERTYx dataLink="VIEWPROPERTIES" nameField="name" valueField="value" />
<PROPERTY name="JOURNEES_FIELD" value="[EVAL
$field = 'nb_jours';
if ('[QJMUT]' == 'd') {$field = $field . '_d';}
else {
if ('[QJMUT]' == 'f') {$field = $field . '_f';}
else {
if ('[QJMUT]' == '12') {$field = $field . '_12';}
else {
$field = $field . '_f';
}
}
}
return $field;
EVAL]" />
<PROPERTY name="CP_FIELD" value="[EVAL
$field = 'nb_jours_cp';
if ('[QJMUT]' == 'd') {$field = $field . '_d';}
else {
if ('[QJMUT]' == 'f') {$field = $field . '_f';}
else {
if ('[QJMUT]' == '12') {$field = $field . '_12';}
else {
$field = $field . '_f';
}
}
}
return $field;
EVAL]" />
<PROPERTY name="HAVING_CLAUSE" value="[EVAL
$clause = '';
if ('[DATA]' == 'ECARTFF') {$clause = 'nb_jours_js_non_inclus';}
return $clause;
EVAL]" />
<PROPERTY name="DATA_WHERE_CLAUSE">
<value><![CDATA[[EVAL
$clause = "'1' = '1'";
if ('[DATA]' == 'ECARTFF') {
$clause = "ecart_cp_facturables_facturees <> 0";
}
if ('[DATA]' == 'CPETNONCP') {
$clause = "nb_non_cp_avec_sejour_cp <> 0";
}
if ('[DATA]' == 'CPSANSDMD') {
$clause = "nb_cp_sans_demande <> 0";
}
if ('[DATA]' == 'DMDSANSCP') {
$clause = "nb_non_cp_demandees_sortis + nb_non_cp_demandees_presents <> 0";
}
if ('[DATA]' == 'DMDSANSCPS') {
$clause = "nb_non_cp_demandees_sortis <> 0";
}
if ('[DATA]' == 'DMDSANSCPP') {
$clause = "nb_non_cp_demandees_presents <> 0";
}
return $clause;
EVAL]]]></value>
</PROPERTY>
<PROPERTY name="DATA_OTHER_WHERE_CLAUSE">
<value><![CDATA[[EVAL
$clause = "'1' = '1'";
if ('[DATA]' == '-1') {
$clause = "'1' <> '1'";
}
return $clause;
EVAL]]]></value>
</PROPERTY>
</VIEWPROPERTIES>
<SELECTIONS label="Paramètres de l'analyse" displayText="= var display:String = '';
if (SELECT.DATA != '-1') {
display = display + 'Données : #B#' + SELECT.DATA_LABEL + '#/B#';
}
return display;
"
>
<GROUP>
<FIELD name="ALIAS_PERIODE" label="" UI="combo" width="220" default="CUM_LAST_MONTH" tree="true" globalListProvider="ALIAS_PERIODE" />
<FIELD name="PERIODE" label="Période" UI="combo" tree="true" width="200" default="2009-01-01" globalListProvider="DATE_DEBUT" >
</FIELD>
<FIELD name="TOPERIODE" label="à" UI="combo" tree="true" width="200" default="2009-01-31" globalListProvider="DATE_FIN" >
</FIELD>
</GROUP>
<GROUP label="Données">
<FIELD name="DATA" label="" UI="combo" width="300" default="-1" >
<OPTION label="Toutes les données" data="-1" />
<OPTION label="Ecarts Facturable / facturées" data="ECARTFF" />
<OPTION label="Séjours avec CP et non CP" data="CPETNONCP" />
<OPTION label="Séjours avec CP demandée et sans CP occupée" data="DMDSANSCP" />
<OPTION label="Séjours sortis avec CP demandée et sans CP occupée" data="DMDSANSCPS" />
<OPTION label="Séjours présents avec CP demandée et sans CP occupée" data="DMDSANSCPP" />
<OPTION label="Séjours avec CP et sans demande" data="CPSANSDMD" />
</FIELD>
</GROUP>
</SELECTIONS>
<SELECTIONS label="Modes de calcul" displayText="= var display:String = '';
display = display + 'Modes de calcul : #B#' + VIEW.OPTADM_DAYOUT + '. ' + SELECT.QJMUT_LABEL + '#/B#';
return display;
"
>
<GROUP label="Mode">
<FIELD name="QJMUT" label="" UI="combo" width="300" default="f" >
<OPTION data="d" label="Si mutation, journée affectée à la premiere localisation" />
<OPTION data="f" label="Si mutation, journée affectée à la dernière localisation" />
<OPTION data="12" label="Si mutation, journée affectée à la localisation occupée à 12h" />
<OPTION data="prorata" label="Si mutation, journée affectée au prorata du temps passé"/>
</FIELD>
</GROUP>
</SELECTIONS>
<SELECTIONS componentName="FILTRES_MOUVEMENTS_SELECTIONS" />
<SELECTIONS componentName="FILTRES_SEJOURS_SELECTIONS" />
<QUERIES>
<QUERY label="">
<SQL optimizer="V_SEJOURS_X" optimizer2="V_MOUVEMENTS_SEJOUR_X">
<select><![CDATA[
DROP TABLE IF EXISTS acti000100_sejcp;
CREATE TEMP TABLE acti000100_sejcp AS
SELECT v_sejours_1.no_sejour
FROM #V_SEJOURS_X#
JOIN #V_MOUVEMENTS_SEJOUR_X# ON v_mouvements_sejour_2.no_sejour = v_sejours_1.no_sejour
WHERE
date BETWEEN '[PERIODE]' AND '[TOPERIODE]' AND
v_sejours_1.type_sejour IN ('1', '2') AND
[VIEW.CP_FIELD] <> 0 AND est_mouvement_previsionnel <> '1'
[VIEW.SEJOURS_SELECT]
GROUP BY 1;
ALTER TABLE acti000100_sejcp ADD CONSTRAINT acti000100_sejcp_pkey PRIMARY KEY(no_sejour);
]]></select>
</SQL>
<SQL optimizer="V_SEJOURS_X" optimizer2="V_FACTURES_LIGNES_C_X">
<select><![CDATA[
DROP TABLE IF EXISTS acti000100_faccp;
CREATE TEMP TABLE acti000100_faccp AS
SELECT v_sejours_1.no_sejour,
v_factures_lignes_c_4.date_fin,
CASE WHEN SUM(nb_rubrique) > 0 THEN 1 ELSE 0 END AS nb_cp_facturees,
SUM(montant_facture + montant_encours) AS montant_cp_facturees,
array_agg(DISTINCT rubrique_facturation_id) as rubriques
FROM #V_FACTURES_LIGNES_C_X#
JOIN #V_SEJOURS_X# ON v_sejours_1.no_sejour = v_factures_lignes_c_4.no_sejour
WHERE
v_factures_lignes_c_4.date_fin BETWEEN '[PERIODE]' AND '[TOPERIODE]' AND
rubrique_facturation_id IN (SELECT to_id FROM activite.v_listes_3 WHERE liste_code = 'CTI_SHO_R')
[VIEW.SEJOURS_SELECT]
GROUP BY 1,2;
ALTER TABLE acti000100_faccp ADD CONSTRAINT acti000100_faccp_pkey PRIMARY KEY(no_sejour, date_fin);
]]></select>
</SQL>
<SQL optimizer="V_SEJOURS_X" optimizer2="V_MOUVEMENTS_SEJOUR_X">
<select><![CDATA[
DROP TABLE IF EXISTS acti000100;
CREATE TEMP TABLE acti000100 AS
SELECT
v_mouvements_sejour_2.no_sejour,
nom || ' ' || prenom AS nom,
p_patients.date_naissance,
date_entree,
CASE WHEN date_sortie<> '2099-12-31' THEN to_char(date_sortie,'YYYY-MM-DD') ELSE '' END::text AS date_sortie,
CASE WHEN date_sortie<> '2099-12-31' THEN heure_sortie / 10000 ELSE 0 END AS heure_sortie,
CASE WHEN v_sejours_1.date_sortie<> '2099-12-31' THEN v_sejours_1.date_sortie - v_sejours_1.date_entree ELSE 0 END AS duree_sejour,
lieu_etage_code,
lieu_service_code,
medecin_sejour_nom,
SUM([VIEW.JOURNEES_FIELD] + nb_ambulatoires) AS nb_jou,
SUM(CASE WHEN v_sejours_1.code_cp_demandee = '1' THEN [VIEW.CP_FIELD] ELSE 0 END) AS nb_cp_avec_demande,
SUM(CASE WHEN v_sejours_1.code_cp_demandee <> '1' THEN [VIEW.CP_FIELD] ELSE 0 END) AS nb_cp_sans_demande,
COALESCE(COUNT(DISTINCT CASE WHEN acti000100_sejcp.no_sejour IS NOT NULL AND [VIEW.JOURNEES_FIELD] + nb_ambulatoires <> 0 THEN v_sejours_1.no_sejour::text || date::text ELSE NULl END),0)
- COALESCE(SUM([VIEW.CP_FIELD]),0) AS nb_non_cp_avec_sejour_cp,
COALESCE(COUNT(DISTINCT CASE WHEN acti000100_sejcp.no_sejour IS NULL AND v_sejours_1.code_cp_demandee = '1' AND v_sejours_1.code_sorti = '1' AND [VIEW.JOURNEES_FIELD] + nb_ambulatoires <> 0 THEN v_sejours_1.no_sejour::text || date::text ELSE NULL END),0) AS nb_non_cp_demandees_sortis,
COALESCE(COUNT(DISTINCT CASE WHEN acti000100_sejcp.no_sejour IS NULL AND v_sejours_1.code_cp_demandee = '1' AND v_sejours_1.code_sorti <> '1' AND [VIEW.JOURNEES_FIELD] + nb_ambulatoires <> 0 THEN v_sejours_1.no_sejour::text || date::text ELSE NULL END),0) AS nb_non_cp_demandees_presents,
COALESCE(COUNT(DISTINCT CASE WHEN acti000100_sejcp.no_sejour IS NULL AND v_sejours_1.code_cp_demandee <> '1' AND [VIEW.JOURNEES_FIELD] + nb_ambulatoires <> 0 THEN v_sejours_1.no_sejour::text || date::text ELSE NULL END),0) AS nb_non_cp_non_demandees,
COUNT(DISTINCT CASE WHEN nb_cp_facturees > 0 THEN v_sejours_1.no_sejour||date ELSE NULL END) AS nb_cp_facturees,
COALESCE(SUM(CASE WHEN v_sejours_1.code_cp_demandee = '1' THEN [VIEW.CP_FIELD] ELSE 0 END),0) - COUNT(DISTINCT CASE WHEN nb_cp_facturees > 0 THEN v_sejours_1.no_sejour||date ELSE NULL END) AS ecart_cp_facturables_facturees,
array_length(base.cti_array_uniq(base.cti_group_array4(acti000100_faccp.rubriques)), 1) as nb_rubriques
,array_to_string(array_agg(distinct v_mouvements_sejour_2.lieu_lit_code), ' | '::text, '*'::text)
FROM #V_SEJOURS_X#
JOIN #V_MOUVEMENTS_SEJOUR_X# ON v_mouvements_sejour_2.no_sejour = v_sejours_1.no_sejour
JOIN activite.p_patients ON v_sejours_1.no_patient = p_patients.no_patient
LEFT JOIN acti000100_sejcp ON acti000100_sejcp.no_sejour = v_sejours_1.no_sejour
LEFT JOIN acti000100_faccp ON acti000100_faccp.no_sejour = v_mouvements_sejour_2.no_sejour AND
acti000100_faccp.date_fin = v_mouvements_sejour_2.date
WHERE
date BETWEEN '[PERIODE]' AND '[TOPERIODE]' AND
(v_sejours_1.type_sejour IN ('1', '2') AND [VIEW.JOURNEES_FIELD] + nb_ambulatoires <> 0 OR
nb_cp_facturees IS NOT NULL AND nb_cp_facturees <> 0)
[VIEW.SEJOURS_SELECT]
[VIEW.MOUVEMENTS_SELECT] AND est_mouvement_previsionnel <> '1'
GROUP BY 1,2,3,4,5,6,7,8,9,10
ORDER BY no_sejour
]]></select>
</SQL>
<SQL optimizer="V_SEJOURS_X" optimizer2="V_MOUVEMENTS_SEJOUR_X">
<select><![CDATA[
(SELECT
'1'::text AS LVL,
acti000100.*
FROM acti000100
WHERE [VIEW.DATA_WHERE_CLAUSE]
ORDER BY no_sejour)
UNION ALL
(SELECT
'-9999997'::text AS LVL,
'Sélection',
COUNT(DISTINCT no_sejour)::text || ' séjours',
null,
null,
null,
0,
0,
'',
'',
'',
SUM(nb_jou),
SUM(nb_cp_avec_demande),
SUM(nb_cp_sans_demande),
SUM(nb_non_cp_avec_sejour_cp),
SUM(nb_non_cp_demandees_sortis),
SUM(nb_non_cp_demandees_presents),
SUM(nb_non_cp_non_demandees),
SUM(nb_cp_facturees),
SUM(ecart_cp_facturables_facturees),
NULL,
''::text
FROM acti000100
WHERE [VIEW.DATA_WHERE_CLAUSE]
HAVING [VIEW.DATA_OTHER_WHERE_CLAUSE]
)
UNION ALL
(SELECT
'-9999998'::text AS LVL,
'Autres',
COUNT(DISTINCT no_sejour)::text || ' séjours',
null,
null,
null,
0,
0,
'',
'',
'',
SUM(nb_jou),
SUM(nb_cp_avec_demande),
SUM(nb_cp_sans_demande),
SUM(nb_non_cp_avec_sejour_cp),
SUM(nb_non_cp_demandees_sortis),
SUM(nb_non_cp_demandees_presents),
SUM(nb_non_cp_non_demandees),
SUM(nb_cp_facturees),
SUM(ecart_cp_facturables_facturees),
NULL,
''::text
FROM acti000100
WHERE NOT [VIEW.DATA_WHERE_CLAUSE]
HAVING [VIEW.DATA_OTHER_WHERE_CLAUSE]
)
UNION ALL
(SELECT
'-9999999'::text AS LVL,
'TOTAL',
COUNT(DISTINCT no_sejour)::text || ' séjours',
null,
null,
null,
0,
0,
'',
'',
'',
SUM(nb_jou),
SUM(nb_cp_avec_demande),
SUM(nb_cp_sans_demande),
SUM(nb_non_cp_avec_sejour_cp),
SUM(nb_non_cp_demandees_sortis),
SUM(nb_non_cp_demandees_presents),
SUM(nb_non_cp_non_demandees),
SUM(nb_cp_facturees),
SUM(ecart_cp_facturables_facturees),
NULL,
''::text
FROM acti000100
)
]]></select>
<FIELDS>
<FIELD name="LVL" />
<FIELD name="SEJ" />
<FIELD name="NOM" ifHideNames="Non autorisé" />
<FIELD name="DNAT" />
<FIELD name="DENT"/>
<FIELD name="DSOR"/>
<FIELD name="HSOR"/>
<FIELD name="DUR"/>
<FIELD name="ETA"/>
<FIELD name="SER"/>
<FIELD name="MED"/>
<FIELD name="NBJRN"/>
<FIELD name="NBJRNCPAD"/>
<FIELD name="NBJRNCPSD"/>
<FIELD name="NBJRNCPP"/>
<FIELD name="NBJRNCPDSS"/>
<FIELD name="NBJRNCPDSP"/>
<FIELD name="NBJRNNPDS"/>
<FIELD name="NBJRNCPF"/>
<FIELD name="ECJRNCPF"/>
<FIELD name="NBRUB"/>
<FIELD name="LITS"/>
</FIELDS>
</SQL>
</QUERY>
<QUERY type="propertiesLink" name="VIEWPROPERTIES" forRows="false">
</QUERY>
</QUERIES>
<PRESENTATION>
<VIEWLINKS>
<VIEWLINK label="Détail séjour" shortLabel="Détail séjour" view="ACTI000020.XML">
<ARG name="SEJOUR" value="ROW.SEJ" />
</VIEWLINK>
</VIEWLINKS>
<ONGLET excelLabel="Liste séjours" label="Liste séjours" >
<DATAGRID title="" total="true" key="SEJ" headerHeight="80"
selectRowInRows="= ROW.LVL == '-9999997'" otherRowInRows="= ROW.LVL == '-9999998'" totalRowInRows="= ROW.LVL == '-9999999'" >
<COLUMN dataField="LVL"
width="100"
type="Char"
visible="false">
</COLUMN>
<COLUMN dataField="SEJ"
frozen="left"
width="100"
type="Char"
headerText="No séjour"
textAlign="left"
otherFunction="text"
totalFunction="text"
totalComplement="TOTAL" >
</COLUMN>
<COLUMN dataField="NOM"
frozen="left"
type="Char"
minWidth="150"
headerText="Nom"
textAlign="left"
totalFunction="text"
totalComplement="*ROW">
</COLUMN>
<COLUMN dataField="DNAT"
width="60"
type="Date"
inputFormat="AAAA-MM-JJ"
outputFormat="DD/MM/YY"
headerText="Date nais."
textAlign="right"
totalFunction="text">
</COLUMN>
<COLUMN dataField="DENT"
width="60"
type="Date"
inputFormat="AAAA-MM-JJ"
outputFormat="DD/MM/YY"
headerText="Date entrée"
textAlign="right"
totalFunction="text">
</COLUMN>
<COLUMN dataField="DSOR"
width="60"
type="Date"
inputFormat="AAAA-MM-JJ"
outputFormat="DD/MM/YY"
headerText="Date sortie"
textAlign="right"
totalFunction="text">
</COLUMN>
<COLUMN dataField="HSOR"
width="60"
type="Number"
outputFormat="#,00"
headerText="Heure sortie"
textAlign="right"
totalFunction="text">
</COLUMN>
<COLUMN dataField="DUR"
type="Number"
width="50"
outputFormat="#"
fixed="false"
headerText="Durée"
textAlign="right"
totalFunction="text" >
</COLUMN>
<COLUMN dataField="ETA"
type="Char"
width="70"
fixed="false"
headerText="Etage"
textAlign="left"
totalFunction="text" >
</COLUMN>
<COLUMN dataField="SER"
type="Char"
width="70"
fixed="false"
headerText="Serv. fact."
textAlign="left"
totalFunction="text" >
</COLUMN>
<COLUMN dataField="LITS"
type="Char"
width="200"
fixed="false"
headerText="Lit(s)"
textAlign="left"
totalFunction="text" >
</COLUMN>
<COLUMN dataField="MED"
type="Char"
minWidth="80"
maxWidth="150"
fixed="false"
headerText="Médecin"
textAlign="left"
totalFunction="text" >
</COLUMN>
<COLUMN dataField="NBJRN" width="60" type="Number" selectable="true" visible="true" outputFormat="#" fixed="false" headerText="Nb total jours" textAlign="right" totalFunction="sum" otherFunction="sum">
</COLUMN>
<COLUMN dataField="NBJRN" width="80" type="Number" selectable="true" visible="true" outputFormat="#" fixed="false" headerText="Total@LF@Nb journées@LF@@LF@X=A+B+C+D+E+F" textAlign="right" totalFunction="sum" otherFunction="sum">
<HEADERCELLSTYLE name="textAlign" value="center"/>
</COLUMN>
<COLUMN dataField="NBJRNCPAD" width="90" type="Number" outputFormat="#" fixed="false" visible="true" headerText="Journées@LF@CP occupées@LF@avec demande@LF@(Facturables)@LF@A" textAlign="right" totalFunction="sum" otherFunction="sum"
description="Journées passées dans un lit identifié comme chambre particulière. Le patient a fait une demande de chambre particulière">
<HEADERCELLSTYLE name="textAlign" value="center"/>
</COLUMN>
<COLUMN dataField="NBJRNCPSD" width="90" selectable="true" type="Number" outputFormat="#" fixed="false" visible="true" headerText="Journées@LF@CP occupées@LF@sans demande@LF@@LF@B" textAlign="right" totalFunction="sum" otherFunction="sum"
description="Journées passées dans un lit identifié comme chambre particulière. Le patient n'a pas fait de demande de chambre particulière">
<HEADERCELLSTYLE name="textAlign" value="center"/>
</COLUMN>
<COLUMN dataField="NBJRNCPP" width="100" selectable="true" type="Number" outputFormat="#" fixed="false" visible="true" headerText="Journées@LF@CP non occupées@LF@avec une CP dans le séjour@LF@C" textAlign="right" totalFunction="sum" otherFunction="sum"
description="Parmi les séjours pour lesquels un patient a passé au moins une journée en chambre particulière (demandée ou pas), nombre de journées passées en dehors d'une chambre particulière">
<HEADERCELLSTYLE name="textAlign" value="center"/>
</COLUMN>
<COLUMN dataField="NBJRNCPDSS" width="100" type="Number" selectable="true" outputFormat="#" fixed="false" visible="true" headerText="Journées@LF@CP non occupées@LF@avec demande@LF@(Sortis)@LF@D" textAlign="right" totalFunction="sum" otherFunction="sum"
description="Nombre de journées des séjours &lt;b&gt;sortis&lt;/b&gt; pour lesquels le patient avait fait une demande de chambre particulière et où il n'a jamais occupé de chambre particulière">
<HEADERCELLSTYLE name="textAlign" value="center"/>
</COLUMN>
<COLUMN dataField="NBJRNCPDSP" width="100" type="Number" selectable="true" outputFormat="#" fixed="false" visible="true" headerText="Journées@LF@CP non occupées@LF@avec demande@LF@(présents)@LF@E" textAlign="right" totalFunction="sum" otherFunction="sum"
description="Nombre de journées des séjours &lt;b&gt;présents&lt;/b&gt; pour lesquels le patient avait fait une demande de chambre particulière et où il n'a jamais occupé de chambre particulière">
<HEADERCELLSTYLE name="textAlign" value="center"/>
</COLUMN>
<COLUMN dataField="NBJRNNPDS" width="90" type="Number" outputFormat="#" fixed="false" visible="true" headerText="Journées@LF@CP non occupées@LF@sans demande@LF@F" textAlign="right" totalFunction="sum" otherFunction="sum"
description="Nombre de journées des séjours pour lesquels le patient n'a pas fait de demande de chambre particulière et où il n'en a jamais occupé une">
<HEADERCELLSTYLE name="textAlign" value="center"/>
</COLUMN>
<COLUMN dataField="NBJRNCPF" width="90" type="Number" outputFormat="#" fixed="false" visible="true" headerText="Journées@LF@CP facturées@LF@@LF@@LF@G" textAlign="right" totalFunction="sum" otherFunction="sum"
description="Nombre de rubriques de facturation de chambres particulières facturées. Ces rubriques sont identifiables dans la liste &lt;b&gt;CTI : chambre particulière&lt;/b&gt; (&lt;i&gt;CTI_SHO_R&lt;/i&gt;) consultable via le menu Activité -> Paramètres -> Classification -> Listes -> Rubriques de facturation -> Listes CTI.">
<HEADERCELLSTYLE name="textAlign" value="center"/>
</COLUMN>
<COLUMN dataField="NBRUB" width="90" type="Number" outputFormat="#" fixed="false" visible="true" headerText="Rubriques@LF@différentes@LF@facturées@LF@@LF@H" textAlign="right" totalFunction="sum" otherFunction="sum"
description="Nombre de rubriques de facturation différentes utilisées">
<HEADERCELLSTYLE name="textAlign" value="center"/>
</COLUMN>
<COLUMN dataField="ECJRNCPF" width="90" selectable="true" type="Number" outputFormat="#" fixed="false" visible="true" headerText="Journées@LF@Ecart facturables/ facturées@LF@A-G" textAlign="right" totalFunction="sum" otherFunction="sum"
description="Différence entre les colonnes &lt;b&gt;A&lt;/b&gt; (&lt;i&gt;Journées CP occupées avec demande (Facturables)&lt;/i&gt;) et &lt;b&gt;G&lt;/b&gt; (&lt;i&gt;Journées CP facturées&lt;/i&gt;)">
<HEADERCELLSTYLE name="textAlign" value="center"/>
</COLUMN>
</DATAGRID>
</ONGLET>
</PRESENTATION>
</VUE>