legal program司法試験問題をプログラム化する

とりあえず予定。

■今月中の予定

講座二周+セレクト過去問2周+論文コアメソッド1周

■来月からの予定

1.セレクト過去問は5周まで実行

2.論文コアメソッドは3周ほど実行

3.(New)論文用でアガルート論証集の暗記

→4.(1,2,3完了後)実践論文過去問

→5.時間に余裕あれば論文過去問をひたすら解く



司法試験の論文問題は論理的に文章を書く必要があるので、比較的にコード化しやすいと思った。よって書いてみた。by gemini


問題文



プログラム

## ------------------------------------------

# 参照条文(仮想クラスと定数として定義)

# ------------------------------------------

class CivilCode:

    """民法条文を定数として定義する仮想クラス"""

    SALE_CONTRACT = 555 # 売買契約

    AGENCY_GENERAL = 99 # 代理行為の効力

    UNAUTHORIZED_AGENCY = 113 # 無権代理

    APPARENT_AGENCY_SCOPE = 110 # 権限外の行為の表見代理


# ------------------------------------------

# 事案の事実(入力変数)

# ------------------------------------------

class CaseFacts:

    AUTHORITY_GIVEN = "甲土地の購入"

    ACT_EXECUTED = "乙土地の購入"

    PROOF_PRESENTED = ["実印", "委任状"]

    CLAIMANT = "C"

    DEFENDANT = "A"


def generate_paper_response(facts: CaseFacts) -> str:

    """

    CによるAに対する代金支払請求の可否を判定し、論文形式の結論と理由を生成する。

    """

    

    # 結論と理由を格納するための変数

    conclusion = ""

    reasoning = f"【請求の根拠】{facts.CLAIMANT}による{facts.DEFENDANT}に対する代金支払請求の根拠は、売買契約({CivilCode.SALE_CONTRACT}条)に基づく代金支払請求権である。\n"

    

    # ------------------------------------------

    # ステップ1:有権代理の検討

    # ------------------------------------------

    is_valid_basic_agency = (facts.ACT_EXECUTED == facts.AUTHORITY_GIVEN)

    

    reasoning += f"【有権代理の可否】本件において、Bに授与された代理権は{facts.AUTHORITY_GIVEN}であり、実行された行為は{facts.ACT_EXECUTED}である。両者は一致しないため、乙土地の売買契約の効果は、原則として{facts.DEFENDANT}に帰属しない({CivilCode.AGENCY_GENERAL}条1項、{CivilCode.UNAUTHORIZED_AGENCY}条1項)。\n"


    if is_valid_basic_agency:

        conclusion = f"よって、{facts.CLAIMANT}の請求は**認められる**。"

        return reasoning + conclusion

    

    # ------------------------------------------

    # ステップ2:例外規定(表見代理)の検討

    # ------------------------------------------

    

    # 1. 基本代理権の存在: 成立 (甲土地の購入権限)

    # 2. 権限外の行為: 成立 (乙土地の購入)

    

    # 3. 相手方に「信ずべき正当な理由」(善意無過失)があるか (CivilCode.APPARENT_AGENCY_SCOPE条)

    

    is_good_reason_for_C = False

    

    reasoning += f"【表見代理({CivilCode.APPARENT_AGENCY_SCOPE}条)の検討】では、権限外の行為の表見代理が成立しないか。基本代理権の存在と権限外の行為は認められる。\n"


    if "実印" in facts.PROOF_PRESENTED and "委任状" in facts.PROOF_PRESENTED:

        # Cの善意無過失の評価

        is_good_reason_for_C = True

        justification = "BがAから交付された実印および委任状を提示した。通常、正当な代理権を有しない者はこれらを交付されないと考えられるから、これを確認したCがBの代理権の存在を信じたことについて過失は認められない。"

        reasoning += f" - 正当な理由の有無:成立。理由:{justification}\n"

    else:

        # 簡略化のため、資料がない場合は不成立と仮定

        is_good_reason_for_C = False

        reasoning += " - 正当な理由の有無:不成立。理由:代理権を信じるに足る客観的な資料の提示がないため、Cに過失が認められる。\n"


    if is_good_reason_for_C:

        reasoning += "【結論の理由】以上より、権限外の行為の表見代理が成立し、乙土地の売買契約の効果はAに帰属する。"

        conclusion = f"**よって、{facts.CLAIMANT}の請求は認められる。**"

    else:

        reasoning += "【結論の理由】表見代理は成立せず、無権代理行為の効果はAに帰属しない。"

        conclusion = f"**よって、{facts.CLAIMANT}の請求は認められない。**"

        

    return "\n" + "-"*30 + "\n" + "### 答案構成(出力)\n" + "-"*30 + "\n" + reasoning + "\n" + conclusion


# ------------------------------------------

# 実行

# ------------------------------------------

paper_output = generate_paper_response(CaseFacts)

print(paper_output)


インプット (CaseFacts変更点) 処理の論点

AUTHORITY_GIVEN = "甲土地の購入" 基本代理権の存在

ACT_EXECUTED = "乙土地の購入" 権限外の行為

PROOF_PRESENTED = ["実印", "委任状"] 正当な理由の基礎


アウトプット

------------------------------

### 答案構成(出力)

------------------------------

【請求の根拠】CによるAに対する代金支払請求の根拠は、売買契約(555条)に基づく代金支払請求権である。

【有権代理の可否】本件において、Bに授与された代理権は甲土地の購入であり、実行された行為は乙土地の購入である。両者は一致しないため、乙土地の売買契約の効果は、原則としてAに帰属しない(99条1項、113条1項)。

【表見代理(110条)の検討】では、権限外の行為の表見代理が成立しないか。基本代理権の存在と権限外の行為は認められる。

 - 正当な理由の有無:成立。理由:BがAから交付された実印および委任状を提示した。通常、正当な代理権を有しない者はこれらを交付されないと考えられるから、これを確認したCがBの代理権の存在を信じたことについて過失は認められない。

【結論の理由】以上より、権限外の行為の表見代理が成立し、乙土地の売買契約の効果はAに帰属する。


**よって、Cの請求は認められる。**

などなど。
Previous Post
No Comment
Add Comment
comment url