The manager's monthly NLC report (design 10) #13
Loading…
Reference in a new issue
No description provided.
Delete branch "feature/manager-nlc-report"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The Contest Manager publishes the month's outcome as a fixed-shape document. They sent their current PDF (
Uitslag_NLC_249_voor_CQ-PA.pdf); this PR makes the robot produce that document.What it looks like
Built from the PDF examined in coordinate space, so the layout is the manager's real one, not a reading:
Nederlandse Locatorcontest nr. <nr> <month> <year>— Dutch month name, editor number supplied at publish time (?nr=249).Call | aantal banden | QSO | Multipliers | Score | VRZA afd. | Afd. Punten, headings in the reglement's wording ("Sectie A Multi band – Multi operator").build_yearly_standing_dataso the participation/drop rule is never reimplemented./manager/contest/{id}/nlc-report?nr=249renders it print-ready; the manager exports the PDF from the browser print dialog, like their current LibreOffice workflow. The dashboard links it. Rendered demo from the live stack:docs/examples/nlc-report-demo.html.What is deliberately NOT produced
docs/open-questions-contest-manager.md(#9 area: puntenregeling, clubstation+afdeling cell, E/F section headings, editor numbering).Privacy (R25) holds: the report exposes only callsign, section, afdeling, band count, QSO count, multipliers and score — a test asserts no email/address/operator name reaches the HTML.
Tests
305 (was 296). New: section grouping and rank order, band/QSO/multiplier counts from the stored score basis (including an ineligible-band entry counted under
-), contest-number pass-through, beker per-afdeling grouping with placeholder totals, year-so-far equals the yearly builder, privacy (no@example, no address), manager-only access, empty-month placeholders, unknown contest redirect, dashboard link. Verified live on the running stack; entry rows match the ingested corpus (PD1SCO 2 bands / 5 QSOs / 25).The Contest Manager publishes the month's outcome as a document of a fixed shape (their current PDF 'Uitslag_NLC_249', examined in coordinate space, so the layout below is the real one rather than a reading): title with editor number and Dutch month name, per-section uitslag in their column order (Call | aantal banden | QSO | Multipliers | Score | VRZA afd. | Afd. Punten) with the reglement's section headings, the Afdelingsbeker with the month's entrants per afdeling, and the year-so-far per section. - app/documents/nlc_report.py builds the data; the year-so-far reuses build_yearly_standing_data so the participation/drop rule is never reimplemented. - /manager/contest/{id}/nlc-report?nr=249 renders it print-ready (A4 stylesheet); the manager exports the PDF from the browser print dialog as they do today. - The uitslag counts the score's basis: eligible-band QSOs, distinct band count, summed multipliers. An ineligible-band entry stays visible (counted under '-'). Everything the document cannot honestly produce is a placeholder, not a guess: the editorial prose and closing (the manager's own voice - the robot does not write manager copy) and the Afd. Punten / beker TOTAAL (their formula does not follow from the sample; open question #9, with the clubstation+afdeling cell and the E/F section headings). docs/examples/nlc-report-demo.html is a rendered sample from the live stack. Tests: 305 (was 296).Follow-up on this PR (commit
cc28b0b): the afdelingsbeker punten are now implemented — found the Contest Manager's own explanation of the rule in the VRZA news that accompanied NLC #236 (August 2025):That is per band: ⌈logged QSO's on the band / 5⌉. Verified against all 35 per-entrant
Afd. Puntencells in the manager's uitslagen #245–#249; the case that pinned the reading is NLC 247's PA2JCB (one band, 25 QSO's, 5 punten — ceil, not floor-plus-base).With it:
Afd. Puntencolumn fills (members without an afdeling stay blank).nris now automatic (anchor: 236 = August 2025, one per consecutive month — matches #245–#249 exactly);?nr=still overrides.SWL's,Operators van de BES-eilanden).Also confirmed from the current reglement text at vrza.nl: "UHF 70cm en hoger" is one band (
Band.HIGHERcorrect), logs are delivered per band (the per-band upload model is exactly right), the SWL 3× rule, the 14-day window, the required multi-op roster and the medal thresholds (1 always; 2 at ≥5; 3 at ≥10 participants; certificates at ≥8).Two nuances left as open questions (confined to one file): whether duplicate QSO's count toward punten (the robot counts logged rows), and the beker
inzenders <month>column label vs its punten-sum content.Tests: 307.