
”Hur mycket har vi egentligen fortfarande öppet hos er?” Den frågan dyker regelbundet upp hos alla kunder, oftast strax före kvartalsskiftet, inför revisionen av årsbokslutet eller när kundens bokföring förbereder betalningar. Den som inte besvarar den själv får den per e-post eller telefon, och någon måste exportera en lista över öppna poster (reskontralista) ur bokföringen och skicka den. Med Odoo 19 Community sker det inte av sig självt: kundportalen visar visserligen de enskilda fakturorna, men ingen lista över hela företagets öppna poster, och absolut inte per ett fritt valt datum.
Därför har vi skrivit modulen Öppna poster i kundportalen (portal_open_items) för Odoo 19. Kunder med aktiverad åtkomst ser i portalen en lista över alla öppna fakturor, kreditnotor och ännu ej matchade betalningar för sitt företag, kan välja ett stickdatum, ladda ner listan som PDF och ser med en blick hur det står till med deras betalningsmoral. Modulen är fri programvara under AGPL-3-licensen och finns på GitHub:
github.com/Alex0176/odoo-portal-open-items
Vi installerade modulen i vårt produktionssystem den 5 november 2026. Alternativet är där som standard avstängt och aktiveras bara efter överenskommelse med enskilda kunder. Erfarenheten från drift är alltså fortfarande kort; vi har testat med tretton automatiska tester och en testdatabas med exempelkunder. Den som tar över modulen bör läsa avsnitten om beräkning av stickdatum, om betalningsmoral och begränsningar .
Innehåll i detta inlägg
- Problemet: reskontralista på begäran
- Lösningen i korthet
- Aktivering per kontakt: alternativet
- Listan i kundportalen
- Öppna poster per stickdatum
- PDF-export
- Betalningsmoral: bedömning med en blick
- Vem får se vad? Åtkomstmodellen
- Teknisk implementering
- Tester
- Installation och konfiguration
- Begränsningar och anmärkningar
- Vanliga frågor
- Stöd från Biricon IT Services
Problemet: reskontralista på begäran
En lista över öppna poster visar vilka av en kunds fakturor som ännu inte är betalda, vad av detta som är förfallet och hur stort saldot är. För leverantören är den ett verktyg för likviditetsplanering och påminnelsehantering. För kunden är den underlaget för att planera betalningar, stämma av fakturor mot den egna bokföringen och reda ut frågor utan att öppna varje faktura för sig. Typiska tillfällen:
- Kvartals- och årsbokslut: Kundens bokföring vill veta vilka skulder som fanns per den 31.12. Det är ett stickdatum bakåt i tiden.
- Avstämning: Kunden tror sig ha betalat en faktura, medan vi ser den som öppen. En gemensam lista med datum, förfallodag och belopp reder ut det snabbare än en e-postkedja.
- Betalningskörningar: Den som förbereder betalningar varje vecka eller månad behöver alla öppna fakturor från en leverantör på en gång, med de förfallna överst.
- Flera kontaktpersoner: I ett företag beställer en person och en annan betalar. De öppna posterna tillhör företaget, inte en enskild person.
Hittills har vi tagit fram dessa listor för hand ur bokföringen och skickat dem per e-post. Det kostar tid och blir till sist en ögonblicksbild som redan nästa dag är inaktuell. Bättre är en lista som kunden själv kan öppna i portalen när som helst, alltid med aktuellt läge.
Lösningen i korthet
Modulen utökar Odoos kundportal med en sida Öppna poster och en ruta på Mitt konto. Funktionsomfång:
- Alternativ per kontakt: ”Visa lista över öppna poster i portalen”. Bara när det är aktiverat ser portalanvändaren rutan och sidan. Som standard är det avstängt.
- Hela företaget: Listan innehåller de öppna posterna för alla företagets kontakter, inte bara den inloggade användarens.
- Stickdatum: Kunden väljer ett datum och ser vad som var öppet den dagen.
- PDF-export: Listan som PDF i ditt företags layout, med brevhuvud, saldo och summa av förfallna poster.
- Betalningsmoral: andel fakturor som betalats i tid, med lätt försening och sent, äldsta öppna faktura och en bedömning bra eller dålig, i portalen och i PDF:en.
- Förfallna poster är färgmarkerade och visar antalet dagar efter förfallodatumet.
- Kreditnotor och tillgodohavanden står med negativt belopp i listan och minskar saldot.
- Länkning: Varje faktura i listan leder till fakturavyn i portalen.
- Flerspråkig: Gränssnitt och PDF följer användarens språk, tysk översättning medföljer.

