Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions NTO/WorkOrder/entities/Activity.ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
@prefix ogit: <http://www.purl.org/ogit/> .
@prefix ogit.WorkOrder: <http://www.purl.org/ogit/WorkOrder/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dcterms: <http://purl.org/dc/terms/> .

ogit.WorkOrder:Activity
a rdfs:Class;
rdfs:subClassOf ogit:Entity;
rdfs:label "Activity";
dcterms:description "A logged work activity attached to a WorkOrder. Carries optional device/asset reference (geraet), free-text description, logbook flag (export to driver/work logbook), internal-only flag, and creation timestamp. One Activity per discrete on-site or remote action.";
dcterms:source "AdaWorldAPI/WoA/models.py:Activity";
dcterms:creator "family-codec-smith";
ogit:scope "NTO";
ogit:parent ogit:Node;
ogit:mandatory-attributes (
ogit:id
);
ogit:optional-attributes (
ogit.WorkOrder:geraet
ogit.WorkOrder:beschreibung
ogit.WorkOrder:logbuch
ogit.WorkOrder:intern
ogit:created-at
Comment on lines +20 to +24
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Define the referenced WorkOrder attributes

Several attributes in these new entity attribute lists are never declared as rdfs:Property anywhere in the added namespace: for this entity geraet, logbuch, and intern are unresolved, and ogit:created-at is also not an existing global attribute (the repo uses ogit:createdAt). The same unresolved-reference pattern appears in HistoryEntry, Position, and Picture, so ontology consumers can load the entities but cannot resolve metadata/provenance for those attributes.

Useful? React with 👍 / 👎.

);
ogit:indexed-attributes (
ogit:created-at
);
ogit:allowed (
[ ogit:belongs ogit.WorkOrder:Order ]
);
.
77 changes: 77 additions & 0 deletions NTO/WorkOrder/entities/Article.ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
@prefix ogit: <http://www.purl.org/ogit/> .
@prefix ogit.WorkOrder: <http://www.purl.org/ogit/WorkOrder/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dcterms: <http://purl.org/dc/terms/> .

ogit.WorkOrder:Article
a rdfs:Class;
rdfs:subClassOf ogit:Entity;
rdfs:label "Article";
dcterms:description "Article master-data record (Artikelstamm / WaWi). Referenced by Position rows on an Order via article_id. Carries selling and purchase prices, VAT rate and supplier reference; derived margin (marge / marge_pct) is computed on demand by the Python model.";
dcterms:source "AdaWorldAPI/WoA/models.py:Article";
ogit:scope "NTO";
ogit:parent ogit:Node;
ogit:mandatory-attributes (
ogit:id
ogit.WorkOrder:beschreibung
);
ogit:optional-attributes (
ogit.WorkOrder:artikelnr
ogit.WorkOrder:preisNetto
ogit.WorkOrder:ekPreis
ogit.WorkOrder:mwstSatz
ogit.WorkOrder:lieferant
ogit.WorkOrder:aktiv
);
ogit:indexed-attributes (
ogit:id
ogit.WorkOrder:artikelnr
);
ogit:allowed (
[ ogit:belongs ogit.WorkOrder:Tenant ]
);
.

# ── attributes ───────────────────────────────────────────────────────────

ogit.WorkOrder:artikelnr
a rdfs:Property;
rdfs:label "artikelnr";
dcterms:description "Article number (Artikelnummer). Tenant-local short code used on invoices, lookup forms and inventory listings.";
dcterms:source "AdaWorldAPI/WoA/models.py:Article.artikelnr";
.

ogit.WorkOrder:beschreibung
a rdfs:Property;
rdfs:label "beschreibung";
dcterms:description "Article description (Beschreibung) printed on order positions. Mandatory in the source model.";
dcterms:source "AdaWorldAPI/WoA/models.py:Article.beschreibung";
.

ogit.WorkOrder:preisNetto
a rdfs:Property;
rdfs:label "preisNetto";
dcterms:description "Net selling price (Preis netto) in the tenant's currency. Float, default 0.0.";
dcterms:source "AdaWorldAPI/WoA/models.py:Article.preis_netto";
.

