Document Attachments
Feature Detail
Description
Document Attachments allows peer mentors to attach files - images, PDFs, and documents - to individual activity records. Typical use cases include attaching event invitations, Facebook screenshots, meeting agendas, or scanned forms that provide evidence for Bufdir auditing. The feature supports selecting files from the device's file picker and camera roll, compresses images before upload to manage storage costs, and stores attachment metadata in the activity record. Attachments are accessible from the activity detail view and synchronized when the device is online.
Sources & reasoning
Lines 107-108 give the exact use-case (invitations, screenshots for Bufdir auditing). Line 348 places it in Fase 2 (v1.0). The needs matrix marks it NICE TO HAVE / Fase 2, consistent with should_have at v1.0.
-
docs/source/likeperson.md · line 107-108Dokumentvedlegg til aktiviteter: Invitasjoner, Facebook-skjermbilder m.m. - viktig for Bufdir-etterprÞving.
-
docs/source/likeperson.md · line 348Dokumentvedlegg til aktiviteter (NHF)
Analysis
NHF specifically called out document attachments as important for Bufdir auditability - attachments like event invitations and Facebook screenshots constitute evidence that an activity occurred as described. Without attachment support, peer mentors must maintain separate paper or digital archives, which degrades over time and creates gaps in the audit trail. Given that all four organizations receive Bufdir funding and are subject to audits, the ability to attach supporting documents directly to activity records significantly reduces administrative burden at report time and provides a stronger compliance posture. This is categorized as NHF-specific but broadly useful.
Use file_picker and image_picker Flutter plugins for device file and camera access. AttachmentPickerWidget wraps both pickers behind a unified bottom sheet. AttachmentService handles upload to the backend file storage (S3-compatible) using multipart POST with progress reporting. FileStorageClient abstracts the storage backend. Images are compressed using the flutter_image_compress plugin before upload with configurable quality/size limits. Attachment metadata (name, size, MIME type, storage URL) is stored in the activity_attachments table via AttachmentRepository. Offline support stores pending uploads in the Drift outbox and completes them when connectivity is restored. File picker permission is requested lazily.
Quality Assurance
Peer Mentor (primary) · Coordinator (same flow)Peer Mentor
Quick UAT
- Logg inn i Meander-appen som Likeperson. Ă pne en eksisterende aktivitet fra aktivitetslisten.
- Trykk pÄ «Legg til vedlegg»-knappen nederst pÄ aktivitetsdetaljsiden.
- Velg en fil fra filvelgeren eller kamerarullen (f.eks. en PDF-invitasjon eller et Facebook-skjermbilde).
- Bekreft at et miniatyrbilde vises og at opplastingsfremdrift per vedlegg er synlig.
- Vent til opplastingen er fullfÞrt. Bekreft at vedlegget vises i vedleggslisten pÄ aktivitetsdetaljen med filnavn og stÞrrelse.
- Lukk aktiviteten og Äpne den pÄ nytt. Bekreft at vedlegget fortsatt er synlig og kan Äpnes.
Quick UAT â Accessibility
-
Logg inn i Meander-appen som Likeperson. Ă pne en eksisterende aktivitet fra aktivitetslisten.
- Screen reader Sideoverskrift for aktivitetsdetalj annonseres; skjermleser leser aktivitetstittel og dato.
- Keyboard / focus Tab-rekkefĂžlge: overskrift â feltliste â handlingsknapper.
- Focus visibility Synlig fokusring pÄ valgt aktivitet i listen.
-
Trykk pÄ «Legg til vedlegg»-knappen nederst pÄ aktivitetsdetaljsiden.
- Screen reader Knapp annonseres som «Legg til vedlegg, knapp».
- Keyboard / focus Knappen nÄs med Tab; aktiveres med Enter eller Space.
- Focus visibility Synlig fokusring pÄ «Legg til vedlegg»-knappen.
- Touch target â„ 24Ă24 CSS px
-
Velg en fil fra filvelgeren eller kamerarullen (f.eks. en PDF-invitasjon eller et Facebook-skjermbilde).
- Screen reader Systemets filvelger annonserer mappenavn og filnavn ved navigasjon. Kamerarull-alternativ er merket semantisk.
- Keyboard / focus Piltaster navigerer filer i systemvelger; Enter bekrefter valg.
- Focus visibility Fokus flyttes inn i systemvelgerdialogen ved Äpning.
- Zoom Filvelger-dialog brukbar ved 200 % zoom uten overlapping.
-
Bekreft at et miniatyrbilde vises og at opplastingsfremdrift per vedlegg er synlig.
- Screen reader Fremdriftsindikator annonseres som «Laster opp, X prosent».
- Live region Polite live region oppdaterer prosentverdi under opplasting.
- Contrast Fremdriftslinje: farge brukes ikke alene â prosenttall vises i tekst ved siden av.
-
Vent til opplastingen er fullfÞrt. Bekreft at vedlegget vises i vedleggslisten pÄ aktivitetsdetaljen med filnavn og stÞrrelse.
- Screen reader «Opplasting fullfÞrt. [Filnavn] lagt til.» annonseres av live region.
- Focus visibility Fokus flyttes til det nylig lagt til vedlegget i listen.
- Live region 'Opplasting fullfĂžrt. [Filnavn] lagt til vedleggslisten.'
-
Lukk aktiviteten og Äpne den pÄ nytt. Bekreft at vedlegget fortsatt er synlig og kan Äpnes.
- Screen reader Vedleggsrad i liste annonseres med filnavn, type og stÞrrelse. «Trykk for Ä Äpne»-hint inkludert.
- Keyboard / focus Tab navigerer til vedleggsrad; Enter Äpner vedlegget.
- Touch target â„ 24Ă24 CSS px pĂ„ vedleggsrad og slett-knapp.
Role Boundaries
3 role(s) must NOT access this feature-
Organization Administrator
Organisasjonsadministrator bruker Admin Web Portal, ikke mobilappen. Skjermen for dokumentvedlegg finnes ikke i admin-portalen; deep-link til vedleggsflyt returnerer 403.
-
Global Administrator
Global administrator har ikke tilgang til mobilappen. ForsÞk pÄ innlogging i mobilappen omdirigerer til admin-portalen. Ingen tilgang til dokumentvedlegg-funksjon.
-
Prospective Organization Representative
Prospektive organisasjonsrepresentanter er ikke brukere av mobilappen. Ingen konto, ingen tilgang.
Expected End State
Vedlegget er lagret og synlig pÄ aktivitetsdetaljsiden med korrekt filnavn, MIME-type og stÞrrelse. Metadata er persistert i activity_attachments-tabellen med referanse til aktivitets-ID og organisasjons-ID. Filen er tilgjengelig via signert URL i skylagringen, og vedlegget synkroniseres til serveren neste gang enheten er online.
Components (22)
Shared Components
These components are reused across multiple features
User Stories
No user stories have been generated for this feature yet.