iobroker.time-tracker 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -355,6 +355,12 @@ local SQLite file, access is role-based, and every correction is written to an a
355
355
 
356
356
  ### **WORK IN PROGRESS**
357
357
 
358
+ ### 0.3.4 (2026-09-22)
359
+
360
+ - (Alex) feat: the absence types can be maintained in the admin now — one row per type and the form in a dialog, with
361
+ code, name, paid, factor and the vacation deduction. The type that uses up the vacation allowance is marked in the
362
+ lists and in the picker, so “F – Ferien” reads as vacation at one glance
363
+
358
364
  ### 0.3.3 (2026-09-22)
359
365
 
360
366
  - (Alex) fix: the installation chapter no longer points to the “Install from custom URL” dialog — the repository
@@ -389,17 +395,6 @@ local SQLite file, access is role-based, and every correction is written to an a
389
395
  for employees who agreed (`/terminal/users` and `/terminal/punch`). The new column
390
396
  `work_profiles.show_worked_time` arrives with migration 20
391
397
 
392
- ### 0.2.7 (2026-09-22)
393
-
394
- - (Alex) fix: **every** punch path reaches `events.*` and the web app now. Besides the presence state (0.2.6) the
395
- `commands.punch`/`quickPunch` buttons, a `sendTo` message (`punch`, `present`) and the trigger rules (Actions) wrote
396
- the punch and refreshed the figures but never published an event — the event states kept the punch before. The
397
- results carry `userId` and `direction` now, and `punchEvent` (like `presenceEvent`) builds the bus event for them;
398
- the automation rules send the direction with their `automation.*` event
399
- - (Alex) test: the end-to-end suite is deterministic again — the correction spec anchors its “forgotten day” inside the
400
- local day (`now - 8h` fell on the day before when the suite ran shortly after midnight and left the employee
401
- present for the specs that follow), and the presence spec puts its employee into a known state before it asserts
402
-
403
398
  Older entries are kept in [`CHANGELOG_OLD.md`](CHANGELOG_OLD.md).
404
399
 
405
400
  ## Provenance
package/io-package.json CHANGED
@@ -1,9 +1,22 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "time-tracker",
4
- "version": "0.3.3",
4
+ "version": "0.3.4",
5
5
  "nogit": true,