ogit.WorkOrder:ekPreis
a rdfs:Property;
rdfs:label "ekPreis";
dcterms:description "Purchase price (Einkaufspreis) used for margin calculation against preisNetto.";
dcterms:source "AdaWorldAPI/WoA/models.py:Article.ek_preis";
.

ogit.WorkOrder:mwstSatz
a rdfs:Property;
rdfs:label "mwstSatz";
dcterms:description "VAT rate (MwSt-Satz) in percent applied when this article appears as a position. Float, default 19.0.";
dcterms:source "AdaWorldAPI/WoA/models.py:Article.mwst_satz";
.

ogit.WorkOrder:lieferant
a rdfs:Property;
rdfs:label "lieferant";
dcterms:description "Supplier name (Lieferant) the article is normally sourced from. Free-form string; not a relation to a separate Supplier class in the current source.";
dcterms:source "AdaWorldAPI/WoA/models.py:Article.lieferant";
.
126 changes: 126 additions & 0 deletions NTO/WorkOrder/entities/Customer.ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
@prefix ogit: <http://www.purl.org/ogit/> .
@prefix ogit.WorkOrder: <http://www.purl.org/ogit/WorkOrder/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dcterms: <http://purl.org/dc/terms/> .

ogit.WorkOrder:Customer
a rdfs:Class;
rdfs:subClassOf ogit:Entity;
rdfs:label "Customer";
dcterms:description "Customer (Kunde) of a WoA tenant. Holds postal address, billing parameters (Zahlungsziel, Stundensatz) and is the parent of all work orders, time sheets and password-vault entries belonging to that customer.";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer";
ogit:scope "NTO";
ogit:parent ogit:Node;
ogit:mandatory-attributes (
ogit:id
);
ogit:optional-attributes (
ogit.WorkOrder:kdnr
ogit.WorkOrder:firma
ogit.WorkOrder:vorname
ogit.WorkOrder:nachname
ogit:email
ogit.WorkOrder:telefon
ogit.WorkOrder:strasse
ogit.WorkOrder:plz
ogit.WorkOrder:ort
ogit.WorkOrder:iban
ogit.WorkOrder:taxId
ogit.WorkOrder:zahlungsziel
ogit.WorkOrder:stundensatz
);
ogit:indexed-attributes (
ogit:id
ogit.WorkOrder:kdnr
ogit:email
);
ogit:allowed (
[ ogit:belongs ogit.WorkOrder:Tenant ]
);
.

# ── attributes ───────────────────────────────────────────────────────────

ogit.WorkOrder:kdnr
a rdfs:Property;
rdfs:label "kdnr";
dcterms:description "Customer number (Kundennummer). Tenant-local short code used on invoices and in correspondence.";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer.kdnr";
.

ogit.WorkOrder:firma
a rdfs:Property;
rdfs:label "firma";
dcterms:description "Company name (Firma). Empty for private customers; in that case display falls back to vorname + nachname.";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer.firma";
.

ogit.WorkOrder:vorname
a rdfs:Property;
rdfs:label "vorname";
dcterms:description "Given name (Vorname) of the contact person.";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer.vorname";
.

ogit.WorkOrder:nachname
a rdfs:Property;
rdfs:label "nachname";
dcterms:description "Family name (Nachname) of the contact person.";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer.nachname";
.

ogit.WorkOrder:telefon
a rdfs:Property;
rdfs:label "telefon";
dcterms:description "Telephone number (Telefon) of the customer. Free-form string; no E.164 normalization is enforced by the source model.";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer.telefon";
.

ogit.WorkOrder:strasse
a rdfs:Property;
rdfs:label "strasse";
dcterms:description "Street and house number (Strasse).";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer.strasse";
.

ogit.WorkOrder:plz
a rdfs:Property;
rdfs:label "plz";
dcterms:description "Postal code (Postleitzahl).";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer.plz";
.

ogit.WorkOrder:ort
a rdfs:Property;
rdfs:label "ort";
dcterms:description "City / town (Ort).";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer.ort";
.

ogit.WorkOrder:iban
a rdfs:Property;
rdfs:label "iban";
dcterms:description "International Bank Account Number for SEPA payments. Optional; not modelled as a column in the current Python source but reserved here for the OGIT projection.";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer";
.

