# PolicyAttestation

> Who has acknowledged which policy version, and who has not.

Source: https://lopifi.com/components/policy-attestation
Part of: Lopifi — US GAAP books on autopilot, checked by a CPA (https://lopifi.com)

---

- **Family:** Tax & compliance — The obligations around the books: what is due to whom, who has been verified, and which controls held.
- **Status:** Implemented
- **Spec:** https://lopifi.com/docs/catalog/14-tax-compliance

## Install

```bash
npx shadcn@latest add @lopifi/theme
npx shadcn@latest add @lopifi/policy-attestation
```

## Specification

A policy's name, version and effective date, who must attest, who has, who hasn't, and the overdue count.

**Acknowledgments bind to a version**, as approvals do ([controls & audit §3](https://lopifi.com/md/docs/domain/08-controls-and-audit#3-approvals)). Someone who acknowledged v3.0 hasn't acknowledged v3.1. They're counted as outstanding, and the row says "Acknowledged 3.0, not this version" so an old signature never stands in for a new policy.

**Overdue** is every outstanding attestor once `asOf` passes `dueBy`. Before the deadline the overdue count is zero, and the outstanding list says why each person is on it. `onRemind` adds a single "Remind N" action for the outstanding attestors.

**Refuses to animate** the progress bar. It's a count, and a bar that grows is a number being animated.

**Edge cases:** nobody assigned to attest says so, rather than showing 0 of 0 as complete.

**Accessibility:** the bar is a `progressbar` with its value and an accessible label ("3 of 5 attested"). The counts are a description list.

## Rules this component obeys

Money is minor units, never floats. `null` is not `0` and neither is redacted. Negatives render in accounting parentheses with the parenthesis column reserved on both sides. Debit and credit are two columns. Per-currency decimal places. Polarity is explicit — up is not always good. Every figure states its period, entity, currency, basis and as-of.
