refactor: rename namespace to FiscalFlow and upgrade to .NET 10

- Rename InvoiceMaster.* to FiscalFlow.* namespace
- Upgrade from .NET 8 to .NET 10
- Update all NuGet packages to latest versions
- Update C# language version to 14.0
This commit is contained in:
Invoice Master
2026-02-04 23:18:59 +01:00
parent 05ea67144f
commit ad6ce08e3e
214 changed files with 29692 additions and 1820 deletions

View File

@@ -0,0 +1,163 @@
namespace FiscalFlow.Core.Entities;
public enum InvoiceStatus
{
Pending,
Uploading,
Processing,
Preview,
Importing,
Imported,
Failed
}
public enum SupplierMatchAction
{
UseExisting,
CreateNew,
SuggestMatch
}
public class Invoice : BaseEntity
{
public Guid ConnectionId { get; private set; }
public AccountingConnection Connection { get; private set; } = null!;
public string Provider { get; private set; } = string.Empty;
public string OriginalFilename { get; private set; } = string.Empty;
public string StoragePath { get; private set; } = string.Empty;
public long? FileSize { get; private set; }
public string? FileHash { get; private set; }
public string? ExtractionData { get; private set; }
public decimal? ExtractionConfidence { get; private set; }
public string? ExtractedSupplierName { get; private set; }
public string? ExtractedSupplierOrgNumber { get; private set; }
public string? ExtractedInvoiceNumber { get; private set; }
public DateTime? ExtractedInvoiceDate { get; private set; }
public DateTime? ExtractedDueDate { get; private set; }
public decimal? ExtractedAmountTotal { get; private set; }
public decimal? ExtractedAmountVat { get; private set; }
public int? ExtractedVatRate { get; private set; }
public string? ExtractedOcrNumber { get; private set; }
public string? ExtractedBankgiro { get; private set; }
public string? ExtractedPlusgiro { get; private set; }
public string ExtractedCurrency { get; private set; } = "SEK";
public string? SupplierNumber { get; private set; }
public decimal? SupplierMatchConfidence { get; private set; }
public SupplierMatchAction? SupplierMatchAction { get; private set; }
public string? VoucherSeries { get; private set; }
public string? VoucherNumber { get; private set; }
public string? VoucherUrl { get; private set; }
public string? VoucherRows { get; private set; }
public InvoiceStatus Status { get; private set; } = InvoiceStatus.Pending;
public string? ErrorMessage { get; private set; }
public string? ErrorCode { get; private set; }
public Guid? ReviewedBy { get; private set; }
public DateTime? ReviewedAt { get; private set; }
public string? AttachmentId { get; private set; }
public string? AttachmentUrl { get; private set; }
public DateTime? ProcessedAt { get; private set; }
public static Invoice Create(
Guid connectionId,
string provider,
string originalFilename,
string storagePath,
long? fileSize = null,
string? fileHash = null)
{
return new Invoice
{
ConnectionId = connectionId,
Provider = provider,
OriginalFilename = originalFilename,
StoragePath = storagePath,
FileSize = fileSize,
FileHash = fileHash,
Status = InvoiceStatus.Uploading
};
}
public void SetExtractionData(
string extractionData,
decimal confidence,
string? supplierName,
string? supplierOrgNumber,
string? invoiceNumber,
DateTime? invoiceDate,
DateTime? dueDate,
decimal? amountTotal,
decimal? amountVat,
int? vatRate,
string? ocrNumber,
string? bankgiro,
string? plusgiro,
string currency = "SEK")
{
ExtractionData = extractionData;
ExtractionConfidence = confidence;
ExtractedSupplierName = supplierName;
ExtractedSupplierOrgNumber = supplierOrgNumber;
ExtractedInvoiceNumber = invoiceNumber;
ExtractedInvoiceDate = invoiceDate;
ExtractedDueDate = dueDate;
ExtractedAmountTotal = amountTotal;
ExtractedAmountVat = amountVat;
ExtractedVatRate = vatRate;
ExtractedOcrNumber = ocrNumber;
ExtractedBankgiro = bankgiro;
ExtractedPlusgiro = plusgiro;
ExtractedCurrency = currency;
Status = InvoiceStatus.Preview;
}
public void SetSupplierMatch(string supplierNumber, decimal confidence, SupplierMatchAction action)
{
SupplierNumber = supplierNumber;
SupplierMatchConfidence = confidence;
SupplierMatchAction = action;
}
public void SetVoucher(string series, string number, string url, string rows)
{
VoucherSeries = series;
VoucherNumber = number;
VoucherUrl = url;
VoucherRows = rows;
}
public void SetStatus(InvoiceStatus status)
{
Status = status;
if (status == InvoiceStatus.Imported)
{
ProcessedAt = DateTime.UtcNow;
}
}
public void SetError(string errorCode, string errorMessage)
{
ErrorCode = errorCode;
ErrorMessage = errorMessage;
Status = InvoiceStatus.Failed;
}
public void SetReviewed(Guid reviewedBy)
{
ReviewedBy = reviewedBy;
ReviewedAt = DateTime.UtcNow;
}
public void SetAttachment(string attachmentId, string attachmentUrl)
{
AttachmentId = attachmentId;
AttachmentUrl = attachmentUrl;
}
}