6
6
  "news": {
7
+ "0.3.4": {
8
+ "en": "feat: the absence types can be maintained in the administration now — code, name, paid, factor and the vacation deduction, as a row per type with the form in a dialog. The type that uses up the vacation allowance is marked in the lists and in the picker, so “F – Ferien” reads as vacation at one glance",
9
+ "de": "feat: die Abwesenheitsarten lassen sich jetzt in der Verwaltung pflegen — Kürzel, Bezeichnung, bezahlt, Faktor und Urlaubsabzug, als Zeile je Art mit dem Formular in einem Dialog. Die Art, die vom Urlaubskontingent abzieht, ist in den Listen und in der Auswahl gekennzeichnet, sodass „F – Ferien“ auf einen Blick als Urlaub lesbar ist",
10
+ "ru": "новое: видами отсутствия теперь можно управлять в администрировании — код, название, оплата, коэффициент и вычет отпуска, по строке на вид с формой в диалоге. Вид, расходующий отпускной лимит, отмечен в списках и в выборе, поэтому «F – Ferien» сразу читается как отпуск",
11
+ "pt": "novo: os tipos de ausência podem agora ser mantidos na administração — código, designação, pagamento, fator e dedução de férias, uma linha por tipo com o formulário numa caixa de diálogo. O tipo que consome o direito a férias está marcado nas listas e na escolha, por isso «F – Ferien» lê-se logo como férias",
12
+ "nl": "nieuw: de afwezigheidstypes kunnen nu in het beheer worden onderhouden — code, naam, betaald, factor en vakantieaftrek, één regel per type met het formulier in een dialoog. Het type dat het vakantietegoed opgebruikt, is gemarkeerd in de lijsten en in de keuzelijst, zodat „F – Ferien“ in één oogopslag als vakantie leesbaar is",
13
+ "fr": "nouveau : les types d'absence peuvent désormais être gérés dans l'administration — code, libellé, payé, facteur et déduction de vacances, une ligne par type avec le formulaire dans une boîte de dialogue. Le type qui consomme le droit aux vacances est marqué dans les listes et dans le choix, si bien que « F – Ferien » se lit comme vacances d'un coup d'œil",
14
+ "it": "novità: i tipi di assenza possono ora essere gestiti nell'amministrazione — codice, denominazione, pagato, fattore e deduzione ferie, una riga per tipo con il modulo in una finestra di dialogo. Il tipo che consuma il diritto alle ferie è contrassegnato negli elenchi e nella scelta, così «F – Ferien» si legge come ferie a colpo d'occhio",
15
+ "es": "novedad: los tipos de ausencia se pueden mantener ahora en la administración — código, denominación, pagado, factor y deducción de vacaciones, una fila por tipo con el formulario en un diálogo. El tipo que consume el derecho a vacaciones está marcado en las listas y en la elección, así que «F – Ferien» se lee como vacaciones de un vistazo",
16
+ "pl": "nowość: rodzajami nieobecności można teraz zarządzać w administracji — kod, nazwa, płatne, współczynnik i potrącenie urlopu, po jednym wierszu na rodzaj z formularzem w oknie dialogowym. Rodzaj zużywający limit urlopu jest oznaczony na listach i na liście wyboru, więc «F – Ferien» od razu czyta się jako urlop",
17
+ "uk": "новинка: видами відсутності тепер можна керувати в адмініструванні — код, назва, оплата, коефіцієнт і відрахування відпустки, по рядку на вид із формою в діалозі. Вид, що витрачає ліміт відпустки, позначено у списках і у виборі, тож «F – Ferien» одразу читається як відпустка",
18
+ "zh-cn": "新功能:现在可在管理中维护缺勤类型 —— 代号、名称、带薪、系数与休假扣减,每种类型一行,表单在对话框中。会消耗休假额度的类型会在列表和选择中标记,因此「F – Ferien」一眼即可看出是休假"
19
+ },
7
20
  "0.3.3": {
8
21
  "en": "fix: the installation chapter of the README no longer points to the adapter dialog for a URL — the repository checker reports that as E6013. It now describes the normal way through the adapter list of the ioBroker admin (and names the registry for machines without the admin); the build steps for work on the sources are a separate note",
9
22
  "de": "fix: das Installationskapitel der README verweist nicht mehr auf den Adapter-Dialog für eine URL — der Repository-Checker meldet das als E6013. Es beschreibt jetzt den normalen Weg über die Adapterliste des ioBroker-Admin (und nennt die Registry für Rechner ohne Admin); die Build-Schritte für die Arbeit an den Quellen stehen in einem eigenen Hinweis",
@@ -81,19 +94,6 @@
81
94
  "pl": "poprawka: rejestracja przez stan obecności (`users.<id>.present`) jest teraz publikowana w strumieniu zdarzeń — pojawia się w `events.lastType`, `lastUser`, `lastDirection` i `lastSource` i dociera do aplikacji web na żywo. Wpis trafiał do bazy, ale zdarzenie nigdy nie było wysyłane na magistralę, dlatego stany zdarzeń zostawały przy poprzednim wpisie",
82
95
  "uk": "виправлення: відмітка через стан присутності (`users.<id>.present`) тепер публікується в потоці подій — вона з'являється в `events.lastType`, `lastUser`, `lastDirection` і `lastSource` і одразу доходить до веб-застосунку. Відмітка зберігалася в базі, але подія ніколи не надсилалася до шини, тому стани подій залишалися від попередньої відмітки",
83
96
  "zh-cn": "修复:通过在岗状态(`users.<id>.present`)的打卡现在会发布到事件流 —— 会出现在 `events.lastType`、`lastUser`、`lastDirection` 和 `lastSource`,并实时到达 Web 应用。打卡已写入数据库,但事件从未发送到总线,因此这些事件状态一直停留在上一次打卡"
84
- },
85
- "0.2.5": {
86
- "en": "docs: the installation chapter leads with the normal way now — install the npm package (`iobroker install iobroker.time-tracker` or the admin’s “Install from custom URL”), which creates the instance `time-tracker.0` automatically. Building from a checkout is the developer path, and the chapter explains why a Git installation reports `cannot find start file!`",
87
- "de": "Doku: das Installationskapitel führt jetzt mit dem normalen Weg — das npm-Paket installieren (`iobroker install iobroker.time-tracker` oder „Installieren aus eigener URL“ im Admin), wobei die Instanz `time-tracker.0` automatisch entsteht. Bauen aus dem Quellcode ist nur noch der Entwicklerweg, und das Kapitel erklärt, warum eine Git-Installation `cannot find start file!` meldet",
88
- "ru": "документация: глава об установке теперь начинается с обычного пути — установить пакет npm (`iobroker install iobroker.time-tracker` или «Установить по своему URL» в админе), при этом экземпляр `time-tracker.0` создаётся автоматически. Сборка из исходников — теперь только путь разработчика, и глава объясняет, почему установка из Git сообщает `cannot find start file!`",
89
- "pt": "documentação: o capítulo de instalação começa agora pelo caminho normal — instalar o pacote npm (`iobroker install iobroker.time-tracker` ou “Instalar a partir de URL própria” no admin), e a instância `time-tracker.0` é criada automaticamente. Compilar a partir do código é apenas o caminho do programador, e o capítulo explica porque uma instalação via Git indica `cannot find start file!`",
90
- "nl": "documentatie: het installatiehoofdstuk begint nu met de normale weg — het npm-pakket installeren (`iobroker install iobroker.time-tracker` of “Installeren vanaf eigen URL” in de admin), waarbij de instantie `time-tracker.0` automatisch ontstaat. Bouwen uit de broncode is nu alleen het ontwikkelaarspad, en het hoofdstuk legt uit waarom een Git-installatie `cannot find start file!` meldt",
91
- "fr": "documentation : le chapitre d'installation commence désormais par la voie normale — installer le paquet npm (`iobroker install iobroker.time-tracker` ou « Installer depuis une URL personnalisée » dans l'admin), l'instance `time-tracker.0` étant créée automatiquement. Compiler depuis les sources n'est plus que le chemin du développeur, et le chapitre explique pourquoi une installation via Git signale `cannot find start file!`",
92
- "it": "documentazione: il capitolo sull'installazione parte ora dal percorso normale — installare il pacchetto npm (`iobroker install iobroker.time-tracker` o “Installa da URL personale” nell'admin), e l'istanza `time-tracker.0` viene creata automaticamente. Compilare dai sorgenti è ora solo il percorso dello sviluppatore, e il capitolo spiega perché un'installazione da Git segnala `cannot find start file!`",
93
- "es": "documentación: el capítulo de instalación empieza ahora por el camino normal — instalar el paquete npm (`iobroker install iobroker.time-tracker` o “Instalar desde URL propia” en el admin), y la instancia `time-tracker.0` se crea automáticamente. Compilar desde el código es solo la ruta del desarrollador, y el capítulo explica por qué una instalación desde Git informa `cannot find start file!`",
94
- "pl": "dokumentacja: rozdział o instalacji zaczyna się teraz od zwykłej drogi — instalacji pakietu npm (`iobroker install iobroker.time-tracker` lub „Zainstaluj z własnego adresu URL” w adminie), przy czym instancja `time-tracker.0` powstaje automatycznie. Budowanie ze źródeł to teraz tylko ścieżka dewelopera, a rozdział wyjaśnia, dlaczego instalacja z Git zgłasza `cannot find start file!`",
95
- "uk": "документація: розділ про встановлення тепер починається зі звичайного шляху — встановити пакет npm (`iobroker install iobroker.time-tracker` або «Встановити з власного URL» в адміні), при цьому екземпляр `time-tracker.0` створюється автоматично. Збірка з коду — тепер лише шлях розробника, і розділ пояснює, чому встановлення з Git повідомляє `cannot find start file!`",
96
- "zh-cn": "文档:安装章节现在先介绍常规方式 —— 安装 npm 包(`iobroker install iobroker.time-tracker` 或管理界面中的“从自定义 URL 安装”),实例 `time-tracker.0` 会自动创建。从源码构建现在只是开发者路径,章节也说明了为什么从 Git 安装会提示 `cannot find start file!`"
97
97
  }
98
98
  },
99
99
  "titleLang": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.time-tracker",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "description": "Time tracking (clock-in/out) for ioBroker with web app, badge terminal and reports",
5
5
  "author": {
6
6
  "name": "Alex",
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "Regeln speichern",
363
363
  "admin.automation.edit": "Bearbeiten",
364
364
  "admin.automation.editTitle": "Regel bearbeiten",
365
- "admin.automation.newTitle": "Neue Regel"
365
+ "admin.automation.newTitle": "Neue Regel",
366
+ "absences.vacationTag": "Urlaub",
367
+ "admin.absenceTypes.title": "Abwesenheitsarten",
368
+ "admin.absenceTypes.hint": "Kürzel, Bezeichnung und Wirkung der Abwesenheiten. „Urlaub“ markiert die Art, die das Urlaubskontingent verbraucht.",
369
+ "admin.absenceTypes.code": "Kürzel",
370
+ "admin.absenceTypes.name": "Bezeichnung",
371
+ "admin.absenceTypes.paid": "Bezahlt",
372
+ "admin.absenceTypes.factor": "Faktor (%)",
373
+ "admin.absenceTypes.reduceVacation": "Zieht vom Urlaub ab",
374
+ "admin.absenceTypes.active": "Aktiv",
375
+ "admin.absenceTypes.add": "Art hinzufügen",
376
+ "admin.absenceTypes.edit": "Bearbeiten",
377
+ "admin.absenceTypes.editTitle": "Art bearbeiten",
378
+ "admin.absenceTypes.newTitle": "Neue Art",
379
+ "admin.absenceTypes.empty": "Keine Abwesenheitsart angelegt.",
380
+ "admin.absenceTypes.note": "Bestehende Abwesenheiten behalten ihre Art — eine geänderte Bezeichnung wirkt sofort in der ganzen Oberfläche."
366
381
  }
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "Save rules",
363
363
  "admin.automation.edit": "Edit",
364
364
  "admin.automation.editTitle": "Edit rule",
365
- "admin.automation.newTitle": "New rule"
365
+ "admin.automation.newTitle": "New rule",
366
+ "absences.vacationTag": "vacation",
367
+ "admin.absenceTypes.title": "Absence types",
368
+ "admin.absenceTypes.hint": "Code, name and effect of the absences. “Vacation” marks the type that uses up the vacation allowance.",
369
+ "admin.absenceTypes.code": "Code",
370
+ "admin.absenceTypes.name": "Name",
371
+ "admin.absenceTypes.paid": "Paid",
372
+ "admin.absenceTypes.factor": "Factor (%)",
373
+ "admin.absenceTypes.reduceVacation": "Reduces vacation",
374
+ "admin.absenceTypes.active": "Active",
375
+ "admin.absenceTypes.add": "Add type",
376
+ "admin.absenceTypes.edit": "Edit",
377
+ "admin.absenceTypes.editTitle": "Edit type",
378
+ "admin.absenceTypes.newTitle": "New type",
379
+ "admin.absenceTypes.empty": "No absence type yet.",
380
+ "admin.absenceTypes.note": "Existing absences keep their type — a changed name shows up everywhere right away."
366
381
  }
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "Guardar reglas",
363
363
  "admin.automation.edit": "Editar",
364
364
  "admin.automation.editTitle": "Editar regla",
