Skip to main content

Enkel innsending av årsregnskap, skattemelding og aksjonærregisteroppgave til Altinn for holdingselskaper

Project description

Wenche

Wenche er et enkelt kommandolinjeverktøy for holdingselskaper og småaksjeselskaper som må levere regnskap og skattedokumenter til norske myndigheter. Verktøyet hjelper deg å fylle ut og sende inn de obligatoriske skjemaene uten behov for et fullverdig regnskapsprogram.

Autentisering skjer via Maskinporten med et selvgenerert RSA-nøkkelpar — ingen virksomhetssertifikat eller BankID-innlogging nødvendig.

Hva er støttet?

Alle AS plikter å levere tre ting hvert år. Wenche hjelper med alle tre:

Hva Til hvem Frist Status
Årsregnskap Brønnøysundregistrene 31. juli Automatisk innsending
Aksjonærregisteroppgave (RF-1086) Skatteetaten via Altinn 31. januar Automatisk innsending
Skattemelding for AS (RF-1028 + RF-1167) Skatteetaten 31. mai Genereres lokalt — sendes inn manuelt

Merk om skattemeldingen: Automatisk innsending av skattemelding krever registrering som systemleverandør hos Skatteetaten. Wenche genererer i stedet et ferdig utfylt sammendrag som du raskt kopierer inn på skatteetaten.no.

Hva er de ulike skjemaene?

Har du aldri hørt om disse skjemaene? Her er en kort forklaring:

  • Årsregnskapet er en oppsummering av selskapets økonomi — hva selskapet eier, hva det skylder, og hva det tjente eller tapte i løpet av året. Dette er offentlig informasjon.
  • Aksjonærregisteroppgaven (RF-1086) forteller Skatteetaten hvem som eier aksjer i selskapet og om det er utbetalt utbytte. Brukes blant annet til å forhåndsutfylle aksjonærenes personlige skattemelding.
  • Næringsoppgaven (RF-1167) er en detaljert oppstilling av selskapets inntekter og kostnader for skatteformål. Grunnlaget for skatteberegningen.
  • Skattemeldingen for AS (RF-1028) er selve skattemeldingen der Skatteetaten beregner om selskapet skylder skatt. For holdingselskaper som eier aksjer i andre selskaper gjelder fritaksmetoden: utbytte fra datterselskaper er i praksis 97 % skattefritt.

Forutsetninger

  • Python 3.11 eller nyere (sjekk med python3 --version, installer via brew install python@3.11 om nødvendig)
  • Registrert Maskinporten-klient hos Digdir (se Registrer Maskinporten-klient) — kun nødvendig for automatisk innsending
  • OpenSSL (følger med macOS og de fleste Linux-distribusjoner)

Installasjon

pip install wenche

Det er alt. Wenche er nå tilgjengelig som kommandoen wenche i terminalen din.

Merk: Det anbefales å installere i et virtuelt miljø for å unngå konflikter med andre Python-pakker:

python3 -m venv .venv
source .venv/bin/activate
pip install wenche

Husk å aktivere miljøet (source .venv/bin/activate) i nye terminalvinduer.

For utviklere

Vil du bidra til koden eller kjøre siste versjon fra GitHub?

git clone https://github.com/olefredrik/wenche.git
cd wenche
python3 -m venv .venv
source .venv/bin/activate
pip install -e .

Oppsett

1. Generer RSA-nøkkelpar

Dette er nøklene som brukes til å identifisere deg overfor Maskinporten. Tenk på dem som brukernavn og passord, men sikrere.

openssl genrsa -out maskinporten_privat.pem 2048
openssl rsa -in maskinporten_privat.pem -pubout -out maskinporten_offentlig.pem

Den private nøkkelen (maskinporten_privat.pem) skal aldri deles eller legges i git. Den offentlige nøkkelen lastes opp til Digdir under registrering.

2. Konfigurasjonsfil

cp config.example.yaml config.yaml

Åpne config.yaml og fyll inn selskapets opplysninger, regnskapstall og aksjonærdata. Filen er kommentert og selvforklarende. Alle beløp oppgis i hele kroner (NOK).

3. Miljøvariabler

cp .env.example .env

Fyll inn verdiene fra Digdirs selvbetjeningsportal (se Registrer Maskinporten-klient):

MASKINPORTEN_CLIENT_ID=din-client-id-her
MASKINPORTEN_PRIVAT_NOKKEL=maskinporten_privat.pem
MASKINPORTEN_KID=uuid-fra-portalen-her
WENCHE_ENV=prod

MASKINPORTEN_KID er UUID-en som portalen tildeler nøkkelen din — synlig i nøkkellisten under klienten.

For testmiljø (Maskinporten test + Altinn tt02):

WENCHE_ENV=test

Registrer Maskinporten-klient

Wenche bruker Maskinporten for maskin-til-maskin-autentisering. Registrering er gratis og tar ca. 15 minutter.

Steg 1 — Søk om tilgang

Gå til samarbeid.digdir.no og søk om tilgang som Maskinporten-konsument. Du vil motta en e-post med bekreftelse og lenke til selvbetjeningsportalen.

Steg 2 — Opprett integrasjon

Logg inn på selvbetjeningsportalen.digdir.no:

  1. Velg Test (for testmiljø) eller Produksjon
  2. Velg KlienterMaskinporten & KRR
  3. Klikk Ny integrasjon og fyll ut:
    • Visningsnavn: wenche
    • Beskrivelse: valgfri
    • Access token levetid: 120 (standard)
  4. Legg til scopes: altinn:instances.read og altinn:instances.write
  5. Kopier klient-ID inn i .env som MASKINPORTEN_CLIENT_ID

