import type { IValueObject } from '@gridpilot/shared/domain'; export interface StepIdProps { value: number; } export class StepId implements IValueObject { 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; } 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); } get props(): StepIdProps { return { value: this._value }; } equals(other: IValueObject): boolean { return this.props.value === other.props.value; } }