medicafe 0.251023.0__tar.gz → 0.251023.1__tar.gz
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.
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/__init__.py +1 -1
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/__init__.py +1 -1
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Up.py +31 -25
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/__init__.py +1 -1
- {medicafe-0.251023.0/medicafe.egg-info → medicafe-0.251023.1}/PKG-INFO +1 -1
- {medicafe-0.251023.0 → medicafe-0.251023.1/medicafe.egg-info}/PKG-INFO +1 -1
- {medicafe-0.251023.0 → medicafe-0.251023.1}/setup.py +1 -1
- {medicafe-0.251023.0 → medicafe-0.251023.1}/LICENSE +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MANIFEST.in +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot.bat +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_Charges.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_Crosswalk_Library.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_Crosswalk_Utils.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_Notepad_Utils.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_Post.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_Preprocessor.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_Preprocessor_lib.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_UI.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_dataformat_library.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_debug.bat +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_docx_decoder.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/MediBot_smart_import.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/clear_cache.bat +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/crash_diagnostic.bat +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/f_drive_diagnostic.bat +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/full_debug_suite.bat +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/get_medicafe_version.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/process_csvs.bat +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/update_json.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediBot/update_medicafe.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/MediLink_ConfigLoader.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/__main__.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/api_core.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/api_factory.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/api_utils.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/core_utils.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/deductible_utils.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/error_reporter.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/graphql_utils.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/logging_config.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/logging_demo.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/migration_helpers.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/smart_import.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediCafe/submission_index.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/InsuranceTypeService.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_837p_cob_library.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_837p_encoder.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_837p_encoder_library.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_837p_utilities.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_API_Generator.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Azure.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Charges.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_ClaimStatus.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_DataMgmt.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Decoder.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Deductible.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Deductible_Validator.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Display_Utils.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Down.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Gmail.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Mailer.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Parser.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_PatientProcessor.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Scan.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_Scheduler.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_UI.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_insurance_utils.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_main.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/MediLink_smart_import.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/Soumit_api.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/gmail_http_utils.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/gmail_oauth_utils.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/openssl.cnf +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/test.py +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/MediLink/webapp.html +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/README.md +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/medicafe.egg-info/SOURCES.txt +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/medicafe.egg-info/dependency_links.txt +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/medicafe.egg-info/entry_points.txt +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/medicafe.egg-info/not-zip-safe +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/medicafe.egg-info/requires.txt +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/medicafe.egg-info/top_level.txt +0 -0
- {medicafe-0.251023.0 → medicafe-0.251023.1}/setup.cfg +0 -0
|
@@ -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:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|