medicafe 0.250723.2__tar.gz → 0.250723.4__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.250723.2 → medicafe-0.250723.4}/MediBot/MediBot.py +6 -3
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/MediBot_UI.py +14 -4
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_837p_encoder_library.py +4 -4
- {medicafe-0.250723.2 → medicafe-0.250723.4}/PKG-INFO +1 -1
- {medicafe-0.250723.2 → medicafe-0.250723.4}/medicafe.egg-info/PKG-INFO +1 -1
- {medicafe-0.250723.2 → medicafe-0.250723.4}/setup.py +1 -1
- {medicafe-0.250723.2 → medicafe-0.250723.4}/LICENSE +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MANIFEST.in +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/MediBot.bat +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/MediBot_Charges.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/MediBot_Crosswalk_Library.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/MediBot_Post.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/MediBot_Preprocessor.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/MediBot_Preprocessor_lib.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/MediBot_dataformat_library.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/MediBot_docx_decoder.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/PDF_to_CSV_Cleaner.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/__init__.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/update_json.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediBot/update_medicafe.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_837p_cob_library.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_837p_encoder.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_837p_utilities.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_API_Generator.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_API_v2.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_API_v3.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_APIs.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Azure.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_ClaimStatus.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_ConfigLoader.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_DataMgmt.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Decoder.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Deductible.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Deductible_Validator.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Down.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Gmail.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_GraphQL.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Mailer.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Parser.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Scan.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Scheduler.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_UI.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_Up.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/MediLink_batch.bat +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/Soumit_api.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/__init__.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/openssl.cnf +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/test.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/test_cob_library.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/test_validation.py +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/MediLink/webapp.html +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/README.md +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/medicafe.egg-info/SOURCES.txt +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/medicafe.egg-info/dependency_links.txt +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/medicafe.egg-info/not-zip-safe +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/medicafe.egg-info/requires.txt +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/medicafe.egg-info/top_level.txt +0 -0
- {medicafe-0.250723.2 → medicafe-0.250723.4}/setup.cfg +0 -0
|
@@ -393,9 +393,11 @@ if __name__ == "__main__":
|
|
|
393
393
|
|
|
394
394
|
# Check if there are patients left to process
|
|
395
395
|
if len(patients_to_process) == 0:
|
|
396
|
-
|
|
396
|
+
print("\nAll patients have been processed. Continue anyway?: ", end='', flush=True)
|
|
397
|
+
proceed = input().lower().strip() in ['yes', 'y']
|
|
397
398
|
else:
|
|
398
|
-
|
|
399
|
+
print("\nDo you want to proceed with the {} remaining patient(s)? (yes/no): ".format(len(patients_to_process)), end='', flush=True)
|
|
400
|
+
proceed = input().lower().strip() in ['yes', 'y']
|
|
399
401
|
|
|
400
402
|
# TODO: Here is where we need to add the step where we move to MediBot_Charges.
|
|
401
403
|
# The return is an enriched dataset to be picked up by MediBot which means we need to return:
|
|
@@ -406,7 +408,8 @@ if __name__ == "__main__":
|
|
|
406
408
|
print(" Press 'F8' to create a New Patient.")
|
|
407
409
|
print(" Press 'F12' to begin data entry.")
|
|
408
410
|
print(" Press 'F11' at any time to Pause.")
|
|
409
|
-
|
|
411
|
+
print("\n*** Press [Enter] when ready to begin! ***")
|
|
412
|
+
input()
|
|
410
413
|
MediLink_ConfigLoader.log("Opening Medisoft...")
|
|
411
414
|
open_medisoft(app_control.get_medisoft_shortcut())
|
|
412
415
|
app_control.set_pause_status(True)
|
|
@@ -147,7 +147,8 @@ def display_patient_selection_menu(csv_data, reverse_mapping, proceed_as_medicar
|
|
|
147
147
|
selected_indices, selected_patient_ids = display_patient_list(csv_data, reverse_mapping, exclude_medicare=True)
|
|
148
148
|
|
|
149
149
|
print("-" * 60)
|
|
150
|
-
|
|
150
|
+
print("\nDo you want to proceed with the selected patients? (yes/no): ", end='', flush=True)
|
|
151
|
+
proceed = input().lower().strip() in ['yes', 'y']
|
|
151
152
|
|
|
152
153
|
if not proceed:
|
|
153
154
|
display_menu_header("Patient Selection for Today's Data Entry")
|
|
@@ -156,7 +157,8 @@ def display_patient_selection_menu(csv_data, reverse_mapping, proceed_as_medicar
|
|
|
156
157
|
|
|
157
158
|
while True:
|
|
158
159
|
while True:
|
|
159
|
-
|
|
160
|
+
print("\nEnter the number(s) of the patients you wish to proceed with \n(e.g., 1,3,5): ", end='', flush=True)
|
|
161
|
+
selection = input().strip()
|
|
160
162
|
if not selection:
|
|
161
163
|
print("Invalid entry. Please provide at least one number.")
|
|
162
164
|
continue
|
|
@@ -194,6 +196,8 @@ def display_menu_header(title):
|
|
|
194
196
|
print("\n" + "-" * 60)
|
|
195
197
|
print(title)
|
|
196
198
|
print("-" * 60)
|
|
199
|
+
# Force flush for Windows XP compatibility
|
|
200
|
+
sys.stdout.flush()
|
|
197
201
|
|
|
198
202
|
def handle_user_interaction(interaction_mode, error_message):
|
|
199
203
|
# Import here to avoid circular imports
|
|
@@ -228,7 +232,8 @@ def handle_user_interaction(interaction_mode, error_message):
|
|
|
228
232
|
print("3: Go back two patients and redo")
|
|
229
233
|
print("4: Exit script")
|
|
230
234
|
print("-" * 60)
|
|
231
|
-
|
|
235
|
+
print("Enter your choice (1/2/3/4): ", end='', flush=True)
|
|
236
|
+
choice = input().strip()
|
|
232
237
|
|
|
233
238
|
if choice == '1':
|
|
234
239
|
print("Selected: 'Retry last entry'. Please press 'F12' to continue.")
|
|
@@ -254,10 +259,15 @@ def user_interaction(csv_data, interaction_mode, error_message, reverse_mapping)
|
|
|
254
259
|
|
|
255
260
|
if interaction_mode == 'triage':
|
|
256
261
|
display_menu_header(" =(^.^)= Welcome to MediBot! =(^.^)=")
|
|
262
|
+
|
|
263
|
+
# Force flush for Windows XP compatibility
|
|
264
|
+
sys.stdout.flush()
|
|
257
265
|
|
|
258
266
|
while True:
|
|
259
267
|
try:
|
|
260
|
-
|
|
268
|
+
# Use a more explicit prompt format for Windows XP
|
|
269
|
+
print("\nAm I processing Medicare patients? (yes/no): ", end='', flush=True)
|
|
270
|
+
response = input().lower().strip()
|
|
261
271
|
if response:
|
|
262
272
|
if response in ['yes', 'y']:
|
|
263
273
|
app_control.load_paths_from_config(medicare=True)
|
|
@@ -993,7 +993,7 @@ def validate_claim_data_for_837p(parsed_data, config, crosswalk):
|
|
|
993
993
|
# Update the crosswalk dictionary with the new pairing of diagnosis_code and medisoft_code
|
|
994
994
|
crosswalk['diagnosis_to_medisoft'][diagnosis_code] = medisoft_code
|
|
995
995
|
MediLink_ConfigLoader.log("Updated crosswalk with new diagnosis code: {}, for Medisoft code {}".format(diagnosis_code, medisoft_code), config, level="INFO")
|
|
996
|
-
print("\n
|
|
996
|
+
print("\n[SUCCESS] Added '{}' -> '{}' to crosswalk".format(diagnosis_code, medisoft_code))
|
|
997
997
|
print(" IMPORTANT: You must manually save this to crosswalk.json to persist the change!")
|
|
998
998
|
# TODO This needs to actually save the .json though which right now I'd like to route through the dedicated function for updating the crosswalk.
|
|
999
999
|
# TODO This should have been a validation exercise upstream and not a last minute check like this.
|
|
@@ -1030,7 +1030,7 @@ def validate_claim_data_for_837p(parsed_data, config, crosswalk):
|
|
|
1030
1030
|
crosswalk.setdefault('procedure_to_diagnosis', {})[procedure_code] = []
|
|
1031
1031
|
crosswalk['procedure_to_diagnosis'][procedure_code].append(diagnosis_code)
|
|
1032
1032
|
MediLink_ConfigLoader.log("Updated crosswalk with new procedure code: {}, for diagnosis code {}".format(procedure_code, diagnosis_code), config, level="INFO")
|
|
1033
|
-
print("\n
|
|
1033
|
+
print("\n[SUCCESS] Added '{}' -> ['{}'] to crosswalk".format(procedure_code, diagnosis_code))
|
|
1034
1034
|
print(" IMPORTANT: You must manually save this to crosswalk.json to persist the change!")
|
|
1035
1035
|
# TODO This needs to actually save the .json though which right now I'd like to route through the dedicated function for updating the crosswalk.
|
|
1036
1036
|
# TODO This should have been a validation exercise upstream and not a last minute check like this.
|
|
@@ -1063,9 +1063,9 @@ def validate_claim_data_for_837p(parsed_data, config, crosswalk):
|
|
|
1063
1063
|
raise ValueError("Cannot proceed without {} for patient {}".format(description, chart_number))
|
|
1064
1064
|
|
|
1065
1065
|
validated_data[field] = new_value
|
|
1066
|
-
print("\n
|
|
1066
|
+
print("\n[SUCCESS] Updated {} to '{}'".format(field, new_value))
|
|
1067
1067
|
|
|
1068
|
-
print("\n
|
|
1068
|
+
print("\n[SUCCESS] All claim data validated for patient {}".format(chart_number))
|
|
1069
1069
|
return validated_data
|
|
1070
1070
|
|
|
1071
1071
|
|
|
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
|