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
|
|
@ -61,6 +61,7 @@ SERVICE_HANDLERS: dict[str, type] = {
|
|||
"rmd-filing": RMDFilingHandler,
|
||||
"cpni-certification": CPNIFilingHandler,
|
||||
"fcc-499a": Form499AHandler,
|
||||
"fcc-499a-zero": Form499AHandler, # same handler, zero_revenue flag set from slug
|
||||
"fcc-499a-499q": Form499ABundleHandler,
|
||||
"stir-shaken": StirShakenHandler,
|
||||
# BDC triple — same handler, mode auto-resolved from slug
|
||||
|
|
@ -96,6 +97,7 @@ FCC_SERVICE_SLUGS: frozenset[str] = frozenset({
|
|||
"rmd-filing",
|
||||
"cpni-certification",
|
||||
"fcc-499a",
|
||||
"fcc-499a-zero",
|
||||
"fcc-499a-499q",
|
||||
"stir-shaken",
|
||||
"bdc-filing",
|
||||
|
|
|
|||
|
|
@ -419,27 +419,29 @@ class Form499AHandler(BaseServiceHandler):
|
|||
except Exception as exc:
|
||||
logger.warning("499-A checklist PDF conversion failed: %s", exc)
|
||||
|
||||
try:
|
||||
from scripts.document_gen.templates.form_499a_revenue_workbook_generator import (
|
||||
generate_499a_revenue_workbook,
|
||||
)
|
||||
workbook_path = os.path.join(
|
||||
work_dir, f"fcc_499a_revenue_workbook_{order_number}_{date_str}.xlsx",
|
||||
)
|
||||
traffic_study = self._load_traffic_study(entity.get("id"))
|
||||
wb_result = generate_499a_revenue_workbook(
|
||||
entity_name=entity.get("legal_name", ""),
|
||||
filer_id_499=entity.get("filer_id_499", ""),
|
||||
frn=entity.get("frn", ""),
|
||||
reporting_year=int(entity.get("last_filing_year") or 0)
|
||||
or (datetime.utcnow().year - 1),
|
||||
traffic_study=traffic_study,
|
||||
output_path=workbook_path,
|
||||
)
|
||||
if wb_result:
|
||||
generated.append(wb_result)
|
||||
except Exception as exc:
|
||||
logger.warning("499-A revenue workbook generation failed: %s", exc)
|
||||
# Skip revenue workbook for zero-revenue filings
|
||||
if order_data.get("service_slug") != "fcc-499a-zero":
|
||||
try:
|
||||
from scripts.document_gen.templates.form_499a_revenue_workbook_generator import (
|
||||
generate_499a_revenue_workbook,
|
||||
)
|
||||
workbook_path = os.path.join(
|
||||
work_dir, f"fcc_499a_revenue_workbook_{order_number}_{date_str}.xlsx",
|
||||
)
|
||||
traffic_study = self._load_traffic_study(entity.get("id"))
|
||||
wb_result = generate_499a_revenue_workbook(
|
||||
entity_name=entity.get("legal_name", ""),
|
||||
filer_id_499=entity.get("filer_id_499", ""),
|
||||
frn=entity.get("frn", ""),
|
||||
reporting_year=int(entity.get("last_filing_year") or 0)
|
||||
or (datetime.utcnow().year - 1),
|
||||
traffic_study=traffic_study,
|
||||
output_path=workbook_path,
|
||||
)
|
||||
if wb_result:
|
||||
generated.append(wb_result)
|
||||
except Exception as exc:
|
||||
logger.warning("499-A revenue workbook generation failed: %s", exc)
|
||||
|
||||
return generated
|
||||
|
||||
|
|
@ -529,14 +531,24 @@ class Form499AHandler(BaseServiceHandler):
|
|||
await page.click('text="Form 499-A"')
|
||||
await human_delay()
|
||||
|
||||
revenue_lines = self._build_revenue_lines(entity, intake_data)
|
||||
is_zero_revenue = order_data.get("service_slug") == "fcc-499a-zero"
|
||||
|
||||
await self._phase_block_1(page, entity, intake_data)
|
||||
await self._phase_block_2(page, entity, intake_data)
|
||||
await self._phase_blocks_3_4(page, entity, intake_data, revenue_lines)
|
||||
await self._phase_block_5(page, entity, intake_data, revenue_lines)
|
||||
await self._phase_block_6(page, entity, intake_data)
|
||||
await self._phase_submit_traffic_study(page, entity, work_dir)
|
||||
if is_zero_revenue:
|
||||
# Zero-revenue filing: skip revenue schedules and traffic study
|
||||
logger.info("Zero-revenue 499-A — skipping blocks 3-5 and traffic study")
|
||||
revenue_lines = {}
|
||||
await self._phase_block_1(page, entity, intake_data)
|
||||
await self._phase_block_2(page, entity, intake_data)
|
||||
# Blocks 3-4 (revenue) and 5 (USF) left as zero
|
||||
await self._phase_block_6(page, entity, intake_data)
|
||||
else:
|
||||
revenue_lines = self._build_revenue_lines(entity, intake_data)
|
||||
await self._phase_block_1(page, entity, intake_data)
|
||||
await self._phase_block_2(page, entity, intake_data)
|
||||
await self._phase_blocks_3_4(page, entity, intake_data, revenue_lines)
|
||||
await self._phase_block_5(page, entity, intake_data, revenue_lines)
|
||||
await self._phase_block_6(page, entity, intake_data)
|
||||
await self._phase_submit_traffic_study(page, entity, work_dir)
|
||||
|
||||
await human_delay(1.5, 3.0)
|
||||
await page.click('button:has-text("Review")')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue