ExtractedInvoiceData.php
Pfad: src/Domain/Rechnung/ExtractedInvoiceData.php
Ext: php
Größe: 2058 Bytes
Geändert: 2026-07-16T14:10:20+02:00
Frühere Version vom 2026-07-16T14:10:20+02:00 · zur aktuellen Fassung
<?php
declare(strict_types=1);
namespace Demo\Domain\Rechnung;
/**
* Ergebnis der Textauslese aus PDF.
*/
final class ExtractedInvoiceData
{
/**
* @param string $vendorName Ermittelter Lieferant.
* @param string $vendorAddressSignature Adresse als normalisierte Signatur.
* @param string $invoiceNumber Rechnungsnummer.
* @param string $invoiceDate Rechnungsdatum.
* @param Amount $amount Summenblock.
* @param float $extractionConfidence Qualitätswert 0..1.
*/
public function __construct(
public readonly string $vendorName,
public readonly string $vendorAddressSignature,
public readonly string $invoiceNumber,
public readonly string $invoiceDate,
public readonly Amount $amount,
public readonly float $extractionConfidence
) {
}
/**
* @return bool True, wenn alle Pflichtfelder gesetzt sind.
*/
public function hasRequiredFields(): bool
{
if (trim($this->vendorName) === '' || trim($this->invoiceNumber) === '') {
return false;
}
if (trim($this->invoiceDate) === '' || trim($this->vendorAddressSignature) === '') {
return false;
}
return true;
}
/**
* @param float $toleranz Toleranz fuer Netto+Steuer=Brutto.
* @return bool True, wenn Betragslogik plausibel.
*/
public function hasPlausibleAmount(float $toleranz): bool
{
return $this->amount->isConsistent($toleranz);
}
/**
* @return array<string,mixed> Serialisierte Form.
*/
public function toArray(): array
{
return [
'vendorName' => $this->vendorName,
'vendorAddressSignature' => $this->vendorAddressSignature,
'invoiceNumber' => $this->invoiceNumber,
'invoiceDate' => $this->invoiceDate,
'amount' => $this->amount->toArray(),
'extractionConfidence' => $this->extractionConfidence,
];
}
}