Flyt: Utfylling og innsending (Landax)¶
Skjemasvar lagres i Landax. Connect API er proxy, og lagrer i tillegg en lokal
kopi i SurveySubmissions (to-fase-innsending) slik at ingenting går tapt om
Landax er nede.
Hovedflyt¶
flowchart TD
subgraph auth[Autentisert]
A1[Velg skjema] --> A2[createSurveyResult]
A2 --> A3[Fyll ut + send]
A3 --> A4[saveSurveyResult]
end
subgraph kiosk[Kiosk uten innlogging]
K1[Token-validering] --> K2[Velg kunde + fyll ut]
K2 --> K3[kiosk/submit]
end
A4 & K3 --> P1[Fase 1: SurveySubmissions<br/>Status = Pending]
P1 --> P2[Fase 2: Landax<br/>SurveyResults/Save]
P2 --> P3{OK?}
P3 -->|ja| S[Status = Submitted<br/>+ LandaxResultId]
P3 -->|nei| F[Status = Failed/Retry<br/>+ ErrorMessage]
A4 --> M[markAsDone]
classDef bruker fill:#cfe2ff,stroke:#3b6db5
classDef sys fill:#f8d7da,stroke:#b53b46
class A1,A3,K1,K2 bruker
class A2,A4,K3,P1,P2,P3,S,F,M sys
To-fase-innsending (sekvens)¶
sequenceDiagram
autonumber
actor U as Bruker/Kiosk
participant App as Connect-app
participant API as Connect API
participant DB as SurveySubmissions
participant L as Landax
U->>App: Send inn svar
App->>API: POST .../save (auth) / kiosk/submit
API->>DB: INSERT (Status = Pending)
API->>L: SurveyResults/Save
alt Landax OK
L-->>API: LandaxResultId
API->>DB: UPDATE Status = Submitted
else Landax feiler
API->>DB: UPDATE Status = Failed/Retry
end
API-->>App: Suksess (svaret er trygt lokalt uansett)
Coworker-mapping (autentisert)¶
Svar knyttes til Landax-medarbeideren, i denne rekkefølgen:
- Ansattnummer
{selskap}-{brukernavn}motCoworker.Number Coworker.EmailCoworker.MobileCoworker.Name(inneholder)
Treffer ingen: «User not mapped to Landax Coworker ID» — medarbeideren må registreres i Landax.
Kiosk: token-validering¶
kiosk/definition validerer tokenet: IsActive, ValidFrom ≤ nå ≤ ValidTo, og
at dagens antall innsendinger er under MaxSubmissionsPerDay. Token opprettes i
/kiosk-token-admin (Guid → KioskTokens), med URL/QR
…/survey-kiosk?token=…&definitionId=…&companyId=….
Datalag¶
SurveySubmissions (per selskaps-DB): Status (Pending → Submitted /
Failed / Retry), LandaxResultId, KioskTokenId, CoworkerId, CustomerId,
JsonPayload/AnswersJson, RetryCount, CreatedDate, ErrorMessage,
IpAddress/UserAgent.
KioskTokens: Token (unik), DefinitionId, ValidFrom/ValidTo,
IsActive, MaxSubmissionsPerDay, CompanyId.
Svarformat per spørsmål: CheckedAlternativeIds (radio/flervalg/nedtrekk),
Text/Value, og SignatureFileData (base64-PNG for signaturspørsmål, type 16).
Type 7 = avsnitt (kun overskrift, intet svar).
Avvik og reversering¶
| Symptom | Årsak | Tiltak |
|---|---|---|
| «User not mapped …» | Mangler/feil medarbeider i Landax | Rett Coworker.Number/Email |
| Innsending ikke i Landax | Fase 2 feilet — ligger lokalt med Failed |
Resend fra SurveySubmissions |
| Kiosk «token ugyldig» | Utløpt/deaktivert/feil definisjons-ID | Sjekk/forny token |
| Kiosk «maks nådd» | Dagsgrensen brukt opp | Øk MaxSubmissionsPerDay |
(Verifisert i Controllers/Landax/SurveyController.cs, SurveyKioskController.cs,
KioskTokenController.cs, survey_kiosk_database_setup.sql,
landax-survey-api.service.ts.)