diff --git a/TaxBaik.Application.Tests/BusinessDayCalculatorTests.cs b/TaxBaik.Application.Tests/BusinessDayCalculatorTests.cs
index 14ac179..712acee 100644
--- a/TaxBaik.Application.Tests/BusinessDayCalculatorTests.cs
+++ b/TaxBaik.Application.Tests/BusinessDayCalculatorTests.cs
@@ -10,6 +10,7 @@ public class BusinessDayCalculatorTests
[InlineData(2026, 8, 15, 2026, 8, 20)]
[InlineData(2026, 9, 24, 2026, 9, 29)]
[InlineData(2026, 10, 3, 2026, 10, 8)]
+ [InlineData(2027, 2, 6, 2027, 2, 10)]
public void GetEffectiveDueDate_SkipsWeekendHolidayAndSubstituteHoliday(
int dueYear, int dueMonth, int dueDay,
int expectedYear, int expectedMonth, int expectedDay)
diff --git a/TaxBaik.Web/Components/Admin/Pages/Announcements/AnnouncementEdit.razor b/TaxBaik.Web/Components/Admin/Pages/Announcements/AnnouncementEdit.razor
index 319dece..a97cb9b 100644
--- a/TaxBaik.Web/Components/Admin/Pages/Announcements/AnnouncementEdit.razor
+++ b/TaxBaik.Web/Components/Admin/Pages/Announcements/AnnouncementEdit.razor
@@ -3,6 +3,7 @@
@attribute [Authorize]
@using TaxBaik.Application.DTOs
@using TaxBaik.Web.Services
+@using TaxBaik.Web.Components.Admin.Shared
@inject IAnnouncementBrowserClient AnnouncementClient
@inject NavigationManager Navigation
@inject ISnackbar Snackbar
@@ -37,13 +38,10 @@
-
- 일반 (파란색)
- 배너 (주황색) — 중요 이벤트
- 긴급 (빨간색) — 마감 임박
-
+
diff --git a/TaxBaik.Web/Components/Admin/Pages/Clients/ClientDetail.razor b/TaxBaik.Web/Components/Admin/Pages/Clients/ClientDetail.razor
index 7b31648..95c1612 100644
--- a/TaxBaik.Web/Components/Admin/Pages/Clients/ClientDetail.razor
+++ b/TaxBaik.Web/Components/Admin/Pages/Clients/ClientDetail.razor
@@ -2,6 +2,7 @@
@attribute [Authorize]
@using TaxBaik.Web.Services
@using TaxBaik.Web.Services.AdminClients
+@using TaxBaik.Web.Components.Admin.Shared
@inject IClientBrowserClient ClientClient
@inject IConsultingActivityBrowserClient ConsultingClient
@inject NavigationManager Navigation
@@ -103,12 +104,7 @@
-
- @foreach (var t in serviceTypes)
- {
- @t
- }
-
+
consultations = [];
- private static readonly string[] serviceTypes = ["기장대리", "세무조정", "양도세", "증여세", "상속세", "부가세", "종소세", "기타"];
private static readonly string[] results = ["", "상담완료", "추가자료 요청", "견적발송", "계약전환", "보류"];
private bool showAddForm;
diff --git a/TaxBaik.Web/Components/Admin/Pages/Clients/ClientList.razor b/TaxBaik.Web/Components/Admin/Pages/Clients/ClientList.razor
index 6b68762..ea4b39d 100644
--- a/TaxBaik.Web/Components/Admin/Pages/Clients/ClientList.razor
+++ b/TaxBaik.Web/Components/Admin/Pages/Clients/ClientList.razor
@@ -28,11 +28,7 @@
Immediate="false" OnKeyUp="@OnSearchKeyUp" />
-
- 전체
- 활성
- 비활성
-
+
검색
diff --git a/TaxBaik.Web/Components/Admin/Pages/ConsultingActivities.razor b/TaxBaik.Web/Components/Admin/Pages/ConsultingActivities.razor
index bb5cb62..f74dcfd 100644
--- a/TaxBaik.Web/Components/Admin/Pages/ConsultingActivities.razor
+++ b/TaxBaik.Web/Components/Admin/Pages/ConsultingActivities.razor
@@ -1,5 +1,6 @@
@page "/admin/consulting-activities"
@using TaxBaik.Web.Services.AdminClients
+@using TaxBaik.Web.Components.Admin.Shared
@inject IConsultingActivityBrowserClient ActivityClient
@inject IClientBrowserClient ClientClient
@inject ISnackbar Snackbar
@@ -103,14 +104,7 @@
@GetClientDisplayName(client)
}
-
- 방문 상담
- 전화 상담
- 세무조사 대응 미팅
- 카카오톡 상담
- 이메일 자료 접수
- 기타
-
+
diff --git a/TaxBaik.Web/Components/Admin/Shared/BusinessDayCalculator.cs b/TaxBaik.Web/Components/Admin/Shared/BusinessDayCalculator.cs
index 087c9c7..07b508c 100644
--- a/TaxBaik.Web/Components/Admin/Shared/BusinessDayCalculator.cs
+++ b/TaxBaik.Web/Components/Admin/Shared/BusinessDayCalculator.cs
@@ -24,7 +24,18 @@ public static class BusinessDayCalculator
new(new DateOnly(2026, 9, 24), new DateOnly(2026, 9, 26)),
new(new DateOnly(2026, 10, 3), new DateOnly(2026, 10, 5)),
new(new DateOnly(2026, 10, 9), new DateOnly(2026, 10, 9)),
- new(new DateOnly(2026, 12, 25), new DateOnly(2026, 12, 25))
+ new(new DateOnly(2026, 12, 25), new DateOnly(2026, 12, 25)),
+ new(new DateOnly(2027, 1, 1), new DateOnly(2027, 1, 1)),
+ new(new DateOnly(2027, 2, 6), new DateOnly(2027, 2, 9)),
+ new(new DateOnly(2027, 3, 1), new DateOnly(2027, 3, 2)),
+ new(new DateOnly(2027, 5, 5), new DateOnly(2027, 5, 5)),
+ new(new DateOnly(2027, 5, 13), new DateOnly(2027, 5, 13)),
+ new(new DateOnly(2027, 6, 6), new DateOnly(2027, 6, 6)),
+ new(new DateOnly(2027, 8, 15), new DateOnly(2027, 8, 16)),
+ new(new DateOnly(2027, 9, 14), new DateOnly(2027, 9, 16)),
+ new(new DateOnly(2027, 10, 3), new DateOnly(2027, 10, 4)),
+ new(new DateOnly(2027, 10, 9), new DateOnly(2027, 10, 11)),
+ new(new DateOnly(2027, 12, 25), new DateOnly(2027, 12, 26))
};
private static readonly HashSet HolidayDates = BuildHolidayDates();
diff --git a/db/migrations/V030__SeedConsultingAndAnnouncementCommonCodes.sql b/db/migrations/V030__SeedConsultingAndAnnouncementCommonCodes.sql
new file mode 100644
index 0000000..8a8d76a
--- /dev/null
+++ b/db/migrations/V030__SeedConsultingAndAnnouncementCommonCodes.sql
@@ -0,0 +1,16 @@
+-- Additional common codes for admin combo policy normalization.
+INSERT INTO common_codes (code_group, code_value, code_name, sort_order) VALUES
+('CONSULTING_ACTIVITY_TYPE', '방문상담', '방문 상담', 10),
+('CONSULTING_ACTIVITY_TYPE', '전화상담', '전화 상담', 20),
+('CONSULTING_ACTIVITY_TYPE', '세무조사대응미팅', '세무조사 대응 미팅', 30),
+('CONSULTING_ACTIVITY_TYPE', '카카오톡상담', '카카오톡 상담', 40),
+('CONSULTING_ACTIVITY_TYPE', '이메일자료접수', '이메일 자료 접수', 50),
+('CONSULTING_ACTIVITY_TYPE', '기타', '기타', 60),
+
+('ANNOUNCEMENT_DISPLAY_TYPE', 'info', '일반', 10),
+('ANNOUNCEMENT_DISPLAY_TYPE', 'banner', '배너', 20),
+('ANNOUNCEMENT_DISPLAY_TYPE', 'urgent', '긴급', 30)
+ON CONFLICT (code_group, code_value) DO UPDATE
+SET code_name = EXCLUDED.code_name,
+ sort_order = EXCLUDED.sort_order,
+ is_active = TRUE;
diff --git a/docs/COMMON_CODE_POLICY.md b/docs/COMMON_CODE_POLICY.md
index 22619f3..ac992ce 100644
--- a/docs/COMMON_CODE_POLICY.md
+++ b/docs/COMMON_CODE_POLICY.md
@@ -22,6 +22,8 @@
- `INQUIRY_SERVICE_TYPE`
- `INQUIRY_STATUS`
+- `CONSULTING_ACTIVITY_TYPE`
+- `ANNOUNCEMENT_DISPLAY_TYPE`
- `CLIENT_STATUS`
- `CLIENT_SERVICE_TYPE`
- `CLIENT_TAX_TYPE`