medicafe 0.250822.3__py3-none-any.whl → 0.250912.0__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/MediBot.py +11 -4
- MediBot/MediBot_Crosswalk_Library.py +15 -2
- MediBot/MediBot_Crosswalk_Utils.py +12 -2
- MediBot/MediBot_Preprocessor_lib.py +1821 -1728
- MediBot/MediBot_docx_decoder.py +14 -3
- MediBot/__init__.py +1 -1
- MediCafe/MediLink_ConfigLoader.py +12 -1
- MediCafe/__init__.py +1 -1
- MediCafe/core_utils.py +8 -1
- MediCafe/deductible_utils.py +1233 -0
- MediLink/MediLink_837p_encoder_library.py +123 -39
- MediLink/MediLink_Deductible.py +524 -649
- MediLink/MediLink_Deductible_Validator.py +9 -3
- MediLink/MediLink_Display_Utils.py +44 -6
- MediLink/MediLink_Gmail.py +53 -1
- MediLink/MediLink_UI.py +20 -2
- MediLink/__init__.py +1 -1
- MediLink/webapp.html +1 -0
- {medicafe-0.250822.3.dist-info → medicafe-0.250912.0.dist-info}/METADATA +1 -1
- {medicafe-0.250822.3.dist-info → medicafe-0.250912.0.dist-info}/RECORD +24 -23
- {medicafe-0.250822.3.dist-info → medicafe-0.250912.0.dist-info}/LICENSE +0 -0
- {medicafe-0.250822.3.dist-info → medicafe-0.250912.0.dist-info}/WHEEL +0 -0
- {medicafe-0.250822.3.dist-info → medicafe-0.250912.0.dist-info}/entry_points.txt +0 -0
- {medicafe-0.250822.3.dist-info → medicafe-0.250912.0.dist-info}/top_level.txt +0 -0
@@ -19,6 +19,9 @@ def deep_search_for_value(data, target_value, path="", max_depth=10, current_dep
|
|
19
19
|
if current_depth > max_depth:
|
20
20
|
return []
|
21
21
|
|
22
|
+
if data is None:
|
23
|
+
return []
|
24
|
+
|
22
25
|
found_paths = []
|
23
26
|
|
24
27
|
if isinstance(data, dict):
|
@@ -54,7 +57,7 @@ def extract_legacy_values_for_comparison(legacy_data):
|
|
54
57
|
comparison_values = {}
|
55
58
|
|
56
59
|
if not legacy_data or "memberPolicies" not in legacy_data:
|
57
|
-
return
|
60
|
+
return {}
|
58
61
|
|
59
62
|
for policy in legacy_data.get("memberPolicies", []):
|
60
63
|
# Skip non-medical policies
|
@@ -341,6 +344,9 @@ def analyze_response_structure(data, max_depth=5):
|
|
341
344
|
if depth > max_depth:
|
342
345
|
return
|
343
346
|
|
347
|
+
if obj is None:
|
348
|
+
return
|
349
|
+
|
344
350
|
if isinstance(obj, dict):
|
345
351
|
for key, value in obj.items():
|
346
352
|
current_path = "{}.{}".format(path, key) if path else key
|
@@ -495,10 +501,10 @@ def run_validation_comparison(legacy_data, super_connector_data, output_file_pat
|
|
495
501
|
return validation_report
|
496
502
|
|
497
503
|
# Extract values from legacy response (handles None gracefully)
|
498
|
-
legacy_values = extract_legacy_values_for_comparison(legacy_data)
|
504
|
+
legacy_values = extract_legacy_values_for_comparison(legacy_data or {})
|
499
505
|
|
500
506
|
# Validate Super Connector response (handles None gracefully)
|
501
|
-
validation_report = validate_super_connector_response(legacy_values, super_connector_data)
|
507
|
+
validation_report = validate_super_connector_response(legacy_values, super_connector_data or {})
|
502
508
|
|
503
509
|
# Add API status information
|
504
510
|
if not legacy_data:
|
@@ -211,7 +211,8 @@ def _normalize_post_api_data(eligibility_result):
|
|
211
211
|
'status': str(eligibility_result.get('status', 'Processed')),
|
212
212
|
'insurance_type': str(eligibility_result.get('insurance_type', '')),
|
213
213
|
'policy_status': str(eligibility_result.get('policy_status', '')),
|
214
|
-
'remaining_amount': str(eligibility_result.get('remaining_amount', ''))
|
214
|
+
'remaining_amount': str(eligibility_result.get('remaining_amount', '')),
|
215
|
+
'data_source': str(eligibility_result.get('data_source', ''))
|
215
216
|
}
|
216
217
|
else:
|
217
218
|
MediLink_ConfigLoader.log("Unexpected eligibility result format: {}".format(type(eligibility_result)), level="WARNING")
|
@@ -317,7 +318,8 @@ def _calculate_column_widths(normalized_data, context):
|
|
317
318
|
widths.update({
|
318
319
|
'insurance_type': max(15, max(len(str(r.get('insurance_type', ''))) for r in normalized_data) if normalized_data else 15),
|
319
320
|
'policy_status': 12,
|
320
|
-
'remaining_amount': 12
|
321
|
+
'remaining_amount': 12,
|
322
|
+
'data_source': 10
|
321
323
|
})
|
322
324
|
|
323
325
|
return widths
|
@@ -350,12 +352,21 @@ def _display_table_header(col_widths, context):
|
|
350
352
|
"Policy Status", col_widths['policy_status'],
|
351
353
|
"Remaining Amt", col_widths['remaining_amount']
|
352
354
|
)
|
355
|
+
header_format += " | {:<{}}"
|
356
|
+
header += " | {}".format("Data Source", col_widths.get('data_source', 10))
|
353
357
|
print(header)
|
354
358
|
print("-" * len(header))
|
355
359
|
|
356
360
|
def _display_primary_line(record, line_number, col_widths, context):
|
357
361
|
"""Display primary line with line number"""
|
358
362
|
if context == "pre_api":
|
363
|
+
# Enhanced status display for pre-API context
|
364
|
+
status = record.get('status', '')
|
365
|
+
if status == 'Ready':
|
366
|
+
status_display = '[READY]'
|
367
|
+
else:
|
368
|
+
status_display = '[{}]'.format(status.upper())
|
369
|
+
|
359
370
|
line_format = "{:03d}: {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}}"
|
360
371
|
print(line_format.format(
|
361
372
|
line_number,
|
@@ -365,9 +376,18 @@ def _display_primary_line(record, line_number, col_widths, context):
|
|
365
376
|
str(record.get('member_id', ''))[:col_widths['member_id']], col_widths['member_id'],
|
366
377
|
str(record.get('payer_id', ''))[:col_widths['payer_id']], col_widths['payer_id'],
|
367
378
|
str(record.get('service_date_display', ''))[:col_widths['service_date']], col_widths['service_date'],
|
368
|
-
|
379
|
+
status_display[:col_widths['status']], col_widths['status']
|
369
380
|
))
|
370
381
|
else:
|
382
|
+
# Enhanced status display for post-API context
|
383
|
+
status = record.get('status', '')
|
384
|
+
if status == 'Processed':
|
385
|
+
status_display = '[DONE]'
|
386
|
+
elif status == 'Error':
|
387
|
+
status_display = '[ERROR]'
|
388
|
+
else:
|
389
|
+
status_display = '[{}]'.format(status.upper())
|
390
|
+
|
371
391
|
line_format = "{:03d}: {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}}"
|
372
392
|
print(line_format.format(
|
373
393
|
line_number,
|
@@ -379,7 +399,8 @@ def _display_primary_line(record, line_number, col_widths, context):
|
|
379
399
|
str(record.get('service_date_display', ''))[:col_widths['service_date']], col_widths['service_date'],
|
380
400
|
str(record.get('insurance_type', ''))[:col_widths['insurance_type']], col_widths['insurance_type'],
|
381
401
|
str(record.get('policy_status', ''))[:col_widths['policy_status']], col_widths['policy_status'],
|
382
|
-
str(record.get('remaining_amount', ''))[:col_widths['remaining_amount']], col_widths['remaining_amount']
|
402
|
+
str(record.get('remaining_amount', ''))[:col_widths['remaining_amount']], col_widths['remaining_amount'],
|
403
|
+
str(record.get('data_source', ''))[:col_widths['data_source']], col_widths['data_source']
|
383
404
|
))
|
384
405
|
|
385
406
|
def _display_secondary_line(record, col_widths, context):
|
@@ -391,6 +412,13 @@ def _display_secondary_line(record, col_widths, context):
|
|
391
412
|
payer_id_dashes = '-' * min(len(str(record.get('payer_id', ''))), col_widths['payer_id'])
|
392
413
|
|
393
414
|
if context == "pre_api":
|
415
|
+
# Enhanced status display for pre-API context
|
416
|
+
status = record.get('status', '')
|
417
|
+
if status == 'Ready':
|
418
|
+
status_display = '[READY]'
|
419
|
+
else:
|
420
|
+
status_display = '[{}]'.format(status.upper())
|
421
|
+
|
394
422
|
line_format = " {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}}"
|
395
423
|
print(line_format.format(
|
396
424
|
patient_id_dashes, col_widths['patient_id'],
|
@@ -399,12 +427,21 @@ def _display_secondary_line(record, col_widths, context):
|
|
399
427
|
member_id_dashes, col_widths['member_id'],
|
400
428
|
payer_id_dashes, col_widths['payer_id'],
|
401
429
|
str(record.get('service_date_display', ''))[:col_widths['service_date']], col_widths['service_date'],
|
402
|
-
|
430
|
+
status_display[:col_widths['status']], col_widths['status']
|
403
431
|
))
|
404
432
|
else:
|
405
433
|
insurance_type_dashes = '-' * min(len(str(record.get('insurance_type', ''))), col_widths['insurance_type'])
|
406
434
|
policy_status_dashes = '-' * min(len(str(record.get('policy_status', ''))), col_widths['policy_status'])
|
407
435
|
|
436
|
+
# Enhanced status display for post-API context
|
437
|
+
status = record.get('status', '')
|
438
|
+
if status == 'Processed':
|
439
|
+
status_display = '[DONE]'
|
440
|
+
elif status == 'Error':
|
441
|
+
status_display = '[ERROR]'
|
442
|
+
else:
|
443
|
+
status_display = '[{}]'.format(status.upper())
|
444
|
+
|
408
445
|
line_format = " {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}} | {:<{}}"
|
409
446
|
print(line_format.format(
|
410
447
|
patient_id_dashes, col_widths['patient_id'],
|
@@ -415,5 +452,6 @@ def _display_secondary_line(record, col_widths, context):
|
|
415
452
|
str(record.get('service_date_display', ''))[:col_widths['service_date']], col_widths['service_date'],
|
416
453
|
insurance_type_dashes, col_widths['insurance_type'],
|
417
454
|
policy_status_dashes, col_widths['policy_status'],
|
418
|
-
str(record.get('remaining_amount', ''))[:col_widths['remaining_amount']], col_widths['remaining_amount']
|
455
|
+
str(record.get('remaining_amount', ''))[:col_widths['remaining_amount']], col_widths['remaining_amount'],
|
456
|
+
str(record.get('data_source', ''))[:col_widths['data_source']], col_widths['data_source']
|
419
457
|
))
|
MediLink/MediLink_Gmail.py
CHANGED
@@ -185,10 +185,30 @@ class RequestHandler(BaseHTTPRequestHandler):
|
|
185
185
|
file_ids = [link.get('fileId', None) for link in links if link.get('fileId')]
|
186
186
|
log("File IDs received from client: {}".format(file_ids))
|
187
187
|
download_docx_files(links)
|
188
|
+
# Only delete files that actually downloaded successfully
|
189
|
+
downloaded_names = load_downloaded_emails()
|
190
|
+
successful_ids = []
|
191
|
+
try:
|
192
|
+
name_to_id = { (link.get('filename') or ''): link.get('fileId') for link in links if link.get('fileId') }
|
193
|
+
for name in downloaded_names:
|
194
|
+
fid = name_to_id.get(name)
|
195
|
+
if fid:
|
196
|
+
successful_ids.append(fid)
|
197
|
+
except Exception as e:
|
198
|
+
log("Error computing successful file IDs for cleanup: {}".format(e))
|
199
|
+
successful_ids = file_ids # Fallback: attempt all provided IDs
|
200
|
+
# Trigger cleanup in Apps Script with auth
|
201
|
+
try:
|
202
|
+
if successful_ids:
|
203
|
+
send_delete_request_to_gas(successful_ids)
|
204
|
+
else:
|
205
|
+
log("No successful file IDs to delete after download.")
|
206
|
+
except Exception as e:
|
207
|
+
log("Cleanup trigger failed: {}".format(e))
|
188
208
|
self.send_response(200)
|
189
209
|
self._set_headers()
|
190
210
|
self.end_headers()
|
191
|
-
response = json.dumps({"status": "success", "message": "All files downloaded", "fileIds":
|
211
|
+
response = json.dumps({"status": "success", "message": "All files downloaded", "fileIds": successful_ids})
|
192
212
|
self.wfile.write(response.encode('utf-8'))
|
193
213
|
shutdown_event.set()
|
194
214
|
bring_window_to_foreground()
|
@@ -437,6 +457,38 @@ def handle_post_response(url, payload, headers):
|
|
437
457
|
log("Unexpected error during link retrieval initiation: {}".format(e))
|
438
458
|
shutdown_event.set()
|
439
459
|
|
460
|
+
def send_delete_request_to_gas(file_ids):
|
461
|
+
"""Send a delete_files action to the Apps Script web app for the provided Drive file IDs.
|
462
|
+
Relies on OAuth token previously obtained. Sends user notifications via GAS.
|
463
|
+
"""
|
464
|
+
try:
|
465
|
+
medi = extract_medilink_config(config)
|
466
|
+
url = "https://script.google.com/macros/s/{}/exec".format(medi.get('webapp_deployment_id', ''))
|
467
|
+
access_token = get_access_token()
|
468
|
+
if not access_token:
|
469
|
+
log("Access token not found. Skipping cleanup request to GAS.")
|
470
|
+
return
|
471
|
+
headers = {'Authorization': 'Bearer {}'.format(access_token), 'Content-Type': 'application/json'}
|
472
|
+
payload = {"action": "delete_files", "fileIds": list(file_ids)}
|
473
|
+
log("Initiating cleanup request to GAS. Payload size: {} id(s)".format(len(file_ids)))
|
474
|
+
resp = requests.post(url, json=payload, headers=headers)
|
475
|
+
log("Cleanup response status: {}".format(resp.status_code))
|
476
|
+
# Print a concise console message
|
477
|
+
if resp.ok:
|
478
|
+
try:
|
479
|
+
body = resp.json()
|
480
|
+
msg = body.get('message', 'Files deleted successfully') if isinstance(body, dict) else 'Files deleted successfully'
|
481
|
+
except Exception:
|
482
|
+
msg = 'Files deleted successfully'
|
483
|
+
print("Cleanup complete: {} ({} file(s))".format(msg, len(file_ids)))
|
484
|
+
else:
|
485
|
+
print("Cleanup failed with status {}: {}".format(resp.status_code, resp.text))
|
486
|
+
if resp.status_code != 200:
|
487
|
+
raise RuntimeError("Cleanup request failed with status {}".format(resp.status_code))
|
488
|
+
except Exception as e:
|
489
|
+
log("Error sending delete request to GAS: {}".format(e))
|
490
|
+
print("Cleanup request error: {}".format(e))
|
491
|
+
|
440
492
|
def inspect_token(access_token):
|
441
493
|
return http_inspect_token(access_token, log, delete_token_file_fn=delete_token_file, stop_server_fn=stop_server)
|
442
494
|
|
MediLink/MediLink_UI.py
CHANGED
@@ -201,8 +201,26 @@ def select_and_adjust_files(detailed_patient_data, config, crosswalk):
|
|
201
201
|
)
|
202
202
|
if updated_crosswalk:
|
203
203
|
crosswalk = updated_crosswalk
|
204
|
-
#
|
205
|
-
#
|
204
|
+
# STRATEGIC NOTE (Medicare Crossover UI): High-risk implementation requiring strategic decisions
|
205
|
+
#
|
206
|
+
# CRITICAL QUESTIONS FOR IMPLEMENTATION:
|
207
|
+
# 1. **Crossover Detection**: How to detect Medicare crossover failures?
|
208
|
+
# - Automatic from claim status API responses?
|
209
|
+
# - Manual user indication?
|
210
|
+
# - Time-based detection (no crossover after X days)?
|
211
|
+
#
|
212
|
+
# 2. **Secondary Claim Workflow**: How should secondary claim creation be integrated?
|
213
|
+
# - Automatic prompt when crossover failure detected?
|
214
|
+
# - Manual option in patient management interface?
|
215
|
+
# - Batch processing for multiple failed crossovers?
|
216
|
+
#
|
217
|
+
# 3. **Data Requirements**: What data is needed for secondary claims?
|
218
|
+
# - Medicare payment amount (required vs optional)?
|
219
|
+
# - Denial/adjustment reasons from Medicare?
|
220
|
+
# - Secondary payer eligibility verification?
|
221
|
+
#
|
222
|
+
# To implement: Add crossover failure detection and secondary claim creation UI
|
223
|
+
# with proper validation and error handling for Medicare -> Secondary workflow
|
206
224
|
else:
|
207
225
|
print("Invalid selection. Keeping the current endpoint.")
|
208
226
|
data['confirmed_endpoint'] = current_effective_endpoint
|
MediLink/__init__.py
CHANGED
MediLink/webapp.html
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
MediBot/MediBot.bat,sha256=dWBZ2__t1uPvEuN76ETOD_mDo7368rP3tDrJd4MHCFY,26306
|
2
|
-
MediBot/MediBot.py,sha256=
|
2
|
+
MediBot/MediBot.py,sha256=9kpNZdNg3awxj0Oa5AszSZrcmyqhPZ0FHeYRHOeumBw,48750
|
3
3
|
MediBot/MediBot_Charges.py,sha256=a28if_f_IoazIHiqlaFosFnfEgEoCwb9LQ6aOyk5-D0,10704
|
4
|
-
MediBot/MediBot_Crosswalk_Library.py,sha256=
|
5
|
-
MediBot/MediBot_Crosswalk_Utils.py,sha256=
|
4
|
+
MediBot/MediBot_Crosswalk_Library.py,sha256=6LrpRx2UKVeH3TspS9LpR93iw5M7nTqN6IYpC-6PPGE,26060
|
5
|
+
MediBot/MediBot_Crosswalk_Utils.py,sha256=dFJRB_8q0iiAxZ2GY-2HsMl5Z7FvkXezzwx6LZoAglI,39589
|
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
|
-
MediBot/MediBot_Preprocessor_lib.py,sha256=
|
9
|
+
MediBot/MediBot_Preprocessor_lib.py,sha256=ELG0x8DSbByGbnoLOgiztzkYRBekiPb0BmxGw3cic1c,89210
|
10
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
|
-
MediBot/MediBot_docx_decoder.py,sha256=
|
13
|
+
MediBot/MediBot_docx_decoder.py,sha256=9BSjV-kB90VHnqfL_5iX4zl5u0HcHvHuL7YNfx3gXpQ,33143
|
14
14
|
MediBot/MediBot_smart_import.py,sha256=Emvz7NwemHGCHvG5kZcUyXMcCheidbGKaPfOTg-YCEs,6684
|
15
|
-
MediBot/__init__.py,sha256=
|
15
|
+
MediBot/__init__.py,sha256=qQFD1nDqRTlonmhV8IKcQ_g4jX8uq-324WBnu6VPHkY,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
|
@@ -21,13 +21,14 @@ MediBot/get_medicafe_version.py,sha256=uyL_UIE42MyFuJ3SRYxJp8sZx8xjTqlYZ3FdQuxLd
|
|
21
21
|
MediBot/process_csvs.bat,sha256=3tI7h1z9eRj8rUUL4wJ7dy-Qrak20lRmpAPtGbUMbVQ,3489
|
22
22
|
MediBot/update_json.py,sha256=vvUF4mKCuaVly8MmoadDO59M231fCIInc0KI1EtDtPA,3704
|
23
23
|
MediBot/update_medicafe.py,sha256=G1lyvVOHYuho1d-TJQNN6qaB4HBWaJ2PpXqemBoPlRQ,17937
|
24
|
-
MediCafe/MediLink_ConfigLoader.py,sha256=
|
25
|
-
MediCafe/__init__.py,sha256=
|
24
|
+
MediCafe/MediLink_ConfigLoader.py,sha256=zzI3cFe2_TdwgIW_UAVmY_LFFlLLdlmpCokouUqx6u0,10898
|
25
|
+
MediCafe/__init__.py,sha256=Mf3CjRb0clmeUsP85rpH75M-1q6ihAxK_d4LkIKXXo8,5721
|
26
26
|
MediCafe/__main__.py,sha256=mRNyk3D9Ilnu2XhgVI_rut7r5Ro7UIKtwV871giAHI8,12992
|
27
27
|
MediCafe/api_core.py,sha256=yNFfLO70bF91NNBLSUADYWZFkR5yh8NctxnT98fkAxk,78515
|
28
28
|
MediCafe/api_factory.py,sha256=I5AeJoyu6m7oCrjc2OvVvO_4KSBRutTsR1riiWhTZV0,12086
|
29
29
|
MediCafe/api_utils.py,sha256=KWQB0q1k5E6frOFFlKWcFpHNcqfrS7KJ_82672wbupw,14041
|
30
|
-
MediCafe/core_utils.py,sha256
|
30
|
+
MediCafe/core_utils.py,sha256=XKUpyv7yKjIQ8iNrhD76PIURyt6GZxb98v0daiI7aaw,27303
|
31
|
+
MediCafe/deductible_utils.py,sha256=bsI5YRO8QzaEU-sxi2F5zIx6k4D53rYUt0mlg-6-Jc8,57644
|
31
32
|
MediCafe/graphql_utils.py,sha256=xrREl0mqktEBkV6SZeAImuuDc8Sp2Q80rWxKIh-zD7Q,44499
|
32
33
|
MediCafe/logging_config.py,sha256=auT65LN5oDEXVhkMeLke63kJHTWxYf2o8YihAfQFgzU,5493
|
33
34
|
MediCafe/logging_demo.py,sha256=TwUhzafna5pMdN3zSKGrpUWRqX96F1JGGsSUtr3dygs,1975
|
@@ -37,7 +38,7 @@ MediCafe/submission_index.py,sha256=35gz8Anx1dIqG1I14GvuLY0nTO4dSBr2YsZwof9aIQg,
|
|
37
38
|
MediLink/InsuranceTypeService.py,sha256=FKWC1nRfKV_OtCDUtZustauXNhmCYDFiY9jsAGHPPUM,2178
|
38
39
|
MediLink/MediLink_837p_cob_library.py,sha256=glc7SJBDx0taCGmwmCs81GFJJcvA_D7nycIkTfmIuwE,30650
|
39
40
|
MediLink/MediLink_837p_encoder.py,sha256=lJnly96LsSBnzEgF8Ne-nQTL7cmRhoFL2fJajtpvOcU,32209
|
40
|
-
MediLink/MediLink_837p_encoder_library.py,sha256=
|
41
|
+
MediLink/MediLink_837p_encoder_library.py,sha256=E0jCyiyANZLpmWUW0GKT3-04FnX9yTBLnz7RukaGs5Q,91892
|
41
42
|
MediLink/MediLink_837p_utilities.py,sha256=AJ0F22LoF8du20zPBH4TZXgsdXCD-1qYKBnHJM-mXl0,16260
|
42
43
|
MediLink/MediLink_API_Generator.py,sha256=VZBL9W8yFTMJ4ikSwbUI8ANtaJCLnUyqoF8xQEJQn_E,11176
|
43
44
|
MediLink/MediLink_Azure.py,sha256=Ow70jctiHFIylskBExN7WUoRgrKOvBR6jNTnQMk6lJA,210
|
@@ -45,31 +46,31 @@ MediLink/MediLink_Charges.py,sha256=82fnqHGvT7tfdfjucnFHiLdUE0WhHDXrcS0k_Ln3c8U,
|
|
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=
|
49
|
-
MediLink/MediLink_Deductible_Validator.py,sha256=
|
50
|
-
MediLink/MediLink_Display_Utils.py,sha256=
|
49
|
+
MediLink/MediLink_Deductible.py,sha256=e_Oi5c55g4fTcPf-2hLnIRJ_Q_pBAyyXnTKiciQULd8,55208
|
50
|
+
MediLink/MediLink_Deductible_Validator.py,sha256=1h5GJ9jbcVarxd6a-lKPEOhJYz4QkeeBlHw0Zdd9vUU,24855
|
51
|
+
MediLink/MediLink_Display_Utils.py,sha256=a0t1VU9Mm_vhsXVTEA1EpUlElrnyie4XaCeif7GwRgw,21213
|
51
52
|
MediLink/MediLink_Down.py,sha256=s4_z-RaqHYanjwbQCl-OSkg4XIpcIQ2Q6jXa8-q_QXw,28111
|
52
|
-
MediLink/MediLink_Gmail.py,sha256=
|
53
|
+
MediLink/MediLink_Gmail.py,sha256=muqZI3girXDu92KT5Nft7dLHtpnQAjH-QfvdcGo28_Y,26801
|
53
54
|
MediLink/MediLink_Mailer.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
55
|
MediLink/MediLink_Parser.py,sha256=eRVZ4ckZ5gDOrcvtCUZP3DOd3Djly66rCIk0aYXLz14,12567
|
55
56
|
MediLink/MediLink_PatientProcessor.py,sha256=9r2w4p45d30Tn0kbXL3j5574MYOehP83tDirNOw_Aek,19977
|
56
57
|
MediLink/MediLink_Scan.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
57
58
|
MediLink/MediLink_Scheduler.py,sha256=UJvxhDvHraqra2_TlQVlGeh5jRFrrfK6nCVUHnKOEMY,38
|
58
|
-
MediLink/MediLink_UI.py,sha256=
|
59
|
+
MediLink/MediLink_UI.py,sha256=ZEJ14EGh7pDu1XjAdORDFiay4UtTsLNWwNSJ0prHFWg,10381
|
59
60
|
MediLink/MediLink_Up.py,sha256=uB6J63hWOn8Ot8iGtc2_OgcejNWVgnX7Se_e_UWBNho,38082
|
60
61
|
MediLink/MediLink_insurance_utils.py,sha256=g741Fj2K26cMy0JX5d_XavMw9LgkK6hjaUJYfysT7t8,9301
|
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=
|
65
|
+
MediLink/__init__.py,sha256=s8VBEZWSbjoUjImTCaf1eehxniFqXzuxPuI1Liy7sqA,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/openssl.cnf,sha256=76VdcGCykf0Typyiv8Wd1mMVKixrQ5RraG6HnfKFqTo,887
|
68
69
|
MediLink/test.py,sha256=DM_E8gEbhbVfTAm3wTMiNnK2GCD1e5eH6gwTk89QIc4,3116
|
69
|
-
MediLink/webapp.html,sha256=
|
70
|
-
medicafe-0.
|
71
|
-
medicafe-0.
|
72
|
-
medicafe-0.
|
73
|
-
medicafe-0.
|
74
|
-
medicafe-0.
|
75
|
-
medicafe-0.
|
70
|
+
MediLink/webapp.html,sha256=MI9zZ4y1_h5Ji3nz2fmm6Q29AsPunks-wR-R8Ct73-w,19856
|
71
|
+
medicafe-0.250912.0.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
|
72
|
+
medicafe-0.250912.0.dist-info/METADATA,sha256=EUFHElKptRUnDI5Lm1SlonbI_wQZwNmLG0tfHpgjkEM,3414
|
73
|
+
medicafe-0.250912.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
74
|
+
medicafe-0.250912.0.dist-info/entry_points.txt,sha256=m3RBUBjr-xRwEkKJ5W4a7NlqHZP_1rllGtjZnrRqKe8,52
|
75
|
+
medicafe-0.250912.0.dist-info/top_level.txt,sha256=U6-WBJ9RCEjyIs0BlzbQq_PwedCp_IV9n1616NNV5zA,26
|
76
|
+
medicafe-0.250912.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|