Data model¶
This page is incomplete
What follows is what I know for certain from the catalogue strings and the code. Where I am inferring, it says so. The full layer schema is in the repository and still needs checking — noted in the journal.
Layers¶
Confirmed names (the code looks them up by these literal strings):
| Layer | Geometry | How I know |
|---|---|---|
Poles |
point | Unable to create or find the Poles layer! / Layer 'Poles' not found! |
Route |
line | Route layer 'Route' not found! |
ODF |
point | <extracomment>: "it doubles as the layer name" |
| Service Area | polygon | entry into Service Area layer |
| Optical slacks | point | "the group of slack tools, and the map layer they write to" |
Layer names are not translated
'Poles' and 'Route' in quotes are actual layer names, not words. They stay
untouched in the translation — otherwise the message stops matching reality. The
unquoted "Route layer" is translated: ტრასის შრე 'Route' ვერ მოიძებნა!
The buildings layer¶
The field set that confirms the Object = building reading:
- number of floors
- number of basement levels
- street
- house number
This is exactly the list the maintainer cites as proof that Object means a building
rather than a generic GIS object.
Identity — fiberq_uuid¶
Every feature carries a unique identifier in the field fiberq_uuid.
Validation rule B4 checks three things:
| Message | Georgian |
|---|---|
Layer is missing the fiberq_uuid identity field |
შრეს აკლია იდენტიფიკაციის ველი fiberq_uuid |
Feature has no fiberq_uuid value |
ობიექტს არ აქვს fiberq_uuid-ის მნიშვნელობა |
Duplicate fiberq_uuid |
fiberq_uuid დუბლირებულია |
If the field is missing, the fix is offered too: "Re-open the project so migration can add fiberq_uuid, or re-create the layer." — so there is a migration mechanism that adds the field when the project opens.
Schema version
The report has its own Schema version field, so the schema is versioned and
migrations apply in sequence. (Repository issues #21 and #22 confirm it: canonical
schema model + project schema_version marker, and versioned schema migration runner +
uuid identity invariant.)
Length fields¶
The Serbian heritage shows here directly — the field names are Serbian and are not translated:
| Field | What it is |
|---|---|
duzina_m |
Length in metres (sr dužina = length) |
duzina_km |
Length in kilometres |
slack_m |
Slack in metres |
total_len_m |
Total length in metres |
Two invariants¶
Validation checks two arithmetic relationships:
The corresponding messages (D3):
total_len_m ({total}) should equal duzina_m + slack_m ({expected})duzina_km ({km}) does not match duzina/1000 ({expected})Stored {field} ({stored}) does not match the drawn geometry ({computed})
Stored vs drawn¶
This distinction is the whole of rule D3:
- Stored length (
stored) — the number written in the attribute - Drawn geometry (
computed) — the real length of the line on the map
If someone moved the route, the geometry changed while the attribute stayed behind → an
issue. Recalculate lengths is what fixes it.
How it is measured
Lengths are measured on the project ellipsoid, the same way the QGIS measure tool does. Slack values are read but never changed.
CRS¶
- The project must have a CRS set (E1)
- All FiberQ layers must use the same CRS
- A geographic CRS is a problem: the snapping tolerance is measured in degrees
- Measuring length needs either a projected CRS or a project ellipsoid
Still to check¶
- The full list of layers and each one's fields
- Cable attributes — type, subtype, capacity
- The elements layer — one, or several by type?
- How
Relationsare stored - The storage format for a latent element (distance along the cable)