Files
declaratrions-automatization/DeclarationAutomatization/Services/TransformService.cs
T
Dianaka123 059895d1c3 feat: WPF-приложение для автоматизации оформления деклараций
- Чтение СПРАВКИ из Excel (ClosedXML), поддержка нескольких файлов
- Группировка по ТН ВЭД: схлопывание строк с суммированием кол-ва/веса/суммы
- Автоназначение кодов деклараций по справочнику ТН ВЭД (87 пар)
- Цветовая маркировка: зелёный/жёлтый/красный по уровню уверенности
- Самообучение: ручной выбор кода сохраняется в tnved_codes.json
- Формирование Лист3 с разворачиванием строк по рег. номерам (ключевая функция)
- Экспорт Лист2 + Лист3 в Excel
2026-04-05 23:19:58 +03:00

41 lines
1.5 KiB
C#

using System.Collections.Generic;
using System.Linq;
using DeclarationAutomatization.Models;
namespace DeclarationAutomatization.Services;
public class TransformService
{
// Группирует строки СПРАВКИ по ТН ВЭД → одна позиция Листа2.
// Количество, сумма, вес — суммируются.
// Рег. номер / дата — берётся первый непустой в группе.
// п/п — нумерация по порядку с 1.
public List<DeclarationItem> BuildDeclarationItems(IEnumerable<SpravkaItem> allItems)
{
int sequentialNumber = 1;
return allItems
.GroupBy(s => s.TnVed)
.Select(g =>
{
var first = g.First();
var regEntry = g.FirstOrDefault(s => !string.IsNullOrWhiteSpace(s.RegNumber));
return new DeclarationItem
{
SequentialNumber = sequentialNumber++,
Description = first.Description,
TnVed = first.TnVed,
CountryId = first.CountryId,
Quantity = g.Sum(s => s.Quantity),
AmountWithVat = g.Sum(s => s.AmountWithVat),
GrossWeight = g.Sum(s => s.GrossWeight),
NetWeight = g.Sum(s => s.NetWeight),
RegNumber = regEntry?.RegNumber ?? "",
RegDate = regEntry?.RegDate ?? "",
};
})
.ToList();
}
}