Platform
DICT AP Report
DICT asks for one row per access point per day with the reason it was offline. The NOC already knows both; this page generates that sheet instead of anyone typing it.
What it is
Every NOC project has DICT AP Report in its menu. Pick a day (it opens on yesterday, Philippine time), and you get one row for every access point on the project: its status at the end of that day, how many hours it was polled offline, and — for an offline AP — the reason in DICT's words, the helpdesk ticket behind it, the next action and its due date. Export XLSX writes the whole day, every AP, in DICT's column order.
Nothing on this page is typed by hand
Where each column comes from
| Column | Source |
|---|---|
| Site Code / Site Name / Municipality | The site group (groups): its DICT site code, name and locality. |
| AP Name / AP MAC | The device record (devices, type AP). Gateways, routers and switches are not on the sheet. |
| Status | The AP's status in the last hourly poll of the day (deviceUptimeHourlyLogs). Vendor statuses are normalised first — Huawei reports codes, not words. |
| Hours down | How many of the day's hourly polls found the AP offline, out of 24. When the collector missed hours, the Source column says how many went unpolled and when the AP was last polled, and a line above the table says how many APs were short; a missed hour counts as neither up nor down. |
| Reason Offline | The cause code on the site's ticket, in DICT's words; or a rule, when there is no ticket. See below. |
| Ticket No. / Action Taken / ETA / DICT Ref | The newest helpdesk ticket on the site that was open at any point that day: its id, next action, next-action due date and DICT reference number. |
How the reason is decided
Tickets are raised per site. An offline AP takes its reason from the site's ticket if the site had one that day — still open, or closed on or after the day began. The cause code is translated as follows; a ticket whose cause is still UNK reads Under investigation.
| Cause code | Reason on the sheet |
|---|---|
SCHED-OFF | Scheduled shutdown (confirmed by site) |
NMS-DISC | NMS discrepancy — online on provider cloud |
PWR-COM | Commercial power outage |
PWR-SITE | Site power (UPS / breaker / unplugged) |
WX-RAIN | Rain or flooding |
WX-STORM | Typhoon / severe weather |
SAT-OBS | Starlink obstruction / rain fade |
FIB-CUT | Fiber or cable cut |
CAR-FAULT | ISP outage |
PWR-SOLAR | Solar power damage |
EQP-FAIL | Hardware failure |
AP-DOWN | AP fault — site online |
CFG-CHG | Configuration change |
SITE-ACC | Site access unavailable |
CLI-SIDE | Client-side equipment or action |
MNT-PLN | Planned maintenance |
SELF-REC | Recovered on its own |
When the site has no ticket covering the day, one of these applies, in this order:
| Reason on the sheet | When |
|---|---|
| Scheduled off-hours | The site is on a schedule and was off at the cut-off. |
| AP fault — site online | Other APs at the site are up, so this is an AP-level fault; tickets are raised per site. |
| Site outage — ticket pending | The whole site was down all day with no ticket on file. This row is the NOC's to-do list. |
| Under observation (<24 h) | The site went down during this day and has no ticket yet — inside the playbook's 24-hour hold. |
What the NOC has to do
The report is only as right as the tickets. Before exporting a day, the rows that say Site outage — ticket pending are the to-do list: raise the ticket, give it a real cause code. Rows that say Under investigation have a ticket with UNK — replace it when the cause is known. A site that is off on purpose should carry the Scheduled tag in its settings, so it stops showing as an outage every day.
Closed tickets only count on the day they were closed
Reading the page
The row of pills above the table is the day's headcount, the way the NOC sites table does it: each pill counts sites first and the AP rows behind them, and clicking one filters the table. Cause code is the sites whose ticket carries a real cause; Under investigation is a ticket still on UNK; Scheduled is off-hours on a SCHEDULED site; No ticket is everything offline with neither — and when it is selected the split underneath (ticket pending, under observation, AP fault on a site that is up) says which of those need a ticket filed. No data andNo site code only appear when there is something in them.
Column headers sort — one click sorts, a second flips it, and the footer offers the way back to site order. The table pages at 10, 25 or 50 rows; the export is never the page on screen, always the whole sheet. Site code and site name stay put while the rest of the table scrolls.
What counts as offline — the threshold
DICT has not yet said whether the sheet is what was down at the end of the day or anything down for more than some number of hours. Until it does, the Offline = control in the toolbar is that decision, and it is applied on the server so the page, the file and the API all mean the same thing:
- Status at the cut-off (default) — an AP is offline when its last poll of the day was offline, however long it had been down. An AP that dropped for two hours at noon and came back is Online, with its hours down still in the sheet.
- Down ≥ N h — an AP polled offline for at least N hours that day is on the sheet: Offline if still down at the cut-off, Recovered if back up (its reason comes from the site's ticket, or reads Recovered within the day). Everything shorter is Online — including an outage shorter than N that is still running at the cut-off; it is reported on the day it qualifies, and its Source column says "still down at the cut-off — under the threshold" in the meantime.
On a typical day the difference is not small: on the 458-site project, 347 APs were down at the end of 20 Sep 2026 and another 241 had been down for some hours and recovered. Which of those DICT wants is the question to settle with them.
Exporting for DICT
Export XLSX downloads one sheet named for the date, columns in DICT's order plus Hours Down, Hours Unpolled and Source at the end. TheAll APs / Offline only switch beside it decides what the file holds — every AP for a complete sheet, or just the offline rows — and is independent of the on-screen filter. CSV is the same rows. The column names and reason wording follow DICT's own sheet; when that changes, only the mapping in lib/dict-report-rules.ts changes.