* добавил исход спец контингенту
* оптимизация обновления при редактировании спец контингента * добавил поддержку заключительных диагнозов * изменил определение законченной операции * добавил поддержку исхода операции * добавил определение отмены для операции через назначение * работа над диапазонами календарей, подсчет статистики * добавил статусы отчетов и подкорректировал привязку спец контингента к отчету * добавил новые сервисы для будущего кеширования * частичное разделение логики подсчета пациентов
This commit is contained in:
@@ -63,8 +63,9 @@ class StatisticsService
|
||||
$metrics = DB::table('reports as r')
|
||||
->join('metrika_results as mr', 'r.report_id', '=', 'mr.rf_report_id')
|
||||
->whereIn('r.rf_department_id', $allDeptIds)
|
||||
->whereDate('r.sent_at', '>=', $startDate)
|
||||
->whereDate('r.sent_at', '<=', $endDate)
|
||||
->where('r.period_start', '>=', $startDate)
|
||||
->where('r.period_start', '<=', $endDate)
|
||||
->where('r.status', 'submitted')
|
||||
->select(
|
||||
'r.rf_department_id',
|
||||
'mr.rf_metrika_item_id',
|
||||
@@ -81,10 +82,10 @@ class StatisticsService
|
||||
->join('metrika_results as mr', 'r.report_id', '=', 'mr.rf_report_id')
|
||||
->whereIn('r.rf_department_id', $allDeptIds)
|
||||
->where('mr.rf_metrika_item_id', 8)
|
||||
->where('r.sent_at', '<=', $endDate)
|
||||
->where('r.period_start', '<=', $endDate)
|
||||
->select('r.rf_department_id', 'mr.value', 'r.created_at')
|
||||
->orderBy('r.rf_department_id') // Сначала поле из DISTINCT ON
|
||||
->orderBy('r.sent_at', 'desc') // Потом остальные
|
||||
->orderBy('r.period_end', 'desc') // Потом остальные
|
||||
->distinct('r.rf_department_id')
|
||||
->get()
|
||||
->keyBy('rf_department_id');
|
||||
@@ -109,10 +110,16 @@ class StatisticsService
|
||||
|
||||
foreach ($deptList as $dept) {
|
||||
$deptId = $dept->department_id;
|
||||
$lastReport = Report::where('rf_department_id', $deptId)
|
||||
->whereDate('sent_at', '>=', Carbon::parse($startDate)->format('Y-m-d'))
|
||||
->whereDate('sent_at', '<=', Carbon::parse($endDate)->format('Y-m-d'))
|
||||
->orderBy('sent_at', 'desc')
|
||||
$lastReportQuery = Report::where('rf_department_id', $deptId);
|
||||
if ($isRangeOneDay) {
|
||||
$lastReportQuery->exactPeriod($startDate, $endDate);
|
||||
} else {
|
||||
$lastReportQuery->withinPeriod($startDate, $endDate);
|
||||
}
|
||||
|
||||
$lastReport = $lastReportQuery
|
||||
->onlySubmitted()
|
||||
->orderBy('period_end', 'desc')
|
||||
->first();
|
||||
|
||||
// Базовые показатели
|
||||
@@ -141,6 +148,7 @@ class StatisticsService
|
||||
$observable = 0;
|
||||
$unwanted = 0;
|
||||
$bedDaysSum = 0;
|
||||
$avgBedDays = 0;
|
||||
|
||||
if (isset($metrics[$deptId])) {
|
||||
foreach ($metrics[$deptId] as $item) {
|
||||
@@ -219,7 +227,7 @@ class StatisticsService
|
||||
'lethality' => $lethality,
|
||||
'type' => $typeName,
|
||||
'isDepartment' => true,
|
||||
'isReportToday' => $lastReport ? Carbon::parse($lastReport->sent_at)->isSameDay($endDate) : null,
|
||||
'isReportToday' => $lastReport ? Carbon::parse($lastReport->period_end)->isSameDay($endDate) : null,
|
||||
];
|
||||
|
||||
$groupedData[$typeName][] = $data;
|
||||
|
||||
Reference in New Issue
Block a user