Skip to content

Commit 0c32f54

Browse files
Testing changes involve populating CSV claims data which will be trimmed out before it is populated onto associated claims tables, as that is how current filtering works, and then the data is re seeded to test against the pruning logic.
Removal of datetime processing to uncouple the logic from how phase 1 was doing it, renaming things for better conventions
1 parent 055eaac commit 0c32f54

10 files changed

Lines changed: 199 additions & 55 deletions

File tree

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1-
CREATE INDEX ON idr.claim_professional_ss(clm_idr_ld_dt, clm_uniq_id) WHERE clm_ltst_clm_ind = 'N';
1+
CREATE INDEX ON idr.claim_professional_ss(clm_ltst_clm_ind) WHERE clm_ltst_clm_ind = 'N';
22

3-
CREATE INDEX ON idr.claim_institutional_ss(clm_idr_ld_dt, clm_uniq_id) WHERE clm_ltst_clm_ind = 'N';
3+
CREATE INDEX ON idr.claim_institutional_ss(clm_ltst_clm_ind) WHERE clm_ltst_clm_ind = 'N';
4+
5+
CREATE INDEX ON idr.claim_professional_nch(clm_ltst_clm_ind) WHERE clm_ltst_clm_ind = 'N';
6+
7+
CREATE INDEX ON idr.claim_institutional_nch(clm_ltst_clm_ind) WHERE clm_ltst_clm_ind = 'N';

apps/bfd-pipeline-idr/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99
BENEFICIARY_TABLE = "idr.beneficiary"
1010
CLAIM_RX_TABLE = "idr.claim_rx"
1111
CLAIM_PROFESSIONAL_NCH_TABLE = "idr.claim_professional_nch"
12+
CLAIM_PROFESSIONAL_ITEM_NCH_TABLE = "idr.claim_item_professional_nch"
1213
CLAIM_PROFESSIONAL_SS_TABLE = "idr.claim_professional_ss"
1314
CLAIM_PROFESSIONAL_ITEM_SS_TABLE = "idr.claim_item_professional_ss"
1415
CLAIM_INSTITUTIONAL_NCH_TABLE = "idr.claim_institutional_nch"
16+
CLAIM_INSTITUTIONAL_ITEM_NCH_TABLE = "idr.claim_item_institutional_nch"
1517
CLAIM_INSTITUTIONAL_SS_TABLE = "idr.claim_institutional_ss"
1618
CLAIM_INSTITUTIONAL_ITEM_SS_TABLE = "idr.claim_item_institutional_ss"
1719

apps/bfd-pipeline-idr/model/base_model.py

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -872,22 +872,11 @@ def stale_phase_1_claims_query(
872872
)
873873

874874

875-
def non_latest_non_part_d_claims_query(
876-
claim_table: str,
877-
cutoff_date: datetime,
878-
) -> tuple[str, tuple[datetime]]:
879-
return (
880-
f"""
881-
WITH claims AS (
882-
SELECT clm.clm_uniq_id
883-
FROM {claim_table} clm
884-
WHERE clm.clm_ltst_clm_ind = 'N'
885-
AND clm.clm_idr_ld_dt < %s
886-
ORDER BY clm.clm_idr_ld_dt, clm.clm_uniq_id
887-
)
888-
SELECT clm.clm_uniq_id
889-
FROM claims clm
890-
LIMIT {PHASE_1_PRUNE_BATCH_LIMIT}
891-
""",
892-
(cutoff_date,),
893-
)
875+
def stale_non_part_d_claims_query(claim_table: str) -> str:
876+
return f"""
877+
SELECT clm.clm_uniq_id
878+
FROM {claim_table} clm
879+
WHERE clm.clm_ltst_clm_ind = 'N'
880+
ORDER BY clm.clm_uniq_id
881+
LIMIT {PHASE_1_PRUNE_BATCH_LIMIT}
882+
"""

apps/bfd-pipeline-idr/pipeline_stages.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
prune_bene_lis_cmbnd,
4242
prune_bene_ma_part_d,
4343
prune_bene_ma_part_d_rx,
44-
prune_non_latest_non_part_d_ss_claims,
4544
prune_phase_1_ss_claims,
45+
prune_stale_non_part_d_claims,
4646
)
4747
from settings import enable_prior_auth_ingestion
4848

