From ca9ed44763c5096df77bbc1283f7b6fbef928ea7 Mon Sep 17 00:00:00 2001 From: bn_user Date: Mon, 8 Sep 2025 11:42:07 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20dags/split=5Fsubkonto2.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dags/split_subkonto2.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/dags/split_subkonto2.py b/dags/split_subkonto2.py index f9aa3a9..d5e5503 100644 --- a/dags/split_subkonto2.py +++ b/dags/split_subkonto2.py @@ -236,7 +236,7 @@ def parse_contract_cell(cell_text): return pd.Series({ "subkonto2": cell_text, - "naimenovanie": title, + "naimenovanie": title.lower(), "nomer": number, "date_bedin": date_norm, "date_end": None @@ -246,15 +246,16 @@ def read_dict_subkonto2_db(**kwargs): engine = get_db_engine() df = pd.read_sql(""" select - osv.subkonto2 as subkonto2 + osv.subkonto2 as subkonto2 , dst.naimenovanie as naimenovanie - , coalesce(dst.nomer , osv.nomer) as nomer - , coalesce(dst.date_begin , osv.date_bedin) as date_bedin - , coalesce(dst.date_end, osv.date_end) as date_end + , osv.nomer as nomer + , osv.date_bedin as date_begin + , osv.date_end as date_end from public.oborotno_salbdovaya_vedomostb osv left join public.dict_subkonto_two as dst on dst.subkonto2 = osv.subkonto2 where osv.subkonto2 not in (select dst2.subkonto2 from dict_subkonto_two dst2) + and osv.nomer is null """, engine) return df.to_dict(orient='records') @@ -278,8 +279,25 @@ def merge_dict_and_split_1C(**kwargs): df_dict_subkonto = pd.DataFrame.from_records(dict_subkonto) if dict_subkonto else pd.DataFrame() df_split_subkonto = pd.DataFrame.from_records(split_subkonto) if split_subkonto else pd.DataFrame() - df_subkonto = df_split_subkonto.merge(df_dict_subkonto, how='left', on='subkonto2') - return df_subkonto.to_dict(orient='records') + result_df = df_split_subkonto.merge(df_dict_subkonto, how='left', on='subkonto2', suffixes=('_split', '_dict')) + result_df['naimenovanie'] = result_df['naimenovanie_split'] + + result_df['nomer'] = np.where( + (result_df['nomer_dict'].isna()) | (result_df['nomer_split'] != result_df['nomer_dict']), + result_df['nomer_split'], + result_df['nomer_dict'] + ) + + result_df['date_bedin'] = np.where( + result_df['date_bedin_dict'].isna(), + result_df['date_bedin_split'], + result_df['date_bedin_dict'] + ) + + result_df['date_end'] = result_df['date_end_dict'] + + result_df = result_df[['subkonto2', 'naimenovanie', 'nomer', 'date_bedin', 'date_end']] + return result_df.to_dict(orient='records') with DAG( dag_id='split_subkonto2',