← Code-Übersicht

FallbackTextExtractor.php

Pfad: src/Infrastructure/Rechnung/FallbackTextExtractor.php

Ext: php

Größe: 1592 Bytes

Geändert: 2026-07-16 14:13:58+02

<?php
declare(strict_types=1);

namespace Demo\Infrastructure\Rechnung;

use Demo\Domain\Rechnung\ExtractedInvoiceData;
use Demo\Domain\Rechnung\TextExtractionPort;

/**
 * Kombiniert Primär- und Fallback-Extraktor.
 */
final class FallbackTextExtractor implements TextExtractionPort
{
    /**
     * @param TextExtractionPort $primary   Primärengine.
     * @param TextExtractionPort $fallback  Fallbackengine.
     * @param float             $minConfidence Mindestkonfidenz fuer den Primärpfad.
     */
    public function __construct(
        private TextExtractionPort $primary,
        private TextExtractionPort $fallback,
        private float $minConfidence = 0.75
    ) {
    }

    /**
     * @inheritDoc
     */
    public function extract(string $pdfPath): ExtractedInvoiceData
    {
        try {
            $primary = $this->primary->extract($pdfPath);
            if ($primary->extractionConfidence >= $this->minConfidence) {
                return $primary;
            }
        } catch (\Throwable) {
            $primary = null;
        }

        try {
            $secondary = $this->fallback->extract($pdfPath);
            if ($primary !== null && $secondary->extractionConfidence > $primary->extractionConfidence) {
                return $secondary;
            }
            if ($primary !== null) {
                return $primary;
            }

            return $secondary;
        } catch (\Throwable $fallbackError) {
            if ($primary !== null) {
                return $primary;
            }

            throw $fallbackError;
        }
    }
}