ogit.WorkOrder:taxId
a rdfs:Property;
rdfs:label "taxId";
dcterms:description "Tax identification number (USt-IdNr / Steuernummer). Optional; reserved attribute for the OGIT projection of customer billing data.";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer";
.

ogit.WorkOrder:zahlungsziel
a rdfs:Property;
rdfs:label "zahlungsziel";
dcterms:description "Payment term (Zahlungsziel) in days; default 14. Drives the faellig_am derivation on Order.";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer.zahlungsziel";
.

ogit.WorkOrder:stundensatz
a rdfs:Property;
rdfs:label "stundensatz";
dcterms:description "Hourly rate (Stundensatz) in the tenant's currency, used by labour line items. Float, default 60.0.";
dcterms:source "AdaWorldAPI/WoA/models.py:Customer.stundensatz";
.
42 changes: 42 additions & 0 deletions NTO/WorkOrder/entities/CustomerPortalUser.ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
@prefix ogit: <http://www.purl.org/ogit/> .
@prefix ogit.WorkOrder: <http://www.purl.org/ogit/WorkOrder/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dcterms: <http://purl.org/dc/terms/> .

ogit.WorkOrder:CustomerPortalUser
a rdfs:Class;
rdfs:subClassOf ogit:Entity;
rdfs:label "CustomerPortalUser";
dcterms:description "External self-service portal login bound to exactly one Customer. Authenticates via the same werkzeug pbkdf2:sha256 scheme as the internal User (with legacy SHA256+salt fallback and transparent upgrade), but has NO admin/superadmin scope. Used by customers to view their own work orders, invoices, and pay-status. Tracks last-login for audit, and carries an active-flag for soft-disabling and a forced-password-change marker.";
dcterms:source "AdaWorldAPI/WoA/models.py:CustomerPortalUser";
dcterms:creator "bus-compiler";
ogit:scope "NTO";
ogit:parent ogit:Node;
ogit:mandatory-attributes (
ogit:id
);
ogit:optional-attributes (
ogit.WorkOrder:username
ogit.WorkOrder:passwordHash
ogit.WorkOrder:aktiv
ogit.WorkOrder:mustChangePw
ogit.WorkOrder:lastLogin
ogit.WorkOrder:createdAt
);
ogit:indexed-attributes (
ogit.WorkOrder:username
);
ogit:allowed (
[ ogit:belongs ogit.WorkOrder:Customer ]
);
.

# ── attributes ───────────────────────────────────────────────────────────

ogit.WorkOrder:lastLogin
a rdfs:Property;
rdfs:label "lastLogin";
dcterms:description "ISO-8601 UTC timestamp of the most recent successful portal login. Null on accounts that have never signed in.";
dcterms:source "AdaWorldAPI/WoA/models.py:CustomerPortalUser.last_login";
.
32 changes: 32 additions & 0 deletions NTO/WorkOrder/entities/HistoryEntry.ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
@prefix ogit: <http://www.purl.org/ogit/> .
@prefix ogit.WorkOrder: <http://www.purl.org/ogit/WorkOrder/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dcterms: <http://purl.org/dc/terms/> .

ogit.WorkOrder:HistoryEntry
a rdfs:Class;
rdfs:subClassOf ogit:Entity;
rdfs:label "HistoryEntry";
dcterms:description "An immutable audit/log row for a WorkOrder. Records an action label (aktion), free-text details, the User who performed the action, and a creation timestamp. Append-only: every state change to an Order should produce one HistoryEntry.";
dcterms:source "AdaWorldAPI/WoA/models.py:HistoryEntry";
dcterms:creator "family-codec-smith";
ogit:scope "NTO";
ogit:parent ogit:Node;
ogit:mandatory-attributes (
ogit:id
);
ogit:optional-attributes (
ogit.WorkOrder:aktion
ogit.WorkOrder:details
ogit:created-at
);
ogit:indexed-attributes (
ogit:created-at
ogit.WorkOrder:aktion
);
ogit:allowed (
[ ogit:belongs ogit.WorkOrder:Order ]
[ ogit:relates ogit.WorkOrder:User ]
);
.
Loading