feat: 회계 시스템 확장 — 계정과목·전표·세금계산서·카드·바로빌

- 계정과목 확장 및 더존 Smart A 표준 시딩 (전 테넌트)
- 전표 연동 시스템 구현 (JournalSyncService, SyncsExpenseAccounts)
- 세금계산서 매입/매출 필수값 조건 분리 + null 방어
- 카드거래 대시보드 리다이렉트 + 악성채권 집계 수정
- 바로빌 연동 API 엔드포인트 추가
- 복리후생 날짜 필터 + 바로빌 조인 컬럼 수정
- codebridge DB 커넥션 설정 추가
This commit is contained in:
2026-03-10 11:29:39 +09:00
parent 7ff9206f93
commit c46b950fde
24 changed files with 1850 additions and 96 deletions

View File

@@ -15,16 +15,22 @@ class AccountCode extends Model
'code',
'name',
'category',
'sub_category',
'parent_code',
'depth',
'department_type',
'description',
'sort_order',
'is_active',
];
protected $casts = [
'depth' => 'integer',
'sort_order' => 'integer',
'is_active' => 'boolean',
];
// Categories
// Categories (대분류)
public const CATEGORY_ASSET = 'asset';
public const CATEGORY_LIABILITY = 'liability';
public const CATEGORY_CAPITAL = 'capital';
@@ -39,6 +45,36 @@ class AccountCode extends Model
self::CATEGORY_EXPENSE => '비용',
];
// Sub-categories (중분류)
public const SUB_CATEGORIES = [
'current_asset' => '유동자산',
'fixed_asset' => '비유동자산',
'current_liability' => '유동부채',
'long_term_liability' => '비유동부채',
'capital' => '자본',
'sales_revenue' => '매출',
'other_revenue' => '영업외수익',
'cogs' => '매출원가',
'selling_admin' => '판매비와관리비',
'other_expense' => '영업외비용',
];
// Department types (부문)
public const DEPT_COMMON = 'common';
public const DEPT_MANUFACTURING = 'manufacturing';
public const DEPT_ADMIN = 'admin';
public const DEPARTMENT_TYPES = [
self::DEPT_COMMON => '공통',
self::DEPT_MANUFACTURING => '제조',
self::DEPT_ADMIN => '관리',
];
// Depth levels (계층)
public const DEPTH_MAJOR = 1;
public const DEPTH_MIDDLE = 2;
public const DEPTH_MINOR = 3;
/**
* 활성 계정과목만 조회
*/
@@ -46,4 +82,21 @@ public function scopeActive(Builder $query): Builder
{
return $query->where('is_active', true);
}
/**
* 소분류(입력 가능 계정)만 조회
*/
public function scopeSelectable(Builder $query): Builder
{
return $query->where('depth', self::DEPTH_MINOR);
}
/**
* 하위 계정과목 관계
*/
public function children()
{
return $this->hasMany(self::class, 'parent_code', 'code')
->where('tenant_id', $this->tenant_id);
}
}