697ae44519
- Загрузка одного .xlsx (СПРАВКА + Лист1 в одном файле) - Рег. номера берутся из СПРАВКА автоматически, группируются по (ТН ВЭД, Страна) - Отдельный опциональный справочник кодов (CodesImportService) - Фильтры: Все / Авто / Проверить / Нет кода / Без нетто - Таблица сразу отсортирована по ТН ВЭД с живым обновлением п/п - Начальный п/п: поле в UI, автоинкремент после экспорта - Лист2: рамки, жёлтая строка при >1 рег. номере, итого по кол-ву - Лист3: ТН ВЭД в колонке B вместо константы 09035 - Красный ErrorMessage под кнопкой загрузки, удалён SpravkaFileEntry
67 lines
2.1 KiB
C#
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;
|
|
}
|