Initial commit: Books accounting system with EventFlow CQRS
Backend (.NET 10): - EventFlow CQRS/Event Sourcing with PostgreSQL - GraphQL.NET API with mutations and queries - Custom ReadModelSqlGenerator for snake_case PostgreSQL columns - Hangfire for background job processing - Integration tests with isolated test databases Frontend (React/Vite): - Initial project structure 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
commit
66f6fa138d
126 changed files with 24741 additions and 0 deletions
1602
account-suggestions/accounts-with-suggestions.json
Normal file
1602
account-suggestions/accounts-with-suggestions.json
Normal file
File diff suppressed because it is too large
Load diff
1
account-suggestions/accounts.json
Normal file
1
account-suggestions/accounts.json
Normal file
File diff suppressed because one or more lines are too long
122
account-suggestions/accounts.toon
Normal file
122
account-suggestions/accounts.toon
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
# Dinero Expense Accounts with Suggestions
|
||||
# 104 accounts for AI-powered account suggestion
|
||||
|
||||
meta:
|
||||
source: Dinero API
|
||||
organizationId: 582288
|
||||
accountType: expense
|
||||
totalAccounts: 104
|
||||
removedAccounts: 3220|5120|7140|7280
|
||||
|
||||
regionVariants:
|
||||
varekøb: DK=2000|EU=2050|WORLD=2150
|
||||
ydelseskøb: EU=2100|WORLD=2200
|
||||
fragt: DK=2250|DK_VATFREE=2300|EU=2350
|
||||
husleje: DK=5000|DK_VATFREE=5010
|
||||
parkering: DK=6080|DK_VATFREE=6085
|
||||
|
||||
accounts[104]{number,name,category,vatCode,region,vatRubric,suggestions}:
|
||||
2000,Vareforbrug,Variable omkostninger,I25,DK,,varer|indkøb|lager|goods|inventory|purchase|varekøb
|
||||
2050,EU-erhvervelser varer (rubrik A-varer),Variable omkostninger,IEUV,EU,EU_BOX_A_GOODS,eu|europa|germany|france|italien|spain|netherlands|eu-erhvervelse
|
||||
2100,EU-erhvervelser ydelser (rubrik A-ydelser),Variable omkostninger,IEUY,EU,EU_BOX_A_SERVICES,eu|europa|ydelse|service|eu-ydelse
|
||||
2150,Varekøb verden,Variable omkostninger,IVV,WORLD,,usa|uk|kina|china|verden|import|world
|
||||
2200,Ydelseskøb verden,Variable omkostninger,IVY,WORLD,,usa|uk|kina|verden|service|ydelse|world
|
||||
2250,Fragt med moms,Variable omkostninger,I25,DK,,fragt|levering|shipping|delivery|postnord|gls|dao|bring|ups|dhl
|
||||
2300,Fragt uden moms,Variable omkostninger,,DK,,fragt|shipping|delivery|momsfri
|
||||
2350,Fragt - EU,Variable omkostninger,IEUV,EU,EU_BOX_A_GOODS,fragt|eu|shipping|dhl|ups|fedex
|
||||
2400,Valutakursdifferencer import,Variable omkostninger,,DK,,valuta|kurs|currency|exchange
|
||||
2450,Varelagerregulering,Variable omkostninger,,DK,,lager|regulering|inventory
|
||||
2800,Fremmed arbejde,Variable omkostninger,I25,DK,,underleverandør|freelance|contractor|subcontractor|fremmed arbejde
|
||||
3000,AM-indkomst,Lønomkostninger,,DK,,løn|salary|wage|payroll|am-indkomst
|
||||
3020,Arbejdsgiver ATP,Lønomkostninger,,DK,,atp|arbejdsgiver
|
||||
3040,Medarbejder ATP,Lønomkostninger,,DK,,atp|medarbejder
|
||||
3060,Sygepenge mv.,Lønomkostninger,,DK,,sygepenge|sickness|sygedag
|
||||
3070,Personalegoder herunder fri telefon,Lønomkostninger,,DK,,personalegode|fri telefon|benefit|goder
|
||||
3080,B-honorar,Lønomkostninger,,DK,,b-honorar|honorar|fee
|
||||
3090,Barsel,Lønomkostninger,,DK,,barsel|maternity|fødsel
|
||||
3100,Feriepenge og SH,Lønomkostninger,,DK,,ferie|feriepenge|sh|vacation|holiday
|
||||
3120,Pension,Lønomkostninger,,DK,,pension|pensionsbidrag|retirement
|
||||
3140,Diæter/rejsegodtgørelse,Lønomkostninger,,DK,,diæt|rejsegodtgørelse|per diem|allowance
|
||||
3160,Kørsel i egen bil (kilometergodtgørelse),Lønomkostninger,,DK,,kørsel|kilometer|km|mileage|km-godtgørelse|bil
|
||||
3180,AER/AES/ATP-finansieringsbidrag,Lønomkostninger,,DK,,aer|aes|atp|finansieringsbidrag
|
||||
3200,Arbejdstøj,Lønomkostninger,I25,DK,,arbejdstøj|uniform|workwear|tøj
|
||||
3240,Mad under kursus/møder mv. fuldt fradrag,Lønomkostninger,I25,DK,,mad|kursus|møde|food|catering|frokost
|
||||
3260,Gaver til personalet fuldt fradrag,Lønomkostninger,,DK,,gave|personale|gift|employee
|
||||
3280,Uddannelsesudgifter,Lønomkostninger,I25,DK,,kursus|uddannelse|course|training|efteruddannelse
|
||||
3300,Diverse vedr. ansatte med moms,Lønomkostninger,I25,DK,,diverse|personale|ansatte|moms
|
||||
3320,Diverse vedr. ansatte uden moms,Lønomkostninger,,DK,,diverse|personale|ansatte|momsfri
|
||||
3340,Regulering feriepenge,Lønomkostninger,,DK,,ferie|regulering|feriepenge
|
||||
3355,Frokostordning til ansatte,Lønomkostninger,,DK,,frokost|frokostordning|lunch|kantine
|
||||
4000,Annoncer og reklame,Salgsomkostninger,I25,DK,,annonce|reklame|marketing|ads|google|facebook|linkedin|meta|advertising
|
||||
4020,Udsmykning i forbindelse med arrangementer/events,Salgsomkostninger,I25,DK,,udsmykning|event|arrangement|decoration
|
||||
4040,Hotel personale fuldt fradrag,Salgsomkostninger,I25,DK,,hotel|overnatning|accommodation|booking.com|hotels.com|personale
|
||||
4060,Hotel forretningsforbindelser delvis fradrag,Salgsomkostninger,I25,DK,,hotel|overnatning|kunde|client|forretningsforbindelse
|
||||
4080,Konferencer,Salgsomkostninger,,DK,,konference|conference|seminar|event
|
||||
4100,Messer,Salgsomkostninger,I25,DK,,messe|fair|exhibition|udstilling
|
||||
4120,Restaurant personale fuldt fradrag,Salgsomkostninger,REP,DK,,restaurant|frokost|middag|lunch|dinner|café|personale
|
||||
4140,Restaurant forretningsforbindelser delvis fradrag,Salgsomkostninger,REP,DK,,restaurant|repræsentation|kunde|client|forretningsforbindelse
|
||||
4160,Mad i virksomheden til forretningsforbindelser delvis fradrag,Salgsomkostninger,I25,DK,,mad|virksomhed|forretningsforbindelse|catering
|
||||
4180,Repræsentation gaver og blomster delvis fradrag,Salgsomkostninger,,DK,,gave|blomster|gift|flowers|repræsentation
|
||||
4200,Anden fradragsberettiget repræsentation med moms,Salgsomkostninger,I25,DK,,repræsentation|representation
|
||||
4220,Repræsentation diverse,Salgsomkostninger,,DK,,repræsentation|diverse
|
||||
4240,Øvrige personaleomkostninger,Salgsomkostninger,I25,DK,,personale|personnel|staff
|
||||
4260,Ej fradragsberettiget andel,Salgsomkostninger,,DK,,ikke-fradrag|non-deductible
|
||||
4280,Rejseomkostninger,Salgsomkostninger,,DK,,rejse|travel|tur|trip
|
||||
5000,Husleje,Lokaleomkostninger,I25,DK,,husleje|leje|rent|kontor|lokale
|
||||
5010,Husleje uden moms,Lokaleomkostninger,,DK,,husleje|leje|rent|momsfri
|
||||
5025,El,Lokaleomkostninger,I25,DK,,el|strøm|electricity|power|ørsted|norlys|ewii|andel
|
||||
5030,Vand,Lokaleomkostninger,I25,DK,,vand|water|vandværk
|
||||
5035,Varme,Lokaleomkostninger,I25,DK,,varme|gas|fjernvarme|heating|naturgas
|
||||
5040,Elafgift,Lokaleomkostninger,,DK,,elafgift|afgift|tax
|
||||
5045,Naturgas- og bygasafgift,Lokaleomkostninger,,DK,,gas|afgift|naturgas
|
||||
5050,Vandafgift,Lokaleomkostninger,,DK,,vand|afgift|vandafgift
|
||||
5060,Rengøring og affaldshåndtering,Lokaleomkostninger,I25,DK,,rengøring|cleaning|affald|waste|renovation
|
||||
5080,Reparation og vedligeholdelse,Lokaleomkostninger,I25,DK,,reparation|vedligeholdelse|maintenance|repair
|
||||
5100,Ejendomsskat,Lokaleomkostninger,,DK,,ejendomsskat|property tax|skat
|
||||
5140,Mødelokaler,Lokaleomkostninger,I25,DK,,mødelokale|meeting room|konference
|
||||
5160,Dekoration,Lokaleomkostninger,I25,DK,,dekoration|decoration|indretning
|
||||
6000,Billeje (gulplade),Kørsel og rejser,I25,DK,,billeje|car rental|leje|hertz|avis|europcar|sixt|enterprise
|
||||
6020,Brændstof (gulplade),Kørsel og rejser,I25,DK,,benzin|diesel|fuel|brændstof|ok|shell|q8|circle k|ingo
|
||||
6040,Vedligeholdelse af bil (gulplade),Kørsel og rejser,I25,DK,,bil|vedligeholdelse|car|service|værksted|dæk
|
||||
6060,Vægtafgift og forsikringer,Kørsel og rejser,,DK,,vægtafgift|forsikring|car insurance|bilforsikring
|
||||
6080,Parkering (gulplade),Kørsel og rejser,I25,DK,,parkering|parking|p-afgift|easypark|parkman|apcoa
|
||||
6085,Parkering uden moms,Kørsel og rejser,,DK,,parkering|parking|momsfri
|
||||
6100,Broafgift,Kørsel og rejser,I25,DK,,bro|bridge|storebælt|øresund|toll|afgift
|
||||
6120,Taxa,Kørsel og rejser,,DK,,taxa|taxi|uber|bolt|dantaxi|viggo|4x27
|
||||
6140,Tog,Kørsel og rejser,,DK,,tog|dsb|train|rejsekort|billet
|
||||
6160,Fly,Kørsel og rejser,,DK,,fly|flight|sas|norwegian|ryanair|lufthansa|flybillet
|
||||
6180,Bus,Kørsel og rejser,,DK,,bus|movia|arriva|flixbus
|
||||
6200,Færge,Kørsel og rejser,I25,DK,,færge|ferry|molslinjen|scandlines|bornholmslinjen
|
||||
6400,Diverse transportomkostninger uden moms,Kørsel og rejser,,DK,,transport|diverse|transportation
|
||||
7005,Revision og regnskabsmæssig assistance,Administrationsomkostninger,I25,DK,,revisor|revision|audit|regnskab|pwc|deloitte|ey|kpmg|bdo
|
||||
7010,Advokat,Administrationsomkostninger,I25,DK,,advokat|lawyer|legal|juridisk|attorney
|
||||
7020,Bogføringsassistance,Administrationsomkostninger,I25,DK,,bogføring|bookkeeping|regnskab|bogholder
|
||||
7040,Konsulentbistand,Administrationsomkostninger,I25,DK,,konsulent|consultant|rådgivning|advisory|rådgiver
|
||||
7060,Kontingenter inkl. moms,Administrationsomkostninger,I25,DK,,kontingent|medlemskab|membership|forening
|
||||
7080,Kontingenter ekskl. moms,Administrationsomkostninger,,DK,,kontingent|medlemskab|momsfri
|
||||
7100,Aviser,Administrationsomkostninger,,DK,,avis|newspaper|berlingske|politiken|jyllandsposten|børsen|dagblad
|
||||
7120,Faglitteratur,Administrationsomkostninger,I25,DK,,bog|book|litteratur|amazon|saxo|tales|faglitteratur
|
||||
7160,Erhvervsforsikringer,Administrationsomkostninger,,DK,,forsikring|insurance|tryg|topdanmark|if|codan|gjensidige|alm brand
|
||||
7180,Fragt og kørsel,Administrationsomkostninger,I25,DK,,fragt|kørsel|shipping|transport
|
||||
7200,Kontorartikler og tryksager,Administrationsomkostninger,I25,DK,,kontor|office|papir|printer|lyreco|staples|kontorartikler
|
||||
7220,Porto og gebyrer,Administrationsomkostninger,,DK,,porto|gebyr|postage|fee|postnord
|
||||
7240,Telefoni,Administrationsomkostninger,I25,DK,,telefon|mobil|phone|mobile|telia|telenor|3|telmore|cbs|lebara
|
||||
7260,Beskatning af fri telefoni,Administrationsomkostninger,,DK,,telefon|beskatning|fri telefon
|
||||
7300,Internet og webhotel,Administrationsomkostninger,I25,DK,,internet|hosting|domain|web|simply|one.com|cloudflare|aws|azure
|
||||
7320,Køb af software,Administrationsomkostninger,I25,DK,,software|app|abonnement|subscription|saas|adobe|microsoft|slack|notion|google workspace|dropbox
|
||||
7360,Offentlige bøder og gebyrer,Administrationsomkostninger,,DK,,bøde|gebyr|fine|offentlig
|
||||
7380,Registrerede kassedifferencer,Administrationsomkostninger,,DK,,kasse|difference|cash
|
||||
7400,Betalingsløsning,Administrationsomkostninger,I25,DK,,betaling|payment|stripe|mobilepay|nets|clearhaus|paypal
|
||||
7420,Indløsere,Administrationsomkostninger,,DK,,indløser|acquirer|nets|clearhaus
|
||||
7440,Licens,Administrationsomkostninger,,DK,,licens|license|rettighed
|
||||
7460,Diverse inkl. moms,Administrationsomkostninger,I25,DK,,diverse|moms|miscellaneous
|
||||
7480,Diverse ekskl. moms,Administrationsomkostninger,,DK,,diverse|momsfri|miscellaneous
|
||||
7500,Generalforsamling bestyrelsesmøder ude i byen fuld fradrag,Administrationsomkostninger,REP,DK,,generalforsamling|bestyrelse|møde|board|meeting
|
||||
7520,Generalforsamling i virksomhedens lokaler,Administrationsomkostninger,,DK,,generalforsamling|møde|lokale
|
||||
7540,Bestyrelsesmøder i virksomhedens lokaler,Administrationsomkostninger,I25,DK,,bestyrelse|board|møde|lokale
|
||||
7560,Bestyrelsesmøder ude i byen,Administrationsomkostninger,REP,DK,,bestyrelse|board|møde|restaurant
|
||||
8040,Småanskaffelser (straksafskrivning),Afskrivninger,I25,DK,,computer|laptop|møbler|furniture|udstyr|equipment|apple|dell|lenovo|småanskaffelse
|
||||
8050,Småanskaffelser med omvendt betalingspligt,Afskrivninger,OBPK,DK,,småanskaffelse|omvendt betalingspligt|reverse charge
|
||||
9200,Bankrenter,Renteudgifter,,DK,,rente|bank|interest|bankrenter
|
||||
9210,Leverandører mv.,Renteudgifter,,DK,,rente|leverandør|supplier|interest
|
||||
9220,Ikke-fradragsberettigede renter,Renteudgifter,,DK,,rente|ikke-fradrag|non-deductible
|
||||
6
account-suggestions/fetch-accounts.sh
Executable file
6
account-suggestions/fetch-accounts.sh
Executable file
File diff suppressed because one or more lines are too long
199
account-suggestions/process-accounts.js
Normal file
199
account-suggestions/process-accounts.js
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
const fs = require('fs');
|
||||
|
||||
// Load accounts
|
||||
const accounts = JSON.parse(fs.readFileSync('accounts.json', 'utf8'));
|
||||
|
||||
// Accounts to remove
|
||||
const removeNumbers = [3220, 5120, 7140, 7280];
|
||||
|
||||
// Suggestions mapping by account number
|
||||
const suggestionsMap = {
|
||||
// Variable omkostninger
|
||||
2000: ["varer", "indkøb", "lager", "goods", "inventory", "purchase", "varekøb"],
|
||||
2050: ["eu", "europa", "germany", "france", "italien", "spain", "netherlands", "eu-erhvervelse"],
|
||||
2100: ["eu", "europa", "ydelse", "service", "eu-ydelse"],
|
||||
2150: ["usa", "uk", "kina", "china", "verden", "import", "world"],
|
||||
2200: ["usa", "uk", "kina", "verden", "service", "ydelse", "world"],
|
||||
2250: ["fragt", "levering", "shipping", "delivery", "postnord", "gls", "dao", "bring", "ups", "dhl"],
|
||||
2300: ["fragt", "shipping", "delivery", "momsfri"],
|
||||
2350: ["fragt", "eu", "shipping", "dhl", "ups", "fedex"],
|
||||
2400: ["valuta", "kurs", "currency", "exchange"],
|
||||
2450: ["lager", "regulering", "inventory"],
|
||||
2800: ["underleverandør", "freelance", "contractor", "subcontractor", "fremmed arbejde"],
|
||||
|
||||
// Lønomkostninger
|
||||
3000: ["løn", "salary", "wage", "payroll", "am-indkomst"],
|
||||
3020: ["atp", "arbejdsgiver"],
|
||||
3040: ["atp", "medarbejder"],
|
||||
3060: ["sygepenge", "sickness", "sygedag"],
|
||||
3070: ["personalegode", "fri telefon", "benefit", "goder"],
|
||||
3080: ["b-honorar", "honorar", "fee"],
|
||||
3090: ["barsel", "maternity", "fødsel"],
|
||||
3100: ["ferie", "feriepenge", "sh", "vacation", "holiday"],
|
||||
3120: ["pension", "pensionsbidrag", "retirement"],
|
||||
3140: ["diæt", "rejsegodtgørelse", "per diem", "allowance"],
|
||||
3160: ["kørsel", "kilometer", "km", "mileage", "km-godtgørelse", "bil"],
|
||||
3180: ["aer", "aes", "atp", "finansieringsbidrag"],
|
||||
3200: ["arbejdstøj", "uniform", "workwear", "tøj"],
|
||||
3240: ["mad", "kursus", "møde", "food", "catering", "frokost"],
|
||||
3260: ["gave", "personale", "gift", "employee"],
|
||||
3280: ["kursus", "uddannelse", "course", "training", "efteruddannelse"],
|
||||
3300: ["diverse", "personale", "ansatte", "moms"],
|
||||
3320: ["diverse", "personale", "ansatte", "momsfri"],
|
||||
3340: ["ferie", "regulering", "feriepenge"],
|
||||
3355: ["frokost", "frokostordning", "lunch", "kantine"],
|
||||
|
||||
// Salgsomkostninger
|
||||
4000: ["annonce", "reklame", "marketing", "ads", "google", "facebook", "linkedin", "meta", "advertising"],
|
||||
4020: ["udsmykning", "event", "arrangement", "decoration"],
|
||||
4040: ["hotel", "overnatning", "accommodation", "booking.com", "hotels.com", "personale"],
|
||||
4060: ["hotel", "overnatning", "kunde", "client", "forretningsforbindelse"],
|
||||
4080: ["konference", "conference", "seminar", "event"],
|
||||
4100: ["messe", "fair", "exhibition", "udstilling"],
|
||||
4120: ["restaurant", "frokost", "middag", "lunch", "dinner", "café", "personale"],
|
||||
4140: ["restaurant", "repræsentation", "kunde", "client", "forretningsforbindelse"],
|
||||
4160: ["mad", "virksomhed", "forretningsforbindelse", "catering"],
|
||||
4180: ["gave", "blomster", "gift", "flowers", "repræsentation"],
|
||||
4200: ["repræsentation", "representation"],
|
||||
4220: ["repræsentation", "diverse"],
|
||||
4240: ["personale", "personnel", "staff"],
|
||||
4260: ["ikke-fradrag", "non-deductible"],
|
||||
4280: ["rejse", "travel", "tur", "trip"],
|
||||
|
||||
// Lokaleomkostninger
|
||||
5000: ["husleje", "leje", "rent", "kontor", "lokale"],
|
||||
5010: ["husleje", "leje", "rent", "momsfri"],
|
||||
5025: ["el", "strøm", "electricity", "power", "ørsted", "norlys", "ewii", "andel"],
|
||||
5030: ["vand", "water", "vandværk"],
|
||||
5035: ["varme", "gas", "fjernvarme", "heating", "naturgas"],
|
||||
5040: ["elafgift", "afgift", "tax"],
|
||||
5045: ["gas", "afgift", "naturgas"],
|
||||
5050: ["vand", "afgift", "vandafgift"],
|
||||
5060: ["rengøring", "cleaning", "affald", "waste", "renovation"],
|
||||
5080: ["reparation", "vedligeholdelse", "maintenance", "repair"],
|
||||
5100: ["ejendomsskat", "property tax", "skat"],
|
||||
5140: ["mødelokale", "meeting room", "konference"],
|
||||
5160: ["dekoration", "decoration", "indretning"],
|
||||
|
||||
// Kørsel og rejser
|
||||
6000: ["billeje", "car rental", "leje", "hertz", "avis", "europcar", "sixt", "enterprise"],
|
||||
6020: ["benzin", "diesel", "fuel", "brændstof", "ok", "shell", "q8", "circle k", "ingo"],
|
||||
6040: ["bil", "vedligeholdelse", "car", "service", "værksted", "dæk"],
|
||||
6060: ["vægtafgift", "forsikring", "car insurance", "bilforsikring"],
|
||||
6080: ["parkering", "parking", "p-afgift", "easypark", "parkman", "apcoa"],
|
||||
6085: ["parkering", "parking", "momsfri"],
|
||||
6100: ["bro", "bridge", "storebælt", "øresund", "toll", "afgift"],
|
||||
6120: ["taxa", "taxi", "uber", "bolt", "dantaxi", "viggo", "4x27"],
|
||||
6140: ["tog", "dsb", "train", "rejsekort", "billet"],
|
||||
6160: ["fly", "flight", "sas", "norwegian", "ryanair", "lufthansa", "flybillet"],
|
||||
6180: ["bus", "movia", "arriva", "flixbus"],
|
||||
6200: ["færge", "ferry", "molslinjen", "scandlines", "bornholmslinjen"],
|
||||
6400: ["transport", "diverse", "transportation"],
|
||||
|
||||
// Administrationsomkostninger
|
||||
7005: ["revisor", "revision", "audit", "regnskab", "pwc", "deloitte", "ey", "kpmg", "bdo"],
|
||||
7010: ["advokat", "lawyer", "legal", "juridisk", "attorney"],
|
||||
7020: ["bogføring", "bookkeeping", "regnskab", "bogholder"],
|
||||
7040: ["konsulent", "consultant", "rådgivning", "advisory", "rådgiver"],
|
||||
7060: ["kontingent", "medlemskab", "membership", "forening"],
|
||||
7080: ["kontingent", "medlemskab", "momsfri"],
|
||||
7100: ["avis", "newspaper", "berlingske", "politiken", "jyllandsposten", "børsen", "dagblad"],
|
||||
7120: ["bog", "book", "litteratur", "amazon", "saxo", "tales", "faglitteratur"],
|
||||
7160: ["forsikring", "insurance", "tryg", "topdanmark", "if", "codan", "gjensidige", "alm brand"],
|
||||
7180: ["fragt", "kørsel", "shipping", "transport"],
|
||||
7200: ["kontor", "office", "papir", "printer", "lyreco", "staples", "kontorartikler"],
|
||||
7220: ["porto", "gebyr", "postage", "fee", "postnord"],
|
||||
7240: ["telefon", "mobil", "phone", "mobile", "telia", "telenor", "3", "telmore", "cbs", "lebara"],
|
||||
7260: ["telefon", "beskatning", "fri telefon"],
|
||||
7300: ["internet", "hosting", "domain", "web", "simply", "one.com", "cloudflare", "aws", "azure"],
|
||||
7320: ["software", "app", "abonnement", "subscription", "saas", "adobe", "microsoft", "slack", "notion", "google workspace", "dropbox"],
|
||||
7360: ["bøde", "gebyr", "fine", "offentlig"],
|
||||
7380: ["kasse", "difference", "cash"],
|
||||
7400: ["betaling", "payment", "stripe", "mobilepay", "nets", "clearhaus", "paypal"],
|
||||
7420: ["indløser", "acquirer", "nets", "clearhaus"],
|
||||
7440: ["licens", "license", "rettighed"],
|
||||
7460: ["diverse", "moms", "miscellaneous"],
|
||||
7480: ["diverse", "momsfri", "miscellaneous"],
|
||||
7500: ["generalforsamling", "bestyrelse", "møde", "board", "meeting"],
|
||||
7520: ["generalforsamling", "møde", "lokale"],
|
||||
7540: ["bestyrelse", "board", "møde", "lokale"],
|
||||
7560: ["bestyrelse", "board", "møde", "restaurant"],
|
||||
|
||||
// Afskrivninger
|
||||
8040: ["computer", "laptop", "møbler", "furniture", "udstyr", "equipment", "apple", "dell", "lenovo", "småanskaffelse"],
|
||||
8050: ["småanskaffelse", "omvendt betalingspligt", "reverse charge"],
|
||||
|
||||
// Renteudgifter
|
||||
9200: ["rente", "bank", "interest", "bankrenter"],
|
||||
9210: ["rente", "leverandør", "supplier", "interest"],
|
||||
9220: ["rente", "ikke-fradrag", "non-deductible"]
|
||||
};
|
||||
|
||||
// VAT rubric mapping for EU accounts
|
||||
const vatRubricMap = {
|
||||
2050: "EU_BOX_A_GOODS",
|
||||
2100: "EU_BOX_A_SERVICES",
|
||||
2350: "EU_BOX_A_GOODS"
|
||||
};
|
||||
|
||||
// Region variants mapping
|
||||
const regionVariants = {
|
||||
2000: { category: "varekøb", EU: 2050, WORLD: 2150 },
|
||||
2050: { category: "varekøb", DK: 2000, WORLD: 2150 },
|
||||
2150: { category: "varekøb", DK: 2000, EU: 2050 },
|
||||
2100: { category: "ydelseskøb", WORLD: 2200 },
|
||||
2200: { category: "ydelseskøb", EU: 2100 },
|
||||
2250: { category: "fragt", DK_VATFREE: 2300, EU: 2350 },
|
||||
2300: { category: "fragt", DK: 2250, EU: 2350 },
|
||||
2350: { category: "fragt", DK: 2250, DK_VATFREE: 2300 },
|
||||
5000: { category: "husleje", DK_VATFREE: 5010 },
|
||||
5010: { category: "husleje", DK: 5000 },
|
||||
6080: { category: "parkering", DK_VATFREE: 6085 },
|
||||
6085: { category: "parkering", DK: 6080 }
|
||||
};
|
||||
|
||||
// Process accounts
|
||||
const enrichedAccounts = accounts
|
||||
.filter(acc => !removeNumbers.includes(acc.number))
|
||||
.map(acc => {
|
||||
// Determine region
|
||||
let region = "DK";
|
||||
if (acc.defaultVatTypeRegion === "EU") {
|
||||
region = "EU";
|
||||
} else if (acc.defaultVatTypeRegion === "World") {
|
||||
region = "WORLD";
|
||||
}
|
||||
|
||||
// Build enriched account
|
||||
const enriched = {
|
||||
id: acc.id,
|
||||
number: acc.number,
|
||||
name: acc.name,
|
||||
categoryName: acc.categoryName,
|
||||
defaultVatCode: acc.defaultVatCode,
|
||||
region: region,
|
||||
suggestions: suggestionsMap[acc.number] || []
|
||||
};
|
||||
|
||||
// Add vatRubric for EU accounts
|
||||
if (vatRubricMap[acc.number]) {
|
||||
enriched.vatRubric = vatRubricMap[acc.number];
|
||||
}
|
||||
|
||||
// Add related accounts for region variants
|
||||
if (regionVariants[acc.number]) {
|
||||
enriched.regionVariants = regionVariants[acc.number];
|
||||
}
|
||||
|
||||
return enriched;
|
||||
});
|
||||
|
||||
// Save output
|
||||
fs.writeFileSync(
|
||||
'accounts-with-suggestions.json',
|
||||
JSON.stringify(enrichedAccounts, null, 2),
|
||||
'utf8'
|
||||
);
|
||||
|
||||
console.log(`Processed ${enrichedAccounts.length} accounts (removed ${removeNumbers.length})`);
|
||||
console.log('Saved to accounts-with-suggestions.json');
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"vendor": {
|
||||
"name": "EWII A/S",
|
||||
"address": "Kokbjerg 30, 6000 Kolding",
|
||||
"country": "DK",
|
||||
"vatNumber": "DK28297947"
|
||||
},
|
||||
"invoice": {
|
||||
"type": "reminder",
|
||||
"number": null,
|
||||
"date": "2024-06-06",
|
||||
"dueDate": "2024-06-17",
|
||||
"currency": "DKK",
|
||||
"totalAmount": 3361.04,
|
||||
"vatAmount": null,
|
||||
"netAmount": null
|
||||
},
|
||||
"customer": {
|
||||
"name": "Nicolaj Helmer Hartmann",
|
||||
"address": "Mejsevej 2, 8370 Hadsten",
|
||||
"customerNumber": "400143507"
|
||||
},
|
||||
"lineItems": [
|
||||
{
|
||||
"description": "El restance - Rykker 2",
|
||||
"amount": 3361.04
|
||||
}
|
||||
],
|
||||
"suggestedAccount": {
|
||||
"number": 5025,
|
||||
"name": "El",
|
||||
"vatCode": "I25",
|
||||
"region": "DK",
|
||||
"confidence": 0.95,
|
||||
"reasoning": "EWII er el-leverandør, betalingspåmindelse vedrører el-forbrug"
|
||||
},
|
||||
"alternativeAccounts": [
|
||||
{
|
||||
"number": 5040,
|
||||
"name": "Elafgift",
|
||||
"confidence": 0.3,
|
||||
"reasoning": "Kan indeholde elafgift, men primært el-forbrug"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
BIN
account-suggestions/test-invoices/Invoice-44534E99-0004.pdf
Normal file
BIN
account-suggestions/test-invoices/Invoice-44534E99-0004.pdf
Normal file
Binary file not shown.
BIN
account-suggestions/test-invoices/Invoice-MVPAIAKP-0002.pdf
Normal file
BIN
account-suggestions/test-invoices/Invoice-MVPAIAKP-0002.pdf
Normal file
Binary file not shown.
|
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
"vendor": {
|
||||
"name": "Microsoft Ireland Operations Ltd",
|
||||
"address": "One Microsoft Place, South County Business Park, Leopardstown, Dublin 18, D18 P521, Ireland",
|
||||
"country": "IE",
|
||||
"vatNumber": "IE8256796U"
|
||||
},
|
||||
"invoice": {
|
||||
"type": "invoice",
|
||||
"number": "E0800QGJD1",
|
||||
"date": "2024-01-03",
|
||||
"dueDate": "2024-01-03",
|
||||
"currency": "DKK",
|
||||
"totalAmount": 69.90,
|
||||
"vatAmount": 0.00,
|
||||
"netAmount": 69.90,
|
||||
"vatNote": "omvendt betalingspligt"
|
||||
},
|
||||
"customer": {
|
||||
"name": "Softwarehuset",
|
||||
"address": "Mejsevej 2, 8370 Hadsten",
|
||||
"vatNumber": "DK38059726"
|
||||
},
|
||||
"lineItems": [
|
||||
{
|
||||
"description": "Office 365 E1 - Månedligt abonnementsgebyr",
|
||||
"period": "23-12-2023 - 22-01-2024",
|
||||
"quantity": 1,
|
||||
"unitPrice": 69.90,
|
||||
"amount": 69.90
|
||||
}
|
||||
],
|
||||
"suggestedAccount": {
|
||||
"number": 2100,
|
||||
"name": "EU-erhvervelser ydelser (rubrik A-ydelser)",
|
||||
"vatCode": "IEUY",
|
||||
"region": "EU",
|
||||
"vatRubric": "EU_BOX_A_SERVICES",
|
||||
"confidence": 0.97,
|
||||
"reasoning": "Software/cloud-service fra EU (Irland) med omvendt betalingspligt - skal bogføres som EU-ydelseskøb"
|
||||
},
|
||||
"alternativeAccounts": [
|
||||
{
|
||||
"number": 7320,
|
||||
"name": "Køb af software",
|
||||
"confidence": 0.4,
|
||||
"reasoning": "Ville være korrekt hvis leverandør var dansk, men EU-leverandør kræver EU-konto pga. momsindberetning"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
account-suggestions/test-invoices/Microsoft E1 - E0800QGJD1.pdf
Normal file
BIN
account-suggestions/test-invoices/Microsoft E1 - E0800QGJD1.pdf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,65 @@
|
|||
{
|
||||
"vendor": {
|
||||
"name": "Waoo (Fibia P/S)",
|
||||
"address": "Energivej 33, 4690 Haslev",
|
||||
"country": "DK",
|
||||
"vatNumber": "DK36058552"
|
||||
},
|
||||
"invoice": {
|
||||
"type": "invoice",
|
||||
"number": "08338955",
|
||||
"date": "2025-08-07",
|
||||
"dueDate": "2025-09-01",
|
||||
"currency": "DKK",
|
||||
"totalAmount": 1284.00,
|
||||
"vatAmount": 256.80,
|
||||
"netAmount": 1027.20
|
||||
},
|
||||
"customer": {
|
||||
"name": "Nicolaj Hartmann",
|
||||
"address": "Mejsevej 2, Hadbjerg, 8370 Hadsten",
|
||||
"customerNumber": "1299453",
|
||||
"contractNumber": "861418"
|
||||
},
|
||||
"lineItems": [
|
||||
{
|
||||
"description": "Waoo Fiber 1000",
|
||||
"period": "01.09.2025 - 30.09.2025",
|
||||
"amount": 389.00
|
||||
},
|
||||
{
|
||||
"description": "Waoo Fiber 1000",
|
||||
"period": "01.10.2025 - 31.10.2025",
|
||||
"amount": 389.00
|
||||
},
|
||||
{
|
||||
"description": "Waoo Fiber 1000",
|
||||
"period": "01.11.2025 - 30.11.2025",
|
||||
"amount": 389.00
|
||||
},
|
||||
{
|
||||
"description": "Abonnement Fast IP adresse",
|
||||
"period": "01.09.2025 - 30.09.2025",
|
||||
"amount": 39.00
|
||||
},
|
||||
{
|
||||
"description": "Abonnement Fast IP adresse",
|
||||
"period": "01.10.2025 - 31.10.2025",
|
||||
"amount": 39.00
|
||||
},
|
||||
{
|
||||
"description": "Abonnement Fast IP adresse",
|
||||
"period": "01.11.2025 - 30.11.2025",
|
||||
"amount": 39.00
|
||||
}
|
||||
],
|
||||
"suggestedAccount": {
|
||||
"number": 7300,
|
||||
"name": "Internet og webhotel",
|
||||
"vatCode": "I25",
|
||||
"region": "DK",
|
||||
"confidence": 0.98,
|
||||
"reasoning": "Fiber internet abonnement fra dansk udbyder med 25% moms"
|
||||
},
|
||||
"alternativeAccounts": []
|
||||
}
|
||||
BIN
account-suggestions/test-invoices/fibia_receipt_72147924.pdf
Normal file
BIN
account-suggestions/test-invoices/fibia_receipt_72147924.pdf
Normal file
Binary file not shown.
BIN
account-suggestions/test-invoices/invoice (4).pdf
Normal file
BIN
account-suggestions/test-invoices/invoice (4).pdf
Normal file
Binary file not shown.
BIN
account-suggestions/test-invoices/invoice-F175490.pdf
Normal file
BIN
account-suggestions/test-invoices/invoice-F175490.pdf
Normal file
Binary file not shown.
BIN
account-suggestions/test-invoices/invoice-F191023.pdf
Normal file
BIN
account-suggestions/test-invoices/invoice-F191023.pdf
Normal file
Binary file not shown.
BIN
account-suggestions/test-invoices/parking_receipt_2582441883.pdf
Normal file
BIN
account-suggestions/test-invoices/parking_receipt_2582441883.pdf
Normal file
Binary file not shown.
BIN
account-suggestions/test-invoices/receipt.png
Normal file
BIN
account-suggestions/test-invoices/receipt.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 497 KiB |
Loading…
Add table
Add a link
Reference in a new issue