@@ -176,11 +176,12 @@ def _stage5_prune_obsolete_rows(self) -> Stage[bool]:
176176
self.load_mode,
177177
self.start_time,
178178
)
179+
180+
for model in self._filter_tables(CLAIM_TABLES):
179181
yield functools.partial(
180-
prune_non_latest_non_part_d_ss_claims,
182+
prune_stale_non_part_d_claims,
181183
model,
182184
self.load_mode,
183-
self.start_time,
184185
)
185186

186187
def _filter_tables(self, tables: list[type[IdrBaseModel]]) -> list[type[IdrBaseModel]]:

apps/bfd-pipeline-idr/pipeline_utils.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,13 @@
99

1010
from batch_worker import LoadingBatchWorkerClient
1111
from constants import (
12+
CLAIM_INSTITUTIONAL_ITEM_NCH_TABLE,
1213
CLAIM_INSTITUTIONAL_ITEM_SS_TABLE,
14+
CLAIM_INSTITUTIONAL_NCH_TABLE,
1315
CLAIM_INSTITUTIONAL_SS_TABLE,
16+
CLAIM_PROFESSIONAL_ITEM_NCH_TABLE,
1417
CLAIM_PROFESSIONAL_ITEM_SS_TABLE,
18+
CLAIM_PROFESSIONAL_NCH_TABLE,
1519
CLAIM_PROFESSIONAL_SS_TABLE,
1620
DEFAULT_MAX_DATE,
1721
DEFAULT_PARTITION,
@@ -23,7 +27,7 @@
2327
from model.base_model import (
2428
LoadMode,
2529
T,
26-
non_latest_non_part_d_claims_query,
30+
stale_non_part_d_claims_query,
2731
stale_phase_1_claims_query,
2832
)
2933
from model.idr_beneficiary_low_income_subsidy_cmbnd import IdrBeneficiaryLowIncomeSubsidyCmbnd
@@ -41,6 +45,15 @@
4145
}
4246

4347

