CLI Finance ツールの開始
動機
これは、beancount に大きく基づいた財務ツール プロジェクトですが、機能が少なく、複雑さが大幅に軽減されています. beancount リポジトリとドキュメントを確認した後、使用できる機能が他にもたくさんあることに気付きました.新しい言語である C# で新しいプロジェクトを作成しようとして、このプロジェクトが生まれました.
概要
これはコンソール アプリケーションです.現在のところ、主要な依存関係は
System.CommandLine
パッケージのみです.コマンド コードは namespace Controllers.Commands
に記述されており、エントリの解析とフォーマットは namespace Controllers.VaultAccess
に記述されています.コマンド
これが私のコマンドの1つの例です.
using System;
using System.CommandLine;
using System.CommandLine.Invocation;
using Controllers.VaultAccess;
using Config;
namespace Controllers.Commands
{
public class NewCommand : Command
{
public NewCommand() : base("new", "Create a new vault entry")
{
AddArgument(DetailsArgument());
AddOption(DateOption());
AddOption(DirectiveOption());
AddOption(ValueOption());
Handler = CommandHandler.Create((DateTime date, string directiveType, string details, double currency) =>
{
JournalEntry entry = new JournalEntry(date, directiveType, details, currency);
Console.WriteLine(entry.ToString());
});
}
ロジックは未完成ですが、明確です.私のコマンド クラスは
System.CommandLine.Command
から継承し、初期化時にすべてのロジックを抽象化します.この形式を使用すると、オプションと引数を独自のプライベート メソッドにカプセル化できます. private Argument<string> DetailsArgument()
{
Argument<string> details = new Argument<string>("details");
details.Description = "The details of this journal entry";
return details;
}
private Option<DateTime> DateOption()
{
Option<DateTime> date = new Option<DateTime>("--date");
date.AddAlias("-d");
date.Description = "Date of entry";
date.SetDefaultValue(DateTime.Now);
return date;
}
仕訳記入
Beancount は非常に成熟したプログラムであり、エントリの入力形式をテストして完成させました.私はそれらの入力フォーマットを一致させ、日誌エントリの入力、解析、フォーマット、および出力を処理する
JournalEntry
クラスを作成しました.これは、ジャーナル ファイルに出力することを期待している形式の例です.
<Date> <Directive> <Details> <Value><Currency>
08/05/2021 open Liability:Food:Restaurant -35 USD
public class JournalEntry
{
private readonly int DATE_MAX_WIDTH = 13;
private readonly int DIRECTIVE_MAX_WIDTH = 7;
private readonly int DETAILS_MAX_WIDTH = 45;
private DateTime entryDate { get; set; }
private string directive { get; set; }
private string details { get; set; }
private double currency { get; set; }
public JournalEntry(DateTime date, string dir, string det, double cur)
{
entryDate = date;
directive = dir;
details = det;
currency = cur;
}
public override string ToString()
{
return string.Format("{0}{1}{2}{3}",
entryDate.ToShortDateString().PadRight(DATE_MAX_WIDTH),
directive.PadRight(DIRECTIVE_MAX_WIDTH),
details.PadRight(DETAILS_MAX_WIDTH),
currency);
}
次のステップ
私がまだ実装していない最も難しい機能は会計ロジックであり、おそらくもっと重要なのは、さまざまな会計レポートを作成するための仕訳帳の各行の解析です.私は、すべてのオープン資産と負債、勘定残高、および支出の履歴に関するレポートを追加する予定です.
このプロジェクトの利点は、それが最初ではないということです.既存の会計ツールからロジックの一部をコピーして、それらを構築して改善することができます.
Github リポジトリ
Reference
この問題について(CLI Finance ツールの開始), 我々は、より多くの情報をここで見つけました https://dev.to/cesd/starting-a-cli-finance-tool-5acfテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol