Request Access We respond within 2 business hours
Magi
Loading...
Intro
Account
Company
Edit Company
Upload
Mapping
Validate
Export
Preview
Legal

How Magi Works

From your existing accounting software to a fully compliant SAF-T XML file - six steps, automated.

1
Register
2
Company
3
Upload
4
Map Codes
5
Validate
6
Export
Introduction

What is SAF-T and why does it matter?

Step 1

File Portal - send your reports to Magi directly

1.1

Two ways to start

There are two doors into Magi, and they exist for different moments. Neither is "wrong" - pick whichever matches where you are right now.

File Portal - start today
  • Only company name, EIK, and reporting period
  • Upload files and ask questions right away
  • A person reviews your files and replies

Does not generate a SAF-T XML file by itself - it is a fast, low-friction on-ramp.

Register a Company - the real thing
  • Full legal, tax and bank details for the XML header
  • Your own code mapping, saved and reused every period
  • Generates a real, submittable SAF-T XML file

Takes longer to fill in, but this is what you submit to the NRA.

They are not in competition - they are connected. If you start in the File Portal using the same EIK you later register a real company with, Magi links your old session to the new company automatically. Nothing you already sent or discussed is lost.

Already have a registered company? - You do not need the Portal at all - go straight to Upload Reports and Map Codes from My Companies. The Portal is only for the moment before that company exists in Magi.
1.2

Starting a session

Click New session and you will see a short, four-field form - nothing more:

  • Company name - so you and Magi both know which company this is
  • EIK / Bulstat - the company's registration number
  • Reporting period - the start and end date the files cover
  • Accounting or warehouse software - e.g. ALMA, Microinvest, or anything else you use

Submit the form and your session is created instantly - no waiting, no approval step. You land straight in your new workspace, ready to upload.

Use the exact EIK of the real company. If you register that company properly later, this session attaches to it automatically.
1.3

The workspace - guide, upload and notes

Every session opens on the same workspace. At the top is a short guide - a list of the report types Magi may need (chart of accounts, sales and purchase journals, customer and supplier lists, stock movements, and more), each one explaining in plain language where to find it in your own software and which columns matter most, with a few example rows so you know what "right" looks like.

Below the guide is the upload area. Drag a file in, or click to browse - .xlsx, .xls and .csv are all accepted. For every file you upload, you choose which report type it is from a dropdown (or mark it as "other" and describe it yourself), and you can add a short note explaining anything unusual about that file. Uploaded files appear in a list where you can change the report type later or remove a file entirely.

  • Drag and drop, or click to choose a file
  • Pick the report type from a simple list, or describe it yourself
  • Add a note to any file - context that only you would know
  • Change the report type or delete a file at any time
Download the full guide as Excel - The same report-type guide - what each report is, where to find it, and example columns - is also available as a downloadable file, in two places: right here, and at the top of any File Portal session (the "Download guide" button next to your company name).
Download the report guide (.xlsx)
Not sure what a report is called? - Pick 'Other' and describe it in your own words. Magi will ask a follow-up question in the notes if anything needs clarifying - you are never blocked by not knowing the exact NRA term for a report.
1.4

Talking with Magi

Every session has its own notes area - a simple, written back-and-forth about your data. Ask a question, explain something about a file, or flag anything unusual. It is not a live chat window; think of it as a shared notebook attached to your company's reports.

  • The moment you upload a file or write a note, Magi is notified by email
  • The moment Magi replies, you are notified by email too
  • Notes can be general, or attached to one specific file
Why not just email or Viber? - Accounting reports contain personal data about your employees and business partners. Sending them by ordinary email or messenger does not meet GDPR requirements. The Portal keeps everything in one auditable, protected place instead.
1.5

Getting your finished files back

Once your files have been reviewed, a real person hands a finished file back to you inside the same session - it appears at the top of your workspace as a "Ready file", with a note explaining what it is, and you download it with one click. This first exchange is deliberately hands-on: it is how Magi gets to know your data before anything is automated for you.

The Portal is the on-ramp, not the destination. Once you and Magi have been through this first round together, the natural next step is registering the company properly - from that point on, you upload your own reports, map your own codes, and generate SAF-T files yourself, any time you need to, with no waiting on anyone.

1. You upload your reports and write notes
2. Magi reviews the files and replies to your notes
3. Magi delivers your first finished file back to you
4. You register your company and generate SAF-T files yourself ✓
1.6

Your data is protected

The File Portal was built specifically so that sensitive company data never has to travel by email or messenger. Every file moves over an encrypted connection, and only Magi can open what you send.

  • Encrypted connection for every upload and download
  • Only Magi has access to your files and notes
  • Protected under GDPR - your data is never sold or shared for marketing
  • Magi does not share your data with third parties for any purpose
Legal Agreements
Files uploaded to the portal are treated as personal data under our Privacy Policy (Β§2.4) and Data Processing Agreement (DPA).

You can read all documents in detail in Step 11: Legal Documents.
Step 2

Register your account

2.1

Create Your Account

Navigate to the homepage and click Register. You will be asked for a username, email address, and password. Your account will be reviewed and activated by our team.

  • Choose a unique username - this appears in your profile URL and in team invitation notifications.
  • Use a real email address - it is required for receiving team invitations and system notifications.
  • Password must be at least 8 characters. Avoid using common words.
  • After submitting the form you are logged in automatically and land on My Companies.
Closed beta - Access is currently by approval. We onboard each customer directly and walk through the setup together - you will have a valid SAF-T file by the end of your first session. Get in touch to schedule a demo.
Legal Agreements
By creating an account, you agree to our Terms of Service, Privacy Policy, DPA, Cookie Policy, and SLA.

You can read all documents in detail in Step 11: Legal Documents.
2.2

Invite Your Team

SAF-T generation is collaborative. Multiple accountants can work on the same company's data simultaneously - the person who creates a company becomes its primary owner, but they can invite colleagues with different permission levels.

Roles and what each can do:

  • Primary Owner - full control, can delete the company, transfer ownership.
  • Co-Owner - same as owner except cannot delete the company.
  • Admin - can manage team members and all data, cannot delete.
  • Editor - can upload files, map codes, and edit the SAF-T data.
  • Viewer - read-only access. Can see all data but cannot make changes.

To invite someone, open the company's Team Management page (accessible from My Companies β†’ the team icon). Enter their username or email, select a role, and send. They receive a notification and can accept or decline.

Real-time presence - The navbar shows a live count of team members currently online. On the Map Codes page you can see exactly who is editing which code to avoid conflicts.
Step 3

My Companies - the home base

3.1

What you see on the My Companies page

The page adapts to the number of companies in your workspace. Two distinct states exist.

Empty state - no companies yet

You see a large centred prompt with a building icon, a short description of what Magi does, and a prominent Register Your First Company button. There are no stats, no list, no search bar - because there is nothing to show yet.

Populated state - one or more companies registered

The full dashboard appears. From top to bottom you see:

  • Welcome header - Your first name and a short subtitle. The New Company button sits here on the right.
  • Stats row - Three cards: Total Companies, Active companies, and SAF-T Reports generated across all firms.
  • Toolbar - A search box and a Filter button for navigating large lists.
  • Company list - One horizontal row per company. Each row is a complete status and action panel for that firm.
3.2

Firm rows - reading the status at a glance

Each company is displayed as a horizontal strip. From left to right the strip contains: a coloured bar, a building icon, company name and identifiers, a team section, a status badge, and action buttons. The bar colour and the status badge tell you everything about where this company is in the workflow.

Company identifiers shown on the strip:

  • Registration number - Always shown. This is the Bulgarian EIK or the foreign equivalent.
  • EIK - Shown if the company has a separate EIK registered.
  • VAT number - Shown if the company is VAT registered.
  • Registration date - When the company was added to Magi.

Status badges and what each means:

Badge Meaning
Active Company is registered but no SAF-T generation has started. Ready to begin.
Uploading (X%) Files are being uploaded and configured. The percentage shows how complete the upload step is.
Mapping (X%) Code mapping is in progress. The percentage is the fraction of internal codes already mapped to SAF-T codes.
Ready All codes are mapped. The system is ready to generate the SAF-T XML. No action has been taken yet.
Editing (X%) The SAF-T file was generated and is open in the editor. The percentage reflects validation progress.
Validating (X%) The file is being validated against the BG SAF-T v1.0.2 schema. Usually a transient state.
Generated A valid SAF-T XML file has been produced and is ready to download and submit to the NRA.
The amber (yellow-orange) statuses all show a pulsing animated dot to signal that work is in progress. The strip's left bar also changes colour: green for active/ready/generated, amber for in-progress states.
3.3

Actions and buttons - what every control does

Each firm strip contains up to five controls on the right side, plus one global action at the top of the page. Here is every button explained.

New Company button (top-right of page)

Always visible in the welcome header. Clicking it takes you to the Company Registration wizard (Step 3 of this guide). Use it every time you need to add a new company to your workspace.

This button is visible in both the empty state and the populated state.
Search box (toolbar)

Filters the list in real time as you type. Searches both the company name and the registration number simultaneously. Clearing the field restores all rows instantly.

Reports badge (count badge)

A small badge on each firm strip that shows how many SAF-T reports have been generated for this company. It is informational only - clicking it does nothing.

Reports button (blue)

Takes you to the Reports archive for this company, where you can download, preview, or delete past SAF-T XML files. This button is always present regardless of status.

Context action button - adapts to the current status

This is the most important button on each strip. It changes its label, colour, and destination depending on exactly where the company is in the workflow. It always takes you to the most logical next step.

Status Button label Where it goes
Active (none) Generate Upload Reports page - to start the process
Uploading Continue Upload Reports page - resume where you left off
Mapping Map Map Codes page - continue mapping
Ready Generate Generate SAF-T - trigger the XML generation
Editing / Validating Resume SAF-T Editor - continue fixing validation errors
Generated Download Reports page - download the final XML file
Edit button

Click this button to edit the company's registration details. This opens the Edit Company page where you can update addresses, contacts, tax information, bank accounts, and ownership structure.

Learn more about Edit Company

3.4

Team section - seeing who is working on each company

Each firm strip shows a compact team section between the company details and the status badge. This is where you can see at a glance who has access to a company and whether they are online right now.

  • Avatar circles - Each circle shows a team member’s avatar (or initial if no image is available). Up to four are displayed. The circle colour reflects the member's role. On hover the circles display the member's role.
  • Green dot - A small green indicator on an avatar means that person is currently online and active in the system.
  • '+N' overflow - If a company has more than four members, a grey '+N' badge appears to indicate how many additional members exist.
  • Team button - Opens the full Team Management page for this company. Only visible to users with Admin role or above (admin, co-owner, primary owner).
Hovering over any avatar circle shows a tooltip with the full name, role, and online status of that team member.
Role colours on avatars: Primary Owners and Co-owners have a distinctive orange colour to distinguish them from editors and viewers at a glance.
3.5

Deleting a company - permanent and irreversible

The delete button appears as a red icon on the right end of each firm strip. It is only accessible to the Primary Owner of that company. All other roles - co-owner, admin, editor, viewer - see a grey locked icon instead and cannot delete.

Your role Delete button behaviour
Primary Owner Active red trash icon - clicking opens the confirmation dialog.
All other roles Grey locked icon - disabled. Hovering shows a tooltip: 'Only Primary Owners can delete companies.'

Clicking the red trash icon opens a large confirmation dialog. The dialog prominently displays the company name in red and lists every category of data that will be permanently deleted:

Physical Files
  • All generated SAF-T XML reports
  • Uploaded Excel / CSV files
  • All media attachments
Company Information
  • Addresses and contacts
  • Tax registrations
  • Bank accounts and ownership
Mapping Data
  • All code mappings
  • Extracted codes from files
  • AI-generated suggestions
Team & Activity
  • All user access grants
  • Activity logs and notifications
  • Session and cache data
This action cannot be undone. Once you click 'Yes, Delete Everything' all 14 database record types plus all physical files and cache entries are removed instantly. There is no recycle bin and no recovery path.
The dialog prevents accidental double-submission - the confirm button disables itself as soon as you click it and shows a spinner.
Step 4

Register your company

Step 3 of 7
4.1

EIK & Basic Info

The first wizard step collects the core identity of your company. The EIK (Π•Π΄ΠΈΠ½Π΅Π½ Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π΅Π½ Код) is the Bulgarian unified company identifier - a 9-digit or 13-digit number assigned by the Trade Register. It appears in the SAF-T file as RegistrationNumber.

  • EIK: 9 digits for companies, 13 digits for branches. Optionally prefixed with 'BG'. Validated on entry.
  • Company name: full legal name as registered. Cyrillic characters are fully supported.
  • Tax accounting basis: choose one of Accrual, Budget, Bank, Insurance. Used to display how transactions are reported in SAF-T
  • Tax Entity: The tax entity to which the company belongs. Company/Division/Branch reference.
EIK is permanent - Once a company is saved, the EIK cannot be changed. If you entered it incorrectly, delete the company and register again.
4.2

Registered & Trading Addresses

SAF-T requires two address types: the registered address (where the company is legally domiciled according to the Trade Register) and the trading address (where business is actually conducted). They may be the same.

  • Street name and number, city, postal code, region.
  • Country: ISO 3166-1 alpha-2 code (e.g. BG for Bulgaria). Defaults to BG.
  • If trading address is the same as registered, check 'Same as registered' to copy it automatically.
4.3

Contact Persons

The NRA requires contact information for the person responsible for preparing the SAF-T file. This typically means the chief accountant or the person authorised to submit tax data. At least one contact is mandatory.

  • First name, last name, job title / role.
  • Phone number (including country code for international format).
  • Email address - appears in the SAF-T Header Contact block.
  • You can add multiple contacts for a fuller SAF-T report. At least one is mandatory.
4.4

VAT & Tax Registrations

The SAF-T header's TaxRegistration block records your company's tax identifiers. For most Bulgarian companies this is the VAT number - identical to the EIK but prefixed with BG if the company is registered under the Bulgarian VAT Act (ZDDS).

  • VAT number: BG + 9 or 13 digits. Validated against the EIK checksum rules.
  • VAT registration date: when the company became VAT-registered. (optional field)
  • Non-VAT-registered companies: leave the VAT number blank. The system will mark the file accordingly.
Multiple tax registrations are supported if your company has special regime registrations in addition to standard VAT.
4.5

Bank Accounts

Bank accounts entered here appear in the SAF-T file's payment records for the firm sending out the report. At least one bank account is required - you must provide either an IBAN or an Account Number together with full Payment Operator details before you can proceed. Once you begin filling a bank account row, its fields activate conditional validation based on which method you choose.

Two identification methods - you choose one

BG SAF-T v1.0.2 supports two ways to identify a bank account. You must use exactly one - they are mutually exclusive:

  • IBAN - International Bank Account Number. Starts with 2 uppercase country letters + 2 check digits + up to 30 alphanumeric characters. Bulgarian IBANs follow the pattern BG80BNBG96611020345678 (22 characters total). When IBAN is provided, all Payment Operator fields are ignored.
  • Account Number + Payment Operator (SortCode) - Used when no IBAN is available. The Account Number identifies the account; the SortCode structure identifies the bank or payment operator holding it. There are 3 mandatory requirements: Operator Registration Number, at least one name (Cyrillic or Latin - the XSD allows only one), and Operator Country.

The SortCode structure (BG SAF-T v1.0.2)

In the updated NRA specification, Sort Code is no longer a single code field. It is now a structured block describing the payment operator. When you choose the Account Number path, you must fill all of the following:

  • Operator Registration Number - The unique identifier of the bank or payment operator - EIK for Bulgarian institutions, or equivalent foreign identifier. Max 35 characters. Mandatory.
  • Operator Name (Cyrillic) - Full name of the payment operator in Cyrillic script. Required if Latin name is not provided. Max 70 characters.
  • Operator Name (Latin) - Full name of the payment operator in Latin script. Required if Cyrillic name is not provided. You need at least one of the two name fields. Max 70 characters.
  • Operator Country - Two-letter ISO 3166-1 alpha-2 country code of the country where the payment operator is established (e.g. BG, DE, FR). Mandatory.

How field badges change as you type

The Required / Optional badges update live as you fill the form, reflecting which method you have chosen:

State 1 - Nothing entered yet
IBAN IBAN or - no commitment yet
Acct Nr Number + Code - no commitment yet
Payment Operator section hidden - appears only after Account Number is typed
State 2 - IBAN has a value
IBAN Required - you committed to IBAN; it must be valid
Acct Nr Optional - not needed; leave empty
Payment Operator section hidden - IBAN makes the entire SortCode section disappear
State 3 - Account Number has a value
IBAN Optional - not needed; leave empty
Acct Nr Required - you committed to this method
Operator Reg. Nr Required - mandatory part of SortCode structure
Name (Cyrillic) Required - required unless Latin name is filled
Name (Latin) or Latin - fills requirement if Cyrillic name is missing
Country Required - mandatory part of SortCode structure

Validation rules

Beyond the badge changes, the system enforces strict cross-field rules. Any violation produces an immediate error on the affected field:

Rule 1 - IBAN and Account Number path are mutually exclusive You cannot enter an IBAN and also an Account Number or any SortCode field for the same account. Choose one method only. Error: “Select either IBAN or Account Number + Payment Operator details, not both.”
Rule 2 - Account Number requires a complete SortCode structure If you enter an Account Number you must also complete all three mandatory SortCode sub-fields: Operator Registration Number, at least one name (Cyrillic or Latin), and Operator Country. A partial SortCode is not accepted.
Rule 3 - SortCode Name: at least one script required You must provide the payment operator's name in at least one script - Cyrillic or Latin. Providing both is allowed and encouraged for international operators. Error if neither name field is filled when Account Number is present.
Rule 4 - IBAN format Must start with exactly 2 uppercase letters (country code), followed by 2 digits (check digits), then up to 30 alphanumeric characters. Maximum 35 characters total. Lowercase letters are rejected. Example of a valid Bulgarian IBAN: BG80BNBG96611020345678
Rule 5 - Account Number format Accepts only uppercase letters (A–Z) and digits (0–9). No spaces, hyphens, or lowercase. Maximum 35 characters.
Rule 6 - Operator Country format Must be exactly 2 uppercase letters matching an ISO 3166-1 alpha-2 country code (e.g. BG, DE, FR, GB). Will be auto-uppercased on save.

Account Name and Mandatory Only mode

Each account also has an Account Name field (the name of the account holder). This field is always optional - it never becomes Required. When you switch to Mandatory Only mode, Account Name is automatically hidden since it is not an NRA requirement. Switch to All Fields mode to see and fill it. The Payment Operator (SortCode) section is controlled entirely by whether Account Number has a value - it appears when you type an Account Number and disappears otherwise, regardless of the Mandatory Only toggle.

Multiple accounts

You can add as many bank accounts as needed. Click Add Record to create a new row. Each account validates independently - an error in one account does not affect others. The Next button is disabled only if any account row contains a validation error.

If your bank uses IBAN (which virtually all Bulgarian banks do), use that method. It is simpler, better standardised, and requires no SortCode sub-fields.
For the Account Number path, the Operator Registration Number is the EIK of the bank (e.g. UniCredit Bulbank AD has EIK 831919536). You can look it up in the Commercial Register.
If you need to clear a partially filled bank row and return to the neutral state, erase both IBAN and Account Number. The Payment Operator section will hide automatically and both fields will return to their conditional badges.
4.6

Ownership Structure

This is the most complex step in the wizard. It captures the ownership and group structure of the company as required by the SAF-T XSD schema. The form adapts heavily based on two key selections: whether the company is part of a corporate group, and whether the owners are Bulgarian or foreign. Understanding the conditional logic here will save you from confusion.

What is the '00' value? - The NRA's SAF-T XML schema requires all ownership fields to be present in the file, even when they are not applicable to your company. For fields that do not apply, the system automatically fills them with '00' - the NRA's convention for "not applicable". You will never need to type '00' yourself. If the system asks you to fill a field, it needs real data. If you try to type '00' into a required field, validation will reject it.

Level 1 - Is your company part of a group?

The first dropdown - Is Part of Group - is the master switch for the entire ownership section. It has five options and determines whether the Ultimate Owner (parent company) section appears at all.

Options 1, 2, 5 - No parent company
  • 1 - Independent company (not part of any group)
  • 2 - Parent / holding company (you are the group headquarters)
  • 5 - Branch or sole proprietor (no group structure)

Effect: The Ultimate Owner section is hidden entirely. All Ultimate Owner fields are automatically filled with '00'. You only need to complete the Beneficial Owner section below.

Options 3, 4 - Has a parent company (subsidiary)
  • 3 - Subsidiary whose parent company is a Bulgarian company (registered in Bulgaria)
  • 4 - Subsidiary whose parent company is a foreign / international company

Effect: The Ultimate Owner section appears and becomes required. You must describe the parent company. The Ultimate Owner Type dropdown also becomes required.

Level 2a - Beneficial Owner (always present)

The Beneficial Owner section is always visible regardless of group membership. It describes the natural person who ultimately owns or controls the company. The Beneficial Owner Type dropdown controls which fields appear:

Beneficial Owner Type = Bulgarian person

Visible and required:

  • Name (Cyrillic) - Full name in Bulgarian. Must use Cyrillic characters, digits, spaces, dots or hyphens only. Max 70 characters.
  • EGN - Bulgarian personal identification number. Must be exactly 10 digits.

Foreign name, citizenship and country fields are auto-filled with '00' and hidden.

Beneficial Owner Type = Foreign person

Visible and required:

  • Name (Latin) - Full name in Latin characters. Must use Latin letters, digits, spaces, dots or hyphens. Max 70 characters.
  • Country of citizenship - ISO 3166-1 alpha-2 country code (e.g. DE for Germany, FR for France). Validated against the official country list.
  • Country of residence - ISO 3166-1 alpha-2 code for the country where the owner resides. Can differ from citizenship.

Bulgarian name and EGN fields are auto-filled with '00' and hidden.

Beneficial Owner Type = not selected
Both the Bulgarian and Foreign sections are hidden. All beneficial owner fields are set to '00'. The form waits for you to make a selection before showing any fields.

Level 2b - Ultimate Owner (only for group options 3 and 4)

If you selected group option 3 or 4, the Ultimate Owner section appears. It describes the parent company. The Ultimate Owner Type dropdown works the same way as Beneficial Owner Type - it shows the fields relevant to the type of company and hides the rest:

Ultimate Owner Type = Bulgarian company

Visible and required:

  • Parent company name (Cyrillic) - Full legal name in Bulgarian Cyrillic. Max 70 characters.
  • EIK of parent company - 9 or 13 digits, optionally prefixed with 'BG'. Validated against the standard EIK format.

Foreign company fields are auto-filled with '00' and hidden.

Ultimate Owner Type = Foreign company

