- dbio io(289): fetch/touch/total 시그니처 유지, SQL 바디를 JOIN/집계/커서/ upsert/DELETE 등 구조로 고유화 → 289/289 고유 - common cu(120): 유틸 시그니처 유지, Luhn/CRC/Zeller/BIN레인지/amortization/ netting 등 실 알고리즘으로 고유화 → 120/120 고유 - 심화: 실제 EXEC SQL 없던 프로그램에 SELECT/INSERT/UPDATE/커서+tx 추가 → online+batch 530/530 전부 실제 SQL 보유 - 전 코퍼스 프로그램 939/939 고유, 전체 docker make -j4 = EXIT 0, 958 오브젝트 - 임시 생성기 제거, inventory.json loc 실측 갱신 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
58 lines
1.4 KiB
C
58 lines
1.4 KiB
C
/* @tier easy @module au @transform authorization-util */
|
|
/*
|
|
* au_cu_0001.c - 승인한도 공통 유틸리티 (plain C) [tier=easy]
|
|
*/
|
|
#include "au_cu_0001.h"
|
|
|
|
#include <string.h>
|
|
|
|
/* Zeller 합동식으로 요일 계산: 0=토,1=일,...,6=금 */
|
|
static int au_cu_0001_dow(int y, int m, int d)
|
|
{
|
|
int k, j;
|
|
if (m < 3) { m += 12; y--; }
|
|
k = y % 100;
|
|
j = y / 100;
|
|
return (d + 13 * (m + 1) / 5 + k + k / 4 + j / 4 + 5 * j) % 7;
|
|
}
|
|
|
|
/* 수수료: amount=YYYYMMDD, 주말이면 할증 rate 반환 */
|
|
long au_cu_0001_fee(long amount, int rate_bp)
|
|
{
|
|
int y, m, d, w;
|
|
long base;
|
|
if (amount <= 0 || rate_bp < 0)
|
|
return 0;
|
|
y = (int)(amount / 10000L);
|
|
m = (int)((amount / 100L) % 100L);
|
|
d = (int)(amount % 100L);
|
|
w = au_cu_0001_dow(y, m, d);
|
|
base = rate_bp;
|
|
if (w == 0 || w == 1)
|
|
base += (long)rate_bp / 10;
|
|
return base;
|
|
}
|
|
|
|
/* 내림(floor) 단위 정규화: 음수 방향 보정 */
|
|
long au_cu_0001_round_unit(long amount, long unit)
|
|
{
|
|
long q;
|
|
if (unit <= 0)
|
|
return amount;
|
|
q = amount / unit;
|
|
if (amount % unit != 0 && amount < 0)
|
|
q--;
|
|
return q * unit;
|
|
}
|
|
|
|
/* 분류: YYYYMMDD 의 요일(0~6), 오류 -1 */
|
|
int au_cu_0001_classify(long amount)
|
|
{
|
|
int y, m, d;
|
|
if (amount <= 0)
|
|
return -1;
|
|
y = (int)(amount / 10000L);
|
|
m = (int)((amount / 100L) % 100L);
|
|
d = (int)(amount % 100L);
|
|
return au_cu_0001_dow(y, m, d);
|
|
}
|