/* @tier medium @module st @transform settlement-online */ /* * st_ol_0007.pgc - 정산 부가세(VAT) 처리 (ST_OL_0007) [tier=medium] * * 수수료(공급가액) 기준 부가세 10% 를 산출한다. 공급가/세액/합계를 * 원단위 반올림으로 분해하여 세금계산서 항목을 구성한다. */ #include #include #include "txcore.h" #include "acq_util.h" #include "st_core.h" EXEC SQL INCLUDE sqlca; static long st_fee_round(long amount, long rate_bp) { /* 요율(만분율, basis point) x 금액 -> 원단위 반올림 (BigDecimal HALF_UP 대응) */ if (amount < 0) return -(((-amount) * rate_bp + 5000) / 10000); return (amount * rate_bp + 5000) / 10000; } TX_SERVICE(ST_OL_0007, ctx) { char merch[16]; long fee_supply = 0, vat, total; tx_log(TX_LOG_INFO, "[ST_OL_0007] 부가세(VAT) 처리 진입"); if (tx_buf_get(ctx->in, "MERCHID", merch, sizeof(merch)) != TX_OK) { tx_return(ctx, TX_EINVAL, ctx->out); return; } tx_buf_getlong(ctx->in, "FEESUPPLY", &fee_supply); if (fee_supply < 0) { tx_buf_reset(ctx->out); tx_buf_sets(ctx->out, "RESPCODE", RESP_INVALID); tx_return(ctx, TX_EINVAL, ctx->out); return; } vat = st_fee_round(fee_supply, 1000); /* 10% = 1000 만분율 */ total = fee_supply + vat; tx_buf_reset(ctx->out); tx_buf_sets(ctx->out, "RESPCODE", RESP_OK); tx_buf_sets(ctx->out, "MERCHID", merch); tx_buf_setlong(ctx->out, "SUPPLY", fee_supply); tx_buf_setlong(ctx->out, "VAT", vat); tx_buf_setlong(ctx->out, "TOTAL", total); tx_log(TX_LOG_INFO, "[ST_OL_0007] VAT 공급가=%ld 세액=%ld 합계=%ld", fee_supply, vat, total); tx_return(ctx, TX_OK, ctx->out); }