Просмотр исходного кода

Let workshops set the inspection sync cadence, and count a form lookup as a check (#483)

The inspection sync had one switch and a fixed cadence: monthly, weekly inside
two months of the deadline. Three settings now sit under it on every registry
that keeps inspection dates (Check Car Details, Statens vegvesen, RDW): how
often a vehicle that already has a date is rechecked (monthly, every three
months, or only near the deadline), how many days count as near the deadline
(30, 60 or 90), and whether vehicles without a customer are skipped. The
overview on the integration page counts the next pass under the saved
settings.

A vehicle added from the plate lookup used to save its date as hand-typed,
with no check time, so the hourly sync looked the same plate up again. The
form now sends which connector filled the date, and the date is saved as that
registry's answer, checked now.
Bernt Christian Egeland 1 неделя назад
Родитель
Сommit
e4c9b7e905

+ 39 - 3
messages/de/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "HU-Termine für alle Fahrzeuge dieser Werkstatt aktuell halten",
-        "syncInspectionsHelp": "Einmal pro Stunde werden Fahrzeuge, die länger nicht geprüft wurden, per Kennzeichen abgefragt und der nächste EU-kontroll-Termin gespeichert. Es werden nur Fahrzeuge dieser Werkstatt gesendet. Ein Fahrzeug wird monatlich geprüft, wöchentlich sobald die Frist unter zwei Monaten liegt."
+        "syncInspectionsHelp": "Einmal pro Stunde werden fällige Fahrzeuge per Kennzeichen abgefragt und ihr nächster EU-kontroll-Termin gespeichert; wie oft ein Fahrzeug erneut geprüft wird, legen Sie unten fest. Es werden nur Fahrzeuge dieser Werkstatt gesendet.",
+        "inspectionRecheck": "Fahrzeuge mit Termin erneut prüfen",
+        "inspectionRecheckHelp": "Ein Termin ändert sich nur, wenn eine Prüfung bestanden wird. Monatlich bemerkt eine vorgezogene Prüfung am schnellsten; nur nahe dem Termin kostet am wenigsten. Nahe dem Termin wird jedes Fahrzeug wöchentlich geprüft, unabhängig von dieser Wahl.",
+        "recheckMonthly": "Jeden Monat",
+        "recheckQuarterly": "Alle drei Monate",
+        "recheckNearDeadline": "Nur nahe dem Termin",
+        "inspectionSoonDays": "Nahe dem Termin heißt innerhalb von",
+        "inspectionSoonDaysHelp": "In diesem Zeitfenster wird ein Fahrzeug wöchentlich geprüft, sodass eine bestandene Prüfung es innerhalb von Tagen von der Erinnerungsliste nimmt. Ein kürzeres Fenster bedeutet weniger Abfragen.",
+        "soon30": "30 Tage",
+        "soon60": "60 Tage",
+        "soon90": "90 Tage",
+        "inspectionOnlyWithCustomer": "Nur Fahrzeuge mit Kunde",
+        "inspectionOnlyWithCustomerHelp": "Fahrzeuge ohne hinterlegten Kunden überspringen. Niemand kann an sie erinnert werden, die Abfrage kostet also umsonst."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "MOT-Termine für alle Fahrzeuge dieser Werkstatt aktuell halten",
-        "syncInspectionsHelp": "Ist dies aktiv, wird jedes Fahrzeug der Werkstatt mit Kennzeichen einmal abgefragt und sein MOT-Termin gespeichert. Danach wird jedes Fahrzeug monatlich erneut geprüft, wöchentlich sobald der MOT in weniger als zwei Monaten fällig ist. Jedes gefundene Fahrzeug wird als eine Vehicle-Registration-Abfrage berechnet, daher kostet der erste Durchlauf am meisten; Kennzeichen, die das Register nicht kennt, sind kostenlos. Es werden nur Fahrzeuge dieser Werkstatt gesendet."
+        "syncInspectionsHelp": "Ist dies aktiv, wird jedes Fahrzeug mit Kennzeichen einmal abgefragt und sein MOT-Termin gespeichert. Danach werden Fahrzeuge so erneut geprüft, wie unten festgelegt. Jedes gefundene Fahrzeug wird als eine Vehicle-Registration-Abfrage berechnet; Kennzeichen, die das Register nicht kennt, sind kostenlos. Es werden nur Fahrzeuge dieser Werkstatt gesendet.",
+        "inspectionRecheck": "Fahrzeuge mit Termin erneut prüfen",
+        "inspectionRecheckHelp": "Ein Termin ändert sich nur, wenn eine Prüfung bestanden wird. Monatlich bemerkt eine vorgezogene Prüfung am schnellsten; nur nahe dem Termin kostet am wenigsten. Nahe dem Termin wird jedes Fahrzeug wöchentlich geprüft, unabhängig von dieser Wahl.",
+        "recheckMonthly": "Jeden Monat",
+        "recheckQuarterly": "Alle drei Monate",
+        "recheckNearDeadline": "Nur nahe dem Termin",
+        "inspectionSoonDays": "Nahe dem Termin heißt innerhalb von",
+        "inspectionSoonDaysHelp": "In diesem Zeitfenster wird ein Fahrzeug wöchentlich geprüft, sodass eine bestandene Prüfung es innerhalb von Tagen von der Erinnerungsliste nimmt. Ein kürzeres Fenster bedeutet weniger Abfragen.",
+        "soon30": "30 Tage",
+        "soon60": "60 Tage",
+        "soon90": "90 Tage",
+        "inspectionOnlyWithCustomer": "Nur Fahrzeuge mit Kunde",
+        "inspectionOnlyWithCustomerHelp": "Fahrzeuge ohne hinterlegten Kunden überspringen. Niemand kann an sie erinnert werden, die Abfrage kostet also umsonst."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "APK-Termine für alle Fahrzeuge dieser Werkstatt aktuell halten",
-        "syncInspectionsHelp": "Einmal pro Stunde werden Fahrzeuge, die länger nicht geprüft wurden, per Kennzeichen abgefragt und der nächste APK-Termin gespeichert. Es werden nur Fahrzeuge dieser Werkstatt gesendet. Ein Fahrzeug wird monatlich geprüft, wöchentlich sobald die Frist unter zwei Monaten liegt."
+        "syncInspectionsHelp": "Einmal pro Stunde werden fällige Fahrzeuge per Kennzeichen abgefragt und ihr nächster APK-Termin gespeichert; wie oft ein Fahrzeug erneut geprüft wird, legen Sie unten fest. Es werden nur Fahrzeuge dieser Werkstatt gesendet.",
+        "inspectionRecheck": "Fahrzeuge mit Termin erneut prüfen",
+        "inspectionRecheckHelp": "Ein Termin ändert sich nur, wenn eine Prüfung bestanden wird. Monatlich bemerkt eine vorgezogene Prüfung am schnellsten; nur nahe dem Termin kostet am wenigsten. Nahe dem Termin wird jedes Fahrzeug wöchentlich geprüft, unabhängig von dieser Wahl.",
+        "recheckMonthly": "Jeden Monat",
+        "recheckQuarterly": "Alle drei Monate",
+        "recheckNearDeadline": "Nur nahe dem Termin",
+        "inspectionSoonDays": "Nahe dem Termin heißt innerhalb von",
+        "inspectionSoonDaysHelp": "In diesem Zeitfenster wird ein Fahrzeug wöchentlich geprüft, sodass eine bestandene Prüfung es innerhalb von Tagen von der Erinnerungsliste nimmt. Ein kürzeres Fenster bedeutet weniger Abfragen.",
+        "soon30": "30 Tage",
+        "soon60": "60 Tage",
+        "soon90": "90 Tage",
+        "inspectionOnlyWithCustomer": "Nur Fahrzeuge mit Kunde",
+        "inspectionOnlyWithCustomerHelp": "Fahrzeuge ohne hinterlegten Kunden überspringen. Niemand kann an sie erinnert werden, die Abfrage kostet also umsonst."
       }
     },
     "regcheck": {

+ 39 - 3
messages/en/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Keep inspection dates up to date for every vehicle in this workshop",
-        "syncInspectionsHelp": "Once an hour, vehicles that have not been checked recently are looked up by plate and their next EU-kontroll date is saved. Only vehicles stored in this workshop are ever sent. A vehicle is rechecked monthly, and weekly once its deadline is within two months."
+        "syncInspectionsHelp": "Once an hour, vehicles due a check are looked up by plate and their next EU-kontroll date is saved; how often a vehicle is rechecked is set below. Only vehicles stored in this workshop are ever sent.",
+        "inspectionRecheck": "Recheck vehicles that already have a date",
+        "inspectionRecheckHelp": "A date only changes when an inspection is passed. Monthly notices an early test soonest; only near the deadline costs the least. Near the deadline, every vehicle is rechecked weekly whatever you choose here.",
+        "recheckMonthly": "Every month",
+        "recheckQuarterly": "Every three months",
+        "recheckNearDeadline": "Only near the deadline",
+        "inspectionSoonDays": "Near the deadline means within",
+        "inspectionSoonDaysHelp": "Inside this window a vehicle is rechecked weekly, so a passed inspection drops it off the reminder list within days. A shorter window means fewer lookups.",
+        "soon30": "30 days",
+        "soon60": "60 days",
+        "soon90": "90 days",
+        "inspectionOnlyWithCustomer": "Only vehicles with a customer",
+        "inspectionOnlyWithCustomerHelp": "Skip vehicles with no customer on file. Nobody can be reminded about them, so looking them up costs for nothing."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Keep MOT dates up to date for every vehicle in this workshop",
-        "syncInspectionsHelp": "When this is on, every vehicle in the workshop that has a plate is looked up once, and its MOT due date is saved. After that, each vehicle is checked again monthly, and weekly once its MOT is due within two months. Every vehicle found is billed as one Vehicle Registration lookup, so the first pass costs the most; plates the register does not know are free. Only vehicles stored in this workshop are sent."
+        "syncInspectionsHelp": "When this is on, every vehicle with a plate is looked up once and its MOT due date saved. After that, vehicles are rechecked as set below. Each vehicle found is billed as one Vehicle Registration lookup; plates the register does not know are free. Only vehicles stored in this workshop are sent.",
+        "inspectionRecheck": "Recheck vehicles that already have a date",
+        "inspectionRecheckHelp": "A date only changes when an inspection is passed. Monthly notices an early test soonest; only near the deadline costs the least. Near the deadline, every vehicle is rechecked weekly whatever you choose here.",
+        "recheckMonthly": "Every month",
+        "recheckQuarterly": "Every three months",
+        "recheckNearDeadline": "Only near the deadline",
+        "inspectionSoonDays": "Near the deadline means within",
+        "inspectionSoonDaysHelp": "Inside this window a vehicle is rechecked weekly, so a passed inspection drops it off the reminder list within days. A shorter window means fewer lookups.",
+        "soon30": "30 days",
+        "soon60": "60 days",
+        "soon90": "90 days",
+        "inspectionOnlyWithCustomer": "Only vehicles with a customer",
+        "inspectionOnlyWithCustomerHelp": "Skip vehicles with no customer on file. Nobody can be reminded about them, so looking them up costs for nothing."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Keep APK dates up to date for every vehicle in this workshop",
-        "syncInspectionsHelp": "Once an hour, vehicles that have not been checked recently are looked up by plate and their next APK date is saved. Only vehicles stored in this workshop are ever sent. A vehicle is rechecked monthly, and weekly once its deadline is within two months."
+        "syncInspectionsHelp": "Once an hour, vehicles due a check are looked up by plate and their next APK date is saved; how often a vehicle is rechecked is set below. Only vehicles stored in this workshop are ever sent.",
+        "inspectionRecheck": "Recheck vehicles that already have a date",
+        "inspectionRecheckHelp": "A date only changes when an inspection is passed. Monthly notices an early test soonest; only near the deadline costs the least. Near the deadline, every vehicle is rechecked weekly whatever you choose here.",
+        "recheckMonthly": "Every month",
+        "recheckQuarterly": "Every three months",
+        "recheckNearDeadline": "Only near the deadline",
+        "inspectionSoonDays": "Near the deadline means within",
+        "inspectionSoonDaysHelp": "Inside this window a vehicle is rechecked weekly, so a passed inspection drops it off the reminder list within days. A shorter window means fewer lookups.",
+        "soon30": "30 days",
+        "soon60": "60 days",
+        "soon90": "90 days",
+        "inspectionOnlyWithCustomer": "Only vehicles with a customer",
+        "inspectionOnlyWithCustomerHelp": "Skip vehicles with no customer on file. Nobody can be reminded about them, so looking them up costs for nothing."
       }
     },
     "regcheck": {

+ 39 - 3
messages/es/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Mantener actualizadas las fechas de inspección de todos los vehículos de este taller",
-        "syncInspectionsHelp": "Una vez por hora se consultan por matrícula los vehículos que no se han comprobado hace poco y se guarda la próxima fecha de EU-kontroll. Solo se envían vehículos almacenados en este taller. Un vehículo se revisa cada mes, y cada semana cuando faltan menos de dos meses."
+        "syncInspectionsHelp": "Una vez por hora se consultan por matrícula los vehículos pendientes de comprobar y se guarda su próxima fecha de EU-kontroll; abajo se elige con qué frecuencia se vuelve a comprobar un vehículo. Solo se envían vehículos guardados en este taller.",
+        "inspectionRecheck": "Volver a comprobar vehículos que ya tienen fecha",
+        "inspectionRecheckHelp": "Una fecha solo cambia cuando se pasa una inspección. Mensual detecta antes una inspección adelantada; solo cerca del vencimiento es lo que menos cuesta. Cerca del vencimiento, cada vehículo se comprueba semanalmente, sea cual sea la opción elegida.",
+        "recheckMonthly": "Cada mes",
+        "recheckQuarterly": "Cada tres meses",
+        "recheckNearDeadline": "Solo cerca del vencimiento",
+        "inspectionSoonDays": "Cerca del vencimiento significa dentro de",
+        "inspectionSoonDaysHelp": "Dentro de este plazo un vehículo se comprueba semanalmente, así que una inspección superada lo quita de la lista de recordatorios en días. Un plazo más corto supone menos consultas.",
+        "soon30": "30 días",
+        "soon60": "60 días",
+        "soon90": "90 días",
+        "inspectionOnlyWithCustomer": "Solo vehículos con cliente",
+        "inspectionOnlyWithCustomerHelp": "Omitir vehículos sin cliente registrado. Nadie puede recibir un recordatorio sobre ellos, así que consultarlos cuesta para nada."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Mantener al día las fechas de MOT de todos los vehículos de este taller",
-        "syncInspectionsHelp": "Con esto activado, cada vehículo del taller que tenga matrícula se consulta una vez y se guarda la fecha de su próxima MOT. Después, cada vehículo se vuelve a comprobar cada mes, y cada semana cuando su MOT vence en menos de dos meses. Cada vehículo encontrado se cobra como una consulta de Vehicle Registration, así que la primera pasada es la más cara; las matrículas que el registro no conoce son gratis. Solo se envían vehículos guardados en este taller."
+        "syncInspectionsHelp": "Con esto activado, cada vehículo con matrícula se consulta una vez y se guarda su fecha de MOT. Después, los vehículos se vuelven a comprobar según lo elegido abajo. Cada vehículo encontrado se factura como una consulta Vehicle Registration; las matrículas que el registro no conoce son gratis. Solo se envían vehículos guardados en este taller.",
+        "inspectionRecheck": "Volver a comprobar vehículos que ya tienen fecha",
+        "inspectionRecheckHelp": "Una fecha solo cambia cuando se pasa una inspección. Mensual detecta antes una inspección adelantada; solo cerca del vencimiento es lo que menos cuesta. Cerca del vencimiento, cada vehículo se comprueba semanalmente, sea cual sea la opción elegida.",
+        "recheckMonthly": "Cada mes",
+        "recheckQuarterly": "Cada tres meses",
+        "recheckNearDeadline": "Solo cerca del vencimiento",
+        "inspectionSoonDays": "Cerca del vencimiento significa dentro de",
+        "inspectionSoonDaysHelp": "Dentro de este plazo un vehículo se comprueba semanalmente, así que una inspección superada lo quita de la lista de recordatorios en días. Un plazo más corto supone menos consultas.",
+        "soon30": "30 días",
+        "soon60": "60 días",
+        "soon90": "90 días",
+        "inspectionOnlyWithCustomer": "Solo vehículos con cliente",
+        "inspectionOnlyWithCustomerHelp": "Omitir vehículos sin cliente registrado. Nadie puede recibir un recordatorio sobre ellos, así que consultarlos cuesta para nada."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Mantener actualizadas las fechas de APK de todos los vehículos de este taller",
-        "syncInspectionsHelp": "Una vez por hora se consultan por matrícula los vehículos que no se han comprobado hace poco y se guarda la próxima fecha de APK. Solo se envían vehículos almacenados en este taller. Un vehículo se revisa cada mes, y cada semana cuando faltan menos de dos meses."
+        "syncInspectionsHelp": "Una vez por hora se consultan por matrícula los vehículos pendientes de comprobar y se guarda su próxima fecha de APK; abajo se elige con qué frecuencia se vuelve a comprobar un vehículo. Solo se envían vehículos guardados en este taller.",
+        "inspectionRecheck": "Volver a comprobar vehículos que ya tienen fecha",
+        "inspectionRecheckHelp": "Una fecha solo cambia cuando se pasa una inspección. Mensual detecta antes una inspección adelantada; solo cerca del vencimiento es lo que menos cuesta. Cerca del vencimiento, cada vehículo se comprueba semanalmente, sea cual sea la opción elegida.",
+        "recheckMonthly": "Cada mes",
+        "recheckQuarterly": "Cada tres meses",
+        "recheckNearDeadline": "Solo cerca del vencimiento",
+        "inspectionSoonDays": "Cerca del vencimiento significa dentro de",
+        "inspectionSoonDaysHelp": "Dentro de este plazo un vehículo se comprueba semanalmente, así que una inspección superada lo quita de la lista de recordatorios en días. Un plazo más corto supone menos consultas.",
+        "soon30": "30 días",
+        "soon60": "60 días",
+        "soon90": "90 días",
+        "inspectionOnlyWithCustomer": "Solo vehículos con cliente",
+        "inspectionOnlyWithCustomerHelp": "Omitir vehículos sin cliente registrado. Nadie puede recibir un recordatorio sobre ellos, así que consultarlos cuesta para nada."
       }
     },
     "regcheck": {

+ 39 - 3
messages/fr/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Tenir à jour les dates de contrôle de tous les véhicules de cet atelier",
-        "syncInspectionsHelp": "Une fois par heure, les véhicules non vérifiés récemment sont recherchés par plaque et la date du prochain EU-kontroll est enregistrée. Seuls les véhicules de cet atelier sont envoyés. Un véhicule est revérifié chaque mois, et chaque semaine lorsque l'échéance est à moins de deux mois."
+        "syncInspectionsHelp": "Une fois par heure, les véhicules à vérifier sont recherchés par plaque et leur prochaine date de EU-kontroll est enregistrée ; la fréquence de revérification se règle ci-dessous. Seuls les véhicules enregistrés dans cet atelier sont envoyés.",
+        "inspectionRecheck": "Revérifier les véhicules qui ont déjà une date",
+        "inspectionRecheckHelp": "Une date ne change que lorsqu'un contrôle est passé. Mensuel remarque le plus tôt un contrôle anticipé ; seulement près de l'échéance coûte le moins. Près de l'échéance, chaque véhicule est revérifié chaque semaine, quel que soit ce choix.",
+        "recheckMonthly": "Chaque mois",
+        "recheckQuarterly": "Tous les trois mois",
+        "recheckNearDeadline": "Seulement près de l'échéance",
+        "inspectionSoonDays": "Près de l'échéance signifie à moins de",
+        "inspectionSoonDaysHelp": "Dans cette fenêtre, un véhicule est revérifié chaque semaine, si bien qu'un contrôle réussi le retire de la liste de rappels en quelques jours. Une fenêtre plus courte signifie moins de recherches.",
+        "soon30": "30 jours",
+        "soon60": "60 jours",
+        "soon90": "90 jours",
+        "inspectionOnlyWithCustomer": "Seulement les véhicules avec un client",
+        "inspectionOnlyWithCustomerHelp": "Ignorer les véhicules sans client enregistré. Personne ne peut recevoir de rappel à leur sujet, la recherche coûterait donc pour rien."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Tenir à jour les dates de MOT de tous les véhicules de cet atelier",
-        "syncInspectionsHelp": "Une fois activé, chaque véhicule de l'atelier qui a une plaque est recherché une fois, et la date de son prochain MOT est enregistrée. Ensuite, chaque véhicule est revérifié chaque mois, et chaque semaine lorsque son MOT arrive à échéance dans moins de deux mois. Chaque véhicule trouvé est facturé comme une recherche Vehicle Registration, le premier passage est donc le plus coûteux ; les plaques inconnues du registre sont gratuites. Seuls les véhicules de cet atelier sont envoyés."
+        "syncInspectionsHelp": "Quand c'est activé, chaque véhicule avec une plaque est recherché une fois et sa date de MOT enregistrée. Ensuite, les véhicules sont revérifiés selon le réglage ci-dessous. Chaque véhicule trouvé est facturé comme une recherche Vehicle Registration ; les plaques inconnues du registre sont gratuites. Seuls les véhicules enregistrés dans cet atelier sont envoyés.",
+        "inspectionRecheck": "Revérifier les véhicules qui ont déjà une date",
+        "inspectionRecheckHelp": "Une date ne change que lorsqu'un contrôle est passé. Mensuel remarque le plus tôt un contrôle anticipé ; seulement près de l'échéance coûte le moins. Près de l'échéance, chaque véhicule est revérifié chaque semaine, quel que soit ce choix.",
+        "recheckMonthly": "Chaque mois",
+        "recheckQuarterly": "Tous les trois mois",
+        "recheckNearDeadline": "Seulement près de l'échéance",
+        "inspectionSoonDays": "Près de l'échéance signifie à moins de",
+        "inspectionSoonDaysHelp": "Dans cette fenêtre, un véhicule est revérifié chaque semaine, si bien qu'un contrôle réussi le retire de la liste de rappels en quelques jours. Une fenêtre plus courte signifie moins de recherches.",
+        "soon30": "30 jours",
+        "soon60": "60 jours",
+        "soon90": "90 jours",
+        "inspectionOnlyWithCustomer": "Seulement les véhicules avec un client",
+        "inspectionOnlyWithCustomerHelp": "Ignorer les véhicules sans client enregistré. Personne ne peut recevoir de rappel à leur sujet, la recherche coûterait donc pour rien."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Tenir à jour les dates d'APK de tous les véhicules de cet atelier",
-        "syncInspectionsHelp": "Une fois par heure, les véhicules non vérifiés récemment sont recherchés par plaque et la date du prochain APK est enregistrée. Seuls les véhicules de cet atelier sont envoyés. Un véhicule est revérifié chaque mois, et chaque semaine lorsque l'échéance est à moins de deux mois."
+        "syncInspectionsHelp": "Une fois par heure, les véhicules à vérifier sont recherchés par plaque et leur prochaine date de APK est enregistrée ; la fréquence de revérification se règle ci-dessous. Seuls les véhicules enregistrés dans cet atelier sont envoyés.",
+        "inspectionRecheck": "Revérifier les véhicules qui ont déjà une date",
+        "inspectionRecheckHelp": "Une date ne change que lorsqu'un contrôle est passé. Mensuel remarque le plus tôt un contrôle anticipé ; seulement près de l'échéance coûte le moins. Près de l'échéance, chaque véhicule est revérifié chaque semaine, quel que soit ce choix.",
+        "recheckMonthly": "Chaque mois",
+        "recheckQuarterly": "Tous les trois mois",
+        "recheckNearDeadline": "Seulement près de l'échéance",
+        "inspectionSoonDays": "Près de l'échéance signifie à moins de",
+        "inspectionSoonDaysHelp": "Dans cette fenêtre, un véhicule est revérifié chaque semaine, si bien qu'un contrôle réussi le retire de la liste de rappels en quelques jours. Une fenêtre plus courte signifie moins de recherches.",
+        "soon30": "30 jours",
+        "soon60": "60 jours",
+        "soon90": "90 jours",
+        "inspectionOnlyWithCustomer": "Seulement les véhicules avec un client",
+        "inspectionOnlyWithCustomerHelp": "Ignorer les véhicules sans client enregistré. Personne ne peut recevoir de rappel à leur sujet, la recherche coûterait donc pour rien."
       }
     },
     "regcheck": {

+ 39 - 3
messages/it/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Tieni aggiornate le scadenze di revisione di tutti i veicoli di questa officina",
-        "syncInspectionsHelp": "Una volta all'ora i veicoli non controllati di recente vengono cercati per targa e la data della prossima EU-kontroll viene salvata. Vengono inviati solo i veicoli di questa officina. Un veicolo è ricontrollato ogni mese, e ogni settimana quando la scadenza è a meno di due mesi."
+        "syncInspectionsHelp": "Una volta all'ora i veicoli da controllare vengono cercati per targa e la prossima data di EU-kontroll viene salvata; la frequenza dei ricontrolli si imposta qui sotto. Vengono inviati solo i veicoli salvati in questa officina.",
+        "inspectionRecheck": "Ricontrolla i veicoli che hanno già una data",
+        "inspectionRecheckHelp": "Una data cambia solo quando una revisione viene superata. Mensile nota prima una revisione anticipata; solo vicino alla scadenza costa meno. Vicino alla scadenza ogni veicolo è ricontrollato ogni settimana, qualunque sia la scelta.",
+        "recheckMonthly": "Ogni mese",
+        "recheckQuarterly": "Ogni tre mesi",
+        "recheckNearDeadline": "Solo vicino alla scadenza",
+        "inspectionSoonDays": "Vicino alla scadenza significa entro",
+        "inspectionSoonDaysHelp": "In questa finestra un veicolo è ricontrollato ogni settimana, così una revisione superata lo toglie dalla lista dei promemoria in pochi giorni. Una finestra più corta significa meno ricerche.",
+        "soon30": "30 giorni",
+        "soon60": "60 giorni",
+        "soon90": "90 giorni",
+        "inspectionOnlyWithCustomer": "Solo veicoli con un cliente",
+        "inspectionOnlyWithCustomerHelp": "Salta i veicoli senza cliente registrato. Nessuno può ricevere un promemoria su di loro, quindi cercarli costa per niente."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Mantieni aggiornate le scadenze MOT di tutti i veicoli di questa officina",
-        "syncInspectionsHelp": "Quando è attivo, ogni veicolo dell'officina con una targa viene cercato una volta e viene salvata la scadenza della MOT. Poi ogni veicolo viene ricontrollato ogni mese, e ogni settimana quando la MOT scade entro due mesi. Ogni veicolo trovato è addebitato come una ricerca Vehicle Registration, quindi il primo passaggio è il più costoso; le targhe che il registro non conosce sono gratuite. Vengono inviati solo i veicoli salvati in questa officina."
+        "syncInspectionsHelp": "Quando è attivo, ogni veicolo con targa viene cercato una volta e la sua scadenza MOT salvata. Poi i veicoli vengono ricontrollati come impostato qui sotto. Ogni veicolo trovato è fatturato come una ricerca Vehicle Registration; le targhe sconosciute al registro sono gratuite. Vengono inviati solo i veicoli salvati in questa officina.",
+        "inspectionRecheck": "Ricontrolla i veicoli che hanno già una data",
+        "inspectionRecheckHelp": "Una data cambia solo quando una revisione viene superata. Mensile nota prima una revisione anticipata; solo vicino alla scadenza costa meno. Vicino alla scadenza ogni veicolo è ricontrollato ogni settimana, qualunque sia la scelta.",
+        "recheckMonthly": "Ogni mese",
+        "recheckQuarterly": "Ogni tre mesi",
+        "recheckNearDeadline": "Solo vicino alla scadenza",
+        "inspectionSoonDays": "Vicino alla scadenza significa entro",
+        "inspectionSoonDaysHelp": "In questa finestra un veicolo è ricontrollato ogni settimana, così una revisione superata lo toglie dalla lista dei promemoria in pochi giorni. Una finestra più corta significa meno ricerche.",
+        "soon30": "30 giorni",
+        "soon60": "60 giorni",
+        "soon90": "90 giorni",
+        "inspectionOnlyWithCustomer": "Solo veicoli con un cliente",
+        "inspectionOnlyWithCustomerHelp": "Salta i veicoli senza cliente registrato. Nessuno può ricevere un promemoria su di loro, quindi cercarli costa per niente."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Tieni aggiornate le date APK di tutti i veicoli di questa officina",
-        "syncInspectionsHelp": "Una volta all'ora i veicoli non controllati di recente vengono cercati per targa e la data del prossimo APK viene salvata. Vengono inviati solo i veicoli di questa officina. Un veicolo è ricontrollato ogni mese, e ogni settimana quando la scadenza è a meno di due mesi."
+        "syncInspectionsHelp": "Una volta all'ora i veicoli da controllare vengono cercati per targa e la prossima data di APK viene salvata; la frequenza dei ricontrolli si imposta qui sotto. Vengono inviati solo i veicoli salvati in questa officina.",
+        "inspectionRecheck": "Ricontrolla i veicoli che hanno già una data",
+        "inspectionRecheckHelp": "Una data cambia solo quando una revisione viene superata. Mensile nota prima una revisione anticipata; solo vicino alla scadenza costa meno. Vicino alla scadenza ogni veicolo è ricontrollato ogni settimana, qualunque sia la scelta.",
+        "recheckMonthly": "Ogni mese",
+        "recheckQuarterly": "Ogni tre mesi",
+        "recheckNearDeadline": "Solo vicino alla scadenza",
+        "inspectionSoonDays": "Vicino alla scadenza significa entro",
+        "inspectionSoonDaysHelp": "In questa finestra un veicolo è ricontrollato ogni settimana, così una revisione superata lo toglie dalla lista dei promemoria in pochi giorni. Una finestra più corta significa meno ricerche.",
+        "soon30": "30 giorni",
+        "soon60": "60 giorni",
+        "soon90": "90 giorni",
+        "inspectionOnlyWithCustomer": "Solo veicoli con un cliente",
+        "inspectionOnlyWithCustomerHelp": "Salta i veicoli senza cliente registrato. Nessuno può ricevere un promemoria su di loro, quindi cercarli costa per niente."
       }
     },
     "regcheck": {

+ 39 - 3
messages/lt/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Atnaujinti visų šių dirbtuvių transporto priemonių apžiūros terminus",
-        "syncInspectionsHelp": "Kartą per valandą neseniai netikrintos transporto priemonės ieškomos pagal numerį ir išsaugoma kita EU-kontroll data. Siunčiamos tik šiose dirbtuvėse saugomos transporto priemonės. Tikrinama kas mėnesį, o kai iki termino lieka mažiau nei du mėnesiai, kas savaitę."
+        "syncInspectionsHelp": "Kartą per valandą tikrintinos transporto priemonės ieškomos pagal numerį ir išsaugoma kita EU-kontroll data; kaip dažnai transporto priemonė tikrinama iš naujo, nustatoma žemiau. Siunčiamos tik šiose dirbtuvėse saugomos transporto priemonės.",
+        "inspectionRecheck": "Iš naujo tikrinti transporto priemones, kurios jau turi datą",
+        "inspectionRecheckHelp": "Data keičiasi tik tada, kai apžiūra praeinama. Kas mėnesį greičiausiai pastebi anksčiau atliktą apžiūrą; tik artėjant terminui kainuoja mažiausiai. Artėjant terminui kiekviena transporto priemonė tikrinama kas savaitę, nepriklausomai nuo šio pasirinkimo.",
+        "recheckMonthly": "Kas mėnesį",
+        "recheckQuarterly": "Kas tris mėnesius",
+        "recheckNearDeadline": "Tik artėjant terminui",
+        "inspectionSoonDays": "Artėjant terminui reiškia per",
+        "inspectionSoonDaysHelp": "Šiame lange transporto priemonė tikrinama kas savaitę, todėl praeita apžiūra per kelias dienas pašalina ją iš priminimų sąrašo. Trumpesnis langas reiškia mažiau užklausų.",
+        "soon30": "30 dienų",
+        "soon60": "60 dienų",
+        "soon90": "90 dienų",
+        "inspectionOnlyWithCustomer": "Tik transporto priemonės su klientu",
+        "inspectionOnlyWithCustomerHelp": "Praleisti transporto priemones be įrašyto kliento. Niekam negalima apie jas priminti, todėl jų paieška kainuoja be reikalo."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Atnaujinti MOT datas visoms šių dirbtuvių transporto priemonėms",
-        "syncInspectionsHelp": "Kai tai įjungta, kiekviena dirbtuvių transporto priemonė su numeriu patikrinama vieną kartą ir išsaugoma jos MOT termino data. Vėliau kiekviena transporto priemonė tikrinama kas mėnesį, o kai MOT terminas arčiau nei du mėnesiai, kas savaitę. Kiekviena rasta transporto priemonė apmokestinama kaip viena Vehicle Registration paieška, todėl pirmas perėjimas kainuoja daugiausia; registrui nežinomi numeriai nemokami. Siunčiamos tik šiose dirbtuvėse saugomos transporto priemonės."
+        "syncInspectionsHelp": "Kai tai įjungta, kiekviena transporto priemonė su numeriu ieškoma vieną kartą ir išsaugoma jos MOT data. Vėliau transporto priemonės tikrinamos iš naujo taip, kaip nustatyta žemiau. Už kiekvieną rastą transporto priemonę mokama kaip už vieną Vehicle Registration užklausą; registrui nežinomi numeriai nemokami. Siunčiamos tik šiose dirbtuvėse saugomos transporto priemonės.",
+        "inspectionRecheck": "Iš naujo tikrinti transporto priemones, kurios jau turi datą",
+        "inspectionRecheckHelp": "Data keičiasi tik tada, kai apžiūra praeinama. Kas mėnesį greičiausiai pastebi anksčiau atliktą apžiūrą; tik artėjant terminui kainuoja mažiausiai. Artėjant terminui kiekviena transporto priemonė tikrinama kas savaitę, nepriklausomai nuo šio pasirinkimo.",
+        "recheckMonthly": "Kas mėnesį",
+        "recheckQuarterly": "Kas tris mėnesius",
+        "recheckNearDeadline": "Tik artėjant terminui",
+        "inspectionSoonDays": "Artėjant terminui reiškia per",
+        "inspectionSoonDaysHelp": "Šiame lange transporto priemonė tikrinama kas savaitę, todėl praeita apžiūra per kelias dienas pašalina ją iš priminimų sąrašo. Trumpesnis langas reiškia mažiau užklausų.",
+        "soon30": "30 dienų",
+        "soon60": "60 dienų",
+        "soon90": "90 dienų",
+        "inspectionOnlyWithCustomer": "Tik transporto priemonės su klientu",
+        "inspectionOnlyWithCustomerHelp": "Praleisti transporto priemones be įrašyto kliento. Niekam negalima apie jas priminti, todėl jų paieška kainuoja be reikalo."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Atnaujinti visų šių dirbtuvių transporto priemonių APK datas",
-        "syncInspectionsHelp": "Kartą per valandą neseniai netikrintos transporto priemonės ieškomos pagal numerį ir išsaugoma kita APK data. Siunčiamos tik šiose dirbtuvėse saugomos transporto priemonės. Tikrinama kas mėnesį, o kai iki termino lieka mažiau nei du mėnesiai, kas savaitę."
+        "syncInspectionsHelp": "Kartą per valandą tikrintinos transporto priemonės ieškomos pagal numerį ir išsaugoma kita APK data; kaip dažnai transporto priemonė tikrinama iš naujo, nustatoma žemiau. Siunčiamos tik šiose dirbtuvėse saugomos transporto priemonės.",
+        "inspectionRecheck": "Iš naujo tikrinti transporto priemones, kurios jau turi datą",
+        "inspectionRecheckHelp": "Data keičiasi tik tada, kai apžiūra praeinama. Kas mėnesį greičiausiai pastebi anksčiau atliktą apžiūrą; tik artėjant terminui kainuoja mažiausiai. Artėjant terminui kiekviena transporto priemonė tikrinama kas savaitę, nepriklausomai nuo šio pasirinkimo.",
+        "recheckMonthly": "Kas mėnesį",
+        "recheckQuarterly": "Kas tris mėnesius",
+        "recheckNearDeadline": "Tik artėjant terminui",
+        "inspectionSoonDays": "Artėjant terminui reiškia per",
+        "inspectionSoonDaysHelp": "Šiame lange transporto priemonė tikrinama kas savaitę, todėl praeita apžiūra per kelias dienas pašalina ją iš priminimų sąrašo. Trumpesnis langas reiškia mažiau užklausų.",
+        "soon30": "30 dienų",
+        "soon60": "60 dienų",
+        "soon90": "90 dienų",
+        "inspectionOnlyWithCustomer": "Tik transporto priemonės su klientu",
+        "inspectionOnlyWithCustomerHelp": "Praleisti transporto priemones be įrašyto kliento. Niekam negalima apie jas priminti, todėl jų paieška kainuoja be reikalo."
       }
     },
     "regcheck": {

+ 39 - 3
messages/nb/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Hold EU-kontrollfristen oppdatert for alle kjøretøy i dette verkstedet",
-        "syncInspectionsHelp": "Én gang i timen slås kjøretøy som ikke er sjekket nylig opp på skilt, og fristen for neste EU-kontroll lagres. Bare kjøretøy lagret i dette verkstedet sendes. Et kjøretøy sjekkes månedlig, og ukentlig når fristen er under to måneder unna."
+        "syncInspectionsHelp": "Én gang i timen slås kjøretøy som skal sjekkes opp på skiltnummer, og neste EU-kontroll-frist lagres; hvor ofte et kjøretøy sjekkes på nytt, velger du under. Bare kjøretøy lagret i dette verkstedet sendes.",
+        "inspectionRecheck": "Sjekk kjøretøy som allerede har en frist på nytt",
+        "inspectionRecheckHelp": "En frist endres bare når en kontroll er godkjent. Månedlig fanger opp en tidlig kontroll raskest; bare nær fristen koster minst. Nær fristen sjekkes hvert kjøretøy ukentlig, uansett hva du velger her.",
+        "recheckMonthly": "Hver måned",
+        "recheckQuarterly": "Hver tredje måned",
+        "recheckNearDeadline": "Bare nær fristen",
+        "inspectionSoonDays": "Nær fristen betyr innen",
+        "inspectionSoonDaysHelp": "Innenfor dette vinduet sjekkes et kjøretøy ukentlig, så en godkjent kontroll tar det ut av purrelisten innen få dager. Et kortere vindu gir færre oppslag.",
+        "soon30": "30 dager",
+        "soon60": "60 dager",
+        "soon90": "90 dager",
+        "inspectionOnlyWithCustomer": "Bare kjøretøy med kunde",
+        "inspectionOnlyWithCustomerHelp": "Hopp over kjøretøy uten registrert kunde. Ingen kan purres på dem, så oppslaget koster til ingen nytte."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Hold MOT-fristen oppdatert for alle kjøretøy i dette verkstedet",
-        "syncInspectionsHelp": "Når dette er på, slås hvert kjøretøy i verkstedet som har skilt opp én gang, og MOT-fristen lagres. Etter det sjekkes hvert kjøretøy på nytt hver måned, og hver uke når MOT-fristen er under to måneder unna. Hvert kjøretøy som blir funnet faktureres som ett Vehicle Registration-oppslag, så første gjennomgang koster mest; skilt registeret ikke kjenner er gratis. Bare kjøretøy lagret i dette verkstedet sendes."
+        "syncInspectionsHelp": "Når dette er på, slås hvert kjøretøy med skiltnummer opp én gang, og MOT-fristen lagres. Deretter sjekkes kjøretøy på nytt slik det er valgt under. Hvert kjøretøy som blir funnet, faktureres som ett Vehicle Registration-oppslag; skilt registeret ikke kjenner, er gratis. Bare kjøretøy lagret i dette verkstedet sendes.",
+        "inspectionRecheck": "Sjekk kjøretøy som allerede har en frist på nytt",
+        "inspectionRecheckHelp": "En frist endres bare når en kontroll er godkjent. Månedlig fanger opp en tidlig kontroll raskest; bare nær fristen koster minst. Nær fristen sjekkes hvert kjøretøy ukentlig, uansett hva du velger her.",
+        "recheckMonthly": "Hver måned",
+        "recheckQuarterly": "Hver tredje måned",
+        "recheckNearDeadline": "Bare nær fristen",
+        "inspectionSoonDays": "Nær fristen betyr innen",
+        "inspectionSoonDaysHelp": "Innenfor dette vinduet sjekkes et kjøretøy ukentlig, så en godkjent kontroll tar det ut av purrelisten innen få dager. Et kortere vindu gir færre oppslag.",
+        "soon30": "30 dager",
+        "soon60": "60 dager",
+        "soon90": "90 dager",
+        "inspectionOnlyWithCustomer": "Bare kjøretøy med kunde",
+        "inspectionOnlyWithCustomerHelp": "Hopp over kjøretøy uten registrert kunde. Ingen kan purres på dem, så oppslaget koster til ingen nytte."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Hold APK-fristen oppdatert for alle kjøretøy i dette verkstedet",
-        "syncInspectionsHelp": "Én gang i timen slås kjøretøy som ikke er sjekket nylig opp på skilt, og fristen for neste APK lagres. Bare kjøretøy lagret i dette verkstedet sendes. Et kjøretøy sjekkes månedlig, og ukentlig når fristen er under to måneder unna."
+        "syncInspectionsHelp": "Én gang i timen slås kjøretøy som skal sjekkes opp på skiltnummer, og neste APK-frist lagres; hvor ofte et kjøretøy sjekkes på nytt, velger du under. Bare kjøretøy lagret i dette verkstedet sendes.",
+        "inspectionRecheck": "Sjekk kjøretøy som allerede har en frist på nytt",
+        "inspectionRecheckHelp": "En frist endres bare når en kontroll er godkjent. Månedlig fanger opp en tidlig kontroll raskest; bare nær fristen koster minst. Nær fristen sjekkes hvert kjøretøy ukentlig, uansett hva du velger her.",
+        "recheckMonthly": "Hver måned",
+        "recheckQuarterly": "Hver tredje måned",
+        "recheckNearDeadline": "Bare nær fristen",
+        "inspectionSoonDays": "Nær fristen betyr innen",
+        "inspectionSoonDaysHelp": "Innenfor dette vinduet sjekkes et kjøretøy ukentlig, så en godkjent kontroll tar det ut av purrelisten innen få dager. Et kortere vindu gir færre oppslag.",
+        "soon30": "30 dager",
+        "soon60": "60 dager",
+        "soon90": "90 dager",
+        "inspectionOnlyWithCustomer": "Bare kjøretøy med kunde",
+        "inspectionOnlyWithCustomerHelp": "Hopp over kjøretøy uten registrert kunde. Ingen kan purres på dem, så oppslaget koster til ingen nytte."
       }
     },
     "regcheck": {

+ 39 - 3
messages/nl/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Keuringsdatums van alle voertuigen in deze werkplaats bijhouden",
-        "syncInspectionsHelp": "Eén keer per uur worden voertuigen die niet recent zijn gecontroleerd op kenteken opgezocht en wordt de volgende EU-kontroll-datum opgeslagen. Alleen voertuigen van deze werkplaats worden verstuurd. Een voertuig wordt maandelijks gecontroleerd, en wekelijks zodra de datum binnen twee maanden valt."
+        "syncInspectionsHelp": "Eens per uur worden voertuigen die aan een controle toe zijn op kenteken opgezocht en wordt de volgende EU-kontroll-datum opgeslagen; hoe vaak een voertuig opnieuw wordt gecontroleerd, stelt u hieronder in. Alleen voertuigen die in deze werkplaats zijn opgeslagen worden verzonden.",
+        "inspectionRecheck": "Voertuigen die al een datum hebben opnieuw controleren",
+        "inspectionRecheckHelp": "Een datum verandert alleen als een keuring is gehaald. Maandelijks merkt een vervroegde keuring het snelst; alleen vlak voor de vervaldatum kost het minst. Vlak voor de vervaldatum wordt elk voertuig wekelijks gecontroleerd, wat u hier ook kiest.",
+        "recheckMonthly": "Elke maand",
+        "recheckQuarterly": "Elke drie maanden",
+        "recheckNearDeadline": "Alleen vlak voor de vervaldatum",
+        "inspectionSoonDays": "Vlak voor de vervaldatum betekent binnen",
+        "inspectionSoonDaysHelp": "Binnen dit venster wordt een voertuig wekelijks gecontroleerd, zodat een gehaalde keuring het binnen dagen van de herinneringslijst haalt. Een korter venster betekent minder opzoekingen.",
+        "soon30": "30 dagen",
+        "soon60": "60 dagen",
+        "soon90": "90 dagen",
+        "inspectionOnlyWithCustomer": "Alleen voertuigen met een klant",
+        "inspectionOnlyWithCustomerHelp": "Sla voertuigen zonder vastgelegde klant over. Niemand kan eraan herinnerd worden, dus opzoeken kost voor niets."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "MOT-datums van alle voertuigen in deze werkplaats actueel houden",
-        "syncInspectionsHelp": "Staat dit aan, dan wordt elk voertuig in de werkplaats met een kenteken één keer opgezocht en wordt de MOT-vervaldatum opgeslagen. Daarna wordt elk voertuig maandelijks opnieuw gecontroleerd, en wekelijks zodra de MOT binnen twee maanden vervalt. Elk gevonden voertuig wordt gefactureerd als één Vehicle Registration-opzoeking, dus de eerste ronde kost het meest; kentekens die het register niet kent zijn gratis. Alleen voertuigen die in deze werkplaats zijn opgeslagen worden verstuurd."
+        "syncInspectionsHelp": "Als dit aanstaat, wordt elk voertuig met een kenteken één keer opgezocht en wordt de MOT-datum opgeslagen. Daarna worden voertuigen opnieuw gecontroleerd zoals hieronder ingesteld. Elk gevonden voertuig wordt gefactureerd als één Vehicle Registration-opzoeking; kentekens die het register niet kent zijn gratis. Alleen voertuigen die in deze werkplaats zijn opgeslagen worden verzonden.",
+        "inspectionRecheck": "Voertuigen die al een datum hebben opnieuw controleren",
+        "inspectionRecheckHelp": "Een datum verandert alleen als een keuring is gehaald. Maandelijks merkt een vervroegde keuring het snelst; alleen vlak voor de vervaldatum kost het minst. Vlak voor de vervaldatum wordt elk voertuig wekelijks gecontroleerd, wat u hier ook kiest.",
+        "recheckMonthly": "Elke maand",
+        "recheckQuarterly": "Elke drie maanden",
+        "recheckNearDeadline": "Alleen vlak voor de vervaldatum",
+        "inspectionSoonDays": "Vlak voor de vervaldatum betekent binnen",
+        "inspectionSoonDaysHelp": "Binnen dit venster wordt een voertuig wekelijks gecontroleerd, zodat een gehaalde keuring het binnen dagen van de herinneringslijst haalt. Een korter venster betekent minder opzoekingen.",
+        "soon30": "30 dagen",
+        "soon60": "60 dagen",
+        "soon90": "90 dagen",
+        "inspectionOnlyWithCustomer": "Alleen voertuigen met een klant",
+        "inspectionOnlyWithCustomerHelp": "Sla voertuigen zonder vastgelegde klant over. Niemand kan eraan herinnerd worden, dus opzoeken kost voor niets."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "APK-vervaldatums van alle voertuigen in deze werkplaats bijhouden",
-        "syncInspectionsHelp": "Eén keer per uur worden voertuigen die niet recent zijn gecontroleerd op kenteken opgezocht en wordt de volgende APK-vervaldatum opgeslagen. Alleen voertuigen van deze werkplaats worden verstuurd. Een voertuig wordt maandelijks gecontroleerd, en wekelijks zodra de datum binnen twee maanden valt."
+        "syncInspectionsHelp": "Eens per uur worden voertuigen die aan een controle toe zijn op kenteken opgezocht en wordt de volgende APK-datum opgeslagen; hoe vaak een voertuig opnieuw wordt gecontroleerd, stelt u hieronder in. Alleen voertuigen die in deze werkplaats zijn opgeslagen worden verzonden.",
+        "inspectionRecheck": "Voertuigen die al een datum hebben opnieuw controleren",
+        "inspectionRecheckHelp": "Een datum verandert alleen als een keuring is gehaald. Maandelijks merkt een vervroegde keuring het snelst; alleen vlak voor de vervaldatum kost het minst. Vlak voor de vervaldatum wordt elk voertuig wekelijks gecontroleerd, wat u hier ook kiest.",
+        "recheckMonthly": "Elke maand",
+        "recheckQuarterly": "Elke drie maanden",
+        "recheckNearDeadline": "Alleen vlak voor de vervaldatum",
+        "inspectionSoonDays": "Vlak voor de vervaldatum betekent binnen",
+        "inspectionSoonDaysHelp": "Binnen dit venster wordt een voertuig wekelijks gecontroleerd, zodat een gehaalde keuring het binnen dagen van de herinneringslijst haalt. Een korter venster betekent minder opzoekingen.",
+        "soon30": "30 dagen",
+        "soon60": "60 dagen",
+        "soon90": "90 dagen",
+        "inspectionOnlyWithCustomer": "Alleen voertuigen met een klant",
+        "inspectionOnlyWithCustomerHelp": "Sla voertuigen zonder vastgelegde klant over. Niemand kan eraan herinnerd worden, dus opzoeken kost voor niets."
       }
     },
     "regcheck": {

+ 39 - 3
messages/pl/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Aktualizuj terminy przeglądów wszystkich pojazdów w tym warsztacie",
-        "syncInspectionsHelp": "Raz na godzinę pojazdy, które nie były ostatnio sprawdzane, są wyszukiwane po tablicy, a termin następnego EU-kontroll jest zapisywany. Wysyłane są tylko pojazdy tego warsztatu. Pojazd jest sprawdzany co miesiąc, a co tydzień, gdy do terminu zostały mniej niż dwa miesiące."
+        "syncInspectionsHelp": "Raz na godzinę pojazdy wymagające sprawdzenia są wyszukiwane po numerze rejestracyjnym i zapisywany jest następny termin EU-kontroll; jak często pojazd jest sprawdzany ponownie, ustawia się poniżej. Wysyłane są tylko pojazdy zapisane w tym warsztacie.",
+        "inspectionRecheck": "Ponownie sprawdzaj pojazdy, które już mają termin",
+        "inspectionRecheckHelp": "Termin zmienia się tylko po zaliczonym przeglądzie. Co miesiąc najszybciej zauważa wcześniejszy przegląd; tylko blisko terminu kosztuje najmniej. Blisko terminu każdy pojazd jest sprawdzany co tydzień, niezależnie od tego wyboru.",
+        "recheckMonthly": "Co miesiąc",
+        "recheckQuarterly": "Co trzy miesiące",
+        "recheckNearDeadline": "Tylko blisko terminu",
+        "inspectionSoonDays": "Blisko terminu oznacza w ciągu",
+        "inspectionSoonDaysHelp": "W tym oknie pojazd jest sprawdzany co tydzień, więc zaliczony przegląd usuwa go z listy przypomnień w ciągu kilku dni. Krótsze okno oznacza mniej zapytań.",
+        "soon30": "30 dni",
+        "soon60": "60 dni",
+        "soon90": "90 dni",
+        "inspectionOnlyWithCustomer": "Tylko pojazdy z klientem",
+        "inspectionOnlyWithCustomerHelp": "Pomijaj pojazdy bez przypisanego klienta. Nikomu nie można o nich przypomnieć, więc ich wyszukiwanie kosztuje na nic."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Aktualizuj terminy MOT wszystkich pojazdów w tym warsztacie",
-        "syncInspectionsHelp": "Gdy to jest włączone, każdy pojazd w warsztacie z tablicą rejestracyjną jest raz wyszukiwany i zapisywany jest jego termin MOT. Potem każdy pojazd jest sprawdzany co miesiąc, a co tydzień, gdy MOT upływa za mniej niż dwa miesiące. Każdy znaleziony pojazd jest rozliczany jako jedno wyszukanie Vehicle Registration, więc pierwszy przebieg kosztuje najwięcej; tablice nieznane rejestrowi są bezpłatne. Wysyłane są tylko pojazdy zapisane w tym warsztacie."
+        "syncInspectionsHelp": "Gdy to jest włączone, każdy pojazd z numerem rejestracyjnym jest wyszukiwany raz i zapisywany jest jego termin MOT. Potem pojazdy są sprawdzane ponownie zgodnie z ustawieniem poniżej. Każdy znaleziony pojazd jest rozliczany jako jedno zapytanie Vehicle Registration; numery nieznane rejestrowi są bezpłatne. Wysyłane są tylko pojazdy zapisane w tym warsztacie.",
+        "inspectionRecheck": "Ponownie sprawdzaj pojazdy, które już mają termin",
+        "inspectionRecheckHelp": "Termin zmienia się tylko po zaliczonym przeglądzie. Co miesiąc najszybciej zauważa wcześniejszy przegląd; tylko blisko terminu kosztuje najmniej. Blisko terminu każdy pojazd jest sprawdzany co tydzień, niezależnie od tego wyboru.",
+        "recheckMonthly": "Co miesiąc",
+        "recheckQuarterly": "Co trzy miesiące",
+        "recheckNearDeadline": "Tylko blisko terminu",
+        "inspectionSoonDays": "Blisko terminu oznacza w ciągu",
+        "inspectionSoonDaysHelp": "W tym oknie pojazd jest sprawdzany co tydzień, więc zaliczony przegląd usuwa go z listy przypomnień w ciągu kilku dni. Krótsze okno oznacza mniej zapytań.",
+        "soon30": "30 dni",
+        "soon60": "60 dni",
+        "soon90": "90 dni",
+        "inspectionOnlyWithCustomer": "Tylko pojazdy z klientem",
+        "inspectionOnlyWithCustomerHelp": "Pomijaj pojazdy bez przypisanego klienta. Nikomu nie można o nich przypomnieć, więc ich wyszukiwanie kosztuje na nic."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Aktualizuj terminy APK wszystkich pojazdów w tym warsztacie",
-        "syncInspectionsHelp": "Raz na godzinę pojazdy, które nie były ostatnio sprawdzane, są wyszukiwane po tablicy, a termin następnego APK jest zapisywany. Wysyłane są tylko pojazdy tego warsztatu. Pojazd jest sprawdzany co miesiąc, a co tydzień, gdy do terminu zostały mniej niż dwa miesiące."
+        "syncInspectionsHelp": "Raz na godzinę pojazdy wymagające sprawdzenia są wyszukiwane po numerze rejestracyjnym i zapisywany jest następny termin APK; jak często pojazd jest sprawdzany ponownie, ustawia się poniżej. Wysyłane są tylko pojazdy zapisane w tym warsztacie.",
+        "inspectionRecheck": "Ponownie sprawdzaj pojazdy, które już mają termin",
+        "inspectionRecheckHelp": "Termin zmienia się tylko po zaliczonym przeglądzie. Co miesiąc najszybciej zauważa wcześniejszy przegląd; tylko blisko terminu kosztuje najmniej. Blisko terminu każdy pojazd jest sprawdzany co tydzień, niezależnie od tego wyboru.",
+        "recheckMonthly": "Co miesiąc",
+        "recheckQuarterly": "Co trzy miesiące",
+        "recheckNearDeadline": "Tylko blisko terminu",
+        "inspectionSoonDays": "Blisko terminu oznacza w ciągu",
+        "inspectionSoonDaysHelp": "W tym oknie pojazd jest sprawdzany co tydzień, więc zaliczony przegląd usuwa go z listy przypomnień w ciągu kilku dni. Krótsze okno oznacza mniej zapytań.",
+        "soon30": "30 dni",
+        "soon60": "60 dni",
+        "soon90": "90 dni",
+        "inspectionOnlyWithCustomer": "Tylko pojazdy z klientem",
+        "inspectionOnlyWithCustomerHelp": "Pomijaj pojazdy bez przypisanego klienta. Nikomu nie można o nich przypomnieć, więc ich wyszukiwanie kosztuje na nic."
       }
     },
     "regcheck": {

+ 39 - 3
messages/pt-BR/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Manter as datas de inspeção de todos os veículos desta oficina atualizadas",
-        "syncInspectionsHelp": "Uma vez por hora, veículos não verificados recentemente são consultados pela placa e a próxima data de EU-kontroll é salva. Só veículos desta oficina são enviados. Um veículo é verificado mensalmente, e semanalmente quando o prazo está a menos de dois meses."
+        "syncInspectionsHelp": "Uma vez por hora, os veículos a verificar são consultados pela placa e a próxima data de EU-kontroll é salva; com que frequência um veículo é verificado de novo se define abaixo. Só veículos salvos nesta oficina são enviados.",
+        "inspectionRecheck": "Verificar de novo veículos que já têm data",
+        "inspectionRecheckHelp": "Uma data só muda quando uma inspeção é aprovada. Mensal percebe uma inspeção antecipada mais cedo; só perto do vencimento custa menos. Perto do vencimento, cada veículo é verificado semanalmente, seja qual for a escolha aqui.",
+        "recheckMonthly": "Todo mês",
+        "recheckQuarterly": "A cada três meses",
+        "recheckNearDeadline": "Só perto do vencimento",
+        "inspectionSoonDays": "Perto do vencimento significa dentro de",
+        "inspectionSoonDaysHelp": "Nesta janela um veículo é verificado semanalmente, então uma inspeção aprovada o tira da lista de lembretes em dias. Uma janela mais curta significa menos consultas.",
+        "soon30": "30 dias",
+        "soon60": "60 dias",
+        "soon90": "90 dias",
+        "inspectionOnlyWithCustomer": "Só veículos com cliente",
+        "inspectionOnlyWithCustomerHelp": "Pular veículos sem cliente cadastrado. Ninguém pode ser lembrado sobre eles, então consultá-los custa à toa."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Manter as datas de MOT atualizadas para todos os veículos desta oficina",
-        "syncInspectionsHelp": "Com isto ativado, cada veículo da oficina que tem placa é consultado uma vez e o vencimento do MOT é salvo. Depois, cada veículo é verificado de novo todo mês, e toda semana quando o MOT vence em menos de dois meses. Cada veículo encontrado é cobrado como uma consulta Vehicle Registration, então a primeira passagem é a mais cara; placas que o registro não conhece são grátis. Só são enviados veículos salvos nesta oficina."
+        "syncInspectionsHelp": "Com isto ativado, cada veículo com placa é consultado uma vez e a data do MOT é salva. Depois, os veículos são verificados de novo conforme definido abaixo. Cada veículo encontrado é cobrado como uma consulta Vehicle Registration; placas que o registro não conhece são gratuitas. Só veículos salvos nesta oficina são enviados.",
+        "inspectionRecheck": "Verificar de novo veículos que já têm data",
+        "inspectionRecheckHelp": "Uma data só muda quando uma inspeção é aprovada. Mensal percebe uma inspeção antecipada mais cedo; só perto do vencimento custa menos. Perto do vencimento, cada veículo é verificado semanalmente, seja qual for a escolha aqui.",
+        "recheckMonthly": "Todo mês",
+        "recheckQuarterly": "A cada três meses",
+        "recheckNearDeadline": "Só perto do vencimento",
+        "inspectionSoonDays": "Perto do vencimento significa dentro de",
+        "inspectionSoonDaysHelp": "Nesta janela um veículo é verificado semanalmente, então uma inspeção aprovada o tira da lista de lembretes em dias. Uma janela mais curta significa menos consultas.",
+        "soon30": "30 dias",
+        "soon60": "60 dias",
+        "soon90": "90 dias",
+        "inspectionOnlyWithCustomer": "Só veículos com cliente",
+        "inspectionOnlyWithCustomerHelp": "Pular veículos sem cliente cadastrado. Ninguém pode ser lembrado sobre eles, então consultá-los custa à toa."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Manter as datas de APK de todos os veículos desta oficina atualizadas",
-        "syncInspectionsHelp": "Uma vez por hora, veículos não verificados recentemente são consultados pela placa e a próxima data de APK é salva. Só veículos desta oficina são enviados. Um veículo é verificado mensalmente, e semanalmente quando o prazo está a menos de dois meses."
+        "syncInspectionsHelp": "Uma vez por hora, os veículos a verificar são consultados pela placa e a próxima data de APK é salva; com que frequência um veículo é verificado de novo se define abaixo. Só veículos salvos nesta oficina são enviados.",
+        "inspectionRecheck": "Verificar de novo veículos que já têm data",
+        "inspectionRecheckHelp": "Uma data só muda quando uma inspeção é aprovada. Mensal percebe uma inspeção antecipada mais cedo; só perto do vencimento custa menos. Perto do vencimento, cada veículo é verificado semanalmente, seja qual for a escolha aqui.",
+        "recheckMonthly": "Todo mês",
+        "recheckQuarterly": "A cada três meses",
+        "recheckNearDeadline": "Só perto do vencimento",
+        "inspectionSoonDays": "Perto do vencimento significa dentro de",
+        "inspectionSoonDaysHelp": "Nesta janela um veículo é verificado semanalmente, então uma inspeção aprovada o tira da lista de lembretes em dias. Uma janela mais curta significa menos consultas.",
+        "soon30": "30 dias",
+        "soon60": "60 dias",
+        "soon90": "90 dias",
+        "inspectionOnlyWithCustomer": "Só veículos com cliente",
+        "inspectionOnlyWithCustomerHelp": "Pular veículos sem cliente cadastrado. Ninguém pode ser lembrado sobre eles, então consultá-los custa à toa."
       }
     },
     "regcheck": {

+ 39 - 3
messages/pt-PT/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Manter atualizadas as datas de inspeção de todas as viaturas desta oficina",
-        "syncInspectionsHelp": "Uma vez por hora, as viaturas que não foram verificadas recentemente são consultadas pela matrícula e a data do próximo EU-kontroll é guardada. Só são enviadas viaturas desta oficina. Cada viatura é verificada mensalmente, e semanalmente quando faltam menos de dois meses para o prazo."
+        "syncInspectionsHelp": "Uma vez por hora, os veículos a verificar são consultados pela matrícula e a próxima data de EU-kontroll é guardada; com que frequência um veículo é verificado de novo define-se abaixo. Só veículos guardados nesta oficina são enviados.",
+        "inspectionRecheck": "Verificar de novo veículos que já têm data",
+        "inspectionRecheckHelp": "Uma data só muda quando uma inspeção é aprovada. Mensal repara numa inspeção antecipada mais cedo; só perto do prazo custa menos. Perto do prazo, cada veículo é verificado semanalmente, seja qual for a escolha aqui.",
+        "recheckMonthly": "Todos os meses",
+        "recheckQuarterly": "A cada três meses",
+        "recheckNearDeadline": "Só perto do prazo",
+        "inspectionSoonDays": "Perto do prazo significa dentro de",
+        "inspectionSoonDaysHelp": "Nesta janela um veículo é verificado semanalmente, pelo que uma inspeção aprovada o tira da lista de lembretes em dias. Uma janela mais curta significa menos consultas.",
+        "soon30": "30 dias",
+        "soon60": "60 dias",
+        "soon90": "90 dias",
+        "inspectionOnlyWithCustomer": "Só veículos com cliente",
+        "inspectionOnlyWithCustomerHelp": "Saltar veículos sem cliente registado. Ninguém pode ser lembrado sobre eles, por isso consultá-los custa para nada."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Manter as datas de MOT atualizadas para todos os veículos desta oficina",
-        "syncInspectionsHelp": "Com isto ativado, cada viatura da oficina que tem matrícula é consultada uma vez e a data do próximo MOT é guardada. Depois, cada viatura é verificada de novo todos os meses, e todas as semanas quando o MOT vence em menos de dois meses. Cada viatura encontrada é cobrada como uma consulta Vehicle Registration, por isso a primeira passagem é a mais cara; as matrículas que o registo não conhece são gratuitas. Só são enviadas viaturas guardadas nesta oficina."
+        "syncInspectionsHelp": "Com isto ativo, cada veículo com matrícula é consultado uma vez e a data do MOT é guardada. Depois, os veículos são verificados de novo conforme definido abaixo. Cada veículo encontrado é cobrado como uma consulta Vehicle Registration; matrículas que o registo não conhece são gratuitas. Só veículos guardados nesta oficina são enviados.",
+        "inspectionRecheck": "Verificar de novo veículos que já têm data",
+        "inspectionRecheckHelp": "Uma data só muda quando uma inspeção é aprovada. Mensal repara numa inspeção antecipada mais cedo; só perto do prazo custa menos. Perto do prazo, cada veículo é verificado semanalmente, seja qual for a escolha aqui.",
+        "recheckMonthly": "Todos os meses",
+        "recheckQuarterly": "A cada três meses",
+        "recheckNearDeadline": "Só perto do prazo",
+        "inspectionSoonDays": "Perto do prazo significa dentro de",
+        "inspectionSoonDaysHelp": "Nesta janela um veículo é verificado semanalmente, pelo que uma inspeção aprovada o tira da lista de lembretes em dias. Uma janela mais curta significa menos consultas.",
+        "soon30": "30 dias",
+        "soon60": "60 dias",
+        "soon90": "90 dias",
+        "inspectionOnlyWithCustomer": "Só veículos com cliente",
+        "inspectionOnlyWithCustomerHelp": "Saltar veículos sem cliente registado. Ninguém pode ser lembrado sobre eles, por isso consultá-los custa para nada."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Manter atualizadas as datas de APK de todas as viaturas desta oficina",
-        "syncInspectionsHelp": "Uma vez por hora, as viaturas que não foram verificadas recentemente são consultadas pela matrícula e a próxima data de APK é guardada. Só são enviadas viaturas desta oficina. Cada viatura é verificada mensalmente, e semanalmente quando faltam menos de dois meses para o prazo."
+        "syncInspectionsHelp": "Uma vez por hora, os veículos a verificar são consultados pela matrícula e a próxima data de APK é guardada; com que frequência um veículo é verificado de novo define-se abaixo. Só veículos guardados nesta oficina são enviados.",
+        "inspectionRecheck": "Verificar de novo veículos que já têm data",
+        "inspectionRecheckHelp": "Uma data só muda quando uma inspeção é aprovada. Mensal repara numa inspeção antecipada mais cedo; só perto do prazo custa menos. Perto do prazo, cada veículo é verificado semanalmente, seja qual for a escolha aqui.",
+        "recheckMonthly": "Todos os meses",
+        "recheckQuarterly": "A cada três meses",
+        "recheckNearDeadline": "Só perto do prazo",
+        "inspectionSoonDays": "Perto do prazo significa dentro de",
+        "inspectionSoonDaysHelp": "Nesta janela um veículo é verificado semanalmente, pelo que uma inspeção aprovada o tira da lista de lembretes em dias. Uma janela mais curta significa menos consultas.",
+        "soon30": "30 dias",
+        "soon60": "60 dias",
+        "soon90": "90 dias",
+        "inspectionOnlyWithCustomer": "Só veículos com cliente",
+        "inspectionOnlyWithCustomerHelp": "Saltar veículos sem cliente registado. Ninguém pode ser lembrado sobre eles, por isso consultá-los custa para nada."
       }
     },
     "regcheck": {

+ 39 - 3
messages/ru/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Обновлять сроки техосмотра для всех автомобилей этой мастерской",
-        "syncInspectionsHelp": "Раз в час автомобили, которые давно не проверялись, ищутся по номеру, и сохраняется дата следующего EU-kontroll. Отправляются только автомобили этой мастерской. Автомобиль проверяется ежемесячно, а когда до срока меньше двух месяцев, еженедельно."
+        "syncInspectionsHelp": "Раз в час автомобили, которым пора проверка, ищутся по номеру, и сохраняется дата следующего EU-kontroll; как часто автомобиль проверяется повторно, задаётся ниже. Отправляются только автомобили, сохранённые в этой мастерской.",
+        "inspectionRecheck": "Повторно проверять автомобили, у которых уже есть дата",
+        "inspectionRecheckHelp": "Дата меняется только после пройденного осмотра. Ежемесячно быстрее всего замечает досрочный осмотр; только перед сроком стоит дешевле всего. Перед сроком каждый автомобиль проверяется еженедельно независимо от этого выбора.",
+        "recheckMonthly": "Каждый месяц",
+        "recheckQuarterly": "Каждые три месяца",
+        "recheckNearDeadline": "Только перед сроком",
+        "inspectionSoonDays": "Перед сроком означает в пределах",
+        "inspectionSoonDaysHelp": "В этом окне автомобиль проверяется еженедельно, поэтому пройденный осмотр убирает его из списка напоминаний за несколько дней. Более короткое окно означает меньше запросов.",
+        "soon30": "30 дней",
+        "soon60": "60 дней",
+        "soon90": "90 дней",
+        "inspectionOnlyWithCustomer": "Только автомобили с клиентом",
+        "inspectionOnlyWithCustomerHelp": "Пропускать автомобили без записанного клиента. Напомнить о них некому, так что запрос обходится впустую."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Поддерживать сроки MOT актуальными для всех автомобилей этой мастерской",
-        "syncInspectionsHelp": "Когда это включено, каждый автомобиль мастерской с номером один раз запрашивается, и сохраняется срок его следующего MOT. Затем каждый автомобиль перепроверяется ежемесячно, а когда до MOT меньше двух месяцев, еженедельно. Каждый найденный автомобиль оплачивается как один запрос Vehicle Registration, поэтому первый проход обходится дороже всего; номера, которых нет в реестре, бесплатны. Отправляются только автомобили, сохранённые в этой мастерской."
+        "syncInspectionsHelp": "Когда это включено, каждый автомобиль с номером ищется один раз, и сохраняется дата его MOT. Затем автомобили проверяются повторно так, как задано ниже. Каждый найденный автомобиль оплачивается как один запрос Vehicle Registration; номера, неизвестные реестру, бесплатны. Отправляются только автомобили, сохранённые в этой мастерской.",
+        "inspectionRecheck": "Повторно проверять автомобили, у которых уже есть дата",
+        "inspectionRecheckHelp": "Дата меняется только после пройденного осмотра. Ежемесячно быстрее всего замечает досрочный осмотр; только перед сроком стоит дешевле всего. Перед сроком каждый автомобиль проверяется еженедельно независимо от этого выбора.",
+        "recheckMonthly": "Каждый месяц",
+        "recheckQuarterly": "Каждые три месяца",
+        "recheckNearDeadline": "Только перед сроком",
+        "inspectionSoonDays": "Перед сроком означает в пределах",
+        "inspectionSoonDaysHelp": "В этом окне автомобиль проверяется еженедельно, поэтому пройденный осмотр убирает его из списка напоминаний за несколько дней. Более короткое окно означает меньше запросов.",
+        "soon30": "30 дней",
+        "soon60": "60 дней",
+        "soon90": "90 дней",
+        "inspectionOnlyWithCustomer": "Только автомобили с клиентом",
+        "inspectionOnlyWithCustomerHelp": "Пропускать автомобили без записанного клиента. Напомнить о них некому, так что запрос обходится впустую."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Обновлять даты APK для всех автомобилей этой мастерской",
-        "syncInspectionsHelp": "Раз в час автомобили, которые давно не проверялись, ищутся по номеру, и сохраняется дата следующего APK. Отправляются только автомобили этой мастерской. Автомобиль проверяется ежемесячно, а когда до срока меньше двух месяцев, еженедельно."
+        "syncInspectionsHelp": "Раз в час автомобили, которым пора проверка, ищутся по номеру, и сохраняется дата следующего APK; как часто автомобиль проверяется повторно, задаётся ниже. Отправляются только автомобили, сохранённые в этой мастерской.",
+        "inspectionRecheck": "Повторно проверять автомобили, у которых уже есть дата",
+        "inspectionRecheckHelp": "Дата меняется только после пройденного осмотра. Ежемесячно быстрее всего замечает досрочный осмотр; только перед сроком стоит дешевле всего. Перед сроком каждый автомобиль проверяется еженедельно независимо от этого выбора.",
+        "recheckMonthly": "Каждый месяц",
+        "recheckQuarterly": "Каждые три месяца",
+        "recheckNearDeadline": "Только перед сроком",
+        "inspectionSoonDays": "Перед сроком означает в пределах",
+        "inspectionSoonDaysHelp": "В этом окне автомобиль проверяется еженедельно, поэтому пройденный осмотр убирает его из списка напоминаний за несколько дней. Более короткое окно означает меньше запросов.",
+        "soon30": "30 дней",
+        "soon60": "60 дней",
+        "soon90": "90 дней",
+        "inspectionOnlyWithCustomer": "Только автомобили с клиентом",
+        "inspectionOnlyWithCustomerHelp": "Пропускать автомобили без записанного клиента. Напомнить о них некому, так что запрос обходится впустую."
       }
     },
     "regcheck": {

+ 39 - 3
messages/tr/integrations.json

@@ -513,7 +513,19 @@
       },
       "settings": {
         "syncInspections": "Bu atölyedeki tüm araçların muayene tarihlerini güncel tut",
-        "syncInspectionsHelp": "Saatte bir, yakın zamanda kontrol edilmemiş araçlar plakayla sorgulanır ve bir sonraki EU-kontroll tarihi kaydedilir. Yalnızca bu atölyede kayıtlı araçlar gönderilir. Bir araç ayda bir, süresi iki aydan az kaldığında haftada bir yeniden kontrol edilir."
+        "syncInspectionsHelp": "Saatte bir, kontrolü gelen araçlar plakadan sorgulanır ve sonraki EU-kontroll tarihi kaydedilir; bir aracın ne sıklıkla yeniden kontrol edileceği aşağıda ayarlanır. Yalnızca bu atölyede kayıtlı araçlar gönderilir.",
+        "inspectionRecheck": "Zaten tarihi olan araçları yeniden kontrol et",
+        "inspectionRecheckHelp": "Bir tarih yalnızca muayene geçildiğinde değişir. Aylık, erken yapılan bir muayeneyi en çabuk fark eder; yalnızca son tarihe yakın en az maliyetlidir. Son tarihe yakınken her araç, buradaki seçimden bağımsız olarak haftalık kontrol edilir.",
+        "recheckMonthly": "Her ay",
+        "recheckQuarterly": "Üç ayda bir",
+        "recheckNearDeadline": "Yalnızca son tarihe yakın",
+        "inspectionSoonDays": "Son tarihe yakın demek şu süre içinde",
+        "inspectionSoonDaysHelp": "Bu pencerede bir araç haftalık kontrol edilir, böylece geçilen bir muayene aracı günler içinde hatırlatma listesinden çıkarır. Daha kısa pencere daha az sorgu demektir.",
+        "soon30": "30 gün",
+        "soon60": "60 gün",
+        "soon90": "90 gün",
+        "inspectionOnlyWithCustomer": "Yalnızca müşterisi olan araçlar",
+        "inspectionOnlyWithCustomerHelp": "Kayıtlı müşterisi olmayan araçları atla. Onlar için kimseye hatırlatma gönderilemez, bu yüzden sorgulamak boşa maliyet olur."
       }
     },
     "openapi-automotive": {
@@ -539,7 +551,19 @@
       },
       "settings": {
         "syncInspections": "Bu atölyedeki tüm araçların MOT tarihlerini güncel tut",
-        "syncInspectionsHelp": "Bu açıkken atölyedeki plakası olan her araç bir kez sorgulanır ve MOT bitiş tarihi kaydedilir. Ardından her araç ayda bir, MOT'una iki aydan az kaldığında ise haftada bir yeniden kontrol edilir. Bulunan her araç bir Vehicle Registration sorgusu olarak faturalanır, bu yüzden ilk tarama en pahalısıdır; sicilin tanımadığı plakalar ücretsizdir. Yalnızca bu atölyede kayıtlı araçlar gönderilir."
+        "syncInspectionsHelp": "Bu açıkken plakası olan her araç bir kez sorgulanır ve MOT tarihi kaydedilir. Sonrasında araçlar aşağıda ayarlandığı gibi yeniden kontrol edilir. Bulunan her araç bir Vehicle Registration sorgusu olarak ücretlendirilir; kayıtta olmayan plakalar ücretsizdir. Yalnızca bu atölyede kayıtlı araçlar gönderilir.",
+        "inspectionRecheck": "Zaten tarihi olan araçları yeniden kontrol et",
+        "inspectionRecheckHelp": "Bir tarih yalnızca muayene geçildiğinde değişir. Aylık, erken yapılan bir muayeneyi en çabuk fark eder; yalnızca son tarihe yakın en az maliyetlidir. Son tarihe yakınken her araç, buradaki seçimden bağımsız olarak haftalık kontrol edilir.",
+        "recheckMonthly": "Her ay",
+        "recheckQuarterly": "Üç ayda bir",
+        "recheckNearDeadline": "Yalnızca son tarihe yakın",
+        "inspectionSoonDays": "Son tarihe yakın demek şu süre içinde",
+        "inspectionSoonDaysHelp": "Bu pencerede bir araç haftalık kontrol edilir, böylece geçilen bir muayene aracı günler içinde hatırlatma listesinden çıkarır. Daha kısa pencere daha az sorgu demektir.",
+        "soon30": "30 gün",
+        "soon60": "60 gün",
+        "soon90": "90 gün",
+        "inspectionOnlyWithCustomer": "Yalnızca müşterisi olan araçlar",
+        "inspectionOnlyWithCustomerHelp": "Kayıtlı müşterisi olmayan araçları atla. Onlar için kimseye hatırlatma gönderilemez, bu yüzden sorgulamak boşa maliyet olur."
       }
     },
     "rdw": {
@@ -550,7 +574,19 @@
       },
       "settings": {
         "syncInspections": "Bu atölyedeki tüm araçların APK tarihlerini güncel tut",
-        "syncInspectionsHelp": "Saatte bir, yakın zamanda kontrol edilmemiş araçlar plakayla sorgulanır ve bir sonraki APK tarihi kaydedilir. Yalnızca bu atölyede kayıtlı araçlar gönderilir. Bir araç ayda bir, süresi iki aydan az kaldığında haftada bir yeniden kontrol edilir."
+        "syncInspectionsHelp": "Saatte bir, kontrolü gelen araçlar plakadan sorgulanır ve sonraki APK tarihi kaydedilir; bir aracın ne sıklıkla yeniden kontrol edileceği aşağıda ayarlanır. Yalnızca bu atölyede kayıtlı araçlar gönderilir.",
+        "inspectionRecheck": "Zaten tarihi olan araçları yeniden kontrol et",
+        "inspectionRecheckHelp": "Bir tarih yalnızca muayene geçildiğinde değişir. Aylık, erken yapılan bir muayeneyi en çabuk fark eder; yalnızca son tarihe yakın en az maliyetlidir. Son tarihe yakınken her araç, buradaki seçimden bağımsız olarak haftalık kontrol edilir.",
+        "recheckMonthly": "Her ay",
+        "recheckQuarterly": "Üç ayda bir",
+        "recheckNearDeadline": "Yalnızca son tarihe yakın",
+        "inspectionSoonDays": "Son tarihe yakın demek şu süre içinde",
+        "inspectionSoonDaysHelp": "Bu pencerede bir araç haftalık kontrol edilir, böylece geçilen bir muayene aracı günler içinde hatırlatma listesinden çıkarır. Daha kısa pencere daha az sorgu demektir.",
+        "soon30": "30 gün",
+        "soon60": "60 gün",
+        "soon90": "90 gün",
+        "inspectionOnlyWithCustomer": "Yalnızca müşterisi olan araçlar",
+        "inspectionOnlyWithCustomerHelp": "Kayıtlı müşterisi olmayan araçları atla. Onlar için kimseye hatırlatma gönderilemez, bu yüzden sorgulamak boşa maliyet olur."
       }
     },
     "regcheck": {

+ 58 - 2
src/__tests__/features/integrations/inspection-sync.test.ts

@@ -7,7 +7,9 @@ vi.mock('@/lib/db', () => ({ db: { vehicle, vehicleInspectionStatus } }))
 
 const {
   BATCH_SIZE,
+  DEFAULT_SYNC_OPTIONS,
   RegistryQuotaError,
+  inspectionSyncOptions,
   recordRegistryAnswer,
   refreshInspections,
   vehiclesDueForCheck,
@@ -56,13 +58,67 @@ describe('inspection refresh job', () => {
   })
 
   it('asks only for this organisation’s live vehicles with a plate', async () => {
-    await vehiclesDueForCheck('org-a', new Date('2026-09-03T08:00:00Z'))
+    const now = new Date('2026-09-03T08:00:00Z')
+    await vehiclesDueForCheck('org-a', now)
     const where = vehicle.findMany.mock.calls[0][0].where
     expect(where.organizationId).toBe('org-a')
     expect(where.isArchived).toBe(false)
     expect(where.licensePlate).toEqual({ not: null })
-    // Never checked, or checked long enough ago.
+    expect(where).not.toHaveProperty('customerId')
+    // Never checked, no date yet, monthly, and weekly near the deadline.
+    expect(where.OR).toHaveLength(5)
+    expect(where.OR[3]).toEqual({
+      inspectionStatus: { checkedAt: { lt: new Date('2026-08-04T08:00:00Z') } },
+    })
+    expect(where.OR[4]).toEqual({
+      inspectionStatus: {
+        dueAt: { lt: new Date('2026-11-02T08:00:00Z') },
+        checkedAt: { lt: new Date('2026-08-27T08:00:00Z') },
+      },
+    })
+  })
+
+  it('rechecks a dated vehicle only near its deadline when the workshop chose that', async () => {
+    const now = new Date('2026-09-03T08:00:00Z')
+    await vehiclesDueForCheck('org-a', now, {
+      recheckDays: null,
+      soonDays: 30,
+      onlyWithCustomer: true,
+    })
+    const where = vehicle.findMany.mock.calls[0][0].where
+    expect(where.customerId).toEqual({ not: null })
+    // No cadence rule: never checked, no date yet, and near the deadline.
     expect(where.OR).toHaveLength(4)
+    expect(where.OR[3].inspectionStatus.dueAt).toEqual({
+      lt: new Date('2026-10-03T08:00:00Z'),
+    })
+  })
+
+  it('reads the cadence off the connection settings, falling back to the defaults', () => {
+    expect(inspectionSyncOptions({})).toEqual(DEFAULT_SYNC_OPTIONS)
+    expect(inspectionSyncOptions({ inspectionRecheck: '90', inspectionSoonDays: '90' })).toEqual({
+      recheckDays: 90,
+      soonDays: 90,
+      onlyWithCustomer: false,
+    })
+    expect(
+      inspectionSyncOptions({
+        inspectionRecheck: 'deadline',
+        inspectionSoonDays: '7',
+        inspectionOnlyWithCustomer: true,
+      })
+    ).toEqual({ recheckDays: null, soonDays: 60, onlyWithCustomer: true })
+  })
+
+  it('passes the connection’s cadence to the query', async () => {
+    const { ctx } = context({ syncInspections: true, inspectionRecheck: '90' })
+    await refreshInspections(ctx, vi.fn())
+    const where = vehicle.findMany.mock.calls[0][0].where
+    expect(where.OR[3]).toEqual({
+      inspectionStatus: { checkedAt: { lt: expect.any(Date) } },
+    })
+    const cutoff = where.OR[3].inspectionStatus.checkedAt.lt as Date
+    expect(Date.now() - cutoff.getTime()).toBeGreaterThan(89 * 86_400_000)
   })
 
   it('looks each vehicle up and records the answer against the same organisation', async () => {

+ 5 - 1
src/__tests__/features/vehicles/plate-lookup.test.ts

@@ -106,7 +106,11 @@ describe('lookupPlate', () => {
       serviceCount: 3,
       lastServiceAt: '2026-05-02T09:00:00.000Z',
     })
-    expect(data?.registry).toMatchObject({ make: 'Toyota', source: 'RDW Open Data' })
+    expect(data?.registry).toMatchObject({
+      make: 'Toyota',
+      source: 'RDW Open Data',
+      connectorId: 'rdw',
+    })
     expect(askRegistry).toHaveBeenCalledWith('conn1', { plate: 'SK209X' })
     // The compacted plate, not the typed one, is what the SQL compares against.
     const sql = vi.mocked(db.$queryRaw).mock.calls[0]

+ 2 - 1
src/features/integrations/Actions/integrationActions.ts

@@ -375,7 +375,8 @@ export async function getIntegrationConnection(connectorId: string) {
           row && manifest.capabilities.includes(INSPECTION_CAPABILITY)
             ? await inspectionSyncOverview(
                 organizationId,
-                (row.state as Record<string, unknown>) ?? {}
+                (row.state as Record<string, unknown>) ?? {},
+                effectiveSettings(connectorId, (row.settings as Record<string, unknown>) ?? {})
               )
             : null,
         backup:

+ 7 - 1
src/features/integrations/Actions/vehicleLookupActions.ts

@@ -23,6 +23,12 @@ const READ_VEHICLES = [{ action: PermissionAction.READ, subject: PermissionSubje
 export interface VehicleLookup extends VehicleLookupResult {
   /** Registry name for the attribution line, such as "Statens vegvesen". */
   source: string
+  /**
+   * The connector that answered. A vehicle created from this answer saves
+   * the inspection date under it, as checked now, so the sync does not look
+   * the same plate up again within the hour.
+   */
+  connectorId: string
 }
 
 /**
@@ -95,7 +101,7 @@ export async function lookupVehicle(query: {
         }
       }
       if (!answer.result) return null
-      return { ...answer.result, source: answer.source }
+      return { ...answer.result, source: answer.source, connectorId: answer.connectorId }
     },
     { requiredPermissions: READ_VEHICLES }
   )

+ 142 - 32
src/features/integrations/Lib/inspection-sync.ts

@@ -18,34 +18,115 @@ import type {
  * other's, by construction rather than by filter.
  *
  * Dates change only when an inspection happens, so this is not a daily sweep
- * of everything. A vehicle is rechecked monthly, weekly once its deadline is
- * within two months, and at once when it has never been checked. A 500-car
- * shop makes a few dozen calls a day against a quota of tens of thousands.
+ * of everything. A vehicle that has never been checked is looked up at once.
+ * One that has a date is rechecked on the cadence the workshop chose: every
+ * month or every three months, or not at all until its deadline is near;
+ * and near the deadline, weekly, so a passed inspection drops the vehicle
+ * off the reminder list within days. A paid registry bills each vehicle
+ * found, so the settings exist to let a workshop trade freshness for cost.
  */
 
 export const INSPECTION_CAPABILITY = 'vehicle.inspection'
 export const INSPECTION_SETTING = 'syncInspections'
+/** How often a vehicle that already has a date is rechecked: '30', '90' or 'deadline'. */
+export const INSPECTION_RECHECK_SETTING = 'inspectionRecheck'
+/** How many days before the deadline a vehicle counts as near it: '30', '60' or '90'. */
+export const INSPECTION_SOON_SETTING = 'inspectionSoonDays'
+/** Skip vehicles with no customer on file, since nobody can be reminded about them. */
+export const INSPECTION_CUSTOMER_SETTING = 'inspectionOnlyWithCustomer'
 export const INSPECTION_JOB = 'inspection.refresh'
 
+const RECHECK_VALUES = ['30', '90', 'deadline'] as const
+const SOON_VALUES = ['30', '60', '90'] as const
+
 /**
  * What a registry connector puts in its manifest to take part: the
- * capability, the opt-in setting and the hourly tick. Spread these into
- * the manifest so every registry, Norwegian or German, offers the same
- * switch with the same wording and the same cadence.
+ * capability, the opt-in switch with its cadence settings, and the hourly
+ * tick. Spread these into the manifest so every registry, Norwegian or
+ * British, offers the same settings with the same wording.
  */
 export const INSPECTION_MANIFEST = {
   capability: INSPECTION_CAPABILITY,
-  setting: {
-    key: INSPECTION_SETTING,
-    type: 'boolean' as const,
-    label: INSPECTION_SETTING,
-    help: `${INSPECTION_SETTING}Help`,
-    default: false,
-  },
+  settings: [
+    {
+      key: INSPECTION_SETTING,
+      type: 'boolean' as const,
+      label: INSPECTION_SETTING,
+      help: `${INSPECTION_SETTING}Help`,
+      default: false,
+    },
+    {
+      key: INSPECTION_RECHECK_SETTING,
+      type: 'select' as const,
+      label: INSPECTION_RECHECK_SETTING,
+      help: `${INSPECTION_RECHECK_SETTING}Help`,
+      default: '30',
+      options: [
+        { value: '30', label: 'recheckMonthly' },
+        { value: '90', label: 'recheckQuarterly' },
+        { value: 'deadline', label: 'recheckNearDeadline' },
+      ],
+      showWhen: { key: INSPECTION_SETTING, equals: true },
+    },
+    {
+      key: INSPECTION_SOON_SETTING,
+      type: 'select' as const,
+      label: INSPECTION_SOON_SETTING,
+      help: `${INSPECTION_SOON_SETTING}Help`,
+      default: '60',
+      options: [
+        { value: '30', label: 'soon30' },
+        { value: '60', label: 'soon60' },
+        { value: '90', label: 'soon90' },
+      ],
+      showWhen: { key: INSPECTION_SETTING, equals: true },
+    },
+    {
+      key: INSPECTION_CUSTOMER_SETTING,
+      type: 'boolean' as const,
+      label: INSPECTION_CUSTOMER_SETTING,
+      help: `${INSPECTION_CUSTOMER_SETTING}Help`,
+      default: false,
+      showWhen: { key: INSPECTION_SETTING, equals: true },
+    },
+  ],
   // The job decides what actually needs a lookup; the tick itself is cheap.
   schedule: { job: INSPECTION_JOB, everyMinutes: 60 },
 }
 
+/** The cadence settings, read off a connection with the defaults filled in. */
+export interface InspectionSyncOptions {
+  /** Days between rechecks of a vehicle that has a date, or null for "only near the deadline". */
+  recheckDays: 30 | 90 | null
+  /** A deadline closer than this many days is near, and rechecked weekly. */
+  soonDays: 30 | 60 | 90
+  /** Leave out vehicles with no customer on file. */
+  onlyWithCustomer: boolean
+}
+
+export const DEFAULT_SYNC_OPTIONS: InspectionSyncOptions = {
+  recheckDays: 30,
+  soonDays: 60,
+  onlyWithCustomer: false,
+}
+
+/** The options a connection's saved settings describe; anything unknown falls back to the default. */
+export function inspectionSyncOptions(settings: Record<string, unknown>): InspectionSyncOptions {
+  const recheck = String(settings[INSPECTION_RECHECK_SETTING] ?? '')
+  const soon = String(settings[INSPECTION_SOON_SETTING] ?? '')
+  return {
+    recheckDays: (RECHECK_VALUES as readonly string[]).includes(recheck)
+      ? recheck === 'deadline'
+        ? null
+        : (Number(recheck) as 30 | 90)
+      : DEFAULT_SYNC_OPTIONS.recheckDays,
+    soonDays: (SOON_VALUES as readonly string[]).includes(soon)
+      ? (Number(soon) as 30 | 60 | 90)
+      : DEFAULT_SYNC_OPTIONS.soonDays,
+    onlyWithCustomer: settings[INSPECTION_CUSTOMER_SETTING] === true,
+  }
+}
+
 /**
  * The job map entry for a connector's server module: pass the connector's
  * own lookup and the refresh runs against it. A registry never needs to
@@ -67,10 +148,10 @@ export class RegistryQuotaError extends Error {
   }
 }
 
-/** Deadlines closer than this are "soon" and rechecked more often. */
-export const SOON_DAYS = 60
+/** Inside the "near the deadline" window a vehicle is rechecked this often. */
 export const RECHECK_SOON_DAYS = 7
-export const RECHECK_DAYS = 30
+/** A vehicle the register knows but has given no date yet is rechecked this often, whatever the cadence. */
+export const RECHECK_NO_DATE_DAYS = 30
 /** Lookups per job run; the job reschedules itself while more remain. */
 export const BATCH_SIZE = 25
 const BATCH_PAUSE_SECONDS = 5
@@ -158,23 +239,41 @@ async function recordFailure(input: {
   })
 }
 
-/** Prisma filter for the vehicles a registry can be asked about: this organisation's, live, with a plate. */
-function askableVehicles(organizationId: string) {
-  return { organizationId, isArchived: false, licensePlate: { not: null } }
+/**
+ * Prisma filter for the vehicles a registry can be asked about: this
+ * organisation's, live, with a plate, and with a customer when the workshop
+ * asked for that.
+ */
+function askableVehicles(organizationId: string, options: InspectionSyncOptions) {
+  return {
+    organizationId,
+    isArchived: false,
+    licensePlate: { not: null },
+    ...(options.onlyWithCustomer && { customerId: { not: null } }),
+  }
 }
 
-/** The subset of those whose last check is old enough to repeat, or that were never checked. */
-function dueForCheckWhere(organizationId: string, now: Date) {
-  const soonCutoff = new Date(now.getTime() + SOON_DAYS * DAY_MS)
-  const staleSoon = new Date(now.getTime() - RECHECK_SOON_DAYS * DAY_MS)
-  const stale = new Date(now.getTime() - RECHECK_DAYS * DAY_MS)
+/**
+ * The subset of those due a check now. Always: never checked, or known to
+ * the register without a date and not asked for a month. On the chosen
+ * cadence: every vehicle whose last check is older than it. And near the
+ * deadline: weekly, whatever the cadence.
+ */
+function dueForCheckWhere(organizationId: string, now: Date, options: InspectionSyncOptions) {
+  const ago = (days: number) => new Date(now.getTime() - days * DAY_MS)
+  const soonCutoff = new Date(now.getTime() + options.soonDays * DAY_MS)
   return {
-    ...askableVehicles(organizationId),
+    ...askableVehicles(organizationId, options),
     OR: [
       { inspectionStatus: null },
       { inspectionStatus: { checkedAt: null } },
-      { inspectionStatus: { checkedAt: { lt: stale } } },
-      { inspectionStatus: { dueAt: { lt: soonCutoff }, checkedAt: { lt: staleSoon } } },
+      { inspectionStatus: { dueAt: null, checkedAt: { lt: ago(RECHECK_NO_DATE_DAYS) } } },
+      ...(options.recheckDays === null
+        ? []
+        : [{ inspectionStatus: { checkedAt: { lt: ago(options.recheckDays) } } }]),
+      {
+        inspectionStatus: { dueAt: { lt: soonCutoff }, checkedAt: { lt: ago(RECHECK_SOON_DAYS) } },
+      },
     ],
   }
 }
@@ -187,10 +286,11 @@ function dueForCheckWhere(organizationId: string, now: Date) {
 export async function vehiclesDueForCheck(
   organizationId: string,
   now: Date,
+  options: InspectionSyncOptions = DEFAULT_SYNC_OPTIONS,
   take = BATCH_SIZE
 ): Promise<{ id: string; licensePlate: string }[]> {
   const rows = await db.vehicle.findMany({
-    where: dueForCheckWhere(organizationId, now),
+    where: dueForCheckWhere(organizationId, now, options),
     select: { id: true, licensePlate: true },
     orderBy: { updatedAt: 'asc' },
     take,
@@ -211,15 +311,21 @@ export interface InspectionSyncOverview {
   inProgress: boolean
 }
 
-/** What the settings page shows beside the toggle: how much a pass covers and when it last ran. */
+/**
+ * What the settings page shows beside the toggle: how much a pass covers
+ * and when it last ran, under the settings as saved, so a change shows in
+ * "would be looked up on the next run" as soon as it is saved.
+ */
 export async function inspectionSyncOverview(
   organizationId: string,
   state: Record<string, unknown>,
+  settings: Record<string, unknown> = {},
   now = new Date()
 ): Promise<InspectionSyncOverview> {
+  const options = inspectionSyncOptions(settings)
   const [vehiclesWithPlate, dueForCheck, withDate] = await Promise.all([
-    db.vehicle.count({ where: askableVehicles(organizationId) }),
-    db.vehicle.count({ where: dueForCheckWhere(organizationId, now) }),
+    db.vehicle.count({ where: askableVehicles(organizationId, options) }),
+    db.vehicle.count({ where: dueForCheckWhere(organizationId, now, options) }),
     db.vehicleInspectionStatus.count({
       where: { organizationId, dueAt: { not: null }, vehicle: { isArchived: false } },
     }),
@@ -263,7 +369,11 @@ export async function refreshInspections(
     failed: 0,
   }
 
-  const batch = await vehiclesDueForCheck(organizationId, now)
+  const batch = await vehiclesDueForCheck(
+    organizationId,
+    now,
+    inspectionSyncOptions(ctx.connection.settings)
+  )
   for (const vehicle of batch) {
     tally.checked += 1
     try {

+ 7 - 2
src/features/vehicles/Actions/plateLookupActions.ts

@@ -46,7 +46,7 @@ export interface PlateLookup {
   /** The workshop's own vehicle with this plate (or the registry's VIN), when there is one. */
   vehicle: WorkshopVehicle | null
   /** What the registry said, null when it has no such vehicle. */
-  registry: (VehicleLookupResult & { source: string }) | null
+  registry: (VehicleLookupResult & { source: string; connectorId: string }) | null
   /** Set when the registry could not be asked; the workshop half still stands. */
   registryError: string | null
   /** Registry name, for the empty state's attribution. */
@@ -148,7 +148,12 @@ export async function lookupPlate(input: { plate: string }) {
           try {
             const answer = await askRegistry(target.id, { plate })
             source = answer.source
-            if (answer.result) registry = { ...answer.result, source: answer.source }
+            if (answer.result)
+              registry = {
+                ...answer.result,
+                source: answer.source,
+                connectorId: answer.connectorId,
+              }
             if (!vehicle && answer.result?.vin) {
               vehicle = await findByVin(organizationId, answer.result.vin)
             }

+ 32 - 6
src/features/vehicles/Actions/vehicleActions.ts

@@ -1,5 +1,7 @@
 'use server'
 
+import { INSPECTION_CAPABILITY } from '@/features/integrations/Lib/inspection-sync'
+import { getManifest } from '@/integrations/registry'
 import { workshopTimeZone } from '@/lib/workshop-timezone'
 import { assertOwnUploads } from '@/lib/upload-url'
 import { toSafeWorkshopDate } from '@/lib/workshop-datetime'
@@ -214,10 +216,24 @@ export async function getVehiclesPaginated(params: {
  * that knows better than the register, can still drive reminders. A
  * registry answer with a date takes over again on the next sync.
  */
-async function saveManualInspectionDate(
+/** A connector id that is a registry able to keep inspection dates, or null for anything else. */
+function inspectionRegistry(source: string | undefined): string | null {
+  if (!source) return null
+  const manifest = getManifest(source)
+  return manifest?.capabilities.includes(INSPECTION_CAPABILITY) ? manifest.id : null
+}
+
+/**
+ * The form's inspection date. Typed by hand, it is saved as manual. Filled
+ * by a registry lookup and left alone, it is saved as that registry's
+ * answer with the time of the check, so the hourly sync treats the vehicle
+ * as freshly checked instead of spending a second lookup on it.
+ */
+async function saveInspectionDate(
   organizationId: string,
   vehicleId: string,
-  value: string | undefined
+  value: string | undefined,
+  source?: string
 ): Promise<void> {
   if (value === undefined) return
   const trimmed = value.trim()
@@ -231,6 +247,16 @@ async function saveManualInspectionDate(
   }
   const dueAt = toSafeWorkshopDate(trimmed, await workshopTimeZone(organizationId))
   if (!dueAt) throw new Error('Invalid inspection date')
+  const registry = inspectionRegistry(source)
+  if (registry) {
+    const now = new Date()
+    await db.vehicleInspectionStatus.upsert({
+      where: { vehicleId },
+      create: { organizationId, vehicleId, dueAt, source: registry, checkedAt: now, found: true },
+      update: { dueAt, source: registry, checkedAt: now, found: true, lastError: null },
+    })
+    return
+  }
   await db.vehicleInspectionStatus.upsert({
     where: { vehicleId },
     create: { organizationId, vehicleId, dueAt, source: 'manual', found: true },
@@ -241,7 +267,7 @@ async function saveManualInspectionDate(
 export async function createVehicle(input: unknown) {
   return withAuth(
     async ({ userId, organizationId }) => {
-      const { inspectionDueAt, ...data } = createVehicleSchema.parse(input)
+      const { inspectionDueAt, inspectionDueSource, ...data } = createVehicleSchema.parse(input)
       assertOwnUploads(data, organizationId)
       // The owner the vehicle is filed under must be one of our customers.
       await assertOwnedCustomer(data.customerId, organizationId)
@@ -257,7 +283,7 @@ export async function createVehicle(input: unknown) {
           organizationId,
         },
       })
-      await saveManualInspectionDate(organizationId, vehicle.id, inspectionDueAt)
+      await saveInspectionDate(organizationId, vehicle.id, inspectionDueAt, inspectionDueSource)
       revalidatePath('/')
       revalidatePath('/vehicles')
       return vehicle
@@ -283,7 +309,7 @@ export async function createVehicle(input: unknown) {
 export async function updateVehicle(input: unknown) {
   return withAuth(
     async ({ organizationId, userId }) => {
-      const { id, inspectionDueAt, ...data } = updateVehicleSchema.parse(input)
+      const { id, inspectionDueAt, inspectionDueSource, ...data } = updateVehicleSchema.parse(input)
       assertOwnUploads(data, organizationId)
 
       // Fetch current record for display/diff, and the image it had
@@ -320,7 +346,7 @@ export async function updateVehicle(input: unknown) {
       if (data.imageUrl !== undefined && before.imageUrl && before.imageUrl !== data.imageUrl) {
         await releaseFiles([before.imageUrl], { organizationId, reason: 'vehicle image replaced' })
       }
-      await saveManualInspectionDate(organizationId, id, inspectionDueAt)
+      await saveInspectionDate(organizationId, id, inspectionDueAt, inspectionDueSource)
       const vehicleDisplay = `${before.year} ${before.make} ${before.model}${before.licensePlate ? ` (${before.licensePlate})` : ''}`
       const changedKeys = Object.keys(data).filter(
         (k) => (data as Record<string, unknown>)[k] !== undefined

+ 1 - 1
src/features/vehicles/Components/PlateLookupCommand.tsx

@@ -176,7 +176,7 @@ export function PlateLookupCommand() {
     setFormLookup(
       registry
         ? { ...registry, licensePlate: registry.licensePlate ?? result.plate }
-        : { licensePlate: result.plate, source: '' }
+        : { licensePlate: result.plate, source: '', connectorId: '' }
     )
     const list = await getCustomersList()
     setCustomers(list.success && list.data ? list.data : [])

+ 16 - 2
src/features/vehicles/Components/VehicleForm.tsx

@@ -132,6 +132,10 @@ export function VehicleForm({
   const [transmission, setTransmission] = useState(defaultTransmission)
   /** What the registry said about the plate, kept under the field until the dialog closes. */
   const [lookupNote, setLookupNote] = useState<VehicleLookup | null>(null)
+  // The inspection date a lookup wrote into the form, and which registry
+  // said so. Sent with the save while the field still holds that value, so
+  // the date is stored as the registry's answer and not looked up again.
+  const lookupDateRef = useRef<{ value: string; connectorId: string } | null>(null)
   /** Keeper read off a scanned document, until it is tied to a customer. */
   const [scannedOwner, setScannedOwner] = useState<{ name?: string; address?: string } | null>(null)
   const [ownerMatches, setOwnerMatches] = useState<OwnerMatch[]>([])
@@ -272,7 +276,10 @@ export function VehicleForm({
       const input = formRef.current?.elements.namedItem(
         'inspectionDueAt'
       ) as HTMLInputElement | null
-      if (input && !input.value) input.value = data.inspectionDue.slice(0, 10)
+      if (input && !input.value) {
+        input.value = data.inspectionDue.slice(0, 10)
+        lookupDateRef.current = { value: input.value, connectorId: data.connectorId }
+      }
     }
     if (data.transmission && transmission === defaultTransmission) {
       setTransmission(data.transmission)
@@ -294,7 +301,10 @@ export function VehicleForm({
     // eslint-disable-next-line react-hooks/exhaustive-deps
   }, [open, vehicle, initialLookup])
   useEffect(() => {
-    if (!open) appliedLookupRef.current = null
+    if (!open) {
+      appliedLookupRef.current = null
+      lookupDateRef.current = null
+    }
   }, [open])
 
   const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
@@ -376,6 +386,10 @@ export function VehicleForm({
         tsn: showTypeKey ? optional('tsn') : undefined,
         // Sent as-is: an empty string clears a hand-typed date, undefined leaves it alone.
         inspectionDueAt: isMarine ? undefined : ((formData.get('inspectionDueAt') as string) ?? ''),
+        inspectionDueSource:
+          !isMarine && lookupDateRef.current?.value === formData.get('inspectionDueAt')
+            ? lookupDateRef.current.connectorId
+            : undefined,
         customerId,
       }
 

+ 6 - 0
src/features/vehicles/Schema/vehicleSchema.ts

@@ -35,6 +35,12 @@ export const createVehicleSchema = z.object({
   customerId: z.string().optional(),
   /** Next periodic inspection, YYYY-MM-DD, set by hand. Empty clears a manual date. */
   inspectionDueAt: z.string().optional(),
+  /**
+   * The registry connector whose lookup filled inspectionDueAt, left as it
+   * was. The date is then saved as that registry's answer, checked now, and
+   * not as a hand-typed date the sync would look up again straight away.
+   */
+  inspectionDueSource: z.string().max(60).optional(),
 })
 
 export const updateVehicleSchema = createVehicleSchema.partial().extend({

+ 1 - 1
src/integrations/checkcardetails/manifest.ts

@@ -27,6 +27,6 @@ export const manifest: ConnectorManifest = {
   },
   capabilities: ['vehicle.lookup', INSPECTION_MANIFEST.capability],
   lookupBy: ['plate', 'vin'],
-  settings: [INSPECTION_MANIFEST.setting],
+  settings: INSPECTION_MANIFEST.settings,
   schedules: [INSPECTION_MANIFEST.schedule],
 }

+ 1 - 1
src/integrations/rdw/manifest.ts

@@ -23,6 +23,6 @@ export const manifest: ConnectorManifest = {
     fields: [{ key: 'appToken', label: 'appToken', type: 'password', help: 'appTokenHelp' }],
   },
   capabilities: ['vehicle.lookup', INSPECTION_MANIFEST.capability],
-  settings: [INSPECTION_MANIFEST.setting],
+  settings: INSPECTION_MANIFEST.settings,
   schedules: [INSPECTION_MANIFEST.schedule],
 }

+ 1 - 1
src/integrations/vegvesen/manifest.ts

@@ -25,6 +25,6 @@ export const manifest: ConnectorManifest = {
   },
   capabilities: ['vehicle.lookup', INSPECTION_MANIFEST.capability],
   lookupBy: ['plate', 'vin'],
-  settings: [INSPECTION_MANIFEST.setting],
+  settings: INSPECTION_MANIFEST.settings,
   schedules: [INSPECTION_MANIFEST.schedule],
 }