
«Hvor mye har vi egentlig ennå utestående hos dere?» Dette spørsmålet dukker jevnlig opp i enhver kundebase, som regel rett før kvartalsslutt, før revisjonen av årsregnskapet eller når kundens regnskapsavdeling forbereder betalinger. Den som ikke besvarer det selv, får det på e-post eller telefon, og noen må eksportere en liste over åpne poster (OP-liste) fra regnskapet og sende den. Med Odoo 19 Community skjer ikke dette av seg selv: Kundeportalen viser riktignok de enkelte fakturaene, men ingen liste over åpne poster for hele virksomheten, og slett ikke per en fritt valgt dato.
Til dette har vi skrevet modulen Åpne poster i kundeportalen (portal_open_items) for Odoo 19. Kunder med aktivert tilgang ser i portalen en liste over alle åpne fakturaer, kreditnotaer og ennå ikke tilordnede betalinger for virksomheten sin, kan velge en stikkdato, laste ned listen som PDF og ser med et blikk hvordan det står til med betalingsmoralen deres. Modulen er fri programvare under AGPL-3-lisensen og ligger på GitHub:
github.com/Alex0176/odoo-portal-open-items
Vi installerte modulen i produksjonssystemet vårt 5. november 2026. Innstillingen er der som standard slått av og settes bare etter avtale med enkeltkunder. Driftserfaringen er altså fortsatt kort; vi har testet med tretten automatiske tester og en testdatabase med eksempelkunder. Den som tar i bruk modulen, bør lese avsnittene om beregning av stikkdato, om betalingsmoral og om begrensningene .
Innhold i dette innlegget
- Problemet: OP-liste på forespørsel
- Løsningen i korte trekk
- Frigivelse per kontakt: innstillingen
- Listen i kundeportalen
- Åpne poster per stikkdato
- PDF-eksport
- Betalingsmoral: vurdering med et blikk
- Hvem får se hva? Tilgangsmodellen
- Teknisk gjennomføring
- Tester
- Installasjon og oppsett
- Begrensninger og merknader
- Ofte stilte spørsmål
- Støtte fra Biricon IT Services
Problemet: OP-liste på forespørsel
En liste over åpne poster viser hvilke fakturaer til en kunde som ennå ikke er betalt, hvor mye av dette som er forfalt, og hvor høy saldoen er. For leverandøren er den et hjelpemiddel for likviditetsplanlegging og purring. For kunden er den grunnlaget for å planlegge betalinger, avstemme fakturaer mot eget regnskap og avklare spørsmål uten å åpne hver faktura for seg. Typiske anledninger:
- Kvartals- og årsavslutning: Kundens regnskapsavdeling vil vite hvilke forpliktelser som forelå per 31.12. Dette er en stikkdato bakover i tid.
- Avstemming: Kunden mener å ha betalt en faktura, mens vi ser den som fortsatt åpen. En felles liste med dato, forfall og beløp avklarer dette raskere enn en lang e-posttråd.
- Betalingskjøringer: Den som forbereder betalinger ukentlig eller månedlig, trenger alle åpne fakturaer fra en leverandør i én oversikt, med de forfalte øverst.
- Flere kontaktpersoner: I et firma bestiller én, mens en annen betaler. De åpne postene tilhører firmaet, ikke en enkelt person.
Til nå har vi hentet disse listene manuelt fra regnskapet og sendt dem på e-post. Det koster tid, og til syvende og sist er det et øyeblikksbilde som er utdatert allerede neste dag. Bedre er en liste som kunden selv kan åpne i portalen når som helst, alltid med oppdatert status.
Løsningen i korte trekk
Modulen utvider Odoo-kundeportalen med en side Åpne poster og en flis på Min konto. Funksjonsomfanget:
- Innstilling per kontakt: «Vis liste over åpne poster i portalen». Bare når den er satt, ser portalbrukeren flisen og siden. Som standard er den slått av.
- Hele virksomheten: Listen inneholder de åpne postene til alle kontaktene i firmaet, ikke bare til den påloggede brukeren.
- Stikkdato: Kunden velger en dato og ser hva som var åpent den dagen.
- PDF-eksport: Listen som PDF i firmaets layout, med brevhode, saldo og sum av forfalte poster.
- Betalingsmoral: andelen fakturaer betalt i tide, litt forsinket og sent, den lengst åpne fakturaen og en vurdering god eller dårlig, i portalen og i PDF-en.
- Forfalte poster er markert med farge og viser antall dager etter forfallsdatoen.
- Kreditnotaer og tilgodehavender står med negativt beløp i listen og reduserer saldoen.
- Lenking: Hver faktura i listen fører til fakturavisningen i portalen.
- Flerspråklig: Grensesnitt og PDF følger brukerens språk, tysk følger med som oversettelse.

