$nextSteps */ public function __construct( public ?string $reasonCode, public ?string $translationArtifact, public ?string $operatorLabel, public ?string $shortExplanation, public ?string $diagnosticCode, public string $trustImpact, public ?string $absencePattern, public array $nextSteps = [], ) {} public static function fromReasonResolutionEnvelope( ?ReasonResolutionEnvelope $reason, ?string $translationArtifact = null, ): ?self { if (! $reason instanceof ReasonResolutionEnvelope) { return null; } return new self( reasonCode: $reason->internalCode, translationArtifact: $translationArtifact, operatorLabel: $reason->operatorLabel, shortExplanation: $reason->shortExplanation, diagnosticCode: $reason->diagnosticCode(), trustImpact: $reason->trustImpact, absencePattern: $reason->absencePattern, nextSteps: array_values(array_map( static fn (NextStepOption $nextStep): string => $nextStep->label, $reason->nextSteps, )), ); } public function toReasonResolutionEnvelope(): ReasonResolutionEnvelope { return new ReasonResolutionEnvelope( internalCode: $this->reasonCode ?? 'artifact_truth_reason', operatorLabel: $this->operatorLabel ?? 'Operator attention required', shortExplanation: $this->shortExplanation ?? 'Technical diagnostics are available for this result.', actionability: $this->absencePattern === 'true_no_result' ? 'non_actionable' : 'prerequisite_missing', nextSteps: array_map( static fn (string $label): NextStepOption => NextStepOption::instruction($label), $this->nextSteps, ), diagnosticCodeLabel: $this->diagnosticCode, trustImpact: $this->trustImpact !== '' ? $this->trustImpact : TrustworthinessLevel::LimitedConfidence->value, absencePattern: $this->absencePattern, ); } /** * @return array{ * reasonCode: ?string, * translationArtifact: ?string, * operatorLabel: ?string, * shortExplanation: ?string, * diagnosticCode: ?string, * trustImpact: string, * absencePattern: ?string, * nextSteps: array * } */ public function toArray(): array { return [ 'reasonCode' => $this->reasonCode, 'translationArtifact' => $this->translationArtifact, 'operatorLabel' => $this->operatorLabel, 'shortExplanation' => $this->shortExplanation, 'diagnosticCode' => $this->diagnosticCode, 'trustImpact' => $this->trustImpact, 'absencePattern' => $this->absencePattern, 'nextSteps' => $this->nextSteps, ]; } }