covered) { $baseShare = $total->percent($base->coveragePercent); if ($base->ceilingRials !== null) { $baseShare = $baseShare->min(new Money($base->ceilingRials)); } $remaining = $total->sub($baseShare); } $suppShare = Money::zero(); if ($supplementary !== null && $supplementary->covered) { $suppShare = $remaining->percent($supplementary->coveragePercent); if ($supplementary->ceilingRials !== null) { $suppShare = $suppShare->min(new Money($supplementary->ceilingRials)); } $remaining = $remaining->sub($suppShare); } // بیمهٔ پایه صرفاً درصدی است: سهم بیمار = کل − سهم پایه. فرانشیز فقط در بیمهٔ // تکمیلی معنا دارد و سهم بیمار را از کل بیشتر نمی‌کند. $franchise = new Money($supplementary?->franchiseRials ?? 0); $patient = $remaining->add($franchise)->min($total); return new ShareBreakdown( totalRials: $total->rials, baseInsuranceRials: $baseShare->rials, supplementaryRials: $suppShare->rials, patientRials: $patient->rials, ); } }