canParse($constraintData)) { throw new \InvalidArgumentException('Cannot parse constraint data: ' . $constraintData); } $yearData = substr($constraintData, strlen(self::BIRTH_YEAR_PREFIX)); // Parse range format "2007-2009" if (str_contains($yearData, '-')) { [$fromYear, $toYear] = explode('-', $yearData, 2); return new AgeConstraintResult( type: 'birth_year', birthYearFrom: (int) trim($fromYear), birthYearTo: (int) trim($toYear), metadata: [ 'range_type' => 'birth_year_range', 'original_format' => $yearData, ], rawData: $constraintData ); } // Parse single year format "2007" $year = (int) trim($yearData); return new AgeConstraintResult( type: 'birth_year', birthYearFrom: $year, birthYearTo: $year, metadata: [ 'range_type' => 'birth_year_single', 'original_format' => $yearData, ], rawData: $constraintData ); } public function getConstraintType(): string { return 'birth_year'; } }