Saftlint
Sources

Documentation conflicts

Open and resolved conflicts and confirmed limitations are shown with versioned handling history. Private correspondence is not published.

Official code-list files use misleading types and inconsistent encodings

CONFLICT-CODELIST-PACKAGING-001

The file published as STAT_Grouping_Category_Code.csv is an XLSX/ZIP workbook. The KOSTRA files use Windows-1252 and a different column order.

Disposition
Original artifacts and checksums are preserved. Ingestion and tests are format-aware.
Status
Confirmed limitation
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
Offisielt SAF-T-register, revisjon 021ede90bce361e285229da15aa2ba93831a3f0d

Public pages and the repository describe different testing access

CONFLICT-TEST-SUBMISSION-001

The public page says test submission is unavailable, while the repository says a replacement is ready for invited testing.

Disposition
Public test submission is described as unavailable; the repository note is treated as limited, invitation-only testing.
Status
Open
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
Skatteetaten: Testinnsending; Offisielt SAF-T-register: New submission solution

SourceDocuments has conflicting status

CONFLICT-SOURCEDOCUMENTS-001

The documentation describes SourceDocuments as future content, the XSD permits the structures but marks the section Not in use, and the repository says the complete format becomes available on 1 January 2027.

Disposition
SourceDocuments is not part of 1.40. The container is rejected by `file.element.not-in-use`; the function belongs to the planned 2.0 format.
Status
Resolved
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
Dokumentasjon v1.7; SAF-T Financial 1.40 XSD; Offisielt register: Including SourceDocuments 01.01.2027

Discovered: 2026-08-12 · Resolved: 2026-08-21

Previous handling: Through 1.40.10, an empty container was accepted while content emitted a conservative source-conflict warning.

Current handling: From 1.40.11, SourceDocuments is rejected in 1.40 by file.element.not-in-use.

Affected rulesets: <= 1.40.10 → conservative warning/acceptance; >= 1.40.11 → error

Resolution basis: Written clarification from the Norwegian Tax Administration on 21 August 2026; the correspondence is archived by Saftlint.

XSD identity constraints are not enforced reliably

CONFLICT-XSD-IDENTITY-001

The XSD declares keys and references, but the documentation says uniqueness is not validated during transfer, and the selectors do not work with the target namespace in tested standard validators.

Disposition
Saftlint implements reviewed relationships explicitly and does not claim that the XSD covers the remainder.
Status
Confirmed limitation
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
SAF-T Financial 1.40 XSD; Teknisk beskrivelse s. 7

The official example breaks the Owner account reference

CONFLICT-OWNER-ACCOUNT-001

The XSD declares that Owner/AccountID references GeneralLedgerAccounts, but the official example uses accounts 2250 and 1370 without exporting them as ledger accounts.

Disposition
The reference is enforced by `master.owner.account.exists`; the official example is wrong on this point.
Status
Resolved
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
SAF-T Financial 1.40 XSD; Offisielt 1.40-eksempel

Discovered: 2026-08-12 · Resolved: 2026-08-21

Previous handling: Through 1.40.10, the Owner/AccountID reference was not enforced.

Current handling: From 1.40.11, Owner/AccountID must resolve to GeneralLedgerAccounts.

Affected rulesets: <= 1.40.10 → not enforced; >= 1.40.11 → master.owner.account.exists

Resolution basis: Written clarification from the Norwegian Tax Administration on 21 August 2026; the correspondence is archived by Saftlint.

The currency equation is contradicted by the official example

CONFLICT-CURRENCY-EQUATION-001

The technical description states CurrencyAmount × ExchangeRate = Amount. The official example contains values that do not satisfy the equation.

Disposition
Saftlint does not enforce the equation until rounding and the example are clarified.
Status
Open
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
Teknisk beskrivelse s. 39; Offisielt 1.40-eksempel

The documentation shows the wrong element name for NOK amounts

CONFLICT-NOK-ELEMENT-001

The technical description shows Amount under DebitNOKTaxAmount, while the XSD and official example require NOKAmount.

Disposition
The XSD controls structural validation.
Status
Resolved
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
Teknisk beskrivelse s. 49; SAF-T Financial 1.40 XSD

Discovered: 2026-08-12 · Resolved: 2026-08-12

Previous handling: No separate semantic rule; the structure was validated by the XSD.

Current handling: Unchanged: the XSD requires NOKAmount.

Affected rulesets: all supported 1.40 rulesets → XSD

Resolution basis: Resolved through the documented source hierarchy: the versioned XSD controls structure.

The FAQ disagrees with the 1.40 XSD about address fields

CONFLICT-ADDRESS-CARDINALITY-001

The FAQ says City and PostalCode are mandatory, while the 1.40 XSD and change history make both optional.

Disposition
The versioned 1.40 XSD controls validation.
Status
Resolved
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
Skatteetaten: Spørsmål og svar; Dokumentasjon v1.7; SAF-T Financial 1.40 XSD

Discovered: 2026-08-12 · Resolved: 2026-08-21

Previous handling: The optional cardinality in the 1.40 XSD was followed conservatively.

