계약 갱신 추적기 사양: 알림과 승인
통지 마감일, 이해관계자, 승인 워크플로와 알림 규칙을 포함한 계약 갱신 추적기 사양. 엔터티 모델, 워크플로, 알림 규칙을 구현할 수 있도록 정리했습니다.

갱신 추적기가 해결해야 할 문제들
계약 갱신 추적기는 같은 문제가 반복되기 때문에 존재합니다: 갱신 날짜를 놓치고, 담당자가 불분명하며, 중요한 정보가 이메일 스레드, 스프레드시트, 공유 드라이브에 흩어집니다. 누군가가 마침내 갱신을 알아차릴 때는 협상하거나 취소하거나 예산을 짤 시간이 없는 경우가 많습니다.
추적기는 기본 질문에 몇 초 안에 답할 수 있어야 합니다:
- 무엇이 갱신되는가(벤더/고객, 계약, 서비스)
- 언제 갱신되는가(통지 마감일, 종료일, 자동 갱신일)
- 누가 조치해야 하는가(비즈니스 담당자, 법무, 재무, 조달)
- 다음에는 무엇이 일어나는가(검토, 승인, 서명, 결제)
- 무엇이 바뀌었는가(메모, 결정, 누가 승인했는지)
목표는 놀라움이나 막판 작업 없이 일관된 갱신을 만드는 것입니다. 이를 위해서는 신뢰할 수 있는 날짜, 명확한 책임자, 실제 상황을 반영하는 상태가 필요합니다. 계약이 "검토 중(Under review)"으로 표시되어 있다면 무엇이 막고 있는지, 누가 다음 행동을 소유하고 있는지 볼 수 있어야 합니다.
범위를 실용적으로 유지하세요: 충분히 일찍 울리는 알림, 적절한 사람들에게 도달하는 승인, 이해관계자가 계획할 수 있도록 하는 가시성, 그리고 깔끔한 이력을 보여주는 감사 메모. 문서 저장은 첨부 파일 정도로 간단하게 처리하거나 서명된 사본이 어디에 있는지 참조만 해도 되지만, 핵심 조건과 마감일은 항상 쉽게 찾을 수 있어야 합니다.
이해관계자와 책임
갱신 추적기는 소유권이 명확할 때만 작동합니다. 모두가 "책임이 있다(responsible)"고 하면 아무도 책임지지 않습니다.
대부분의 팀은 다음과 같은 소수 역할로 수렴합니다:
- 계약 담당자(Contract owner): 갱신을 진행하고 필요사항을 확인하며 조건을 협상하고 날짜를 정확히 유지합니다.
- 요청자(Requester): 서비스를 사용하는 사람 또는 팀; 갱신, 축소, 취소 여부를 확인합니다.
- 재무(Finance): 예산, 결제 조건, 공급업체 설정, 비용 변동을 검토합니다.
- 법무(Legal): 조건을 검토하고 수정(레드라인)하며 위험 항목을 확인합니다; 어떤 템플릿이나 조항 세트를 적용할지 확정합니다.
- 부서장(Department head): 지출이나 범위가 임계값을 넘을 때 최종 비즈니스 승인자입니다.
승인자는 단순히 통지를 받는 사람과 분리하세요. 승인자는 결과(승인, 거부, 변경 요청)를 바꿀 수 있고, 통지받는 이해관계자는 워크플로를 막지 않습니다.
소유권은 **주 담당자(primary owner)**와 백업 담당자(backup owner) 두 필드로 표현하세요. 백업은 휴가, 직무 변경, 긴급 갱신에서 중요합니다. 간단한 규칙: 주 담당자가 정해진 시간 내에 조치하지 않으면 백업에게 알리고 백업이 인계받아 진행할 수 있도록 허용하세요.
벤더 측도 무시하지 마세요. 단일 이메일 대신 역할별로 벤더 연락처를 저장하세요. 다른 사람이 다른 문제를 처리하기 때문입니다. 대부분의 팀은 최소한 영업 연락처(상업 조건), 결제 연락처(송장 및 결제), 지원 연락처(서비스 이슈 및 에스컬레이션)를 필요로 합니다.
예시: 마케팅 팀이 분석 도구 갱신을 요청합니다. 계약 담당자가 사용량과 제안된 티어를 확인하고, 재무는 지출을 승인하고, 법무는 조건을 승인하며, 부서장은 연간 총액이 임계값을 넘는 경우에만 최종 승인합니다. 나머지 사람들은 통지를 받아 갱신이 지연되지 않게 합니다.
엔터티 모델: 실제로 필요한 테이블
갱신 추적기는 장기 보관되는 계약 레코드와 각 갱신 주기를 분리할 때 가장 잘 작동합니다. 이렇게 하면 이력이 깔끔하게 유지되고 알림도 예측 가능해집니다.
핵심 테이블
작게 시작하고 필드를 실용적으로 유지하세요:
- Vendors: 법적 명칭, 등록 정보, 주소, 위험 등급, 활성 여부.
- Contracts: vendor_id, 서비스명, 시작일, 종료일, 갱신 조건(자동갱신, 통지 기간), 계약 금액, 통화, 담당자.
- Contacts: 내부 및 벤더 연락처(유형: vendor/internal), 역할(법무, 재무, 서비스 담당자), 선호 채널(email/SMS/Telegram), is_primary.
- Documents: 파일 메타데이터와 유형(원본, 수정안, 갱신 견적, 메모) 및 간단한 설명.
- RenewalCases: contract_id, 사이클 시작/종료, 목표 결정일, 현재 단계/상태, 이유(갱신, 재협상, 해지).
실무에서는 Contracts가 느리게 변합니다. RenewalCases는 이번 주기에 무슨 일이 있었는지를 캡처합니다: 누가 승인했는지, 어떤 견적이 왔는지, 언제 결정이 났는지 등.
데이터 혼란을 막는 관계 설정
"누구에게 알릴까?"와 "지난번에 무엇을 결정했나?"를 추측 없이 답할 수 있도록 관계를 모델링하세요:
- Vendors 1-to-many Contracts, Contracts 1-to-many RenewalCases
- Contracts many-to-many Contacts(ContractContacts 같은 조인 테이블을 통해 역할 포함)
- RenewalCases 1-to-many Documents(견적과 메모를 사이클에 첨부)
예시: 60일 통지 기간이 있는 SaaS 계약은 하나의 Contract 레코드를 가지되, 매년 새로운 RenewalCase를 만듭니다. 2025년 케이스는 견적, 승인, 결정일을 저장해 2024년을 덮어쓰지 않습니다.
갱신을 이끄는 날짜, 조건, 상태
날짜와 상태가 모호하면 추적기는 작동하지 않습니다. 날짜를 진실의 근원으로 취급하고, 모든 상태가 팀이 다음에 무엇을 해야 하는지 나타내도록 하세요.
우선 작은 필수 날짜 집합으로 시작하세요:
- 시작일(Start date) 및 현재 계약 기간 종료일(Current term end date)
- 통지 마감일(Notice deadline) (종료일에서 통지 기간을 뺀 날짜)
- 해지 마감일(Cancellation deadline) (통지 마감일과 같을 수도, 아닐 수도 있음)
- 다음 자동갱신일(Next auto-renew date) (자동갱신이 활성화된 경우에만)
- 최종 갱신일(Last renewed on)
자동갱신은 단순한 불리언(AutoRenew = true/false)으로 유지하고, 갱신 기간(예: 12개월), 갱신 주기(월별, 연간, 다년간), 갱신일 계산 기준(종료일 기준 또는 송장일 기준) 같은 명확한 조건을 지원하세요.
다음 갱신일을 계산할 때는 계약별로 하나의 규칙을 사용하세요(월별이면 1개월 추가, 연간이면 12개월 추가, 다년이면 N년 추가). 조기 갱신이 발생하면 새 종료일을 어떻게 계산할지 한 번 정해 저장하세요: 이전 종료일에 기간을 더할지, 갱신일에 기간을 더할지. 이 선택을 저장해 추후에 변경되지 않도록 하세요.
상태는 실제 작업 단계를 반영하고 항상 다음 행동의 소유자를 암시해야 합니다. 일반적으로 충분한 단순한 집합은: upcoming(예정됨, 날짜 기반), in review(검토 중), waiting approval(승인 대기), approved(승인됨), renewed(갱신됨), canceled(취소됨).
예외 상황을 명시적으로 처리하세요:
- 종료일 불명: "date missing"으로 표시하고 수정될 때까지 알림을 차단하세요.
- 에버그린 계약: 종료일이 없지만 정기 검토 날짜를 추가하세요.
- 일회성 구매: 갱신 없음, 다만 지출 기록으로 보관하세요.
예시: 12개월 자동갱신 계약에 통지 기간 60일이 있으면 종료일에서 90일 전부터 "upcoming"으로 전환하고, 통지 마감일이 지나도 결정이 없으면 에스컬레이션하세요.
승인: 단계와 라우팅 규칙
승인은 갱신 추적기가 시간을 절약할지 혼란을 초래할지를 결정합니다. 단계를 단순하게 유지하고, 고위험 또는 고가치 갱신이 빠져나가지 않도록 라우팅 규칙은 엄격하게 설정하세요.
일반적인 단계 집합:
- 소유자 검토(Owner review)
- 관리자 승인(Manager approval)
- 재무 승인(Finance approval)
- 법무 승인(Legal approval)
- 보안 또는 조달 승인(Security or Procurement approval, 필요할 때만)
라우팅은 수동이 아니라 규칙 기반이어야 합니다. 계약 금액, 벤더 위험 등급, 계약 유형이 대부분의 경우를 커버합니다. 예: 저위험·소액 갱신은 Manager와 Finance만 필요할 수 있고, 고가치·고위험·데이터 취급 갱신은 Legal과 Security를 추가해야 합니다.
승인이 시작되는 명확한 트리거를 정의하세요. 일반적 트리거는: RenewalCase 생성, 견적 수신, 가격 변경입니다. 가격이나 핵심 조건 변경은 승인 리셋으로 처리하세요. 견적이 승인 진행 중에 변경되면 필요한 단계를 다시 열어 최종 서명이 현재 조건과 일치하도록 하세요.
승인 행동은 명확해야 합니다: 승인(approve), 거부(reject), 변경 요청(request changes). "변경 요청"은 흐름을 일시중지하고 소유자에게 필요한 코멘트와 함께 반환해야 합니다. 거부는 이유와 다음 단계(재협상, 해지, 벤더 교체)를 요구해야 합니다.
예시: $30k SaaS 갱신(고위험 등급)은 Owner -> Manager -> Finance -> Legal -> Security 순으로 라우팅됩니다.
알림 및 에스컬레이션 규칙
알림 시스템은 사람들이 신뢰하는 추적기와 무시하는 추적기를 가르는 차이입니다. 적절한 마일스톤에 적시에 알리고, 일이 완료되면 즉시 중단하세요.
마일스톤을 분리하세요. 대부분의 갱신에는 두 가지 중요한 날짜가 있습니다: 통지 마감일(취소 또는 재협상 가능한 마지막 날)과 갱신일(계약이 갱신되는 날). 대부분 비용이 큰 실수는 통지 마감일을 놓치는 것이므로 알림은 통지 마감일에 먼저 연결하세요.
마일스톤별 간단한 스케줄 예:
- 90일 전
- 60일 전
- 30일 전
- 14일 전
- 7일 전
에스컬레이션은 단순한 시간 경과가 아니라 조치 부재에 의해 트리거되어야 합니다. 조치의 정의 예: 소유자의 확인 응답, 결정 선택(갱신/취소/재협상), 승인 요청 제출.
실용적인 에스컬레이션 체인:
- 알림 후 3 영업일 이내에 조치가 없으면 백업 소유자에게 알림.
- 추가 5 영업일 내에도 조치가 없으면 소유자의 관리자에게 알림.
- 통지 마감일이 7일 이내인데도 결정이 없으면 법무/조달 그룹 메일박스에 알림.
- 고가치 갱신의 경우 30일 전에는 재무에도 알림.
메시지는 소유자의 시간대 근무시간(예: 월금 09:0017:00)에 전송하세요. 소유자의 시간대가 없으면 계약의 비즈니스 유닛 시간대로 대체하세요.
중단 조건은 엄격해야 합니다. RenewalCase가 Approved, Renewed, Canceled, 또는 Replaced로 표시되면 해당 케이스에 대한 모든 향후 알림은 즉시 중단되어야 합니다. 소유자가 통지 마감일 60일 전 "Renegotiate(재협상)"를 선택하면 통지 알림을 일시중지하고 협상 및 승인 후속 작업으로 전환하세요.
알림 내용 규칙 및 템플릿
적절한 사람에게 적절한 메시지를 적시에 보내면 알림은 효력을 발휘합니다. 이메일, 인앱, 채팅 전반에 걸쳐 내용을 일관되게 유지해 누구도 메시지가 무엇을 의미하는지 묻지 않도록 하세요.
단계별 일반 수신자:
- 계약 담당자: 모든 마일스톤에 항상
- 현재 승인자: 조치가 필요할 때만
- 관찰자(법무, 조달, 어카운트 팀): 상태 변경 및 승인 완료 시
- 재무: PO 필요 시 또는 지출이 임계값을 넘을 때
- 에스컬레이션 관리자: 마감일 누락 또는 승인 지연 시에만
필수 메시지 필드
모든 알림은 검색 가능하고 신속히 대응할 수 있도록 동일한 핵심 필드를 포함해야 합니다:
- 계약 이름 및 벤더
- 갱신 예정일(및 남은 일수)
- 현재 상태 및 단계 소유자
- 다음 행동(승인, 견적 검토, PO 확인, 협상)
- 어디서 행동할지(화면 이름 또는 레코드 ID)
결정을 돕는 맥락만 추가하세요: 마지막 갱신 결과, 현재 가격, 견적 첨부 여부.
템플릿
모바일 친화적 요약과 이메일/인앱용 상세 버전 두 가지를 사용하세요.
SHORT (chat/push)
[Renewal due in {days_left} days] {contract_name} - {vendor}
Status: {status}. Next: {next_action}.
Record: {contract_id}
DETAILED (email/in-app)
Subject: Action needed: {contract_name} renewal by {due_date}
Vendor: {vendor}
Due date: {due_date} ({days_left} days)
Current status: {status}
Next action: {next_action}
Owner: {owner_name}
Approver(s): {approver_list}
Price: {current_price} ({currency})
Last renewal: {last_outcome} on {last_renewal_date}
Quote: {quote_available}
Notes: {key_notes}
Record: {contract_id}
보안 규칙: 알림은 힌트 정도로 취급하고, 데이터 덩어리를 던지지 마세요. 채널이 안전하지 않다면(공유 채팅 등) 민감한 필드(계좌 정보, 전체 계약 텍스트, 특수 가격 조건)를 피하고, 수신자에게 앱 내부 레코드를 열어 권한과 감사 로그를 통해 확인하도록 안내하세요.
단계별: 워크플로 구현하기
기초부터 시작하세요: 신뢰할 수 있는 데이터 모델과 명확한 소유권.
1) 먼저 엔터티를 구축하세요
핵심 테이블을 만들고 강하게 연결하세요: Contracts, Vendors, 내부 이해관계자(사용자 또는 팀), RenewalCases. Contracts는 Vendor와 Owner를 참조해야 하고, RenewalCases는 Contract를 참조하며 알림에 사용되는 주요 날짜를 저장해야 합니다.
실용적 규칙: 하나의 Contract는 시간이 지나며 여러 RenewalCases를 가질 수 있지만 동시에 활성인 케이스는 하나뿐이어야 합니다.
2) 상태와 검증 규칙 정의
어떤 상태가 존재하고 각 단계에서 무엇을 채워야 하는지 결정하세요. 엄격하게 유지하세요. 초안 갱신 조건과 관련 문서가 첨부되지 않으면 "Legal review"로 진행하지 마세요. 승인자, 승인일, 최종 조건 날짜가 설정되지 않으면 "Approved"로 표시하지 마세요.
3) 상태 워크플로 생성
다음과 같은 프로세스를 구현하세요:
- 갱신 창에 들어온 계약에서 자동으로 RenewalCase 생성
- 케이스를 단계(Draft, Review, Approved, Sent, Closed)로 이동
- 벤더, 계약 유형, 가치, 위험 등급, 부서에 따라 작업 라우팅
- 모든 상태 변경을 감사 이벤트로 기록
- 갱신이 완료되면 케이스를 닫고 Contract를 업데이트
예시: 계약이 Operations 소유이고 연간 가치가 임계값을 초과하면 재무 승인 전에 법무 검토를 요구하세요.
4) 예약된 알림 및 에스컬레이션 검사 추가
매일 스케줄된 작업을 실행해 통지 마감일이 가까워진 케이스, 조치가 지연된 케이스, 오랫동안 멈춰있는 단계를 찾으세요. 알림 이벤트와 에스컬레이션(예: 백업 소유자 알림 또는 관리자를 관찰자로 추가)을 만드세요.
5) 채널 연결 및 전달 기록 남기기
사람들이 실제로 읽는 채널(이메일, SMS, Telegram)로 알림을 보내세요. 각 전달 시도에 대해 타임스탬프, 채널, 수신자, 결과를 기록해 알림이 전송되었음을 증명하고 누락을 디버그할 수 있게 하세요.
사람들이 매일 사용할 화면과 리포트
사람들이 추적기를 최신으로 유지하려면 일상 화면이 한 가지 질문에 빠르게 답해야 합니다: 내가 다음에 무엇을 해야 하는가? 하나의 거대한 대시보드 대신 실제 습관에 맞는 몇 가지 뷰를 만드세요.
갱신 캘린더(팀 뷰)
캘린더는 모든 계약 세부사항이 아니라 마감일에 집중할 때 가장 효과적입니다. 이번 주와 다음 달에 마감되는 갱신을 상태 태그와 함께 보여주세요. 각 항목은 가장 중요한 날짜(대부분 통지 마감일)를 드러내야 합니다. 5월 1일에 갱신되는 계약이라도 3월 1일 통지 마감일까지는 "안전(safe)" 상태일 수 있습니다. 캘린더는 그 날짜를 강조해야 합니다.
소유자 인박스(내 갱신)
대부분 사용자의 홈 스크린입니다. 통지 마감일 우선으로 정렬하고, 위험 등급으로 보조 정렬하세요. 작업 지향적이어야 합니다: 승인 제출, 법무 검토 요청, 갱신 통지 발송, 벤더 후속 조치 등.
간단한 필드 집합이면 충분합니다:
- 계약명 + 벤더
- 통지 마감일 + 갱신일
- 상태 + 다음 단계
- 위험 등급 + 추정 월별 비용
승인 대기열(내 승인)
승인자는 여러 화면을 클릭하지 않고도 맥락을 얻어야 합니다. 각 행에는 벤더, 계약 금액, 기간 길이, 갱신 유형(자동 vs 수동), 제안된 변경(가격 인상, 범위 변경), 승인 마감일을 포함하세요. 왜 대기열에 올라왔는지 이유도 명확히 표시하세요(예: "연간 지출이 임계값 초과로 재무 승인 필요").
벤더 뷰(한 벤더의 모든 항목)
벤더에서 전화가 올 때 전체 그림을 보려면 계약, 갱신일, 위험 등급, 미해결 작업, 현재 승인자를 한눈에 볼 수 있어야 합니다. 이 뷰는 중복 계약을 방지하고 집중 위험을 파악하는 데 도움이 됩니다.
실제로 읽히는 일일 리포트
보고서는 간단하고 예약 가능하게 유지하세요: 월별 예정 지출, 위험에 처한 갱신(통지 마감일이 X일 이내), 담당자별 지연 작업 등.
권한과 감사 추적 기본
사람들이 추적기를 신뢰하려면 올바른 사람이 올바른 세부 정보를 보고, 모든 중요한 변경이 기록되어야 합니다.
역할 기반 접근(볼 수 있고 할 수 있는 권한)
작게 시작하고 필요할 때만 확장하세요:
- Viewer: 기본 세부사항과 날짜를 읽을 수 있지만 가격이나 첨부 파일은 볼 수 없음.
- Contract Owner: 자신의 계약을 편집하고 문서를 업로드하며 승인 요청을 제출할 수 있음.
- Approver (Legal/Finance/Procurement): 승인 또는 거부, 코멘트 추가, 계약 가치 및 주요 조항 보기 가능.
- Admin: 역할 관리, 라우팅 규칙 변경, 보관 처리 가능.
민감한 필드를 일반 필드와 분리하세요. 일반적으로 제한되는 항목: 계약 금액, 요율표, 은행 정보, 서명된 PDF. 문서를 널리 공유해야 한다면 별도의 편집된(redacted) 버전을 저장하세요.
감사 추적(기록되어야 할 항목)
상태 변경, 승인, 문서 업데이트를 감사 가능한 이벤트로 취급하세요. 최소한 다음을 캡처하세요:
- 변경한 사람(Changed by)(사용자), 변경 시각(Changed at)(타임스탬프)
- 필드 또는 행동(상태, 소유자, 갱신일, 기간, 문서 업로드)
- 이전 값과 새 값
- 코멘트(거부, 종료, 갱신일 변경 시 필수)
- 출처(Source)(UI, 자동화, 가져오기) 가능하면
문서에 대해서는 버전을 보관하고 하나의 파일을 current signed copy로 표시하세요. 덮어쓰지 마세요. 파일명, 버전 번호, 업로드한 사람/시간, "Signed v3" 같은 선택적 라벨을 보관하세요.
삭제보다는 보관을 선호하세요. 보관된 계약은 리포팅과 갱신 이력 조회를 위해 검색 가능해야 합니다.
계약이 진행되기 전에 몇 가지 기본 검사를 강제하세요: 벤더, 소유자, 백업 소유자, 시작/종료일(또는 에버그린 플래그), 갱신 유형(자동 또는 수동), 통지 기간, 갱신 기간.
흔한 실수와 방지 방법
추적기에 대한 신뢰를 빠르게 잃는 방법은 추적하고 있다고 생각한 마감일을 놓치는 것입니다.
흔한 실수는 하나의 "갱신일(renewal date)" 필드만 사용하고 끝났다고 보는 것입니다. 실제 갱신은 통지 기간에 좌우됩니다(예: "60일 전에 통지하지 않으면 1년 자동갱신"). 이 문제를 해결하려면 최소한 다음을 추적하세요: 유효 시작일(effective date), 기간 종료일(term end date), 자동갱신 플래그, 통지 마감일, 그리고 알림을 트리거하는 계산된 다음 행동 날짜.
또 다른 문제는 알림이 도착해도 갈 곳이 없는 경우입니다. 소유자가 부재 중이면 메시지가 흩어지고 아무 일도 일어나지 않습니다. 각 계약에 소유자와 백업 소유자를 요구하고, 둘 없이는 "Active" 상태를 허용하지 마세요.
승인은 실제 임계값을 무시하면 실패합니다. 작은 갱신에는 하나의 워크플로가 통할 수 있지만 고위험·고가치 계약이 나오면 무너집니다. 라우팅 규칙은 가치 밴드, 위험 수준 또는 데이터 민감도, 계약 유형, 비표준 조항, 부서나 코스트 센터 같은 간단한 요소를 포함해야 합니다.
알림은 다음에 무엇을 해야 할지 알려주지 않으면 무시됩니다. 모든 알림에는 한 가지 다음 행동(검토, 승인, 재협상, 취소), 기한, 결과(자동갱신, 가격 인상, 서비스 중단)를 포함하세요.
팀은 또한 결과를 기록하는 것을 잊습니다. 그래서 매 사이클마다 처음부터 시작하게 됩니다. 결과(갱신됨, 종료됨, 재협상됨), 새 조건, 그리고 간단한 "무엇이 바뀌었나" 메모를 반드시 캡처하세요.
빠른 점검과 다음 단계
완료라고 부르기 전에 실제 상황을 모사하는 몇 가지 검사를 수행하세요. 갱신 추적기는 가장자리에 실패하는 경우가 많습니다: 통지 기간, 소유자 누락, 서류상 괜찮아 보이나 실제로는 진행되지 않는 승인.
빠른 점검(3개 테스트 계약 사용)
다음과 같은 서로 다른 조건의 샘플 계약 세 개를 설정하세요:
- 통지 마감일이 있는 자동갱신 계약: 통지 날짜를 추적하는지 확인하기 위해.
- 아무도 승인·서명하지 않으면 아무 일도 일어나지 않는 수동 갱신 계약.
- 중간 검토 날짜가 있는 다년 계약: 장기간 간격이 알림을 방해하지 않는지 확인하기 위해.
각 계약에 대해 먼저 통지 마감일 알림이 발생하는지, 다음으로 갱신/종료일 알림이 발생하는지 확인하세요. 한 계약의 소유자 역할로 아무것도 하지 않아 에스컬레이션이 백업 소유자에게 도달하는지 확인하세요. 이후 승인 경로를 통해 한 계약은 승인 경로로, 다른 계약은 거부 경로로 테스트해 감사 추적이 누가 언제 왜 결정했는지 캡처하는지 확인하세요. 로그가 10초 안에 "무슨 일이 있었나?"를 답하지 못하면, 마감일이 촉박할 때 도움이 되지 않습니다.
다음 단계
기본이 지루하게 느껴질 때만 확장하세요:
- 먼저 최소 기능 버전 구축: 핵심 엔터티, 명확한 상태, 두 번의 알림(예: 첫 통지와 최종 통지).
- 알림이 안정적일 때만 승인 기능 추가.
- 소유권을 강제하세요: 모든 계약에 소유자와 백업 소유자 요구.
- 한 팀을 대상으로 2주 파일럿을 진행한 뒤 알림 타이밍과 에스컬레이션 역할을 조정하세요.
코드 없이 내부 운영 앱으로 이걸 만들고 싶다면 AppMaster (appmaster.io)은 데이터를 모델링하고 승인 워크플로를 구성하며 여러 채널에 알림을 보내는 옵션 중 하나입니다.
이 검사들이 통과하면 갱신 추적기는 단순한 데모가 아닌 실제 계약을 처리할 준비가 된 것입니다.
자주 묻는 질문
첫째로 *통지 마감일(notice deadline)*과 *계약 종료/갱신일(term end/renewal date)*을 별도로 저장하세요. 대부분의 비용이 큰 실수는 종료일 자체가 아니라 통지 창을 놓쳤을 때 발생하므로, 알림은 통지 마감일을 우선으로 작동해야 합니다.
각 계약에 **주 담당자(primary owner)**와 **백업 담당자(backup owner)**를 지정하고, "조치 완료"의 정의(예: 확인 응답, 결정 선택, 승인 요청 제출)를 명확히 하세요. 주 담당자가 설정한 기간 내에 조치하지 않으면 자동으로 백업에게 에스컬레이션하고, 이후에는 관리자에게도 전달되도록 하세요.
장기적으로 유지되는 Contract 레코드와 각 갱신 주기를 나타내는 별도의 RenewalCase를 분리하세요. 이렇게 하면 견적, 승인, 결과 등 과거 이력이 덮어쓰기 없이 보존됩니다.
작고 명확하게 시작하세요. 항상 다음 행동을 암시하는 상태를 사용하세요: upcoming, in review, waiting approval, approved, renewed, canceled. 상태가 누군가에게 다음에 무엇을 해야 하는지 알려주지 못하면 잘못 사용되거나 무시됩니다.
가치 밴드(contract value band), 공급업체 위험 등급(vendor risk tier), 계약 유형(contract type) 같은 몇 가지 입력을 기준으로 라우팅 규칙을 만드세요. 저위험·저가치 갱신에는 가장 간단한 경로를 기본으로 하고, 임계값을 넘는 경우 자동으로 Legal/Security/Procurement를 추가하세요.
승인 프로세스가 시작된 후 견적이나 주요 조건이 변경되면 승인 리셋을 트리거하세요. 기본 정책은 변경된 항목에 해당하는 단계만 다시 열어 최종 승인 상태가 현재 조건과 일치하도록 하는 것입니다(예: 가격 변경이면 Finance 단계 재오픈, 조항 변경이면 Legal 재오픈).
통지 마감일에 연동된 예측 가능한 스케줄(예: 90/60/30/14/7 일)을 사용하세요. 에스컬레이션은 단순히 시간 경과가 아니라 *조치 부재(no action taken)*에 기반해야 합니다. 케이스가 approved, renewed, canceled, 또는 replaced로 표시되면 모든 알림을 즉시 중단하세요.
메시지는 간결하고 일관되게 유지하세요: 계약명, 공급업체, 남은 기간이 포함된 마감일, 현재 상태, 다음 행동, 다음 단계 소유자. 알림은 세부 데이터를 다 풀어놓는 것이 아니라 어디에서 조치해야 하는지 가리키는 역할을 해야 하며, 보안이 불충분한 채널에는 민감한 정보를 포함하지 마세요.
종료일이 없으면 레코드를 date missing으로 표시하고 수정될 때까지 알림을 중단하세요. 잘못된 날짜는 잘못된 신뢰를 만들기 때문에 고쳐야 합니다. Evergreen 계약은 종료일 대신 정기 검토 날짜(periodic review date)를 사용해 여전히 주목을 받도록 하세요.
상태 변경, 승인, 소유자 변경, 날짜 변경, 문서 업로드를 누가/언제/무엇을 변경했는지(이전 값과 새 값 포함)와 함께 기록하세요. 거부나 날짜 변경 시에는 이유(comment)를 필수로 요구하세요. 삭제보다는 보관(archive)을 선호해 과거의 결정을 언제든지 조회할 수 있게 하세요.


