dot-compliance, trucking-new-carrier, neca-ocn, fcc-carrier-registration, corporation-check, identity-complete, state-puc, fcc-499q. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
236 lines
11 KiB
HTML
236 lines
11 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>FCC Form 499-Q Quarterly Filing — Performance West Inc.</title>
|
|
<script>
|
|
window.__PW_API = (function() {
|
|
var h = window.location.hostname;
|
|
if (h === "localhost" || h === "127.0.0.1") return "http://" + h + ":3001";
|
|
if (h === "dev.performancewest.net") return "https://api.dev.performancewest.net";
|
|
return "https://api.performancewest.net";
|
|
})();
|
|
</script>
|
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
<style>
|
|
*{box-sizing:border-box;margin:0;padding:0}
|
|
body{font-family:'Inter',system-ui,sans-serif;color:#1f2937;background:#f9fafb;line-height:1.6}
|
|
.wrap{max-width:640px;margin:0 auto;padding:2rem 1.25rem 4rem}
|
|
h1{font-size:1.5rem;font-weight:700;color:#111827;margin-bottom:.25rem}
|
|
.subtitle{font-size:.88rem;color:#6b7280;margin-bottom:1.5rem}
|
|
.card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:1.25rem;margin-bottom:1rem}
|
|
.card h2{font-size:1rem;font-weight:700;color:#1e3a5f;margin-bottom:.75rem}
|
|
.label{display:block;font-size:.82rem;font-weight:600;color:#374151;margin-bottom:.3rem;margin-top:.75rem}
|
|
input[type=text],input[type=number]{width:100%;padding:.5rem .7rem;border:1px solid #d1d5db;border-radius:8px;font-size:.88rem}
|
|
input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px rgba(30,58,95,.15)}
|
|
.btn{display:inline-flex;align-items:center;justify-content:center;padding:.65rem 1.5rem;border-radius:8px;font-weight:600;font-size:.92rem;cursor:pointer;border:none;transition:all .15s;font-family:inherit}
|
|
.btn-primary{background:#1e3a5f;color:#fff}.btn-primary:hover{background:#162e4d}
|
|
.btn-primary:disabled{opacity:.5;cursor:not-allowed}
|
|
.info{padding:.6rem .85rem;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px;font-size:.82rem;color:#1e40af;margin-bottom:1rem}
|
|
.revenue-row{display:flex;gap:.5rem;align-items:center;margin-bottom:.4rem}
|
|
.revenue-row label{flex:1;font-size:.84rem;color:#374151}
|
|
.revenue-row input{flex:0 0 140px}
|
|
.err{color:#dc2626;font-size:.82rem;margin-top:.5rem;display:none}
|
|
.success{background:#f0fdf4;border:2px solid #22c55e;border-radius:12px;padding:1.5rem;text-align:center}
|
|
.success h2{color:#166534}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="wrap">
|
|
<h1>FCC Form 499-Q — Quarterly Filing</h1>
|
|
<p class="subtitle">Report your projected quarterly USF contributions based on actual telecom revenue for the prior quarter.</p>
|
|
|
|
<div id="loading" class="info">Loading order details...</div>
|
|
|
|
<div id="form-section" class="hidden">
|
|
<div class="card">
|
|
<h2 id="quarter-title">Quarterly Revenue</h2>
|
|
<p class="info" id="period-info"></p>
|
|
|
|
<p style="font-size:.84rem;color:#6b7280;margin-bottom:.75rem">Enter your actual telecom revenue for the reporting period. All amounts in US dollars. Enter 0 for lines that don't apply.</p>
|
|
|
|
<div id="revenue-fields">
|
|
<label class="label">Carrier's Carrier / Wholesale Revenue</label>
|
|
<div class="revenue-row">
|
|
<label>Interstate & International</label>
|
|
<input type="number" id="rev-cc-inter" value="0" min="0" step="0.01">
|
|
</div>
|
|
<div class="revenue-row">
|
|
<label>Intrastate</label>
|
|
<input type="number" id="rev-cc-intra" value="0" min="0" step="0.01">
|
|
</div>
|
|
|
|
<label class="label" style="margin-top:1rem">End-User Revenue</label>
|
|
<div class="revenue-row">
|
|
<label>Interstate & International</label>
|
|
<input type="number" id="rev-eu-inter" value="0" min="0" step="0.01">
|
|
</div>
|
|
<div class="revenue-row">
|
|
<label>Intrastate</label>
|
|
<input type="number" id="rev-eu-intra" value="0" min="0" step="0.01">
|
|
</div>
|
|
|
|
<label class="label" style="margin-top:1rem">Total Revenue (auto-calculated)</label>
|
|
<div style="font-size:1.1rem;font-weight:700;color:#1e3a5f;padding:.5rem 0" id="total-rev">$0.00</div>
|
|
</div>
|
|
|
|
<label style="display:flex;align-items:flex-start;gap:.5rem;padding:.5rem;margin-top:.75rem;border:1px solid #e5e7eb;border-radius:8px;cursor:pointer;font-size:.78rem;color:#6b7280;line-height:1.5">
|
|
<input type="checkbox" id="zero-confirm" style="margin-top:2px;accent-color:#1e3a5f">
|
|
<span id="zero-label" class="hidden">I confirm that this entity had <strong>$0 telecom revenue</strong> during this quarter.</span>
|
|
<span id="nonzero-label">I certify that the revenue figures above are accurate to the best of my knowledge.</span>
|
|
</label>
|
|
|
|
<div style="margin-top:1rem;text-align:right">
|
|
<button class="btn btn-primary" id="btn-submit" disabled>Submit 499-Q Filing</button>
|
|
</div>
|
|
<p class="err" id="submit-err"></p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="success-section" class="hidden">
|
|
<div class="success">
|
|
<h2>499-Q Filing Submitted</h2>
|
|
<p style="color:#166534;margin-top:.5rem" id="success-msg"></p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="error-section" class="hidden">
|
|
<div class="card" style="border-color:#fca5a5;background:#fef2f2">
|
|
<h2 style="color:#991b1b">Error</h2>
|
|
<p style="color:#7f1d1d" id="error-msg"></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
(function() {
|
|
var API = window.__PW_API;
|
|
var params = new URLSearchParams(window.location.search);
|
|
var orderNumber = params.get("order");
|
|
|
|
if (!orderNumber) {
|
|
document.getElementById("loading").classList.add("hidden");
|
|
document.getElementById("error-section").classList.remove("hidden");
|
|
document.getElementById("error-msg").textContent = "No order number provided. Please use the link from your reminder email.";
|
|
return;
|
|
}
|
|
|
|
// Load order details
|
|
fetch(API + "/api/v1/compliance-orders/" + orderNumber)
|
|
.then(function(r) { return r.json(); })
|
|
.then(function(data) {
|
|
document.getElementById("loading").classList.add("hidden");
|
|
|
|
if (data.error) {
|
|
document.getElementById("error-section").classList.remove("hidden");
|
|
document.getElementById("error-msg").textContent = data.error;
|
|
return;
|
|
}
|
|
|
|
var intake = data.intake_data || {};
|
|
if (intake.intake_completed) {
|
|
document.getElementById("success-section").classList.remove("hidden");
|
|
document.getElementById("success-msg").textContent =
|
|
"This quarterly filing has already been submitted. You'll receive a confirmation email when it's processed.";
|
|
return;
|
|
}
|
|
|
|
var quarter = intake.quarter || "Q?";
|
|
var dueDate = intake.due_date || "TBD";
|
|
var periodEnd = intake.period_end_date || "";
|
|
var entityName = intake.entity_name || data.customer_name || "";
|
|
|
|
document.getElementById("quarter-title").textContent =
|
|
quarter + " Quarterly Revenue — " + entityName;
|
|
document.getElementById("period-info").innerHTML =
|
|
"<strong>Filing:</strong> " + quarter + " (due " + dueDate + ")" +
|
|
(periodEnd ? " · <strong>Period ending:</strong> " + periodEnd : "") +
|
|
(intake.filer_id_499 ? " · <strong>Filer ID:</strong> " + intake.filer_id_499 : "");
|
|
|
|
document.getElementById("form-section").classList.remove("hidden");
|
|
})
|
|
.catch(function() {
|
|
document.getElementById("loading").classList.add("hidden");
|
|
document.getElementById("error-section").classList.remove("hidden");
|
|
document.getElementById("error-msg").textContent = "Could not load order details. Please try again.";
|
|
});
|
|
|
|
// Revenue calculation
|
|
var fields = ["rev-cc-inter", "rev-cc-intra", "rev-eu-inter", "rev-eu-intra"];
|
|
fields.forEach(function(id) {
|
|
document.getElementById(id).addEventListener("input", updateTotal);
|
|
});
|
|
|
|
function getTotal() {
|
|
var total = 0;
|
|
fields.forEach(function(id) { total += parseFloat(document.getElementById(id).value) || 0; });
|
|
return total;
|
|
}
|
|
|
|
function updateTotal() {
|
|
var total = getTotal();
|
|
document.getElementById("total-rev").textContent = "$" + total.toFixed(2);
|
|
// Show zero confirmation if all fields are 0
|
|
var isZero = total === 0;
|
|
document.getElementById("zero-label").classList.toggle("hidden", !isZero);
|
|
document.getElementById("nonzero-label").classList.toggle("hidden", isZero);
|
|
}
|
|
|
|
document.getElementById("zero-confirm").addEventListener("change", function() {
|
|
document.getElementById("btn-submit").disabled = !this.checked;
|
|
});
|
|
|
|
// Submit
|
|
document.getElementById("btn-submit").addEventListener("click", async function() {
|
|
var btn = this;
|
|
var errEl = document.getElementById("submit-err");
|
|
errEl.style.display = "none";
|
|
|
|
if (!document.getElementById("zero-confirm").checked) {
|
|
errEl.textContent = "Please confirm the revenue figures.";
|
|
errEl.style.display = "block";
|
|
return;
|
|
}
|
|
|
|
btn.disabled = true;
|
|
btn.textContent = "Submitting...";
|
|
|
|
try {
|
|
var resp = await fetch(API + "/api/v1/compliance-orders/" + orderNumber + "/intake", {
|
|
method: "PUT",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify({
|
|
intake_data: {
|
|
intake_completed: true,
|
|
completed_at: new Date().toISOString(),
|
|
revenue: {
|
|
carriers_carrier_interstate: parseFloat(document.getElementById("rev-cc-inter").value) || 0,
|
|
carriers_carrier_intrastate: parseFloat(document.getElementById("rev-cc-intra").value) || 0,
|
|
end_user_interstate: parseFloat(document.getElementById("rev-eu-inter").value) || 0,
|
|
end_user_intrastate: parseFloat(document.getElementById("rev-eu-intra").value) || 0,
|
|
total: getTotal(),
|
|
},
|
|
},
|
|
}),
|
|
});
|
|
var result = await resp.json();
|
|
if (!resp.ok) throw new Error(result.error || "Submission failed");
|
|
|
|
document.getElementById("form-section").classList.add("hidden");
|
|
document.getElementById("success-section").classList.remove("hidden");
|
|
document.getElementById("success-msg").textContent =
|
|
"Your quarterly revenue data has been submitted. We'll file the 499-Q with USAC and send you a confirmation email.";
|
|
} catch (err) {
|
|
errEl.textContent = err.message || "Something went wrong.";
|
|
errEl.style.display = "block";
|
|
btn.disabled = false;
|
|
btn.textContent = "Submit 499-Q Filing";
|
|
}
|
|
});
|
|
})();
|
|
</script>
|
|
<!-- Tawk.to Live Chat --><script>var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();(function(){var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];s1.async=true;s1.src="https://embed.tawk.to/69d5a9ca0d1c3f1c37998081/1jll9ufph";s1.charset="UTF-8";s1.setAttribute("crossorigin","*");s0.parentNode.insertBefore(s1,s0);})();</script>
|
|
</body>
|
|
</html>
|