Files
TakeoutSaaS.TenantApi/src/Domain/TakeoutSaaS.Domain/Finance/Models/FinanceCostModels.cs

215 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using TakeoutSaaS.Domain.Finance.Enums;
namespace TakeoutSaaS.Domain.Finance.Models;
/// <summary>
/// 成本明细项快照。
/// </summary>
public sealed record FinanceCostDetailItemSnapshot
{
/// <summary>
/// 明细标识。
/// </summary>
public long? ItemId { get; init; }
/// <summary>
/// 明细名称。
/// </summary>
public required string ItemName { get; init; }
/// <summary>
/// 明细金额。
/// </summary>
public decimal Amount { get; init; }
/// <summary>
/// 数量(人工类可用)。
/// </summary>
public decimal? Quantity { get; init; }
/// <summary>
/// 单价(人工类可用)。
/// </summary>
public decimal? UnitPrice { get; init; }
/// <summary>
/// 排序值。
/// </summary>
public int SortOrder { get; init; }
}
/// <summary>
/// 成本分类快照。
/// </summary>
public sealed record FinanceCostCategorySnapshot
{
/// <summary>
/// 成本分类。
/// </summary>
public required FinanceCostCategory Category { get; init; }
/// <summary>
/// 分类总金额。
/// </summary>
public decimal TotalAmount { get; init; }
/// <summary>
/// 分类明细。
/// </summary>
public IReadOnlyList<FinanceCostDetailItemSnapshot> Items { get; init; } = [];
}
/// <summary>
/// 成本录入页快照。
/// </summary>
public sealed record FinanceCostMonthSnapshot
{
/// <summary>
/// 统计维度。
/// </summary>
public required FinanceCostDimension Dimension { get; init; }
/// <summary>
/// 门店标识(租户维度为空)。
/// </summary>
public long? StoreId { get; init; }
/// <summary>
/// 成本月份。
/// </summary>
public required DateTime CostMonth { get; init; }
/// <summary>
/// 本月营业额。
/// </summary>
public decimal MonthRevenue { get; init; }
/// <summary>
/// 成本分类集合。
/// </summary>
public IReadOnlyList<FinanceCostCategorySnapshot> Categories { get; init; } = [];
}
/// <summary>
/// 月度趋势行。
/// </summary>
public sealed record FinanceCostTrendSnapshot
{
/// <summary>
/// 月份起始时间UTC
/// </summary>
public required DateTime MonthStartUtc { get; init; }
/// <summary>
/// 月度总成本。
/// </summary>
public decimal TotalCost { get; init; }
/// <summary>
/// 月度营业额。
/// </summary>
public decimal Revenue { get; init; }
}
/// <summary>
/// 月度成本明细表行。
/// </summary>
public sealed record FinanceCostMonthlyDetailSnapshot
{
/// <summary>
/// 月份起始时间UTC
/// </summary>
public required DateTime MonthStartUtc { get; init; }
/// <summary>
/// 食材成本。
/// </summary>
public decimal FoodAmount { get; init; }
/// <summary>
/// 人工成本。
/// </summary>
public decimal LaborAmount { get; init; }
/// <summary>
/// 固定费用。
/// </summary>
public decimal FixedAmount { get; init; }
/// <summary>
/// 包装耗材。
/// </summary>
public decimal PackagingAmount { get; init; }
/// <summary>
/// 月度总成本。
/// </summary>
public decimal TotalCost { get; init; }
/// <summary>
/// 月度营业额。
/// </summary>
public decimal Revenue { get; init; }
}
/// <summary>
/// 成本分析快照。
/// </summary>
public sealed record FinanceCostAnalysisSnapshot
{
/// <summary>
/// 统计维度。
/// </summary>
public required FinanceCostDimension Dimension { get; init; }
/// <summary>
/// 门店标识(租户维度为空)。
/// </summary>
public long? StoreId { get; init; }
/// <summary>
/// 当前月份。
/// </summary>
public required DateTime CostMonth { get; init; }
/// <summary>
/// 当前月总成本。
/// </summary>
public decimal CurrentTotalCost { get; init; }
/// <summary>
/// 当前月食材成本。
/// </summary>
public decimal CurrentFoodAmount { get; init; }
/// <summary>
/// 当前月营业额。
/// </summary>
public decimal CurrentRevenue { get; init; }
/// <summary>
/// 当前月支付成功订单数。
/// </summary>
public int CurrentPaidOrderCount { get; init; }
/// <summary>
/// 环比变化率(%)。
/// </summary>
public decimal MonthOnMonthChangeRate { get; init; }
/// <summary>
/// 分类构成。
/// </summary>
public IReadOnlyList<FinanceCostCategorySnapshot> CurrentCategories { get; init; } = [];
/// <summary>
/// 近 N 月趋势。
/// </summary>
public IReadOnlyList<FinanceCostTrendSnapshot> Trends { get; init; } = [];
/// <summary>
/// 明细表数据。
/// </summary>
public IReadOnlyList<FinanceCostMonthlyDetailSnapshot> DetailRows { get; init; } = [];
}