ExtractedInvoiceData.php
Pfad: src/Domain/Rechnung/ExtractedInvoiceData.php
Ext: php
Größe: 2176 Bytes
Geändert: 2026-07-16 16:54:17+02
<?php
declare(strict_types=1);
namespace Demo\Domain\Rechnung;
use DateTimeImmutable;
/**
* Fachlich extrahierte und pruefbare Rechnungsdaten.
*/
final class ExtractedInvoiceData
{
/**
* @param string $vendorName Lieferantenname.
* @param string $vendorAddressSignature Adresssignatur.
* @param string $invoiceNumber Rechnungsnummer.
* @param string $invoiceDate Datum im Format Y-m-d.
* @param Amount $amount Exakter Betrag.
* @param float $extractionConfidence Konfidenz von 0 bis 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
) {
}
/**
* Prueft alle Pflichtfelder einschliesslich echtem Datum und positivem Betrag.
*/
public function hasRequiredFields(): bool
{
$date = DateTimeImmutable::createFromFormat('!Y-m-d', $this->invoiceDate);
return trim($this->vendorName) !== ''
&& trim($this->vendorAddressSignature) !== ''
&& trim($this->invoiceNumber) !== ''
&& $date !== false
&& $date->format('Y-m-d') === $this->invoiceDate
&& $this->amount->isPositive();
}
/**
* Prueft die Betragsgleichung.
*/
public function hasPlausibleAmount(float $toleranz): bool
{
return $this->amount->isConsistent($toleranz) && $this->amount->isPositive();
}
/**
* Serialisiert die extrahierten Daten.
*
* @return array<string,string|float>
*/
public function toArray(): array
{
return [
'vendorName' => $this->vendorName,
'vendorAddressSignature' => $this->vendorAddressSignature,
'invoiceNumber' => $this->invoiceNumber,
'invoiceDate' => $this->invoiceDate,
...$this->amount->toArray(),
'extractionConfidence' => $this->extractionConfidence,
];
}
}
Frühere Versionen
| Version | Zeitpunkt | Operation |
|---|---|---|
| 18 | 2026-07-16 19:01:40.81176+02 | UPDATE |