Skip to main content

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

Project description

Wenche

PyPI Python License: MIT Status

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

Sjekk først at du har Python 3.11 eller nyere:

python3 --version

Viser den 3.9 eller eldre, installer en nyere versjon:

brew install python@3.11

Installer deretter Wenche i et virtuelt miljø:

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

Wenche er nå tilgjengelig som kommandoen wenche i terminalen din. 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.5.tar.gz (22.6 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.5-py3-none-any.whl (26.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: wenche-0.1.5.tar.gz
  • Upload date:
  • Size: 22.6 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.5.tar.gz
Algorithm Hash digest
SHA256 4c6cdcbd0489edeb0cd01825c89acf2e97fd86a53fdd82f2d6f9ae20f5791617
MD5 13cea751e81a0a9329ed52af97e7948e
BLAKE2b-256 e76b17b7108dbc94634de5e3cce61d8007388249de12db6a40d2fb4cb5bd4139

See more details on using hashes here.

Provenance

The following attestation bundles were made for wenche-0.1.5.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.5-py3-none-any.whl.

File metadata

  • Download URL: wenche-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 26.9 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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 89957c1a2bcdcadde65945282c98f5ff35cf3caeef9916d37152843caffb23dc
MD5 09589fa1d1dc3a98335bfd99d771620a
BLAKE2b-256 86b85eb439af7ff27f1ca513e82ca61c10859ff8631b34270ea9c09da2455d57

See more details on using hashes here.

Provenance

The following attestation bundles were made for wenche-0.1.5-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