## claims-system Modern Django/Tailwind-baserad portal för att ta emot, granska och betala utlägg. --- ### 1. Kom igång 1. `uv sync` 2. `uv run python manage.py migrate` 3. `uv run python manage.py createsuperuser` 4. `uv run python manage.py runserver` Nyckel-URLer (språkprefixed): - Offentligt formulär `GET /sv/claims/new/` eller `/en/claims/new/` - Bekräftelsesida `GET /sv/claims/submitted/` - Dashboard `GET /sv/claims/admin/` - Mina utlägg `GET /sv/claims/mine/` - Användarhantering `GET /sv/claims/users/` - Export-placeholder `GET /sv/claims/export/` - Auth `GET /sv/accounts/login|logout/` --- ### 2. Kärnfunktioner - **Multi-rad formulär:** Offentligt formulär stödjer upp till 5 rader. Lägg till `?forms=n` eller använd +/−-knapparna (lägger till rader utan reload). - **Auto-prefill:** Inloggade användare får namn, e-post och senaste kontonummer förifyllt. - **Valuta & projekt:** Varje rad har dold valutaväljare (SEK default) och projektreferens. Projekt listas från Django admin > Projekt. - **Kvitton:** Filuppladdningar sparas med slumpat UUID-baserat namn under `receipts/` för säkerhet och unika namn. - **Dashboard:** KPI-kort med totalsiffror, senaste aktivitet, statusfördelning och samma inline-flöde för beslut/utbetalningar. Attestanter kan öppna en redigeringspanel för att justera namn, belopp, valuta, kontonummer och projekt innan beslut. - **Betalspårning:** När intern betalning är på får godkända claims en "Betala"-knapp. När ett claim markeras som betalt låses status/kommentar tills reset görs. - **Mina utlägg:** Inloggade ser sina egna claims i samma Tailwind-layout med kvitto-länk och logg. - **Användarhantering:** Tailwind-sida där personal kan skapa konton, tilldela `claims.view_claim`/`claims.change_claim`, markera staff och ta bort användare. --- ### 3. Språk & UI - Django i18n är aktiverat (`LANGUAGES = [('sv','Swedish'), ('en','English')]`, LocaleMiddleware, språkväljare i navbaren). - Alla mallar/formulär använder `{% trans %}`/`gettext`. Engelska översättningar ligger i `locale/en/LC_MESSAGES/django.po` (kompileras till `.mo`). - Uppdatera översättningar: ```bash uv run django-admin makemessages -l en uv run django-admin compilemessages -l en ``` - `` sätts automatiskt, och språkväljaren lagrar valet i session/cookie. --- ### 4. Viktiga inställningar | Variabel | Default | Beskrivning | | --- | --- | --- | | `CLAIMS_ENABLE_INTERNAL_PAYMENTS` | `true` | Styr “Betala”-flödet. Aktiveras endast via miljövariabel. | | `CLAIMS_EMAIL_ENABLED` | `false` | Slår på e-postaviseringar. Låt vara `false` i testläge. | | `CLAIMS_EMAIL_FROM` | `no-reply@claims.local` | Avsändare för utskick. | | `CLAIMS_ADMIN_NOTIFICATION_EMAIL` | tom | Om satt skickas notifiering vid nytt claim (när e-post är aktiverad). | | `EMAIL_BACKEND` | `django.core.mail.backends.console.EmailBackend` | Byt till SMTP i prod (se nedan). | | `EMAIL_HOST`, `EMAIL_PORT`, `EMAIL_USE_TLS`, `EMAIL_HOST_USER`, `EMAIL_HOST_PASSWORD` | tom | Standard Django SMTP-inställningar. | | `CLAIMS_MAX_RECEIPT_BYTES` | `10485760` | Maxstorlek per kvitto (i byte), default 10 MB. | | `CLAIMS_ALLOWED_RECEIPT_EXTENSIONS` | `pdf,png,jpg,jpeg` | Tillåtna filändelser (kommaseparerade). | | `CLAIMS_ALLOWED_RECEIPT_CONTENT_TYPES` | `application/pdf,image/png,image/jpeg` | Tillåtna MIME-typer (kommaseparerade). | | `LANGUAGE_CODE` | `sv` | Standardspråk. | | `LOCALE_PATHS` | `BASE_DIR/locale` | Katalog för `.po/.mo`. | | `LOGIN_REDIRECT_URL` | `claims:admin-list` | Lazy reverse till `/[lang]/claims/admin/` efter inloggning. | | `LOGOUT_REDIRECT_URL` | `login` | Lazy reverse till `/[lang]/accounts/login/` efter utloggning. | SMTP-exempel: ```env CLAIMS_EMAIL_ENABLED=true CLAIMS_EMAIL_FROM=claims@example.com CLAIMS_ADMIN_NOTIFICATION_EMAIL=finance@example.com EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend EMAIL_HOST=smtp.example.com EMAIL_PORT=587 EMAIL_USE_TLS=true EMAIL_HOST_USER=apikey EMAIL_HOST_PASSWORD=secret ``` --- ### 5. Underhåll & verktyg - **Reset claims:** `uv run python manage.py reset_claims` (bekräfta med `ja` eller använd `--noinput`). Tar bort alla claims/loggar/kvitton men lämnar användarkonton. - **Django admin:** `/admin/` används för projekt, grupper och superusers. Staff-användare har automatiskt åtkomst. - **Testa konfiguration:** `uv run python manage.py check`. - **Språkreset:** Rensa cookies om språkväljaren inte byter språk (Django använder `django_language` cookien). --- ### 6. Länkar och roller - Offentligt formulär: alla (även utan konto). - Mina utlägg / Adminlista / Export / Betalningar: kräver `claims.view_claim` (och `claims.change_claim` för beslut). - Användarhantering: `auth.view_user` + respektive add/change/delete. - Språkväljare och logout finns i nav-menyn på varje sida. Se även `AGENTS.md` för utvecklingsriktlinjer, betalflöden och e-postpolicy. EOF