Back

What is the Accounting Module?

Accounting is where every financial event in HMX is recorded. When Sales ships an invoice, Purchase receives a supplier bill, Inventory revalues a warehouse, or HR pays out a salary β€” the numeric footprint ends up here as a journal entry, posted against accounts defined in your Chart of Accounts.

Think of it as a shared ledger that every other module writes to. You don't post to it directly for day-to-day transactions (those flow in automatically from invoices, payments, stock moves). You post directly only for adjustments, opening balances, reclassifications, and period-end closing.

πŸ’‘This scope contains three modules β€” core_accounting (the ledger + reports), core_invoicing (invoices + payments + taxes), and core_inventory_accounting (stock valuation bridge).

Transaction Flow

Source Document
Account Document
Journal Entry
Entry Lines
General Ledger

A source (sale order, purchase bill, payroll batch) produces an Account Document β€” the invoice or statement the customer / vendor sees. When confirmed, the document generates a Journal Entry posted to the chosen Journal. Each entry expands into multiple Entry Lines, each hitting one account with a debit or credit. The sum of all entry lines across all entries is your General Ledger.

Prerequisites

  • Module base installed (every HMX project has this).
  • Module core_product installed β€” taxes and invoice lines reference products.
  • Module hmx_universal_features installed β€” provides currency, company, and partner.
  • At least one Company record defined with a base currency.
  • At least one Fiscal Year with open Fiscal Periods β€” postings fail without an open period.

Installation Steps

Install core_accounting

This pulls in the ledger, chart of accounts, journals, and reports. Must be installed first.

hmx update install core_accounting --alias=default --noinput

Install core_invoicing

Adds Account Documents (invoices, bills), customer & vendor payments, taxes, and payment terms.

hmx update install core_invoicing --alias=default --noinput

Install core_inventory_accounting

Optional but recommended if you run Inventory. Extends product.category with valuation accounts so stock moves post to the ledger automatically.

hmx update install core_inventory_accounting --alias=default --noinput

First-Time Setup

  1. Define your Chart of Accounts β€” either import a localized template (ID-GAAP, SAK-EMKM, IFRS) or create account codes manually. Every other step depends on this.
  2. Create Account Types β€” group accounts into Asset / Liability / Equity / Income / Expense with correct statement placement and closing rules.
  3. Open a Fiscal Year and generate its Periods (usually 12 monthly periods). Postings are rejected if no period is open for the entry date.
  4. Create at least one Journal per type β€” Sales, Purchase, Bank, Cash, Miscellaneous. Each journal carries a default account and a sequence for entry numbering.
  5. Configure Taxes β€” VAT / PPN / GST rates used by your country, with the accounts to post tax-collected and tax-paid into.
  6. Seed Opening Balances β€” post a single Opening Journal Entry dated Day-1 of the fiscal year, debiting / crediting every balance-carrying account with its opening value. Must balance to zero.
Accounting β€Ί Fiscal Years
AD
FY-2026 Open
Close YearGenerate Periods
Fiscal Year
Name *
FY-2026
Start Date
πŸ“… 2026-01-01
End Date
πŸ“… 2026-12-31
Company
PT HMX Indonesia
Fiscal Periods
PeriodStartEndStatus
FP-2026-012026-01-012026-01-31Open
FP-2026-022026-02-012026-02-28Open
FP-2026-032026-03-012026-03-31Closed
FP-2026-042026-04-012026-04-30Open
Fiscal Year form β€” generate 12 monthly periods; postings are rejected if no period is open for the entry date

Technical Setup Notes

Module Dependencies

base product core_product core_invoicing hmx_universal_features webx_widget

Auto-Sequences

Each AccountJournal owns a seq_entry (FK to a sequence template) used to generate Journal Entry numbers like SAL/2026/00001. A separate refund_seq_entry is used when dedicated_refund_sequence is enabled.

Post-install Checks

  • Verify modules appear in hmx list-modules.
  • Confirm /chartofaccount/ view loads (if empty, import template).
  • Confirm /accountjournal/ view loads and shows seeded journals.

What is a Chart of Accounts?

A Chart of Accounts (CoA) is the structured list of every account available to be debited or credited in your business. Each account is identified by a short code (e.g. 1-1100 for Cash, 4-1000 for Sales Revenue) and tagged with an Account Type that determines where it lands on the financial statements.

The CoA is hierarchical β€” parent accounts aggregate their children for reporting, while only leaf accounts are postable. This lets you design statements with any depth (Assets β†’ Current Assets β†’ Cash & Equivalents β†’ Petty Cash) without creating a flat list of hundreds of entries.

How to Create an Account

Step 1 β€” Open the Chart of Accounts

Navigate to Accounting β†’ Configuration β†’ Chart of Accounts. You'll see every account that currently exists, grouped by account type. Click Create on the top-right to add a new one.

Path: Accounting β€Ί Configuration β€Ί Chart of Accounts
Accounting β€Ί Chart of Accounts
AD
AllAssetsLiabilitiesEquityIncomeExpense+ Create
CodeNameTypeParentActive
1-1000Cash & EquivalentsCurrent Assetβ€”Yes
1-1100Cash on HandCurrent Asset1-1000Yes
1-1200Bank β€” BCACurrent Asset1-1000Yes
4-1000Sales RevenueIncomeβ€”Yes
Chart of Accounts list β€” existing accounts grouped by type, with Create button top-right

Step 2 β€” Enter Code and Name

Fill in a unique Code (must be unique within the company) and a descriptive Name. The code is what users will see on ledger reports and journal lines, so keep it consistent with your numbering scheme.

Accounting β€Ί Configuration β€Ί New Account
AD
New Account
DiscardSave
Basic Information
Code *
1-1300
Name *
Bank β€” Mandiri
Active
Yes
Company
HMX Indonesia
Enter code 1-1300 (unique per company) and name "Bank β€” Mandiri"

Step 3 β€” Select the Account Type

Pick an Account Type β€” this single choice decides (a) which financial statement the account appears on, (b) whether it can be reconciled against payments, and (c) how it closes at year-end. Change this later only before any postings exist.

Accounting β€Ί Configuration β€Ί New Account
AD
New Account
DiscardSave
Classification
Account Type *
Current Asset β–Ύ
Select Account Type
Current AssetBalance SheetReconcilable
ReceivableBalance SheetReconcilable
PayableBalance SheetReconcilable
IncomeProfit & Lossβ€”
ExpenseProfit & Lossβ€”
Account Type controls statement placement and reconciliation behavior

Step 4 β€” (Optional) Set a Parent Account

Assign a Parent Account to nest this account under a group β€” it'll roll up into the parent on financial reports. Leave blank if this is a top-level heading. Only leaf accounts (no children) can be posted to.

Accounting β€Ί Configuration β€Ί New Account
AD
New Account
DiscardSave
Hierarchy
Parent Account
1-1000 Cash & Equivalents β–Ύ
β†’ This account will roll up into 1-1000 Cash & Equivalents on the Balance Sheet.
Nesting under "1-1000 Cash & Equivalents" β€” parent aggregates children on reports

Step 5 β€” Save

Click Save. The new account appears in the Chart of Accounts list and is immediately available for journal entries, invoice lines, tax configurations, and journal defaults.

Accounting β€Ί Chart of Accounts
AD
1-1300 Bank β€” Mandiri Saved βœ“
EditCreate Another
CodeNameTypeParentActive
1-1000Cash & EquivalentsCurrent Assetβ€”Yes
1-1100Cash on HandCurrent Asset1-1000Yes
1-1200Bank β€” BCACurrent Asset1-1000Yes
1-1300Bank β€” MandiriCurrent Asset1-1000Yes
Available for posting β€” can be used in journal entries, invoice lines, tax distributions, and journal defaults.
New account 1-1300 saved and ready to post against
⚠️Once an account has been posted to, its code and type become read-only for reconciliation safety. Archive (active=False) instead of editing historical accounts.

Account Types Explained

Every account must belong to one Account Type. The type drives three behaviors:

  • Statement placement β€” Asset / Liability / Equity β†’ Balance Sheet; Income / Expense β†’ Profit & Loss.
  • Reconcilable flag β€” only reconcilable types (e.g. Receivable, Payable) can be matched between documents and payments.
  • Year-end closing β€” P&L accounts close to Retained Earnings; Balance Sheet accounts carry their ending balance forward as the new year's opening balance.

Chart of Accounts Technical Reference

Model: chartofaccount

FieldTypeNotes
codeCharFieldUnique per company
nameCharField(255)Display name
parent_idFK selfNullable, forms the hierarchy
account_typeFK AccountTypeRESTRICT on delete
companyFK CompanyMulti-company scoping
activeBooleanArchive switch

Related Models

  • accounttype β€” groups accounts into Asset/Liability/Equity/Income/Expense with closing rules.
  • accountjournal.default_account_id β€” each journal has a default account used when lines don't specify one.
  • accountdocumentline.account, journalentryline.account_code β€” every transaction line points here.

What is a Journal Entry?

A Journal Entry is a single balanced posting to the general ledger. It belongs to one Journal (Sales, Purchase, Bank, Cash, Misc), references one Fiscal Period, and contains two or more Entry Lines whose debits must equal their credits.

Most entries are created automatically: confirming an invoice, registering a payment, or validating a stock move each trigger an entry. Manual entries cover adjustments, reclassifications, accruals, depreciation, and opening balances.

Each entry moves through three statuses: Draft (editable, no ledger impact), Posted (locked, visible in reports), and optionally Reversed (a mirror entry cancels the original).

How to Create a Manual Journal Entry

Open Journal Entries

Go to Accounting β†’ Operations β†’ Journal Entries and click Create.

Accounting > Operations > Journal Entries > Create
Accounting > Operations > Journal Entries
AD
AllDraftPosted+ Create
NumberDateJournalPartnerTotalStatus
MISC/2026/000862026-04-18Miscellaneousβ€”2,400,000Posted
SAL/2026/003412026-04-17SalesCV Sumber Makmur17,094,000Posted
MISC/2026/000852026-04-15Miscellaneousβ€”850,000Draft
Journal Entries list β€” filter by status; click "+ Create" to open a new entry

Pick a Journal

Choose the journal the entry belongs to β€” usually Miscellaneous for adjustments, Bank / Cash for manual cash movements. The journal sets the default account for lines you don't explicitly fill.

Accounting > New Entry
AD
Entry Header
Journal *
Miscellaneous β–Ύ
Miscellaneous
Sales
Purchase
Bank β€” BCA
Cash on Hand
Entry Date
(pick journal first)
Pick the journal from the dropdown β€” each has its own sequence and default account

Choose the Entry Date

Pick the date the transaction should post. HMX auto-resolves the Fiscal Period from this date β€” if that period is closed or missing, posting is blocked with a clear error.

Accounting > New Entry
AD
Entry Header
Journal
Miscellaneous
Entry Date *
πŸ“… 2026-04-21
Period
FP-2026-04 Open βœ“
Fiscal Year
FY-2026
Period and Fiscal Year auto-resolve from Entry Date; green "Open" badge means you can post

Add Entry Lines

For each line pick an Account, fill Debit or Credit (not both), and optionally a Partner and Cost Center. Typical adjustment: one expense debit offset by one liability credit.

Accounting > New Entry
AD
Entry Lines
#AccountDescriptionPartnerDebitCredit
15-2100 Rent ExpenseOffice rent β€” April 2026β€”5,000,000β€”
22-1000 Accounts PayableOffice rent β€” April 2026PT Mitra Sejatiβ€”5,000,000
3…(empty row β€” click to add)β€”β€”β€”
+ Add Line
Each line: pick account, fill Debit OR Credit (never both) β€” Partner required for AR/AP accounts

Verify the Entry Balances

Total Debit must equal Total Credit. HMX shows a live balance indicator at the bottom β€” red if off, green check when balanced. The Post button is disabled until balance is zero.

Accounting > New Entry
AD
Entry Totals
DebitCredit
Line 1 β€” Rent Expense5,000,000β€”
Line 2 β€” Accounts Payableβ€”5,000,000
Totals5,000,0005,000,000
βœ“ Balanced β€” ready to post
Live balance check β€” green pill means debits = credits and the Post button unlocks

Post the Entry

Click Post. HMX assigns a sequence number from the journal's seq_entry (e.g. MISC/2026/00087), locks the entry, and writes every line into the general ledger immediately. The entry becomes immutable β€” corrections require a reversing entry.