Visible and required:

  • Parent company name (Cyrillic) - The company's name transliterated or translated into Cyrillic. Max 70 characters.
  • Parent company name (Latin) - The company's official name in Latin characters. Must use Latin letters, digits, spaces, dots or hyphens. Max 70 characters.
  • Country of registration - ISO 3166-1 alpha-2 country code where the parent company is legally registered.

Bulgarian company name and EIK are auto-filled with '00' and hidden.

Pair validation for foreign parent company names - When the parent company is foreign, both the Cyrillic name and the Latin name are mandatory together. If you fill one and leave the other empty, both fields immediately show an error: "Both Cyrillic and Latin names are required for foreign parent company." You cannot save until both are filled.

Summary: what you never enter yourself

The following are always automatic - the system handles them based on your dropdown selections:

  • All Ultimate Owner fields when group option is 1, 2, or 5 - set to '00', section hidden.
  • Beneficial Owner foreign fields when type is Bulgarian - set to '00', section hidden.
  • Beneficial Owner Bulgarian fields when type is Foreign - set to '00', section hidden.
  • Ultimate Owner foreign fields when type is Bulgarian company - set to '00', section hidden.
  • Ultimate Owner Bulgarian fields when type is Foreign company - set to '00', section hidden.
Never type '00' into a field yourself - If a field is visible and asking for data, it needs real information. If you enter '00' into a required field, validation will reject it with an error. The system sets '00' automatically only for fields that are genuinely not applicable.
Start by selecting Is Part of Group. This is the single most important field - it immediately shows or hides the entire Ultimate Owner section and unlocks the correct fields for your situation.
If you change a type dropdown after filling fields, the previously visible fields are cleared and the new fields appear empty. Make your type selections first, then fill the details.
Step 5

Edit Company Data

Step 4 of 9
5.1

Page Behavior & Key Features

This page behaves like the registration wizard but for editing. Fields validate as you type, hit Save Changes to apply all updates. The header displays your user role and when changes were last made.

  • Form validation matches registration exactly
  • EIK field is read-only after registration
  • Mappings button leads to code mapping management
  • Changes affect only future SAF-T generations
5.2

Basic Company Information

Edit core company details like name and tax accounting basis. Same rules as registration apply.

5.3

Addresses

Manage registered addresses. Add or edit multiple addresses as needed.

5.4

Contacts

Update contact persons and their details.

5.5

Tax Information

Edit VAT numbers and tax-related data.

5.6

Bank Accounts

Manage bank account details for the company.

5.7

Ownership

Update ownership and shareholder information.

5.8

Manage Code Mappings

At the bottom of the Edit Company page, you'll find a dedicated section for managing your code mappings. This section appears only after you've uploaded reports and extracted codes.

  • Shows mapping progress by section (Accounts, Taxes, Products, UOMs, Document Types)
  • Displays overall completion percentage with a progress bar
  • 'Manage Mappings' button links directly to the Map Codes page
  • If no mappings exist yet, shows an option to upload reports and start mapping
  • Mappings are preserved after SAF-T generation for future use
Seamless workflow - The 'Manage Mappings' button takes you to the Map Codes page with the same company context, so you can adjust/edit specific mappings.
Step 6

Upload your accounting reports

6.1

Page Layout

The Upload Reports page has five distinct zones. Understanding where each control lives saves you significant time. The layout does not change between sessions - learn it once.

Zone 1 - SAF-T Top Bar

A thin bar fixed at the top of the page. Shows the currently selected SAF-T type as a coloured badge (blue for Monthly, teal for Annual, indigo for On Demand) and a Change link. Clicking Change opens a confirmation window that warns you before resetting your type choice and file validations. The bar also shows the firm name and current workflow step.

Zone 2 - Status Banner (below top bar)

A full-width coloured banner that reflects the current generation status of the firm. It changes colour and message automatically as you progress: yellow during upload, green when processing is ready, blue when mapping is complete, etc. It disappears once the firm reaches the editing stage.

Zone 3 - Left Sidebar (always visible)

The sidebar is always visible and has five stacked areas. Numbers on the sidebar match the annotation cards.

ALMA Ltd
831234567
Step 1: Choose SAF-T Type
Monthly
Annual
On Demand
Setup Progress
2
Select Software
3
Choose Period
4
Upload Reports
5
Configure
6
Proceed
Uploaded Files
account_movements.xlsx
sales_journal.xlsx
purchase_journal.xlsx
export_unknown.xlsx
Quick Actions
1
2
3
4
5
1
Firm Info

Always shows the active company name and EIK. Informational only - no click action.

2
SAF-T Type Badges

Click to switch type. Changing with files already uploaded triggers a confirmation window. Monthly Annual On Demand

3
Setup Progress

Grey = pending, Blue = active, Green = complete. Click a completed card to jump to that step.

4
Uploaded Files

Live file list. Left-border colour: blue = ALMA, purple = Microinvest, pulsing amber = unconfigured (must set software before proceeding).

5
Quick Actions

Fixed footer - always reachable. Download report templates or open Export Help without scrolling.

Zone 4 - Main Content Area (centre)

The main scrollable area. It reveals content sequentially - each sub-step appears only after the previous one is confirmed. The four panels appear in order: Software Selection β†’ Required Reports Grid β†’ Date Picker β†’ Upload Zone + File Cards. Completed panels collapse to a summary header with a Change button.

Zone 5 - Command Center Dashboard (full-width, below main content)

A full-width panel that sits below the upload zone. It is always visible once the upload zone is unlocked. Contains four live stat cards, a progress bar, a blockers panel, and the Proceed button. This is your real-time progress monitor - it updates after every file action. See section 6.7 for full detail.

The page saves your selections persistently. If you close the browser and return, all uploaded files, software selections, date settings, and column mappings are exactly as you left them.
6.2

Select SAF-T Type

The SAF-T type is the first decision you make and the one that controls the most downstream behaviour. It determines which date rules apply, which report types are required, and what the final XML file structure looks like. You select it using the pill buttons in the left sidebar, or by clicking the Change link in the top bar at the top of the page.

Monthly(M)
Covers exactly one calendar month. Most common NRA submission. Date range: first day to last day of the month. Required for most registered companies.
Annual(A)
Covers a full fiscal year - always 1 January through 31 December. The date picker auto-fills both dates; you only choose the year. Adds the Depreciation Schedule report to the required list. +1 report
On Demand(D)
Covers any custom date range specifically requested by the NRA. Both start and end date are entered freely - no restrictions. Uses the same report set as Monthly.

What changes when you switch type

Required reportsEach type has a different required report list. Annual adds Depreciation Schedule. The software selection cards update their report-count badge immediately when you change type.
Date rulesMonthly restricts dates to one calendar month. Annual auto-fills 01/01–31/12. On Demand is free.
XML structureThe final SAF-T XML differs structurally between types. Switching after generation requires starting over.

SAF-T Type Change Confirmation Window

If you switch the type after uploading files, a window appears listing exactly which file configurations will be reset. It has two buttons: Cancel (keeps everything as-is) and Confirm Change (clears affected validations). The window will not appear if no files have been uploaded yet.

Not sure which to choose? Monthly is correct for the vast majority of Bulgarian companies. Use Annual only for year-end reporting and On Demand only if the NRA explicitly requested a specific period.
6.3

Select Your Accounting Software

After choosing the SAF-T type, the main content area shows a software selection panel with cards for each supported accounting system. Click a card to toggle it - a checkbox highlights and the card border turns blue. Select at least one before clicking Continue.

Software card anatomy

CheckboxTop-left corner. Turns blue with a checkmark when the card is selected.
Software IconLarge icon identifying the software - laptop for ALMA, store for Microinvest, puzzle-piece (purple) for Other Software.
Name & DescSoftware name and a short description of what it covers.
BadgeShows 'X reports' for ALMA and Microinvest (updates when SAF-T type changes). For Other Software it always shows a purple 'Template required' badge instead of a count - because you supply the template, not a native export.

Available software

  • ALMA - Full ERP system. 13 monthly report types + 1 annual-only (depreciation schedule). Covers GL, sales/purchase journals, customer/supplier data, inventory, and tax tables.
  • Microinvest - Delta Pro + Warehouse Pro. 10 monthly report types + 1 annual-only (depreciation schedule). Includes chronological register, stock movements, weighted average cost, and inventory list. Supports multi-sheet Excel auto-splitting.
  • Other Software - Any accounting system not listed above. Uses a pre-built Excel template (13 sheets for Monthly/On Demand, 14 for Annual). You fill the template with your data and upload the sheets - Magi runs the full generation process identical to ALMA. See section 6.11 for the full walkthrough.
  • Any combination - You can select multiple software sources simultaneously. For example: Microinvest for warehouse data + Other Software for the general ledger. Each uploaded file is independently assigned to one software in step 4.8.

Other Software - download banner

When you select the Other Software card, a purple download banner instantly appears below the card grid. It contains the Excel template download button and a brief instruction. Download and fill the template before clicking Continue to Reports - the upload grid won't show the template-based report cards until you confirm your selection.

The template download is also available from the How Magi Works guide page (section 6.11) and from the sidebar Quick Actions area at the bottom of the upload page. You can download it at any time - it is always the latest version.

Confirming your selection

Click Continue to Reports. Magi saves your selection and reveals the required reports grid (section 6.4) showing exactly which report types are expected. The sidebar Step 2 icon turns green and becomes clickable.

Changing your software selection is not a full reset. Clicking "Change Software" (or the green Step 2 sidebar icon) opens a confirmation window and temporarily puts every file card into a waiting state. Once you confirm your new selection, Magi checks each file against it: files whose previously assigned software is still included are automatically restored with their report type and column mappings intact. Only files assigned to a software you removed need to be reconfigured. If you keep the same software, nothing is lost.

File cards are locked until software is confirmed

Before you complete Step 6.3, every file card shows a disabled state - the Software and Report Type buttons are greyed out and cannot be clicked. The card status reads "Waiting for software selection…" with a spinner. This lock is intentional: Magi cannot present the correct options until it knows which accounting software you are using. Complete Step 6.3 first, then configure each file card.

File card in waiting-for-software state with disabled buttons
Software selection cards
4.3
6.4

Required Reports Grid

After confirming your software selection, the Required Reports Grid appears below it. This grid lists every report type you are expected to upload, grouped by software. Each report card has an enable/disable toggle. This is where you tell Magi which reports you have and which you do not.

Report card anatomy

Icon & NameDocument icon and the report type's display name (e.g. 'Sales Journal', 'Trial Balance').
DescriptionA short description of what data this report contains and why it is needed for SAF-T.
Export TipNavigation path inside your accounting software showing exactly where to find and export this report (e.g. 'Go to ALMA β€Ί VAT β€Ί Sales Journal Export').
Module BadgeFor Microinvest only - shows which module the report comes from: Delta Pro or Warehouse Pro.
Enable ToggleA toggle switch on the right. ON (blue) = report is required and you intend to upload it. OFF = report is excluded from processing. All reports start enabled.

Report importance tiers

CriticalCannot be disabled. These four report types are mandatory for any SAF-T file: Chart of Accounts, Trial Balance, Account Movements, and Customer/Supplier Reports. Their toggles are locked in the ON position. If validated files for these are missing when you click Proceed, the processing window shows the Invalid state.
EssentialCan be disabled, but triggers a warning. These are reports specific to each software that significantly affect SAF-T completeness. If any essential report is disabled, the processing window shows the Partial state with a yellow warning banner. For ALMA: Customer Settlements, Supplier Settlements, Tax Table, Document Types. For Microinvest: Customer/Supplier Reports, Customer Settlements, Supplier Settlements, Chronological Register, Purchase Journal, Sales Journal. For Other Software (Universal): Sales Journal, Purchase Journal, Sales Transactions, Purchase Transactions, Customer/Supplier Reports, Customer Settlements, Supplier Settlements, Tax Table.
StandardAll remaining report types. Can be freely disabled without affecting SAF-T validity. Disable only if your company genuinely does not produce this type of data.

What disabling a report does

  • The report card turns grey and its upload slot is removed from the required count in the Command Center.
  • Any file card already assigned to that report type turns grey with a 'Disabled' badge and is excluded from processing.
  • The Command Center's Disabled Reports counter increments.
  • Re-enabling restores the requirement and the file card returns to its previous state.

How to disable or re-enable a report card

Click directly on any coloured report card in the grid. A small window opens with three sections: a short description of the report, the export tip (the exact navigation path inside your accounting software to locate and export it), and two action buttons at the bottom - Disable Report and Close.

Clicking Disable Report immediately greyscales the card and removes its upload slot from the required count. The report is excluded from the final SAF-T and from the report type selection window on file cards.

To restore a disabled report, click the grey card - the window reopens with an Enable Report button in place of Disable. Clicking it restores the card to its original coloured state and returns its upload slot to the required count.

Upload everything first - disable only as a last resort. Every report you provide gives Magi more data to work with. The more complete your upload, the fuller and more accurate your final SAF-T file. Only disable a report type if your company genuinely does not produce that data - not simply because the export is inconvenient right now.
Review the export tip on each card before uploading - it tells you exactly where in your accounting software to find the export function.
If you use multiple software sources (e.g. ALMA and Microinvest, or ALMA and Other Software), the grid shows one group of cards per software. Only disable a report if you are certain your company does not generate that data - not just because you haven't exported it yet.

Filtering the grid by software

When you have confirmed your software selection, a Filter Reports bar appears at the top of the Required Reports Grid. It contains one filter button per software you selected - for example ALMA and Microinvest - plus an All button. Clicking a software button hides all report cards belonging to other software and updates the subtitle to show how many cards remain visible (e.g. "Showing 7 reports for ALMA"). Clicking All restores the full grid. The filter is purely visual - it does not enable or disable any reports.

Filter controls bar above the required reports grid

Change Software Selection button

Also inside the filter bar, separate from the software badges, is a Change Software Selection button. Clicking it opens a confirmation window before doing anything - because changing your software selection resets the current software and report filters and puts all file cards into a waiting state.

Change Software Selection button in the filter bar

The window has two actions: Change Software Selection (confirms and proceeds) and Cancel & Stay Here (closes the window with no changes). On confirm, Magi clears the current software selection and re-opens the Step 6.3 software selection form. File cards whose previously assigned software is still in your new selection are automatically restored; only cards assigned to software you remove need to be reconfigured.

Change Software Selection confirmation window

Live preview - report cards

Trial Balance
Sales Journal
Stock Movement
Depreciation
Sales Journal

Enabled Β· Uploaded Β· Disabled Β· Critical (locked) Β· Other Software (Universal)

6.5

Set the Reporting Period

After the reports grid is reviewed, the date picker section appears. You fill in the start date and end date for your reporting period. The rules differ by SAF-T type.

MonthlyBoth dates must fall within the same calendar month. Example: 01/03/2025 β†’ 31/03/2025. The system enforces this - if the end date falls in a different month, a red error appears immediately.
AnnualShows a year picker only. Automatically fills 01/01/YYYY β†’ 31/12/YYYY. The two date inputs are hidden and replaced by a single year selector.
On DemandAny start and end date. No restrictions - enter the exact dates from the NRA request letter.

Unlocked vs locked state

Unlocked: Two date input fields, both editable. A green Proceed to Upload button activates when both dates are valid. Locked: The date fields become read-only text, a padlock icon appears next to the period summary (e.g. "01.03.2025 – 31.03.2025"), and the upload zone below activates. Sidebar Step 3 turns green.

Clicking Change Period opens a confirmation window. On confirm, all uploaded file cards are shown in red and locked from configuration. You must reselect the new dates in order to continue configuring reports. The period in your accounting data must match exactly what you enter here, or Magi's date validations will fail.
6.6

Upload Your Files

With the period locked, the upload zone activates. Drag and drop your accounting export files onto it, or click anywhere on the zone to open a file picker. Multiple files can be uploaded at once. Accepted formats: .xlsx, .xls, .csv.

Upload zone states

DisabledGrey, low-opacity - the period has not been locked yet. Cannot accept files.
EnabledDashed border, white background. Reads 'Click or drag files to upload'. Ready to accept files.
Drag ActiveBlue pulsing border when a file is dragged over the zone. Release to upload.

File card anatomy

File NameOriginal filename at the top-left of the card.
State BadgeColoured left-border and background tint showing current status. Updates automatically as you configure the card.
Software Button Grey when not set; blue-tinted once confirmed. Click to open the software selector window.
Report Type Button Shows the assigned report once set. Turns orange and pulses when column headers don't match - click to open Column Mapping.
Preview Button Blue gradient. Validated cards only. Opens the Column Mapping window in read-only mode.
Delete Button Red border and icon. Removes the file and card permanently. Command Center recalculates immediately.

File card states

Pending Uploaded but not configured. Both Software and Report Type buttons show 'Not Set'. Counts as a blocker in the Command Center.
Mapping Required Software and type assigned but column headers don't match the expected structure. The report type button turns orange. Open Column Mapping to resolve.
Validated Fully configured and column-validated. Counts toward 'Reports Ready'. The blue Preview Mapping button is available.
Error Validation failed - file is unreadable, wrong format, or severely corrupted. Error message shown on card. Delete and re-export the file.
Disabled The assigned report type was disabled in the Required Reports Grid. Completely excluded from processing. Re-enable the report type to restore it.

Multi-sheet Excel files (Microinvest only)

Microinvest exports a single workbook with multiple sheets - one per module. When you upload such a file, Magi auto-splits it into individual file cards (one per sheet) and shows a toast: "File split into X reports". The two module groups are:

  • Delta Pro - Chronological Register, Sales Journal, Purchase Journal, Customer/Supplier Reports, Trial Balance, Chart of Accounts.
  • Warehouse Pro - Stock Movement, Weighted Average Cost, Stock Deliveries, Inventory List.

Other Software - individual files per sheet

Unlike Microinvest, Other Software (Universal) uses the Magi-provided Excel template where each sheet is its own report type. You upload each filled-in sheet as a separate file - one file per report. Alternatively, you can re-fill and upload individual sheets from the template workbook as separate .xlsx exports. Because the template enforces exact column names, these files auto-validate immediately without requiring any column mapping.

Upload all files first, configure them all after - faster than configuring one at a time.
Never manually rename columns or reformat dates before uploading. Standard default exports from ALMA and Microinvest, and files filled using the Other Software template, all auto-validate without any column mapping - column renaming will cause a mismatch and require manual mapping.

The File Management header

Above the file cards grid sits a dark blue File Management header bar. It keeps key information visible at a glance no matter how many files are loaded:

TitleReads "Uploaded Files" by default. Once you lock a reporting period it updates to "Uploaded files for [Firm Name] - [start date] to [end date]", pulling the firm name from your registration and the dates from Step 6.5.
File count pillGrey pill showing the total number of file cards on the page (e.g. '3 files'). Updates instantly when a file is added or removed.
Ready count pillGreen pill showing how many files are fully validated (e.g. '2 ready'). Updates whenever a file card completes column validation.
Γ— Delete All buttonTop-right of the header. Only appears when at least one file card exists. Clicking it opens the Delete All Files confirmation window. Hidden automatically after all files are removed.
File Management header bar

Delete All Files Window

The window shows the exact count of files about to be removed and a clear list of everything that will be deleted along with them:

  • All uploaded files and their file cards
  • All report type choices previously assigned to each file
  • All software choices previously assigned to each file
  • All upload progress for the current SAF-T session
This action cannot be undone. Use Delete All only when you need to start the upload phase from scratch - for example, if you realised you exported files for the wrong accounting period. Individual files can also be deleted one at a time using the Γ— button on each file card.
Delete all files confirmation window

Live preview - file card states

sales_journal_03_2025.xlsx
ALMA Sales Journal
purchase_report.csv
ALMA Map Columns
trial_balance.xlsx
Software Report Type
corrupted_file.xls
Cannot read file
depreciation_2025.xlsx
ALMA Report disabled
6.7

Configuration Command Center

The Configuration Command Center sits at the bottom of the page, always visible once the upload zone is active. It recalculates automatically after every file action. This is your single source of truth for upload progress.

The four stat cards

  • Files Uploaded - Total count of all file cards. Clicking this card scrolls the page up to the file list.
  • Reports Ready - Shown as X / Y. X = unique validated report type+software combinations. Y = total enabled required reports. Goal: X equals Y.
  • Missing Configuration - Count of enabled required reports that have no validated file assigned. Must reach 0 before the Proceed button enables. Clicking this card scrolls to the reports grid.
  • Disabled Reports - Count of report types you intentionally turned off. Clicking this card scrolls to the reports grid.

Progress bar

A horizontal bar below the stat cards fills as your validated/enabled ratio improves. It reaches 100% (and turns green) when all enabled required reports have validated files. The percentage also appears as a number inside the bar.

Expandable blockers panel

Below the progress bar is a collapsible panel listing every specific issue. Three blocker types appear:

SAF-T Type'No SAF-T type selected' - go to the sidebar badges and select Monthly / Annual / On Demand.
Software'No software selected' - confirm your software before uploading files.
ValidationPer-file issues: 'X files need software selection', 'X files need report type selection', 'X files have column mapping issues', 'X files are assigned to disabled report types'.

Action message and Proceed button

No files yet'Upload your reports to begin'. Proceed button grey.
Issues remain'X files need configuration'. Proceed button grey.
Partially ready'Fix & Continue'. Proceed button activates (blue) with a warning - some reports are missing or disabled. You can still proceed but those sections will have limited data.
100% ready'Ready to Generate!' Proceed button activates (green). All enabled reports have validated files. Click it to open the Processing Confirmation Window.
Expand the blockers panel and fix items top-to-bottom. Each fix updates the dashboard live - you see the counter drop in real time.
6.8

Configuring File Cards

Each uploaded file card must be independently configured by selecting two things: the software it came from and the report type it represents. Only after both are set does Magi validate the file's column structure against what it expects.

Step A - Select software for the file

Each file card has a Software button on the left side. Clicking it opens a software selection window specific to that file. The available options are restricted to the software you confirmed in Step 6.3 - if you only selected ALMA, only ALMA appears here; if you included Other Software, a purple Other Software option also appears. Select the software and confirm. The Report Type button activates.

For Other Software files: after selecting Other Software as the software and then the matching report type, Magi validates the file against the Universal template's exact column structure. Because the template pre-defines every column name, a correctly filled template sheet will pass validation instantly with no manual column mapping required.

Step B - Select report type for the file

Once software is set, click the Report Type button on the right side of the file card. A window shows all available report types for that software and SAF-T type. Select the type that matches your file - for example "Sales Journal" or "Trial Balance" - and confirm. Magi immediately sends the file to the backend for column validation.

Step C - Column validation

After both selections, Magi validates the file's columns against the standard structure for that software and report type. Two outcomes are possible:

MatchThe file's columns match the expected structure. The card turns green and a blue Preview Mapping button appears. File is validated and counts toward progress.
MismatchThe file's columns do not match. The report type button turns orange and shows "Map Columns". You must open the Column Mapping window (see 4.9) before the file can be validated.

The Column Mismatch state - what you see on the card

When a mismatch is detected, the file card enters a distinct orange-alert state that makes the issue impossible to miss. Three things change simultaneously on the card:

