Files
opensourcepos/app/Language/uk/Taxes.php
T
jekkosandobjecttothis 625bb3536a fix(taxes): reject negative tax rates and percentages (#4730)
* fix(taxes): reject negative tax rates and percentages

Reject negative tax values across all tax entry points so they can
never be persisted and produce inverted sales totals:

- Items::postSave / postBulkUpdate: validate tax_percents.* as
  nonNegativeDecimal (was unvalidated, persisted raw).
- Items::save_tax_data (CSV import): fail the row on a negative
  Tax N Percent instead of silently dropping the tax.
- Taxes::postSave: reject negative tax_rate before saving.
- Config::postSaveTax: reject negative default tax rates.

Adds non-negative regression tests for Items, Taxes and Config, plus
boundary tests proving a zero tax rate/percent is still accepted. New
language strings for the rejection messages.

* test: adopt test{Method}_{Purpose} naming convention for new tests

Align the negative-tax test method names with the convention established
in ConfigTest (testPostSave_RejectsNegativeTaxPercent, etc.), per review.

* fix(config): add language entries to all locales, extract TaxFixtureTrait

* fix(i18n): place tax_rate_non_negative in alphabetical order

Move the new tax_rate_non_negative entry to its correct alphabetical
position (after tax_rate_error_adding_updating) in all locale files.

---------

Co-authored-by: objecttothis <17935339+objecttothis@users.noreply.github.com>
2026-10-09 08:58:00 +02:00

85 lines
7.8 KiB
PHP

<?php
return [
"add_exception" => "Додати виняток",
"cascade" => "Каскад",
"cascade_sequence" => "Послідовність каскаду",
"city" => "Місто",
"code" => "Код",
"confirm_delete" => "Ви дійсно хочете видалити цей податковий код? Цю дію неможливо скасувати.",
"confirm_restore" => "Ви впевнені, що хочете відновити вибрані податкові коди?",
"default_tax_category" => "Категорія податку за замовченням",
"default_tax_rate" => "Ставка податку за замовчуванням",
"error_adding_updating" => "Не вдалось додати або оновити податковий код.",
"group_seq" => "Група послідовностей",
"jurisdiction_name" => "Назва юрисдикції",
"name" => "Назва",
"new" => "Новий податковий код",
"no_taxes" => "",
"no_taxes_to_display" => "Немає податкового коду для відображення.",
"reporting_authority" => "Звітний орган",
"round_half_down" => "Наполовину вниз",
"round_half_even" => "Тільки наполовину",
"round_half_odd" => "Наполовину непарного",
"round_half_up" => "Наполовину догори",
"rounding_code" => "Код округлення",
"sales_tax" => "Податок з продажу",
"sales_tax_by_invoice" => "Податок з продажу за рахунком",
"sequence" => "Послідовність",
"state" => "Державні податки",
"successful_deleted" => "Видалення пройшло успішно",
"tax_categories" => "Податкові категорії",
"tax_categories_configuration" => "Форма категорій податків",
"tax_categories_saved_successfully" => "Податкові категорії успішно збережено",
"tax_categories_saved_unsuccessfully" => "Податкові категорії збережено невдало",
"tax_category" => "Податкова категорія",
"tax_category_code" => "Код податкової категорії",
"tax_category_duplicate" => "Дублікат податкової категорії",
"tax_category_invalid_chars" => "Податкова категорія містить недійсні символи",
"tax_category_name" => "Назва податкової категорії",
"tax_category_new" => "Нова податкова категорія",
"tax_category_required" => "Необхідна податкова категорія",
"tax_code" => "Податковий код",
"tax_code_cannot_be_deleted" => "Збій у видаленні податкового коду.",
"tax_code_duplicate" => "Дублікат податкового коду",
"tax_code_invalid_chars" => "У податковому коді недійсні символи",
"tax_code_name" => "Ім'я податкового коду",
"tax_code_required" => "Податковий код - обов'язкове поле.",
"tax_code_successful_deleted" => "Податковий код успішно видалено",
"tax_code_successful_updated" => "Податковий код успішно оновлено",
"tax_code_successful_updating" => "Успішно оновлено. ",
"tax_code_successfully_added" => "Податковий код успішно додано. ",
"tax_code_type" => "Тип податкового коду",
"tax_codes" => "Податкові коди",
"tax_codes_configuration" => "Форма податкових кодів",
"tax_codes_saved_successfully" => "Податкові коди успішно збережено",
"tax_codes_saved_unsuccessfully" => "Не вдалося зберегти податковий код.",
"tax_excluded" => "Без податку",
"tax_group" => "Податкова група",
"tax_group_not_unique" => "Податкова група {0} не є унікальною",
"tax_group_sequence" => "Послідовність податкової групи",
"tax_included" => "Податок включений",
"tax_jurisdiction" => "Податкова юрисдикція",
"tax_jurisdiction_duplicate" => "Дублікат податкової юрисдикції",
"tax_jurisdiction_invalid_chars" => "Податкова юрисдикція містить недійсні символи",
"tax_jurisdiction_required" => "Необхідна податкова юрисдикція",
"tax_jurisdictions" => "Податкові юрисдикції",
"tax_jurisdictions_configuration" => "Форма податкових юрисдикції",
"tax_jurisdictions_saved_successfully" => "Податкові юрисдикції успішно збережені",
"tax_jurisdictions_saved_unsuccessfully" => "Податкові юрисдикції невдало збережені",
"tax_rate" => "Курс податку",
"tax_rate_configuration" => "Форма ставки податку",
"tax_rate_error_adding_updating" => "Помилка ставки податку при додаванні оновлення",
"tax_rate_non_negative" => "",
"tax_rate_numeric" => "Курс податку повинен бути позначений числом.",
"tax_rate_required" => "Курс податку мусить бути заповнений.",
"tax_rate_successful_updated" => "Успішне оновлення податкової ставки",
"tax_rate_successfully_added" => "Податкова ставка успішно додана",
"tax_rates" => "Ставки податку",
"tax_rates_configuration" => "Форма ставок податку",
"tax_rounding" => "Податкове округлення",
"tax_type" => "Вид податку",
"update" => "Оновіть категорію податку з продаж",
"vat_tax" => "НДС податок",
];