medicafe 0.250820.7__py3-none-any.whl → 0.250822.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.
@@ -116,9 +116,59 @@ except ImportError as e:
116
116
 
117
117
  # Function to check if the date format is correct
118
118
  def validate_and_format_date(date_str):
119
- for fmt in ('%Y-%m-%d', '%m/%d/%Y', '%d-%b-%Y', '%d-%m-%Y'):
119
+ # Comprehensive list of common DOB date formats
120
+ date_formats = [
121
+ # 4-digit year formats
122
+ '%Y-%m-%d', # 1990-01-15
123
+ '%m/%d/%Y', # 01/15/1990
124
+ '%m-%d-%Y', # 01-15-1990
125
+ '%d-%m-%Y', # 15-01-1990
126
+ '%d/%m/%Y', # 15/01/1990
127
+ '%d-%b-%Y', # 15-Jan-1990
128
+ '%d %b %Y', # 15 Jan 1990
129
+ '%b %d, %Y', # Jan 15, 1990
130
+ '%b %d %Y', # Jan 15 1990
131
+ '%B %d, %Y', # January 15, 1990
132
+ '%B %d %Y', # January 15 1990
133
+ '%Y/%m/%d', # 1990/01/15
134
+ '%Y%m%d', # 19900115
135
+
136
+ # 2-digit year formats
137
+ '%m/%d/%y', # 01/15/90
138
+ '%m-%d-%y', # 01-15-90
139
+ '%d/%m/%y', # 15/01/90
140
+ '%d-%m-%y', # 15-01-90
141
+ '%d %b %y', # 15 Jan 90
142
+ '%b %d, %y', # Jan 15, 90
143
+ '%b %d %y', # Jan 15 90
144
+ '%y/%m/%d', # 90/01/15
145
+ '%y-%m-%d', # 90-01-15
146
+ '%y%m%d', # 900115
147
+
148
+ # Single digit formats (no leading zeros)
149
+ '%m/%d/%Y', # 1/15/1990 (already covered above)
150
+ '%m-%d-%Y', # 1-15-1990 (already covered above)
151
+ '%d/%m/%Y', # 15/1/1990 (already covered above)
152
+ '%d-%m-%Y', # 15-1-1990 (already covered above)
153
+ '%m/%d/%y', # 1/15/90 (already covered above)
154
+ '%m-%d-%y', # 1-15-90 (already covered above)
155
+ '%d/%m/%y', # 15/1/90 (already covered above)
156
+ '%d-%m-%y', # 15-1-90 (already covered above)
157
+ ]
158
+
159
+ for fmt in date_formats:
120
160
  try:
121
- formatted_date = datetime.strptime(date_str, fmt).strftime('%Y-%m-%d')
161
+ # For 2-digit years, assume 20th/21st century
162
+ if '%y' in fmt:
163
+ parsed_date = datetime.strptime(date_str, fmt)
164
+ # Handle year 00-99: assume 1950-2049 range
165
+ if parsed_date.year < 50:
166
+ parsed_date = parsed_date.replace(year=parsed_date.year + 2000)
167
+ elif parsed_date.year < 100:
168
+ parsed_date = parsed_date.replace(year=parsed_date.year + 1900)
169
+ formatted_date = parsed_date.strftime('%Y-%m-%d')
170
+ else:
171
+ formatted_date = datetime.strptime(date_str, fmt).strftime('%Y-%m-%d')
122
172
  return formatted_date
123
173
  except ValueError:
124
174
  continue
@@ -221,7 +271,7 @@ def manual_deductible_lookup():
221
271
 
222
272
  # Use the current mode setting for validation
223
273
  run_validation = DEBUG_MODE
224
- eligibility_data = get_eligibility_info(client, payer_id, provider_last_name, formatted_dob, member_id, npi, run_validation=run_validation)
274
+ eligibility_data = get_eligibility_info(client, payer_id, provider_last_name, formatted_dob, member_id, npi, run_validation=run_validation, is_manual_lookup=True)
225
275
  if eligibility_data:
