> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vein.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Respond to a report request

> Fill an investor's request for specific metrics over a specific period.

export const Diagram = ({kind = "chain", steps = [], feedback = null, sources = [], decision = null, result = null, source = null, hub = null, branches = [], pairs = []}) => {
  const glyph = k => <svg viewBox="0 0 20 12" fill="none" aria-hidden="true" key={k}>
      <path d="M1 6h15.5" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" />
      <path d="M13.5 1.5 18.5 6l-5 4.5" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" strokeLinejoin="round" />
    </svg>;
  const arrow = k => <span className="vein-flow__chevron" key={`a${k}`}>
      {glyph(k)}
    </span>;
  const box = (n, k, variant) => n ? <div key={`n${k}`} className={variant ? `vein-flow__node vein-flow__node--${variant}` : "vein-flow__node"}>
        <span className="vein-flow__label">{n.label}</span>
        {n.note ? <span className="vein-flow__note">{n.note}</span> : null}
      </div> : null;
  const spine = paths => <div className="vein-flow__spine">
      <svg viewBox="0 0 100 100" preserveAspectRatio="none" fill="none">
        {paths.map(d => <path key={d} d={d} stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" vectorEffect="non-scaling-stroke" />)}
      </svg>
    </div>;
  if (kind === "merge") {
    return <div className="vein-flow">
        <div className="vein-flow__branching">
          <div className="vein-flow__stack">
            {sources.map((s, i) => <div className="vein-flow__row" key={s.label}>
                {box(s, i)}
              </div>)}
          </div>
          {}
          {spine(["M0 25C55 25 45 50 100 50", "M0 75C55 75 45 50 100 50"])}
          {arrow("d")}
          {box(decision, "d", "decision")}
          {arrow("r")}
          {box(result, "r", "strong")}
        </div>
      </div>;
  }
  if (kind === "fan") {
    return <div className="vein-flow">
        <div className="vein-flow__branching">
          {box(source, "s")}
          {arrow("s")}
          {box(hub, "h")}
          {}
          {spine(["M0 50C55 50 45 16.667 100 16.667", "M0 50H100", "M0 50C55 50 45 83.333 100 83.333"])}
          <div className="vein-flow__stack">
            {branches.map((b, i) => <div className="vein-flow__row" key={b.label}>
                {arrow(`b${i}`)}
                {box(b, `b${i}`)}
              </div>)}
          </div>
        </div>
      </div>;
  }
  if (kind === "compare") {
    return <div className="vein-flow">
        <div className="vein-flow__compare">
          {pairs.map((p, i) => <div className="vein-flow__pair" key={p.from.label}>
              {box(p.from, `f${i}`)}
              {arrow(`p${i}`)}
              {box(p.to, `t${i}`, "strong")}
            </div>)}
        </div>
      </div>;
  }
  const n = steps.length;
  const centre = i => `${((i + 0.5) / n * 100).toFixed(3)}%`;
  return <div className="vein-flow">
      <div className="vein-flow__track" style={{
    "--vein-flow-n": n
  }}>
        {steps.map((step, i) => <div className="vein-flow__cell" key={step.label}>
            {box(step, i, step.strong ? "strong" : null)}
            {i < n - 1 ? arrow(i) : null}
          </div>)}
      </div>

      {feedback ? <div className="vein-flow__loop">
          <div className="vein-flow__loop-path" style={{
    left: centre(feedback.to),
    right: `calc(100% - ${centre(feedback.from)})`
  }} />
          <span className="vein-flow__loop-chevron" style={{
    left: centre(feedback.to)
  }}>
            {glyph("loop")}
          </span>
          {feedback.label ? <span className="vein-flow__loop-label" style={{
    left: `calc((${centre(feedback.to)} + ${centre(feedback.from)}) / 2)`
  }}>
              {feedback.label}
            </span> : null}
        </div> : null}
    </div>;
};

A report request is an investor asking for named metrics over a named period. It
is different from an open-ended email in one useful way: the ask is structured,
so you can see exactly what is wanted and Vein can pre-fill most of it from your
connected sources.

<Diagram
  kind="chain"
  steps={[
{ label: "Investor creates a request" },
{ label: "Pending", note: "on your Reporting page" },
{ label: "You build the report" },
{ label: "Fulfilled", note: "investor receives it", strong: true },
]}
/>

## Respond

<Steps>
  <Step title="Find the request">
    Requests arrive on your Reporting page under Requests, not in your inbox.
    Each one shows who asked, what they asked for, and the period they want
    covered.

    <Frame caption="Open the Requests tab on the Reporting page. Requests are filtered by status: pending, fulfilled, declined, or expired.">
      <img src="https://mintcdn.com/vein/7QlBMDMiW_wcqW8D/images/guides/requests-1-find.png?fit=max&auto=format&n=7QlBMDMiW_wcqW8D&q=85&s=5ba2d21efad35ac95f282450e46c02c1" alt="The Vein Reporting page with the Requests tab highlighted, showing request counts and status filters" width="2880" height="1800" data-path="images/guides/requests-1-find.png" />
    </Frame>
  </Step>

  <Step title="Check what is being asked">
    Open the request before you start building. If the investor named metrics
    you do not currently produce, that is worth resolving first, usually by
    connecting the provider that supplies them rather than by estimating.
  </Step>

  <Step title="Build the report against the request">
    Create the report from the request so the metrics and period come across
    already selected. Add whatever context you want beyond the ask; a request
    sets a floor, not a ceiling.
  </Step>

  <Step title="Send it back">
    Sending marks the request fulfilled and attaches the report to it. The
    investor sees the change in their own Requests view, so nothing depends on
    an email being noticed.
  </Step>
</Steps>

<Tip>
  If several investors ask for overlapping things each quarter, build the fuller
  version once and send it to all of them. Fulfilling three similar requests
  separately is the most common way companies lose an afternoon.
</Tip>

## If you cannot fill a request

Send what you can and say what you are withholding in a qualitative block. A
partial report with an explanation is more useful to an investor than a delayed
complete one, and it keeps the request from sitting open as though it were
forgotten.