Status textThe card body reads "Column mismatch - click to map". This is the only file-card state where the status label itself is a direct call to action.
Map ColumnsThe report type button is replaced by a pulsing orange Map Columns button. Clicking it opens the Column Mapping window (see section 6.9) where you match each of your file's actual column headers to the field Magi expects.
Π˜Π·Π±Π΅Ρ€Π΅ Ρ‚ΠΈΠΏ ΠΎΡ‚Ρ‡Π΅Ρ‚A secondary Change Report Type button also appears on the card. If you suspect you selected the wrong report type entirely, use this button to go back to the report type selection window without having to work through the column mapping flow first.
A mismatch does not mean the file is corrupt or the wrong export. It almost always means the column headers were exported in a different language, or a custom report template was used that renamed the columns. The Map Columns window auto-suggests matches wherever column names are similar, so most mismatches are fully resolved in under a minute.

Dependency rules - what resets what

Changing software (Step 6.3) Clears ALL file software assignments, report type assignments, and column mappings. Full reconfiguration required.
Changing period (Step 6.5) Deletes ALL uploaded file cards. You must re-upload all files.
Changing report type on a file Triggers a new column validation for that file only. Other files are unaffected.

If that file already has saved column mappings, Magi shows a confirmation window before clearing them. Confirming removes the saved mapping and runs a fresh column validation against the new report type. Cancelling leaves everything unchanged.

Report type change confirmation window
Disabling a report type (Step 6.4) Any file assigned to that type turns Disabled and is excluded from processing. Re-enabling restores it.
6.9

Column Mapping Reference

Column mapping is needed only when your exported file's headers differ from the standard column names Magi expects. This section shows every report type's expected columns - Required columns must be mapped; Optional columns improve data quality but are not blocking. Standard default exports from ALMA and Microinvest, and files prepared using the Other Software (Universal) template, will all auto-validate without any mapping - as long as the column names are not modified.

How to open the Column Mapping window

Orange pulsing button on file cards where a column mismatch was detected. Click to open the window and manually assign your file's column headers to the expected fields.
Blue gradient button on Validated cards. Opens the same window in read-only mode so you can inspect the auto-detected column structure without making any changes.

Inside the window

Required CounterLive 'X / Y required fields mapped' counter at the top. The Confirm button enables only when X equals Y.
Field RowsLeft column: expected field name + Required/Optional label. Right column: dropdown of your file's actual column headers.
Auto-SuggestMagi pre-fills dropdowns where column names are similar. Accept or override each suggestion.
Persistent SaveOn confirm, the mapping is saved per software+report type combination. Future uploads of the same report type auto-apply it without showing the window.

ALMAColumn Reference - Monthly Reports

Chart of Accounts chart_of_accounts
Column NameType
SmetkaRequired
ImeRequired
VidRequired
Trial Balance trial_balance
Column NameType
AccCodeRequired
AccNameExtRequired
ABeginDtRequired
ABeginKtRequired
AEndDtRequired
AEndKtRequired
Account Movements account_movements
Column NameType
DtOborotRequired
KtOborotRequired
KorSkaRequired
ZapisNoRequired
DataRequired
BelejkaRequired
ImeSmetka_ValRequired
Customer / Supplier Reports partners_report
Column NameType
Π˜Π΄Π΅Π½Ρ‚.No# (ЕГН)Required
Π˜Π΄Π΅Π½Ρ‚.No# (Π—Π”Π”Π‘)Required
ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Required
Π”ΡŠΡ€ΠΆΠ°Π²Π°Required
Π“Ρ€Π°Π΄Required
АдрСсOptional
Π’Π΅Π».Optional
МобилСнOptional
ЀаксOptional
e-mailOptional
Customer Settlements customer_settlements
Column NameType
KlientImeRequired
ClientCityRequired
ClientBulRequired
SdoNachalno_2Required
SdoKraino_2Required
Smetka_2Required
Dokument_2Required
PlatDokRequired
BelejkaRequired
PlatDataRequired
Supplier Settlements supplier_settlements
Column NameType
KlientImeRequired
ClientCityRequired
ClientBulRequired
SdoNachalno_2Required
SdoKraino_2Required
Smetka_2Required
Dokument_2Required
PlatDokRequired
BelejkaRequired
PlatDataRequired
Purchase Journal purchase_journal
Column NameType
Kol03Required
Kol04Required
Kol06Required
Kol07Required
Kol09Required
Kol10Required
Kol11Required
Kol99Required
Sales Journal sales_journal
Column NameType
Kol03Required
Kol04Required
Kol06Required
Kol07Required
Kol09Required
Kol10Required
Kol22Required
Tax Table tax_table
Column NameType
КодRequired
НаимСнованиСRequired
ОснованиСRequired
Π”Π”Π‘%Required
Π‘/ΠΊΠ°Required
Document Types document_types
Column NameType
КодRequired
НаимСнованиСRequired
Inventory / Products inventory_common
Column NameType
Miarka1Required
Miarka2Required
Kod1Required
Kod2Required
Ime1Required
Ime2Required
GrupiRequired
Koef1Required
Sales Transactions Details sales_transactions_details
Column NameType
Π‘Ρ‡.запис NRequired
Π”Π°Ρ‚Π°Required
Π”Ρ‚_Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Required
Π”Ρ‚_Π”Π°Ρ‚Π°Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Required
ВСкстRequired
ΠœΠ΅ΡΠ΅Ρ†Required
Π‘ΡƒΠΌΠ°Required
Π‘ΡƒΠΌΠ°Π”Π”Π‘Required
Π”Ρ‚_ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Required
ΠšΡ‚_Π‘ΠΌΠ΅Ρ‚ΠΊΠ°Required
Π’ΠΈΠ΄Π”ΠΎΠΊRequired
Π‘Π΄Π΅Π»ΠΊΠ°Required
Π”Ρ‚_Π‘ΠΌΠ΅Ρ‚ΠΊΠ°Optional
ΠšΡ‚_БМЦOptional
ΠšΡ‚_БМЦКодOptional
ΠšΡ‚_ΠœΡΡ€ΠΊΠ°Optional
Π‘ΡƒΠΌΠ°Π‘Π»Π΅Π΄ΠžΡ‚ΡΡ‚Optional
Π¦Π΅Π½Π°Optional
ΠšΡ‚_КолOptional
КолOptional
Π‘ΡŠΠ·Π΄Π°Ρ‚Π΅Π»Optional
Π’Π°Π»ΡƒΡ‚Π°Optional
ΠŸΠ»Π°Ρ‰Π°Π½Π΅Optional
Π”Ρ‚_ПодСлСниС4Optional
Π˜Π·Π²Π΅ΡΡ‚ΠΠΎΠΌOptional
Π”Ρ‚_Π”Π°Ρ‚Π°ΠŸΠ°Π΄Π΅ΠΆOptional
ΠŸΠ»Π°Ρ‚Π΅Π½Π°Π”ΠžOptional
Π”Π°Ρ‚Π°Π‘ΡŠΠ±Optional
Purchase Transactions Details purchase_transactions_details
Column NameType
Π‘Ρ‡.запис NRequired
Π”Π°Ρ‚Π°Required
Π‘ΡŠΠ·Π΄Π°Ρ‚Π΅Π»Required
Π”Ρ‚_Π‘ΠΌΠ΅Ρ‚ΠΊΠ°Required
Π”Ρ‚_БМЦКодRequired
Π”Ρ‚_БМЦRequired
Π”Ρ‚_ΠœΡΡ€ΠΊΠ°Required
ΠšΡ‚_Π‘ΠΌΠ΅Ρ‚ΠΊΠ°Required
ΠšΡ‚_ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Required
ΠšΡ‚_Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Required
ΠšΡ‚_Π”Π°Ρ‚Π°Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Required
ВСкстRequired
ΠœΠ΅ΡΠ΅Ρ†Required
Π‘ΡƒΠΌΠ°Required
Π‘ΡƒΠΌΠ°Π”Π”Π‘Required
Π’ΠΈΠ΄Π”ΠΎΠΊRequired
Π‘Π΄Π΅Π»ΠΊΠ°Required
Π‘ΡƒΠΌΠ°Π‘Π»Π΅Π΄ΠžΡ‚ΡΡ‚Required
Π”Π°Ρ‚Π°Π‘ΡŠΠ±Required
Depreciation Schedule depreciation_schedule Annual only
Column NameType
НаимСнованиС ΠΈ Π²ΠΈΠ΄ Π½Π° основното срСдствоRequired
Амортиз. /ΠΎΡ‚Ρ‡Π΅Ρ‚Π½Π°/ стойност, Π² Π»Π΅Π²Π°Required
ΠžΡΡ‚Π°Ρ‚ΡŠΡ‡. ст-ст Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π° Π½Π° 01.01., Π² Π»Π΅Π²Π°Required
ΠœΠ΅ΡΠ΅Ρ† Π½Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ². въвСТд. Π² Скспл.Required
Π‘Ρ€ΠΎΠΊ Π½Π° Π³ΠΎΠ΄Π½./ ΠΈΠ·Ρ…Π°Π±. (Π³ΠΎΠ΄.)Required
Π“ΠΎΠ΄. Π°ΠΌΠΎΡ€Ρ‚ Π½ΠΎΡ€ΠΌΠ° Π² %Required
Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° годишни Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·., Π² Π»Π΅Π²Π°Required
ΠΈΠ²Π½.No ΠΏΠΎ Ρ€Π΅Π΄Optional
начислСни Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·. Π΄ΠΎ 01.01., Π² Π»Π΅Π²Π°Optional
ΠžΠ±Ρ‰ΠΎ начисл. Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·. Π² Π»Π². Π·Π°Optional
ΠžΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π° балансова стойност Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π° към 31.12.Optional
ΠžΠ‘Π©Πž Π½Π°Π±Ρ€Π°Π½ΠΈ Π°ΠΌΠΎΡ€Ρ‚. към 31.12Optional
Π”Π°Π½ΡŠΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ Ρ€-Ρ€ Π½Π° Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·.Optional

MicroinvestColumn Reference - Monthly Reports

Chart of Accounts chart_of_accounts
Column NameType
Π‘ΠΌΠ΅Ρ‚ΠΊΠ°Required
НаимСнованиСRequired
Trial Balance trial_balance
Column NameType
НомСрRequired
ИмСRequired
Π”Π΅Π±ΠΈΡ‚Required
ΠšΡ€Π΅Π΄ΠΈΡ‚Required
Начални салдаRequired
ΠšΡ€Π°ΠΉΠ½ΠΈ салдаRequired
Customer / Supplier Reports partners_report
Column NameType
Π€ΠΈΡ€ΠΌΠ°Required
Π•Π˜ΠšRequired
Π”Π”Π‘ НомСрRequired
Π”ΡŠΡ€ΠΆΠ°Π²Π°Required
Π“Ρ€Π°Π΄Required
Π‘ΠΌΠ΅Ρ‚ΠΊΠΈRequired
ПКOptional
АдрСсOptional
Π’Π΅Π»Π΅Ρ„ΠΎΠ½Optional
E-mailOptional
IBANOptional
Sales Journal sales_journal
Column NameType
НомСр Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Required
Π’ΠΈΠ΄ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Required
Π”Π°Ρ‚Π° Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Required
Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π°Required
ИмС Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π°Required
Π’ΠΈΠ΄ Π½Π° стоката/услугатаRequired
Purchase Journal purchase_journal
Column NameType
НомСр Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Required
Π’ΠΈΠ΄ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Required
Π”Π°Ρ‚Π° Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Required
Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π°Required
ИмС Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π°Required
Π’ΠΈΠ΄ Π½Π° стоката/услугатаRequired
Chronological Register chronological_register
Column NameType
ΠšΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅Required
Π”Π°Ρ‚Π°Required
Π”Π΅Π±ΠΈΡ‚ смСткаRequired
Π”Π΅Π±ΠΈΡ‚Required
ΠšΡ€Π΅Π΄ΠΈΡ‚ смСткаRequired
ΠšΡ€Π΅Π΄ΠΈΡ‚Required
Π‘ΡƒΠΌΠ°Required
Π”ΠΎΠΊ. Π²ΠΈΠ΄Required
Dok. Π΄Π°Ρ‚Π°Required
Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ β„–Required
ΠŸΠ°Ρ€Ρ‚Π½ΡŒΠΎΡ€Required
Π•Π˜Πš/Π”Π”Π‘ НомСрRequired
Π”ΡŠΡ€ΠΆΠ°Π²Π°Required
Π‘Π΄Π΅Π»ΠΊΠ° ΠΏΠΎ Π—Π”Π”Π‘Required
ОснованиСRequired
Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°Required
ΠŸΠ°Ρ€Π°Π³Ρ€Π°Ρ„Optional
ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Optional
Π’Ρ‚ΠΎΡ€Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°Optional
Stock Movement stock_movement
Column NameType
Π‘Ρ‚ΠΎΠΊΠ°Required
Код Π½Π° стокатаRequired
ΠœΠ΅Ρ€Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Required
Π‘ΠΌΠ΅Ρ‚ΠΊΠ°Required
Π•Π΄. Π¦Π΅Π½Π°Required
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎRequired
Π‘ΡƒΠΌΠ°Required
Dok. Π’ΠΈΠ΄Required
Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ β„–Required
Π”Π°Ρ‚Π° Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Required
ΠŸΠ°Ρ€Ρ‚Π½ΡŒΠΎΡ€Required
ОснованиСRequired
Weighted Average Cost weighted_average_cost
Column NameType
Π‘ΠΌΠ΅Ρ‚ΠΊΠ°Required
КодRequired
ΠœΠ΅Ρ€Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Required
Π‘Ρ‚ΠΎΠΊΠ°Required
Начално салдо ΠΊΠΎΠ».Required
Начално салдо ст-стRequired
Π—Π°ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π΅Π½ΠΎ ΠΊ-Π²ΠΎRequired
Π—Π°ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π΅Π½ΠΈ ст-стиRequired
Π‘Ρ€Π΅Π΄Π½Π° Ρ†Π΅Π½Π°Required
Кол. ИзписаниRequired
Бтойност Π·Π° изписванСRequired
ΠšΡ€. салдо ΠΊΠΎΠ».Required
ΠšΡ€. салдо стойностRequired
Stock Deliveries stock_deliveries
Column NameType
Π”Π°Ρ‚Π°Required
Dok. Π²ΠΈΠ΄Required
Π”Π°Ρ‚Π° Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Required
Код Π½Π° стокатаRequired
ΠœΠ΅Ρ€Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Required
Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ β„–Required
Π‘ΠΌΠ΅Ρ‚ΠΊΠ°Required
Π‘Ρ‚ΠΎΠΊΠ°Required
ΠŸΠ°Ρ€Ρ‚Π½ΡŒΠΎΡ€Required
Кол.Required
Π¦Π΅Π½Π°Required
Π‘ΡƒΠΌΠ°Required
Inventory List inventory_list
Column NameType
β„–Required
Π‘ΠΌΠ΅Ρ‚ΠΊΠ°Required
НаимСнованиСRequired
ΠœΡΡ€ΠΊΠ°Required
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎRequired
Π‘Ρ€Π΅Π΄Π½Π° Ρ†Π΅Π½Π°Required
БтойностRequired
Налично ΠΏΡ€ΠΈ инвСнтаризацияRequired
ЛипсаRequired
ИзлишъкRequired
Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°Required
Depreciation Schedule depreciation_schedule Annual only
Column NameType
Инв. НомСрRequired
НаимСнованиСRequired
Актив Π² смСткаRequired
Π”Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Π½Π΅Required
Π”Π°Ρ‚Π° Π½Π° въвСТданС Π² СксплоатацияRequired
Π”Π°Ρ‚Π° Π½Π° отписванСRequired
Π“ΠΎΠ΄. ΠžΡ‚Ρ‡Π΅Ρ‚Π½Π° стойностRequired
Балансова стойностRequired
НачислСни Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈRequired
НачислСни Π·Π° Π³ΠΎΠ΄ΠΈΠ½Π°Ρ‚Π°Required
Π“ΠΎΠ΄. Амортизационна Π½ΠΎΡ€ΠΌΠ°Required
АмортизируСма стойностRequired
ΠžΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π° стойностRequired
ΠœΠ΅ΡΠ΅Ρ† Π½Π° възникванС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈRequired
ΠœΠ΅ΡΠ΅Ρ† Π½Π° прСустановяванСRequired
ΠœΠ΅ΡΠ΅Ρ† Π½Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅Required
ΠœΠ΅ΡΠ΅Ρ† Π½Π° отписванСRequired
If your export uses a different language or a custom template that renames columns, you only need to do the column mapping once per software+report type combination. Magi saves it permanently for all future uploads.
6.10

Processing & Proceeding

When all enabled required reports have validated files, the Proceed button in the Command Center activates (turns blue). Clicking it opens the Processing Confirmation Window - a final review before Magi processes your data and moves to the next step.

What are Critical reports?

Four report types are treated as Critical by the upload interface: Chart of Accounts, Trial Balance, Account Movements, and Customer/Supplier Reports. When validated files for any of these are absent, the Processing window enters the Invalid state - because without at least one account-code source, Magi cannot begin code extraction and mapping. Both action buttons are disabled until the missing reports are uploaded or disabled.

Other reports such as Tax Table, Inventory Common, and Document Types are equally important for their respective SAF-T sections. Missing them means those sections will contain empty or unmapped values in the final file - but they do not block the upload step.

The three window states

CompleteAll enabled required reports have validated files. No warnings. Both action buttons are fully available. The window header shows a green banner.
PartialSome essential reports are missing (e.g. Tax Table, Document Types) but no Critical reports are absent. Both buttons are available - a yellow warning banner lists what is missing. You can proceed but the resulting SAF-T may be incomplete.
InvalidOne or more Critical reports are missing. The window shows a red banner listing the missing Critical reports. Only Go to Code Mapping is available (to allow partial processing). Check Mappings & Continue is disabled because code extraction cannot complete without the critical reports.
Processing window in Complete state - green banner, both action buttons active
Complete state
Processing window in Partial state - yellow banner, missing optional reports listed, both buttons still active
Partial - 1 / 2
Processing window in Partial state - detail view of the missing reports section and warning callout
Partial - 2 / 2
Processing window in Invalid state - red banner, Use Existing Mappings greyed out, critical missing reports listed
Critical state

The two action buttons

Check Mappings & Continue

The smart-route button. Magi extracts your codes, then automatically checks every one against the official NRA nomenclature - any code that is already a valid SAF-T value gets an instant identity mapping with no manual work required. Then it checks coverage: if all codes are mapped, SAF-T generation starts immediately. If any codes are still unmapped, Magi redirects you to the Map Codes page - only those remaining codes need attention. The outcome depends on your data; you do not know in advance which path you will take.

Go to Code Mapping

Always takes you to the Map Codes page. Magi extracts your internal codes and immediately generates best-match suggestions from the official NRA nomenclature for every single one - you are not mapping from scratch. Codes with exact or high confidence can be accepted in bulk in one click. Codes with lower confidence show a description so you can judge in seconds. Only codes where Magi found no match at all require you to pick manually. Previously saved mappings are remembered and reapplied automatically - on a second run, only genuinely new codes need attention. The right choice on a first run or any time you want to review what Magi suggests before committing.

Invalid state - critical reports missing

Check Mappings & Continue

Greyed out and unclickable when critical reports are missing. Critical reports are required for code extraction regardless of whether mappings were previously saved.

1. Extract codes from uploaded files accounts Β· tax Β· UOM Β· products Β· document types
2. Auto-check each code against NRA nomenclature
✓ Valid NRA code Identity mapping created instantly confidence: exact - no action needed
? Unknown code Stays unmapped will need manual mapping
3. Are ALL codes now mapped? YES NO
Skip to SAF-T Generation ✓
Redirect to Map Codes (unmapped codes only)
If you choose Check Mappings & Continue but your data contains new internal codes that were never mapped (and they are not direct NRA nomenclature codes either), Magi will detect them and redirect you to the Map Codes page automatically - only those new codes will need to be mapped. When in doubt, always choose Go to Code Mapping.
First time? Use 'Go to Code Mapping' - Magi will suggest matches for every code and most can be confirmed in bulk. It is much faster than it sounds. Returning user with an unchanged chart of accounts? 'Check Mappings & Continue' will detect full coverage and skip straight to SAF-T generation automatically.
ERP already uses NRA codes? If your accounting system is configured to use official NRA account codes, tax codes, or UOM codes directly (e.g. account 601, tax code 01), 'Check Mappings & Continue' will recognise them automatically and create identity mappings - you may skip the mapping step entirely on your very first run.
Success
42 codes were automatically recognised as valid NRA nomenclature values and mapped instantly. No manual mapping needed for these.
Command Center with all reports configured - Continue button active
4.10
6.11

Other Software (Universal)

Your accounting software is not ALMA or Microinvest?

Magi supports any accounting software through the Other Software option. Instead of exporting raw files from a specific system, you download our pre-built Excel template, fill it in with your data, and upload it just like any other file. Magi handles the rest - code extraction, enrichment, SAF-T generation - exactly as it does for ALMA and Microinvest.

Why does this option exist?

Bulgaria has dozens of accounting systems - Microinvest, Dracon, Clio, Elpib, Synchro, custom ERP setups, and many others. Each exports data in a different format with different column names. Rather than building a separate adapter for every software on the market, Magi provides a standard template that defines exactly what data is needed and in what format. You become the bridge between your software and Magi: you copy the data into the template, and Magi takes it from there.

The 5-step universal workflow

1
Download Template
Click the purple Download button. You get one Excel file with 13 sheets (14 for Annual).
2
Fill In Your Data
Copy your accounting data into each sheet. Keep column headers exactly as they are.
3
Upload to Magi
Upload each filled sheet as a separate file. Assign report type to each.
4
Map Codes
Map your internal account and tax codes to the NRA nomenclature (same as ALMA/Microinvest).
5
Generate SAF-T
Magi enriches and maps your data through the full generation process and produces a valid SAF-T XML.
Excel Template - All Reports in One File
13 sheets for Monthly/On Demand Β· 14 sheets for Annual Β· English column names Β· Example data rows included Β· Version 1.0
Download Template

How to select Other Software in the upload page

  1. Go to the Software Selection section (sub-step 2 of the upload page, section 6.3). You will see three cards: ALMA, Microinvest and Other Software.
  2. Click the Other Software card (purple puzzle-piece icon). The card border highlights in purple and a checkmark appears in the top-left corner.
  3. A purple download banner immediately appears below the cards. It contains the Excel template download button and a brief instruction. Download the template now before proceeding.
  4. Click Continue to Reports to confirm your selection and move to the reports grid.
You can select Other Software together with ALMA or Microinvest. For example: if you use Microinvest for warehouse data and another accounting system for the general ledger, select both. Each uploaded file is independently assigned its own software type in step 4.8.

Template structure - what is inside the Excel file

