Files
declaratrions-automatization/DeclarationAutomatization/Services/CodeLookupService.cs
T
Dianaka123 697ae44519 feat: единый файл Лист1+СПРАВКА, фильтры, сортировка, живой п/п
- Загрузка одного .xlsx (СПРАВКА + Лист1 в одном файле)
- Рег. номера берутся из СПРАВКА автоматически, группируются по (ТН ВЭД, Страна)
- Отдельный опциональный справочник кодов (CodesImportService)
- Фильтры: Все / Авто / Проверить / Нет кода / Без нетто
- Таблица сразу отсортирована по ТН ВЭД с живым обновлением п/п
- Начальный п/п: поле в UI, автоинкремент после экспорта
- Лист2: рамки, жёлтая строка при >1 рег. номере, итого по кол-ву
- Лист3: ТН ВЭД в колонке B вместо константы 09035
- Красный ErrorMessage под кнопкой загрузки, удалён SpravkaFileEntry
2026-04-07 11:47:31 +03:00

67 lines
2.1 KiB
C#

using System.Collections.Generic;
using System.Linq;
using DeclarationAutomatization.Models;
namespace DeclarationAutomatization.Services;
public class CodeLookupService
{
private readonly RulesPersistenceService _persistence;
private List<CodeLookupEntry> _entries;
public CodeLookupService(RulesPersistenceService persistence)
{
_persistence = persistence;
_entries = _persistence.Load();
}
// Загружает коды из внешнего xlsx-справочника (заменяет текущие записи)
public void LoadFromEntries(List<CodeLookupEntry> entries)
{
_entries = entries;
}
public bool HasEntries => _entries.Count > 0;
// Назначает декларационные коды всем позициям в списке
public void AssignCodes(IEnumerable<DeclarationItem> items)
{
foreach (var item in items)
AssignCode(item);
}
private void AssignCode(DeclarationItem item)
{
var entry = _entries.FirstOrDefault(e => e.TnVed == item.TnVed);
if (entry == null || entry.Codes.Count == 0)
{
item.DeclarationCode = "";
item.Confidence = ConfidenceLevel.Missing;
item.CandidateCodes = new List<string>();
return;
}
if (entry.Codes.Count == 1)
{
item.DeclarationCode = entry.Codes[0];
item.Confidence = ConfidenceLevel.Auto;
item.CandidateCodes = new List<string>(entry.Codes);
return;
}
// Несколько кодов — неоднозначность
item.CandidateCodes = new List<string>(entry.Codes);
item.DeclarationCode = entry.Codes[0];
item.Confidence = ConfidenceLevel.Review;
}
// Фиксирует ручной выбор кода декларантом
public void LearnFromManualEdit(string tnVed, string chosenCode)
{
_persistence.LearnCode(_entries, tnVed, chosenCode);
}
public List<CodeLookupEntry> GetAllEntries() => _entries;
}