Årsregnskap API

Innsendingsflyt

Sekvensdiagram

Submission, sequence diagram
%%{init: {
  'theme':'default',
  'themeVariables': {
    'darkMode': false,
    'labelBoxBkgColor': '#e8f4f8',
    'noteBkgColor': '#d4e8f5',
    'noteBorderColor': '#7A9DB5'
  }
}}%%
sequenceDiagram
    participant Bruker as 👤
    participant Finsta
    participant Altinn as 🌐 Altinn API

    Note over Bruker,Altinn: Opprett Instans

    Bruker ->> Finsta: Start innsending
    activate Finsta
    Finsta ->> Altinn: POST /instances/create
    activate Altinn
    Altinn -->> Finsta: party_id, instance_id, hovedskjema_id, underskjema_id
    deactivate Altinn

    Note over Bruker,Altinn: Last opp data

    Finsta ->> Altinn: PUT /data/{hovedskjema_id} (XML)
    activate Altinn
    Altinn -->> Finsta: OK
    deactivate Altinn

    Finsta ->> Altinn: PUT /data/{underskjema_id} (XML)
    activate Altinn
    Altinn -->> Finsta: OK
    deactivate Altinn

    loop Vedlegg
        Finsta ->> Altinn: POST /data/?dataType=Vedlegg (PDF++)
        activate Altinn
        Altinn -->> Finsta: vedlegg_id
        deactivate Altinn
    end

    Note over Bruker,Altinn: Validering

    Finsta ->> Altinn: GET /validate
    activate Altinn
    Altinn -->> Finsta: valideringsfeil[]
    deactivate Altinn
    deactivate Finsta

    alt Valideringsfeil
        activate Finsta
        Note right of Finsta: 🗄️ Lagre: "Avvist"
        Note right of Bruker: ❌ Stopp - må fikse feil
        Finsta ->> Bruker: Vis valideringsfeil
        deactivate Finsta

    else Validering OK
        Note right of Bruker: ✅ Fortsett: validering ok

        Note over Bruker,Altinn: Send til signering

        activate Finsta
        Finsta ->> Altinn: PUT /process/next {"action": "write"}
        activate Altinn
        Altinn -->> Finsta: currentTask: "Signering"
        deactivate Altinn

        Note right of Finsta: 🗄️ Lagre: "Sendt til signering"

        Finsta ->> Bruker: Klar for signering
        deactivate Finsta

        Note over Bruker,Altinn: Signering

        Bruker ->> Finsta: Signer
        activate Finsta
        Finsta ->> Altinn: PUT /process/next {"action": "sign"}
        activate Altinn
        Altinn -->> Finsta: currentTask: "Arkivert"
        deactivate Altinn

        Note right of Finsta: 🗄️ Lagre: "Signert"

        Finsta ->> Bruker: ✅ Innsending ferdig!
        deactivate Finsta
    end

Flytdiagram

Submission, flow chart
%%{init: {
  'theme':'default',
  'themeVariables': {
    'fontSize': '14px',
    'primaryColor': '#e8f4f8',
    'primaryBorderColor': '#7a9db5'
  }
}}%%
flowchart TD

%% Nodes
    Start([Start innsending]):::endpoint

    CheckInstance{Har instans<br/>fra før?}:::system
    CreateInstance[Opprett instans<br/>POST /instances/create]:::system
    ReuseInstance[Gjenbruk eksisterende instans]:::system
    StoreIds[Lagre instans-info]:::database

    UploadHoved[Last opp hovedskjema<br/>PUT /data/hovedskjema_id]:::system
    UploadUnder[Last opp underskjema<br/>PUT /data/underskjema_id]:::system
    UploadAttachments[Last opp evt vedlegg<br/>POST /data/?dataType=Vedlegg]:::system

    Validate[Valider<br/>GET /validate ]:::user
    RejectValidated([✗ Stopp - må fikse feil]):::error
    StoreValidated([Lagre: Validert ok]):::database

    SendToSigning[Send til signering<br/>PUT /process/next 'action: confirm']:::user
    StoreSentToSigning([Lagre: Sendt til signering]):::database

    WaitForSigningInAltinn[Vent på signering i Altinn]:::wait
    Sign[Signer<br/>PUT /process/next 'action: sign']:::user
    StoreSigned([✓ Lagre: Signert]):::success

%% Edges
    Start --> CheckInstance
    CheckInstance -->|Nei| CreateInstance
    CheckInstance -->|Ja| ReuseInstance
    CreateInstance --> StoreIds
    ReuseInstance --> UploadHoved
    StoreIds --> UploadHoved
    UploadHoved --> UploadUnder
    UploadUnder --> UploadAttachments
    UploadAttachments --> Validate
    Validate -->|Nye/ukjente feil| RejectValidated
    Validate -->|Ok| StoreValidated
    StoreValidated --> SendToSigning
    SendToSigning --> StoreSentToSigning
    StoreSentToSigning --> WaitForSigningInAltinn
    StoreSentToSigning --> Sign
    WaitForSigningInAltinn --> |sync|StoreSigned
    Sign --> |Ok|StoreSigned

%% Styles
classDef endpoint fill:#d4e8f5, stroke:#333, stroke-width:1px
classDef system   fill:#e8f4f8, stroke:#333, stroke-width:1px
classDef user     fill:#d5e8d5, stroke:#333, stroke-width:1px
classDef database fill:#b8d4e8, stroke:#333, stroke-width:1px
classDef wait     fill:#f5f0e8, stroke:#333, stroke-width:1px
classDef error    fill:#ffe1e1, stroke:#333, stroke-width:1px
classDef success  fill:#d5f5d5, stroke:#333, stroke-width:1px

Database-modell

---
title: Database-modell
---
%%{
  init: {
    'theme': 'default',
    'themeVariables': {
      'fontSize': '14px',
      'lineColor': '#333',
      'border1': '#333',
      'border2': '#333',
      'mainBkg': '#d4e8f5',
      'tertiaryColorz': 'blue',
      'secondBkg': 'lightblue',
      'oldAttributeBackgroundColorEven': 'yellow'
    }
  }
}%%
erDiagram
    as_sub ||--o{ as_val : "has one or many"
    as_sub ||--o| as_sts : "has zero or one"
    as_sub ||--o| as_sig : "has zero or one"

    as_sub[annual_statement_submission] {
        bigint id PK
        bigint financial_statement_id FK
        uuid fs_uuid
        uuid submission_uuid

        jsonb instance_ref
        jsonb instance_info
        jsonb attachments_info

        timestamp _initiated_at_
        timestamp _data_updated_at_
        timestamp _validated_at_
        timestamp _sent_to_signing_at_
        timestamp _signed_by_representative_at_
        timestamp _synced_at_

        timestamp deleted_at "soft delete"
    }

    as_val[annual_statement_validation] {
        bigint id PK
        bigint submission_id FK
        jsonb accepted_validation_checksums
        jsonb validations
        timestamp validated_at
        string validated_by
    }

    as_sts[annual_statement_sent_to_signing] {
        bigint id PK
        bigint submission_id FK
        timestamp sent_to_signing_at
        string sent_to_signing_by
    }

    as_sig[annual_statement_signed_by_representative] {
        bigint id PK
        bigint submission_id FK
        timestamp signed_by_representative_at
        string signed_by_representative_by
    }

Servers

servers
{
  "servers": [
    {
      "description": "TT02 server",
      "url": "https://brg.apps.tt02.altinn.no"
    },
    {
      "description": "Production server",
      "url": "https://brg.apps.altinn.no"
    }
  ]
}