Initial commit — Performance West telecom compliance platform
Includes: API (Express/TypeScript), Astro site, Python workers, document generators, FCC compliance tools, Canada CRTC formation, Ansible infrastructure, and deployment scripts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
commit
f8cd37ac8c
1823 changed files with 145167 additions and 0 deletions
4
scripts/formation/states/on/__init__.py
Normal file
4
scripts/formation/states/on/__init__.py
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
from .config import CONFIG
|
||||
from .adapter import ONPortal
|
||||
|
||||
__all__ = ["CONFIG", "ONPortal"]
|
||||
108
scripts/formation/states/on/adapter.py
Normal file
108
scripts/formation/states/on/adapter.py
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
"""
|
||||
Ontario — Ontario Business Registry (OBR) adapter.
|
||||
|
||||
Automates:
|
||||
1. Anytime Mailbox setup (Ontario registered office) via anytimemailbox.com
|
||||
2. Name search via NUANS
|
||||
3. Incorporation filing via Ontario Business Registry (OBR)
|
||||
4. .ca domain + email + web presence provisioning (HestiaCP)
|
||||
5. Canadian phone number provisioning
|
||||
6. Corporate binder compilation (DOCX -> PDF)
|
||||
7. Business banking link delivery
|
||||
8. CRTC registration letter generation (Voice, Data & Wireless Reseller)
|
||||
9. CCTS registration
|
||||
|
||||
All Playwright methods are structural stubs — CSS selectors in config.py
|
||||
must be populated after manual portal inspection before going live.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from typing import Optional
|
||||
|
||||
from scripts.formation.base import (
|
||||
FilingResult,
|
||||
FilingStatus,
|
||||
FormationOrder,
|
||||
NameSearchResult,
|
||||
StatePortal,
|
||||
)
|
||||
from .config import CONFIG
|
||||
|
||||
LOG = logging.getLogger("formation.on")
|
||||
|
||||
|
||||
class ONPortal(StatePortal):
|
||||
"""Adapter for Ontario Business Registry (OBR) and Anytime Mailbox."""
|
||||
|
||||
STATE_CODE = "ON"
|
||||
STATE_NAME = "Ontario"
|
||||
PORTAL_NAME = "Ontario Business Registry"
|
||||
PORTAL_URL = CONFIG["filing_portal"]["url"]
|
||||
|
||||
SUPPORTS_LLC = False # Canada has no LLC entity type
|
||||
SUPPORTS_CORP = True
|
||||
SUPPORTS_ONLINE_FILING = True
|
||||
SUPPORTS_NAME_SEARCH = True
|
||||
|
||||
# No NW Registered Agent in Canada — we use Anytime Mailbox instead
|
||||
NWRA_ADDRESS = ""
|
||||
NWRA_CITY = ""
|
||||
NWRA_STATE = ""
|
||||
NWRA_ZIP = ""
|
||||
|
||||
CONFIG = CONFIG
|
||||
|
||||
async def search_name(self, name: str) -> NameSearchResult:
|
||||
"""Search Ontario NUANS database for name availability.
|
||||
|
||||
STUB — selectors not yet captured from live portal.
|
||||
"""
|
||||
LOG.warning("ON name search selectors not configured — returning unavailable stub")
|
||||
return NameSearchResult(
|
||||
available=False,
|
||||
state_code="ON",
|
||||
searched_name=name,
|
||||
raw_response="STUB: Ontario NUANS selectors not yet configured",
|
||||
)
|
||||
|
||||
async def file_llc(self, order: FormationOrder) -> FilingResult:
|
||||
"""Not applicable — Ontario has no LLC entity type."""
|
||||
return FilingResult(
|
||||
success=False,
|
||||
status=FilingStatus.ERROR,
|
||||
state_code="ON",
|
||||
entity_name=order.entity_name,
|
||||
error_message="LLC entity type not supported in Ontario",
|
||||
)
|
||||
|
||||
async def file_corporation(self, order: FormationOrder) -> FilingResult:
|
||||
"""File corporation in Ontario via OBR (Ontario Business Registry).
|
||||
|
||||
STUB — OBR portal requires ONe-key authentication and selectors
|
||||
need live portal inspection before automation can proceed.
|
||||
|
||||
Filing flow (to be implemented):
|
||||
1. Login with ONe-key (PW house account)
|
||||
2. Select "Incorporate Ontario Business Corporation"
|
||||
3. Enter corporation name or select numbered
|
||||
4. Director information
|
||||
5. Registered office address (Anytime Mailbox)
|
||||
6. Articles / share structure
|
||||
7. Payment (C$360 via Relay virtual card)
|
||||
8. Receive Ontario corporation number
|
||||
"""
|
||||
LOG.warning("ON corporation filing automation not implemented — returning error stub")
|
||||
return FilingResult(
|
||||
success=False,
|
||||
status=FilingStatus.ERROR,
|
||||
state_code="ON",
|
||||
entity_name=order.entity_name,
|
||||
error_message="Corporation filing automation not yet implemented for Ontario",
|
||||
)
|
||||
|
||||
|
||||
def adapter() -> ONPortal:
|
||||
"""Factory function called by get_adapter()."""
|
||||
return ONPortal()
|
||||
531
scripts/formation/states/on/config.py
Normal file
531
scripts/formation/states/on/config.py
Normal file
|
|
@ -0,0 +1,531 @@
|
|||
"""
|
||||
Configuration for Ontario, Canada — Ontario Business Corporations Act (OBCA).
|
||||
|
||||
Ontario uses a provincial incorporation system governed by the Ontario
|
||||
Business Corporations Act (RSO 1990, c. B.16). Entities formed here are
|
||||
Ontario corporations — LLCs do not exist under Canadian law.
|
||||
|
||||
Portal stack:
|
||||
- Ontario Business Registry (ontario.ca/obr) — filing & annual returns
|
||||
NOTE: OBR requires authentication (ONe-key or other ON government login).
|
||||
Use Performance West house account for filing.
|
||||
- Ontario NUANS name search — for named companies
|
||||
- Anytime Mailbox (anytimemailbox.com) — virtual mailbox for registered office
|
||||
- CRTC — Canadian Radio-television and Telecommunications Commission
|
||||
(requires notification letter for telecom carriers)
|
||||
|
||||
Currency: all fees in CAD (C$).
|
||||
|
||||
OBR filing steps (to be verified against live portal):
|
||||
1. Login with ONe-key
|
||||
2. Select "Incorporate Ontario Business Corporation"
|
||||
3. Enter corporation name (or request numbered)
|
||||
4. Director information (minimum 1, no residency requirement for OBCA)
|
||||
5. Registered office address
|
||||
6. Articles / share structure
|
||||
7. Payment (C$360)
|
||||
8. Receive Ontario corporation number
|
||||
"""
|
||||
|
||||
CONFIG = {
|
||||
"jurisdiction": "Ontario",
|
||||
"country": "Canada",
|
||||
"abbreviation": "ON",
|
||||
"entity_types": ["corporation"], # No LLCs in Canada
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Portal schedule — Ontario Business Registry hours
|
||||
# OBR is available 24/7 as a web portal (to be verified)
|
||||
# ------------------------------------------------------------------ #
|
||||
"portal_schedule": {
|
||||
"timezone": "America/Toronto",
|
||||
"jurisdiction": "ON",
|
||||
"closed_holidays": True,
|
||||
"hours": {
|
||||
"mon": [0, 24],
|
||||
"tue": [0, 24],
|
||||
"wed": [0, 24],
|
||||
"thu": [0, 24],
|
||||
"fri": [0, 24],
|
||||
"sat": [0, 24],
|
||||
"sun": [0, 24],
|
||||
},
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Ontario Business Registry (OBR)
|
||||
# Requires authentication — use PW house account.
|
||||
# ------------------------------------------------------------------ #
|
||||
"agency": "Ontario Ministry of Public and Business Service Delivery",
|
||||
"agency_url": "https://www.ontario.ca/page/ministry-public-business-service-delivery",
|
||||
"filing_portal": {
|
||||
"name": "Ontario Business Registry",
|
||||
"url": "https://www.ontario.ca/page/ontario-business-registry",
|
||||
"incorporate_url": "https://www.ontario.ca/page/ontario-business-registry", # TBD: direct link
|
||||
"annual_return_url": "https://www.ontario.ca/page/ontario-business-registry",
|
||||
"login_url": "https://www.ontario.ca/page/ontario-business-registry", # ONe-key auth
|
||||
},
|
||||
"name_request_portal": {
|
||||
"name": "Ontario NUANS Name Search",
|
||||
"url": "https://www.nuans.com",
|
||||
"search_url": "https://www.nuans.com",
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Registered & Records Office — Anytime Mailbox (Ontario locations)
|
||||
# ------------------------------------------------------------------ #
|
||||
"registered_office_default": "vaughan",
|
||||
"registered_office_locations": {
|
||||
"vaughan": {
|
||||
"id": "vaughan",
|
||||
"label": "Vaughan (Best Value — C$5/mo)",
|
||||
"street": "2160 Hwy 7",
|
||||
"suite_prefix": "Suite",
|
||||
"city": "Vaughan",
|
||||
"province": "ON",
|
||||
"postal_code": "L4K 1W6",
|
||||
"country": "Canada",
|
||||
"plan": "Basic",
|
||||
"plan_cost_cad": 60.00, # ~C$5/mo x 12
|
||||
"plan_period": "yearly",
|
||||
"default": True,
|
||||
},
|
||||
"toronto-dundas": {
|
||||
"id": "toronto-dundas",
|
||||
"label": "Toronto - Dundas St W (C$7.99/mo)",
|
||||
"street": "2967 Dundas St W",
|
||||
"suite_prefix": "Suite",
|
||||
"city": "Toronto",
|
||||
"province": "ON",
|
||||
"postal_code": "M6P 1Z2",
|
||||
"country": "Canada",
|
||||
"plan": "Basic",
|
||||
"plan_cost_cad": 95.88, # ~C$7.99/mo x 12
|
||||
"plan_period": "yearly",
|
||||
"default": False,
|
||||
},
|
||||
"mississauga-canadian": {
|
||||
"id": "mississauga-canadian",
|
||||
"label": "Mississauga - Canadian Pl (C$8.99/mo)",
|
||||
"street": "1065 Canadian Pl",
|
||||
"suite_prefix": "Suite",
|
||||
"city": "Mississauga",
|
||||
"province": "ON",
|
||||
"postal_code": "L4W 0C2",
|
||||
"country": "Canada",
|
||||
"plan": "Basic",
|
||||
"plan_cost_cad": 107.88, # ~C$8.99/mo x 12
|
||||
"plan_period": "yearly",
|
||||
"default": False,
|
||||
},
|
||||
"toronto-davenport": {
|
||||
"id": "toronto-davenport",
|
||||
"label": "Toronto - Davenport Rd (C$13.99/mo)",
|
||||
"street": "1463 Davenport Rd",
|
||||
"suite_prefix": "Suite",
|
||||
"city": "Toronto",
|
||||
"province": "ON",
|
||||
"postal_code": "M6H 2H6",
|
||||
"country": "Canada",
|
||||
"plan": "Basic",
|
||||
"plan_cost_cad": 167.88, # ~C$13.99/mo x 12
|
||||
"plan_period": "yearly",
|
||||
"default": False,
|
||||
},
|
||||
"markham": {
|
||||
"id": "markham",
|
||||
"label": "Markham (C$10.99/mo)",
|
||||
"street": "570 Hood Rd",
|
||||
"suite_prefix": "Suite",
|
||||
"city": "Markham",
|
||||
"province": "ON",
|
||||
"postal_code": "L3R 4G7",
|
||||
"country": "Canada",
|
||||
"plan": "Basic",
|
||||
"plan_cost_cad": 131.88, # ~C$10.99/mo x 12
|
||||
"plan_period": "yearly",
|
||||
"default": False,
|
||||
},
|
||||
},
|
||||
# Legacy field — kept for backward compatibility with canada_crtc.py
|
||||
"registered_office": {
|
||||
"provider": "Anytime Mailbox",
|
||||
"provider_url": "https://www.anytimemailbox.com",
|
||||
"location": "Vaughan",
|
||||
"street": "2160 Hwy 7",
|
||||
"city": "Vaughan",
|
||||
"province": "ON",
|
||||
"postal_code": "L4K 1W6",
|
||||
"country": "Canada",
|
||||
"plan": "Basic",
|
||||
"plan_cost_cad": 60.00,
|
||||
"plan_period": "yearly",
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# CRTC (federal — identical to BC)
|
||||
# ------------------------------------------------------------------ #
|
||||
"crtc": {
|
||||
"name": "Canadian Radio-television and Telecommunications Commission",
|
||||
"short_name": "CRTC",
|
||||
"secretary_general": "Secretary General, CRTC",
|
||||
"address": "1 Promenade du Portage",
|
||||
"city": "Gatineau",
|
||||
"province": "QC",
|
||||
"postal_code": "J8X 4B1",
|
||||
"country": "Canada",
|
||||
"website": "https://crtc.gc.ca",
|
||||
"notification_required": True,
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# BITS (federal — identical to BC)
|
||||
# ------------------------------------------------------------------ #
|
||||
"bits": {
|
||||
"name": "BITS Registration",
|
||||
"description": (
|
||||
"All Canadian telecom carriers must register with the CRTC "
|
||||
"under the Basic International Telecommunications Services (BITS) regime. "
|
||||
"Registration is filed via letter to the CRTC Secretary General."
|
||||
),
|
||||
"filing_method": "letter",
|
||||
"annual_fee_cad": 0.00,
|
||||
"renewal_required": False,
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# CCTS (federal — identical to BC)
|
||||
# ------------------------------------------------------------------ #
|
||||
"ccts": {
|
||||
"name": "Commission for Complaints for Telecom-television Services",
|
||||
"short_name": "CCTS",
|
||||
"website": "https://www.ccts-cprst.ca",
|
||||
"membership_url": "https://www.ccts-cprst.ca/for-service-providers/become-a-member/",
|
||||
"description": (
|
||||
"All Canadian telecom service providers must participate in the CCTS, "
|
||||
"the national and independent organization dedicated to resolving "
|
||||
"customer complaints about telecom and TV services. "
|
||||
"Membership application is submitted online."
|
||||
),
|
||||
"filing_method": "online_form",
|
||||
"annual_fee_cad": 0.00,
|
||||
"renewal_required": True,
|
||||
"renewal_period": "Yearly",
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# GCKey (federal — identical to BC)
|
||||
# ------------------------------------------------------------------ #
|
||||
"gckey": {
|
||||
"name": "GCKey",
|
||||
"description": "Government of Canada authentication credential for online services",
|
||||
"homepage": "https://www.gckey.gc.ca",
|
||||
"auth_domain": "clegc-gckey.gc.ca",
|
||||
"saml_entry_url": "https://services.crtc.gc.ca/Pro/SmartForms/?_gc_lang=eng",
|
||||
"signup_path": "/j/eng/rg",
|
||||
"signup_steps": {
|
||||
"terms": {
|
||||
"execution": "e1s1",
|
||||
"accept_btn": "input[name=_eventId_accept]",
|
||||
"decline_btn": "input[name=_eventId_cancel]",
|
||||
},
|
||||
"username": {
|
||||
"execution": "e1s2",
|
||||
"field": "input[name=uid][id=userID]",
|
||||
"submit_btn": "input[name=_eventId_submit][id=button]",
|
||||
"hcaptcha_sitekey": "99871bd1-7b22-417a-b6cc-7ef645e5147a",
|
||||
},
|
||||
"password": {
|
||||
"execution": "e1s3",
|
||||
"field": "input[type=password][name=pwd]",
|
||||
"confirm_field": "input[type=password][name=confirmPwd]",
|
||||
"submit_btn": "input[name=_eventId_submit]",
|
||||
},
|
||||
"security_questions": {
|
||||
"execution": "e1s4",
|
||||
"question_selects": "select",
|
||||
"answer_inputs": "input[type=text]",
|
||||
"submit_btn": "input[name=_eventId_submit]",
|
||||
},
|
||||
"email": {
|
||||
"execution": "e1s5",
|
||||
"field": "input[type=email], input[name=email]",
|
||||
"submit_btn": "input[name=_eventId_submit]",
|
||||
},
|
||||
},
|
||||
"login_selectors": {
|
||||
"username": "input[name=token1][id=token1]",
|
||||
"password": "input[name=token2][id=token2]",
|
||||
"signin_btn": "button[id=button]",
|
||||
"csrf": "input[name=_csrf]",
|
||||
"hcaptcha_sitekey": "c745648c-d973-4223-99af-8d178dc17a6c",
|
||||
},
|
||||
"username_prefix": "pw-",
|
||||
"password_rules": {
|
||||
"min_length": 8,
|
||||
"max_length": 16,
|
||||
"require_upper": True,
|
||||
"require_lower": True,
|
||||
"require_digit": True,
|
||||
"require_special": True,
|
||||
},
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# ATS (federal — identical to BC)
|
||||
# ------------------------------------------------------------------ #
|
||||
"ats": {
|
||||
"name": "CRTC Annual Telecommunications Survey",
|
||||
"portal_url": "https://services.crtc.gc.ca/Pro/SmartForms/?_gc_lang=eng",
|
||||
"gckey_url": "https://www.gckey.gc.ca",
|
||||
"my_crtc_url": "http://crtc.gc.ca/eng/forms/form_index.htm",
|
||||
"activation_code_phone": "1-877-249-2782",
|
||||
"forms": {
|
||||
"rep_t1": {
|
||||
"name": "REP-T/T1 — Annual Telecommunications Survey",
|
||||
"description": "Core annual survey for all telecom service providers",
|
||||
"deadline_month": 3,
|
||||
"deadline_day": 1,
|
||||
"threshold": "All registered carriers must file — no revenue threshold",
|
||||
"required_for_new_carriers": True,
|
||||
},
|
||||
"rep_u": {
|
||||
"name": "REP-U — Universal Broadband Fund Survey",
|
||||
"description": "Survey for carriers participating in broadband fund",
|
||||
"deadline_month": 3,
|
||||
"deadline_day": 31,
|
||||
"threshold": "Carriers with >$10M CAD annual Canadian telecom revenue",
|
||||
"required_for_new_carriers": False,
|
||||
},
|
||||
"form_802a": {
|
||||
"name": "Form 802a — Contribution Survey",
|
||||
"description": "Annual contribution obligation calculation",
|
||||
"deadline_month": 3,
|
||||
"deadline_day": 31,
|
||||
"threshold": "Carriers with >$10M CAD annual Canadian telecom revenue",
|
||||
"required_for_new_carriers": False,
|
||||
},
|
||||
"form_802j": {
|
||||
"name": "Form 802j — Contribution Eligibility Survey",
|
||||
"description": "For carriers seeking subsidy eligibility under the national contribution fund",
|
||||
"deadline_month": 3,
|
||||
"deadline_day": 31,
|
||||
"threshold": "Only carriers seeking contribution fund subsidy eligibility",
|
||||
"required_for_new_carriers": False,
|
||||
},
|
||||
},
|
||||
"related_surveys": {
|
||||
"facilities": {
|
||||
"name": "Annual Facilities Survey",
|
||||
"description": "Network infrastructure details for carriers owning/operating telecom facilities",
|
||||
"deadline_month": 3,
|
||||
"deadline_day": 31,
|
||||
"threshold": "Carriers owning or operating telecom network facilities",
|
||||
"required_for_new_carriers": False,
|
||||
},
|
||||
"pricing": {
|
||||
"name": "Annual Communications Pricing Survey",
|
||||
"description": "Pricing data for telecom services offered",
|
||||
"deadline_month": 3,
|
||||
"deadline_day": 31,
|
||||
"threshold": "Carriers with >$10M CAD annual Canadian telecom revenue",
|
||||
"required_for_new_carriers": False,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Ontario Corporate Tax & Filing Obligations
|
||||
# Key differences from BC:
|
||||
# - Ontario uses HST (13%) — no separate PST
|
||||
# - WSIB instead of WorkSafeBC
|
||||
# - Ontario Annual Return instead of BC Annual Report
|
||||
# ------------------------------------------------------------------ #
|
||||
"corporate_obligations": {
|
||||
"t2_return": {
|
||||
"name": "Federal T2 Corporate Income Tax Return",
|
||||
"description": (
|
||||
"All Canadian corporations must file a T2 return with the CRA, "
|
||||
"even if there is no tax owing or no business activity. "
|
||||
"Filed electronically via CRA My Business Account or certified tax software."
|
||||
),
|
||||
"deadline_description": "6 months after fiscal year-end",
|
||||
"deadline_month": 6,
|
||||
"deadline_day": 30,
|
||||
"required": True,
|
||||
"penalty": "5% of unpaid tax + 1%/month for up to 12 months",
|
||||
"cra_url": "https://www.canada.ca/en/revenue-agency/services/tax/businesses/topics/corporations/corporation-income-tax-return.html",
|
||||
},
|
||||
"t2_tax_payment": {
|
||||
"name": "Federal/Provincial Corporate Tax Payment",
|
||||
"description": (
|
||||
"Corporate income tax balance owing is due earlier than the T2 return. "
|
||||
"For Canadian-Controlled Private Corporations (CCPCs) with taxable income "
|
||||
"under $500K, payment is due 3 months after year-end. "
|
||||
"Interest accrues on late payments."
|
||||
),
|
||||
"deadline_description": "3 months after fiscal year-end (CCPCs under $500K)",
|
||||
"deadline_month": 3,
|
||||
"deadline_day": 31,
|
||||
"required": True,
|
||||
},
|
||||
"gst_hst_return": {
|
||||
"name": "HST Return",
|
||||
"description": (
|
||||
"Ontario uses HST (Harmonized Sales Tax) at 13% — combines "
|
||||
"federal GST (5%) and Ontario provincial portion (8%). "
|
||||
"If registered for HST (required if revenue > $30K/yr, "
|
||||
"recommended to register voluntarily for input tax credits). "
|
||||
"Annual filers: due 3 months after fiscal year-end. "
|
||||
"Telecom services are generally HST taxable."
|
||||
),
|
||||
"deadline_description": "3 months after fiscal year-end (annual filers)",
|
||||
"deadline_month": 3,
|
||||
"deadline_day": 31,
|
||||
"threshold": "Mandatory if >$30K revenue; voluntary registration recommended",
|
||||
"required_for_new_carriers": True,
|
||||
},
|
||||
"t4_t4a_slips": {
|
||||
"name": "T4/T4A Information Slips",
|
||||
"description": (
|
||||
"If the corporation has employees or contractors paid >$500/yr, "
|
||||
"T4 (employment) and/or T4A (contractor) slips must be filed. "
|
||||
"Not applicable for most new shell telecom corporations."
|
||||
),
|
||||
"deadline_description": "Last day of February following the calendar year",
|
||||
"deadline_month": 2,
|
||||
"deadline_day": 28,
|
||||
"threshold": "Only if corporation has employees or pays contractors >$500/yr",
|
||||
"required_for_new_carriers": False,
|
||||
},
|
||||
"wsib": {
|
||||
"name": "WSIB (Workplace Safety and Insurance Board)",
|
||||
"description": (
|
||||
"Required if the corporation has employees in Ontario. "
|
||||
"Annual return reports payroll for workers' compensation premium calculation. "
|
||||
"Not applicable for corporations with no employees."
|
||||
),
|
||||
"deadline_description": "March 31 following the calendar year",
|
||||
"deadline_month": 3,
|
||||
"deadline_day": 31,
|
||||
"threshold": "Only if corporation has Ontario employees",
|
||||
"required_for_new_carriers": False,
|
||||
},
|
||||
"crtc_registration_update": {
|
||||
"name": "CRTC Annual Registration Update",
|
||||
"description": (
|
||||
"The CRTC contacts registered carriers annually to verify and update "
|
||||
"registration information. Must respond to maintain active registration status. "
|
||||
"The CRTC initiates this — you just need to respond."
|
||||
),
|
||||
"deadline_description": "Respond within 30 days of CRTC contact (typically Q1)",
|
||||
"required": True,
|
||||
},
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Fees (CAD)
|
||||
# ------------------------------------------------------------------ #
|
||||
"fees": {
|
||||
"name_reservation": 25.00, # NUANS search fee (~C$25)
|
||||
"incorporation": 360.00, # OBR filing fee
|
||||
"annual_report": 25.00, # Ontario Annual Return (much cheaper than BC)
|
||||
"mailbox_yearly": 60.00, # Anytime Mailbox cheapest (Vaughan ~C$5/mo)
|
||||
"currency": "CAD",
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Playwright selectors — Ontario Business Registry
|
||||
#
|
||||
# IMPORTANT: OBR requires authentication (ONe-key or partner login).
|
||||
# All selectors are STUBS — need live portal inspection before use.
|
||||
# ------------------------------------------------------------------ #
|
||||
"selectors": {
|
||||
# ── Login ────────────────────────────────────────────────────────
|
||||
"login_username": "", # TBD: ONe-key selectors
|
||||
"login_password": "",
|
||||
"login_submit": "",
|
||||
|
||||
# ── Filing wizard (all TBD) ─────────────────────────────────────
|
||||
"inc_numbered_company_radio": "",
|
||||
"inc_nr_number": "",
|
||||
"inc_next_btn": "",
|
||||
"inc_director_first": "",
|
||||
"inc_director_last": "",
|
||||
"inc_director_addr1": "",
|
||||
"inc_director_city": "",
|
||||
"inc_director_prov": "",
|
||||
"inc_director_postal": "",
|
||||
"inc_director_country": "",
|
||||
"inc_registered_office_street": "",
|
||||
"inc_registered_office_city": "",
|
||||
"inc_registered_office_province": "",
|
||||
"inc_registered_office_postal": "",
|
||||
"inc_share_structure": "",
|
||||
"pay_card_number": "",
|
||||
"pay_card_exp": "",
|
||||
"pay_card_cvv": "",
|
||||
"pay_submit": "",
|
||||
"inc_submit": "",
|
||||
"inc_confirmation_number": "",
|
||||
|
||||
# ── Name search (NUANS) ─────────────────────────────────────────
|
||||
"name_search_input": "",
|
||||
"name_search_submit": "",
|
||||
"name_result_available": "",
|
||||
"name_result_unavailable": "",
|
||||
|
||||
# ── Anytime Mailbox (same selectors as BC — AMB is a single platform) ──
|
||||
"amb_location_search": "input[placeholder*='city' i], input[placeholder*='search' i]",
|
||||
"amb_email": "input[type='email'], input[name*='email' i]",
|
||||
"amb_password": "input[type='password'], input[name*='password' i]",
|
||||
"amb_phone": "input[type='tel'], input[name*='phone' i]",
|
||||
"amb_first_name": "input[name*='firstName' i], input[name*='first_name' i]",
|
||||
"amb_last_name": "input[name*='lastName' i], input[name*='last_name' i]",
|
||||
"amb_business_name": "input[name*='business' i], input[placeholder*='Business name' i]",
|
||||
"amb_plan_select": "button:has-text('Select'), a:has-text('Select')",
|
||||
"amb_plan_period_yearly": "input[type='radio'][value*='year' i], label:has-text('Yearly')",
|
||||
"amb_location_select": "button:has-text('Choose'), button:has-text('Select this location')",
|
||||
"amb_continue": "button:has-text('Continue'), button:has-text('Next')",
|
||||
"amb_otp": "input[name*='otp' i], input[name*='code' i]",
|
||||
"amb_otp_submit": "button:has-text('Verify'), button:has-text('Submit')",
|
||||
"amb_checkout_submit": "button:has-text('Complete'), button:has-text('Subscribe')",
|
||||
|
||||
# ── Annual Return ────────────────────────────────────────────────
|
||||
"ar_filing_year": "",
|
||||
"ar_confirm_address": "",
|
||||
"ar_submit": "",
|
||||
},
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Ontario DID area codes
|
||||
# ------------------------------------------------------------------ #
|
||||
"did_area_codes": [
|
||||
"416", "437", "647", # Toronto
|
||||
"905", "289", "365", # GTA (Greater Toronto Area)
|
||||
"519", "226", "548", # Southwestern Ontario
|
||||
"613", "343", # Eastern Ontario / Ottawa
|
||||
"705", "249", # Northern Ontario
|
||||
"807", # Northwestern Ontario
|
||||
],
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Notes
|
||||
# ------------------------------------------------------------------ #
|
||||
"notes": (
|
||||
"Ontario Business Corporations Act (RSO 1990, c. B.16) requirements:\n"
|
||||
" - Must have at least one director (no Canadian residency requirement\n"
|
||||
" if OBCA corporation — unlike CBCA which requires 25% resident).\n"
|
||||
" - Registered office must be in Ontario.\n"
|
||||
" - We use Anytime Mailbox at client's chosen Ontario location.\n"
|
||||
" - NUANS name search required for named companies (~C$25).\n"
|
||||
" - Numbered companies do not require a name search.\n"
|
||||
" - Ontario Annual Return due within 60 days of anniversary date.\n"
|
||||
" - Annual Return fee: C$25 (much cheaper than BC's C$42).\n"
|
||||
" - Ontario uses HST (13%) — no separate PST.\n"
|
||||
" - Entity name format: '1234567 Ontario Inc.' for numbered companies.\n"
|
||||
" - CRTC notification required for telecom service providers.\n"
|
||||
" - All fees in Canadian Dollars (CAD).\n"
|
||||
" - OBR portal requires login — use PW house account (ONe-key)."
|
||||
),
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue