Here is exactly what your fee covers. If anything looks wrong + (fleet size, operating states, weight, or the amount), tell us below and we'll + correct it before you pay.
+diff --git a/scripts/workers/services/gov_fee.py b/scripts/workers/services/gov_fee.py index 721fdae..f882064 100644 --- a/scripts/workers/services/gov_fee.py +++ b/scripts/workers/services/gov_fee.py @@ -243,16 +243,28 @@ def gov_fee_payment_url(child_order_number: str) -> str: return f"{SITE}/order/pay?order={child_order_number}" +def gov_fee_dispute_url(child_order_number: str) -> str: + """Public 'this estimate looks wrong' page that opens a support ticket + pre-tagged with the order so ops can correct the fee.""" + return f"{SITE}/order/dispute?order={child_order_number}" + + def send_gov_fee_payment_email(customer_email: str, customer_name: str, service_label: str, entity_name: str, estimate: GovFeeEstimate, child_order_number: str) -> bool: - """Email the customer a payment link for the government fee.""" + """Email the customer an itemized government-fee bill + payment link, plus a + link to dispute the amount if it looks wrong.""" if not customer_email: return False url = gov_fee_payment_url(child_order_number) + dispute = gov_fee_dispute_url(child_order_number) amt = f"${estimate.cents / 100:,.2f}" - qualifier = "" if estimate.exact else ( - " This is an estimate billed at cost; if the state's final fee differs we " + # Itemized breakdown so the customer can check it for accuracy. + items = "\n".join(f" - {line}" for line in (estimate.breakdown or [estimate.label])) + qualifier = ( + "This amount is the state's confirmed fee." + if estimate.exact else + "This is an estimate billed at cost. If the state's final fee differs we " "refund any overage or bill the small difference.") try: import smtplib @@ -260,13 +272,17 @@ def send_gov_fee_payment_email(customer_email: str, customer_name: str, body = ( f"Hi {customer_name or 'there'},\n\n" f"Your {service_label} for {entity_name} is ready to file. The only " - f"remaining step is the government/state fee, which we collect at cost:\n\n" - f" {service_label}\n" - f" Government fee: {amt}\n" - f" {estimate.label}\n\n" - f"Pay securely here (choose your preferred method — bank transfer/ACH " - f"has no processing fee):\n{url}\n\n" + f"remaining step is the government/state fee, which we collect at cost.\n\n" + f"Here is exactly what the {amt} covers — please review it for accuracy:\n\n" + f" {estimate.label}\n" + f"{items}\n" + f" ----------------------------------------\n" + f" Total government fee: {amt}\n\n" f"{qualifier}\n\n" + f"✅ If this looks right, pay securely here (choose your method — " + f"bank transfer/ACH has no processing fee):\n{url}\n\n" + f"❓ If something looks wrong (wrong fleet size, states, weight, or " + f"amount), tell us here and we'll fix it before you pay:\n{dispute}\n\n" f"As soon as the fee is paid we file with the state and send your " f"confirmation.\n\n" f"Order: {child_order_number}\n" diff --git a/site/public/order/dispute/index.html b/site/public/order/dispute/index.html new file mode 100644 index 0000000..6169f97 --- /dev/null +++ b/site/public/order/dispute/index.html @@ -0,0 +1,149 @@ + + +
+ + + +Loading…
+