Dette er en pilot for å forenkle rapporteringen til SSB. Den dekker i første omgang rapportering til
varehandelsindeksen,
som idag løses ved å sende inn skjema RA-0187.
Istedenfor å finne de relevante omsetningstallene manuelt, inneholder denne siden kode som kan hente de relevante tallene
fra en oppdatert SAF-T-fil. Følg instruksjonene under. Se Github for
mer informasjon.
Du kan også skru på en "REPL" (Python-vindu for å kjøre kode):
def display_debug():
el = Element('debug')
el.remove_class('hidden')
el.add_class('visible')
el = Element('debug_respons')
el.clear()
display('Python-vindu vises nå nederst på siden.', target="debug_respons")
def skjul_debug():
el = Element('debug')
el.remove_class('visible')
el.add_class('hidden')
el = Element('debug_respons')
el.clear()
Steg 1: Velg SAF-T-fil
Eksporter en SAF-T-fil fra regnskapssystemet. Bokføringen må være oppdatert for perioden det skal rapporteres for.
Merk at filen ikke blir sendt/overført til noen andre.
Du kan verifisere dette selv ved å skru på flymodus/trekke ut nettverkskabelen, før du velger en fil. Analysen av SAF-T-filen vil fungere ettersom den relevante koden
allerede er lastet ned. Bruk
denne filen hvis du ikke har en SAF-T fil og vil teste funksjonene på denne siden. Merk at testfilen kun inneholder data for 2017.
# Bruk vedlagte eksempelfil (hentet fra Skatteetatens Github)
url = ("kopi_av_eksempelfil_888888888_20180228235959_fra_Skatteetatens_github.xml")
saft, orgnr = gle2df(open_url(url))
if len(år_liste := saft['PeriodYear'].unique()) != 1:
raise()
år = år_liste[0]
min_måned = saft['Period'].min()
maks_måned = saft['Period'].max()
oppdater_månedsvelger(år, min_måned, maks_måned)
#gjentar oppsettet for å oppdage endringer i måned:
oppsett_for_å_oppdage_valgt_måned()
Steg 2: Velg rapporteringsperiode
År:
Velg måneden det skal rapporteres for:
Steg 3: Kjør analysen og verifiser resultatet
Klikk knappen nedenfor for å finne omsetning for perioden du spesifiserte i forrige steg.
Merk at det foreløpig er amerikansk desimal- og tusenskilletegn
def finn_omsetning(df, år: int, måned: int) -> str:
global resultat
global orgnr
resultat = {
'orgnr': orgnr,
'år': int(år),
'måned': måned,
}
resultat.update(dict(df.loc[
(df['Period'] == måned)
& (df['StandardAccountID'] >= '3000')
& (df['StandardAccountID'] < '4000')] \
[[
'DebitAmount', # selecting the amount-columns
'CreditAmount',]].sum()))
# beregning av omsetning, og formatering til hele tusen kroner, derfor "/1000:.0f"
omsetning_i_tusen = f"{(-(resultat['DebitAmount'] - resultat['CreditAmount']))/1000:.0f}"
resultat.update({'omsetning_i_tusen': omsetning_i_tusen})
display(f'''Orgnr: {orgnr} |
År: {år} |
Måned: {måned} |
Debit: {resultat['DebitAmount']:,.2f} |
Kredit: {resultat[ 'CreditAmount']:,.2f} |
Omsetning i hele tusen: {resultat['omsetning_i_tusen']}''',
target="resultat_finn_omsetning")
Element('a4').add_class('visible')
Element('a4').remove_class('hidden')
Steg 4: Send inn tallene til SSB
Denne funksjonen er ikke implementert
async def api_kall(data, baseurl, orid):
headers = {"Content-type": "application/json"}
new_post = await request(f"{baseurl}/{orid}", body=data, method="POST", headers=headers)
display(f"""Har POSTet følgende data:
{await new_post.json()}
Statuskode: {new_post.status}. (20x betyr at det var vellykket!)""",
target='resultat_send_inn_tallene')
def send_inn():
baseurl = "https://oa-reporting-api.ew.r.appspot.com/orid"
data = json.dumps(resultat)
asyncio.ensure_future(api_kall(data, baseurl, "RA-0187"))
Debug: Her kan du kjøre egen kode
Bruk den såkalte REPL nedenfor for å kjøre egen kode. Dataene fra SAF-T-fila er tilgjengelige i variabelen saft.
Etter at du har kjørt steg 3, er omsetningen tilgjengelig i variabelen omsetning
# kjør denne cellen (Shift-Enter) og få liste over kolonnene
# NB! Hvis du ikke har åpnet en SAF-T fil ennå er listen over kolonner tom
saft.columns