Files
doczyai-pipelines/fieldExtraction/tests/postprocessing_funcs_test.py
T

126 lines
4.4 KiB
Python
Raw Normal View History

import pytest
import pandas as pd
import numpy as np
from src.postprocessing_funcs import (
InvalidDateException,
yn_fixes,
convert_to_us_date_format,
)
class TestPostprocessingFuncs:
@pytest.fixture
def valid_dates(self):
return [
("2023-12-01", "12/01/2023"),
("2023-01-12", "01/12/2023"),
("2023-13-01", "01/13/2023"),
]
@pytest.fixture
def invalid_dates(self):
return ["2023-13-32", "2023-00-01", "2023-12-00", "2023-12-32", "2023-13-13"]
@pytest.fixture
def empty_dates(self):
return ["", "N/A", "null", "none"]
@pytest.fixture
def invalid_format_dates(self):
return ["2023/12/01", "12-01-2023", "2023.12.01"]
@pytest.fixture
def invalid_type_dates(self):
return [None]
def test_convert_to_us_date_format(
self,
valid_dates,
invalid_dates,
empty_dates,
invalid_format_dates,
invalid_type_dates,
):
for input_date, expected_output in valid_dates:
assert convert_to_us_date_format(input_date) == expected_output
for input_date in invalid_dates:
with pytest.raises(InvalidDateException):
convert_to_us_date_format(input_date)
for input_date in empty_dates:
with pytest.raises(InvalidDateException):
convert_to_us_date_format(input_date)
for input_date in invalid_format_dates:
with pytest.raises(InvalidDateException):
convert_to_us_date_format(input_date)
for input_date in invalid_type_dates:
with pytest.raises(TypeError):
convert_to_us_date_format(input_date)
@pytest.fixture
def sample_answer_dicts(self):
return [
{
"FULL_SERVICE": "This is a test statement containing keyword 'Lease'",
"FULL_METHODOLOGY": "PMPM",
},
{"FULL_SERVICE": "unspecified", "FULL_METHODOLOGY": "valid"},
{
"FULL_SERVICE": "This is an example of clean dict",
"FULL_METHODOLOGY": "Will be effective for 30 days",
},
]
@pytest.fixture
def sample_df(self):
data = {
"FULL_SERVICE": ["Service A", "Service B", "Invalid Service"],
"FULL_METHODOLOGY": [
"Methodology X",
"Methodology Y",
"Invalid Methodology",
],
"LESSER": ["N", "Y", "N"],
"LESSER_RATE": [100, 200, 300],
"RATE_STANDARD": [150, 250, 350],
"DEFAULT_TERM": ["Outpatient", "Inpatient", "Invalid"],
"DEFAULT_RATE": ["AC", "BC", "Invalid"],
"IP_OP": ["OP", "IP", "OP"],
"PROV_TYPE_LEVEL_2": ["", "Type A", "Type B"],
"TERM_CLAUSE": [
"IL-4 Termination",
"bonus payment shall be effective",
"No term or termination",
],
"CONTRACT_AUTO_RENEWAL_IND": ["Y", "N", "Y"],
"CONTRACT_TERMINATION_DT": [np.nan, "2023-12-31", np.nan],
"PROV_GROUP_NPI": ["1234567890", "123", "N/A"],
"NETWORK_ACCESS_FEES_IND": ["Yes", "No", "Yes"],
"PAYER_NAME": ["Illini Health", "Superior HealthPlan", "Other Payer"],
"HEALTH_PLAN_STATE": ["IL", "TX", "CA"],
"NOTICE_PROVIDER_NAME": ["Superior HealthPlan", "Provider A", "Provider B"],
"NOTICE_PROVIDER_ADDRESS": ["Address A", "Address B", "Address C"],
"POLICIES_AND_PROCEDURES": ["Policy A", "Procedure B", "Invalid"],
"PROV_GROUP_TIN": ["12-3456789", "123456789", "N/A"],
"ADD_ON_REIMBURSEMENT_LANGUAGE": [
"in no event includ",
"forward payments",
"N/A",
],
"ADD_ON_REIMBURSEMENT_IND": ["Y", "N", "Y"],
"FLAT_FEE_STANDARD": ["$100", "$200", "$300"],
"CONTRACT_LOB": ["LOB A", "LOB B", "LOB C"],
"Parent Agreement Code": ["1234", "5678", "91011"],
"RATE_SHORT": ["$100", "$200", "$300"],
"DUMMY_COL(Y/N)": ["Yes", "No", ""],
}
return pd.DataFrame(data)
def test_yn_fixes(self, sample_df):
cleaned_df = yn_fixes(sample_df)
assert cleaned_df.loc[1, "ADD_ON_REIMBURSEMENT_LANGUAGE"] == ""
assert cleaned_df["DUMMY_COL(Y/N)"].tolist() == ["Y", "N", "N"]