*/ public function rules(): array { $engagement = $this->route('engagement'); $effectiveStatus = $this->input( 'booking_status', $engagement instanceof ArtistEngagement ? ($engagement->booking_status?->value ?? null) : null, ); return [ 'booking_status' => ['sometimes', Rule::enum(ArtistEngagementStatus::class)], 'project_leader_id' => ['sometimes', 'nullable', 'string', 'max:30', 'exists:users,id'], 'fee_amount' => ['sometimes', 'nullable', 'numeric', 'min:0', 'max:9999999.99', new ContractRequiresFee($effectiveStatus)], 'fee_currency' => ['sometimes', 'nullable', 'string', 'size:3', Rule::in(['EUR', 'USD', 'GBP'])], 'fee_type' => ['sometimes', 'nullable', Rule::enum(FeeType::class)], 'buma_applicable' => ['sometimes', 'boolean'], 'buma_percentage' => ['sometimes', 'nullable', 'numeric', 'min:0', 'max:100'], 'buma_handled_by' => ['sometimes', 'nullable', Rule::enum(BumaHandledBy::class)], 'vat_applicable' => ['sometimes', 'boolean'], 'vat_percentage' => ['sometimes', 'nullable', 'numeric', 'min:0', 'max:100'], 'deal_breakdown' => ['sometimes', 'nullable', 'array'], 'deposit_percentage' => ['sometimes', 'nullable', 'numeric', 'min:0', 'max:100'], 'deposit_due_date' => ['sometimes', 'nullable', 'date'], 'balance_due_date' => ['sometimes', 'nullable', 'date'], 'payment_status' => ['sometimes', 'nullable', Rule::enum(PaymentStatus::class)], 'crew_count' => ['sometimes', 'nullable', 'integer', 'min:0', 'max:200'], 'guests_count' => ['sometimes', 'nullable', 'integer', 'min:0', 'max:1000'], 'requested_at' => ['sometimes', 'nullable', 'date'], 'option_expires_at' => ['sometimes', 'nullable', 'date', new OptionExpiresInFuture($effectiveStatus)], 'advance_open_from' => ['sometimes', 'nullable', 'date'], 'advance_open_to' => ['sometimes', 'nullable', 'date', 'after_or_equal:advance_open_from'], 'notes' => ['sometimes', 'nullable', 'string', 'max:2000'], ]; } }