invoice/app/config.yml
Claude 474d2a7a71
Add Save / Validate / Download invoice action row at bottom of form
Replaces single generate button with a 20/20/60 flex row:
- Save (20%): calls saveStorage(), shows brief ✓ confirmation
- Validate (20%): checks invoice no, sender name, charge-to, line items; shows inline message
- Download Invoice (60%): existing PDF generation

https://claude.ai/code/session_01MkM7p8Us3L8YAfLKGA13NS
2026-06-08 16:41:27 +00:00

619 lines
15 KiB
YAML

# Invoice App Configuration
# (C) 2026 Kristian Benestad. Licensed under the Apache 2 license.
# ── Default language ───────────────────────────────────────────────────────────
default-code: en
default-name: English
default-direction: ltr
# ── Available languages ────────────────────────────────────────────────────────
languages:
- code: en
name: English
direction: ltr
- code: de
name: Deutsch
direction: ltr
- code: fr
name: Français
direction: ltr
- code: "no"
name: Norsk
direction: ltr
# ── Organisation brand ────────────────────────────────────────────────────────
# Optional. Set org-name to show a branded header (org logo + name + subheading).
# Leave org-name absent or empty to show the plain "invoice" wordmark instead.
# org-name: "Acme Corporation"
# org-subheading: "Freelance invoicing"
# ── About modal ───────────────────────────────────────────────────────────────
# Optional. Remove this section entirely to hide the ⓘ button and footer link.
about:
en:
title: "About"
content: |
### Invoice Generator
A single-file browser app for generating freelance invoices as PDF.
No backend, no build step — just a browser and a config file.
**Source:** [kbenestad/invoice](https://github.com/kbenestad/invoice)
**Docs:** [docs.benestad.net/invoice](https://docs.benestad.net/invoice)
© 2026 Kristian Benestad. Licensed under the Apache 2 license.
btn-close: "Close"
de:
title: "Über"
content: |
### Rechnungsgenerator
Eine Single-File-Browser-App zur Erstellung von Freiberufler-Rechnungen als PDF.
Kein Backend, kein Build-Schritt.
**Quellcode:** [kbenestad/invoice](https://github.com/kbenestad/invoice)
**Dokumentation:** [docs.benestad.net/invoice](https://docs.benestad.net/invoice)
© 2026 Kristian Benestad. Lizenziert unter Apache 2.
btn-close: "Schließen"
fr:
title: "À propos"
content: |
### Générateur de factures
Une application de navigateur en fichier unique pour générer des factures en PDF.
Aucun backend, aucune étape de build.
**Code source :** [kbenestad/invoice](https://github.com/kbenestad/invoice)
**Documentation :** [docs.benestad.net/invoice](https://docs.benestad.net/invoice)
© 2026 Kristian Benestad. Sous licence Apache 2.
btn-close: "Fermer"
"no":
title: "Om"
content: |
### Fakturagenerator
En nettleserapp i én fil for å generere frilansfakturaer som PDF.
Ingen backend, ingen byggtrinn.
**Kildekode:** [kbenestad/invoice](https://github.com/kbenestad/invoice)
**Dokumentasjon:** [docs.benestad.net/invoice](https://docs.benestad.net/invoice)
© 2026 Kristian Benestad. Lisensiert under Apache 2.
btn-close: "Lukk"
# ── Payment info visibility ───────────────────────────────────────────────────
# Set to true to hide the payment info panel entirely (useful if payment info
# should not appear on invoices, e.g. per company policy).
hide-payment-info: false
# ── Date and paper format ─────────────────────────────────────────────────────
# Date tokens: d=day, dd=day(0-padded), M=month number, MM=month(0-padded),
# MMM=short month name, MMMM=full month name, YY=2-digit year, YYYY=4-digit year
date-format: "d MMMM YYYY"
# paper-format: a4 or letter
paper-format: a4
# ── Tax types (user builds tax lines; these are the label options) ─────────────
tax-types:
- key: vat
labels:
en: VAT
de: MwSt.
fr: TVA
"no": MVA
- key: gst
labels:
en: GST
de: GST
fr: TPS
"no": GST
- key: sales-tax
labels:
en: Sales Tax
de: Umsatzsteuer
fr: Taxe de vente
"no": Omsetningsavgift
- key: withholding
labels:
en: Withholding Tax
de: Quellensteuer
fr: "Retenue à la source"
"no": Kildeskatt
- key: other
labels:
en: Other Tax
de: Sonstige Steuer
fr: Autre taxe
"no": Annen skatt
# ── Units of measure ──────────────────────────────────────────────────────────
uom:
- code: EA
labels:
en: Each
de: Stück
fr: Pièce
"no": Stykk
- code: HR
labels:
en: Hour
de: Stunde
fr: Heure
"no": Time
- code: DY
labels:
en: Day
de: Tag
fr: Jour
"no": Dag
- code: WK
labels:
en: Week
de: Woche
fr: Semaine
"no": Uke
- code: MO
labels:
en: Month
de: Monat
fr: Mois
"no": Måned
- code: LS
labels:
en: Lump Sum
de: Pauschale
fr: Forfait
"no": Engangsbeløp
# ── Predefined recipients (charge-to) ─────────────────────────────────────────
charge-to:
- display: Acme Corporation
name: Acme Corporation Ltd.
address1: 123 Business Avenue
address2: Suite 400
address3: New York, NY 10001
address4: ""
country: US
phone: "+1-212-555-0100"
email: accounts@acmecorp.example
vat-id: "US-EIN-12-3456789"
reg-no: ""
currency: USD
project-codes:
- AC-100
- AC-110
- AC-200
- display: Example NGO
name: Example Non-Profit Organisation
address1: 45 Charity Lane
address2: London EC1A 1BB
address3: ""
address4: ""
country: GB
phone: "+44 20 7123 4567"
email: finance@examplengo.example
vat-id: "GB123456789"
reg-no: "01234567"
currency: GBP
project-codes:
- NGO-2026-01
- NGO-2026-02
- NGO-2026-03
# ── Project codes ──────────────────────────────────────────────────────────────
project-codes:
- Project 100
- Project 110
- Project 230
# ── Predefined products / services ────────────────────────────────────────────
products:
- code: CONSULTING
description:
en: Consulting Services
de: Beratungsleistungen
fr: Services de conseil
"no": Konsulenttjenester
uom: HR
price: 100.00
- code: TRAINING
description:
en: Training
de: Schulung
fr: Formation
"no": Opplæring
uom: DY
price: 800.00
- code: REPORT
description:
en: Written Report
de: Schriftlicher Bericht
fr: Rapport écrit
"no": Skriftlig rapport
uom: EA
qty: 1
price: 500.00
- code: REVIEW
description:
en: Review & Feedback
de: Überprüfung & Feedback
fr: Révision et retours
"no": Gjennomgang og tilbakemelding
uom: HR
price: 120.00
# ── Foreign currency options ───────────────────────────────────────────────────
currencies:
- USD
- EUR
- GBP
- JPY
- CHF
- CAD
- AUD
- NOK
- SEK
- DKK
- THB
- SGD
- HKD
- INR
- MXN
- BRL
- ZAR
# ── UI label translations ──────────────────────────────────────────────────────
translations:
language:
en: Language
de: Sprache
fr: Langue
"no": Språk
invoice:
en: INVOICE
de: RECHNUNG
fr: FACTURE
"no": FAKTURA
sender-name:
en: Issuer
de: Issuer
fr: Issuer
"no": Issuer
sender-address1:
en: Address Line 1
de: Adresszeile 1
fr: "Ligne d'adresse 1"
"no": Adresselinje 1
sender-address2:
en: Address Line 2
de: Adresszeile 2
fr: "Ligne d'adresse 2"
"no": Adresselinje 2
sender-address3:
en: Address Line 3
de: Adresszeile 3
fr: "Ligne d'adresse 3"
"no": Adresselinje 3
sender-address4:
en: Address Line 4
de: Adresszeile 4
fr: "Ligne d'adresse 4"
"no": Adresselinje 4
sender-country:
en: Country
de: Land
fr: Pays
"no": Land
sender-phone:
en: Phone
de: Telefon
fr: Téléphone
"no": Telefon
sender-email:
en: Email
de: E-Mail
fr: "E-mail"
"no": E-post
charge-to:
en: "Charge to"
de: "In Rechnung an"
fr: "Facturer à"
"no": "Faktureres til"
charge-to-name:
en: Organisation / Name
de: Organisation / Name
fr: Organisation / Nom
"no": Organisasjon / Navn
charge-to-address1:
en: Address Line 1
de: Adresszeile 1
fr: "Ligne d'adresse 1"
"no": Adresselinje 1
charge-to-address2:
en: Address Line 2
de: Adresszeile 2
fr: "Ligne d'adresse 2"
"no": Adresselinje 2
charge-to-address3:
en: Address Line 3
de: Adresszeile 3
fr: "Ligne d'adresse 3"
"no": Adresselinje 3
charge-to-address4:
en: Address Line 4
de: Adresszeile 4
fr: "Ligne d'adresse 4"
"no": Adresselinje 4
charge-to-country:
en: Country
de: Land
fr: Pays
"no": Land
charge-to-phone:
en: Phone
de: Telefon
fr: Téléphone
"no": Telefon
charge-to-email:
en: Email
de: E-Mail
fr: "E-mail"
"no": E-post
vat-id:
en: VAT / Tax ID
de: USt-IdNr.
fr: "N° TVA / ID fiscal"
"no": MVA-nummer
registration-no:
en: "Registration no."
de: "Handelsreg.-Nr."
fr: "N° d'enregistrement"
"no": "Organisasjonsnr."
invoice-date:
en: Invoice date
de: Rechnungsdatum
fr: Date de facture
"no": Fakturadato
project-code:
en: Project code
de: Projektnummer
fr: Code projet
"no": Prosjektkode
invoice-no:
en: "Invoice no."
de: "Rechnungsnr."
fr: "N° de facture"
"no": "Fakturanr."
qty:
en: QTY
de: Menge
fr: Qté
"no": Ant.
uom:
en: UOM
de: Einh.
fr: UM
"no": Enh.
description:
en: Description
de: Beschreibung
fr: Description
"no": Beskrivelse
price:
en: Unit Price
de: Einzelpreis
fr: Prix unitaire
"no": Enhetspris
line-total:
en: Line Total
de: Betrag
fr: Total ligne
"no": Linjebeløp
foreign-currency:
en: Foreign currency
de: Fremdwährung
fr: Devise étrangère
"no": Utenlandsk valuta
currency-code:
en: Foreign currency code
de: Fremdwährungscode
fr: Code devise étrangère
"no": Utenlandsk valutakode
exchange-rate:
en: Exchange rate
de: Wechselkurs
fr: Taux de change
"no": Valutakurs
per-item:
en: Price per item in
de: Preis je Einheit in
fr: Prix par unité en
"no": Pris per enhet i
total-foreign:
en: Line total in
de: Zeilenbetrag in
fr: Total ligne en
"no": Linjebeløp i
add-line:
en: "+ Add new line"
de: "+ Neue Zeile hinzufügen"
fr: "+ Ajouter une ligne"
"no": "+ Legg til ny linje"
subtotal:
en: Subtotal
de: Zwischensumme
fr: Sous-total
"no": Delsum
tax:
en: Tax
de: Steuer
fr: Taxe
"no": Mva
paid:
en: Paid
de: Bezahlt
fr: Payé
"no": Betalt
to-pay:
en: To Pay
de: Zu zahlen
fr: À payer
"no": Å betale
save:
en: Save
de: Speichern
fr: Enregistrer
"no": Lagre
validate:
en: Validate
de: Prüfen
fr: Valider
"no": Valider
val-ok:
en: All required fields are filled.
de: Alle Pflichtfelder sind ausgefüllt.
fr: Tous les champs obligatoires sont remplis.
"no": Alle obligatoriske felt er fylt ut.
val-invoice-no:
en: Invoice number is required
de: Rechnungsnummer ist erforderlich
fr: Le numéro de facture est requis
"no": Fakturanummer er påkrevd
val-from-name:
en: Sender name is required
de: Absendername ist erforderlich
fr: Le nom de l'expéditeur est requis
"no": Avsendernavn er påkrevd
val-charge-to:
en: Charge-to is required
de: Empfänger ist erforderlich
fr: Le destinataire est requis
"no": Mottaker er påkrevd
val-lines:
en: At least one line item is required
de: Mindestens eine Zeile ist erforderlich
fr: Au moins une ligne est requise
"no": Minst én linje er påkrevd
generate-invoice:
en: Download Invoice
de: Rechnung herunterladen
fr: Télécharger la facture
"no": Last ned faktura
other:
en: Other
de: Andere
fr: Autre
"no": Annet
select:
en: "— Select —"
de: "— Auswählen —"
fr: "— Sélectionner —"
"no": "— Velg —"
yes:
en: "Yes"
de: "Ja"
fr: "Oui"
"no": "Ja"
no-option:
en: "No"
de: "Nein"
fr: "Non"
"no": "Nei"
invoice-currency:
en: Invoice currency
de: Rechnungswährung
fr: Devise de facturation
"no": Fakturavaluta
add-tax:
en: "+ Add new tax"
de: "+ Neue Steuer hinzufügen"
fr: "+ Ajouter une taxe"
"no": "+ Legg til skatt"
tax-pct:
en: "%"
de: "%"
fr: "%"
"no": "%"
tax-amount:
en: Amount
de: Betrag
fr: Montant
"no": Beløp
converted-from:
en: Converted from
de: Umgerechnet aus
fr: Converti depuis
"no": Konvertert fra
download-pdf:
en: "Download PDF"
de: "PDF herunterladen"
fr: "Télécharger PDF"
"no": "Last ned PDF"
close:
en: Close
de: Schließen
fr: Fermer
"no": Lukk
invoice-lines:
en: Invoice Lines
de: Rechnungspositionen
fr: Lignes de facture
"no": Fakturalinjer
sender-section:
en: From
de: Von
fr: De
"no": Fra
invoice-details-section:
en: Invoice Details
de: Rechnungsdetails
fr: Détails de la facture
"no": Fakturaopplysninger
payment:
en: Payment
de: Zahlung
fr: Paiement
"no": Betaling
payment-terms:
en: Payment terms
de: Zahlungsbedingungen
fr: Conditions de paiement
"no": Betalingsbetingelser
payment-days:
en: days
de: Tage
fr: jours
"no": dager
pay-by:
en: Pay by
de: Zahlbar bis
fr: "À payer avant le"
"no": Betal innen
account-holder:
en: Account holder
de: Kontoinhaber
fr: Titulaire du compte
"no": Kontohaver
account-no:
en: "Account no. (BBAN/IBAN)"
de: "Kontonummer (BBAN/IBAN)"
fr: "N° de compte (BBAN/IBAN)"
"no": "Kontonr. (BBAN/IBAN)"
bank-bic:
en: "Bank / BIC (Swift code)"
de: "Bank / BIC (Swift)"
fr: "Banque / BIC (code Swift)"
"no": "Bank / BIC (Swift-kode)"
bank-address:
en: Bank address
de: Bankadresse
fr: Adresse de la banque
"no": Bankadresse
payment-ref:
en: Please use reference
de: Bitte Referenz angeben
fr: "Merci d'indiquer la référence"
"no": Vennligst oppgi referanse
reset-lines:
en: Reset invoice lines
de: Positionen zurücksetzen
fr: Réinitialiser les lignes
"no": Tilbakestill linjer