Job (Werkorder)
De Job-entiteit is de centrale entiteit voor werkzaamheden in Ultimo. Jobs worden gebruikt voor correctief onderhoud, storingen, servicedesk-meldingen, selfservice-aanvragen, inspecties en veel meer. Door het uitgebreide context-systeem kan een Job in meer dan 20 verschillende verschijningsvormen voorkomen.
Entiteitsnaam: Job
Databasetabel: Job
Primaire sleutel: JOBID (nvarchar 12)
Contextsbewerken
| Value | Naam | Beschrijving |
|---|---|---|
| 0 | JobContext.None | TD |
| 1 | JobContext.TD | TD (Technische Dienst) |
| 2 | JobContext.SpaceReservation | Zaalreservering |
| 4 | JobContext.ServiceDesk | Servicedesk |
| 8 | JobContext.TaskPackage | Takenpakket |
| 16 | JobContext.ConditionMeasure | Conditiemeting |
| 32 | JobContext.ItilChangeJob | Wijzigingsjob |
| 64 | JobContext.ITKnownError | Bekende fout |
| 128 | JobContext.ITIncident | Incident |
| 256 | JobContext.ITProblem | Probleem |
| 512 | JobContext.Instrument | Instrument |
| 1024 | JobContext.Action | Actiepunt HSE |
| 2048 | JobContext.Building | Gebouw |
| 4096 | JobContext.Cleaning | Schoonmaak |
| 8192 | JobContext.Move | Verhuizing |
| 16384 | JobContext.Fleet | Fleet |
| 32768 | JobContext.Infra | Infra |
| 65536 | JobContext.InfraConditionMeasure | Conditiemeting infra |
| 131072 | JobContext.ServiceRequest | Serviceaanvraag |
| 262144 | JobContext.ItilChange | Wijziging |
| 524288 | JobContext.SelfService | Selfservice |
| 1048576 | JobContext.SurveyAction | Actiepunt evaluatie |
| 2097152 | JobContext.LinkedIncident | Gekoppeld incident |
| 4194304 | JobContext.ActionItem | Actiepunt |
| 8388608 | JobContext.RootCauseAnalysisAction | RCA action item |
Statussenbewerken
| Value | Naam | Beschrijving |
|---|---|---|
| -1 | JobStatus.Trash | Trash |
| 0 | JobStatus.None | None |
| 1 | JobStatus.Created | Open |
| 2 | JobStatus.Approved | Goedgekeurd |
| 4 | JobStatus.Active | Actief |
| 16 | JobStatus.Finished | Gereed |
| 32 | JobStatus.Closed | Gesloten |
| 64 | JobStatus.Requested | Aanvraag |
| 4096 | JobStatus.Completed | Compleet |
| 8192 | JobStatus.Postponed | Uitgesteld |
Belangrijkste propertiesbewerken
| Property | Type | Kolom | Nullable | Omschrijving |
|---|---|---|---|---|
| Id | UltimoString(12) | JOBID | Nee | Uniek job-ID |
| Description | UltimoString(200) | JOBDESCR | Ja | Omschrijving |
| Status | Status | JOBRECSTATUS | Nee | Recordstatus |
| Context | Context | JOBCONTEXT | Nee | Context (default: 1) |
| Priority | Priority | JOBPRIID | Ja | Prioriteit |
| Duration | Decimal | JOBDURATION | Nee | Doorlooptijd |
| Hours | Decimal | JOBHOURS | Nee | Gerealiseerde uren (readonly) |
| HoursCalculated | Decimal | JOBHOURSCALC | Nee | Berekende uren (readonly) |
| HoursPlanned | Decimal | JOBPLANHOURS | Nee | Geplande uren (readonly) |
| ScheduledStartDate | DateTime? | JOBSCHSTARTDATE | Ja | Geplande startdatum |
| TargetDate | DateTime? | JOBTARGETDATE | Ja | Streefdatum |
| PercentageComplete | Decimal | JOBPERCCOMPLETE | Nee | Voortgangspercentage |
| Tariff | CompanyMoney | JOBTARIFF | Nee | Uurtarief |
| TotalCost | CompanyMoney | JOBTOTALCOST | Nee | Totale kosten (readonly/computed) |
| TotalCalculated | CompanyMoney | JOBTOTALCALC | Nee | Totaal berekend (readonly/computed) |
| Text | UltimoString | JOBTEXT | Ja | Vrij tekstveld |
| ReportText | UltimoString | JOBREPORTTEXT | Ja | Meldtekst |
| FeedbackText | UltimoString | JOBFEEDBACKTEXT | Ja | Terugkoppeltekst |
| Canceled | Boolean | JOBCANCELLED | Nee | Geannuleerd |
| IsMultijob | Boolean | JOBISMULTIJOB | Nee | Is multijob |
| SelfServiceRequest | Boolean | JOBSELFSERVICEREQUEST | Nee | Selfservice-aanvraag |
| Reporter | UltimoString(41) | JOBREPORTEMPID | Ja | Melder |
| StatusCreatedDate | DateTime? | JOBOPENDATE | Ja | Aanmaakdatum |
| StatusFinishedDate | DateTime? | JOBFINISHDATE | Ja | Gereeддatum |
| StatusClosedDate | DateTime? | JOBCLOSEDATE | Ja | Sluitdatum |
Functionaliteit & property-gedragbewerken
Veel Job-properties worden niet (alleen) handmatig ingevuld maar door workflows berekend en gevuld. Onderstaande paragrafen beschrijven het gedrag van de belangrijkste velden; gebruik lookup_property_usage("Job", "<property>") voor de volledige, actuele lijst workflows per property en lookup_workflow("<naam>") voor de XML.
Planningsdatums (
ScheduledStartDate,TargetDate) — Deze worden door ~20-25 workflows geschreven en zelden direct ingetypt. De kern is de keten prioriteit → doorlooptijd → datums:Job_RecalculatePlanningDatesBasedOnPriorityleest dePriorityvan de job en zetScheduledStartDate/TargetDateop basis van de bij die prioriteit horende doorlooptijd (Priority.DurationUntil...).Job_CalculatePlanningDatesBasedOnDurationherberekent de tegenoverliggende datum zodra één datum of de duur wijzigt, enJob_SetPlanningDatesBySLAoverschrijft ze vanuit het servicecontract (SLA). Planborden schrijven ze rechtstreeks terug bij verslepen (AssetPlanner_JobChangeDateFromStartDate,Gantt_ModifyJob). Consultanttip: pas je de prioriteit-doorlooptijden of het SLA aan, dan verschuiven bestaande jobs pas bij een herberekening — niet met terugwerkende kracht.Priority— Wordt gevuld doorJob_SetDefaultPriority(standaard uit de context/meldingstype) en, in de ITSM-context, doorJob_SetPriorityByImpactAndUrgencydat de prioriteit afleidt uit de impact×urgentie-matrix. Omdat de prioriteit de planningsdatums aanstuurt (zie hierboven), triggert een prioriteitswijziging doorgaans een herberekening.ServiceContractTargetFinishedDate— Uitsluitend gezet doorJob_SetPlanningDatesBySLA(vanuit het gekoppelde ServiceContract) en geleegd doorJob_ResetSLARelatedValueswanneer de SLA-koppeling vervalt. Wordt door 30 workflows gelézen voor SLA-bewaking, maar mag niet handmatig worden overschreven.Status(recordstatus) — De levenscyclus loopt via dedicated workflows in plaats van vrije statuswijziging:Job_CreateAndInitialize(beginstatus), deJob_Pre*-reeks (Job_PreApprove,Job_PreActivate,Job_PreComplete,Job_PreClose,Job_PreDelete) als gates per statusovergang, enJob_ChangeProgressStatusvoor de functionele ProgressStatus. 71 workflows schrijvenStatus(grotendeels viaChangeStatus); filter erop met de statusmatrix.AcceptedBy/AcceptedDate— Gezet doorJob_Accept(enMobile_Job_Acceptvanuit de app): de uitvoerder accepteert de job, waarna deze velden de medewerker en het tijdstip vastleggen. Bepalend voor de "geaccepteerd"-stap in de werkstroom.Equipment/ kostendragers — Bij het koppelen of wijzigen van equipment nemen workflows alsJob_ChangeEquipmentenJob_CopyCostunitsFromBuildingautomatisch kostendragers (CostCenter, Department, Site, ProcessFunction) over van het object, zodat kosten op de juiste dragers landen.
Het volledige, gegenereerde overzicht van álle Job-properties met hun schrijvende/lezende/filterende workflows staat in reference/properties/Job.
Relaties met andere entiteitenbewerken
| Property | Verwijst naar | Omschrijving |
|---|---|---|
| Equipment | equipment | Gekoppeld equipment |
| Equipments | List[EquipmentJob] | Meerdere equipments |
| WorkOrder | WorkOrder | Werkorder/project |
| PmWorkOrder | PmWorkOrder | PO-model |
| Project | project | Project |
| Employee | employee | Uitvoerend medewerker |
| Department | Department | Afdeling |
| CostCenter | CostCenter | Kostenplaats |
| Priority | Priority | Prioriteit |
| FailType | FailType | Storingstype |
| Activity | Activity | Activiteit |
| WorkOrderType | WorkOrderType | Werkordertype |
| Vendor | Vendor (supplier) | Leverancier |
| ServiceContract | ServiceContract | SLA/Servicecontract |
| BackOffice | BackOffice | Backoffice (readonly) |
| SkillCategory | SkillCategory | Vakgroep |
| Foreman | Foreman | Voorman |
| Site | Site | Vestiging |
| ProcessFunction | ProcessFunction | Procesfunctie |
| ParentJob | Job | Bovenliggende job (multijob) |
| ChildJobs | List[Job] | Onderliggende jobs |
| MasterJob | Job | Master-job |
| ChangeJob | Job | Wijzigingsjob |
| ProblemJob | Job | Probleemjob |
| SafetyIncident | SafetyIncident | Veiligheidsincident |
| Permits | List<Permit> | Werkvergunningen |
| Materials | List[JobMaterial] | Materialen |
| Resources | List[JobResource] | Resources |
| Externals | List[JobExternal] | Externe kosten |
| Tasks | List[JobTask] | Taken |
| Tools | List[JobTool] | Gereedschappen |
| InspectionLines | List[JobInspectionLine] | Inspectielijnen |
| PurchaseLines | List[PurchaseLine] | Inkoopregels |
| PurchaseRequestLines | List[PurchaseRequestLine] | Bestelaanvraagregels |
| Customer | Customer | Klant |
Tips voor consultantsbewerken
- Context is allesbepalend: De context bepaalt welke velden zichtbaar zijn, welke workflows actief zijn en welke statustransities mogelijk zijn. TD (1) is de standaard voor technisch onderhoud.
- Statusflow: De standaard statusflow is: Aanvraag (64) -> Open (1) -> Goedgekeurd (2) -> Actief (4) -> Gereed (16) -> Compleet (4096) -> Gesloten (32). Niet alle statussen worden in elke context gebruikt.
- Multijobs: Via
IsMultijobenMultijob/SubJobskunnen jobs hiermee worden gebundeld. - Kostenregistratie: Kosten worden opgebouwd uit uren (WeekLabs), materialen (Materials), externe kosten (Externals), resources (Resources) en gereedschappen (Tools).
- SLA-bewaking: Via
ServiceContract,ServiceContractTargetFinishedDateen gerelateerde velden wordt de SLA-naleving gevolgd. - Remark-velden: Er zijn veel RemarkChar-, RemarkInt-, RemarkDate- en RemarkText-velden beschikbaar voor klantspecifieke uitbreiding.
- Selfservice: Jobs met context SelfService (524288) worden typisch aangemaakt via het eindgebruikersportaal.
- Werkvergunningen: Via de
Permits-relatie kunnen werkvergunningen worden gekoppeld aan een job.
Database Detailsbewerken
De tabel dba.Job bevat 308 kolommen -- verreweg de grootste tabel in Ultimo. Hieronder de belangrijkste technische details.
Computed columns (berekende velden)bewerken
| Kolom | Formule (vereenvoudigd) | Toelichting |
|---|---|---|
JobTotalCost |
JobMatCost + JobExtCost + JobTlsCost + JobLabCost + JobPurchCost + JobMemorandumCost |
Totale werkelijke kosten -- som van materiaal, extern, gereedschap, arbeid, inkoop en pro-memorie |
JobTotalCalc |
JobMatCalc + JobExtCalc + JobTlsCalc + JobResCalc + PurchaseLine-kosten + PurchaseRequestLine-kosten |
Totaal berekend (begroot) -- inclusief positieve inkoopkosten |
JobTotalInv |
JobEqmInv + JobMatInv + JobExtInv + JobTlsInv + JobLabInv + JobPurchInv + JobIoTermInv |
Totaal gefactureerd -- som van alle facturatiecomponenten |
JobPurchCalc |
Positieve som van JobPchTotalBookCostExlVat + JobPchTotalBookCostInclVat |
Berekende inkoopkosten (negatieve waarden worden op 0 gezet) |
JobPurchaseRequestCalc |
Idem voor bestelaanvraagregels | Berekende kosten uit bestelaanvragen |
JobPercCompleteRaw |
JobHours / JobHoursCalc * 100 |
Voortgangspercentage op basis van uren (onafgerond) |
JobHoursToPlan |
max(JobHoursCalc - JobPlanHours, JobHoursToPlanFromResources) - niet-goedgekeurde uren |
Nog te plannen uren |
JobExceedsOriginalTimeEstimate |
1 als gerealiseerde uren (minus niet-goedgekeurd) < geplande uren (minus niet-goedgekeurd) |
Indicator of de tijdsschatting is overschreden |
JobNonServDeskServRequest |
0 als CreatedByServiceDesk of SelfServiceRequest, anders 1 |
Indicator voor niet-servicedesk meldingen |
JobFinalFinishDate |
JobOriginalSchStartDate + JobExecutionDays + JobExtensionDays - 1 |
Uiterste afrondingsdatum inclusief verlengingen |
JobOriginalFinalFinishDate |
JobOriginalSchStartDate + JobExecutionDays - 1 |
Oorspronkelijke uiterste afrondingsdatum |
Kolommen gezet door triggers (selectie van 43 trigger-kolommen)bewerken
Kostengerelateerde kolommen (allemaal decimal(21,5), bijgewerkt vanuit Cost/PurchaseLine/etc.):
| Kolom | Bron | Toelichting |
|---|---|---|
JobMatCalc / JobMatCost / JobMatInv |
JobMat | Materiaalkosten: berekend / werkelijk / gefactureerd |
JobExtCalc / JobExtCost / JobExtInv |
JobExt | Externe kosten: berekend / werkelijk / gefactureerd |
JobTlsCalc / JobTlsCost / JobTlsInv |
JobTls | Gereedschapskosten |
JobResCalc |
JobRes | Resourcekosten (berekend) |
JobLabCost / JobLabInv |
Cost | Arbeidskosten / gefactureerd |
JobPurchCost / JobPurchInv / JobPurchCommit |
PurchaseLine | Inkoopkosten / gefactureerd / commitment |
JobMemorandumCost |
Cost | Pro-memorie kosten |
JobEqmInv / JobIoTermInv |
InvoiceOutLine / JobInvOutTerm | Equipment-facturatie / uitbestedings-termijnen |
Urengerelateerde kolommen:
| Kolom | Type | Toelichting |
|---|---|---|
JobHours |
decimal(21,2) | Gerealiseerde uren (uit uren-boekingen) |
JobHoursCalc |
decimal(21,2) | Berekende/begrote uren |
JobHoursInv |
decimal(21,2) | Gefactureerde uren |
JobPlanHours |
decimal(21,2) | Geplande uren (uit JobSchedulePart) |
JobHoursToPlanFromResources |
decimal(21,2) | Te plannen uren vanuit resources |
JobUnapprovedHoursCalculated / JobUnapprovedHoursPlanned |
decimal(21,2) | Niet-goedgekeurde uren |
Statusgerelateerde kolommen:
| Kolom | Type | Toelichting |
|---|---|---|
JobRecStatus |
int | Status (gezet door trigger bij statuswijziging) |
JobActiveDate / JobActiveEmpId |
datetime / nvarchar | Datum en medewerker van activering |
JobApprvDate / JobApprvEmpId |
datetime / nvarchar | Datum en medewerker van goedkeuring |
JobPercComplete |
decimal(21,2) | Voortgangspercentage (afgerond) |
JobBofId |
nvarchar(4) | Backoffice-ID |
JobPrsId |
nvarchar(11) | Persoon-ID |
JobInspectionLines |
int | Aantal inspectielijnen |
JobRequestedResponse / JobRequestedCustomerSatisfaction |
smallint | SLA-response en klanttevredenheid |
JobExtensionDays |
int | Aantal verlengingsdagen |
JobNumberOfMaterials |
int | Aantal materiaalregels |
Belangrijke defaultsbewerken
| Kolom | Default | Toelichting |
|---|---|---|
JobContext |
1 (TD) |
Standaard context Technische Dienst |
JobRecStatus |
0 (None) |
Standaard status |
JobCreatedByServiceDesk |
0 (false) |
Niet via servicedesk aangemaakt |
JobSelfServiceRequest |
0 (false) |
Geen selfservice-aanvraag |
JobIsMultijob |
0 (false) |
Geen multijob |
JobIsMaster |
0 (false) |
Geen master-job |
JobNoPermit |
0 (false) |
Werkvergunning niet uitgesloten |
JobLotoApplicable |
0 (false) |
LOTO niet van toepassing |
JobUseWorkScheduleForPlanning |
1 (true) |
Werkrooster gebruiken voor planning |
JobUseEquipmentReservation |
1 (true) |
Equipment-reservering gebruiken |
JobAllowMultijobPlanningFieldsToExpand |
1 (true) |
Multijob-planvelden uitklapbaar |
JobConvertedDurationToHours |
1 (true) |
Doorlooptijd omgezet naar uren |
JobRecCreateDate |
sysdatetimeoffset() |
Aanmaakdatum automatisch |
Triggers en externe triggersbewerken
Job heeft 5 eigen triggers (INSERT, UPDATE, INSTEAD OF DELETE, plus 2 summary-triggers) en wordt beinvloed door 40 externe triggers -- het hoogste aantal van alle entiteiten:
- Cost-triggers: Wijzigingen in kostenboekingen updaten alle kostenvelden
- PurchaseLine/PurchaseRequestLine-triggers: Inkoopgerelateerde kostenaggregatie
- JobMat/JobExt/JobTls/JobRes-triggers: Materiaal-, externe-, gereedschaps- en resourceregels
- JobWeek-triggers: Weekplanning-aggregatie
- JobSchedulePart-triggers: Planningsuren-aggregatie
- JobInsp-triggers: Inspectielijnaantallen
- InvoiceOutLine/JobInvOutTerm-triggers: Facturatie-aggregatie
- JobMaintRangeHistory-triggers: Onderhoudsbereik-historie
- BackOffice-triggers: Backoffice-toewijzing
- Project/Incident-triggers: Project- en incident-statuswijzigingen propageren naar de job
- SDefPrsContext-triggers: Procesfunctie-context synchronisatie
- UmmSettings-triggers: Applicatie-instellingen propagatie
Consultanttip: Door de 40 externe triggers is de Job-tabel sterk gekoppeld aan andere entiteiten. Bulkwijzigingen op gerelateerde tabellen (bijv. Cost, PurchaseLine) kunnen significante performance-impact hebben. Het INSTEAD OF DELETE-trigger voorkomt directe verwijdering.
Brondatabewerken
Let op: De wiki-samenvatting hierboven toont een curated subset van properties en praktische consultant-tips. Voor ground truth (exacte kolomnamen, alle properties, defaults, triggers) gebruik de onderstaande tools.
- Entity-definitie —
lookup_entity("Job")· reference/entities/Job Alle properties, contexts en statussen. Bron:Entities.xml. - DB-schema —
lookup_table_schema("Job")· reference/tables/Job Alle DB-kolommen, triggers, computed columns en defaults. Bron:database-schema.json. - Gerelateerde workflows —
find_workflows("", entity="Job")Alle Before/After Save events en andere workflow-ActionFields voor Job. Bron:workflows.xml. - Property-gebruik —
lookup_property_usage("Job", "ScheduledStartDate")· reference/properties/Job Welke workflows een specifieke Job-property lezen/schrijven/filteren. Bron:workflows.xml. - Workflow-XML van een vuller —
lookup_workflow("Job_RecalculatePlanningDatesBasedOnPriority")De volledige logica achter het property-gedrag hierboven. Bron:workflows.xml.
Zie ookbewerken
- equipment - Assets waaraan wordt gewerkt
- pm-workorder - Preventief onderhoud dat jobs genereert
- purchase - Bestellingen vanuit jobs
- purchase-request - Bestelaanvragen vanuit jobs
- permit - Werkvergunningen
- work-order - Werkorders/projecten
- employee - Medewerkers