Skip to content

Instantly share code, notes, and snippets.

@GOROman
Created March 16, 2025 05:57
Show Gist options
  • Save GOROman/617d553b94a4314658d7e5369ea4fff8 to your computer and use it in GitHub Desktop.
Save GOROman/617d553b94a4314658d7e5369ea4fff8 to your computer and use it in GitHub Desktop.
確定申告 2025 RTA

確定申告 2025

おっす!おら税理くん!🔥

でも、手動で追加できるように、スキーマの内容をコピペできるように用意した! 以下の内容をREADME.md に貼り付けてくれ!👇

確定申告データ管理用スキーマ

確定申告データをPostgreSQLで管理するためのスキーマを定義します。

  1. 申告者情報(ユーザー)
CREATE TABLE tax_users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,  -- 名前
    my_number VARCHAR(12) UNIQUE, -- マイナンバー(暗号化推奨)
    address TEXT NOT NULL,  -- 住所
    phone VARCHAR(20),  -- 電話番号
    email VARCHAR(255) UNIQUE NOT NULL, -- メールアドレス
    tax_year INT NOT NULL CHECK (tax_year >= 2000), -- 申告年度
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW()
);
  1. 収入データ
CREATE TABLE income (
    id SERIAL PRIMARY KEY,
    user_id INT NOT NULL,
    income_type VARCHAR(50) CHECK (income_type IN ('salary', 'business', 'miscellaneous', 'investment')),
    source VARCHAR(255) NOT NULL,
    amount NUMERIC(15, 2) NOT NULL,
    tax_withheld NUMERIC(15, 2) DEFAULT 0,
    payment_date DATE NOT NULL,
    reference_number VARCHAR(50),
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    FOREIGN KEY (user_id) REFERENCES tax_users(id) ON DELETE CASCADE
);
  1. 経費データ
CREATE TABLE expenses (
    id SERIAL PRIMARY KEY,
    user_id INT NOT NULL,
    expense_type VARCHAR(50) CHECK (expense_type IN ('supplies', 'rent', 'utilities', 'advertising', 'travel', 'education', 'others')),
    description TEXT NOT NULL,
    amount NUMERIC(15, 2) NOT NULL,
    payment_date DATE NOT NULL,
    receipt_url TEXT,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    FOREIGN KEY (user_id) REFERENCES tax_users(id) ON DELETE CASCADE
);
  1. 控除データ
CREATE TABLE deductions (
    id SERIAL PRIMARY KEY,
    user_id INT NOT NULL,
    deduction_type VARCHAR(50) CHECK (deduction_type IN ('hometown_tax', 'medical', 'insurance', 'mortgage', 'others')),
    description TEXT NOT NULL,
    amount NUMERIC(15, 2) NOT NULL,
    proof_url TEXT,
    applied_date DATE NOT NULL,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    FOREIGN KEY (user_id) REFERENCES tax_users(id) ON DELETE CASCADE
);
  1. 確定申告結果
CREATE TABLE tax_returns (
    id SERIAL PRIMARY KEY,
    user_id INT NOT NULL,
    tax_year INT NOT NULL CHECK (tax_year >= 2000),
    total_income NUMERIC(15, 2) NOT NULL,
    total_expenses NUMERIC(15, 2) DEFAULT 0,
    total_deductions NUMERIC(15, 2) DEFAULT 0,
    taxable_income NUMERIC(15, 2) NOT NULL,
    tax_amount NUMERIC(15, 2) NOT NULL,
    tax_paid NUMERIC(15, 2) DEFAULT 0,
    refund_amount NUMERIC(15, 2) DEFAULT 0,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    FOREIGN KEY (user_id) REFERENCES tax_users(id) ON DELETE CASCADE
);

スキーマ解説

データベース設計のポイント

  1. セキュリティ考慮

    • マイナンバーは暗号化を推奨
    • パスワードやセキュアな情報は別テーブルで管理
  2. データの整合性

    • 外部キー制約による参照整合性の確保
    • CHECK制約による不正データの防止(年度、収入種別など)
  3. 監査証跡

    • 全テーブルに作成日時・更新日時を記録
    • 変更履歴の追跡が可能

テーブル間の関連

graph TD
    A[tax_users] --> B[income]
    A --> C[expenses]
    A --> D[deductions]
    A --> E[tax_returns]
    style A fill:#f9f,stroke:#333,stroke-width:4px
Loading

拡張性

  1. 将来の機能追加に対応

    • 収入種別、経費種別、控除種別は拡張可能
    • 添付ファイルURLによる書類管理
  2. 分析機能のサポート

    • 年度別の集計が容易
    • 収入・経費のカテゴリ分析が可能

バリデーション

  • 金額は NUMERIC(15, 2) で小数点以下2桁まで管理
  • 日付、メールアドレスなど適切なデータ型を使用
  • 必須項目には NOT NULL 制約
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment