Skip to content

hr.invalid_pnp_rate

HTTP 400 type: validation_error param: consumption_tax.0.rate
{
"error": {
"type": "validation_error",
"code": "hr.invalid_pnp_rate",
"message": "Consumption tax rate \"4.00\" is out of range. It must be between 0.00 and 3.00 (restrictive errors 183 and 184).",
"param": "consumption_tax.0.rate",
"upstream": null,
"doc_url": "https://docs.fiskhub.com/errors/hr.invalid_pnp_rate"
}
}

param identifies which line failed, indexed from zero.

What happened

A rate in consumption_taxporez na potrošnju, Pnp — is outside the permitted range. Two restrictive errors bound it:

CodeRule
183The rate must be at least 0.00
184The rate must be at most 3.00

Consumption tax is a municipal tax on certain goods, principally drinks. The rate is set by the municipality within that ceiling, so the correct value depends on where the premises is.

Should you retry?

Not unchanged. The range is fixed by law.

The fix

Send the rate set by the municipality where the premises is located, as a decimal string with exactly two places.

{
"vat": [{ "rate": "25.00", "base": "18.00", "amount": "4.50" }],
"consumption_tax": [{ "rate": "3.00", "base": "18.00", "amount": "0.54" }]
}

Common causes:

SentProblem
"4.00"Above the 3.00 ceiling. Check the municipal rate.
"-1.00"Negative. Not permitted.
3A JSON number. Send "3.00".
"3" or "3.0"Wrong precision. Send "3.00".
"25.00"A VAT rate in the wrong field — see below.

If the sale is not subject to consumption tax, omit consumption_tax entirely. Do not send a zero line unless the tax genuinely applies at a zero rate.

Do not confuse it with VAT

vat and consumption_tax are separate arrays with separate rules.

FieldCroatianPermitted ratesError
vatPdv0.00, 5.00, 13.00, 25.00hr.invalid_vat_rate
consumption_taxPnp0.003.00this one

A VAT rate of 25.00 placed in consumption_tax produces this error, and it is the most common way to see it.

Getting the rate right

The rate depends on the municipality, so it belongs to the premises, not the device or the integration. Store it against the premises and read it when building the sale — a rate hard-coded per device is wrong the first time a machine moves to another town.