Feature: OCR-Schalter unabhängig vom KI-Schalter (Migration 020)
This commit is contained in:
parent
3281aa402c
commit
fa50de5c48
5 changed files with 40 additions and 2 deletions
10
Changes.md
10
Changes.md
|
|
@ -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
|
## 2026-04-02 – Kontenrahmen: Dokumentation und finale Korrekturen
|
||||||
|
|
||||||
### Neu
|
### Neu
|
||||||
|
|
|
||||||
4
migrations/020_ocr_aktiv.sql
Normal file
4
migrations/020_ocr_aktiv.sql
Normal 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';
|
||||||
|
|
@ -29,7 +29,7 @@ class Setting
|
||||||
iban=?, bic=?, bank_name=?,
|
iban=?, bic=?, bank_name=?,
|
||||||
ustva_steuernummer=?, ustva_bundesland=?,
|
ustva_steuernummer=?, ustva_bundesland=?,
|
||||||
invoice_nr_prefix=?, beleg_nr_prefix=?,
|
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',
|
WHERE id=1',
|
||||||
[
|
[
|
||||||
$data['firma'] ?? '',
|
$data['firma'] ?? '',
|
||||||
|
|
@ -53,6 +53,7 @@ class Setting
|
||||||
(int)($data['payment_days_default'] ?? 14),
|
(int)($data['payment_days_default'] ?? 14),
|
||||||
isset($data['test_mode']) ? 1 : 0,
|
isset($data['test_mode']) ? 1 : 0,
|
||||||
isset($data['ki_vorschlag_aktiv']) ? 1 : 0,
|
isset($data['ki_vorschlag_aktiv']) ? 1 : 0,
|
||||||
|
isset($data['ocr_aktiv']) ? 1 : 0,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,12 @@ class KontierungsvorschlagService
|
||||||
return (bool)($s['ki_vorschlag_aktiv'] ?? 0) && $this->llm->isAvailable();
|
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
|
public function generateForBeleg(array $beleg): ?array
|
||||||
{
|
{
|
||||||
$absPath = dirname(__DIR__, 2) . '/public/' . $beleg['storage_path'];
|
$absPath = dirname(__DIR__, 2) . '/public/' . $beleg['storage_path'];
|
||||||
|
|
@ -34,7 +40,7 @@ class KontierungsvorschlagService
|
||||||
if ($mime === 'application/pdf') {
|
if ($mime === 'application/pdf') {
|
||||||
$text = $this->extractPdfText($absPath);
|
$text = $this->extractPdfText($absPath);
|
||||||
} elseif (in_array($mime, ['image/jpeg', 'image/png', 'image/tiff'], true)) {
|
} elseif (in_array($mime, ['image/jpeg', 'image/png', 'image/tiff'], true)) {
|
||||||
$text = $this->extractImageText($absPath);
|
$text = $this->isOcrEnabled() ? $this->extractImageText($absPath) : '';
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,23 @@
|
||||||
</div>
|
</div>
|
||||||
</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 mb-2">
|
||||||
<div class="card-header"><div class="card-title">Bankdaten</div></div>
|
<div class="card-header"><div class="card-title">Bankdaten</div></div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue