medicafe 0.250810.7__py3-none-any.whl → 0.250811.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.
@@ -0,0 +1,88 @@
1
+ import json
2
+ import os
3
+ import ssl
4
+ import requests
5
+ from http.server import BaseHTTPRequestHandler, HTTPServer
6
+
7
+
8
+ def generate_self_signed_cert(openssl_cnf_path, cert_file, key_file, log, subprocess_module):
9
+ log("Checking if certificate file exists: " + cert_file)
10
+ log("Checking if key file exists: " + key_file)
11
+
12
+ cert_needs_regeneration = True
13
+ if os.path.exists(cert_file):
14
+ try:
15
+ check_cmd = ['openssl', 'x509', '-in', cert_file, '-checkend', '86400', '-noout']
16
+ result = subprocess_module.call(check_cmd)
17
+ if result == 0:
18
+ log("Certificate is still valid")
19
+ cert_needs_regeneration = False
20
+ else:
21
+ log("Certificate is expired or will expire soon")
22
+ try:
23
+ if os.path.exists(cert_file):
24
+ os.remove(cert_file)
25
+ log("Deleted expired certificate file: {}".format(cert_file))
26
+ if os.path.exists(key_file):
27
+ os.remove(key_file)
28
+ log("Deleted expired key file: {}".format(key_file))
29
+ except Exception as e:
30
+ log("Error deleting expired certificate files: {}".format(e))
31
+ except Exception as e:
32
+ log("Error checking certificate expiration: {}".format(e))
33
+
34
+ if cert_needs_regeneration:
35
+ log("Generating self-signed SSL certificate...")
36
+ cmd = [
37
+ 'openssl', 'req', '-config', openssl_cnf_path, '-nodes', '-new', '-x509',
38
+ '-keyout', key_file,
39
+ '-out', cert_file,
40
+ '-days', '365',
41
+ '-sha256'
42
+ ]
43
+ try:
44
+ log("Running command: " + ' '.join(cmd))
45
+ result = subprocess_module.call(cmd)
46
+ log("Command finished with result: " + str(result))
47
+ if result != 0:
48
+ raise RuntimeError("Failed to generate self-signed certificate")
49
+ verify_cmd = ['openssl', 'x509', '-in', cert_file, '-text', '-noout']
50
+ verify_result = subprocess_module.call(verify_cmd)
51
+ if verify_result != 0:
52
+ raise RuntimeError("Generated certificate verification failed")
53
+ log("Self-signed SSL certificate generated and verified successfully.")
54
+ except Exception as e:
55
+ log("Error generating self-signed certificate: {}".format(e))
56
+ raise
57
+
58
+
59
+ def start_https_server(port, handler_cls, cert_file, key_file, log):
60
+ server_address = ('0.0.0.0', port)
61
+ httpd = HTTPServer(server_address, handler_cls)
62
+ log("Attempting to wrap socket with SSL. cert_file=" + cert_file + ", key_file=" + key_file)
63
+ httpd.socket = ssl.wrap_socket(httpd.socket, certfile=cert_file, keyfile=key_file, server_side=True)
64
+ log("Starting HTTPS server on port {}".format(port))
65
+ httpd.serve_forever()
66
+ return httpd
67
+
68
+
69
+ def inspect_token(access_token, log, delete_token_file_fn=None, stop_server_fn=None):
70
+ info_url = "https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={}".format(access_token)
71
+ try:
72
+ response = requests.get(info_url)
73
+ log("Token info: Status code {}, Body: {}".format(response.status_code, response.text))
74
+ if response.status_code == 200:
75
+ return response.json()
76
+ else:
77
+ log("Failed to inspect token. Status code: {}, Body: {}".format(response.status_code, response.text))
78
+ if response.status_code == 400 and "invalid_token" in response.text:
79
+ log("Access token is invalid. Deleting token.json and stopping the server.")
80
+ if delete_token_file_fn:
81
+ delete_token_file_fn()
82
+ if stop_server_fn:
83
+ stop_server_fn()
84
+ return None
85
+ return None
86
+ except Exception as e:
87
+ log("Exception during token inspection: {}".format(e))
88
+ return None
@@ -0,0 +1,98 @@
1
+ import json
2
+ import os
3
+ import time
4
+ import requests
5
+
6
+
7
+ def get_authorization_url(credentials_path, redirect_uri, scopes, log):
8
+ """
9
+ Build the Google OAuth authorization URL using the provided credentials file, redirect URI, and scopes.
10
+ """
11
+ with open(credentials_path, 'r') as credentials_file:
12
+ credentials = json.load(credentials_file)
13
+ client_id = credentials['web']['client_id']
14
+ auth_url = (
15
+ "https://accounts.google.com/o/oauth2/v2/auth?"
16
+ "response_type=code&"
17
+ "client_id={}&"
18
+ "redirect_uri={}&"
19
+ "scope={}&"
20
+ "access_type=offline&"
21
+ "prompt=consent"
22
+ ).format(client_id, redirect_uri, scopes)
23
+ log("Generated authorization URL: {}".format(auth_url))
24
+ return auth_url
25
+
26
+
27
+ def exchange_code_for_token(auth_code, credentials_path, redirect_uri, log, retries=3):
28
+ """
29
+ Exchange an authorization code for tokens using credentials; retries a few times on failure.
30
+ """
31
+ for attempt in range(retries):
32
+ try:
33
+ with open(credentials_path, 'r') as credentials_file:
34
+ credentials = json.load(credentials_file)
35
+ token_url = "https://oauth2.googleapis.com/token"
36
+ data = {
37
+ 'code': auth_code,
38
+ 'client_id': credentials['web']['client_id'],
39
+ 'client_secret': credentials['web']['client_secret'],
40
+ 'redirect_uri': redirect_uri,
41
+ 'grant_type': 'authorization_code'
42
+ }
43
+ response = requests.post(token_url, data=data)
44
+ log("Token exchange response: Status code {}, Body: {}".format(response.status_code, response.text))
45
+ token_response = response.json()
46
+ if response.status_code == 200:
47
+ token_response['token_time'] = time.time()
48
+ return token_response
49
+ else:
50
+ log("Token exchange failed: {}".format(token_response))
51
+ if attempt < retries - 1:
52
+ log("Retrying token exchange... (Attempt {}/{})".format(attempt + 1, retries))
53
+ except Exception as e:
54
+ log("Error during token exchange: {}".format(e))
55
+ return {}
56
+
57
+
58
+ def refresh_access_token(refresh_token, credentials_path, log):
59
+ """
60
+ Refresh an access token using the stored client credentials.
61
+ """
62
+ log("Refreshing access token.")
63
+ with open(credentials_path, 'r') as credentials_file:
64
+ credentials = json.load(credentials_file)
65
+ token_url = "https://oauth2.googleapis.com/token"
66
+ data = {
67
+ 'client_id': credentials['web']['client_id'],
68
+ 'client_secret': credentials['web']['client_secret'],
69
+ 'refresh_token': refresh_token,
70
+ 'grant_type': 'refresh_token'
71
+ }
72
+ response = requests.post(token_url, data=data)
73
+ log("Refresh token response: Status code {}, Body:\n {}".format(response.status_code, response.text))
74
+ if response.status_code == 200:
75
+ log("Access token refreshed successfully.")
76
+ return response.json()
77
+ else:
78
+ log("Failed to refresh access token. Status code: {}".format(response.status_code))
79
+ return {}
80
+
81
+
82
+ def is_valid_authorization_code(auth_code, log):
83
+ """
84
+ Validate auth code shape without side effects.
85
+ """
86
+ if auth_code and isinstance(auth_code, str) and len(auth_code) > 0:
87
+ return True
88
+ log("Invalid authorization code format: {}".format(auth_code))
89
+ return False
90
+
91
+
92
+ def clear_token_cache(token_path, log):
93
+ """
94
+ Delete token cache file if present.
95
+ """
96
+ if os.path.exists(token_path):
97
+ os.remove(token_path)
98
+ log("Cleared token cache.")
@@ -0,0 +1,138 @@
1
+ Metadata-Version: 2.1
2
+ Name: medicafe
3
+ Version: 0.250811.1
4
+ Summary: MediCafe
5
+ Home-page: https://github.com/katanada2/MediCafe
6
+ Author: Daniel Vidaud
7
+ Author-email: daniel@personalizedtransformation.com
8
+ License: MIT
9
+ Project-URL: Source, https://github.com/katanada2/MediCafe
10
+ Project-URL: Bug Tracker, https://github.com/katanada2/MediCafe/issues
11
+ Keywords: medicafe medibot medilink medisoft automation healthcare claims
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.4
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Requires-Python: >=3.4, <3.5
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: requests ==2.21.0
20
+ Requires-Dist: argparse ==1.4.0
21
+ Requires-Dist: tqdm ==4.14.0
22
+ Requires-Dist: python-docx ==0.8.11
23
+ Requires-Dist: PyYAML ==5.2
24
+ Requires-Dist: chardet ==3.0.4
25
+ Requires-Dist: cffi ==1.8.2
26
+ Requires-Dist: msal ==1.26.0
27
+ Requires-Dist: numpy ==1.11.3 ; platform_python_implementation != "CPython" or sys_platform != "win32" or python_version > "3.5"
28
+ Requires-Dist: pandas ==0.20.0 ; platform_python_implementation != "CPython" or sys_platform != "win32" or python_version > "3.5"
29
+ Requires-Dist: lxml ==4.2.0 ; platform_python_implementation != "CPython" or sys_platform != "win32" or python_version > "3.5"
30
+ Requires-Dist: numpy ==1.11.3 ; platform_python_implementation == "CPython" and sys_platform == "win32" and python_version <= "3.5" and extra == "binary"
31
+ Requires-Dist: pandas ==0.20.0 ; platform_python_implementation == "CPython" and sys_platform == "win32" and python_version <= "3.5" and extra == "binary"
32
+ Requires-Dist: lxml ==4.2.0 ; platform_python_implementation == "CPython" and sys_platform == "win32" and python_version <= "3.5" and extra == "binary"
33
+
34
+ # Documentation Consolidation Summary
35
+
36
+ ## ✅ COMPLETED: Markdown File Cleanup
37
+
38
+ ### Before: 200+ Markdown Files Scattered Everywhere
39
+ - **25+ files** in root directory
40
+ - **50+ files** in Obsidian_MediCafe directory
41
+ - **200+ files** in generated_clients directories
42
+ - **Total**: 275+ markdown files creating clutter
43
+
44
+ ### After: Clean, Organized Structure
45
+
46
+ #### Root Directory (2 files remaining)
47
+ - `DOCUMENTATION_CONSOLIDATION_SUMMARY.md` - This summary
48
+ - `MARKDOWN_CONSOLIDATION_PLAN.md` - The original plan
49
+
50
+ #### Organized Documentation Structure
51
+ ```
52
+ docs/
53
+ ├── implementation/ (9 files)
54
+ │ ├── README.md
55
+ │ ├── API_CLIENT_FACTORY_IMPLEMENTATION_PLAN.md
56
+ │ ├── API_CLIENT_FACTORY_IMPLEMENTATION_SUMMARY.md
57
+ │ ├── API_FACTORY_INSTALLATION_COMPLETE.md
58
+ │ ├── CORE_UTILS_OPTIMIZATION_PLAN.md
59
+ │ ├── CORE_UTILS_OPTIMIZATION_STATUS.md
60
+ │ ├── IMPORT_IMPROVEMENTS_SUMMARY.md
61
+ │ ├── IMPLEMENTATION_READY_SUMMARY.md
62
+ │ ├── SMART_IMPORT_AUDIT_AND_MIGRATION_COMPLETE.md
63
+ │ └── SMART_IMPORT_IMPLEMENTATION_SUMMARY.md
64
+ ├── fixes/ (6 files)
65
+ │ ├── README.md
66
+ │ ├── ADVANCED_PYTHON34_FIXES.md
67
+ │ ├── PATH_RESOLUTION_IMPROVEMENTS.md
68
+ │ ├── PYTHON34_COMPATIBILITY_FIXES.md
69
+ │ ├── PYTHON34_ADVANCED_COMPATIBILITY_FIXES.md
70
+ │ ├── XP_COMPATIBILITY_FIXES.md
71
+ │ └── XP_ERROR_HANDLING_SUMMARY.md
72
+ ├── reports/ (4 files)
73
+ │ ├── README.md
74
+ │ ├── 400_ERROR_INVESTIGATION_REPORT.md
75
+ │ ├── F_DRIVE_DIAGNOSTICS_SUMMARY.md
76
+ │ ├── INTEGRATION_TESTING_SUMMARY.md
77
+ │ └── MEDIBOT_INTEGRATION_TEST_REPORT.md
78
+ └── architecture/ (3 files)
79
+ ├── README.md
80
+ ├── CACHE_CLEARING_SOLUTION.md
81
+ ├── MEDICAFE_ENTRY_POINT_GUIDE.md
82
+ └── SWAGGER_CONSISTENCY_ANALYSIS.md
83
+ ```
84
+
85
+ #### Archived Auto-Generated Content
86
+ ```
87
+ archive/
88
+ ├── obsidian_docs/ (50+ auto-generated code docs)
89
+ └── generated_api_docs/ (200+ auto-generated Swagger docs)
90
+ ```
91
+
92
+ ## 🎯 Results Achieved
93
+
94
+ ### ✅ **Reduced Root Directory Clutter**
95
+ - **Before**: 25+ markdown files scattered in root
96
+ - **After**: Only 2 essential files remain
97
+
98
+ ### ✅ **Organized Documentation**
99
+ - **22 files** properly categorized and indexed
100
+ - **4 categories** with clear purposes and README files
101
+ - **Easy navigation** with descriptive file names
102
+
103
+ ### ✅ **Archived Auto-Generated Content**
104
+ - **250+ auto-generated files** moved to archive
105
+ - **Preserved for reference** but out of main codebase
106
+ - **Can be regenerated** if needed
107
+
108
+ ### ✅ **Improved Developer Experience**
109
+ - **Cleaner project structure**
110
+ - **Better findability** of documentation
111
+ - **Reduced cognitive load** when browsing codebase
112
+ - **Maintained historical context** in organized format
113
+
114
+ ## 📊 Statistics
115
+
116
+ | Metric | Before | After | Improvement |
117
+ |--------|--------|-------|-------------|
118
+ | Root directory files | 25+ | 2 | 92% reduction |
119
+ | Total markdown files | 275+ | 22 | 92% reduction |
120
+ | Organized categories | 0 | 4 | New structure |
121
+ | Index files | 0 | 4 | New navigation |
122
+
123
+ ## 🚀 Next Steps
124
+
125
+ 1. **Update any code references** to moved documentation files
126
+ 2. **Consider adding to .gitignore** for auto-generated content
127
+ 3. **Establish documentation standards** for future development
128
+ 4. **Regular cleanup schedule** to prevent future clutter
129
+
130
+ ## 📝 Notes
131
+
132
+ - All original content preserved
133
+ - Auto-generated files archived but not deleted
134
+ - Clear categorization makes finding documentation easier
135
+ - Index files provide navigation context
136
+ - Archive can be restored if needed
137
+
138
+ **Status**: ✅ **COMPLETE** - Major documentation cleanup successful!
@@ -1,13 +1,13 @@
1
- MediBot/MediBot.bat,sha256=GUmRX7D02jkR0Jiqckj4jE-P0fzJsgEe9KXKPigHEwU,25282
2
- MediBot/MediBot.py,sha256=G3QuSgyEizas4plYez1n-u8xigbbtYEgl1x6ZSTWsAw,34306
1
+ MediBot/MediBot.bat,sha256=qUMffDJvsiWWcuyPY43xpqLeFApgznspriWDnMuBXD0,24365
2
+ MediBot/MediBot.py,sha256=nKjYyBpQUR5ENrKsX5n30VJrUS84DdpLRhgCGZGJQy4,34671
3
3
  MediBot/MediBot_Charges.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  MediBot/MediBot_Crosswalk_Library.py,sha256=HZHbjKHhjLW2jERmLS6pEZOl-MUxUu1YwA6oUltfdkE,24693
