Step-by-step instructions
Income and expense transactions can be grouped with clear multilingual categories, so finance reports, support, imports, and future AI agents can explain money movement correctly.
Use the interactive screenshot walkthrough first. Switch steps with the step dots, then read what to fill and why it matters.
Fields on this screen
Transaction Categories list
How to fill: Start from the list and check current rows before adding a new category.
Why: Duplicate categories split finance reports and make transaction history harder to explain.
Add
How to fill: Click Add in the top-right area to open the real category form.
Why: The form creates a new category ID and opens name plus availability controls.
Active-language name
How to fill: Type a short, specific name in the current interface language.
Why: Staff need to choose the right category quickly when recording income or expenses.
Translations
How to fill: Open the three-dot menu in the name field and fill every enabled language.
Why: Multilingual categories keep POS, reports, imports, and AI explanations consistent.
Income
How to fill: Enable only for categories that should be selectable when money comes in.
Why: Revenue, refunds received, deposits, or owner investment can be income categories.
Expenses
How to fill: Enable only for categories that should be selectable when money goes out.
Why: Supplier purchases, rent, salaries, fees, and utilities are expense categories.
Save
How to fill: Save only after names and Income / Expenses switches are checked.
Why: Saved categories become available in finance transactions and reports.
Verify row
How to fill: Return to the list and verify the name plus Income and Expense flags.
Why: List verification proves the row was written and loaded back from the database.
Common mistakes
- Creating a duplicate category instead of checking the current list first.
- Filling only one language when the company uses several interface languages.
- Leaving Income on for an expense-only category such as Ingredient purchase.
- Turning Expenses off for a category staff must use when paying suppliers.
- Using vague category names such as Other instead of a concrete business reason.
- Confusing transaction category with payment method; method describes how money is paid, category describes why it moved.
- Editing category_transactions directly in Supabase without updating company.loadcategorytransactions.
AI Agent Field Reference for implementation
This block is intentionally below the human instructions. It explains storage names and downstream dependencies for automation, support, and future AI agents.
| Field | Stored as | Purpose | Why it matters |
|---|---|---|---|
| Category ID | category_transactions.id / CategoryTransactionStruct.ID | Unique transaction category identifier. | Transactions, reports, imports, support, and AI agents need a stable category ID instead of only a visible label. |
| Company ID | category_transactions.company_id | Company workspace that owns the category. | Prevents finance categories from one company from appearing in another workspace. |
| Name translations | category_transactions.name / CategoryTransactionStruct.Name[] | Category name per enabled language. | POS, finance reports, imports, support, and AI answers need readable labels in the active interface language. |
| Income | category_transactions.income / CategoryTransactionStruct.Income | Whether the category is available on income transactions. | Income categories appear when money is received, so expense-only categories should keep this off. |
| Expenses | category_transactions.expense / CategoryTransactionStruct.Expense | Whether the category is available on expense transactions. | Expense categories appear when money leaves an account or cash register. |
| Comment | CategoryTransactionStruct.Comment | Optional explanatory text when used by imports or backend logic. | Support and agents can use it to explain category purpose, but the current form primarily relies on names and flags. |
| List number | CategoryTransactionStruct.number | Optional order value for category lists. | Can keep finance categories in a predictable order for managers and imports. |
| App category cache | FFAppState().CategoryTransaction | Client-side list used by the Transaction Categories table and transaction forms. | After direct backend edits, the app must reload categories before users see current options. |
| Reload marker | company.loadcategorytransactions | Company timestamp used to refresh category_transactions. | Native and backend changes need this marker so SABSUS reloads the current category rows. |
| Transaction category usage | transactions.Category / TransactionStruct.Category | Category selected on a finance transaction. | Reports and AI agents group and explain income or expenses through this selected category. |
Related guides
Use these guides to connect this section to adjacent SABSUS workflows.