export class StepId { private readonly _value: number; private constructor(value: number) { this._value = value; } static create(value: number): StepId { if (!Number.isInteger(value)) { throw new Error('StepId must be an integer'); } if (value < 1 || value > 17) { throw new Error('StepId must be between 1 and 17'); } return new StepId(value); } get value(): number { return this._value; } equals(other: StepId): boolean { return this._value === other._value; } isModalStep(): boolean { return this._value === 6 || this._value === 9 || this._value === 12; } isFinalStep(): boolean { return this._value === 17; } next(): StepId { if (this.isFinalStep()) { throw new Error('Cannot advance beyond final step'); } return StepId.create(this._value + 1); } }