create_rfi
Raise a numbered RFI when the drawing set contradicts itself — mismatched tags, finishes, or scales — and log the question in the estimator's register for the architect to answer.
Instructions
Raise an RFI — a Request For Information — when the drawing set contradicts itself or cannot answer a question you need answered to take the work off: a room-finish schedule row that names a tag the plan never draws, a room label the schedule has no row for, a finish called out two ways, a scale that disagrees with a stated dimension. It lands in the estimator's RFI register (the canvas's RFI panel) with the next number in that register's own sequence (RFI-001, RFI-002, …), status open, dated today, on the sheet you name. You raise it as the agent: the record carries origin {actor: "agent", reviewed: false} and is PENDING — pencil — until the estimator accepts it in the register, because an RFI goes to the architect and nothing sends without a human. It still prints in the marked set's RFI schedule like any other RFI, so the question is on the deliverable. Pass markup_ids to pin it to annotations already on the sheet (annotate a cloud or callout at the conflict first, then link it here) — a linked markup carries the RFI number on the canvas and in the marked set, and list_rfis reports which finish tags the question touches through those links. Prefer this to describing the conflict in prose: a question in the register is tracked, numbered, and answered; a sentence in a reply is lost. Journaled; undo_last takes it back.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sheet | Yes | Sheet name or number the question is about, as sheet_info reports it | |
| title | Yes | The one-line subject the register and the RFI schedule print — what the question is about | |
| question | Yes | What you are asking the architect to answer, stated so a reply can settle it | |
| markup_ids | No | Annotation ids (annotate / list_annotations) to link — they carry this RFI's number on the sheet |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The record id ("rfi-…") | |
| date | Yes | YYYY-MM-DD opened | |
| note | Yes | ||
| actor | Yes | Who raised it — "agent" for every RFI minted over MCP, "estimator" for a panel-raised one | |
| sheet | Yes | The sheet the question is about | |
| number | Yes | The register number, "RFI-001" — next in the panel's own sequence, never reissued | |
| status | Yes | The panel's lifecycle: open → answered → closed; void = withdrawn | |
| pending | Yes | true = agent-raised and not yet accepted by an estimator in the register (origin.reviewed false) — pencil, not sent | |
| subject | Yes | ||
| question | Yes | ||
| response | Yes | ||
| conditions | Yes | Finish tags the linked markups are attached to — the scopes this question touches | |
| response_date | Yes | YYYY-MM-DD answered, '' while open | |
| linked_markups | Yes | Annotation ids carrying this RFI's number on the sheet (markup.rfi_id) — derived, never stored twice |