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 viabrew install python@3.11om 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 wencheHusk å 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:
- Velg Test (for testmiljø) eller Produksjon
- Velg Klienter → Maskinporten & KRR
- Klikk Ny integrasjon og fyll ut:
- Visningsnavn:
wenche - Beskrivelse: valgfri
- Access token levetid:
120(standard)
- Visningsnavn:
- Legg til scopes:
altinn:instances.readogaltinn:instances.write - Kopier klient-ID inn i
.envsomMASKINPORTEN_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:
- Gå til skatteetaten.no og logg inn med BankID
- Åpne skattemeldingen for AS for gjeldende regnskapsår
- Fyll inn tallene fra sammendraget Wenche har generert
- Kontroller at Skatteetaten beregner samme skatt
- 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
.envogconfig.yamlskal aldri legges i git (de er lagt til i.gitignore)- Innloggingstokenet lagres i
~/.wenche/token.jsonmed 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wenche-0.1.2.tar.gz.
File metadata
- Download URL: wenche-0.1.2.tar.gz
- Upload date:
- Size: 18.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f760e6a93ae3382125199ae8c934a4d98c6707619164acf2d320148694fc049b
|
|
| MD5 |
1a2962091390ba14500fc74ba20b7e15
|
|
| BLAKE2b-256 |
aeb3f94c0ff9ea95c4e7c9bef47d0ed44480c06a8b113ef24cdd10bee667af4d
|
Provenance
The following attestation bundles were made for wenche-0.1.2.tar.gz:
Publisher:
publish.yml on olefredrik/Wenche
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wenche-0.1.2.tar.gz -
Subject digest:
f760e6a93ae3382125199ae8c934a4d98c6707619164acf2d320148694fc049b - Sigstore transparency entry: 1058320128
- Sigstore integration time:
-
Permalink:
olefredrik/Wenche@0301a400018f4c4ed9be53970bf3c002257ebd15 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/olefredrik
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0301a400018f4c4ed9be53970bf3c002257ebd15 -
Trigger Event:
push
-
Statement type:
File details
Details for the file wenche-0.1.2-py3-none-any.whl.
File metadata
- Download URL: wenche-0.1.2-py3-none-any.whl
- Upload date:
- Size: 22.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2883a97f844dee243e883d93cb9fb36635f9da52f1033b15632d8d9cc1e4a3c7
|
|
| MD5 |
c4dbcd7516b4d03a9567b48e38010a78
|
|
| BLAKE2b-256 |
705dab62a3f175996b817322c218bad8ea4484c8cf113014a53df30ebdb36ce7
|
Provenance
The following attestation bundles were made for wenche-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on olefredrik/Wenche
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wenche-0.1.2-py3-none-any.whl -
Subject digest:
2883a97f844dee243e883d93cb9fb36635f9da52f1033b15632d8d9cc1e4a3c7 - Sigstore transparency entry: 1058320129
- Sigstore integration time:
-
Permalink:
olefredrik/Wenche@0301a400018f4c4ed9be53970bf3c002257ebd15 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/olefredrik
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0301a400018f4c4ed9be53970bf3c002257ebd15 -
Trigger Event:
push
-
Statement type: