PmWorkOrder (Preventief Onderhoudsmodel)
De PmWorkOrder-entiteit (ook wel PO-model genoemd) definieert het preventief onderhoud in Ultimo. Een PO-model bepaalt welk onderhoud wanneer moet worden uitgevoerd, op basis van tijd (frequentie) of conditie (meetwaarden). Het PO-model genereert automatisch jobs wanneer onderhoud gepland staat.
Entiteitsnaam: PmWorkOrder
Databasetabel: PmWorkOrder
Primaire sleutel: PMWID (nvarchar 5)
Contextsbewerken
| Value | Naam | Beschrijving |
|---|---|---|
| 0 | PmWorkOrderContext.None | Standaard |
| 1 | PmWorkOrderContext.Standard | Standaard |
| 2 | PmWorkOrderContext.Instrument | Instrument |
| 4 | PmWorkOrderContext.CourseRoute | Looproute |
| 8 | PmWorkOrderContext.ChangeTemplate | Wijzigingssjabloon |
| 16 | PmWorkOrderContext.Building | Gebouw |
| 32 | PmWorkOrderContext.PeriodicActivity | Periodieke activiteit |
| 64 | PmWorkOrderContext.Fleet | Fleet |
| 128 | PmWorkOrderContext.BuildingCourseRoute | Looproute Gebouw |
| 256 | PmWorkOrderContext.InfraCourseRoute | Looproute Infra |
| 512 | PmWorkOrderContext.PeriodicActivityParent | Groeps-PO-model |
| 1024 | PmWorkOrderContext.PeriodicActivityChild | PO-model |
| 32768 | PmWorkOrderContext.Infra | Infra |
| 131072 | PmWorkOrderContext.IT | IT |
Statussenbewerken
| Value | Naam | Beschrijving |
|---|---|---|
| -1 | PmWorkOrderStatus.Trash | Trash |
| 0 | PmWorkOrderStatus.None | None |
| 1 | PmWorkOrderStatus.Created | Open |
| 2 | PmWorkOrderStatus.Approved | Goedgekeurd |
Belangrijkste propertiesbewerken
| Property | Type | Kolom | Nullable | Omschrijving |
|---|---|---|---|---|
| Id | UltimoString(5) | PMWID | Nee | PO-model ID |
| Description | UltimoString(250) | PMWDESCR | Ja | Omschrijving |
| Frequency | Int32 | PMWDAYS | Nee | Frequentie (aantal) |
| FrequencyPeriod | Frequency | PMWFRQID | Ja | Frequentieperiode (dag/week/maand/jaar) |
| Dynamic | Boolean | PMWFRQCODE | Nee | Dynamisch (conditie-gestuurd) |
| NextMaintenanceDate | Date? | PMWSTARTDATE | Ja | Volgende onderhoudsdatum |
| LastMaintenanceDate | Date? | PMWENDDATE | Ja | Laatste onderhoudsdatum |
| IndicatorMaintenanceInterval | Decimal | PMWHOURS | Nee | Meterstand-interval |
| IndicatorValueLastMaintenance | Decimal | PMWSTATE | Nee | Meterstand bij laatste onderhoud |
| IndicatorValueNextMaintenance | Decimal | PMWSTATENEXTEXECUTION | Nee | Meterstand bij volgend onderhoud |
| AutoClose | Boolean | PMWAUTOCLOSE | Nee | Auto-sluiten |
| GenerateImmediately | Boolean | PMWMAINTNEC | Nee | Direct genereren |
| ExecutionDays | Int32 | PMWEXECUTIONDAYS | Nee | Uitvoeringsdagen |
| ExecutionPercentage | Int32 | PMWEXECUTIONPERCENTAGE | Nee | Uitvoeringspercentage |
| Hierarchy | Int16 | PMWHIERARCHY | Nee | Hierarchieniveau |
| DaysAWeek | Int16 | PMWDAYSAWEEK | Nee | Werkdagen per week (default: 7) |
| StopRelated | Boolean | PMWSTOPRELATED | Nee | Stop-gerelateerd |
| TotalCalculated | CompanyMoney | PMWTOTALCALC | Nee | Totaal berekend (readonly/computed) |
| BelongsToSchema | Boolean | PMWBELONGSTOSCHEMA | Nee | Behoort tot schema |
| IsBulk | Boolean | PMWISBULK | Nee | Bulk-inspectie |
Functionaliteit & property-gedragbewerken
Veel PmWorkOrder-properties worden niet handmatig ingevuld, maar automatisch berekend of door workflows gevuld bij het doorlopen van de goedkeur- en generatiecyclus. Onderstaande paragrafen beschrijven het gedrag van de meest gebruikte velden; gebruik lookup_property_usage("PmWorkOrder", "<property>") voor de volledige lijst workflows per property en lookup_workflow("<naam>") voor de XML.
FrequencyenFrequencyPeriod— de kern van tijdgestuurd onderhoud — Deze twee properties worden door meer dan 10 workflows gelézen maar nooit automatisch geschréven; de planner stelt ze handmatig in.PmWorkOrder_Approved_ValidationsenPmWorkOrder_PreApprove_Validatecontroleren of de combinatie valide is (o.a. datFrequency != 0enFrequencyPeriod != Emptywanneer het om tijdgestuurd onderhoud gaat).PmWorkOrder_CheckNeedForMaintenanceberekent op basis vanFrequency/FrequencyPerioden deLastMaintenanceDateof onderhoud benodigd is en initieert vervolgensPmWorkOrder_CreateJobs. Consultanttip: eenFrequency = 0of een legeFrequencyPeriodblokkeert de volledige generatieketen — altijd valideren vóór goedkeuring.ExecutionPercentageenExecutionDays— afgeleid van het onderhoudsconcept — Beide worden doorPmWorkOrder_UpdateFromMaintenanceClassificationenPmWorkOrder_PreApprovePeriodicActivitygevuld op basis van het gekoppelde MaintenanceClassification. De workflowPmWorkOrder_PreApprovePeriodicActivitykopieertMaintenanceClassification.ExecutionDaysenMaintenanceClassification.UseExecutionPercentagenaar het PO-model — tenzijDeviateFromMaintenanceClassification = True, in welk geval de PO-modelwaarden intact blijven.PmWorkOrder_EmptyExecutionPercentageFieldsWhenSettingIsDisabledleegt beide velden wanneer deUseExecutionPercentage-instelling wordt uitgeschakeld. Let op:ExecutionPercentage = 0terwijlUseExecutionPercentage = Trueis een geblokkeerde configuratie — de workflow sloeg dan de overname over (zie condities inPmWorkOrder_PreApprovePeriodicActivity).Status— de poortwachter van de generatieketen —Statuswordt door 15 workflows geschreven. De kernketen is:PmWorkOrder_PostApprove(goedkeuren + PmJobs goedkeuren + volgende onderhoudsdatum op equipment zetten),PmWorkOrder_PostReopen(heropenen + goedgekeurde PmJobs terugzetten naar Open), enPmWorkOrder_RemovePmWorkOrders(verwijderen incl. gekoppelde PmJobs).Equipment_ApprovePMAndUnTrashInspectionLinesenEquipment_ReopenPMAndTrashInspectionLinesschrijvenStatusvanuit equipment-zijde wanneer het equipment in- of uitservice gaat. Bij periodeactiviteiten stuurtPmWorkOrder_ReopenIfItHasNoApprovedPmJobsautomatisch het heropenen aan als er geen goedgekeurde PmJobs meer zijn.AutoPmActive— automatische job-generatie — Wordt doorActionField1249geschreven en bepaalt of de PO-run (PmWorkOrder_CreateJobs) automatisch jobs aanmaakt zonder handmatig ingrijpen.PmWorkOrder_PostApprovezet deNextRunDatezodraAutoPmActive = Trueén de datum nog leeg is.PmWorkOrder_CreateJobsleestAutoPmActivebij elke run om te beslissen of generatie van toepassing is. In omgevingen met veel PO-modellen levert dit het verschil tussen handmatig beheer en volledig geautomatiseerde preventief-onderhoudsplanning.LastMaintenanceDate— historische anker voor frequentieberekening — Geschreven doorActionField169(handmatige correctie),Job_Actionfield286_ReleaseCondition(bij het vrijgeven van een job) enPmWorkOrder_Approve_Validations(bij het goedkeuringsproces).PmWorkOrder_CheckNeedForMaintenanceenPmWorkOrder_PreApprovelezen deze datum om de volgende benodigde onderhoudsdatum te berekenen.PmWorkOrder_UpdatePmWorkOrdersWithLowerFrequencyAndBelongingToSchemagebruiktLastMaintenanceDateom schema-PO-modellen met lagere frequentie te synchroniseren. Consultanttip: een verkeerdeLastMaintenanceDate(bijv. na een datamigatie) leidt direct tot vroeg of laat gegenereerde jobs — altijd controleren bij ingebruikname.IsBulk— bulk-inspectiegedrag — Wordt doorPmWorkOrder_PreReopenPeriodicActivityopTruegezet bij heropening van een bulk-periodieke activiteit.PmWorkOrder_PostReopenreset vervolgensEquipment.IsBulk = Falsezodra het PO-model is heropend.PmWorkOrder_Approve_Validations,PmWorkOrder_PostApproveenJob_PreFinish_BulkJoblezenIsBulkom bulk-specifieke validaties en afsluitlogica toe te passen. Bulk-PO-modellen combineren meerdere inspectiepunten in één job — deIsBulk-vlag is de schakelaar daarvoor.UseExecutionPercentage— integratie met onderhoudsconcept — Geschreven doorPmWorkOrder_PreInsert(initialisatie opTrue),PmWorkOrder_UpdateFromMaintenanceClassification, enPmWorkOrder_PreApprovePeriodicActivity. Meerdere ActionFields (o.a.ActionField172,ActionField1756) schrijven deze vlag interactief. De vlag bepaalt of deExecutionPercentage-waarde of deExecutionDays-waarde wordt gebruikt voor de uitvoeringsvensterberekening van de PO-run.
Het volledige, gegenereerde overzicht van álle PmWorkOrder-properties met hun schrijvende/lezende/filterende workflows staat in reference/properties/PmWorkOrder.
Relaties met andere entiteitenbewerken
| Property | Verwijst naar | Omschrijving |
|---|---|---|
| Equipment | equipment | Gekoppeld equipment |
| EquipmentMeasurementPoint | EquipmentMeasurementPoint | Meetpunt (conditie-gestuurd) |
| ProcessFunction | ProcessFunction | Procesfunctie |
| JobPlan | JobPlan | Werkplan |
| Employee | employee | Uitvoerend medewerker |
| SkillCategory | SkillCategory | Vakgroep |
| Priority | Priority | Prioriteit |
| WorkOrderType | WorkOrderType | Werkordertype |
| WorkOrder | WorkOrder | Werkorder |
| CostCenter | CostCenter | Kostenplaats |
| CostType | CostType | Kostensoort |
| Department | Department | Afdeling |
| Site | Site | Vestiging |
| Vendor | Vendor (supplier) | Leverancier |
| ServiceContract | ServiceContract | Servicecontract |
| MaintenanceClassification | maintenance-classification | Onderhoudsconcept |
| GroupPmWorkOrder | PmWorkOrder | Groeps-PO-model |
| PmWorkOrdersInGroup | List[PmWorkOrder] | PO-modellen in groep |
| PmJobs | List[PmJob] | PO-taken |
| Jobs | List<Job> | Gegenereerde jobs |
| InspectionLines | List[InspectionLine] | Inspectielijnen |
Tips voor consultantsbewerken
- Frequentie vs. Conditie: Een PO-model kan tijdgestuurd (vaste frequentie) of conditiegestuurd (op basis van meetpuntwaarden) zijn. Bij conditiegestuurd staat
Dynamic = true. - Marges: Via
MarginBeforeQuantity/MarginAfterQuantityen bijbehorende tijdseenheden kan een marge worden ingesteld waarbinnen een job moet worden uitgevoerd. - Groeps-PO: Met
GroupPmWorkOrderkunnen PO-modellen worden gegroepeerd zodat ze gezamenlijk worden aangestuurd. - Looproutes: Context
CourseRoute(4) wordt gebruikt voor inspectieroutes waarbij een monteur meerdere equipments langs gaat. - Generatie: Het PO-model genereert jobs via de PO-run (WorkOrderSchedule). De
NextMaintenanceDatewordt automatisch berekend. - Werkplan: Via het
JobPlanworden standaard materialen, taken, resources en uren op de gegenereerde job gezet. - Stop-gerelateerd: Met
StopRelated = trueworden jobs alleen gegenereerd tijdens een plant-stop. - Uitvoeringspercentage: Via
ExecutionPercentagekan worden aangegeven hoeveel procent van de geplande taken daadwerkelijk wordt uitgevoerd.
Database Detailsbewerken
De tabel dba.PmWorkOrder bevat 106 kolommen.
Computed columns (berekende velden)bewerken
| Kolom | Formule | Toelichting |
|---|---|---|
PmwTotalCalc |
PmwMatCalc + PmwExtCalc + PmwTlsCalc + PmwResCalc + PmwPurchaseRequestCalc |
Totaal berekende kosten -- som van alle begrote kostencomponenten (materiaal, extern, gereedschap, resources, bestelaanvragen) |
Kolommen gezet door triggers (selectie van 21 trigger-kolommen)bewerken
Kostengerelateerde kolommen (allemaal decimal(21,5)):
| Kolom | Bron | Toelichting |
|---|---|---|
PmwMatCalc |
JpMat (werkplan-materialen) | Begrote materiaalkosten |
PmwExtCalc |
JpExt (werkplan-extern) | Begrote externe kosten |
PmwTlsCalc |
JpTls (werkplan-gereedschap) | Begrote gereedschapskosten |
PmwResCalc |
JpRes (werkplan-resources) | Begrote resourcekosten |
PmwPurchaseRequestCalc |
JpPurchaseRequestLine | Begrote inkoopkosten |
PmwSubMatCalc / PmwSubExtCalc / PmwSubTlsCalc / PmwSubResCalc / PmwSubPurchaseRequestCalc |
Onderliggende PO-modellen | Kosten van sub-PO-modellen (bij groeps-PO) |
Relatie- en scheduling-kolommen:
| Kolom | Type | Toelichting |
|---|---|---|
PmwRecStatus |
int | Status (trigger-gestuurd) |
PmwSitId |
nvarchar(8) | Vestiging (overgenomen van equipment) |
PmwDepId |
nvarchar(11) | Afdeling |
PmwCcrId |
nvarchar(9) | Kostenplaats |
PmwPrfId |
nvarchar(50) | Procesfunctie |
PmwSpcId |
nvarchar(40) | Ruimte |
PmwEqmmspEqmId / PmwEqmmspMspId |
nvarchar | Equipment meetpunt-referentie (voor conditiegestuurd PO) |
PmwMeterEqmId |
nvarchar(24) | Meter-equipment (voor meterstandgestuurd PO) |
PmwPrfmspMspId / PmwPrfmspPrfId |
nvarchar | Procesfunctie-meetpunt referentie |
Belangrijke defaultsbewerken
| Kolom | Default | Toelichting |
|---|---|---|
PmwContext |
1 (Standaard) |
Standaard context |
PmwRecStatus |
0 (None) |
Standaard status |
PmwDays |
0 |
Frequentie (moet ingesteld worden) |
PmwFrqCode |
0 |
Frequentiecode (0 = niet dynamisch) |
PmwHours |
0 |
Meterstand-interval |
PmwState |
0 |
Huidige meterstand |
PmwStateNextExecution |
0 |
Meterstand volgende uitvoering |
PmwAutoClose |
0 (false) |
Niet automatisch sluiten |
PmwAutoPmActive |
0 (false) |
Auto-PM niet actief |
PmwBelongsToSchema |
0 (false) |
Behoort niet tot schema |
PmwHierarchy |
0 |
Geen hierarchie |
PmwIsBulk |
0 (false) |
Geen bulk-inspectie |
PmwStartState |
0 |
Beginstatus meterstand |
PmwMaintNec |
0 (false) |
Niet direct genereren |
PmwStopRelated |
0 (false) |
Niet stop-gerelateerd |
PmwUseExecutionPercentage |
1 (true) |
Uitvoeringspercentage standaard gebruiken |
PmwDeviateFromMntc |
0 (false) |
Niet afwijken van onderhoudsconcept |
PmwReopenedAutomatically |
0 (false) |
Niet automatisch heropend |
PmwRecCreateDate |
sysdatetimeoffset() |
Aanmaakdatum automatisch |
Triggers en externe triggersbewerken
PmWorkOrder heeft 2 eigen triggers (INSERT, UPDATE) en wordt beinvloed door 17 externe triggers:
- PmJob-triggers: Wijzigingen in PO-taken updaten het PO-model
- JpMat/JpExt/JpTls/JpRes/JpPurchaseRequestLine-triggers: Werkplan-componentwijzigingen herberekenen de kostenkolommen
- ObjectJobPlan/PmJobJobPlan-triggers: Werkplan-koppelingen synchroniseren
- Equipment-triggers: Wijzigingen aan equipment propageren naar het PO-model
- ProcessFunction-triggers: Procesfunctie-wijzigingen (inclusief DELETE) propageren
Consultanttip: De Sub-kostenkolommen (SubMatCalc, etc.) zijn relevant bij groeps-PO-modellen en bevatten de opgetelde kosten van onderliggende PO-modellen. Bij het analyseren van kosten voor een PO-model moet je zowel de directe kosten als de sub-kosten bekijken.
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("PmWorkOrder")· reference/entities/PmWorkOrder Alle properties, contexts en statussen. Bron:Entities.xml. - DB-schema —
lookup_table_schema("PmWorkOrder")· reference/tables/PmWorkOrder Alle DB-kolommen, triggers, computed columns en defaults. Bron:database-schema.json. - Gerelateerde workflows —
find_workflows("", entity="PmWorkOrder")Alle Before/After Save events en andere workflow-ActionFields voor PmWorkOrder. Bron:workflows.xml. - Property-gebruik —
lookup_property_usage("PmWorkOrder", "ExecutionPercentage")· reference/properties/PmWorkOrder Welke workflowsExecutionPercentagelezen, schrijven of filteren (8 writers incl.PmWorkOrder_UpdateFromMaintenanceClassification). Bron:workflows.xml. - Workflow-XML van een vuller —
lookup_workflow("PmWorkOrder_PreApprovePeriodicActivity")Volledige logica achter het overnemen vanExecutionDays/UseExecutionPercentageuit het MaintenanceClassification bij goedkeuring van een periodieke activiteit. Bron:workflows.xml.
Zie ookbewerken
- equipment - Assets waarvoor PO-modellen gelden
- job - Gegenereerde werkorders
- maintenance-classification - Onderhoudsconcepten
- work-order - Werkorders/stops