What to do when…
The messages and situations the system actually shows you, what each one means, and what to do about it. Nothing here is invented: every quoted message was read in the product.
The general rule this manual follows
A screen in this system tries never to show you a plausible lie. When it cannot do something, or when a figure is narrower or wider than it looks, it says so in a sentence. So the first thing to do with anything surprising is read the banner above the numbers — very often the answer is already there.
Que faire quand…
Les messages et les situations que le système vous montre réellement, ce que chacun veut dire, et quoi faire. Rien ici n'est inventé : chaque message cité a été relevé dans le produit.
La règle générale que ce manuel suit
Un écran de ce système essaie de ne jamais vous montrer un mensonge plausible. Quand il ne peut pas faire quelque chose, ou quand un chiffre est plus étroit ou plus large qu'il n'en a l'air, il le dit par une phrase. La première chose à faire devant quoi que ce soit de surprenant est donc de lire le bandeau au-dessus des nombres — bien souvent la réponse y est déjà.
Qué hacer cuando…
Los mensajes y las situaciones que el sistema le muestra realmente, qué significa cada uno, y qué hacer. Nada de esto está inventado: cada mensaje citado se leyó en el producto.
La regla general que sigue este manual
Una pantalla de este sistema procura no mostrarle nunca una mentira plausible. Cuando no puede hacer algo, o cuando una cifra es más estrecha o más amplia de lo que parece, lo dice con una frase. Así que lo primero que hay que hacer ante cualquier cosa sorprendente es leer el aviso encima de las cifras — muy a menudo la respuesta ya está ahí.
Scheduling and routing
A card jumped to another day and I did not move it
Most likely: a stale scheduler proposal is still on screen. Committing a tour forgets the proposal, but unfreezing a card does not — the old proposal then re-applies its own date to the card you just unfroze.
Do: re-run 📅 Re-run Jobs Scheduler so what you are looking at matches what is stored. Nothing was written to the database by that jump.
My routes disappeared after someone re-ran the scheduler
Meaning: an unlocked route is provisional, and a scheduler run drops it.
Do: re-run Fleet Routing. Then freeze (🔒) the routes you have committed to — a pin (📌) does not protect a route, it only stops the scheduler moving the card.
“Your hold on this day lapses in mm:ss”
Meaning: while you work on the board you hold those days so nobody else can reschedule them. This is a countdown, not an error.
Do: nothing — any click or keystroke keeps it, and there is a Keep it button if you are reading rather than clicking. Nothing you have done is lost when it lapses.
“Refused — someone else is scheduling N days in this horizon… Nothing was changed.”
Meaning: a colleague is holding a day inside your horizon. Committing rewrites the whole horizon, so one held day refuses all of it.
Do: wait — their hold frees itself when they stop — or call them. Your plan is intact; nothing was written.
“Defaults — not chosen for this organization”
Meaning: nobody has ever saved day settings for your organization, so the server is using starting-point values. Every utilization percentage computed on them is provisional.
Do: an administrator sets them in ⚙️ Settings ▸ Edit on server. Until then, do not quote “% of the day” figures to anyone.
“Material gate off — this run ignored stock entirely”
Meaning: parts were tracked but not gated. Jobs kept their day whether or not the pieces exist, and a truck can leave without them.
Do: if that is not what you want, turn on Gate scheduling on material stock in Settings, then re-run.
A job is in “Could not be placed”, not just late
Meaning: these are not the same thing. A job pushed to a later day is planned. A job that could not be placed is not planned at all.
Do: read the reason next to it and act on that — add a capable truck, widen a window, split the job. It will stay unplanned until you do.
A job is listed under “Held back by parts”
Meaning: the material gate is on and its parts cannot be there. Note that this is a different panel from “Why work overflowed its day”, which only ever means the day was full.
Do: check the material's lead time and receipts on the Materials tab. If the job was pinned and got unpinned in red, that is deliberate: a pin to a date you cannot buy for is a fiction.
A card carries a ⚠ not routed chip
Meaning: the optimizer could not fit it. Committing the tour marked it and moved nothing. It keeps the reason and waits in Unscheduled.
Do: nothing urgent — the next scheduler run picks it up like any undated job.
Figures that are narrower or wider than they look
The map shows more than my team
Meaning: the map is not narrowed by the Operations Team selector. It draws every work order and asset in the organization, and prints a banner saying so.
Do: read the banner before counting anything on it.
“This server does not narrow the dashboard by operations team”
Meaning: you asked for one team; the figures cover the whole organization. Nothing in the numbers themselves would have shown this.
Do: treat them as organization-wide, and report the server version to support.
Two cards read “—” when I pick a team
Meaning: orphan episodes and batches waiting have no path to a team. Showing the organization total under a team's name would be a true figure in the wrong place.
Do: pick All Operations Teams to see them.
A bar says Water (unclassified)
Meaning: those work orders carry a fallback type invented so the record would resolve — nobody chose it. The bar is a count of unclassified Water jobs, not of one kind of job.
Do: a large unclassified bar is a catalogue to fix, not a workload to plan.
Two people ran the same saved report and got different numbers
Meaning: correct behaviour. A shared report runs with the reader's scope. You share the question, not the answer.
Things that are refused
“This screen is reserved for the account administrator”
Meaning: Activity log, Users and Licences in the Console are administrator-only.
Do: ask your administrator. This is not a fault.
“User management is not enabled on this server yet”
Meaning: not a refusal of your rights — the function is not configured. It is a deliberately different message so that nobody spends an hour hunting for a missing role.
Do: report it; it is a server configuration, not your account.
The “add a user” form is not there
Meaning: the server already knows it cannot create accounts, and shows its reason instead of a form it would refuse after you typed everything.
A time zone was refused
Meaning: you entered an abbreviation such as EST. That would freeze the
organization in winter time all year.
Do: use a full name like America/Toronto.
Saving day settings was refused
Meaning: somebody else saved between your reading the screen and your pressing Save. You were not allowed to overwrite them silently.
Do: reload and redo your change.
Everyone on my team was refused at once, this morning
Meaning: almost certainly the licence expired. It is checked on every request, and an otherwise perfectly valid sign-in is refused once it lapses.
Do: an administrator opens 🔑 Licences, which says how many days remain. Watch that figure; this screen exists because of exactly this morning.
Data that is not arriving
“The readings are not coming through”
Do: open the Console's 🔄 Ingestion. Compare last received with last valid: if data arrives but none of it is valid, it is a format problem, and the quarantine table names the reason and the offending field. If a source is silent, the panel says so — “no batch for 37 h. Check the sender.”
Careful: “everything is processed” and “nothing is arriving any more” both show zero waiting. Only that silence line distinguishes them.
Problems have arrived that match no asset
Meaning: the Console's dashboard says so in words. Those work orders have no address and no zone, so no crew can be sent.
Do: the usual cause is a device serial missing from the imported register. Fix the register.
I exported from Data Exchange and the file is out of date
Meaning: 🔄 Data Exchange moves the local store of that browser, not the platform. No working list reads that store any more.
Do: use Reports to get data out of the system.
Empty screens
Routes is empty
Most likely: a tour was computed but never committed.
Do: run Fleet Routing and press 💾 Save & commit tour.
The activity journal shows nothing
Three messages, three different situations — read which one you have:
- “Sign in again…” — your session lapsed.
- “Activity journal unavailable…” — the service is not answering. The screen shows nothing rather than falling back to this browser's private trace.
- “No events for this filter.” — it answered, and there is nothing.
A Console screen just names another application
Meaning: you reached one of the five doors by an old bookmark. It is not a fault.
Do: use the button it gives you.
Ordonnancement et tournées
Une carte a sauté à un autre jour et je ne l'ai pas déplacée
Le plus probable : une proposition d'ordonnanceur périmée est encore à l'écran. Engager une tournée oublie la proposition, mais dégeler une carte ne l'oublie pas — l'ancienne proposition repose alors sa propre date sur la carte que vous venez de dégeler.
À faire : relancer 📅 Re-run Jobs Scheduler pour que ce que vous regardez corresponde à ce qui est enregistré. Rien n'a été écrit en base par ce saut.
Mes tournées ont disparu après que quelqu'un a relancé l'ordonnanceur
Sens : une tournée non verrouillée est provisoire, et une exécution de l'ordonnanceur la laisse tomber.
À faire : relancer Fleet Routing. Puis geler (🔒) les tournées sur lesquelles vous vous êtes engagé — une épingle (📌) ne protège pas une tournée, elle empêche seulement l'ordonnanceur de déplacer la carte.
« Your hold on this day lapses in mm:ss »
Sens : pendant que vous travaillez sur le tableau, vous tenez ces journées pour que personne d'autre ne les replanifie. C'est un décompte, pas une erreur.
À faire : rien — tout clic ou toute frappe la conserve, et il y a un bouton Keep it si vous lisez plutôt que vous ne cliquez. Rien de ce que vous avez fait n'est perdu quand elle expire.
« Refused — someone else is scheduling N days… Nothing was changed. »
Sens : un collègue tient une journée dans votre horizon. Engager réécrit tout l'horizon : une seule journée tenue refuse la totalité.
À faire : attendre — sa tenue se libère quand il s'arrête — ou l'appeler. Votre plan est intact ; rien n'a été écrit.
« Defaults — not chosen for this organization »
Sens : personne n'a jamais enregistré de réglages de journée pour votre organisation, donc le serveur emploie des valeurs de départ. Tout taux d'utilisation calculé dessus est provisoire.
À faire : un administrateur les pose dans ⚙️ Settings ▸ Edit on server. D'ici là, ne citez à personne un « % de la journée ».
« Material gate off — this run ignored stock entirely »
Sens : les pièces étaient suivies mais pas bloquantes. Les travaux ont gardé leur journée que les pièces existent ou non, et un camion peut partir sans elles.
À faire : si ce n'est pas ce que vous voulez, activez Gate scheduling on material stock dans les réglages, puis relancez.
Un travail est dans « Could not be placed », pas seulement en retard
Sens : ce n'est pas la même chose. Un travail repoussé plus tard est planifié. Un travail impossible à placer n'est pas planifié du tout.
À faire : lire la raison à côté et agir dessus — ajouter un camion capable, élargir une fenêtre, découper le travail. Il restera non planifié tant que vous ne l'aurez pas fait.
Un travail est listé sous « Held back by parts »
Sens : la barrière matériel est active et ses pièces ne peuvent pas être là. Notez que c'est un panneau différent de « Why work overflowed its day », qui ne veut jamais dire que la journée était pleine.
À faire : vérifier le délai d'approvisionnement et les réceptions dans l'onglet Materials. Si le travail était épinglé et s'est fait désépingler en rouge, c'est voulu : une épingle sur une date pour laquelle on ne peut pas acheter est une fiction.
Une carte porte une pastille ⚠ not routed
Sens : l'optimiseur n'a pas pu la caser. Engager la tournée l'a marquée et n'a rien déplacé. Elle garde la raison et attend dans Unscheduled.
À faire : rien d'urgent — la prochaine exécution de l'ordonnanceur la reprend comme n'importe quel travail sans date.
Des chiffres plus étroits ou plus larges qu'ils n'en ont l'air
La carte montre plus que mon équipe
Sens : la carte n'est pas restreinte par le sélecteur d'Operations Team. Elle dessine tous les bons et tous les actifs de l'organisation, et affiche un bandeau qui le dit.
À faire : lire le bandeau avant de compter quoi que ce soit dessus.
« This server does not narrow the dashboard by operations team »
Sens : vous avez demandé une équipe ; les chiffres couvrent l'organisation entière. Rien dans les nombres eux-mêmes ne l'aurait montré.
À faire : les traiter comme des chiffres d'organisation, et signaler la version du serveur au soutien.
Deux cartes affichent « — » quand je choisis une équipe
Sens : orphan episodes et batches waiting n'ont aucun chemin vers une équipe. Montrer le total de l'organisation sous le nom d'une équipe serait un chiffre vrai au mauvais endroit.
À faire : choisir « All Operations Teams » pour les voir.
Une barre dit Water (unclassified)
Sens : ces bons portent un type de repli fabriqué pour qu'une résolution aboutisse — personne ne l'a choisi. La barre compte des travaux Eau non classés, pas une sorte de travail.
À faire : une grosse barre non classée est un catalogue à corriger, pas une charge à planifier.
Deux personnes ont lancé le même rapport gardé et ont eu des nombres différents
Sens : comportement correct. Un rapport partagé s'exécute avec la portée du lecteur. Vous partagez la question, pas la réponse.
Ce qui est refusé
« Cet écran est réservé à l'administrateur du compte »
Sens : le journal des actions, les utilisateurs et les licences de la Console sont réservés à l'administrateur.
À faire : demander à votre administrateur. Ce n'est pas une panne.
« La gestion des utilisateurs n'est pas encore activée sur ce serveur »
Sens : ce n'est pas un refus de vos droits — la fonction n'est pas configurée. C'est un message volontairement différent, pour que personne ne passe une heure à chercher un rôle manquant.
À faire : le signaler ; c'est une configuration serveur, pas votre compte.
Le formulaire « ajouter un utilisateur » n'est pas là
Sens : le serveur sait déjà qu'il ne peut pas créer de compte, et montre sa cause au lieu d'un formulaire qu'il refuserait après que vous ayez tout saisi.
Un fuseau horaire a été refusé
Sens : vous avez saisi une abréviation comme EST. Elle figerait l'organisation
à l'heure d'hiver toute l'année.
À faire : employer un nom complet comme America/Toronto.
L'enregistrement des réglages de journée a été refusé
Sens : quelqu'un d'autre a enregistré entre le moment où vous avez lu l'écran et celui où vous avez pressé Save. On ne vous a pas laissé l'écraser en silence.
À faire : recharger et refaire votre changement.
Toute mon équipe s'est fait refuser en même temps, ce matin
Sens : très probablement la licence a expiré. Elle est vérifiée à chaque requête, et une connexion par ailleurs parfaitement valide est refusée dès qu'elle lapse.
À faire : un administrateur ouvre 🔑 Licences, qui dit combien de jours restent. Surveillez ce chiffre ; cet écran existe à cause exactement de ce matin-là.
De la donnée qui n'arrive pas
« Les relevés ne rentrent plus »
À faire : ouvrir 🔄 Ingestion dans la Console. Comparer dernière réception et dernière valide : si de la donnée arrive mais qu'aucune n'est valide, c'est un problème de format, et le tableau de quarantaine nomme le motif et le champ fautif. Si une source se tait, le panneau le dit — « aucun lot depuis 37 h. Vérifier l'émetteur. »
Attention : « tout est traité » et « rien n'arrive plus » affichent tous deux zéro en attente. Seule cette ligne de silence les distingue.
Des problèmes sont arrivés sans correspondre à aucun actif
Sens : le tableau de bord de la Console le dit en toutes lettres. Ces bons n'ont ni adresse ni zone : aucune équipe ne peut être envoyée.
À faire : la cause habituelle est un numéro de série absent du registre importé. Corriger le registre.
J'ai exporté depuis Data Exchange et le fichier est périmé
Sens : 🔄 Data Exchange déplace le magasin local de ce navigateur, pas la plateforme. Plus aucune liste de travail ne lit ce magasin.
À faire : employer Reports pour sortir des données du système.
Des écrans vides
Routes est vide
Le plus probable : une tournée a été calculée mais jamais engagée.
À faire : lancer Fleet Routing et presser 💾 Save & commit tour.
Le journal d'activité n'affiche rien
Trois messages, trois situations différentes — lisez lequel vous avez :
- « Sign in again… » — votre session a expiré.
- « Activity journal unavailable… » — le service ne répond pas. L'écran ne montre rien plutôt que de retomber sur la trace privée de ce navigateur.
- « No events for this filter. » — il a répondu, et il n'y a rien.
Un écran de la Console ne fait que nommer une autre application
Sens : vous avez atteint une des cinq portes par un ancien signet. Ce n'est pas une panne.
À faire : employer le bouton qu'il vous donne.
Programación y rutas
Una tarjeta saltó a otro día y yo no la moví
Lo más probable: una propuesta del programador caducada sigue en pantalla. Comprometer una ruta olvida la propuesta, pero descongelar una tarjeta no — la propuesta antigua vuelve entonces a poner su propia fecha en la tarjeta que acaba de descongelar.
Hacer: relanzar 📅 Re-run Jobs Scheduler para que lo que mira coincida con lo guardado. Ese salto no escribió nada en la base de datos.
Mis rutas desaparecieron después de que alguien relanzara el programador
Significa: una ruta no bloqueada es provisional, y una ejecución del programador la descarta.
Hacer: relanzar Fleet Routing. Luego congelar (🔒) las rutas con las que se ha comprometido — una chincheta (📌) no protege una ruta, solo impide que el programador mueva la tarjeta.
«Your hold on this day lapses in mm:ss»
Significa: mientras trabaja en el tablero retiene esas jornadas para que nadie más las replanifique. Es una cuenta atrás, no un error.
Hacer: nada — cualquier clic o tecla la conserva, y hay un botón Keep it si está leyendo en vez de presionando. Nada de lo que ha hecho se pierde cuando expira.
«Refused — someone else is scheduling N days… Nothing was changed.»
Significa: un compañero retiene una jornada dentro de su horizonte. Comprometer reescribe todo el horizonte: una sola jornada retenida rechaza el conjunto.
Hacer: esperar — su retención se libera cuando él para — o llamarle. Su plan está intacto; no se escribió nada.
«Defaults — not chosen for this organization»
Significa: nadie ha guardado nunca ajustes de jornada para su organización, así que el servidor usa valores de partida. Todo porcentaje de utilización calculado sobre ellos es provisional.
Hacer: un administrador los fija en ⚙️ Settings ▸ Edit on server. Hasta entonces, no cite a nadie un «% de la jornada».
«Material gate off — this run ignored stock entirely»
Significa: las piezas estaban seguidas pero no bloqueantes. Los trabajos conservaron su jornada existieran o no las piezas, y un camión puede salir sin ellas.
Hacer: si no es lo que quiere, active Gate scheduling on material stock en los ajustes, y relance.
Un trabajo está en «Could not be placed», no solo atrasado
Significa: no es lo mismo. Un trabajo empujado a un día posterior sí está planificado. Un trabajo imposible de ubicar no está planificado en absoluto.
Hacer: leer el motivo que tiene al lado y actuar sobre él — añadir un camión capaz, ampliar una ventana, dividir el trabajo. Seguirá sin planificar hasta que lo haga.
Un trabajo aparece bajo «Held back by parts»
Significa: la barrera de material está activa y sus piezas no pueden estar. Fíjese en que es un panel distinto de «Why work overflowed its day», que solo significa nunca más que la jornada estaba llena.
Hacer: revisar el plazo de aprovisionamiento y las recepciones en la pestaña Materials. Si el trabajo estaba fijado y se desfijó en rojo, es deliberado: una chincheta en una fecha para la que no se puede comprar es una ficción.
Una tarjeta lleva una etiqueta ⚠ not routed
Significa: el optimizador no pudo encajarla. Comprometer la ruta la marcó y no movió nada. Conserva el motivo y espera en Unscheduled.
Hacer: nada urgente — la siguiente ejecución del programador la recoge como cualquier trabajo sin fecha.
Cifras más estrechas o más amplias de lo que parecen
El mapa muestra más que mi equipo
Significa: el mapa no está restringido por el selector de Operations Team. Dibuja todas las órdenes y activos de la organización, e imprime un aviso que lo dice.
Hacer: leer el aviso antes de contar nada sobre él.
«This server does not narrow the dashboard by operations team»
Significa: usted pidió un equipo; las cifras cubren la organización entera. Nada en las cifras mismas lo habría mostrado.
Hacer: tratarlas como cifras de organización, e informar al soporte de la versión del servidor.
Dos tarjetas muestran «—» cuando elijo un equipo
Significa: orphan episodes y batches waiting no tienen ningún camino hacia un equipo. Mostrar el total de la organización bajo el nombre de un equipo sería una cifra cierta en el lugar equivocado.
Hacer: elegir «All Operations Teams» para verlas.
Una barra dice Water (unclassified)
Significa: esas órdenes llevan un tipo de reserva fabricado para que una resolución cuadrara — nadie lo eligió. La barra cuenta trabajos de Agua sin clasificar, no una clase de trabajo.
Hacer: una barra sin clasificar grande es un catálogo que corregir, no una carga que planificar.
Dos personas ejecutaron el mismo informe guardado y obtuvieron cifras distintas
Significa: comportamiento correcto. Un informe compartido se ejecuta con el alcance del lector. Usted comparte la pregunta, no la respuesta.
Lo que se rechaza
«Esta pantalla está reservada al administrador de la cuenta»
Significa: el registro de acciones, los usuarios y las licencias de la Consola son solo para el administrador.
Hacer: pedírselo a su administrador. No es una avería.
«La gestión de usuarios aún no está activada en este servidor»
Significa: no es un rechazo de sus derechos — la función no está configurada. Es un mensaje deliberadamente distinto, para que nadie pase una hora buscando un rol que falta.
Hacer: informarlo; es una configuración del servidor, no su cuenta.
El formulario «añadir un usuario» no está
Significa: el servidor ya sabe que no puede crear cuentas, y muestra su causa en lugar de un formulario que rechazaría después de que usted lo tecleara todo.
Se rechazó una zona horaria
Significa: introdujo una abreviatura como EST. Congelaría la organización en
horario de invierno todo el año.
Hacer: usar un nombre completo como America/Toronto.
Se rechazó el guardado de los ajustes de jornada
Significa: otra persona guardó entre el momento en que usted leyó la pantalla y el momento en que presionó Save. No se le dejó pisarla en silencio.
Hacer: recargar y rehacer su cambio.
Todo mi equipo fue rechazado a la vez, esta mañana
Significa: casi seguro que la licencia ha caducado. Se comprueba en cada petición, y un inicio de sesión por lo demás perfectamente válido se rechaza en cuanto caduca.
Hacer: un administrador abre 🔑 Licencias, que dice cuántos días quedan. Vigile esa cifra; esta pantalla existe exactamente por esa mañana.
Datos que no llegan
«Las lecturas ya no entran»
Hacer: abrir 🔄 Ingesta en la Consola. Comparar última recepción con última válida: si llegan datos pero ninguno es válido, es un problema de formato, y la tabla de cuarentena nombra el motivo y el campo culpable. Si una fuente calla, el panel lo dice — «ningún lote desde hace 37 h. Verificar el emisor.»
Cuidado: «todo está procesado» y «ya no llega nada» muestran ambos cero en espera. Solo esa línea de silencio los distingue.
Han llegado problemas que no corresponden a ningún activo
Significa: el tablero de la Consola lo dice con todas las letras. Esas órdenes no tienen ni dirección ni zona: no se puede enviar ninguna cuadrilla.
Hacer: la causa habitual es un número de serie ausente del registro importado. Corregir el registro.
Exporté desde Data Exchange y el archivo está caducado
Significa: 🔄 Data Exchange mueve el almacén local de ese navegador, no la plataforma. Ninguna lista de trabajo lee ya ese almacén.
Hacer: usar Reports para sacar datos del sistema.
Pantallas vacías
Routes está vacía
Lo más probable: se calculó una ruta pero nunca se comprometió.
Hacer: lanzar Fleet Routing y presionar 💾 Save & commit tour.
El registro de actividad no muestra nada
Tres mensajes, tres situaciones distintas — lea cuál tiene:
- «Sign in again…» — su sesión caducó.
- «Activity journal unavailable…» — el servicio no responde. La pantalla no muestra nada en lugar de recurrir a la traza privada de este navegador.
- «No events for this filter.» — respondió, y no hay nada.
Una pantalla de la Consola solo nombra otra aplicación
Significa: llegó a una de las cinco puertas por un marcador antiguo. No es una avería.
Hacer: usar el botón que le da.
Glossary
The words this system uses, in the sense it uses them. Where a word means something narrower here than in ordinary speech, that is said.
Glossaire
Les mots que ce système emploie, au sens où il les emploie. Quand un mot a ici un sens plus étroit que dans le langage courant, c'est dit.
Glosario
Las palabras que este sistema usa, en el sentido en que las usa. Cuando una palabra tiene aquí un sentido más estrecho que en el lenguaje corriente, se dice.
| TermTermeTérmino | What it means hereCe que cela veut dire iciQué significa aquí |
|---|---|
| Tenant · locataire | Your organization. All your data lives inside it and never crosses into another. The label is always on screen. Votre organisation. Toutes vos données y vivent et ne passent jamais dans une autre. L'étiquette est toujours à l'écran. Su organización. Todos sus datos viven dentro y nunca pasan a otra. La etiqueta está siempre en pantalla. |
| Operations Team | A sharing boundary inside one organization — who sees which work. Not a crew and not a department. Une frontière de partage à l'intérieur d'une organisation — qui voit quel travail. Ni un équipage ni un service. Una frontera de reparto dentro de una organización — quién ve qué trabajo. Ni una cuadrilla ni un departamento. |
| Account | A serviced site at a civic address. Assets hang under it; work orders are opened on it. Un site desservi, à une adresse civique. Les actifs y sont rattachés ; les bons s'y ouvrent. Un sitio atendido, en una dirección civil. Los activos cuelgan de ella; las órdenes se abren sobre ella. |
| Asset | One physical piece of equipment in the field, with a serial number and a place. Un équipement physique sur le terrain, avec un numéro de série et un emplacement. Un equipo físico en el campo, con un número de serie y un lugar. |
| Category | The top grouping of assets (Water, Lighting…). It governs who may see them and which work applies. Le regroupement supérieur des actifs (Eau, Éclairage…). Il commande qui peut les voir et quel travail s'y applique. La agrupación superior de los activos (Agua, Alumbrado…). Gobierna quién puede verlos y qué trabajo aplica. |
| Asset type | The kind of thing inside a category — a water meter, a pressure logger. La sorte de chose à l'intérieur d'une catégorie — un compteur d'eau, un enregistreur de pression. La clase de cosa dentro de una categoría — un contador de agua, un registrador de presión. |
| Zone | A named part of the territory. In DFO it is drawn on the map; elsewhere it is a label carried by the asset. Une part nommée du territoire. Dans DFO elle se dessine sur la carte ; ailleurs c'est une étiquette portée par l'actif. Una parte nombrada del territorio. En DFO se dibuja sobre el mapa; en otros sitios es una etiqueta que lleva el activo. |
| Campaign | One deployment run: a territory, a plan, a sequence, crews and a queue of points to install. Une campagne de pose : un territoire, un plan, une séquence, des équipages et une file de points à poser. Una campaña de despliegue: un territorio, un plan, una secuencia, cuadrillas y una cola de puntos por instalar. |
| Commissioning | Turning an installed point into an asset the other applications can see. It happens on site. Faire d'un point posé un actif que les autres applications voient. Cela se fait sur place. Convertir un punto instalado en un activo que las otras aplicaciones ven. Ocurre en el sitio. |
| Work order · WO |
One job to do on one asset, by a date, at a priority. Identified by a readable number like WO-2026-000024.
Un travail à faire sur un actif, pour une date, à une priorité. Identifié par un numéro lisible comme WO-2026-000024.
Un trabajo que hacer sobre un activo, para una fecha, con una prioridad. Identificado por un número legible como WO-2026-000024. |
| Job type | The template for a kind of work: how long it takes, who and what it needs, which parts. Each work order keeps its own copy. Le gabarit d'une sorte de travail : sa durée, qui et quoi il exige, quelles pièces. Chaque bon en garde sa propre copie. La plantilla de una clase de trabajo: cuánto dura, qué y quién exige, qué piezas. Cada orden guarda su propia copia. |
| Status | Where a work order is in its cycle. A code, not a word — it governs which moves are allowed. Never translated on screen. Où en est un bon dans son cycle. Un code, pas un mot — il commande les déplacements permis. Jamais traduit à l'écran. En qué punto de su ciclo está una orden. Un código, no una palabra — gobierna qué movimientos se permiten. Nunca traducido en pantalla. |
| Target date | The day a work order should be done by. Filled from the priority if you leave it empty; always editable. Le jour pour lequel un bon devrait être fait. Rempli d'après la priorité si vous le laissez vide ; toujours modifiable. El día para el que una orden debería estar hecha. Se rellena según la prioridad si lo deja vacío; siempre editable. |
| Effective urgency | Priority plus how late the job already is. Every 3 days overdue lifts it one tier, up to three — so nothing sits forgotten. La priorité plus le retard déjà accumulé. Chaque tranche de 3 jours fait monter d'un cran, jusqu'à trois — rien ne reste oublié. La prioridad más el retraso ya acumulado. Cada 3 días de retraso suben un escalón, hasta tres — así nada queda olvidado. |
| Trade · technician type | What a technician is qualified for. A job type demands a trade, not a person. Ce pour quoi un technicien est qualifié. Un type de travail exige un métier, pas une personne. Aquello para lo que un técnico está cualificado. Un tipo de trabajo exige un oficio, no una persona. |
| Crew | Technicians tied to one truck, valid for a date range. In crew mode a crew never splits mid-day. Des techniciens liés à un camion, valides sur une plage de dates. En mode équipage, un équipage ne se sépare jamais en cours de journée. Técnicos ligados a un camión, válidos para un rango de fechas. En modo cuadrilla, una cuadrilla nunca se separa a media jornada. |
| Depot | Where a truck starts and ends its day, and reloads. Où un camion commence et finit sa journée, et se recharge. Donde un camión empieza y acaba su jornada, y recarga. |
| Daily capacity | How much of a job type one truck can carry in a day. The stored value is per truck, multiplied by the trucks on the day. Combien d'un type de travail un camion peut porter en une journée. La valeur enregistrée est par camion, multipliée par les camions du jour. Cuánto de un tipo de trabajo puede llevar un camión en un día. El valor guardado es por camión, multiplicado por los camiones del día. |
| Scheduler | Decides which day, and which crew or trade. Thinks in days. One button, run by the server; nothing is saved until you commit. Décide quel jour, et quel équipage ou métier. Raisonne en journées. Un bouton, exécuté par le serveur ; rien n'est enregistré avant d'engager. Decide qué día, y qué cuadrilla u oficio. Razona en jornadas. Un botón, ejecutado por el servidor; no se guarda nada hasta comprometer. |
| Optimizer · Fleet routing | Decides which truck, which people and the order of the stops, using real road travel times. Thinks in minutes and kilometres. Décide quel camion, quelles personnes et l'ordre des arrêts, avec des temps de trajet routiers réels. Raisonne en minutes et en kilomètres. Decide qué camión, qué personas y el orden de las paradas, con tiempos de viaje reales por carretera. Razona en minutos y kilómetros. |
| Horizon | How many days ahead the scheduler plans. A job that fits in none of them is “could not be placed”. Combien de jours à l'avance l'ordonnanceur planifie. Un travail qui ne rentre dans aucun est « impossible à placer ». Cuántos días por delante planifica el programador. Un trabajo que no cabe en ninguno es «imposible de ubicar». |
| Pin · 📌 | The scheduler will not move this card — but Fleet Routing still can. Any manual move sets it. L'ordonnanceur ne déplacera pas cette carte — mais Fleet Routing le peut encore. Tout déplacement manuel la pose. El programador no moverá esta tarjeta — pero Fleet Routing todavía puede. Todo movimiento manual la pone. |
| Freeze · 🔒 | A committed route. Both engines skip it. Freeze what you have promised; a pin does not protect a route. Une tournée engagée. Les deux moteurs la sautent. Gelez ce que vous avez promis ; une épingle ne protège pas une tournée. Una ruta comprometida. Ambos motores la saltan. Congele lo prometido; una chincheta no protege una ruta. |
| Problematic · ⚑ | Parked out of scheduling and routing for a person to fix the cause. Nothing automatic touches it until Resolve. Mis hors ordonnancement et hors routage pour qu'une personne règle la cause. Rien d'automatique n'y touche avant Resolve. Apartado de la programación y del enrutado para que una persona arregle la causa. Nada automático lo toca hasta Resolve. |
| Route · tour | One truck's day: its stops in order, with arrival times. It exists only once committed. La journée d'un camion : ses arrêts dans l'ordre, avec les heures d'arrivée. Elle n'existe qu'une fois engagée. La jornada de un camión: sus paradas en orden, con horas de llegada. Solo existe una vez comprometida. |
| Alarm · episode | A sensor event that raises a service call. It escalates an existing work order rather than creating a second. Un événement de capteur qui déclenche une intervention. Il rehausse un bon existant plutôt que d'en créer un second. Un evento de sensor que provoca una intervención. Eleva una orden existente en lugar de crear una segunda. |
| Ingestion | Taking in what the field sends. Data arrives in batches; what is refused is kept in quarantine with its reason. L'admission de ce que le terrain envoie. La donnée arrive par lots ; ce qui est refusé est gardé en quarantaine avec son motif. La admisión de lo que el campo envía. Los datos llegan por lotes; lo rechazado se guarda en cuarentena con su motivo. |
| Orphan | Something received that matches no asset on your register — so it has no address and no zone, and no crew can be sent. Quelque chose de reçu qui ne correspond à aucun actif du registre — donc sans adresse ni zone, et aucune équipe ne peut être envoyée. Algo recibido que no corresponde a ningún activo del registro — sin dirección ni zona, y no se puede enviar ninguna cuadrilla. |
| List | Your organisation's vocabulary, edited in the Console and shown in each person's language. Codes the software reads are not lists. Le vocabulaire de votre organisation, édité dans la Console et affiché dans la langue de chacun. Les codes que le logiciel lit ne sont pas des listes. El vocabulario de su organización, editado en la Consola y mostrado en el idioma de cada cual. Los códigos que lee el software no son listas. |
| Role | What a person may do. You assign which role someone holds; what a role means is never editable from a screen. Ce qu'une personne peut faire. Vous attribuez le rôle que quelqu'un porte ; ce qu'un rôle veut dire n'est modifiable depuis aucun écran. Lo que una persona puede hacer. Usted asigna qué rol tiene alguien; lo que un rol significa no se modifica desde ninguna pantalla. |
| Licence | What your organization is subscribed to. It builds your menu, and it is checked on every request — an expired one refuses everybody at once. Ce à quoi votre organisation est abonnée. Elle bâtit votre menu, et elle est vérifiée à chaque requête — expirée, elle refuse tout le monde d'un coup. A qué está suscrita su organización. Construye su menú, y se comprueba en cada petición — caducada, rechaza a todos a la vez. |
| Activity log | The shared, server-side trace of who did what in your organization. Never this browser's private history. La trace partagée, côté serveur, de qui a fait quoi dans votre organisation. Jamais l'historique privé de ce navigateur. La traza compartida, en el servidor, de quién hizo qué en su organización. Nunca el historial privado de este navegador. |
Screen index
Every screen this manual explains, and where to read about it. Screen names are given exactly as they appear — in English for DFO, AMS and WOM, whose shells are English, and in your own language for the Console, which is translated.
Index des écrans
Chaque écran que ce manuel explique, et où le lire. Les noms d'écran sont donnés exactement tels qu'ils apparaissent — en anglais pour DFO, AMS et WOM, dont les coquilles sont en anglais, et dans votre langue pour la Console, qui est traduite.
Índice de pantallas
Cada pantalla que este manual explica, y dónde leerla. Los nombres de pantalla se dan exactamente como aparecen — en inglés para DFO, AMS y WOM, cuyas envolturas están en inglés, y en su idioma para la Consola, que está traducida.
Before the applicationsAvant les applicationsAntes de las aplicaciones
🛰️ DFO — chapter 1chapitre 1capítulo 1
| 🔐 Tenant | ① 📥 Import | ✏️ Design |
| 🏭 Depots | 👷 Crews | ② 🗓️ Plan |
| ③ 🔢 Sequence | 📦 Materials & orders | ④ 🛠️ Execute |
| 🔧 Installers (phone) | From a point to an assetD'un point à un actifDe un punto a un activo | 📊 Statistics |
💧 AMS — chapter 2chapitre 2capítulo 2
🛠️ WOM — chapter 3chapitre 3capítulo 3
⚙️ ConsoleConsoleConsola — chapter 4chapitre 4capítulo 4
Two Console entries are not in this index because they are not in its menu: Route sheet, hidden pending a decision, and Survey campaigns, which is reached from the home page as an application of its own.
Deux entrées de la Console ne sont pas dans cet index parce qu'elles ne sont pas dans son menu : « Feuille de route », masquée en attendant une décision, et « Campagnes de relevé », qu'on atteint depuis la page d'accueil comme une application à part entière.
Dos entradas de la Consola no están en este índice porque no están en su menú: «Hoja de ruta», oculta a la espera de una decisión, y «Campañas de relevamiento», a la que se llega desde la página de inicio como una aplicación propia.
Integrations — validations and tests
Every way data enters or leaves SCMS-FS from another system, who sets each one up, what the system checks on its own every time, and how to test an integration before you rely on it.
The external systems, at a glance
| System | How it connects | Where it is explained |
|---|---|---|
| GIS or spreadsheet file CSV, GeoJSON, JSON package | The account administrator sends a file: categories, asset types, accounts, assets, open work orders. Dry run first. | Console › Imports |
| ArcGIS public point layer | The server reads the layer every night or on demand, and imports it like a file, through a mapping profile. | Console › Imports — ArcGIS sources |
| IBM Maximo OSLC/REST | Webhooks in, API calls out, a pull of the whole site, and a CSV file when Maximo's API is down. | Console › Maximo |
| Any other system, unattended | Its own machine access, which may only send import files and read their reports. | This annex, below |
| Field diagnostics feed problem batches | The source posts a JSON batch with its token. Each problem becomes an alarm; a person decides whether it becomes a work order. | Console › Ingestion · WOM › Alarms |
| WOM Data Exchange spreadsheets | Not an integration: it reads and writes the local store of this browser, never the platform — for carrying a demonstration from one machine to another. | WOM › Data Exchange |
What leaves SCMS-FS
| Export | What it is for |
|---|---|
| Inventory per zone (AMS › Assets) | Every asset read from the server, as a spreadsheet: zone, code, type, model, serial number, install date, gateway, street, position. The way to give Maximo the assets born in SCMS-FS, such as those commissioned in DFO. |
| Data Exchange export (WOM) | A snapshot of this browser's local store, for a demonstration — never platform data. |
| Error file of an import | The refused rows only, in the columns of your source, plus the reason: fix them, send the file again. |
| Work orders and completions to Maximo | Sent automatically; the Export waiting completions (CSV) file when the API is down. |
| Reports (WOM) | Read by people, not loaded by machines. |
Every imported file, and its error file, is archived on the server with its import: its report in Console › Imports gives both back.
Who sets up what
| Who | What |
|---|---|
| Account administrator in the Console | Mapping profiles; ArcGIS sources and their confirmation; the Maximo connection and its mappings; replays; the fallback export. |
| Server operator Dimonoff | The ArcGIS and Maximo hosts the server may call; the Maximo API key; the source tokens of webhooks and feeds; the machine-access client and its secret, and their rotation. |
Why the split
A secret never appears on a screen, and is never stored in clear: a token is kept as its fingerprint, a key as a file on the server only. And the addresses the server may call are decided by its operator, so no screen can make the server reach somewhere it should not.
Machine access
A system that imports on its own — at night, without a person — gets its own client, one per account, named integration-<account alias>. It signs in with its client identifier and secret (client credentials) and receives a token.
| Rule | Why |
|---|---|
| The client holds one role only, integration, which opens nothing but sending an import and reading imports and their reports. Any other request answers 403. | A leaked secret can import files — and nothing else. |
| The token is accepted only if it belongs to the one account its client is named after, and carries no other role. | A client of one account can never write in another. |
| Its imports are journaled under integration:<client>, and appear in Console › Imports with the others. | You always know a machine did it, and which. |
The client and its secret are created, and rotated, by the server operator. Request and response shapes are in the API reference given to integrators.
What the system checks, every time
| Validation | What it protects |
|---|---|
| The account comes from the credential — the token, the client — never from the content. A number in the content that names another account is refused. | No message can write into someone else's account. |
| Identity by code, and by source system + external identifier. When the two point to two different records, the row is refused, never guessed. | No silent merge of two assets. |
| Row by row. A bad row is refused alone, with its line, its field and its reason; the others go in. | One typo does not stop a register. |
| Delta, never deletion. A record absent from the file is left as it is; a blank cell keeps the value; retiring is refused while the record is still in use. | A partial export never erases the register. |
| Sending twice is safe. A file, a webhook, a pull or a retry sent again recognises what is already in. Imports are saved in batches of 500; Maximo is never sent the same work order twice, nor the same parts. | A failure half-way is fixed by sending again. |
| Kept before checked. A feed batch is stored as received before validation; a refused one goes to quarantine. An imported file is archived as sent. | Nothing received is lost; everything can be replayed. |
| Calls out only to allowed hosts, with no redirect followed, a time limit and a size limit on the answer. | The server cannot be turned against another system. |
| Size limits: 16 KB per Maximo webhook, 16 MiB per feed batch; an import file too large is refused before anything is kept. | One oversized message cannot stall the others. |
| Every write is journaled, under the person, the client or the automatic worker that made it. | Console › Activity log answers “who changed this?”. |
| Silence is reported. A feed quiet for more than a day says so in words. | A broken sender does not look like a clean screen. |
Import refusal reasons
| Reason | Meaning |
|---|---|
| invalid_row | Not an object, or not as many cells as the header. |
| missing_field · invalid_value | A required field is missing · a value is out of form, range or list. The field is named. |
| duplicated_in_file | The same key twice in the file. |
| unknown_category · unknown_type · unknown_account · unknown_asset · unknown_job_type · unknown_team | A reference found neither in the account nor in the file. |
| fallback_job_type | A fallback job type (…_CAT) cannot be imported. |
| identity_conflict | The code and the external identifier point to two different records. |
| category_change_refused | An existing asset type does not change category. |
| geometry_not_supported · position_invalid | A line or a polygon (points only in this version) · a latitude without longitude, or out of bounds. |
| in_use · asset_has_open_work_order | Retiring refused: the record is still used · the asset has an open work order. |
| concurrent_update | Somebody changed the record meanwhile: send the file again. |
| unknown_attribute · invalid_attribute · link_refused | Not a refusal of the row: the asset goes in; only its custom field, or its link to the asset carrying it, is left out and reported. |
Testing an integration before relying on it
Run these tests on a test account first whenever one is available.
| System | The test, in order |
|---|---|
| File import | 1. Dry run with a real export. 2. Read ignored columns: a column you expected there is a profile to fix. 3. Download the error file, fix, dry run again. 4. Import for real. 5. Send the same file again: zero created — that proves the identities hold. |
| ArcGIS source | 1. Create the source: it only makes dry runs. 2. Pull now, read the report — rows without identifier or duplicated are refused, fix them in the GIS. 3. Confirm. 4. Pull again: zero created. |
| Machine access | 1. Get a token with the client's identifier and secret. 2. Send a file as a dry run (essai=true): 202, then read its report. 3. Call any other request with the same token: 403 is the expected answer. |
| Field diagnostics feed | 1. Post a batch to the test server with its own token: 202. 2. Console › Ingestion counts it as received, then processed — or shows it in quarantine with the field at fault. |
| Maximo | See the next table: Maximo has its own go-live check. |
Maximo — the go-live check
The connector was built against IBM's published interface. Six points depend on how the city's Maximo is configured; the connection stays disabled until a Maximo administrator of the city has confirmed them.
| Point to confirm with the city | If the answer differs |
|---|---|
| 1. The HTTP endpoint sends JSON (publish channel with JSON mapping, or automation script). | XML is not read in this version. |
| 2. The work order object structure exposes MATUSETRANS, ACTSTART, ACTFINISH and EXTERNALREFID for writing. | Set work order object structure to the city's copy that does. |
| 3. The sign of an issued quantity created through the API. | Set sign of issued quantities. |
| 4. A date without time offset (target date) is read in the Maximo server's time zone. | Report it before going live. |
| 5. A work order created through the API with status APPR in its body is born approved. | Report it: the status change would become a second request. |
| 6. The API key is accepted in the apikey header. | Report it before going live. |
Then, with the connection active, one record of each kind, end to end:
| Step | Expected result |
|---|---|
| 1. Maximo sends one test asset. | Inbox: processed; the asset is in AMS with the source system. |
| 2. Maximo sends one approved work order on it. | It appears New in WOM, with its target date and priority. |
| 3. Open a work order in SCMS-FS on the same asset. | Outbox: work order creation — sent, with a Maximo number; in Maximo it is approved, with the SCMS-FS code as external reference. |
| 4. Close it Fixed with one part used. | In Maximo: completed, actual start and finish filled, and the storeroom balance goes down by that quantity. |
| 5. Cancel the work order of step 2 in Maximo. | Cancelled in WOM, out of the coming routes; nothing is sent back. |
| 6. Pull the site now. | Assets and open work orders read and queued; the inbox empties within the announced time. |
How the product itself is checked
The format specifications and their examples are held together by automated tests: an example that stops saying what the specification says fails the build before it can be delivered. Each batch writer is tested against a real database, in an account of its own, never a client's. The Maximo connector is tested against a simulated Maximo until the city's instance is available. The ArcGIS pull was proven on the test server with a real public layer: 1 031 hydrants imported, then pulled again with zero created.
Intégrations — validations et essais
Chaque façon dont la donnée entre dans SCMS-FS depuis un autre système, ou en sort, qui met chacune en place, ce que le système vérifie de lui-même à chaque fois, et comment essayer une intégration avant de s'y fier.
Les systèmes externes, d'un coup d'œil
| Système | Comment il se relie | Où c'est expliqué |
|---|---|---|
| Fichier SIG ou tableur CSV, GeoJSON, paquet JSON | L'administrateur du compte envoie un fichier : catégories, types d'actif, comptes, actifs, bons ouverts. Essai à blanc d'abord. | Console › Imports |
| ArcGIS couche publique de points | Le serveur lit la couche chaque nuit ou à la demande, et l'importe comme un fichier, par un profil de correspondance. | Console › Imports — sources ArcGIS |
| IBM Maximo OSLC/REST | Webhooks entrants, appels sortants, tirage du site entier, et un fichier CSV quand l'API de Maximo est hors service. | Console › Maximo |
| Tout autre système, sans personne | Son propre accès machine, qui ne peut qu'envoyer des fichiers d'import et lire leurs rapports. | Cette annexe, plus bas |
| Flux de diagnostics terrain lots de problèmes | La source poste un lot JSON avec son jeton. Chaque problème devient une alarme ; une personne décide s'il devient un bon. | Console › Ingestion · WOM › Alarms |
| Data Exchange de WOM tableurs | Pas une intégration : il lit et écrit le magasin local de ce navigateur, jamais la plateforme — pour transporter une démonstration d'un poste à l'autre. | WOM › Data Exchange |
Ce qui sort de SCMS-FS
| Export | À quoi il sert |
|---|---|
| Inventory per zone (AMS › Assets) | Chaque actif lu sur le serveur, en tableur : zone, code, type, modèle, numéro de série, date de pose, passerelle, rue, position. Le moyen de donner à Maximo les actifs nés dans SCMS-FS, comme ceux mis en service dans DFO. |
| Export Data Exchange (WOM) | Un instantané du magasin local de ce navigateur, pour une démonstration — jamais une donnée de la plateforme. |
| Fichier d'erreurs d'un import | Les seules lignes refusées, dans les colonnes de votre source, plus le motif : on corrige, on renvoie le fichier. |
| Bons et fins vers Maximo | Envoyés automatiquement ; le fichier Exporter les fins en attente (CSV) quand l'API est hors service. |
| Rapports (WOM) | Lus par des personnes, pas chargés par des machines. |
Chaque fichier importé, et son fichier d'erreurs, est archivé sur le serveur avec son import : son rapport, dans Console › Imports, rend les deux.
Qui met en place quoi
| Qui | Quoi |
|---|---|
| Administrateur du compte dans la Console | Les profils de correspondance ; les sources ArcGIS et leur confirmation ; la connexion Maximo et ses correspondances ; les rejeux ; l'export de recours. |
| Exploitant du serveur Dimonoff | Les hôtes ArcGIS et Maximo que le serveur peut appeler ; la clé d'API Maximo ; les jetons de source des webhooks et des flux ; le client d'accès machine et son secret, et leur rotation. |
Pourquoi ce partage
Un secret n'apparaît jamais à l'écran et n'est jamais gardé en clair : un jeton est gardé par son empreinte, une clé comme un fichier sur le serveur seulement. Et les adresses que le serveur peut appeler sont décidées par son exploitant : aucun écran ne peut faire appeler au serveur un endroit où il ne doit pas aller.
L'accès machine
Un système qui importe de lui-même — la nuit, sans personne — reçoit son propre client, un par compte, nommé integration-<alias du compte>. Il se connecte avec son identifiant et son secret de client (client credentials) et reçoit un jeton.
| Règle | Pourquoi |
|---|---|
| Le client ne porte qu'un rôle, integration, qui n'ouvre rien d'autre qu'envoyer un import et lire les imports et leurs rapports. Toute autre requête répond 403. | Un secret qui fuit peut importer des fichiers — et rien d'autre. |
| Le jeton n'est accepté que s'il appartient au seul compte dont son client porte le nom, et ne porte aucun autre rôle. | Le client d'un compte ne peut jamais écrire dans un autre. |
| Ses imports sont journalisés sous integration:<client>, et paraissent dans Console › Imports avec les autres. | On sait toujours qu'une machine l'a fait, et laquelle. |
Le client et son secret sont créés, et renouvelés, par l'exploitant du serveur. Les formes des requêtes et des réponses sont dans la référence d'API remise aux intégrateurs.
Ce que le système vérifie, à chaque fois
| Validation | Ce qu'elle protège |
|---|---|
| Le compte vient de l'identifiant — le jeton, le client —, jamais du contenu. Un numéro dans le contenu qui désigne un autre compte est refusé. | Aucun message ne peut écrire dans le compte d'un autre. |
| Identité par le code, et par système source + identifiant externe. Quand les deux désignent deux enregistrements différents, la ligne est refusée, jamais devinée. | Pas de fusion silencieuse de deux actifs. |
| Ligne par ligne. Une ligne fautive est refusée seule, avec sa ligne, son champ et son motif ; les autres entrent. | Une coquille n'arrête pas un registre. |
| Delta, jamais d'effacement. Un enregistrement absent du fichier reste tel quel ; une cellule vide garde la valeur ; un retrait est refusé tant que l'enregistrement sert encore. | Un export partiel n'efface jamais le registre. |
| Envoyer deux fois est sans danger. Un fichier, un webhook, un tirage ou une reprise renvoyés reconnaissent ce qui est déjà entré. Les imports s'enregistrent par lots de 500 ; Maximo ne reçoit jamais deux fois le même bon, ni les mêmes pièces. | Un arrêt en route se règle en renvoyant. |
| Gardé avant d'être vérifié. Un lot de flux est stocké tel que reçu avant la validation ; un lot refusé va en quarantaine. Un fichier importé est archivé tel qu'envoyé. | Rien de reçu ne se perd ; tout se rejoue. |
| Appels sortants vers les seuls hôtes permis, sans suivre de redirection, avec un délai et une taille de réponse plafonnés. | Le serveur ne peut pas être retourné contre un autre système. |
| Plafonds de taille : 16 Ko par webhook Maximo, 16 Mio par lot de flux ; un fichier d'import trop gros est refusé avant que rien ne soit gardé. | Un message démesuré ne bloque pas les autres. |
| Chaque écriture est journalisée, au nom de la personne, du client ou du travailleur automatique qui l'a faite. | Console › Journal des actions répond à « qui a changé ça ? ». |
| Le silence est signalé. Un flux muet depuis plus d'une journée le dit en toutes lettres. | Un émetteur en panne ne ressemble pas à un écran sain. |
Les motifs de refus d'un import
| Motif | Sens |
|---|---|
| invalid_row | Pas un objet, ou pas autant de cellules que l'en-tête. |
| missing_field · invalid_value | Un champ obligatoire manque · une valeur est hors forme, hors bornes ou hors liste. Le champ est nommé. |
| duplicated_in_file | La même clé deux fois dans le fichier. |
| unknown_category · unknown_type · unknown_account · unknown_asset · unknown_job_type · unknown_team | Une référence introuvable, ni dans le compte ni dans le fichier. |
| fallback_job_type | Un type d'intervention de repli (…_CAT) ne s'importe pas. |
| identity_conflict | Le code et l'identifiant externe désignent deux enregistrements différents. |
| category_change_refused | Un type d'actif existant ne change pas de catégorie. |
| geometry_not_supported · position_invalid | Une ligne ou un polygone (des points seulement dans cette version) · une latitude sans longitude, ou hors bornes. |
| in_use · asset_has_open_work_order | Retrait refusé : l'enregistrement sert encore · l'actif a un bon ouvert. |
| concurrent_update | Quelqu'un a changé l'enregistrement entre-temps : renvoyez le fichier. |
| unknown_attribute · invalid_attribute · link_refused | Pas un refus de ligne : l'actif entre ; seul son champ personnalisé, ou son lien à l'actif qui le porte, est laissé de côté et rapporté. |
Essayer une intégration avant de s'y fier
Faites ces essais d'abord sur un compte d'essai chaque fois qu'il y en a un.
| Système | L'essai, dans l'ordre |
|---|---|
| Import de fichier | 1. Essai à blanc avec un vrai export. 2. Lire les colonnes ignorées : une colonne attendue là est un profil à corriger. 3. Télécharger le fichier d'erreurs, corriger, refaire l'essai. 4. Importer pour de vrai. 5. Renvoyer le même fichier : zéro créé — c'est la preuve que les identités tiennent. |
| Source ArcGIS | 1. Créer la source : elle ne fait que des essais à blanc. 2. Tirer maintenant, lire le rapport — les lignes sans identifiant ou en double sont refusées, à corriger dans le SIG. 3. Confirmer. 4. Tirer de nouveau : zéro créé. |
| Accès machine | 1. Obtenir un jeton avec l'identifiant et le secret du client. 2. Envoyer un fichier en essai à blanc (essai=true) : 202, puis lire son rapport. 3. Appeler toute autre requête avec le même jeton : 403 est la réponse attendue. |
| Flux de diagnostics terrain | 1. Poster un lot au serveur d'essai avec son propre jeton : 202. 2. Console › Ingestion le compte reçu, puis traité — ou le montre en quarantaine avec le champ fautif. |
| Maximo | Voir le tableau suivant : Maximo a sa propre vérification de mise en service. |
Maximo — la vérification de mise en service
Le connecteur a été bâti sur l'interface publiée par IBM. Six points dépendent de la configuration du Maximo de la ville ; la connexion reste désactivée tant qu'un administrateur Maximo de la ville ne les a pas confirmés.
| Point à confirmer avec la ville | Si la réponse diffère |
|---|---|
| 1. Le point de terminaison HTTP envoie du JSON (canal de publication avec correspondance JSON, ou script d'automatisation). | Le XML n'est pas lu dans cette version. |
| 2. La structure d'objet des bons expose MATUSETRANS, ACTSTART, ACTFINISH et EXTERNALREFID en écriture. | Régler structure des bons sur la copie de la ville qui les expose. |
| 3. Le signe d'une quantité sortie créée par l'API. | Régler signe des quantités sorties. |
| 4. Une date sans décalage horaire (date cible) est lue dans le fuseau du serveur Maximo. | Le signaler avant la mise en service. |
| 5. Un bon créé par l'API avec le statut APPR dans son corps naît approuvé. | Le signaler : le changement de statut deviendrait une seconde requête. |
| 6. La clé d'API est acceptée dans l'en-tête apikey. | Le signaler avant la mise en service. |
Puis, la connexion active, un enregistrement de chaque sorte, de bout en bout :
| Étape | Résultat attendu |
|---|---|
| 1. Maximo envoie un actif d'essai. | Boîte d'entrée : traité ; l'actif est dans AMS avec le système source. |
| 2. Maximo envoie un bon approuvé sur cet actif. | Il paraît New dans WOM, avec sa date cible et sa priorité. |
| 3. Ouvrir un bon dans SCMS-FS sur le même actif. | Boîte d'envoi : création du bon — envoyé, avec un numéro Maximo ; dans Maximo il est approuvé, avec le code SCMS-FS comme référence externe. |
| 4. Le fermer Fixed avec une pièce utilisée. | Dans Maximo : terminé, début et fin réels remplis, et le solde du magasin baisse de cette quantité. |
| 5. Annuler dans Maximo le bon de l'étape 2. | Annulé dans WOM, retiré des tournées à venir ; rien n'est renvoyé. |
| 6. Tirer le site maintenant. | Actifs et bons ouverts lus et mis en file ; la boîte d'entrée se vide dans le temps annoncé. |
Comment le produit lui-même est vérifié
Les spécifications des formats et leurs exemples sont tenus ensemble par des tests automatiques : un exemple qui cesse de dire ce que dit la spécification fait échouer la construction avant toute livraison. Chaque rédacteur de lot est essayé contre une vraie base de données, dans un compte à lui, jamais celui d'un client. Le connecteur Maximo est essayé contre un Maximo simulé tant que l'instance de la ville n'est pas disponible. Le tirage ArcGIS a été prouvé sur le serveur d'essai avec une vraie couche publique : 1 031 bornes importées, puis tirées de nouveau avec zéro création.
Integraciones — validaciones y pruebas
Cada forma en que el dato entra en SCMS-FS desde otro sistema, o sale de él, quién configura cada una, qué verifica el sistema por sí solo cada vez, y cómo probar una integración antes de confiar en ella.
Los sistemas externos, de un vistazo
| Sistema | Cómo se conecta | Dónde se explica |
|---|---|---|
| Archivo SIG u hoja de cálculo CSV, GeoJSON, paquete JSON | El administrador de la cuenta envía un archivo: categorías, tipos de activo, cuentas, activos, órdenes abiertas. Primero la prueba en seco. | Consola › Importaciones |
| ArcGIS capa pública de puntos | El servidor lee la capa cada noche o a pedido, y la importa como un archivo, mediante un perfil de correspondencia. | Consola › Importaciones — fuentes ArcGIS |
| IBM Maximo OSLC/REST | Webhooks de entrada, llamadas de salida, extracción del sitio completo, y un archivo CSV cuando la API de Maximo está fuera de servicio. | Consola › Maximo |
| Cualquier otro sistema, sin personas | Su propio acceso de máquina, que solo puede enviar archivos de importación y leer sus informes. | Este anexo, más abajo |
| Flujo de diagnósticos de campo lotes de problemas | La fuente envía un lote JSON con su token. Cada problema se vuelve una alarma; una persona decide si se vuelve una orden. | Consola › Ingesta · WOM › Alarms |
| Data Exchange de WOM hojas de cálculo | No es una integración: lee y escribe el almacén local de este navegador, nunca la plataforma — para llevar una demostración de un equipo a otro. | WOM › Data Exchange |
Lo que sale de SCMS-FS
| Exportación | Para qué sirve |
|---|---|
| Inventory per zone (AMS › Assets) | Cada activo leído en el servidor, en hoja de cálculo: zona, código, tipo, modelo, número de serie, fecha de instalación, pasarela, calle, posición. La forma de dar a Maximo los activos nacidos en SCMS-FS, como los puestos en servicio en DFO. |
| Exportación Data Exchange (WOM) | Una instantánea del almacén local de este navegador, para una demostración — nunca datos de la plataforma. |
| Archivo de errores de una importación | Solo las filas rechazadas, en las columnas de su fuente, más el motivo: se corrigen, se reenvía el archivo. |
| Órdenes y cierres hacia Maximo | Enviados automáticamente; el archivo Exportar los cierres pendientes (CSV) cuando la API está fuera de servicio. |
| Informes (WOM) | Leídos por personas, no cargados por máquinas. |
Cada archivo importado, y su archivo de errores, se archiva en el servidor con su importación: su informe, en Consola › Importaciones, devuelve ambos.
Quién configura qué
| Quién | Qué |
|---|---|
| Administrador de la cuenta en la Consola | Los perfiles de correspondencia; las fuentes ArcGIS y su confirmación; la conexión Maximo y sus correspondencias; los reprocesos; la exportación de recurso. |
| Operador del servidor Dimonoff | Los hosts ArcGIS y Maximo a los que el servidor puede llamar; la clave de API de Maximo; los tokens de origen de webhooks y flujos; el cliente de acceso de máquina y su secreto, y su rotación. |
Por qué esta división
Un secreto nunca aparece en pantalla ni se guarda en claro: un token se guarda por su huella, una clave como un archivo solo en el servidor. Y las direcciones a las que el servidor puede llamar las decide su operador: ninguna pantalla puede hacer que el servidor llame a un lugar al que no debe ir.
El acceso de máquina
Un sistema que importa por sí solo — de noche, sin personas — recibe su propio cliente, uno por cuenta, llamado integration-<alias de la cuenta>. Se conecta con su identificador y su secreto de cliente (client credentials) y recibe un token.
| Regla | Por qué |
|---|---|
| El cliente tiene un solo rol, integration, que no abre nada más que enviar una importación y leer las importaciones y sus informes. Cualquier otra solicitud responde 403. | Un secreto filtrado puede importar archivos — y nada más. |
| El token solo se acepta si pertenece a la única cuenta cuyo nombre lleva su cliente, y no tiene ningún otro rol. | El cliente de una cuenta nunca puede escribir en otra. |
| Sus importaciones se registran bajo integration:<client>, y aparecen en Consola › Importaciones con las demás. | Siempre se sabe que lo hizo una máquina, y cuál. |
El cliente y su secreto los crea, y los renueva, el operador del servidor. Las formas de las solicitudes y respuestas están en la referencia de API entregada a los integradores.
Lo que el sistema verifica, cada vez
| Validación | Qué protege |
|---|---|
| La cuenta viene de la credencial — el token, el cliente —, nunca del contenido. Un número en el contenido que nombra otra cuenta se rechaza. | Ningún mensaje puede escribir en la cuenta de otro. |
| Identidad por el código, y por sistema de origen + identificador externo. Cuando ambos señalan dos registros distintos, la fila se rechaza, nunca se adivina. | Ninguna fusión silenciosa de dos activos. |
| Fila por fila. Una fila errónea se rechaza sola, con su línea, su campo y su motivo; las demás entran. | Un error de tecleo no detiene un registro. |
| Delta, nunca borrado. Un registro ausente del archivo queda como está; una celda vacía conserva el valor; un retiro se rechaza mientras el registro siga en uso. | Una exportación parcial nunca borra el registro. |
| Enviar dos veces no tiene riesgo. Un archivo, un webhook, una extracción o un reintento reenviados reconocen lo que ya entró. Las importaciones se guardan por lotes de 500; Maximo nunca recibe dos veces la misma orden, ni las mismas piezas. | Una parada a medio camino se arregla reenviando. |
| Guardado antes de verificado. Un lote de flujo se almacena tal como llegó antes de validarse; un lote rechazado va a cuarentena. Un archivo importado se archiva tal como se envió. | Nada recibido se pierde; todo se puede reprocesar. |
| Llamadas de salida solo a hosts permitidos, sin seguir redirecciones, con un plazo y un tamaño de respuesta limitados. | El servidor no puede volverse contra otro sistema. |
| Límites de tamaño: 16 KB por webhook de Maximo, 16 MiB por lote de flujo; un archivo de importación demasiado grande se rechaza antes de guardar nada. | Un mensaje desmesurado no bloquea a los demás. |
| Cada escritura se registra, a nombre de la persona, el cliente o el trabajador automático que la hizo. | Consola › Registro de acciones responde a «¿quién cambió esto?». |
| El silencio se señala. Un flujo callado más de un día lo dice con todas las letras. | Un emisor averiado no parece una pantalla sana. |
Los motivos de rechazo de una importación
| Motivo | Significado |
|---|---|
| invalid_row | No es un objeto, o no tiene tantas celdas como el encabezado. |
| missing_field · invalid_value | Falta un campo obligatorio · un valor está fuera de forma, de rango o de lista. Se nombra el campo. |
| duplicated_in_file | La misma clave dos veces en el archivo. |
| unknown_category · unknown_type · unknown_account · unknown_asset · unknown_job_type · unknown_team | Una referencia que no se encuentra ni en la cuenta ni en el archivo. |
| fallback_job_type | Un tipo de intervención de respaldo (…_CAT) no se importa. |
| identity_conflict | El código y el identificador externo señalan dos registros distintos. |
| category_change_refused | Un tipo de activo existente no cambia de categoría. |
| geometry_not_supported · position_invalid | Una línea o un polígono (solo puntos en esta versión) · una latitud sin longitud, o fuera de límites. |
| in_use · asset_has_open_work_order | Retiro rechazado: el registro sigue en uso · el activo tiene una orden abierta. |
| concurrent_update | Alguien cambió el registro mientras tanto: reenvíe el archivo. |
| unknown_attribute · invalid_attribute · link_refused | No es un rechazo de la fila: el activo entra; solo su campo personalizado, o su vínculo con el activo que lo porta, se deja de lado y se informa. |
Probar una integración antes de confiar en ella
Haga estas pruebas primero en una cuenta de prueba siempre que haya una.
| Sistema | La prueba, en orden |
|---|---|
| Importación de archivo | 1. Prueba en seco con una exportación real. 2. Leer las columnas ignoradas: una columna esperada ahí es un perfil que corregir. 3. Descargar el archivo de errores, corregir, repetir la prueba. 4. Importar de verdad. 5. Reenviar el mismo archivo: cero creados — prueba de que las identidades se sostienen. |
| Fuente ArcGIS | 1. Crear la fuente: solo hace pruebas en seco. 2. Extraer ahora, leer el informe — las filas sin identificador o duplicadas se rechazan, se corrigen en el SIG. 3. Confirmar. 4. Extraer de nuevo: cero creados. |
| Acceso de máquina | 1. Obtener un token con el identificador y el secreto del cliente. 2. Enviar un archivo en prueba en seco (essai=true): 202, luego leer su informe. 3. Llamar a cualquier otra solicitud con el mismo token: 403 es la respuesta esperada. |
| Flujo de diagnósticos de campo | 1. Enviar un lote al servidor de prueba con su propio token: 202. 2. Consola › Ingesta lo cuenta como recibido, luego procesado — o lo muestra en cuarentena con el campo culpable. |
| Maximo | Vea la tabla siguiente: Maximo tiene su propia verificación de puesta en servicio. |
Maximo — la verificación de puesta en servicio
El conector se construyó sobre la interfaz publicada por IBM. Seis puntos dependen de cómo está configurado el Maximo de la ciudad; la conexión sigue desactivada hasta que un administrador de Maximo de la ciudad los haya confirmado.
| Punto que confirmar con la ciudad | Si la respuesta difiere |
|---|---|
| 1. El punto de terminación HTTP envía JSON (canal de publicación con correspondencia JSON, o script de automatización). | El XML no se lee en esta versión. |
| 2. La estructura de objeto de órdenes expone MATUSETRANS, ACTSTART, ACTFINISH y EXTERNALREFID para escritura. | Ajustar estructura de órdenes a la copia de la ciudad que los expone. |
| 3. El signo de una cantidad emitida creada por la API. | Ajustar signo de las cantidades emitidas. |
| 4. Una fecha sin desfase horario (fecha objetivo) se lee en la zona horaria del servidor Maximo. | Señalarlo antes de la puesta en servicio. |
| 5. Una orden creada por la API con el estado APPR en su cuerpo nace aprobada. | Señalarlo: el cambio de estado pasaría a ser una segunda solicitud. |
| 6. La clave de API se acepta en el encabezado apikey. | Señalarlo antes de la puesta en servicio. |
Luego, con la conexión activa, un registro de cada tipo, de punta a punta:
| Paso | Resultado esperado |
|---|---|
| 1. Maximo envía un activo de prueba. | Bandeja de entrada: procesado; el activo está en AMS con el sistema de origen. |
| 2. Maximo envía una orden aprobada sobre ese activo. | Aparece New en WOM, con su fecha objetivo y su prioridad. |
| 3. Abrir una orden en SCMS-FS sobre el mismo activo. | Bandeja de salida: creación de la orden — enviado, con un número Maximo; en Maximo está aprobada, con el código SCMS-FS como referencia externa. |
| 4. Cerrarla Fixed con una pieza usada. | En Maximo: completada, inicio y fin reales llenos, y el saldo del almacén baja en esa cantidad. |
| 5. Cancelar en Maximo la orden del paso 2. | Cancelada en WOM, fuera de las rutas por venir; no se reenvía nada. |
| 6. Extraer el sitio ahora. | Activos y órdenes abiertas leídos y en cola; la bandeja de entrada se vacía en el tiempo anunciado. |
Cómo se verifica el producto mismo
Las especificaciones de los formatos y sus ejemplos se mantienen juntos mediante pruebas automáticas: un ejemplo que deja de decir lo que dice la especificación hace fallar la construcción antes de cualquier entrega. Cada escritor de lotes se prueba contra una base de datos real, en una cuenta propia, nunca la de un cliente. El conector Maximo se prueba contra un Maximo simulado mientras la instancia de la ciudad no esté disponible. La extracción ArcGIS se probó en el servidor de prueba con una capa pública real: 1 031 hidrantes importados, luego extraídos de nuevo sin ninguna creación.