The template is a single .xlsx file with one sheet per report type. Each sheet has a frozen header row, a description row (row 2), and three example data rows (rows 3–5) that you replace with your real data. Do not rename the sheets. Do not rename or reorder column headers. Magi reads your data using the column names exactly as they appear in the template.

Core - required for monthly SAF-T type
Chart of Accounts
chart_of_accounts
Your complete list of GL accounts. Required for GeneralLedgerAccounts in SAF-T.
Critical
Trial Balance
trial_balance
Opening and closing debit/credit balances per account for the reporting period.
Critical
Account Movements
account_movements
Individual journal entry lines - the backbone of GeneralLedgerEntries. One row per posting line.
Critical
Customer / Supplier Reports
partners_report
Master list of all your customers and suppliers with TaxID, name, city, and country.
Critical
Essential - important for complete SAF-T source documents
Sales Journal
sales_journal
Aggregated VAT journal for outgoing invoices. Used for SalesInvoices in SAF-T.
Essential
Purchase Journal
purchase_journal
Aggregated VAT journal for incoming invoices. Used for PurchaseInvoices in SAF-T.
Essential
Sales Transaction Details
sales_transactions_details
One row per invoice line. Includes account, tax code, and amounts. Enriches source documents.
Essential
Purchase Transaction Details
purchase_transactions_details
One row per purchase invoice line. Includes account, tax code, and amounts.
Essential
Tax Table
tax_table
Your internal VAT/tax codes with descriptions and rates. Maps to TaxTable in SAF-T.
Essential
Document Types
document_types
Your document type codes (invoice, credit note, etc.) with descriptions. Used for code mapping.
Essential
Standard - optional, enhances SAF-T completeness
Customer Settlements
customer_settlements
Open items and payment data per customer. Enriches the Payments section.
Standard
Supplier Settlements
supplier_settlements
Open items and payment data per supplier. Enriches the Payments section.
Standard
Inventory
inventory_common
Product catalogue with codes, units of measure, and unit prices. Populates Products in SAF-T.
Standard
Depreciation Schedule
depreciation_schedule
Fixed asset register with acquisition costs, depreciation amounts, and GL accounts.
Annual only

Key column names - what you will see in the template

Unlike ALMA (which uses Bulgarian column names like DtOborot) the universal template uses plain English column names which reflects the SAF-T columns exactly and describe exactly what goes where. The example rows in the template show realistic Bulgarian data - follow the same format.

Common identifiers (used across multiple sheets)
InternalAccountIDYour GL account code (e.g. 602, 4532)
TaxIDEIK/Π•Π˜Πš of the counterparty
CompanyNameLegal name of the customer/supplier
DocumentRefInvoice/document reference number
DocumentDateDate of the document (DD.MM.YYYY or YYYY-MM-DD)
InternalTaxCodeYour internal VAT/tax code (e.g. 20%, Π’ΠžΠ”)
Amounts
DebitAmountDebit posting amount (account_movements)
CreditAmountCredit posting amount (account_movements)
NetTotalNet amount before VAT (journals, transactions)
TaxPayableVAT amount
GrossTotalTotal amount including VAT
OpeningDebitBalanceOpening debit balance (trial_balance)
ClosingDebitBalanceClosing debit balance (trial_balance)

Which template sheet feeds which SAF-T section?

GeneralLedgerAccountschart_of_accounts, trial_balance - account names, types, and period balances.
Customers / Supplierspartners_report - contact details, TaxID, address for all counterparties.
GeneralLedgerEntriesaccount_movements + sales/purchase_journal + sales/purchase_transactions_details + partners_report - the full GL journal with enriched customer/supplier IDs and tax codes.
SalesInvoicessales_transactions_details + sales_journal - one SourceDocuments line per invoice line with SAF-T document type.
PurchaseInvoicespurchase_transactions_details + purchase_journal - same structure for incoming invoices.
Paymentscustomer_settlements + supplier_settlements - settlement entries per document.
Products / UOMinventory_common - product codes, descriptions, and units of measure.
TaxTabletax_table - your tax codes become TaxTableEntry records with rates.

Automatic validation - what Magi checks for you

After each file is uploaded and processed, Magi runs two layers of validation specific to universal data. Any issues appear as yellow warning messages at the top of the page. These are warnings, not blockers - you can still proceed to mapping, but the warnings tell you which data may be incomplete.

Per-sheet checks
  • Required columns are present (e.g. account_movements must have InternalAccountID, GLPostingDate, DebitAmount, CreditAmount).
  • Required columns have no blank/empty rows - empty values in critical columns flag exactly how many rows are affected.
  • Numeric columns (DebitAmount, CreditAmount, GrossTotal, etc.) contain numbers, not text.
  • Date columns are not empty - Magi's cleaner parses dates automatically from most formats.
Cross-sheet checks
  • Every account code used in account_movements exists in chart_of_accounts.
  • Every account code used in trial_balance exists in chart_of_accounts.
  • Every account code in sales/purchase_transactions_details exists in chart_of_accounts.
  • Every tax code in sales/purchase_transactions_details exists in tax_table.
  • Account codes in customer_settlements, supplier_settlements, and depreciation_schedule are cross-checked against chart_of_accounts.

Cross-checks run once after all your files are uploaded. A warning message lists which values are missing and from which sheets (e.g. 'account_movements.InternalAccountID: 3 value(s) not in chart_of_accounts - e.g. "9200", "9310"').

Step-by-step: how to fill the template correctly

  1. Open the template in Excel or LibreOffice Calc. Do not save it as .xls - keep the .xlsx format. Do not use Google Sheets as it may break date formatting.
  2. Read row 2 (the description row) for each sheet before adding data. Row 2 tells you what each column expects, the data type, and an example. The row is frozen - it stays visible as you scroll down.
  3. Delete the example rows (rows 3–5) and enter your real data starting from row 3. Or overwrite them directly. Row 1 (headers) and row 2 (descriptions) must stay in place.
  4. Dates: use DD.MM.YYYY (e.g. 15.03.2025) or YYYY-MM-DD (e.g. 2025-03-15). Both formats are accepted. Do not leave date cells empty for rows that have amounts.
  5. Amounts: use plain decimal numbers with a dot as the decimal separator (e.g. 1234.56). Do not include currency symbols, thousand separators, or text. Magi will reject columns that cannot be parsed as numbers.
  6. Account codes in InternalAccountID must match exactly between sheets. If you use account 602 in account_movements, the same code must appear in chart_of_accounts. Magi's cross-sheet validator will warn you about any mismatches after upload.
  7. Leave entirely empty sheets blank - do not add dummy rows. If you have no inventory data, leave the Inventory sheet empty. Magi skips empty sheets. Adding dummy data will create invalid SAF-T records.
  8. Save each sheet as a separate .xlsx file before uploading. You cannot upload the entire multi-sheet workbook as one file. Copy the data from each sheet into a new workbook and save it with a descriptive name (e.g. chart_of_accounts_march2025.xlsx).
Never rename, add, or remove column headers in row 1. Magi identifies each column by its exact name. If you rename InternalAccountID to Π‘ΠΌΠ΅Ρ‚ΠΊΠ°, Magi will not find that column and will show a Column Mapping warning on the file card. You will then need to use the Column Mapping window (section 6.9) to tell Magi which of your columns maps to which expected name.

Code mapping for Other Software users

After processing, Magi extracts all internal codes it finds in your data: account codes, tax codes, document types, product codes, and units of measure. These are the same code types extracted from ALMA and Microinvest data. In Step 5 (Map Codes), you map each internal code to the corresponding NRA nomenclature code - exactly the same process regardless of software. The only visible difference: your extracted codes appear in the mapping UI with a universal_ prefix in the database (e.g. universal_602), which ensures there are no conflicts if you also have ALMA files.

What SAF-T sections will be empty if you skip a sheet?

account_movements missingGeneralLedgerEntries will be empty. This is the largest section of SAF-T - without it your file will fail NRA validation.
chart_of_accounts missingGeneralLedgerAccounts will be empty. Also blocks cross-sheet account code validation for all other sheets.
sales/purchase_transactions_details missingSalesInvoices and PurchaseInvoices sections in SourceDocuments will be empty or significantly incomplete.
partners_report missingCustomers and Suppliers master data sections will be empty. Customer/supplier IDs cannot be enriched in GL entries.
customer/supplier_settlements missingPayments section will be empty. The rest of SAF-T is not affected.
inventory_common missingProducts and UOMTable sections will be empty. Only affects companies that handle physical goods.
Start with the three critical sheets - chart_of_accounts, account_movements, trial_balance. These produce a valid (though minimal) SAF-T. Add the others progressively once the critical sheets validate cleanly.
If your accounting software can export to CSV, you can use that too - copy-paste the data into the template sheet manually. This ensures column names and formats are correct.
If you get a Column Mapping warning on a file card (orange report type button, pulsing), click the button to open the Column Mapping window. You can tell Magi which of your actual column headers corresponds to each expected column name - no need to modify the file.
The template download link is also available on the Upload Reports page itself - a purple banner appears automatically every time you select Other Software.

Software card - Other Software selected

Other Software
Any accounting software
Template required

Download banner (appears on selection)

Template required for Other Software
Download our Excel template, fill in your data, and upload the filled sheets here.
Download

Report cards in the grid (purple badge)

Chart of Accounts
Account Movements

Validation feedback example

'account_movements' (842 rows):
⚠ InternalAccountID: 14 rows have empty values
Cross-sheet issues:
⚠ account_movements.InternalAccountID: 3 value(s) not in chart_of_accounts - e.g. '9200', '9310'
4.11
Step 7

Map your internal codes

Step 5 of 7
7.1

Page Layout - Everything on the Screen and What It Does

The Map Codes page has several distinct zones that work together. Understanding what each zone is for before you start mapping will save you time. Here is a tour of the entire page from top to bottom.

1. The overall progress ring (top of page) - A circle in the top right of the page header fills proportionally as you complete mappings. The number inside shows your current percentage, and the counter below shows X mapped / Y total across all sections combined. The Complete Mapping button becomes available only once all codes reach 100%.

Overall progress ring showing mapping percentage and total count

2. The section stepper (top navbar) - A horizontal strip of tabs at the top of the page, one per code type: Accounts, Tax, UOM, Products, Document Types. Each tab shows a live 'mapped / total' counter (e.g. '18 / 50'). A clock icon means the section still has unmapped codes; a green checkmark means it is complete. Click any tab to switch to that section - the main table reloads instantly with that section's codes. Sections with zero codes (because your software did not produce them) are hidden automatically.

Section stepper top navbar showing code type tabs with progress counters

3. The filter and search bar - A white bar that locks to the top of the screen as you scroll - it is always reachable no matter how far down the table you are. It gives you three independent ways to narrow down what you see: a free-text search box, confidence-level filter badges, and mapping-status filter badges. All three stack freely: you can combine them in any combination.

Search... βœ•
Confidence
Status
Search your internal codes...

Search box - Filters the table instantly as you type. Matches against your internal code text - e.g. type '9310' to jump straight to that account row. Works on top of active confidence and status filters, so you can search within an already-filtered view. The βœ• button clears the search.

Confidence filter badges - Filters the table to only show codes whose Magi suggestion has that confidence level. One confidence filter active at a time. Start with Exact and High to confirm the easy ones first, then work down to Medium, Low, and finally None.

All
Exact
High
Medium
Low
None
  • All - Default. Every code in the section is visible.
  • Exact - Magi found a nomenclature code whose text matches your internal code character-for-character. Safe to accept without reading.
  • High - Strong match (β‰₯ 80%). Safe to accept with a quick glance at the SAF-T code name.
  • Medium - Plausible match (50 – 79%). Worth reading the suggestion before accepting.
  • Low - Weak match (below 50%). Treat as a starting hint. Verify against the nomenclature before confirming.
  • None - Magi found no match at all. This code needs you to search and pick a SAF-T code manually.

Status filter badges - Filters by whether a code has already been confirmed or is still waiting. Combine with confidence badges: 'Unmapped + Low' shows only the hardest remaining codes. 'Unmapped + None' shows codes with no suggestion at all.

All codes
Mapped
Unmapped
  • All - Default. Both mapped and unmapped codes visible together.
  • Mapped - Only codes you have already confirmed a SAF-T match for. Use this to review or correct earlier decisions.
  • Unmapped - Only codes still waiting for a decision. The fastest way to see exactly how much work remains.

Reset - The small red circle instantly clears every active filter and restores the default 'All / All' state. Use it when you are done inspecting a specific subset and want to see the full table again.   Help - Opens an in-page overlay guide explaining what code mapping is. Useful to share with a new team member who lands on this page for the first time.

Compact filter and search bar on the real map codes page

4. The section header strip (above the table) - A dark navy gradient bar that stays at the top of the mapping area. Left side shows the current section name and suggestion count. Centre holds the live save status indicator. Right side holds the quick-action buttons. Below is the exact bar as it appears on the page, followed by a breakdown of each element:

Chart of Accounts Mapping
Map your internal codes to NRA nomenclature β€’ 12 high-confidence suggestions
Loading 3 of 50 Magi suggestions
All changes saved
Loading 3 of 50 Magi suggestions

Loading badge - Appears below the section title right after you switch sections, while Magi generates suggestions in the background. Disappears once all suggestions are ready. You can start mapping immediately - codes you accept manually always take priority over background suggestions.

AI AI is enhancing suggestions…
AI AI enhanced 50 of 259 codes

AI suggestion badge - Appears while Magi's AI is analyzing your codes in the background. The count updates live as results arrive. High and exact confidence matches are committed automatically - rows flip to green without any action from you. For accounts, taxes, document types, and units of measure this typically finishes in under a minute. Products takes longer; see section 7.4 for details.

AI AI Enhanced
?

AI Enhanced pill - Replaces the AI badge once the analysis is complete. The ? button opens a brief summary of what Magi did for this section - which codes were matched and at what confidence level. Both disappear when you switch to a section that has not yet been processed.

Saving…
All changes saved

Save status indicator - Centred in the header at all times. Transitions to the blue spinning 'Saving…' state while changes are being flushed to the server, then switches to green 'All changes saved'. Never navigate away or close the tab while it reads 'Saving…' - your last change will be lost.

Undo / Redo buttons - Per-user action history. The undo button (left, white) is active when you have actions to reverse; the redo button (right, greyed) is disabled when there is nothing to redo. Keyboard shortcuts: Ctrl+Z to undo, Ctrl+Shift+Z to redo.

Accept all suggestions button - One-click bulk action: accepts every unmapped code in the current section that has a suggestion, in one go. The count in parentheses shows how many qualify right now. A confirmation dialog appears first. Covered in detail in section 7.4.

Section header strip on the real map codes page

5. Pagination controls - A light strip that appears both above and below the mapping table. Left side navigates between pages. Centre shows a live progress bar for the current page. Right side controls how many rows appear and the row density. All controls are mirrored at the top and bottom of the table so you never have to scroll to reach them.

Page 1 of 4
Go to:
Accounts - page progress 18 mapped
Page 2 of 4

Prev / Next arrows - Move one page at a time through the code list. The left arrow is greyed out on the first page; the right arrow is greyed out on the last.

Go to:

Page jump input - Type any page number and press Enter to jump there directly. Faster than clicking Prev/Next repeatedly on a large section.

Rows per page - Options: 20 / 30 / 50 / 75 / 100. Fewer rows means faster page loads and easier focus; more rows let you accept suggestions in large batches without paging. Default is 50.

Density - Controls row height: Compact fits the most rows on screen at once; Dense is a middle ground; Normal is the most readable. Switch to Compact when scanning large batches; use Normal when reading long account names.

Accounts - page progress

Page progress bar - A thin green bar showing what fraction of the codes on the current page have already been mapped. Fills left-to-right as you work through the page. At a glance it tells you whether there are still unmapped rows hiding below the fold.

Pagination controls strip on the real map codes page

6. The mapping table (main working area) - The rows with your codes. Each row is one internal code waiting to be matched to an official SAF-T code. By default shows 50 rows per page. The anatomy of each row is explained in full in section 7.2.

Mapping table showing internal codes with SAF-T code suggestions and confidence scores

7. The bottom action bar - Three fixed elements live in the bottom-right corner of the screen at all times: a scroll-to-top button, an action bar toggle button, and the action bar itself which slides up from the bottom when opened.

The two floating circular buttons (fixed to the bottom-right corner)

Scroll to top
Open bar
↑ navy = closed
Close bar
↓ red = open

Scroll to top - Fades in once you scroll past the first screenful of content. One click jumps back to the top of the page instantly. Fades out automatically when you reach the top again.

/ Action bar toggle - Dark navy button with an upward arrow when the bar is closed. Turns red with a downward arrow when the bar is open. Click to slide the action bar up; click again to close it.

The action bar - open state

Back - Returns to the Upload Reports page. All saved mappings are completely preserved - nothing is lost. Use this if you need to swap or re-upload a file before continuing to the generation step.

Restart - Admin and above only. Opens a confirmation window with two options: Re-upload Files clears uploaded files and extracted codes but keeps your code mappings - use this when you uploaded the wrong file and need to re-upload a corrected one; the system will re-apply your existing mappings automatically on the next run. Full Reset deletes everything including mappings - use this only when switching accounting software or starting completely from scratch.

Restart window - Re-upload Files selected: blue header, left card highlighted, mappings-kept panel visible Restart window - Full Reset selected: red header, right card highlighted, irreversible warning visible

Keyboard shortcuts - Opens an overlay listing every keyboard shortcut available on the page. Useful for power users and teams who want to confirm mappings and navigate sections without touching the mouse.

Export for Review - Downloads a CSV of the current section's codes and their mapped SAF-T values. Share it with a colleague or accountant for offline review before finalising - useful in team workflows where a second pair of eyes checks the mappings.

Save all changes - Force-flushes all pending changes to the server immediately, bypassing the normal 2-second auto-save debounce. Use before navigating away or any time you want certainty that every change is persisted.

Complete Mapping - The main forward action button. Grey and disabled until every code across all sections is mapped (top state). Once progress hits 100% it turns green and pulses to draw attention (bottom state). Clicking it locks the mapping stage, transitions the company to generation, and redirects to the SAF-T generation page. This step is not reversible without using Restart.

Floating bottom action bar expanded on the real map codes page
Mappings persist across sessions and across months. - Every saved mapping is stored permanently against your company. Come back a day later, on a different computer, and all your previous mappings load automatically. After you generate a SAF-T file and start a new period, your mappings are not deleted - uploaded files and extraction data are cleared so you can upload the new month's files, but all mapping work is preserved and re-applied automatically. Only genuinely new codes that appear for the first time need attention each period.
Month 1 - First run 1. Upload files Excel / CSV accounting exports 2. Start Code Mapping Map all ERP codes to NRA nomenclature 3. Generate SAF-T XML File submitted to NRA ✓ Mappings saved. Uploads cleared for next period. Month 2+ - Returning user 1. Upload new period files Fresh exports for the next month 2. Use Existing Mappings Previous mappings auto-applied ✓ 3. Generate SAF-T XML Faster - mapping step skipped ✓ Only NEW codes (if any) need manual mapping. ✓ saved & carried forward
7.2

Anatomy of a Mapping Row - What Every Element Does

Every code you need to map appears as a row in the mapping table. The row structure is identical across all five code-type sections. Suggestions come from two sources: pattern matching that runs immediately after upload, and a separate AI analysis that runs once in the background when you first open a section - the AI layer upgrades suggestions that pattern matching found uncertain or missed entirely. Below is a live replica of real rows - read each callout to understand every element.

Live Row Replica - elements labelled ①–⑀
β‘ 
β‘‘
β‘’
β‘£
β‘€
YOUR CODE SAF-T CODE CONFIDENCE ACTIONS
701
ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° стоки
β†’
7010
ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° продукция
medium
Pending
702
ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° услуги
β†’
7020
ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° услуги
manual
Mapped
Amber bar = pending - not yet mapped Green bar = mapped βœ“
1
Checkbox - Select for Bulk Actions
Unticked - not selected
Ticked - row selected

Tick to include the row in a bulk action. Once at least one row is selected, a badge appears in the action bar showing the count. Shift+click a second checkbox to select all rows between the two. Space bar toggles the focused row's checkbox from the keyboard.

2
Your Internal Code
701 ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° стоки ← pending (code in dark navy)
702 ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° услуги ← mapped (code turns teal)

The code exactly as it appears in your accounting software export - the monospace bold number is the raw internal code, below it is the human-readable description from your data. Use the description to judge whether Magi's suggestion is correct. When the row is successfully mapped, the code text turns teal as a visual confirmation.

3
SAF-T Code Chip - Three Visual States
Default (no suggestion) 7000 Navy-left border, light blue bg
Suggested (pending) 7010 Teal left border + teal bg - awaiting decision
Mapped / Accepted 7020 White bg, teal border - saved βœ“

The chip shows the current SAF-T code candidate. Teal = Magi's suggestion is pending your decision. Green = a code has been accepted and persisted. Grey dash = Magi found no match - you must open Browse and pick manually. The description below the chip is from the official NRA nomenclature and helps you judge the match quality.

4
Confidence Badge - Your Quality Signal
none No suggestion. Must Browse manually.
low Weak match - always verify before accepting.
medium Plausible - glance at description before accepting.
high Strong match - usually correct, quick check at edges.
exact Perfect match - safe to bulk accept without review.
manual You chose this via Browse. Never overwritten by Magi.
special Set via Services or N/A. Final - never overwritten.

manual and special are the two "final" states - once set, Magi will never overwrite them even if you re-run the suggestion engine. All other confidence levels are overridable.

5
Action Buttons - Five Possible Buttons Per Row

Always visible on every row. Opens the nomenclature browser for this code. Use when there is no suggestion, when Magi is wrong, or to verify. Keyboard: focus row β†’ Enter.

Visible only on pending rows that have a suggestion. One click saves Magi's suggestion instantly. Row turns green. Keyboard: focus row β†’ A.

Replaces Accept on already-mapped rows. Opens the browser pre-loaded with the current saved code so you can correct it.

Quick-maps to the SAF-T Services placeholder. Sets confidence to special (final). Available on individual rows and as a bulk action.

Marks this code as Not Applicable - excluded from SAF-T output. Sets confidence to special (final). Use for codes with no SAF-T equivalent.

+
Status Badge - Above the Action Buttons

Inside the actions cell, above the buttons, sits a small status badge that summarises the row's current state at a glance.

Pending Not yet mapped - amber, awaiting decision
Mapped SAF-T code saved - teal, action complete

The badge and the row background colour always agree - amber background + Pending badge = not done; green background + Mapped badge = done. Both signals point to the same truth so you can scan the table quickly without reading the individual codes.

+
AI Suggestion Badge - Inside the Row
AI AI
appears next to the suggestion reason

When a suggestion was produced by AI analysis rather than pattern matching, a small Magi logo badge appears alongside the suggestion reason. This tells you the suggestion comes from contextual understanding rather than text similarity - particularly reliable on abbreviated, industry-specific, or mixed-language descriptions. High and exact confidence AI results are committed before the row renders, so a green row on first load may already have been mapped by Magi's AI.

