愛記システムの基本設計:DApps側である愛記システム 行動レベルと科目の一貫管理 資産の科目③ | 続・ティール組織 研究会のブログ

続・ティール組織 研究会のブログ

ティール組織が話題になっているが、具現化するにはどうしたらよいか?
その研究を続けるにあたり、さらに次の形態である、続・ティール組織なるものまで視野に入れ、具体的な施策・行動内容を研究・支援する会。

先までは、"愛記"についての記載で、どのようにブロックチェーンSNSに組み込んで実装していけばよいのか、概念的なところからアプローチ方法を記載していった。概念設計としてはひとまず終えた。次は、フェデレーションモデル全体の基本設計といえるところまで、基本設計書に着手できるようなところまで、概念を具体化していきたい。そして、それにつながるDApps側である「愛記システム」を、Pythonプログラムで開発していきたい。

 

愛の行動のPL,BSを決算書として、個人単位、市町村単位、で公表するような愛記システムというものを考えている。愛の行動のデータベースはブロックチェーンのプログラムであり、日々の愛の行動による愛貨の移動を決算書にまとめていきたい。なお、市町村のブロックチェーンのプログラムは以前にも記載している。その市町村のブロックチェーンのプログラムにつながる愛記システムを、DApps側であるPythonプログラムとして設計したい。その場合、基本設計をどのような手順で進めていけばよいか、詳しく見ていこう。

 

愛記システムを設計するための基本手順を以下に示す。このシステムは、Pythonを用いて市町村のブロックチェーンと連携し、個人および市町村単位での愛の行動のデータを収集、記録し、決算書(PL、BS)として公表するものである。

基本設計のステップ

  1. 要件定義
  2. アーキテクチャ設計
  3. データベース設計
  4. API設計
  5. ブロックチェーンインターフェース
  6. 決算書の生成
  7. フロントエンド開発
  8. テストとデプロイ

基本設計の各ステップを順番に進めることで、ブロックチェーンとDAppsとして繋がる「愛記システム」の詳細な設計が可能になる。各ステップでは、関係者との協議やレビューを通じて設計内容を確定していくことが重要である。

1.要件定義

まず、基本設計の最初のステップである要件定義をしていきたい。どのような機能が必要か、どのような問題を解決するのかを洗い出したい。要件定義はシステム設計の最初の重要なステップであり、システムが解決するべき問題と、必要な機能を明確に定義するプロセスである。以下に、愛記システムのプログラムに必要な機能と解決すべき問題を列挙してみよう。

機能要件

  1. 愛の行動の記録

  2. 愛貨の移動の記録

  3. 決算書の生成

  4. 個人および市町村単位でのデータの集約

  5. データのブロックチェーンへの記録と取得

  6. 愛貨の管理

  7. ユーザー管理

  8. 通知機能

  9. レポート機能

  10. ダッシュボード

非機能要件

  1. セキュリティ

  2. 可用性

  3. パフォーマンス

  4. スケーラビリティ

  5. ユーザビリティ

  6. コンプライアンス

愛貨の移動の記録という課題を解決するため、DApps側のPythonプログラムに以下の主要機能を実装する必要がある。

  • 行動レベルと科目の一貫管理
  • 市町村内外の減額処理の自動化
  • イベントや講演時の愛貨倍増やボーナス付与機能
  • 複数人への同時愛貨送信とトリガー機能
  • インセンティブシステムの導入と透明性確保
  • 不正行為の監視と防止機能
     

行動レベルごとの科目定義ー資産の科目③

科目の定義は、各行動レベルに基づいて行われる。それぞれのレベルに対応する具体的な行動や取引内容を定義し、それを科目として登録する。前回に続き、より詳細に記載したい。

 

愛記を用いた仕訳のプロセスにおいて、各行動レベルに基づいた具体的な科目を使用して、愛貨のやり取りを記録し、損益計算書(PL)や貸借対照表(BS)を生成するシステムを設計していくことができる。

1. 資産(Assets)

・愛貨(Love Tokens)

・未使用愛貨(Unused Love Tokens)

・他者からの未収愛貨(Love Tokens Receivable)