Accounting > MISC/2026/00087
AD
MISC/2026/00087 Posted
PrintReverse Entry
DraftPostedReversed
General Ledger Impact
AccountDebitCreditRunning Balance
5-2100 Rent Expense5,000,000β€”+5,000,000
2-1000 Accounts Payableβ€”5,000,000+5,000,000
Source: manual Β· Posted by AD on 2026-04-21 Β· Sequence: MISC/2026/00087
Posted entry is locked and visible in reports β€” corrections require a reversing entry, not edits

Posting Rules Explained

  • Balance rule β€” sum of debits = sum of credits for every entry. Non-balanced drafts cannot be posted.
  • Period rule β€” entry date must fall inside an open fiscal period. Closed-period postings require re-opening or a new adjustment period.
  • Currency rule β€” if the entry currency differs from the company currency, an inverse_rate and rate are stamped; both currency and company-currency amounts are stored per line.
  • Immutability β€” posted entries cannot be edited. To correct a mistake, create a reversed entry (system auto-generates a mirror with debits and credits swapped) and post the correct one.
  • Source tracking β€” auto-generated entries store source_type and origin_account_document so reports can drill back to the invoice / payment / stock move that produced them.
πŸ’‘Repetitive entries (monthly accruals, depreciation) can be stored as an Account Move Template and instantiated on demand, or wrapped in a Recurring Journal Entry that creates them on a cron.

Journal Entry Technical Reference

Model: journalentry

FieldTypeNotes
journalFK AccountJournalCASCADE
partnerFK PartnerNullable
periodFK FiscalPeriodDerived from date; validated open
fiscal_yearFK FiscalYearDerived from period
statusChar choicesdraft / posted / reversed; tracking enabled
reversed_entryFK selfPoints to the cancelled entry, if any
originCharFree-text source reference
source_typeCharCategory: invoice / payment / stock_move / manual
origin_account_documentFK AccountDocumentDrill-back link
rate, inverse_rateDecimal(16,2/12)Multi-currency conversion
last_revaluation_idFK CurrencyRevaluationTracks FX revaluation runs

Model: journalentryline

FieldTypeNotes
journal_entryFK JournalEntryParent
account_codeCharFieldResolves to ChartOfAccount
partnerFK PartnerNullable; required for receivable/payable accounts
dateDateFieldComputed from parent, stored
currency, company_currencyFK CurrencyBoth retained
cost_center_ruleFK CostCenterRuleOptional cost-center allocation

What is an Account Document?

An Account Document is the printable record a customer, vendor, or tax authority sees: a sales invoice, a supplier bill, a credit note, or a debit note. Internally, it's also the master that generates the corresponding Journal Entry when confirmed.

A document has a header (partner, date, journal, fiscal period, payment terms, totals) and one or more lines. Each Account Document Line ties a product or description to an account, a quantity, a unit price, and optional taxes. At confirmation, the system computes tax, allocates lines to the right accounts (revenue / expense / AR / AP / tax), and posts the resulting journal entry.

How to Create an Invoice

Open the Invoice List

Go to Invoicing β†’ Customers β†’ Invoices (or Vendors β†’ Bills for supplier bills) and click Create.

Invoicing > Customers > Invoices > Create
Invoicing > Customers > Invoices
AD
AllDraftPostedPaidOverdue+ Create
NumberCustomerDateDueTotalStatus
INV/2026/00340PT Maju Jaya2026-04-122026-05-1212,540,000Paid
INV/2026/00339CV Dua Putri2026-04-102026-04-103,850,000Overdue
INV/2026/00338UD Sinar Abadi2026-04-092026-05-098,120,000Posted
Customer Invoices list β€” status pills at a glance; click "+ Create" to start a new invoice

Select the Customer

Pick the Customer partner. HMX pre-fills Journal, Currency, Fiscal Position (for tax mapping), and Payment Term from the partner record β€” saving you 4 clicks on every invoice.

Invoicing > New Invoice
AD
Invoice Header
Customer *
CV Sumber Makmur
CV Sumber Makmur β€” NPWP 01.234.567.8-901.000
PT Maju Jaya
UD Sinar Abadi
Journal auto
Customer Invoices
Payment Term auto
Net 30 Days
Fiscal Position auto
Domestic Β· 11% VAT
Selecting a Customer triggers auto-fill of Journal, Payment Term, and Fiscal Position

Set the Invoice Date

