← User guide

CZ/SK Payment Symbols (VS/KS/SS)

Variable, constant and specific symbols on invoices, payments and bank statements, and matching incoming payments by them.

Version19.0.1.4.1
EditionCommunity and Enterprise
LicenceAGPL-3
Requiresaccount
Extended byaccount_abo_batch, account_multicash_batch, account_payment_fio_batch, account_payment_tatrabanka (delivered separately), account_payment_tatrabanka_batch (delivered separately), l10n_cssk_hr_payroll_garnishment_account, l10n_cssk_payment_symbols_ee, l10n_cssk_payment_symbols_iso20022, l10n_cssk_payment_symbols_oca, l10n_cssk_payment_symbols_payment_order, l10n_cz_base, l10n_cz_invoice, l10n_sk_invoice

What it is for

A Czech or Slovak payer identifies what they are paying with numeric payment symbols rather than with a free-text reference:

Symbol Slovak / Czech Length Typical use
VS variabilný / variabilní symbol up to 10 digits the invoice number — what the customer is asked to quote
KS konštantný / konstantní symbol up to 4 digits the kind of payment, e.g. 0008 goods, 0308 services
SS špecifický / specifický symbol up to 10 digits an extra identifier some payees ask for (insurers, leasing)

Odoo itself has only the free-text Payment Reference. This module gives the three symbols their own validated fields, fills them in for you, carries them into payment QR codes, payments and bank files, reads them back out of bank statements, and — with one of its add-ons — matches incoming payments to invoices by the variable symbol.

It depends on Odoo's account only, so it works on Community and Enterprise alike and does not need the rest of the Czech/Slovak localization.

The symbols are a banking convention, not a statutory requirement for ordinary commercial payments, in either country:

Because a variable symbol is unique only per issuer — two suppliers can both number an invoice 2026001 — the matching below never trusts the symbol alone when it knows who paid.

Setting it up

Accounting → Configuration → Settings, block Czech / Slovak Payment Symbols:

Setting What it does
Credit note variable symbol Whether a customer credit note carries its own number (default) or the variable symbol of the invoice it reverses. Choose the second if your customers net credit notes against the original invoice.
Default constant symbol Preset on every customer invoice and credit note, e.g. 0308 if you sell services. Leave empty for none.
Payment reference = variable symbol When a customer document is posted, its Payment Reference becomes the variable symbol. Odoo's own QR codes, the payment ID in e-invoices (UBL) and the standard bank matching then carry the VS with nothing else to configure. Already-posted documents are not changed.

On invoices, credit notes and bills

The three fields sit right after Payment Reference: on vendor bills in the main part of the form, on customer invoices and credit notes in the Other Info tab.

Every field stays editable. Anything other than digits, or a value longer than 10 / 4 / 10 digits, is refused when you save.

Customer receipts (out_receipt) show no symbols, because Odoo shows them no Payment Reference either.

Payment QR codes

When an invoice prints a payment QR code, its symbols are handed to the QR generator, so the code the customer scans carries the VS, KS and SS as separate values. The Czech and Slovak QR formats are provided by account_qr_code_qr_platba_cz (QR Platba), account_qr_code_pay_by_square_sk (PAY by square) and account_qr_code_payme_sk (payme.sk).

Payments

The Pay button (the Register Payment wizard) copies the symbols onto the payment it creates when every document being paid has the same value. A grouped payment over invoices with different variable symbols gets none — the recipient's bank could not match it to one invoice anyway. The symbols appear on the payment form after Memo, editable.

Bank statements

When a statement line is created — by a bank connector or a file import — the symbols are filled in from, in this order:

  1. values the bank connector supplies explicitly;
  2. the connector's transaction details, under the usual key names (variable_symbol, variableSymbol, vs, variable_code, and likewise for KS and SS);
  3. tokens in the label, the reference and the notes: VS:123, VS 123, /VS123, /VS/123, ?/VS123/SS/KS. CAMT files often carry the symbols only in the reference, which is why that is read too.

A zero symbol (SS0) counts as none. The variable symbol is also written at the front of the label (123 - original label, never twice), so Odoo's standard matching can see it. Lines that existed before the module was installed are not re-read.

Matching incoming payments by variable symbol

Installing one of two add-ons adds an exact variable-symbol pass to automatic bank reconciliation. Both install themselves when their engine is present:

They share one rule. A statement line with a variable symbol is compared with the open, posted documents of the same company whose symbol is the same, ignoring leading zeros (0042 = 42):

Advance invoices (proformas) are matched by variable symbol in the same pass when sale_order_advance_invoice_payment_match is installed.

Differences between the two:

Enterprise OCA
Runs before Odoo's own matching, which ignores labels of 5 characters or fewer and so can never match a short VS before OCA's own invoice matching
Payment covers the invoice reconciled reconciled
Partial payment reconciled, the rest of the invoice stays open reconciled, the rest of the invoice stays open
Overpayment the invoice is reconciled; the surplus goes on to Odoo's own matching and to you proposed in the widget, never reconciled automatically
Foreign currency single-document matches only left to OCA and to you
Several lines in one import — a line finds only what earlier lines of the same import left open: a second full payment of one invoice is left for you, instalments pay it together, and an overpayment left for you takes nothing from the next line
Extra VS column and VS search on the bank transactions list (KS, SS optional) —

Payment orders

With OCA payment orders (account_payment_order) installed, l10n_cssk_payment_symbols_payment_order copies each document's VS, KS and SS onto the payment lines created from it. The domestic bank-file exporters — account_abo (Czech ABO) and account_multicash — write them into the file as structured symbols. It has no screen of its own.

SEPA / ISO 20022 credit transfers

With Odoo Enterprise's ISO 20022 export, l10n_cssk_payment_symbols_iso20022 adds a choice to each bank journal, CZ/SK Symbols in pain.001:

Option What is written into the file
Remittance info (default) /VS/…/KS/…/SS/… appended to the unstructured remittance information; PLATBA/VS/… when there was none. A structured creditor reference (RF) is left as it is.
EndToEndId = variable symbol the bare variable symbol as the end-to-end identifier
Do not export symbols Odoo's standard file

Check with your bank before relying on either. Banks differ in what they parse back into symbols, and the Slovak convention described above writes ?/VS…/SS…/KS… — letters and digits without a slash between them, VS–SS–KS order — which neither option produces. Send one test payment and look at how the payee's statement shows it.

Limitations