rfis

This table stores top-level Request for Information records. Each row represents one RFI and holds the current state, ownership, routing status, due dates, and key identifying metadata.

Domain: Workflow Engine / RFIs
Scope: Tenant / Project
Status: Proposed
Last Updated: 11 Apr 2026
Mutable: Yes
Primary Owner: RFI Service / Core API
RLS Applies: Yes
Client Facing: Yes

Purpose

The purpose of this table is to store the canonical RFI record that users search, view, track, and report on throughout the project lifecycle.

What this table does

  • Stores the main business record for an RFI
  • Tracks current status and ball-in-court ownership
  • Links RFIs to projects and optionally to drawing locations
  • Acts as the parent record for threaded responses and history
  • Supports dashboards, filters, reporting, and notification workflows

Why this table is defined

DirtView treats RFIs as first-class workflow entities. Users need a stable object with searchable fields, due dates, routing state, and relationships to drawings, attachments, and threaded responses.

Columns

Column Type Required Description Example
iduuidYesPrimary key for the RFIrfi_001
tenant_iduuidYesTenant owning the RFItenant_001
project_iduuidYesProject the RFI belongs toproject_phoenix
rfi_numbertextYesHuman-visible RFI numberRFI-042
subjecttextYesShort title or subjectClarify stair landing detail
question_texttextYesMain question/request textPlease confirm the landing elevation...
statustextYesWorkflow statusopen
current_partytextNoCurrent responsible party / ball-in-courtarchitect
created_byuuidNoUser who created the RFIuser_123
assigned_to_contact_iduuidNoCurrent external/internal contactpcontact_009
due_datedateNoRequested due date2026-04-18
drawing_sheet_iduuidNoOptional linked drawing sheetdsheet_001
drawing_pinjsonbNoOptional pinned location on drawing{"x":0.42,"y":0.61}
distribution_group_iduuidNoDefault notification groupdgroup_010
metadatajsonbYesFlexible workflow metadata{"cost_code":"03 30 00"}
created_attimestamptzYesCreation timestamp2026-04-11 11:00:00+00
updated_attimestamptzYesLast update timestamp2026-04-11 12:10:00+00
closed_attimestamptzNoWhen the RFI was closedNULL

Relationships

How it is used

  • Used in RFI list screens and dashboards
  • Queried for open/closed/overdue reporting
  • Used as the primary object for routing and notification triggers
  • Linked to drawings for location-aware issue tracking

Access and security

  • Project membership and module permissions must apply
  • External access should be constrained through guest access grants
  • Status changes and reassignment should be audited
  • Closed RFIs should remain read-only unless reopened by authorized users

Example scenarios

Scenario 1: Superintendent creates RFI from drawing

A user long-presses on a drawing location, opens an RFI form, and creates a new RFI linked to that sheet and pin.

Scenario 2: Architect response pending

The RFI remains open with current_party=architect until a formal response is posted.

Scenario 3: Closed RFI

After final response and distribution, the RFI status becomes closed.

Notes and assumptions

  • Keep the main RFI table optimized for search and dashboard queries
  • Detailed conversation history belongs in rfi_threads
  • Use a separate numbering strategy per tenant or project as needed