medicafe 0.250725.1__tar.gz → 0.250725.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.250725.1 → medicafe-0.250725.4}/MediBot/MediBot.py +54 -11
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/MediBot_UI.py +66 -21
- {medicafe-0.250725.1 → medicafe-0.250725.4}/PKG-INFO +1 -1
- {medicafe-0.250725.1 → medicafe-0.250725.4}/medicafe.egg-info/PKG-INFO +1 -1
- {medicafe-0.250725.1 → medicafe-0.250725.4}/setup.py +1 -1
- {medicafe-0.250725.1 → medicafe-0.250725.4}/LICENSE +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MANIFEST.in +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/MediBot.bat +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/MediBot_Charges.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/MediBot_Crosswalk_Library.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/MediBot_Post.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/MediBot_Preprocessor.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/MediBot_Preprocessor_lib.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/MediBot_dataformat_library.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/MediBot_docx_decoder.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/PDF_to_CSV_Cleaner.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/__init__.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/update_json.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediBot/update_medicafe.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_837p_cob_library.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_837p_encoder.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_837p_encoder_library.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_837p_utilities.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_API_Generator.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_API_v2.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_API_v3.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_APIs.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Azure.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_ClaimStatus.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_ConfigLoader.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_DataMgmt.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Decoder.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Deductible.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Deductible_Validator.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Down.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Gmail.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_GraphQL.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Mailer.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Parser.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Scan.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Scheduler.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_UI.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_Up.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/MediLink_batch.bat +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/Soumit_api.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/__init__.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/openssl.cnf +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/test.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/test_cob_library.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/test_validation.py +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/MediLink/webapp.html +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/README.md +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/medicafe.egg-info/SOURCES.txt +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/medicafe.egg-info/dependency_links.txt +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/medicafe.egg-info/not-zip-safe +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/medicafe.egg-info/requires.txt +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/medicafe.egg-info/top_level.txt +0 -0
- {medicafe-0.250725.1 → medicafe-0.250725.4}/setup.cfg +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#MediBot.py
|
|
2
|
-
import subprocess, os, tempfile, traceback, re, sys, time
|
|
2
|
+
import subprocess, os, tempfile, traceback, re, sys, time, msvcrt, ctypes
|
|
3
3
|
from collections import OrderedDict
|
|
4
4
|
import MediBot_dataformat_library
|
|
5
5
|
import MediBot_Preprocessor
|
|
@@ -12,6 +12,47 @@ sys.path.append(project_dir)
|
|
|
12
12
|
|
|
13
13
|
from MediLink import MediLink_ConfigLoader
|
|
14
14
|
|
|
15
|
+
def flush_console_input_buffer():
|
|
16
|
+
"""
|
|
17
|
+
Remove any keystrokes already sitting in the console input buffer.
|
|
18
|
+
Necessary on Windows XP where a stray CR/LF can remain after the
|
|
19
|
+
script is launched.
|
|
20
|
+
"""
|
|
21
|
+
if sys.platform != "win32":
|
|
22
|
+
return # no-op on non-Windows
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
|
|
26
|
+
STD_INPUT_HANDLE = -10
|
|
27
|
+
h_stdin = kernel32.GetStdHandle(STD_INPUT_HANDLE)
|
|
28
|
+
kernel32.FlushConsoleInputBuffer(h_stdin)
|
|
29
|
+
except Exception:
|
|
30
|
+
# Fallback: drain any leading newlines manually
|
|
31
|
+
while msvcrt.kbhit():
|
|
32
|
+
msvcrt.getch()
|
|
33
|
+
|
|
34
|
+
def discard_leading_blank():
|
|
35
|
+
"""
|
|
36
|
+
Alternative fallback that reads from stdin and discards leading newlines,
|
|
37
|
+
then puts back the first non-newline character for the real input() call.
|
|
38
|
+
"""
|
|
39
|
+
if sys.platform != "win32":
|
|
40
|
+
return # no-op on non-Windows
|
|
41
|
+
|
|
42
|
+
try:
|
|
43
|
+
while True:
|
|
44
|
+
ch = sys.stdin.read(1)
|
|
45
|
+
if ch not in ('\r', '\n'):
|
|
46
|
+
# put it back for the real input() call
|
|
47
|
+
msvcrt.ungetch(ch.encode())
|
|
48
|
+
break
|
|
49
|
+
elif not ch: # EOF
|
|
50
|
+
break
|
|
51
|
+
except Exception:
|
|
52
|
+
# If stdin.read fails, fall back to msvcrt approach
|
|
53
|
+
while msvcrt.kbhit():
|
|
54
|
+
msvcrt.getch()
|
|
55
|
+
|
|
15
56
|
try:
|
|
16
57
|
from MediBot_Crosswalk_Library import crosswalk_update
|
|
17
58
|
except ImportError:
|
|
@@ -400,22 +441,24 @@ if __name__ == "__main__":
|
|
|
400
441
|
sys.stdout.flush()
|
|
401
442
|
time.sleep(0.2) # Increased delay for Windows XP
|
|
402
443
|
|
|
403
|
-
#
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
444
|
+
# Flush console input buffer to remove any stray CR/LF
|
|
445
|
+
flush_console_input_buffer()
|
|
446
|
+
discard_leading_blank()
|
|
447
|
+
|
|
448
|
+
# Use sys.stdin.readline() for more reliable input on Windows XP
|
|
449
|
+
proceed = sys.stdin.readline().lower().strip() in ['yes', 'y']
|
|
408
450
|
else:
|
|
409
451
|
print("\nDo you want to proceed with the {} remaining patient(s)? (yes/no): ".format(len(patients_to_process)), end='', flush=True)
|
|
410
452
|
# Force flush and wait for Windows XP console buffer synchronization
|
|
411
453
|
sys.stdout.flush()
|
|
412
454
|
time.sleep(0.2) # Increased delay for Windows XP
|
|
413
455
|
|
|
414
|
-
#
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
456
|
+
# Flush console input buffer to remove any stray CR/LF
|
|
457
|
+
flush_console_input_buffer()
|
|
458
|
+
discard_leading_blank()
|
|
459
|
+
|
|
460
|
+
# Use sys.stdin.readline() for more reliable input on Windows XP
|
|
461
|
+
proceed = sys.stdin.readline().lower().strip() in ['yes', 'y']
|
|
419
462
|
|
|
420
463
|
# TODO: Here is where we need to add the step where we move to MediBot_Charges.
|
|
421
464
|
# The return is an enriched dataset to be picked up by MediBot which means we need to return:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#MediBot_UI.py
|
|
2
|
-
import ctypes, time, re, os, sys
|
|
2
|
+
import ctypes, time, re, os, sys, msvcrt
|
|
3
3
|
from ctypes import wintypes
|
|
4
4
|
from sys import exit
|
|
5
5
|
project_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
|
@@ -18,6 +18,47 @@ config, crosswalk = MediLink_ConfigLoader.load_configuration()
|
|
|
18
18
|
VK_END = int(config.get('VK_END', ""), 16) # Try F12 (7B). Virtual key code for 'End' (23)
|
|
19
19
|
VK_PAUSE = int(config.get('VK_PAUSE', ""), 16) # Try F11 (7A). Virtual-key code for 'Home' (24)
|
|
20
20
|
|
|
21
|
+
def flush_console_input_buffer():
|
|
22
|
+
"""
|
|
23
|
+
Remove any keystrokes already sitting in the console input buffer.
|
|
24
|
+
Necessary on Windows XP where a stray CR/LF can remain after the
|
|
25
|
+
script is launched.
|
|
26
|
+
"""
|
|
27
|
+
if sys.platform != "win32":
|
|
28
|
+
return # no-op on non-Windows
|
|
29
|
+
|
|
30
|
+
try:
|
|
31
|
+
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
|
|
32
|
+
STD_INPUT_HANDLE = -10
|
|
33
|
+
h_stdin = kernel32.GetStdHandle(STD_INPUT_HANDLE)
|
|
34
|
+
kernel32.FlushConsoleInputBuffer(h_stdin)
|
|
35
|
+
except Exception:
|
|
36
|
+
# Fallback: drain any leading newlines manually
|
|
37
|
+
while msvcrt.kbhit():
|
|
38
|
+
msvcrt.getch()
|
|
39
|
+
|
|
40
|
+
def discard_leading_blank():
|
|
41
|
+
"""
|
|
42
|
+
Alternative fallback that reads from stdin and discards leading newlines,
|
|
43
|
+
then puts back the first non-newline character for the real input() call.
|
|
44
|
+
"""
|
|
45
|
+
if sys.platform != "win32":
|
|
46
|
+
return # no-op on non-Windows
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
while True:
|
|
50
|
+
ch = sys.stdin.read(1)
|
|
51
|
+
if ch not in ('\r', '\n'):
|
|
52
|
+
# put it back for the real input() call
|
|
53
|
+
msvcrt.ungetch(ch.encode())
|
|
54
|
+
break
|
|
55
|
+
elif not ch: # EOF
|
|
56
|
+
break
|
|
57
|
+
except Exception:
|
|
58
|
+
# If stdin.read fails, fall back to msvcrt approach
|
|
59
|
+
while msvcrt.kbhit():
|
|
60
|
+
msvcrt.getch()
|
|
61
|
+
|
|
21
62
|
class AppControl:
|
|
22
63
|
def __init__(self):
|
|
23
64
|
self.script_paused = False
|
|
@@ -152,11 +193,12 @@ def display_patient_selection_menu(csv_data, reverse_mapping, proceed_as_medicar
|
|
|
152
193
|
sys.stdout.flush()
|
|
153
194
|
time.sleep(0.2) # Increased delay for Windows XP
|
|
154
195
|
|
|
155
|
-
#
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
196
|
+
# Flush console input buffer to remove any stray CR/LF
|
|
197
|
+
flush_console_input_buffer()
|
|
198
|
+
discard_leading_blank()
|
|
199
|
+
|
|
200
|
+
# Use sys.stdin.readline() for more reliable input on Windows XP
|
|
201
|
+
proceed = sys.stdin.readline().lower().strip() in ['yes', 'y']
|
|
160
202
|
|
|
161
203
|
if not proceed:
|
|
162
204
|
display_menu_header("Patient Selection for Today's Data Entry")
|
|
@@ -170,11 +212,12 @@ def display_patient_selection_menu(csv_data, reverse_mapping, proceed_as_medicar
|
|
|
170
212
|
sys.stdout.flush()
|
|
171
213
|
time.sleep(0.2) # Increased delay for Windows XP
|
|
172
214
|
|
|
173
|
-
#
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
215
|
+
# Flush console input buffer to remove any stray CR/LF
|
|
216
|
+
flush_console_input_buffer()
|
|
217
|
+
discard_leading_blank()
|
|
218
|
+
|
|
219
|
+
# Use sys.stdin.readline() for more reliable input on Windows XP
|
|
220
|
+
selection = sys.stdin.readline().strip()
|
|
178
221
|
if not selection:
|
|
179
222
|
print("Invalid entry. Please provide at least one number.")
|
|
180
223
|
continue
|
|
@@ -253,11 +296,12 @@ def handle_user_interaction(interaction_mode, error_message):
|
|
|
253
296
|
sys.stdout.flush()
|
|
254
297
|
time.sleep(0.2) # Increased delay for Windows XP
|
|
255
298
|
|
|
256
|
-
#
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
299
|
+
# Flush console input buffer to remove any stray CR/LF
|
|
300
|
+
flush_console_input_buffer()
|
|
301
|
+
discard_leading_blank()
|
|
302
|
+
|
|
303
|
+
# Use sys.stdin.readline() for more reliable input on Windows XP
|
|
304
|
+
choice = sys.stdin.readline().strip()
|
|
261
305
|
|
|
262
306
|
if choice == '1':
|
|
263
307
|
print("Selected: 'Retry last entry'. Please press 'F12' to continue.")
|
|
@@ -286,6 +330,10 @@ def user_interaction(csv_data, interaction_mode, error_message, reverse_mapping)
|
|
|
286
330
|
|
|
287
331
|
# Force flush for Windows XP compatibility
|
|
288
332
|
sys.stdout.flush()
|
|
333
|
+
|
|
334
|
+
# Flush console input buffer to remove any stray CR/LF from script launch
|
|
335
|
+
flush_console_input_buffer()
|
|
336
|
+
discard_leading_blank()
|
|
289
337
|
|
|
290
338
|
while True:
|
|
291
339
|
try:
|
|
@@ -295,11 +343,8 @@ def user_interaction(csv_data, interaction_mode, error_message, reverse_mapping)
|
|
|
295
343
|
sys.stdout.flush()
|
|
296
344
|
time.sleep(0.2) # Increased delay for Windows XP
|
|
297
345
|
|
|
298
|
-
#
|
|
299
|
-
|
|
300
|
-
response = raw_input().lower().strip()
|
|
301
|
-
except NameError:
|
|
302
|
-
response = input().lower().strip()
|
|
346
|
+
# Use sys.stdin.readline() for more reliable input on Windows XP
|
|
347
|
+
response = sys.stdin.readline().lower().strip()
|
|
303
348
|
|
|
304
349
|
if response:
|
|
305
350
|
if response in ['yes', 'y']:
|
|
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
|