Flisen vises på startsiden Min konto ved siden av ordrer og fakturaer. Den som ikke har innstillingen, ser den ikke.
Frigivelse per kontakt: innstillingen
En OP-liste viser forretningsdata for et helt firma. Derfor aktiverer ikke modulen den for alle portalbrukere, men bare der du uttrykkelig ønsker det. På kontakten finner du i skjemaet under Nettsted avkrysningsboksen «Vis liste over åpne poster i portalen». Den er synlig for brukere med fakturarettigheter (gruppen account.group_account_invoice) og gjelder for akkurat denne ene kontakten.

Dette passer til praksis: I et firma skal ledelsen eller regnskapet se listen, mens en medarbeider som bare ser på saker, ikke skal det. Innstillingen gjelder for kontakten, men postene som vises, tilhører hele virksomheten. Sett derfor innstillingen hos personen som skal ha oversikt over firmaet.
Listen i kundeportalen
Et klikk på flisen åpner /my/open-items. Siden viser firmanavnet, valget av stikkdato og tabellen med de åpne postene:

| Kolonne | Innhold |
|---|---|
| Bilag | Bilagsnummer for fakturaen eller kreditnotaen, lenket til fakturavisningen i portalen; under står referansen, hvis den finnes |
| Dato | Fakturadato eller bokføringsdato |
| Forfaller | Forfallsdato; for forfalte poster står «n dager forfalt» under i rødt |
| Beløp | Postens opprinnelige beløp |
| Åpent | Beløp som fortsatt er åpent (etter delbetalinger) |
Under tabellen står saldoen, altså summen av alle åpne beløp, og summen av forfalte poster. Forfalte rader har farget bakgrunn, slik at man ser dem med én gang ved gjennomlesing. Kreditnotaer og betalinger som ennå ikke er tilordnet en faktura, vises med negativt fortegn og reduserer saldoen; en merknad under tabellen forklarer dette for kunden. Hvis virksomheten din regner i flere valutaer, vises saldoen per valuta.
Åpne poster per stikkdato
Over datoen står «Åpne poster per stikkdato», ved siden av et datofelt og knappen Vis. Med en stikkdato bakover i tid viser listen hva som ennå ikke var betalt den dagen. Det er nøyaktig den oppstillingen som trengs for avslutninger, revisjoner og avstemminger: «Hvilke forpliktelser hadde vi per 31.12. overfor denne leverandøren?»

Slik beregnes stikkdatoen
For hver post gjelder: Åpent per stikkdato = fakturabeløp minus alle betalinger som var avstemt til og med stikkdatoen. En post havner på listen hvis den allerede var bokført på stikkdatoen og da hadde en restsaldo. En faktura fra 7. september på 1.250,50 €, som ble delbetalt med 500,00 € 20. oktober og gjort opp med resten 5. november, står altså på listen med 750,50 € ved stikkdato 2. november og ikke lenger i det hele tatt ved stikkdato 5. november.

