Reports
A library of canned registers and analytics that download on demand, plus a one-time summary email you send by hand
The Reports surface holds two things that are deliberately not merged:
- The report library, above. Every row is a real route that renders a real document when you click Generate. The file downloads immediately.
- The report table, below. It tracks jobs the backend is running. In practice it holds revision change reports and nothing else.
They stay separate because a row that hands you a file now and a row that tracks a job in flight are different things, and somebody who cannot tell them apart will sit waiting for a file that already arrived.
The report library
Eleven entries. Nine generate a file on the spot; two link out because generating them needs context this page does not have.
| Report | Source | Formats | Needs |
|---|---|---|---|
| RFI log | RFIs | PDF, CSV | |
| Submittal log | Submittals | PDF, CSV | |
| Punch list | Punch list | PDF, CSV | |
| Findings register | Findings | PDF, CSV | |
| Manpower report | Daily logs | PDF, CSV | A date range |
| Safety rates (TRIR/DART) | Safety, Daily logs | PDF, CSV | A date range |
| Approvers' response time | Submittals | PDF, CSV | |
| Punch aging by company | Punch list, Directory | PDF, CSV | |
| RFI response times | RFIs | PDF, CSV | |
| Look ahead plan | Schedule | Link only | Pick a plan on the schedule board, then export it there |
| Daily log | Daily logs | Link only | Open the day you want, then export it there |
PDF and CSV only. XLSX is not offered, because no route produces one. A request for any other format is refused rather than quietly handed a PDF: if you ask for a spreadsheet, being given a PDF is the failure you will not check for.
What each one contains
- RFI log. Every RFI as one register: number, subject, status, RFI manager, ball in court, dates, days late, reply counts.
- Submittal log. Spec section, number, status, responsible contractor, ball in court, dates, days held.
- Punch list. Number, title, status, priority, trade, location, due date, assignees, ball in court.
- Findings register. Every finding raised on the project, one row each. Dismissed findings are left out unless you ask for them. See Findings for how to work them.
- Manpower report. Man-hours by company across a date window, from the daily log. Man-hours are workers multiplied by hours per worker. Copied-forward entries are counted and marked as copied.
- Safety rates (TRIR/DART). Recordable incidents over a window, the man-hours worked in it, and the rate. Read Safety before relying on it: DART is not computed, EMR is not computed, and "recordable" is the filer's own classification.
- Approvers' response time. How long each party held a submittal, per approver and per role, from the ball-in-court record. Reported in hours, because Struxen holds no project calendar and cannot convert to working days.
- Punch aging by company. Open punch items bucketed by how late they are and grouped by the firm assigned.
- RFI response times. Time from an RFI opening to its first official reply, per RFI and per responder. This is a snapshot: official status can be assigned to a different reply later, so the figures can change.
Date ranges
The manpower report and the safety rates report both ask for a window. There is no default, and there deliberately is not one: guessing at "last 30 days" would put a range in a heading nobody chose.
Why a row is missing
The library hides any row whose source modules you cannot read, so it never offers a download that can only fail. A report that reads two modules needs read access to both, because a document that silently omits a section reads as a document about a project where that section is empty.
The server re-checks independently on every request, and a refusal names the tool you are missing rather than sending you to support.
Reports are reads. Nothing in the library calls a model and nothing in it costs credits.
Export findings
Export findings, in the surface header, downloads every finding on the project as one file: PDF register or CSV, with an Include dismissed findings checkbox.
The file downloads straight to your device and is not saved to the report table below. The PDF and the CSV are assembled from one source, so they cannot disagree with each other.
Send summary now
Send summary now sends one snapshot of open items, once, to people you choose.
- Pick recipients under Send to. These are project members, chosen from the project team.
- Pick modules under Include: RFIs, Submittals, Punch list.
- Click Send now.
There is no scheduler
Struxen has no in-app cron. There is no EventBridge rule, no queue, and no worker that wakes up on a Monday and mails a digest. This sends one summary, now, because a person pressed a button. Nothing in the product offers a daily, weekly, or recurring version, and nothing here implies one exists.
Recipients are user ids, never addresses
The request carries project-member identities, and each is looked up in the project roster. An arbitrary email address is refused. Accepting one would turn this into an open relay wearing Struxen branding.
At most 25 recipients per send.
Each copy is composed for its own recipient
Each module is read once, then filtered for each recipient through that module's own visibility rules applied to the live record. A summary composed from the sender's view and mailed to everyone is how a private RFI's subject line reaches somebody who is not on it, and an email cannot be clawed back.
A recipient who can read none of the chosen modules is reported as Skipped: no access to the chosen modules and is not sent anything. Sending them an empty summary would tell them the project has no open work, which is a different and false statement.
The outcome is reported per recipient
| Outcome | Meaning |
|---|---|
| Sent | The message was handed to the mail service |
| Email is disabled in this environment | Outbound email is switched off here. Nothing was sent, and the dialog says so instead of showing a success message |
| Could not be sent | The send failed |
| Skipped: no access to the chosen modules | Nothing to send this person |
Whether email leaves your environment at all depends on how it is configured. Read the per-recipient outcome rather than assuming delivery.
The report table
The table below the library lists revision change reports. Those are produced by the annotate worker and are started from the sheet viewer's Export annotated PDF, not from this page. Nothing on this page creates a row in it.
| Status | Meaning |
|---|---|
| Draft | |
| Generating | The worker is running |
| Ready | The file is available to download |
| Failed | The run did not finish |
Retry on a failed row genuinely re-dispatches the annotate run, and it costs credits. A row with no source run has no address to re-dispatch to, so Retry is shown disabled with that reason rather than firing and claiming success.
Nothing on this surface asserts a file, a size, a count, or a completion state the backend did not produce.
Permissions
There is no separate Reports permission. Each row is gated on the tools it reads. See Permissions.
| Report | Needs READ on |
|---|---|
| RFI log, RFI response times | RFIs |
| Submittal log, Approvers' response time | Submittals |
| Punch list | Punch list |
| Punch aging by company | Punch list and Directory |
| Manpower report, Daily log | Daily logs |
| Safety rates | Observations and Daily logs |
| Look ahead plan | Schedule |
| Findings register | Project access, checked by the findings route itself |
| Send summary now | The tools behind each module you include |
Limits
| Limit | Value |
|---|---|
| Recipients per summary send | 25 |
| Formats | PDF and CSV |
| Summary modules | RFIs, Submittals, Punch list |
| Items listed per summary section | 5 most overdue |
Every enforced limit across Struxen is collected at Limits.
Troubleshooting
A report you expected is not in the library. You lack read access to one of its source modules. The row is hidden rather than offered as a guaranteed failure. The table above says which tools each report reads.
A download was refused with a named tool. That report reads more than one module and you can read only some of them. It refuses rather than handing you a document with a section silently missing.
There is no XLSX option. There is no route that produces one. Use CSV.
"Generate" produced nothing in the table below. Correct. Library reports download to your device and are never stored, so they do not appear there. The table tracks revision change reports only.
Every recipient came back as "Email is disabled in this environment". Outbound email is switched off. Nothing was sent. The dialog reports it rather than showing a success message for a message nobody received.
A recipient came back as "Skipped". They cannot read any of the modules you chose. Give them access, or drop them from the send.
You want this to go out every Monday. It cannot. There is no scheduler. Send it when you want it sent.
Retry is disabled on a failed row. That report has no source run recorded, so there is nothing to re-dispatch.