All Row States at a Glance
703
β†’ - none
⚠ Pending - no suggestion. Browse required.
704
β†’ 7040 medium
⚠ Pending - suggestion ready. Accept or Browse.
705
β†’ 7050 exact
βœ“ Mapped - SAF-T code accepted and saved.
706
β†’ 7060 high
β—Ό Selected - checkbox ticked, ready for bulk action.
Auto-Save - 2-Second Debounce Queue

Every Accept, Change, or Browse-confirm enters a 2-second save queue. The section header switches to Saving…. After 2 seconds with no new actions, all pending changes flush in one single server request - 10 quick accepts = 1 round trip. The header returns to βœ“ All saved. Press Ctrl+S to force an immediate flush at any time. Your mappings are never lost between page reloads.

7.3

The Nomenclature Browser - Searching and Selecting Codes Manually

Nomenclature Browser - annotated replica
β‘ 
NRA Chart of Accounts
β‘‘ Mapping: 6010000 Materials
β‘’
Code Description Magi
601 Expenses for materials TOP
6010 Raw materials and consumables #2
6020 Fuels and lubricants #3
603 Other short-term expenses
6010000 Materials - selected βœ“ TOP
β‘€ 5 codes
Products & Taxes - Quick-map buttons in the expanded footer
NRA Product Codes Nomenclature
Mapping: SRV-MAINT Maintenance services
Code Description Magi
00000000 Services (general category) TOP
0 N/A - not applicable CN code
85364900 Electrical equipment parts
3 codes
β‘  Header - section identity
NRA Chart of Accounts

Icon + NRA nomenclature subtitle. Changes per section: Accounts, TAX, UOM, Products, Invoice Types.

β‘‘ Code display + inline search
Mapping: 6010000 Materials

Shows which internal code you are mapping. Click πŸ” to expand inline search - filters code numbers AND descriptions simultaneously. Ctrl+F focuses it.

β‘’ Filter badges - two view modes

Top Magi (default) - 5–15 ranked suggestions for this code only. Use first. All - full NRA list. Use when Magi has no match.

β‘£ Results rows - confidence colors
601TOP
6010#2
6020#3
604#4
603 - no Magi rank
6010000selected βœ“

Green = exact/TOP Β· Blue = high Β· Amber = medium Β· Grey gradient = low Β· Zebra = no rank Β· Bright green + shadow = your selection.

β‘€ Footer - confirm your pick
5 codes

Select is disabled until you click a row. Starts collapsed. β–² toggle expands Quick-map buttons (Products: 00000000, 0 Β· Taxes: 000000).

Special virtual codes - Products & Taxes sections only
00000000 Products
Services (general CN category)
0 Products
N/A - not applicable CN code
000000 Taxes
N/A - 000000 (TAX-IMP)

Pinned at the top of the list in their sections. Click the quick button in the footer to instantly map without browsing - no row selection needed.

Selecting a code - 3 steps:

1Click any row to highlight it (turns green with glow)
2Click the green Select button in the footer (or press Enter / Space)
3Window closes. Row shows SAF-T code, confidence badge = manual (purple). Auto-saved in 2 s.

Shortcut: Double-click any row to select and confirm in a single action - the window closes immediately without needing to click the Select button. Works in both the flat table and hierarchical views (Accounts, Products, Taxes).

Keyboard shortcuts inside the window
Ctrl + F
Focus search input
↑ ↓
Move through rows
Enter
Confirm selection
Esc
Close without change
Changing your mind: - If you already mapped a code with Browse and want to change it, just click Browse again. The window opens with the current mapping highlighted. Search for the new code, select it, confirm. The old mapping is overwritten. Confidence becomes 'manual' again. Undo (Ctrl+Z) restores the previous mapping.
7.4

Batch Accept & Bulk Operations - Moving Fast

AI
Products - AI mapping runs automatically

Products is the most demanding section to map: the NC8 combined nomenclature contains over 9,800 commodity codes, and product descriptions in accounting exports are often abbreviated, industry-specific, or in mixed languages. Magi handles this with a three-stage background analysis that starts as soon as you open the Products section - first it studies your product names and builds a terminology dictionary specific to your business; then it searches the full NC8 nomenclature for the closest candidates for each product; finally it selects the best code and commits high-confidence results immediately. Progress streams live: rows update as each batch completes, and you can map other sections while it runs.

If you add new products after the initial run, restart from Code Mapping to re-analyse them - your previously accepted mappings are preserved.

Mapping codes one at a time would be slow for large sections. Magi provides several batch and bulk operations that let you handle dozens or hundreds of codes at once. This section explains every available shortcut.

Section header strip - annotated replica:

Accounts

Chart of accounts  43 / 87 mapped

Loading codes...
All saved
Accept all suggestions 43
β‘ 
β‘‘
β‘’
Page 1 / 4
Progress: 49% 43 mapped
β‘  Section title & progress

Section name + mapped vs total count. The blue loading badge appears while data is still being fetched - it hides once the full list is loaded.

β‘‘ Auto-save status pill

Frosted-glass pill: βœ“ All saved (green), Saving… (blue spinner), Pending (amber), Error (red shake). Updates live - no manual save button needed.

β‘’ Quick action buttons

Undo/Redo pair (white on glass pill) + the green Accept all button. The number badge shows how many unmapped codes with suggestions will be affected.

1. Accept All Suggestions - the biggest time-saver:

The 'Accept all suggestions (N)' button applies Magi's top suggestion to every currently unmapped code that has any suggestion - skipping already-mapped codes and codes with no suggestion. A confirmation dialog shows exactly how many codes will be affected before you commit. After confirming, the entire batch is saved in a single server request and the progress ring jumps forward.

Recommended approach: - Before clicking Accept All, filter to 'High' and 'Exact' confidence and quickly scan the suggestions. If they all look sensible, go back to 'All' confidence and click Accept All. This handles the easy majority in seconds, leaving only low/none-confidence codes for manual attention.

2. Multi-select with checkboxes - table rows replica:

Click a single checkbox to select a row. Shift+click a second checkbox to range-select all rows between. Ctrl+A selects all visible rows on the current page.

Your Code SAF-T Code Confidence Actions
411
Receivables from customers
β†’
41100000
Receivables - customers
high
Pending
412
Advances from customers
β†’
41200000
Advances - customers
medium
Pending
501
Cash in hand
β†’
50100000
Cash and cash equivalents
manual
Mapped
503
Bank accounts
β†’ - no suggestion none
Pending
Amber bar = pending, rows 1&2 ticked for bulk action Green bar = mapped βœ“

The selection badge and bulk action menu - annotated replica:

As soon as at least one row is checked, the dark navy selection badge appears at the bottom-right of the screen. Click it to open the bulk action menu. Six numbered callouts identify every element:

β‘ 
2 rows selected
↑ Fixed bottom-right - click to open
β‘‘
Accept 2 suggestions Apply each code's own top Magi suggestion
β‘’
Map 2 codes together Open browser once, apply to all selected
β‘£
Map to Services (00000000) One-click: all selected β†’ special Services code
β‘€
Map to N/A (0 / 000000) Placeholder code - may cause a validation warning
β‘₯
Clear selection Deselect all rows - no changes made
β‘  Selection badge

Dark navy pill, fixed bottom-right. Appears the moment one row is checked. Shows selected count + β–² arrow. Click it to open the bulk action menu above the badge.

β‘‘ Accept N suggestions

Each selected code gets its own top suggestion applied individually. Each may map to a different SAF-T code. Best when the selection is varied.

β‘’ Map N codes together

Opens the nomenclature browser once. The single code you pick is applied to ALL selected rows simultaneously. Perfect for product variants or sub-accounts sharing one parent.

β‘£ Map to Services (00000000)

One-click shortcut to the SAF-T non-stock/services commodity code. Confidence set to 'special'. Ideal for service businesses mapping their entire product list in one shot.

β‘€ Map to N/A (0 / 000000)

Maps to '0' (products) or '000000' (taxes). These appear in XML and may trigger validation warnings. Use only when no valid SAF-T equivalent exists for those codes.

β‘₯ Clear selection

Deselects all checked rows. No mapping is applied - purely cancels the multi-select. The badge disappears and all row highlights clear.

The bottom action bar is covered in full in section 7.1 - element 7. - Once the overall progress ring reaches 100%, the 'Complete Mapping' button turns green and pulses. Clicking it locks mapping, transitions your company to generation status, and immediately launches the SAF-T generation process - covered in detail in section 5.7 below.

4. Undo after a bulk operation: A single Ctrl+Z reverses the entire bulk action as one step - it does not require pressing Ctrl+Z once per code. If you accidentally accepted 50 suggestions, one undo restores all 50. Applies to Accept All, Map Together, Map to Services, and Map to N/A. The undo history holds up to 50 steps per section.

Recommended workflow for a large section:

1Unmapped + None β†’ Browse each manually. No suggestions exist - these take the most time.
2Unmapped + Low β†’ Read each suggestion. Accept correct ones, Browse to fix wrong ones.
3Ctrl+A β†’ select page β†’ Map Together or Map to Services for similar-type batches.
4Clear all filters β†’ Accept All. Handles all remaining High + Exact codes in one click.
Combine filters with bulk select for maximum speed: - Filter to 'Unmapped' + 'None' confidence to show only codes with zero suggestions. Select all (Ctrl+A). If they are all similar products, click 'Map together' and assign one code for all of them. Then clear the filter to return to the full list.

Keyboard shortcuts for fast mapping:

  • ↑ / ↓ - Move keyboard focus row by row through the table without touching the mouse.
  • A - Accept the suggestion on the focused row instantly.
  • Enter - Open the nomenclature browser window for the focused row.
  • Space - Toggle the checkbox on the focused row for bulk selection.
  • Ctrl+A - Select all rows on the current page for bulk operations.
  • Ctrl+Z / Cmd+Z - Undo the last action - including after Accept All (reverses the entire batch in one step).
  • Ctrl+Shift+Z - Redo the last undone action.
  • Ctrl+S - Force-flush all pending changes to the server immediately.
  • Ctrl+Shift+? - Open the full in-page keyboard shortcut reference.
7.5

Real-time Collaboration - Multiple Users, One Session

Code mapping is often the most time-consuming part of SAF-T preparation, especially for companies with large charts of accounts or product catalogues. Magi allows multiple team members with edit access to work on the same company's mapping session simultaneously, each in their own browser. Changes made by any user become visible to all others within 1–2 seconds, with no need to refresh the page.

The presence indicator: In the top navigation bar you will see a team members badge showing how many users are currently on the Map Codes page for this company. Click it to expand a dropdown listing each person by name, their role (Admin, Editor, etc.), which section they are currently viewing (e.g. 'Accounts'), and when they last made an action. This live view lets you coordinate work without sending messages.

What syncs in real time across all users' screens:

  • Code mapped - When a colleague accepts a suggestion or picks a code from the window, your page updates that row within 1–2 seconds automatically. You do not need to do anything.
  • Code cleared - If a colleague removes a mapping, the row reverts to unmapped state on your screen too.
  • Bulk operations - When a colleague runs 'Accept all suggestions', all affected rows update on your screen simultaneously.
  • Section navigation - The presence dropdown updates to show which section each user is currently viewing, so you can organically divide work without stepping on each other.
  • Progress counters - The overall progress ring and all section stepper counters update live as anyone completes mappings. Watch the numbers tick up in real time.
  • Typing indicators - If a colleague has the nomenclature window open and is searching, a subtle 'editing' indicator highlights that row for you, signalling that someone is about to map it.

Conflict detection and resolution:

If you open the nomenclature browser window for a code that a colleague has also opened simultaneously, a warning toast appears:

⚠ [Colleague name] is currently editing this code. - Your changes may conflict. The system uses last-write-wins: whoever saves last, their choice is kept in the database. You can still proceed - just be aware that if your colleague also saves after you, their choice will overwrite yours. For codes where there is disagreement, discuss in your team and let one person make the final call.

Undo / Redo - per-user, never shared: Each user maintains their own independent undo/redo history. Pressing Ctrl+Z undoes only your last action - it does NOT undo a colleague's mapping. This is intentional: you cannot accidentally reverse someone else's work. The undo history holds up to 50 steps per section, is stored in your browser's memory, and survives page reloads within the same browser session.

Auto-save - no manual saving needed under normal operation:

1You accept a suggestion or select a code from the window
2The change enters a 2-second save queue. The header shows a spinner: 'Saving…'
3After 2 seconds of inactivity, all pending changes flush in a single server request
4The header shows 'βœ“ All saved' in green. Other users receive the updates.

Rapid actions (e.g. accepting 20 suggestions in quick succession) are batched into a single server request - efficient and conflict-safe. Use Ctrl+S to force an immediate flush if you want to ensure your changes are committed before stepping away.

Roles and what each can do on this page:

  • Primary Owner, Co-owner, Admin, Editor - Full edit access: can map codes, accept suggestions, run batch operations, undo, redo, and click 'Complete Mapping' to advance to generation.
  • Viewer - Read-only: can see all mappings, confidence levels, and live progress updates, but all action buttons are disabled with a 'View only' tooltip. Useful for an accountant overseeing the process without making changes.
Recommended divide-and-conquer strategy:
  • Person 1 β†’ Accounts section (largest - start here, takes the most time)
  • Person 2 β†’ Products section (second largest - assign to whoever knows the product catalogue)
  • Person 3 β†’ Tax codes + Document types + UOM (all three are small and fast - under 10 minutes total)
All five sections are completely independent. There is no risk of conflict when different users work on different sections simultaneously.

Completing the mapping stage: The 'Complete Mapping' button in the floating action bar at the bottom of the page becomes active only when the overall progress ring reaches 100% - meaning every single code across all five sections has a SAF-T code assigned. Clicking it transitions your company to the generation stage and redirects to the SAF-T generation page. This is not reversible without the 'Restart' button.

The Restart button is destructive. - Available to Admins and above in the bottom action bar. It deletes all uploaded reports, all extracted codes, all code mappings, and all suggestions for the company - returning it to the initial upload state. Use this only if you uploaded wrong files or made systematic mapping errors that require starting from scratch. The action asks for confirmation before proceeding.

What happens when you leave and come back: All saved mappings are stored permanently in the database. When you return to the Map Codes page (same or a different browser, hours or days later), all previously saved mappings load immediately at page start. Your browser's memory additionally restores your undo/redo history and filter preferences from the last session in that browser, so the page is exactly as you left it.

7.6

Generating Your SAF-T - What Happens After 'Complete Mapping'

Once the progress ring hits 100% and you click Complete Mapping, Magi locks the mapping stage, transitions your company to generation status, and immediately launches the SAF-T generation process. A full-screen overlay appears and walks you through every step in real time - you do not need to do anything except watch.

Behind the scenes, the system calls generate_saft_with_mappings(): it loads all your uploaded files, applies your confirmed code mappings, runs the full ETL process, validates every field against the NRA's SAF-T schema, and produces the final XML file. This typically takes 30–90 seconds depending on the size of your data.

SAF-T Generation Overlay - annotated replica
Generating SAF-T Report
Please do not close this window
Type
Monthly SAF-T
Elapsed
42s
Software
ALMA
Building SAF-T structure... 45%
Generation phases
Read Files
Clean Data
Enrich Data
Build Structure
Validate
Save
Open
SAF-T Sections - Monthly Report
Report Header
Company information
Building
MasterFiles
Accounts, products & tax
Done
General Ledger
Journal entries & transactions
Waiting
Source Documents
Invoices & payments
Waiting
Elapsed timer

Counts up from zero in real time. A typical run takes 30–90 seconds depending on how many reports were uploaded and the volume of your data. The overlay is informational - the backend finishes when it finishes and the page redirects automatically when done.

7 generation phases

Read Files β†’ Clean Data β†’ Enrich Data β†’ Build Structure β†’ Validate β†’ Save β†’ Open. Each phase shows a spinning icon when running and a green tick when complete. Phases run sequentially - the next begins only when the previous finishes.

SAF-T sections panel

Shows the four XML sections being built: Report Header, MasterFiles (accounts, products, tax codes), General Ledger entries, and Source Documents. Each card transitions Waiting β†’ Building β†’ Done as its data is processed.

What each phase does - in plain language:

Phase What actually happens
Read Files Your uploaded CSV/Excel files are loaded from disk into memory. File format is verified and encoding issues are detected and corrected automatically.
Clean Data The software-specific adapter for your accounting system (ALMA, Microinvest, or other) standardises column names, date formats, numeric types, and encoding. Raw export quirks are normalised to a common internal format.
Enrich Data Data from all uploaded report types is cross-referenced and merged. Customer and supplier records are deduplicated. Transaction lines are linked to their parent documents. Your confirmed code mappings are injected at this stage.
Build Structure Enriched data is converted into the SAF-T XML object model: Header, MasterFiles, General Ledger Entries, and Source Documents. Each object validates itself as it is built and records any structural problems found.
Validate Every field is checked against NRA SAF-T rules: mandatory fields, allowed value lists, numeric ranges, date consistency, EIK format, IBAN format, and cross-section references. All problems are classified as critical, warning, or informational.
Save The SAF-T XML is serialised, the NRA-mandated filename is generated (e.g. SAF_XXXXXX_2024M01.xml), and the file and full validation report are written to the database and disk.
Open The process result is evaluated. If critical errors were found you are redirected to the SAF-T editor to fix them (Scenario A). If there are no critical errors the report is ready and you are redirected to the download page (Scenario B).

Two possible outcomes - which one applies to you:

Scenario A - Critical errors found

One or more fields failed a mandatory NRA rule - for example a missing company registration number, an invalid IBAN, or a transaction line with a zero amount where a value is required.

You are redirected to the SAF-T Edit & Validate page, where all errors are listed with their exact field location and a plain-language description of what is wrong. You fix them directly in the editor and re-validate from there.

β†’ Edit & Validate page (Step 6)
Scenario B - Generation successful

No critical errors were found. The SAF-T XML file is complete, correctly named according to NRA conventions, and stored in your account.

You are redirected to the Reports page, where you can preview the file, download the XML, and review any warnings or informational notes from the validation pass.

β†’ Reports page (Step 7)
Do not close the tab while the overlay is running. - Generation runs on the server - closing the browser will not cancel it - but the overlay will stop updating and the automatic redirect will be lost. If you accidentally close the tab, navigate back to the firm dashboard and you will be forwarded to the correct stage automatically.
Step 8

Review, edit and validate

Step 7 of 7
8.1

Page Layout - Everything on Screen and What It Does

The SAF-T Editor has five distinct zones that are always visible at the same time. Understanding each zone before you start editing will save you time. This is a full top-to-bottom tour of the page. Each zone links to its own detailed section below where the controls are explained one by one.

1. The top navigation bar - A dark navy bar fixed at the top of every page. It holds three zones: left (navigation + save status), centre (overall progress bar + error / warning counts), and right (editing actions + the two Generate buttons). Always visible no matter how far you scroll.

АкмС АД
Saved
3 errors β€’ 7 warnings

Back button - Returns you to the previous step (the Map Codes page or the firm dashboard). All edits are auto-saved before navigation - nothing is lost. Use this if you need to re-upload files before re-generating.

АкмС АД

Firm name chip - Displays the company whose SAF-T file you are currently editing. Acts as a reminder when you have multiple company tabs open.

Ready
Saving…
Saved

Save indicator - Three states: grey 'Ready' (idle), blue spinning 'Saving…' (change in flight to server), green 'Saved' (persisted). Never navigate away while 'Saving…' is showing - the unsaved change will be lost. In normal use the indicator flashes through all three states within a second.

3 errors β€’ 7 warnings

Progress bar + error / warning counts - The thin green bar fills left-to-right as you resolve validation issues - it reaches 100% only when zero errors and zero warnings remain. The red badge shows the current error count and the amber badge shows warnings. Both update live as you edit fields. These same counts are mirrored on the Validation Drawer handle below.

Undo / Redo - Per-user action history for field edits. Undo (left) is active when you have changes to reverse; Redo (right) is greyed out when the history is at its tip. Keyboard shortcuts: Ctrl+Z to undo, Ctrl+Y to redo. History resets when you navigate to a different tree node. See section 8.6 for details.

Review Defaults button - Opens the Review Defaults panel - a table of all fields the pipeline auto-filled because they were missing from your source data. The red badge shows how many groups of auto-corrections are waiting for your decision. The button is hidden until auto-corrections exist; once you accept all of them it disappears. Covered in detail in section 8.2.

Generate SAF-T (navbar) - The primary forward action. Triggers the Generate SAF-T flow: if errors or warnings exist a warning modal appears first; if the file is clean the generation overlay launches immediately. This button is also available in the floating action bar. Both buttons trigger the same flow. Covered in detail in section 8.5.

SAF-T Editor top navbar - full width screenshot showing: back button, firm name chip reading АкмС АД, green Saved indicator, progress bar at 65% with red badge showing 3 errors and amber badge showing 7 warnings, active undo button, greyed-out redo button, Review Defaults button with red badge 5, and green Generate SAF-T button. Highlight each element with a red border and a numbered label matching the callout list above.

2. The left sidebar tree - A vertical panel on the left that mirrors the SAF-T XML hierarchy. Click any node to load that section into the main editing area. Sections show coloured badges when they contain errors or warnings. The sidebar can be collapsed to give the editor more horizontal space, and a floating tab on the left edge of the screen reopens it.

SAF-T Structure
Filter structure...
AuditFile β–Ύ
Header
MasterFiles 3 β–Ύ
Customers 2
Suppliers
GeneralLedgerEntries 1 β–Έ
SourceDocuments β–Έ
1 Collapse button () - Hides the sidebar and slides a narrow tab () onto the left edge of the screen. Click the tab to restore the panel. Useful on smaller screens or when the editing area needs more width.
2 Filter input - Type any SAF-T element name (e.g. 'Customer') to instantly filter the SAF-T tree. The tree collapses to show only matching sections. Clear the input to restore the full tree.
3 Active section - Blue background + left accent bar = the section currently loaded in the editor. In the replica above, MasterFiles is active.
4 Red error badge - Number of validation errors inside that section or any of its sub-sections. The left accent bar also turns red. Clicking the section loads it so you can fix the errors.
5 Amber warning badge - Same as above but for warnings. Warnings do not block generation but are recommended for a complete NRA submission.
6 Green dot - A team member is currently working in this section.
7 β–Έ / β–Ύ chevron - β–Έ (right) = the section has sub-sections and is currently collapsed. β–Ύ (down) = expanded. Click the section row to toggle.
SAF-T Editor left sidebar tree - screenshot of the real sidebar showing: header with SAF-T Structure title and collapse button, filter search input, and the tree with AuditFile as root, Header section with green dot, MasterFiles section highlighted in blue (active) with red error badge showing 3, Customers sub-section with amber warning badge showing 2, Suppliers sub-section with green dot, GeneralLedgerEntries with red left bar and red badge 1 (collapsed), SourceDocuments with green dot (collapsed). Add numbered callout labels for each element type.

