diff --git a/flowkit_ui_backend/impl/data_api_impl.py b/flowkit_ui_backend/impl/data_api_impl.py index 0e950be..0a2108d 100644 --- a/flowkit_ui_backend/impl/data_api_impl.py +++ b/flowkit_ui_backend/impl/data_api_impl.py @@ -256,6 +256,7 @@ async def get_time_range( logger.debug(f"Formatting dates...", date_format=date_format) dates = [row[0].strftime(date_format) for row in result] + populated_dates = dates[:] min_value = min([row[1] for row in result]) if len(result) > 0 else None max_value = max([row[2] for row in result]) if len(result) > 0 else None @@ -278,6 +279,7 @@ async def get_time_range( start_date=dates[0], end_date=dates[-1], all_dates=dates, + populated_dates=populated_dates, min_value=min_value, max_value=max_value, ) diff --git a/flowkit_ui_backend/models/time_range.py b/flowkit_ui_backend/models/time_range.py index 1490ab1..7b89ebd 100644 --- a/flowkit_ui_backend/models/time_range.py +++ b/flowkit_ui_backend/models/time_range.py @@ -34,6 +34,7 @@ class TimeRange(BaseModel): start_date: Optional[str] = None end_date: Optional[str] = None all_dates: Optional[List[str]] = None + populated_dates: Optional[List[str]] = None min_value: Optional[int] = None max_value: Optional[int] = None diff --git a/resources/generate_translation_sql.py b/resources/generate_translation_sql.py new file mode 100644 index 0000000..90794fd --- /dev/null +++ b/resources/generate_translation_sql.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +""" +Generate SQL UPDATE statements to sync indicator translations from config.json +into the flowkit_ui_backend MySQL database. + +Usage: + python3 resources/generate_translation_sql.py > /tmp/update_translations.sql + tailscale ssh root@mobdash-sql-prod "mysql --default-character-set=utf8mb4 -u root -A flowkit_ui_backend" < /tmp/update_translations.sql + +Or pipe directly: + python3 resources/generate_translation_sql.py | tailscale ssh root@mobdash-sql-prod "mysql --default-character-set=utf8mb4 -u root -A flowkit_ui_backend" +""" + +import json +import os +import sys + +config_path = os.path.join(os.path.dirname(__file__), "config.json") + +with open(config_path) as f: + config = json.load(f) + +langs = {l["code"] for l in config["languages"] if not l.get("default")} + +print( + "-- Generated from config.json - updates indicator translations in flowkit_ui_backend" +) +print("-- Languages:", sorted(langs)) +print() + +for ind in config["indicators"]: + iid = ind["indicator_id"] + translation = {} + for key, val in ind.items(): + parts = key.rsplit("_", 1) + if len(parts) == 2 and parts[1] in langs: + translation.setdefault(parts[1], {})[parts[0]] = val + if translation: + escaped = ( + json.dumps(translation, ensure_ascii=False) + .replace("\\", "\\\\") + .replace("'", "\\'") + ) + print( + f"UPDATE indicator SET translation = '{escaped}' WHERE indicator_id = '{iid}';" + ) diff --git a/resources/update_translations.sql b/resources/update_translations.sql new file mode 100644 index 0000000..ca7f0b6 --- /dev/null +++ b/resources/update_translations.sql @@ -0,0 +1,26 @@ +-- Generated from config.json - updates indicator translations in flowkit_ui_backend +-- Languages: ['fr', 'ht'] + +UPDATE indicator SET translation = '{"fr": {"label": "Résidents", "description": "Estime le nombre de personnes résidant dans une zone pendant le mois sélectionné par l\'utilisateur.", "method": "L\'indicateur des résidents estime le nombre de personnes résidant dans chaque zone pendant le mois sélectionné par l\'utilisateur.\\n\\nL\'indicateur est calculé à partir de l\'indicateur d\'afflux net et du nombre de base de résidents dans la zone pendant une période de référence.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'residents.residents'; +UPDATE indicator SET translation = '{"fr": {"label": "Habitants par km²", "description": "Estime le nombre moyen de personnes résidant par kilomètre carré d\'une zone pendant le mois sélectionné par l\'utilisateur.", "method": "L\'indicateur de résidents par kilomètre carré estime le nombre moyen de personnes résidant par kilomètre carré d\'une zone pendant le mois sélectionné par l\'utilisateur.\\n\\nL\'indicateur est calculé à partir de l\'indicateur des résidents et de la taille géographique de la zone.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'residents.residents_perKm2'; +UPDATE indicator SET translation = '{"fr": {"label": "Différence entre les résidents", "description": "Estime la différence du nombre de résidents entre une période de référence et le mois sélectionné par l\'utilisateur.", "method": "Pour chaque zone, l\'indicateur de différence de résidents estime la différence du nombre de résidents entre une période de référence et le mois sélectionné par l\'utilisateur.\\n\\nL\'indicateur est calculé à partir de l\'indicateur de résidents et du nombre de résidents de référence dans la zone pendant une période de référence.\\n\\nSi le nombre de résidents a augmenté, l\'indicateur aura une valeur positive ; si le nombre de résidents a diminué, la valeur sera négative.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'residents.residents_diffwithref'; +UPDATE indicator SET translation = '{"fr": {"label": "Variation en pourcentage de la différence de résidents", "description": "Estime la variation du nombre de résidents entre une période de référence et le mois sélectionné par l\'utilisateur, exprimée en pourcentage du nombre de résidents de référence.", "method": "L\'indicateur de variation en pourcentage du nombre de résidents estime la variation du nombre de résidents entre une période de référence et une période donnée, par rapport au nombre de résidents de la période de référence. La différence est exprimée en pourcentage d\'une valeur de référence calculée pour la période de référence.\\n\\nL\'indicateur est calculé à partir de l\'indicateur de résidents et du nombre de résidents de référence dans la zone pendant une période de référence.\\n\\nSi le nombre de résidents a augmenté, l\'indicateur aura une valeur positive ; si le nombre de résidents a diminué, la valeur sera négative.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'residents.residents_pctchangewithref'; +UPDATE indicator SET translation = '{"fr": {"label": "Anomalie", "description": "Mesure l\'écart entre le nombre estimé de personnes résidant dans une zone donnée pendant le mois sélectionné par l\'utilisateur et le nombre de résidents estimé pendant la période de référence, exprimé sous la forme d\'un score d\'anomalie (score z).", "method": "L\'indicateur d\'anomalie des résidents mesure l\'écart entre le nombre estimé de personnes résidant dans une zone donnée pendant le mois sélectionné par l\'utilisateur et le nombre de résidents estimé pendant la période de référence, exprimé sous la forme d\'un score z.\\n\\nL\'indicateur est calculé à partir de l\'indicateur de différence de résidents et de l\'écart absolu moyen du nombre de résidents dans la zone pendant une période de référence.\\n\\nPour cet indicateur, une valeur positive supérieure à 3 indique une augmentation statistiquement significative du nombre de résidents dans une zone donnée ; une valeur inférieure à -3 indique une diminution statistiquement significative des résidents. Les valeurs entre 3 et -3 se situent dans les limites de la variation normale basée sur la période de référence.\\n\\nCet indicateur décrit l\'ampleur du caractère inhabituel du nombre de résidents dans une zone, compte tenu de l\'ampleur de la variation observée pendant la période de référence. Des valeurs absolues plus élevées indiquent un plus grand écart par rapport à la variation normale de la population, et donc une plus grande probabilité que le changement soit significatif. Des changements de la sorte pourraient être associés à des événements spécifiques ou causés par des problèmes techniques. Toutefois, des anomalies très importantes (valeurs absolues supérieures à 6) pourraient également indiquer un problème technique.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'residents.abnormality'; +UPDATE indicator SET translation = '{"fr": {"label": "Résidents arrivés", "description": "Estime le nombre total de personnes qui ont déménagé dans une zone pendant le mois sélectionné par l\'utilisateur.", "method": "Pour chaque zone, l\'indicateur des résidents arrivés estime le nombre total de personnes qui ont déménagé vers une zone à partir de toute autre zone du pays pendant le mois sélectionné par l\'utilisateur.\\n\\nL\'indicateur est calculé à partir de la somme des comptages des abonnés dont le lieu de résidence a changé d\'une zone à une autre chaque mois.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'residents.arrived'; +UPDATE indicator SET translation = '{"fr": {"label": "Résidents déplacés", "description": "Estime le nombre total de personnes qui ont déménagé hors d\'une zone pendant le mois sélectionné par l\'utilisateur.", "method": "Pour chaque zone, l\'indicateur des résidents déplacés estime le nombre total de personnes qui ont déménagé vers une zone à partir de toute autre zone du pays pendant le mois sélectionné par l\'utilisateur.\\n\\nL\'indicateur est calculé à partir de la somme des comptages des abonnés dont le lieu de résidence a changé d\'une zone à une autre chaque mois.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'residents.departed'; +UPDATE indicator SET translation = '{"fr": {"label": "Afflux net", "description": "Estime la différence entre le nombre de personnes déménageant vers et hors d\'une zone pendant le mois sélectionné par l\'utilisateur.", "method": "Pour chaque zone, l\'indicateur d\'afflux net de résidents estime la différence entre le nombre de personnes ayant déménagé dans (résidents arrivés) et hors (résidents partis) d\'une zone pendant le mois sélectionné par l\'utilisateur.\\n\\nCet indicateur est calculé à partir des indicateurs relatifs aux résidents arrivés et partis.\\n\\nSi les personnes qui s\'installent dans la zone sont plus nombreuses que celles qui la quittent, l\'indicateur aura une valeur positive ; si les personnes qui quittent la zone sont plus nombreuses, la valeur sera négative.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'residents.delta_arrived'; +UPDATE indicator SET translation = '{"fr": {"label": "Changement de résidence", "description": "Estime le nombre de personnes qui ont déménagé de la zone A à la zone B pendant le mois sélectionné par l\'utilisateur.", "method": "Pour chaque paire de zones, l\'indicateur de changement de résidence estime le nombre de personnes qui déménagent de la zone A à la zone B pendant le mois sélectionné par l\'utilisateur.\\n\\nL\'indicateur est calculé à partir du nombre d\'abonnés dont le lieu de résidence est passé de la zone A à la zone B pendant une période donnée.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'relocations.relocations'; +UPDATE indicator SET translation = '{"fr": {"label": "Différence de changements de résidence", "description": "Estime la variation du nombre de changements de résidence de la zone A vers la zone B entre une période de référence et le mois choisi par l\'utilisateur.", "method": "L\'indicateur de différence de changements de résidence estime la variation du nombre de changements de résidence de la zone A vers la zone B entre une période de référence et le mois sélectionné par l\'utilisateur.\\n\\nL\'indicateur est calculé à partir de l\'indicateur de changement de résidence et du nombre de changements de résidence de référence pendant une période de référence.\\n\\nSi le nombre de changements de résidence a augmenté, l\'indicateur aura une valeur positive ; si le nombre de changements de résidence a diminué, la valeur sera négative.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'relocations.relocations_diffwithref'; +UPDATE indicator SET translation = '{"fr": {"label": "Variation en pourcentage de la différence de changements de résidence", "description": "Estime la variation du nombre de changements de résidence de la zone A vers la zone B entre une période de référence et le mois choisi par l\'utilisateur, exprimée en pourcentage du nombre de changements de résidence de référence.", "method": "L\'indicateur de variation en pourcentage de la différence de changements de résidence estime la variation des changements de résidence de la zone A vers la zone B par rapport au nombre de changements de résidence entre ces zones pendant la période de référence. La différence est exprimée en pourcentage d\'une valeur de référence calculée pour la période de référence.\\n\\nL\'indicateur est calculé à partir de l\'indicateur de changements de résidence et du nombre de changements de résidence de référence pendant une période de référence.\\n\\nSi le nombre de changements de résidence a augmenté, l\'indicateur aura une valeur positive ; si le nombre de changements de résidence a diminué, la valeur sera négative.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'relocations.relocations_pctchangewithref'; +UPDATE indicator SET translation = '{"fr": {"label": "Anomalie des changements de résidence", "description": "Mesure l\'écart du nombre estimé de changements de résidence de la zone A vers la zone B pendant la période d\'intérêt par rapport au nombre de changements de résidence estimé pendant la période de référence, exprimé sous la forme d\'un score d\'anomalie (score z).", "method": "L\'indicateur d\'anomalie des changements de résidence mesure l\'écart entre le nombre estimé de changements de résidence de la zone A vers la zone B pendant le mois sélectionné par l\'utilisateur et le nombre de changements de résidence estimé pendant une période de référence, exprimé sous la forme d\'un score z.\\n\\nPour cet indicateur, une valeur positive supérieure à 3 indique une augmentation statistiquement significative du nombre de changements de résidence ; une valeur inférieure à -3 indique une diminution statistiquement significative des changements de résidence.\\n\\nCet indicateur décrit l\'ampleur du caractère inhabituel du nombre de changements de résidence de la zone A vers la zone B, compte tenu de l\'ampleur de la variation observée pendant la période de référence. Des valeurs absolues plus élevées indiquent un plus grand écart par rapport à la variation normale des changements de résidence , et donc une plus grande probabilité que le changement soit significatif. Des changements de la sorte pourraient être associés à des événements spécifiques ou causés par des problèmes techniques. Toutefois, des anomalies très importantes (valeurs absolues supérieures à 6) pourraient également indiquer un problème technique.\\n\\nNous calculons l\'indicateur d\'anomalie des changements de résidence en utilisant l\'indicateur de différence des changements de résidence et l\'écart absolu moyen du nombre de changements de résidence pendant une période de référence.\\n\\nL\'emplacement du domicile d\'un abonné est déterminé par la zone dans laquelle se trouve la tour de téléphonie cellulaire qui a acheminé le plus fréquemment le dernier événement réseau de l\'abonné (par exemple, un appel, un message SMS, ou des données mobiles) de la journée au cours des quatre semaines précédentes, avec une mise à jour mensuelle."}}' WHERE indicator_id = 'relocations.abnormality'; +UPDATE indicator SET translation = '{"fr": {"label": "Présence", "description": "Estime le nombre de personnes présentes dans une zone donnée le ou les jours sélectionnés par l\'utilisateur.", "method": "L\'indicateur de présence estime le nombre de personnes présentes dans une zone donnée à un moment donné du ou des jours sélectionnés par l\'utilisateur.\\n\\nNous calculons l\'indicateur de présence à partir du nombre d\'abonnés uniques qui ont été actifs dans une zone donnée le ou les jours choisis par l\'utilisateur.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'presence.presence'; +UPDATE indicator SET translation = '{"fr": {"label": "Présence par km²", "description": "Estime le nombre moyen de personnes présentes par kilomètre carré d\'une zone pendant le ou les jours sélectionnés par l\'utilisateur.", "method": "La présence par km² estime le nombre moyen de personnes présentes par kilomètre carré d\'une zone pendant le ou les jours sélectionnés par l\'utilisateur.\\n\\nL\'indicateur est calculé à partir de l\'indicateur de présence et de la taille géographique de la zone.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'presence.presence_perKm2'; +UPDATE indicator SET translation = '{"fr": {"label": "Différence de présence", "description": "Estime la différence entre le nombre de personnes présentes dans une zone pendant le ou les jours sélectionnés par l\'utilisateur et le nombre de personnes présentes pendant une période de référence.", "method": "L\'indicateur de différence de présence estime la différence entre le nombre de personnes présentes dans une zone pendant le ou les jours sélectionnés par l\'utilisateur et le nombre de personnes présentes pendant une période de référence.\\n\\nL\'indicateur est calculé à partir de l\'indicateur de présence et du nombre de référence de personnes pendant une période de référence.\\n\\nSi le nombre de personnes présentes dans la zone a augmenté, l\'indicateur aura une valeur positive ; si le nombre a diminué, la valeur sera négative.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'presence.presence_diffwithref'; +UPDATE indicator SET translation = '{"fr": {"label": "Variation en pourcentage de la différence de présence", "description": "Estime la variation du nombre de personnes présentes dans une zone au cours du ou des jours sélectionnés par l\'utilisateur par rapport au nombre de personnes présentes dans la zone pendant la période de référence, exprimée en pourcentage.", "method": "L\'indicateur de variation de présence en pourcentage estime la variation du nombre de personnes présentes dans une zone pendant le ou les jours sélectionnés par l\'utilisateur par rapport au nombre de personnes présentes dans la zone pendant la période de référence. La différence est exprimée en pourcentage d\'une valeur de référence calculée pour la période de référence.\\n\\nL\'indicateur est calculé à partir de l\'indicateur de présence et du nombre de référence de personnes pendant une période de référence.\\n\\nSi le nombre de personnes présentes dans la zone a augmenté, l\'indicateur aura une valeur positive ; si le nombre de personnes présentes dans la zone a diminué, la valeur sera négative.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'presence.presence_pctchangewithref'; +UPDATE indicator SET translation = '{"fr": {"label": "Anomalie", "description": "Mesure l\'écart du nombre de personnes présentes dans une zone donnée pendant le ou les jours sélectionnés par l\'utilisateur par rapport à une période de référence, exprimé sous la forme d\'un score d\'anomalie (score z).", "method": "L\'indicateur d\'anomalie de présence mesure l\'écart du nombre de personnes présentes dans une zone donnée pendant le ou les jours sélectionnés par l\'utilisateur par rapport à une période de référence, exprimé sous la forme d\'un score z.\\n\\nPour cet indicateur, une valeur positive supérieure à 3 indique une augmentation statistiquement significative du nombre de personnes présentes dans une zone donnée ; une valeur inférieure à -3 indique une diminution statistiquement significative de la présence.\\n\\nCet indicateur décrit l\'ampleur du caractère inhabituel du nombre de personnes dans une zone, compte tenu de l\'ampleur de la variation observée pendant la période de référence. Des valeurs absolues plus élevées indiquent un plus grand écart par rapport à la variation normale de présence, et donc une plus grande probabilité que le changement soit significatif. Des changements de la sorte pourraient être associés à des événements spécifiques ou causés par des problèmes techniques. Toutefois, des anomalies très importantes (valeurs absolues supérieures à 6) pourraient également indiquer un problème technique.\\n\\nL\'indicateur est calculé à partir de l\'indicateur de différence de présence et de l\'écart absolu moyen de présence pendant une période de référence.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'presence.abnormality'; +UPDATE indicator SET translation = '{"fr": {"label": "Déplacements entrants", "description": "Estime le nombre de déplacements dans une zone à partir d\'autres zones pendant le ou les jours sélectionnés par l\'utilisateur.", "method": "L\'indicateur des déplacements entrants estime le nombre de déplacements dans une zone à partir d\'autres zones pendant le ou les jours sélectionnés par l\'utilisateur. Lorsque les données indiquent des déplacements multiples entre les zones au cours d\'une même journée pour un abonné donné (de A à B, puis de B à C), l\'indicateur prend en compte tous les déplacements (AB, BC).\\n\\nÀ la différence de l\'indicateur des voyageurs entrants, qui ne compte qu\'une seule fois chaque abonné unique, cet indicateur inclut les déplacements multiples dans une zone par le même abonné.\\n\\nNous calculons l\'indicateur des déplacements entrants à partir de la somme des comptages des abonnés qui étaient présents dans une zone d\'intérêt après avoir été présents dans une autre zone pendant le ou les jours sélectionnés par l\'utilisateur.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'presence.trips_in'; +UPDATE indicator SET translation = '{"fr": {"label": "Déplacements sortants", "description": "Estime le nombre de déplacements d\'une zone vers une autre zone pendant le ou les jours sélectionnés par l\'utilisateur.", "method": "L\'indicateur de déplacements sortants estime le nombre de déplacements d\'une zone vers une autre zone au cours du ou des jours sélectionnés par l\'utilisateur. Lorsque les données indiquent plusieurs déplacements dans une même journée pour un abonné donné (de A à B, puis de B à C), l\'indicateur prend en compte tous les déplacements (AB, BC).\\n\\nÀ la différence de l\'indicateur de voyageurs sortants qui ne compte qu\'une seule fois chaque abonné unique, cet indicateur inclut également les déplacements multiples d\'un même abonné hors d\'une zone.\\n\\nNous calculons l\'indicateur des déplacements entrants à partir de la somme des comptages des abonnés qui étaient présents dans une autre zone après avoir été présents dans une zone d\'intérêt pendant le ou les jours sélectionnés par l\'utilisateur.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'presence.trips_out'; +UPDATE indicator SET translation = '{"fr": {"label": "Voyageurs", "description": "Estime le nombre de personnes qui visitent la zone B après avoir été présentes dans la zone A pendant le ou les jours sélectionnés par l\'utilisateur.", "method": "L\'indicateur de voyageurs estime le nombre de personnes qui visitent la zone B après avoir été présentes dans la zone A (c\'est-à-dire avoir voyagé de A à B) pendant le ou les jours sélectionnés par l\'utilisateur.\\n\\nNous calculons l\'indicateur de voyageurs à partir du nombre d\'abonnés qui étaient présents dans la zone B après avoir été présents dans la zone A au cours du ou des jours sélectionnés par l\'utilisateur.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'movements.travellers'; +UPDATE indicator SET translation = '{"fr": {"label": "Différence de voyageurs", "description": "Estime la variation du nombre de personnes voyageant de la zone A à B pendant une période donnée par rapport au nombre de base de voyageurs de A à B pendant une période de référence.", "method": "L\'indicateur de différence de voyageurs estime la variation du nombre de personnes voyageant de la zone A à la zone B pendant une période donnée par rapport au nombre de voyageurs de référence pendant une période de référence.\\n\\nSi le nombre de voyageurs a augmenté, l\'indicateur aura une valeur positive ; si le nombre de voyageurs a diminué, la valeur sera négative.\\n\\nNous calculons l\'indicateur de différence de voyageurs à partir de l\'indicateur de voyageurs et du nombre de référence de voyageurs entre des paires de zones pendant une période de référence.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'movements.travellers_diffwithref'; +UPDATE indicator SET translation = '{"fr": {"label": "Variation en pourcentage de la différence de voyageurs", "description": "Estime la variation du nombre de personnes voyageant de la zone A à B pendant le ou les jours sélectionnés par l\'utilisateur par rapport au nombre de référence de voyageurs de A à B pendant la période de référence, exprimée en pourcentage.", "method": "La variation en pourcentage de l\'indicateur de voyageurs estime la variation du nombre de personnes voyageant de la zone A à B pendant le ou les jours sélectionnés par l\'utilisateur par rapport au nombre de référence de voyageurs de A à B pendant la période de référence. La différence est exprimée en pourcentage d\'une valeur de référence calculée pour la période de référence.\\n\\nSi le nombre de voyageurs a augmenté, l\'indicateur aura une valeur positive ; si le nombre de voyageurs a diminué, la valeur sera négative.\\n\\nNous calculons le pourcentage de variation de l\'indicateur de différence de voyageurs à partir de l\'indicateur de voyageurs et du nombre de voyageurs de référence entre les paires de zones pendant le ou les jours sélectionnés par l\'utilisateur.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'movements.travellers_pctchangewithref'; +UPDATE indicator SET translation = '{"fr": {"label": "Anomalie", "description": "Mesure l\'écart entre le nombre estimé de personnes voyageant de la zone A à B pendant le ou les jours sélectionnés par l\'utilisateur et le nombre de voyageurs de A à B estimé pendant une période de référence, exprimé sous la forme d\'un score z.", "method": "L\'indicateur d\'anomalie des voyageurs mesure l\'écart entre le nombre estimé de personnes voyageant de la zone A à la zone B pendant le ou les jours sélectionnés par l\'utilisateur et le nombre de voyageurs de A à B estimé pendant une période de référence, exprimé sous la forme d\'un score z. \\n\\nPour cet indicateur, une valeur positive supérieure à 3 indique une augmentation statistiquement significative du nombre de voyageurs ; une valeur inférieure à -3 indique une diminution statistiquement significative.\\n\\nCet indicateur décrit l\'ampleur du caractère inhabituel du nombre de voyageurs de la zone A vers la zone B, compte tenu de l\'ampleur de la variation observée pendant la période de référence. Des valeurs absolues plus élevées indiquent un plus grand écart par rapport à la variation normale du nombre de voyageurs, et donc une plus grande probabilité que le changement soit significatif. Des changements de la sorte pourraient être associés à des événements spécifiques ou causés par des problèmes techniques. Toutefois, des anomalies très importantes (valeurs absolues supérieures à 6) pourraient également indiquer un problème technique.\\n\\nNous calculons l\'indicateur d\'anomalie des voyageurs en combinant l\'indicateur de différence des voyageurs et l\'écart absolu moyen du nombre de voyageurs entre des paires de zones pendant une période de référence.\\n\\nLes abonnés sont considérés comme ayant été présents dans une zone un jour donné lorsqu\'un événement réseau (par exemple un appel) est acheminé par une tour de téléphonie cellulaire dans cette zone."}}' WHERE indicator_id = 'movements.abnormality';