PSA/server/public/locales/es/msp/service-catalog.json
Hermes 284313f908
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
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

450 lines
16 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"taxRates": {
"errors": {
"loadRegions": "No se pudieron cargar las regiones fiscales.",
"validateDeletion": "No se pudo validar la eliminación. Por favor inténtalo de nuevo.",
"fetchRates": "No se han podido recuperar las tasas impositivas",
"add": "No se pudo agregar la tasa impositiva",
"update": "No se pudo actualizar la tasa impositiva",
"confirmDeletion": "No se pudo confirmar la eliminación de la tasa impositiva."
},
"validation": {
"requiredFieldsTitle": "Por favor complete los campos requeridos:",
"region": "Región fiscal",
"percentage": "Porcentaje de impuesto",
"startDate": "Fecha de inicio"
},
"table": {
"description": "Descripción",
"startDate": "Fecha de inicio",
"endDate": "Fecha de finalización",
"actions": "Comportamiento",
"notAvailable": "N/D",
"region": "Región",
"taxPercentage": "Porcentaje de impuestos",
"composite": "compuesto"
},
"actions": {
"openMenu": "abrir menú",
"edit": "Editar",
"delete": "Borrar",
"advancedSettings": "Configuración avanzada",
"addNew": "Agregar nueva tasa impositiva",
"add": "Agregar tasa impositiva",
"update": "Actualizar tasa impositiva"
},
"dialog": {
"fields": {
"description": "Descripción",
"startDate": "Fecha de inicio *",
"endDate": "Fecha de finalización (opcional)",
"region": "Región fiscal *",
"percentage": "Porcentaje de impuestos *"
},
"placeholders": {
"loadingRegions": "Cargando regiones...",
"selectRegion": "Seleccionar región fiscal",
"percentage": "Introduzca el porcentaje"
},
"addTitle": "Agregar nueva tasa impositiva",
"editTitle": "Editar tasa impositiva",
"description": "Introduzca los detalles de la tasa impositiva."
},
"title": "Tasas de impuestos",
"loading": "Cargando tasas impositivas",
"deleteEntity": {
"fallback": "esta tasa impositiva",
"withRegion": "{{regionName}} tasa impositiva"
}
},
"taxRateDetail": {
"fields": {
"regionCode": "Código de región",
"description": "Descripción",
"startDate": "Fecha de inicio",
"endDate": "Fecha de finalización",
"taxPercentage": "Porcentaje de impuestos",
"taxType": "Tipo de impuesto",
"isComposite": "es compuesto",
"isActive": "esta activo"
},
"values": {
"dash": "-",
"noEndDate": "Sin fecha de finalización",
"yes": "Sí",
"no": "No",
"active": "Activo",
"inactive": "Inactivo",
"composite": "compuesto"
},
"actions": {
"back": "Volver a tasas impositivas"
},
"subtitle": "{{regionCode}} - {{percentage}}%",
"tabs": {
"details": "Detalles",
"components": "Componentes",
"brackets": "Tramos",
"holidays": "Festivos"
},
"precedence": {
"title": "Precedencia en el cálculo de impuestos",
"clientExempt": "El indicador de exención de impuestos del cliente se marca primero (si está exento, no se aplican impuestos)",
"serviceSpecific": "Se utiliza la tasa impositiva específica del servicio si se asigna",
"clientDefault": "La tasa impositiva predeterminada del cliente se utiliza como alternativa",
"regionLookup": "La búsqueda de región fiscal determina la tasa aplicable según la ubicación"
},
"components": {
"simpleRateMessage": "Se trata de una tasa impositiva simple, no una tasa compuesta. Los componentes impositivos sólo se utilizan para impuestos compuestos.",
"enableCompositeMessage": "Para utilizar componentes impositivos, marque esta tasa como compuesta al editarla."
},
"brackets": {
"intro": "Los tramos impositivos progresivos aplican diferentes tasas a diferentes partes de un monto.",
"precedence": "Cuando se definen tramos, tienen prioridad sobre la tasa porcentual fija."
}
},
"serviceForm": {
"errors": {
"loadServiceTypes": "No se pudieron recuperar los tipos de servicio",
"serviceTypeNotFound": "Tipo de servicio seleccionado no encontrado",
"create": "No se pudo crear el servicio",
"loadTaxData": "No se pudieron cargar los datos fiscales.",
"selectServiceType": "Por favor seleccione un tipo de servicio"
},
"fields": {
"serviceName": {
"placeholder": "Nombre del servicio"
},
"serviceType": {
"label": "Tipo de servicio",
"placeholder": "Seleccionar tipo de servicio"
},
"billingMethod": {
"label": "Método de facturación",
"placeholder": "Seleccione el método de facturación"
},
"description": {
"label": "Descripción",
"placeholder": "Descripción del servicio"
},
"taxRate": {
"label": "Tasa impositiva",
"placeholderLoading": "Cargando datos fiscales...",
"placeholder": "Seleccionar tasa impositiva (opcional)"
},
"defaultRate": {
"placeholder": "Tasa predeterminada"
},
"unitOfMeasure": {
"placeholder": "Unidad de medida"
}
},
"options": {
"billingMethod": {
"hourly": "Cada hora",
"usage": "Basado en el uso",
"fixed": "Precio fijo"
}
},
"taxRateOption": {
"fallback": "N/D",
"label": "{{description}} - {{percentage}}%"
},
"actions": {
"submit": "Agregar servicio"
}
},
"serviceSelection": {
"table": {
"type": "Tipo",
"unit": "Unidad",
"rate": "Tarifa",
"product": "Producto",
"itemName": "Nombre del artículo",
"service": "Servicio",
"unknown": "Desconocido"
},
"actions": {
"cancel": "Cancelar",
"addSelected": "Agregar servicios seleccionados",
"adding": "Añadiendo..."
},
"title": "Agregar servicios y productos al plan",
"searchPlaceholder": "Buscar servicios/productos...",
"errors": {
"load": "No se pudieron cargar los servicios",
"add": "No se pudieron agregar servicios al plan"
},
"states": {
"loading": "Cargando servicios...",
"empty": "No se encontraron servicios"
},
"selection": {
"countOne": "{{count}} servicio seleccionado",
"countOther": "{{count}} servicios seleccionados"
},
"quickAdd": {
"label": "Agregar rápido:",
"allType": "Todo {{type}}"
}
},
"configType": {
"warningDialog": {
"cancel": "Cancelar",
"title": "¿Cambiar tipo de configuración?",
"description": "Cambiar el tipo de configuración restablecerá cualquier configuración específica del tipo. Esta acción no se puede deshacer.",
"confirm": "Tipo de cambio"
},
"placeholder": "Seleccione el tipo de configuración",
"options": {
"Fixed": {
"label": "Precio fijo",
"description": "Un servicio de precio fijo con facturación constante independientemente del uso. Ideal para servicios predecibles."
},
"Hourly": {
"label": "Tarifa por hora",
"description": "Facturación basada en tiempo con tarifas configurables. Lo mejor para cargas de trabajo variables facturadas según el tiempo invertido."
},
"Usage": {
"label": "Basado en el uso",
"description": "Facturación basada en el uso con opciones de precios escalonados. Perfecto para servicios medidos por consumo."
},
"Bucket": {
"label": "Bolsa de horas",
"description": "Horas precompradas que pueden usarse con el tiempo. Ideal para clientes que necesitan flexibilidad con un límite de presupuesto."
}
}
},
"serviceConfig": {
"fields": {
"quantity": {
"label": "Cantidad",
"placeholder": "Introduce la cantidad",
"help": "Número de unidades de este servicio",
"errorNegative": "La cantidad no puede ser negativa."
},
"customRate": {
"label": "Tarifa personalizada",
"placeholder": "Introducir tarifa",
"placeholderDefault": "Predeterminado: {{rate}}",
"helpCustom": "Tarifa personalizada para este servicio",
"helpUseDefault": "Déjelo en blanco para usar la tasa predeterminada ({{rate}})",
"errorNegative": "La tasa no puede ser negativa"
},
"configurationType": "Tipo de configuración"
},
"actions": {
"cancel": "Cancelar",
"saving": "Guardando...",
"save": "Guardar configuración"
},
"title": "Configuración del servicio",
"serviceLabel": "Servicio",
"effectiveModeLabel": "Modo efectivo",
"defaultSourceLabel": "Fuente predeterminada",
"modes": {
"Fixed": "Precio fijo",
"Hourly": "Tarifa por hora",
"Usage": "Basado en el uso",
"Bucket": "Bolsa de horas"
},
"defaultSources": {
"catalog default": "valor predeterminado del catálogo",
"contract override": "anulación de contrato",
"none": "ninguno"
},
"bucketOverlay": {
"recommendHours": "Recomendar cubo de horas",
"recommendUsage": "Recomendar cubo de consumo."
}
},
"hourlyConfig": {
"fields": {
"minimumBillableTime": {
"placeholder": "15",
"label": "Tiempo mínimo facturable (minutos)",
"help": "Tiempo mínimo para facturar (por ejemplo, 15 minutos)",
"errorNegative": "El tiempo mínimo facturable no puede ser negativo"
},
"roundUpToNearest": {
"placeholder": "15",
"label": "Redondear al más cercano (minutos)",
"help": "Redondear entradas de tiempo hasta el incremento más cercano",
"errorNegative": "El valor redondeado no puede ser negativo"
},
"newUserType": {
"label": "Tipo de usuario",
"placeholder": "Seleccionar tipo de usuario"
},
"newUserTypeRate": {
"label": "Tarifa",
"placeholder": "Introducir tarifa",
"errorNegative": "La tasa de tipo de usuario no puede ser negativa"
}
},
"userTypeRates": {
"headers": {
"userType": "Tipo de usuario",
"rate": "Tarifa"
},
"title": "Tarifas de tipo de usuario",
"options": {
"technician": "Técnico",
"engineer": "ingeniero",
"consultant": "Consultor",
"project_manager": "Gerente de Proyecto",
"admin": "Administrador"
},
"actions": {
"addRate": "Agregar tarifa"
}
},
"title": "Configuración de tarifa por hora"
},
"usageConfig": {
"defaults": {
"unitOfMeasure": "Unidad"
},
"fields": {
"unitOfMeasure": {
"errorRequired": "Se requiere unidad de medida",
"label": "Unidad de medida",
"placeholder": "Introducir unidad de medida",
"help": "La unidad utilizada para medir el uso (por ejemplo, GB, Usuario, Dispositivo)"
},
"minimumUsage": {
"placeholder": "0",
"label": "Umbral de uso mínimo",
"help": "Uso mínimo facturable por período (0 sin mínimo)",
"errorNegative": "El uso mínimo no puede ser negativo"
},
"enableTieredPricing": "Habilitar precios escalonados"
},
"title": "Configuración basada en el uso",
"tiers": {
"title": "Niveles de precios",
"addTier": "Agregar nivel",
"empty": "No hay niveles configurados. Agregue un nivel para definir precios basados en el volumen.",
"from": "De ({{unit}})",
"to": "Para ({{unit}})",
"ratePer": "Tarifa por {{unit}}",
"unlimited": "Ilimitado",
"help": "Configure niveles de precios basados en volumen. Cada nivel aplica su tarifa al uso que se encuentra dentro de su rango.",
"errors": {
"onlyLastUnlimited": "Sólo el último nivel puede tener un límite superior ilimitado",
"overlap": "Los niveles no pueden superponerse",
"upperGreaterThanLower": "El límite superior del nivel debe ser mayor que el límite inferior",
"rateNegative": "Las tasas de nivel no pueden ser negativas"
}
}
},
"rateTiers": {
"table": {
"actions": "Comportamiento",
"minQuantity": "Cantidad mínima",
"maxQuantity": "Cantidad máxima",
"rate": "Tarifa ({{unit}})",
"unlimited": "Ilimitado"
},
"actions": {
"saving": "Guardando...",
"addTier": "Agregar nivel",
"save": "Guardar niveles de tarifas"
},
"title": "Niveles de tarifas y descuentos por cantidad",
"description": "Configura diferentes tarifas según rangos de cantidad. Cantidades mayores pueden tener tarifas con descuento.",
"loading": "Cargando niveles de tarifas...",
"formattedRate": "{{rate}} por {{unit}}",
"errors": {
"load": "No se pudieron cargar los niveles de tarifas",
"save": "No se pudieron guardar los niveles de tarifas",
"lastTier": "No se puede eliminar el último nivel",
"minPositive": "La cantidad mínima debe ser mayor que 0",
"maxGreaterThanMin": "La cantidad máxima debe ser mayor que la cantidad mínima.",
"rateNegative": "La tasa no puede ser negativa",
"overlap": "Los rangos de niveles no pueden superponerse"
}
},
"serviceTaxSettings": {
"fields": {
"taxRate": {
"label": "Tasa impositiva",
"placeholderLoading": "Cargando tarifas...",
"placeholder": "Seleccionar tasa impositiva",
"help": "Seleccione 'No sujeto a impuestos' si este servicio no debe estar sujeto a impuestos."
}
},
"options": {
"nonTaxable": "No imponible"
},
"errors": {
"loadTaxRates": "No se pudieron cargar las tasas impositivas.",
"save": "No se pudo guardar la configuración de impuestos"
},
"actions": {
"saving": "Guardando...",
"save": "Guardar configuración de impuestos"
},
"title": "Configuración de impuestos",
"optionLabel": "{{taxType}} ({{countryCode}}) - {{percentage}}%"
},
"fixedConfig": {
"title": "Configuración de precio fijo",
"fields": {
"adjustForPartialPeriods": "Ajuste por períodos parciales",
"billingCycleAlignment": {
"label": "Alineación del ciclo de facturación",
"placeholder": "Seleccionar alineación",
"help": "Controla cómo se calcula la cobertura del período parcial cuando la tarifa recurrente debe escalar a menos de un período de servicio completo."
}
},
"options": {
"start": "Inicio del ciclo de facturación",
"end": "Fin del ciclo de facturación",
"prorated": "Cobertura proporcional"
}
},
"bucketConfig": {
"title": "Configuración de bolsa de horas",
"fields": {
"totalMinutes": {
"label": "Minutos totales",
"placeholder": "Ingrese el total de horas",
"help": "El número total de minutos incluidos en esta línea de contrato de segmento",
"errorPositive": "El total de minutos debe ser mayor que cero."
},
"billingPeriod": {
"label": "Período de facturación",
"placeholder": "Seleccione el período de facturación",
"help": "El período durante el cual se asignan las horas del segmento",
"mismatchPrefix": "Falta de coincidencia:",
"mismatch": "El período de facturación de la bolsa ({{billingPeriod}}) debe coincidir con la frecuencia de facturación de la línea de contrato ({{contractLineBillingFrequency}})."
},
"overageRate": {
"label": "Tarifa excedente",
"placeholder": "Introduzca la tasa de excedente",
"help": "La tarifa por hora que se cobra por las horas utilizadas más allá del límite del depósito.",
"errorNegative": "La tasa de excedente no puede ser negativa"
},
"allowRollover": "Permitir que las horas no utilizadas se transfieran al siguiente período"
}
},
"serviceDetail": {
"loading": "Cargando configuración del servicio...",
"errors": {
"notFound": "Servicio no encontrado",
"load": "No se pudo cargar la configuración del servicio"
},
"title": "Configuración del servicio: {{serviceName}}",
"description": "Configurar los detalles del servicio, los precios y los ajustes de impuestos",
"sections": {
"unitOfMeasure": "Unidad de medida",
"baseRate": "Tarifa básica"
},
"baseRate": {
"summary": "{{rate}} por {{unit}}",
"help": "La tarifa base se puede anular con los niveles basados en cantidad que aparecen a continuación."
}
}
}