3. The main editor area - detail in section 8.3 - The wide central panel where you actually edit field values. It has three sub-zones stacked vertically: the editor header (breadcrumb + navigation buttons), the contextual filtering strip (filter pills + search bar), and the content area (the form, table, or card view for the selected section).

MasterFiles Customers Record 1 of 48
All48
Errors2
Warnings5
Auto-corrected3
Search within current view...
Table / form content for the selected section renders here - see section 8.3 for detail.
MasterFiles Customers 1 / 48

Breadcrumb - Shows exactly where you are in the SAF-T tree. The first crumb is the top-level section (blue); subsequent crumbs are sub-sections; the last crumb shows your position within a record list (e.g. 'Record 1 of 48'). Click any crumb to jump up to that level.

Up / Next Section buttons - Up moves one level toward the tree root (same as clicking the parent breadcrumb). Next Section advances to the next sibling section in the tree without having to click it in the sidebar - useful for working through all sections sequentially.

Contextual filtering strip - Appears below the editor header when the current section contains a list (e.g. Customers, Suppliers, Journals). Four filter pills narrow the visible records by validation state - All, Errors, Warnings, Auto-corrected. The search box filters by text content within the current view. The Clear button resets all active filters at once. The strip is hidden when the current section is a simple flat form (e.g. Header).

4. The validation drawer - detail in section 8.4 - A dark bar fixed to the bottom of the viewport, always visible. Click anywhere on the bar to expand a full panel listing every validation error and warning in the file. The bar also shows the live error / warning counts and has a Validate All button.

Validation Issues
3 errors β€’ 7 warnings
3 errors 7 warnings

Error / warning counts in handle - Mirror the counts in the navbar centre zone. Update live as you fix or introduce issues. Click the drawer handle anywhere to expand the full error list.

Validate All button () - Triggers a full re-validation of all sections without opening the drawer. Use this after making several edits to refresh all counts at once. The same action is available in the floating action bar. See section 8.6 for the Validate All modal.

Handle progress bar - The thin green line at the very bottom edge of the handle. Fills left-to-right as you resolve issues. Reaches 100% only when both error and warning counts reach zero.

5. The floating action bar - A small circular toggle button fixed to the bottom-right corner of the screen (above the validation drawer). Click it to slide up a panel with four action buttons: Show Mandatory Only, Restart Process, Validate All, and Generate SAF-T.

Closed
navy = closed
Open
blue = open

The action bar - open state

Show Mandatory Only - Toggles mandatory-field mode. When active, the editor hides every optional field and shows only fields that are required by the BG SAF-T XSD schema. The button glows blue when the mode is on. A blue banner also appears at the top of the editing area as a reminder. Useful for a rapid first pass to clear all critical errors. See section 8.6 for full details.

Restart Process - Opens the Restart Process modal with three option cards: restart editing only, go back to mapping, or start from scratch. Each option clearly states what it keeps and what it deletes. Admin access or above is required. See section 8.6 for the full modal.

Validate All - Triggers a full re-validation of every section in the file and refreshes all error and warning counts. On first click opens the Validate All modal where you can choose between Full Validation and Cross-Section Only. On subsequent clicks within the same session it runs the same mode as last time without showing the modal. See section 8.6.

Generate SAF-T (action bar) - Identical to the Generate SAF-T button in the navbar. Both trigger the same flow. The action bar button is larger (btn-lg) and is the primary call-to-action on the page. See section 8.5.

Navigation tip. In sections 8.2–8.6 below, whenever a zone of the page is first named it links back to its subsection here - so if you jump to this guide from a specific question you can always navigate to the relevant detail. For example, the first mention of Validation Drawer in section 8.3 links here to section 8.4.
Full SAF-T Editor page screenshot - capture the entire browser window at 1440px width. Show: (1) top navy navbar with all buttons visible; (2) left sidebar tree with at least one active section, one error badge, one warning badge; (3) main editor area with breadcrumb, filtering strip showing All/Errors/Warnings/Auto-corrected pills, and a table with a few rows; (4) bottom validation drawer handle closed with error and warning counts; (5) floating action bar toggle button bottom-right. Add five large numbered red-circled labels: 1=navbar, 2=sidebar, 3=editor area, 4=drawer handle, 5=action bar toggle.
8.2

Review Defaults window

When Magi converts your accounting data into a SAF-T file it sometimes encounters fields that the NRA requires but that are absent from your source export. Rather than failing silently, Magi fills those fields with safe placeholder values and records every substitution in the Review Defaults window. You decide what to do with each group: keep Magi's value as-is, or fix it yourself.

The window appears when you click the Review Defaults button in the top navbar - visible only while at least one auto-filled group is waiting for your decision. The red badge on the button shows the number of groups still unreviewed.

The badge count decreases as you accept or dismiss each group. When all groups are resolved the button disappears from the navbar entirely.

Magi
System Applied Defaults
3 field groups auto-filled - review each and decide
Field / Section Records Default Value Error Type Action
Country
Customers β€Ί Address
48 BG Warning
PaymentMechanism
SourceDocuments β€Ί Payments
12 TRF Error
UOMBase
MasterFiles β€Ί Products
134 UN Warning
1

Field / Section - The SAF-T field name and the section it belongs to (e.g. Customers β€Ί Address). If multiple fields in the same section share the same default, they are grouped into one row.

2

Records - How many individual data records received this default. A single row can cover hundreds of records - for example every customer without a country code.

3

Default Value - The exact value Magi used. These are valid SAF-T codes from the NRA nomenclature - they pass schema validation, but they may not reflect your actual data.

4

Error Type - Whether the missing field causes an Error (file cannot be submitted with it blank) or a Warning (submission allowed but field is recommended). Rows with errors are more urgent.

5

Action - Accept - Click to confirm that Magi's default value is acceptable for this group. The row is removed from the table and the badge count drops by one. The value stays in the file.

I'll fix manually later - Closes the window without accepting anything. All unreviewed groups remain in the table and the badge stays on the navbar button. Use this when you want to find the correct values in the editor first.

Accept All Defaults - Accepts every group in the table in one click. All rows are cleared, the badge disappears, and the window closes automatically. Useful when the defaults are correct for your data (e.g. all customers are genuinely Bulgarian).