Forfall vurderes også per stikkdato: En post er forfalt hvis forfallsdatoen ligger før stikkdatoen og restbeløpet er positivt. Dagene etter forfall telles fram til stikkdatoen, ikke fram til i dag. En stikkdato i fremtiden behandles som i dag, det samme gjelder en tom eller ugyldig dato i adressefeltet. Listen kan altså ikke late som den er en prognose.
Hva «betalingsdato» betyr her
Avgjørende er datoen da faktura og betaling ble avstemt mot hverandre i Odoo (den seneste av de to bokføringsdatoene), ikke fakturadatoen. Dette er det vanlige tilfellet: Betalingen bokføres på dagen den mottas og tilordnes fakturaen. Den som tilordner betalinger først dager senere, ser fakturaen som åpen tilsvarende lenger. Avsnittet begrensningene går nærmere inn på dette.
PDF-eksport
Via Last ned PDF lager modulen listen som PDF-fil for den valgte stikkdatoen. Knappen Skriv ut åpner den samme listen i nettleserens utskriftsdialog. PDF-en bruker dokumentoppsettet til Odoo-firmaet ditt (logo, adresse og bunntekst fra innstillingene) og europeisk papirformat:

- Overskrift med stikkdato: «Åpne poster per stikkdato 02.11.2026», også når stikkdatoen er i dag. Finnes det ingen åpne poster, står det «Det finnes ingen åpne poster.»
- Kundens adresse i adressefeltet i firmaoppsettet, slik at listen også passer til saken når den skrives ut.
- Forfalte poster i fet skrift, slik at de også er godt synlige i svart-hvitt-utskrift.
- Saldo og sum av forfalte poster nederst i tabellen, per valuta ved flere valutaer.
- Filnavn med firma og dato, for eksempel
Open_items_Muster_Handels_GmbH_2026-11-02.pdf.
Betalingsmoral: vurdering med et blikk
Fra og med versjon 19.0.1.1.0 står det over tabellen en kort oversikt over hvor punktlig virksomheten betaler fakturaene sine. Den samme oversikten vises i PDF-en. Kunden ser dermed selv hvor den står, og du trenger ikke lenger å forklare det særskilt.

- Grønn: «47 % ble betalt innen betalingsfristen.» Det gjelder fakturaer som ble betalt på forfallsdagen eller tidligere.
- Oransje: «29 % ble betalt i uken etter at betalingsfristen utløp.» Det er betalinger én til sju dager etter forfall.
- Rød: «24 % ble betalt senere, i gjennomsnitt etter 39 dager (25 dager etter at betalingsfristen utløp).» Det første tallet regnes fra fakturadatoen, tallet i parentesen fra forfall. Linjen vises bare når det finnes slike fakturaer.
- «Fakturaer er åpne i opptil 60 dager.» Det er alderen på den eldste fakturaen som fortsatt er åpen på stikkdatoen, regnet fra fakturadatoen.
Under står vurderingen av betalingsmoralen: god eller dårlig, og nederst på siden, i PDF-en nederst på siden, merknaden «Kunder med dårlig betalingsmoral settes over på forhåndsbetaling.» PDF-en viser de samme linjene i brevhode-layout:

Hva som telles
- Vurdert blir fakturaer til kunden som er bokført. Kreditnotaer og utkast telles ikke. Ved delbetaling i terminer teller hver termin for seg.
- Periode: fakturaene fra de siste tolv månedene og alle fakturaer som fortsatt er åpne, selv om de er eldre.
- Betalingsdagen er datoen for siste avstemming mot en betaling, slik som ved stikkdatotil dette.
- Åpne fakturaer: Er en faktura forfalt på stikkdatoen, teller den som om den var betalt på stikkdatoen, altså oransje eller rød. En åpen faktura som ennå ikke er forfalt, blir ikke vurdert.
- Med stikkdato i fortiden gjelder stillingen den dagen: betalinger etter stikkdatoen telles ikke ennå.
- Er det ingenting å vurdere, står det der «Ingen fakturaer fra de siste 12 månedene å vurdere.», og det gis ingen vurdering.
Når er betalingsmoralen «god»?
Vurderingen er god når minst 70 % av fakturaene er grønne eller oransje (i tide eller høyst én uke for sent) og ingen åpen faktura er forfalt i mer enn 30 dager. Ellers er den dårlig. Terskelverdiene (7 dager, 70 %, 30 dager, 12 måneder) står som konstanter øverst i models/res_partner.py og kan justeres der.
Viktig: Modulen setter ingen over på forhåndsbetaling. Merknaden i bunnteksten er en fast tekst som viser kunder med dårlig vurdering hva som kan følge av det. Om og når du bestemmer deg for det, er opp til deg. Hvis setningen ikke passer deg, endrer du den i de to malene (portalsiden og rapporten) eller i oversettelsen.
Hvem får se hva? Tilgangsmodellen
Åpne poster er sensitive data, derfor var tilgangen viktigere for oss enn enhver tilleggsfunksjon. Modellen er bevisst enkel:

