fix(address): numar overflow split, SAT → localitate
In parseaza_adresa_semicolon, text după NR ("5 la non stop", "21 sat
Grozavesti corbii mari") era împins în p_numar și trunchiat brutal la
10 chars ("5 LA NON S", "21 SAT GRO").
Fix: când p_numar > 10 chars, prima componentă rămâne numar; restul se
clasifică:
- "SAT X ..." → p_localitate := "X ..." (satul = localitate, TIER
L1/L2/L3 existent rezolvă id_loc)
- "COM/ORAS/MUN X" → aruncat (deja în p_localitate din GoMag city)
- altceva (landmark ex "LA NON STOP") → concatenat în p_strada
Semnătura parseaza_adresa_semicolon neschimbată. Zero callers afectați.
Teste: landmark → strada, SAT → localitate, numar normal neschimbat.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,9 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_PARTENERI AS
|
||||
-- IN-set foloseste v_ro_cui (canonic) in loc de v_cod_fiscal_curat. Regula business platitor/
|
||||
-- neplatitor pastrata. Bug anterior: input "RO 34963277" cadea pe branch neplatitor, rata partener
|
||||
-- existent "RO34963277" → duplicat FG COFFE #485065210.
|
||||
-- 22.04.2026 - fix numar overflow: prima componenta ramane numar; "SAT X" → p_localitate (satul
|
||||
-- = localitate, TIER L1/L2/L3 existent rezolva id_loc); landmark → strada;
|
||||
-- COM/ORAS/MUN ignorate (deja in p_localitate din GoMag city)
|
||||
|
||||
-- ====================================================================
|
||||
-- CONSTANTS
|
||||
@@ -683,7 +686,32 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
|
||||
END IF;
|
||||
|
||||
-- Truncare de siguranta (limita coloanelor Oracle)
|
||||
p_numar := SUBSTR(p_numar, 1, 10);
|
||||
-- 22.04.2026 - numar overflow fix:
|
||||
-- prima componenta ramane numar
|
||||
-- "SAT X ..." → X ... devine p_localitate (satul = localitate, TIER L1/L2/L3 rezolva)
|
||||
-- "COM X"/"ORAS X"/"MUN X" → ignorat (deja in p_localitate din GoMag)
|
||||
-- altceva (landmark) → strada
|
||||
IF LENGTH(p_numar) > 10 THEN
|
||||
v_pozitie := INSTR(p_numar, ' ');
|
||||
IF v_pozitie > 1 THEN
|
||||
v_rest_parts := TRIM(SUBSTR(p_numar, v_pozitie + 1));
|
||||
p_numar := SUBSTR(p_numar, 1, v_pozitie - 1);
|
||||
IF v_rest_parts IS NOT NULL THEN
|
||||
IF UPPER(v_rest_parts) LIKE 'SAT %' THEN
|
||||
-- Satul = localitate → overwrite p_localitate cu tot ce urmeaza dupa "SAT "
|
||||
p_localitate := UPPER(TRIM(REGEXP_REPLACE(v_rest_parts, '^SAT\s+', '', 1, 1, 'i')));
|
||||
ELSIF UPPER(v_rest_parts) NOT LIKE 'COM %'
|
||||
AND UPPER(v_rest_parts) NOT LIKE 'ORAS %'
|
||||
AND UPPER(v_rest_parts) NOT LIKE 'MUN %' THEN
|
||||
-- Landmark (ex: "LA NON STOP") → strada
|
||||
p_strada := SUBSTR(TRIM(p_strada || ' ' || v_rest_parts), 1, 100);
|
||||
END IF;
|
||||
-- COM/ORAS/MUN aruncat (deja in p_localitate din GoMag)
|
||||
END IF;
|
||||
ELSE
|
||||
p_numar := SUBSTR(p_numar, 1, 10);
|
||||
END IF;
|
||||
END IF;
|
||||
p_bloc := SUBSTR(p_bloc, 1, 30);
|
||||
p_scara := SUBSTR(p_scara, 1, 10);
|
||||
p_apart := SUBSTR(p_apart, 1, 10);
|
||||
|
||||
Reference in New Issue
Block a user