# Estimates and invoices

Itemized quote drafts, private acceptance links, one-time invoice conversion and guest payment with verified settlement and refunds.

## Install

Use the verified installer in the website container. It installs dependencies, checks checksums, and refuses to replace customer changes:

```sh
python /opt/runalio/catalog_install.py estimates-invoices
python /opt/runalio/catalog_install.py --status
```

Review the preview and click Publish to promote backend code and pages. Production data remains separate.

To undo the last installation before publishing: `python /opt/runalio/catalog_install.py --rollback`.

## Settings

The customer enters these in Runalio, Settings → Website modules → this module (never in files or chat):

| Name | Required | Secret | Purpose |
|---|---|---|---|
| `BUSINESS_CURRENCY` | no | no | Currency for quotes and invoices: usd, eur, gbp, cad or aud. |

## What the customer needs to do

- Create and issue a quote or invoice in Business admin.
- Configure the Stripe module and its required signed webhook.
- Test with Stripe test keys in preview. Issued share links belong to their recipients; drafts are private.

## Administration and data

Business admin opens from the portal Settings. Managed websites use portal team membership and same-origin mutation checks. Customer data stays in the website SQLite database and participates in consistent backups. Agent changes to source and page snippets remain drafts until Publish. No customer credentials are embedded in pages or chat.