365
- "admin.automation.newTitle": "Nueva regla"
365
+ "admin.automation.newTitle": "Nueva regla",
366
+ "absences.vacationTag": "vacaciones",
367
+ "admin.absenceTypes.title": "Tipos de ausencia",
368
+ "admin.absenceTypes.hint": "Código, denominación y efecto de las ausencias. «Vacaciones» marca el tipo que consume el derecho a vacaciones.",
369
+ "admin.absenceTypes.code": "Código",
370
+ "admin.absenceTypes.name": "Denominación",
371
+ "admin.absenceTypes.paid": "Pagado",
372
+ "admin.absenceTypes.factor": "Factor de tiempo (%)",
373
+ "admin.absenceTypes.reduceVacation": "Reduce las vacaciones",
374
+ "admin.absenceTypes.active": "Activo",
375
+ "admin.absenceTypes.add": "Añadir tipo",
376
+ "admin.absenceTypes.edit": "Editar",
377
+ "admin.absenceTypes.editTitle": "Editar tipo",
378
+ "admin.absenceTypes.newTitle": "Nuevo tipo",
379
+ "admin.absenceTypes.empty": "Ningún tipo de ausencia definido.",
380
+ "admin.absenceTypes.note": "Las ausencias existentes mantienen su tipo — una denominación modificada aparece enseguida en toda la interfaz."
366
381
  }
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "Enregistrer les règles",
363
363
  "admin.automation.edit": "Modifier",
364
364
  "admin.automation.editTitle": "Modifier la règle",
365
- "admin.automation.newTitle": "Nouvelle règle"
365
+ "admin.automation.newTitle": "Nouvelle règle",
366
+ "absences.vacationTag": "vacances",
367
+ "admin.absenceTypes.title": "Types d'absence",
368
+ "admin.absenceTypes.hint": "Code, libellé et effet des absences. « Vacances » marque le type qui consomme le droit aux vacances.",
369
+ "admin.absenceTypes.code": "Abréviation",
370
+ "admin.absenceTypes.name": "Libellé",
371
+ "admin.absenceTypes.paid": "Payé",
372
+ "admin.absenceTypes.factor": "Facteur (%)",
373
+ "admin.absenceTypes.reduceVacation": "Réduit les vacances",
374
+ "admin.absenceTypes.active": "Actif",
375
+ "admin.absenceTypes.add": "Ajouter un type",
376
+ "admin.absenceTypes.edit": "Modifier",
377
+ "admin.absenceTypes.editTitle": "Modifier le type",
378
+ "admin.absenceTypes.newTitle": "Nouveau type",
379
+ "admin.absenceTypes.empty": "Aucun type d'absence défini.",
380
+ "admin.absenceTypes.note": "Les absences existantes gardent leur type — un libellé modifié apparaît aussitôt partout."
366
381
  }
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "Salva regole",
363
363
  "admin.automation.edit": "Modifica",
364
364
  "admin.automation.editTitle": "Modifica regola",
365
- "admin.automation.newTitle": "Nuova regola"
365
+ "admin.automation.newTitle": "Nuova regola",
366
+ "absences.vacationTag": "ferie",
367
+ "admin.absenceTypes.title": "Tipi di assenza",
368
+ "admin.absenceTypes.hint": "Codice, denominazione ed effetto delle assenze. «Ferie» contrassegna il tipo che consuma il diritto alle ferie.",
369
+ "admin.absenceTypes.code": "Codice",
370
+ "admin.absenceTypes.name": "Denominazione",
371
+ "admin.absenceTypes.paid": "Pagato",
372
+ "admin.absenceTypes.factor": "Fattore (%)",
373
+ "admin.absenceTypes.reduceVacation": "Riduce le ferie",
374
+ "admin.absenceTypes.active": "Attivo",
375
+ "admin.absenceTypes.add": "Aggiungi tipo",
376
+ "admin.absenceTypes.edit": "Modifica",
377
+ "admin.absenceTypes.editTitle": "Modifica tipo",
378
+ "admin.absenceTypes.newTitle": "Nuovo tipo",
379
+ "admin.absenceTypes.empty": "Nessun tipo di assenza definito.",
380
+ "admin.absenceTypes.note": "Le assenze esistenti mantengono il loro tipo — una denominazione modificata appare subito ovunque."
366
381
  }
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "Regels opslaan",
363
363
  "admin.automation.edit": "Bewerken",
364
364
  "admin.automation.editTitle": "Regel bewerken",
