medicafe 0.240415.1__py3-none-any.whl → 0.240419.2__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.
Potentially problematic release.
This version of medicafe might be problematic. Click here for more details.
- MediBot/MediBot.bat +70 -0
- MediBot/MediBot.py +316 -0
- MediBot/MediBot_Charges.py +28 -0
- MediBot/MediBot_Preprocessor.py +283 -0
- MediBot/MediBot_UI.py +190 -0
- MediBot/MediBot_dataformat_library.py +145 -0
- MediBot/MediPost.py +5 -0
- MediBot/PDF_to_CSV_Cleaner.py +211 -0
- MediBot/__init__.py +0 -0
- MediBot/update_json.py +43 -0
- MediBot/update_medicafe.py +19 -0
- MediLink/MediLink.py +277 -0
- MediLink/MediLink_277_decoder.py +92 -0
- MediLink/MediLink_837p_encoder.py +392 -0
- MediLink/MediLink_837p_encoder_library.py +679 -0
- MediLink/MediLink_ConfigLoader.py +69 -0
- MediLink/MediLink_DataMgmt.py +206 -0
- MediLink/MediLink_Down.py +151 -0
- MediLink/MediLink_ERA_decoder.py +192 -0
- MediLink/MediLink_Gmail.py +4 -0
- MediLink/MediLink_Scheduler.py +132 -0
- MediLink/MediLink_StatusCheck.py +4 -0
- MediLink/MediLink_UI.py +116 -0
- MediLink/MediLink_Up.py +117 -0
- MediLink/MediLink_batch.bat +7 -0
- MediLink/Soumit_api.py +22 -0
- MediLink/__init__.py +0 -0
- {medicafe-0.240415.1.dist-info → medicafe-0.240419.2.dist-info}/METADATA +19 -17
- medicafe-0.240419.2.dist-info/RECORD +32 -0
- {medicafe-0.240415.1.dist-info → medicafe-0.240419.2.dist-info}/WHEEL +5 -5
- medicafe-0.240419.2.dist-info/top_level.txt +2 -0
- medicafe-0.240415.1.dist-info/RECORD +0 -5
- medicafe-0.240415.1.dist-info/top_level.txt +0 -1
- {medicafe-0.240415.1.dist-info → medicafe-0.240419.2.dist-info}/LICENSE +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MediLink Scheduler: A medical claim scheduling and management system that integrates functionalities from MediScheduler and MediLink to optimize medical claim submissions based on patient deductible status, insurance provider deadlines, and a 90-day submission window. It leverages real-time data from insurance APIs for dynamic scheduling to maximize insurance payments by aligning claim submission with deductible fulfillment.
|
|
3
|
+
|
|
4
|
+
Features:
|
|
5
|
+
- Deductible Optimization: Determines optimal submission times based on deductible fulfillment to maximize reimbursements.
|
|
6
|
+
- Dynamic Scheduling: Updates claim submission timelines in response to changes in deductible status and insurance coverage data.
|
|
7
|
+
- Secure Data Handling: Ensures the security of sensitive patient data through encryption and HIPAA-compliant practices.
|
|
8
|
+
- Integration with MediLink Systems: Seamlessly formats, submits, and tracks claims across MediLink and associated systems.
|
|
9
|
+
- Robust Error Handling and Notifications: Implements mechanisms for error detection and user alerts regarding scheduling and submission errors.
|
|
10
|
+
|
|
11
|
+
Main Functionalities:
|
|
12
|
+
1. Configuration and System Initialization:
|
|
13
|
+
- Configures and establishes secure connections to insurance APIs.
|
|
14
|
+
- Loads encrypted system settings and initializes subsystems for logging, data encryption, and notifications.
|
|
15
|
+
|
|
16
|
+
2. Scheduler Integration:
|
|
17
|
+
- Enhances MediLink's main menu to include an option for "Optimize and Schedule Submissions".
|
|
18
|
+
- This option is visible only when there are new or imminent claims, activating the scheduling function for these claims.
|
|
19
|
+
|
|
20
|
+
3. Scheduling Process:
|
|
21
|
+
- Identifies new or urgent claims.
|
|
22
|
+
- Fetches real-time deductible information from insurance APIs.
|
|
23
|
+
- Computes remaining deductible and determines suitable submission dates.
|
|
24
|
+
- Schedules claims with consideration for deductible status and the 90-day deadline, updating a scheduling log with details.
|
|
25
|
+
|
|
26
|
+
4. User Dashboard Update:
|
|
27
|
+
- Displays scheduled submissions, including deductible statuses and scheduled dates.
|
|
28
|
+
- Allows users to manually adjust or override automated scheduling decisions.
|
|
29
|
+
|
|
30
|
+
5. Pre-Submission Checks:
|
|
31
|
+
- Daily verification of claims ready for submission.
|
|
32
|
+
- Prepares 837P claim files and finalizes submission details with user confirmation.
|
|
33
|
+
- Securely transmits data to insurance providers and logs all submission activities.
|
|
34
|
+
|
|
35
|
+
6. Direct Submission Handling:
|
|
36
|
+
- Uses MediLink_Up.submit_claims to manage final claim submissions.
|
|
37
|
+
- Ensures that all scheduled claims are submitted with requisite details.
|
|
38
|
+
|
|
39
|
+
7. Data Security:
|
|
40
|
+
- Applies encryption to any new data storage or sensitive data involved in the scheduling process.
|
|
41
|
+
- Maintains compliance with HIPAA and relevant security standards.
|
|
42
|
+
|
|
43
|
+
8. Error Management and Alerts:
|
|
44
|
+
- Extends error handling capabilities to include specific scheduling and submission issues.
|
|
45
|
+
- Enhances notifications for reminders and updates on deductible status.
|
|
46
|
+
|
|
47
|
+
9. Integration with MediLink Logging and Error Handling:
|
|
48
|
+
- Integrates scheduler operations into MediLink’s existing logging and error management frameworks.
|
|
49
|
+
|
|
50
|
+
10. Maintenance and Data Cleanup:
|
|
51
|
+
- Regularly refreshes insurance data mappings and updates deductible information.
|
|
52
|
+
- Manages cleanup of processed claims to maintain database integrity and performance.
|
|
53
|
+
|
|
54
|
+
11. User Interface Improvements:
|
|
55
|
+
- Updates UI to ensure user-friendliness and provides clear operational feedback.
|
|
56
|
+
- Revises help documentation to reflect new functionalities and guides for scheduling tasks.
|
|
57
|
+
|
|
58
|
+
Database Management:
|
|
59
|
+
- Maintains a JSON-based database for patient billing data, labeled as patient_billing_db, storing information from various sources (Z.dat file, APIs, SFTP).
|
|
60
|
+
- Database content includes claim statuses, deductible details, error logs, and identifiers for billing readiness.
|
|
61
|
+
- Facilitates efficient tracking and processing of claims, with considerations for integrating individual patient data in batched submissions.
|
|
62
|
+
- Stays on the local machine in a defined secure location per config, ensuring HIPAA compliance without the need for data encryption at rest.
|
|
63
|
+
|
|
64
|
+
Note: Potential for data corruption or synchronization issues due to system limitations; backup and manual verification measures are advised.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# JSON DB structure draft.
|
|
69
|
+
{
|
|
70
|
+
"patients": {
|
|
71
|
+
"patient_id": {
|
|
72
|
+
"first_name": "John",
|
|
73
|
+
"last_name": "Doe",
|
|
74
|
+
"date_of_birth": "1985-07-12",
|
|
75
|
+
"insurance_details": {
|
|
76
|
+
"provider_id": "XYZ123",
|
|
77
|
+
"policy_number": "P123456789",
|
|
78
|
+
"coverage_start_date": "2020-01-01"
|
|
79
|
+
},
|
|
80
|
+
"contact_info": {
|
|
81
|
+
"email": "john.doe@example.com",
|
|
82
|
+
"phone": "555-1234"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"claims": {
|
|
87
|
+
"claim_id": {
|
|
88
|
+
"patient_id": "patient_id",
|
|
89
|
+
"date_of_service": "2023-04-01",
|
|
90
|
+
"status": "pending",
|
|
91
|
+
"scheduled_submission_date": "2023-04-15",
|
|
92
|
+
"actual_submission_date": null,
|
|
93
|
+
"billing_amount": 500.00,
|
|
94
|
+
"deductible_applied": 100.00,
|
|
95
|
+
"covered_amount": 400.00
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"insurance_providers": {
|
|
99
|
+
"provider_id": {
|
|
100
|
+
"name": "InsuranceCorp",
|
|
101
|
+
"contact_details": {
|
|
102
|
+
"phone": "555-6789",
|
|
103
|
+
"email": "support@insurancecorp.com"
|
|
104
|
+
},
|
|
105
|
+
"endpoint": "https://api.insurancecorp.com"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"system_configuration": {
|
|
109
|
+
"last_update": "2023-04-18",
|
|
110
|
+
"backup_frequency": "daily",
|
|
111
|
+
"data_encryption_key": "encrypted_key_value"
|
|
112
|
+
},
|
|
113
|
+
"logs": {
|
|
114
|
+
"log_id": {
|
|
115
|
+
"timestamp": "2023-04-18T12:34:56",
|
|
116
|
+
"event_type": "error",
|
|
117
|
+
"description": "Failed to connect to insurance API",
|
|
118
|
+
"related_claim_id": "claim_id"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"billing_queue": {
|
|
122
|
+
"patient_id": "claim_id"
|
|
123
|
+
},
|
|
124
|
+
"submitted_837p_batches": {
|
|
125
|
+
"batch_id": {
|
|
126
|
+
"timestamp": "2023-04-20T09:00:00",
|
|
127
|
+
"patients": ["patient_id1", "patient_id2", ...],
|
|
128
|
+
"endpoint": "clearinghouse_endpoint",
|
|
129
|
+
"status": "submitted"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
MediLink/MediLink_UI.py
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
Development Tasks for User Interface (UI) Enhancement in MediSoft Claims Submittal (MediLink) Script:
|
|
6
|
+
|
|
7
|
+
Streamline user interaction for endpoint selection and patient adjustments with automated endpoint validation.
|
|
8
|
+
Strengthen error handling in file conversion, transmission, and user inputs with actionable user feedback.
|
|
9
|
+
Expand logging levels and develop a user notification system for process milestones and errors.
|
|
10
|
+
Focus workflow on patient details for endpoint adjustments, facilitating patient-centric file submissions.
|
|
11
|
+
Implement internet connectivity checks with retry options for submissions and offer pause/resume capabilities.
|
|
12
|
+
Include final review and confirmation steps before submission, allowing for endpoint adjustments per patient.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
def display_welcome():
|
|
16
|
+
print("\n" + "-" * 60)
|
|
17
|
+
print("\n *~^~*: Welcome to MediLink! :*~^~*\n")
|
|
18
|
+
print("-" * 60 + "\n")
|
|
19
|
+
|
|
20
|
+
def display_menu(options):
|
|
21
|
+
print("Menu Options:")
|
|
22
|
+
for i, option in enumerate(options):
|
|
23
|
+
print("{0}. {1}".format(i+1, option))
|
|
24
|
+
|
|
25
|
+
def get_user_choice():
|
|
26
|
+
return input("Enter your choice: ").strip()
|
|
27
|
+
|
|
28
|
+
def display_exit_message():
|
|
29
|
+
print("\nExiting MediLink.")
|
|
30
|
+
|
|
31
|
+
def display_invalid_choice():
|
|
32
|
+
print("Invalid choice. Please select a valid option.")
|
|
33
|
+
|
|
34
|
+
def display_patient_options(detailed_patient_data):
|
|
35
|
+
"""
|
|
36
|
+
Displays a list of patients with their current suggested endpoints, prompting for selections to adjust.
|
|
37
|
+
"""
|
|
38
|
+
print("\nPlease select the patients you want to adjust by entering their numbers separated by commas (e.g., 1,3,5):")
|
|
39
|
+
# Can disable this extra print for now because the px list would already be on-screen.
|
|
40
|
+
#for i, data in enumerate(detailed_patient_data, start=1):
|
|
41
|
+
# patient_info = "{0} ({1}) - {2}".format(data['patient_name'], data['patient_id'], data['surgery_date'])
|
|
42
|
+
# endpoint = data.get('suggested_endpoint', 'N/A')
|
|
43
|
+
# print("{:<3}. {:<30} Current Endpoint: {}".format(i, patient_info, endpoint))
|
|
44
|
+
|
|
45
|
+
def get_selected_indices(patient_count):
|
|
46
|
+
"""
|
|
47
|
+
Collects user input for selected indices to adjust endpoints.
|
|
48
|
+
"""
|
|
49
|
+
selected_indices_input = input("> ")
|
|
50
|
+
selected_indices = [int(index.strip()) - 1 for index in selected_indices_input.split(',') if index.strip().isdigit() and 0 <= int(index.strip()) - 1 < patient_count]
|
|
51
|
+
return selected_indices
|
|
52
|
+
|
|
53
|
+
def display_patient_for_adjustment(patient_name, suggested_endpoint):
|
|
54
|
+
"""
|
|
55
|
+
Displays the current endpoint for a selected patient and prompts for a change.
|
|
56
|
+
"""
|
|
57
|
+
print("\n- {0} | Current Endpoint: {1}".format(patient_name, suggested_endpoint))
|
|
58
|
+
|
|
59
|
+
def get_endpoint_decision():
|
|
60
|
+
"""
|
|
61
|
+
Asks the user if they want to change the endpoint.
|
|
62
|
+
"""
|
|
63
|
+
return input("Change endpoint? (Y/N): ").strip().lower()
|
|
64
|
+
|
|
65
|
+
def display_endpoint_options(endpoint_mapping):
|
|
66
|
+
"""
|
|
67
|
+
Displays the endpoint options to the user based on the provided mapping.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
endpoint_mapping (dict): A dictionary mapping option numbers to endpoint names.
|
|
71
|
+
Example: {'1': 'Availity', '2': 'OptumEDI', ...}
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
None
|
|
75
|
+
"""
|
|
76
|
+
print("Select the new endpoint for the patient:")
|
|
77
|
+
for option, endpoint_name in endpoint_mapping.items():
|
|
78
|
+
print("{0}. {1}".format(option, endpoint_name))
|
|
79
|
+
|
|
80
|
+
def get_new_endpoint_choice():
|
|
81
|
+
"""
|
|
82
|
+
Gets the user's choice for a new endpoint.
|
|
83
|
+
"""
|
|
84
|
+
return input("Select new endpoint (1, 2, or 3): ").strip()
|
|
85
|
+
|
|
86
|
+
def display_patient_summaries(detailed_patient_data):
|
|
87
|
+
"""
|
|
88
|
+
Displays summaries of all patients and their suggested endpoints.
|
|
89
|
+
"""
|
|
90
|
+
print("\nSummary of patient details and suggested endpoint:")
|
|
91
|
+
for index, summary in enumerate(detailed_patient_data, start=1):
|
|
92
|
+
try:
|
|
93
|
+
display_file_summary(index, summary)
|
|
94
|
+
except KeyError as e:
|
|
95
|
+
print("Summary at index {} is missing key: {}".format(index, e))
|
|
96
|
+
|
|
97
|
+
def ask_for_proceeding_with_endpoints():
|
|
98
|
+
"""
|
|
99
|
+
Asks the user if they want to proceed with all suggested endpoints.
|
|
100
|
+
"""
|
|
101
|
+
proceed = input("\nDo you want to proceed with all suggested endpoints? (Y/N): ").strip().lower()
|
|
102
|
+
return proceed == 'y'
|
|
103
|
+
|
|
104
|
+
def display_file_summary(index, summary):
|
|
105
|
+
# Ensure surgery_date is converted to a datetime object
|
|
106
|
+
surgery_date = datetime.datetime.strptime(summary['surgery_date'], "%m-%d-%y")
|
|
107
|
+
|
|
108
|
+
# Displays the summary of a file.
|
|
109
|
+
print("{:02d}. {:5} (ID: {:<8}) {:20} {:15} Suggested Endpoint: {}".format(
|
|
110
|
+
index,
|
|
111
|
+
surgery_date.strftime("%m-%d"),
|
|
112
|
+
summary['patient_id'],
|
|
113
|
+
summary['patient_name'][:20],
|
|
114
|
+
summary['primary_insurance'][:15],
|
|
115
|
+
summary['suggested_endpoint'])
|
|
116
|
+
)
|
MediLink/MediLink_Up.py
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import subprocess
|
|
3
|
+
import logging
|
|
4
|
+
import MediLink_837p_encoder
|
|
5
|
+
from MediLink_837p_encoder_library import log
|
|
6
|
+
from tqdm import tqdm
|
|
7
|
+
from MediLink_DataMgmt import operate_winscp
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
Handles the transmission of files to endpoints and related tasks for the MediLink script.
|
|
11
|
+
|
|
12
|
+
Functions:
|
|
13
|
+
- check_internet_connection(): Checks for an active internet connection.
|
|
14
|
+
- UPDATE THIS: transmit_files_to_endpoint(converted_files, endpoint_config, local_storage_path): Transmits files to a specified endpoint using WinSCP.
|
|
15
|
+
- handle_transmission_result(transmission_result): Handles the result of the file transmission process.
|
|
16
|
+
- submit_claims(detailed_patient_data_grouped_by_endpoint, config): Submits claims to respective endpoints based on patient data and configuration.
|
|
17
|
+
- confirm_transmission(detailed_patient_data_grouped_by_endpoint): Displays patient data ready for transmission and asks for confirmation.
|
|
18
|
+
|
|
19
|
+
This module provides functionality for transmitting files, confirming transmissions, and ensuring connectivity for the MediLink script.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
# Internet Connectivity Check
|
|
23
|
+
def check_internet_connection():
|
|
24
|
+
"""
|
|
25
|
+
Checks if there is an active internet connection.
|
|
26
|
+
Returns: Boolean indicating internet connectivity status.
|
|
27
|
+
"""
|
|
28
|
+
try:
|
|
29
|
+
# Run a ping command to a reliable external server (e.g., Google's DNS server)
|
|
30
|
+
ping_process = subprocess.Popen(["ping", "-n", "1", "8.8.8.8"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
31
|
+
ping_output, ping_error = ping_process.communicate()
|
|
32
|
+
|
|
33
|
+
# Check if the ping was successful
|
|
34
|
+
if "Reply from" in ping_output.decode("utf-8"):
|
|
35
|
+
return True
|
|
36
|
+
else:
|
|
37
|
+
return False
|
|
38
|
+
except Exception as e:
|
|
39
|
+
print("An error occurred while checking internet connectivity:", e)
|
|
40
|
+
return False
|
|
41
|
+
|
|
42
|
+
def handle_transmission_result(transmission_result):
|
|
43
|
+
"""
|
|
44
|
+
Handles the result of the file transmission process. Logs the outcome and provides user feedback.
|
|
45
|
+
|
|
46
|
+
:param transmission_result: The result of the file transmission process.
|
|
47
|
+
"""
|
|
48
|
+
#if transmission_result:
|
|
49
|
+
#logging.info("Transmission successful")
|
|
50
|
+
# TODO This needs to do an actual check in the WinSCP log to make sure this is actually true.
|
|
51
|
+
#print("Files have been successfully transmitted.")
|
|
52
|
+
#else:
|
|
53
|
+
#logging.error("Transmission failed")
|
|
54
|
+
# TODO This needs to do a pull from the WinSCP log to show the user what happened.
|
|
55
|
+
#print("There was an issue with the file transmission.")
|
|
56
|
+
|
|
57
|
+
def submit_claims(detailed_patient_data_grouped_by_endpoint, config):
|
|
58
|
+
if not detailed_patient_data_grouped_by_endpoint:
|
|
59
|
+
print("No new files detected for submission.")
|
|
60
|
+
return
|
|
61
|
+
|
|
62
|
+
# Wrap the iteration with tqdm for a progress bar
|
|
63
|
+
for endpoint, patients_data in tqdm(detailed_patient_data_grouped_by_endpoint.items(), desc="Progress", unit="endpoint"):
|
|
64
|
+
if not patients_data: # Skip if no patient data for the endpoint
|
|
65
|
+
continue
|
|
66
|
+
|
|
67
|
+
# Confirm transmission to each endpoint with detailed overview
|
|
68
|
+
if True: #confirm_transmission({endpoint: patients_data}):
|
|
69
|
+
if check_internet_connection():
|
|
70
|
+
# Process and transmit files per endpoint
|
|
71
|
+
converted_files = MediLink_837p_encoder.convert_files_for_submission(patients_data, config)
|
|
72
|
+
if converted_files: # Check if files were successfully converted
|
|
73
|
+
# BUG DISABLE TRANSMISSION FOR TESTING
|
|
74
|
+
# transmission_result = operate_winscp("upload", converted_files, config['MediLink_Config']['endpoints'][endpoint], config['MediLink_Config']['local_claims_path'])
|
|
75
|
+
print("Would have uploaded here!") # DEBUG
|
|
76
|
+
|
|
77
|
+
# handle_transmission_result(transmission_result)
|
|
78
|
+
# This doesn't really do much
|
|
79
|
+
# BUG This has to fail better. If one endpoint is unreachable, it should still try the next endpoint.
|
|
80
|
+
# BUG handle_transmission_result is wrong.
|
|
81
|
+
else:
|
|
82
|
+
print("No files were converted for transmission to {0}.".format(endpoint))
|
|
83
|
+
else:
|
|
84
|
+
print("No internet connection detected.")
|
|
85
|
+
try_again = input("Do you want to try again? (Y/N): ").strip().lower()
|
|
86
|
+
if try_again != 'y':
|
|
87
|
+
print("Exiting transmission process. Please try again later.")
|
|
88
|
+
return # Exiting the function if the user decides not to retry
|
|
89
|
+
else:
|
|
90
|
+
print("Transmission canceled for endpoint {0}.".format(endpoint))
|
|
91
|
+
|
|
92
|
+
print("Claim submission completed.\n")
|
|
93
|
+
|
|
94
|
+
# Secure File Transmission
|
|
95
|
+
def confirm_transmission(detailed_patient_data_grouped_by_endpoint):
|
|
96
|
+
"""
|
|
97
|
+
Displays detailed patient data ready for transmission and their endpoints,
|
|
98
|
+
asking for user confirmation before proceeding.
|
|
99
|
+
|
|
100
|
+
:param detailed_patient_data_grouped_by_endpoint: Dictionary with endpoints as keys and
|
|
101
|
+
lists of detailed patient data as values.
|
|
102
|
+
:param config: Configuration settings loaded from a JSON file.
|
|
103
|
+
"""
|
|
104
|
+
print("\nReview of patient data ready for transmission:")
|
|
105
|
+
for endpoint, patient_data_list in detailed_patient_data_grouped_by_endpoint.items():
|
|
106
|
+
print("\nEndpoint: {0}".format(endpoint))
|
|
107
|
+
for patient_data in patient_data_list:
|
|
108
|
+
patient_info = "({1}) {0}".format(patient_data['patient_name'], patient_data['patient_id'])
|
|
109
|
+
print("- {:<35} | {:<5}, ${:<6}, Primary: {}".format(
|
|
110
|
+
patient_info, patient_data['surgery_date'][:5], patient_data['amount'], patient_data['primary_insurance']))
|
|
111
|
+
|
|
112
|
+
confirmation = input("\nProceed with transmission to all endpoints? (Y/N): ").strip().lower()
|
|
113
|
+
return confirmation == 'y'
|
|
114
|
+
|
|
115
|
+
# Entry point if this script is run directly. Probably needs to be handled better.
|
|
116
|
+
if __name__ == "__main__":
|
|
117
|
+
print("Please run MediLink directly.")
|
MediLink/Soumit_api.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import requests
|
|
3
|
+
from icecream import ic
|
|
4
|
+
from dotenv import load_dotenv
|
|
5
|
+
|
|
6
|
+
load_dotenv()
|
|
7
|
+
|
|
8
|
+
url = "https://api.availity.com/availity/development-partner/v1/token"
|
|
9
|
+
|
|
10
|
+
data = {
|
|
11
|
+
'grant_type': 'client_credentials',
|
|
12
|
+
'client_id': os.getenv("CLIENT_ID"),
|
|
13
|
+
'client_secret': os.getenv("CLIENT_SECRET"),
|
|
14
|
+
'scope': 'hipaa'
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
headers = {
|
|
18
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
resp = requests.post(url, headers = headers, data = data)
|
|
22
|
+
ic(resp.json())
|
MediLink/__init__.py
ADDED
|
File without changes
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: medicafe
|
|
3
|
-
Version: 0.
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
Requires-Dist:
|
|
13
|
-
Requires-Dist:
|
|
14
|
-
Requires-Dist:
|
|
15
|
-
Requires-Dist:
|
|
16
|
-
|
|
17
|
-
This module ensures that MediCafe remains up-to-date by performing version checks for its dependencies on startup. It utilizes PyPI, the official repository for Python packages, to retrieve information about the latest available versions of the required packages. When an internet connection is available, MediUpdate automatically installs any available updates using pip, the package installer for Python.
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: medicafe
|
|
3
|
+
Version: 0.240419.2
|
|
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
|
+
Platform: UNKNOWN
|
|
11
|
+
Requires-Dist: requests
|
|
12
|
+
Requires-Dist: argparse
|
|
13
|
+
Requires-Dist: numpy (==1.11.3)
|
|
14
|
+
Requires-Dist: pandas (==0.20.0)
|
|
15
|
+
Requires-Dist: tqdm (==4.14.0)
|
|
16
|
+
|
|
17
|
+
This module ensures that MediCafe remains up-to-date by performing version checks for its dependencies on startup. It utilizes PyPI, the official repository for Python packages, to retrieve information about the latest available versions of the required packages. When an internet connection is available, MediUpdate automatically installs any available updates using pip, the package installer for Python.
|
|
18
|
+
|
|
19
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
MediBot/MediBot.bat,sha256=hqqTnQ1y09JEXlbhMAfh0yOxjoXtWFbBHfuuXHAgBro,2129
|
|
2
|
+
MediBot/MediBot.py,sha256=0OAAfNlQ3H2SRc3likp2lyPwZ4kuuyI73vP5ovH1QzA,15522
|
|
3
|
+
MediBot/MediBot_Charges.py,sha256=N-hjH6d44YlGAGRs3E17VaupIfpLgaNep_pfZqC2K2M,1963
|
|
4
|
+
MediBot/MediBot_Preprocessor.py,sha256=A8x6sHzdUGdP4_sybUFIYl2s14RwwOZN8mPssA8LVxc,15904
|
|
5
|
+
MediBot/MediBot_UI.py,sha256=Qt4J7yej50rFZ0WpGdSJbqigQ6DWuFQK4Bcxmm5TbdU,9190
|
|
6
|
+
MediBot/MediBot_dataformat_library.py,sha256=UdVF-yW3ZJK0NAzzAAh4VVonorzvI6rY0FjBDnMF4_Y,6314
|
|
7
|
+
MediBot/MediPost.py,sha256=C1hZJFr65rN6F_dckjdBxFC0vL2CoqY9W3YFqU5HXtE,336
|
|
8
|
+
MediBot/PDF_to_CSV_Cleaner.py,sha256=ZZphmq-5K04DkrZNlcwNAIoZPOD_ROWvS3PMkKFxeiM,8799
|
|
9
|
+
MediBot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
MediBot/update_json.py,sha256=eAu3BPYtlGlwVGZdTUmrqq4qLTVcplt-6EnzcGCheG0,1557
|
|
11
|
+
MediBot/update_medicafe.py,sha256=Qyg7iHPTOxiHk3jCd7G01dxmUEbHxD5g1kEdcvr5XoU,840
|
|
12
|
+
MediLink/MediLink.py,sha256=mIt1mS3W5FLBYWjFlCjH1Eh8v9JMxTB5l08m4B1VxHo,14234
|
|
13
|
+
MediLink/MediLink_277_decoder.py,sha256=Z3hQK2j-YzdXjov6aDlDRc7M_auFBnl3se4OF5q6_04,4358
|
|
14
|
+
MediLink/MediLink_837p_encoder.py,sha256=qtXhoIO15OnN4Dh9qXkK9g1fQs7IkcyVLnBfS1YnlpU,19913
|
|
15
|
+
MediLink/MediLink_837p_encoder_library.py,sha256=0h54xX6OVGl7Jims9SY1BgF5DNUJ5mJ1cRvh4RI3rdo,32894
|
|
16
|
+
MediLink/MediLink_ConfigLoader.py,sha256=Htyv1L2LQcTJuzbftMk9VeR8_zOfGVSZBezJs00tP3c,3325
|
|
17
|
+
MediLink/MediLink_DataMgmt.py,sha256=Ep3_HRV6JhUNRt8jDJqCTM-YksHtJNz2uddinW49sYs,9462
|
|
18
|
+
MediLink/MediLink_Down.py,sha256=Bn9AESEJ7Fp_35xf7b74Tk56sT-S70bokLlD8xeZArk,8136
|
|
19
|
+
MediLink/MediLink_ERA_decoder.py,sha256=N_-sAUQH1Usy1hPkxjpH3eeB1rMxeqJSCotfYKlg0vU,8769
|
|
20
|
+
MediLink/MediLink_Gmail.py,sha256=M-C2ns7mhaEime29jLT_O5-yWzEkxuwMnkbBGI_n3PM,133
|
|
21
|
+
MediLink/MediLink_Scheduler.py,sha256=s7NeU0ukMjQVS3YB9FRSNvRdUcVmV52i7J76ijp4Ews,6040
|
|
22
|
+
MediLink/MediLink_StatusCheck.py,sha256=NYDlS7eIuUThpoSWsLfp8dZcYwcSP3Rph1UmjyRBruU,222
|
|
23
|
+
MediLink/MediLink_UI.py,sha256=fYEENDuO0s2XZL6Q7ltgJhZBSSG2VKdGJ1yrZBc8tdI,4797
|
|
24
|
+
MediLink/MediLink_Up.py,sha256=nk_CdA9rz2iifIUddD9342gzWrXeS9RjfgxElwQ5hLY,6080
|
|
25
|
+
MediLink/MediLink_batch.bat,sha256=it_t8dx6lKUc3QBTA0VRDWRpe-fIgSLb8gUL1p6Agos,95
|
|
26
|
+
MediLink/Soumit_api.py,sha256=5JfOecK98ZC6NpZklZW2AkOzkjvrbYxpJpZNH3rFxDw,497
|
|
27
|
+
MediLink/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
+
medicafe-0.240419.2.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
|
|
29
|
+
medicafe-0.240419.2.dist-info/METADATA,sha256=g4AB0kqGZ_NF89pAcZlzkS0EURsounIJQxAGBIhn7vk,819
|
|
30
|
+
medicafe-0.240419.2.dist-info/WHEEL,sha256=v8slff5hmCpvciQ3G55d2d1CnOBupjDFJHDE2dUb1Ao,97
|
|
31
|
+
medicafe-0.240419.2.dist-info/top_level.txt,sha256=3uOwR4q_SP8Gufk2uCHoKngAgbtdOwQC6Qjl7ViBa_c,17
|
|
32
|
+
medicafe-0.240419.2.dist-info/RECORD,,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
Wheel-Version: 1.0
|
|
2
|
-
Generator: bdist_wheel (0.
|
|
3
|
-
Root-Is-Purelib: true
|
|
4
|
-
Tag: py3-none-any
|
|
5
|
-
|
|
1
|
+
Wheel-Version: 1.0
|
|
2
|
+
Generator: bdist_wheel (0.33.6)
|
|
3
|
+
Root-Is-Purelib: true
|
|
4
|
+
Tag: py3-none-any
|
|
5
|
+
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
medicafe-0.240415.1.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
|
|
2
|
-
medicafe-0.240415.1.dist-info/METADATA,sha256=L6jr5vXd1HZHdgDQ8oF0-p1rRDWThRo9wlUk1ODv0P0,827
|
|
3
|
-
medicafe-0.240415.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
4
|
-
medicafe-0.240415.1.dist-info/top_level.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
5
|
-
medicafe-0.240415.1.dist-info/RECORD,,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
File without changes
|