## Сервіс taxes 
Даний сервіс підготалює дані по податкам, які потім будуть використані в генераціі 
xml документа для ДПС. Для герераціі податків є 2 методи:
- `getTaxesData` (безпосередньо разраховує податки за списком товарів)
- `getTaxPrograms` (повертає конфіг зі списком податків)

### Опис
В нас є 2 типи податків:
- ПДВ
- Акцизний податок

Товар може мати або один з податків, наприклад ПДВ, або обидва ПДВ+акциз, або жодного.
Якщо у товара немає податку, то це не фіскальний товар і нас він не цікавить.

Для розрахунку податка використовується формула:
```
Сума_податка = (сума_товара * процент_податка) / (100 + процент_податка);
```

### Важливий нюанс для випадка коли товар має обидва податки:
Якщо в нас товар зі складним податком (ПДВ+акциз), то спочатку рахуємо Акциз від `суми_товару`, 
а потім рахуємо ПДВ від `суми_товару - суми_акцизу`. Тобто в складному податку 
Акциз рахується завжди" першим.


### Дефолтні дані по податковим программам
```
export const defaultVATTaxList = {
  А: {
    type: 1,
    name: "Без ПДВ",
    percent: 0,
  },
  Б: {
    type: 2,
    name: "ПДВ 0%",
    percent: 0,
  },
  В: {
    type: 3,
    name: "ПДВ 7%",
    percent: 7,
  },
  Г: {
    type: 4,
    name: "ПДВ 20%",
    percent: 20,
  },
};

export const defaultExciseTaxList = {
  Д: {
    type: 5,
    name: "Акциз 5%",
    percent: 5,
  },
};

```
### Приклад структури даних товаріа з чеку по яким рахуємо податки
```
[
  {
    id: 54,
    name: "Сирна паличка",
    count: 4,
    unit: "шт",
    price: 200,
    discount: 30,
    taxPrograms: "ГД",
  },
  {
    id: 55,
    name: "Морозиво",
    count: 2,
    unit: "шт",
    price: 90.13,
    discount: 20,
    taxPrograms: "БД",
  },
  {
    id: 56,
    name: "Кава",
    count: 1,
    unit: "шт",
    price: 20.13,
    discount: 0.35,
    taxPrograms: "В",
  },
]
```

### Приклад структури даних, який буде використовувати даних наступний сервіс (XML генератор)
```
[
  {
    name: "Акциз 5%",
    percent: 5,
    program: "Д",
    sum: 44.298095238095236,
    turnover: 930.26,
    type: 5,
  },
  {
    name: "ПДВ 20%",
    percent: 20,
    program: "Г",
    sum: 122.22222222222223,
    turnover: 770,
    type: 4,
  },
  {
    name: "ПДВ 0%",
    percent: 0,
    program: "Б",
    sum: 0,
    turnover: 160.26,
    type: 2,
  },
  {
    name: "ПДВ 7%",
    percent: 7,
    program: "В",
    sum: 1.2940186915887848,
    turnover: 19.779999999999998,
    type: 3,
  },
]
```
Скруглення буде відбуватися у іншому сервісі разово, тому тут такі цифри.
