53 lines
4.7 KiB
Markdown
53 lines
4.7 KiB
Markdown
# 2026-07-06
|
||
|
||
## Co zrobiono
|
||
|
||
- [Plan 20260706-1248] Fundament finansePRO na CodeIgniter 4.7.3 + moduł wydatków/przychodów bieżących.
|
||
- Inicjalizacja PAUL (plan-first, Quality Radar), junction memory.
|
||
- Instalacja CI4 (Composer), konfiguracja DB czytana z `.env`, włączenie `intl` w XAMPP.
|
||
- Logowanie jednego użytkownika z `.env` (filtr `auth`, `Auth::login/logout`).
|
||
- Migracje `categories` (hierarchia+typ) i `operations` (+FK), seeder 9 kategorii.
|
||
- CRUD kategorii i operacji: filtry (data/kategoria/typ), sumy, blokada usunięcia używanej kategorii, typ operacji wymuszany przez kategorię.
|
||
- Dashboard z 3 wykresami ApexCharts (bilans miesięczny, wydatki wg kategorii, saldo skumulowane).
|
||
- Weryfikacja end-to-end przez `php spark serve` + curl; dane testowe wyczyszczone.
|
||
- Naprawa wdrożenia hostido: root `.htaccess` (forward do `public/`, 403), sekcja produkcyjna w `.env` (`CI_ENVIRONMENT=production`, `app.baseURL`).
|
||
- [Plan 20260706-1430] Moduł inwestycji: instrumenty (Obligacje/ETF), wpłaty/wypłaty, ręczne wyceny.
|
||
- Migracje `inv_instruments`, `inv_operations`, `inv_valuations` (FK RESTRICT), seeder instrumentów.
|
||
- CRUD instrumentów/operacji/wycen + filtry + blokada usunięcia instrumentu z powiązaniami.
|
||
- Pulpit inwestycji `/investments`: kafelki, wykres 3-seryjny w czasie, tabela per instrument (zarobek netto = ostatnia wycena − (Σwpłat − Σwypłat)).
|
||
- Pulpit globalny `/dashboard` (majątek razem = saldo bieżące + wartość inwestycji); dotychczasowy pulpit finansów przepięty pod `/finances`.
|
||
- Nawigacja zgrupowana w dropdowny: „Finanse bieżące" i „Inwestycje" + top-level „Pulpit".
|
||
- Weryfikacja end-to-end curl (ETF: netto 800, wartość 950, zarobek 150 = 18,75%); dane testowe wyczyszczone.
|
||
- [Plan 20260706-2046] Półautomatyczny import paragonów: upload (jpg/png/pdf/json) → AI parsuje → przegląd/korekta → księgowanie pogrupowane po kategorii.
|
||
- Parser OpenAI przez **Responses API** (`/v1/responses` + `input_file`), model **o4-mini** (rozumujący — najlepszy OCR paragonów, poprawne rabaty; > gpt-4o/4.1).
|
||
- Tabele `receipts`, `receipt_items` (+`display_name`), `receipt_category_map`; kolumna `operations.receipt_id`.
|
||
- Uczone podpowiedzi kategorii (surowa nazwa z paragonu → kategoria; tylko podpowiada, nie księguje z automatu).
|
||
- Dwie nazwy pozycji: surowa (mapowanie) + ładna „ludzka" (wyświetlanie/opis operacji).
|
||
- Przegląd z edytowalnymi nazwami/kwotami + podgląd sum na żywo; kategorie z pełną ścieżką „Nadrzędna → Podrzędna".
|
||
- Naprawy pod hostido: przepływ bez `fileinfo` (własna nazwa pliku + MIME z rozszerzenia); migracje zastosowane ręcznie na zdalnej bazie.
|
||
- UAT realnym paragonem (Biedronka PDF) potwierdzony przez użytkownika.
|
||
|
||
## Zmienione pliki
|
||
|
||
- `composer.json`, `composer.lock`, `vendor/`, `spark`, `public/`, `writable/`
|
||
- `app/Config/Database.php`, `app/Config/Routes.php`, `app/Config/Filters.php`, `app/Config/App.php`
|
||
- `app/Controllers/BaseController.php`, `app/Controllers/Auth.php`, `app/Controllers/Categories.php`, `app/Controllers/Operations.php`, `app/Controllers/Dashboard.php`
|
||
- `app/Filters/AuthFilter.php`
|
||
- `app/Models/CategoryModel.php`, `app/Models/OperationModel.php`
|
||
- `app/Database/Migrations/2026-07-06-100001_CreateCategories.php`, `app/Database/Migrations/2026-07-06-100002_CreateOperations.php`
|
||
- `app/Database/Seeds/DefaultCategoriesSeeder.php`
|
||
- `app/Views/layout/main.php`, `app/Views/auth/login.php`, `app/Views/categories/index.php`, `app/Views/categories/form.php`, `app/Views/operations/index.php`, `app/Views/operations/form.php`, `app/Views/dashboard/index.php`
|
||
- `.env`, `.htaccess`
|
||
- `app/Database/Migrations/2026-07-06-140001_CreateInvInstruments.php`, `...140002_CreateInvOperations.php`, `...140003_CreateInvValuations.php`
|
||
- `app/Database/Seeds/DefaultInstrumentsSeeder.php`
|
||
- `app/Models/InstrumentModel.php`, `app/Models/InvOperationModel.php`, `app/Models/ValuationModel.php`
|
||
- `app/Controllers/Instruments.php`, `app/Controllers/InvOperations.php`, `app/Controllers/Valuations.php`, `app/Controllers/Investments.php`, `app/Controllers/Dashboard.php`
|
||
- `app/Views/instruments/{index,form}.php`, `app/Views/inv_operations/{index,form}.php`, `app/Views/valuations/{index,form}.php`, `app/Views/investments/index.php`
|
||
- `app/Views/dashboard/index.php` (globalny), `app/Views/dashboard/finances.php` (finansowy)
|
||
- `app/Config/Routes.php`, `app/Views/layout/main.php`
|
||
- `app/Database/Migrations/2026-07-06-2000{01..05}_*.php` (receipts, receipt_items, receipt_category_map, operations.receipt_id, display_name)
|
||
- `app/Models/{ReceiptModel,ReceiptItemModel,ReceiptCategoryMapModel}.php`, `app/Models/OperationModel.php`, `app/Models/CategoryModel.php`
|
||
- `app/Libraries/ReceiptParser.php`
|
||
- `app/Controllers/Receipts.php`
|
||
- `app/Views/receipts/{new,review,index,show}.php`
|