feat(pwa): значки операций в выписке

За неделю у активного водителя два десятка строк, и половина одинаковая по виду
(«аренда автомобиля» каждый день) — список сливается в стену текста. Значок даёт
зацепку для глаза: нужное находится, не читая каждую строку.

Подбор по тегу 1С, а не по знаку суммы: аренда, пени, штраф, ДТП, депозит,
пополнение, компенсация, коррекция — у каждого свой. Общий компонент, как в
складе CRM: разложенные по местам иконки разъезжаются размерами при первой правке.

Монохромные намеренно — цвет в этом списке уже занят и означает направление
денег, цветной значок с ним бы спорил.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-18 17:06:02 +10:00
co-authored by Claude Opus 5
parent 6becdd036c
commit 9187b5766e
3 changed files with 82 additions and 2 deletions
@@ -0,0 +1,25 @@
import { describe, it, expect } from "vitest";
import { operationIcon } from "./operationIcon";
/** Названия — настоящие теги 1С из выписки (finance_ledger_entries.tag). */
describe("значок операции", () => {
it("разные виды операций различаются", () => {
const names = [
"Аренда автомобиля",
"Пени",
"Штраф ГИБДД",
"Пополнение баланса через мобильное приложение",
"ДТП",
"Перевод с депозита на баланс",
].map((t) => operationIcon(t));
expect(new Set(names).size).toBe(names.length);
});
it("штраф ГИБДД и штраф компании — один значок: для водителя это одно и то же", () => {
expect(operationIcon("Штраф ГИБДД")).toBe(operationIcon("Штраф компании"));
});
it("незнакомый тег получает нейтральный значок, а не пустоту", () => {
expect(operationIcon("Списание за что-то новое")).toBeTruthy();
});
});