Skip to content

BE 참고 — 세입세출 예산/결산 (Phase 1)

독자: BE 개발자/AI. 공동주택 회계처리기준 별지 서식 4~7(세입예산·세출예산·세입결산·세출결산)의 데이터 모델·산식·불변식·로드맵. 정본 전사: docs/REFERENCE-APARTMENT-COA-2023-300.md §4.

1. 데이터 모델 (as-built, Phase 1)

  • SSOT: src/composables/budgetStructure.js (순수 데이터+헬퍼).
  • 트리: REVENUE_TREE(서식 4 세입) · EXPENSE_TREE(서식 6 세출). 노드 = { label, name, children? , budget?, prior? }.
    • 세입: Ⅰ.관리수익(2) / Ⅱ.관리외수익(13). 세출: Ⅰ.관리비용{공용관리비[일반관리비 21항목 + 9] · 사용료등(10) · 장기수선충당금(1)} / Ⅱ.관리외비용(16) / Ⅲ.이익잉여금(3). 4단 계층((1)~(21) 일반관리비 세목).
    • 말단 budget/prior = Phase 1 데모값. 실제 값은 Phase 2에서 부과/수납 실적·전년 결산으로 대체.
  • rollup 산식: 부모 = 자식(말단) 합. change = budget − prior. changeRate = prior ? (change/prior)×100 : null(0 나눗셈 회피). buildBudgetRows/budgetSummary.

2. 서식 매핑 / 도메인 연계

  • 서식 4·6 = 예산서(컬럼 예산액·전년도예산액·증감·증감율). 서식 5·7 = 결산서(컬럼 예산액·결산액·증감) — 동일 트리, 비교 컬럼만 교체.
  • 도메인 연계 포인트(Phase 2 자동 집계):
    • 세입 Ⅱ-12 연체료수입useLateFee/E3 연체료발생(0922) 실적.
    • 세입 Ⅰ-1 관리비수익 ← 부과(useAllocations invoicing) 실적.
    • 세출 Ⅰ-3 장기수선충당금(장기수선비) ← 9112/9113 적립·장기수선계획(외부 연동, [[carryover]] D티어).
    • 세출 Ⅲ-1 예비비적립금 ← 9201/9203, 이익잉여금처분(서식 3).
    • 세출 Ⅱ-13 부과차손 ← 수납 대손/조정.

3. 불변식

  • Σ leaf.budget === section.budget === Σ section.budget(전체) === summary.budget(rollup 일관). 데모 세입 530,600,000 / 일반관리비 263,300,000.
  • 트리 항목·순서 = 공식 서식 4·6과 1:1(전사 정본 REFERENCE §4). 항목 추가/삭제는 고시 개정 시에만.

4. 결산(서식 5·7) as-built (Phase 2a, 2026-06-21)

  • 결산액 모델: buildBudgetRows(tree, opts)/budgetSummary(tree, opts)가 말단에 settlement rollup 제공. 기본 = demoSettlement(budget, i)(예산의 88~102%, 결정적·Math.random 미사용). execRate = settlement/budget×100, settlementChange = settlement − budget.
  • actuals 오버라이드: opts.settlementActuals = { 과목명: 결산액 } → 해당 말단 결산액 대체 + 섹션 rollup 반영.
  • 실적 어댑터(A안, 2026-06-21 — 단지 규모 재시드): useBudgetActualssample(월 집계): 관리비수익 = Σ invoicing currentPeriodByComponent(과세+면세원금) / 연체료수입 = Σ lateFeesFor(contract,key,ASOF).total(E3 정합) / 장기수선비 = Σ 장기수선충당금 부과분. settlementActuals = sample × MONTHS_PER_YEAR(12)(연환산) → { revenue:{관리비수익,연체료수입}, expense:{장기수선비} }. 페이지 buildOptsbuildBudgetRows에 주입 → 결산 메인 컬럼("실적" 배지).
  • A안(구 B안 HOUSEHOLD_SCALE 배수 대체): 빌링 데모를 단지 규모(300세대·현실 요율, demoSeed.js)로 재시드 → 부과/연체료/충당 집계가 그 자체로 단지 규모. 가짜 배수 제거. 남는 변환은 시간축(월 모델 → 연 결산 ×12, 정직한 개월수). 검증: 관리비수익 결산 432M(월 36M×12) vs 예산 480M = 집행률 90%. 정본: docs/handoff/backend/demo-seed-factory.md. 빌링 무관 과목은 demoSettlement(세출 GL 직접집계는 후속).

5. 예산 입력·승인 as-built (Phase 2b, 2026-06-21)

  • 저장소: src/composables/useBudget.js(싱글톤, in-memory) — 트리 위 오버레이(캐논 무편집, useForwarding 선례). 연도×시트 키: draft[year][sheet]={과목명:예산액} · status[year][sheet](초안/승인) · approvedAt.
  • 규칙: setAmount(year,sheet,…) 음수 클램프(0). 승인 후 금액 수정 시 자동 초안 복귀(재승인 강제 — 변경 추적). 연도·시트 독립 승인. overridesFor(year,sheet)buildBudgetRows(tree,{budgetOverrides}) 주입(섹션/총계 rollup·결산 집행률 반영). getter는 순수(미생성 연도=기본값).
  • 불변식: 예산액 ≥ 0. 입력 안 한 과목은 데모 기본값 유지. Σ leaf.budget(override∪기본) === summary.budget. 연도 간 격리.
  • 미구현: 영구 저장(세션 한정), 승인 권한·이력, 전년도예산 자동 연동(현재 전년도=tree.prior 고정).

6. 로드맵 (Phase 2c+)

  1. 환산계수 제거 + 전면 자동집계: ✅ A안 완료 — 단지 규모 재시드로 HOUSEHOLD_SCALE 제거, 빌링 연계 3과목 실집계×12 연환산. ✅ 세출 GL 직접집계useBillingJournal.vouchersExpense(대표 6과목, DR 비용/CR 미지급금) → IS 판매/관리 섹션 자동집계 + settlementActuals.expense(연환산) = IS ×12 정합(settlementIsReconciliation.spec). 정본: demo-seed-factory.md. 잔여: 세출 전 과목 매핑 + 운영성과표(서식 2) 정합.
  2. 전년도예산 자동 연동: 전년도 컬럼 = overridesFor(year-1,sheet)(이전 연도 승인예산) ?? tree.prior.
  3. 영구 저장·권한: useBudget in-memory → 서버 저장소 + 승인 권한·이력.
  4. 집합건물 변형: 공동주택 서식 우선(1차). 집합건물 변형 시 프리셋 분기([[billingPresets]] 선례).