feat(claims): enhance claims filtering with insurance, date range, and patient search

This commit is contained in:
hamed
2026-06-24 06:19:25 +03:30
parent 69beb7b944
commit 91fb55258a
5 changed files with 196 additions and 17 deletions
+24 -5
View File
@@ -59,13 +59,18 @@ class BillingController extends BaseController
$sessionIds[] = $d['patient_session_id'];
}
}
$sessionDates = $this->sessionRepo->datesForIds(array_values(array_unique($sessionIds)));
$uniqueSessionIds = array_values(array_unique($sessionIds));
$sessionDates = $this->sessionRepo->datesForIds($uniqueSessionIds);
$patientInfo = $this->sessionRepo->patientInfoForIds($uniqueSessionIds);
return array_map(function (Claim $claim) use ($itemDetails, $sessionDates) {
return array_map(function (Claim $claim) use ($itemDetails, $sessionDates, $patientInfo) {
$data = $claim->toArray();
$data['insurance_name'] = $this->insuranceRepo->find($claim->getInsuranceId())?->getName();
$data['items'] = array_map(function (array $item) use ($itemDetails, $sessionDates) {
$patientName = null;
$patientMobile = null;
$data['items'] = array_map(function (array $item) use ($itemDetails, $sessionDates, $patientInfo, &$patientName, &$patientMobile) {
$detail = $itemDetails[$item['invoice_item_id']] ?? null;
$sessionId = $detail['patient_session_id'] ?? null;
$item['title'] = $detail['title'] ?? null;
@@ -73,9 +78,17 @@ class BillingController extends BaseController
$item['quantity'] = $detail['quantity'] ?? 1;
$item['total_rials'] = $detail['total_rials'] ?? null;
$item['visit_date'] = $sessionId !== null ? ($sessionDates[$sessionId] ?? null) : null;
if ($patientName === null && $sessionId !== null && isset($patientInfo[$sessionId])) {
$patientName = $patientInfo[$sessionId]['name'];
$patientMobile = $patientInfo[$sessionId]['mobile'];
}
return $item;
}, $data['items']);
$data['patient_name'] = $patientName;
$data['patient_mobile'] = $patientMobile;
return $data;
}, $claims);
}
@@ -164,8 +177,14 @@ class BillingController extends BaseController
return $this->error(ErrorCodes::ERR_FORBIDDEN_001, 'پروفایل یافت نشد', 403);
}
$status = $request->query->get('status') ?: null;
$claims = $this->claimRepo->findByTenant($entityType, $entityId, $status);
$filters = [
'status' => $request->query->get('status') ?: null,
'insurance_id' => $request->query->get('insurance_id') ?: null,
'from' => $request->query->get('from') ?: null,
'to' => $request->query->get('to') ?: null,
'q' => $request->query->get('q') ?: null,
];
$claims = $this->claimRepo->findByTenant($entityType, $entityId, $filters);
return $this->success(['data' => $this->enrichClaims($claims)]);
}