['nullable','integer','min:1'],'currency'=>['required_with:amount_minor','string','size:3'],'payment_method'=>['nullable','string','in:cash,check,card,bank_transfer,other'],'payment_date'=>['nullable','date'],'reference_number'=>['nullable','string'],'notes'=>['nullable','string'],'replacement_file'=>['nullable','file','max:10240'],'edit_reason'=>['required','string']]; } public function toDTO(): EditPaymentData { $v=$this->validated(); return new EditPaymentData(isset($v['amount_minor']) ? new MoneyData((int)$v['amount_minor'], strtoupper($v['currency'])) : null, isset($v['payment_method']) ? PaymentMethod::from($v['payment_method']) : null, isset($v['payment_date']) ? new DateTimeImmutable($v['payment_date']) : null, $v['reference_number'] ?? null, $v['notes'] ?? null, $this->file('replacement_file'), $v['edit_reason']); } }