Feature: OCR-Schalter unabhängig vom KI-Schalter (Migration 020)

This commit is contained in:
fds2610-bot 2026-04-10 16:25:29 +02:00
parent 3281aa402c
commit fa50de5c48
5 changed files with 40 additions and 2 deletions

View file

@ -2,6 +2,16 @@
---
## 2026-04-10 – OCR-Schalter unabhängig vom KI-Schalter
### Neu
- Einstellungen: separater Schalter „OCR-Texterkennung" (`ocr_aktiv`) zum unabhängigen Ein-/Ausschalten der Tesseract-OCR bei Bildbelegen (Migration 020)
- KI-Schalter und OCR-Schalter arbeiten nun vollständig unabhängig voneinander
- `KontierungsvorschlagService::isOcrEnabled()`: neue Methode, prüft OCR-Einstellung
- Bildbeleg-OCR wird nur noch ausgeführt, wenn `ocr_aktiv = 1`; PDF-Textextraktion via `pdftotext` läuft unabhängig davon
---
## 2026-04-02 – Kontenrahmen: Dokumentation und finale Korrekturen
### Neu

View file

@ -0,0 +1,4 @@
-- Migration 020: OCR-Schalter in company_settings
ALTER TABLE company_settings
ADD COLUMN IF NOT EXISTS ocr_aktiv TINYINT(1) NOT NULL DEFAULT 1
COMMENT '1 = automatische OCR-Texterkennung bei Bildbelegen aktiv';

View file

@ -29,7 +29,7 @@ class Setting
iban=?, bic=?, bank_name=?,
ustva_steuernummer=?, ustva_bundesland=?,
invoice_nr_prefix=?, beleg_nr_prefix=?,
payment_days_default=?, test_mode=?, ki_vorschlag_aktiv=?
payment_days_default=?, test_mode=?, ki_vorschlag_aktiv=?, ocr_aktiv=?
WHERE id=1',
[
$data['firma'] ?? '',
@ -53,6 +53,7 @@ class Setting
(int)($data['payment_days_default'] ?? 14),
isset($data['test_mode']) ? 1 : 0,
isset($data['ki_vorschlag_aktiv']) ? 1 : 0,
isset($data['ocr_aktiv']) ? 1 : 0,
]
);
}

View file

@ -23,6 +23,12 @@ class KontierungsvorschlagService
return (bool)($s['ki_vorschlag_aktiv'] ?? 0) && $this->llm->isAvailable();
}
public function isOcrEnabled(): bool
{
$s = Setting::get();
return (bool)($s['ocr_aktiv'] ?? 1);
}
public function generateForBeleg(array $beleg): ?array
{
$absPath = dirname(__DIR__, 2) . '/public/' . $beleg['storage_path'];
@ -34,7 +40,7 @@ class KontierungsvorschlagService
if ($mime === 'application/pdf') {
$text = $this->extractPdfText($absPath);
} elseif (in_array($mime, ['image/jpeg', 'image/png', 'image/tiff'], true)) {
$text = $this->extractImageText($absPath);
$text = $this->isOcrEnabled() ? $this->extractImageText($absPath) : '';
} else {
return null;
}

View file

@ -155,6 +155,23 @@
</div>
</div>
<!-- OCR-Texterkennung -->
<div class="card mb-2">
<div class="card-header"><div class="card-title">OCR-Texterkennung</div></div>
<div class="card-body">
<label style="display:flex;align-items:center;gap:.75rem;cursor:pointer;user-select:none">
<input type="checkbox" name="ocr_aktiv" value="1"
<?= !empty($settings['ocr_aktiv']) ? 'checked' : '' ?>>
<span style="font-weight:600">Automatische Texterkennung bei Bildbelegen aktivieren</span>
</label>
<p class="text-muted text-sm" style="margin:.5rem 0 0 1.75rem">
Bei Belegen im Bildformat (JPEG, PNG, TIFF) wird Tesseract OCR eingesetzt, um den Belegtext
zu extrahieren. Dieser Text wird – sofern der KI-Schalter aktiv ist – an das LLM übergeben.
PDF-Belege werden unabhängig davon per <code>pdftotext</code> ausgelesen.
</p>
</div>
</div>
<div class="card mb-2">
<div class="card-header"><div class="card-title">Bankdaten</div></div>
<div class="card-body">