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>
531 lines
23 KiB
Python
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)."
|
|
),
|
|
}
|