refactor(ui): record detail pages as documents, not card piles (#1739)
Bring every record detail page onto the register-detail document grammar from #1624 (DetailSection/DefRow, one status element per the list pages' chips-mark-exceptions rule, one primary next step plus Förhandsgranska visible and everything else behind a ⋯ overflow menu, line tables on the dry-table idiom with the headline total in the serif): - invoices/[id] (11 cards, 13-button toolbar): Kund | Detaljer rows, Fakturarader table + totals, Anteckningar, Betalning, Påminnelser, Utskickshistorik (InvoiceDeliveryHistory flattened); title carries the doc type, related documents become link rows - supplier-invoices/[id], bookkeeping/[id] (serif title instead of font-mono, JournalEntryAttachments variant="section", CorrectionChain flattened), invoices/[id]/credit, assets/[id]/dispose (form as Fönster rows), salary employees/[id] (edit form behind Redigera in a dialog, Ingående saldon collapsed), salary runs/[id] + run panels (Betalfil, Skattebetalning, AGI, förmåner, override) and the payslip page - DetailSection gains an optional help slot (convention 7) Styling/structure only: no API, fetch, validation, state, dialog or permission change; every action stays reachable. Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Jakob Wennberg
Claude Fable 5
parent
db14ac18cb
commit
a92c492dbe
+59
-48
@@ -1089,6 +1089,7 @@
|
||||
"not_found": "The asset could not be found.",
|
||||
"already_disposed": "The asset was already disposed ({date}).",
|
||||
"back": "Back",
|
||||
"asset_section": "Asset",
|
||||
"acquisition_cost": "Acquisition cost",
|
||||
"acquired": "Acquired",
|
||||
"bas_accounts": "Accounts (BAS)",
|
||||
@@ -1128,6 +1129,7 @@
|
||||
"direction_transferred": "Transferred to the acquirer",
|
||||
"adjustment_capped": "The amount was capped at 25% of the sale price excluding VAT.",
|
||||
"business_transfer_confirm": "I confirm that the transfer covers an entire business or independent branch and meets the conditions in ML chapter 5, section 38.",
|
||||
"adjustment_document_label": "Adjustment document",
|
||||
"adjustment_document_confirm": "I confirm that an adjustment document is prepared for the acquirer.",
|
||||
"adjustment_data_required": "VAT basis data is required because the asset may be an investment good.",
|
||||
"cancel": "Cancel",
|
||||
@@ -2000,7 +2002,7 @@
|
||||
},
|
||||
"salary_payments": {
|
||||
"title": "Payment file for your bank",
|
||||
"last_generated": "Last generated:",
|
||||
"last_generated": "Last generated",
|
||||
"format_label": "Format",
|
||||
"format_bg_lb": "Bankgirot LB file",
|
||||
"format_pain001": "ISO 20022 pain.001 (XML)",
|
||||
@@ -2034,9 +2036,9 @@
|
||||
"tax_label_tax": "Tax",
|
||||
"tax_label_avgifter": "Employer contributions",
|
||||
"tax_label_total": "Total to pay",
|
||||
"tax_recipient": "Recipient:",
|
||||
"tax_recipient": "Recipient",
|
||||
"tax_recipient_value": "Skatteverket Bankgiro 5050-1055",
|
||||
"tax_due_date": "Due date:",
|
||||
"tax_due_date": "Due date",
|
||||
"tax_ocr_note": "The payment file uses your skattekonto OCR (org number + Luhn check digit). Skatteverket applies the payment to the amount you declared in the AGI for the period.",
|
||||
"tax_file_generated": "Payment file last generated",
|
||||
"tax_marked_paid": "Marked as paid",
|
||||
@@ -3807,6 +3809,29 @@
|
||||
},
|
||||
"invoice_detail": {
|
||||
"back": "Back",
|
||||
"title_invoice": "Invoice {number}",
|
||||
"title_credit_note": "Credit note {number}",
|
||||
"title_credit_draft": "Credit note draft",
|
||||
"title_proforma": "Proforma {number}",
|
||||
"title_delivery_note": "Delivery note {number}",
|
||||
"title_self_billed": "Self-billing invoice {number}",
|
||||
"title_draft": "Invoice draft",
|
||||
"sent_on": "Sent {date}",
|
||||
"def_customer": "Name",
|
||||
"def_org_number": "Org. no.",
|
||||
"def_vat_number": "VAT no.",
|
||||
"def_email": "Email",
|
||||
"def_phone": "Phone",
|
||||
"def_address": "Address",
|
||||
"def_credit_note": "Credit note",
|
||||
"def_credits": "Credits",
|
||||
"def_converted_from": "Converted from",
|
||||
"payment_section": "Payment",
|
||||
"payment_confirmation_label": "Payment confirmation",
|
||||
"payment_confirmation_download_short": "Download",
|
||||
"payment_confirmation_send_short": "Send to customer",
|
||||
"reminders_schedule_aside": "Automatic after {day1}, {day2} and {day3} days",
|
||||
"reminders_disabled_aside": "Automatic reminders are off",
|
||||
"confirm_book_title": "Book invoice",
|
||||
"confirm_book_description": "Will be posted as voucher {voucher}: invoice {number}, {amount}. A posted voucher cannot be edited, only corrected or reversed.",
|
||||
"confirm_book_description_generic": "Invoice {number} will be posted with the next available voucher number and can then only be corrected or reversed.",
|
||||
@@ -3828,10 +3853,8 @@
|
||||
"external_number_label": "Invoice number (customer's)",
|
||||
"agreement_ref_label": "Agreement reference",
|
||||
"created_at": "Created {date}",
|
||||
"sent_at_suffix": " • Sent {date}",
|
||||
"delivery_history_title": "Delivery history",
|
||||
"delivery_history_description": "See when the invoice was sent, who received it, and the exact message and PDF that were used.",
|
||||
"delivery_history_legacy_title": "Delivery details are unavailable",
|
||||
"delivery_history_legacy_description": "This invoice was sent before delivery history was recorded. Its time, recipients, and exact content cannot be shown reliably.",
|
||||
"delivery_history_unreadable_title": "Delivery history could not be loaded",
|
||||
"delivery_history_unreadable_description": "The sends for this invoice could not be retrieved. That does not mean the invoice is unsent: the data is simply missing right now.",
|
||||
@@ -3850,7 +3873,7 @@
|
||||
"delivery_from_label": "Sender name",
|
||||
"delivery_subject_label": "Subject",
|
||||
"delivery_message_label": "Message",
|
||||
"delivery_open_pdf": "Open attached PDF: {filename}",
|
||||
"delivery_pdf_label": "Attached PDF",
|
||||
"delivery_pdf_fallback": "invoice.pdf",
|
||||
"delivery_provider_label": "Email provider",
|
||||
"delivery_message_id_label": "Message ID",
|
||||
@@ -3920,9 +3943,7 @@
|
||||
"view_voucher": "View verifikat",
|
||||
"correction_loading": "Loading…",
|
||||
"correction_prompt": "Something wrong? Create a correction verifikat",
|
||||
"paid_card_title": "Paid",
|
||||
"paid_received_at": "Payment received {date}",
|
||||
"payment_status_card_title": "Payment status",
|
||||
"payment_status_paid_label": "Paid",
|
||||
"payment_status_remaining_label": "Remaining",
|
||||
"payment_status_payments_heading": "Payments",
|
||||
@@ -3942,27 +3963,13 @@
|
||||
"payment_confirmation_confirm_description": "An email titled \"Payment confirmation for invoice {number}\" is sent to {email} with the paid copy (PAID stamp, nothing left to pay) attached. The invoice status and delivery history are not affected.",
|
||||
"payment_confirmation_confirm_action": "Send",
|
||||
"reminders_card_title": "Reminders",
|
||||
"reminders_description": "Automatic reminders are sent when the invoice is {day1}, {day2} and {day3} days overdue",
|
||||
"reminders_disabled": "Automatic reminders are turned off in settings.",
|
||||
"reminders_empty": "No reminders have been sent yet.",
|
||||
"reminder_level_label": "Level {level}",
|
||||
"reminder_level_1": "Friendly reminder",
|
||||
"reminder_level_2": "Second reminder",
|
||||
"reminder_level_3": "Final reminder",
|
||||
"reminder_sent_to": "Sent {date} to {email}",
|
||||
"reminder_marked_paid": "Customer marked as paid",
|
||||
"reminder_objection": "Customer has objections",
|
||||
"credited_card_title": "Credited",
|
||||
"see_credit_note": "See credit note {number}",
|
||||
"credit_draft_card_title": "Credit note waiting to be sent",
|
||||
"open_credit_draft": "Open draft {number}",
|
||||
"credit_note_card_title": "Credit note",
|
||||
"credit_note_description": "This credit note credits",
|
||||
"see_original_invoice": "See invoice {number}",
|
||||
"converted_card_title": "Converted",
|
||||
"converted_description": "Converted from a proforma invoice",
|
||||
"see_proforma": "See proforma {number}",
|
||||
"actions_card_title": "Actions",
|
||||
"cancel_action": "Cancel",
|
||||
"delete_draft": "Cancel draft",
|
||||
"remove_credit_draft": "Delete credit draft",
|
||||
@@ -4069,10 +4076,10 @@
|
||||
"warning_title": "The credit note is created as a draft",
|
||||
"warning_description": "All amounts become negative. The original invoice is marked as credited only when the credit note is sent or marked as sent. Bookkeeping is then handled according to the company's selected accounting method.",
|
||||
"original_card_title": "Original invoice",
|
||||
"invoice_number_label": "Invoice number:",
|
||||
"date_label": "Date:",
|
||||
"customer_label": "Customer:",
|
||||
"vat_treatment_label": "VAT treatment:",
|
||||
"invoice_number_label": "Invoice number",
|
||||
"date_label": "Date",
|
||||
"customer_label": "Customer",
|
||||
"vat_treatment_label": "VAT treatment",
|
||||
"preview_card_title": "Credit note preview",
|
||||
"preview_card_description": "Credit note number: KR-{number}",
|
||||
"th_description": "Description",
|
||||
@@ -4545,13 +4552,22 @@
|
||||
"review_accrual_line_info": "Accrued {from} to {to}"
|
||||
},
|
||||
"supplier_invoice_detail": {
|
||||
"title_invoice": "Supplier invoice {number}",
|
||||
"title_credit_note": "Credit note {number}",
|
||||
"created_at": "Created {date}",
|
||||
"def_name": "Name",
|
||||
"def_org_number": "Org. no.",
|
||||
"def_email": "Email",
|
||||
"def_credits": "Credits",
|
||||
"credit_note_help": "To remove the credit note and free up the invoice number, go to the original invoice and select \"Undo credit\".",
|
||||
"payment_section": "Payment",
|
||||
"view_voucher": "View verifikat",
|
||||
"ore_rounding": "Öre rounding",
|
||||
"back": "Back",
|
||||
"back_aria": "Back to supplier invoices",
|
||||
"viewer_disabled_tooltip": "You only have read access in this company",
|
||||
"not_found": "Invoice not found",
|
||||
"arrival_header": "Arrival #{number}",
|
||||
"header_subtitle": "{supplier} | Invoice {number}",
|
||||
"status_registered": "Registered",
|
||||
"status_approved": "Approved",
|
||||
"status_paid": "Paid",
|
||||
@@ -4588,11 +4604,7 @@
|
||||
"uncredit_failed_title": "Could not undo credit note",
|
||||
"uncredit_success_title": "Credit undone",
|
||||
"uncredit_success_description": "The original invoice has been restored and the number is available.",
|
||||
"credit_note_banner_title": "This is a credit note",
|
||||
"credit_note_banner_prefix": "It is linked to",
|
||||
"credit_note_banner_link": "invoice {number}",
|
||||
"credit_note_banner_original_fallback": "the original invoice",
|
||||
"credit_note_banner_suffix": ". To remove the credit note and free up the invoice number, go to the original and select \"Undo credit\".",
|
||||
"invoice_info_title": "Invoice information",
|
||||
"arrival_number_label": "Arrival number",
|
||||
"invoice_number_label": "Invoice number",
|
||||
@@ -4603,14 +4615,12 @@
|
||||
"reverse_charge_badge": "Reverse charge",
|
||||
"badge_accrued": "Accrued",
|
||||
"accrual_line_info": "Accrued {from} to {to}",
|
||||
"amounts_title": "Amounts",
|
||||
"net_excl_vat": "Net (excl. VAT)",
|
||||
"vat_label": "VAT",
|
||||
"total_label": "Total",
|
||||
"paid_label": "Paid",
|
||||
"remaining_label": "Remaining to pay",
|
||||
"supplier_section_title": "Supplier",
|
||||
"org_number_inline": "Org. no.: {number} | ",
|
||||
"rows_title": "Rows",
|
||||
"col_description": "Description",
|
||||
"col_quantity": "Qty",
|
||||
@@ -4623,10 +4633,6 @@
|
||||
"vat_inline": "{rate}% VAT",
|
||||
"vat_amount_inline": "VAT {amount}",
|
||||
"payment_history_title": "Payment history",
|
||||
"col_date": "Date",
|
||||
"col_amount_short": "Amount",
|
||||
"col_voucher": "Verifikat",
|
||||
"col_note": "Note",
|
||||
"vouchers_title": "Verifikat (sambandskrav)",
|
||||
"registration_voucher": "Registration verifikat",
|
||||
"no_registration_voucher": "No registration verifikat (cash method)",
|
||||
@@ -4959,7 +4965,6 @@
|
||||
"source_label_vat_settlement": "VAT settlement"
|
||||
},
|
||||
"journal_correction": {
|
||||
"title": "Correction chain",
|
||||
"info": "Posted journal entries cannot be edited directly. Instead, a storno entry is created that reverses the original, and a new correction entry with the correct details.",
|
||||
"role_storno": "Storno",
|
||||
"role_correction": "Correction",
|
||||
@@ -4967,6 +4972,11 @@
|
||||
"current": "Current"
|
||||
},
|
||||
"journal_detail": {
|
||||
"title": "Voucher {label}",
|
||||
"title_draft": "Draft voucher",
|
||||
"posted_on": "Posted {date}",
|
||||
"field_voucher": "Voucher number",
|
||||
"lines_count": "{count, plural, one {# line} other {# lines}}",
|
||||
"accounts_loading": "Loading chart of accounts...",
|
||||
"accounts_load_failed": "The chart of accounts could not be loaded. Try again to change the account.",
|
||||
"accounts_retry": "Try again",
|
||||
@@ -5027,10 +5037,8 @@
|
||||
"edit_note_aria": "Edit note",
|
||||
"note_placeholder": "Internal note...",
|
||||
"no_note": "No note",
|
||||
"summary_title": "Summary",
|
||||
"summary_debit": "Debit",
|
||||
"summary_credit": "Credit",
|
||||
"summary_lines": "Lines",
|
||||
"attachments_title": "Documents",
|
||||
"attachments_count": "{count} documents",
|
||||
"no_attachments": "No documents attached",
|
||||
@@ -5038,7 +5046,6 @@
|
||||
"references_title": "Linked supporting documents",
|
||||
"reference_invoice": "Customer invoice {number}",
|
||||
"reference_supplier_invoice": "Supplier invoice {number}",
|
||||
"currency_title": "Currency conversion",
|
||||
"currency_rate": "Rate",
|
||||
"currency_original_amount": "Original amount",
|
||||
"lines_title": "Entry lines",
|
||||
@@ -6728,7 +6735,7 @@
|
||||
"action_send_payslips": "Send payslips",
|
||||
"payslips_send_requires_subscription": "Emailing payslips requires a subscription. Download the PDFs for free.",
|
||||
"action_send_payslips_again": "Send again",
|
||||
"action_download_payslips": "Download all",
|
||||
"action_download_payslips": "Download all payslips",
|
||||
"action_download_agi": "Download AGI file (XML)",
|
||||
"action_delete_draft": "Delete draft",
|
||||
"action_correct": "Correct payroll run (storno)",
|
||||
@@ -6981,6 +6988,9 @@
|
||||
},
|
||||
"salary_employee": {
|
||||
"form_back_to_employees": "Back to employees",
|
||||
"detail_edit": "Edit",
|
||||
"detail_edit_dialog_title": "Edit employee",
|
||||
"detail_bank_missing": "Bank details missing: required before a payroll run can be approved.",
|
||||
"form_personal_info": "Personal information",
|
||||
"form_first_name": "First name",
|
||||
"form_last_name": "Last name",
|
||||
@@ -7052,8 +7062,6 @@
|
||||
"detail_f_skatt_verified": "F-skatt verified: {date}",
|
||||
"detail_vacation_none_hint": "No accrual to 2920 is booked. Use if vacation is included in the monthly salary — common for owners who are the only employee.",
|
||||
"detail_save_changes": "Save changes",
|
||||
"detail_self_saving_heading": "Saved separately",
|
||||
"detail_self_saving_hint": "Benefits and opening balances are saved directly in each section and are not included in Save changes above.",
|
||||
"tax_title": "Tax",
|
||||
"tax_form_label": "Tax status",
|
||||
"tax_form_tooltip": "A-skatt: you withhold preliminary tax according to the tax table (skattetabell). F-skatt/FA-skatt: the person handles their own tax — no tax is withheld.",
|
||||
@@ -7075,12 +7083,11 @@
|
||||
"tax_no_table_f_skatt": "With F-skatt or FA-skatt the person handles their own tax — no tax is withheld and no tax table is needed.",
|
||||
"benefits_title": "Benefits",
|
||||
"benefits_add": "Add benefit",
|
||||
"benefits_loading": "Loading…",
|
||||
"benefits_empty": "No benefits registered. Active benefits are added automatically as rows in salary runs.",
|
||||
"benefits_empty": "No benefits registered.",
|
||||
"benefits_help": "Active benefits are added automatically as rows in salary runs.",
|
||||
"benefits_type": "Type",
|
||||
"benefits_description": "Description",
|
||||
"benefits_value_per_month": "Value/month",
|
||||
"benefits_period": "Period",
|
||||
"benefits_per_month": "/month",
|
||||
"benefits_ongoing": "ongoing",
|
||||
"benefits_remove": "Remove",
|
||||
"benefits_added": "Benefit added",
|
||||
@@ -7122,6 +7129,10 @@
|
||||
"opening_balances_liability_avgifter": "Charges on the liability (2940)",
|
||||
"opening_balances_saved_heading": "Saved days per earning year",
|
||||
"opening_balances_saved_hint": "Days saved from earlier years (max 5 years back per the Annual Leave Act).",
|
||||
"opening_balances_show": "Show",
|
||||
"opening_balances_hide": "Hide",
|
||||
"opening_balances_collapsed_none": "No opening balances entered.",
|
||||
"opening_balances_collapsed_set": "Entered, cutover date {date}.",
|
||||
"opening_balances_save": "Save opening balances",
|
||||
"opening_balances_update": "Update opening balances",
|
||||
"opening_balances_saving": "Saving…",
|
||||
|
||||
Reference in New Issue
Block a user