← Code-Übersicht

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