Files
accounted/lib/bokslut/ixbrl/taxonomy/entry-points.ts
T
Jakob WennbergandClaude Sonnet 5 ec27228a8e style: remove em/en dashes repo-wide, add CLAUDE.md rule against them (#890)
Em dashes (—) and en dashes (–) had spread across comments, docs, tests,
and a few UI strings, reading as AI-generated boilerplate rather than
house style. Replaced each with punctuation matching its context: colon
for explanatory clauses, comma for asides, plain hyphen for numeric/legal
ranges (e.g. "21-23§"), "to"/"till" for date ranges, parentheses for
paired-dash asides. messages/en.json and messages/sv.json were fixed by
hand together to keep sv/en in sync.

Left untouched where the dash is the functional subject rather than
decorative punctuation: date-range-parser.ts's separator regex,
charset-repair.ts's CP1252 byte-mapping table (and its test), the SIE
encoding mojibake docs, generic-csv.ts's minus-sign normalizer, the
agent system-prompt files that already instruct against em dashes, and
a golden iXBRL test fixture compared byte-for-byte.

Also fixes two bugs surfaced along the way: an off-by-one in
ApiKeysPanel's scope-label split (a leftover from an earlier partial
pass), and a charset-repair test that had lost the literal en-dash it
exists to verify.

Regenerated the agent atom seed migration (skills:generate) since 27
SKILL.md files changed. Added a CLAUDE.md rule against em/en dashes,
with an explicit carve-out for the functional-dash cases above.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 15:58:06 +02:00

91 lines
3.6 KiB
TypeScript

/**
* Taxonomy entry points accepted by Bolagsverket's inlämningstjänst.
*
* An entry point fixes three things for a generated instance document:
* 1. The schemaRefs (the årsredovisning report + the fastställelseintyg
* "COA" report (certificate of adoption) exactly as in the official
* examples; allowed ÅR/FI/RB combinations per
* dev_docs/bokslut/kombinationer-taxonomirapporter-v1.4-screenshot.png).
* 2. The xmlns prefix → namespace URI map. The 2024-09-12 K2 generation
* still uses the 2021-10-31 base-concept namespaces (se-gen-base,
* se-cd-base, se-mem-base): verified against the entry-point XSD import
* chain in taxonomi-paket-2024-09-12_rev20250312.zip.
* 3. Which generated concept registry validates the emitted facts.
*
* MVP ships K2 AB `risbs` (full RR + full BR: matches the current PDF
* layout). The other K2 forms and K3 land in M6.
*/
export type Uppstallningsform = 'risbs' | 'risab' | 'raibs' | 'raiab' | 'full'
export interface TaxonomyEntryPoint {
id: string
regelverk: 'K2' | 'K3'
foretagsform: 'AB'
uppstallningsform: Uppstallningsform
/** Version directory of the ÅR taxonomy, e.g. "2024-09-12". */
taxonomyVersion: string
/** Version of the fastställelseintyg (COA) taxonomy. */
faststallelseintygVersion: string
/** link:schemaRef hrefs, in document order. */
schemaRefs: string[]
/** xmlns declarations for the <html> root, prefix → URI. */
namespaces: Record<string, string>
/** Registry id resolved via getRegistry(). */
registryId: string
}
export const K2_AB_RISBS_2024_09_12: TaxonomyEntryPoint = {
id: 'k2-ab-risbs-2024-09-12',
regelverk: 'K2',
foretagsform: 'AB',
uppstallningsform: 'risbs',
taxonomyVersion: '2024-09-12',
faststallelseintygVersion: '2020-12-01',
schemaRefs: [
'http://xbrl.taxonomier.se/se/fr/gaap/k2-all/ab/risbs/2024-09-12/se-k2-ab-risbs-2024-09-12.xsd',
'http://xbrl.taxonomier.se/se/fr/gaap/coa/rplc/2020-12-01/se-coa-rplc-2020-12-01.xsd',
],
namespaces: {
ix: 'http://www.xbrl.org/2013/inlineXBRL',
xbrli: 'http://www.xbrl.org/2003/instance',
link: 'http://www.xbrl.org/2003/linkbase',
xlink: 'http://www.w3.org/1999/xlink',
iso4217: 'http://www.xbrl.org/2003/iso4217',
ixt: 'http://www.xbrl.org/inlineXBRL/transformation/2010-04-20',
'se-gen-base': 'http://www.taxonomier.se/se/fr/gen-base/2021-10-31',
'se-cd-base': 'http://www.taxonomier.se/se/fr/cd-base/2021-10-31',
'se-mem-base': 'http://www.taxonomier.se/se/fr/mem-base/2021-10-31',
'se-bol-base': 'http://www.bolagsverket.se/se/fr/comp-base/2020-12-01',
'se-gaap-ext': 'http://www.taxonomier.se/se/fr/gaap/gaap-ext/2024-09-12',
'se-k2-type': 'http://www.taxonomier.se/se/fr/k2/datatype',
},
registryId: 'k2-ab-2024-09-12',
}
const ENTRY_POINTS: Record<string, TaxonomyEntryPoint> = {
[K2_AB_RISBS_2024_09_12.id]: K2_AB_RISBS_2024_09_12,
}
export function getEntryPoint(id: string): TaxonomyEntryPoint {
const ep = ENTRY_POINTS[id]
if (!ep) {
throw new Error(
`Unknown taxonomy entry point "${id}": known: ${Object.keys(ENTRY_POINTS).join(', ')}`,
)
}
return ep
}
/**
* Resolve the entry point for a company's filing. Today only K2 AB risbs is
* supported; K3 callers get a descriptive error the UI can surface instead of
* a generated-but-rejectable document.
*/
export function resolveEntryPoint(framework: 'k2' | 'k3'): TaxonomyEntryPoint {
if (framework === 'k2') return K2_AB_RISBS_2024_09_12
throw new Error(
'Digital inlämning stöds ännu inte för K3: generera PDF eller vänta på K3-stödet (M6).',
)
}