# Stage 1·Stage 2 세부 Task별 개선 방안 리포트 3
## 1. 작성 목적
본 리포트는 `discrepancy_report_3.md`에 제시된 C-004 사해행위취소 청구권 서술 불일치의 원인과 개선 방안을 Stage 1 및 Stage 2의 실제 task 구조에 맞추어 세분화한 개선 설계서이다.
분석 대상 오류는 `C-004_claim_description.json`에서 발생하였다. 인간 변호사는 신림동 상가 사해행위취소 사건을 다음 구조로 구성하였다.
```text
강용원-오국한 사이의 두 개 대여금
-> 2022. 4. 18.자 대여금은 신림동 상가 2순위 근저당권으로 담보
-> 2022. 5. 18.자 대여금은 포천시 임야 근저당권으로 담보
-> 오국한이 2023. 3. 17. 유일 재산인 신림동 상가를 오민한에게 매도
-> 사해행위 이후 오민한이 원고에게 1억 3,000만 원을 변제하고 원고 근저당권 말소
-> 원물반환 대신 가액배상
-> 변론종결시 상가가액 2억 5,000만 원에서 사후 말소된 원고 근저당 실제 변제액 1억 3,000만 원과 존속 선순위 근저당 5,000만 원 공제
-> 7,000만 원 한도 취소 및 가액배상
```
반면 에이전트는 다음 오류를 냈다.
1. 사해행위취소 청구권 종류는 식별했지만, 취소 및 가액배상 한도를 `70,000,000원`이 아니라 `100,000,000원`으로 산정하였다.
2. C-004의 `source_fact_ids`를 `F-008`, `F-015`만으로 좁혀, 인간 변호사의 계산에 필수인 `F-007`, `F-032`, `F-039`를 청구별 입력에서 탈락시켰다.
3. `E-023` 차용증의 두 개 대여금, 각 변제기, 월 1% 이자, 담보 목적물을 `preserved_claim_bundle`로 묶지 못했다.
4. `E-001` 감정평가서의 시점별 valuation을 보존하지 못해 사해행위 당시 가치와 변론종결시 가치의 법률상 용도를 분리하지 못했다.
5. `E-014` 등기부를 row role map으로 분해하지 못해, 원고 근저당권이 사후 말소된 부담이라는 점과 그 실제 변제액이 가액배상 공제항목이라는 점을 계산에 반영하지 못했다.
6. `F-039`의 법률상 역할, 즉 가액배상형 선택 trigger, 사후 말소 담보권의 실제 피담보채무액, 가액배상 공제항목이라는 세 가지 역할을 반영하지 못했다.
7. 명의신탁, 충분한 담보 제공, 상계 항변을 Stage 2 claim description에서 통합하지 못했다.
8. 계산 모듈이 `numeric_finalization_allowed=false`, `relief_summary_rendering_allowed=false`, `manual_review_required=true`에 준하는 경고를 냈음에도, Stage 2.3이 최종 청구취지에 1억 원을 확정 렌더링하였다.
본 리포트의 목표는 단순히 `1억 원`을 `7,000만 원`으로 바꾸는 것이 아니다. Stage 1에서 `사해행위취소 경제상태표`를 만들고, Stage 2에서 그 경제상태표를 청구권 식별, claim information 조립, 모듈 선택, 청구취지·청구원인 생성, 저장 전 validation으로 관통시키는 구조를 설계하는 것이다.
## 2. 전체 개선 방향
### 2.1 핵심 아키텍처 원칙
개선 후 파이프라인은 다음 원칙을 따라야 한다.
1. 사해행위취소 사건에서는 개별 fact list가 아니라 `actio_balance_sheet`를 만든다.
- 피보전채권, 채무자의 책임재산, 사해행위 목적물, 사해행위 당시 부담, 사후 말소 부담, 변론종결시 가치, 수익자 이익, 가액배상 한도를 하나의 표로 묶는다.
2. `source_fact_ids`는 청구의 출처 목록이지 청구의 법률구조가 아니다.
- C-004처럼 사해행위 자체 fact와 피보전채권 fact만 선택하면, 원상회복 방법과 가액배상 범위 fact가 사라진다.
- Stage 2는 `claim_fact_roles`를 먼저 만들고, `source_fact_ids`는 그 결과로 flatten해야 한다.
3. 피보전채권은 단일 fact가 아니라 bundle이다.
- 같은 채권자와 채무자 사이에 복수 대여금이 있으면 각각의 원금, 이자, 변제기, 담보 목적물, 청구 내 역할을 분리해야 한다.
- F-007은 `preserved_claim`이면서 `released_encumbrance_after_act`이고, F-008은 `preserved_claim`이면서 `collateral_insufficiency_rebuttal`이다.
4. valuation은 단일 금액이 아니라 기준시점별 matrix이다.
- 사해행위 당시 무자력 및 사해성 판단에는 2023년 가치가 필요하다.
- 가액배상 한도 산정에는 변론종결시 또는 현재가치 proxy가 필요하다.
- 포천시 임야 가치는 피보전채권 부존재 또는 충분 담보 항변 반박에 필요하다.
5. 계산 모듈의 finalization status는 drafting layer를 강제해야 한다.
- `numeric_finalization_allowed=false`이면 `generate_description`은 확정 금액을 쓰면 안 된다.
- `relief_summary_rendering_allowed=false`이면 `save_description`은 해당 JSON을 최종 산출물로 저장하기 전에 blocking error를 내야 한다.
6. 청구원인 성립 및 범위에 직접 영향을 주는 예상 항변은 Stage 2에 포함한다.
- 명의신탁 항변은 사해행위성 자체를 공격한다.
- 충분한 담보 항변은 피보전채권 및 보전 필요성을 공격한다.
- 상계 항변은 가액배상 범위를 공격한다.
- 이 세 항변은 Stage 3 전용 보조 분석으로만 밀어두면 청구원인 밀도가 인간 변호사 수준에 못 미친다.
### 2.2 개선 후 canonical answer target
개선된 에이전트는 C-004에 대해 최소 다음 구조를 산출해야 한다.
```text
청구취지:
1. 피고 오민한과 소외 오국한 사이에 별지 목록 제3항 기재 부동산에 관하여
2023. 3. 17. 체결된 매매계약을 70,000,000원의 한도 내에서 취소한다.
2. 피고 오민한은 원고 강용원에게 70,000,000원 및 이에 대하여
이 판결 확정일 다음날부터 다 갚는 날까지 연 5%의 비율로 계산한 돈을 지급하라.
핵심 계산:
250,000,000원 - 130,000,000원 - 50,000,000원 = 70,000,000원
```
청구원인에는 다음 항목이 반드시 포함되어야 한다.
1. 2022. 4. 18.자 대여금, 변제기, 이자, 신림동 상가 2순위 근저당권
2. 2022. 5. 18.자 대여금, 변제기, 이자, 포천시 임야 근저당권
3. 오국한의 채무초과와 신림동 상가 유일 재산성
4. 2023. 3. 17. 오국한-오민한 매매계약 및 소유권이전
5. 사해행위 및 사해의사, 수익자 악의 추정
6. 2024. 10. 17. 오민한의 1억 3,000만 원 변제 및 원고 근저당권 말소
7. 가액배상형 선택 이유
8. 7,000만 원 산정식
9. 명의신탁 항변 반박
10. 포천시 임야 담보 충분 항변 반박
11. 오민한의 반대채권 상계 항변 반박
### 2.3 새 공통 데이터 구조 제안
아래 구조들은 기존 schema를 깨지 않는 additive field로 추가한다.
#### 2.3.1 `actio_balance_sheet`
```json
{
"actio_balance_sheet": {
"sheet_id": "ABS-SILLIM-01",
"cluster_id": "IC-SILLIM-ACTIO-01",
"debtor": "오국한",
"creditor": "강용원",
"beneficiary": "오민한",
"fraudulent_act": {
"act_type": "매매",
"act_date": "2023-03-17",
"asset": "신림동 상가",
"schedule_ref": "별지 목록 제3항",
"registry_row_id": "E-014-GAP-3",
"registry_receipt_no": "제11593호",
"registered_transfer_price": 150000000
},
"preserved_claim_bundle_id": "PCB-OKH-KYW-01",
"asset_value_matrix_id": "AVM-SILLIM-POCHUN-01",
"encumbrance_timeline_id": "ET-SILLIM-01",
"remedy_mode_decision_id": "RMD-SILLIM-01",
"value_compensation_cap_id": "VCC-SILLIM-01",
"defense_rebuttal_matrix_id": "DRM-SILLIM-01"
}
}
```
#### 2.3.2 `preserved_claim_bundle`
```json
{
"preserved_claim_bundle": {
"bundle_id": "PCB-OKH-KYW-01",
"creditor": "강용원",
"debtor": "오국한",
"claims": [
{
"claim_component_id": "PCB-OKH-KYW-2022-04-18",
"fact_id": "F-007",
"evidence_index": "E-023",
"loan_date": "2022-04-18",
"principal": 100000000,
"maturity_date": "2022-12-17",
"interest_rate": {
"type": "monthly",
"rate_percent": 1
},
"collateral": {
"asset": "신림동 상가",
"registry_row_id": "E-014-EUL-2",
"rank": 2,
"maximum_claim_amount": 150000000
},
"roles_in_C004": [
"preserved_claim",
"released_encumbrance_after_act",
"value_compensation_deduction_basis"
]
},
{
"claim_component_id": "PCB-OKH-KYW-2022-05-18",
"fact_id": "F-008",
"evidence_index": "E-023",
"loan_date": "2022-05-18",
"principal": 100000000,
"maturity_date": "2023-03-17",
"interest_rate": {
"type": "monthly",
"rate_percent": 1
},
"collateral": {
"asset": "포천시 임야",
"rank": 1,
"maximum_claim_amount": 150000000
},
"act_date_claim_amount": {
"as_of": "2023-03-17",
"principal": 100000000,
"interest": 10000000,
"total": 110000000,
"calculation_basis": "2022-05-18부터 2023-03-17까지 월 1% 약 10개월"
},
"roles_in_C004": [
"preserved_claim",
"collateral_insufficiency_rebuttal"
]
}
],
"bundle_review_flags": []
}
}
```
#### 2.3.3 `asset_value_matrix`
```json
{
"asset_value_matrix": {
"matrix_id": "AVM-SILLIM-POCHUN-01",
"source_evidence_index": "E-001",
"rows": [
{
"asset": "신림동 상가",
"period": "2023",
"basis": "2023. 1. 1. ~ 2023. 12. 31.",
"amount": 240000000,
"legal_uses": [
"fraudulent_act_date_value",
"debtor_insolvency_analysis"
]
},
{
"asset": "신림동 상가",
"period": "2024_current",
"basis": "2024. 1. 1. ~ 현재",
"amount": 250000000,
"legal_uses": [
"close_or_current_value_proxy",
"value_compensation_cap"
]
},
{
"asset": "포천시 임야",
"period": "2023",
"basis": "2023. 1. 1. ~ 2023. 12. 31.",
"amount": 30000000,
"legal_uses": [
"collateral_insufficiency_at_act",
"defense_rebuttal_sufficient_collateral"
]
},
{
"asset": "포천시 임야",
"period": "2024_current",
"basis": "2024. 1. 1. ~ 현재",
"amount": 35000000,
"legal_uses": [
"current_collateral_value_reference"
]
}
]
}
}
```
#### 2.3.4 `registry_row_role_map`
```json
{
"registry_row_role_map": {
"source_evidence_index": "E-014",
"rows": [
{
"registry_row_id": "E-014-GAP-3",
"section": "갑구",
"rank_no": "3",
"right_type": "소유권이전",
"receipt_date": "2023-03-17",
"receipt_no": "제11593호",
"cause": "2023-03-17 매매",
"holder": "오민한",
"transaction_price": 150000000,
"actio_roles": [
"fraudulent_transfer_registration",
"fraudulent_act_target"
]
},
{
"registry_row_id": "E-014-EUL-1",
"section": "을구",
"rank_no": "1",
"right_type": "근저당권설정",
"receipt_date": "2021-08-01",
"receipt_no": "제50099호",
"holder": "나임오",
"maximum_claim_amount": 50000000,
"actio_roles": [
"senior_encumbrance_existing_at_act",
"deduction_in_value_compensation"
]
},
{
"registry_row_id": "E-014-EUL-2",
"section": "을구",
"rank_no": "2",
"right_type": "근저당권설정",
"receipt_date": "2022-04-18",
"receipt_no": "제26597호",
"holder": "강용원",
"maximum_claim_amount": 150000000,
"linked_claim_component_id": "PCB-OKH-KYW-2022-04-18",
"actio_roles": [
"encumbrance_existing_at_act",
"released_encumbrance_after_act",
"value_compensation_exception_basis"
]
},
{
"registry_row_id": "E-014-EUL-3",
"section": "을구",
"rank_no": "3",
"right_type": "근저당권설정등기말소",
"receipt_date": "2024-10-17",
"receipt_no": "제74586호",
"cause": "2024-10-17 해지",
"linked_payment_fact_id": "F-039",
"actio_roles": [
"release_registration_after_act",
"remedy_mode_value_compensation_trigger"
]
}
]
}
}
```
#### 2.3.5 `encumbrance_timeline`
```json
{
"encumbrance_timeline": {
"timeline_id": "ET-SILLIM-01",
"asset": "신림동 상가",
"events": [
{
"as_of": "2023-03-17",
"phase": "at_fraudulent_act",
"encumbrances": [
{
"holder": "나임오",
"rank": 1,
"registered_max_amount": 50000000,
"actual_debt_at_act": 40000000,
"actual_debt_source": "E-008/client_meeting",
"deduction_policy": "actual_if_confident_else_registered_max"
},
{
"holder": "강용원",
"rank": 2,
"registered_max_amount": 150000000,
"linked_claim_component_id": "PCB-OKH-KYW-2022-04-18",
"status": "existing_at_act"
}
]
},
{
"as_of": "2024-10-17",
"phase": "after_fraudulent_act",
"event": "오민한이 강용원에게 130,000,000원 변제 후 강용원 근저당권 말소",
"released_encumbrance": {
"holder": "강용원",
"actual_debt_paid": 130000000,
"release_registry_row_id": "E-014-EUL-3"
}
}
]
}
}
```
#### 2.3.6 `remedy_mode_decision`
```json
{
"remedy_mode_decision": {
"decision_id": "RMD-SILLIM-01",
"default_mode": "cancellation_plus_original_restoration",
"selected_mode": "cancellation_plus_value_compensation",
"reason": "사해행위 당시 존재하던 원고 강용원 명의 2순위 근저당권이 사해행위 이후 수익자 오민한의 변제로 말소되어 원물반환은 공동담보 범위를 초과 회복시키는 결과가 됨",
"basis_fact_ids": ["F-007", "F-015", "F-039"],
"basis_registry_row_ids": ["E-014-EUL-2", "E-014-EUL-3"],
"required_module": "부담부_부동산소유권이전_사해행위_가액배상_모듈"
}
}
```
#### 2.3.7 `value_compensation_cap`
```json
{
"value_compensation_cap": {
"cap_id": "VCC-SILLIM-01",
"calculation_mode": "encumbered_real_estate_transfer_value_compensation",
"inputs": {
"asset_value_at_close_or_proxy": 250000000,
"released_plaintiff_mortgage_actual_debt": 130000000,
"remaining_senior_encumbrance_deducted": 50000000,
"preserved_claim_total_for_relief_comparison": 110000000
},
"calculation_steps": [
{
"label": "beneficiary_gain_or_common_collateral_value",
"formula": "250000000 - 130000000 - 50000000",
"amount": 70000000
},
{
"label": "final_cap",
"formula": "min(preserved_claim, beneficiary_gain_or_common_collateral_value)",
"amount": 70000000
}
],
"selected_relief_amount": 70000000,
"rendering_allowed": true,
"review_flags": []
}
}
```
#### 2.3.8 `defense_rebuttal_matrix`
```json
{
"defense_rebuttal_matrix": {
"matrix_id": "DRM-SILLIM-01",
"items": [
{
"defense_id": "DEF-SILLIM-TITLE-TRUST",
"defense": "명의신탁으로서 사해행위가 아님",
"source_fact_ids": ["F-001", "F-035"],
"rebuttal_required_in_stage2": true,
"rebuttal_theory": "부동산실명법 시행 후 양자간 명의신탁에서 신탁자의 처분행위도 일반채권자에 대해 사해행위가 될 수 있음"
},
{
"defense_id": "DEF-SILLIM-SUFFICIENT-COLLATERAL",
"defense": "포천시 임야 담보로 피보전채권 또는 보전 필요성 없음",
"source_fact_ids": ["F-008", "F-032", "F-035"],
"rebuttal_required_in_stage2": true,
"calculation": {
"claim_amount_at_act": 110000000,
"collateral_value_at_act": 30000000,
"unsecured_or_excess_amount": 80000000
}
},
{
"defense_id": "DEF-SILLIM-SETOFF",
"defense": "오민한의 오국한에 대한 5,000만 원 채권으로 상계",
"source_fact_ids": ["F-001", "F-009", "F-035"],
"rebuttal_required_in_stage2": true,
"rebuttal_theory": "수익자는 채무자에 대한 반대채권을 자동채권으로 하여 채권자취소권의 가액배상채무와 상계할 수 없음"
}
]
}
}
```
## 3. Stage 1 개선 방안
Stage 1의 임무는 사건 개요 파악이지만, C-004의 오류는 Stage 1에서 `사해행위취소용 계산 가능한 사건상태`를 만들지 못한 데서 출발한다. 따라서 Stage 1은 사해행위취소 사건을 감지하면 단순 fact ledger를 넘어 `actio_balance_sheet`를 생성해야 한다.
### 3.1 Stage 1 Task_A: `client_goal.json` 생성 개선
#### 현재 역할
Task_A는 `client_meeting.md`를 읽고 원고의 목표, 당사자, 중요 제약, 사건군, 후보 피고, 원하는 구제수단을 추출한다. 현재 Task_A는 신림동 상가 사해행위취소 목표와 `오국한에 대한 대여금 청구 소송 제기 불가`라는 제약을 포착하였다.
그러나 C-004에 필요한 다음 구조는 충분히 남기지 못했다.
1. 신림동 상가 사건이 담보권 있는 부동산 소유권이전 사해행위라는 점
2. 원고의 피보전채권이 두 개의 대여금 bundle이라는 점
3. 한 대여금은 사후 말소된 신림동 상가 근저당권과 연결되고, 다른 대여금은 포천시 임야 담보 부족 항변과 연결된다는 점
4. 오민한의 명의신탁, 충분 담보, 상계 주장이 Stage 2 청구원인에 들어가야 할 핵심 방어라는 점
#### 개선 목표
`client_goal.json.issue_clusters[*]`에 다음 additive field를 추가한다.
```json
{
"cluster_id": "IC-SILLIM-ACTIO-01",
"cluster_label": "신림동 상가 사해행위취소 및 가액배상",
"actio_property_transfer_profile": {
"debtor": "오국한",
"creditor": "강용원",
"beneficiary": "오민한",
"fraudulent_act_asset": "신림동 상가",
"fraudulent_act_type": "소유권이전 매매",
"fraudulent_act_date_hint": "2023-03-17",
"is_encumbered_real_estate": true,
"requires_value_compensation_review": true
},
"preserved_claim_bundle_hint": {
"multiple_claims_same_creditor_debtor": true,
"creditor": "강용원",
"debtor": "오국한",
"claim_hints": [
{
"loan_date": "2022-04-18",
"principal": "1억 원",
"collateral_asset": "신림동 상가",
"expected_role": "released_encumbrance_after_act"
},
{
"loan_date": "2022-05-18",
"principal": "1억 원",
"collateral_asset": "포천시 임야",
"expected_role": "collateral_insufficiency_rebuttal"
}
]
},
"value_compensation_hint": {
"released_encumbrance_after_act_mentioned": true,
"released_encumbrance_payment_amount": "1억 3,000만 원",
"requires_cap_calculation": true
},
"defense_hints": [
{
"defense_type": "title_trust",
"party": "오민한",
"requires_stage2_rebuttal": true
},
{
"defense_type": "sufficient_collateral",
"party": "오민한",
"requires_stage2_rebuttal": true
},
{
"defense_type": "setoff_by_beneficiary_claim",
"party": "오민한",
"requires_stage2_rebuttal": true
}
],
"client_constraints": [
"오국한에 대한 대여금 청구 소송 제기 불가"
]
}
```
#### 프롬프트 개선 문구
Task_A에 다음 지시를 추가한다.
```text
- 채무자가 부동산을 수익자에게 이전하고, 원고가 사해행위취소를 희망하는 사건군을 발견하면 `actio_property_transfer_profile`을 생성한다.
- 부동산에 근저당권 등 부담이 있고, 그 부담이 사해행위 이후 변제·말소되었다는 단서가 있으면 `requires_value_compensation_review=true`로 표시한다.
- 같은 채권자와 채무자 사이에 복수 대여금이 등장하면 단순 후보채권 목록으로 흩뜨리지 말고 `preserved_claim_bundle_hint`로 묶는다.
- 피고가 명의신탁, 담보 충분, 상계, 선의 등을 주장하면 이를 `defense_hints`에 남기고, 청구원인 성립 또는 범위에 직접 영향을 주는 항변이면 `requires_stage2_rebuttal=true`로 표시한다.
```
#### 검증 게이트
1. `사해행위취소`, `유일한 재산`, `소유권이전`, `오민한`이 같은 cluster에 등장하는데 `actio_property_transfer_profile`이 없으면 warning을 표시한다.
2. `근저당권 말소`, `1억 3,000만 원 변제`, `가액배상` 단서가 있는데 `requires_value_compensation_review`가 false이면 error를 표시한다.
3. 같은 채권자와 채무자 사이에 2건 이상 대여금이 등장하는데 `preserved_claim_bundle_hint`가 없으면 warning을 표시한다.
4. 사건관계인 주장에 명의신탁·담보충분·상계가 있는데 `defense_hints`가 없으면 warning을 표시한다.
### 3.2 Stage 1 Task_B1: `evidence_indexed.json` 생성 개선
#### 현재 역할
Task_B1은 `evidence_all.json`과 상담문서를 읽어 authority evidence catalog인 `evidence_indexed.json`을 생성한다. 현재는 `key_facts`, `key_dates`, `key_amounts`, `doc_semantic_flags`, 일부 `legal_calculation_objects`를 추출한다.
#### 이번 사건에서의 실패 지점
Task_B1은 다음 문서들을 더 정밀하게 구조화했어야 한다.
1. `E-023` 차용증
- 두 개 차용증을 `loan_components`로 분리해야 했다.
- 각 원금, 변제기, 월 1% 이자, 담보 목적물, 법률상 역할을 추출해야 했다.
2. `E-001` 감정평가서
- 2022년, 2023년, 2024년 현재의 시점별 가치 row를 모두 보존해야 했다.
- 신림동 상가와 포천시 임야 각각의 법률상 사용처를 표시해야 했다.
3. `E-014` 등기사항전부증명서
- 갑구 3번, 을구 1번, 을구 2번, 을구 3번을 registry row role map으로 분리해야 했다.
- 강용원 근저당권의 사후 말소 row와 F-039를 연결해야 했다.
4. `E-002` 각서 및 금전소비대차계약서
- 명의신탁 주장과 오민한의 1,000만 원 반대채권을 defense fact로 구조화해야 했다.
5. `E-007` 내용증명 답신
- 명의신탁, 충분담보, 상계 항변을 명시적 defense assertions로 추출해야 했다.
6. `E-008` 내용증명
- 취소원인 인식 시점, 제척기간, 나일오 실제 채무 4,000만 원, 현재 채무 7,000만 원, 포천 임야 가치 3,000만 원 등 보조 계산 단서를 보존해야 했다.
#### 개선 목표 1: `loan_components`
E-023에 다음 구조를 추가한다.
```json
{
"loan_components": [
{
"component_id": "E-023-LOAN-2022-04-18",
"fact_id_candidate": "F-007",
"creditor": "강용원",
"debtor": "오국한",
"principal": 100000000,
"loan_date": "2022-04-18",
"maturity_date": "2022-12-17",
"interest_rate": {
"type": "monthly",
"rate_percent": 1
},
"collateral_asset_hint": "신림동 상가",
"linked_registry_row_hint": "E-014-EUL-2",
"actio_roles": [
"preserved_claim",
"released_encumbrance_after_act",
"value_compensation_deduction_basis"
]
},
{
"component_id": "E-023-LOAN-2022-05-18",
"fact_id_candidate": "F-008",
"creditor": "강용원",
"debtor": "오국한",
"principal": 100000000,
"loan_date": "2022-05-18",
"maturity_date": "2023-03-17",
"interest_rate": {
"type": "monthly",
"rate_percent": 1
},
"collateral_asset_hint": "포천시 임야",
"actio_roles": [
"preserved_claim",
"collateral_insufficiency_rebuttal"
],
"act_date_claim_amount_candidate": {
"as_of": "2023-03-17",
"principal": 100000000,
"interest_candidate": 10000000,
"total_candidate": 110000000,
"requires_review": true
}
}
]
}
```
#### 개선 목표 2: `valuation_matrix`
E-001에 다음 구조를 추가한다.
```json
{
"valuation_matrix": {
"matrix_id": "AVM-SILLIM-POCHUN-01",
"rows": [
{
"asset": "신림동 상가",
"period": "2022",
"amount": 230000000,
"legal_uses": ["pre_act_context"]
},
{
"asset": "신림동 상가",
"period": "2023",
"amount": 240000000,
"legal_uses": ["fraudulent_act_date_value", "debtor_insolvency_analysis"]
},
{
"asset": "신림동 상가",
"period": "2024_current",
"amount": 250000000,
"legal_uses": ["close_or_current_value_proxy", "value_compensation_cap"]
},
{
"asset": "포천시 임야",
"period": "2023",
"amount": 30000000,
"legal_uses": ["collateral_insufficiency_at_act", "sufficient_collateral_defense_rebuttal"]
}
]
}
}
```
#### 개선 목표 3: `registry_row_role_map`
E-014에 다음 구조를 추가한다.
```json
{
"registry_row_role_map": {
"rows": [
{
"registry_row_id": "E-014-GAP-3",
"section": "갑구",
"rank_no": "3",
"right_type": "소유권이전",
"receipt_date": "2023-03-17",
"receipt_no": "제11593호",
"cause": "2023-03-17 매매",
"holder": "오민한",
"actio_roles": ["fraudulent_transfer_registration"]
},
{
"registry_row_id": "E-014-EUL-1",
"section": "을구",
"rank_no": "1",
"holder": "나임오",
"maximum_claim_amount": 50000000,
"actio_roles": ["senior_encumbrance_existing_at_act", "deduction_in_value_compensation"]
},
{
"registry_row_id": "E-014-EUL-2",
"section": "을구",
"rank_no": "2",
"holder": "강용원",
"receipt_date": "2022-04-18",
"receipt_no": "제26597호",
"maximum_claim_amount": 150000000,
"linked_claim_component_id": "E-023-LOAN-2022-04-18",
"actio_roles": ["released_encumbrance_after_act", "value_compensation_exception_basis"]
},
{
"registry_row_id": "E-014-EUL-3",
"section": "을구",
"right_type": "근저당권설정등기말소",
"receipt_date": "2024-10-17",
"receipt_no": "제74586호",
"cause": "해지",
"linked_payment_fact_id": "F-039",
"actio_roles": ["release_registration_after_act"]
}
]
}
}
```
#### 개선 목표 4: defense assertion extraction
E-007에는 다음 구조를 추가한다.
```json
{
"defense_assertions": [
{
"defense_type": "title_trust",
"asserting_party": "오민한",
"summary": "신림동 상가는 애초부터 오민한 소유이고 오국한 명의는 명의신탁이라는 주장",
"requires_rebuttal_in_stage2": true
},
{
"defense_type": "sufficient_collateral",
"asserting_party": "오민한",
"summary": "원고가 신림동 상가 및 포천시 임야에 충분한 담보를 확보했다는 주장",
"requires_rebuttal_in_stage2": true
},
{
"defense_type": "setoff",
"asserting_party": "오민한",
"summary": "오민한의 오국한에 대한 5,000만 원 채권으로 상계하겠다는 주장",
"counterclaim_amount": 50000000,
"requires_rebuttal_in_stage2": true
}
]
}
```
#### 프롬프트 개선 문구
```text
- 사해행위취소 사건의 증거문서는 일반 key_facts 요약만으로 충분하지 않다.
- 차용증에 복수 대여금이 있으면 loan_components로 분리하고, 각 원금·변제기·이자율·담보 목적물·청구 내 역할을 추출한다.
- 감정평가서는 시점별 valuation_matrix로 보존하고, 각 row의 legal_use를 표시한다.
- 등기부는 갑구/을구 row별로 쪼개고, 각 row의 actio_roles를 부여한다.
- 내용증명 답신에 명의신탁, 충분담보, 상계, 선의 주장이 있으면 defense_assertions로 추출한다.
- 사후 말소된 담보권과 그 말소를 유발한 변제액은 가액배상 계산의 필수 입력으로 표시한다.
```
#### 검증 게이트
1. `E-023`에 두 개 날짜와 두 개 차용증 본문이 있는데 `loan_components`가 2개 미만이면 error를 표시한다.
2. `월 1%`, `변제기`가 문서에 있는데 loan component에 없으면 warning을 표시한다.
3. valuation 문서에 복수 시점 row가 있는데 2023년과 2024년 value가 분리되지 않으면 warning을 표시한다.
4. 등기부 문서에 사후 말소 row가 있는데 `release_registration_after_act` role이 없으면 error를 표시한다.
5. 내용증명 답신에 상계 또는 명의신탁 주장이 있는데 `defense_assertions`가 없으면 warning을 표시한다.
### 3.3 Stage 1 Task_B2: `evidence_event_candidates.json` 생성 개선
#### 현재 역할
Task_B2는 `evidence_indexed.json`을 기반으로 evidence event/state 후보를 생성한다.
#### 이번 사건에서의 실패 지점
Task_B2는 raw event는 어느 정도 생성했으나, 사해행위취소 계산에 필요한 legal-effect event를 충분히 만들지 못했다.
필요했던 event는 다음과 같다.
1. `preserved_claim_arising`
2. `collateral_setting_for_preserved_claim`
3. `fraudulent_transfer`
4. `asset_value_at_fraudulent_act`
5. `asset_value_at_close_proxy`
6. `collateral_insufficiency_at_act`
7. `encumbrance_release_after_act`
8. `value_compensation_exception_trigger`
9. `value_compensation_cap_calculation_candidate`
10. `defense_assertion_title_trust`
11. `defense_assertion_sufficient_collateral`
12. `defense_assertion_setoff`
#### 개선 목표
Task_B2는 raw event 외에 legal-effect event를 생성한다.
```json
{
"event_id": "EV-SILLIM-VALUE-COMP-TRIGGER-01",
"event_kind": "legal_effect",
"event_subkind": "value_compensation_exception_trigger",
"date": "2024-10-17",
"source_fact_ids": ["F-007", "F-039"],
"source_registry_row_ids": ["E-014-EUL-2", "E-014-EUL-3"],
"legal_effect": "사해행위 당시 존재한 원고 근저당권이 사해행위 이후 수익자의 변제로 말소되어 원물반환 대신 가액배상 검토 필요",
"required_downstream_roles": [
"remedy_mode_decision",
"released_encumbrance_actual_debt",
"value_compensation_cap"
]
}
```
```json
{
"event_id": "EV-SILLIM-CAP-CALC-01",
"event_kind": "legal_effect",
"event_subkind": "value_compensation_cap_calculation_candidate",
"source_fact_ids": ["F-032", "F-039", "F-015"],
"calculation_candidate": {
"asset_value_at_close": 250000000,
"released_plaintiff_mortgage_actual_debt": 130000000,
"senior_encumbrance_deducted": 50000000,
"candidate_cap": 70000000
},
"review_flags": ["ACTIO_CAP_CALCULATION_REVIEW"]
}
```
#### 프롬프트 개선 문구
```text
- 사해행위취소 사건에서 raw event와 legal-effect event를 구분한다.
- 사해행위 당시 존재하던 담보권이 사후 말소되면 `value_compensation_exception_trigger` event를 생성한다.
- valuation row와 사후 말소 부담, 존속 부담이 모두 있으면 `value_compensation_cap_calculation_candidate`를 생성한다.
- 피고가 항변을 명시한 내용증명은 `defense_assertion_*` event로 만들고, Stage 2 claim description에 반영해야 하는지 표시한다.
```
#### 검증 게이트
1. `release_registration_after_act` registry row가 있는데 `value_compensation_exception_trigger` event가 없으면 error를 표시한다.
2. valuation matrix와 released encumbrance가 있는데 cap calculation candidate가 없으면 warning을 표시한다.
3. defense assertion event가 있는데 Stage 2로 전달할 role이 없으면 warning을 표시한다.
### 3.4 Stage 1 Task_C: `BO.json` 및 `actio_case_signals.json` 생성 개선
#### 현재 역할
Task_C는 상담 기반 BO와 evidence event candidates를 중복 제거하여 사건 객체를 생성하고, 사해행위취소 signal을 만든다.
#### 이번 사건에서의 실패 지점
Task_C는 C-004에 대해 다음 BO를 생성했어야 한다.
1. `BO-SILLIM-PRESERVED-CLAIM-BUNDLE`
2. `BO-SILLIM-FRAUDULENT-TRANSFER`
3. `BO-SILLIM-ENCUMBRANCE-TIMELINE`
4. `BO-SILLIM-VALUATION-MATRIX`
5. `BO-SILLIM-REMEDY-MODE-DECISION`
6. `BO-SILLIM-VALUE-COMPENSATION-CAP`
7. `BO-SILLIM-DEFENSE-REBUTTAL-MATRIX`
8. `BO-SILLIM-ACTIO-BALANCE-SHEET`
현재는 F-007, F-008, F-015, F-032, F-039가 각기 흩어진 fact로 남았고, 하나의 actio 계산 객체로 결합되지 않았다.
#### 개선 목표
Task_C는 다음 root-level 또는 BO-level 구조를 생성한다.
```json
{
"bo_id": "BO-SILLIM-ACTIO-BALANCE-SHEET",
"bo_type": "legal_effect_balance_sheet",
"legal_effect_bo_type": "actio_pauliana_encumbered_real_estate_transfer",
"asset_cluster_id": "신림동 상가",
"cross_asset_links": [
{
"asset": "포천시 임야",
"reason": "collateral_insufficiency_rebuttal"
}
],
"source_fact_candidates": ["F-001", "F-007", "F-008", "F-009", "F-015", "F-032", "F-035", "F-039"],
"computed_or_candidate_outputs": {
"remedy_mode": "value_compensation",
"candidate_value_compensation_cap": 70000000,
"cap_calculation_formula": "250000000 - 130000000 - 50000000"
},
"mandatory_downstream_roles": [
"preserved_claim_bundle",
"fraudulent_act",
"asset_value_at_close",
"released_encumbrance_after_act",
"value_compensation_cap",
"defense_rebuttal_matrix"
]
}
```
#### `actio_case_signals.json` 개선
`actio_case_signals.json`에는 단순 suspicion signal 외에 다음을 추가한다.
```json
{
"actio_case_signals": {
"requires_balance_sheet": true,
"requires_value_compensation_cap": true,
"requires_defense_rebuttal_in_stage2": true,
"detected_case_subtype": "encumbered_real_estate_transfer_with_released_mortgage_after_act",
"blocking_risks": [
"PRESERVED_CLAIM_BUNDLE_COLLAPSED",
"VALUE_COMPENSATION_CAP_MISSING",
"DEFENSE_CRITICAL_FACTS_MISSING"
]
}
}
```
#### 프롬프트 개선 문구
```text
- 사해행위취소 signal이 high이고, 부동산 이전·담보권·사후 말소·valuation이 함께 존재하면 actio_balance_sheet BO를 생성한다.
- BO는 단일 asset cluster만 기준으로 만들지 말고, 피보전채권 담보가 다른 자산에 걸쳐 있으면 cross_asset_links를 둔다.
- 계산 후보가 완전하지 않더라도 cap calculation에 필요한 입력 목록과 누락 항목을 명시한다.
- 이 BO의 mandatory_downstream_roles는 Stage 2 claim_fact_roles의 template으로 전달한다.
```
#### 검증 게이트
1. 사해행위취소 signal이 high인데 `actio_balance_sheet` BO가 없으면 error를 표시한다.
2. `requires_value_compensation_review=true`인데 `remedy_mode_decision` BO가 없으면 error를 표시한다.
3. `value_compensation_cap` 후보가 있는데 source fact에 valuation 또는 released encumbrance가 빠지면 warning을 표시한다.
### 3.5 Stage 1 Task_B3: `evidence_actio_support.json` 생성 개선
#### 현재 역할
Task_B3는 evidence가 사해행위취소 청구에서 어떤 역할을 하는지 `evidence_actio_support.json`으로 정리한다.
#### 이번 사건에서의 실패 지점
현재 `evidence_actio_support.json`은 E-014에 `사해행위목적물`, `선순위담보`, `존속담보` 같은 tag를 달았다. 그러나 다음 역할이 충분히 구분되지 않았다.
1. `released_encumbrance_after_act`
2. `released_encumbrance_actual_debt_amount`
3. `value_at_fraudulent_act`
4. `value_at_close_or_proxy`
5. `collateral_insufficiency_rebuttal`
6. `defense_assertion`
7. `setoff_rebuttal_basis`
#### 개선 목표
`evidence_actio_support.json`의 각 item에 다음 support role을 추가한다.
```json
{
"evidence_index": "E-001",
"actio_pauliana_support": {
"support_role_tags": [
"valuation_at_act",
"valuation_at_close_proxy",
"collateral_value_for_defense_rebuttal"
],
"valuation_matrix_id": "AVM-SILLIM-POCHUN-01",
"supports_claim_roles": [
"asset_value_at_act",
"asset_value_at_close",
"collateral_insufficiency_rebuttal"
]
}
}
```
```json
{
"evidence_index": "E-014",
"actio_pauliana_support": {
"support_role_tags": [
"fraudulent_transfer_registration",
"senior_encumbrance",
"released_encumbrance_after_act",
"value_compensation_exception_basis"
],
"registry_row_role_map_id": "E-014-RRRM",
"supports_claim_roles": [
"fraudulent_act",
"encumbrances_existing_at_act",
"released_encumbrance_after_act",
"remedy_mode_decision"
]
}
}
```
#### 프롬프트 개선 문구
```text
- 사해행위취소 evidence support는 원고채권/사해행위목적물 같은 큰 tag에서 끝내지 않는다.
- 각 증거가 피보전채권, 사해행위, 담보 부담, 사후 말소, valuation, 항변 반박, final cap 중 어느 역할을 하는지 supports_claim_roles로 명시한다.
- 가액배상 사건에서 `valuation_at_close_proxy`, `released_encumbrance_after_act`, `senior_encumbrance` 중 하나라도 빠지면 value_compensation_cap을 확정할 수 없음을 표시한다.
```
### 3.6 Stage 1 Task_D1: `Fact_Ledger_base.json` 생성 개선
#### 현재 역할
Task_D1은 `BO.json`과 `evidence_indexed.json`을 읽고 base fact ledger를 생성한다.
#### 이번 사건에서의 실패 지점
F-007, F-008, F-015, F-032, F-039는 존재했지만, 각 fact의 사해행위취소 청구 내 역할이 구조화되지 않았다.
특히 F-039는 단순 `오민한이 강용원에게 원리금을 변제하고 근저당권이 말소됨`으로만 남았다. 그러나 C-004에서는 F-039가 가액배상형 선택과 7,000만 원 계산의 핵심이다.
#### 개선 목표
각 fact에 `actio_roles`, `linked_actio_structures`, `legal_centrality`를 추가한다.
```json
{
"fact_id": "F-039",
"type": "법률행위(legal acts)",
"amount": "1억 3,000만 원",
"legal_centrality": "critical",
"actio_roles": [
"released_encumbrance_after_act",
"released_encumbrance_actual_debt",
"value_compensation_exception_basis",
"value_compensation_cap_deduction"
],
"linked_actio_structures": {
"actio_balance_sheet_id": "ABS-SILLIM-01",
"encumbrance_timeline_id": "ET-SILLIM-01",
"value_compensation_cap_id": "VCC-SILLIM-01"
},
"must_not_drop_in_claim_types": [
"사해행위취소 청구"
]
}
```
```json
{
"fact_id": "F-032",
"legal_centrality": "critical",
"actio_roles": [
"asset_value_at_act",
"asset_value_at_close",
"collateral_insufficiency_rebuttal"
],
"linked_actio_structures": {
"asset_value_matrix_id": "AVM-SILLIM-POCHUN-01"
},
"must_not_drop_in_claim_types": [
"사해행위취소 청구"
]
}
```
#### 프롬프트 개선 문구
```text
- 사해행위취소 관련 fact에는 actio_roles를 부여한다.
- `released_encumbrance_after_act`, `asset_value_at_close`, `value_compensation_cap_deduction` 역할을 가진 fact는 `legal_centrality=critical`로 둔다.
- proof strength와 legal centrality를 분리한다. 상담문서 기반이라도 가액배상 계산에 필수이면 critical로 표시한다.
- `must_not_drop_in_claim_types`는 Stage 2의 source_fact 누락 validation에 사용된다.
```
#### 검증 게이트
1. F-039가 존재하는데 `released_encumbrance_after_act` role이 없으면 error를 표시한다.
2. F-032가 존재하는데 valuation matrix와 연결되지 않으면 warning을 표시한다.
3. F-007과 F-008이 모두 존재하는데 preserved claim bundle이 없으면 warning을 표시한다.
### 3.7 Stage 1 Task_D2: `fact_actio_support.json` 생성 개선
#### 현재 역할
Task_D2는 fact ledger와 actio support를 결합하여 fact별 사해행위취소 지원 역할을 정리한다.
#### 개선 목표
`fact_actio_support.json`은 `source_bo_id`만 쓰지 말고 `fact_id`를 명시하고, 각 fact가 C-004에서 맡는 role을 분명히 해야 한다.
```json
{
"fact_id": "F-007",
"actio_pauliana_support": {
"support_role_tags": [
"원고채권",
"사해행위 당시 부담",
"사후 말소 부담"
],
"claim_role_candidates": [
"preserved_claim_bundle",
"encumbrances_existing_at_act",
"released_encumbrance_after_act",
"value_compensation_deduction_basis"
],
"mandatory_for_claim_ids": ["C-004"]
}
}
```
```json
{
"fact_id": "F-039",
"actio_pauliana_support": {
"support_role_tags": [
"원상회복방법",
"가액배상전환",
"가액배상공제"
],
"claim_role_candidates": [
"released_encumbrance_after_act",
"remedy_mode_decision",
"value_compensation_cap"
],
"mandatory_for_claim_ids": ["C-004"]
}
}
```
#### 검증 게이트
1. `fact_actio_support.json`에 fact_id 없이 source_bo_id만 있으면 Stage 2 조인이 불안정하므로 warning을 표시한다.
2. F-007, F-032, F-039가 `mandatory_for_claim_ids: C-004`로 표시되지 않으면 warning을 표시한다.
### 3.8 Stage 1 Task_Display: `stage1.html` 개선
#### 현재 역할
Task_Display는 Stage 1 결과를 사람이 검토할 수 있는 HTML로 렌더링한다.
#### 개선 목표
사해행위취소 사건에 대해서는 `stage1.html`에 다음 검토 보드를 추가한다.
1. `Actio Balance Sheet Board`
- 채권자, 채무자, 수익자, 사해행위일, 목적물, 피보전채권 bundle, 사해행위 당시 부담, 사후 말소 부담, 변론종결시 가치, 최종 cap을 표로 표시한다.
2. `Preserved Claim Bundle Board`
- 2022. 4. 18.자 대여금과 2022. 5. 18.자 대여금을 각각 표시한다.
- 원금, 이자, 변제기, 담보 목적물, C-004 내 역할을 표시한다.
3. `Value Compensation Calculation Board`
- `250,000,000 - 130,000,000 - 50,000,000 = 70,000,000`을 수식으로 보여준다.
- 각 입력값의 source fact와 evidence를 표시한다.
4. `Defense Rebuttal Board`
- 명의신탁, 충분 담보, 상계 항변을 표시한다.
- Stage 2 claim description에 포함해야 하는 항변인지 표시한다.
5. `Blocking Warnings`
- cap 계산 불완전
- preserved claim bundle collapse
- valuation fact 누락
- released encumbrance fact 누락
- finalization not allowed but rendered risk
#### 검증 warning 예시
```text
ACTIO_VALUE_COMP_CAP_REQUIRED:
사해행위 당시 존재한 근저당권이 사후 말소되었습니다. 가액배상 한도 계산 없이는 청구취지 금액을 확정할 수 없습니다.
PRESERVED_CLAIM_BUNDLE_COLLAPSED:
동일 채권자·채무자 사이의 두 개 대여금이 존재합니다. 하나의 대여금만 피보전채권으로 선택하지 마십시오.
DEFENSE_CRITICAL_FACTS_PRESENT:
명의신탁·충분담보·상계 항변 fact가 존재합니다. Stage 2 청구원인에 최소 반박 구조를 포함하십시오.
```
## 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`을 생성한다. C-004 개선의 핵심은 `사해행위취소 claim 식별`을 `source_fact_ids 선택`이 아니라 `actio_balance_sheet 기반 claim_fact_roles 구성`으로 바꾸는 것이다.
### 4.1 Stage 2.1 Task_A: `claim_identification_view.json` 생성 개선
#### 현재 역할
Task_A는 `Fact_Ledger_base.json`과 `BO.json`을 이용해 claim identification view를 만든다.
#### 이번 사건에서의 실패 지점
Task_A는 F-007, F-008, F-015, F-032, F-039가 같은 C-004 legal effect chain에 속한다는 view를 제공하지 못했다. 특히 다음 구조가 빠졌다.
1. `actio_balance_sheet`
2. `preserved_claim_bundle`
3. `asset_value_matrix`
4. `encumbrance_timeline`
5. `value_compensation_cap`
6. `defense_rebuttal_matrix`
7. mandatory claim role template
#### 개선 목표
`claim_identification_view.json.case_context`에 다음을 추가한다.
```json
{
"case_context": {
"actio_contexts": [
{
"actio_balance_sheet_id": "ABS-SILLIM-01",
"claim_candidate_id": "C-004",
"detected_case_subtype": "encumbered_real_estate_transfer_with_released_mortgage_after_act",
"canonical_fact_ids": ["F-007", "F-008", "F-015", "F-032", "F-039"],
"defense_fact_ids": ["F-001", "F-009", "F-035"],
"value_compensation_cap_candidate": 70000000,
"mandatory_claim_role_template": {
"preserved_claim_bundle": ["F-007", "F-008"],
"fraudulent_act": ["F-015"],
"asset_value_at_close": ["F-032"],
"released_encumbrance_after_act": ["F-039"],
"defense_rebuttal_matrix": ["F-001", "F-009", "F-035"]
}
}
]
}
}
```
각 item에는 다음 구조를 추가한다.
```json
{
"fact_id": "F-039",
"claim_role_candidates": [
"released_encumbrance_after_act",
"remedy_mode_decision",
"value_compensation_cap_deduction"
],
"must_include_if_claim_type": ["사해행위취소 청구"],
"linked_actio_balance_sheet_ids": ["ABS-SILLIM-01"],
"validation_if_omitted": "RELEASED_ENCUMBRANCE_FACT_MISSING"
}
```
#### 프롬프트 개선 문구
```text
- 사해행위취소 관련 view에는 actio_balance_sheet를 root context로 포함한다.
- item별 semantic projection과 별도로, claim 후보별 mandatory role template을 제공한다.
- `must_not_drop_in_claim_types` 또는 `must_include_if_claim_type`이 있는 fact는 source_fact_ids 선택에서 누락될 때 validation warning을 발생시켜야 한다.
- asset_cluster가 다르더라도 같은 preserved_claim_bundle 또는 actio_balance_sheet에 연결된 fact는 claim-local context 후보로 묶는다.
```
#### 검증 게이트
1. C-004 후보가 있는데 `actio_contexts`가 없으면 error를 표시한다.
2. `value_compensation_cap_candidate`가 있는데 F-032 또는 F-039가 mandatory role에 없으면 error를 표시한다.
3. preserved claim 후보가 2개 이상인데 bundle이 없으면 `PRESERVED_CLAIM_BUNDLE_MISSING`을 표시한다.
### 4.2 Stage 2.1 Task_B: `claims_identified.json` 생성 개선
#### 현재 역할
Task_B는 본안 청구권을 식별하고 `claims_identified.json`을 생성한다.
#### 이번 사건에서의 실패 지점
Task_B는 C-004의 `source_fact_ids`를 `F-008`, `F-015`로만 설정하였다. 이는 사해행위취소 claim에서 다음 역할을 모두 누락한 것이다.
1. F-007: 사후 말소된 원고 근저당권의 피담보채권
2. F-032: 가액배상 한도 및 충분 담보 항변 반박 valuation
3. F-039: 사후 말소 담보권의 실제 변제액
4. F-001/F-009/F-035: 항변 반박 facts
#### 개선 목표
Task_B는 C-004를 다음처럼 출력해야 한다.
```json
{
"claim_id": "C-004",
"claim_title": "신림동 상가 사해행위취소 및 가액배상청구",
"claim_statement": "원고 강용원은 피고 오민한을 상대로 오국한과 오민한 사이의 신림동 상가 매매계약을 70,000,000원의 한도에서 취소하고 가액배상을 구할 수 있다.",
"plaintiffs": ["강용원"],
"defendants": ["오민한"],
"claim_fact_roles": {
"preserved_claim_bundle": ["F-007", "F-008"],
"fraudulent_act": ["F-015"],
"asset_value_at_act": ["F-032"],
"asset_value_at_close": ["F-032"],
"encumbrances_existing_at_act": ["F-007", "F-015"],
"released_encumbrance_after_act": ["F-039"],
"value_compensation_cap": ["F-032", "F-039", "F-015"],
"title_trust_defense_rebuttal": ["F-001", "F-035"],
"collateral_insufficiency_rebuttal": ["F-008", "F-032", "F-035"],
"setoff_defense_rebuttal": ["F-001", "F-009", "F-035"]
},
"source_fact_ids": ["F-007", "F-008", "F-015", "F-032", "F-039", "F-001", "F-009", "F-035"],
"actio_balance_sheet_id": "ABS-SILLIM-01",
"relief_constraints": {
"remedy_mode": "value_compensation",
"max_cancel_amount": 70000000,
"forbid_amount_above": 70000000
},
"review_flags": []
}
```
#### anti-pattern validation
Task_B에서 다음 validation을 실행한다.
```json
{
"anti_pattern_validations": [
{
"code": "PRESERVED_CLAIM_BUNDLE_COLLAPSED",
"condition": "동일 채권자·채무자 사이 복수 대여금이 있는데 C-004 source_fact_ids가 하나의 대여금만 포함",
"severity": "error"
},
{
"code": "VALUATION_FACT_MISSING_FOR_VALUE_COMP",
"condition": "가액배상형 사해행위취소 claim인데 asset_value_at_close role이 비어 있음",
"severity": "error"
},
{
"code": "RELEASED_ENCUMBRANCE_FACT_MISSING",
"condition": "사후 말소 담보권이 가액배상형 선택 근거인데 released_encumbrance_after_act role이 비어 있음",
"severity": "error"
},
{
"code": "DEFENSE_CRITICAL_FACTS_MISSING",
"condition": "defense_hints가 있는데 claim_fact_roles에 defense rebuttal fact가 없음",
"severity": "warning"
}
]
}
```
#### 프롬프트 개선 문구
```text
- 사해행위취소 청구는 `사해행위 fact + 피보전채권 fact`만으로 식별하지 않는다.
- 가액배상형이면 valuation fact, 사후 말소 부담 fact, 존속 부담 fact를 mandatory role로 포함한다.
- 같은 채권자와 채무자 사이의 복수 채권이 모두 preserved claim candidate이면 `preserved_claim_bundle`로 묶고, 하나만 선택하지 않는다.
- 피고의 항변이 claim amount 또는 claim existence에 영향을 주면 defense rebuttal role을 함께 출력한다.
- `source_fact_ids`는 claim_fact_roles 전체를 flatten한 값이어야 한다.
```
### 4.3 Stage 2.1 Task_C: `claims_identified_case_type.json` 생성 개선
#### 현재 역할
Task_C는 Task_B에서 식별한 청구권에 사건 종류를 부여한다.
#### 이번 사건에서의 문제
C-004는 단순 `사해행위취소 청구`로만 분류되었다. 그러나 C-004의 실체적 subtype은 다음과 같다.
```text
담보권 있는 부동산 소유권이전 사해행위
사해행위 이후 원고 근저당권 말소
원물반환 대신 가액배상
```
이 subtype이 없으면 Stage 2.3이 적절한 module을 선택하지 못하고, 근저당권설정 사해행위 module과 일반 가액배상 module이 혼재된다.
#### 개선 목표
`claims_identified_case_type.json`에는 다음 field를 추가한다.
```json
{
"claim_id": "C-004",
"claim_type": "사해행위취소 청구",
"case_subtype": "encumbered_real_estate_transfer_value_compensation_after_released_mortgage",
"substantive_modules_required": [
"부담부_부동산소유권이전_사해행위_가액배상_모듈",
"사해행위취소_피보전채권번들_검증_모듈",
"사해행위취소_항변통합_모듈"
],
"remedy_mode": "value_compensation",
"calculation_required": true,
"finalization_gate_required": true,
"expected_relief_amount": {
"amount": 70000000,
"source": "value_compensation_cap_id: VCC-SILLIM-01"
}
}
```
#### 검증 게이트
1. 사해행위취소 claim에 `case_subtype`이 없으면 warning을 표시한다.
2. `remedy_mode=value_compensation`인데 `calculation_required`가 false이면 error를 표시한다.
3. `released_encumbrance_after_act` role이 있는데 `부담부_부동산소유권이전_사해행위_가액배상_모듈`이 required module에 없으면 error를 표시한다.
## 5. Stage 2.2 개선 방안: Task_D `preD_assembly` 및 reduce
Stage 2.2는 claim별 `C-XXX_claim_information.json`을 생성한다. C-004의 오류는 이 단계에서 F-008과 F-015만 조립한 데서 결정적으로 커졌다.
### 5.1 `preD_assembly` 개선
#### 현재 역할
`preD_assembly`는 `claims_identified.json`, `claims_identified_case_type.json`, `claim_identification_view.json`, `Fact_Ledger_base.json`을 조합하여 claim별 information 파일을 만든다.
#### 개선 목표 1: mandatory role fact 조립
`C-004_claim_information.json`에는 다음 구조를 포함해야 한다.
```json
{
"claim_id": "C-004",
"claim_fact_roles": {
"preserved_claim_bundle": ["F-007", "F-008"],
"fraudulent_act": ["F-015"],
"asset_value_at_act": ["F-032"],
"asset_value_at_close": ["F-032"],
"released_encumbrance_after_act": ["F-039"],
"value_compensation_cap": ["F-032", "F-039", "F-015"],
"defense_rebuttal_matrix": ["F-001", "F-009", "F-035"]
},
"mandatory_role_fact_ids": ["F-007", "F-008", "F-015", "F-032", "F-039"],
"defense_context_fact_ids": ["F-001", "F-009", "F-035"]
}
```
#### 개선 목표 2: actio structures 조립
다음 structure들을 claim information에 포함한다.
```json
{
"actio_structures": {
"actio_balance_sheet": {
"sheet_id": "ABS-SILLIM-01"
},
"preserved_claim_bundle": {
"bundle_id": "PCB-OKH-KYW-01"
},
"asset_value_matrix": {
"matrix_id": "AVM-SILLIM-POCHUN-01"
},
"registry_row_role_map": {
"source_evidence_index": "E-014"
},
"encumbrance_timeline": {
"timeline_id": "ET-SILLIM-01"
},
"remedy_mode_decision": {
"decision_id": "RMD-SILLIM-01"
},
"value_compensation_cap": {
"cap_id": "VCC-SILLIM-01",
"selected_relief_amount": 70000000,
"rendering_allowed": true
},
"defense_rebuttal_matrix": {
"matrix_id": "DRM-SILLIM-01"
}
}
}
```
#### 개선 목표 3: claim-local evidence expansion
가액배상형 사해행위취소 claim에서는 `source_fact_ids` 외에 다음 evidence를 claim-local context로 확장해야 한다.
```json
{
"claim_local_evidence_expansion": {
"core_evidence_indexes": ["E-001", "E-014", "E-023"],
"defense_evidence_indexes": ["E-002", "E-007", "E-008"],
"expansion_reason": {
"E-001": "가액배상 한도 및 담보부족 항변 반박",
"E-014": "사해행위 등기, 부담, 사후 말소",
"E-023": "피보전채권 bundle",
"E-002": "명의신탁 및 상계 항변",
"E-007": "피고 예상 항변",
"E-008": "취소 요구 및 선순위 실제 채무액/포천 담보가치 단서"
}
}
}
```
#### 개선 목표 4: pre-description validation
`C-004_claim_information.json`에는 다음 validation을 포함한다.
```json
{
"pre_description_validations": [
{
"code": "PRESERVED_CLAIM_BUNDLE_PRESENT",
"status": "pass",
"required_fact_ids": ["F-007", "F-008"]
},
{
"code": "VALUE_COMPENSATION_CAP_READY",
"status": "pass",
"selected_relief_amount": 70000000
},
{
"code": "DEFENSE_CRITICAL_FACTS_PRESENT",
"status": "pass",
"defense_fact_ids": ["F-001", "F-009", "F-035"]
}
]
}
```
#### 프롬프트 또는 코드 개선 문구
```text
- 사해행위취소 claim information은 source_fact_ids만 조립하지 않는다.
- actio_balance_sheet에 연결된 mandatory role fact와 defense context fact를 모두 포함한다.
- 가액배상형이면 asset_value_matrix, encumbrance_timeline, remedy_mode_decision, value_compensation_cap을 claim information에 포함한다.
- pre_description_validations에 error가 있으면 Stage 2.3은 확정 금액 청구취지를 생성할 수 없다.
```
### 5.2 Stage 2.2 reduce 개선
#### 개선 목표
reduce 단계에서 다음 aggregate 파일을 생성한다.
1. `actio_balance_sheet_index.json`
2. `value_compensation_cap_index.json`
3. `actio_finalization_gate_summary.json`
4. `defense_rebuttal_matrix_index.json`
예시는 다음과 같다.
```json
{
"value_compensation_cap_index": [
{
"claim_id": "C-004",
"cap_id": "VCC-SILLIM-01",
"selected_relief_amount": 70000000,
"rendering_allowed": true,
"blocking_errors": []
}
]
}
```
```json
{
"actio_finalization_gate_summary": [
{
"claim_id": "C-004",
"numeric_finalization_allowed": true,
"relief_summary_rendering_allowed": true,
"manual_review_required": false,
"basis": "value_compensation_cap VCC-SILLIM-01 calculated"
}
]
}
```
#### 검증 게이트
1. `claims_identified_case_type.case_subtype`이 가액배상형인데 cap index가 없으면 error를 표시한다.
2. `numeric_finalization_allowed=false`가 하나라도 있으면 reduce summary에 blocking error로 남긴다.
3. Stage 2.3은 이 summary를 반드시 load해야 한다.
## 6. Stage 2.3 개선 방안: Task_E claim description pipeline
Stage 2.3은 `load_claim_info`, `generate_module_block`, `interpret_claim_metadata`, `generate_description`, `save_description`, `assemble_claim_description_md`를 실행한다. C-004 개선의 핵심은 전용 가액배상 모듈과 finalization gate를 drafting layer에 강제하는 것이다.
### 6.1 `load_claim_info` 개선
#### 개선 목표
`load_claim_info`는 C-004에 대해 다음 파일과 구조를 함께 읽어야 한다.
1. `C-004_claim_information.json`
2. `actio_balance_sheet_index.json`
3. `value_compensation_cap_index.json`
4. `actio_finalization_gate_summary.json`
5. `defense_rebuttal_matrix_index.json`
6. `Files_to_be_Used/청구취지작성규칙_사해행위취소청구.md`
7. 신규 module 파일
출력에는 다음 field를 포함한다.
```json
{
"loaded_claim_context": {
"claim_id": "C-004",
"case_subtype": "encumbered_real_estate_transfer_value_compensation_after_released_mortgage",
"actio_balance_sheet_id": "ABS-SILLIM-01",
"value_compensation_cap_id": "VCC-SILLIM-01",
"expected_relief_amount": 70000000,
"required_modules": [
"부담부_부동산소유권이전_사해행위_가액배상_모듈",
"사해행위취소_피보전채권번들_검증_모듈",
"사해행위취소_항변통합_모듈"
],
"finalization_gate": {
"numeric_finalization_allowed": true,
"relief_summary_rendering_allowed": true
}
}
}
```
#### 검증 게이트
1. `case_subtype`이 가액배상형인데 `value_compensation_cap_id`가 load되지 않으면 error를 표시한다.
2. finalization gate가 load되지 않으면 청구취지 금액 생성을 금지한다.
### 6.2 `generate_module_block` 개선
#### 신규 module 1: `부담부_부동산소유권이전_사해행위_가액배상_모듈.md`
목적은 부담 있는 부동산이 사해행위로 이전되고, 사해행위 이후 담보권 일부가 말소된 경우 원상회복 방법과 가액배상 한도를 계산하는 것이다.
입력:
```json
{
"fraudulent_act": {
"asset": "신림동 상가",
"act_date": "2023-03-17",
"act_type": "매매"
},
"asset_value_at_close": 250000000,
"released_encumbrance_after_act": {
"holder": "강용원",
"actual_debt_paid": 130000000,
"release_date": "2024-10-17"
},
"remaining_senior_encumbrance": {
"holder": "나일오",
"deducted_amount": 50000000
},
"preserved_claim_bundle": "PCB-OKH-KYW-01"
}
```
출력:
```json
{
"module_name": "부담부_부동산소유권이전_사해행위_가액배상_모듈",
"remedy_mode_conclusion": {
"selected_mode": "value_compensation",
"reason": "사해행위 당시 존재한 원고 근저당권이 사후 수익자 변제로 말소됨"
},
"value_compensation_cap": {
"asset_value_at_close": 250000000,
"deduct_released_plaintiff_mortgage_actual_debt": 130000000,
"deduct_remaining_senior_encumbrance": 50000000,
"beneficiary_gain_or_common_collateral_value": 70000000,
"selected_final_cap": 70000000
},
"relief_constraint": {
"cancel_amount": 70000000,
"payment_amount": 70000000,
"forbid_amount_above": 70000000
}
}
```
#### 신규 module 2: `사해행위취소_피보전채권번들_검증_모듈.md`
목적은 복수 피보전채권 후보를 하나의 bundle로 유지하고, 담보부족 항변 반박 계산을 수행하는 것이다.
출력:
```json
{
"preserved_claim_bundle_conclusion": {
"claims_included": ["F-007", "F-008"],
"do_not_collapse_to_single_fact": true
},
"collateral_insufficiency_rebuttal": {
"target_claim_fact_id": "F-008",
"claim_amount_at_act": 110000000,
"collateral_value_at_act": 30000000,
"unsecured_or_excess_amount": 80000000
}
}
```
#### 신규 module 3: `사해행위취소_항변통합_모듈.md`
목적은 claim description 단계에서 반드시 반영해야 할 방어형 쟁점을 정리하는 것이다.
출력:
```json
{
"stage2_defense_rebuttal_paragraphs_required": [
{
"defense": "명의신탁 항변",
"include": true,
"summary": "명의신탁 관계가 있었다고 하더라도 신탁자의 처분행위는 일반채권자에 대해 사해행위가 될 수 있음"
},
{
"defense": "충분한 담보 항변",
"include": true,
"summary": "포천시 임야 담보가치는 3,000만 원에 불과하여 2022. 5. 18.자 채무의 사해행위 당시 원리금 1억 1,000만 원을 충분히 담보하지 못함"
},
{
"defense": "상계 항변",
"include": true,
"summary": "수익자의 채무자에 대한 반대채권으로 가액배상채무를 상계할 수 없음"
}
]
}
```
#### 프롬프트 개선 문구
```text
- `case_subtype=encumbered_real_estate_transfer_value_compensation_after_released_mortgage`이면 부담부 부동산 소유권이전 사해행위 가액배상 모듈을 반드시 선택한다.
- 근저당권설정 자체가 사해행위인 module을 primary module로 쓰지 않는다.
- module output의 `relief_constraint`는 generate_description의 금액과 remedy mode를 구속한다.
- defense rebuttal module이 요구하는 paragraph는 cause_summary에 최소 구조로 반영한다.
```
### 6.3 `interpret_claim_metadata` 개선
#### 개선 목표
`interpret_claim_metadata`는 module block을 해석해 다음 operative conclusion을 만든다.
```json
{
"operative_conclusions": {
"claim_id": "C-004",
"relief": {
"cancel_amount": 70000000,
"payment_amount": 70000000,
"interest_start": "판결 확정일 다음날",
"interest_rate": "연 5%"
},
"fraudulent_act": {
"parties": ["오국한", "오민한"],
"asset": "별지 목록 제3항 기재 부동산",
"act_date": "2023-03-17",
"act_type": "매매"
},
"value_compensation_calculation": {
"asset_value_at_close": 250000000,
"deduct_released_mortgage": 130000000,
"deduct_senior_encumbrance": 50000000,
"final_cap": 70000000
},
"cause_mandatory_points": [
"two_loan_preserved_claim_bundle",
"fraudulent_transfer",
"value_compensation_reason",
"value_compensation_cap_calculation",
"title_trust_rebuttal",
"sufficient_collateral_rebuttal",
"setoff_rebuttal"
],
"forbidden_outputs": [
"100000000 as final relief amount",
"single preserved claim fact only",
"omit F-039 released encumbrance"
]
}
}
```
#### 검증 게이트
1. `cancel_amount`가 70,000,000원이 아니고 cap이 70,000,000원으로 산정되어 있으면 error를 표시한다.
2. `value_compensation_calculation.final_cap`이 null이면 relief amount를 확정하지 않는다.
3. mandatory points 중 항변 반박 3개가 모두 빠지면 warning을 표시한다.
### 6.4 `generate_description` 개선
#### 청구취지 생성 규칙
C-004의 청구취지는 module output의 `relief_constraint`를 그대로 따라야 한다.
```text
1. 피고 오민한과 소외 오국한 사이에 별지 목록 제3항 기재 부동산에 관하여
2023. 3. 17. 체결된 매매계약을 70,000,000원의 한도 내에서 취소한다.
2. 피고 오민한은 원고 강용원에게 70,000,000원 및 이에 대하여
이 판결 확정일 다음날부터 다 갚는 날까지
연 5%의 비율로 계산한 돈을 지급하라.
```
#### 청구원인 생성 순서
청구원인은 다음 순서를 따라야 한다.
1. 당사자 및 피보전채권 bundle
- 2022. 4. 18.자 대여금과 신림동 상가 2순위 근저당권
- 2022. 5. 18.자 대여금과 포천시 임야 근저당권
2. 사해행위 및 사해의사
- 오국한의 채무초과
- 신림동 상가 유일 재산성
- 2023. 3. 17. 오민한에게 매도
3. 원상회복 방법
- 2024. 10. 17. 오민한의 1억 3,000만 원 변제
- 원고 근저당권 말소
- 원물반환 대신 가액배상
4. 가액배상 범위
- 2억 5,000만 원
- 1억 3,000만 원 공제
- 5,000만 원 공제
- 7,000만 원 한도
5. 예상 항변 반박
- 명의신탁 항변
- 충분 담보 항변
- 상계 항변
#### 프롬프트 개선 문구
```text
- 사해행위취소 청구취지의 취소 한도와 지급액은 `value_compensation_cap.selected_relief_amount`를 사용한다.
- `forbid_amount_above`가 있으면 그 금액을 초과하는 청구취지를 생성하지 않는다.
- `preserved_claim_bundle`에 복수 claim이 있으면 청구원인에서 둘 다 서술한다.
- `stage2_defense_rebuttal_paragraphs_required`가 true인 항변은 cause_summary에 최소 반박 구조를 포함한다.
- finalization gate가 false이면 금액을 확정하지 말고 review_required 상태로 저장한다.
```
### 6.5 `save_description` 개선
#### 개선 목표
저장 전 validation을 blocking rule로 적용한다.
```json
{
"save_description_validations": [
{
"code": "RELIEF_AMOUNT_MATCHES_VALUE_COMP_CAP",
"status": "pass",
"expected": 70000000,
"actual": 70000000
},
{
"code": "NUMERIC_FINALIZATION_ALLOWED",
"status": "pass"
},
{
"code": "PRESERVED_CLAIM_BUNDLE_NOT_COLLAPSED",
"status": "pass"
},
{
"code": "DEFENSE_CRITICAL_FACTS_INCLUDED",
"status": "pass"
}
]
}
```
#### 저장 금지 조건
```text
- C-004 relief_summary에 100,000,000원이 취소 한도 또는 지급액으로 들어가면 저장 금지
- value_compensation_cap.selected_relief_amount가 null이면 저장 금지
- numeric_finalization_allowed=false인데 relief_summary에 확정 금액이 있으면 저장 금지
- F-007 또는 F-039가 claim information에 없는데 가액배상형으로 저장하려 하면 저장 금지
- F-032가 없는데 가액배상액을 확정하려 하면 저장 금지
```
### 6.6 `assemble_claim_description_md` 개선
#### 개선 목표
`claim_description.md`는 C-004에 대해 다음 정보를 함께 표시해야 한다.
1. `C-004 사해행위취소 및 가액배상`
2. `Actio Balance Sheet`
3. `Value Compensation Calculation`
4. `Defense Rebuttal Summary`
5. `Finalization Gate Status`
예시:
```markdown
## C-004 신림동 상가 사해행위취소 및 가액배상
### 청구취지
...
### 가액배상 계산
250,000,000 - 130,000,000 - 50,000,000 = 70,000,000
### 저장 전 검증
- RELIEF_AMOUNT_MATCHES_VALUE_COMP_CAP: pass
- PRESERVED_CLAIM_BUNDLE_NOT_COLLAPSED: pass
- DEFENSE_CRITICAL_FACTS_INCLUDED: pass
```
## 7. `Files_to_be_Used` 및 Default_Agent 규칙 파일 개선
사용자 지시에 따라 `Files_to_be_Used` 폴더의 파일들을 Default_Agent 폴더의 파일로 간주한다. 따라서 다음 신규 규칙 파일과 기존 규칙 파일 개선이 필요하다.
### 7.1 신규 module 파일
1. `부담부_부동산소유권이전_사해행위_가액배상_모듈.md`
- 사해행위 당시 부담 있는 부동산이 이전되고, 사후 담보권이 말소된 경우 원상회복 방법과 가액배상 한도를 계산한다.
2. `사해행위취소_피보전채권번들_검증_모듈.md`
- 복수 피보전채권, 이자, 변제기, 담보 목적물, 사해행위 당시 원리금, 담보 부족 반박 계산을 수행한다.
3. `사해행위취소_항변통합_모듈.md`
- 명의신탁, 충분담보, 상계, 선의 등 청구원인에 통합해야 할 핵심 항변을 식별하고 최소 반박 문단을 생성한다.
4. `사해행위취소_가액배상_최종화게이트_모듈.md`
- numeric finalization, relief rendering, manual review 상태를 판단하고 저장 전 blocking rule을 제공한다.
### 7.2 기존 `청구취지작성규칙_사해행위취소청구.md` 개선
추가해야 할 내용:
```text
- 가액배상형 청구취지의 금액은 반드시 value_compensation_cap.selected_relief_amount에서 가져온다.
- value_compensation_cap이 없거나 numeric_finalization_allowed=false이면 확정 금액을 쓰지 않는다.
- 피보전채권액이 공동담보가액보다 크거나 작다는 결론은 세 한도 비교 결과를 확인한 후에만 쓴다.
- 사후 말소된 담보권의 실제 변제액이 있으면 채권최고액보다 실제 변제액을 우선한다.
- 단, 실제 변제액의 출처가 낮으면 manual review flag를 남긴다.
```
### 7.3 기존 `actio_pauliana_calc.txt` 개선
추가해야 할 내용:
```text
- 부동산 소유권이전 사해행위와 근저당권설정 사해행위를 먼저 분리한다.
- `Target_Act == ownership_transfer_of_encumbered_real_estate`인 경우:
1. asset_value_at_close_or_proxy를 추출한다.
2. fraudulent_act 당시 존재했다가 사후 말소된 담보권의 actual debt paid를 추출한다.
3. 존속 선순위 담보권의 actual debt 또는 registered max amount를 추출한다.
4. value_compensation_cap = asset_value_at_close - released_encumbrance_actual_debt - remaining_senior_encumbrance로 계산한다.
5. preserved_claim과 beneficiary gain/common collateral value 중 작은 금액을 final cap으로 선택한다.
- `numeric_finalization_allowed=false`이면 downstream rendering을 금지하는 machine-readable flag를 출력한다.
```
### 7.4 기존 `actio_pauliana_mortgage.txt` 개선
추가해야 할 내용:
```text
- 이 module은 근저당권설정 자체가 사해행위인 사건을 primary 대상으로 한다.
- 소유권이전 매매계약이 사해행위이고 근저당권은 사후 말소 부담인 경우, 이 module을 primary로 선택하지 않는다.
- 해당 경우에는 부담부 부동산소유권이전 사해행위 가액배상 module로 route한다.
```
## 8. 검증 규칙 및 회귀 테스트 설계
### 8.1 C-004 필수 validation
| 코드 | 조건 | 기대 동작 |
| --- | --- | --- |
| `PRESERVED_CLAIM_BUNDLE_COLLAPSED` | F-007/F-008 중 하나만 C-004 source에 포함 | error |
| `VALUATION_FACT_MISSING_FOR_VALUE_COMP` | 가액배상형인데 F-032 또는 asset_value_matrix 없음 | error |
| `RELEASED_ENCUMBRANCE_FACT_MISSING` | 사후 말소 담보권이 있는데 F-039 누락 | error |
| `ACTIO_VALUE_COMP_CAP_MISSING` | 가액배상형인데 value_compensation_cap 없음 | error |
| `RELIEF_AMOUNT_EXCEEDS_CAP` | 청구취지 금액이 7,000만 원 cap 초과 | error |
| `NUMERIC_FINALIZATION_NOT_ALLOWED_BUT_RENDERED` | numeric finalization false인데 확정 금액 렌더링 | error |
| `DEFENSE_CRITICAL_FACTS_MISSING` | 명의신탁·충분담보·상계 항변 fact 누락 | warning |
| `MORTGAGE_MODULE_MISROUTED` | 소유권이전 사해행위인데 근저당권설정 사해행위 module이 primary 선택 | error |
### 8.2 단위 테스트
#### 테스트 1: C-004 value compensation cap
입력:
```json
{
"asset_value_at_close": 250000000,
"released_plaintiff_mortgage_actual_debt": 130000000,
"remaining_senior_encumbrance": 50000000
}
```
기대:
```json
{
"beneficiary_gain_or_common_collateral_value": 70000000,
"selected_relief_amount": 70000000
}
```
#### 테스트 2: preserved claim bundle 유지
입력:
```json
{
"claims": [
{"fact_id": "F-007", "date": "2022-04-18", "collateral": "신림동 상가"},
{"fact_id": "F-008", "date": "2022-05-18", "collateral": "포천시 임야"}
]
}
```
기대:
```json
{
"preserved_claim_bundle_required": true,
"do_not_select_only_one_fact": true
}
```
#### 테스트 3: 충분 담보 항변 반박 계산
입력:
```json
{
"loan_date": "2022-05-18",
"principal": 100000000,
"interest_rate_monthly": 1,
"act_date": "2023-03-17",
"collateral_value_at_act": 30000000
}
```
기대:
```json
{
"claim_amount_at_act": 110000000,
"collateral_value_at_act": 30000000,
"unsecured_or_excess_amount": 80000000
}
```
#### 테스트 4: finalization gate
입력:
```json
{
"numeric_finalization_allowed": false,
"relief_summary_candidate": "피고는 원고에게 100,000,000원을 지급하라"
}
```
기대:
```json
{
"save_allowed": false,
"error": "NUMERIC_FINALIZATION_NOT_ALLOWED_BUT_RENDERED"
}
```
#### 테스트 5: module routing
입력:
```json
{
"fraudulent_act_type": "소유권이전 매매",
"released_encumbrance_after_act": true,
"mortgage_setting_is_fraudulent_act": false
}
```
기대:
```json
{
"primary_module": "부담부_부동산소유권이전_사해행위_가액배상_모듈",
"forbid_primary_module": "actio_pauliana_mortgage"
}
```
### 8.3 회귀 테스트
다음 사건에서는 C-004 전용 개선이 과잉 적용되지 않아야 한다.
1. 사해행위 당시 담보권이 없고 원물반환이 가능한 일반 부동산 이전 사건
- 가액배상 cap module을 기본 선택하지 않는다.
2. 근저당권설정 자체가 사해행위인 사건
- 부담부 소유권이전 module이 아니라 근저당권설정 사해행위 module을 선택한다.
3. 사후 말소된 담보권이 있으나 실제 변제액이 불명인 사건
- 확정 금액 렌더링을 막고 manual review를 요구한다.
4. 복수 피보전채권이 있으나 서로 다른 채무자에 대한 채권인 사건
- 하나의 preserved_claim_bundle로 묶지 않는다.
5. 피고 항변이 단순 부인에 그치고 청구원인 성립·범위에 직접 영향이 없는 사건
- Stage 2 cause_summary에 장문의 항변 반박을 과잉 삽입하지 않는다.
## 9. 구현 우선순위
### 9.1 P0: 반드시 먼저 구현
1. Stage 1 Task_B1의 E-023 dual-loan parser
2. Stage 1 Task_B1의 E-001 valuation matrix 보존
3. Stage 1 Task_B1의 E-014 registry row role map
4. Stage 1 Task_C의 `actio_balance_sheet` 생성
5. Stage 2.1 Task_B의 `claim_fact_roles` 및 mandatory fact validation
6. Stage 2.2의 C-004 actio sibling expansion
7. Stage 2.3의 `RELIEF_AMOUNT_EXCEEDS_CAP` 및 `NUMERIC_FINALIZATION_NOT_ALLOWED_BUT_RENDERED` 저장 차단
P0가 구현되지 않으면 C-004는 계속 1억 원 또는 불확정 금액으로 잘못 렌더링될 위험이 높다.
### 9.2 P1: 다음 구현
1. `부담부_부동산소유권이전_사해행위_가액배상_모듈.md`
2. `사해행위취소_피보전채권번들_검증_모듈.md`
3. `사해행위취소_항변통합_모듈.md`
4. defense rebuttal matrix
5. Stage 2 cause_summary 항변 반박 통합
P1이 구현되면 인간 변호사와 같은 7,000만 원 계산뿐 아니라 명의신탁·충분담보·상계 항변 대응까지 재현할 수 있다.
### 9.3 P2: 검토 가능성과 운영 안정성 강화
1. `stage1.html`의 Actio Balance Sheet Board
2. `claim_description.md`의 계산 및 validation summary
3. `actio_finalization_gate_summary.json`
4. 회귀 테스트 자동화
5. Default_Agent 규칙 파일 정리 및 module routing table 추가
## 10. 최종 결론
`discrepancy_report_3.md`에서 드러난 C-004 불일치는 에이전트가 사해행위취소라는 청구권을 몰라서 발생한 문제가 아니다. 에이전트는 청구권 종류, 피고, 사해행위 목적물, 가액배상형 선택까지는 포착하였다. 그러나 인간 변호사가 수행하는 핵심 작업, 즉 부담부 부동산 사해행위에서 `얼마까지 취소하고 얼마를 배상받을 수 있는지`를 계산하는 경제상태표를 만들지 못했다.
따라서 개선의 핵심은 다음 네 가지이다.
1. Stage 1에서 사해행위취소 사건마다 `actio_balance_sheet`를 생성한다.
2. Stage 2에서 `source_fact_ids` 중심 조립을 `claim_fact_roles`, `preserved_claim_bundle`, `value_compensation_cap` 중심 조립으로 바꾼다.
3. Stage 2.3에서 전용 실체법 module과 finalization gate를 통해 청구취지 금액을 강제한다.
4. 명의신탁, 충분담보, 상계처럼 청구원인 성립·범위에 직접 영향을 주는 항변은 Stage 2 claim description에 통합한다.
이 구조가 구현되면 C-004는 `F-008 1억 원 + F-015 매매`라는 좁은 조합에서 벗어나, `F-007/F-008/F-015/F-032/F-039`를 연결한 사해행위취소 경제상태표에 따라 인간 변호사와 같은 `7,000만 원 한도 취소 및 가액배상` 구조로 안정적으로 수렴할 수 있다.