컨텐츠로 건너뛰기

공과금

공과금은 공공 서비스(전기, 수도, 가스 등) 사용에 대한 요금을 의미합니다. 여기서는 공공 서비스의 고지서 데이터를 다룹니다.

공과금은 전기요금(ELECTRIC), 수도요금(WATER), 가스요금(GAS) 세 가지로 구분됩니다.

각 공과금은 고객 정보(납부자번호)를 기준으로 관리되며, 종류, 고객번호, 청구월로 구분됩니다. (종류, 고객번호, 청구월 조합이 Unique Key라는 것을 의미합니다.)

모든 공과금은 다음의 공통 속성을 가집니다.

billingPeriod와 같이 객체 타입인 경우, 별도의 타입 정의를 참고하세요.

interface BillingPeriod {
start: string; // 청구 시작일 (예: '2023-10-01')
end: string; // 청구 종료일 (예: '2023-10-31')
}
interface CommonUtility {
type: 'ELECTRIC' | 'WATER' | 'GAS'; // 공과금 종류
customerNumber: string; // 고객번호
billingMonthId: number; // 청구월 ID
billingPeriod: BillingPeriod; // 청구기간
totalAmount: number; // 이번 달 청구 금액
unpaidAmount: number; // 전월 미납 금액
billingAmount: number; // 총 청구금액 (이번 달 금액 + 전월 미납액)
paidAmount: number; // 납부한 금액
paymentDueDate: Date; // 납부마감일
usage: number; // 사용량 (단위: kWh, m³)
usageFee: number; // 사용요금
vat: number; // 부가가치세
}
  • type: 공과금 종류. ELECTRIC, WATER, GAS 중 하나입니다.
  • customerNumber: 해당 공과금이 속한 고객을 식별하는 번호입니다.
  • billingMonthId: 공과금이 귀속되는 청구월의 고유 ID입니다.
  • billingPeriod: 요금이 부과된 사용 기간입니다.
  • totalAmount: 해당 월에 발생한 순수 사용 요금입니다.
  • unpaidAmount: 이전 청구 기간에서 납부되지 않고 이월된 미납 금액입니다.
  • billingAmount: 총 청구금액. 이번 달 사용 요금과 전월 미납액을 합산한 최종 청구 금액입니다. (산출식: totalAmount + unpaidAmount)
  • paidAmount: 현재 청구 기간에 대해 이미 납부된 금액입니다.
  • paymentDueDate: 요금을 납부해야 하는 마지막 날짜입니다.
  • usage: 해당 기간 동안 사용한 자원의 양입니다. (단위: kWh, m³)
  • usageFee: 사용량에 따라 부과되는 요금입니다.
  • vat: 요금에 부과되는 부가가치세입니다.

공과금은 납부 상태에 따라 다음과 같이 구분할 수 있습니다.

  • 미납: 납부한 요금이 없고, 납부 마감일이 지나지 않은 상태입니다.
  • 납부 완료: 청구금액과 납부한 요금이 일치하는 상태입니다.
  • 연체: 납부 마감일이 지났음에도 청구금액 전액이 납부되지 않은 상태입니다.
  • 부분 납부: 납부한 요금이 0보다 크지만, 청구금액보다는 작은 상태입니다.

아래는 납부 상태를 계산하는 로직의 예시입니다.

function getPaymentState(
billingAmount: number,
paidAmount: number,
paymentDueDate: Date
): '미납' | '납부 완료' | '연체' | '부분 납부' | '알 수 없음' {
if (paidAmount === 0 && new Date() <= paymentDueDate) {
return '미납';
} else if (billingAmount === paidAmount) {
return '납부 완료';
} else if (new Date() > paymentDueDate && paidAmount < billingAmount) {
return '연체';
} else if (paidAmount > 0 && paidAmount < billingAmount) {
return '부분 납부';
}
return '알 수 없음';
}
interface ElectricityUtility extends CommonUtility {
type: 'ELECTRIC';
baseFee: number; // 기본요금
climateFee: number; // 기후환경요금
fuelAdjustment: number; // 연료비 조정액
powerIndustryFund: number; // 전력산업기금
}

전기요금은 공통 항목에 더해 다음의 속성을 가집니다.

  • baseFee: 사용량과 관계없이 부과되는 고정 기본요금입니다.
  • climateFee: 기후 변화 대응 및 환경 개선을 위해 부과되는 요금입니다.
  • fuelAdjustment: 발전에 사용된 연료비 변동을 반영하여 조정되는 금액입니다.
  • powerIndustryFund: 전력 산업 발전을 위해 조성되는 기금입니다.
interface WaterUtility extends CommonUtility {
type: 'WATER';
baseFee: number; // 기본요금
environmentalFee: number; // 환경개선부담금
waterSupplyFee: number; // 상수도요금
sewageFee: number; // 하수도요금
waterUseFee: number; // 물이용부담금
}

수도요금은 공통 항목에 더해 다음의 속성을 가집니다.

  • baseFee: 사용량과 관계없이 부과되는 고정 기본요금입니다.
  • environmentalFee: 수질 오염 방지 및 환경 개선을 위해 부과되는 부담금입니다.
  • waterSupplyFee: 깨끗한 물(상수) 공급에 대한 요금입니다.
  • sewageFee: 사용한 물을 처리(하수)하는 데 드는 비용에 대한 요금입니다.
  • waterUseFee: 수자원 관리 및 개발을 위해 부과되는 부담금입니다.

수도요금의 경우, 부가가치세(vat)는 0으로 처리됩니다.

interface GasUtility extends CommonUtility {
type: 'GAS';
baseFee: number; // 기본요금
}

가스요금은 공통 항목에 더해 다음의 속성을 가집니다.

  • baseFee: 사용량과 관계없이 부과되는 고정 기본요금입니다.