Skip to content

RFIs

StatusShipped
LinearPIN-296 ↗ PIN-458 ↗ PIN-459 ↗
ModuleSubmittals & RFIs ↗

Requests for Information: drafted by the PM, emailed to the GC/architect/engineer as a PDF, answered in-app on their behalf, then closed. Lives next to Submittals under Project Controls. The real lifecycle starts at Draft (the charter's "Open → Submitted → Answered → Closed" is missing the first step).

Prerequisites

  • Role: PM (full). An Estimating login for the read-only check.
  • Project state: a project with at least one organization attached (the Send modal needs an Organization with a contact email on file).
  • Test data: PDFs from docs-pdfs/ in the test-app-files Drive folder for draft/response attachments.
  • ⚠ Sending emails a real address. On staging, only Send to an organization whose contact email is a test inbox you control.

1. Open the RFI log

Project detail → Project Controls tab → RFIs sub-tab (count badge; Submittals is the default sub-tab). Deep-link: ?tab=project-controls&subtab=rfis. The Overview tab's Create RFI quick action jumps here with the create modal open.

2. Create a draft

New RFI (or empty-state Create RFI). Form fields:

  • Subject * and Question * — validated with toasts.
  • RFI Number — pre-filled RFI-NNN, cosmetic; the real number is assigned at submission.
  • Priority (High/Medium/Low, default Medium), Ball in Court (GC/Architect/Engineer/Pinley, default Architect).
  • Trade — marked required in the UI but not actually validated (known quirk — filing optional).
  • Due Date — defaults to today + 5 business days (weekend-skipping; verify a Thursday create lands on next Thursday).
  • Cost Impact / Schedule Impact — Yes/No/TBD, default TBD.
  • Attachments — same drop-zone as submittals.

Only Save as Draft exists — there is no create-and-send. Double-clicking Save must not create two RFIs (idempotency-guarded).

3. Walk the lifecycle

Draft → Open → Sent → Answered → Closed. Buttons offered per status:

Status Actions
Draft Mark Open, Send, Edit
Open Send, Edit
Sent Log Response
Answered Reopen (→ Sent), Close
Closed Export PDF only (Edit hidden)

An Overdue chip overrides the status label on Open/Sent RFIs past due date. In the log, ball-in-court and due date render as "—" once Closed.

Concurrency: change status from two tabs — the loser must toast "RFI was changed by another user — reloading".

4. Send (email + PDF)

Send opens a modal: Organization * (project organizations), Contact (optional, defaults to org default), Directed To * (General Contractor/Architect/Engineer/Other), optional Message, and a resolved Recipient email preview — the Send RFI button stays disabled if no email is on file.

Sending generates the RFI PDF and emails it; status flips to Sent and the ball moves to the recipient's court. The activity timeline logs "Sent to {name}" with a PDF button that downloads the exact sent artifact.

5. Log the response and close

On a Sent RFI, Log Response opens an inline box: Response textarea (required) + response attachments → Submit Response → status Answered, timeline shows "Response received" attributed to the ball-in-court party. Then Close (or Reopen if the answer needs follow-up).

6. Exports and AI draft

  • Export PDF (detail header) — single RFI.
  • Export Log PDF (log header) — the whole register.
  • Draft with AI — pick project PDFs (Drawings/Specs/Correspondence) → Generate Suggestions → Accept/Reject each → Apply decisions creates the accepted ones as drafts. Nice-to-cover, not core.

RFI PDFs use the same production-safe renderer as Change Orders and Proposals (PIN-504) — a PDF failure on staging IS a bug across all of them, not a known infra issue. Watch for garbled non-Latin characters in PDFs (known bug class).

Verification Checklist

  • Draft saves with only Subject+Question; Trade empty is accepted
  • Due date defaults to +5 business days (skips weekends)
  • Send is blocked until the recipient has an email; after Send the timeline shows the sent copy with a downloadable PDF
  • Log Response requires text; Answered → Close and Answered → Reopen both work
  • Overdue chip appears on a past-due Open/Sent RFI
  • Closed RFI hides Edit and status actions
  • Both PDF exports download; text renders cleanly (no mojibake)
  • Read-only role sees the log but no New/Send/status buttons
  • No console errors throughout

Known Issues / Current Gaps

  • ⚠ Log ↔ create ↔ detail are internal view switches without their own URLs — browser Back exits the whole sub-tab; charter-known, don't re-file.
  • ⚠ There is no Delete button for RFIs by design — only attachment removal.

Updating this walkthrough

Run the full flow yourself end-to-end. If it passes, bump last_verified: in the frontmatter to today's date. If any step fails, fix the doc or the code in the same PR — drift is the enemy.