medicafe 0.250819.0__py3-none-any.whl → 0.250819.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
MediBot/__init__.py CHANGED
@@ -19,7 +19,7 @@ Smart Import Integration:
19
19
  medibot_main = get_components('medibot_main')
20
20
  """
21
21
 
22
- __version__ = "0.250819.0"
22
+ __version__ = "0.250819.2"
23
23
  __author__ = "Daniel Vidaud"
24
24
  __email__ = "daniel@personalizedtransformation.com"
25
25
 
@@ -6,6 +6,7 @@ except ImportError:
6
6
  yaml = None
7
7
  from datetime import datetime
8
8
  from collections import OrderedDict
9
+ from functools import reduce
9
10
 
10
11
  # Global configuration cache to prevent repeated loading
11
12
  _CONFIG_CACHE = None
@@ -166,6 +167,11 @@ def clear_config_cache():
166
167
  _CONFIG_CACHE = None
167
168
  _CROSSWALK_CACHE = None
168
169
 
170
+ def require_config_value(key_path, use_cache=True):
171
+ # TODO This needs expanding a little bit but generally this type of functionality is good to have at this level.
172
+ config = _CONFIG_CACHE if use_cache and _CONFIG_CACHE else load_configuration()[0]
173
+ return reduce(lambda d, k: d[k], key_path.split('.'), config)
174
+
169
175
  # Logs messages with optional error type and claim data.
170
176
  def log(message, config=None, level="INFO", error_type=None, claim=None, verbose=False, console_output=False):
171
177
 
MediCafe/__init__.py CHANGED
@@ -27,7 +27,7 @@ Smart Import System:
27
27
  api_suite = get_api_access()
28
28
  """
29
29
 
30
- __version__ = "0.250819.0"
30
+ __version__ = "0.250819.2"
31
31
  __author__ = "Daniel Vidaud"
32
32
  __email__ = "daniel@personalizedtransformation.com"
33
33
 
@@ -199,23 +199,23 @@ def create_nm1_billing_provider_segment(config, endpoint):
199
199
  billing_provider_entity_code = endpoint_config.get('billing_provider_entity_code', '85')
200
200
  billing_provider_npi_qualifier = endpoint_config.get('billing_provider_npi_qualifier', 'XX')
201
201
  # Resolve required values with TestMode-aware enforcement
