$data */ public function propose(User $user, Budget $budget, array $data): BudgetReinforcement { abort_unless($user->tenant_id === $budget->tenant_id, 403); $adapter = app(CommonBudget::class); $amount = BigDecimal::of((string) $data['amount'])->multipliedBy(100)->toScale(0)->toInt(); $id = $adapter->execute(fn () => $adapter->for($user)->proposeReinforcement($budget->id, $amount, Str::upper(Str::squish($data['reference'])), trim($data['reason']))); return BudgetReinforcement::query()->findOrFail($id); } public function review(User $user, BudgetReinforcement $reinforcement, string $decision, string $reason): void { abort_unless($user->tenant_id === $reinforcement->tenant_id, 403); $adapter = app(CommonBudget::class); $adapter->execute(fn () => $adapter->for($user)->reviewReinforcement($reinforcement->id, $decision, $reason)); } }