FUNCTION validation (p_acct IN VARCHAR2, p_id IN OUT VARCHAR2, p_error_code OUT VARCHAR2, p_error_desc OUT VARCHAR2) RETURN BOOLEAN IS v_tran_date DATE; v_acct_internal_key NUMBER; v_dbtr_name fm_client.client_name%TYPE; v_client_no rb_acct.client_no%TYPE; v_id_type fm_client.global_id_type%TYPE; v_client_type fm_client.client_type%TYPE; v_country fm_client.country_citizen%TYPE; v_id_cor VARCHAR2 (15); v_id_nid VARCHAR2 (15); v_id VARCHAR2 (12); v_check_national_id VARCHAR2 (250) := NULL; v_check_corporation_id VARCHAR2 (250) := NULL; v_step VARCHAR2 (4); BEGIN v_step := '1'; p_error_code := '000000'; v_tran_date := get_run_date; v_id := p_id; BEGIN SELECT internal_key, a.client_no, b.client_type, b.global_id_type, b.client_name, b.country_citizen INTO v_acct_internal_key, v_client_no, v_client_type, v_id_type, v_dbtr_name, v_country FROM rb_acct a, fm_client b WHERE a.client_no = b.client_no AND acct_no = p_acct; EXCEPTION WHEN OTHERS THEN BEGIN SELECT internal_key, a.client_no, b.client_type, b.global_id_type, b.client_name, b.country_citizen INTO v_acct_internal_key, v_client_no, v_client_type, v_id_type, v_dbtr_name, v_country FROM rb_acct a, fm_client b WHERE a.client_no = b.client_no AND b.client_no = p_acct AND ROWNUM = 1; EXCEPTION WHEN OTHERS THEN p_error_code := '300395'; -- invalid client number; RETURN FALSE; END; END; v_step := '2'; IF v_id IS NULL OR v_id = '' THEN BEGIN IF v_client_type = '1' THEN SELECT NVL (national_id, '0') INTO v_id_nid FROM fm_client_indvl WHERE client_no = v_client_no; ELSE SELECT NVL (corporation_id, '0') INTO v_id_cor FROM fm_client_corporate WHERE client_no = v_client_no; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN v_step := '3'; BEGIN SELECT NVL (global_id, '0') INTO v_id FROM fm_client WHERE client_no = v_client_no; IF v_client_type = '1' THEN v_id_nid := v_id; ELSE v_id_cor := v_id; END IF; EXCEPTION WHEN OTHERS THEN p_error_code := '104045'; RETURN FALSE; END; END; v_step := '4'; IF v_client_type = '1' THEN IF v_id_type = 'FIN' OR (v_id_type = 'PPT' AND v_country <> 'IR') THEN v_step := '5'; SELECT NVL (global_id, '0') INTO v_id FROM fm_client WHERE client_no = v_client_no; v_id := SUBSTR (v_id, 1, 15); ELSE v_step := '6'; v_check_national_id := validate_national_id (v_id_nid); IF v_check_national_id IS NULL OR v_check_national_id <> '829204' THEN v_id := v_id_nid; ELSE p_error_code := '104045'; RETURN FALSE; END IF; END IF; ELSE v_step := '7'; v_check_corporation_id := validate_cor_id (v_id_cor); IF v_check_corporation_id IS NULL OR v_check_corporation_id <> '829205' THEN v_id := v_id_cor; ELSE p_error_code := '104045'; RETURN FALSE; END IF; END IF; ELSE v_step := '8'; --v_id := p_id; IF v_client_type = '1' THEN IF v_id_type = 'FIN' OR (v_id_type = 'PPT' AND v_country <> 'IR') THEN NULL; ELSE v_step := '9'; v_check_national_id := validate_national_id (v_id); IF v_check_national_id = '829204' THEN p_error_code := '104045'; p_error_desc := error_desc (NVL (p_error_code, '000000')); RETURN FALSE; END IF; END IF; ELSE v_step := '10'; v_check_corporation_id := validate_cor_id (v_id); IF NVL (v_check_corporation_id, '~') = '829205' THEN p_error_code := '104045'; p_error_desc := error_desc (NVL (p_error_code, '000000')); RETURN FALSE; END IF; END IF; END IF; BEGIN IF v_client_type = '1' THEN SELECT NVL (national_id, '0') INTO v_id_nid FROM fm_client_indvl WHERE client_no = v_client_no AND national_id = v_id; ELSE SELECT NVL (corporation_id, '0') INTO v_id_cor FROM fm_client_corporate WHERE client_no = v_client_no AND corporation_id = v_id; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN v_step := '3'; /*BEGIN SELECT NVL (global_id, '0') INTO v_id FROM fm_client WHERE client_no = v_client_no; IF v_client_type = '1' THEN v_id_nid := v_id; ELSE v_id_cor := v_id; END IF; EXCEPTION WHEN OTHERS THEN*/ p_error_code := '111221'; RETURN FALSE; --END; END; P_id := v_id; p_error_desc := error_desc (NVL (p_error_code, '000000')); IF NVL (p_error_code, 0) = 0 THEN p_error_code := '000000'; END IF; RETURN TRUE; EXCEPTION WHEN OTHERS THEN BEGIN /*IF p_error_code IN (0, '000000') THEN p_error_code := '000000'; p_error_desc := error_desc (p_error_code); ELS*/ IF p_error_code NOT IN (0, '000000') AND p_error_code IS NOT NULL THEN p_error_desc := error_desc (p_error_code); ELSE p_error_code := SQLCODE; p_error_desc := SQLERRM; END IF; END; ROLLBACK; insert_log ( p_acct, p_id, --v_seq_no_coi, 'CL_OPENBANKING', 'VALIDATION', SQLCODE, 'CL', 'step : [' || v_step || ']' || ' SQLCODE : [' || p_error_code || ']' || ' SQLERRM : [' || p_error_desc || ']'); END validation;