43 lines
1.5 KiB
PHP
43 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Infrastructure\Reports\Services;
|
|
|
|
use App\Models\Department;
|
|
use App\Models\DepartmentPatientOperation;
|
|
use App\Services\DateRange;
|
|
|
|
class CalculatedMetricsSynchronizer
|
|
{
|
|
public function getManualSurgicalCounts(Department $department, DateRange $dateRange): array
|
|
{
|
|
$baseQuery = DepartmentPatientOperation::query()
|
|
->whereBetween('started_at', [$dateRange->startSql(), $dateRange->endSql()])
|
|
->whereHas('patient', function ($query) use ($department) {
|
|
$query->where('rf_department_id', $department->department_id)
|
|
->whereIn('source_type', ['manual', 'special']);
|
|
});
|
|
|
|
$emergencyCount = (clone $baseQuery)
|
|
->where(function ($query) {
|
|
$query->where('urgency', 'emergency')
|
|
->orWhere(function ($fallback) {
|
|
$fallback->whereNull('urgency')
|
|
->whereHas('patient', fn ($patientQuery) => $patientQuery->where('patient_kind', 'emergency'));
|
|
});
|
|
})
|
|
->count();
|
|
|
|
$planCount = (clone $baseQuery)
|
|
->where(function ($query) {
|
|
$query->where('urgency', 'plan')
|
|
->orWhere(function ($fallback) {
|
|
$fallback->whereNull('urgency')
|
|
->whereHas('patient', fn ($patientQuery) => $patientQuery->where('patient_kind', 'plan'));
|
|
});
|
|
})
|
|
->count();
|
|
|
|
return [$emergencyCount, $planCount];
|
|
}
|
|
}
|