# Stage 1·Stage 2 세부 Task별 개선 방안 리포트 2
## 1. 작성 목적
본 리포트는 `discrepancy_report_2.md`에 제시된 원인과 개선 방안을 Stage 1 및 Stage 2의 실제 task 구조에 맞추어 세분화한 개선 설계서이다.
분석 대상 오류는 성수동 대지 관련 청구권인 `C-008`부터 `C-012`에서 발생하였다. 인간 변호사는 성수동 대지 사건을 다음과 같은 하나의 법률효과 사슬로 구성하였다.
```text
두 개의 오민한 대여금 및 지분별 근저당권
-> 2024. 7. 5. 4억 원 변제의 법정변제충당
-> 2023. 7. 6.자 3억 원 채무 및 3/5 지분 근저당권 소멸
-> 그 3/5 지분에 관한 담보권실행 경매 및 이문호 등기의 원인무효
-> 대한은행 후행 근저당권의 3/5 지분 부분 원인무효
-> 이문호의 2/5 소수 공유지분권자 지위와 박성희의 미등기 건물 사실상 처분권
-> 이문호와 박성희의 토지 사용이익 반환 중첩책임
```
반면 에이전트는 이 사슬을 청구별로 분리하면서 다음 오류를 냈다.
1. `C-008`에서 이문호 소유권이전등기 말소 범위를 `3/5 지분`이 아니라 성수동 대지 전체로 과잉 확장하였다.
2. `C-008` 및 `C-009`에서 2023. 7. 6.자 3억 원 채무, 15% 이율, 2024. 7. 5. 변제기, 3/5 지분 근저당권, 2024. 7. 5. 4억 원 변제의 법정변제충당 계산을 청구원인의 중심 chain으로 보존하지 못했다.
3. `C-009`에서 대한은행 근저당권말소를 `이문호가 원고 지분에 근저당권을 설정했으므로 무효`라는 단순 소유권 침해 논리로 서술하여, 인간 변호사가 구성한 `경매 및 이문호 등기의 3/5 지분 부분 원인무효에서 파생되는 후행 근저당권 무효` 구조를 약화시켰다.
4. `C-010`은 결론은 근접했으나, 앞선 `C-008`의 전체 무효 논리와 충돌하여 이문호를 `2/5 소수 공유지분권자`로 일관되게 전제하지 못했다.
5. `C-011`에서 박성희 부당이득 금액을 월 300만 원이 아니라 월 240만 원으로 산정하였다. 이는 `무권원 미등기 건물` 사건에서 `건물 없음, 보증금 없음` 기준 차임을 선택해야 하는데 `건물 있음, 보증금 없음` 기준을 선택한 오류이다.
6. `C-012`에서 이문호가 수령한 임대차보증금 3억 원의 3/5인 1억 8,000만 원을 원고에 대한 부당이득 원금처럼 청구하였다. 인간 변호사는 이를 청구하지 않고, 토지 사용이익 상당액인 월 300만 원을 청구하였다.
7. `C-011`과 `C-012`가 같은 토지 사용이익에 대한 시간대별 중첩책임이라는 점을 claim group으로 묶지 못했다.
8. 예상 항변인 민사집행법 제267조, 부동산등기 공신력 부재, 민법 제622조 차지권 문제를 청구원인 단계에서 충분히 통합하지 못했다.
본 리포트의 목표는 위 문제를 단순한 문안 수정으로 해결하는 것이 아니라, Stage 1에서 법률효과 계산 가능한 구조를 만들고, Stage 2에서 그 구조를 청구권 식별과 청구취지·청구원인 생성에 안정적으로 전달하는 것이다.
## 2. 전체 개선 방향
### 2.1 핵심 아키텍처 원칙
개선된 파이프라인은 다음 원칙을 따라야 한다.
1. `사실 나열`이 아니라 `법률효과 그래프`를 Stage 1에서 생성한다.
- 성수동 사건의 핵심은 대여금, 변제, 근저당권, 경매, 후행 등기, 미등기 건물 점유가 각각 독립 fact라는 점이 아니라, 이 fact들이 순차적으로 법률효과를 발생시킨다는 점이다.
2. `증거 강도`와 `법률 중심성`을 분리한다.
- F-041처럼 상담문서 기반이어서 증거 강도가 낮더라도, 이문호의 건물 신축일 및 토지 사용 시작일을 정하는 데 필수라면 `LEGAL_EFFECT_CRITICAL`로 보존해야 한다.
- 반대로 등기부 E-017처럼 증거 강도는 높지만 multi-event 문서인 경우, 단순 요약이 아니라 row 단위로 쪼개야 한다.
3. `1원고 x 1피고` claim atomicity는 유지하되, 사건 전체의 canonical theory graph와 claim group을 별도로 둔다.
- Stage 2 Task_B가 `C-011`, `C-012`를 피고별로 생성하더라도, 같은 토지 사용이익에 대한 책임이라는 `claim_group_id`를 부여해야 한다.
4. 청구취지의 범위는 법률효과 계산 결과에서 파생되어야 한다.
- `성수동 대지 전체 말소`인지 `3/5 지분 말소`인지는 문장 작성 단계에서 임의로 정할 수 없다.
- `payment_allocation_result.released_fraction = 3/5`와 `registry_row_graph.validity_scope.invalid = 3/5`가 청구취지 scope를 강제해야 한다.
5. Stage 2.3의 module은 표면 문안 규칙이 아니라 실체법 판단 모듈이어야 한다.
- `소유권이전등기말소 청구 문안`보다 앞서 `법정변제충당_담보채무_지분말소` 판단이 필요하다.
- `부당이득 청구 문안`보다 앞서 `무권원 미등기 건물의 토지 사용이익`, `valuation row 선택`, `보증금 배제`, `부진정연대` 판단이 필요하다.
### 2.2 이번 사건에서의 canonical answer target
개선 후 에이전트는 최소한 다음 구조를 산출해야 한다.
```text
C-008:
이문호는 성수동 대지 중 3/5 지분에 관하여
서울동부지방법원 등기국 2024. 10. 5. 접수 제25797호
소유권이전등기의 말소등기절차를 이행한다.
C-009:
대한은행은 성수동 대지 중 3/5 지분에 관하여
서울동부지방법원 2024. 10. 5. 접수 제25799호
근저당권설정등기의 말소등기절차를 이행한다.
C-010:
박성희는 별지 목록 제2항 기재 건물을 철거하고
별지 목록 제1항 기재 토지를 인도한다.
CG-UE-SEONGSU:
이문호는 2024. 11. 10.부터 토지 인도완료일까지 월 3,000,000원,
박성희는 이문호와 공동하여 2024. 11. 20.부터 토지 인도완료일까지 월 3,000,000원을 지급한다.
```
### 2.3 새 공통 데이터 구조 제안
다음 구조들은 기존 산출물 schema를 깨지 않는 additive field로 추가하는 방식이 적절하다.
#### 2.3.1 `secured_debt_chain`
```json
{
"secured_debt_chains": [
{
"chain_id": "SDC-SEONGSU-01",
"loan_fact_id": "F-014",
"creditor": "오민한",
"debtor": "강용원",
"principal": 200000000,
"interest_rate_percent_per_annum": 10,
"maturity_date": "2024-01-05",
"secured_object": "성수동 대지 2/5 지분",
"registry_row_ids": ["E-017-EUL-01"],
"maximum_claim_amount": 260000000,
"status_after_payment_candidate": "partially_remaining"
},
{
"chain_id": "SDC-SEONGSU-02",
"loan_fact_id": "F-017",
"creditor": "오민한",
"debtor": "강용원",
"principal": 300000000,
"interest_rate_percent_per_annum": 15,
"maturity_date": "2024-07-05",
"secured_object": "성수동 대지 3/5 지분",
"registry_row_ids": ["E-017-EUL-02"],
"maximum_claim_amount": 390000000,
"status_after_payment_candidate": "fully_extinguished"
}
]
}
```
#### 2.3.2 `payment_allocation_result`
```json
{
"payment_allocation_results": [
{
"allocation_id": "PAR-SEONGSU-2024-07-05",
"payment_fact_id": "F-025",
"payment_date": "2024-07-05",
"payment_amount": 400000000,
"designation_status": "not_designated",
"candidate_debt_chain_ids": ["SDC-SEONGSU-01", "SDC-SEONGSU-02"],
"legal_rules_applied": [
"민법 제479조 비용·이자·원본 충당",
"민법 제477조 법정변제충당"
],
"calculation_summary": {
"interest_total": 75000000,
"remaining_after_interest": 325000000,
"principal_to_high_interest_chain": 300000000,
"principal_to_low_interest_chain": 25000000
},
"fully_extinguished_chain_ids": ["SDC-SEONGSU-02"],
"partially_remaining_chain_ids": ["SDC-SEONGSU-01"],
"released_fraction": "3/5",
"remaining_encumbered_fraction": "2/5",
"review_flags": ["PAYMENT_ALLOCATION_REVIEW"]
}
]
}
```
#### 2.3.3 `registry_row_graph`
```json
{
"registry_rows": [
{
"registry_row_id": "E-017-GAP-TRANSFER-25797",
"evidence_index": "E-017",
"section": "갑구",
"right_type": "소유권이전",
"receipt_date": "2024-10-05",
"receipt_no": "제25797호",
"holder": "이문호",
"object_scope": "성수동 대지 전체",
"cause": "담보권실행을 위한 경매로 인한 매각",
"validity_scope_candidate": {
"valid_fraction": "2/5",
"invalid_fraction": "3/5",
"basis_allocation_id": "PAR-SEONGSU-2024-07-05"
}
},
{
"registry_row_id": "E-017-EUL-MORTGAGE-25799",
"evidence_index": "E-017",
"section": "을구",
"right_type": "근저당권설정",
"receipt_date": "2024-10-05",
"receipt_no": "제25799호",
"holder": "주식회사 대한은행",
"debtor": "이문호",
"maximum_claim_amount": 520000000,
"object_scope": "성수동 대지 전체",
"validity_scope_candidate": {
"invalid_fraction": "3/5",
"basis_registry_row_id": "E-017-GAP-TRANSFER-25797"
}
}
]
}
```
#### 2.3.4 `property_fraction_state_timeline`
```json
{
"property_fraction_state_timeline": [
{
"as_of": "2024-07-05",
"object": "성수동 대지",
"substantive_state": [
{
"fraction": "3/5",
"owner": "강용원",
"encumbrance_status": "3/5 지분 근저당권 피담보채무 소멸"
},
{
"fraction": "2/5",
"owner_or_valid_transfer_candidate": "오민한 경매절차 이후 이문호",
"encumbrance_status": "2/5 지분 근저당권 피담보채무 일부 잔존"
}
]
},
{
"as_of": "2024-10-05",
"object": "성수동 대지",
"registry_holder": "이문호",
"substantive_validity_by_fraction": [
{
"fraction": "2/5",
"status": "이문호 취득 유효 가능 영역"
},
{
"fraction": "3/5",
"status": "이문호 소유권이전등기 원인무효"
}
]
}
]
}
```
#### 2.3.5 `land_use_gain_timeline`
```json
{
"land_use_gain_timeline": {
"timeline_id": "LUG-SEONGSU-01",
"object": "성수동 대지",
"plaintiff_fraction": "3/5",
"events": [
{
"date": "2024-11-10",
"actor": "이문호",
"role": "unregistered_building_original_acquirer",
"legal_effect": "미등기 건물 소유자로서 그 부지 점유·사용",
"source_fact_id": "F-041"
},
{
"date": "2024-11-20",
"actor": "박성희",
"role": "unregistered_building_de_facto_disposition_holder",
"legal_effect": "미등기 건물 사실상 처분권자로서 부지 점유·사용",
"source_fact_ids": ["F-042", "F-044"]
}
],
"liability_relation_candidate": {
"from": "2024-11-20",
"defendants": ["이문호", "박성희"],
"relation": "부진정연대 또는 공동 지급",
"same_economic_purpose": true
}
}
}
```
#### 2.3.6 `valuation_selection_matrix`
```json
{
"valuation_selection_matrix": {
"source_evidence_index": "E-003",
"rows": [
{
"row_id": "E-003-R-BUILDING-NO-DEPOSIT",
"condition": "건물 있음, 보증금 없음",
"monthly_rent": 4000000,
"legal_use_case": "건물 존재가 적법하게 차임 형성에 반영되는 경우"
},
{
"row_id": "E-003-R-NO-BUILDING-NO-DEPOSIT",
"condition": "건물 없음, 보증금 없음",
"monthly_rent": 5000000,
"legal_use_case": "무권원 건물이 토지소유자에게 불리하게 차임을 낮추지 못하는 경우"
}
],
"default_for_unauthorized_unregistered_building_case": "E-003-R-NO-BUILDING-NO-DEPOSIT",
"plaintiff_fraction": "3/5",
"selected_monthly_use_gain": 3000000,
"review_flags": ["VALUATION_ROW_SELECTION_REVIEW"]
}
}
```
#### 2.3.7 `lease_payment_semantics`
```json
{
"lease_payment_semantics": {
"deposit": {
"amount": 300000000,
"payer": "박성희",
"recipient": "이문호",
"legal_character": "returnable_security_deposit",
"not_automatically_landowner_unjust_enrichment_principal": true
},
"monthly_rent": {
"amount": 3000000,
"payer": "박성희",
"recipient": "이문호",
"legal_character": "contractual_rent_between_defendants",
"distinguish_from_objective_land_use_gain": true
},
"building_sale_price": {
"amount": 200000000,
"object": "성수동 건물",
"exclude_from_land_use_gain": true
}
}
}
```
#### 2.3.8 `claim_group`
```json
{
"claim_groups": [
{
"claim_group_id": "CG-SEONGSU-UE-01",
"group_title": "성수동 대지 무권원 점유·사용 부당이득반환",
"member_claim_ids": ["C-011", "C-012"],
"group_relief_structure": "time_sliced_joint_liability",
"liability_relation": "부진정연대 또는 공동 지급",
"canonical_relief": "이문호는 2024. 11. 10.부터, 박성희는 이문호와 공동하여 2024. 11. 20.부터 각 토지 인도완료일까지 월 3,000,000원 지급",
"excluded_items": [
{
"item": "임대차보증금 300,000,000원의 3/5 상당액",
"reason": "제3자 간 임대차계약상 반환 예정 담보성 금원으로서 원고의 토지 사용이익 반환청구 원금이 아님"
}
]
}
]
}
```
## 3. Stage 1 개선 방안
Stage 1은 현재 사건 개요를 파악하고 `client_goal.json`, `evidence_indexed.json`, `evidence_event_candidates.json`, `BO.json`, `actio_case_signals.json`, `evidence_actio_support.json`, `Fact_Ledger_base.json`, `fact_actio_support.json`, `stage1.html`을 생성한다.
이번 사건의 오류는 Stage 2에서 갑자기 생긴 것이 아니라, Stage 1이 성수동 사건의 법률효과 그래프를 충분히 구조화하지 못한 데서 시작하였다. 따라서 Stage 1의 개선 목표는 `증거를 요약하는 단계`에서 `청구권 식별에 필요한 실체법 상태표를 만드는 단계`로 확장되어야 한다.
### 3.1 Stage 1 Task_A: `client_goal.json` 생성 개선
#### 현재 역할
Task_A는 `client_meeting.md`를 읽고 원고의 목표, 당사자, 사건군, 후보 피고, 원하는 구제수단, issue cluster를 추출한다. 현재 산출물은 사용자의 목표를 요약하는 데는 유용하지만, 담보부 채권, 변제충당, 지분별 권리상태, 미등기 건물 점유, 피고들 간 책임 중첩을 기계가 읽을 수 있는 구조로 충분히 남기지 않는다.
#### 이번 사건에서의 실패 지점
Task_A가 상담문서에서 다음 신호를 강하게 포착했어야 한다.
1. 성수동 대지는 지분별 권리상태가 달라질 수 있는 부동산이다.
2. 오민한 대여금은 2건이고, 각 채무의 원금, 이율, 변제기, 담보 지분이 다르다.
3. 2024. 7. 5. 4억 원 변제는 여러 채무에 대한 충당 문제가 있는 핵심 사건이다.
4. 경매와 이문호 등기 및 대한은행 근저당권은 독립 사건이 아니라 위 변제충당 결과에서 파생된다.
5. 이문호와 박성희는 동일한 성수동 대지를 시간대별로 점유·사용한 자들이므로 부당이득 책임이 중첩될 수 있다.
6. 임대차보증금과 월 차임은 제3자 간 계약상 금원이지, 곧바로 원고의 부당이득반환 원금이 아니다.
#### 개선 목표
`client_goal.json.issue_clusters[*]`에 다음 성수동 사건 전용 hint를 추가한다.
```json
{
"cluster_id": "IC-SEONGSU-01",
"cluster_label": "성수동 대지 담보권실행 경매 및 미등기 건물 점유 분쟁",
"secured_property_dispute_profile": {
"has_multiple_secured_debts": true,
"requires_payment_allocation": true,
"requires_fractional_validity_analysis": true,
"secured_object_candidates": ["성수동 대지 2/5 지분", "성수동 대지 3/5 지분"],
"auction_or_registry_invalidity_expected": true
},
"fractional_title_issue_hint": {
"plaintiff_claimed_fraction": "3/5",
"possible_valid_fraction_for_defendant": "2/5",
"avoid_whole_property_cancellation_without_calculation": true
},
"land_use_gain_hint": {
"has_unregistered_building": true,
"possible_original_acquirer": "이문호",
"possible_de_facto_disposition_holder": "박성희",
"requires_joint_or_overlapping_liability_review": true
},
"lease_payment_semantics_hint": {
"deposit_should_not_be_directly_treated_as_landowner_gain": true,
"monthly_rent_between_defendants_distinct_from_objective_use_gain": true
},
"expected_defense_hints": [
"민사집행법 제267조",
"부동산등기의 공신력",
"민법 제622조 차지권"
]
}
```
#### 프롬프트 개선 문구
Task_A에 다음 지시를 추가한다.
```text
- 부동산 사건에서 여러 대여금, 여러 근저당권, 지분별 담보, 경매, 후행 등기가 함께 등장하면 이를 독립 issue로 흩뜨리지 말고 `secured_property_dispute_profile`에 묶어라.
- 변제금이 복수 채무에 영향을 줄 수 있으면 `requires_payment_allocation=true`로 표시하라.
- 전체 부동산이 아니라 지분별 유효/무효가 문제될 수 있으면 `requires_fractional_validity_analysis=true`로 표시하라.
- 미등기 건물, 건물 신축, 건물 매매, 대지 임대차가 함께 등장하면 `land_use_gain_hint`를 생성하라.
- 임대차보증금, 월 차임, 건물 매매대금은 각각 법적 성격이 다르므로 `lease_payment_semantics_hint`에 별도 표시하라.
```
#### 검증 게이트
Task_A 완료 전 다음 검증을 수행한다.
1. `대여금`, `근저당권`, `경매`, `지분`이 같은 cluster에 등장하는데 `requires_payment_allocation`이 없으면 warning을 발생시킨다.
2. 상담문서에 `2/5`, `3/5`가 등장하는데 `fractional_title_issue_hint`가 없으면 warning을 발생시킨다.
3. `미등기 건물`, `임대차`, `건물 매매`, `박성희`가 등장하는데 `land_use_gain_hint`가 없으면 warning을 발생시킨다.
4. 보증금 금액이 추출되었는데 `deposit_should_not_be_directly_treated_as_landowner_gain`이 없으면 warning을 발생시킨다.
### 3.2 Stage 1 Task_B1: `evidence_indexed.json` 생성 개선
#### 현재 역할
Task_B1은 `evidence_all.json`과 상담문서를 이용하여 증거목록을 authority catalog로 구조화한다. 현재는 `key_facts`, `key_dates`, `key_amounts`, `doc_semantic_flags`, `contract_components`, `valuation_contexts` 등을 추출한다.
#### 이번 사건에서의 실패 지점
Task_B1은 다음 정보를 더 강하게 구조화했어야 한다.
1. E-017 등기부는 한 문서 안에 여러 등기 row가 있는 multi-event 문서이다. `소유권이전 및 근저당권 설정/말소`라는 요약만으로는 부족하다.
2. E-017에는 이문호 소유권이전등기의 접수번호 `제25797호`와 대한은행 근저당권설정등기의 접수번호 `제25799호`가 존재한다. 이 값은 청구취지 특정에 필수이다.
3. 두 대여금 문서의 원금뿐 아니라 이율, 변제기, 담보 지분이 법정변제충당 계산에 필수이다.
4. E-003 감정표는 단순 금액표가 아니라, `어떤 법률상 상태에서 어떤 row를 선택해야 하는지`가 문제되는 자료이다.
5. E-004 계약서는 임대차와 건물 매매가 섞인 혼합 계약이다. 보증금, 월 차임, 건물 매매대금은 서로 다른 법적 성격으로 분리되어야 한다.
#### 개선 목표 1: 등기부 row graph 추출
`evidence_indexed.json.items[*]` 중 등기부 문서에는 다음 additive field를 추가한다.
```json
{
"registry_row_components": [
{
"registry_row_id": "E-017-GAP-TRANSFER-25797",
"section": "갑구",
"rank_no": "unknown_or_extracted",
"right_type": "소유권이전",
"receipt_date": "2024-10-05",
"receipt_no": "제25797호",
"cause": "담보권실행을 위한 경매로 인한 매각",
"holder": "이문호",
"object_scope": "성수동 대지 전체",
"claim_relevance": [
"C-008 target registry",
"C-009 derivative invalidity source"
]
},
{
"registry_row_id": "E-017-EUL-MORTGAGE-25799",
"section": "을구",
"right_type": "근저당권설정",
"receipt_date": "2024-10-05",
"receipt_no": "제25799호",
"holder": "주식회사 대한은행",
"debtor": "이문호",
"maximum_claim_amount": 520000000,
"object_scope": "성수동 대지 전체",
"claim_relevance": [
"C-009 target registry"
]
}
]
}
```
#### 개선 목표 2: 차용 및 담보 문서의 `secured_debt_component` 추출
각 차용 및 근저당권 관련 문서에는 다음 필드를 추가한다.
```json
{
"secured_debt_components": [
{
"component_id": "E-LOAN-2023-07-06",
"loan_date": "2023-07-06",
"creditor": "오민한",
"debtor": "강용원",
"principal": 300000000,
"interest_rate_percent_per_annum": 15,
"maturity_date": "2024-07-05",
"secured_object": "성수동 대지 3/5 지분",
"registry_receipt_no": "제8293호",
"maximum_claim_amount": 390000000,
"legal_relevance": "법정변제충당 결과 전액 소멸할 수 있는 고이율 채무"
}
]
}
```
#### 개선 목표 3: 감정표의 valuation row policy 추출
E-003에는 다음 field를 추가한다.
```json
{
"valuation_rows": [
{
"row_id": "E-003-R1",
"condition": "건물 있음, 보증금 있음",
"monthly_rent": 2500000,
"legal_use_case": "적법 임대차에서 보증금이 차임에 반영되는 경우"
},
{
"row_id": "E-003-R2",
"condition": "건물 있음, 보증금 없음",
"monthly_rent": 4000000,
"legal_use_case": "건물 존재가 적법하게 차임에 반영되는 경우"
},
{
"row_id": "E-003-R3",
"condition": "건물 없음, 보증금 없음",
"monthly_rent": 5000000,
"legal_use_case": "무권원 건물이 토지소유자의 사용이익 산정에 불리하게 반영되지 않는 경우"
}
],
"valuation_selection_notes": [
"미등기 무권원 건물 사건에서는 건물 존재가 토지소유자에게 불리한 감액 사유가 되는지 검토 필요",
"원고가 보증금을 수령하지 않은 경우 보증금 있음 row를 기본값으로 사용하지 말 것"
]
}
```
#### 개선 목표 4: 혼합 계약의 금원 성격 분리
E-004 같은 임대차·매매 혼합 문서에는 다음 field를 추가한다.
```json
{
"mixed_contract_payment_semantics": {
"land_lease_deposit": {
"amount": 300000000,
"payer": "박성희",
"recipient": "이문호",
"legal_character": "returnable_security_deposit",
"direct_landowner_unjust_enrichment_candidate": false
},
"land_monthly_rent": {
"amount": 3000000,
"payer": "박성희",
"recipient": "이문호",
"legal_character": "contractual_rent_between_defendants",
"must_compare_with_objective_use_gain": true
},
"building_sale_price": {
"amount": 200000000,
"payer": "박성희",
"recipient": "이문호",
"object": "성수동 건물",
"exclude_from_land_use_gain": true
}
}
}
```
#### 프롬프트 개선 문구
```text
- 등기부, 등기사항전부증명서, 등기내역 문서는 반드시 row 단위로 쪼갠다.
- 각 row마다 갑구/을구, 순위번호, 등기목적, 접수일, 접수번호, 원인, 권리자, 채무자, 채권최고액, 객체 범위를 추출한다.
- 청구취지 특정에 필요한 접수번호는 `key_facts` 요약에만 두지 말고 `registry_row_components[*].receipt_no`로 보존한다.
- 차용증, 근저당권 설정계약, 등기부 row가 연결되면 `secured_debt_components`를 생성한다.
- 복수 채무의 원금, 이율, 변제기, 담보 지분이 다르면 법정변제충당 계산 대상이므로 모두 구조화한다.
- 감정표는 금액만 추출하지 말고 row별 전제조건과 법률상 사용 가능성을 함께 추출한다.
- 임대차보증금, 월 차임, 매매대금이 한 문서에 같이 있으면 각각 별도 payment semantic으로 분리한다.
- 보증금은 원칙적으로 반환 예정 담보성 금원인지 검토하고, 원고가 직접 수령하지 않았다면 원고의 부당이득 원금으로 자동 전환하지 않는다.
```
#### 검증 게이트
1. 등기부 문서에 `접수번호`가 있는데 `registry_row_components`가 없으면 오류로 표시한다.
2. 차용금 fact에 이율 또는 변제기가 있는데 `secured_debt_components`가 없으면 warning을 표시한다.
3. 감정표 문서에서 2개 이상 valuation row가 추출되었는데 `legal_use_case`가 없으면 warning을 표시한다.
4. 임대차보증금이 추출되었는데 `returnable_security_deposit` 분류가 없으면 warning을 표시한다.
### 3.3 Stage 1 Task_B2: `evidence_event_candidates.json` 생성 개선
#### 현재 역할
Task_B2는 `evidence_indexed.json`을 기반으로 사건의 event/state 후보를 생성한다. 현재는 사건 흐름을 포착하지만, 성수동 사건처럼 `하나의 지급이 여러 법률효과를 발생시키는 구조`에서는 event를 더 세분화해야 한다.
#### 이번 사건에서의 실패 지점
Task_B2가 다음 event type을 분명히 만들지 못했기 때문에 Stage_C와 Stage_D1에서 법률효과 chain이 약해졌다.
1. `secured_debt_creation`
2. `mortgage_setting_by_fraction`
3. `undesignated_payment`
4. `payment_allocation_effect`
5. `mortgage_extinguishment_by_fraction`
6. `auction_application_after_extinguishment`
7. `auction_sale_and_registry_transfer`
8. `derivative_mortgage_setting_by_invalid_title_holder`
9. `unregistered_building_original_acquisition`
10. `de_facto_disposition_holder_acquisition`
11. `land_use_gain_start`
12. `liability_overlap_start`
#### 개선 목표
Task_B2는 event 후보를 다음처럼 `raw event`와 `legal-effect event`로 나누어야 한다.
```json
{
"event_candidates": [
{
"event_id": "EV-SEONGSU-LOAN-02",
"event_kind": "secured_debt_creation",
"date": "2023-07-06",
"actors": ["강용원", "오민한"],
"object": "성수동 대지 3/5 지분",
"source_evidence_index": "E-017",
"source_fact_candidate": "F-017",
"structured_payload": {
"principal": 300000000,
"interest_rate": "15%",
"maturity_date": "2024-07-05",
"secured_fraction": "3/5"
}
},
{
"event_id": "EV-SEONGSU-PAYMENT-ALLOC-01",
"event_kind": "payment_allocation_effect",
"date": "2024-07-05",
"source_event_ids": ["EV-SEONGSU-LOAN-01", "EV-SEONGSU-LOAN-02", "EV-SEONGSU-PAYMENT-01"],
"structured_payload": {
"fully_extinguished_debt": "2023-07-06 300m 15% debt",
"released_fraction": "3/5",
"remaining_debt": "2023-01-06 200m 10% debt partially remains"
},
"review_flags": ["LEGAL_CALCULATION_REQUIRED"]
}
]
}
```
#### 프롬프트 개선 문구
```text
- 원자료 event가 곧바로 법률효과를 발생시키는 경우, raw event와 legal-effect event를 모두 생성한다.
- 복수 채무에 대한 지정 없는 변제가 등장하면 `undesignated_payment` event와 별도로 `payment_allocation_effect` 후보를 생성한다.
- 등기부상 경매 매각과 후행 근저당권이 등장하면, 그 경매가 어떤 담보권에 기초했는지, 그 담보권의 피담보채무가 이미 소멸했는지 검토하는 event chain을 만든다.
- 미등기 건물 신축일과 미등기 건물 매수일은 점유·사용이익 발생 시점을 정하므로 `land_use_gain_start` 및 `liability_overlap_start` event 후보를 생성한다.
```
#### 검증 게이트
1. 복수 `secured_debt_creation` event와 하나의 payment event가 같은 creditor/debtor 사이에 존재하는데 `payment_allocation_effect`가 없으면 warning을 표시한다.
2. 경매 event가 있는데 그 기초 담보권과 연결되지 않으면 `AUCTION_BASIS_CHAIN_MISSING`을 표시한다.
3. 미등기 건물 매수 event가 있는데 원시취득 event가 없으면 `UNREGISTERED_BUILDING_ORIGINAL_ACQUISITION_MISSING`을 표시한다.
### 3.4 Stage 1 Task_C: `BO.json` 및 `actio_case_signals.json` 생성 개선
#### 현재 역할
Task_C는 상담문서 기반 BO와 evidence event candidates를 결합하여 법률상 의미 있는 Business Object 또는 사건 객체를 만든다. 현재 Stage 1의 이름과 기존 prompt에는 사해행위취소 사건 지원 성격이 강하게 남아 있어, 담보권실행 경매 및 미등기 건물 부당이득 사건의 BO가 충분히 풍부하지 않다.
#### 이번 사건에서의 실패 지점
Task_C가 다음 BO를 명시적으로 만들었어야 한다.
1. `BO-SEONGSU-SECURED-DEBT-CHAIN`: 두 오민한 채무와 각 담보 지분을 묶는 객체
2. `BO-SEONGSU-PAYMENT-ALLOCATION`: 4억 원 변제와 법정변제충당 결과 객체
3. `BO-SEONGSU-AUCTION-INVALIDITY`: 3/5 지분 경매 및 이문호 등기 무효 객체
4. `BO-SEONGSU-DERIVATIVE-BANK-MORTGAGE`: 대한은행 후행 근저당권 3/5 지분 원인무효 객체
5. `BO-SEONGSU-LAND-USE-GAIN`: 이문호·박성희의 토지 사용이익 반환 객체
6. `BO-SEONGSU-LIABILITY-OVERLAP`: 2024. 11. 20. 이후 공동 또는 부진정연대 책임 객체
#### 개선 목표
Task_C는 일반 BO 외에 `legal_effect_bo_type`을 부여한다.
```json
{
"bo_id": "BO-SEONGSU-PAYMENT-ALLOCATION",
"bo_type": "legal_effect_chain",
"legal_effect_bo_type": "payment_allocation_and_mortgage_extinguishment",
"asset_cluster_id": "IC-SEONGSU-01",
"source_event_ids": [
"EV-SEONGSU-LOAN-01",
"EV-SEONGSU-LOAN-02",
"EV-SEONGSU-PAYMENT-01"
],
"source_fact_candidates": ["F-014", "F-017", "F-025"],
"computed_effect": {
"extinguished_secured_fraction": "3/5",
"remaining_secured_fraction": "2/5",
"supports_claim_ids": ["C-008", "C-009"]
},
"mandatory_downstream_roles": [
"secured_debt_extinguishment_basis",
"scope_of_registry_cancellation"
]
}
```
#### `actio_case_signals.json`와의 관계
이번 사건은 기존 사해행위취소형 `actio`만으로 처리하면 안 된다. Task_C는 다음을 분리해야 한다.
1. 사해행위취소 관련 signal은 기존 `actio_case_signals.json`에 둔다.
2. 성수동처럼 담보권, 경매, 등기, 부당이득이 핵심인 사건은 `secured_property_case_signals`와 `land_use_gain_case_signals`를 BO 내부 또는 별도 additive field로 둔다.
3. downstream Stage 2는 `actio_case_signals`만 보지 않고 `legal_effect_bo_type` 전체를 본다.
#### 프롬프트 개선 문구
```text
- BO는 단순 사건 단위가 아니라 청구권 식별에 필요한 법률효과 chain을 나타낼 수 있다.
- 복수 채무, 변제충당, 지분별 담보권 소멸, 경매 무효, 후행 등기 무효가 연결되면 하나의 `payment_allocation_and_mortgage_extinguishment` BO를 생성한다.
- 미등기 건물 원시취득자와 사실상 처분권자가 같은 토지를 점유·사용하면 `land_use_gain_liability_overlap` BO를 생성한다.
- 각 BO에는 downstream claim에서 반드시 포함해야 할 fact role을 `mandatory_downstream_roles`로 기록한다.
```
#### 검증 게이트
1. `requires_payment_allocation=true` cluster가 있는데 `payment_allocation_and_mortgage_extinguishment` BO가 없으면 오류를 표시한다.
2. `registry_row_components`에 후행 근저당권이 있는데 선행 등기 무효 BO와 연결되지 않으면 warning을 표시한다.
3. `land_use_gain_hint.requires_joint_or_overlapping_liability_review=true`인데 `land_use_gain_liability_overlap` BO가 없으면 warning을 표시한다.
### 3.5 Stage 1 Task_B3: `evidence_actio_support.json` 생성 개선
#### 현재 역할
Task_B3는 증거문서가 사해행위취소 claim에 어떤 방식으로 기여하는지 정리하는 보조 산출물이다.
#### 이번 사건에서의 문제
성수동 사건은 사해행위취소 claim만의 문제가 아니다. 그런데 Stage 1 전체가 actio 지원 구조에 치우치면, 담보권실행 경매 무효, 후행 근저당권 말소, 미등기 건물 부당이득 같은 별도 법률효과가 상대적으로 약하게 전달된다.
#### 개선 목표
기존 `evidence_actio_support.json`을 유지하되, 아래 병렬 지원 산출물을 additive하게 생성하는 방안을 권장한다.
1. `evidence_secured_property_support.json`
2. `evidence_registry_invalidity_support.json`
3. `evidence_land_use_gain_support.json`
4. `evidence_valuation_support.json`
각 파일의 최소 구조는 다음과 같다.
```json
{
"support_type": "secured_property",
"items": [
{
"evidence_index": "E-017",
"supports": [
"registry_row_graph",
"auction_invalidity_chain",
"derivative_bank_mortgage_invalidity"
],
"required_claim_roles": [
"target_registry_transfer",
"target_bank_mortgage",
"registry_specificity_source"
]
}
]
}
```
#### 프롬프트 개선 문구
```text
- 사해행위취소 support와 별도로, 담보부 부동산, 등기무효, 미등기 건물 점유, 감정표 기반 부당이득 사건 support를 추출한다.
- 증거가 특정 claim의 청구취지 특정에 필수이면, 일반 relevance가 낮아 보여도 required_claim_roles에 포함한다.
```
### 3.6 Stage 1 Task_D1: `Fact_Ledger_base.json` 생성 개선
#### 현재 역할
Task_D1은 `BO.json`과 `evidence_indexed.json`을 이용하여 `1 BO = 1 Fact` 원칙에 따라 base fact ledger를 생성한다.
#### 이번 사건에서의 실패 지점
`Fact_Ledger_base.json`에는 F-014, F-017, F-025, F-041, F-048 등이 존재했지만, 각 fact가 청구권에서 어떤 역할을 해야 하는지 충분히 구조화되지 않았다.
특히 다음 문제가 있었다.
1. F-014와 F-017의 원금은 보존되었으나, 이율과 변제기가 계산 가능한 field로 안정적으로 보존되지 않았다.
2. F-025의 4억 원 변제는 credibility가 낮다는 정보에 의해 de-prioritize 되었고, 법정변제충당 계산의 trigger로 충분히 승격되지 않았다.
3. F-041은 meeting-only 성격 때문에 약하게 처리되었으나, 이문호 부당이득 시작일을 정하는 핵심 fact이다.
4. F-048 감정평가 fact는 valuation row 선택 정책 없이 단순 금액 근거로 전달되었다.
#### 개선 목표
Fact ledger 항목에 다음 additive field를 추가한다.
```json
{
"fact_id": "F-025",
"fact_type": "payment",
"legal_centrality": "critical",
"proof_strength": "meeting_only_or_document_gap",
"proof_gap_flags": ["EVIDENCE_GAP"],
"legal_effect_roles": [
"payment_allocation_trigger",
"secured_debt_extinguishment_basis",
"registry_invalidity_basis"
],
"linked_structures": {
"payment_allocation_result_ids": ["PAR-SEONGSU-2024-07-05"],
"secured_debt_chain_ids": ["SDC-SEONGSU-01", "SDC-SEONGSU-02"]
},
"must_not_drop_in_claim_types": [
"소유권이전등기말소",
"근저당권설정등기말소"
]
}
```
```json
{
"fact_id": "F-041",
"fact_type": "unregistered_building_original_acquisition",
"legal_centrality": "critical",
"proof_strength": "meeting_only_core",
"legal_effect_roles": [
"land_use_gain_start",
"original_acquirer_liability_start",
"liability_overlap_basis"
],
"linked_structures": {
"land_use_gain_timeline_id": "LUG-SEONGSU-01"
},
"must_not_drop_in_claim_types": [
"부당이득반환",
"건물철거",
"토지인도"
]
}
```
#### 프롬프트 개선 문구
```text
- 각 fact에는 `proof_strength`와 별도로 `legal_centrality`를 부여한다.
- 증거가 약해도 청구취지 범위, 기산일, 책임 주체, 항변 반박에 필수이면 `legal_centrality=critical`로 둔다.
- `legal_centrality=critical` fact는 Stage 2 source_fact_ids에서 빠질 때 validation warning을 발생시킬 수 있도록 `must_not_drop_in_claim_types`를 기록한다.
```
#### 검증 게이트
1. F-025가 존재하는데 `payment_allocation_result_ids`가 없으면 오류를 표시한다.
2. F-017이 존재하는데 `secured_debt_chain_ids`가 없으면 warning을 표시한다.
3. F-041이 존재하는데 `land_use_gain_timeline_id`가 없으면 warning을 표시한다.
4. `proof_strength=low`인 fact라도 `legal_centrality=critical`이면 downstream에서 제외하지 않도록 별도 `must_consider` flag를 부여한다.
### 3.7 Stage 1 Task_D2: `fact_actio_support.json` 생성 개선
#### 현재 역할
Task_D2는 fact ledger와 actio support를 결합하여 각 fact가 사해행위취소 구조에서 어떤 의미를 갖는지 정리한다.
#### 개선 방향
Task_D2는 기존 역할을 유지하되, actio 전용 산출물만 downstream에 강하게 전달되는 편향을 줄여야 한다. 이를 위해 다음 병렬 fact support map을 생성한다.
1. `fact_secured_property_support.json`
2. `fact_registry_invalidity_support.json`
3. `fact_land_use_gain_support.json`
4. `fact_valuation_support.json`
예시는 다음과 같다.
```json
{
"support_type": "registry_invalidity",
"items": [
{
"fact_id": "F-017",
"roles": [
"secured_debt_extinguishment_basis",
"released_fraction_basis"
],
"claim_type_targets": [
"소유권이전등기말소",
"근저당권설정등기말소"
],
"mandatory_if_claim_uses_fact_ids": ["F-025", "F-036", "F-037"]
}
]
}
```
#### 검증 게이트
1. 소유권이전등기말소 claim 후보가 있을 때 `fact_registry_invalidity_support`가 비어 있으면 warning을 표시한다.
2. 부당이득반환 claim 후보가 있을 때 `fact_land_use_gain_support`와 `fact_valuation_support`가 비어 있으면 warning을 표시한다.
### 3.8 Stage 1 Task_Display: `stage1.html` 개선
#### 현재 역할
Task_Display는 Stage 1 산출물을 사람이 검토할 수 있는 HTML로 렌더링한다.
#### 개선 목표
성수동 사건 같은 복합 부동산 사건에서 `stage1.html`은 단순 fact list가 아니라 다음 보드를 표시해야 한다.
1. `담보채무 체인 보드`
- 각 채무의 원금, 이율, 변제기, 담보 지분, 등기 row, 피담보채무 소멸 여부를 표로 표시한다.
2. `법정변제충당 계산 보드`
- 4억 원 지급, 이자 7,500만 원, 남은 3억 2,500만 원, 고이율 채무 3억 원 전액 충당, 저이율 채무 2,500만 원 일부 충당을 표시한다.
3. `등기 row graph`
- 제25797호 소유권이전등기와 제25799호 대한은행 근저당권을 row 단위로 보여준다.
4. `지분별 권리상태 타임라인`
- 2024. 7. 5., 2024. 10. 5., 2024. 11. 10., 2024. 11. 20.의 상태를 표시한다.
5. `토지 사용이익 타임라인`
- 이문호 시작일, 박성희 시작일, 중첩책임 시작일, 월 사용이익 산정 기준을 표시한다.
6. `감정표 row 선택 보드`
- 월 240만 원 산정 row와 월 300만 원 산정 row를 비교하고, 선택 이유를 표시한다.
7. `위험 경고`
- 전체 말소 위험
- F-017 누락 위험
- F-041 누락 위험
- 임대차보증금 부당이득 원금 오인 위험
- joint liability group 누락 위험
#### 검증 게이트
HTML 생성 시 다음 warning card를 띄운다.
```text
PAYMENT_ALLOCATION_REQUIRED:
복수 피담보채무와 지정 없는 변제가 존재합니다. 청구취지 범위는 payment_allocation_result를 확인해야 합니다.
FRACTIONAL_CANCELLATION_SCOPE:
성수동 대지 전체 말소가 아니라 3/5 지분 부분 말소 가능성이 높습니다.
LEASE_DEPOSIT_NOT_DIRECT_GAIN:
임대차보증금은 원고의 부당이득 원금으로 자동 전환하지 마십시오.
```
## 4. Stage 2.1 개선 방안: Task_A/B/C
Stage 2.1은 Stage 1 결과물을 입력받아 `claim_identification_view.json`, `claims_identified.json`, `claims_identified_case_type.json`을 생성한다. 이번 사건에서 Stage 2.1의 핵심 개선은 `source_fact_ids 중심 claim 식별`에서 `role fact + legal effect chain + claim group` 중심 식별로 전환하는 것이다.
### 4.1 Stage 2.1 Task_A: `claim_identification_view.json` 생성 개선
#### 현재 역할
Task_A는 `Fact_Ledger_base.json`과 `BO.json` 등을 읽어 claim identification에 필요한 semantic projection view를 만든다.
#### 이번 사건에서의 실패 지점
`claim_identification_view.json`이 다음 구조를 충분히 제공하지 못하여 Task_B가 C-008부터 C-012를 서로 연결된 청구로 보지 못했다.
1. `secured_debt_chain`이 claim view에 직접 노출되지 않았다.
2. `payment_allocation_result`가 C-008, C-009의 mandatory basis로 전달되지 않았다.
3. 등기 row별 접수번호가 claim view item의 object specificity로 전달되지 않았다.
4. F-041 같은 meeting-only critical fact가 부당이득 claim의 시작일 anchor로 충분히 승격되지 않았다.
5. valuation row 선택 정책이 claim view에 반영되지 않았다.
6. `C-011`과 `C-012`가 같은 claim group에 속해야 한다는 구조가 없었다.
#### 개선 목표
`claim_identification_view.json`의 root 또는 `case_context`에 다음 필드를 추가한다.
```json
{
"case_context": {
"canonical_theory_graph": {
"graph_id": "CTG-SEONGSU-01",
"nodes": [
"SDC-SEONGSU-01",
"SDC-SEONGSU-02",
"PAR-SEONGSU-2024-07-05",
"E-017-GAP-TRANSFER-25797",
"E-017-EUL-MORTGAGE-25799",
"LUG-SEONGSU-01"
],
"edges": [
{
"from": "PAR-SEONGSU-2024-07-05",
"to": "E-017-GAP-TRANSFER-25797",
"relationship": "3/5 지분 경매 및 이전등기 원인무효 basis"
},
{
"from": "E-017-GAP-TRANSFER-25797",
"to": "E-017-EUL-MORTGAGE-25799",
"relationship": "후행 근저당권 3/5 지분 원인무효 basis"
}
]
},
"mandatory_claim_role_templates": {
"ownership_transfer_cancellation_after_auction": [
"plaintiff_fraction_title",
"secured_debt_chain_high_interest",
"payment_allocation_result",
"auction_registry_row",
"target_transfer_registry_row",
"expected_defense_rebuttal"
],
"unjust_enrichment_for_unregistered_building_land_use": [
"plaintiff_superior_fraction",
"land_use_start_by_original_acquirer",
"de_facto_disposition_holder_start",
"valuation_selection",
"liability_overlap"
]
}
}
}
```
각 `items[*]`에는 다음 field를 추가한다.
```json
{
"fact_id": "F-025",
"legal_effect_links": {
"payment_allocation_result_ids": ["PAR-SEONGSU-2024-07-05"],
"affected_claim_types": [
"소유권이전등기말소",
"근저당권설정등기말소"
],
"must_include_with_fact_ids": ["F-017", "F-036", "F-037"]
},
"claim_role_candidates": [
"payment_allocation_trigger",
"secured_debt_extinguishment_basis"
]
}
```
#### 프롬프트 개선 문구
```text
- claim_identification_view는 개별 fact의 semantic projection만 만들지 말고, Stage 1에서 생성된 legal-effect structures를 그대로 노출한다.
- `secured_debt_chains`, `payment_allocation_results`, `registry_rows`, `property_fraction_state_timeline`, `land_use_gain_timeline`, `valuation_selection_matrix`, `lease_payment_semantics`는 claim 식별에 직접 사용 가능한 root context로 포함한다.
- 각 fact item에는 claim에서 맡아야 할 role 후보를 명시한다.
- `proof_strength`가 낮더라도 `legal_centrality=critical`인 fact는 `must_consider=true`로 표시한다.
```
#### 검증 게이트
1. `payment_allocation_result`가 있는데 관련 fact items에 연결되지 않으면 오류를 표시한다.
2. registry row에 접수번호가 있는데 object specificity에 노출되지 않으면 warning을 표시한다.
3. 부당이득 관련 valuation row가 있는데 `valuation_selection_matrix`가 view에 없으면 warning을 표시한다.
### 4.2 Stage 2.1 Task_B: `claims_identified.json` 생성 개선
#### 현재 역할
Task_B는 원고가 실제로 소장에서 주장할 수 있는 본안 청구권을 식별하고 `identified_claims` 배열을 만든다. 현재 구조는 `claim_id`, `claim_title`, `claim_statement`, `source_fact_ids`, `defendants`, `review_flags`, `completeness` 등을 포함한다.
#### 이번 사건에서의 실패 지점
Task_B의 가장 큰 문제는 `source_fact_ids`를 claim별로 좁히는 순간, 법률효과 chain의 sibling fact를 잃었다는 점이다.
예를 들어 C-008에 F-025가 들어가면 반드시 F-017도 들어가야 한다. C-009에 대한은행 근저당권이 들어가면 반드시 이문호 등기 무효 chain과 F-017, F-025, F-028이 들어가야 한다. 그러나 Task_B는 `청구권별 직접 fact`만 선택하면서 chain을 끊었다.
#### 개선 목표 1: `claim_fact_roles`를 `source_fact_ids`보다 우선
`identified_claims[*]`에 다음 구조를 추가한다.
```json
{
"claim_id": "C-008",
"claim_title": "성수동 대지 3/5 지분 소유권이전등기말소청구",
"defendants": ["이문호"],
"claim_fact_roles": {
"plaintiff_fraction_title": ["F-016"],
"secured_debt_chain_high_interest": ["F-017"],
"payment_allocation_trigger": ["F-025"],
"auction_invalidity_basis": ["F-028"],
"target_transfer_registry_row": ["F-036"],
"registry_specificity_source": ["E-017-GAP-TRANSFER-25797"],
"expected_defense_rebuttal_basis": ["F-028"]
},
"source_fact_ids": ["F-016", "F-017", "F-025", "F-028", "F-036"],
"relief_scope": {
"object": "성수동 대지",
"fraction": "3/5",
"target_registry_receipt_no": "제25797호"
},
"review_flags": []
}
```
`source_fact_ids`는 이제 사용자가 직접 고르는 목록이 아니라, `claim_fact_roles`에서 파생되는 flatten 결과여야 한다.
#### 개선 목표 2: 성수동 사건의 기대 claim set 고정
Task_B가 성수동 cluster를 식별하면 다음 claim set을 후보로 구성해야 한다.
1. `C-008`: 이문호 상대 성수동 대지 3/5 지분 소유권이전등기말소청구
2. `C-009`: 대한은행 상대 성수동 대지 3/5 지분 근저당권설정등기말소청구
3. `C-010`: 박성희 상대 건물철거 및 토지인도청구
4. `C-011`: 박성희 상대 토지 사용이익 부당이득반환 slice
5. `C-012`: 이문호 상대 토지 사용이익 부당이득반환 slice
6. `CG-SEONGSU-UE-01`: C-011과 C-012를 묶는 group
#### 개선 목표 3: `claim_groups` 출력
`claims_identified.json`은 기존 `identified_claims` 외에 다음 root field를 포함해야 한다.
```json
{
"claim_groups": [
{
"claim_group_id": "CG-SEONGSU-UE-01",
"group_title": "성수동 대지 무권원 점유·사용 부당이득반환",
"member_claim_ids": ["C-012", "C-011"],
"group_type": "time_sliced_joint_liability",
"liability_relation": "부진정연대 또는 공동 지급",
"canonical_relief_structure": {
"base_monthly_amount": 3000000,
"slices": [
{
"defendant": "이문호",
"start_date": "2024-11-10",
"end": "토지 인도완료일",
"amount_per_month": 3000000,
"relation": "single_until_2024-11-20"
},
{
"defendant": "박성희",
"start_date": "2024-11-20",
"end": "토지 인도완료일",
"amount_per_month": 3000000,
"relation": "joint_with_이문호"
}
]
},
"excluded_gain_candidates": [
{
"fact_id": "F-043",
"item": "임대차보증금 300,000,000원 중 3/5",
"reason": "원고의 토지 사용이익 반환청구 원금이 아니라 피고들 사이의 반환 예정 담보성 금원"
}
]
}
]
}
```
#### 개선 목표 4: anti-pattern 검출
Task_B에서 다음 패턴을 발견하면 claim을 생성하되 강한 review flag 또는 blocking error를 붙인다.
```json
{
"anti_pattern_validations": [
{
"code": "WHOLE_PROPERTY_CANCELLATION_OVERCLAIM",
"condition": "소유권이전등기말소 청구의 object_scope가 전체 성수동 대지이고 payment_allocation_result.released_fraction이 3/5인 경우",
"severity": "error"
},
{
"code": "PAYMENT_ALLOCATION_FACT_MISSING",
"condition": "F-025를 사용하면서 F-017 또는 payment_allocation_result가 없는 경우",
"severity": "error"
},
{
"code": "LEASE_DEPOSIT_AS_UE_PRINCIPAL_REVIEW",
"condition": "부당이득반환 원금에 임대차보증금의 지분 상당액을 포함하는 경우",
"severity": "error"
},
{
"code": "JOINT_LIABILITY_GROUP_MISSING",
"condition": "이문호와 박성희가 같은 토지 사용이익에 대해 별도 독립 청구로만 식별되는 경우",
"severity": "warning"
}
]
}
```
#### 프롬프트 개선 문구
```text
- 청구권을 식별할 때 source_fact_ids를 먼저 고르지 말고 claim_fact_roles를 먼저 채운다.
- mandatory role이 비어 있으면 claim을 완성형으로 출력하지 말고 review_flags에 누락 role을 기록한다.
- `payment_allocation_trigger`가 있으면 `secured_debt_chain_high_interest`와 `payment_allocation_result`를 반드시 함께 포함한다.
- `derivative_bank_mortgage_invalidity` claim에는 선행 소유권이전등기 무효 chain을 반드시 포함한다.
- 1원고 x 1피고 단위의 identified_claims는 유지한다.
- 그러나 동일한 경제적 목적, 동일 손해, 동일 토지 사용이익, 동일 원채권에 대한 복수 피고 책임이면 claim_groups를 생성한다.
- 부진정연대, 공동 지급, 시간대별 책임 중첩은 개별 claim description에서 따로 쓰지 말고 group_relief_structure로 먼저 확정한다.
```
### 4.3 Stage 2.1 Task_C: `claims_identified_case_type.json` 생성 개선
#### 현재 역할
Task_C는 Task_B가 식별한 각 청구권에 `case_kinds.md` 기준 사건 종류를 부여한다.
#### 이번 사건에서의 문제
사건 종류 분류가 단순 title matching에 가까우면 다음 차이를 구분하지 못한다.
1. 일반 소유권이전등기말소 vs 담보권실행 경매 후 지분별 소유권이전등기말소
2. 일반 근저당권말소 vs 선행 원인무효 등기에 터 잡은 후행 근저당권말소
3. 일반 토지인도 vs 과반수 공유지분권자의 미등기 건물 사실상 처분권자 상대 철거·인도
4. 일반 부당이득반환 vs 미등기 건물 부지 무권원 점유의 토지 사용이익 반환 및 부진정연대
#### 개선 목표
`claims_identified_case_type.json.claim_types[*]`에 다음 additive field를 추가한다.
```json
{
"claim_id": "C-009",
"case_kind": "근저당권설정등기말소",
"case_subtype": "derivative_invalidity_from_void_auction_transfer",
"substantive_modules_required": [
"법정변제충당_담보채무_지분말소_모듈",
"담보권실행경매_공신력_항변_모듈"
],
"scope_control": {
"object_fraction": "3/5",
"target_registry_receipt_no": "제25799호",
"basis_claim_id": "C-008"
},
"expected_defense_modules": [
"민사집행법 제267조 항변 반박",
"등기 공신력 부재"
]
}
```
```json
{
"claim_id": "C-011",
"case_kind": "부당이득반환",
"case_subtype": "unauthorized_unregistered_building_land_use_gain",
"claim_group_id": "CG-SEONGSU-UE-01",
"substantive_modules_required": [
"미등기건물_토지사용_부당이득_부진정연대_모듈",
"차임감정표_법률상_기준선택_모듈",
"임대차보증금_부당이득_배제검토_모듈"
],
"valuation_policy": {
"selected_row_id": "E-003-R-NO-BUILDING-NO-DEPOSIT",
"selected_monthly_amount": 3000000
}
}
```
#### 검증 게이트
1. `C-008`이 `소유권이전등기말소`로 분류되었는데 `case_subtype`이 비어 있으면 warning을 표시한다.
2. `C-009`가 대한은행 후행 근저당권말소인데 `basis_claim_id=C-008` 또는 derivative invalidity field가 없으면 warning을 표시한다.
3. 부당이득 claim에 `claim_group_id`가 없고 같은 토지에 대한 다른 피고 claim이 있으면 `JOINT_LIABILITY_GROUP_MISSING`을 표시한다.
## 5. Stage 2.2 개선 방안: Task_D `preD_assembly` 및 reduce
Stage 2.2는 `claims_identified.json`, `claims_identified_case_type.json`, `claim_identification_view.json`, `Fact_Ledger_base.json` 등을 조합하여 각 `C-XXX_claim_information.json`을 생성한다.
이번 사건에서 Stage 2.2의 핵심 문제는 `source_fact_ids`만 조인하면서 법률효과 chain의 sibling fact와 group context를 잃은 것이다.
### 5.1 `preD_assembly` 개선
#### 현재 역할
`preD_assembly`는 각 claim_id별로 관련 fact, case type, view item을 조립한다.
#### 개선 목표 1: mandatory role fact 조립
`C-XXX_claim_information.json`에는 다음 field가 추가되어야 한다.
```json
{
"claim_id": "C-008",
"source_fact_ids": ["F-016", "F-017", "F-025", "F-028", "F-036"],
"claim_fact_roles": {
"plaintiff_fraction_title": ["F-016"],
"secured_debt_extinguishment_basis": ["F-017", "F-025"],
"auction_invalidity_basis": ["F-028"],
"target_registry_transfer": ["F-036"]
},
"mandatory_role_fact_ids": ["F-016", "F-017", "F-025", "F-028", "F-036"],
"legal_effect_structures": {
"secured_debt_chain_ids": ["SDC-SEONGSU-01", "SDC-SEONGSU-02"],
"payment_allocation_result_ids": ["PAR-SEONGSU-2024-07-05"],
"registry_row_ids": ["E-017-GAP-TRANSFER-25797"]
}
}
```
#### 개선 목표 2: cluster sibling context 보존
각 claim information에는 직접 source로 쓰지는 않더라도 검증에 필요한 sibling context를 포함한다.
```json
{
"cluster_sibling_fact_context": {
"cluster_id": "IC-SEONGSU-01",
"sibling_fact_ids_for_review": [
"F-014",
"F-017",
"F-025",
"F-028",
"F-036",
"F-037",
"F-041",
"F-044",
"F-048"
],
"usage_rule": "청구원인에 무조건 모두 쓰지는 않되, mandatory chain 누락과 scope 오류 검증에 사용"
}
}
```
#### 개선 목표 3: claim group context 조립
`C-011`과 `C-012`에는 각각 다음 group context가 포함되어야 한다.
```json
{
"claim_group_context": {
"claim_group_id": "CG-SEONGSU-UE-01",
"group_type": "time_sliced_joint_liability",
"member_claim_ids": ["C-012", "C-011"],
"canonical_group_relief": {
"base_monthly_amount": 3000000,
"slices": [
{
"defendant": "이문호",
"start_date": "2024-11-10",
"relation": "single_then_joint"
},
{
"defendant": "박성희",
"start_date": "2024-11-20",
"relation": "joint_with_이문호"
}
]
},
"excluded_items": [
"임대차보증금 3억 원 중 3/5 상당액"
]
}
}
```
#### 개선 목표 4: validation block 삽입
각 `C-XXX_claim_information.json`에는 Stage 2.3이 읽을 수 있는 validation result를 포함한다.
```json
{
"pre_description_validations": [
{
"code": "PAYMENT_ALLOCATION_FACT_MISSING",
"status": "pass",
"message": "F-017, F-025, payment_allocation_result가 모두 포함됨"
},
{
"code": "RELIEF_SCOPE_FRACTION_CHECK",
"status": "pass",
"expected_fraction": "3/5"
}
]
}
```
#### 프롬프트 또는 코드 개선 문구
```text
- `source_fact_ids`만 조립하지 말고 `claim_fact_roles`, `mandatory_role_fact_ids`, `legal_effect_structures`, `claim_group_context`를 함께 조립한다.
- Stage 1 또는 Stage 2.1에서 생성된 canonical_theory_graph와 연결되는 structure ID는 claim information에 반드시 포함한다.
- `cluster_sibling_fact_context`는 청구원인에 무조건 쓰는 자료가 아니라, 누락 검증과 범위 검증에 쓰는 자료로 명시한다.
```
### 5.2 Stage 2.2 reduce 개선
#### 현재 역할
Stage 2.2 reduce는 claim별 information 파일을 생성하고 map-reduce 완료를 처리한다.
#### 개선 목표
reduce 단계에서 다음 aggregate 파일을 생성한다.
1. `claim_group_index.json`
2. `canonical_theory_graph.json`
3. `registry_target_index.json`
4. `valuation_decision_index.json`
5. `pre_description_validation_summary.json`
예시는 다음과 같다.
```json
{
"claim_group_index": [
{
"claim_group_id": "CG-SEONGSU-UE-01",
"member_claim_ids": ["C-012", "C-011"],
"requires_group_description": true,
"blocking_individual_false_relief": [
"C-012 must not include lease deposit principal",
"C-011 must not use monthly 2,400,000"
]
}
]
}
```
#### 검증 게이트
1. `claims_identified.json.claim_groups`가 존재하는데 `claim_group_index.json`이 생성되지 않으면 오류를 표시한다.
2. 어떤 claim이 `payment_allocation_result`를 필요로 하는데 `canonical_theory_graph.json`에 해당 node가 없으면 오류를 표시한다.
3. Stage 2.3으로 넘어가기 전 `pre_description_validation_summary.json`에 error가 남아 있으면 해당 claim description 생성 시 강제 review flag를 부여한다.
## 6. Stage 2.3 개선 방안: Task_E claim description pipeline
Stage 2.3은 각 `C-XXX_claim_information.json`을 입력으로 받아 `load_claim_info`, `generate_module_block`, `interpret_claim_metadata`, `generate_description`, `save_description`, `assemble_claim_description_md`를 실행한다.
이번 사건에서 Stage 2.3의 핵심 문제는 청구권별 문안 생성 자체는 수행했지만, 실체법 계산 모듈과 claim group 문안 생성이 부족했다는 점이다.
### 6.1 `load_claim_info` 개선
#### 현재 역할
`load_claim_info`는 claim information을 읽어 Stage 2.3의 후속 task에 넘긴다.
#### 개선 목표
load 단계에서 다음을 반드시 함께 읽는다.
1. 해당 `C-XXX_claim_information.json`
2. `claim_group_index.json`
3. `canonical_theory_graph.json`
4. `registry_target_index.json`
5. `valuation_decision_index.json`
6. 해당 claim의 `claim_group_context`
7. `pre_description_validation_summary.json`
출력에는 다음 field가 포함되어야 한다.
```json
{
"loaded_claim_context": {
"claim_id": "C-012",
"claim_group_id": "CG-SEONGSU-UE-01",
"is_group_member": true,
"group_description_required": true,
"blocking_false_relief_patterns": [
"lease_deposit_as_unjust_enrichment_principal",
"monthly_1_800_000_based_on_contract_rent_share"
],
"required_modules": [
"미등기건물_토지사용_부당이득_부진정연대_모듈",
"차임감정표_법률상_기준선택_모듈",
"임대차보증금_부당이득_배제검토_모듈"
]
}
}
```
#### 검증 게이트
1. claim에 `claim_group_id`가 있는데 group index가 load되지 않으면 오류를 표시한다.
2. claim에 `substantive_modules_required`가 있는데 module selection input에 반영되지 않으면 오류를 표시한다.
### 6.2 `generate_module_block` 개선
#### 현재 역할
`generate_module_block`은 claim information, module selection basis, rule 파일을 바탕으로 계산 구조와 remedy 구조를 정리한다.
#### 이번 사건에서 필요한 신규 module
`Files_to_be_Used`에 다음 전용 module을 추가하고, `generate_module_block`이 자동 선택하도록 한다.
#### 6.2.1 `법정변제충당_담보채무_지분말소_모듈.md`
목적은 복수 피담보채무와 지정 없는 변제에서 어느 담보 지분이 소멸했는지 계산하는 것이다.
입력:
```json
{
"secured_debt_chains": ["SDC-SEONGSU-01", "SDC-SEONGSU-02"],
"payment_amount": 400000000,
"payment_date": "2024-07-05",
"designation_status": "not_designated",
"legal_rules": ["민법 제479조", "민법 제477조"]
}
```
출력:
```json
{
"module_name": "법정변제충당_담보채무_지분말소_모듈",
"allocation_conclusion": {
"interest_first": 75000000,
"remaining_for_principal": 325000000,
"fully_extinguished_chain": "SDC-SEONGSU-02",
"released_fraction": "3/5",
"remaining_chain": "SDC-SEONGSU-01",
"remaining_encumbered_fraction": "2/5"
},
"relief_scope_constraint": {
"max_cancellation_scope": "3/5",
"forbid_whole_property_cancellation": true
},
"required_cause_paragraphs": [
"두 차례 차용의 원금·이율·변제기·담보 지분",
"2024. 7. 5. 4억 원 변제 및 충당 지정 없음",
"이자 우선 및 변제이익이 큰 고이율 채무 우선 충당",
"3/5 지분 근저당권 피담보채무 소멸"
]
}
```
#### 6.2.2 `담보권실행경매_공신력_항변_모듈.md`
목적은 피담보채무 소멸 후 담보권실행 경매 및 민사집행법 제267조 항변 반박 구조를 제공하는 것이다.
출력:
```json
{
"auction_invalidity_conclusion": {
"invalid_fraction": "3/5",
"reason": "경매개시 또는 매각 이전에 해당 지분 근저당권의 피담보채무가 소멸",
"affected_registry_row": "E-017-GAP-TRANSFER-25797"
},
"defense_rebuttal": [
{
"defense": "민사집행법 제267조",
"answer": "담보권 소멸이 경매절차의 효력에 미치는 범위와 매수인의 취득 효과를 3/5 지분 원인무효 chain과 연결하여 반박"
},
{
"defense": "부동산등기 공신력",
"answer": "부동산등기에는 공신력이 없으므로 원인무효 등기에 터 잡은 후행 등기 역시 해당 범위에서 보호되지 않음"
}
]
}
```
#### 6.2.3 `미등기건물_토지사용_부당이득_부진정연대_모듈.md`
목적은 미등기 건물 원시취득자와 사실상 처분권자의 토지 사용이익 반환 책임을 시간대별로 구성하는 것이다.
출력:
```json
{
"land_use_gain_liability": {
"base_monthly_amount": 3000000,
"slices": [
{
"defendant": "이문호",
"start_date": "2024-11-10",
"end": "토지 인도완료일",
"amount_per_month": 3000000,
"basis": "미등기 건물 원시취득자 및 부지 점유자"
},
{
"defendant": "박성희",
"start_date": "2024-11-20",
"end": "토지 인도완료일",
"amount_per_month": 3000000,
"basis": "미등기 건물 사실상 처분권자 및 부지 점유자",
"relation_with_이문호": "공동 지급 또는 부진정연대"
}
]
}
}
```
#### 6.2.4 `차임감정표_법률상_기준선택_모듈.md`
목적은 valuation row 선택을 법률상 전제에 따라 통제하는 것이다.
출력:
```json
{
"valuation_decision": {
"selected_row_id": "E-003-R-NO-BUILDING-NO-DEPOSIT",
"selected_total_monthly_rent": 5000000,
"plaintiff_fraction": "3/5",
"selected_plaintiff_monthly_amount": 3000000,
"excluded_rows": [
{
"row_id": "E-003-R-BUILDING-NO-DEPOSIT",
"reason": "무권원 미등기 건물 존재를 토지소유자에게 불리하게 반영하면 안 됨"
}
]
}
}
```
#### 6.2.5 `임대차보증금_부당이득_배제검토_모듈.md`
목적은 이문호가 받은 보증금을 원고의 부당이득 원금으로 잘못 구성하지 않도록 막는 것이다.
출력:
```json
{
"excluded_gain_candidates": [
{
"item": "임대차보증금 300,000,000원의 3/5 상당액 180,000,000원",
"exclude_from_relief": true,
"reason": "피고들 사이의 임대차계약상 반환 예정 담보성 금원이며, 원고의 토지 사용이익 반환청구 원금으로 자동 전환되지 않음"
}
],
"allowed_gain_theory": {
"type": "objective_land_use_gain",
"monthly_amount": 3000000
}
}
```
#### 프롬프트 개선 문구
```text
- case_subtype과 claim_fact_roles를 기준으로 실체법 module을 선택한다.
- 모듈의 결론은 raw evidence와 충돌하지 않는 한 청구취지 scope, 금액, 기산일, 항변 반박 문단의 상위 constraint로 사용한다.
- 특히 `relief_scope_constraint.forbid_whole_property_cancellation=true`이면 generate_description에서 전체 부동산 말소 문구를 생성할 수 없다.
- `excluded_gain_candidates.exclude_from_relief=true`인 항목은 청구취지와 청구원인의 청구 금액에 포함하지 않는다.
```
### 6.3 `interpret_claim_metadata` 개선
#### 현재 역할
`interpret_claim_metadata`는 claim information과 module block을 해석하여 claim description에 필요한 구조화 결론을 만든다.
#### 개선 목표
해석 단계에서는 다음 `operative conclusions`를 확정해야 한다.
```json
{
"operative_conclusions": {
"C-008": {
"target_registry_receipt_no": "제25797호",
"cancellation_scope": "3/5 지분",
"forbid_whole_property_phrase": true,
"mandatory_cause_points": [
"2023-07-06 300m 15% loan",
"2024-07-05 400m payment",
"legal allocation",
"3/5 mortgage debt extinguished",
"auction and transfer invalid within 3/5"
]
},
"C-009": {
"target_registry_receipt_no": "제25799호",
"cancellation_scope": "3/5 지분",
"derivative_basis_claim_id": "C-008",
"mandatory_defense_rebuttals": [
"민사집행법 제267조",
"부동산등기 공신력 부재"
]
},
"CG-SEONGSU-UE-01": {
"monthly_amount": 3000000,
"valuation_row_id": "E-003-R-NO-BUILDING-NO-DEPOSIT",
"exclude_lease_deposit_principal": true,
"liability_slices": [
{
"defendant": "이문호",
"start_date": "2024-11-10"
},
{
"defendant": "박성희",
"start_date": "2024-11-20",
"joint_with": "이문호"
}
]
}
}
}
```
#### 검증 게이트
1. `forbid_whole_property_phrase=true`인데 relief draft candidate에 `성수동 대지에 관하여`만 있고 `3/5 지분`이 없으면 오류를 표시한다.
2. `exclude_lease_deposit_principal=true`인데 180,000,000원이 금액 후보에 남아 있으면 오류를 표시한다.
3. `valuation_row_id`가 월 300만 원 산정과 맞지 않으면 warning을 표시한다.
### 6.4 `generate_description` 개선
#### 현재 역할
`generate_description`은 청구취지와 청구원인 요약을 생성한다.
#### 개선 목표 1: C-008 문안
개선 후 C-008의 청구취지는 다음 구조를 따라야 한다.
```text
피고 이문호는 원고에게 별지 목록 제1항 기재 부동산 중 3/5 지분에 관하여
서울동부지방법원 등기국 2024. 10. 5. 접수 제25797호로 마친
소유권이전등기의 말소등기절차를 이행하라.
```
청구원인은 다음 순서를 따라야 한다.
1. 원고의 3/5 지분 취득
2. 2023. 1. 6.자 2억 원 채무와 2/5 지분 근저당권
3. 2023. 7. 6.자 3억 원 채무와 3/5 지분 근저당권
4. 2024. 7. 5. 4억 원 변제 및 충당 지정 없음
5. 이자 우선 충당 및 변제이익이 큰 고이율 채무 우선 충당
6. 3/5 지분 근저당권 피담보채무 전액 소멸
7. 그 지분에 관한 담보권실행 경매 및 이문호 소유권이전등기의 원인무효
#### 개선 목표 2: C-009 문안
청구취지는 다음 구조를 따라야 한다.
```text
피고 주식회사 대한은행은 원고에게 별지 목록 제1항 기재 부동산 중 3/5 지분에 관하여
서울동부지방법원 2024. 10. 5. 접수 제25799호로 마친
근저당권설정등기의 말소등기절차를 이행하라.
```
청구원인은 다음을 포함해야 한다.
1. 이문호 소유권이전등기의 3/5 지분 부분 원인무효
2. 대한은행 근저당권이 위 원인무효 등기에 터 잡은 후행 등기라는 점
3. 후행 근저당권도 3/5 지분 범위에서 원인무효라는 점
4. 민사집행법 제267조 및 등기 공신력 관련 항변 반박
#### 개선 목표 3: C-010 문안
청구취지는 기존과 유사하되, 청구원인에서 다음을 명확히 한다.
1. 원고가 3/5 과반수 지분권자라는 점
2. 이문호는 3/5 지분 범위에서는 무권리자이고, 실체적으로 2/5 지분권자에 불과하다는 점
3. 이문호와 박성희 사이의 대지 임대차는 과반수 지분권자인 원고에게 대항할 수 없다는 점
4. 박성희는 미등기 건물 매수인으로서 사실상 처분권자이므로 건물 철거 및 토지 인도 의무를 부담한다는 점
5. 민법 제622조 차지권 주장이 예상될 경우, 적법한 임대권한 또는 등기·대항요건 문제를 검토한다는 점
#### 개선 목표 4: C-011/C-012 group-aware 문안
`C-011`과 `C-012`를 완전히 독립적으로 작성하지 말고, group 문안을 기준으로 각 피고 slice를 생성한다.
`CG-SEONGSU-UE-01_claim_group_description.json`의 청구취지 예시는 다음과 같다.
```text
원고에게,
가. 피고 이문호는 2024. 11. 10.부터 별지 목록 제1항 기재 토지의 인도완료일까지 월 3,000,000원의 비율로 계산한 돈을 지급하고,
나. 피고 박성희는 피고 이문호와 공동하여 2024. 11. 20.부터 위 토지의 인도완료일까지 월 3,000,000원의 비율로 계산한 돈을 지급하라.
```
청구원인은 다음 구조를 따라야 한다.
1. 원고가 성수동 대지의 3/5 지분권자라는 점
2. 이문호가 2024. 11. 10. 미등기 건물을 신축하여 원시취득하고 그 부지를 점유·사용하였다는 점
3. 박성희가 2024. 11. 20. 미등기 건물의 사실상 처분권을 취득하고 대지를 점유·사용하였다는 점
4. 2024. 11. 20. 이후 두 피고의 책임은 같은 토지 사용이익에 관한 공동 지급 또는 부진정연대 구조라는 점
5. 차임 상당 사용이익은 `건물 없음, 보증금 없음` 기준 월 500만 원에 원고 지분 3/5를 곱한 월 300만 원이라는 점
6. 임대차보증금 3억 원 및 건물 매매대금 2억 원은 이 부당이득 청구의 직접 원금으로 삼지 않는다는 점
#### 프롬프트 개선 문구
```text
- 청구취지의 객체, 지분, 접수번호, 금액, 기산일은 `operative_conclusions`의 값을 그대로 사용한다.
- `forbid_whole_property_phrase=true`이면 전체 부동산 말소 문구를 쓰지 않는다.
- `claim_group_context`가 있으면 개별 claim 문안보다 group-level relief를 우선한다.
- `excluded_gain_candidates`에 포함된 금원은 청구취지 금액으로 쓰지 않는다.
- 예상 항변이 청구원인의 법률효과 chain을 공격하는 경우, Stage 2 문안에 최소 반박 구조를 포함한다.
```
### 6.5 `save_description` 개선
#### 현재 역할
`save_description`은 각 `C-XXX_claim_description.json`을 저장한다.
#### 개선 목표
1. 개별 claim description에 validation result를 포함한다.
2. claim group이 있는 경우 group description을 함께 저장한다.
3. 개별 claim이 group 문안과 충돌하면 저장 전에 blocking error를 발생시킨다.
예시는 다음과 같다.
```json
{
"claim_id": "C-012",
"claim_group_id": "CG-SEONGSU-UE-01",
"relief_summary": "피고 이문호는 2024. 11. 10.부터 토지 인도완료일까지 월 3,000,000원의 비율로 계산한 돈을 지급하되, 2024. 11. 20. 이후 부분은 피고 박성희와 공동하여 지급한다.",
"cause_summary": "...",
"description_validations": [
{
"code": "LEASE_DEPOSIT_AS_UE_PRINCIPAL_REVIEW",
"status": "pass",
"message": "임대차보증금 180,000,000원을 청구금액에서 배제함"
},
{
"code": "JOINT_LIABILITY_GROUP_PRESENT",
"status": "pass"
}
]
}
```
#### 저장 전 blocking 규칙
```text
- C-008 relief_summary에 `3/5 지분`이 없으면 저장 금지
- C-008 relief_summary에 제25797호가 없으면 warning
- C-009 relief_summary에 제25799호가 없으면 warning
- C-011 relief_summary 금액이 월 2,400,000원이면 저장 금지
- C-012 relief_summary에 180,000,000원이 있으면 저장 금지
- C-011/C-012 중 하나라도 claim_group_id가 없으면 warning
```
### 6.6 `assemble_claim_description_md` 개선
#### 현재 역할
reduce 단계에서 모든 `C-XXX_claim_description.json`을 모아 `claim_description.md`를 생성한다.
#### 개선 목표
`claim_description.md`는 개별 claim 나열만 하지 말고 다음 단위로 표시해야 한다.
1. `성수동 대지 등기말소 chain`
- C-008과 C-009를 연속된 법률효과로 표시
2. `성수동 대지 철거·인도 chain`
- C-010과 부당이득 group의 관계 표시
3. `성수동 대지 부당이득 claim group`
- C-011, C-012를 group relief로 먼저 표시하고, 피고별 slice를 하위에 표시
4. `validation summary`
- 전체 말소 overclaim 여부
- payment allocation 누락 여부
- valuation row 선택 여부
- lease deposit 배제 여부
- joint liability group 존재 여부
예시 출력 구조는 다음과 같다.
```markdown
## 성수동 대지 등기말소 chain
### C-008 이문호 상대 소유권이전등기말소
...
### C-009 대한은행 상대 근저당권설정등기말소
...
## 성수동 대지 부당이득 claim group
### CG-SEONGSU-UE-01 공동 지급 구조
...
#### C-012 이문호 slice
...
#### C-011 박성희 slice
...
```
## 7. `Files_to_be_Used` 및 Default_Agent 규칙 파일 개선
사용자 지시에 따라 `Files_to_be_Used` 폴더의 파일들을 Default_Agent 폴더의 파일로 간주한다. 따라서 다음 신규 규칙 파일 또는 기존 규칙 파일 개선이 필요하다.
### 7.1 신규 module 파일
1. `법정변제충당_담보채무_지분말소_모듈.md`
- 복수 채무, 이율, 변제기, 담보 지분, 지정 없는 변제, 이자 우선, 변제이익 기준, 소멸 담보 지분, 잔존 담보 지분을 계산한다.
2. `담보권실행경매_공신력_항변_모듈.md`
- 피담보채무 소멸 후 경매, 민사집행법 제267조, 등기 공신력 부재, 후행 등기 원인무효를 연결한다.
3. `미등기건물_토지사용_부당이득_부진정연대_모듈.md`
- 미등기 건물 원시취득자, 사실상 처분권자, 토지 점유, 책임 시작일, 책임 중첩을 산정한다.
4. `차임감정표_법률상_기준선택_모듈.md`
- 감정표 row를 법률상 전제에 따라 선택하고, 잘못된 row 선택을 차단한다.
5. `임대차보증금_부당이득_배제검토_모듈.md`
- 보증금, 월 차임, 매매대금의 법적 성격을 분리하고, 보증금의 부당이득 원금 오인을 막는다.
### 7.2 기존 청구취지 규칙 파일 개선
#### 소유권이전등기말소 규칙
추가해야 할 내용:
```text
- 담보권실행 경매 후 소유권이전등기말소청구에서는 전체 부동산 말소를 기본값으로 삼지 않는다.
- payment_allocation_result 또는 property_fraction_state_timeline이 있으면 그 결과의 invalid_fraction을 청구취지 scope로 사용한다.
- 등기부 row의 접수번호가 있으면 청구취지에 반드시 포함한다.
```
#### 근저당권설정등기말소 규칙
추가해야 할 내용:
```text
- 후행 근저당권말소청구에서는 선행 소유권이전등기 무효 chain을 확인한다.
- 단순히 원고가 지분권자라는 이유만으로 원인무효를 서술하지 말고, 후행 등기가 어떤 원인무효 등기에 터 잡았는지 표시한다.
- target registry row의 receipt_no와 invalid_fraction을 청구취지에 반영한다.
```
#### 토지인도 및 건물철거 규칙
추가해야 할 내용:
```text
- 과반수 공유지분권자가 소수 공유지분권자의 임차인 또는 미등기 건물 사실상 처분권자를 상대로 청구하는 경우, 원고 동의 없는 사용권한의 대항 불가를 검토한다.
- 미등기 건물 매수인은 소유권이전등기가 없어도 사실상 처분권자로서 철거의무 주체가 될 수 있음을 검토한다.
```
#### 부당이득반환 규칙
추가해야 할 내용:
```text
- 토지 사용이익 부당이득과 피고들 사이의 임대차계약상 보증금·차임 수령은 구별한다.
- 원고가 보증금을 수령하지 않았고, 보증금이 반환 예정 담보성 금원이면 원고의 부당이득 원금으로 자동 산정하지 않는다.
- 무권원 미등기 건물의 존재가 토지소유자의 사용이익 산정액을 낮추는 방향으로 자동 반영되어서는 안 된다.
- 동일 토지 사용이익에 관하여 원시취득자와 사실상 처분권자의 책임이 중첩되는 경우 claim group으로 작성한다.
```
## 8. 검증 규칙 및 회귀 테스트 설계
### 8.1 이번 사건 전용 필수 validation
다음 validation은 Stage 2.1, Stage 2.2, Stage 2.3에서 반복적으로 적용해야 한다.
| 코드 | 조건 | 기대 동작 |
| --- | --- | --- |
| `WHOLE_PROPERTY_CANCELLATION_OVERCLAIM` | C-008 소유권이전등기말소 청구가 성수동 대지 전체 말소를 구함 | error |
| `PAYMENT_ALLOCATION_FACT_MISSING` | F-025 변제를 사용하면서 F-017 또는 payment_allocation_result 누락 | error |
| `DERIVATIVE_INVALIDITY_CHAIN_MISSING` | C-009 대한은행 근저당권말소에 선행 이문호 등기 무효 chain 누락 | error |
| `REGISTRY_RECEIPT_NO_MISSING` | 등기말소 청구취지에 E-017 접수번호 누락 | warning |
| `VALUATION_ROW_REVIEW` | 박성희 부당이득 금액이 월 2,400,000원 | error |
| `LEASE_DEPOSIT_AS_UE_PRINCIPAL_REVIEW` | 이문호 부당이득에 180,000,000원 보증금 반환 포함 | error |
| `F041_LAND_USE_START_MISSING` | 이문호 부당이득 시작일이 2024. 11. 20.으로만 설정되고 F-041 누락 | warning 또는 error |
| `JOINT_LIABILITY_GROUP_MISSING` | 이문호와 박성희 부당이득이 별도 독립채무로만 남음 | warning |
### 8.2 단위 테스트
#### 테스트 1: payment allocation 계산
입력:
```json
{
"debts": [
{"principal": 200000000, "interest_rate": 10, "maturity_date": "2024-01-05", "secured_fraction": "2/5"},
{"principal": 300000000, "interest_rate": 15, "maturity_date": "2024-07-05", "secured_fraction": "3/5"}
],
"payment": {"amount": 400000000, "date": "2024-07-05", "designation": null}
}
```
기대:
```json
{
"fully_extinguished_fraction": "3/5",
"remaining_fraction": "2/5",
"forbid_whole_property_cancellation": true
}
```
#### 테스트 2: C-008 relief scope
입력:
```json
{
"claim_type": "소유권이전등기말소",
"payment_allocation_result.released_fraction": "3/5",
"target_registry_receipt_no": "제25797호"
}
```
기대:
```text
청구취지에 반드시 `3/5 지분`과 `제25797호` 포함
성수동 대지 전체 말소 표현 금지
```
#### 테스트 3: C-009 derivative invalidity
입력:
```json
{
"claim_type": "근저당권설정등기말소",
"mortgagee": "대한은행",
"target_receipt_no": "제25799호"
}
```
기대:
```text
선행 이문호 소유권이전등기 3/5 지분 부분 원인무효를 근거로 포함
민사집행법 제267조 및 등기 공신력 항변 반박 포함
```
#### 테스트 4: valuation row 선택
입력:
```json
{
"case_type": "무권원 미등기 건물 토지 사용이익",
"valuation_rows": [
{"condition": "건물 있음, 보증금 없음", "monthly": 4000000},
{"condition": "건물 없음, 보증금 없음", "monthly": 5000000}
],
"plaintiff_fraction": "3/5"
}
```
기대:
```json
{
"selected_total_monthly": 5000000,
"plaintiff_monthly": 3000000,
"reject_2400000": true
}
```
#### 테스트 5: lease deposit exclusion
입력:
```json
{
"deposit": 300000000,
"payer": "박성희",
"recipient": "이문호",
"plaintiff_fraction": "3/5",
"claim_type": "토지 사용이익 부당이득"
}
```
기대:
```json
{
"exclude_180000000_from_relief": true,
"allowed_theory": "monthly objective land use gain"
}
```
#### 테스트 6: joint liability group
입력:
```json
{
"land_use_events": [
{"actor": "이문호", "start": "2024-11-10"},
{"actor": "박성희", "start": "2024-11-20"}
],
"same_land": true,
"same_use_gain": true
}
```
기대:
```json
{
"claim_group_required": true,
"group_type": "time_sliced_joint_liability",
"relief": "이문호 2024-11-10부터, 박성희는 이문호와 공동하여 2024-11-20부터"
}
```
### 8.3 회귀 테스트
성수동 사건 개선이 다른 사건에서 과잉 일반화되지 않도록 다음 회귀 테스트를 둔다.
1. 복수 채무가 없고 단일 근저당권만 있는 사건
- payment allocation module이 불필요하게 작동하지 않아야 한다.
2. 변제자가 명시적으로 특정 채무에 충당 지정한 사건
- 법정변제충당이 아니라 지정충당을 우선해야 한다.
3. 피고가 적법하게 건물을 소유하고 적법 임대차가 존재하는 사건
- `건물 없음, 보증금 없음` row를 무조건 선택하지 않아야 한다.
4. 원고가 보증금을 직접 수령한 사건
- 보증금 배제가 자동 적용되지 않고 별도 부당이득 또는 계약상 반환 문제를 검토해야 한다.
5. 미등기 건물이 없고 단순 토지 점유만 있는 사건
- 미등기 건물 사실상 처분권 module이 작동하지 않아야 한다.
6. 민사집행법 제267조 항변이 문제되지 않는 일반 매매 원인무효 등기 사건
- 경매 공신력 항변 module을 불필요하게 삽입하지 않아야 한다.
## 9. 구현 우선순위
### 9.1 P0: 반드시 먼저 구현
1. Stage 1 Task_B1의 등기부 row graph 추출
2. Stage 1 Task_B1/Task_C의 `secured_debt_chain` 생성
3. Stage 1 Task_C/Task_D1의 `payment_allocation_result` 생성
4. Stage 2.1 Task_B의 `claim_fact_roles` 및 anti-pattern validation
5. Stage 2.3의 `법정변제충당_담보채무_지분말소_모듈`
6. C-008 전체 말소 금지 validation
P0가 구현되지 않으면 C-008과 C-009는 인간 변호사 수준으로 수렴하기 어렵다.
### 9.2 P1: 그 다음 구현
1. `land_use_gain_timeline`
2. `valuation_selection_matrix`
3. `lease_payment_semantics`
4. `claim_groups`
5. `미등기건물_토지사용_부당이득_부진정연대_모듈`
6. `차임감정표_법률상_기준선택_모듈`
7. `임대차보증금_부당이득_배제검토_모듈`
P1이 구현되지 않으면 C-011과 C-012의 금액, 기산일, 공동책임 구조가 계속 흔들릴 가능성이 높다.
### 9.3 P2: 검토 편의성과 안정성 강화
1. `stage1.html`의 법률효과 보드 추가
2. `claim_description.md`의 group-aware 표시
3. `pre_description_validation_summary.json`
4. 회귀 테스트 자동화
5. Files_to_be_Used의 기존 규칙 파일 정리
P2는 정확도 자체보다 검토 가능성, 디버깅 가능성, 장기 유지보수성을 높인다.
## 10. 최종 결론
`discrepancy_report_2.md`에서 드러난 불일치는 에이전트가 청구권 이름을 몰라서 발생한 문제가 아니다. 에이전트는 소유권이전등기말소, 근저당권설정등기말소, 건물철거·토지인도, 부당이득반환이라는 표면적 청구권 종류는 상당 부분 식별했다.
진짜 문제는 인간 변호사가 소장 작성 전에 수행하는 실체법적 재구성, 즉 `어느 채무가 어느 지분 담보권을 소멸시키는지`, `그 결과 어느 등기가 어느 범위에서 무효인지`, `현재 누가 어떤 법률상태로 토지를 점유하는지`, `복수 피고가 같은 사용이익에 대해 어떤 관계로 책임지는지`를 파이프라인이 구조화하지 못했다는 점이다.
따라서 개선의 핵심은 다음 세 가지로 요약된다.
1. Stage 1에서 `secured_debt_chain`, `payment_allocation_result`, `registry_row_graph`, `property_fraction_state_timeline`, `land_use_gain_timeline`을 생성한다.
2. Stage 2.1과 Stage 2.2에서 `source_fact_ids` 중심 조립을 `claim_fact_roles`, `legal_effect_structures`, `claim_groups` 중심 조립으로 바꾼다.
3. Stage 2.3에서 실체법 전용 module을 통해 청구취지의 지분 범위, 등기 접수번호, 금액, 기산일, 공동책임, 배제 금원을 강제한다.
이 구조가 구현되면 C-008부터 C-012까지의 산출물은 인간 변호사의 벤치마크와 다음 지점에서 수렴할 수 있다.
1. 이문호 소유권이전등기말소는 성수동 대지 전체가 아니라 `3/5 지분`에 한정된다.
2. 대한은행 근저당권말소는 이문호 등기의 3/5 지분 원인무효에서 파생되는 후행 등기 무효로 설명된다.
3. 박성희 철거·인도청구는 원고의 과반수 지분과 박성희의 미등기 건물 사실상 처분권을 중심으로 정리된다.
4. 이문호와 박성희 부당이득반환은 보증금 반환이나 월 240만 원 구조가 아니라, 월 300만 원의 토지 사용이익에 대한 시간대별 공동 또는 부진정연대 책임으로 정리된다.
5. 민사집행법 제267조, 등기 공신력, 민법 제622조 항변은 Stage 2 청구원인 단계에서 최소한의 반박 구조를 갖춘다.