What is inside the closeout ZIP, and every field of its manifest.json and package.json.
asbuilt export writes a closeout package: one folder with every delivery file, and the same files in one ZIP for sending. The same project, freeze instant and profile always give the same bytes, down to the ZIP. Two exports can therefore be compared by one number, the manifest_sha256.
The folder and the ZIP
The ZIP is named closeout-<project>-<freeze instant>.zip, for example closeout-ee-demo-20260101T000000Z.zip. Every entry is dated at the freeze instant.
Entry
What it is
<project>.dxf
The drawing, with the layers and symbols of the export profile.
<project>.geojson
The network as GeoJSON, in the delivery coordinate system.
<project>.gpkg
The network as a GeoPackage, for GIS software.
<project>.pdf
The closeout book: verdicts, OTDR results, evidence list and their SHA-256.
package.json
Everything the files above were made from, in one document. Fields below.
manifest.json
The list of every other entry with its SHA-256. Fields below.
evidence/<sha256>.<ext>
Each photo or sketch, named by its SHA-256.
traces/<sha256>.sor
Each OTDR file as it was measured, named by its SHA-256.
The folder holds the same files and the ZIP. Files exported with a provisional profile carry the marking PROFILE NOT AUTHORITY-VERIFIED.
The manifest_sha256
The manifest_sha256 is the SHA-256 of manifest.json. Since the manifest lists the SHA-256 of every other entry, this one number identifies the whole package. asbuilt export prints it; a recorded package keeps it.
To check a package you received, compute the SHA-256 of its manifest.json and of every entry it lists, and compare.
manifest.json
Key
Type
Meaning
schema
text
The manifest format: asbuilt.closeout-manifest/1.
project_id
id
The project’s id.
project_name
text
The project’s name.
frozen_at
time
The freeze instant, YYYY-MM-DDTHH:MM:SSZ.
profile.id
text
The export profile used.
profile.version
text
Its version.
profile.sha256
text
SHA-256 of the profile file used, so a profile change shows.
profile.production
true or false
Whether the profile is a production profile.
crs.horizontal_srid
number
EPSG code of the horizontal coordinate system, such as 3301 (L-EST97).
crs.vertical_epsg
number
EPSG code of the height system, such as 9663 (EH2000).
crs.pipeline_id
text
The pinned coordinate pipeline of the project.
toolchain.asbuilt
text
The ruumica program version.
toolchain.gdal
text
The GDAL version that wrote the GeoPackage.
toolchain.typst
text
The Typst version that wrote the closeout book.
entries[].path
text
Path of the entry in the ZIP. manifest.json itself is not listed.
entries[].sha256
text
SHA-256 of the entry.
entries[].bytes
number
Size of the entry in bytes.
entries[].exporter
text
What made it: dxf-ee, geojson, gpkg, pdf, or package, evidence, trace for copied inputs.
entries[].version
text
Version of what made it.
package.json
The frozen package: every fact the delivery files were made from, as of the freeze instant. Lists are sorted, so the same facts always give the same bytes. All coordinates are in the delivery coordinate system: easting e and northing n in metres, and h an elevation in metres in the height system, never a depth. Lengths ending in _mm are whole millimetres.
Key
Type
Meaning
schema_version
number
The package format, currently 1. A program refuses a version it does not know.
meta
Key
Type
Meaning
meta.project_id
id
The project’s id.
meta.project_name
text
The project’s name.
meta.jurisdiction
text
Country or region code: EE, NO, SE, FI, EU, US, UK.
meta.org_name
text
The organisation delivering.
meta.org_mtr_code
text or empty
The organisation’s Estonian MTR registration code, when it has one.
meta.surveyor.name
text
The organisation’s verified surveyor; surveyor is empty until one is on record.
meta.surveyor.certificate_no
text
The surveyor’s certificate number.
meta.surveyor.certificate_level
number
The surveyor’s certificate level.
meta.frozen_at
time
The freeze instant, YYYY-MM-DDTHH:MM:SSZ.
meta.frozen_at_unix
number
The same instant in seconds since 1970.
meta.horizontal_srid
number
EPSG code of the horizontal coordinate system.
meta.vertical_epsg
number
EPSG code of the height system.
meta.crs_pipeline_id
text
The pinned coordinate pipeline.
meta.authority_profile
text
The project’s export profile.
meta.control_points[].registry_id
text
Id of a control point in the national register.
meta.control_points[].name
text or empty
Its name.
meta.control_points[].point_class
text
Its class in the register.
meta.control_points[].e
number, metres
Its easting.
meta.control_points[].n
number, metres
Its northing.
meta.control_points[].h
number, metres
Its elevation.
meta.rules.max_splice_loss_db
number, dB
The project’s splice loss limit.
meta.rules.max_connector_loss_db
number, dB
The project’s connector loss limit.
meta.rules.max_reflectance_db
number, dB
The project’s reflectance limit.
meta.rules.min_cover_m
number, metres
The minimum cover over buried infrastructure.
meta.rules.deviation_threshold_m
number, metres
How far the built network may lie from the plan before it is listed as a deviation.
meta.rules.required_ql
text
The quality level the project requires: QL_A to QL_D.
nodes[]
Key
Type
Meaning
nodes[].id
id
The node’s id.
nodes[].node_type
text
HANDHOLE, MANHOLE, CABINET, SPLICE_CLOSURE, POLE, DEPTH_POINT, BEND or STRUCTURE.
nodes[].label
text
The node’s label, as on the drawing.
nodes[].e
number, metres
Easting.
nodes[].n
number, metres
Northing.
nodes[].h
number, metres
Elevation.
nodes[].burial_depth_m
number, metres, or empty
Depth below ground, when measured.
nodes[].fix_type
text
How the position was measured: RTK_FIXED, RTK_FLOAT, PPK_FIXED, DGPS, AUTONOMOUS, SCAN_REGISTERED, TOTAL_STATION or MANUAL_REDLINE.
nodes[].h_accuracy_mm
number, millimetres, or empty
Horizontal accuracy of the position.
nodes[].v_accuracy_mm
number, millimetres, or empty
Vertical accuracy of the position.
nodes[].captured_at
time
When the position was measured.
nodes[].ql
text or empty
The quality level, when assessed. Empty in this version (Feature status).
spans[]
Key
Type
Meaning
spans[].id
id
The span’s id.
spans[].start_node_id
id
The node it starts at.
spans[].end_node_id
id
The node it ends at.
spans[].span_type
text
Its type, such as TRENCH or CONDUIT_HDPE_40MM.
spans[].outer_diameter_mm
number, millimetres, or empty
Outer diameter of the duct, when known.
spans[].z_reference
text
What the elevations describe: TOP_OF_PIPE, AXIS or INVERT.
spans[].vertices
list of [e, n, h]
The course of the span, in drawing order.
spans[].length_2d_mm
whole number, millimetres
Length on the map.
spans[].length_3d_mm
whole number, millimetres
Length along the slope.
spans[].ql
text or empty
As nodes[].ql.
cables[]
Key
Type
Meaning
cables[].id
id
The cable’s id.
cables[].label
text
The cable’s label.
cables[].cable_spec
text
The cable’s specification.
cables[].fiber_count
number
Number of fibres.
cables[].length_factor
number
Optical length divided by route length (the fibre’s helix and excess length), from the cable data.
cables[].route[].seq
number
Position of the leg in the route.
cables[].route[].span_id
id
The span the leg runs through.
cables[].route[].direction
1 or −1
1 along the span’s drawing direction, -1 against it.
cables[].slack[].node_id
id
Where a slack loop is stored.
cables[].slack[].length_mm
whole number, millimetres
Its length.
cables[].slack[].storage
text
How it is stored: COIL_IN_VAULT, FIGURE8, TRAY or AERIAL_SNOWSHOE.
splices[]
Key
Type
Meaning
splices[].id
id
The splice’s id.
splices[].node_id
id
The closure or node it is in.
splices[].tray_number
number
The tray.
splices[].in_cable_id
id
The incoming cable.
splices[].in_tube_color
text
The incoming fibre’s tube colour.
splices[].in_strand_color
text
The incoming fibre’s colour.
splices[].in_strand_index
number
The incoming fibre’s number.
splices[].out_cable_id
id
The outgoing cable.
splices[].out_tube_color
text
The outgoing fibre’s tube colour.
splices[].out_strand_color
text
The outgoing fibre’s colour.
splices[].out_strand_index
number
The outgoing fibre’s number.
splices[].loss_bidir_db
number, dB, or empty
The splice loss averaged over both directions, when both were measured.
traces[]
Key
Type
Meaning
traces[].id
id
The trace’s id.
traces[].cable_id
id or empty
The cable measured.
traces[].fiber_number
number or empty
The fibre measured.
traces[].direction
text or empty
A_TO_B (along the cable route) or B_TO_A.
traces[].from_node_id
id or empty
Where the OTDR was connected.
traces[].to_node_id
id or empty
The far end.
traces[].file_sha256
text
SHA-256 of the .sor file.
traces[].zip_path
text
Path of the .sor file in the ZIP.
traces[].supplier
text or empty
The OTDR maker, as written in the file.
traces[].wavelength_nm
number, nm
Wavelength, such as 1310 or 1550.
traces[].pulse_width_ns
number, ns
Pulse width.
traces[].group_index
number
The group index (IOR) used for distances.
traces[].ior_override
number or empty
The group index given with --ior, when one was given.