48+
# Keep this mapping explicit so stale non-Part-D pruning remains independent of Phase 1 SS pruning.
49+
_NON_PART_D_CLAIM_ITEM_TABLES = {
50+
CLAIM_INSTITUTIONAL_NCH_TABLE: CLAIM_INSTITUTIONAL_ITEM_NCH_TABLE,
51+
CLAIM_INSTITUTIONAL_SS_TABLE: CLAIM_INSTITUTIONAL_ITEM_SS_TABLE,
52+
CLAIM_PROFESSIONAL_NCH_TABLE: CLAIM_PROFESSIONAL_ITEM_NCH_TABLE,
53+
CLAIM_PROFESSIONAL_SS_TABLE: CLAIM_PROFESSIONAL_ITEM_SS_TABLE,
54+
}
55+
56+
4457
def get_progress(
4558
load_mode: LoadMode,
4659
source: Source,
@@ -169,20 +182,18 @@ def prune_phase_1_ss_claims(
169182
return True
170183

171184

172-
def prune_non_latest_non_part_d_ss_claims(
185+
def prune_stale_non_part_d_claims(
173186
cls: type[T],
174187
load_mode: LoadMode,
175-
job_start: datetime,
176188
) -> bool:
177189
claim_table = cls.table()
178-
item_table = _SHARED_SYSTEM_CLAIM_ITEM_TABLES.get(claim_table)
190+
item_table = _NON_PART_D_CLAIM_ITEM_TABLES.get(claim_table)
179191
if item_table is None:
180192
return True
181193

182-
prune_cutoff_date = job_start - timedelta(days=PHASE_1_CUTOFF)
183-
logger.info("pruning non-latest non-Part-D ss claims older than {}", prune_cutoff_date)
194+
logger.info("pruning stale non-Part-D claims")
184195

185-
prune_query, params = non_latest_non_part_d_claims_query(claim_table, prune_cutoff_date)
196+
prune_query = stale_non_part_d_claims_query(claim_table)
186197

187198
total_row_counts = {
188199
item_table: 0,
@@ -195,8 +206,7 @@ def prune_non_latest_non_part_d_ss_claims(
195206
with conn.transaction():
196207
for target_table in [item_table, claim_table]:
197208
res = conn.execute(
198-
f"""DELETE FROM {target_table} WHERE clm_uniq_id IN ({prune_query})""", # type: ignore
199-
params,
209+
f"""DELETE FROM {target_table} WHERE clm_uniq_id IN ({prune_query})""" # type: ignore
200210
)
201211

202212
total_row_counts[target_table] += res.rowcount

apps/bfd-pipeline-idr/test_pipeline.py

Lines changed: 152 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,69 @@ def _do_test_pipeline(conn: Connection[DictRow], load_type: LoadType) -> None:
9393
rows = cur.fetchmany(1)
9494
assert rows[0]["mbi_num"] == "1OX4Y88RV68"
9595

96-
# Seed a parent claim so the prune job has a row to delete.
97-
# CSV covers item pruning because non-latest parents do not load.
96+
# Seed stale non-Part-D parent claims so the prune job has rows to delete.
97+
# CSVs cover item pruning because stale non-Part-D parents do not load.
9898
if load_type == LoadType.INCREMENTAL:
99+
claim_table = sql.Identifier("idr", "claim_institutional_nch")
100+
cur = conn.execute(
101+
"select * from idr.claim_institutional_nch where clm_uniq_id = 113370100080"
102+
)
103+
assert cur.rowcount == 1
104+
row = cur.fetchone()
105+
assert row is not None
106+
107+
stale_institutional_nch_parent_claim = dict(row)
108+
stale_institutional_nch_parent_claim["clm_uniq_id"] = 999999434801
109+
stale_institutional_nch_parent_claim["clm_ltst_clm_ind"] = "N"
110+
stale_institutional_nch_parent_claim["clm_type_cd"] = 40
111+
112+
columns = sql.SQL(", ").join(
113+
sql.Identifier(k) for k in stale_institutional_nch_parent_claim
114+
)
115+
values = sql.SQL(", ").join(stale_institutional_nch_parent_claim.values())
116+
117+
conn.execute(
118+
t"""
119+
INSERT INTO {claim_table:i}
120+
(
121+
{columns:q}
122+
)
123+
VALUES
124+
(
125+
{values:q}
126+
)
127+
"""
128+
)
129+
130+
claim_table = sql.Identifier("idr", "claim_professional_nch")
131+
cur = conn.execute(
132+
"select * from idr.claim_professional_nch where clm_uniq_id = 119855147698"
133+
)
134+
assert cur.rowcount == 1
135+
row = cur.fetchone()
136+
assert row is not None
137+
138+
stale_professional_nch_parent_claim = dict(row)
139+
stale_professional_nch_parent_claim["clm_uniq_id"] = 999999434802
140+
stale_professional_nch_parent_claim["clm_ltst_clm_ind"] = "N"
141+
stale_professional_nch_parent_claim["clm_type_cd"] = 81
142+
143+
columns = sql.SQL(", ").join(sql.Identifier(k) for k in stale_professional_nch_parent_claim)
144+
values = sql.SQL(", ").join(stale_professional_nch_parent_claim.values())
145+
146+
conn.execute(
147+
t"""
148+
INSERT INTO {claim_table:i}
149+
(
150+
{columns:q}
151+
)
152+
VALUES
153+
(
154+
{values:q}
155+
)
156+
"""
157+
)
158+
99159
claim_table = sql.Identifier("idr", "claim_institutional_ss")
100160
cur = conn.execute(
101161
"select * from idr.claim_institutional_ss where clm_uniq_id = 123359318723"
@@ -104,26 +164,51 @@ def _do_test_pipeline(conn: Connection[DictRow], load_type: LoadType) -> None:
104164
row = cur.fetchone()
105165
assert row is not None
106166

107-
non_latest_parent_claim = dict(row)
108-
non_latest_parent_claim["clm_uniq_id"] = 999999434800
109-
non_latest_parent_claim["clm_ltst_clm_ind"] = "N"
110-
non_latest_parent_claim["clm_type_cd"] = 2081
111-
# Make the seeded claim old enough to be picked up by the prune job.
112-
non_latest_parent_claim["clm_idr_ld_dt"] = datetime(2019, 6, 13, tzinfo=UTC).date()
167+
stale_institutional_ss_parent_claim = dict(row)
168+
stale_institutional_ss_parent_claim["clm_uniq_id"] = 999999434800
169+
stale_institutional_ss_parent_claim["clm_ltst_clm_ind"] = "N"
170+
stale_institutional_ss_parent_claim["clm_type_cd"] = 2081
171+
172+
columns = sql.SQL(", ").join(sql.Identifier(k) for k in stale_institutional_ss_parent_claim)
173+
values = sql.SQL(", ").join(stale_institutional_ss_parent_claim.values())
174+
175+
conn.execute(
176+
t"""
177+
INSERT INTO {claim_table:i}
178+
(
179+
{columns:q}
180+
)
181+
VALUES
182+
(
183+
{values:q}
184+
)
185+
"""
186+
)
187+
188+
claim_table = sql.Identifier("idr", "claim_professional_ss")
189+
cur = conn.execute(
190+
"select * from idr.claim_professional_ss where clm_uniq_id = 4991490559710"
191+
)
192+
assert cur.rowcount == 1
193+
row = cur.fetchone()
194+
assert row is not None
113195

114-
if "bfd_row_id" in non_latest_parent_claim:
115-
non_latest_parent_claim["bfd_row_id"] = 999999434800
196+
stale_professional_ss_parent_claim = dict(row)
197+
stale_professional_ss_parent_claim["clm_uniq_id"] = 999999434803
198+
stale_professional_ss_parent_claim["clm_ltst_clm_ind"] = "N"
199+
stale_professional_ss_parent_claim["clm_type_cd"] = 2800
116200

117-
if "clm_dt_sgntr_sk" in non_latest_parent_claim:
118-
non_latest_parent_claim["clm_dt_sgntr_sk"] = 999999434800
201+
columns = sql.SQL(", ").join(sql.Identifier(k) for k in stale_professional_ss_parent_claim)
202+
values = sql.SQL(", ").join(stale_professional_ss_parent_claim.values())
119203

120204
conn.execute(
121205
t"""
122-
INSERT INTO {claim_table:i} (
123-
{sql.SQL(", ").join(sql.Identifier(k) for k in non_latest_parent_claim):q}
206+
INSERT INTO {claim_table:i}
207+
(
208+
{columns:q}
124209
)
125210
VALUES (
126-
{sql.SQL(", ").join(non_latest_parent_claim.values()):q}
211+
{values:q}
127212
)
128213
"""
129214
)
@@ -251,10 +336,19 @@ def _do_test_pipeline(conn: Connection[DictRow], load_type: LoadType) -> None:
251336
rows = cur.fetchmany(1)
252337
assert rows[0]["clm_uniq_id"] == 113370100080
253338

254-
# Non-latest non-Part-D SS parent claims do not remain in the final claim table
339+
# Stale non-Part-D parent claims do not remain in the final claim tables
340+
cur = conn.execute("select * from idr.claim_institutional_nch where clm_uniq_id = 999999434801")
341+
assert cur.rowcount == 0
342+
343+
cur = conn.execute("select * from idr.claim_professional_nch where clm_uniq_id = 999999434802")
344+
assert cur.rowcount == 0
345+
255346
cur = conn.execute("select * from idr.claim_institutional_ss where clm_uniq_id = 999999434800")
256347
assert cur.rowcount == 0
257348

349+
cur = conn.execute("select * from idr.claim_professional_ss where clm_uniq_id = 999999434803")
350+
assert cur.rowcount == 0
351+
258352
cur = conn.execute("select * from idr.claim_professional_nch order by clm_uniq_id")
259353
assert cur.rowcount == 51
260354
rows = cur.fetchmany(1)
@@ -271,28 +365,64 @@ def _do_test_pipeline(conn: Connection[DictRow], load_type: LoadType) -> None:
271365
assert rows[0]["clm_uniq_id"] == 166776396279
272366

273367
cur = conn.execute("select * from idr.claim_item_institutional_nch order by clm_uniq_id")
274-
assert cur.rowcount == 795
368+
if load_type == LoadType.INITIAL:
369+
assert cur.rowcount == 796
370+
elif load_type == LoadType.INCREMENTAL:
371+
assert cur.rowcount == 795
275372
rows = cur.fetchmany(1)
276373
assert rows[0]["clm_uniq_id"] == 113370100080
277374

278-
# Items for non-latest non-Part-D SS claims are pruned on incremental loads
375+
# Items for stale non-Part-D claims are pruned on incremental loads
376+
cur = conn.execute(
377+
"select * from idr.claim_item_institutional_nch where clm_uniq_id = 999999434801"
378+
)
379+
if load_type == LoadType.INITIAL:
380+
assert cur.rowcount == 1
381+
elif load_type == LoadType.INCREMENTAL:
382+
assert cur.rowcount == 0
383+
384+
cur = conn.execute(
385+
"select * from idr.claim_item_professional_nch where clm_uniq_id = 999999434802"
386+
)
387+
if load_type == LoadType.INITIAL:
388+
assert cur.rowcount == 1
389+
elif load_type == LoadType.INCREMENTAL:
390+
assert cur.rowcount == 0
391+
279392
cur = conn.execute(
280393
"select * from idr.claim_item_institutional_ss where clm_uniq_id = 999999434800"
281394
)
282395
if load_type == LoadType.INITIAL:
283396
assert cur.rowcount == 1
284-
else:
397+
elif load_type == LoadType.INCREMENTAL:
398+
assert cur.rowcount == 0
399+
400+
cur = conn.execute(
401+
"select * from idr.claim_item_professional_ss where clm_uniq_id = 999999434803"
402+
)
403+
if load_type == LoadType.INITIAL:
404+
assert cur.rowcount == 1
405+
elif load_type == LoadType.INCREMENTAL:
285406
assert cur.rowcount == 0
286407

287408
cur = conn.execute("select * from idr.claim_item_professional_nch order by clm_uniq_id")
288-
assert cur.rowcount == 442
409+
if load_type == LoadType.INITIAL:
410+
assert cur.rowcount == 443
411+
elif load_type == LoadType.INCREMENTAL:
412+
assert cur.rowcount == 442
289413
rows = cur.fetchmany(1)
290414
assert rows[0]["clm_uniq_id"] == 119855147698
291415

292416
cur = conn.execute("select * from idr.claim_item_professional_ss order by clm_uniq_id")
417+
if load_type == LoadType.INITIAL:
418+
assert cur.rowcount == 2
419+
elif load_type == LoadType.INCREMENTAL:
420+
assert cur.rowcount == 1
421+
422+
cur = conn.execute(
423+
"select * from idr.claim_item_professional_ss where clm_uniq_id = 4991490559710"
424+
)
293425
assert cur.rowcount == 1
294-
rows = cur.fetchmany(1)
295-
assert rows[0]["clm_uniq_id"] == 4991490559710
296426

297427
conn.commit()
298428

apps/bfd-pipeline-idr/test_samples1/SYNTHETIC_CLM.csv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,6 @@ CLM_DT_SGNTR_SK,CLM_UNIQ_ID,CLM_RLT_COND_SGNTR_SK,CLM_TYPE_CD,CLM_SRC_ID,CLM_FRO
146146
261063166925,8244064276500,,2041,21000,2018-11-20,2018-02-11,07890767122076DPC,,1,2025-08-15,2020-03-26,9999-12-31,55419,313081892,1,1,,,,235338.02,,,,1,3,1,10311,Z,2023-09-30 04:22:49.883470,2025-05-13 12:31:54.373295,Y,Y,77523.95,1454.05,157814.07,20.62,,,,,,,,1093792350,1558719914,1720749690,1720749690,1023051596,001509,18.97,1003
147147
910809502733,4991490559710,,2800,21000,2024-06-27,2024-07-27,53497334068645KXT,,1,2025-08-15,2024-10-15,9999-12-31,96561,356275291,57,1,,,,465369.03,,,,8,4,F,11201,~,2024-11-03 06:13:33.783760,,Y,Y,180655.56,743.33,284713.47,5.47,,,,,,,,1093792350,1003488552,1942945159,1730548868,1437702123,001503,6.03,1003
148148
999999434800,0999999434800,472102076196,2081,21000,2019-01-28,2019-02-15,08962240069952RYH,,1,2025-08-15,2019-06-13,9999-12-31,39852,830951103,4,2,,,,939736.35,,,,9,5,5,12302,X,2019-08-20 18:19:44.806287,,Y,N,105073.42,1358.12,834662.93,24.84,,,,,,,,1104867175,1437702123,1972944437,1023051596,1558719914,001510,1.39,1003
149+
999999434801,0999999434801,673069517797,40,20000,2018-08-20,2018-09-17,49278204746841BZW,,1,2025-08-15,2022-10-03,9999-12-31,50315,800678894,RD,0,,,,502053.89,,,,5,6,B,02102,~,2024-09-08 18:51:16.069167,,Y,N,448471.81,924.67,53582.08,14.05,6,1447692959,,,,,24.43,1093792350,1942945159,1023051596,1003488552,1558719914,001502,16.72,7
150+
999999434802,0999999434802,,81,20000,2019-07-26,2019-08-25,07506929803761ZEC,,1,2025-08-15,2025-07-12,9999-12-31,44297,284934751,SV,3,,,,217013.36,,,,1,9,G,04212,E,2025-07-16 23:48:35.088250,,Y,N,152632.12,782.77,64381.24,19.72,,1730548868,1669572467.0,,803052.05,190912.0,22.1,,,,,,,,7
151+
999999434803,0999999434803,,2800,21000,2024-06-27,2024-07-27,53497334068645KXT,,1,2025-08-15,2024-10-15,9999-12-31,96561,356275291,57,1,,,,465369.03,,,,8,4,F,11201,~,2024-11-03 06:13:33.783760,,Y,N,180655.56,743.33,284713.47,5.47,,,,,,,,1093792350,1003488552,1942945159,1730548868,1437702123,001503,6.03,1003

apps/bfd-pipeline-idr/test_samples1/SYNTHETIC_CLM_INSTNL.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,4 @@ GEO_BENE_SK,CLM_DT_SGNTR_SK,CLM_TYPE_CD,CLM_NUM_SK,CLM_FI_ACTN_CD,CLM_ADMSN_TYPE
7474
90844,746386566763,1013,1,1,4,80,1,9,6,3,10,105.69,232.88,,,2419.57,1,0,0.74,15.82,8.59,22.9,19.86,18.73,20.47,,,2025-02-04 15:32:32.066356,,,,W,,,
7575
49683,261063166627,30,1,5,0,39,0,F,15,7,8,108.51,26.37,1867.93,1012.23,1019.41,2,5,0.92,24.13,11.65,9.88,12.52,23.96,20.73,21.68,,2025-08-14 13:34:11.226932,,,,16,,,
7676
39852,999999434800,2081,1,5,4,15,0,K,32,6,0,204.82,116.49,,,3374.91,0,1,0.92,1.11,21.29,6.31,14.73,4.2,12.0,,,,,,,,,,
77+
50315,999999434801,40,1,8,7,26,1,2,2,6,10,44.96,169.36,255.81,1792.19,2136.37,1,5,0.56,12.06,8.16,5.95,20.82,6.11,14.5,2.98,2,2023-06-21 12:30:48.824346,,13.72,,,,,

apps/bfd-pipeline-idr/test_samples1/SYNTHETIC_CLM_LINE.csv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,3 +1035,6 @@ CLM_UNIQ_ID,CLM_NUM_SK,CLM_TYPE_CD,GEO_BENE_SK,CLM_DT_SGNTR_SK,CLM_LINE_CVRD_PD_
10351035
8244064276648,1,30,49683,261063166627,3.84,,520.44,,0.74,2025-02-25,2025-03-15,,,0.13,922.11,3.99,2.04,4.94,1.42,1,2025-02-25,,,,,,,99453,32,US,PC,0631,0.5,2025-08-14 11:57:36.751142,2025-08-14 19:14:23.874445,32,,U6
10361036
4991490559710,1,2800,96561,910809502733,3.84,,520.44,,0.74,2025-02-25,2025-03-15,,,0.13,922.11,3.99,2.04,4.94,1.42,1,2025-02-25,,,,,,,99453,32,US,PC,0631,0.5,2025-08-14 11:57:36.751142,2025-08-14 19:14:23.874445,32,,U6
10371037
0999999434800,1,2081,39852,999999434800,1.58,,939.29,00264180032,0.73,2019-01-28,2019-02-15,682.82,ML,0.94,1390.81,0.23,3.28,8.67,3.94,0,2019-01-28,,,,,,,99453,1P,23,U6,0223,2.25,,,U6,,PC
1038+
0999999434801,1,40,50315,999999434801,1.88,,1246.4,00338004904,2.65,2018-08-20,2018-09-17,265.89,ML,4.14,851.0,3.64,1.14,5.16,3.98,1,2018-08-20,,,,,,,99453,23,U6,,0904,2.62,2024-05-27 18:48:44.414809,,,,
1039+
0999999434802,1,81,44297,999999434802,0.12,,338.52,,2.21,2019-07-26,2019-08-25,,,0.03,526.04,2.11,0.5,3.8,4.08,0,2019-07-26,3.13,Y92311,98,,,,99453,22,U6,28,0760,4.54,2025-07-29 15:05:11.190614,,1P,1730548868,1P
1040+
0999999434803,1,2800,96561,999999434803,3.84,,520.44,,0.74,2025-02-25,2025-03-15,,,0.13,922.11,3.99,2.04,4.94,1.42,1,2025-02-25,,,,,,,99453,32,US,PC,0631,0.5,2025-08-14 11:57:36.751142,2025-08-14 19:14:23.874445,32,,U6

0 commit comments

Comments
 (0)