feat: WPF-приложение для автоматизации оформления деклараций
- Чтение СПРАВКИ из Excel (ClosedXML), поддержка нескольких файлов - Группировка по ТН ВЭД: схлопывание строк с суммированием кол-ва/веса/суммы - Автоназначение кодов деклараций по справочнику ТН ВЭД (87 пар) - Цветовая маркировка: зелёный/жёлтый/красный по уровню уверенности - Самообучение: ручной выбор кода сохраняется в tnved_codes.json - Формирование Лист3 с разворачиванием строк по рег. номерам (ключевая функция) - Экспорт Лист2 + Лист3 в Excel
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace DeclarationAutomatization.Models;
|
||||
|
||||
public class CodeLookupEntry
|
||||
{
|
||||
public string TnVed { get; set; } = "";
|
||||
// Список кодов (обычно 1, реже 2–3 при неоднозначности)
|
||||
public List<string> Codes { get; set; } = new();
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace DeclarationAutomatization.Models;
|
||||
|
||||
public enum ConfidenceLevel
|
||||
{
|
||||
Auto, // код назначен однозначно — зелёный
|
||||
Review, // несколько вариантов — жёлтый
|
||||
Missing // ТН ВЭД не найден в справочнике — красный
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using System.Collections.Generic;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
|
||||
namespace DeclarationAutomatization.Models;
|
||||
|
||||
public partial class DeclarationItem : ObservableObject
|
||||
{
|
||||
public int SequentialNumber { get; init; }
|
||||
public string Description { get; init; } = "";
|
||||
public string TnVed { get; init; } = "";
|
||||
public string CountryId { get; init; } = "";
|
||||
public decimal Quantity { get; init; }
|
||||
public decimal AmountWithVat { get; init; }
|
||||
public decimal GrossWeight { get; init; }
|
||||
public decimal NetWeight { get; init; }
|
||||
public string RegNumber { get; init; } = "";
|
||||
public string RegDate { get; init; } = "";
|
||||
|
||||
[ObservableProperty]
|
||||
private string _declarationCode = "";
|
||||
|
||||
[ObservableProperty]
|
||||
private ConfidenceLevel _confidence = ConfidenceLevel.Missing;
|
||||
|
||||
// Все возможные коды при неоднозначном ТН ВЭД (для выпадающего списка)
|
||||
public List<string> CandidateCodes { get; set; } = new();
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace DeclarationAutomatization.Models;
|
||||
|
||||
public class Sheet3Row
|
||||
{
|
||||
public int SequentialNumber { get; init; }
|
||||
public string ClassifierCode { get; init; } = "09035";
|
||||
public string RegNumber { get; init; } = "";
|
||||
public string RegDate { get; init; } = "";
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
|
||||
namespace DeclarationAutomatization.Models;
|
||||
|
||||
// Запись о загруженном файле СПРАВКИ с настройкой начального п/п
|
||||
public partial class SpravkaFileEntry : ObservableObject
|
||||
{
|
||||
[ObservableProperty]
|
||||
private string _filePath = "";
|
||||
|
||||
[ObservableProperty]
|
||||
private int _startingNumber = 1;
|
||||
|
||||
public string FileName => System.IO.Path.GetFileName(FilePath);
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace DeclarationAutomatization.Models;
|
||||
|
||||
public class SpravkaItem
|
||||
{
|
||||
public int SequentialNumber { get; init; } // п/п (назначается приложением)
|
||||
public string Description { get; init; } = ""; // Наименование, характеристика...
|
||||
public string ProductCode { get; init; } = ""; // Код товара
|
||||
public string TnVed { get; init; } = ""; // ТН ВЭД
|
||||
public string CountryId { get; init; } = ""; // Страна ID
|
||||
public string Country { get; init; } = ""; // Страна
|
||||
public string Unit { get; init; } = ""; // Ед. Изм.
|
||||
public decimal Quantity { get; init; } // Количество, шт.
|
||||
public decimal AmountWithVat { get; init; } // Сумма с учётом НДС
|
||||
public decimal GrossWeight { get; init; } // ВЕС брутто, КГ
|
||||
public decimal NetWeight { get; init; } // Масса нетто, КГ
|
||||
public string RegNumber { get; init; } = ""; // Регистрационный номер
|
||||
public string RegDate { get; init; } = ""; // Дата регистрационного номера
|
||||
}
|
||||
Reference in New Issue
Block a user