5
5
  MediBot/MediBot_Crosswalk_Utils.py,sha256=HQXZUWDZF_LvOMLsdjlsDQ79Yi_IiqNVRKX2Cd0A6x8,38762
6
6
  MediBot/MediBot_Post.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  MediBot/MediBot_Preprocessor.py,sha256=zAcfyuE8wl9JRzLGsUnnXiHxAr-hbCCIB2M-Jb3LUqI,16203
8
- MediBot/MediBot_Preprocessor_lib.py,sha256=L5VkBoSWuvvKNs0YoHz_-KQ5Z2hnqLJyM_j7yeKb9CM,72423
9
- MediBot/MediBot_UI.py,sha256=26Dx_KlNuVEwBLwmQ-uJ2fvOAbwiIYruX3-iXMtPKFc,13419
10
- MediBot/MediBot_dataformat_library.py,sha256=XCkwhpkDbhiSDQ_21xPafqJzZLoq-C0dczoN2Xl5tHE,10260
8
+ MediBot/MediBot_Preprocessor_lib.py,sha256=CWl0urrEYvbrqWeJ64U8npGcjxVvj6hgUZCBdekGAs4,72734
9
+ MediBot/MediBot_UI.py,sha256=h-vcf5zMPgbK2uiwOFaqUDHqgZ-sKZJ5VvaoTdpjMtE,14305
10
+ MediBot/MediBot_dataformat_library.py,sha256=dxh_SQQMEd9nCEeuBr-6E_Uu6enjLXeoyLpd45nUcZk,10771
11
11
  MediBot/MediBot_docx_decoder.py,sha256=gn7I7Ng5khVIzU0HTTOqi31YSSn1yW8Pyk-i_P9r1oA,32472