365
- "admin.automation.newTitle": "Nieuwe regel"
365
+ "admin.automation.newTitle": "Nieuwe regel",
366
+ "absences.vacationTag": "vakantie",
367
+ "admin.absenceTypes.title": "Afwezigheidstypes",
368
+ "admin.absenceTypes.hint": "Code, naam en werking van de afwezigheden. “Vakantie” markeert het type dat het vakantietegoed opgebruikt.",
369
+ "admin.absenceTypes.code": "Afkorting",
370
+ "admin.absenceTypes.name": "Naam",
371
+ "admin.absenceTypes.paid": "Betaald",
372
+ "admin.absenceTypes.factor": "Rekenfactor (%)",
373
+ "admin.absenceTypes.reduceVacation": "Verlaagt vakantie",
374
+ "admin.absenceTypes.active": "Actief",
375
+ "admin.absenceTypes.add": "Type toevoegen",
376
+ "admin.absenceTypes.edit": "Bewerken",
377
+ "admin.absenceTypes.editTitle": "Type bewerken",
378
+ "admin.absenceTypes.newTitle": "Nieuw type",
379
+ "admin.absenceTypes.empty": "Nog geen afwezigheidstype.",
380
+ "admin.absenceTypes.note": "Bestaande afwezigheden houden hun type — een gewijzigde naam is direct overal zichtbaar."
366
381
  }
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "Zapisz reguły",
363
363
  "admin.automation.edit": "Edytuj",
364
364
  "admin.automation.editTitle": "Edytuj regułę",
365
- "admin.automation.newTitle": "Nowa reguła"
365
+ "admin.automation.newTitle": "Nowa reguła",
366
+ "absences.vacationTag": "urlop",
367
+ "admin.absenceTypes.title": "Rodzaje nieobecności",
368
+ "admin.absenceTypes.hint": "Kod, nazwa i działanie nieobecności. „Urlop” oznacza rodzaj, który zużywa limit urlopu.",
369
+ "admin.absenceTypes.code": "Kod",
370
+ "admin.absenceTypes.name": "Nazwa",
371
+ "admin.absenceTypes.paid": "Płatne",
372
+ "admin.absenceTypes.factor": "Współczynnik (%)",
373
+ "admin.absenceTypes.reduceVacation": "Zmniejsza urlop",
374
+ "admin.absenceTypes.active": "Aktywne",
375
+ "admin.absenceTypes.add": "Dodaj rodzaj",
376
+ "admin.absenceTypes.edit": "Edytuj",
377
+ "admin.absenceTypes.editTitle": "Edytuj rodzaj",
378
+ "admin.absenceTypes.newTitle": "Nowy rodzaj",
379
+ "admin.absenceTypes.empty": "Nie zdefiniowano rodzajów nieobecności.",
380
+ "admin.absenceTypes.note": "Istniejące nieobecności zachowują swój rodzaj — zmieniona nazwa jest od razu widoczna wszędzie."
366
381
  }
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "Guardar regras",
363
363
  "admin.automation.edit": "Editar",
364
364
  "admin.automation.editTitle": "Editar regra",
365
- "admin.automation.newTitle": "Nova regra"
365
+ "admin.automation.newTitle": "Nova regra",
366
+ "absences.vacationTag": "férias",
367
+ "admin.absenceTypes.title": "Tipos de ausência",
368
+ "admin.absenceTypes.hint": "Código, designação e efeito das ausências. «Férias» marca o tipo que consome o direito a férias.",
369
+ "admin.absenceTypes.code": "Código",
370
+ "admin.absenceTypes.name": "Designação",
371
+ "admin.absenceTypes.paid": "Pago",
372
+ "admin.absenceTypes.factor": "Fator (%)",
373
+ "admin.absenceTypes.reduceVacation": "Reduz as férias",
374
+ "admin.absenceTypes.active": "Ativo",
375
+ "admin.absenceTypes.add": "Adicionar tipo",
376
+ "admin.absenceTypes.edit": "Editar",
377
+ "admin.absenceTypes.editTitle": "Editar tipo",
378
+ "admin.absenceTypes.newTitle": "Novo tipo",
379
+ "admin.absenceTypes.empty": "Nenhum tipo de ausência definido.",
380
+ "admin.absenceTypes.note": "As ausências existentes mantêm o seu tipo — uma designação alterada aparece logo em toda a interface."
366
381
  }
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "Сохранить правила",
363
363
  "admin.automation.edit": "Изменить",
364
364
  "admin.automation.editTitle": "Изменить правило",