The Invoice Date drives everything downstream: due date, fiscal period, sequence year. Due Date auto-computes from the Payment Term (here, Net 30 β†’ +30 days).

Invoicing > New Invoice
AD
Dates & Period
Invoice Date *
πŸ“… 2026-04-15
Due Date auto +30d
πŸ“… 2026-05-15
Period
FP-2026-04 Open βœ“
Fiscal Year
FY-2026
Due Date auto-computes from Payment Term; Period is resolved from Invoice Date

Add Invoice Lines

For each line pick a Product, quantity, and unit price. The revenue account resolves from Product Category; Fiscal Position may override the tax. Subtotal recalculates on every edit.

Invoicing > New Invoice
AD
Invoice Lines
#ProductQtyUnit PriceTaxSubtotal
1SKU-A012 β€” Office Chair ErgoPro51,800,000VAT 11%9,000,000
2SKU-D104 β€” Standing Desk 140cm23,200,000VAT 11%6,400,000
3…(add product)β€”β€”β€”
+ Add Line
Each line: pick product β†’ quantity β†’ price; tax auto-applies from Fiscal Position

Review Subtotal, Tax, and Total

The totals block at the bottom is read-only β€” computed server-side on save. Verify before confirming: Subtotal = sum of line subtotals, Tax = sum of computed tax per line, Total = Subtotal + Tax.

Invoicing > New Invoice
AD
Totals
Subtotal15,400,000
VAT 11%1,694,000
TotalIDR 17,094,000
Server-computed totals β€” these are the exact amounts that will hit AR and VAT Payable

Confirm the Invoice

Click Confirm. The status flips from Draft to Posted. HMX assigns the invoice number from the journal sequence (e.g. INV/2026/00341), creates a Journal Entry, and posts: debit Accounts Receivable total, credit Revenue (subtotal) and VAT Payable (tax).

Invoicing > Customers > INV/2026/00341
AD
INV/2026/00341 Posted
Send by EmailRegister Payment
DraftPostedPaid
Journal Entry Created
AccountDebitCredit
1-2000 Accounts Receivable17,094,000β€”
4-1000 Sales Revenueβ€”15,400,000
2-2100 VAT Output Payableβ€”1,694,000
Linked entry: SAL/2026/00341 Β· Partner ledger updated: CV Sumber Makmur +17,094,000
After Confirm: invoice number assigned, Journal Entry created, ledger and AR updated atomically

Document Rules & Prepayments

  • Draft vs. Posted β€” only drafts are editable. Posting locks the document and creates the ledger impact. Cancelling a posted document requires a reversing entry.
  • Fiscal Position β€” maps default accounts and taxes per partner (e.g. export customer β†’ 0% tax, domestic β†’ 11% VAT). Applied at line level when the document is saved.
  • Prepayment flag β€” has_prepayment marks documents that consume a customer prepayment; linked via prepaymentdetail rows that reconcile the prepaid amount before touching AR.
  • Reconciliation β€” posted documents sit against the partner's AR/AP balance until a Payment reconciles them. Partial payments leave the remainder open.

Account Document Technical Reference

Model: accountdocument

FieldTypeNotes
journalFK AccountJournalDrives sequence & default account
periodFK FiscalPeriodDerived from date
fiscal_yearFK FiscalYearDerived from period
journal_entryFK JournalEntryCreated on confirm
fiscal_positionFK FiscalPositionTax / account remap per partner
has_prepaymentBooleanFlags prepayment consumption

Model: accountdocumentline

Each line carries an account FK, quantity, unit price, and M2M taxes. core_invoicing extends this model to 16 fields including discount, unit-of-measure, tax-base amount, and line-level fiscal position override.

πŸ’‘Both core_accounting and core_invoicing define AccountDocument β€” the accounting module declares the bare model; the invoicing module extends it with sellable/buyable fields.

What is a Payment?

A Payment represents money moving in or out of a bank / cash account that belongs to your company. Customer payments reduce the partner's receivable balance; vendor payments reduce the payable balance. Each payment posts a journal entry through the chosen bank or cash journal.

Three payment flavors live in HMX:

  • Account Payment β€” the default cash / bank movement, reconciled against one or more Account Documents.
  • Cheque Payment β€” dated cheques with their own lifecycle (issued β†’ cleared / bounced), tracked via accountchequepayment.
  • Deposit β€” batch multiple incoming cheques / transfers into a single bank deposit slip, reconciled as a group.