12
12
  MediBot/MediBot_smart_import.py,sha256=_ggP0I9djNwMGck04U6fNahrH7frVkoM8OzjtHbLUc0,6727
13
13
  MediBot/MediPost.py,sha256=C1hZJFr65rN6F_dckjdBxFC0vL2CoqY9W3YFqU5HXtE,336
@@ -16,14 +16,14 @@ MediBot/__init__.py,sha256=6IdVLXaWxV5ZdpefonWrC1R8RsJn4V26K0PmUEZ_vU8,3192
16
16
  MediBot/get_medicafe_version.py,sha256=uyL_UIE42MyFuJ3SRYxJp8sZx8xjTqlYZ3FdQuxLduY,728
17
17
  MediBot/update_json.py,sha256=vvUF4mKCuaVly8MmoadDO59M231fCIInc0KI1EtDtPA,3704
18
18
  MediBot/update_medicafe.py,sha256=i2-6b2y9XXaroPG8uP_RPFwOOsQSY_dTiuhl6vG8uoo,25693
19
- MediCafe/MediLink_ConfigLoader.py,sha256=_tB8FlJSNsRDHKL2X7XMmtLcxhCeXtiaddV-jOQWHi4,7723
19
+ MediCafe/MediLink_ConfigLoader.py,sha256=Ia79dZQBvgbc6CtOaNZVlFHaN-fvUmJRpmmVHz_MFv8,8205
20
20
  MediCafe/__init__.py,sha256=DF0XUu3G43AejXvEmd5aCyy0GDQahQD0pMwexmxem-E,5477
