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

# Form 16

> Generate annual tax certificates for a financial year, fetch Part A, apply a digital signature, and distribute to employees.

export const PermissionNote = ({perm}) => <Info>
    Requires the <code>{perm}</code> permission. Ask your administrator if an
    action described here is missing from your screen — see
    [Roles & permissions](/help/concepts/roles-and-permissions).
  </Info>;

<PermissionNote perm="compliance:write" />

Form 16 is the annual tax certificate each employee needs to file their return. In OnTime it is a **batch** operation over a financial year, with four steps.

## The pipeline

```mermaid theme={null}
flowchart LR
  G[Generate<br/>batch] --> A[Fetch Part A<br/>TRACES]
  A --> S[Sign<br/>DSC]
  S --> D[Distribute<br/>to vaults]
```

<Warning>
  **Two of these four steps need a third-party vendor.** Read the section below before planning a Form 16 run — they are declared, unimplemented seams, not bugs.
</Warning>

## Step 1 — Generate

Generates a Form 16 PDF per employee for the financial year and writes it into that employee's document vault.

The document is a real PDF containing a Part A section, a Part B section and a signature box, built from the year's payroll data.

Regenerating is **idempotent** — it updates the same batch and the same per-employee documents rather than producing duplicates.

### Progress counters

The batch shows five counts: total, Part B merged, Part A from TRACES, signed, and sent. These are **derived from real per-employee rows**, not asserted.

<Note>
  A Part A count lower than the total is meaningful, not a bug. An employee with no PAN on record cannot have Part A fetched, and their row is marked unavailable. That gap is exactly the signal to go and fix the missing PAN.
</Note>

## Step 2 — Fetch Part A (vendor seam)

Part A of Form 16 comes from the Income Tax Department's TRACES portal, not from your payroll data. OnTime routes this through an adapter.

<Warning>
  **This requires TRACES vendor configuration.** Out of the box, a development stub adapter runs: it synthesizes a fetched-or-unavailable result and is visibly labelled as a stand-in — it does **not** download anything from TRACES.

  Configuring the real adapter without credentials returns a clear "not configured" error rather than pretending to work. Talk to your OnTime contact about wiring a real TRACES integration for your organization.
</Warning>

## Step 3 — Sign (vendor seam)

Form 16 must carry a digital signature from a Digital Signature Certificate.

<Warning>
  **This requires DSC vendor configuration.** The default development adapter stamps a visible "Signed (dev)" marker into the stored PDF. **That is not a real digital signature** and must not be distributed to employees as one.

  As with TRACES, selecting the real adapter without credentials returns an explicit "not configured" error.
</Warning>

## Step 4 — Distribute

Marks the batch as sent and notifies each employee that their Form 16 is available. The document is already in their vault; distribution is what tells them.

<Note>
  **Distribution is gated on signing.** A batch that has not been signed is refused. This boundary is deliberate and load-bearing — it stops an unsigned certificate reaching an employee.
</Note>

Employees find the document under **Tax documents** on the Pay tab of the employee app.

## Known limitations

<AccordionGroup>
  <Accordion title="The currency symbol is 'Rs.', not '₹'" icon="indian-rupee">
    The PDF library's built-in fonts cannot render the rupee sign. The generated Form 16 uses `Rs.` throughout.
  </Accordion>

  <Accordion title="Notifications are in-app only" icon="bell">
    Distributing raises an in-app notification. There is no email, SMS or WhatsApp delivery of Form 16 availability.
  </Accordion>

  <Accordion title="No bulk e-filing" icon="upload">
    OnTime generates and distributes the documents. Filing the corresponding returns with the Income Tax Department is done outside OnTime.
  </Accordion>
</AccordionGroup>

## Before you run a batch

<Steps>
  <Step title="Every payroll cycle for the year is disbursed">
    Form 16 sums the year's payslips. A missing month is a wrong certificate.
  </Step>

  <Step title="PANs are on file">
    Employees without a PAN cannot have Part A fetched. Check the directory before generating, not after.
  </Step>

  <Step title="The vendor adapters are configured">
    Or accept that this run produces development-stub output that must not be distributed as genuine.
  </Step>
</Steps>