Accepting a default is not permanent. If you later realise a default value is wrong you can still fix it by navigating to that section in the editor tree and changing the field directly. Accepted defaults are shown in the editor with an Auto-corrected label so they are easy to find.
Review Defaults window screenshot - full window showing the dark navy header with Magi logo and System Applied Defaults title, the five-column table with three example rows (Country/BG/48 records/Warning, PaymentMechanism/TRF/12 records/Error, UOMBase/UN/134 records/Warning), each with a green Accept button, and the footer with I will fix manually later link and blue Accept All Defaults button. Highlight the badge count on the navbar Review Defaults button with a red callout arrow.">
                    </div>
                    <div class="hmw-subsection-image" style="aspect-ratio: 16/3;">
                        <img class="hmw-u-img-frame" src="/static/images/guide/en/saft-editor/editor-defaults-navbar-btn.fedb5f315a7a.png?v=2" alt="Close-up of the SAF-T Editor top navbar showing the Review Defaults button with a red badge displaying the number 3. The button shows the Magi logo icon and the text Review Defaults. A red callout arrow points to the badge. The rest of the navbar is slightly dimmed to draw focus.">
                    </div>
                </div>
            </div>

            <!-- ════════════════════════════════════════
                 7.3 - THE MAIN EDITING AREA
                 ════════════════════════════════════════ -->
            <div class="hmw-subsection" id="hmw-editor-forms">
                <div class="hmw-subsection-header">
                    <span class="hmw-subsection-num">8.3</span>
                    <h3 class="hmw-subsection-title">The main editing area</h3>
                </div>
                <div class="hmw-subsection-body">
                    <div class="hmw-subsection-info">
                        <p class="hmw-subsection-desc">The wide central panel is where you actually edit field values. When you click a section in the sidebar tree, this area loads its content. Three sub-zones stack vertically: the <strong>editor header</strong> (breadcrumb path + navigation buttons), the <strong>filtering strip</strong> (filter pills + search), and the <strong>content area</strong> (a table or a form depending on the selected section).</p>

                        <!-- ── Sub-zone A: breadcrumb + navigation ── -->
                        <p style="font-size:0.82rem;font-weight:700;color:#111827;margin:0.85rem 0 0.35rem;">A - Editor header</p>
                        <p class="hmw-u-body-mb4">The header strip shows you exactly where you are in the SAF-T tree and lets you move up and across without going back to the sidebar.</p>

                        <div style="background:white;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin:0.55rem 0 1rem;box-shadow:0 1px 4px rgba(0,0,0,0.06);">
                            <!-- Breadcrumb + nav replica -->
                            <div style="display:flex;align-items:center;justify-content:space-between;padding:0.7rem 1.1rem;background:#fafafa;gap:0.75rem;flex-wrap:wrap;">
                                <div style="display:flex;align-items:center;gap:0.3rem;font-size:0.78rem;color:#6b7280;min-width:0;flex:1;flex-wrap:wrap;">
                                    <span style="color:#1e7fcf;font-weight:600;cursor:default;">MasterFiles</span>
                                    <i class="fas fa-chevron-right" style="font-size:0.58rem;color:#d1d5db;"></i>
                                    <span style="color:#111827;font-weight:600;">Customers</span>
                                    <i class="fas fa-chevron-right" style="font-size:0.58rem;color:#d1d5db;"></i>
                                    <span style="color:#6b7280;font-style:italic;">Record 5 of 48</span>
                                </div>
                                <div style="display:flex;gap:0.4rem;align-items:center;flex-shrink:0;">
                                    <button style="padding:0.36rem 0.7rem;background:white;border:1.5px solid #d1d5db;border-radius:6px;color:#374151;font-size:0.74rem;font-weight:500;display:flex;align-items:center;gap:0.28rem;cursor:default;">
                                        <i class="fas fa-chevron-left" style="font-size:0.65rem;"></i> Up
                                    </button>
                                    <button style="width:32px;height:30px;background:white;border:1.5px solid #d1d5db;border-radius:6px;color:#374151;font-size:0.78rem;display:flex;align-items:center;justify-content:center;cursor:default;" title="Next section">
                                        <i class="fas fa-chevron-right"></i>
                                    </button>
                                </div>
                            </div>
                        </div>

                        <div style="display:flex;flex-direction:column;gap:0.5rem;font-size:0.77rem;color:#374151;line-height:1.6;margin-bottom:0.85rem;">
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">1</span>
                                <p class="hmw-u-body-p"><strong>Breadcrumb</strong> - Shows the full path from the SAF-T root to the current section. Blue segments are parent sections - click any of them to jump up the tree. The last segment (grey italic) shows the current record position within a collection.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">2</span>
                                <p class="hmw-u-body-p"><strong>Up button</strong> - Moves one level up in the hierarchy - from a record back to its parent table, or from a nested object back to its parent form. Mirrors clicking the blue segment in the breadcrumb.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">3</span>
                                <p class="hmw-u-body-p"><strong>Next Section button</strong> - Jumps to the next sibling section in the tree - for example from Customers to Suppliers. Useful for working through all sections one by one without touching the sidebar.</p>
                            </div>
                        </div>

                        <!-- ── Sub-zone B: filtering strip ── -->
                        <p style="font-size:0.82rem;font-weight:700;color:#111827;margin:0.85rem 0 0.35rem;">B - Filtering strip</p>
                        <p class="hmw-u-body-mb4">When a section has many records the filtering strip lets you narrow the view to just the records that need attention, without scrolling through everything.</p>

                        <div style="background:white;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin:0.55rem 0 1rem;box-shadow:0 1px 4px rgba(0,0,0,0.06);">
                            <div style="display:flex;align-items:center;gap:0.5rem;padding:0.55rem 1.1rem;flex-wrap:wrap;">
                                <div style="display:flex;gap:0.35rem;align-items:center;flex-wrap:wrap;">
                                    <div style="padding:0.38rem 0.65rem;background:#1e7fcf;border:1px solid #1e7fcf;border-radius:18px;color:white;font-size:0.71rem;font-weight:500;display:flex;align-items:center;gap:0.3rem;height:26px;box-shadow:0 1px 4px rgba(30,127,207,0.25);">
                                        <span>All</span><span style="background:rgba(0,0,0,0.22);padding:0.05rem 0.32rem;border-radius:10px;font-size:0.67rem;font-weight:700;">48</span>
                                    </div>
                                    <div style="padding:0.38rem 0.65rem;background:white;border:1px solid #fca5a5;border-radius:18px;color:#dc2626;font-size:0.71rem;font-weight:500;display:flex;align-items:center;gap:0.3rem;height:26px;">
                                        <span>Errors</span><span style="background:rgba(220,38,38,0.1);padding:0.05rem 0.32rem;border-radius:10px;font-size:0.67rem;font-weight:700;">2</span>
                                    </div>
                                    <div style="padding:0.38rem 0.65rem;background:white;border:1px solid #fcd34d;border-radius:18px;color:#b45309;font-size:0.71rem;font-weight:500;display:flex;align-items:center;gap:0.3rem;height:26px;">
                                        <span>Warnings</span><span style="background:rgba(180,83,9,0.08);padding:0.05rem 0.32rem;border-radius:10px;font-size:0.67rem;font-weight:700;">5</span>
                                    </div>
                                    <div style="padding:0.38rem 0.65rem;background:white;border:1px solid #d1d5db;border-radius:18px;color:#6b7280;font-size:0.71rem;font-weight:500;display:flex;align-items:center;gap:0.3rem;height:26px;">
                                        <span>Auto-corrected</span><span style="background:rgba(107,114,128,0.1);padding:0.05rem 0.32rem;border-radius:10px;font-size:0.67rem;font-weight:700;">3</span>
                                    </div>
                                </div>
                                <div style="flex:1;min-width:140px;display:flex;align-items:center;gap:0.3rem;border:1px solid #d1d5db;border-radius:6px;padding:0.32rem 0.6rem;background:white;">
                                    <i class="fas fa-search" style="color:#9ca3af;font-size:0.75rem;flex-shrink:0;"></i>
                                    <span style="font-size:0.74rem;color:#9ca3af;flex:1;">Search within current view...</span>
                                </div>
                            </div>
                        </div>

                        <div style="display:flex;flex-direction:column;gap:0.5rem;font-size:0.77rem;color:#374151;line-height:1.6;margin-bottom:0.85rem;">
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">1</span>
                                <p class="hmw-u-body-p"><strong style="color:#1e7fcf;">All</strong> - Shows every record in the current section. The count in the badge is the total record count. This is the default view.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">2</span>
                                <p class="hmw-u-body-p"><strong style="color:#dc2626;">Errors</strong> - Hides all clean records and shows only those with at least one validation error. Use this to quickly find and fix every record blocking submission.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">3</span>
                                <p class="hmw-u-body-p"><strong style="color:#b45309;">Warnings</strong> - Shows only records with warnings. Warnings do not block generation but the NRA may flag the submission for review if key recommended fields are missing.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">4</span>
                                <p class="hmw-u-body-p"><strong style="color:#6b7280;">Auto-corrected</strong> - Shows records where Magi filled in a placeholder value. Handy for checking whether the substituted values actually make sense for your data.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">5</span>
                                <p class="hmw-u-body-p"><strong>Search</strong> - Filters by text across all visible field values in the current section. Works on top of an active pill filter - for example Errors + a company name shows only error records that match the search term.</p>
                            </div>
                        </div>

                        <!-- ── Sub-zone C: field states ── -->
                        <p style="font-size:0.82rem;font-weight:700;color:#111827;margin:0.85rem 0 0.35rem;">C - Field states</p>
                        <p class="hmw-u-body-mb4">Every input field in the editor has one of five visual states. The state updates instantly when you move away from a field after editing it.</p>

                        <!-- Field states replica - light form card -->
                        <div style="background:white;border:1px solid #e5e7eb;border-radius:10px;overflow:hidden;margin:0.55rem 0 1rem;box-shadow:0 1px 6px rgba(0,0,0,0.07);">
                            <!-- Card header -->
                            <div style="display:flex;align-items:center;justify-content:space-between;padding:0.65rem 1rem;background:#f9fafb;border-bottom:1px solid #e5e7eb;min-height:44px;">
                                <span style="font-size:0.88rem;font-weight:600;color:#111827;display:flex;align-items:center;gap:0.45rem;">
                                    <i class="fas fa-user" style="color:#1e7fcf;"></i> Customer - Record 5
                                </span>
                                <span style="font-size:0.7rem;color:#9ca3af;">Fields shown: all</span>
                            </div>
                            <!-- Field grid -->
                            <div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem 1.25rem;padding:1rem;">

                                <!-- Field 1: normal / untouched -->
                                <div style="display:flex;flex-direction:column;gap:4px;">
                                    <div style="display:flex;align-items:center;gap:4px;margin-bottom:2px;">
                                        <span style="font-size:0.68rem;font-weight:500;color:#374151;">CompanyName</span>
                                    </div>
                                    <div style="position:relative;">
                                        <input type="text" value="АкмС Π˜Π½Π΄ΡƒΡΡ‚Ρ€ΠΈΠΈ АД" readonly style="width:100%;padding:0.42rem 0.75rem;background:white;border:1px solid #d1d5db;border-radius:6px;color:#111827;font-size:0.78rem;cursor:default;height:32px;box-sizing:border-box;">
                                    </div>
                                    <span style="font-size:0.65rem;color:#9ca3af;">Neutral - not yet validated or no issues found.</span>
                                </div>

                                <!-- Field 2: error -->
                                <div style="display:flex;flex-direction:column;gap:4px;">
                                    <div style="display:flex;align-items:center;gap:4px;margin-bottom:2px;">
                                        <span style="font-size:0.68rem;font-weight:500;color:#374151;">TaxRegistrationNumber<span style="color:#dc2626;margin-left:2px;font-weight:700;">*</span></span>
                                    </div>
                                    <div style="position:relative;">
                                        <input type="text" value="" placeholder="Required" readonly style="width:100%;padding:0.42rem 0.75rem;background:#fef2f2;border:1.5px solid #ef4444;border-radius:6px;color:#374151;font-size:0.78rem;cursor:default;height:32px;box-sizing:border-box;box-shadow:0 0 0 2px rgba(239,68,68,0.08);">
                                    </div>
                                    <span style="font-size:0.65rem;background:#fef2f2;border:1px solid #fca5a5;border-radius:4px;padding:0.18rem 0.5rem;color:#dc2626;display:inline-flex;align-items:center;gap:0.3rem;"><i class="fas fa-times-circle" style="font-size:0.58rem;"></i> Required field is empty.</span>
                                </div>

                                <!-- Field 3: warning -->
                                <div style="display:flex;flex-direction:column;gap:4px;">
                                    <div style="display:flex;align-items:center;gap:4px;margin-bottom:2px;">
                                        <span style="font-size:0.68rem;font-weight:500;color:#374151;">Telephone</span>
                                    </div>
                                    <div style="position:relative;">
                                        <input type="text" value="+359 2 xxxxxxx" readonly style="width:100%;padding:0.42rem 0.75rem;background:#fffbeb;border:1.5px solid #f59e0b;border-radius:6px;color:#111827;font-size:0.78rem;cursor:default;height:32px;box-sizing:border-box;box-shadow:0 0 0 2px rgba(245,158,11,0.08);">
                                    </div>
                                    <span style="font-size:0.65rem;background:#fffbeb;border:1px solid #fcd34d;border-radius:4px;padding:0.18rem 0.5rem;color:#b45309;display:inline-flex;align-items:center;gap:0.3rem;"><i class="fas fa-exclamation-triangle" style="font-size:0.58rem;"></i> Format may be invalid.</span>
                                </div>

                                <!-- Field 4: valid -->
                                <div style="display:flex;flex-direction:column;gap:4px;">
                                    <div style="display:flex;align-items:center;gap:4px;margin-bottom:2px;">
                                        <span style="font-size:0.68rem;font-weight:500;color:#374151;">Country<span style="color:#dc2626;margin-left:2px;font-weight:700;">*</span></span>
                                    </div>
                                    <div style="position:relative;">
                                        <input type="text" value="BG" readonly style="width:100%;padding:0.42rem 2rem 0.42rem 0.75rem;background:white;border:1.5px solid #10b981;border-radius:6px;color:#111827;font-size:0.78rem;cursor:default;height:32px;box-sizing:border-box;box-shadow:0 0 0 2px rgba(16,185,129,0.08);">
                                        <i class="fas fa-check" style="position:absolute;right:8px;top:50%;transform:translateY(-50%);color:#10b981;font-size:0.7rem;pointer-events:none;"></i>
                                    </div>
                                    <span style="font-size:0.65rem;color:#9ca3af;">Value is valid.</span>
                                </div>

                                <!-- Field 5: auto-corrected -->
                                <div style="display:flex;flex-direction:column;gap:4px;">
                                    <div style="display:flex;align-items:center;gap:4px;margin-bottom:2px;">
                                        <span style="font-size:0.68rem;font-weight:500;color:#374151;">City</span>
                                    </div>
                                    <div style="position:relative;">
                                        <input type="text" value="Бофия" readonly style="width:100%;padding:0.42rem 0.75rem;background:#f9fafb;border:1.5px solid #9ca3af;border-radius:6px;color:#111827;font-size:0.78rem;cursor:default;height:32px;box-sizing:border-box;box-shadow:0 0 0 2px rgba(156,163,175,0.08);">
                                    </div>
                                    <span style="font-size:0.65rem;background:#f9fafb;border:1px solid #d1d5db;border-radius:4px;padding:0.18rem 0.5rem;color:#6b7280;display:inline-flex;align-items:center;gap:0.3rem;"><i class="fas fa-magic" style="font-size:0.58rem;"></i> Auto-corrected by Magi.</span>
                                </div>

                            </div>
                        </div>

                        <!-- Field state callouts -->
                        <div style="display:flex;flex-direction:column;gap:0.5rem;font-size:0.77rem;color:#374151;line-height:1.6;margin-bottom:0.85rem;">
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">1</span>
                                <p class="hmw-u-body-p"><strong>Neutral</strong> (subtle border) - The field has a value and no issues. This is the resting state. Fields also start here when you first open a section.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">2</span>
                                <p class="hmw-u-body-p"><strong style="color:#ef4444;">Error</strong> (red border + message) - The field has a critical problem - for example it is empty but required (marked with a red <strong>*</strong>), or the value does not match the allowed format. You must fix these before the file can be submitted.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">3</span>
                                <p class="hmw-u-body-p"><strong style="color:#b45309;">Warning</strong> (amber border + message) - The field has a value but something looks suspicious - for example a phone number with placeholder characters. Warnings do not block submission.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">4</span>
                                <p class="hmw-u-body-p"><strong style="color:#10b981;">Valid</strong> (green border + tick) - The value just passed validation after you edited it. The green state clears automatically the next time you open the section.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">5</span>
                                <p class="hmw-u-body-p"><strong style="color:#9ca3af;">Auto-corrected</strong> (grey border + label) - Magi filled this field automatically. You can overwrite it freely - typing in the field removes the grey state immediately.</p>
                            </div>
                        </div>

                        <div class="hmw-callout info">
                            <i class="fas fa-info-circle"></i>
                            <div><strong>Validation updates the moment you leave a field.</strong> When you type in a field and then move away (press Tab or click elsewhere), the field validates itself instantly and the error/warning counts in the navbar and drawer update in real time. You do not need to click Validate All for individual field changes.</div>
                        </div>

                        <!-- ── Sub-zone D: nomenclature browser ── -->
                        <p style="font-size:0.82rem;font-weight:700;color:#111827;margin:0.85rem 0 0.35rem;">D - Nomenclature browser</p>
                        <p class="hmw-u-body-mb4">Some fields must contain a code from a fixed SAF-T list - for example a country code, a unit of measure, or a tax type. These fields display a <strong>Browse</strong> button directly below the input. Clicking it opens the nomenclature browser, a searchable panel that lets you find and select the correct code without memorising any codes.</p>

                        <!-- Browse button replica -->
                        <div style="background:white;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin:0.55rem 0 1rem;box-shadow:0 1px 4px rgba(0,0,0,0.06);">
                            <div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem 1.25rem;padding:1rem;">
                                <div style="display:flex;flex-direction:column;gap:4px;">
                                    <div style="display:flex;align-items:center;gap:4px;margin-bottom:2px;">
                                        <span style="font-size:0.68rem;font-weight:500;color:#374151;">Country<span style="color:#dc2626;margin-left:2px;font-weight:700;">*</span></span>
                                    </div>
                                    <div style="position:relative;">
                                        <input type="text" value="BG" readonly style="width:100%;padding:0.42rem 0.75rem;background:white;border:1px solid #d1d5db;border-radius:6px;color:#111827;font-size:0.78rem;cursor:default;height:32px;box-sizing:border-box;">
                                    </div>
                                    <button style="margin-top:0.5rem;display:inline-flex;align-items:center;gap:0.5rem;padding:0 0.8rem;background:rgba(59,130,246,0.05);border:1px solid rgba(59,130,246,0.2);border-radius:6px;color:#3b82f6;font-size:0.8125rem;font-weight:600;cursor:default;width:fit-content;height:36px;">
                                        <i class="fas fa-search" style="font-size:0.65rem;"></i> Browse ISO3166-2-CountryCodes
                                    </button>
                                </div>
                                <div style="display:flex;flex-direction:column;gap:4px;">
                                    <div style="display:flex;align-items:center;gap:4px;margin-bottom:2px;">
                                        <span style="font-size:0.68rem;font-weight:500;color:#374151;">UOMBase<span style="color:#dc2626;margin-left:2px;font-weight:700;">*</span></span>
                                    </div>
                                    <div style="position:relative;">
                                        <input type="text" value="" placeholder="Required" readonly style="width:100%;padding:0.42rem 0.75rem;background:#fef2f2;border:1.5px solid #ef4444;border-radius:6px;color:#374151;font-size:0.78rem;cursor:default;height:32px;box-sizing:border-box;">
                                    </div>
                                    <button style="margin-top:0.5rem;display:inline-flex;align-items:center;gap:0.5rem;padding:0 0.8rem;background:rgba(59,130,246,0.05);border:1px solid rgba(59,130,246,0.2);border-radius:6px;color:#3b82f6;font-size:0.8125rem;font-weight:600;cursor:default;width:fit-content;height:36px;">
                                        <i class="fas fa-search" style="font-size:0.65rem;"></i> Browse UOM
                                    </button>
                                </div>
                            </div>
                        </div>

                        <!-- Nomenclature browser modal replica (dark) -->
                        <p style="font-size:0.78rem;font-weight:600;color:#374151;margin:0.85rem 0 0.3rem;">Inside the nomenclature browser</p>
                        <div style="background:rgba(15,35,58,0.97);border:1px solid rgba(94,159,246,0.3);border-radius:10px;overflow:hidden;margin:0 0 1rem;box-shadow:0 8px 24px rgba(0,0,0,0.35);">
                            <!-- Modal header -->
                            <div style="display:flex;align-items:center;justify-content:space-between;padding:0.75rem 1.2rem;border-bottom:1px solid rgba(255,255,255,0.08);">
                                <span style="font-size:0.85rem;font-weight:600;color:white;display:flex;align-items:center;gap:0.4rem;">
                                    <i class="fas fa-list" style="color:rgba(255,255,255,0.65);"></i> Browse ISO3166-2-CountryCodes
                                </span>
                                <button style="width:26px;height:26px;background:rgba(255,255,255,0.08);border:1px solid rgba(255,255,255,0.12);border-radius:5px;color:rgba(255,255,255,0.6);font-size:0.75rem;display:flex;align-items:center;justify-content:center;cursor:default;"><i class="fas fa-times"></i></button>
                            </div>
                            <!-- Search bar -->
                            <div style="padding:0.65rem 1.2rem;border-bottom:1px solid rgba(255,255,255,0.05);">
                                <div style="display:flex;align-items:center;gap:0.4rem;background:rgba(0,0,0,0.3);border:1px solid rgba(255,255,255,0.1);border-radius:6px;padding:0.35rem 0.7rem;">
                                    <i class="fas fa-search" style="color:rgba(255,255,255,0.35);font-size:0.72rem;flex-shrink:0;"></i>
                                    <span style="font-size:0.73rem;color:rgba(255,255,255,0.3);flex:1;">Search by code or description...</span>
                                </div>
                            </div>
                            <!-- Results table -->
                            <div style="padding:0.5rem 1.2rem 0.5rem;">
                                <table style="width:100%;border-collapse:collapse;font-size:0.74rem;">
                                    <thead>
                                        <tr>
                                            <th style="width:120px;padding:0.5rem 0.6rem;text-align:left;border-bottom:1px solid rgba(255,255,255,0.1);color:rgba(255,255,255,0.5);font-weight:500;">Code</th>
                                            <th style="padding:0.5rem 0.6rem;text-align:left;border-bottom:1px solid rgba(255,255,255,0.1);color:rgba(255,255,255,0.5);font-weight:500;">Description</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <tr style="background:rgba(255,255,255,0.04);">
                                            <td style="padding:0.45rem 0.6rem;color:rgba(255,255,255,0.65);border-radius:3px 0 0 3px;">BG</td>
                                            <td style="padding:0.45rem 0.6rem;color:rgba(255,255,255,0.75);">Bulgaria</td>
                                        </tr>
                                        <tr style="background:rgba(30,127,207,0.22);border:1px solid rgba(30,127,207,0.4);">
                                            <td style="padding:0.45rem 0.6rem;color:#60a5fa;font-weight:600;">DE</td>
                                            <td style="padding:0.45rem 0.6rem;color:rgba(255,255,255,0.85);">Germany</td>
                                        </tr>
                                        <tr>
                                            <td style="padding:0.45rem 0.6rem;color:rgba(255,255,255,0.65);">GB</td>
                                            <td style="padding:0.45rem 0.6rem;color:rgba(255,255,255,0.55);">United Kingdom</td>
                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                            <!-- Modal footer -->
                            <div style="display:flex;justify-content:space-between;align-items:center;padding:0.7rem 1.2rem;border-top:1px solid rgba(255,255,255,0.07);">
                                <button style="padding:0.38rem 0.8rem;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.12);border-radius:6px;color:rgba(255,255,255,0.65);font-size:0.73rem;cursor:default;display:flex;align-items:center;gap:0.3rem;"><i class="fas fa-times"></i> Cancel</button>
                                <button style="padding:0.38rem 0.85rem;background:linear-gradient(135deg,#1e7fcf,#3b9eff);border:1px solid rgba(30,127,207,0.5);border-radius:6px;color:white;font-size:0.73rem;font-weight:700;cursor:default;display:flex;align-items:center;gap:0.3rem;"><i class="fas fa-check"></i> Select</button>
                            </div>
                        </div>

                        <div style="display:flex;flex-direction:column;gap:0.5rem;font-size:0.77rem;color:#374151;line-height:1.6;margin-bottom:0.85rem;">
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">1</span>
                                <p class="hmw-u-body-p"><strong>Browse button</strong> - Appears below an input field only when that field must contain a code from a fixed SAF-T nomenclature list. It shows the name of the specific list (e.g. UOM, ISO3166-2-CountryCodes) so you know which catalogue you are browsing. The button does not appear on free-text fields or on disabled fields.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">2</span>
                                <p class="hmw-u-body-p"><strong>Search</strong> - Filters the list in real time as you type. Matching works on both the code and the description, so you can type a word like "kilogram" or a partial code like "KGM" and the list narrows immediately.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">3</span>
                                <p class="hmw-u-body-p"><strong>Row selection</strong> - Click a row once to highlight it (blue) and enable the Select button. Double-click to select and confirm in one step without clicking Select.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">4</span>
                                <p class="hmw-u-body-p"><strong>Select button</strong> - Writes the chosen code into the field, closes the browser, and immediately triggers validation on the field - so if the code resolves the error, the red border and error message disappear right away.</p>
                            </div>
                        </div>

                        <div class="hmw-callout tip">
                            <i class="fas fa-lightbulb"></i>
                            <div>When the browser opens it automatically scrolls to and highlights the code currently in the field - so if a value is already there you can see it in context, confirm it is correct, and close with <strong>Cancel</strong> without making any change.</div>
                        </div>

                        <img class="hmw-u-img-frame" src="/static/images/guide/en/saft-editor/editor-3-field-states.6e49550eed9e.png?v=2" alt="SAF-T Editor main content area - screenshot showing a Customer record form with five fields side by side in a dark card: CompanyName with neutral grey border, TaxRegistrationNumber empty with red border and red error message below, Telephone with amber border and amber warning message, Country BG with green border and checkmark icon, City Sofia with grey border and grey Auto-corrected label. The filtering strip above shows the Errors pill active and highlighting 2 records. Add numbered callout labels for each field state.">
                    </div>
                    <div class="hmw-subsection-image">
                        <img class="hmw-u-img-frame" src="/static/images/guide/en/saft-editor/editor-3-form-overview.d01f501f570d.png?v=2" alt="SAF-T Editor main editing area - full-height screenshot showing the editor header with breadcrumb MasterFiles β€Ί Customers β€Ί Record 5 of 48, the Up and Next Section navigation buttons, the filtering strip with All/Errors/Warnings/Auto-corrected pills, and below it a grid of field cards for the Customer record.">
                    </div>
                </div>
            </div>


            <!-- ════════════════════════════════════════
                 7.4 - THE VALIDATION DRAWER
                 ════════════════════════════════════════ -->
            <div class="hmw-subsection" id="hmw-editor-drawer">
                <div class="hmw-subsection-header">
                    <span class="hmw-subsection-num">8.4</span>
                    <h3 class="hmw-subsection-title">The validation drawer</h3>
                </div>
                <div class="hmw-subsection-body">
                    <div class="hmw-subsection-info">
                        <p class="hmw-subsection-desc">The validation drawer is a panel fixed to the bottom of the screen that gives you a live list of every error and warning in the entire file - across all sections, not just the one currently open. The <strong>handle</strong> is always visible so you can see your total error and warning counts at a glance. Click the handle to expand the full list.</p>

                        <!-- ── The handle ── -->
                        <p style="font-size:0.82rem;font-weight:700;color:#111827;margin:0.85rem 0 0.35rem;">A - The handle (always visible)</p>

                        <!-- Handle replica (light-theme: blue gradient, same as saft-navbar in light mode) -->
                        <div style="border-radius:8px 8px 0 0;border:1px solid rgba(255,255,255,0.15);border-bottom:none;margin:0.55rem 0 0.35rem;position:relative;overflow:hidden;background: linear-gradient(135deg, #0a1929 0%, #0f3a5c 50%, #1a5a8e 100%);">
                            <div style="display:flex;align-items:center;justify-content:space-between;padding:0 1.1rem;height:48px;">
                                <!-- Left side -->
                                <div style="display:flex;align-items:center;gap:0.65rem;">
                                    <i class="fas fa-clipboard-check" style="color:rgba(255,255,255,0.92);font-size:0.88rem;"></i>
                                    <span style="font-size:0.82rem;font-weight:600;color:white;">Validation Issues</span>
                                    <div style="display:flex;align-items:center;gap:0.35rem;font-size:0.72rem;">
                                        <span style="min-width:22px;height:18px;padding:0 5px;background:#dc2626;border:1px solid rgba(255,255,255,0.18);border-radius:8px;color:white;font-weight:700;display:inline-flex;align-items:center;justify-content:center;">3</span>
                                        <span style="color:rgba(255,255,255,0.72);">errors</span>
                                        <span style="color:rgba(255,255,255,0.38);">β€’</span>
                                        <span style="min-width:22px;height:18px;padding:0 5px;background:#f39c12;border:1px solid rgba(255,255,255,0.18);border-radius:8px;color:white;font-weight:700;display:inline-flex;align-items:center;justify-content:center;">7</span>
                                        <span style="color:rgba(255,255,255,0.72);">warnings</span>
                                    </div>
                                </div>
                                <!-- Right side -->
                                <div style="display:flex;align-items:center;gap:0.5rem;">
                                    <button style="width:28px;height:28px;background:rgba(255,255,255,0.12);border:1px solid rgba(255,255,255,0.18);border-radius:6px;color:rgba(255,255,255,0.85);font-size:0.75rem;display:flex;align-items:center;justify-content:center;cursor:default;" title="Re-validate"><i class="fas fa-sync-alt"></i></button>
                                    <i class="fas fa-chevron-up" style="color:rgba(255,255,255,0.75);font-size:0.72rem;margin-left:0.25rem;"></i>
                                </div>
                            </div>
                            <!-- Thin progress bar - bottom edge of handle -->
                            <div style="position:absolute;bottom:0;left:0;right:0;height:3px;background:rgba(0,0,0,0.08);">
                                <div style="width:65%;height:100%;background:#16a34a;border-radius:0 2px 2px 0;"></div>
                            </div>
                        </div>

                        <div style="display:flex;flex-direction:column;gap:0.5rem;font-size:0.77rem;color:#374151;line-height:1.6;margin:0.55rem 0 0.85rem;">
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">1</span>
                                <p class="hmw-u-body-p"><strong>Error and warning counts</strong> - Red badge = validation errors, amber badge = warnings. These match the counts shown in the navbar progress bar. Both update in real time as you fix fields.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">2</span>
                                <p class="hmw-u-body-p"><strong>Re-validate button (<i class="fas fa-sync-alt" style="font-size:0.68rem;"></i>)</strong> - Runs a full re-validation of all sections without opening the drawer. Useful after bulk edits to refresh counts quickly. The same as the Validate All button in the action bar.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">3</span>
                                <p class="hmw-u-body-p"><strong>Chevron (<i class="fas fa-chevron-up" style="font-size:0.68rem;"></i>)</strong> - Click anywhere on the handle to expand or collapse the drawer. When expanded the chevron flips to point down. The drawer can be resized by dragging its top edge.</p>
                            </div>
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">4</span>
                                <p class="hmw-u-body-p"><strong>Progress bar</strong> - The thin green strip along the very bottom edge of the handle grows left to right as you resolve issues. At 100% (all errors and warnings cleared) it glows solid green.</p>
                            </div>
                        </div>

                        <!-- ── Expanded drawer ── -->
                        <p style="font-size:0.82rem;font-weight:700;color:#111827;margin:0.85rem 0 0.35rem;">B - The expanded drawer</p>

                        <!-- Expanded drawer replica (light theme) -->
                        <div style="background:#f4f9fd;border:1px solid #c8dced;border-top:none;border-radius:0 0 8px 8px;overflow:hidden;margin:0 0 1rem;box-shadow:0 4px 12px rgba(26,90,142,0.1);">

                            <!-- Toolbar -->
                            <div style="display:flex;align-items:center;gap:0.55rem;padding:0.65rem 1rem;background:#eaf2fb;border-bottom:1px solid #d4e4f0;flex-wrap:wrap;">
                                <!-- Search -->
                                <div style="display:flex;align-items:center;gap:0.35rem;background:white;border:1px solid #c8dcea;border-radius:6px;padding:0.35rem 0.65rem;min-width:160px;flex:1;max-width:220px;">
                                    <i class="fas fa-search" style="color:#5e7a9a;font-size:0.75rem;flex-shrink:0;"></i>
                                    <span style="font-size:0.74rem;color:#8aa2be;">Search validation issues...</span>
                                </div>
                                <!-- Pills -->
                                <div style="display:flex;gap:0.3rem;align-items:center;flex-wrap:wrap;">
                                    <div style="padding:0.32rem 0.6rem;background:#3b82f6;border:1px solid #3b82f6;border-radius:14px;color:white;font-size:0.7rem;font-weight:500;display:flex;align-items:center;gap:0.28rem;height:26px;">
                                        <span>All</span><span style="background:rgba(255,255,255,0.25);padding:0.04rem 0.3rem;border-radius:8px;font-size:0.65rem;font-weight:700;">10</span>
                                    </div>
                                    <div style="padding:0.32rem 0.6rem;background:white;border:1px solid #c8dcea;border-radius:14px;color:#0f1e35;font-size:0.7rem;font-weight:500;display:flex;align-items:center;gap:0.28rem;height:26px;">
                                        <span>Errors</span><span style="background:rgba(0,0,0,0.08);padding:0.04rem 0.3rem;border-radius:8px;font-size:0.65rem;font-weight:700;color:#0f1e35;">3</span>
                                    </div>
                                    <div style="padding:0.32rem 0.6rem;background:white;border:1px solid #c8dcea;border-radius:14px;color:#0f1e35;font-size:0.7rem;font-weight:500;display:flex;align-items:center;gap:0.28rem;height:26px;">
                                        <span>Warnings</span><span style="background:rgba(0,0,0,0.08);padding:0.04rem 0.3rem;border-radius:8px;font-size:0.65rem;font-weight:700;color:#0f1e35;">7</span>
                                    </div>
                                    <div style="padding:0.32rem 0.6rem;background:white;border:1px solid #c8dcea;border-radius:14px;color:#0f1e35;font-size:0.7rem;font-weight:500;display:flex;align-items:center;gap:0.28rem;height:26px;">
                                        <span>Auto-corrected</span><span style="background:rgba(0,0,0,0.08);padding:0.04rem 0.3rem;border-radius:8px;font-size:0.65rem;font-weight:700;color:#0f1e35;">0</span>
                                    </div>
                                </div>
                                <!-- Action buttons -->
                                <div style="display:flex;gap:0.25rem;align-items:center;margin-left:auto;">
                                    <button style="width:26px;height:26px;background:white;border:1px solid #c8dcea;border-radius:5px;color:#0f1e35;font-size:0.7rem;display:flex;align-items:center;justify-content:center;cursor:default;" title="Previous error (Alt+↑)"><i class="fas fa-chevron-up"></i></button>
                                    <button style="width:26px;height:26px;background:white;border:1px solid #c8dcea;border-radius:5px;color:#0f1e35;font-size:0.7rem;display:flex;align-items:center;justify-content:center;cursor:default;" title="Next error (Alt+↓)"><i class="fas fa-chevron-down"></i></button>
                                    <button style="width:26px;height:26px;background:white;border:1px solid #c8dcea;border-radius:5px;color:#0f1e35;font-size:0.7rem;display:flex;align-items:center;justify-content:center;cursor:default;" title="Expand all"><i class="fas fa-expand-alt"></i></button>
                                    <button style="width:26px;height:26px;background:white;border:1px solid #c8dcea;border-radius:5px;color:#0f1e35;font-size:0.7rem;display:flex;align-items:center;justify-content:center;cursor:default;" title="Collapse all"><i class="fas fa-compress-alt"></i></button>
                                </div>
                            </div>

                            <!-- Error items -->
                            <div style="padding:0.6rem 0.75rem;display:flex;flex-direction:column;gap:0.4rem;">

                                <!-- Error item 1 - error severity -->
                                <div style="display:flex;align-items:flex-start;gap:0.65rem;padding:0.6rem 0.85rem;background:white;border:1px solid #d4e4f0;border-left:3px solid #ef4444;border-radius:6px;box-shadow:0 1px 4px rgba(26,90,142,0.07);">
                                    <div style="flex:1;min-width:0;">
                                        <div style="font-size:0.75rem;font-weight:600;color:#0f1e35;margin-bottom:2px;">Required field is empty.</div>
                                        <div style="font-size:0.68rem;color:#3d5a7a;display:flex;align-items:center;gap:0.25rem;flex-wrap:wrap;">
                                            <span>Customers</span>
                                            <i class="fas fa-chevron-right" style="font-size:0.52rem;opacity:0.5;"></i>
                                            <span>TaxRegistrationNumber</span>
                                            <span style="margin-left:0.3rem;background:rgba(220,38,38,0.08);border:1px solid rgba(220,38,38,0.2);border-radius:8px;padding:0.05rem 0.4rem;color:#dc2626;font-size:0.62rem;font-weight:600;">Error</span>
                                        </div>
                                    </div>
                                    <button style="flex-shrink:0;padding:0.28rem 0.6rem;background:white;border:1px solid #aec1d8;border-radius:5px;color:#3b82f6;font-size:0.68rem;font-weight:600;cursor:default;white-space:nowrap;">Jump</button>
                                </div>

                                <!-- Error item 2 - warning severity -->
                                <div style="display:flex;align-items:flex-start;gap:0.65rem;padding:0.6rem 0.85rem;background:white;border:1px solid #d4e4f0;border-left:3px solid #f59e0b;border-radius:6px;box-shadow:0 1px 4px rgba(26,90,142,0.07);">
                                    <div style="flex:1;min-width:0;">
                                        <div style="font-size:0.75rem;font-weight:600;color:#0f1e35;margin-bottom:2px;">Telephone format may be invalid.</div>
                                        <div style="font-size:0.68rem;color:#3d5a7a;display:flex;align-items:center;gap:0.25rem;flex-wrap:wrap;">
                                            <span>Customers</span>
                                            <i class="fas fa-chevron-right" style="font-size:0.52rem;opacity:0.5;"></i>
                                            <span>Telephone</span>
                                            <span style="margin-left:0.3rem;background:rgba(245,158,11,0.08);border:1px solid rgba(245,158,11,0.2);border-radius:8px;padding:0.05rem 0.4rem;color:#b45309;font-size:0.62rem;font-weight:600;">Warning</span>
                                        </div>
                                    </div>
                                    <button style="flex-shrink:0;padding:0.28rem 0.6rem;background:white;border:1px solid #aec1d8;border-radius:5px;color:#3b82f6;font-size:0.68rem;font-weight:600;cursor:default;white-space:nowrap;">Jump</button>
                                </div>

                                <!-- Error item 3 - error severity, different section -->
                                <div style="display:flex;align-items:flex-start;gap:0.65rem;padding:0.6rem 0.85rem;background:white;border:1px solid #d4e4f0;border-left:3px solid #ef4444;border-radius:6px;box-shadow:0 1px 4px rgba(26,90,142,0.07);">
                                    <div style="flex:1;min-width:0;">
                                        <div style="font-size:0.75rem;font-weight:600;color:#0f1e35;margin-bottom:2px;">Required field is empty.</div>
                                        <div style="font-size:0.68rem;color:#3d5a7a;display:flex;align-items:center;gap:0.25rem;flex-wrap:wrap;">
                                            <span>GeneralLedgerEntries</span>
                                            <i class="fas fa-chevron-right" style="font-size:0.52rem;opacity:0.5;"></i>
                                            <span>Journal β€Ί Transaction β€Ί DebitAmount</span>
                                            <span style="margin-left:0.3rem;background:rgba(220,38,38,0.08);border:1px solid rgba(220,38,38,0.2);border-radius:8px;padding:0.05rem 0.4rem;color:#dc2626;font-size:0.62rem;font-weight:600;">Error</span>
                                        </div>
                                    </div>
                                    <button style="flex-shrink:0;padding:0.28rem 0.6rem;background:white;border:1px solid #aec1d8;border-radius:5px;color:#3b82f6;font-size:0.68rem;font-weight:600;cursor:default;white-space:nowrap;">Jump</button>
                                </div>

                            </div>
                        </div>

                        <!-- Callouts for expanded drawer -->
                        <div style="display:flex;flex-direction:column;gap:0.5rem;font-size:0.77rem;color:#374151;line-height:1.6;margin-bottom:0.85rem;">
                            <div class="hmw-u-row-top-sm">
                                <span class="hmw-u-num-sm">1</span>
                                <p class="hmw-u-body-p"><strong>Search</strong> - Filters the error list by field name or message text. Works together with the filter pills - for example you can search for
