medicafe 0.240925.9__tar.gz → 0.241015.0__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.240925.9 → medicafe-0.241015.0}/MediBot/MediBot.bat +17 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_837p_encoder_library.py +1 -1
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_API_v3.py +4 -3
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_Gmail.py +5 -5
- {medicafe-0.240925.9/medicafe.egg-info → medicafe-0.241015.0}/PKG-INFO +1 -1
- medicafe-0.241015.0/README.md +58 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0/medicafe.egg-info}/PKG-INFO +1 -1
- {medicafe-0.240925.9 → medicafe-0.241015.0}/setup.py +1 -1
- medicafe-0.240925.9/README.md +0 -42
- {medicafe-0.240925.9 → medicafe-0.241015.0}/LICENSE +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MANIFEST.in +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/MediBot.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/MediBot_Charges.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/MediBot_Crosswalk_Library.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/MediBot_Post.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/MediBot_Preprocessor.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/MediBot_Preprocessor_lib.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/MediBot_UI.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/MediBot_dataformat_library.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/MediBot_docx_decoder.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/PDF_to_CSV_Cleaner.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/__init__.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/update_json.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediBot/update_medicafe.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_837p_encoder.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_API_Generator.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_API_v2.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_APIs.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_ClaimStatus.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_ConfigLoader.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_DataMgmt.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_Decoder.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_Deductible.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_Down.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_Mailer.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_Parser.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_Scan.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_Scheduler.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_UI.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_Up.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/MediLink_batch.bat +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/Soumit_api.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/__init__.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/MediLink/test.py +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/medicafe.egg-info/SOURCES.txt +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/medicafe.egg-info/dependency_links.txt +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/medicafe.egg-info/not-zip-safe +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/medicafe.egg-info/requires.txt +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/medicafe.egg-info/top_level.txt +0 -0
- {medicafe-0.240925.9 → medicafe-0.241015.0}/setup.cfg +0 -0
|
@@ -4,6 +4,7 @@ setlocal enabledelayedexpansion
|
|
|
4
4
|
|
|
5
5
|
:: Define paths
|
|
6
6
|
set "source_folder=C:\MEDIANSI\MediCare"
|
|
7
|
+
set "local_storage_path=F:\Medibot\DOWNLOADS"
|
|
7
8
|
set "target_folder=C:\MEDIANSI\MediCare\CSV"
|
|
8
9
|
set "config_file=F:\Medibot\json\config.json"
|
|
9
10
|
set "python_script=C:\Python34\Lib\site-packages\MediBot\update_json.py"
|
|
@@ -216,6 +217,21 @@ goto main_menu
|
|
|
216
217
|
|
|
217
218
|
:: Process CSV Files and Validate Against Config
|
|
218
219
|
:process_csvs
|
|
220
|
+
|
|
221
|
+
:: Move CSV files from local_storage_path to source_folder in case AK sends it unencrypted by accident.
|
|
222
|
+
echo Checking for new CSV files in local storage...
|
|
223
|
+
for %%f in ("%local_storage_path%\*.csv") do (
|
|
224
|
+
echo WARNING: Found unencrypted CSV files!
|
|
225
|
+
echo Moving %%f to %source_folder%...
|
|
226
|
+
move "%%f" "%source_folder%" >nul 2>&1
|
|
227
|
+
if errorlevel 1 (
|
|
228
|
+
echo Failed to move %%f. Check permissions or path.
|
|
229
|
+
) else (
|
|
230
|
+
echo Moved %%f successfully.
|
|
231
|
+
)
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
:: Retrieve the current time and date to create a timestamp
|
|
219
235
|
for /f "tokens=1-5 delims=/: " %%a in ('echo %time%') do (
|
|
220
236
|
set "hour=%%a"
|
|
221
237
|
set "minute=%%b"
|
|
@@ -228,6 +244,7 @@ for /f "tokens=2-4 delims=/ " %%a in ('echo %date%') do (
|
|
|
228
244
|
)
|
|
229
245
|
set "timestamp=!year!!month!!day!_!hour!!minute!"
|
|
230
246
|
|
|
247
|
+
:: Search for the most recent CSV file in source folder
|
|
231
248
|
set "latest_csv="
|
|
232
249
|
for /f "delims=" %%a in ('dir /b /a-d /o-d "%source_folder%\*.csv" 2^>nul') do (
|
|
233
250
|
set "latest_csv=%%a"
|
|
@@ -361,7 +361,7 @@ def handle_missing_payer_id(insurance_name, config, crosswalk, client):
|
|
|
361
361
|
if get_user_confirmation(confirmation_prompt):
|
|
362
362
|
# Step 7: Update the crosswalk with the new payer ID and insurance name mapping
|
|
363
363
|
try:
|
|
364
|
-
MediBot_Crosswalk_Library.update_crosswalk_with_new_payer_id(insurance_name, payer_id, config)
|
|
364
|
+
MediBot_Crosswalk_Library.update_crosswalk_with_new_payer_id(client, insurance_name, payer_id, config)
|
|
365
365
|
return payer_id
|
|
366
366
|
except Exception as e:
|
|
367
367
|
print("Failed to update crosswalk with new Payer ID: {}".format(e))
|
|
@@ -297,12 +297,13 @@ def fetch_payer_name_from_api(client, payer_id, config, primary_endpoint='AVAILI
|
|
|
297
297
|
try:
|
|
298
298
|
endpoints = config['MediLink_Config']['endpoints']
|
|
299
299
|
except KeyError as e:
|
|
300
|
-
error_message = "Configuration loading error: Missing key {0}".format(e)
|
|
301
|
-
print(error_message)
|
|
302
|
-
MediLink_ConfigLoader.log(error_message, level="
|
|
300
|
+
error_message = "Configuration loading error in fetch_payer_name_from_api: Missing key {0}... Attempting to reload configuration.".format(e)
|
|
301
|
+
# print(error_message)
|
|
302
|
+
MediLink_ConfigLoader.log(error_message, level="ERROR")
|
|
303
303
|
# Attempt to reload configuration if key is missing
|
|
304
304
|
config, _ = MediLink_ConfigLoader.load_configuration()
|
|
305
305
|
endpoints = config['MediLink_Config']['endpoints'] # Re-attempt to access endpoints
|
|
306
|
+
MediLink_ConfigLoader.log("Re-loaded configuration successfully.", level="INFO")
|
|
306
307
|
|
|
307
308
|
# Define endpoint rotation logic
|
|
308
309
|
endpoint_order = ([primary_endpoint] +
|
|
@@ -209,7 +209,7 @@ class RequestHandler(BaseHTTPRequestHandler):
|
|
|
209
209
|
self.send_header('Content-type', 'text/html')
|
|
210
210
|
self.end_headers()
|
|
211
211
|
self.wfile.write("Authentication successful. You can close this window now.".encode())
|
|
212
|
-
initiate_link_retrieval() #
|
|
212
|
+
initiate_link_retrieval(config) # Pass config here
|
|
213
213
|
else:
|
|
214
214
|
log("Authentication failed with response: {}".format(token_response)) # Add this line
|
|
215
215
|
self.send_response(400)
|
|
@@ -344,13 +344,13 @@ def open_browser_with_executable(url, browser_path=None):
|
|
|
344
344
|
except Exception as e:
|
|
345
345
|
log("Failed to open browser: {}".format(e))
|
|
346
346
|
|
|
347
|
-
def initiate_link_retrieval():
|
|
347
|
+
def initiate_link_retrieval(config):
|
|
348
348
|
log("Initiating browser via implicit GET.")
|
|
349
|
-
url_get = "https://script.google.com/macros/s/
|
|
349
|
+
url_get = "https://script.google.com/macros/s/{}/exec?action=get_link".format(config['MediLink_Config']['webapp_deployment_id']) # Use config here
|
|
350
350
|
open_browser_with_executable(url_get)
|
|
351
351
|
|
|
352
352
|
log("Preparing POST call.")
|
|
353
|
-
url = "https://script.google.com/macros/s/
|
|
353
|
+
url = "https://script.google.com/macros/s/{}/exec".format(config['MediLink_Config']['webapp_deployment_id']) # Use config here
|
|
354
354
|
downloaded_emails = list(load_downloaded_emails())
|
|
355
355
|
payload = {
|
|
356
356
|
"downloadedEmails": downloaded_emails
|
|
@@ -437,7 +437,7 @@ def auth_and_retrieval():
|
|
|
437
437
|
shutdown_event.wait() # Wait for the shutdown event to be set after authentication
|
|
438
438
|
else:
|
|
439
439
|
log("Access token found. Proceeding.")
|
|
440
|
-
initiate_link_retrieval()
|
|
440
|
+
initiate_link_retrieval(config) # Pass config here
|
|
441
441
|
shutdown_event.wait() # Wait for the shutdown event to be set
|
|
442
442
|
|
|
443
443
|
if __name__ == "__main__":
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# MediCafe
|
|
2
|
+
|
|
3
|
+
MediCafe is a specialized Python package designed to automate and enhance administrative tasks in medical practices using Medisoft. It features two primary components: **MediBot** and **MediLink**, which work together to streamline patient data entry and claims submission processes. This package is particularly tailored for environments running Windows XP with Python 3.4.4.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
### Automated Data Entry
|
|
8
|
+
MediCafe utilizes **AutoHotkey scripting** to automate the entry of patient information into Medisoft. This feature significantly reduces the time and effort required for manual data entry, minimizing human error and improving operational efficiency.
|
|
9
|
+
|
|
10
|
+
### Claims Submission Automation
|
|
11
|
+
The MediLink component automates the submission of 837p medical claims to various insurance providers via **APIs** and also using **WinSCP** for secure file transfers. It supports dynamic configurations for multiple endpoints, allowing for seamless integration with different payer systems with easy setup and management of custom 837p headers and trailers. This automation ensures timely and accurate claims processing, enhancing revenue cycle management for healthcare providers.
|
|
12
|
+
|
|
13
|
+
### Crosswalk Setup Tooling
|
|
14
|
+
MediCafe includes internal tooling to assist in setting up a **crosswalk** with referential data for payer IDs, diagnostic codes, and other essential mappings. This feature simplifies the process of aligning data formats and identifiers across different systems, ensuring consistency and accuracy in data handling.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
MediCafe can be easily installed via pip:
|
|
19
|
+
```bash
|
|
20
|
+
pip install medicafe
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Configuration
|
|
24
|
+
A custom configuration file is required for each environment and provider. This file must be set up to define paths, mappings, and other necessary parameters specific to the user's setup.
|
|
25
|
+
|
|
26
|
+
## Entry Point
|
|
27
|
+
The primary entry point for running MediCafe is through the **MediBot** batch file:
|
|
28
|
+
```bash
|
|
29
|
+
MediBot.bat
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Known Bugs
|
|
33
|
+
- **Endpoint Persistence**: Issues with endpoint update persistence when user adjustments are made.
|
|
34
|
+
- **Insurance Mode Glitches**: Certain insurance modes may not adjust data correctly, requiring manual intervention.
|
|
35
|
+
- **Manual Entry Requirements**: Some processes may require manual entries to handle off-nominal conditions, as indicated by comments in the codebase.
|
|
36
|
+
|
|
37
|
+
## Future Work
|
|
38
|
+
Future enhancements and features can be identified through TODO comments and other annotations in the codebase. These may include:
|
|
39
|
+
- Improvements to the crosswalk setup process.
|
|
40
|
+
- Additional automation features for data entry and claims processing.
|
|
41
|
+
- Enhancements to user interaction and error handling mechanisms.
|
|
42
|
+
|
|
43
|
+
### Developer Info:
|
|
44
|
+
- Name: Daniel Vidaud
|
|
45
|
+
- GitHub: [\[Your GitHub Profile\]](https://github.com/katanada2)
|
|
46
|
+
- Email: daniel@personalizedtransformations.com
|
|
47
|
+
- LinkedIn: [\[Your LinkedIn Profile\]](https://www.linkedin.com/in/dvidaud/)
|
|
48
|
+
|
|
49
|
+
### Contribution Guideline:
|
|
50
|
+
Contributions are welcome! If you'd like to contribute, please follow the steps below:
|
|
51
|
+
1. Fork the repository.
|
|
52
|
+
2. Create your feature branch (`git checkout -b feature/AmazingFeature`).
|
|
53
|
+
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`).
|
|
54
|
+
4. Push to the branch (`git push origin feature/AmazingFeature`).
|
|
55
|
+
5. Open a pull request.
|
|
56
|
+
|
|
57
|
+
### Disclaimer:
|
|
58
|
+
MediCafe is developed as an open-source project. While we strive to provide a reliable and effective system, the developers are not responsible for any discrepancies or issues that may arise from its use. Always ensure data confidentiality and compliance with healthcare regulations.
|
medicafe-0.240925.9/README.md
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
## MediCafe
|
|
2
|
-
|
|
3
|
-
MediCafe is an integrated system designed to automate and enhance administrative tasks in medical practices using Medisoft. The system features two main components: MediBot and MediLink, which together streamline patient data entry and claims processing. This solution aims to improve efficiency, reduce errors, and support better revenue cycle management for healthcare providers.
|
|
4
|
-
|
|
5
|
-
### Developer Info:
|
|
6
|
-
- Name: Daniel Vidaud
|
|
7
|
-
- GitHub: [\[Your GitHub Profile\]](https://github.com/katanada2)
|
|
8
|
-
- Email: daniel@personalizedtransformations.com
|
|
9
|
-
- LinkedIn: [\[Your LinkedIn Profile\]](https://www.linkedin.com/in/dvidaud/)
|
|
10
|
-
|
|
11
|
-
### Features:
|
|
12
|
-
- **Automated Data Entry**: Uses AutoHotkey scripts to automate the entry of patient information into Medisoft.
|
|
13
|
-
- **Insurance Mode Adjustments**: Automatically adjusts data entries based on specific insurance provider requirements.
|
|
14
|
-
- **Enhanced Error Handling**: Robust error logging and handling mechanisms for streamlined troubleshooting.
|
|
15
|
-
- **Dynamic Endpoint Configuration**: Supports multiple claim submission endpoints with easy configuration options.
|
|
16
|
-
- **Automated Claim Submissions**: Streamlines the process of medical claims submission to various insurance providers.
|
|
17
|
-
- **Interactive User Interfaces**: Provides GUIs for easier management of scripts and claims submissions, suitable for users with varying technical skills.
|
|
18
|
-
|
|
19
|
-
### Missing Features:
|
|
20
|
-
- **Diagnosis Code Automation**: Extracts and inputs diagnosis codes directly from surgical schedules.
|
|
21
|
-
- **Graphical User Interface for MediBot**: Planned for future development to assist non-technical users.
|
|
22
|
-
- **Advanced Reporting Tools**: To provide insights into data entry and claims processing metrics.
|
|
23
|
-
|
|
24
|
-
### Known Bugs:
|
|
25
|
-
- **Endpoint Persistence in MediLink**: Issues with endpoint update persistence when user adjustments are made.
|
|
26
|
-
- **Insurance Mode Glitches**: Occasionally, specific insurance modes may not adjust data correctly, requiring manual intervention.
|
|
27
|
-
|
|
28
|
-
### Usage Documentation:
|
|
29
|
-
Detailed documentation on how to set up and use MediCafe can be found at the following links:
|
|
30
|
-
- [MediBot Setup and Usage](https://yourdocumentationlink.com/medibot)
|
|
31
|
-
- [MediLink Configuration and Operations](https://yourdocumentationlink.com/medilink)
|
|
32
|
-
|
|
33
|
-
### Contribution Guideline:
|
|
34
|
-
Contributions are welcome! If you'd like to contribute, please follow the steps below:
|
|
35
|
-
1. Fork the repository.
|
|
36
|
-
2. Create your feature branch (`git checkout -b feature/AmazingFeature`).
|
|
37
|
-
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`).
|
|
38
|
-
4. Push to the branch (`git push origin feature/AmazingFeature`).
|
|
39
|
-
5. Open a pull request.
|
|
40
|
-
|
|
41
|
-
### Disclaimer:
|
|
42
|
-
MediCafe is developed as an open-source project. While we strive to provide a reliable and effective system, the developers are not responsible for any discrepancies or issues that may arise from its use. Always ensure data confidentiality and compliance with healthcare regulations.
|
|
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
|