・愛貨の投資(Love Tokens Invested)

・前払愛貨(Prepaid Love Tokens)

・他者への貸付愛貨(Loans Given in Love Tokens)

共同プロジェクト出資愛貨(Investment in Joint Projects with Love Tokens)

・他者から受け取る予定の愛貨(Receivables in Love Tokens)

愛の行動に関する知的財産(Intellectual Property Related to Love Actions)

・愛貨の再評価による資産(Assets from Revaluation of Love Tokens)


2. 負債 (Liabilities)

・未実施行動の債務(Liabilities for Unperformed Actions)

・目標未達成による債務(Liabilities for Unachieved Goals)

他者への未払愛貨(Love Tokens Payable)

・愛貨の有効期限延長による債務(Liabilities for Extended Expiry of Love Tokens)

・他者からの借入愛貨(Borrowings from Others in Love Tokens)

愛の行動義務(Obligation for Love Actions)

・取引キャンセルによる愛貨返還義務(Liabilities for Returning Love Tokens from Canceled Transactions)

前受愛貨(Love Tokens Received in Advance)

・他者への未使用愛貨の債務(Liabilities for Unused Love Tokens to Others)

市町村依頼行動債務(Liabilities for Municipality-Requested Love Actions)


3. 純資産 (Equity)

・繰越愛貨(Retained Love Tokens)

・愛貨評価差額(Love Token Valuation Difference)

・愛貨の変動差額(Change in Love Tokens)

・投資利益剰余愛貨(Surplus from Love Token Investments)

・愛貨贈与差額(Surplus from Love Token Donations)

・前期繰越未使用愛貨(Carried Forward Unused Love Tokens from Previous Periods)

・愛貨リザーブ(Love Token Reserve)

・純資産愛貨(Net Love Token Equity)

・愛貨の振替差額(Adjustment for Transferred Love Tokens)

・利益剰余愛貨(Love Token Surplus)


収益の科目(Revenue)

・愛の行動受取(Received Love Actions)

・目標達成による愛貨の獲得(Love Tokens Earned from Goal Achievements)

愛貨感謝返礼収益(Love Token Gratitude Return Revenue)

・受取愛貨の増加(Increase in Received Love Tokens)

愛貨紹介報酬(Love Token Referral Rewards)

愛貨還元収益(Revenue from Love Token Cashback)

愛貨ネットワーク拡大報酬(Love Token Network Expansion Bonus)

・他者の支援による愛貨の獲得(Love Tokens Earned from Supporting Others)

・コミュニティ活動による愛貨の獲得(Love Tokens Earned from Community Actions)

承認成功報酬愛貨(Love Tokens Earned from Approval Success)


5. 費用 (Expenses)

・愛の行動消費(Expense for Love Actions)

・愛貨感謝返礼費用(Love Token Gratitude Return Expense)

・他者への愛貨の贈与(Gift of Love Tokens to Others)

・目標未達成による損失(Loss from Unachieved Goals)

・他者への未実施行動による損失(Loss from Unperformed Actions to Others)

・愛貨の有効期限切れによる損失(Loss from Expiry of Love Tokens)

・愛貨の減少による費用(Cost from Reduction in Love Tokens)

・行動目標達成のための愛貨使用(Love Tokens Used for Achieving Action Goals)

・他者のサポートに伴う愛貨の消費(Love Tokens Spent on Supporting Others)

・愛貨の再投資費用(Reinvestment of Love Tokens)


6. 純利益(Net Love Token Flow)

・愛貨消費による貢献度(Contribution by Love Token Usage)

・他者からの愛貨受領による価値(Value from Love Tokens Received)

・愛貨の総消費(Total Love Token Usage)

・愛貨の純増減(Net Love Token Flow)


 

実際に仕訳例をさらに詳しく見ていこう。

■愛貨の投資(Love Tokens Invested) 

定義: 他者やプロジェクトに対して、将来的にリターン(愛貨の増加や評価など)が見込まれる形で使用された愛貨である。これは、現時点ではリターンが確定していないが、未来に利益を生む可能性のある「投資」として扱われる。簿記での「投資有価証券」に相当する。

 