21
21
  MediCafe/__main__.py,sha256=mRNyk3D9Ilnu2XhgVI_rut7r5Ro7UIKtwV871giAHI8,12992
22
22
  MediCafe/api_core.py,sha256=AwnB2BMiBOMS_LKJlkHgd_lQPpE57WEYMfS-O-DeOzo,63851
23
23
  MediCafe/api_core_backup.py,sha256=Oy_Fqt0SEvGkQN1Oqw5iUPVFxPEokyju5CuPEb9k0OY,18686
24
24
  MediCafe/api_factory.py,sha256=I5AeJoyu6m7oCrjc2OvVvO_4KSBRutTsR1riiWhTZV0,12086
25
25
  MediCafe/api_utils.py,sha256=KWQB0q1k5E6frOFFlKWcFpHNcqfrS7KJ_82672wbupw,14041
26
- MediCafe/core_utils.py,sha256=IS6hhmMR02vmjdOLFak99mK0bA3w6qBEtm66CDLTz-Q,20686
26
+ MediCafe/core_utils.py,sha256=yftnn2pMhfUMEHfGl9ocvLoI8kQvsDjqrRZAR3uHdWo,26317
27
27
  MediCafe/graphql_utils.py,sha256=5i_pNCNRUXox2v5zraPzUw4n7rUt9ZEAkLqVa59LWAc,45713
