Добавил ограничение по отказникам

This commit is contained in:
brusnitsyn
2026-06-17 17:38:48 +09:00
parent fe59410187
commit 839a534bb2
6 changed files with 105 additions and 3 deletions

View File

@@ -35,6 +35,7 @@ class MedicalHistoryService
// 1. Один запрос: получаем "сырые" данные (без вычисляемых статусов)
$all = MedicalHistory::query()
->withoutDenials()
->whereHas('migrations', $periodMigrationFilter)
->when($search, function ($query, $search) {
// Поиск по ФИО (точное совпадение или LIKE)
@@ -143,7 +144,8 @@ class MedicalHistoryService
{
$query = MedicalHistory::query();
$query->where('recipient_date', '>=', $dateRange->startSql())
$query->withoutDenials()
->where('recipient_date', '>=', $dateRange->startSql())
->where('recipient_date', '<', $dateRange->endSql())
// 1. Оставляем только тех пациентов, у которых БЫЛО движение в этом отделении
->whereHas('latestMigration', fn($q) => $q->where('department_id', $departmentId))
@@ -160,7 +162,8 @@ class MedicalHistoryService
{
$query = MedicalHistory::query();
$query->where('recipient_date', '>=', $dateRange->startSql())
$query->withoutDenials()
->where('recipient_date', '>=', $dateRange->startSql())
->where('recipient_date', '<', $dateRange->endSql())
->urgency($urgencyId)
->whereHas('migrations', function ($m) use ($departmentId) {
@@ -179,6 +182,7 @@ class MedicalHistoryService
public function getDepartmentHistories(DateRange $dateRange, int $departmentId)
{
return MedicalHistory::query()
->withoutDenials()
->whereHas('migrations', function ($q) use ($departmentId, $dateRange) {
$q->department($departmentId)->currentOrAdmitted($dateRange);
})
@@ -194,6 +198,7 @@ class MedicalHistoryService
public function getPlannedHistories(DateRange $dateRange, int $departmentId)
{
return MedicalHistory::query()
->withoutDenials()
->whereHas('migrations', function ($q) use ($departmentId, $dateRange) {
$q->department($departmentId)->currentOrAdmitted($dateRange);
})
@@ -211,6 +216,7 @@ class MedicalHistoryService
public function getEmergencyHistories(DateRange $dateRange, int $departmentId)
{
return MedicalHistory::query()
->withoutDenials()
->whereHas('migrations', function ($q) use ($departmentId, $dateRange) {
$q->department($departmentId)->currentOrAdmitted($dateRange);
})
@@ -234,6 +240,7 @@ class MedicalHistoryService
$now = Carbon::now();
return MedicalHistory::query()
->withoutDenials()
->whereHas('migrations', function ($q) use ($departmentId, $dateRange) {
$q->department($departmentId)->admitted($dateRange->startSql(), $dateRange->endSql());
})
@@ -246,6 +253,7 @@ class MedicalHistoryService
public function getDischargedHistories(DateRange $dateRange, int $departmentId)
{
return MedicalHistory::query()
->withoutDenials()
->whereHas('migrations', function ($q) use ($departmentId, $dateRange) {
$q->department($departmentId)->discharged($dateRange->startSql(), $dateRange->endSql());
})
@@ -258,6 +266,7 @@ class MedicalHistoryService
public function getDeceasedHistories(DateRange $dateRange, int $departmentId)
{
return MedicalHistory::query()
->withoutDenials()
->whereHas('migrations', function ($q) use ($departmentId, $dateRange) {
$q->department($departmentId)->deceased($dateRange->startSql(), $dateRange->endSql());
})
@@ -270,6 +279,7 @@ class MedicalHistoryService
public function getTransferredHistories(DateRange $dateRange, int $departmentId)
{
return MedicalHistory::query()
->withoutDenials()
->whereHas('migrations', function ($q) use ($departmentId, $dateRange) {
$q->department($departmentId)->transferred($dateRange->startSql(), $dateRange->endSql());
})
@@ -282,6 +292,7 @@ class MedicalHistoryService
public function getReanimationHistories(DateRange $dateRange, int $departmentId)
{
return MedicalHistory::query()
->withoutDenials()
->whereHas('migrations', function ($q) use ($departmentId, $dateRange) {
$q->department($departmentId)->currentOrAdmitted($dateRange);
})

View File

@@ -32,6 +32,12 @@ class PlanCalculator extends BaseMetricService implements MetricCalculatorInterf
$startCurrentMonth = $endDate->copy()->startOfMonth()->setHours(9);
$currentMonth = $endDate->month;
// Кол-во календарных месяцев, затронутых выбранным диапазоном (для нормы за период)
$monthsInRange = max(
1,
($endDate->year * 12 + $endDate->month) - ($startDate->year * 12 + $startDate->month) + 1
);
// Получаем фактические выписки с начала года по прошлый месяц
$previousOutcomeMonth = DB::table('report_duties as r')
->join('duty_report_metric_results as mr', 'r.id', '=', 'mr.rf_report_id')
@@ -99,6 +105,7 @@ class PlanCalculator extends BaseMetricService implements MetricCalculatorInterf
$results[$departmentId] = [
'year_plan' => $annualPlan,
'month_plan' => $oneMonthPlan,
'period_plan' => $oneMonthPlan * $monthsInRange, // норма за выбранный период (мес. × кол-во месяцев)
'total_debt' => $totalDebt,
'current_mouth_dept' => $currentMonthPlanOnly,
'cumulative_plan' => $cumulativePlan,