特徴:投資はすぐにリターンが得られるわけではない。投資は他者やプロジェクトに対する長期的な支援を意図して行われ、リターンは後から発生することが期待される。


具体的な例:

例1: AさんがBさんのプロジェクトに愛貨を投資する場合

AさんがBさんのプロジェクトに対して愛貨を100投資した。この投資は、Bさんがプロジェクトを成功させることで、将来Aさんに評価や利益が戻ってくることを期待したものである。

  1. 投資時(AさんがBさんのプロジェクトに投資をする)

    • 借方: 愛貨の投資(Love Tokens Invested)100愛貨
    • 貸方: 愛貨(Love Tokens)100愛貨

    仕訳説明: Aさんは100愛貨をBさんのプロジェクトに投資し、その愛貨は現時点では使用されたわけではなく、将来のリターンを期待して「投資」科目に記録される。

例2: Bさんのプロジェクトが成功して、リターンを得る場合

Bさんのプロジェクトが成功し、Aさんにリターンとして150愛貨が返ってきた。この場合、投資の成功によりAさんの資産が増える。

  1. リターン時(Aさんがリターンを得る)

    • 借方: 愛貨(Love Tokens)150愛貨
    • 貸方: 投資リターン(Investment Return)150愛貨

    仕訳説明: AさんはBさんのプロジェクトから150愛貨のリターンを得て、これが資産に加わる。


プログラムでの仕訳例(Python):

# 愛貨の投資を記録する関数
def record_investment(user_id, investee_id, invested_tokens, description):
    # エラーハンドリング: 投資額が正の数か確認
    if invested_tokens <= 0:
        raise ValueError("投資する愛貨の額は正の数でなければなりません。")

    # 投資を記録
    investment_entry = {
        'user_id': user_id,
        'investee_id': investee_id,
        'invested_tokens': invested_tokens,
        'description': description,
        'status': 'invested',
    }

    # 愛貨の残高を減らし、投資に加える
    love_tokens[user_id] -= invested_tokens
    invested_love_tokens[user_id] = invested_love_tokens.get(user_id, 0) + invested_tokens

    # 投資記録に追加
    investments.append(investment_entry)

# 投資リターンを記録する関数
def record_investment_return(user_id, return_tokens, description):
    # エラーハンドリング: リターン額が正の数か確認
    if return_tokens <= 0:
        raise ValueError("リターンの額は正の数でなければなりません。")

    # リターンを記録
    love_tokens[user_id] = love_tokens.get(user_id, 0) + return_tokens
    investment_return_entry = {
        'user_id': user_id,
        'return_tokens': return_tokens,
        'description': description,
        'status': 'returned',
    }

    # 投資リターン記録に追加
    investment_returns.append(investment_return_entry)

# 初期データ
love_tokens = {'Aさん': 200}
invested_love_tokens = {}
investments = []
investment_returns = []

# AさんがBさんに100愛貨を投資する
try:
    record_investment('Aさん', 'Bさん', 100, 'Bさんのプロジェクト投資')
    print("Aさんの投資後の愛貨残高:", love_tokens['Aさん'])
    print("Aさんの投資記録:", investments)
except ValueError as e:
    print(e)

# Bさんのプロジェクト成功後、Aさんが150愛貨のリターンを受け取る
try:
    record_investment_return('Aさん', 150, 'Bさんのプロジェクト成功リターン')
    print("Aさんの投資リターン後の愛貨残高:", love_tokens['Aさん'])
    print("Aさんの投資リターン記録:", investment_returns)
except ValueError as e:
    print(e)

結果:

Aさんの投資後の愛貨残高: 100
Aさんの投資記録: [{'user_id': 'Aさん', 'investee_id': 'Bさん', 'invested_tokens': 100, 'description': 'Bさんのプロジェクト投資', 'status': 'invested'}]

Aさんの投資リターン後の愛貨残高: 250
Aさんの投資リターン記録: [{'user_id': 'Aさん', 'return_tokens': 150, 'description': 'Bさんのプロジェクト成功リターン', 'status': 'returned'}]