Rutan visas på startsidan Mitt konto bredvid ordrar och fakturor. Den som inte har alternativet ser den inte.
Aktivering per kontakt: alternativet
En lista över öppna poster visar affärsdata för ett helt företag. Därför aktiverar modulen den inte för alla portalanvändare, utan bara där ni uttryckligen vill det. På kontakten finns i formuläret under Webbplats kryssrutan ”Visa lista över öppna poster i portalen”. Den är synlig för användare med fakturarättigheter (gruppen account.group_account_invoice) och gäller för just den kontakten.

Det passar i praktiken: I ett företag ska ledningen eller bokföringen se listan, men inte en medarbetare som bara tittar på ärenden. Alternativet gäller för kontakten, medan de visade posterna tillhör hela företaget. Aktivera alltså alternativet hos den person som ska ha överblick över företaget.
Listan i kundportalen
Ett klick på rutan öppnar /my/open-items. Sidan visar företagsnamnet, valet av stickdatum och tabellen med de öppna posterna:

| Kolumn | Innehåll |
|---|---|
| Dokument | Dokumentnummer för fakturan eller kreditnotan, länkat till fakturavyn i portalen; under det referensen, om en sådan finns |
| Datum | Faktura- respektive bokföringsdatum |
| Förfaller | Förfallodatum; för förfallna poster står under det ”n dagar förfallen” i rött |
| Belopp | Postens ursprungliga belopp |
| Öppet | Återstående öppet belopp (efter delbetalningar) |
Under tabellen står saldot, alltså summan av alla öppna belopp, och summan av förfallna poster. Förfallna rader har färgad bakgrund så att man ser dem direkt när man skummar igenom listan. Kreditnotor och betalningar som ännu inte matchats mot en faktura visas med negativt tecken och minskar saldot; en anmärkning under tabellen förklarar detta för kunden. Om ert företag räknar i flera valutor redovisas saldot per valuta.
Öppna poster per stickdatum
Ovanför tabellen står ”Öppna poster per stickdatum”, bredvid ett datumfält och knappen Visa. Med ett stickdatum bakåt i tiden visar listan vad som ännu inte var betalt den dagen. Det är precis den sammanställning som behövs för bokslut, revisioner och avstämningar: ”Vilka skulder hade vi per den 31.12. hos den här leverantören?”

Så beräknas stickdatumet
För varje post gäller: Öppet per stickdatum = fakturabelopp minus alla betalningar som var avstämda till och med stickdatumet. En post hör hemma i listan om den redan var bokförd på stickdatumet och då hade ett återstående belopp. En faktura från den 7 september på 1.250,50 €, som delbetalades med 500,00 € den 20 oktober och reglerades med resten den 5 november, står alltså med 750,50 € i listan vid stickdatum 2 november och finns inte längre med alls vid stickdatum 5 november.

Även förfallenheten bedöms per stickdatum: En post är förfallen om dess förfallodatum ligger före stickdatumet och återstående belopp är positivt. Dagarna efter förfallodatum räknas fram till stickdatumet, inte till idag. Ett stickdatum i framtiden behandlas som idag, likaså ett tomt eller ogiltigt datum i adressraden. Listan kan alltså inte låtsas visa en prognos.
Vad ”betalningsdatum” betyder här
Avgörande är det datum då faktura och betalning stämdes av mot varandra i Odoo (det senare av de två bokföringsdatumen), inte fakturadatumet. Det är det vanliga fallet: Betalningen bokförs den dag den kommer in och matchas mot fakturan. Den som matchar betalningar först flera dagar senare ser fakturan som öppen motsvarande längre. Avsnittet begränsningar går närmare in på detta.
PDF-export
Via Ladda ner PDF skapar modulen listan som PDF-fil för det valda stickdatumet. Knappen Skriv ut öppnar samma lista i webbläsarens utskriftsdialog. PDF:en använder dokumentlayouten för ert Odoo-företag (logotyp, adress, sidfot från inställningarna) och europeiskt pappersformat:

