medicafe 0.251017.1__py3-none-any.whl → 0.251023.1__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.
Potentially problematic release.
This version of medicafe might be problematic. Click here for more details.
- MediBot/MediBot.py +77 -11
- MediBot/MediBot_Preprocessor_lib.py +1895 -1821
- MediBot/__init__.py +1 -1
- MediCafe/__init__.py +1 -1
- MediCafe/api_core.py +16 -0
- MediCafe/error_reporter.py +3 -0
- MediCafe/graphql_utils.py +40 -21
- MediLink/MediLink_Deductible.py +21 -0
- MediLink/MediLink_Up.py +31 -25
- MediLink/MediLink_main.py +22 -8
- MediLink/MediLink_smart_import.py +3 -2
- MediLink/__init__.py +1 -1
- {medicafe-0.251017.1.dist-info → medicafe-0.251023.1.dist-info}/METADATA +1 -1
- {medicafe-0.251017.1.dist-info → medicafe-0.251023.1.dist-info}/RECORD +18 -18
- {medicafe-0.251017.1.dist-info → medicafe-0.251023.1.dist-info}/LICENSE +0 -0
- {medicafe-0.251017.1.dist-info → medicafe-0.251023.1.dist-info}/WHEEL +0 -0
- {medicafe-0.251017.1.dist-info → medicafe-0.251023.1.dist-info}/entry_points.txt +0 -0
- {medicafe-0.251017.1.dist-info → medicafe-0.251023.1.dist-info}/top_level.txt +0 -0
MediBot/__init__.py
CHANGED
MediCafe/__init__.py
CHANGED
MediCafe/api_core.py
CHANGED
|
@@ -1464,6 +1464,22 @@ def get_eligibility_super_connector(client, payer_id, provider_last_name, search
|
|
|
1464
1464
|
print("[Eligibility] GraphQL error code={} desc={}".format(code, desc))
|
|
1465
1465
|
except Exception:
|
|
1466
1466
|
pass
|
|
1467
|
+
|
|
1468
|
+
# Terminal self-help hints for auth/authorization cases
|
|
1469
|
+
# Non-throwing hint emitter (kept outside core logic path)
|
|
1470
|
+
def _emit_hint_for_status(status_str):
|
|
1471
|
+
try:
|
|
1472
|
+
if status_str == '401':
|
|
1473
|
+
print("[Eligibility] Hint: Authentication failed. Verify client credentials/token and endpoint config.")
|
|
1474
|
+
elif status_str == '403':
|
|
1475
|
+
print("[Eligibility] Hint: Access denied. Verify providerTaxId/TIN and account permissions/roles for endpoint.")
|
|
1476
|
+
except Exception:
|
|
1477
|
+
pass
|
|
1478
|
+
|
|
1479
|
+
try:
|
|
1480
|
+
_emit_hint_for_status(str(sc_status))
|
|
1481
|
+
except Exception:
|
|
1482
|
+
pass
|
|
1467
1483
|
except Exception:
|
|
1468
1484
|
pass
|
|
1469
1485
|
|
MediCafe/error_reporter.py
CHANGED
|
@@ -229,6 +229,9 @@ def submit_support_bundle(zip_path):
|
|
|
229
229
|
elif code == 401:
|
|
230
230
|
print("[ERROR] Unauthorized (401). Check error_reporting.auth_token.")
|
|
231
231
|
return False
|
|
232
|
+
elif code == 403:
|
|
233
|
+
print("[ERROR] Forbidden (403). The receiver denied access. Verify REPORT_TOKEN and receiver permissions.")
|
|
234
|
+
return False
|
|
232
235
|
elif code == 413:
|
|
233
236
|
print("[ERROR] Too large (413). Consider reducing max log lines.")
|
|
234
237
|
return False
|
MediCafe/graphql_utils.py
CHANGED
|
@@ -268,6 +268,36 @@ class GraphQLQueryBuilder:
|
|
|
268
268
|
}
|
|
269
269
|
}
|
|
270
270
|
|
|
271
|
+
def _map_graphql_error_to_status_message(error):
|
|
272
|
+
"""Map provider GraphQL error to (statuscode, message) using simple heuristics.
|
|
273
|
+
Python 3.4-compatible; avoids dependencies and centralizes logic.
|
|
274
|
+
"""
|
|
275
|
+
try:
|
|
276
|
+
if not isinstance(error, dict):
|
|
277
|
+
return '500', 'GraphQL error: unknown format'
|
|
278
|
+
code = ((error.get('extensions', {}) or {}).get('code') or
|
|
279
|
+
error.get('code') or 'GRAPHQL_ERROR')
|
|
280
|
+
msg = (error.get('message') or error.get('description') or 'GraphQL error')
|
|
281
|
+
code_upper = str(code).upper()
|
|
282
|
+
msg_lower = str(msg).lower()
|
|
283
|
+
|
|
284
|
+
# 401 auth failures
|
|
285
|
+
if (code == 'UNAUTHORIZED_AUTHENTICATION_FAILED' or
|
|
286
|
+
('UNAUTH' in code_upper) or
|
|
287
|
+
('AUTHENTICATION' in code_upper)):
|
|
288
|
+
return '401', 'Authentication failed: {}'.format(msg)
|
|
289
|
+
|
|
290
|
+
# 403 authorization/access issues
|
|
291
|
+
if ('FORBIDDEN' in code_upper) or ('AUTHORIZATION' in code_upper) or ('ACCESS_DENIED' in code_upper) or \
|
|
292
|
+
('forbidden' in msg_lower) or ('permission' in msg_lower):
|
|
293
|
+
return '403', 'Authorization failed: {}'.format(msg)
|
|
294
|
+
|
|
295
|
+
# Default
|
|
296
|
+
return '500', '{}: {}'.format(code, msg)
|
|
297
|
+
except Exception:
|
|
298
|
+
return '500', 'GraphQL error: unknown'
|
|
299
|
+
|
|
300
|
+
|
|
271
301
|
class GraphQLResponseTransformer:
|
|
272
302
|
"""Transforms GraphQL responses to match REST API format"""
|
|
273
303
|
|
|
@@ -284,24 +314,15 @@ class GraphQLResponseTransformer:
|
|
|
284
314
|
Transformed response matching REST API format
|
|
285
315
|
"""
|
|
286
316
|
try:
|
|
287
|
-
# Check for authentication errors first
|
|
317
|
+
# Check for authentication/authorization errors first
|
|
288
318
|
if 'errors' in graphql_response:
|
|
289
319
|
error = graphql_response['errors'][0]
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
'message': 'Authentication failed: {}'.format(error_message),
|
|
297
|
-
'rawGraphQLResponse': graphql_response
|
|
298
|
-
}
|
|
299
|
-
else:
|
|
300
|
-
return {
|
|
301
|
-
'statuscode': '500',
|
|
302
|
-
'message': 'GraphQL error: {} - {}'.format(error_code, error_message),
|
|
303
|
-
'rawGraphQLResponse': graphql_response
|
|
304
|
-
}
|
|
320
|
+
statuscode, mapped_msg = _map_graphql_error_to_status_message(error)
|
|
321
|
+
return {
|
|
322
|
+
'statuscode': statuscode,
|
|
323
|
+
'message': mapped_msg,
|
|
324
|
+
'rawGraphQLResponse': graphql_response
|
|
325
|
+
}
|
|
305
326
|
|
|
306
327
|
# Check if GraphQL response has data
|
|
307
328
|
if 'data' not in graphql_response:
|
|
@@ -544,12 +565,10 @@ class GraphQLResponseTransformer:
|
|
|
544
565
|
# Handle GraphQL errors
|
|
545
566
|
if isinstance(graphql_response, dict) and 'errors' in graphql_response:
|
|
546
567
|
first_err = graphql_response['errors'][0] if graphql_response['errors'] else {}
|
|
547
|
-
|
|
548
|
-
msg = first_err.get('message') or first_err.get('description') or 'GraphQL error'
|
|
549
|
-
status = '401' if 'AUTH' in str(code).upper() else '500'
|
|
568
|
+
statuscode, mapped_msg = _map_graphql_error_to_status_message(first_err)
|
|
550
569
|
return {
|
|
551
|
-
'statuscode':
|
|
552
|
-
'message':
|
|
570
|
+
'statuscode': statuscode,
|
|
571
|
+
'message': mapped_msg,
|
|
553
572
|
'rawGraphQLResponse': graphql_response
|
|
554
573
|
}
|
|
555
574
|
|
MediLink/MediLink_Deductible.py
CHANGED
|
@@ -676,6 +676,27 @@ def get_eligibility_info(client, payer_id, provider_last_name, date_of_birth, me
|
|
|
676
676
|
error_messages_for_row.append("Extensions include {} detail record(s)".format(len(details)))
|
|
677
677
|
except Exception:
|
|
678
678
|
pass
|
|
679
|
+
|
|
680
|
+
# Provide concise terminal hints for 401/403 outcomes (XP-safe)
|
|
681
|
+
def _emit_hint(status_code):
|
|
682
|
+
try:
|
|
683
|
+
if status_code == '401':
|
|
684
|
+
h = "Hint: Authentication failed. Verify API credentials/token and endpoint configuration."
|
|
685
|
+
if h not in printed_messages:
|
|
686
|
+
print(h)
|
|
687
|
+
printed_messages.add(h)
|
|
688
|
+
elif status_code == '403':
|
|
689
|
+
h = "Hint: Access denied. Verify provider TIN/NPI and account permissions/roles."
|
|
690
|
+
if h not in printed_messages:
|
|
691
|
+
print(h)
|
|
692
|
+
printed_messages.add(h)
|
|
693
|
+
except Exception:
|
|
694
|
+
pass
|
|
695
|
+
|
|
696
|
+
try:
|
|
697
|
+
_emit_hint(super_connector_eligibility.get('statuscode'))
|
|
698
|
+
except Exception:
|
|
699
|
+
pass
|
|
679
700
|
|
|
680
701
|
# Check status code
|
|
681
702
|
if super_connector_eligibility:
|
MediLink/MediLink_Up.py
CHANGED
|
@@ -258,16 +258,22 @@ def submit_claims(detailed_patient_data_grouped_by_endpoint, config, crosswalk):
|
|
|
258
258
|
local_claims_path = cfg.get('local_claims_path', '.')
|
|
259
259
|
transmission_result = operate_winscp(operation_type, filtered_files, endpoint_cfg, local_claims_path, config)
|
|
260
260
|
success_dict = handle_transmission_result(transmission_result, config, operation_type, method)
|
|
261
|
+
# If we attempted uploads but could not derive any status, emit explicit failures per file
|
|
262
|
+
if (not success_dict) and filtered_files:
|
|
263
|
+
success_dict = {fp: (False, "No transfer status found in WinSCP log") for fp in filtered_files}
|
|
261
264
|
submission_results[endpoint] = success_dict
|
|
262
265
|
except FileNotFoundError as e:
|
|
263
|
-
|
|
264
|
-
|
|
266
|
+
msg = "Log file not found - {}".format(str(e))
|
|
267
|
+
print("Failed to transmit files to {}. Error: {}".format(endpoint, msg))
|
|
268
|
+
submission_results[endpoint] = {fp: (False, msg) for fp in (filtered_files or [])}
|
|
265
269
|
except IOError as e:
|
|
266
|
-
|
|
267
|
-
|
|
270
|
+
msg = "Input/output error - {}".format(str(e))
|
|
271
|
+
print("Failed to transmit files to {}. Error: {}".format(endpoint, msg))
|
|
272
|
+
submission_results[endpoint] = {fp: (False, msg) for fp in (filtered_files or [])}
|
|
268
273
|
except Exception as e:
|
|
269
|
-
|
|
270
|
-
|
|
274
|
+
msg = str(e)
|
|
275
|
+
print("Failed to transmit files to {}. Error: {}".format(endpoint, msg))
|
|
276
|
+
submission_results[endpoint] = {fp: (False, msg) for fp in (filtered_files or [])}
|
|
271
277
|
elif method == 'api':
|
|
272
278
|
# Transmit files via API
|
|
273
279
|
try:
|
|
@@ -284,10 +290,14 @@ def submit_claims(detailed_patient_data_grouped_by_endpoint, config, crosswalk):
|
|
|
284
290
|
response = {"error": "API module not available"}
|
|
285
291
|
api_responses.append((file_path, response))
|
|
286
292
|
success_dict = handle_transmission_result(api_responses, config, "api", method)
|
|
293
|
+
# If API call path yielded no status, emit explicit failures per file attempted
|
|
294
|
+
if (not success_dict) and filtered_files:
|
|
295
|
+
success_dict = {fp: (False, "No API response parsed") for fp in filtered_files}
|
|
287
296
|
submission_results[endpoint] = success_dict
|
|
288
297
|
except Exception as e:
|
|
289
|
-
|
|
290
|
-
|
|
298
|
+
msg = str(e)
|
|
299
|
+
print("Failed to transmit files via API to {}. Error: {}".format(endpoint, msg))
|
|
300
|
+
submission_results[endpoint] = {fp: (False, msg) for fp in (filtered_files or [])}
|
|
291
301
|
else:
|
|
292
302
|
print("No files were converted for transmission to {}.".format(endpoint))
|
|
293
303
|
else:
|
|
@@ -495,29 +505,25 @@ def prepare_receipt_data(submission_results):
|
|
|
495
505
|
log("File path: {}".format(file_path), level="DEBUG")
|
|
496
506
|
log("File result: {}".format(file_result), level="DEBUG")
|
|
497
507
|
|
|
498
|
-
|
|
499
|
-
# Unpack the tuple to get status and message
|
|
500
|
-
status, message = file_result
|
|
501
|
-
except ValueError as e:
|
|
502
|
-
file_result_length = len(file_result) if hasattr(file_result, '__len__') else 'Unknown'
|
|
503
|
-
error_msg = 'Too many values to unpack.' if 'too many values to unpack' in str(e) else \
|
|
504
|
-
'Not enough values to unpack.' if 'not enough values to unpack' in str(e) else \
|
|
505
|
-
'Value unpacking error.'
|
|
506
|
-
log("ValueError: {} for file_result: {} (Length: {})".format(error_msg, file_result, file_result_length), level="ERROR")
|
|
507
|
-
continue
|
|
508
|
-
except Exception as e:
|
|
509
|
-
tb = traceback.format_exc()
|
|
510
|
-
log("Unexpected error: {}. Traceback: {}".format(e, tb), level="ERROR")
|
|
511
|
-
continue
|
|
512
|
-
|
|
513
|
-
log("Status: {}, Message: {}".format(status, message), level="DEBUG")
|
|
514
|
-
|
|
508
|
+
# Ensure endpoint bucket exists even if result shape is unexpected
|
|
515
509
|
if endpoint not in receipt_data:
|
|
516
510
|
receipt_data[endpoint] = {
|
|
517
511
|
"patients": [],
|
|
518
512
|
"date_of_submission": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
519
513
|
}
|
|
520
514
|
|
|
515
|
+
# Normalize result tuple shape; on unexpected shape, degrade to (False, stringified)
|
|
516
|
+
try:
|
|
517
|
+
status, message = file_result
|
|
518
|
+
except Exception:
|
|
519
|
+
status = False
|
|
520
|
+
try:
|
|
521
|
+
message = str(file_result)
|
|
522
|
+
except Exception:
|
|
523
|
+
message = "Unknown result"
|
|
524
|
+
|
|
525
|
+
log("Status: {}, Message: {}".format(status, message), level="DEBUG")
|
|
526
|
+
|
|
521
527
|
# Parse patient details and add the result status and message
|
|
522
528
|
patient_data, _ = parse_837p_file(file_path)
|
|
523
529
|
for patient in patient_data:
|
MediLink/MediLink_main.py
CHANGED
|
@@ -41,6 +41,20 @@ if PERFORMANCE_LOGGING:
|
|
|
41
41
|
|
|
42
42
|
# NOTE: Configuration loading moved to function level to avoid import-time dependencies
|
|
43
43
|
|
|
44
|
+
# --- Safe logging helpers (XP/3.4.4 compatible) ---
|
|
45
|
+
def _safe_log(message, level="INFO"):
|
|
46
|
+
"""Attempt to log via MediLink logger, fallback to print on failure."""
|
|
47
|
+
try:
|
|
48
|
+
MediLink_ConfigLoader.log(message, level=level)
|
|
49
|
+
except Exception:
|
|
50
|
+
try:
|
|
51
|
+
print(message)
|
|
52
|
+
except Exception:
|
|
53
|
+
pass
|
|
54
|
+
|
|
55
|
+
def _safe_debug(message):
|
|
56
|
+
_safe_log(message, level="DEBUG")
|
|
57
|
+
|
|
44
58
|
# TODO There needs to be a crosswalk auditing feature right alongside where all the names get fetched during initial startup maybe?
|
|
45
59
|
# Vision:
|
|
46
60
|
# - Fast audit pass on startup with 3s timeout: report missing names/IDs, do not block.
|
|
@@ -181,8 +195,8 @@ def main_menu():
|
|
|
181
195
|
# Clear screen before showing menu header
|
|
182
196
|
try:
|
|
183
197
|
os.system('cls' if os.name == 'nt' else 'clear')
|
|
184
|
-
except Exception:
|
|
185
|
-
|
|
198
|
+
except Exception as e:
|
|
199
|
+
_safe_debug("Clear screen failed: {}".format(e)) # Fallback if cls/clear fails
|
|
186
200
|
|
|
187
201
|
# Display Welcome Message
|
|
188
202
|
welcome_start = time.time()
|
|
@@ -197,8 +211,8 @@ def main_menu():
|
|
|
197
211
|
uploaded, total = flush_queued_reports()
|
|
198
212
|
if total:
|
|
199
213
|
print("Queued reports: {} | Uploaded now: {}".format(total, uploaded))
|
|
200
|
-
except Exception:
|
|
201
|
-
|
|
214
|
+
except Exception as e:
|
|
215
|
+
_safe_log("Queue flush skipped due to error: {}".format(e), level="WARNING")
|
|
202
216
|
|
|
203
217
|
# Show message if new records were found during boot-time scan. TODO we need this to use the 'Last acknowledgements update:' timestamp to decide if it has already run in the last day so
|
|
204
218
|
# that we're not running it multiple times in rapid succession automatically. (user-initiated checks are fine like via selection of (1. Check for new remittances))
|
|
@@ -256,8 +270,8 @@ def main_menu():
|
|
|
256
270
|
_last_ack_updated_at = now_ts
|
|
257
271
|
# remove executed
|
|
258
272
|
_scheduled_ack_checks = [t for t in _scheduled_ack_checks if t > now_ts]
|
|
259
|
-
except Exception:
|
|
260
|
-
|
|
273
|
+
except Exception as e:
|
|
274
|
+
_safe_log("Scheduled acknowledgements check skipped: {}".format(e), level="WARNING")
|
|
261
275
|
|
|
262
276
|
# Define static menu options for consistent numbering
|
|
263
277
|
options = ["Check for new remittances", "Submit claims", "Exit", "Tools"]
|
|
@@ -269,8 +283,8 @@ def main_menu():
|
|
|
269
283
|
if _last_ack_updated_at:
|
|
270
284
|
ts_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(_last_ack_updated_at))
|
|
271
285
|
print("Last acknowledgements update: {}".format(ts_str))
|
|
272
|
-
except Exception:
|
|
273
|
-
|
|
286
|
+
except Exception as e:
|
|
287
|
+
_safe_debug("Display of last ack update failed: {}".format(e))
|
|
274
288
|
MediLink_UI.display_menu(options)
|
|
275
289
|
menu_display_end = time.time()
|
|
276
290
|
if PERFORMANCE_LOGGING:
|
|
@@ -55,8 +55,9 @@ except Exception as e:
|
|
|
55
55
|
medilink_ui = None
|
|
56
56
|
medilink_patient_processor = None
|
|
57
57
|
print("[+] Fallback to core components")
|
|
58
|
-
except:
|
|
59
|
-
|
|
58
|
+
except Exception as e:
|
|
59
|
+
# Keep non-blocking behavior; include reason for easier debugging
|
|
60
|
+
print("[-] Smart import system not available: {}".format(e))
|
|
60
61
|
api_core = None
|
|
61
62
|
logging_config = None
|
|
62
63
|
core_utils = None
|
MediLink/__init__.py
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=ABSqWikb_c1VSuR4n8Vh5YfOqzDCi2jnnp3sg_xOYg0,51092
|
|
3
3
|
MediBot/MediBot_Charges.py,sha256=a28if_f_IoazIHiqlaFosFnfEgEoCwb9LQ6aOyk5-D0,10704
|
|
4
4
|
MediBot/MediBot_Crosswalk_Library.py,sha256=6LrpRx2UKVeH3TspS9LpR93iw5M7nTqN6IYpC-6PPGE,26060
|
|
5
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=UsUUoleKvWsykIfOvOWwoPHNsWkxfegK20mtN8F4eLs,94583
|
|
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
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=7lelp32bmS8KzVwTwqzyx51MJ8n_H2bwZzh5BunNq1I,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
|
|
@@ -22,15 +22,15 @@ 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
24
|
MediCafe/MediLink_ConfigLoader.py,sha256=NoLb2YiJwlkrRYCt2PHvcFJ7yTIRWQCrsvkZIJWreM4,11141
|
|
25
|
-
MediCafe/__init__.py,sha256
|
|
25
|
+
MediCafe/__init__.py,sha256=-ViHo61nOxiFOpT0E-Scv2DUmAxY2zp9BJQA5eryfM8,5721
|
|
26
26
|
MediCafe/__main__.py,sha256=mRNyk3D9Ilnu2XhgVI_rut7r5Ro7UIKtwV871giAHI8,12992
|
|
27
|
-
MediCafe/api_core.py,sha256=
|
|
27
|
+
MediCafe/api_core.py,sha256=pkRh8oT3x1wWfdw7on0J4QQo2Bnb2IjYTPX0ONiz4Wc,91530
|
|
28
28
|
MediCafe/api_factory.py,sha256=I5AeJoyu6m7oCrjc2OvVvO_4KSBRutTsR1riiWhTZV0,12086
|
|
29
29
|
MediCafe/api_utils.py,sha256=KWQB0q1k5E6frOFFlKWcFpHNcqfrS7KJ_82672wbupw,14041
|
|
30
30
|
MediCafe/core_utils.py,sha256=XKUpyv7yKjIQ8iNrhD76PIURyt6GZxb98v0daiI7aaw,27303
|
|
31
31
|
MediCafe/deductible_utils.py,sha256=-ixDYwI3JNAyACrFjKqoX_hD3Awzownq441U0PSrwXw,64932
|
|
32
|
-
MediCafe/error_reporter.py,sha256=
|
|
33
|
-
MediCafe/graphql_utils.py,sha256=
|
|
32
|
+
MediCafe/error_reporter.py,sha256=YFp1kNWBw_8zVCd0YW6VV142-l9SrJ5LhNYdmKgu5uU,8326
|
|
33
|
+
MediCafe/graphql_utils.py,sha256=jo4CboMb9i5_qD0jkfrLbL87_Q3aFiwOntZhjF9fMsI,51928
|
|
34
34
|
MediCafe/logging_config.py,sha256=auT65LN5oDEXVhkMeLke63kJHTWxYf2o8YihAfQFgzU,5493
|
|
35
35
|
MediCafe/logging_demo.py,sha256=TwUhzafna5pMdN3zSKGrpUWRqX96F1JGGsSUtr3dygs,1975
|
|
36
36
|
MediCafe/migration_helpers.py,sha256=48GnP4xcgvDNNlzoWsKASCpF4H0KnyveHPbz6kjQy50,17737
|
|
@@ -47,7 +47,7 @@ MediLink/MediLink_Charges.py,sha256=82fnqHGvT7tfdfjucnFHiLdUE0WhHDXrcS0k_Ln3c8U,
|
|
|
47
47
|
MediLink/MediLink_ClaimStatus.py,sha256=nKX7QymhCULiaGfISYw_P0Eqy0TP6qKG4C2d3TdGFVo,22720
|
|
48
48
|
MediLink/MediLink_DataMgmt.py,sha256=9hc5jyWU65nYT66afDybOyYAcW-DvEYuHpWTun96U50,52407
|
|
49
49
|
MediLink/MediLink_Decoder.py,sha256=1gzdybNg4Vv69s5PNbX8bPNrXT_N_kPpFpt2HpkauWA,16430
|
|
50
|
-
MediLink/MediLink_Deductible.py,sha256=
|
|
50
|
+
MediLink/MediLink_Deductible.py,sha256=HsEykbZD5YZVjpipIiaFhcLMI-h7anB3E2yU6WQL91E,69358
|
|
51
51
|
MediLink/MediLink_Deductible_Validator.py,sha256=x6tHJOi88TblUpDPSH6QhIdXXRgr3rXI7kYPVGZYCgU,24998
|
|
52
52
|
MediLink/MediLink_Display_Utils.py,sha256=MonsX6VPbdvqwY_V8sHUYrXCS0fMKc4toJvG0oyr-V4,24872
|
|
53
53
|
MediLink/MediLink_Down.py,sha256=s4_z-RaqHYanjwbQCl-OSkg4XIpcIQ2Q6jXa8-q_QXw,28111
|
|
@@ -58,20 +58,20 @@ MediLink/MediLink_PatientProcessor.py,sha256=9r2w4p45d30Tn0kbXL3j5574MYOehP83tDi
|
|
|
58
58
|
MediLink/MediLink_Scan.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
59
|
MediLink/MediLink_Scheduler.py,sha256=UJvxhDvHraqra2_TlQVlGeh5jRFrrfK6nCVUHnKOEMY,38
|
|
60
60
|
MediLink/MediLink_UI.py,sha256=ZEJ14EGh7pDu1XjAdORDFiay4UtTsLNWwNSJ0prHFWg,10381
|
|
61
|
-
MediLink/MediLink_Up.py,sha256=
|
|
61
|
+
MediLink/MediLink_Up.py,sha256=rzhzmWa4F_el37bDlSauFl_08m-dWz2xiflf-vVRkwg,38453
|
|
62
62
|
MediLink/MediLink_insurance_utils.py,sha256=g741Fj2K26cMy0JX5d_XavMw9LgkK6hjaUJYfysT7t8,9301
|
|
63
|
-
MediLink/MediLink_main.py,sha256=
|
|
64
|
-
MediLink/MediLink_smart_import.py,sha256=
|
|
63
|
+
MediLink/MediLink_main.py,sha256=jWxh1ydNwBi07T4Aw9CRalBporvxpd1Akjfk_vbDuWY,25548
|
|
64
|
+
MediLink/MediLink_smart_import.py,sha256=ZUXvAkIA2Pk2uuyLZazKfKK8YGdkZt1VAeZo_ZSUyxk,9942
|
|
65
65
|
MediLink/Soumit_api.py,sha256=5JfOecK98ZC6NpZklZW2AkOzkjvrbYxpJpZNH3rFxDw,497
|
|
66
|
-
MediLink/__init__.py,sha256=
|
|
66
|
+
MediLink/__init__.py,sha256=qhMeErnGuFkRswJ7IS3FsN4lRL_iqoK58Rmd6acWPl0,3888
|
|
67
67
|
MediLink/gmail_http_utils.py,sha256=mYChIhkbA1oJaAJA-nY3XgHQY-H7zvZJUZPhUagomsI,4047
|
|
68
68
|
MediLink/gmail_oauth_utils.py,sha256=Ugr-DEqs4_RddRMSCJ_dbgA3TVeaxpbAor-dktcTIgY,3713
|
|
69
69
|
MediLink/openssl.cnf,sha256=76VdcGCykf0Typyiv8Wd1mMVKixrQ5RraG6HnfKFqTo,887
|
|
70
70
|
MediLink/test.py,sha256=DM_E8gEbhbVfTAm3wTMiNnK2GCD1e5eH6gwTk89QIc4,3116
|
|
71
71
|
MediLink/webapp.html,sha256=DwDYjVvluGJ7eDdvEogfKN4t24ZJRoIUuSBfCYCL-3w,21252
|
|
72
|
-
medicafe-0.
|
|
73
|
-
medicafe-0.
|
|
74
|
-
medicafe-0.
|
|
75
|
-
medicafe-0.
|
|
76
|
-
medicafe-0.
|
|
77
|
-
medicafe-0.
|
|
72
|
+
medicafe-0.251023.1.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
|
|
73
|
+
medicafe-0.251023.1.dist-info/METADATA,sha256=uuwTHoA-bNy4nKZav8pP1lpdbxvlv59hCewgt_KpX0M,3414
|
|
74
|
+
medicafe-0.251023.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
75
|
+
medicafe-0.251023.1.dist-info/entry_points.txt,sha256=m3RBUBjr-xRwEkKJ5W4a7NlqHZP_1rllGtjZnrRqKe8,52
|
|
76
|
+
medicafe-0.251023.1.dist-info/top_level.txt,sha256=U6-WBJ9RCEjyIs0BlzbQq_PwedCp_IV9n1616NNV5zA,26
|
|
77
|
+
medicafe-0.251023.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|