まとめ

  • 愛貨の投資(Love Tokens Invested)は、他者やプロジェクトに対して長期的なリターンを期待して投資した愛貨を記録する科目である。
  • リターンが発生した時点で、資産としてそのリターンを記録し、最初の投資が成功した場合に利益が発生する。

このように、投資として愛貨を使う場合の仕訳は、資産と収益を管理する上で重要な部分となる。

 


■前払愛貨(Prepaid Love Tokens) 

定義: 将来の行動やプロジェクトに対して事前に支払われた愛貨。まだ実行してない行動に対して、あらかじめ支払った愛貨の総額を記録する。

簿記での相当科目: 「前払金」

2. 具体的な場面例

  • AさんがBさんに対して、Bさんが将来行う予定のプロジェクト支援のために、事前に50愛貨を前払いとする。この場合、Aさんの帳簿には「前払愛貨」として記録される。

3. 仕訳例:

仕訳 1: 前払愛貨を支払った場合

AさんがBさんに将来の行動に対して50愛貨を前払いした場合:

借方:前払愛貨(Prepaid Love Tokens) 50愛貨  
貸方:愛貨(Love Tokens) 50愛貨

説明:

  • 借方: Aさんは、Bさんへの将来の行動消費を約束し、50愛貨を前払いしたので、「前払愛貨」として資産科目に記録する。
  • 貸方: Aさんの「愛貨」(現金に相当するもの)が減少するため、50愛貨を貸方に記録する。

仕訳 2: Aさんが行動を実行し、前払愛貨が消費された場合

Aさんが実際にプロジェクト支援の行動消費を実行し、Aさんが前払った50愛貨が消費された場合:

借方:愛の行動消費(Expense for Love Actions) 50愛貨  
貸方:前払愛貨(Prepaid Love Tokens) 50愛貨

説明:

  • 借方: Aさんの「愛の行動消費」に50愛貨を加算し、Aさんが行動を実行したことによる消費として認識する。
  • 貸方: Aさんが前払していた「前払愛貨」が50愛貨分消費されるので、これを貸方に記録して前払愛貨の残高を減少させる。

プログラム例(Python):

# 前払愛貨を記録する関数
def record_prepaid_tokens(user_id, to_user_id, prepaid_tokens, description):
    if prepaid_tokens <= 0:
        raise ValueError("前払愛貨の額は正の数でなければなりません。")

    # 前払愛貨を記録
    prepaid_token_entry = {
        'user_id': user_id,
        'to_user_id': to_user_id,
        'prepaid_tokens': prepaid_tokens,
        'description': description,
        'status': 'prepaid',
    }

    # 前払愛貨リストに追加
    prepaid_love_tokens.append(prepaid_token_entry)

    # 使用済愛貨の減少
    love_tokens[user_id] = love_tokens.get(user_id, 0) - prepaid_tokens

# 行動が実施された際の仕訳
def apply_action_profit(user_id, prepaid_tokens):
    if prepaid_tokens <= 0:
        raise ValueError("行動による利益は正の数でなければなりません。")

    # 行動による費用を記録
    action_expense_entry = {
        'user_id': user_id,
        'expense_tokens': prepaid_tokens,
        'status': 'expense_for_action',
    }

    # 前払愛貨の消費
    for entry in prepaid_love_tokens:
        if entry['user_id'] == user_id and entry['status'] == 'prepaid':
            prepaid_love_tokens.remove(entry)

    # 行動による消費リストに追加
    action_expenses.append(action_expenses_entry)

# 初期データ
love_tokens = {'Aさん': 100}
prepaid_love_tokens = []
action_expenses = []

# AさんがBさんに対して50愛貨を前払
record_prepaid_tokens('Aさん', 'Bさん', 50, '将来のプロジェクト支援')

# Aさんが実行した行動により、Aさんの前払愛貨が消費された
apply_action_expenses('Aさん', 50)

# 結果を表示
print("Aさんの愛貨残高:", love_tokens['Aさん'])
print("前払愛貨のリスト:", prepaid_love_tokens)
print("行動による消費リスト:", action_expenses)

 

結果:

Aさんの愛貨残高: 50
前払愛貨のリスト: []
行動による消費リスト: [{'user_id': 'Aさん', 'profit_tokens': 50, 'status': 'expense_for_action'}]

まとめ

  • 前払愛貨(Prepaid Love Tokens): 将来の行動消費やプロジェクト支援に対して事前に支払った愛貨を記録する。実際の行動が行われた後は、前払愛貨を消し込み、行動による費用として費用を記録する。
 

■他者へ貸付愛貨(Loans Given in Love Tokens) 

定義: 他者に対して貸し付けた愛貨。将来的に返済される予定の愛貨の残高を記録する。

 

簿記での相当科目: 「貸付金」

2. 具体的な場面例

  • AさんがBさんに対して、Bさんの将来的な行動や目標達成のために、50愛貨を貸し付けたとする。これは、Bさんが後で返済する予定の愛貨である。

3. 仕訳例

仕訳 1: AさんがBさんに50愛貨を貸し付けた場合

AさんがBさんに50愛貨を貸し付けたときの仕訳:

借方:他者へ貸付愛貨(Loans Given in Love Tokens) 50愛貨  
貸方:愛貨(Love Tokens) 50愛貨

説明:

  • 借方: AさんがBさんに貸し付けた50愛貨を「他者へ貸付愛貨」として資産科目に記録する。
  • 貸方: Aさんの「愛貨」(現金に相当するもの)が50愛貨減少するため、これを貸方に記録する。

仕訳 2: BさんがAさんに50愛貨を返済した場合

BさんがAさんに50愛貨を返済した場合の仕訳:

借方:愛貨(Love Tokens) 50愛貨  
貸方:他者へ貸付愛貨(Loans Given in Love Tokens) 50愛貨

説明:

  • 借方: AさんはBさんから貸し付けた愛貨の返済を受け、愛貨の残高が増えるため、「愛貨」に50愛貨を加算します。
  • 貸方: Aさんの「他者へ貸付愛貨」から50愛貨を減少させ、返済されたためにこの科目から消し込みを行います。

 


プログラム例(Python):

 

# 他者へ貸付愛貨を記録する関数
def record_loan_given(user_id, to_user_id, loan_tokens, description):
    if loan_tokens <= 0:
        raise ValueError("貸付愛貨の額は正の数でなければなりません。")

    # 貸付愛貨を記録
    loan_entry = {
        'user_id': user_id,
        'to_user_id': to_user_id,
        'loan_tokens': loan_tokens,
        'description': description,
        'status': 'loan_given',
    }

    # 貸付リストに追加
    loans_given.append(loan_entry)

    # 愛貨残高の減少
    love_tokens[user_id] = love_tokens.get(user_id, 0) - loan_tokens

# 貸付愛貨が返済された場合
def repay_loan(user_id, from_user_id, repaid_tokens):
    if repaid_tokens <= 0:
        raise ValueError("返済額は正の数でなければなりません。")

    # 愛貨の返済を記録
    love_tokens[user_id] += repaid_tokens

    # 貸付リストから該当の貸付を削除
    for entry in loans_given:
        if entry['user_id'] == user_id and entry['to_user_id'] == from_user_id and entry['status'] == 'loan_given':
            loans_given.remove(entry)
            break

# 初期データ
love_tokens = {'Aさん': 100}
loans_given = []

# AさんがBさんに50愛貨を貸し付ける
record_loan_given('Aさん', 'Bさん', 50, 'プロジェクト支援のための貸付')

# BさんがAさんに50愛貨を返済する
repay_loan('Aさん', 'Bさん', 50)

# 結果を表示
print("Aさんの愛貨残高:", love_tokens['Aさん'])
print("貸付リスト:", loans_given)

結果:

Aさんの愛貨残高: 100
貸付リスト: []

まとめ:

  • 他者へ貸付愛貨(Loans Given in Love Tokens): 他者に対して貸し付けた愛貨を記録し、返済があればその貸付金を消し込み、愛貨の残高を適切に反映させる。
 
いかがであろうか、これでだいぶ科目が具体的になってきたであろう。簿記と同じように、愛記でも科目をもって仕訳ができるということがわかってきた。引き続き科目を見ていきたい。