Organisasjons-synk

Når et selskap endrer navn i Brønnøysundregistrene, vil ikke denne endringen automatisk oppdateres i Finsta. Brukeren må aktivt hente oppdatert informasjon. Historiske årsoppgjør kan beholde det gamle navnet gjennom en overstyring.

Overstyring per årsoppgjør

Tre felt kan overstyres per årsoppgjør via FinancialStatementAttributes:

orgNameOverride

Foretaksnavn

establishedAtOverride

Stiftelsesdato

liquidatedAtOverride

Avviklingsdato (settes kun manuelt, oppdages ikke automatisk via synk)

Alle artefakter (skattemelding, årsregnskap, næringsspesifikasjon, PDF-eksport) bruker effektivt organisasjonsnavn via getEffectiveOrganization(). Hvis det finnes en overstyring brukes den, ellers brukes verdien fra virksomheten.

Overstyring kan settes manuelt i innstillinger for årsoppgjøret, under "Virksomhet"-seksjonen (ekspander overstyringspanelet med chevron-knappen til høyre). Ved synkronisering styrer brukeren i modalen hvilke årsoppgjør som skal få overstyring; tidligere inntektsår foreslås forhåndsvalgt. Årsoppgjør som allerede har en overstyring beholdes uendret.

Synkroniseringsflyt

Når en navneendring oppdages, kan brukeren velge hvilke historiske årsoppgjør som skal beholde det gamle navnet.

sequenceDiagram
    participant Patron
    participant Finsta
    participant Bruker

    Patron->>Finsta: Pub/Sub: tenantUpdated
    Finsta->>Finsta: Sammenligner med OrganizationEntity
    Finsta->>Finsta: Lagrer pendingBrregSync

    Bruker->>Finsta: Åpner synkroniseringsmodal
    Finsta->>Patron: Henter gjeldende data (dryRun)
    Finsta-->>Bruker: Viser endringer + årsoppgjørsliste

    Bruker->>Finsta: Bekrefter valgte år
    Finsta->>Finsta: Frontend oversetter år -> FS-UUID-er (med fsUuid for nåværende)
    Finsta->>Finsta: Setter overstyring på nåværende FS (samme tx)
    Finsta->>Finsta: Oppdaterer org, fjerner pendingBrregSync, commit
    Finsta-->>Finsta: Publiserer event per resterende FS (async)

Synkroniseringsmodal

Modalen er tilgjengelig fra fire steder:

  • Innstillinger for årsoppgjøret (synk-knapp i "Virksomhet"-seksjonen)

  • Organisasjonskortet (tre-punkt-meny → "Hent oppdatert virksomhetsinformasjon")

  • Næringsspesifikasjon → Virksomhetsinfo (synk-ikon i tema-headeren)

  • Årsoppgjørstatus (synk-ikon ved "Innstillinger")

Flyten i modalen:

  1. Henter endringer fra Patron (dryRun)

  2. Viser hva som er endret (navn, stiftelsesdato) med gjennomstreking av gamle verdier

  3. Bruker velger hvilke år som skal få overstyring med det gamle navnet

  4. Ved bekreftelse oppdateres virksomheten og overridefelter settes

stateDiagram-v2
    [*] --> Henter: Åpner modal
    Henter --> IngenEndringer: Ingen diff
    Henter --> ViserEndringer: Diff funnet
    IngenEndringer --> [*]: Lukk
    ViserEndringer --> Bekreftet: Bruker bekrefter
    ViserEndringer --> [*]: Avbryt
    Bekreftet --> [*]: Org oppdatert + overrides satt

Teknisk

Synkroniseringsendepunkt

POST /organizations/:synchronize med SynchronizeOrganizationCommand. Støtter dryRun, overrideFsUuids (hvilke årsoppgjør som får overstyring) og fsUuid (årsoppgjøret brukeren står i når synken trigges).

Overstyring av fsUuid kjøres umiddelbart via FsOverridePropagationDispatcher i samme transaksjon som org-oppdateringen, slik at brukeren ser resultatet med én gang. Øvrige FS-er i overrideFsUuids fanes ut som FsOverridePatchRequestedEvent etter at org er commitet; FsOverrideEventListener plukker dem opp på @Async-executoren, reetablerer tenant-schema via TenantSchemaResolver.doWithTenant, og dispatcher hver patch i egen transaksjon med eget @CommandTracing-spor. Feil i async-bena logges (log.error → GCP Error Reporting) uten retry — brukeren kan re-trigge synken.

Respons: preview (liste over alle FS, kun ved dryRun) og updatedFs (resultatet av umiddelbar dispatch, kun når fsUuid er i overrideFsUuids).

dryRun=true har én bivirkning: den oppdaterer pendingBrregSyncOrganizationEntity slik at den gjenspeiler oppdaget tilstand. Hvis det finnes endringer lagres de; hvis det ikke finnes endringer men en pendingBrregSync er lagret fra før, ryddes den opp. Ingen FS-overstyringer eller org-feltendringer skrives i dryRun.

Pub/Sub-lytter

TenantUpdatedEventListener lytter på tenantUpdated-finsta. Aktiv som standard, kan skrus av med conta.patron.tenant.updated.enabled: false. Lagrer diff som pendingBrregSync (JSONB) på OrganizationEntity. En blå indikator vises på synk-knappene når pendingBrregSync har en verdi.