2

Filter pills - Same four categories as the filtering strip in the editing area: All, Errors, Warnings, Auto-corrected. Active pill is highlighted blue. Switching pills here does not change what the editing area shows.

3

Prev / Next buttons () - Jump to the previous or next issue in the list. This also loads the relevant section in the editing area and scrolls to the affected field. Keyboard shortcut: Alt+↑ and Alt+↓.

4

Expand / Collapse all () - When there are many issues they can be grouped by section. These two buttons expand or collapse all groups at once.

5

Error item - Each row shows: a coloured dot (red = error, amber = warning), the error message, the full path to the field (section β€Ί field name), a severity label, and a Jump button. Clicking Jump loads the exact section and highlights the field - you do not need to navigate the tree manually.

The drawer shows issues across all sections, not just the one you are currently editing. This makes it the fastest way to get a full picture of what still needs attention before generating the file.

C - Cross-section consistency errors and Magi's one-click fix

When your report is generated, Magi checks that every piece of information referenced in one part of your file actually exists in the section it belongs to. For example, if an invoice mentions a customer with a particular ID, Magi checks that this customer appears in your customer list. If it doesn't, a cross-section consistency error appears in the validation drawer.

These errors look like any other error - red, with an ERROR badge - but they are grouped under a location labelled Cross-section Validation β€Ί Customers (or Suppliers). Each error message starts with a rule code (e.g. GL.22) and explains exactly which ID is missing and where it is expected. A count badge (Γ—3, Γ—4…) shows how many records share the same problem. The group header carries a Resolve All button; each individual item has a Resolve button.

Cross-section Validation β€Ί Customers 3
GL.22 CustomerID 'CUST-0042' in SalesInvoices does not exist in MasterFiles.Customers (MF.C.2). Please add this customer to the MasterFiles section.
ERROR Γ—3 Cross-section Validation β€Ί Customers
GL.22 CustomerID 'CUST-0117' in SalesInvoices does not exist in MasterFiles.Customers (MF.C.2). Please add this customer to the MasterFiles section.
ERROR Γ—1 Cross-section Validation β€Ί Customers

You have two ways to resolve these issues - both are SAF-T compliant and handled entirely by Magi:

1

Resolve All (recommended) - Click the Resolve All button in the group header. A window opens listing every missing ID as a checklist - all selected by default. Uncheck anything you'd prefer to handle differently, then click Add Selected. Magi creates placeholder records for all chosen IDs instantly, the errors disappear from the drawer, and you can fill in the full details (name, address, tax number) in the editor at your own pace.

2

Resolve one at a time - Click the Resolve button on any individual error. A window opens for that specific ID with two options: add that one record immediately, or navigate to the invoice or payment that references it so you can inspect it first. Useful when you need to check the context before deciding.

The Resolve All window - add all missing records at once

Add All Missing Customers

The following customer IDs appear in your invoices and payments but are not in your customer list. Select which ones to add - you can fill in their full details in the editor afterwards.

Β·

The Resolve window - one record at a time

Fix This Issue

Customer ID 'CUST-0042' appears in invoice 2024-0118 but is not in your customer list. How would you like to handle it?

After adding a missing record, the related errors disappear immediately and the new entry appears in the customer or supplier list in the editor. The new row is highlighted and marked NEW so you can find it quickly. You can then click into the row to fill in full details such as the company name, address, and tax registration number.
SAF-T Editor validation drawer - screenshot focused on the cross-section validation error group. Show a location group header labelled Cross-section Validation β€Ί Customers with a red count badge showing 3 and a red Resolve All button on the right. Below it show two expanded error items, each with a red left border, a red dot, the error message starting with a rule code (e.g. GL.22 CustomerID CUST-0042 in SalesInvoices does not exist in MasterFiles.Customers. Please add this customer.), a red ERROR badge, a grey count multiplier (Γ—3), the location path Cross-section Validation β€Ί Customers, and a blue Resolve button on the right. Circle the Resolve All button with a callout arrow and label it 1. Circle one of the individual Resolve buttons with a callout arrow and label it 2.
Close-up of the validation drawer handle bar at the bottom of the SAF-T Editor page - showing only the collapsed handle strip: Validation Issues title on the left with red error badge 3 and amber warning badge 7, re-validate button and chevron on the right, and the thin green progress bar along the bottom edge filled to about 65%. The rest of the page is dimmed to draw attention to the handle.
8.5

Generating your SAF-T file

Clicking Generate SAF-T - either in the top navbar or the floating action bar - starts the final step: turning your edited data into a valid SAF-T XML file. Depending on whether unresolved issues exist, you will see one of two screens before the file is ready.

A - Validation Issues window

If your file still has errors or warnings this window appears first. If the file is completely clean it is skipped and generation starts immediately.

Validation Issues Found

3 errors 7 warnings

Your SAF-T file has unresolved issues. Generating now may produce an XML that fails NRA validation.

Critical errors must be fixed before submitting to the NRA. You can still generate a preview for review.
1

Error badge / Warning badge - Show the exact counts at the moment you clicked Generate. If there are no errors the error badge is hidden; same for warnings.

2

Red hint block - Appears only when there are errors (not just warnings). Reminds you that the NRA will reject a file with critical errors. The Generate Anyway button turns amber instead of green when errors are present.

3

Cancel - Closes the window and returns you to the editor. No file is generated. Use this to go back and fix errors first.

4

Generate Anyway - Proceeds despite the issues. The file is generated and saved - you can download it and inspect it, or keep editing and generate again. Generating multiple times is safe; each version is stored separately in your Reports archive.

B - Generation overlay

Once you confirm, the generation overlay takes over the screen and shows live progress as Magi builds your XML file. This screen stays open until the file is ready or an error occurs.

Magi
Generating SAF-T Report
АкмС Π˜Π½Π΄ΡƒΡΡ‚Ρ€ΠΈΠΈ АД
Monthly
Period Jan 2025
Software ALMA
Reports 7
Codes Mapped 142
Generation Steps 8s
Validate
Header
MasterFiles
GeneralLedger
SourceDocs
Build File
Save File
SAF-T Sections - Monthly
Header
Done
MasterFiles
Done
GeneralLedger
Building…
SourceDocs
Pending
Building GeneralLedgerEntries… 52%
Generating your SAF-T report…
Do not close this tab.
1

Header row - Shows the Magi logo, the title Generating SAF-T Report, the name of your company, and the SAF-T type badge (Monthly / Annual / On Demand).

2

Meta row - Four summary figures: Period (the date range selected during upload), Software (e.g. ALMA), number of Reports uploaded, and number of Codes Mapped. These confirm you are generating for the right company and period.

3

Generation Steps - A strip of pill badges - one per processing step. Green with a tick = completed. Blue with a spinner = running. Grey = still waiting. The elapsed-time counter in the top-right of this strip counts up in seconds.

4

SAF-T Sections - Cards for each section of the SAF-T XML being built (Header, MasterFiles, GeneralLedgerEntries, SourceDocuments). Each card turns green when its section is fully serialised, blue while building, grey while pending.

5

Progress bar - Overall percentage completion. The label below it describes the current step. When it reaches 100% and the status footer shows a success message the file is ready.

6

Status footer - Left side shows a green pulse dot + current status message. Right side reminds you not to close the tab. When generation finishes successfully a download button appears here automatically.

Generation usually takes 5–30 seconds for small files and up to a few minutes for large ones. The screen updates live - you do not need to refresh. If an error occurs a red message appears and you can retry without losing any of your edits.
SAF-T generation overlay - full-screen dark screenshot showing: top header with Magi logo, Generating SAF-T Report title, company name АкмС Π˜Π½Π΄ΡƒΡΡ‚Ρ€ΠΈΠΈ АД, and Monthly badge. Below it the meta row with Period, Software, Reports, Codes Mapped. Then the Generation Steps strip with Validate/Header/MasterFiles completed in green, GeneralLedger spinning in blue, SourceDocs and Serialise XML and Save File pending in grey. Below it four SAF-T section cards with same color coding. Then a blue progress bar at 52% and label Building GeneralLedgerEntries. Footer with green pulse dot and status text.
8.6

Extra tools

Four power tools are tucked into the floating action bar at the bottom of the editor and in the navbar. They do not change any SAF-T data directly - they change how you work with it. Open the action bar with the circle button in the lower-right corner whenever you need them.

The Generate SAF-T button is also in the action bar. It is the same button covered in section 8.5 - included here so you can see the bar in context.

A - Show Mandatory Only

The SAF-T schema contains dozens of optional fields alongside the ones the NRA requires. When your file already has a lot of errors, scrolling past empty optional fields makes it harder to find what matters. Show Mandatory Only hides every optional field so only the required ones are visible - one click in the action bar, and the form is instantly decluttered.

← button is highlighted when mode is active

Every form section also shows a blue reminder banner at the top while the filter is on:

Mandatory-only mode active
Only required fields are shown
1

Click Show Mandatory Only in the action bar to toggle the filter on. The button turns blue to indicate the mode is active. Click it again to restore all fields.

2

While the filter is active a blue banner appears at the top of every form, table, and section view. The Show All Fields button inside the banner is a shortcut to turn the filter off from wherever you are.

3

The filter only hides fields - it never deletes data. Optional fields you have already filled in are preserved; they are simply not displayed until you switch the mode off.

4

Column filters in table view also switch to mandatory-only mode and show a notice inside the column picker. This keeps the view consistent whether you are looking at form cards or table rows.

B - Undo / Redo

Every field edit you make is recorded as a step in the history of that section. Made a typo? Undo walks it back. Changed your mind about undoing? Redo moves forward again. The buttons sit in the top-right corner of the navbar.

1

Click Undo (or press Ctrl+Z) to reverse the last edit made in the currently open section. Click Redo (or press Ctrl+Y) to reapply it.

2

History is per-section - each tree item keeps its own undo stack. Navigating to a different section does not clear the history of the section you just left; you can come back and still undo.

3

The Undo button is greyed-out and disabled when there is nothing to undo in the current section. The Redo button is greyed-out when there is no undone action to reapply.

4

If another team member edits the same record while you are working, Magi will warn you that the remote change may conflict with your local undo history before you proceed.

C - Validate All

Clicking Validate All in the action bar runs a fresh server-side check against your entire SAF-T file and updates the validation drawer with the latest results. A small dialog appears first so you can choose how thorough the check should be.

Validate SAF-T Report

1

Full Validation re-checks every field across all four SAF-T sections plus the cross-section totals (debits = credits, customer IDs referenced in invoices exist in the Customers section, etc.). It takes 10–30 seconds depending on the size of your file.

2

Cross-Section Only skips per-field checks and only verifies the relationships between sections - running totals, referenced IDs, and balance consistency. It is much faster (under 5 seconds) and useful after fixing linking errors.

3

After validation completes, the drawer refreshes automatically with the updated error and warning counts. Any issues that you fixed since the last run will disappear; any new ones will appear.

D - Restart Process

If your source files have changed, your code mappings need fixing, or you simply want to start over, Restart Process lets you choose exactly how far back to rewind. Three options are available - from least destructive to most.

Restart Progress

Choose how far back you want to restart:

Restart Editing & Validation

Clear all auto-saved edits and regenerate SAF-T data from your uploaded reports and mapped codes. Stay on this page.

Keeps uploads Keeps mappings Clears edits

Restart from Code Mapping

Clear SAF-T data and go back to code mapping. Uploaded reports and extracted codes are kept.

Keeps uploads Keeps extracted codes Clears SAF-T data

How do you want to handle your existing mappings?

Fix My Mappings Recommended

Go back and adjust specific mappings. Your existing work is preserved as a starting point.

Keeps all existing mappings
Clear All Mappings

Remove all mapped codes and start the mapping process from scratch.

Deletes all mapped codes

Start from Scratch

Delete everything - uploaded reports, extracted codes, mappings, SAF-T data. Start fresh from the upload page.

Deletes all uploads Re-extracts codes from new uploads Deletes SAF-T data

How do you want to handle your existing mappings?

Keep My Mappings Recommended

Re-upload your files from scratch. Your existing code mappings will be preserved and ready when you reach the mapping step again.

Keeps all existing mappings
Clear All Mappings

Re-upload your files and start the mapping process from scratch as well.

Deletes all mapped codes
1

Restart Editing & Validation is the least destructive option. Your uploaded files and code mappings are left intact. Magi only clears your manual edits and re-runs the SAF-T generation from your existing mapped data. Use this if you want to see what the fresh generated output looks like.

2

Restart from Code Mapping clears your SAF-T data and sends you back to the mapping step. Uploaded reports and the codes extracted from them are kept, so you do not need to re-upload your files. When you select this option a sub-choice appears asking how to handle your existing mappings: choose Fix My Mappings (recommended) to keep all your mapped codes as a starting point, or Clear All Mappings to remove them and map everything from scratch.

3

Start from Scratch deletes all uploaded files, extracted codes, and SAF-T data, then takes you back to the upload page. This cannot be undone. A sub-choice then appears for your code mappings: Keep My Mappings (recommended) preserves all your mapped codes so they are ready when you reach the mapping step again after re-uploading, while Clear All Mappings wipes them completely for a fully fresh start.

4

Only the firm owner and administrators can trigger a restart. Editors and viewers see the button but it will not proceed without the right permissions. If you are a viewer or editor, ask your firm owner to perform the restart.

Restart Process modal - screenshot showing the dark dialog with three option cards: Restart Editing and Validation (selected, highlighted in blue), Restart from Code Mapping, and Start from Scratch (with red trash icon). Each card shows radio button, icon, title, description, and colour-coded keep/delete badges. Footer shows Cancel and a disabled Select an option confirm button.
Restart from Code Mapping selected - the modal shows the mappings sub-choice expanded below the badge row, with two cards: Fix My Mappings (selected, highlighted in blue) with a shield icon and Keeps all existing mappings badge, and Clear All Mappings (unselected) with an eraser icon and Deletes all mapped codes badge.
Start from Scratch selected - the modal shows the mappings sub-choice expanded below the badge row, with two cards: Keep My Mappings (selected, highlighted in blue) with a shield icon and Keeps all existing mappings badge, and Clear All Mappings (unselected) with an eraser icon and Deletes all mapped codes badge.
Step 9

Export your SAF-T file

Step 8 of 10
9.1

Reports Archive Overview

The Reports page opens automatically once your SAF-T file is generated. A green banner at the top confirms that generation succeeded and a Download Latest button appears in the footer for immediate access.

The page is divided into three zones:

  • Header strip - shows your company name, EIK number, and quick counters (total files, last generated date, monthly/annual counts).
  • Stat cards - four coloured cards break down the totals at a glance: Total, Last Generated, Monthly, Annual, On Demand.
  • Reports table - one row per generated file showing the filename, type badge, status badge, date, and action buttons.

Use the filter pills above the table (All / Monthly / Annual / On Demand) to show only the report type you are looking for.

If no reports have been generated yet, the page shows an empty-state panel with a three-step mini-flow guide and a call-to-action button to start the generation process.
3
Total Reports
2
Monthly
1
Annual
All 3 Monthly 2 Annual 1
File Type Status Actions
117644043_06_2025.xml
142 KB
Monthly Generated
Preview Download
117644043_2024.xml
1.8 MB
Annual Validated
Preview Download

Live replica of the Reports table

9.2

Report Statuses

Every report in the archive carries a status badge that tells you where it stands in the submission lifecycle.

Generated

The XML file was created successfully. It has not yet been checked against the official XSD schema or submitted to the NRA.

Validated

The file has been verified against the official BG SAF-T v1.0.2 XSD schema and is structurally correct. It is ready to submit to the NRA portal.

Submitted

The file has been delivered to the NRA. This status is set manually once you confirm submission on the NRA's own portal.

Magi does not connect directly to the NRA portal - you download the XML file and upload it yourself at https://portal.nra.bg/details/saft. Marking a report as Submitted is a record-keeping convenience, not an automatic action.
9.3

NRA File Naming Convention

The NRA mandates a precise naming pattern for every SAF-T file. Magi generates the correct filename automatically - you never need to rename the file manually before submitting it to the tax authority.

The filename is built from three pieces of information: your company's EIK number, the report type letter, and the reporting period.

Report Type Pattern Example
Monthly EIK_MM_YYYY.xml 117644043_06_2025.xml
Annual EIK_YYYY.xml 117644043_2025.xml
On Demand EIK_DD_MM_YYYY_DD_MM_YYYY.xml 117644043_01_06_2025_30_06_2025.xml

Reading the pieces:

  • EIK - your company's 9-digit (or 13-digit for branches) unique Bulgarian registration number, without the 'BG' VAT prefix.
  • MM - the two-digit month of the reporting period (01–12).
  • YYYY - the four-digit year of the reporting period.
  • DD_MM_YYYY … DD_MM_YYYY - for On Demand reports: the start date and end date of the custom period, each in day_month_year order.
Magi reads your EIK and period dates from the company profile and the upload step - the filename is generated for you automatically. You can just download and submit.
9.4

Download & Delete

Every row in the reports table has an Actions column with up to three buttons, depending on your role.

Preview

Opens the XML file in an in-browser viewer with syntax highlighting, a searchable table of contents, and a copy button. No download needed - great for a quick check before submission. See Step 9 for the full preview guide.

Download

Saves the XML file directly to your computer. The filename already matches the NRA convention - do not rename it before uploading to the NRA portal.

Delete

Permanently removes the XML file and its record from the archive. A confirmation modal appears first. Only users with the Owner, Co-owner, or Admin role can delete reports - Editors and Viewers do not see this button.

Deletion is permanent and cannot be undone. If you need to regenerate the same file, you will need to re-run the full generation process.
9.5

Starting a New Generation

Once a SAF-T file has been generated, the top-right button in the page header changes to New Generation. Clicking it opens a confirmation dialog that explains exactly what will happen next.

  • Code mappings are preserved - every account, tax code, UOM, and document type mapping you saved carries over to the new period automatically.
  • Uploaded files are cleared - you will need to export fresh reports from your accounting software and upload them again for the new period.
  • All previously generated reports remain in the archive - starting a new generation does not delete old files.

After confirming, Magi resets the session and takes you back to the Upload Reports page ready for the next period.

This workflow is designed for recurring periods - you upload the next month's or year's exports, the system reuses your previous mappings, and you get the new SAF-T file without redoing all the code-mapping work from scratch.
Step 10

Preview your SAF-T XML

Step 9 of 10
10.1

Page Layout

The preview page is divided into four areas stacked from top to bottom:

1

Sticky header - shows a breadcrumb trail (My Companies β†’ Reports β†’ Preview), the filename in large text, and a row of information chips: report type (Monthly/Annual/On Demand), status, generation date and time, file size, and company name. A coloured banner on the right side of the header tells you the validation state of the file.

2

Left sidebar - Table of Contents - a vertical list of the main SAF-T sections found in the file. Clicking a section name scrolls the XML viewer to that exact line. The active section is highlighted as you scroll.

3

XML viewer - the main body area. The file content is rendered with line numbers. A toolbar sits above the content with the search bar, Copy button, and Download button.

4

Bottom action bar - a collapsible bar pinned to the bottom of the screen containing Back to Reports, New Generation, and Download XML buttons. Click the small handle at the top of the bar to collapse it and give the XML viewer more vertical space.

10.2

XML Table of Contents

The left sidebar scans your file automatically and builds a clickable table of contents from the top-level SAF-T sections it finds. Only sections that are actually present in the file appear in the list - if a section is missing, it will not show up.

Sections the TOC recognises:

  • Header - company info, reporting period, and contact persons.
  • MasterFiles - top-level container, expands to sub-entries below.
  • GL Accounts - chart of accounts with opening and closing balances.
  • Customers - customer master data.
  • Suppliers - supplier master data.
  • Products - product and inventory catalogue.
  • Tax Table - tax codes and their rates.
  • UOM Table - units of measure.
  • GL Entries - general ledger journals and transaction lines.
  • Source Documents - sales invoices, purchase invoices, and payments.
Sub-sections (GL Accounts, Customers, Suppliers, etc.) are indented under MasterFiles in the sidebar. Clicking any of them jumps the XML viewer to exactly that tag without you having to scroll through thousands of lines manually.
10.4

Copy & Download

Two buttons in the XML viewer toolbar give you access to the file content without leaving the page:

Copy

Copies the entire XML content to your clipboard. The button label briefly changes to 'Copied!' to confirm success. Useful if you want to paste the content into a validator tool or send a snippet to a colleague.

Download

Downloads the XML file to your computer with the correct NRA filename. This is the same file you would get from the reports table - just accessible without navigating back.

The bottom action bar also carries a Download XML button in navy, plus a Back to Reports link and a New Generation button if you want to immediately start the next period's process.

You are done! - Download the XML, go to the NRA's e-services portal, and upload the file there. Magi's job is complete. Your code mappings are ready and waiting for the next period whenever you need them.
Introduction 1 - File Portal 2 - Register Account 3 - My Companies 4 - Register Company 5 - Edit Company 6 - Upload Reports 7 - Map Codes 8 - Edit & Validate 9 - Export SAF-T 10 - Preview SAF-T 11 - Legal Documents