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;
}
}
}