28
28
  MediCafe/logging_config.py,sha256=auT65LN5oDEXVhkMeLke63kJHTWxYf2o8YihAfQFgzU,5493
29
29
  MediCafe/logging_demo.py,sha256=TwUhzafna5pMdN3zSKGrpUWRqX96F1JGGsSUtr3dygs,1975
@@ -49,7 +49,7 @@ MediLink/MediLink_Deductible_Validator.py,sha256=2g-lZd-Y5fJ1mfP87vM6oABg0t5Om-7
49
49
  MediLink/MediLink_Display_Utils.py,sha256=Bl15Ofqh09KIYsNXzM6WIE97Gp_4RVUw43J0NUzIERY,3121
50
50
  MediLink/MediLink_Down.py,sha256=vZEFNWa6drpXK8DCzt3DAlHdPGdhv3HoLnQh9cppT8o,11793
51
51
  MediLink/MediLink_ERA_decoder.py,sha256=MiOtDcXnmevPfHAahIlTLlUc14VcQWAor9Xa7clA2Ts,8710
52
- MediLink/MediLink_Gmail.py,sha256=SCaauKBSsBXBljfwqSxIfXEXd74nYTEBo20I9ZNJksI,36926
52
+ MediLink/MediLink_Gmail.py,sha256=C6tjw4Pd1wVHbCs97cvn4GCWIvwLT2Epc5ls0OoJ3Tg,23890
53
53
  MediLink/MediLink_GraphQL.py,sha256=O6OCaumT0zIC7YcIAwLOOYxiQnYhoMc48UL8ilNIBec,45720
