Add zero-revenue 499-A filing at $179
New service slug fcc-499a-zero for carriers with no telecom revenue: - $179 instead of $499 (no revenue analysis needed) - Minimal intake: entity, officer, filer ID, filing type only - Skips revenue schedules (blocks 3-4), USF calculations (block 5), traffic study upload, and revenue workbook generation - Fills blocks 1-2 and 6 only, all revenue lines left as zero Compliance checker: shows both options (mutually exclusive checkboxes) Order page: maps form_499a_zero to fcc-499a-zero slug Handler: detects slug and skips revenue pipeline DC Agent shown when either 499-A variant is checked Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5dabac856d
commit
3e04a8fc16
5 changed files with 98 additions and 37 deletions
|
|
@ -32,6 +32,12 @@ const COMPLIANCE_SERVICES: Record<
|
|||
erpnext_item: "FCC-499A",
|
||||
discountable: true,
|
||||
},
|
||||
"fcc-499a-zero": {
|
||||
name: "FCC Form 499-A Filing (Zero Revenue)",
|
||||
price_cents: 17900,
|
||||
erpnext_item: "FCC-499A-ZERO",
|
||||
discountable: true,
|
||||
},
|
||||
"fcc-499a-499q": {
|
||||
name: "FCC Form 499-A + 499-Q Bundle",
|
||||
price_cents: 59900,
|
||||
|
|
@ -284,6 +290,17 @@ const REQUIRED_FIELDS: Record<string, FieldSpec> = {
|
|||
],
|
||||
validators: ["lnpa_sums_100", "de_minimis_calc", "trs_base_nonnegative"],
|
||||
},
|
||||
// Zero-revenue 499-A: minimal intake — no revenue schedules, no traffic study
|
||||
"fcc-499a-zero": {
|
||||
required: [
|
||||
"entity_structure",
|
||||
"officer_1_name", "officer_1_title",
|
||||
"officer_1_street", "officer_1_city", "officer_1_state", "officer_1_zip",
|
||||
"filer_id_499",
|
||||
"filing_type",
|
||||
],
|
||||
soft: ["ceo_name", "trade_names"],
|
||||
},
|
||||
"fcc-499a-499q": {
|
||||
required: [
|
||||
"line_105_primary", "line_105_categories",
|
||||
|
|
@ -340,7 +357,7 @@ const REQUIRED_FIELDS: Record<string, FieldSpec> = {
|
|||
// Entity-level requirements (e.g. "must have an FRN on file before this
|
||||
// service can run"). Checked against the linked telecom_entity.
|
||||
const REQUIRES_ENTITY_FRN: ReadonlySet<string> = new Set([
|
||||
"rmd-filing", "cpni-certification", "fcc-499a", "fcc-499a-499q",
|
||||
"rmd-filing", "cpni-certification", "fcc-499a", "fcc-499a-zero", "fcc-499a-499q",
|
||||
"fcc-499-initial", "stir-shaken", "bdc-filing", "bdc-broadband",
|
||||
"bdc-voice", "calea-ssi", "fcc-63-11-notification", "fcc-full-compliance",
|
||||
]);
|
||||
|
|
@ -393,7 +410,7 @@ function resolveOrderFeeCents(
|
|||
// Compute the baseline per-year price for this order.
|
||||
let perYearPrice = service.price_cents;
|
||||
let baselineNote: string | undefined;
|
||||
if (["fcc-499a", "fcc-499a-499q"].includes(slug)) {
|
||||
if (["fcc-499a", "fcc-499a-zero", "fcc-499a-499q"].includes(slug)) {
|
||||
if (waive_deminimis) {
|
||||
// Waive → full price, overrides any de minimis discount
|
||||
perYearPrice = service.price_cents;
|
||||
|
|
@ -738,7 +755,7 @@ router.post("/api/v1/compliance-orders", async (req, res) => {
|
|||
.map((y: unknown) => Number(y))
|
||||
: null;
|
||||
if (myf && myf.length > 0) {
|
||||
if (!["fcc-499a", "fcc-499a-499q"].includes(service_slug)) {
|
||||
if (!["fcc-499a", "fcc-499a-zero", "fcc-499a-499q"].includes(service_slug)) {
|
||||
res.status(400).json({
|
||||
error: "multi_year_filings only supported for fcc-499a / fcc-499a-499q.",
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue