# 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. ## 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`