Current handling: Unchanged: City and PostalCode are optional in 1.40.

Affected rulesets: all supported 1.40 rulesets → optional

Resolution basis: Written clarification from the Norwegian Tax Administration on 21 August 2026; the correspondence is archived by Saftlint.

The Owner/AccountID change text mixes minimum and maximum cardinality

CONFLICT-OWNER-CARDINALITY-001

The documentation says AccountID changed from 1 to unbounded while also stating 0..U. The XSD uses 0..U.

Disposition
The text is interpreted as changing the maximum from one to unbounded; the minimum remains zero.
Status
Resolved
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
Dokumentasjon v1.7; Offisielt register: About SAF-T Financial schema v1.40; SAF-T Financial 1.40 XSD

Discovered: 2026-08-12 · Resolved: 2026-08-12

Previous handling: The XSD cardinality 0..U was followed.

Current handling: Unchanged: the minimum is zero and the maximum is unbounded.

Affected rulesets: all supported 1.40 rulesets → 0..U

Resolution basis: Resolved through the documented source hierarchy and agreement between the XSD and repository note.

The mandatory 2027 format lacks a 2027 grouping list

CONFLICT-GROUPING-YEARS-001

SAF-T 1.40 becomes the only valid format from 2027, but the official repository only contains grouping lists for 2025–2026.

Disposition
The published lists apply to SAF-T Financial 1.40 regardless of accounting year. Saftlint uses the current list for every 1.40 file.
Status
Resolved
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
Skatteetaten: SAF-T-dokumentasjon; Offisielt SAF-T-register

Discovered: 2026-08-12 · Resolved: 2026-08-21

Previous handling: Through 1.40.10, mappings were judged only for 2025–2026; other years emitted a warning.

Current handling: From 1.40.11, the pinned published list snapshot is used for every 1.40 file.

Affected rulesets: <= 1.40.10 → year-limited; >= 1.40.11 → pinned list for all 1.40 files

Resolution basis: Written clarification from the Norwegian Tax Administration on 21 August 2026; the correspondence is archived by Saftlint.

The technical description and XSD disagree about negative amounts

CONFLICT-SIGNED-AMOUNTS-001

The technical description says signs must be avoided because the debit or credit element expresses direction. The DebitCreditIndicator XSD annotation nevertheless says that a return can produce a negative amount.

Disposition
Signs are rejected by `file.numeric.unsigned`; debit and credit elements express the direction.
Status
Resolved
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
Teknisk beskrivelse s. 8; SAF-T Financial 1.40 XSD: DebitCreditIndicator

Discovered: 2026-08-12 · Resolved: 2026-08-21

Previous handling: Through 1.40.10, an explicit sign emitted a warning.

Current handling: From 1.40.11, signs are rejected; debit and credit elements express direction.

Affected rulesets: <= 1.40.10 → warning; >= 1.40.11 → error

Resolution basis: Written clarification from the Norwegian Tax Administration on 21 August 2026; the correspondence is archived by Saftlint.

The stated applicability period for standard VAT codes ends in 2021

CONFLICT-VAT-CODE-PERIOD-001

Guide v1.14 describes the standard VAT/tax codes for 2012–2021, while the same XML code list is used in the SAF-T Financial 1.40 material published in 2026 without updated effective dates.

Disposition
The published XML list contains the valid standard codes for 1.40 and is used for mapping checks. The list is updated when codes change.
Status
Resolved
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
Standard VAT/Tax Codes v1.14; SAF-T Financial 1.40-kodeliste

Discovered: 2026-08-12 · Resolved: 2026-08-21

Previous handling: The published XML list was used as a pinned 1.40 snapshot under a conservative source review.

Current handling: Unchanged: the pinned list is used; changes require a new ruleset.

Affected rulesets: all supported 1.40 rulesets → pinned Standard Tax Codes snapshot

Resolution basis: Written clarification from the Norwegian Tax Administration on 21 August 2026; the correspondence is archived by Saftlint.

Municipal KOSTRA CSV and XML disagree about codes 452–454

CONFLICT-KOSTRA-452-454

The CSV publishes KA_K/452, KA_K/453 and KA_K/454. The XML labels 452 and 453 as KA_KS and omits 454.

Disposition
KA_K/452, KA_K/453 and KA_K/454 are the correct combinations. The KA_KS values in the XML code list are treated as errors.
Status
Resolved
Validation output
Recorded in the catalogue; not emitted for every file.
Sources
KOSTRA_Arts_kommuner.csv; KA_K_Grouping_Category_Code.xml

Discovered: 2026-08-12 · Resolved: 2026-08-21

Previous handling: Through 1.40.10, a conservative union was accepted and KA_K/452–454 emitted a conflict warning.

Current handling: From 1.40.11, KA_K/452–454 are accepted; erroneous KA_KS/452–453 are rejected.

Affected rulesets: <= 1.40.10 → conservative union/warning; >= 1.40.11 → corrected KA_K mapping

Resolution basis: Written clarification from the Norwegian Tax Administration on 21 August 2026; the correspondence is archived by Saftlint.