365
- "admin.automation.newTitle": "Новое правило"
365
+ "admin.automation.newTitle": "Новое правило",
366
+ "absences.vacationTag": "отпуск",
367
+ "admin.absenceTypes.title": "Виды отсутствия",
368
+ "admin.absenceTypes.hint": "Код, название и действие отсутствий. «Отпуск» отмечает вид, который расходует отпускной лимит.",
369
+ "admin.absenceTypes.code": "Код",
370
+ "admin.absenceTypes.name": "Название",
371
+ "admin.absenceTypes.paid": "Оплачивается",
372
+ "admin.absenceTypes.factor": "Коэффициент (%)",
373
+ "admin.absenceTypes.reduceVacation": "Уменьшает отпуск",
374
+ "admin.absenceTypes.active": "Активно",
375
+ "admin.absenceTypes.add": "Добавить вид",
376
+ "admin.absenceTypes.edit": "Изменить",
377
+ "admin.absenceTypes.editTitle": "Изменить вид",
378
+ "admin.absenceTypes.newTitle": "Новый вид",
379
+ "admin.absenceTypes.empty": "Виды отсутствия не заданы.",
380
+ "admin.absenceTypes.note": "Существующие отсутствия сохраняют свой вид — изменённое название сразу видно везде."
366
381
  }
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "Зберегти правила",
363
363
  "admin.automation.edit": "Змінити",
364
364
  "admin.automation.editTitle": "Змінити правило",
365
- "admin.automation.newTitle": "Нове правило"
365
+ "admin.automation.newTitle": "Нове правило",
366
+ "absences.vacationTag": "відпустка",
367
+ "admin.absenceTypes.title": "Види відсутності",
368
+ "admin.absenceTypes.hint": "Код, назва та дія відсутностей. «Відпустка» позначає вид, що витрачає ліміт відпустки.",
369
+ "admin.absenceTypes.code": "Код",
370
+ "admin.absenceTypes.name": "Назва",
371
+ "admin.absenceTypes.paid": "Оплачується",
372
+ "admin.absenceTypes.factor": "Коефіцієнт (%)",
373
+ "admin.absenceTypes.reduceVacation": "Зменшує відпустку",
374
+ "admin.absenceTypes.active": "Активно",
375
+ "admin.absenceTypes.add": "Додати вид",
376
+ "admin.absenceTypes.edit": "Змінити",
377
+ "admin.absenceTypes.editTitle": "Змінити вид",
378
+ "admin.absenceTypes.newTitle": "Новий вид",
379
+ "admin.absenceTypes.empty": "Види відсутності не задані.",
380
+ "admin.absenceTypes.note": "Наявні відсутності зберігають свій вид — змінена назва одразу видно всюди."
366
381
  }
@@ -362,5 +362,20 @@
362
362
  "admin.automation.save": "保存规则",
363
363
  "admin.automation.edit": "编辑",
364
364
  "admin.automation.editTitle": "编辑规则",
365
- "admin.automation.newTitle": "新规则"
365
+ "admin.automation.newTitle": "新规则",
366
+ "absences.vacationTag": "休假",
367
+ "admin.absenceTypes.title": "缺勤类型",
368
+ "admin.absenceTypes.hint": "缺勤的代号、名称与作用。「休假」标记会消耗休假额度的类型。",
369
+ "admin.absenceTypes.code": "代号",
370
+ "admin.absenceTypes.name": "名称",
371
+ "admin.absenceTypes.paid": "带薪",
372
+ "admin.absenceTypes.factor": "系数(%)",
373
+ "admin.absenceTypes.reduceVacation": "扣减休假",
374
+ "admin.absenceTypes.active": "启用",
375
+ "admin.absenceTypes.add": "添加类型",
376
+ "admin.absenceTypes.edit": "编辑",
377
+ "admin.absenceTypes.editTitle": "编辑类型",
378
+ "admin.absenceTypes.newTitle": "新类型",
379
+ "admin.absenceTypes.empty": "尚未定义缺勤类型。",
380
+ "admin.absenceTypes.note": "已有的缺勤保留其类型 —— 修改后的名称会立即在全界面显示。"
366
381
  }