How to Register a Payment

Step 1 β€” Start from a Posted Invoice

Open a posted customer invoice and click Register Payment in the header. Alternative entry: Invoicing β†’ Payments β†’ Create. Starting from the invoice auto-fills the amount and partner for you.

Path: Invoicing β€Ί Invoices β€Ί INV/2026/00341 β€Ί Register Payment
Invoicing β€Ί INV/2026/00341
AD
INV/2026/00341 β€” CV Sumber Makmur Posted
πŸ’³ Register PaymentSendPrint
Summary
Total
17,094,000 IDR
Amount Due
17,094,000
Due Date
πŸ“… 2026-05-15
Status
Unpaid
Click "Register Payment" on the posted invoice to open the payment form pre-filled

Step 2 β€” Pick the Payment Journal

Choose which Journal the money is moving through β€” Bank or Cash. The journal's configured accounts decide where the payment posts: the main bank/cash account for the clearing, and a transit account for pending clearance.

Invoicing β€Ί Register Payment
AD
Register Payment β€” CV Sumber Makmur
CancelConfirm Payment
Journal
Payment Journal *
Bank β€” BCA β–Ύ
Select Journal
Bank β€” BCA1-1200Bank
Bank β€” Mandiri1-1300Bank
Cash on Hand1-1100Cash
β†’ Selecting Bank β€” BCA auto-resolves debit account 1-1200 and transit account 1-1210 Cash in Transit.
Journal choice picks the bank/cash account the payment lands in

Step 3 β€” Enter Amount, Date, and Memo

Confirm the Amount (pre-filled from the invoice if you came from there), Payment Date (defaults to today), and an optional Memo for bank-statement matching. The Period is auto-resolved from the date.

Invoicing β€Ί Register Payment
AD
Register Payment β€” CV Sumber Makmur
CancelConfirm Payment
Payment Details
Amount *
17,094,000 IDR
Payment Date
πŸ“… 2026-04-21
Period
FP-2026-04 Open βœ“
Memo
Payment for INV/2026/00341
Amount pre-filled from invoice; date defaults to today, period auto-resolves

Step 4 β€” Allocate Against Open Invoices

Choose which invoices this payment settles. Full or partial allocation is allowed. Any unallocated amount parks in a Suspense Account (set on the journal) until you match it later against a specific invoice.

Invoicing β€Ί Register Payment
AD
Register Payment β€” CV Sumber Makmur
CancelConfirm Payment
Allocate to Open Invoices
InvoiceDueOpenAllocate
β˜‘INV/2026/003412026-05-1517,094,00017,094,000
☐INV/2026/003122026-04-304,250,0000
☐INV/2026/002952026-04-121,875,0000
Fully allocated βœ“ Remaining: 0
Tick each invoice to allocate β€” partial amounts park in suspense until matched

Step 5 β€” Confirm

Click Confirm Payment. The payment posts a journal entry (bank debit / AR credit), and each allocated invoice flips to Paid or Partial. Payment number is assigned from the journal's sequence.

Invoicing β€Ί PAY/2026/00128
AD
PAY/2026/00128 Posted
Print ReceiptSend
Summary
From
CV Sumber Makmur
Amount
17,094,000 IDR
Journal
Bank β€” BCA
Allocated to
INV/2026/00341 Paid βœ“
Journal Entry Created
AccountDebitCredit
1-1200 Bank β€” BCA17,094,000β€”
1-2000 Accounts Receivableβ€”17,094,000
Payment posted β€” invoice marked Paid, GL impact: bank debit / AR credit
βœ…Bank-reconciled journals can match payments to bank statement lines automatically when use_bank_reconcile is enabled.

Cheque Handling

Cheques have a multi-stage lifecycle because the cash doesn't clear on the day it's received. HMX handles this with AccountChequePayment + AccountChequePaymentLine:

  1. Received β€” cheque is logged but not yet cleared; posts to an intermediate "cheques on hand" account.
  2. Deposited β€” bundled into an AccountDeposit batch and submitted to the bank.
  3. Cleared β€” bank confirms funds; the cheque line is marked paid and the intermediate balance moves to the actual bank account.
  4. Bounced β€” cleared state is reversed; a bounce history row is written to accountdeposithistory for audit.

Payment Technical Reference

Models

ModelFieldsPurpose
accountpayment13Generic cash / bank payment
accountpaymentline3Allocation rows against Account Documents
accountchequepayment22Cheque header with clearing status
accountchequepaymentline6Per-invoice allocation inside a cheque
accountdeposit16Bank deposit batch
accountdepositline11Individual deposit slip line
accountdeposithistory8Status transitions for audit (bounce, clear)

Journal Configuration

Payment posting uses three account fields from accountjournal:

  • default_account_id β€” the bank / cash account itself.
  • payment_debit_account_id β€” where incoming payments park temporarily before reconciliation.
  • payment_credit_account_id β€” where outgoing payments park pre-clearance.
  • suspense_account_id β€” catches unmatched payments awaiting allocation.

What is a Tax?

A Tax in HMX is a reusable percentage (or fixed amount) applied to invoice lines to produce a separate tax amount and posting. A tax belongs to a Tax Group for reporting and consolidation, and it declares two things the ledger needs: which percentage rule to apply, and which accounts to post tax-collected (output VAT) and tax-paid (input VAT) amounts into.

When an invoice is confirmed, each line runs through its assigned tax(es); a Tax Distribution row tells the system how to split the computed tax amount across accounts β€” useful for taxes that partially hit P&L and partially a balance-sheet account.

How to Configure a Tax

Step 1 β€” Open the Taxes List

Navigate to Accounting β†’ Configuration β†’ Taxes. You'll see every tax already defined, grouped by tax group. Click Create to add a new one.

Path: Accounting β€Ί Configuration β€Ί Taxes
Accounting β€Ί Configuration β€Ί Taxes
AD
AllSalesPurchaseWithholding+ Create
NameGroupTypeAmountActive
VAT 11% SalesPPN / VATPercentage11.00%Yes
VAT 11% PurchasePPN / VATPercentage11.00%Yes
WHT 2% (PPh 23)WithholdingPercentage2.00%Yes
Taxes list β€” existing taxes with rate and group; click Create to add a new one

Step 2 β€” Name and Assign a Tax Group

Enter a descriptive Name (e.g. VAT 11% Sales) and pick a Tax Group. Groups exist purely for reporting β€” they let you aggregate related taxes into a single line on the tax report (e.g. all VAT rates under "PPN / VAT").

Accounting β€Ί Configuration β€Ί New Tax
AD
New Tax
DiscardSave
Identification
Name *
VAT 11% Sales
Tax Group *
PPN / VAT β–Ύ
Scope
Sales
Company
HMX Indonesia
Name and Tax Group β€” the group is what aggregates rates on the tax report

Step 3 β€” Set Computation Type and Amount

Choose the Type β€” Percentage (most common, e.g. 11% of line total) or Fixed (a flat amount per line). Enter the Amount. For nested taxes (tax-on-tax), set Based On to Another tax's result.

Accounting β€Ί Configuration β€Ί VAT 11% Sales
AD
VAT 11% Sales
DiscardSave
Computation
Type *
Percentage β–Ύ
Amount *
11.00 %
Based On
Line base
Include in Price
No
β†’ On a 1,000,000 line: tax = 110,000. Total = 1,110,000.
Percentage type at 11%, computed on the line base

Step 4 β€” Configure Invoice Tax Distribution

The Tax Distribution table decides which accounts the computed tax amount lands in. One row per account. Percentages must sum to 100%. For a straightforward VAT, one row at 100% pointing to your VAT Output Payable account.

Accounting β€Ί Configuration β€Ί VAT 11% Sales
AD
VAT 11% Sales
DiscardSave
Tax Distribution (Invoice)
Based OnAccount%
Base2-2100 VAT Output Payable100.00
Sum = 100% βœ“
Preview on Invoice Line
LineBaseTaxTotal
Office Chair Γ— 59,000,00011% 990,0009,990,000
β†’ The 990,000 posts to 2-2100 VAT Output Payable on invoice confirmation.
Distribution routes the computed tax amount into specific accounts β€” must sum to 100%

Step 5 β€” Credit Note Distribution and Save

Add Credit Note Distribution rows if refunds should post differently than invoices (e.g. to a separate "VAT Refund" account). For most setups this mirrors the invoice distribution. Click Save β€” the tax is now assignable on product categories, invoice lines, and fiscal-position overrides.

