A member cannot download an invoice to pass on to whoever does their books #67

Open
opened 2026-09-21 07:18:20 +00:00 by cgalo5758 · 1 comment
Owner

What a person cannot do today

Get a file of an invoice. The member billing page lists invoice history on screen; there is nothing to download, attach to an email or hand to a bookkeeper or a tax authority.

What they should be able to do

Open or download an invoice as a document that stands on its own, carrying the deployment's details, the billing account's, the line items, the total and the invoice number.

Why it matters

An invoice that cannot leave the screen is not usable as a receipt, which is most of what an invoice is for. Anyone claiming the expense has to retype it or screenshot the page.

Where

The member billing pages and the invoice projection behind them.

Done when

A member can obtain each of their invoices as a file, either rendered by the console or passed through to the payment provider's hosted document where the invoice is mapped to one, and the page says which.

Migrated from status/issues.md at b7a0e15

## What a person cannot do today Get a file of an invoice. The member billing page lists invoice history on screen; there is nothing to download, attach to an email or hand to a bookkeeper or a tax authority. ## What they should be able to do Open or download an invoice as a document that stands on its own, carrying the deployment's details, the billing account's, the line items, the total and the invoice number. ## Why it matters An invoice that cannot leave the screen is not usable as a receipt, which is most of what an invoice is for. Anyone claiming the expense has to retype it or screenshot the page. ## Where The member billing pages and the invoice projection behind them. ## Done when A member can obtain each of their invoices as a file, either rendered by the console or passed through to the payment provider's hosted document where the invoice is mapped to one, and the page says which. Migrated from status/issues.md at b7a0e15
cgalo5758 added the
kind
enhancement
area/billingarea/member-ui
labels 2026-09-21 07:18:20 +00:00
Author
Owner

#150 links a member to Stripe's hosted invoice, which offers the PDF and the receipt. That covers this issue's option of passing the member through to the provider's document. For that document to serve a bookkeeper, though, it has to name the member, and today it does not:

  • Checkout. A customer created at Checkout (internal/server/billing.go, createStripeCustomer) carries metadata only, so the PDF's "Bill to" shows just the email Checkout collected.
  • Outbox. A customer created through the outbox (create_stripe_customer, internal/integrations/stripe/workflows/outbox.go) is named after the billing account. Every billing account is named "Default" (internal/provisioning/provisioning.go), so Stripe prints "Default".

The customer should carry the invoiced party's name, and its address and tax id once the console holds them. design/ puts billing_name, the address block and tax_id on the billing account. A personal organization is named after its person, so this sends that person's name to Stripe, which already holds their email and card.

#150 links a member to Stripe's hosted invoice, which offers the PDF and the receipt. That covers this issue's option of passing the member through to the provider's document. For that document to serve a bookkeeper, though, it has to name the member, and today it does not: - **Checkout.** A customer created at Checkout (`internal/server/billing.go`, `createStripeCustomer`) carries metadata only, so the PDF's "Bill to" shows just the email Checkout collected. - **Outbox.** A customer created through the outbox (`create_stripe_customer`, `internal/integrations/stripe/workflows/outbox.go`) is named after the billing account. Every billing account is named "Default" (`internal/provisioning/provisioning.go`), so Stripe prints "Default". The customer should carry the invoiced party's name, and its address and tax id once the console holds them. `design/` puts `billing_name`, the address block and `tax_id` on the billing account. A personal organization is named after its person, so this sends that person's name to Stripe, which already holds their email and card.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wiki-cafe/member-console#67