54
54
  MediLink/MediLink_Mailer.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  MediLink/MediLink_Parser.py,sha256=w2ZD4minjwkaMz7nzP_r8v_Ow_uM5KHjpPSY8mIHcdE,9787
@@ -66,6 +66,8 @@ MediLink/MediLink_main.py,sha256=rvKHuZUus8RvMC5-flws2q-EvXETXiJmgU2USjzMu3g,134
66
66
  MediLink/MediLink_smart_import.py,sha256=B5SfBn_4bYEWJJDolXbjnwKx_-MaqGZ76LyXQwWDV80,9838
67
67
  MediLink/Soumit_api.py,sha256=5JfOecK98ZC6NpZklZW2AkOzkjvrbYxpJpZNH3rFxDw,497
68
68
  MediLink/__init__.py,sha256=Z4Uxt4XZk4n-GwAkUoEeFiL-D7xHbttYiiWGjgKT_ng,3391
69
+ MediLink/gmail_http_utils.py,sha256=gtqCCrzJC7e8JFQzMNrf7EbK8na2h4sfTu-NMaZ_UHc,4006
70
+ MediLink/gmail_oauth_utils.py,sha256=MLuzO6awBanV7Ee2gOUrkWrxz8-Htwz2BEIFjLw9Izs,3734
69
71
  MediLink/insurance_type_integration_test.py,sha256=pz2OCXitAznqDciYn6OL9M326m9CYU7YiK-ynssdQ5g,15172
