|
19 | 19 | DEFAULT_MAX_DATE, |
20 | 20 | DEFAULT_MIN_DATE, |
21 | 21 | EMPTY_PARTITION, |
| 22 | + FISS_CLM_SOURCE, |
22 | 23 | IDR_BENE_HISTORY_TABLE, |
23 | 24 | IDR_CLAIM_ANSI_SIGNATURE_TABLE, |
24 | 25 | IDR_CLAIM_DATE_SIGNATURE_TABLE, |
|
29 | 30 | IDR_PRIOR_AUTH_TABLE, |
30 | 31 | INSTITUTIONAL_NCH_PARTITIONS, |
31 | 32 | INSTITUTIONAL_SS_PARTITIONS, |
| 33 | + MCS_CLM_SOURCE, |
32 | 34 | NON_CLAIM_PARTITION, |
33 | 35 | PART_D_CLAIM_TYPE_CODES, |
34 | 36 | PART_D_PARTITIONS, |
| 37 | + PHASE_1_CUTOFF, |
| 38 | + PHASE_1_SS_MAX, |
| 39 | + PHASE_1_SS_MIN, |
35 | 40 | PROFESSIONAL_NCH_PARTITIONS, |
36 | 41 | PROFESSIONAL_SS_PARTITIONS, |
| 42 | + VMS_CLM_SOURCE, |
37 | 43 | ) |
38 | 44 | from load_partition import LoadPartition, LoadPartitionGroup, PartitionType |
39 | 45 | from settings import ( |
|
42 | 48 | MIN_CLAIM_NCH_TRANSACTION_DATE, |
43 | 49 | MIN_CLAIM_SS_TRANSACTION_DATE, |
44 | 50 | MIN_PRIOR_AUTH_TRANSACTION_DATE, |
| 51 | + PHASE_1_PRUNE_BATCH_LIMIT, |
45 | 52 | ) |
46 | 53 |
|
47 | 54 | type DbType = str | float | int | bool | date | datetime |
@@ -343,9 +350,6 @@ def base_claim_filter(partition: LoadPartition) -> str: |
343 | 350 | EXPR = "expr" |
344 | 351 | DERIVED = "derived" |
345 | 352 | COLUMN_MAP = "column_map" |
346 | | -FISS_CLM_SOURCE = "21000" |
347 | | -MCS_CLM_SOURCE = "22000" |
348 | | -VMS_CLM_SOURCE = "23000" |
349 | 353 |
|
350 | 354 |
|
351 | 355 | ALIAS_CLM = "clm" |
@@ -692,17 +696,16 @@ def claim_filter(start_time: datetime, partition: LoadPartition) -> str: |
692 | 696 | latest_claim_ind = "" |
693 | 697 |
|
694 | 698 | # PAC data older than 60 days should be filtered |
695 | | - pac_cutoff_date = start_time - timedelta(days=60) |
| 699 | + pac_cutoff_date = start_time - timedelta(days=PHASE_1_CUTOFF) |
696 | 700 | start_time_sql = pac_cutoff_date.strftime("'%Y-%m-%d %H:%M:%S'") |
697 | | - pac_phase_1_min = 1000 |
698 | | - pac_phase_1_max = 1999 |
| 701 | + |
699 | 702 | # Note: checking clm_type_cd as the first branch of the OR here might be more efficient |
700 | 703 | # Since it's more likely to return true |
701 | 704 | pac_filter = ( |
702 | 705 | f""" |
703 | 706 | AND |
704 | 707 | ( |
705 | | - {clm}.clm_type_cd NOT BETWEEN {pac_phase_1_min} AND {pac_phase_1_max} |
| 708 | + {clm}.clm_type_cd NOT BETWEEN {PHASE_1_SS_MIN} AND {PHASE_1_SS_MAX} |
706 | 709 | OR |
707 | 710 | ( |
708 | 711 | {clm}.clm_src_id IN ( |
@@ -825,3 +828,26 @@ def claim_related_conditions_cte(source: Source) -> str: |
825 | 828 | AND clm_rlt_cond_cd != '~' |
826 | 829 | GROUP BY clm_rlt_cond_sgntr_sk |
827 | 830 | """ |
| 831 | + |
| 832 | + |
| 833 | +def stale_phase_1_claims_query( |
| 834 | + header_table: str, |
| 835 | + item_table: str, |
| 836 | + cutoff_date: datetime, |
| 837 | +) -> tuple[str, tuple[datetime, datetime]]: |
| 838 | + return ( |
| 839 | + f""" |
| 840 | + SELECT clm.clm_uniq_id |
| 841 | + FROM {header_table} clm |
| 842 | + WHERE clm.clm_type_cd BETWEEN {PHASE_1_SS_MIN} AND {PHASE_1_SS_MAX} |
| 843 | + AND clm.clm_src_id IN ('{FISS_CLM_SOURCE}', '{MCS_CLM_SOURCE}', '{VMS_CLM_SOURCE}') |
| 844 | + AND clm.bfd_updated_ts < %s |
| 845 | + AND NOT EXISTS ( |
| 846 | + SELECT 1 FROM {item_table} item |
| 847 | + WHERE clm.clm_uniq_id = item.clm_uniq_id |
| 848 | + AND item.bfd_updated_ts >= %s |
| 849 | + ) |
| 850 | + LIMIT {PHASE_1_PRUNE_BATCH_LIMIT} |
| 851 | + """, |
| 852 | + (cutoff_date, cutoff_date), |
| 853 | + ) |
0 commit comments