Accounting β€Ί Configuration β€Ί VAT 11% Sales
AD
VAT 11% Sales Active
EditDuplicate
Credit Note Distribution
Based OnAccount%
Base2-2100 VAT Output Payable100.00
Sum = 100% βœ“
Usage
Assignable on
Product Categories Invoice Lines Fiscal Positions
Saved β€” tax is now assignable across product categories, invoice lines, and fiscal-position mappings

Tax Computation Rules

  • Tax Group β€” used to aggregate related taxes in reports (e.g. all VAT rates in one "VAT" bucket).
  • Distribution by (based_on_distribution) β€” tax can be computed on the line base, or on another tax's result (nested taxes, e.g. surcharge on VAT).
  • Fiscal Position override β€” an export customer's fiscal position can replace a 11% VAT with a 0% VAT on the fly without editing the invoice line.
  • Rounding β€” tax amounts round at line level by default; set the company-wide rounding rule for global or per-document totals.

Tax Technical Reference

Models

ModelPurpose
accounttaxThe tax record itself (rate, group, accounts)
accounttaxgroupReporting group for one or more taxes
accounttaxdistributionPer-account split of a computed tax amount (invoices)
accounttaxcreditnotedistributionPer-account split for credit notes / refunds

What Does This Module Do?

The core_inventory_accounting module has a single purpose: extend Product Category with accounting metadata so that when Inventory moves stock, the move posts correctly to the ledger. Without it, stock transactions happen in a valuation silo disconnected from financial reporting.

The extension adds six fields to productcategory β€” typically the Stock Valuation Account (where inventory value sits on the balance sheet), the COGS Account (where cost of goods sold lands on shipment), the Stock Input and Stock Output interim accounts used during receipt / delivery, and the Valuation Method (FIFO, Weighted Average, Standard).

Valuation Flow

  1. Goods Receipt β€” debit Stock Valuation, credit Stock Input (cleared against the vendor bill).
  2. Goods Delivery β€” debit COGS, credit Stock Valuation at the product's current valuation.
  3. Internal Transfer β€” no P&L impact; stays within Stock Valuation.
  4. Inventory Adjustment β€” debit / credit Stock Valuation against a chosen variance account.
⚠️Install core_inventory_accounting before receiving your first goods in a new company. Retroactive valuation requires running a revaluation wizard on historical stock.

Inventory Accounting Technical Reference

Model: productcategory (extended)

The module adds 6 fields to the existing product.category table. Inspect via hmx shell:

from hmx.module.basic.core_inventory_accounting.models import ProductCategory
ProductCategory._meta.get_fields()

Depends on

base core_product core_accounting

All Data Models 60

ModuleModelClassFields
core_accountingaccountchequepaymentAccountChequePayment22
core_accountingaccountchequepaymentlineAccountChequePaymentLine6
core_accountingaccountdepositAccountDeposit16
core_accountingaccountdepositlineAccountDepositLine11
core_accountingaccountdeposithistoryAccountDepositHistory8
core_accountingaccountdocumentAccountDocument5
core_accountingaccountdocumentlineAccountDocumentLine1
core_accountingaccountjournalAccountJournal11
core_accountingaccountmovetemplateAccountMoveTemplate9
core_accountingaccountmovetemplatelineAccountMoveTemplateLine7
core_invoicingaccountdocumentAccountDocument23
core_invoicingaccountdocumentlineAccountDocumentLine16
core_invoicingaccountpaymentAccountPayment13
core_invoicingaccountpaymentlineAccountPaymentLine3
core_invoicingaccountpaymenttermAccountPaymentTerm15
core_invoicingaccountpaymenttermlineAccountPaymentTermLine5
core_invoicingaccountrecurringAccountRecurring25
core_invoicingaccountrecurringlineAccountRecurringLine10
core_invoicingaccounttaxgroupAccountTaxGroup13
core_invoicingaccounttaxAccountTax11
core_inventory_accountingproductcategoryProductCategory6

All API Endpoints 4

ModuleMethodPath
core_accountingGET/accountreport/version
core_accountingGET/journalentryline/version
core_invoicingPOST/accountstatementreport/export_pdf
core_invoicingGET/accountdocument/version