How Magi Works
From your existing accounting software to a fully compliant SAF-T XML file - six steps, automated.
What is SAF-T and why does it matter?
SAF-T (Standard Audit File for Tax) is an international OECD standard for exchanging accounting data with tax authorities. Bulgaria's NRA requires companies to submit their accounting data in this format - the Bulgarian implementation is BG SAF-T v1.0.2.
Magi bridges the gap between your existing accounting software and the NRA requirement. You export your regular reports, upload them here, and Magi handles the transformation automatically - no ERP replacement required.
Your Reports
Excel exports from ALMA, Microinvest and Other Softwares
Magi
Cleans, enriches and maps your data to SAF-T structure
SAF-T XML
BG SAF-T v1.0.2 file ready to submit to the NRA
File Portal - send your reports to Magi directly
Before a company is fully registered, you can still start today. The File Portal is a secure, private space where you upload your accounting and warehouse reports straight to Magi, write notes about your situation, and get a first file handed back to you - all without filling in the full company wizard first.
It exists for one reason: speed with no compromise on privacy. Some accountants want to test the waters, send a batch of files for a first look, or simply do not have every piece of company paperwork ready on day one. The Portal removes that wait - you can start sending files in under a minute, using only your company name and EIK.
- No wizard, no setup - just a name, an EIK, and a period
- Files travel over an encrypted connection and only Magi can open them
- Write notes and get replies - a real conversation about your data
- Nothing is ever shared with third parties
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.
- 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.
- 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.
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.
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
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
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.
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
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.
Register your account
Register your account and request access. We review each account individually and walk through the setup together using your own accounting data - no configuration on your side.
- Guided onboarding with your own data
- We respond within 2 business hours
- Add unlimited team members to collaborate
- Your data is private - only your team can access it
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.
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.
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.
My Companies - the home base
After creating your account you land here automatically. At first the page is empty. You register your first company using the New Company button, and from that point forward My Companies is your dashboard - it shows the status of every company, lets you pick up where you left off, and gives quick access to all reports.
What you see on the My Companies page
The page adapts to the number of companies in your workspace. Two distinct states exist.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
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).
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.
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:
- All generated SAF-T XML reports
- Uploaded Excel / CSV files
- All media attachments
- Addresses and contacts
- Tax registrations
- Bank accounts and ownership
- All code mappings
- Extracted codes from files
- AI-generated suggestions
- All user access grants
- Activity logs and notifications
- Session and cache data
Register your company
The wizard collects six categories of company identity required by the NRA: basic information, registered addresses, contact persons, VAT registrations, bank accounts, and ownership structure. Each step must pass validation before the next is accessible.
Two view modes
- Required - Shows only the fields the NRA requires. Best for most registrations. Optional fields (like Account Name) are hidden.
- All Fields - Shows every field. Use this when you want to add optional information that enriches the SAF-T file.
Field badges
- Required - Must be filled before clicking the button Next. The stepper blocks navigation until every Required field on the current step passes validation.
- Optional - Can be left blank. Visible in All Fields mode. Some badges switch dynamically (e.g. bank fields change based on what you enter).
- Auto - Filled automatically by the system. Appears on ownership fields that become non-applicable based on your selections - you never type these yourself.
Field tooltips
- Every field has a help icon next to its badge. Hover over it to see the exact NRA specifications for SAF-T field name, what value is expected, and any format requirements. Use these when unsure what to enter - they reflect the official Bulgarian SAF-T specification directly.
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.
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.
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.
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.
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:
Validation rules
Beyond the badge changes, the system enforces strict cross-field rules. Any violation produces an immediate error on the affected field:
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.
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.
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.
- 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.
- 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:
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.
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.
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:
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.
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.
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.
Edit Company Data
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.
- Edit all company data: basic info, addresses, contacts, tax details, bank accounts, ownership
- Click 'Save Changes' to confirm all edits
- Header shows your role and last modification timestamp
- Click 'Manage Mappings' to view/edit code mappings for future SAF-T reports
- Registration number (EIK) is locked once registered - re-register the firm if incorrect
A SAF-T file has been generated for this company. Any changes you make here will be saved, but will not affect the current SAF-T file. They will only take effect the next time you generate a SAF-T report.
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
Basic Company Information
Edit core company details like name and tax accounting basis. Same rules as registration apply.
Addresses
Manage registered addresses. Add or edit multiple addresses as needed.
Contacts
Update contact persons and their details.
Tax Information
Edit VAT numbers and tax-related data.
Bank Accounts
Manage bank account details for the company.
Ownership
Update ownership and shareholder information.
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
Upload your accounting reports
This is the most complex step in Magi. You export your regular accounting reports as Excel or CSV files and upload them here. Magi then parses, validates, and structures the data for SAF-T generation. The page is divided into six sequential sub-steps - each one unlocks the next. You cannot skip ahead.
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.
Always shows the active company name and EIK. Informational only - no click action.
Click to switch type. Changing with files already uploaded triggers a confirmation window. Monthly Annual On Demand
Grey = pending, Blue = active, Green = complete. Click a completed card to jump to that step.
Live file list. Left-border colour: blue = ALMA, purple = Microinvest, pulsing amber = unconfigured (must set software before proceeding).
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.
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.
What changes when you switch type
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.
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
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.
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.
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.
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
Report importance tiers
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.
β Click any coloured card to open the window
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.
β‘ Window - click Disable Report to deactivate the card
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.
β’ Window on a disabled card - click Enable Report to restore it
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.
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.
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.
Live preview - report cards
Enabled Β· Uploaded Β· Disabled Β· Critical (locked) Β· Other Software (Universal)
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.
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.
Unlocked state
Locked state
Period Change Window
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
File card anatomy
File card states
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.
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:
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
Live preview - file card states
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:
Action message and Proceed button
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.
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:
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:
Dependency rules - what resets what
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.
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
Inside the window
ALMAColumn Reference - Monthly Reports
Chart of Accounts chart_of_accounts
| Column Name | Type |
|---|---|
Smetka | Required |
Ime | Required |
Vid | Required |
Trial Balance trial_balance
| Column Name | Type |
|---|---|
AccCode | Required |
AccNameExt | Required |
ABeginDt | Required |
ABeginKt | Required |
AEndDt | Required |
AEndKt | Required |
Account Movements account_movements
| Column Name | Type |
|---|---|
DtOborot | Required |
KtOborot | Required |
KorSka | Required |
ZapisNo | Required |
Data | Required |
Belejka | Required |
ImeSmetka_Val | Required |
Customer / Supplier Reports partners_report
| Column Name | Type |
|---|---|
ΠΠ΄Π΅Π½Ρ.No# (ΠΠΠ) | Required |
ΠΠ΄Π΅Π½Ρ.No# (ΠΠΠΠ‘) | Required |
ΠΠΎΠ½ΡΡΠ°Π³Π΅Π½Ρ | Required |
ΠΡΡΠΆΠ°Π²Π° | Required |
ΠΡΠ°Π΄ | Required |
ΠΠ΄ΡΠ΅Ρ | Optional |
Π’Π΅Π». | Optional |
ΠΠΎΠ±ΠΈΠ»Π΅Π½ | Optional |
Π€Π°ΠΊΡ | Optional |
e-mail | Optional |
Customer Settlements customer_settlements
| Column Name | Type |
|---|---|
KlientIme | Required |
ClientCity | Required |
ClientBul | Required |
SdoNachalno_2 | Required |
SdoKraino_2 | Required |
Smetka_2 | Required |
Dokument_2 | Required |
PlatDok | Required |
Belejka | Required |
PlatData | Required |
Supplier Settlements supplier_settlements
| Column Name | Type |
|---|---|
KlientIme | Required |
ClientCity | Required |
ClientBul | Required |
SdoNachalno_2 | Required |
SdoKraino_2 | Required |
Smetka_2 | Required |
Dokument_2 | Required |
PlatDok | Required |
Belejka | Required |
PlatData | Required |
Purchase Journal purchase_journal
| Column Name | Type |
|---|---|
Kol03 | Required |
Kol04 | Required |
Kol06 | Required |
Kol07 | Required |
Kol09 | Required |
Kol10 | Required |
Kol11 | Required |
Kol99 | Required |
Sales Journal sales_journal
| Column Name | Type |
|---|---|
Kol03 | Required |
Kol04 | Required |
Kol06 | Required |
Kol07 | Required |
Kol09 | Required |
Kol10 | Required |
Kol22 | Required |
Tax Table tax_table
| Column Name | Type |
|---|---|
ΠΠΎΠ΄ | Required |
ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ | Required |
ΠΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ | Required |
ΠΠΠ‘% | Required |
Π‘/ΠΊΠ° | Required |
Document Types document_types
| Column Name | Type |
|---|---|
ΠΠΎΠ΄ | Required |
ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ | Required |
Inventory / Products inventory_common
| Column Name | Type |
|---|---|
Miarka1 | Required |
Miarka2 | Required |
Kod1 | Required |
Kod2 | Required |
Ime1 | Required |
Ime2 | Required |
Grupi | Required |
Koef1 | Required |
Sales Transactions Details sales_transactions_details
| Column Name | Type |
|---|---|
Π‘Ρ.Π·Π°ΠΏΠΈΡ N | Required |
ΠΠ°ΡΠ° | Required |
ΠΡ_ΠΠΎΠΊΡΠΌΠ΅Π½Ρ | Required |
ΠΡ_ΠΠ°ΡΠ°ΠΠΎΠΊΡΠΌΠ΅Π½Ρ | Required |
Π’Π΅ΠΊΡΡ | Required |
ΠΠ΅ΡΠ΅Ρ | Required |
Π‘ΡΠΌΠ° | Required |
Π‘ΡΠΌΠ°ΠΠΠ‘ | Required |
ΠΡ_ΠΠΎΠ½ΡΡΠ°Π³Π΅Π½Ρ | Required |
ΠΡ_Π‘ΠΌΠ΅ΡΠΊΠ° | Required |
ΠΠΈΠ΄ΠΠΎΠΊ | Required |
Π‘Π΄Π΅Π»ΠΊΠ° | Required |
ΠΡ_Π‘ΠΌΠ΅ΡΠΊΠ° | Optional |
ΠΡ_Π‘ΠΠ¦ | Optional |
ΠΡ_Π‘ΠΠ¦ΠΠΎΠ΄ | Optional |
ΠΡ_ΠΡΡΠΊΠ° | Optional |
Π‘ΡΠΌΠ°Π‘Π»Π΅Π΄ΠΡΡΡ | Optional |
Π¦Π΅Π½Π° | Optional |
ΠΡ_ΠΠΎΠ» | Optional |
ΠΠΎΠ» | Optional |
Π‘ΡΠ·Π΄Π°ΡΠ΅Π» | Optional |
ΠΠ°Π»ΡΡΠ° | Optional |
ΠΠ»Π°ΡΠ°Π½Π΅ | Optional |
ΠΡ_ΠΠΎΠ΄Π΅Π»Π΅Π½ΠΈΠ΅4 | Optional |
ΠΠ·Π²Π΅ΡΡΠΠΎΠΌ | Optional |
ΠΡ_ΠΠ°ΡΠ°ΠΠ°Π΄Π΅ΠΆ | Optional |
ΠΠ»Π°ΡΠ΅Π½Π°ΠΠ | Optional |
ΠΠ°ΡΠ°Π‘ΡΠ± | Optional |
Purchase Transactions Details purchase_transactions_details
| Column Name | Type |
|---|---|
Π‘Ρ.Π·Π°ΠΏΠΈΡ N | Required |
ΠΠ°ΡΠ° | 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 Name | Type |
|---|---|
ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²ΠΈΠ΄ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ | Required |
ΠΠΌΠΎΡΡΠΈΠ·. /ΠΎΡΡΠ΅ΡΠ½Π°/ ΡΡΠΎΠΉΠ½ΠΎΡΡ, Π² Π»Π΅Π²Π° | Required |
ΠΡΡΠ°ΡΡΡ. ΡΡ-ΡΡ Π½Π° Π°ΠΊΡΠΈΠ²Π° Π½Π° 01.01., Π² Π»Π΅Π²Π° | Required |
ΠΠ΅ΡΠ΅Ρ Π½Π° ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ². Π²ΡΠ²Π΅ΠΆΠ΄. Π² Π΅ΠΊΡΠΏΠ». | Required |
Π‘ΡΠΎΠΊ Π½Π° Π³ΠΎΠ΄Π½./ ΠΈΠ·Ρ
Π°Π±. (Π³ΠΎΠ΄.) | Required |
ΠΠΎΠ΄. Π°ΠΌΠΎΡΡ Π½ΠΎΡΠΌΠ° Π² % | Required |
ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° Π³ΠΎΠ΄ΠΈΡΠ½ΠΈ Π°ΠΌΠΎΡΡΠΈΠ·., Π² Π»Π΅Π²Π° | Required |
ΠΈΠ²Π½.No ΠΏΠΎ ΡΠ΅Π΄ | Optional |
Π½Π°ΡΠΈΡΠ»Π΅Π½ΠΈ Π°ΠΌΠΎΡΡΠΈΠ·. Π΄ΠΎ 01.01., Π² Π»Π΅Π²Π° | Optional |
ΠΠ±ΡΠΎ Π½Π°ΡΠΈΡΠ». Π°ΠΌΠΎΡΡΠΈΠ·. Π² Π»Π². Π·Π° | Optional |
ΠΡΡΠ°ΡΡΡΠ½Π° Π±Π°Π»Π°Π½ΡΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° Π°ΠΊΡΠΈΠ²Π° ΠΊΡΠΌ 31.12. | Optional |
ΠΠΠ©Π Π½Π°Π±ΡΠ°Π½ΠΈ Π°ΠΌΠΎΡΡ. ΠΊΡΠΌ 31.12 | Optional |
ΠΠ°Π½ΡΡΠ½ΠΎ ΠΏΡΠΈΠ·Π½Π°Ρ Ρ-Ρ Π½Π° Π°ΠΌΠΎΡΡΠΈΠ·. | Optional |
MicroinvestColumn Reference - Monthly Reports
Chart of Accounts chart_of_accounts
| Column Name | Type |
|---|---|
Π‘ΠΌΠ΅ΡΠΊΠ° | Required |
ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ | Required |
Trial Balance trial_balance
| Column Name | Type |
|---|---|
ΠΠΎΠΌΠ΅Ρ | Required |
ΠΠΌΠ΅ | Required |
ΠΠ΅Π±ΠΈΡ | Required |
ΠΡΠ΅Π΄ΠΈΡ | Required |
ΠΠ°ΡΠ°Π»Π½ΠΈ ΡΠ°Π»Π΄Π° | Required |
ΠΡΠ°ΠΉΠ½ΠΈ ΡΠ°Π»Π΄Π° | Required |
Customer / Supplier Reports partners_report
| Column Name | Type |
|---|---|
Π€ΠΈΡΠΌΠ° | Required |
ΠΠΠ | Required |
ΠΠΠ‘ ΠΠΎΠΌΠ΅Ρ | Required |
ΠΡΡΠΆΠ°Π²Π° | Required |
ΠΡΠ°Π΄ | Required |
Π‘ΠΌΠ΅ΡΠΊΠΈ | Required |
ΠΠ | Optional |
ΠΠ΄ΡΠ΅Ρ | Optional |
Π’Π΅Π»Π΅ΡΠΎΠ½ | Optional |
E-mail | Optional |
IBAN | Optional |
Sales Journal sales_journal
| Column Name | Type |
|---|---|
ΠΠΎΠΌΠ΅Ρ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° | Required |
ΠΠΈΠ΄ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° | Required |
ΠΠ°ΡΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° | Required |
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π΅Π½ Π½ΠΎΠΌΠ΅Ρ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π³Π΅Π½ΡΠ° | Required |
ΠΠΌΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π³Π΅Π½ΡΠ° | Required |
ΠΠΈΠ΄ Π½Π° ΡΡΠΎΠΊΠ°ΡΠ°/ΡΡΠ»ΡΠ³Π°ΡΠ° | Required |
Purchase Journal purchase_journal
| Column Name | Type |
|---|---|
ΠΠΎΠΌΠ΅Ρ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° | Required |
ΠΠΈΠ΄ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° | Required |
ΠΠ°ΡΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° | Required |
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π΅Π½ Π½ΠΎΠΌΠ΅Ρ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π³Π΅Π½ΡΠ° | Required |
ΠΠΌΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π³Π΅Π½ΡΠ° | Required |
ΠΠΈΠ΄ Π½Π° ΡΡΠΎΠΊΠ°ΡΠ°/ΡΡΠ»ΡΠ³Π°ΡΠ° | Required |
Chronological Register chronological_register
| Column Name | Type |
|---|---|
ΠΠΎΠ½ΡΠΈΡΠ°Π½Π΅ | 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 Name | Type |
|---|---|
Π‘ΡΠΎΠΊΠ° | Required |
ΠΠΎΠ΄ Π½Π° ΡΡΠΎΠΊΠ°ΡΠ° | Required |
ΠΠ΅ΡΠ½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ° | Required |
Π‘ΠΌΠ΅ΡΠΊΠ° | Required |
ΠΠ΄. Π¦Π΅Π½Π° | Required |
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ | Required |
Π‘ΡΠΌΠ° | Required |
Dok. ΠΠΈΠ΄ | Required |
ΠΠΎΠΊΡΠΌΠ΅Π½Ρ β | Required |
ΠΠ°ΡΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° | Required |
ΠΠ°ΡΡΠ½ΡΠΎΡ | Required |
ΠΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ | Required |
Weighted Average Cost weighted_average_cost
| Column Name | Type |
|---|---|
Π‘ΠΌΠ΅ΡΠΊΠ° | Required |
ΠΠΎΠ΄ | Required |
ΠΠ΅ΡΠ½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ° | Required |
Π‘ΡΠΎΠΊΠ° | Required |
ΠΠ°ΡΠ°Π»Π½ΠΎ ΡΠ°Π»Π΄ΠΎ ΠΊΠΎΠ». | Required |
ΠΠ°ΡΠ°Π»Π½ΠΎ ΡΠ°Π»Π΄ΠΎ ΡΡ-ΡΡ | Required |
ΠΠ°ΠΏΡΠΈΡ
ΠΎΠ΄Π΅Π½ΠΎ ΠΊ-Π²ΠΎ | Required |
ΠΠ°ΠΏΡΠΈΡ
ΠΎΠ΄Π΅Π½ΠΈ ΡΡ-ΡΡΠΈ | Required |
Π‘ΡΠ΅Π΄Π½Π° ΡΠ΅Π½Π° | Required |
ΠΠΎΠ». ΠΠ·ΠΏΠΈΡΠ°Π½ΠΈ | Required |
Π‘ΡΠΎΠΉΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΈΡΠ²Π°Π½Π΅ | Required |
ΠΡ. ΡΠ°Π»Π΄ΠΎ ΠΊΠΎΠ». | Required |
ΠΡ. ΡΠ°Π»Π΄ΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡ | Required |
Stock Deliveries stock_deliveries
| Column Name | Type |
|---|---|
ΠΠ°ΡΠ° | Required |
Dok. Π²ΠΈΠ΄ | Required |
ΠΠ°ΡΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° | Required |
ΠΠΎΠ΄ Π½Π° ΡΡΠΎΠΊΠ°ΡΠ° | Required |
ΠΠ΅ΡΠ½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ° | Required |
ΠΠΎΠΊΡΠΌΠ΅Π½Ρ β | Required |
Π‘ΠΌΠ΅ΡΠΊΠ° | Required |
Π‘ΡΠΎΠΊΠ° | Required |
ΠΠ°ΡΡΠ½ΡΠΎΡ | Required |
ΠΠΎΠ». | Required |
Π¦Π΅Π½Π° | Required |
Π‘ΡΠΌΠ° | Required |
Inventory List inventory_list
| Column Name | Type |
|---|---|
β | Required |
Π‘ΠΌΠ΅ΡΠΊΠ° | Required |
ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ | Required |
ΠΡΡΠΊΠ° | Required |
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ | Required |
Π‘ΡΠ΅Π΄Π½Π° ΡΠ΅Π½Π° | Required |
Π‘ΡΠΎΠΉΠ½ΠΎΡΡ | Required |
ΠΠ°Π»ΠΈΡΠ½ΠΎ ΠΏΡΠΈ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠΈΠ·Π°ΡΠΈΡ | Required |
ΠΠΈΠΏΡΠ° | Required |
ΠΠ·Π»ΠΈΡΡΠΊ | Required |
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ° | Required |
Depreciation Schedule depreciation_schedule Annual only
| Column Name | Type |
|---|---|
ΠΠ½Π². ΠΠΎΠΌΠ΅Ρ | Required |
ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ | Required |
ΠΠΊΡΠΈΠ² Π² ΡΠΌΠ΅ΡΠΊΠ° | Required |
ΠΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Π½Π΅ | Required |
ΠΠ°ΡΠ° Π½Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π² Π΅ΠΊΡΠΏΠ»ΠΎΠ°ΡΠ°ΡΠΈΡ | Required |
ΠΠ°ΡΠ° Π½Π° ΠΎΡΠΏΠΈΡΠ²Π°Π½Π΅ | Required |
ΠΠΎΠ΄. ΠΡΡΠ΅ΡΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ | Required |
ΠΠ°Π»Π°Π½ΡΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ | Required |
ΠΠ°ΡΠΈΡΠ»Π΅Π½ΠΈ Π°ΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΠΈ | Required |
ΠΠ°ΡΠΈΡΠ»Π΅Π½ΠΈ Π·Π° Π³ΠΎΠ΄ΠΈΠ½Π°ΡΠ° | Required |
ΠΠΎΠ΄. ΠΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½Π° Π½ΠΎΡΠΌΠ° | Required |
ΠΠΌΠΎΡΡΠΈΠ·ΠΈΡΡΠ΅ΠΌΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ | Required |
ΠΡΡΠ°ΡΡΡΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ | Required |
ΠΠ΅ΡΠ΅Ρ Π½Π° Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ | Required |
ΠΠ΅ΡΠ΅Ρ Π½Π° ΠΏΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ | Required |
ΠΠ΅ΡΠ΅Ρ Π½Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ | Required |
ΠΠ΅ΡΠ΅Ρ Π½Π° ΠΎΡΠΏΠΈΡΠ²Π°Π½Π΅ | Required |
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
The two action buttons
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.
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
Greyed out and unclickable when critical reports are missing. Critical reports are required for code extraction regardless of whether mappings were previously saved.
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
How to select Other Software in the upload page
- 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.
- Click the Other Software card (purple puzzle-piece icon). The card border highlights in purple and a checkmark appears in the top-left corner.
- 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.
- Click Continue to Reports to confirm your selection and move to the reports grid.
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.
chart_of_accountstrial_balanceaccount_movementspartners_reportsales_journalpurchase_journalsales_transactions_detailspurchase_transactions_detailstax_tabledocument_typescustomer_settlementssupplier_settlementsinventory_commondepreciation_scheduleKey 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.
InternalAccountIDYour GL account code (e.g. 602, 4532)TaxIDEIK/ΠΠΠ of the counterpartyCompanyNameLegal name of the customer/supplierDocumentRefInvoice/document reference numberDocumentDateDate of the document (DD.MM.YYYY or YYYY-MM-DD)InternalTaxCodeYour internal VAT/tax code (e.g. 20%, ΠΠΠ)DebitAmountDebit posting amount (account_movements)CreditAmountCredit posting amount (account_movements)NetTotalNet amount before VAT (journals, transactions)TaxPayableVAT amountGrossTotalTotal amount including VATOpeningDebitBalanceOpening debit balance (trial_balance)ClosingDebitBalanceClosing debit balance (trial_balance)Which template sheet feeds which SAF-T section?
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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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.
- 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.
-
Account codes in InternalAccountID must match exactly between sheets.
If you use account
602inaccount_movements, the same code must appear inchart_of_accounts. Magi's cross-sheet validator will warn you about any mismatches after upload. - 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.
- 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).
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?
Software card - Other Software selected
Download banner (appears on selection)
Report cards in the grid (purple badge)
Validation feedback example
β InternalAccountID: 14 rows have empty values
β account_movements.InternalAccountID: 3 value(s) not in chart_of_accounts - e.g. '9200', '9310'
Map your internal codes
Every accounting system uses its own internal codes for accounts, tax rates, units of measure, products, and document types. The NRA requires these to be expressed using official SAF-T nomenclature codes. Magi extracts all unique internal codes from your files and presents them for mapping.
- Automatic matching against official NRA nomenclatures - avg. 88% auto-mapped
- 5 code types: Accounts, Tax, Products, Units of Measure, Document Types
- Confidence score shown for every suggestion
- Real-time collaboration - multiple team members can map simultaneously
- Mappings saved permanently - reused for all future reports
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%.
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.
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 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 - 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 - 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.
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:
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 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 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.
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.
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.
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.
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.
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.
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.
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 - 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.
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.
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.
| YOUR CODE | SAF-T CODE | CONFIDENCE | ACTIONS | ||
|---|---|---|---|---|---|
|
701
ΠΡΠΈΡ
ΠΎΠ΄ΠΈ ΠΎΡ ΠΏΡΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° ΡΡΠΎΠΊΠΈ
|
β |
7010
ΠΡΠΈΡ
ΠΎΠ΄ΠΈ ΠΎΡ ΠΏΡΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ
|
medium |
Pending
|
|
|
702
ΠΡΠΈΡ
ΠΎΠ΄ΠΈ ΠΎΡ ΠΏΡΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° ΡΡΠ»ΡΠ³ΠΈ
|
β |
7020
ΠΡΠΈΡ
ΠΎΠ΄ΠΈ ΠΎΡ ΠΏΡΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° ΡΡΠ»ΡΠ³ΠΈ
|
manual |
Mapped
|
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.
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.
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.
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.
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.
Inside the actions cell, above the buttons, sits a small status badge that summarises the row's current state at a glance.
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.
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.
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.
The Nomenclature Browser - Searching and Selecting Codes Manually
| Code | Description | Magi | |
|---|---|---|---|
| 601 | Expenses for materials | ||
| 6010 | Raw materials and consumables | #2 | |
| 6020 | Fuels and lubricants | #3 | |
| 603 | Other short-term expenses | ||
| 6010000 | Materials - selected β |
| Code | Description | Magi | |
|---|---|---|---|
| 00000000 | Services (general category) | ||
| 0 | N/A - not applicable CN code | ||
| 85364900 | Electrical equipment parts |
Icon + NRA nomenclature subtitle. Changes per section: Accounts, TAX, UOM, Products, Invoice Types.
Shows which internal code you are mapping. Click π to expand inline search - filters code numbers AND descriptions simultaneously. Ctrl+F focuses it.
Top Magi (default) - 5β15 ranked suggestions for this code only. Use first. All - full NRA list. Use when Magi has no match.
Green = exact/TOP Β· Blue = high Β· Amber = medium Β· Grey gradient = low Β· Zebra = no rank Β· Bright green + shadow = your selection.
Select is disabled until you click a row. Starts collapsed. β² toggle expands Quick-map buttons (Products: 00000000, 0 Β· Taxes: 000000).
Selecting a code - 3 steps:
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).
Batch Accept & Bulk Operations - Moving Fast
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.
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:
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.
Frosted-glass pill: β All saved (green), Savingβ¦ (blue spinner), Pending (amber), Error (red shake). Updates live - no manual save button needed.
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.
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.
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:
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.
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.
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.
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.
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.
Deselects all checked rows. No mapping is applied - purely cancels the multi-select. The badge disappears and all row highlights clear.
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:
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.
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:
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:
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.
- 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)
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.
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.
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.
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.
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.
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:
Two possible outcomes - which one applies to you:
Review, edit and validate
After the SAF-T generation pipeline finishes, Magi opens the SAF-T Editor automatically. This is where you review every field of your generated report, fix any validation errors the system found, and trigger the final re-generation that produces the download-ready XML file. You land here directly from the generation overlay - or from the firm dashboard whenever your firm's progress is at the editing or validating stage.
- Five-zone layout: top navbar, left tree sidebar, main editing area, floating action bar, bottom validation drawer
- Auto-corrected fields reviewed on first load via the Review Defaults panel
- Inline editing with per-field auto-save and full undo / redo history
- Validation errors grouped by severity - errors, warnings, auto-corrected - in a persistent bottom drawer
- Real-time collaboration: multiple team members can edit simultaneously
- Light and dark theme supported - toggle in the navbar
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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+β.
Expand / Collapse all () - When there are many issues they can be grouped by section. These two buttons expand or collapse all groups at once.
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.
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.
You have two ways to resolve these issues - both are SAF-T compliant and handled entirely by Magi:
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.
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
The Resolve window - one record at a time
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.
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.
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.
Cancel - Closes the window and returns you to the editor. No file is generated. Use this to go back and fix errors first.
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.
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).
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.
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.
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.
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.
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.
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.
Every form section also shows a blue reminder banner at the top while the filter is on:
Only required fields are shown
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
Export your SAF-T file
After the editor confirms your file is ready, Magi sends you directly to the SAF-T Reports page. This is your archive - every XML file ever generated for this company lives here, ready to download or inspect at any time.
- Every generated file is kept permanently in the archive - nothing is deleted automatically
- Filenames follow the NRA naming convention - no manual renaming needed before submission
- Filter by report type: Monthly, Annual, or On Demand
- Preview the XML content in-browser before downloading
- Code mappings from the previous period are automatically preserved when you start a new generation
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.
Live replica of the Reports table
Report Statuses
Every report in the archive carries a status badge that tells you where it stands in the submission lifecycle.
The XML file was created successfully. It has not yet been checked against the official XSD schema or submitted to the NRA.
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.
The file has been delivered to the NRA. This status is set manually once you confirm submission on the NRA's own portal.
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.
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.
Download & Delete
Every row in the reports table has an Actions column with up to three buttons, depending on your role.
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.
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.
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.
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.
Preview your SAF-T XML
Clicking Preview on any report opens a full-screen XML viewer. You can read the raw file, jump between sections, search for any value, and copy the content - all without downloading anything.
- Line-numbered XML with a dedicated left-hand table of contents
- Instant search across all XML lines with keyboard navigation
- One-click copy of the entire file to clipboard
- Status banner tells you at a glance whether the file is awaiting validation or already schema-checked
- Download button available directly from the preview - no need to go back to the reports list
Page Layout
The preview page is divided into four areas stacked from top to bottom:
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.
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.
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.
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.
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.
Searching the XML
The search bar in the XML viewer toolbar lets you find any text inside the file instantly - a customer name, an invoice number, a tax code, or any XML tag. Matching lines are highlighted in yellow; the currently active match is highlighted in orange.
- Type in the search box to highlight all matching lines immediately.
- A counter shows your position, e.g. '3 / 12', meaning match 3 of 12 total.
- Use the up/down arrow buttons next to the counter to jump between matches.
- Press Enter to move to the next match; press Escape to clear the search.
- Search is case-insensitive - 'bulstat' and 'BULSTAT' find the same lines.
Live replica of the XML search toolbar
Copy & Download
Two buttons in the XML viewer toolbar give you access to the file content without leaving the page:
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.
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.
Legal Documents & Agreements
During registration you must accept our legal documents. Here is a clear overview of each document and what it means for you.
These documents protect both you and Magi. They explain your rights, our obligations, data protection rules, and service guarantees.
Terms of Service
This is the main contract between you and Magi. It defines the rules of using the platform.
- Subscription plans and billing
- Your responsibilities when using the platform
- Intellectual property and acceptable use
- Termination rules and refunds
- Limitation of liability
Privacy Policy
Explains how we collect, use, store and protect your personal data and the accounting/warehouse data you upload.
Read Privacy PolicyData Processing Agreement (DPA)
This agreement regulates the relationship when you upload accounting files containing personal data of your clients/employees. Magi acts as a data processor.
Read Data Processing Agreement (DPA)Cookie Policy
Describes what cookies we use and why. You can manage your cookie preferences at any time.
Read Cookie PolicyService Level Agreement (SLA)
Defines our guarantees regarding platform availability, support response times, and compensation if we fail to meet the promised uptime.
Read Service Level Agreement (SLA)