namespace AccountsDAL.DTO.Reports { public class TrialBalanceDetailReportDTO { public int AccountId { get; set; } public string AccountCode { get; set; } public string AccountName { get; set; } public int AccountGroupId { get; set; } public string AccountGroupCode { get; set; } public string AccountGroupName { get; set; } public int AccountScheduleId { get; set; } public string AccountScheduleCode { get; set; } public string AccountScheduleName { get; set; } // MACCOUNTSCHEDULE.ACCOUNTSCHEDULENATURE (0=Liability,1=Asset,2=DirectIncome,3=DirectExpense, // 4=IndirectIncome,5=IndirectExpense). public byte AccountScheduleNature { get; set; } // Server-computed 4-value bucket ({2,4}->Income, {3,5}->Expense) over AccountScheduleNature — // a real column (CASE expression in GET_TRIAL_BALANCE_DETAIL_ACCOUNT), not a client-side // transform, because the ReportViewer's Grid grouping (MREPORTVIEWFIELDS.ISGROUPCOLUMN) reads // column values straight off the response JSON with no computed-field layer of its own — only // populated at the Account grain (GET_TRIAL_BALANCE_DETAIL_ACCOUNT); empty at Group/Schedule // grain since those levels don't need the Type bucket for grouping. public string AccountScheduleTypeName { get; set; } // Signed net figures — positive = Dr, negative = Cr (matches AccountLedgerSummary's own // OpeningBalance/ClosingBalance convention). Debit/Credit are RAW period totals, NOT netted // against each other — both can be nonzero for the same row. public decimal OpeningBalance { get; set; } public decimal Debit { get; set; } public decimal Credit { get; set; } public decimal ClosingBalance { get; set; } // Null for a normal account row — set only for synthetic rows the DAL appends in C#. public string? RowLabel { get; set; } } }