Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
332 lines
12 KiB
JSON
332 lines
12 KiB
JSON
{
|
|
"title": "Billing",
|
|
"overview": "Overview",
|
|
"tabs": {
|
|
"overview": "Overview",
|
|
"invoices": "Invoices",
|
|
"quotes": "Quotes"
|
|
},
|
|
"currentContractLine": "Current Contract Line",
|
|
"nextInvoice": "Next Invoice",
|
|
"viewContractLineDetails": "View Contract Line Details",
|
|
"viewAllInvoices": "View All Invoices",
|
|
"failedToLoad": "Failed to load invoices. Please try again.",
|
|
"payments": "Payments",
|
|
"contractLines": "Service Contract Lines",
|
|
"usage": "Usage Metrics",
|
|
"hoursByService": "Hours by Service",
|
|
"invoice": {
|
|
"number": "Invoice #",
|
|
"date": "Invoice Date",
|
|
"dueDate": "Due Date",
|
|
"dueDateText": "Due {{date}}",
|
|
"noDueDate": "No due date",
|
|
"allPaid": "All invoices paid",
|
|
"amount": "Amount",
|
|
"status": "Status",
|
|
"paid": "Paid",
|
|
"unpaid": "Unpaid",
|
|
"overdue": "Overdue",
|
|
"partial": "Partial",
|
|
"draft": "Draft",
|
|
"finalized": "Finalized",
|
|
"sendEmail": "Send as Email",
|
|
"sendEmailFailed": "Failed to send invoice email. Please try again.",
|
|
"loadFailed": "Failed to load invoice details. Please try again.",
|
|
"downloadFailed": "Failed to download PDF. Please try again.",
|
|
"download": "Download PDF",
|
|
"view": "View Details",
|
|
"pay": "Pay Now",
|
|
"paymentHistory": "Payment History",
|
|
"details": "Invoice Details",
|
|
"lineItems": "Line Items",
|
|
"description": "Description",
|
|
"quantity": "Quantity",
|
|
"unitPrice": "Unit Price",
|
|
"total": "Total",
|
|
"noLineItems": "No line items available",
|
|
"subtotal": "Subtotal",
|
|
"tax": "Tax",
|
|
"taxBreakdown": "Tax Breakdown",
|
|
"manualInvoice": "Manual Invoice",
|
|
"credits": "Credits",
|
|
"financialArtifactSummary": "Financial-only invoice. Recurring service periods appear only on recurring detail lines.",
|
|
"servicePeriod": "Service Period",
|
|
"servicePeriods": "Service Periods",
|
|
"financialOnlyLine": "Financial-only line. No recurring service period.",
|
|
"downloadStarted": "Preparing PDF download...",
|
|
"downloadComplete": "PDF downloaded successfully.",
|
|
"emailStarted": "Sending invoice email...",
|
|
"emailSent": "Invoice email sent successfully.",
|
|
"advanceTiming": "Advance",
|
|
"arrearsTiming": "Arrears",
|
|
"paymentSummaryServicePeriods": "Payment settles the invoice balance for these recurring service periods. Open the invoice details below for the full line-by-line breakdown."
|
|
},
|
|
"invoices": {
|
|
"locations": {
|
|
"groupHeading": "Location",
|
|
"subtotal": "Location subtotal",
|
|
"unassigned": "Items without a location",
|
|
"pickerPlaceholder": "Select a location",
|
|
"addLocationButton": "+ Add location",
|
|
"removeGroup": "Remove location",
|
|
"emptyGroup": "No items yet for this location.",
|
|
"needMoreLocations": "This client only has one active location. Add a second location in Client settings to enable multi-site invoicing.",
|
|
"notSet": "No location selected"
|
|
}
|
|
},
|
|
"frequency": {
|
|
"monthly": "Monthly",
|
|
"quarterly": "Quarterly",
|
|
"annual": "Annual",
|
|
"weekly": "Weekly",
|
|
"biweekly": "Bi-weekly"
|
|
},
|
|
"contractLine": {
|
|
"detailsTitle": "Contract Line Details",
|
|
"name": "Contract Line Name",
|
|
"frequency": "Billing Frequency",
|
|
"startDate": "Start Date",
|
|
"endDate": "End Date",
|
|
"noEndDate": "No end date",
|
|
"status": "Status",
|
|
"customRate": "Custom Rate",
|
|
"serviceCategory": "Service Category",
|
|
"statusDescription": "This contract line is currently {{status}} and will {{expiry}}.",
|
|
"expiresOn": "expire on {{date}}",
|
|
"noExpiry": "not expire",
|
|
"cadenceOwnerContractDescription": "Recurring service periods follow the contract anniversary cadence for this line.",
|
|
"cadenceOwnerClientDescription": "Recurring service periods follow the client billing schedule for this line.",
|
|
"cadenceOwnerContract": "Contract anniversary",
|
|
"cadenceOwnerClient": "Client billing schedule",
|
|
"billingTimingAdvance": "Advance",
|
|
"billingTimingArrears": "Arrears",
|
|
"cadenceOwner": "Cadence Owner",
|
|
"billingTiming": "Billing Timing"
|
|
},
|
|
"payment": {
|
|
"method": "Payment Method",
|
|
"date": "Payment Date",
|
|
"amount": "Amount",
|
|
"reference": "Reference",
|
|
"status": "Status"
|
|
},
|
|
"bucket": {
|
|
"title": "Service Hours",
|
|
"remaining": "Remaining Hours",
|
|
"used": "Used Hours",
|
|
"total": "Total Hours",
|
|
"usage": "Usage",
|
|
"overage": "Overage",
|
|
"noContractLineTitle": "No bucket contract lines available",
|
|
"noContractLineDescription": "There are no active bucket contract lines for your account."
|
|
},
|
|
"messages": {
|
|
"noInvoices": "No invoices found",
|
|
"loadingInvoices": "Loading invoices...",
|
|
"paymentSuccessful": "Payment processed successfully",
|
|
"paymentFailed": "Payment failed. Please try again."
|
|
},
|
|
"quotes": {
|
|
"pendingQuotes": "Pending Quotes",
|
|
"awaitingResponse": "{{count}} quote(s) awaiting your response",
|
|
"noPending": "No pending quotes",
|
|
"viewAll": "View All Quotes",
|
|
"locations": {
|
|
"primaryLocationHeading": "Quote location",
|
|
"changeButton": "Change",
|
|
"cancelChange": "Cancel",
|
|
"notSet": "No location selected",
|
|
"groupHeading": "Location",
|
|
"pickerPlaceholder": "Select a location",
|
|
"addLocationButton": "+ Add location",
|
|
"removeGroup": "Remove location",
|
|
"needMoreLocations": "This client only has one active location. Add a second location in Client settings to enable multi-site quoting.",
|
|
"emptyGroup": "No items yet for this location.",
|
|
"subtotal": "Location subtotal",
|
|
"unassigned": "Items without a location"
|
|
},
|
|
"lineItems": {
|
|
"searchPlaceholder": "Search or type custom item name..."
|
|
}
|
|
},
|
|
"quoteForm": {
|
|
"noticeTitle": "Quote",
|
|
"readOnlyNotice": "This quote is read-only. To make changes, create a new revision.",
|
|
"breadcrumb": {
|
|
"billing": "Billing",
|
|
"quotes": "Quotes",
|
|
"quoteTemplates": "Quote Templates",
|
|
"newQuote": "New quote"
|
|
},
|
|
"header": {
|
|
"editQuote": "Edit Quote",
|
|
"newQuote": "New Quote",
|
|
"editTemplate": "Edit Quote Template",
|
|
"newTemplate": "New Quote Template",
|
|
"quoteTotalLabel": "Quote total",
|
|
"version": "v{{version}}"
|
|
},
|
|
"subtitle": {
|
|
"forClient": "For {{clientName}}",
|
|
"expires": "Expires {{date}}",
|
|
"template": "Template · {{description}}"
|
|
},
|
|
"actions": {
|
|
"pdf": "PDF",
|
|
"duplicate": "Duplicate",
|
|
"back": "Back",
|
|
"cancel": "Cancel",
|
|
"previewPdf": "Preview PDF",
|
|
"moreActions": "More actions",
|
|
"saving": "Saving…",
|
|
"saveQuote": "Save quote",
|
|
"saveTemplate": "Save template",
|
|
"sendToClient": "Send to client",
|
|
"requestApproval": "Request approval",
|
|
"requestChanges": "Request changes",
|
|
"approve": "Approve",
|
|
"revise": "Revise",
|
|
"createNewRevision": "Create new revision",
|
|
"convertToContract": "Convert to contract",
|
|
"convertToInvoice": "Convert to invoice",
|
|
"convertToBoth": "Convert to both",
|
|
"resend": "Resend",
|
|
"sendReminder": "Send reminder",
|
|
"cancelQuote": "Cancel quote"
|
|
},
|
|
"banners": {
|
|
"acceptedTitle": "Quote Accepted",
|
|
"acceptedBy": "Accepted by: {{name}}",
|
|
"acceptedOn": "Accepted on: {{date}}",
|
|
"rejectedTitle": "Quote Rejected",
|
|
"rejectedOn": "Rejected on: {{date}}",
|
|
"rejectedReason": "Reason: {{reason}}",
|
|
"convertedTitle": "Quote Converted",
|
|
"convertedDescription": "This quote has been converted to a contract and/or invoice."
|
|
},
|
|
"essentials": {
|
|
"title": "Essentials",
|
|
"subtitle": "Shown to the client on the quote document.",
|
|
"titleField": "Title",
|
|
"descriptionField": "Description / Scope",
|
|
"descriptionHelp": "A short paragraph that appears just under the title on the PDF.",
|
|
"client": "Client",
|
|
"clientPlaceholder": "Select client",
|
|
"contact": "Contact",
|
|
"contactPlaceholder": "Select contact",
|
|
"currency": "Currency",
|
|
"currencyPlaceholder": "Select currency",
|
|
"quoteDate": "Quote date",
|
|
"validUntil": "Valid until",
|
|
"validUntilHelp": "Quote auto-expires on this date."
|
|
},
|
|
"lineItems": {
|
|
"title": "Line items",
|
|
"subtitleEmpty": "No items yet.",
|
|
"subtitleCount": "{{count}} items · {{mix}}",
|
|
"mixBoth": "recurring and one-time",
|
|
"mixRecurring": "recurring",
|
|
"mixOneTime": "one-time",
|
|
"addLocation": "+ Add location",
|
|
"fromTemplate": "+ From template"
|
|
},
|
|
"clientFacing": {
|
|
"title": "Client-facing text",
|
|
"subtitle": "Appears on the PDF, below the totals.",
|
|
"notes": "Notes to client (Optional)",
|
|
"terms": "Terms & conditions (Optional)"
|
|
},
|
|
"moreDetails": {
|
|
"title": "More details",
|
|
"subtitle": "PO number, opportunity, PDF layout",
|
|
"poNumber": "PO number",
|
|
"opportunity": "Opportunity",
|
|
"opportunityPlaceholder": "Opportunity ID (optional)",
|
|
"pdfLayout": "PDF layout",
|
|
"pdfLayoutPlaceholder": "Use default layout",
|
|
"pdfLayoutHelp": "Choose which layout the client will see. Leave default to use tenant default."
|
|
},
|
|
"footer": {
|
|
"savedAgo": "Changes saved · {{ago}}",
|
|
"saving": "Saving…",
|
|
"unsaved": "Unsaved changes"
|
|
},
|
|
"sidebar": {
|
|
"quoteTotal": "Quote total",
|
|
"recurringPerMonth": "{{amount}} recurring / month",
|
|
"subtotal": "Subtotal",
|
|
"discounts": "Discounts",
|
|
"tax": "Tax",
|
|
"statusLabel": "Status",
|
|
"approvalLabel": "Approval",
|
|
"approvalMessage": "Quotes need sales lead approval before sending.",
|
|
"documentLayoutLabel": "Document layout",
|
|
"defaultLayout": "Tenant default",
|
|
"standardLayout": "Standard",
|
|
"customLayout": "Custom",
|
|
"tenantDefault": "Tenant default",
|
|
"changeLayout": "Change"
|
|
}
|
|
},
|
|
"enums": {
|
|
"billingFrequency": {
|
|
"weekly": "Weekly",
|
|
"monthly": "Monthly",
|
|
"quarterly": "Quarterly",
|
|
"annually": "Annually"
|
|
},
|
|
"contractLineType": {
|
|
"Fixed": "Fixed",
|
|
"Hourly": "Hourly",
|
|
"Usage": "Usage Based"
|
|
},
|
|
"quoteStatus": {
|
|
"draft": "Draft",
|
|
"pending_approval": "Pending Approval",
|
|
"approved": "Approved",
|
|
"sent": "Sent",
|
|
"accepted": "Accepted",
|
|
"rejected": "Rejected",
|
|
"expired": "Expired",
|
|
"converted": "Converted",
|
|
"cancelled": "Cancelled",
|
|
"superseded": "Superseded",
|
|
"archived": "Archived"
|
|
},
|
|
"quoteStatusDescription": {
|
|
"draft": "Quote is being prepared",
|
|
"pending_approval": "Quote is waiting for internal approval",
|
|
"approved": "Quote is approved and ready to send",
|
|
"sent": "Quote has been sent to the client",
|
|
"accepted": "Client accepted the quote",
|
|
"rejected": "Client rejected the quote",
|
|
"expired": "Quote passed its validity date",
|
|
"converted": "Quote has been converted to billing records",
|
|
"cancelled": "Quote was cancelled before conversion",
|
|
"superseded": "Quote was replaced by a revision",
|
|
"archived": "Quote is archived and read-only"
|
|
},
|
|
"invoiceStatus": {
|
|
"draft": "Draft",
|
|
"sent": "Sent",
|
|
"paid": "Paid",
|
|
"overdue": "Overdue",
|
|
"cancelled": "Cancelled",
|
|
"pending": "Pending",
|
|
"prepayment": "Prepayment",
|
|
"partially_applied": "Partially Applied"
|
|
},
|
|
"invoiceStatusDescription": {
|
|
"draft": "Work-in-progress invoices that have not been sent to the customer",
|
|
"sent": "Invoices that have been finalized and sent to the customer",
|
|
"paid": "Fully paid invoices ready for reconciliation",
|
|
"overdue": "Finalized invoices that are past their due date",
|
|
"cancelled": "Invoices that have been voided or cancelled",
|
|
"pending": "Invoices awaiting approval or additional processing",
|
|
"prepayment": "Advance payment or deposit invoices",
|
|
"partially_applied": "Invoices with partial payments applied"
|
|
}
|
|
}
|
|
}
|