70
72
  MediLink/openssl.cnf,sha256=76VdcGCykf0Typyiv8Wd1mMVKixrQ5RraG6HnfKFqTo,887
71
73
  MediLink/test.py,sha256=DM_E8gEbhbVfTAm3wTMiNnK2GCD1e5eH6gwTk89QIc4,3116
@@ -73,9 +75,9 @@ MediLink/test_cob_library.py,sha256=wUMv0-Y6fNsKcAs8Z9LwfmEBRO7oBzBAfWmmzwoNd1g,
73
75
  MediLink/test_timing.py,sha256=yH2b8QPLDlp1Zy5AhgtjzjnDHNGhAD16ZtXtZzzESZw,2042
74
76
  MediLink/test_validation.py,sha256=FJrfdUFK--xRScIzrHCg1JeGdm0uJEoRnq6CgkP2lwM,4154
75
77
  MediLink/webapp.html,sha256=JPKT559aFVBi1r42Hz7C77Jj0teZZRumPhBev8eSOLk,19806
76
- medicafe-0.250810.7.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
77
- medicafe-0.250810.7.dist-info/METADATA,sha256=5UlQ0WF3yu07a8mS6d-MZI_uCayxQ2-O43P6vii4Cjw,5501
78
- medicafe-0.250810.7.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
79
- medicafe-0.250810.7.dist-info/entry_points.txt,sha256=m3RBUBjr-xRwEkKJ5W4a7NlqHZP_1rllGtjZnrRqKe8,52
80
- medicafe-0.250810.7.dist-info/top_level.txt,sha256=U6-WBJ9RCEjyIs0BlzbQq_PwedCp_IV9n1616NNV5zA,26
81
- medicafe-0.250810.7.dist-info/RECORD,,
78
+ medicafe-0.250811.1.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
79
+ medicafe-0.250811.1.dist-info/METADATA,sha256=Mn330D_dskRP8TxT0gsVMoiuAIzuVh5K_0jOkIQI0QY,5663
80
+ medicafe-0.250811.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
81
+ medicafe-0.250811.1.dist-info/entry_points.txt,sha256=m3RBUBjr-xRwEkKJ5W4a7NlqHZP_1rllGtjZnrRqKe8,52
82
+ medicafe-0.250811.1.dist-info/top_level.txt,sha256=U6-WBJ9RCEjyIs0BlzbQq_PwedCp_IV9n1616NNV5zA,26
83
+ medicafe-0.250811.1.dist-info/RECORD,,
@@ -1,62 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: medicafe
3
- Version: 0.250810.7
4
- Summary: MediCafe
5
- Home-page: https://github.com/katanada2
6
- Author: Daniel Vidaud
7
- Author-email: daniel@personalizedtransformation.com
8
- License: MIT
9
- Keywords: medicafe python34 medibot medilink
10
- Description-Content-Type: text/markdown
11
- License-File: LICENSE
12
- Requires-Dist: requests ==2.21.0
13
- Requires-Dist: argparse ==1.4.0
14
- Requires-Dist: tqdm ==4.14.0
15
- Requires-Dist: python-docx ==0.8.11
16
- Requires-Dist: PyYAML ==5.2
17
- Requires-Dist: chardet ==3.0.4
18
- Requires-Dist: cffi ==1.8.2
19
- Requires-Dist: msal ==1.26.0
20
- Requires-Dist: numpy ==1.11.3 ; platform_python_implementation != "CPython" or sys_platform != "win32" or python_version > "3.5"
21
- Requires-Dist: pandas ==0.20.0 ; platform_python_implementation != "CPython" or sys_platform != "win32" or python_version > "3.5"
22
- Requires-Dist: lxml ==4.2.0 ; platform_python_implementation != "CPython" or sys_platform != "win32" or python_version > "3.5"
23
- Requires-Dist: numpy ==1.11.3 ; platform_python_implementation == "CPython" and sys_platform == "win32" and python_version <= "3.5" and extra == "binary"
24
- Requires-Dist: pandas ==0.20.0 ; platform_python_implementation == "CPython" and sys_platform == "win32" and python_version <= "3.5" and extra == "binary"
25
- Requires-Dist: lxml ==4.2.0 ; platform_python_implementation == "CPython" and sys_platform == "win32" and python_version <= "3.5" and extra == "binary"
26
-
27
-
28
- # Project Overview: MediCafe
29
-
30
- ## Project Description
31
- MediCafe is a comprehensive suite designed to automate and streamline several aspects of medical administrative tasks within Medisoft, a popular medical practice management software. The system consists of two main components: MediBot and MediLink, each serving distinct functions but integrated to enhance the workflow of medical practices.
32
-
33
- ## MediBot Module
34
- MediBot is primarily focused on automating data entry processes in Medisoft. It utilizes AutoHotkey scripting to control and automate the GUI interactions required for inputting patient data into Medisoft. Key features and functionalities include:
35
-
36
- - **Error Handling and Logging:** MediBot aims to implement a robust error handling mechanism that can log issues and provide feedback for troubleshooting.
37
- - **Insurance Mode Adjustments:** The system can adjust data inputs based on specific requirements from various insurance providers, including Medicare.
38
- - **Diagnosis Entry Automation:** MediBot automates the extraction and entry of diagnosis codes from surgical schedules into Medisoft.
39
- - **Script Efficiency:** The module enhances the efficiency of scripts handling Medisoft's quirks, such as fields that are skipped or require special navigation.
40
- - **User Interface (UI) Enhancements:** Plans to develop a graphical user interface to help non-technical users manage and execute scripts more easily.
41
- - **Documentation and Support:** Comprehensive documentation and support channels are being established to assist users in setup, configuration, and troubleshooting.
42
-
43
- ## MediLink Module
44
- MediLink focuses on the backend processes related to medical claims submission, particularly handling communications with multiple endpoints like Availity, Optum, and PNT Data. Its main features include:
45
-
46
- - **Dynamic Configurations:** Supports multiple endpoints with environmental settings to ensure flexibility in claims submission.
47
- - **File Detection and Integrity Checks:** Enhances the detection of new claim files with detailed logging and integrity checks for preprocessing validation.
48
- - **Automated Response Handling:** Automates the process of receiving and integrating response files from endpoints into Medisoft, alerting users to exceptions.
49
- - **Endpoint Management:** Allows dynamic updating of endpoints based on insurance provider changes, ensuring accurate and efficient claims processing.
50
- - **User Interface (UI) Interactions:** Provides a user interface for managing claims submission, including confirming or adjusting suggested endpoints.
51
-
52
- ## Integration and Workflow
53
- The two modules work in tandem to provide a seamless experience. MediBot handles the initial data entry into Medisoft, preparing the system with up-to-date patient and treatment information. This data is then utilized by MediLink for preparing and submitting medical claims to various insurance providers. Errors and feedback from MediLink can prompt adjustments in MediBot's data entry processes, creating a feedback loop that enhances accuracy and efficiency.
54
-
55
- The integration aims to reduce the administrative burden on medical practices, decrease the incidence of data entry errors, and ensure timely submission of medical claims, thereby improving the revenue cycle management of healthcare providers.
56
-
57
- ## Target Users
58
- The system is intended for use by administrative staff in medical practices who are responsible for patient data management and claims processing. By automating these tasks, the system not only saves time but also reduces the potential for human error, leading to more accurate billing and improved operational efficiency.
59
-
60
- ## Future Directions
61
- Future enhancements may include the development of additional modules for other aspects of medical practice management, further integrations with healthcare systems, and continuous improvements in user interface design to accommodate an even broader range of users.
62
-