Steg 3 — Last opp offentlig nøkkel

Under klienten, klikk Legg til nøkkel og lim inn innholdet i maskinporten_offentlig.pem (PEM-format). Lagre klienten.

Nøkkelen vil vises i listen med en UUID (f.eks. 9bc5078c-...). Kopier denne UUID-en inn i .env som MASKINPORTEN_KID.

Merk: Endringer i testmiljøet kan ta noen minutter å synkronisere.

Bruk

Skattemelding (frist 31. mai)

Wenche genererer et ferdig utfylt sammendrag av RF-1167 (næringsoppgaven) og RF-1028 (skattemeldingen) basert på tallene i config.yaml.

wenche generer-skattemelding

Du kan også lagre sammendraget til en fil:

wenche generer-skattemelding --ut skattemelding.txt

Sammendraget inneholder:

  • Alle felt i næringsoppgaven (RF-1167) ferdig utfylt
  • Skatteberegning med fritaksmetoden der det er aktuelt
  • Beregnet skatt (22 %)
  • Fremførbart underskudd hvis selskapet gikk med tap
  • Konkrete instruksjoner for hva du gjør videre på skatteetaten.no

Sende inn manuelt:

  1. Gå til skatteetaten.no og logg inn med BankID
  2. Åpne skattemeldingen for AS for gjeldende regnskapsår
  3. Fyll inn tallene fra sammendraget Wenche har generert
  4. Kontroller at Skatteetaten beregner samme skatt
  5. Send inn

Årsregnskap (frist 31. juli)

Test uten innsending først (anbefalt):

wenche send-aarsregnskap --dry-run

--dry-run lagrer det genererte iXBRL-dokumentet lokalt slik at du kan inspisere det.

Send inn til Brønnøysundregistrene:

wenche login
wenche send-aarsregnskap
wenche logout

Aksjonærregisteroppgave (frist 31. januar)

Test uten innsending:

wenche send-aksjonaerregister --dry-run

Send inn til Altinn:

wenche login
wenche send-aksjonaerregister
wenche logout

wenche login autentiserer mot Maskinporten med din private nøkkel og lagrer et token lokalt. Tokenet gjenbrukes for påfølgende kommandoer i samme sesjon.

Alle kommandoer

wenche --help

Kommandoer:
  login                    Autentiser mot Maskinporten med RSA-nokkel
  logout                   Logg ut og slett lagret token
  generer-skattemelding    Generer ferdig utfylt RF-1167 og RF-1028 fra config.yaml
  send-aarsregnskap        Send inn arsregnskap til Bronnoysundregistrene
  send-aksjonaerregister   Send inn aksjonaerregisteroppgave (RF-1086)

Alternativer (send-aarsregnskap og send-aksjonaerregister):
  --config TEXT            Sti til konfigurasjonsfil [standard: config.yaml]
  --dry-run                Generer dokument lokalt uten a sende til Altinn

Alternativer (generer-skattemelding):
  --config TEXT            Sti til konfigurasjonsfil [standard: config.yaml]
  --ut TEXT                Lagre sammendrag til fil

Frister

Innsending Frist
Aksjonærregisteroppgave 31. januar
Skattemelding for AS 31. mai
Årsregnskap 31. juli

Sikkerhet

  • .env og config.yaml skal aldri legges i git (de er lagt til i .gitignore)
  • Innloggingstokenet lagres i ~/.wenche/token.json med rettigheter begrenset til din bruker
  • Wenche sender aldri data andre steder enn til Maskinporten og Altinn

Bidra

Bidrag er velkomne. Åpne gjerne en issue eller pull request. Særlig nyttig:

  • Verifisering av iXBRL-format mot Brønnøysundregistrenes gjeldende taksonomi
  • Implementasjon av automatisk skattemeldingsinnsending (krever systemleverandør-registrering hos Skatteetaten)
  • Testing mot Altinn testmiljø (tt02)

Lisens

MIT — se LICENSE.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wenche-0.1.1.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wenche-0.1.1-py3-none-any.whl (22.8 kB view details)

Uploaded Python 3

File details

Details for the file wenche-0.1.1.tar.gz.

File metadata

  • Download URL: wenche-0.1.1.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for wenche-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3dff3c4eb3e4a9afbe90f98419bd239f071c57e2218460070935a86566eea7d5
MD5 2a1cf29bb80d6bd660e2fee7852ff181
BLAKE2b-256 9feaf7ad548c90708860efaf0473c998fda94f0031619f1cb5c78bb723054458

See more details on using hashes here.

Provenance

The following attestation bundles were made for wenche-0.1.1.tar.gz:

Publisher: publish.yml on olefredrik/Wenche

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wenche-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: wenche-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 22.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for wenche-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d976bf489d6d877305e783f6c90711ba12a943ac7e9f0f83b82b37d6b7f96a68
MD5 e268d5c10673b80c9fd91385e65e36f7
BLAKE2b-256 421450369d3ce80f225aa0cfd0444ce6f7dbdc55177d460a1c33e3714cf00382

See more details on using hashes here.

Provenance

The following attestation bundles were made for wenche-0.1.1-py3-none-any.whl:

Publisher: publish.yml on olefredrik/Wenche

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page