From 783fe21264f13947578cf325c561dd6af48e6c71 Mon Sep 17 00:00:00 2001 From: meawong Date: Mon, 11 May 2026 10:11:17 -0700 Subject: [PATCH 1/3] 33092 - Authorization updates for VD --- .../dissolution/dissolutionStatement.html | 4 ++-- .../filings/validations/common_validations.py | 23 +++++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/legal-api/report-templates/template-parts/dissolution/dissolutionStatement.html b/legal-api/report-templates/template-parts/dissolution/dissolutionStatement.html index c315ac37e5..d4e526b87c 100644 --- a/legal-api/report-templates/template-parts/dissolution/dissolutionStatement.html +++ b/legal-api/report-templates/template-parts/dissolution/dissolutionStatement.html @@ -16,8 +16,8 @@ the Cooperative Association that exceeds $200.00. {% endif %} {% else %} - The affidavit required by section 316(1)(a) of the Business Corporations Act has been completed - and deposited in the company's records book. + The affidavit required by section 316(1)(a) of the Business Corporations Act + has been completed and deposited in the company's records book. {% endif %} diff --git a/legal-api/src/legal_api/services/filings/validations/common_validations.py b/legal-api/src/legal_api/services/filings/validations/common_validations.py index e53956a853..9c4074415b 100644 --- a/legal-api/src/legal_api/services/filings/validations/common_validations.py +++ b/legal-api/src/legal_api/services/filings/validations/common_validations.py @@ -78,6 +78,7 @@ CoreFiling.FilingTypes.SPECIALRESOLUTION, } +# - Dissolution is handled separately (voluntary only) FILINGS_REQUIRING_AUTHORIZATION = { CoreFiling.FilingTypes.AGMEXTENSION, CoreFiling.FilingTypes.AGMLOCATIONCHANGE, @@ -1293,8 +1294,17 @@ def validate_certify_name(filing_json) -> bool: return True return True -def validate_certified_by(filing_json: dict, filing_type: str, legal_type: str) -> list: +def is_voluntary_dissolution(filing_json: dict, filing_type: str) -> bool: + """Return True if the filing is a voluntary dissolution.""" from legal_api.services.filings.validations.dissolution import DissolutionTypes + return ( + filing_type == CoreFiling.FilingTypes.DISSOLUTION + and filing_json["filing"].get("dissolution", {}).get("dissolutionType") + == DissolutionTypes.VOLUNTARY.value + ) + + +def validate_certified_by(filing_json: dict, filing_type: str, legal_type: str) -> list: """Validate certifiedBy field.""" msg = [] certified_by = filing_json["filing"]["header"].get("certifiedBy") @@ -1307,13 +1317,8 @@ def validate_certified_by(filing_json: dict, filing_type: str, legal_type: str) filing_type == CoreFiling.FilingTypes.CORRECTION and filing_json["filing"].get("correction", {}).get("type") == "CLIENT" ) - - is_voluntary_dissolution = ( - filing_type == CoreFiling.FilingTypes.DISSOLUTION - and filing_json["filing"].get("dissolution", {}).get("dissolutionType") == DissolutionTypes.VOLUNTARY.value - ) - - certification_required = (is_cert_filing or is_client_correction or is_voluntary_dissolution) + certification_required = (is_cert_filing or is_client_correction or + is_voluntary_dissolution(filing_json, filing_type)) if certification_required: if not certified_by: @@ -1336,7 +1341,7 @@ def validate_authorization_received(filing_json: dict, filing_type: str, legal_t if legal_type not in Business.CORPS: return msg # authorizationReceived is only required for corporations - if filing_type not in FILINGS_REQUIRING_AUTHORIZATION: + if filing_type not in FILINGS_REQUIRING_AUTHORIZATION and not is_voluntary_dissolution(filing_json, filing_type): return msg # authorizationReceived is only required for specific filings authorization_received = filing_json["filing"]["header"].get("authorizationReceived") From 3905d8e2f4be6527a9fd0f40523c55995dc7359b Mon Sep 17 00:00:00 2001 From: meawong Date: Mon, 11 May 2026 10:22:20 -0700 Subject: [PATCH 2/3] 33092 - Update text --- .../template-parts/dissolution/dissolutionStatement.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/legal-api/report-templates/template-parts/dissolution/dissolutionStatement.html b/legal-api/report-templates/template-parts/dissolution/dissolutionStatement.html index d4e526b87c..5d42d4f69e 100644 --- a/legal-api/report-templates/template-parts/dissolution/dissolutionStatement.html +++ b/legal-api/report-templates/template-parts/dissolution/dissolutionStatement.html @@ -17,7 +17,7 @@ {% endif %} {% else %} The affidavit required by section 316(1)(a) of the Business Corporations Act - has been completed and deposited in the company's records book. + has been obtained and deposited in the company's records book. {% endif %} From 2c43b8ba26ed8556bee5c9d982e68cabd9eaa281 Mon Sep 17 00:00:00 2001 From: meawong Date: Mon, 11 May 2026 10:50:16 -0700 Subject: [PATCH 3/3] 33092 - Add unit tests --- .../validations/test_common_validations.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/legal-api/tests/unit/services/filings/validations/test_common_validations.py b/legal-api/tests/unit/services/filings/validations/test_common_validations.py index 3c3354e8aa..e79915f139 100644 --- a/legal-api/tests/unit/services/filings/validations/test_common_validations.py +++ b/legal-api/tests/unit/services/filings/validations/test_common_validations.py @@ -726,20 +726,25 @@ def test_validate_certified_by_coops( (False, True), (None, True), ]) -@pytest.mark.parametrize('filing_type, requires_authorization', [ - (CoreFiling.FilingTypes.ALTERATION, True), - (CoreFiling.FilingTypes.ANNUALREPORT, True), - (CoreFiling.FilingTypes.REGISTRARSORDER, False), # staff filing - (CoreFiling.FilingTypes.INCORPORATIONAPPLICATION, False), # not in FILINGS_REQUIRING_AUTHORIZATION +@pytest.mark.parametrize('filing_type, requires_authorization, dissolution_type', [ + (CoreFiling.FilingTypes.ALTERATION, True, None), + (CoreFiling.FilingTypes.ANNUALREPORT, True, None), + (CoreFiling.FilingTypes.DISSOLUTION, True, "voluntary"), + (CoreFiling.FilingTypes.DISSOLUTION, False, "administrative"), + (CoreFiling.FilingTypes.REGISTRARSORDER, False, None), # staff filing + (CoreFiling.FilingTypes.INCORPORATIONAPPLICATION, False, None), # not in FILINGS_REQUIRING_AUTHORIZATION ]) -def test_validate_authorization_received(session, legal_type, authorization_received, expected_error, filing_type, requires_authorization): - """Test that authorizationReceived is enforced for Corps filings in FILINGS_REQUIRING_AUTHORIZATION only.""" +def test_validate_authorization_received(session, legal_type, authorization_received, expected_error, filing_type, requires_authorization, dissolution_type): + """Test that authorizationReceived is enforced for required Corps filings.""" filing = copy.deepcopy(FILING_HEADER) if authorization_received is not None: filing['filing']['header']['authorizationReceived'] = authorization_received else: filing['filing']['header'].pop('authorizationReceived', None) + if dissolution_type: + filing['filing']['dissolution'] = {'dissolutionType': dissolution_type} + errors = validate_authorization_received(filing, filing_type, legal_type) if legal_type in Business.CORPS and requires_authorization and expected_error: