/*
 * VL_ANOMALY.pgc - vl 모듈 서비스 VL_ANOMALY (one service = one file).
 * 기능: 이상거래 탐지 후 의심거래 적재 (dbio).
 * 기존 인라인 vl_svr.pgc에서 분리; caller의 XA 브랜치에서 실행(EXEC SQL CONNECT 없음).
 * vl_svr가 tpsvrinit에서 이 서비스를 tpadvertise 한다.
 */
#include "VL_ANOMALY.h"

void VL_ANOMALY(TPSVCINFO *p)
{
    UBFH *b = (UBFH *)p->data;
    char bizdate[16];
    long rc = 0, sid = 0, thr = 50000000;
    char sev[8];
    EXEC SQL BEGIN DECLARE SECTION;
    long h_pid, h_amt;
    EXEC SQL END DECLARE SECTION;
    h_pid = getl(b, T_PURCHASE_ID);
    gets_(b, T_BIZDATE, bizdate, sizeof(bizdate));
    EXEC SQL SELECT amount INTO :h_amt FROM purchase WHERE purchase_id = :h_pid;
    if (sqlca.sqlcode < 0 || sqlca.sqlcode == 100) { setl(b, T_RC, 3); OK(b); }
    if (vldb_get_rule("AMT_MAX", &thr, sev) < 0) { thr = 50000000; strcpy(sev, "ERROR"); }
    if (h_amt > thr) {
        rc = 1;
        sid = vldb_insert_suspect(h_pid, "AMT_MAX", sev, "고액 이상거래", bizdate);
        if (sid < 0) FAIL(b);
    }
    setl(b, T_RC, rc);
    setl(b, T_ID1, sid);
    OK(b);
}
