mcpField
D
domain-fintech

domain-fintech

github.com/actionbook開発1.6k2.9k 回インストール9 週間前に更新
リポジトリ

domain-fintech について

金融ソフトウェア向けの Rust ドメインスキルです。正確な十進演算、不変の監査記録、トランザクションの一貫性を重視し、金額や台帳操作、追跡可能な記録のモデル化を支援します。

主な機能

  1. 01Decimal による金額精度の確保
  2. 02不変の取引と監査記録
  3. 03通貨・金額型のモデル化
  4. 04複式簿記の台帳パターン
  5. 05取引検証と構造化ログ

活用シーン

  1. 01通貨付き金額型のモデル化
  2. 02追跡可能な取引イベントの記録
  3. 03借方・貸方が一致する台帳の設計
  4. 04金額計算の精度損失の防止

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/actionbook/rust-skills --skill domain-fintech

インストール後、Claude Code で/domain-fintechを入力して読み込まれたか確認します。

詳細

フィンテック分野

レイヤー 3:ドメイン制約

ドメイン制約 → 設計への影響

ドメインルール設計上の制約Rust への影響
監査証跡不変レコードArc、変更なし
精度浮動小数点数を使わないrust_decimal
一貫性トランザクション境界明確な所有権
コンプライアンス完全なログ記録構造化トレーシング
再現性決定論的な実行競合状態なし

重要な制約

金融精度
RULE: Never use f64 for money
WHY: Floating point loses precision
RUST: Use rust_decimal::Decimal
監査要件
RULE: All transactions must be immutable and traceable
WHY: Regulatory compliance, dispute resolution
RUST: Arc<T> for sharing, event sourcing pattern
一貫性
RULE: Money can't disappear or appear
WHY: Double-entry accounting principles
RUST: Transaction types with validated totals

たどる ↓

制約から設計へ(レイヤー 2):

"Need immutable transaction records"
    ↓ m09-domain: Model as Value Objects
    ↓ m01-ownership: Use Arc for shared immutable data

"Need precise decimal math"
    ↓ m05-type-driven: Newtype for Currency/Amount
    ↓ rust_decimal: Use Decimal type

"Need transaction boundaries"
    ↓ m12-lifecycle: RAII for transaction scope
    ↓ m09-domain: Aggregate boundaries

主要なクレート

用途クレート
10進演算rust_decimal
日付/時刻chrono, time
UUIDuuid
シリアライズserde
検証validator

設計パターン

パターン用途実装
通貨のニュータイプ型安全性struct Amount(Decimal);
トランザクションアトミック操作イベントソーシング
監査ログトレーサビリティトレース ID を含む構造化ログ
台帳複式簿記借方/貸方の残高

コードパターン:通貨型

use rust_decimal::Decimal;

#[derive(Clone, Debug, PartialEq)]
pub struct Amount {
    value: Decimal,
    currency: Currency,
}

impl Amount {
    pub fn new(value: Decimal, currency: Currency) -> Self {
        Self { value, currency }
    }

    pub fn add(&self, other: &Amount) -> Result<Amount, CurrencyMismatch> {
        if self.currency != other.currency {
            return Err(CurrencyMismatch);
        }
        Ok(Amount::new(self.value + other.value, self.currency))
    }
}

よくある間違い

間違いドメイン制約への違反修正
f64 を使用する精度の損失rust_decimal
変更可能なトランザクション監査証跡が損なわれる不変性 + イベント
金額に String を使う検証できない検証済みニュータイプ
オーバーフローを黙って許す資金が消失するチェック付き算術

レイヤー 1 までたどる

制約レイヤー 2 のパターンレイヤー 1 の実装
不変レコードイベントソーシングArc、Clone
トランザクションのスコープ集約子要素の所有
精度値オブジェクトrust_decimal のニュータイプ
スレッドセーフな共有不変データの共有Arc(Rc ではない)

関連スキル

場面参照先
値オブジェクトの設計m09-domain
不変性のための所有権m01-ownership
共有のための Arcm02-resource
エラー処理m13-domain-error

コメント