new-site/scripts/formation/states/on/config.py
justin f8cd37ac8c 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>
2026-04-27 06:54:22 -05:00

531 lines
23 KiB
Python

"""
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)."
),
}