202
- billing_provider_lastname = require_config_value(
202
+ billing_provider_lastname = legacy_require_config_value(
203
203
  [config, endpoint_config],
204
- 'billing_provider_lastname',
205
- config.get('default_billing_provider_name', 'DEFAULT NAME'),
204
+ ['billing_provider_lastname', 'default_billing_provider_name'],
205
+ 'DEFAULT NAME',
206
206
  '2010AA Billing Provider Last Name',
207
207
  config,
208
208
  endpoint
209
209
  )
210
210
  billing_provider_firstname = config.get('billing_provider_firstname', '')
211
- billing_provider_npi = require_config_value(
211
+ billing_provider_npi = legacy_require_config_value(
212
212
  [endpoint_config, config],
213
- 'billing_provider_npi',
214
- config.get('default_billing_provider_npi', 'DEFAULT NPI'),
213
+ ['billing_provider_npi', 'default_billing_provider_npi'],
214
+ 'DEFAULT NPI',
215
215
  '2010AA Billing Provider NPI',
216
216
  config,
217
217
  endpoint
218
- )
218
+ ) # BUG This is stupid. The NPI is the same. Maybe the first and last name registration might vary by endpoint, but the NPI wont.
219
219
 
220
220
  # Determine billing_entity_type_qualifier based on the presence of billing_provider_firstname
221
221
  billing_entity_type_qualifier = '1' if billing_provider_firstname else '2'
@@ -233,17 +233,17 @@ def create_nm1_billing_provider_segment(config, endpoint):
233
233
  # Construct address segments
234
234
  address_segments = []
235
235
  if config.get('billing_provider_address'):
236
- addr = require_config_value([config], 'billing_provider_address', 'NO ADDRESS', '2010AA Billing Address', config, endpoint)
237
- city = require_config_value([config], 'billing_provider_city', 'NO CITY', '2010AA Billing City', config, endpoint)
238
- state = require_config_value([config], 'billing_provider_state', 'NO STATE', '2010AA Billing State', config, endpoint)
239
- zip_code = require_config_value([config], 'billing_provider_zip', 'NO ZIP', '2010AA Billing ZIP', config, endpoint)
236
+ addr = legacy_require_config_value([config], 'billing_provider_address', 'NO ADDRESS', '2010AA Billing Address', config, endpoint)
237
+ city = legacy_require_config_value([config], 'billing_provider_city', 'NO CITY', '2010AA Billing City', config, endpoint)
238
+ state = legacy_require_config_value([config], 'billing_provider_state', 'NO STATE', '2010AA Billing State', config, endpoint)
239
+ zip_code = legacy_require_config_value([config], 'billing_provider_zip', 'NO ZIP', '2010AA Billing ZIP', config, endpoint)
240
240
  # N3 segment for address line
241
241
  address_segments.append("N3*{}~".format(addr))
242
242
  # N4 segment for City, State, ZIP
243
243
  address_segments.append("N4*{}*{}*{}~".format(city, state, zip_code))
244
244
 
245
245
  # Assuming Tax ID is part of the same loop, otherwise move REF segment to the correct loop
246
- billing_tin = require_config_value([config], 'billing_provider_tin', 'NO TAX ID', '2010AA Billing TIN', config, endpoint)
246
+ billing_tin = legacy_require_config_value([config], 'billing_provider_tin', 'NO TAX ID', '2010AA Billing TIN', config, endpoint)
247
247
  ref_segment = "REF*EI*{}~".format(billing_tin)
248
248
 
249
249
  # Construct PRV segment if provider taxonomy is needed
@@ -265,12 +265,12 @@ def create_service_facility_location_npi_segment(config):
265
265
  Constructs segments for the service facility location, including the NM1 segment for identification
266
266
  and accompanying N3 and N4 segments for address details.
267
267
  """
268
- facility_npi = require_config_value([config], 'service_facility_npi', 'DEFAULT FACILITY NPI', '2310C Service Facility NPI', config)
269
- facility_name = require_config_value([config], 'service_facility_name', 'DEFAULT FACILITY NAME', '2310C Service Facility Name', config)
270
- address_line_1 = require_config_value([config], 'service_facility_address', 'NO ADDRESS', '2310C Service Facility Address', config)
271
- city = require_config_value([config], 'service_facility_city', 'NO CITY', '2310C Service Facility City', config)
272
- state = require_config_value([config], 'service_facility_state', 'NO STATE', '2310C Service Facility State', config)
273
- zip_code = require_config_value([config], 'service_facility_zip', 'NO ZIP', '2310C Service Facility ZIP', config)
268
+ facility_npi = legacy_require_config_value([config], 'service_facility_npi', 'DEFAULT FACILITY NPI', '2310C Service Facility NPI', config)
269
+ facility_name = legacy_require_config_value([config], 'service_facility_name', 'DEFAULT FACILITY NAME', '2310C Service Facility Name', config)
270
+ address_line_1 = legacy_require_config_value([config], 'service_facility_address', 'NO ADDRESS', '2310C Service Facility Address', config)
271
+ city = legacy_require_config_value([config], 'service_facility_city', 'NO CITY', '2310C Service Facility City', config)
272
+ state = legacy_require_config_value([config], 'service_facility_state', 'NO STATE', '2310C Service Facility State', config)
273
+ zip_code = legacy_require_config_value([config], 'service_facility_zip', 'NO ZIP', '2310C Service Facility ZIP', config)
274
274
 
275
275
  # NM1 segment for facility identification
276
276
  nm1_segment = "NM1*77*2*{}*****XX*{}~".format(facility_name, facility_npi)
@@ -290,20 +290,20 @@ def create_1000A_submitter_name_segment(patient_data, config, endpoint):
290
290
  submitter_id_qualifier = endpoint_config.get('submitter_id_qualifier', '46') # '46' for ETIN or 'XX' for NPI
291
291
 
292
292
  # Required submitter name
293
- submitter_name = require_config_value([endpoint_config, config], 'nm_103_value', 'DEFAULT NAME', '1000A Submitter Name', config, endpoint)
293
+ submitter_name = legacy_require_config_value([endpoint_config, config], 'nm_103_value', 'DEFAULT NAME', '1000A Submitter Name', config, endpoint)
294
294
 
295
295
  # Extract payer_id from patient_data
296
296
  payer_id = patient_data.get('payer_id', '')
297
297
 
298
298
  # Check if payer_id is Florida Blue (00590 or BCBSF) and assign submitter_id accordingly
299
299
  if payer_id in ['00590', 'BCBSF']:
300
- submitter_id = require_config_value([endpoint_config], 'nm_109_bcbs', 'DEFAULT BCBSF ID', '1000A Submitter ID (BCBSF)', config, endpoint)
300
+ submitter_id = legacy_require_config_value([endpoint_config], 'nm_109_bcbsf', 'DEFAULT BCBSF ID', '1000A Submitter ID (BCBSF)', config, endpoint)
301
301
  else:
302
- submitter_id = require_config_value([endpoint_config], 'nm_109_value', 'DEFAULT ID', '1000A Submitter ID', config, endpoint)
302
+ submitter_id = legacy_require_config_value([endpoint_config], 'nm_109_value', 'DEFAULT ID', '1000A Submitter ID', config, endpoint)
303
303
 
304
304
  # Submitter contact details (required)
305
- contact_name = require_config_value([config], 'submitter_name', 'NONE', '1000A Submitter Contact Name', config, endpoint)
306
- contact_telephone_number = require_config_value([config], 'submitter_tel', 'NONE', '1000A Submitter Contact Phone', config, endpoint)
305
+ contact_name = legacy_require_config_value([config], 'submitter_name', 'NONE', '1000A Submitter Contact Name', config, endpoint)
306
+ contact_telephone_number = legacy_require_config_value([config], 'submitter_tel', 'NONE', '1000A Submitter Contact Phone', config, endpoint)
307
307
 
308
308
  # Get submitter first name to determine entity type qualifier
309
309
  submitter_first_name = config.get('submitter_first_name', '')
@@ -333,8 +333,8 @@ def create_1000B_receiver_name_segment(config, endpoint):
333
333
  endpoint_config = config.get('endpoints', {}).get(endpoint.upper(), {})
334
334
  receiver_entity_code = '40'
335
335
  receiver_id_qualifier = endpoint_config.get('receiver_id_qualifier', '46')
336
- receiver_name = require_config_value([endpoint_config], 'receiver_name', 'DEFAULT RECEIVER NAME', '1000B Receiver Name', config, endpoint)
337
- receiver_edi = require_config_value([endpoint_config], 'receiver_edi', 'DEFAULT EDI', '1000B Receiver EDI', config, endpoint)
336
+ receiver_name = legacy_require_config_value([endpoint_config], 'receiver_name', 'DEFAULT RECEIVER NAME', '1000B Receiver Name', config, endpoint)
337
+ receiver_edi = legacy_require_config_value([endpoint_config], 'receiver_edi', 'DEFAULT EDI', '1000B Receiver EDI', config, endpoint)
338
338
  return "NM1*{entity_code}*2*{receiver_name}*****{id_qualifier}*{receiver_edi}~".format(
339
339
  entity_code=receiver_entity_code,
340
340
  receiver_name=receiver_name,
@@ -347,11 +347,11 @@ def create_nm1_payto_address_segments(config):
347
347
  Constructs the NM1 segment for the Pay-To Address, N3 for street address, and N4 for city, state, and ZIP.
348
348
  This is used if the Pay-To Address is different from the Billing Provider Address.
349
349
  """
350
- payto_provider_name = require_config_value([config], 'payto_provider_name', 'DEFAULT PAY-TO NAME', '2010AB Pay-To Name', config)
351
- payto_address = require_config_value([config], 'payto_address', 'DEFAULT PAY-TO ADDRESS', '2010AB Pay-To Address', config)
352
- payto_city = require_config_value([config], 'payto_city', 'DEFAULT PAY-TO CITY', '2010AB Pay-To City', config)
353
- payto_state = require_config_value([config], 'payto_state', 'DEFAULT PAY-TO STATE', '2010AB Pay-To State', config)
354
- payto_zip = require_config_value([config], 'payto_zip', 'DEFAULT PAY-TO ZIP', '2010AB Pay-To ZIP', config)
350
+ payto_provider_name = legacy_require_config_value([config], 'payto_provider_name', 'DEFAULT PAY-TO NAME', '2010AB Pay-To Name', config)
351
+ payto_address = legacy_require_config_value([config], 'payto_address', 'DEFAULT PAY-TO ADDRESS', '2010AB Pay-To Address', config)
352
+ payto_city = legacy_require_config_value([config], 'payto_city', 'DEFAULT PAY-TO CITY', '2010AB Pay-To City', config)
353
+ payto_state = legacy_require_config_value([config], 'payto_state', 'DEFAULT PAY-TO STATE', '2010AB Pay-To State', config)
354
+ payto_zip = legacy_require_config_value([config], 'payto_zip', 'DEFAULT PAY-TO ZIP', '2010AB Pay-To ZIP', config)
355
355
 
356
356
  nm1_segment = "NM1*87*2*{}~".format(payto_provider_name)
357
357
  n3_segment = "N3*{}~".format(payto_address)
@@ -1528,37 +1528,47 @@ DEFAULT_PLACEHOLDER_VALUES = set([
1528
1528
  'NO STATE', 'NO ZIP', 'NO TAX ID', 'NONE'
1529
1529
  ])
1530
1530
 
1531
- def _get_value_from_sources(source_dicts, key):
1532
- for d in source_dicts:
1533
- try:
1534
- if isinstance(d, dict) and key in d:
1535
- val = d.get(key)
1536
- if val not in [None, '']:
1537
- return val
1538
- except Exception:
1539
- pass
1531
+ string_types = (str,)
1532
+
1533
+ def _get_value_from_sources(source_dicts, keys):
1534
+ # Accept a single key or an ordered list/tuple of keys; scan in priority order
1535
+ if not isinstance(keys, (list, tuple)):
1536
+ keys = [keys]
1537
+ for key in keys:
1538
+ for d in source_dicts:
1539
+ try:
1540
+ if isinstance(d, dict) and key in d:
1541
+ val = d.get(key)
1542
+ if val not in [None, '']:
1543
+ return val
1544
+ except Exception:
1545
+ pass
1540
1546
  return None
1541
1547
 
1542
- def require_config_value(source_dicts, key, default_value, context_label, config, endpoint=None, allow_default_in_test=True):
1548
+ def legacy_require_config_value(source_dicts, key, default_value, context_label, config, endpoint=None, allow_default_in_test=True):
1543
1549
  """
1544
1550
  Fetch a configuration value from one or more dicts.
1551
+ - `key` may be a string or a list/tuple of keys to try in order (primary, secondary, ...).
1545
1552
  - If found and equals a known placeholder, allow only in TestMode.
1546
1553
  - If missing, allow default only in TestMode (when allow_default_in_test is True).
1547
1554
  - Otherwise raise ValueError to prevent generating malformed 837p.
1555
+
1556
+ TODO Eventually we should get this functionality into configloader in MediCafe so that we can use it in other places.
1548
1557
  """
1549
1558
  value = _get_value_from_sources(source_dicts, key)
1559
+ key_label = key if isinstance(key, string_types) else "/".join([k for k in key if isinstance(k, string_types)])
1550
1560
  # Found a value
1551
1561
  if value not in [None, '']:
1552
1562
  if isinstance(value, str) and value in DEFAULT_PLACEHOLDER_VALUES:
1553
1563
  if _is_test_mode(config):
1554
1564
  try:
1555
- MediLink_ConfigLoader.log("TEST MODE: Placeholder used for {} -> {}".format(key, value), level="WARNING")
1565
+ MediLink_ConfigLoader.log("TEST MODE: Placeholder used for {} -> {}".format(key_label, value), level="WARNING")
1556
1566
  except Exception:
1557
1567
  pass
1558
- print("TEST MODE: Using placeholder '{}' for {} ({})".format(value, key, context_label))
1568
+ print("TEST MODE: Using placeholder '{}' for {} ({})".format(value, key_label, context_label))
1559
1569
  return value
1560
1570
  else:
1561
- msg = "Missing real value for '{}' in {}. Found placeholder '{}'. Endpoint: {}".format(key, context_label, value, (endpoint or ''))
1571
+ msg = "Missing real value for '{}' in {}. Found placeholder '{}'. Endpoint: {}".format(key_label, context_label, value, (endpoint or ''))
1562
1572
  try:
1563
1573
  MediLink_ConfigLoader.log(msg, level="CRITICAL")
1564
1574
  except Exception:
@@ -1568,12 +1578,12 @@ def require_config_value(source_dicts, key, default_value, context_label, config
1568
1578
  # Missing value entirely
1569
1579
  if allow_default_in_test and _is_test_mode(config):
1570
1580
  try:
1571
- MediLink_ConfigLoader.log("TEST MODE: Default used for {} -> {}".format(key, default_value), level="WARNING")
1581
+ MediLink_ConfigLoader.log("TEST MODE: Default used for {} -> {}".format(key_label, default_value), level="WARNING")
1572
1582
  except Exception:
1573
1583
  pass
1574
- print("TEST MODE: Using default '{}' for {} ({})".format(default_value, key, context_label))
1584
+ print("TEST MODE: Using default '{}' for {} ({})".format(default_value, key_label, context_label))
1575
1585
  return default_value
1576
- msg = "Required configuration '{}' missing for {}. Endpoint: {}".format(key, context_label, (endpoint or ''))
1586
+ msg = "Required configuration '{}' missing for {}. Endpoint: {}".format(key_label, context_label, (endpoint or ''))
1577
1587
  try:
1578
1588
  MediLink_ConfigLoader.log(msg, level="CRITICAL")
1579
1589
  except Exception:
MediLink/MediLink_main.py CHANGED
@@ -34,13 +34,6 @@ import MediLink_PatientProcessor # Import patient processing functions
34
34
  # Use core utilities for standardized config loader
35
35
  MediLink_ConfigLoader = get_shared_config_loader()
36
36
 
37
- try:
38
- from tqdm import tqdm
39
- except ImportError:
40
- # Fallback for when tqdm is not available
41
- def tqdm(iterable, **kwargs):
42
- return iterable
43
-
44
37
  import_time = time.time()
45
38
  if PERFORMANCE_LOGGING:
46
39
  print("Import phase completed in {:.2f} seconds".format(import_time - start_time))
@@ -92,8 +85,8 @@ def main_menu():
92
85
  Initializes the main menu loop and handles the overall program flow,
93
86
  including loading configurations and managing user input for menu selections.
94
87
  """
88
+ global _last_ack_updated_at, _scheduled_ack_checks
95
89
  menu_start_time = time.time()
96
- print("Main menu function started...")
97
90
 
98
91
  # Load configuration settings and display the initial welcome message.
99
92
  config_start_time = time.time()
@@ -149,6 +142,13 @@ def main_menu():
149
142
  ack_result = False
150
143
  pass
151
144
 
145
+ # TODO: Once we start building out the whole submission tracking persist structure,
146
+ # this boot-time scan should check when the last acknowledgement check was run
147
+ # and skip if it was run recently (e.g., within the last day) to avoid
148
+ # constantly running it on every startup. The submission tracking system should
149
+ # store the timestamp of the last successful acknowledgement check and use it
150
+ # to determine if a new scan is needed.
151
+
152
152
  # Clear screen before showing menu header
153
153
  try:
154
154
  os.system('cls' if os.name == 'nt' else 'clear')
@@ -204,27 +204,7 @@ def main_menu():
204
204
  if PERFORMANCE_LOGGING:
205
205
  print("Main menu initialization completed in {:.2f} seconds".format(menu_init_end - menu_start_time))
206
206
 
207
- # Validate the calculated date range
208
- try:
209
- from datetime import datetime, timedelta
210
- current_date = datetime.now()
211
- start_date = current_date - timedelta(days=15) # Default to 15-day range
212
- end_date = current_date - timedelta(days=1)
213
- def validate_date_range(start_date, end_date):
214
- if start_date > end_date:
215
- raise ValueError("Start date cannot be after end date.")
216
- if start_date < (current_date - timedelta(days=30)): # Ensure it's not too far in the past
217
- raise ValueError("Start date must be within the last 30 days.")
218
- if end_date < (current_date - timedelta(days=30)): # Ensure it's not too far in the past
219
- raise ValueError("End date must be within the last 30 days.")
220
- except ImportError:
221
- print("Date validation requires the 'datetime' module. Please ensure it's installed.")
222
- # Fallback to a safe date range within 30 days
223
- end_date = current_date - timedelta(days=1)
224
- start_date = end_date - timedelta(days=15) # 15-day range as fallback
225
-
226
- end_date_str = end_date.strftime('%m/%d/%Y')
227
- start_date_str = start_date.strftime('%m/%d/%Y')
207
+
228
208
 
229
209
  while True:
230
210
  # Run any due scheduled ack checks before showing menu
@@ -294,7 +274,7 @@ def main_menu():
294
274
 
295
275
  # UX hint: suggest deeper United details
296
276
  try:
297
- print("Tip: For United details, run the United Claims Status option for the same date window.")
277
+ print("Tip: For United details, run the United Claims Status checker.")
298
278
  except Exception:
299
279
  pass
300
280
  elif choice == '2':
@@ -335,20 +315,6 @@ def main_menu():
335
315
  break
336
316
  elif choice == '4':
337
317
  _tools_menu(config, medi)
338
- elif choice.lower() == 'tools:index':
339
- # Optional maintenance: rebuild submission index now (synchronous)
340
- try:
341
- receipts_root = medi.get('local_claims_path', None)
342
- if not receipts_root:
343
- print("No receipts folder configured.")
344
- continue
345
- from MediCafe.submission_index import build_initial_index
346
- receipts_root = os.path.normpath(receipts_root)
347
- print("Rebuilding submission index... (this may take a while)")
348
- count = build_initial_index(receipts_root)
349
- print("Index rebuild complete. Indexed {} records.".format(count))
350
- except Exception as e:
351
- print("Index rebuild error: {}".format(e))
352
318
  else:
353
319
  # Display an error message if the user's choice does not match any valid option.
354
320
  MediLink_UI.display_invalid_choice()
MediLink/__init__.py CHANGED
@@ -22,7 +22,7 @@ Smart Import Integration:
22
22
  datamgmt = get_components('medilink_datamgmt')
23
23
  """
24
24
 
25
- __version__ = "0.250819.0"
25
+ __version__ = "0.250819.2"
26
26
  __author__ = "Daniel Vidaud"
27
27
  __email__ = "daniel@personalizedtransformation.com"
28
28
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: medicafe
3
- Version: 0.250819.0
3
+ Version: 0.250819.2
4
4
  Summary: MediCafe
5
5
  Home-page: https://github.com/katanada2/MediCafe
6
6
  Author: Daniel Vidaud
@@ -10,12 +10,12 @@ MediBot/MediBot_UI.py,sha256=iG8UK71aHYBmB0lkjwl-C6L9DbsOyLaq-wt9kChV0jo,23781
10
10
  MediBot/MediBot_dataformat_library.py,sha256=D46fdPtxcgfWTzaLBtSvjtozzZBNqNiODgu4vKMZrBg,10746
11
11
  MediBot/MediBot_docx_decoder.py,sha256=gn7I7Ng5khVIzU0HTTOqi31YSSn1yW8Pyk-i_P9r1oA,32472
12
12
  MediBot/MediBot_smart_import.py,sha256=Emvz7NwemHGCHvG5kZcUyXMcCheidbGKaPfOTg-YCEs,6684
13
- MediBot/__init__.py,sha256=_awKwV7ZRqHaI4S1SWV9WhMuZ1cpi3b0-YVHcyt0xAg,3192
13
+ MediBot/__init__.py,sha256=BsN88plf2Df_DwQcH5u984m_cB1fSH3t_0wGsv_FRjM,3192
14
14
  MediBot/get_medicafe_version.py,sha256=uyL_UIE42MyFuJ3SRYxJp8sZx8xjTqlYZ3FdQuxLduY,728
15
15
  MediBot/update_json.py,sha256=vvUF4mKCuaVly8MmoadDO59M231fCIInc0KI1EtDtPA,3704
16
16
  MediBot/update_medicafe.py,sha256=09asEEgnGEOq4HH4dmnF18hZdzggqn8zDutQqymdVws,8550
17
- MediCafe/MediLink_ConfigLoader.py,sha256=zqN0p3il4E5hPiGvd0a5xWo8gAGu4dEAQEKEVknpB0s,9803
18
- MediCafe/__init__.py,sha256=nMfu7hqqzY9BOLfVdbVxAtIl9UHS3Nb3ty2Bht1zNxg,5721
17
+ MediCafe/MediLink_ConfigLoader.py,sha256=fNBFnPbh1YRVCs9WvZp6tPsKTUFzK3f38ePeUQ00QrQ,10161
18
+ MediCafe/__init__.py,sha256=xGUWBKk7QuOBa-SnzrqJb-SQIDKuaBRN1wHfp0yKiCg,5721
19
19
  MediCafe/__main__.py,sha256=mRNyk3D9Ilnu2XhgVI_rut7r5Ro7UIKtwV871giAHI8,12992
20
20
  MediCafe/api_core.py,sha256=IZaBXnP4E7eHzxVbCk2HtxywiVBuhaUyHeaqss8llgY,66378
21
21
  MediCafe/api_core_backup.py,sha256=Oy_Fqt0SEvGkQN1Oqw5iUPVFxPEokyju5CuPEb9k0OY,18686
@@ -31,7 +31,7 @@ MediCafe/submission_index.py,sha256=35gz8Anx1dIqG1I14GvuLY0nTO4dSBr2YsZwof9aIQg,
31
31
  MediLink/InsuranceTypeService.py,sha256=FKWC1nRfKV_OtCDUtZustauXNhmCYDFiY9jsAGHPPUM,2178
32
32
  MediLink/MediLink_837p_cob_library.py,sha256=glc7SJBDx0taCGmwmCs81GFJJcvA_D7nycIkTfmIuwE,30650
33
33
  MediLink/MediLink_837p_encoder.py,sha256=lJnly96LsSBnzEgF8Ne-nQTL7cmRhoFL2fJajtpvOcU,32209
34
- MediLink/MediLink_837p_encoder_library.py,sha256=cpnp4RBdypvu3NHdO4hricGVnRw5qbWNOSHKBzSBMp0,86873
34
+ MediLink/MediLink_837p_encoder_library.py,sha256=VzOpzbYF3i133vdqqxYB6JVMd9N5QzfKaWNVeQKIRZM,87774
35
35
  MediLink/MediLink_837p_utilities.py,sha256=AJ0F22LoF8du20zPBH4TZXgsdXCD-1qYKBnHJM-mXl0,16260
36
36
  MediLink/MediLink_API_Generator.py,sha256=VZBL9W8yFTMJ4ikSwbUI8ANtaJCLnUyqoF8xQEJQn_E,11176
37
37
  MediLink/MediLink_Azure.py,sha256=Ow70jctiHFIylskBExN7WUoRgrKOvBR6jNTnQMk6lJA,210
@@ -51,10 +51,10 @@ MediLink/MediLink_Scheduler.py,sha256=UJvxhDvHraqra2_TlQVlGeh5jRFrrfK6nCVUHnKOEM
51
51
  MediLink/MediLink_UI.py,sha256=6OR2obKUuBO12l3k6B53MXu1a3fCiV3FVBE2QrIYRqk,9279
52
52
  MediLink/MediLink_Up.py,sha256=uB6J63hWOn8Ot8iGtc2_OgcejNWVgnX7Se_e_UWBNho,38082
53
53
  MediLink/MediLink_insurance_utils.py,sha256=g741Fj2K26cMy0JX5d_XavMw9LgkK6hjaUJYfysT7t8,9301
54
- MediLink/MediLink_main.py,sha256=MzF6XeoBMVPqdhD2AoH7Xz01eOfpge-FZQHAHZs-YKk,23630
54
+ MediLink/MediLink_main.py,sha256=5llRZ065vhUq5cWePb7Zz7QJUIAmua33BeNe3LjTVuE,21892
55
55
  MediLink/MediLink_smart_import.py,sha256=B5SfBn_4bYEWJJDolXbjnwKx_-MaqGZ76LyXQwWDV80,9838
56
56
  MediLink/Soumit_api.py,sha256=5JfOecK98ZC6NpZklZW2AkOzkjvrbYxpJpZNH3rFxDw,497
57
- MediLink/__init__.py,sha256=PxqhoGoFOL6ySymgLqtqiZdiHSNxUVBJbkkbLNn80bw,3888
57
+ MediLink/__init__.py,sha256=_XkngMf4aoHnU0OdY2xvg9NTRqwdRKRLA00iLFlBKfU,3888
58
58
  MediLink/gmail_http_utils.py,sha256=gtqCCrzJC7e8JFQzMNrf7EbK8na2h4sfTu-NMaZ_UHc,4006
59
59
  MediLink/gmail_oauth_utils.py,sha256=Ugr-DEqs4_RddRMSCJ_dbgA3TVeaxpbAor-dktcTIgY,3713
60
60
  MediLink/insurance_type_integration_test.py,sha256=pz2OCXitAznqDciYn6OL9M326m9CYU7YiK-ynssdQ5g,15172
@@ -64,9 +64,9 @@ MediLink/test_cob_library.py,sha256=wUMv0-Y6fNsKcAs8Z9LwfmEBRO7oBzBAfWmmzwoNd1g,
64
64
  MediLink/test_timing.py,sha256=yH2b8QPLDlp1Zy5AhgtjzjnDHNGhAD16ZtXtZzzESZw,2042
65
65
  MediLink/test_validation.py,sha256=FJrfdUFK--xRScIzrHCg1JeGdm0uJEoRnq6CgkP2lwM,4154
66
66
  MediLink/webapp.html,sha256=JPKT559aFVBi1r42Hz7C77Jj0teZZRumPhBev8eSOLk,19806
67
- medicafe-0.250819.0.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
68
- medicafe-0.250819.0.dist-info/METADATA,sha256=ux7tzkK-Dib742ftrTx0Jx96GH7yvEA6HxyCp2pxf14,3384
69
- medicafe-0.250819.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
70
- medicafe-0.250819.0.dist-info/entry_points.txt,sha256=m3RBUBjr-xRwEkKJ5W4a7NlqHZP_1rllGtjZnrRqKe8,52
71
- medicafe-0.250819.0.dist-info/top_level.txt,sha256=U6-WBJ9RCEjyIs0BlzbQq_PwedCp_IV9n1616NNV5zA,26
72
- medicafe-0.250819.0.dist-info/RECORD,,
67
+ medicafe-0.250819.2.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
68
+ medicafe-0.250819.2.dist-info/METADATA,sha256=eAsPHqAEy5kI7cWEeBeBU5jpYILTcKd3R_3cUtnRrAg,3384
69
+ medicafe-0.250819.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
70
+ medicafe-0.250819.2.dist-info/entry_points.txt,sha256=m3RBUBjr-xRwEkKJ5W4a7NlqHZP_1rllGtjZnrRqKe8,52
71
+ medicafe-0.250819.2.dist-info/top_level.txt,sha256=U6-WBJ9RCEjyIs0BlzbQq_PwedCp_IV9n1616NNV5zA,26
72
+ medicafe-0.250819.2.dist-info/RECORD,,