Files
claims-system/README.md
2025-11-09 21:49:44 +01:00

4.9 KiB
Raw Blame History

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:
    uv run django-admin makemessages -l en
    uv run django-admin compilemessages -l en
    
  • <html lang="{{ LANGUAGE_CODE }}"> 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:

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