Recalculate bundle pricing + bundle auto-uncheck individual items

- DOT Full Compliance Bundle: $499 → $399 (saves $376 vs $775 individual)
- State Compliance Bundle: $599 → $499 (saves $297 vs $796 individual)
- D&A marked non-discountable (passthrough cost to testing provider)
- Order page: selecting a bundle auto-unchecks its individual components
  via data-bundle attribute listing component slugs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
justin 2026-05-29 14:49:59 -05:00
parent 4cfcb6a50c
commit 78ed1db15a
4 changed files with 24 additions and 10 deletions

View file

@ -255,7 +255,7 @@ const COMPLIANCE_SERVICES: Record<
name: "DOT Drug & Alcohol Compliance Program",
price_cents: 14900,
erpnext_item: "DOT-DRUG-ALCOHOL",
discountable: true,
discountable: false, // passthrough cost — D&A testing provider
},
"dot-audit-prep": {
name: "New Entrant Safety Audit Preparation",
@ -265,7 +265,7 @@ const COMPLIANCE_SERVICES: Record<
},
"dot-full-compliance": {
name: "DOT Full Compliance Bundle",
price_cents: 49900,
price_cents: 39900, // $399 — includes MCS-150+BOC-3+UCR+D&A+Audit ($775 individual)
erpnext_item: "DOT-FULL-COMPLIANCE",
discountable: true,
},
@ -344,7 +344,7 @@ const COMPLIANCE_SERVICES: Record<
},
"state-trucking-bundle": {
name: "State Compliance Bundle",
price_cents: 59900,
price_cents: 49900, // $499 — IRP+IFTA+weight tax+intrastate ($796 individual)
erpnext_item: "STATE-TRUCKING-BUNDLE",
discountable: true,
},

View file

@ -158,11 +158,11 @@
<label class="svc-card block rounded-xl border-2 border-orange-200 bg-orange-50 p-4 cursor-pointer hover:border-orange-400">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="dot-full-compliance" data-price="49900" class="mt-1 accent-orange-500">
<input type="checkbox" data-slug="dot-full-compliance" data-price="39900" data-bundle="mcs150-update,boc3-filing,ucr-registration,dot-drug-alcohol,dot-audit-prep" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">DOT Full Compliance Bundle</span>
<span class="text-sm font-bold text-orange-600">$499 <span class="text-xs font-normal text-green-600 ml-1">Save $276</span></span>
<span class="text-sm font-bold text-orange-600">$399 <span class="text-xs font-normal text-green-600 ml-1">Save $376</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">MCS-150 + BOC-3 + UCR + Drug & Alcohol Program + Safety Audit Prep — everything you need. Best value.</p>
</div>
@ -291,11 +291,11 @@
<label class="svc-card block rounded-xl border-2 border-orange-200 bg-orange-50 p-4 cursor-pointer hover:border-orange-400" data-state-svc="bundle">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="state-trucking-bundle" data-price="59900" class="mt-1 accent-orange-500">
<input type="checkbox" data-slug="state-trucking-bundle" data-price="49900" data-bundle="irp-registration,ifta-application,or-weight-mile-tax,ny-hut-registration,ky-kyu-registration,nm-weight-distance,ct-highway-use-fee,intrastate-authority" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">State Compliance Bundle</span>
<span class="text-sm font-bold text-orange-600">$599 <span class="text-xs font-normal text-green-600 ml-1">Save vs. individual</span></span>
<span class="text-sm font-bold text-orange-600">$499 <span class="text-xs font-normal text-green-600 ml-1">Save vs. individual</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">IRP + IFTA + weight-distance tax + state permits — everything your state requires. We identify and file all obligations.</p>
</div>
@ -423,6 +423,20 @@ if (stateParam && dot) {
}).catch(function() {});
}
// Bundle logic: checking a bundle unchecks its individual components
document.querySelectorAll("input[data-bundle]").forEach(function(bundleCb) {
bundleCb.addEventListener("change", function() {
if (!bundleCb.checked) return;
var components = (bundleCb.dataset.bundle || "").split(",");
components.forEach(function(slug) {
var cb = document.querySelector('input[data-slug="' + slug + '"]');
if (cb && cb.checked) { cb.checked = false; }
});
});
});
// Reverse: checking an individual component unchecks the bundle if all components are now selected individually
// (optional — skip for simplicity, the bundle is always a better deal)
// Checkbox change → update total
var checkboxes = document.querySelectorAll("input[data-slug]");
var totalSection = document.getElementById("pw-total-section");

File diff suppressed because one or more lines are too long

View file

@ -170,7 +170,7 @@ export const SERVICE_META: Record<string, { name: string; price_cents: number }>
"mc-authority": { name: "MC Operating Authority Application", price_cents: 34900 },
"dot-drug-alcohol": { name: "DOT Drug & Alcohol Compliance Program", price_cents: 14900 },
"dot-audit-prep": { name: "New Entrant Safety Audit Preparation", price_cents: 39900 },
"dot-full-compliance": { name: "DOT Full Compliance Bundle", price_cents: 49900 },
"dot-full-compliance": { name: "DOT Full Compliance Bundle", price_cents: 39900 },
// State-level trucking
"irp-registration": { name: "IRP Registration Assistance", price_cents: 19900 },
"ifta-application": { name: "IFTA Application + Decals", price_cents: 14900 },
@ -184,7 +184,7 @@ export const SERVICE_META: Record<string, { name: string; price_cents: number }>
"state-dot-registration": { name: "State DOT Registration", price_cents: 14900 },
"intrastate-authority": { name: "Intrastate Operating Authority", price_cents: 24900 },
"osow-permit": { name: "Oversize/Overweight Permit", price_cents: 9900 },
"state-trucking-bundle": { name: "State Compliance Bundle", price_cents: 59900 },
"state-trucking-bundle": { name: "State Compliance Bundle", price_cents: 49900 },
};
export function formatUSD(cents: number): string {