← Code-Übersicht

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