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');