- Bare med satt innstilling. Uten hake på kontakten finnes det ingen flis, og et kall til
/my/open-itemsomdirigerer til Min konto. - Alltid eget firma. Firmaet bestemmes ut fra den påloggede brukeren, ikke ut fra en parameter i adressen. Det finnes ingen mulighet til å etterspørre et fremmed firma via adressefeltet.
- Samme kontroll for PDF. Odoo tilbyr i utgangspunktet PDF-rapporter også via en generell adresse. Modulen kontrollerer derfor på nytt i selve rapporten: Bare brukere med regnskapsrettighet eller portalbrukere med satt innstilling for eget firma får en PDF, alle andre får en tilgangsfeil.
- Bare bokførte poster. Utkast og annullerte bilag vises aldri.
- Bare egne regnskapskretser: Det tas bare hensyn til posteringer fra virksomheter som brukeren har tilgang til.
Teknisk gjennomføring
Modulen avhenger bare av account og portal, altså av komponenter i Odoo Community. Den legger til ett eneste felt på kontakten og består ellers av kontroller, rapportklasse og maler.
| Byggestein | Oppgave |
|---|---|
Felt portal_open_items på res.partner | Boolsk innstilling «Vis liste over åpne poster i portalen», kan ikke kopieres, standard av. |
_open_items_data() | Søker etter virksomhetens bokførte, ennå ikke avstemte fordringslinjer og beregner rest, forfall og dager for hver linje. Leverer linjer, summer per valuta og stikkdatoen. |
_payment_morale() | Vurderer fakturaene fra de siste tolv månedene og alle åpne fakturaer per stikkdato: andeler i tide, inntil sju dager for sent og senere, gjennomsnittlig varighet, lengst åpne faktura og vurderingen god eller dårlig. |
_open_items_residual() | Restbeløp for en linje per stikkdato: beløp minus alle delavstemminger med dato til og med stikkdatoen, i fakturaens valuta. |
Kontroller /my/open-items | Viser siden, tolker stikkdatoen (tom, ugyldig eller i fremtiden = i dag) og omdirigerer til Min konto uten innstilling. |
Kontroller /my/open-items/pdf | Lager PDF-en med samme stikkdato og leverer den med filnavn. |
Rapport report_open_items | QWeb-mal i firmaoppsettet (web.external_layout) med egen kontroll av tilgangen. |
| Portalmaler | Flis på Min konto, brødsmulesti, side med datoskjema og tabell. |
| Kontaktskjema | Innstilling i området Nettsted, bare synlig for gruppen account.group_account_invoice. |
| Oversettelse | Tysk (de.po) og mal (.pot) følger med. |
De åpne postene leses fra posteringslinjene, ikke fra fakturaene. Det er viktig: Bare slik dukker også kreditnotaer og ennå ikke tilordnede betalinger opp, og bare slik kan stillingen på en tidligere dag spores tilbake fra avstemmingene (account.partial.reconcile). Spørringen kjører for hele firmaet (commercial_partner_id) med utvidede rettigheter, og kontrollen av om brukeren har lov til å se dem, ligger foran.
Tester
Modulen leveres med tretten automatiske tester som går grønt hos oss:
- tilgang bare med satt innstilling, ellers omdirigering til Min konto,
- listen inneholder postene til hele firmaet, men aldri postene til et annet,
- innstillingen gjelder per kontakt, ikke for alle brukere i firmaet,
- kreditnotaer står med negativt beløp i listen og reduserer saldoen,
- stikkdato: en faktura som ble betalt senere, står på listen før, men ikke etterpå,
- side med fremtidig og med ugyldig dato,
- PDF-adressen leverer en PDF-fil,
- rapport som HTML og tilgangskontroll i rapporten,
- åpent beløp per stikkdato etter delbetalinger før og etter stikkdatoen,
- betalingsmoral: inndeling i i tide, inntil én uke for sent og senere, med gjennomsnittsverdiene, også for en stikkdato i fortiden,
- betalingsmoral med åpne fakturaer og vurderingen god eller dårlig,
- betalingsmoral uten fakturaer og aldri med data fra et annet firma,
- betalingsmoral i portalsiden og PDF-en.
I tillegg har vi gått gjennom siden i nettleseren i en testdatabase med eksempelkunder, og figurene i dette innlegget stammer derfra. Alle navn, bilagsnumre og beløp der er fritt oppdiktet.
Installasjon og oppsett
git clone https://github.com/Alex0176/odoo-portal-open-items.git
ln -s /pfad/odoo-portal-open-items/portal_open_items /pfad/addons/
odoo-bin -c odoo.conf -d <datenbank> -i portal_open_items --stop-after-init
Avhengighetene er account og portal. Etter installasjonen må Odoo-tjenesten startes på nytt, fordi modulen inneholder Python-kode. Den som driver et produksjonssystem, bør først installere modulen på en kopi av databasen. Deretter:
- Åpne kontakten som skal se listen (person med portaltilgang),
- sett avkrysningsboksen Vis liste over åpne poster i portalen i skjemaet og lagre,
- logg inn i portalen som denne brukeren eller kontroller sammen med kunden: flis, liste, stikkdato og PDF.
Kontroller avsender- og layoutinnstillingene til firmaet ditt før frigivelsen, for PDF-en henter logo, adresse og bunntekst fra dokumentoppsettet. Modulen sender ikke e-poster selv og oppretter ingen varsler.
Begrensninger og merknader
- Dagens status for bokførte bilag. Stikkdatoen regner på grunnlag av posteringene slik de står i systemet nå. Hvis en faktura er blitt annullert eller satt tilbake til utkast etter stikkdatoen, viser ikke listen den. Det er ikke et uforanderlig øyeblikksbilde «slik det ble skrevet ut den gangen».
- Betalinger teller fra avstemmingsdagen. Hvis en betaling først tilordnes dager etter at en faktura er mottatt, står fakturaen på listen som åpen til da. Den som vil ha rene stikkdatooppstillinger, bør tilordne betalinger fortløpende. Bankavstemming mot fakturaer er ikke inkludert i Odoo Community; vi bruker modulen vår Bank-Statement-Matchertil dette.
- Betalingsmoralen er like god som avstemmingen din. Det som telles, er når en betaling ble tilordnet en faktura. Betalinger som lenge ikke er avstemt, får en kunde til å se dårligere ut enn den er. Kontroller vurderingen for kundene dine før du trekker slutninger av den.
- Vurderingen er synlig for kunden. Den som har innstillingen, ser også resultatet og merknaden om forhåndsbetaling. Modulen endrer ikke noe ved betalingsbetingelsene.
- Bare fordringer. Modulen viser hva kunden skylder deg, ikke din gjeld til kunden.
- Ingen purretrinn og ingen betalingslenke i listen. Kunden kan åpne en faktura fra listen og betale der, slik portalen din ellers tillater.
- PDF og flerprosessdrift. For å lage PDF-rapporter kaller Odoo internt opp sin egen webadresse. Kjører systemet ditt med bare én arbeidsprosess, kan dette blokkere. Det gjelder alle PDF-rapporter i portalen, ikke bare denne modulen. Test PDF-knappen én gang under reelle forhold etter installasjonen.
- Bare testet med Odoo 19.0 Community. For andre versjoner har vi ikke kontrollert den.
- Ingen erstatning for purring og kontoutskrift. Listen erstatter verken en regnskapsmessig kontoutskrift eller purreprosessene dine, den gjør bare statusen transparent.
Ofte stilte spørsmål
Hva er en liste over åpne poster (OP-liste)?
En oppstilling av alle fakturaer som ennå ikke er betalt eller ikke er fullt betalt, med fakturadato, forfall og åpent beløp. Den kalles også «åpne fakturaer», «kundekonto» eller «saldoliste», selv om en saldoliste i snever forstand betyr saldoene på alle kontoer.
Hvorfor viser ikke Odoo-portalen en OP-liste fra start av?
Portalen viser ordrer, fakturaer og betalinger enkeltvis, med status og filtre. En samlet liste for virksomheten med saldo og en stikkdatooppstilling hører så vidt vi har sett ikke med i Community-omfanget. Det er dette modulen er ment for.
Ser alle portalbrukere i et firma listen?
Nei. Bare kontakter med satt innstilling. Listen som vises, omfatter imidlertid hele firmaet, ikke bare fakturaene til denne ene kontakten.
Kan jeg velge en stikkdato bakover i tid, for eksempel 31.12. i fjor?
Ja, en hvilken som helst dato til og med i dag. Listen viser da postene som var bokført og ennå ikke betalt den dagen. Merk deg merknadene om beregningen: Avgjørende er dagen betalingen ble avstemt.
Støttes en stikkdato i fremtiden?
Nei. Fremtidige datoer behandles som i dag, slik at listen ikke viser en status som ennå ikke finnes.
Vises kreditnotaer og forskuddsbetalinger i listen?
Ja. Kreditnotaer og betalinger som ennå ikke er tilordnet en faktura, står med negativt beløp i listen og reduserer saldoen. En merknad under tabellen forklarer dette for kunden.
Hvordan gjenkjennes forfalte poster?
En post er forfalt hvis forfallsdatoen ligger før stikkdatoen og et positivt restbeløp fortsatt er åpent. Dagene etter forfall telles fram til stikkdatoen.
Finnes PDF-en også på andre språk?
Ja, grensesnitt og PDF følger brukerens språk. Den tyske oversettelsen følger med; for flere språk er en .po-fil eller oversettelse via Odoo-grensesnittet nok.
Kan en kunde se listen til et annet firma hvis han endrer adressen?
Nei. Firmaet fremgår alltid av den påloggede brukeren. Adressen inneholder bare stikkdatoen. Også Odoos PDF-rapportadresse kontrolleres på nytt i selve rapporten.
Hvordan beregnes betalingsmoralen?
Ut fra de bokførte kundefakturaene fra de siste tolv månedene og alle åpne fakturaer. For hver faktura teller hvor mange dager etter forfall den ble betalt: senest på forfallsdagen (grønn), inntil sju dager etter (oransje) eller senere (rød). Vurderingen er god ved minst 70 % grønne eller oransje og ingen faktura som er åpen og forfalt i mer enn 30 dager. Detaljene står i avsnittet betalingsmoraltil dette.
Setter modulen kunder med dårlig betalingsmoral over på forhåndsbetaling?
Nei. Den viser bare vurderingen og merknaden. Betalingsbetingelser, forhåndsbetaling og sperrer er fortsatt din beslutning og din prosess i Odoo.
Sender modulen e-poster eller purringer?
Nei. Den leverer bare siden og PDF-en. Den oppretter ingen meldinger, varsler eller aktiviteter.
Fungerer modulen med Odoo Enterprise?
Den avhenger bare av account og portal, som finnes i begge utgavene. Vi har bare testet den på Community-utgaven av Odoo 19.
Under hvilken lisens står modulen?
Under AGPL-3. Du kan bruke, endre og videreføre den hvis du overholder lisensvilkårene. Feil og forbedringsforslag er velkomne som issue i GitHub-repositoriet .
Støtte fra Biricon IT Services
Vi tar oss av Odoo-installasjoner for små og mellomstore virksomheter: fra innføring via tilpasninger og migreringer til løpende drift. Hvis du vil tilby kundene dine åpne poster, fakturaer og saker i portalen, bygge ut regnskapet i Odoo Community eller få en modul trygt over i produksjonsinstansen din, hjelper vi deg gjerne. Flere egenutviklinger: Arkivere firma sammen med portalbrukere, Firmabok og adressekontroll for østerrikske kunder, Bilagsnumre av prefiks, år og teller og Produktsett i tilbudet som avsnitttil dette.
Per 6. november 2026. Modulversjon 19.0.1.1.1. Endringer siden den første versjonen fra 5. november: betalingsmoral (19.0.1.1.0) og korrigering av åpent beløp per stikkdato etter delbetalinger (19.0.1.1.1). Alle navn, bilagsnumre og beløp i figurene er fritt oppdiktet.