- Rubrik med stickdatum: ”Öppna poster per stickdatum 02.11.2026”, även när stickdatumet är idag. Finns inga öppna poster står där ”Det finns inga öppna poster.”
- Kundens adress i adressfältet i företagslayouten, så att listan stämmer även när den skrivs ut.
- Förfallna poster i fetstil så att de syns även vid svartvit utskrift.
- Saldo och summa förfallna poster sist i tabellen, vid flera valutor per valuta.
- Filnamn med företag och datum, till exempel
Open_items_Muster_Handels_GmbH_2026-11-02.pdf.
Betalningsmoral: bedömning med en blick
Sedan version 19.0.1.1.0 står en kort sammanställning ovanför tabellen över hur punktligt företaget betalar sina fakturor. Samma sammanställning visas i PDF:en. Kunden ser därmed själv hur det ligger till, och ni behöver inte längre förklara det särskilt.

- Grön: ”47 % betalades inom betalningsfristen.” Det avser fakturor som betalats på förfallodagen eller tidigare.
- Orange: ”29 % betalades under veckan efter att betalningsfristen löpt ut.” Det är betalningar en till sju dagar efter förfallodatumet.
- Röd: ”24 % betalades senare, i genomsnitt efter 39 dagar (25 dagar efter att betalningsfristen löpt ut).” Den första siffran räknas från fakturadatumet, siffran inom parentes från förfallodatumet. Raden visas bara om det finns sådana fakturor.
- ”Fakturorna är öppna i upp till 60 dagar.” Det är åldern på den äldsta faktura som på stickdatumet fortfarande är öppen, räknat från fakturadatumet.
Under den står bedömningen av betalningsmoralen: bra eller dålig, och längst ned på sidan, i PDF:en i slutet av sidan, upplysningen ”Kunder med dålig betalningsmoral ställs om till förskottsbetalning.” PDF:en visar samma rader i layouten med brevhuvud:

Vad som räknas
- Bedömda är fakturor till kunden som är bokförda. Kreditnotor och utkast räknas inte. Vid delbetalning räknas varje delbetalning för sig.
- Period: fakturorna från de senaste tolv månaderna och alla fakturor som fortfarande är öppna, även om de är äldre.
- Betalningsdag är datumet för den senaste avstämningen mot en betalning, precis som vid stickdatum.
- Öppna fakturor: Om en faktura är förfallen på stickdatumet räknas den som om den hade betalats på stickdatumet, alltså orange eller röd. En öppen faktura som ännu inte förfallit bedöms inte.
- Med stickdatum bakåt i tiden gäller läget den dagen: betalningar efter stickdatumet räknas ännu inte.
- Finns det inget att bedöma står där ”Inga fakturor från de senaste 12 månaderna att bedöma.” och ingen bedömning görs.
När är betalningsmoralen ”bra”?
Bedömningen är bra om minst 70 % av fakturorna är gröna eller orange (betalda i tid eller högst en vecka för sent) och ingen öppen faktura är förfallen i mer än 30 dagar. Annars är den dålig. Tröskelvärdena (7 dagar, 70 %, 30 dagar, 12 månader) står som konstanter i början av models/res_partner.py och kan justeras där.
Viktigt: Modulen ställer inte om någon till förskottsbetalning. Upplysningen i sidfoten är en fast text som visar kunder med dålig bedömning vad det kan leda till. Om och när ni fattar ett sådant beslut är er sak. Om meningen inte passar er ändrar ni den i de båda mallarna (portalsidan och rapporten) eller i översättningen.
Vem får se vad? Åtkomstmodellen
Öppna poster är känsliga uppgifter, därför var åtkomsten viktigare för oss än någon extrafunktion. Modellen är medvetet enkel:

- Bara med aktiverat alternativ. Utan bockning på kontakten finns ingen ruta, och ett anrop av
/my/open-itemsomdirigerar till Mitt konto. - Alltid det egna företaget. Företaget bestäms utifrån den inloggade användaren, inte utifrån en parameter i adressen. Det finns inget sätt att begära ett annat företag via adressraden.
- Samma kontroll för PDF. Odoo tillhandahåller i princip PDF-rapporter även via en allmän adress. Modulen kontrollerar därför ännu en gång i själva rapporten: Bara användare med bokföringsbehörighet eller portalanvändare med aktiverat alternativ för det egna företaget får en PDF, alla andra ett åtkomstfel.
- Bara bokförda poster. Utkast och annullerade dokument visas aldrig.
- Bara egna bokföringsenheter: Endast bokningar från företag som användaren har åtkomst till beaktas.
Teknisk implementering
Modulen är bara beroende av account och portal, alltså av delar av Odoo Community. Den lägger till ett enda fält på kontakten och består i övrigt av en controller, en rapportklass och mallar.
| Komponent | Uppgift |
|---|---|
Fältet portal_open_items på res.partner | Booleskt alternativ ”Visa lista över öppna poster i portalen”, inte kopierbart, som standard av. |
_open_items_data() | Söker företagets bokförda, ännu inte avstämda fordringsrader och beräknar per rad återstående belopp, förfallenhet och dagar. Returnerar rader, summor per valuta och stickdatumet. |
_payment_morale() | Utvärderar fakturorna från de senaste tolv månaderna och alla öppna fakturor per stickdatum: andelar betalda i tid, upp till sju dagar för sent och senare, genomsnittlig tid, äldsta öppna faktura och bedömningen bra eller dålig. |
_open_items_residual() | Radens återstående belopp per stickdatum: belopp minus alla delavstämningar daterade till och med stickdatumet, i fakturans valuta. |
Controller /my/open-items | Visar sidan, tolkar stickdatumet (tomt, ogiltigt eller i framtiden = idag) och omdirigerar utan alternativ till Mitt konto. |
Controller /my/open-items/pdf | Skapar PDF:en med samma stickdatum och levererar den med filnamn. |
Rapport report_open_items | QWeb-mall i företagslayouten (web.external_layout) med egen behörighetskontroll. |
| Portalmallar | Ruta på Mitt konto, sökväg (brödsmulor), sida med datumformulär och tabell. |
| Kontaktformulär | Alternativ i avsnittet Webbplats, bara synligt för gruppen account.group_account_invoice. |
| Översättning | Tyska (de.po) och mall (.pot) medföljer. |
De öppna posterna läses från bokföringsraderna, inte från fakturorna. Det är viktigt: Bara så kommer även kreditnotor och ännu ej matchade betalningar med, och bara så går det att härleda läget vid ett tidigare datum ur avstämningarna (account.partial.reconcile). Frågan körs för hela företaget (commercial_partner_id) med förhöjda rättigheter, kontrollen av om användaren får se den görs före.
Tester
Modulen levereras med tretton automatiska tester som hos oss går igenom utan fel:
- åtkomst bara med aktiverat alternativ, annars omdirigering till Mitt konto,
- listan innehåller hela företagets poster, men aldrig ett annat företags,
- alternativet gäller per kontakt, inte för alla företagets användare,
- kreditnotor står med negativt belopp i listan och minskar saldot,
- stickdatum: en senare betald faktura står i listan före betalningen, inte efter,
- sida med framtida och med ogiltigt datum,
- PDF-adressen levererar en PDF-fil,
- rapporten som HTML och åtkomstkontrollen i rapporten,
- öppet belopp per stickdatum efter delbetalningar före och efter stickdatumet,
- betalningsmoral: indelning i kategorierna i tid, upp till en vecka för sent och senare, med genomsnittsvärdena, även för ett stickdatum bakåt i tiden,
- betalningsmoral med öppna fakturor och bedömningen bra eller dålig,
- betalningsmoral utan fakturor och aldrig med data från ett annat företag,
- betalningsmoral på portalsidan och i PDF:en.
Dessutom har vi gått igenom sidan i webbläsaren i en testdatabas med exempelkunder; bilderna i detta inlägg kommer därifrån. Alla namn, dokumentnummer och belopp i dem är påhittade.
Installation och konfiguration
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
Beroenden är account och portal. Efter installationen måste Odoo-tjänsten startas om, eftersom modulen innehåller Python-kod. Den som driver ett produktionssystem installerar modulen först på en kopia av databasen. Därefter:
- Öppna den kontakt som ska se listan (person med portalåtkomst),
- markera kryssrutan Visa lista över öppna poster i portalen i formuläret och spara,
- logga in i portalen som den användaren eller kontrollera tillsammans med kunden: ruta, lista, stickdatum och PDF.
Kontrollera före aktiveringen ert företags avsändar- och layoutinställningar, eftersom PDF:en hämtar logotyp, adress och sidfot från dokumentlayouten. Modulen skickar själv inga e-postmeddelanden och skapar inga aviseringar.
Begränsningar och anmärkningar
- Dagsläge för bokförda dokument. Stickdatumet räknar utifrån bokningarna så som de står i systemet nu. Om en faktura har annullerats eller återställts till utkast efter stickdatumet visar listan den inte. Det är alltså ingen oföränderlig ögonblicksbild ”så som den skrevs ut då”.
- Betalningar räknas från avstämningsdagen. Om en betalning matchas först flera dagar efter att fakturan kommit in står fakturan som öppen i listan fram till dess. Den som vill ha rena stickdatumsammanställningar bör matcha betalningar i nära anslutning till att de kommer in. En bankavstämning mot fakturor ingår inte i Odoo Community; för det använder vi vår Bank-Statement-Matcher-modul.
- Betalningsmoralen är lika bra som er avstämning. Det som räknas är när en betalning matchades mot en faktura. Betalningar som länge inte stämts av får en kund att se sämre ut än den är. Kontrollera bedömningen hos era kunder innan ni drar några slutsatser av den.
- Bedömningen är synlig för kunden. Den som har alternativet ser också resultatet och upplysningen om förskottsbetalning. Modulen ändrar inget i betalningsvillkoren.
- Bara fordringar. Modulen visar vad kunden är skyldig er, inte era skulder till kunden.
- Inga påminnelsenivåer och ingen betalningslänk i listan. Kunden kan öppna en faktura från listan och betala där, i den utsträckning er portal i övrigt tillåter det.
- PDF och flerprocessdrift. För att skapa PDF-rapporter anropar Odoo internt sin egen webbadress. Om ert system körs med bara en arbetsprocess kan detta blockeras. Det gäller alla PDF-rapporter i portalen, inte bara den här modulen. Prova PDF-knappen en gång under verkliga förhållanden efter installationen.
- Bara Odoo 19.0 Community testad. För andra versioner har vi inte provat den.
- Ingen ersättning för påminnelsehantering och kontoutdrag. Listan ersätter varken ett bokföringsmässigt kontoutdrag eller era påminnelserutiner, den gör bara läget transparent.
Vanliga frågor
Vad är en lista över öppna poster (reskontralista)?
En sammanställning av alla fakturor som ännu inte eller inte helt är betalda, med fakturadatum, förfallodag och öppet belopp. Den kallas också ”öppna fakturor”, ”kundkonto” eller ”saldolista”, men en saldolista avser i snävare mening saldona för alla konton.
Varför visar inte Odoo-portalen redan som standard en lista över öppna poster?
Portalen visar ordrar, fakturor och betalningar var för sig, med status och filter. En samlad lista för hela företaget med saldo och en stickdatumsammanställning ingår såvitt vi har sett inte i Community. Det är för detta modulen är tänkt.
Ser alla portalanvändare i ett företag listan?
Nej. Bara kontakter med aktiverat alternativ. Den visade listan omfattar dock hela företaget, inte bara just den kontaktens fakturor.
Kan jag välja ett stickdatum bakåt i tiden, till exempel den 31.12. föregående år?
Ja, vilket datum som helst till och med idag. Listan visar då de poster som var bokförda och ännu obetalda den dagen. Beakta anmärkningarna om beräkningen: Avgörande är den dag då betalningen stämdes av.
Stöds ett stickdatum i framtiden?
Nej. Framtida datum behandlas som idag, så att listan inte visar ett läge som ännu inte finns.
Visas kreditnotor och förskottsbetalningar i listan?
Ja. Kreditnotor och betalningar som ännu inte matchats mot en faktura står med negativt belopp i listan och minskar saldot. En anmärkning under tabellen förklarar detta för kunden.
Hur känns förfallna poster igen?
En post är förfallen om dess förfallodatum ligger före stickdatumet och ett positivt återstående belopp fortfarande är öppet. Dagarna efter förfallodatum räknas fram till stickdatumet.
Finns PDF:en även på andra språk?
Ja, gränssnitt och PDF följer användarens språk. Den tyska översättningen medföljer; för fler språk räcker det med en .po-fil eller översättning via Odoos gränssnitt.
Kan en kund se ett annat företags lista om hen ändrar adressen?
Nej. Företaget framgår alltid av den inloggade användaren. Adressen innehåller bara stickdatumet. Även Odoos PDF-rapportadress kontrolleras ännu en gång i själva rapporten.
Hur beräknas betalningsmoralen?
Utifrån de bokförda kundfakturorna från de senaste tolv månaderna och alla öppna fakturor. För varje faktura räknas hur många dagar efter förfallodatumet den betalades: senast på förfallodagen (grön), upp till sju dagar efter (orange) eller senare (röd). Bedömningen är bra vid minst 70 % gröna eller orange och ingen faktura som är öppen och förfallen i mer än 30 dagar. Detaljerna står i avsnittet om betalningsmoral.
Ställer modulen om kunder med dålig betalningsmoral till förskottsbetalning?
Nej. Den visar bara bedömningen och upplysningen. Betalningsvillkor, förskottsbetalning och spärrar förblir ert beslut och er process i Odoo.
Skickar modulen e-post eller påminnelser?
Nej. Den tillhandahåller bara sidan och PDF:en. Den skapar inga meddelanden, aviseringar eller aktiviteter.
Fungerar modulen med Odoo Enterprise?
Den är bara beroende av account och portal, som finns i båda utgåvorna. Vi har bara testat den på Community-utgåvan av Odoo 19.
Under vilken licens står modulen?
Under AGPL-3. Ni får använda, ändra och dela vidare den om ni följer licensvillkoren. Fel och förbättringsförslag är välkomna som issue i GitHub-repositoryt .
Stöd från Biricon IT Services
Vi stöttar Odoo-installationer för små och medelstora företag: från införande via anpassningar och migreringar till löpande drift. Om ni vill erbjuda era kunder öppna poster, fakturor och ärenden i portalen, bygga ut bokföringen i Odoo Community eller på ett säkert sätt få in en modul i er produktionsinstans hjälper vi gärna till. Fler egenutvecklade moduler: Arkivera företag inklusive portalanvändare, Företagsregister och adresskontroll för österrikiska kunder, Dokumentnummer av prefix, år och räknare och Produktuppsättningar i offerten som avsnitt.
Version: 6 november 2026. Modulversion 19.0.1.1.1. Ändringar sedan den första versionen den 5 november: betalningsmoral (19.0.1.1.0) och rättelse av det öppna beloppet per stickdatum efter delbetalningar (19.0.1.1.1). Alla namn, dokumentnummer och belopp i bilderna är fritt påhittade.