226
276
  found_data = True
227
277
  # Generate unique output file for manual request
@@ -255,7 +305,7 @@ def manual_deductible_lookup():
255
305
 
256
306
 
257
307
  # Function to get eligibility information
258
- def get_eligibility_info(client, payer_id, provider_last_name, date_of_birth, member_id, npi, run_validation=False):
308
+ def get_eligibility_info(client, payer_id, provider_last_name, date_of_birth, member_id, npi, run_validation=False, is_manual_lookup=False):
259
309
  try:
260
310
  # Log the parameters being sent to the function
261
311
  MediLink_ConfigLoader.log("Calling eligibility check with parameters:", level="DEBUG")
@@ -286,52 +336,72 @@ def get_eligibility_info(client, payer_id, provider_last_name, date_of_birth, me
286
336
  except Exception as e:
287
337
  MediLink_ConfigLoader.log("Super Connector API failed: {}".format(e), level="ERROR")
288
338
 
289
- # Run validation if we have both responses
290
- # BUG: XP doesn't give shit about generating the validation report or opening the notepad. So we need to fix this.
291
- if legacy_eligibility and super_connector_eligibility:
292
- validation_file_path = os.path.join(os.getenv('TEMP'), 'validation_report_{}_{}.txt'.format(member_id, date_of_birth))
293
- try:
339
+ # Run validation if we have at least one response
340
+ # Generate validation report even if one API fails - this helps with debugging
341
+ validation_file_path = os.path.join(os.getenv('TEMP'), 'validation_report_{}_{}.txt'.format(member_id, date_of_birth))
342
+ try:
343
+ if legacy_eligibility and super_connector_eligibility:
344
+ # Both APIs returned data - run full comparison
294
345
  validation_report = MediLink_Deductible_Validator.run_validation_comparison(
295
346
  legacy_eligibility, super_connector_eligibility, validation_file_path
296
347
  )
297
- if os.path.exists(validation_file_path):
298
- print("\nValidation report generated: {}".format(validation_file_path))
299
-
300
- # Log any Super Connector API errors
301
- if "rawGraphQLResponse" in super_connector_eligibility:
302
- raw_response = super_connector_eligibility.get('rawGraphQLResponse', {})
303
- errors = raw_response.get('errors', [])
304
- if errors:
305
- print("Super Connector API returned {} error(s):".format(len(errors)))
306
- for i, error in enumerate(errors):
307
- error_code = error.get('code', 'UNKNOWN')
308
- error_desc = error.get('description', 'No description')
309
- print(" Error {}: {} - {}".format(i+1, error_code, error_desc))
310
-
311
- # Check for data in error extensions (some APIs return data here)
312
- extensions = error.get('extensions', {})
313
- if extensions and 'details' in extensions:
314
- details = extensions.get('details', [])
315
- if details:
316
- print(" Found {} detail records in error extensions".format(len(details)))
317
- # Log first detail record for debugging
318
- if details:
319
- first_detail = details[0]
320
- print(" First detail: {}".format(first_detail))
348
+ print("\nValidation report generated (both APIs): {}".format(validation_file_path))
349
+ elif legacy_eligibility:
350
+ # Only legacy API returned data
351
+ validation_report = MediLink_Deductible_Validator.run_validation_comparison(
352
+ legacy_eligibility, None, validation_file_path
353
+ )
354
+ print("\nValidation report generated (legacy only): {}".format(validation_file_path))
355
+ elif super_connector_eligibility:
356
+ # Only Super Connector API returned data
357
+ validation_report = MediLink_Deductible_Validator.run_validation_comparison(
358
+ None, super_connector_eligibility, validation_file_path
359
+ )
360
+ print("\nValidation report generated (Super Connector only): {}".format(validation_file_path))
361
+ else:
362
+ # Neither API returned data
363
+ print("\nNo validation report generated - both APIs failed")
364
+ validation_file_path = None
321
365
 
322
- # Check status code
323
- status_code = super_connector_eligibility.get('statuscode')
324
- if status_code and status_code != '200':
325
- print("Super Connector API status code: {} (non-200 indicates errors)".format(status_code))
326
-
327
- # Open validation report in Notepad
366
+ # Log any Super Connector API errors if we have that data
367
+ if super_connector_eligibility and "rawGraphQLResponse" in super_connector_eligibility:
368
+ raw_response = super_connector_eligibility.get('rawGraphQLResponse', {})
369
+ errors = raw_response.get('errors', [])
370
+ if errors:
371
+ print("Super Connector API returned {} error(s):".format(len(errors)))
372
+ for i, error in enumerate(errors):
373
+ error_code = error.get('code', 'UNKNOWN')
374
+ error_desc = error.get('description', 'No description')
375
+ print(" Error {}: {} - {}".format(i+1, error_code, error_desc))
376
+
377
+ # Check for data in error extensions (some APIs return data here)
378
+ extensions = error.get('extensions', {})
379
+ if extensions and 'details' in extensions:
380
+ details = extensions.get('details', [])
381
+ if details:
382
+ print(" Found {} detail records in error extensions".format(len(details)))
383
+ # Log first detail record for debugging
384
+ if details:
385
+ first_detail = details[0]
386
+ print(" First detail: {}".format(first_detail))
387
+
388
+ # Check status code
389
+ if super_connector_eligibility:
390
+ status_code = super_connector_eligibility.get('statuscode')
391
+ if status_code and status_code != '200':
392
+ print("Super Connector API status code: {} (non-200 indicates errors)".format(status_code))
393
+
394
+ # Open validation report in Notepad (only for manual lookups, not batch processing)
395
+ if validation_file_path and os.path.exists(validation_file_path):
396
+ # Only open in manual mode - batch processing will handle this separately
397
+ if is_manual_lookup: # Check if we're in manual lookup mode
328
398
  ret = os.system('notepad.exe "{}"'.format(validation_file_path))
329
399
  if ret != 0:
330
400
  print("Failed to open Notepad (exit code: {}). Please open manually: {}".format(ret, validation_file_path))
331
- else:
332
- print("\nValidation report file was not created: {}".format(validation_file_path))
333
- except Exception as e:
334
- print("\nError generating validation report: {}".format(str(e)))
401
+ elif validation_file_path:
402
+ print("\nValidation report file was not created: {}".format(validation_file_path))
403
+ except Exception as e:
404
+ print("\nError generating validation report: {}".format(str(e)))
335
405
 
336
406
  # Return legacy response for consistency
337
407
  eligibility = legacy_eligibility
@@ -878,6 +948,7 @@ if __name__ == "__main__":
878
948
  errors = []
879
949
  validation_reports = []
880
950
  processed_count = 0
951
+ validation_files_created = [] # Track validation files that were actually created
881
952
 
882
953
  for dob, member_id in patients:
883
954
  processed_count += 1
@@ -890,10 +961,18 @@ if __name__ == "__main__":
890
961
  try:
891
962
  # Run with validation enabled only in debug mode
892
963
  run_validation = DEBUG_MODE
893
- eligibility_data = get_eligibility_info(client, payer_id, provider_last_name, dob, member_id, npi, run_validation=run_validation)
964
+ eligibility_data = get_eligibility_info(client, payer_id, provider_last_name, dob, member_id, npi, run_validation=run_validation, is_manual_lookup=False)
894
965
  if eligibility_data is not None:
895
966
  display_eligibility_info(eligibility_data, dob, member_id, output_file)
896
967
  patient_processed = True
968
+
969
+ # Track validation file creation in debug mode
970
+ if DEBUG_MODE:
971
+ validation_file_path = os.path.join(os.getenv('TEMP'), 'validation_report_{}_{}.txt'.format(member_id, dob))
972
+ if os.path.exists(validation_file_path):
973
+ validation_files_created.append(validation_file_path)
974
+ print(" Validation report created: {}".format(os.path.basename(validation_file_path)))
975
+
897
976
  break # Stop trying other payer_ids for this patient once we get a response
898
977
  except Exception as e:
899
978
  # Continue trying other payer_ids
@@ -924,9 +1003,26 @@ if __name__ == "__main__":
924
1003
  print("\n" + "=" * 80)
925
1004
  print("VALIDATION SUMMARY")
926
1005
  print("=" * 80)
927
- print("Validation reports have been generated for each patient processed.")
928
- print("Each report compares the legacy API response with the Super Connector API response.")
929
- print("Check the TEMP directory for validation_report_*.txt files.")
1006
+ if validation_files_created:
1007
+ print("Validation reports generated: {} files".format(len(validation_files_created)))
1008
+ print("Files created:")
1009
+ for file_path in validation_files_created:
1010
+ print(" - {}".format(os.path.basename(file_path)))
1011
+
1012
+ # Ask if user wants to open validation reports
1013
+ open_validation = input("\nOpen validation reports in Notepad? (Y/N): ").strip().lower()
1014
+ if open_validation in ['y', 'yes']:
1015
+ for file_path in validation_files_created:
1016
+ print("Opening: {}".format(os.path.basename(file_path)))
1017
+ ret = os.system('notepad.exe "{}"'.format(file_path))
1018
+ if ret != 0:
1019
+ print("Failed to open Notepad for: {}".format(os.path.basename(file_path)))
1020
+ else:
1021
+ print("No validation reports were generated.")
1022
+ print("This may be because:")
1023
+ print(" - Super Connector API calls failed")
1024
+ print(" - Both APIs didn't return data for the same patients")
1025
+ print(" - Validation report generation encountered errors")
930
1026
  print("=" * 80)
931
1027
 
932
1028
  # Ask if user wants to continue
@@ -424,9 +424,16 @@ def generate_validation_report(validation_report, output_file_path):
424
424
  f.write("Recommendation: {}\n".format(issue['recommendation']))
425
425
  f.write("\n")
426
426
 
427
+ # API Status Information
428
+ if "legacy_api_status" in validation_report["super_connector_analysis"]:
429
+ f.write("\nAPI STATUS:\n")
430
+ f.write("-" * 50 + "\n")
431
+ f.write("Legacy API: {}\n".format(validation_report["super_connector_analysis"]["legacy_api_status"]))
432
+ f.write("Super Connector API: {}\n".format(validation_report["super_connector_analysis"]["super_connector_api_status"]))
433
+
427
434
  # Super Connector structure analysis
428
435
  if "structure" in validation_report["super_connector_analysis"]:
429
- f.write("SUPER CONNECTOR RESPONSE STRUCTURE:\n")
436
+ f.write("\nSUPER CONNECTOR RESPONSE STRUCTURE:\n")
430
437
  f.write("-" * 50 + "\n")
431
438
  for path, description in validation_report["super_connector_analysis"]["structure"].items():
432
439
  f.write("{}: {}\n".format(path, description))
@@ -468,12 +475,42 @@ def run_validation_comparison(legacy_data, super_connector_data, output_file_pat
468
475
  """
469
476
  Main function to run the validation comparison
470
477
  """
471
- # Extract values from legacy response
478
+ # Handle cases where one or both APIs failed
479
+ if not legacy_data and not super_connector_data:
480
+ # Both APIs failed - create a minimal report
481
+ validation_report = {
482
+ "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
483
+ "legacy_values": {},
484
+ "super_connector_analysis": {"error": "Both APIs failed to return data"},
485
+ "missing_values": [],
486
+ "found_values": [],
487
+ "data_quality_issues": [{
488
+ "type": "API Failure",
489
+ "field": "Both APIs",
490
+ "issue": "Both Legacy API and Super Connector API failed to return data",
491
+ "recommendation": "Check API connectivity and credentials"
492
+ }]
493
+ }
494
+ generate_validation_report(validation_report, output_file_path)
495
+ return validation_report
496
+
497
+ # Extract values from legacy response (handles None gracefully)
472
498
  legacy_values = extract_legacy_values_for_comparison(legacy_data)
473
499
 
474
- # Validate Super Connector response
500
+ # Validate Super Connector response (handles None gracefully)
475
501
  validation_report = validate_super_connector_response(legacy_values, super_connector_data)
476
502
 
503
+ # Add API status information
504
+ if not legacy_data:
505
+ validation_report["super_connector_analysis"]["legacy_api_status"] = "Failed"
506
+ else:
507
+ validation_report["super_connector_analysis"]["legacy_api_status"] = "Success"
508
+
509
+ if not super_connector_data:
510
+ validation_report["super_connector_analysis"]["super_connector_api_status"] = "Failed"
511
+ else:
512
+ validation_report["super_connector_analysis"]["super_connector_api_status"] = "Success"
513
+
477
514
  # Generate report
478
515
  generate_validation_report(validation_report, output_file_path)
479
516
 
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.250820.7"
25
+ __version__ = "0.250822.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.250820.7
3
+ Version: 0.250822.2
4
4
  Summary: MediCafe
5
5
  Home-page: https://github.com/katanada2/MediCafe
6
6
  Author: Daniel Vidaud
@@ -1,18 +1,18 @@
1
1
  MediBot/MediBot.bat,sha256=dWBZ2__t1uPvEuN76ETOD_mDo7368rP3tDrJd4MHCFY,26306
2
- MediBot/MediBot.py,sha256=j6yGetDQxonIepD_J-bJ5L_WiW9XRxOkIHiVAM_blfE,47083
3
- MediBot/MediBot_Charges.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ MediBot/MediBot.py,sha256=sx6nZYUhFMnr4UcBR07BcrSo-IgmL1xaYRF_C-bwDAU,48243
3
+ MediBot/MediBot_Charges.py,sha256=a28if_f_IoazIHiqlaFosFnfEgEoCwb9LQ6aOyk5-D0,10704
4
4
  MediBot/MediBot_Crosswalk_Library.py,sha256=jIaYdoxfT9YgQ5dWZC4jmTYxRX1Y14X-AJ6YEjR58Gc,25158
5
5
  MediBot/MediBot_Crosswalk_Utils.py,sha256=hTLPioU9A5XfdTZ7LqeOiYXdsi8Bwf9fuMJGxofyTmg,38983
6
6
  MediBot/MediBot_Notepad_Utils.py,sha256=fOsjyfoSpgmQyc8TcnLm53faLMOUUL18cspo5PZqJK4,8719
7
7
  MediBot/MediBot_Post.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  MediBot/MediBot_Preprocessor.py,sha256=gQRVAWbRHx_PMK6a7q93tp7Z-Dhjn5r0lJz3d0wAzeU,19067
9
9
  MediBot/MediBot_Preprocessor_lib.py,sha256=lyl2Q5V1MQHiZ54kmTYPxor3pm2gf8mAq-IwYu7FX2c,87236
10
- MediBot/MediBot_UI.py,sha256=iG8UK71aHYBmB0lkjwl-C6L9DbsOyLaq-wt9kChV0jo,23781
10
+ MediBot/MediBot_UI.py,sha256=tQISM2gULmQVc4JbeVsn4pjgOYsQZiJpx1_IU407rO8,25870
11
11
  MediBot/MediBot_dataformat_library.py,sha256=D46fdPtxcgfWTzaLBtSvjtozzZBNqNiODgu4vKMZrBg,10746
12
12
  MediBot/MediBot_debug.bat,sha256=F5Lfi3nFEEo4Ddx9EbX94u3fNAMgzMp3wsn-ULyASTM,6017
13
13
  MediBot/MediBot_docx_decoder.py,sha256=gn7I7Ng5khVIzU0HTTOqi31YSSn1yW8Pyk-i_P9r1oA,32472
14
14
  MediBot/MediBot_smart_import.py,sha256=Emvz7NwemHGCHvG5kZcUyXMcCheidbGKaPfOTg-YCEs,6684
15
- MediBot/__init__.py,sha256=7l_wPSbz_1FzE6t7dCqwQAlUq_9I4bZgqjj3Nra7WUM,3192
15
+ MediBot/__init__.py,sha256=DiKpzrHGq9xh-5Yc-1RXB4w52teweVFGStCp5tItbRM,3192
16
16
  MediBot/clear_cache.bat,sha256=F6-VhETWw6xDdGWG2wUqvtXjCl3lY4sSUFqF90bM8-8,1860
17
17
  MediBot/crash_diagnostic.bat,sha256=j8kUtyBg6NOWbXpeFuEqIRHOkVzgUrLOqO3FBMfNxTo,9268
18
18
  MediBot/f_drive_diagnostic.bat,sha256=4572hZaiwZ5wVAarPcZJQxkOSTwAdDuT_X914noARak,6878
@@ -20,20 +20,20 @@ MediBot/full_debug_suite.bat,sha256=b3Euz-VbRaPE6tWmgpjApfv4_cB5-Rk8BLNlLrp2bpo,
20
20
  MediBot/get_medicafe_version.py,sha256=uyL_UIE42MyFuJ3SRYxJp8sZx8xjTqlYZ3FdQuxLduY,728
21
21
  MediBot/process_csvs.bat,sha256=3tI7h1z9eRj8rUUL4wJ7dy-Qrak20lRmpAPtGbUMbVQ,3489
22
22
  MediBot/update_json.py,sha256=vvUF4mKCuaVly8MmoadDO59M231fCIInc0KI1EtDtPA,3704
23
- MediBot/update_medicafe.py,sha256=J5ktFGq6gTsov0NCrMhq3nmyiiIsUqnH28LoeDWg-hg,16072
23
+ MediBot/update_medicafe.py,sha256=G1lyvVOHYuho1d-TJQNN6qaB4HBWaJ2PpXqemBoPlRQ,17937
24
24
  MediCafe/MediLink_ConfigLoader.py,sha256=fNBFnPbh1YRVCs9WvZp6tPsKTUFzK3f38ePeUQ00QrQ,10161
25
- MediCafe/__init__.py,sha256=X4wLG18AuSdcVndULAIHMcldP3GsnAGf0dmqGIl2SDk,5721
25
+ MediCafe/__init__.py,sha256=1Fl4c3hfeUtxajN0AUpR2bzv823OT-E-O8ywd1zfgG0,5721
26
26
  MediCafe/__main__.py,sha256=mRNyk3D9Ilnu2XhgVI_rut7r5Ro7UIKtwV871giAHI8,12992
27
- MediCafe/api_core.py,sha256=IZaBXnP4E7eHzxVbCk2HtxywiVBuhaUyHeaqss8llgY,66378
27
+ MediCafe/api_core.py,sha256=TyJU-gC5iOpgnagKPrIZuE5MU-qZBq5fb0J2UtyEHAk,73536
28
28
  MediCafe/api_core_backup.py,sha256=Oy_Fqt0SEvGkQN1Oqw5iUPVFxPEokyju5CuPEb9k0OY,18686
29
29
  MediCafe/api_factory.py,sha256=I5AeJoyu6m7oCrjc2OvVvO_4KSBRutTsR1riiWhTZV0,12086
30
30
  MediCafe/api_utils.py,sha256=KWQB0q1k5E6frOFFlKWcFpHNcqfrS7KJ_82672wbupw,14041
31
31
  MediCafe/core_utils.py,sha256=r2Kbmp6aioBwTNEpEOYJLLdzBVALXl2S3eAs5IAD1-w,27165
32
- MediCafe/graphql_utils.py,sha256=P8zkY7eqTcFVIw_0P7A0tiFct200STOZeHeYVER2UJk,39438
32
+ MediCafe/graphql_utils.py,sha256=xrREl0mqktEBkV6SZeAImuuDc8Sp2Q80rWxKIh-zD7Q,44499
33
33
  MediCafe/logging_config.py,sha256=auT65LN5oDEXVhkMeLke63kJHTWxYf2o8YihAfQFgzU,5493
34
34
  MediCafe/logging_demo.py,sha256=TwUhzafna5pMdN3zSKGrpUWRqX96F1JGGsSUtr3dygs,1975
35
35
  MediCafe/migration_helpers.py,sha256=48GnP4xcgvDNNlzoWsKASCpF4H0KnyveHPbz6kjQy50,17737
36
- MediCafe/smart_import.py,sha256=KJtjmEvaiZ2ChQMjSb09_TFtz1DChU5KQCvTiK2gOKw,20495
36
+ MediCafe/smart_import.py,sha256=sv7aszDbA99LjhtbbAJWnvcBvjLHA_CGnkckjWvP8kQ,20577
37
37
  MediCafe/submission_index.py,sha256=35gz8Anx1dIqG1I14GvuLY0nTO4dSBr2YsZwof9aIQg,11175
38
38
  MediLink/InsuranceTypeService.py,sha256=FKWC1nRfKV_OtCDUtZustauXNhmCYDFiY9jsAGHPPUM,2178
39
39
  MediLink/MediLink_837p_cob_library.py,sha256=glc7SJBDx0taCGmwmCs81GFJJcvA_D7nycIkTfmIuwE,30650
@@ -42,11 +42,12 @@ MediLink/MediLink_837p_encoder_library.py,sha256=VzOpzbYF3i133vdqqxYB6JVMd9N5Qzf
42
42
  MediLink/MediLink_837p_utilities.py,sha256=AJ0F22LoF8du20zPBH4TZXgsdXCD-1qYKBnHJM-mXl0,16260
43
43
  MediLink/MediLink_API_Generator.py,sha256=VZBL9W8yFTMJ4ikSwbUI8ANtaJCLnUyqoF8xQEJQn_E,11176
44
44
  MediLink/MediLink_Azure.py,sha256=Ow70jctiHFIylskBExN7WUoRgrKOvBR6jNTnQMk6lJA,210
45
+ MediLink/MediLink_Charges.py,sha256=82fnqHGvT7tfdfjucnFHiLdUE0WhHDXrcS0k_Ln3c8U,19951
45
46
  MediLink/MediLink_ClaimStatus.py,sha256=75LzWfYaxrLWelId-8rHHN_lchHXxAe34pRgvKPdP2o,22118
46
47
  MediLink/MediLink_DataMgmt.py,sha256=9hc5jyWU65nYT66afDybOyYAcW-DvEYuHpWTun96U50,52407
47
48
  MediLink/MediLink_Decoder.py,sha256=1gzdybNg4Vv69s5PNbX8bPNrXT_N_kPpFpt2HpkauWA,16430
48
- MediLink/MediLink_Deductible.py,sha256=ur2gEy286HarC66yuKD917Q3dMgFhTbKJZFfUMHHTk4,46445
49
- MediLink/MediLink_Deductible_Validator.py,sha256=EL1U4dv08aSmDr6badx4MQbF2d_1oZP1pJ9L4EIt6rc,22850
49
+ MediLink/MediLink_Deductible.py,sha256=keCowIgT0LpHCnpv0KCfsnHQ0_-uTMDEpI88bcCYHgo,51597
50
+ MediLink/MediLink_Deductible_Validator.py,sha256=Hl15LKim1BuJS7Qv9Iulg-L8dNfZRoLbvAxqO7CF2E0,24756
50
51
  MediLink/MediLink_Display_Utils.py,sha256=QyHk23VU1rJtNZr_QhtL76Avo66CEc7MZU84uIs-1Lo,4187
51
52
  MediLink/MediLink_Down.py,sha256=s4_z-RaqHYanjwbQCl-OSkg4XIpcIQ2Q6jXa8-q_QXw,28111
52
53
  MediLink/MediLink_Gmail.py,sha256=8iQjqcJMSa_Zfr5azR0dShKAQeXqt-9C-s8seYB9pic,23961
@@ -61,7 +62,7 @@ MediLink/MediLink_insurance_utils.py,sha256=g741Fj2K26cMy0JX5d_XavMw9LgkK6hjaUJY
61
62
  MediLink/MediLink_main.py,sha256=ZVK2UsgSxC9UqgIYfgVu95ugULcH6-11l67jsf4vdJc,22132
62
63
  MediLink/MediLink_smart_import.py,sha256=B5SfBn_4bYEWJJDolXbjnwKx_-MaqGZ76LyXQwWDV80,9838
63
64
  MediLink/Soumit_api.py,sha256=5JfOecK98ZC6NpZklZW2AkOzkjvrbYxpJpZNH3rFxDw,497
64
- MediLink/__init__.py,sha256=zj7BNFQlhRxbYQgwt_-dmYdyu-VDQNrdJHCm6PblwTg,3888
65
+ MediLink/__init__.py,sha256=oBklYUTgNaYRW0888MbQSQXne2XoMQREbwvm51o6RBw,3888
65
66
  MediLink/gmail_http_utils.py,sha256=gtqCCrzJC7e8JFQzMNrf7EbK8na2h4sfTu-NMaZ_UHc,4006
66
67
  MediLink/gmail_oauth_utils.py,sha256=Ugr-DEqs4_RddRMSCJ_dbgA3TVeaxpbAor-dktcTIgY,3713
67
68
  MediLink/insurance_type_integration_test.py,sha256=pz2OCXitAznqDciYn6OL9M326m9CYU7YiK-ynssdQ5g,15172
@@ -71,9 +72,9 @@ MediLink/test_cob_library.py,sha256=wUMv0-Y6fNsKcAs8Z9LwfmEBRO7oBzBAfWmmzwoNd1g,
71
72
  MediLink/test_timing.py,sha256=yH2b8QPLDlp1Zy5AhgtjzjnDHNGhAD16ZtXtZzzESZw,2042
72
73
  MediLink/test_validation.py,sha256=FJrfdUFK--xRScIzrHCg1JeGdm0uJEoRnq6CgkP2lwM,4154
73
74
  MediLink/webapp.html,sha256=JPKT559aFVBi1r42Hz7C77Jj0teZZRumPhBev8eSOLk,19806
74
- medicafe-0.250820.7.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
75
- medicafe-0.250820.7.dist-info/METADATA,sha256=1sX-OtFCWg0ZhIqSFPeqXRHYdByy5UILOhaWePF4jnY,3414
76
- medicafe-0.250820.7.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
77
- medicafe-0.250820.7.dist-info/entry_points.txt,sha256=m3RBUBjr-xRwEkKJ5W4a7NlqHZP_1rllGtjZnrRqKe8,52
78
- medicafe-0.250820.7.dist-info/top_level.txt,sha256=U6-WBJ9RCEjyIs0BlzbQq_PwedCp_IV9n1616NNV5zA,26
79
- medicafe-0.250820.7.dist-info/RECORD,,
75
+ medicafe-0.250822.2.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
76
+ medicafe-0.250822.2.dist-info/METADATA,sha256=ag9Zmat9QfSGx9WI-dtq1zTDt3hzmAGE7WwPs0i6-S8,3414
77
+ medicafe-0.250822.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
78
+ medicafe-0.250822.2.dist-info/entry_points.txt,sha256=m3RBUBjr-xRwEkKJ5W4a7NlqHZP_1rllGtjZnrRqKe8,52
79
+ medicafe-0.250822.2.dist-info/top_level.txt,sha256=U6-WBJ9RCEjyIs0BlzbQq_PwedCp_IV9n1616NNV5zA,26
80
+ medicafe-0.250822.2.dist-info/RECORD,,