ecbyts Documentation
Environmental Digital Twin Platform — complete user guide for creating 3D models of environmental monitoring sites with linked temporal data, scientific analytics, ML-powered recognition, and blockchain-backed integrity.
Current releaseOverview
ecbyts (Environmental & Occupational Core Byte Tools) is a platform for Environmental Digital Twins. It creates 3D models of environmental monitoring sites — contaminated areas, water bodies, remediation projects — with linked temporal observation data, scientific analytics, ML-powered recognition, and blockchain-backed data integrity.
3D Digital Twins
Build and visualize 3D models of environmental sites with interactive camera controls.
Scientific Analytics
Mann-Kendall trends, predictions, cost analysis, and prescriptive optimization.
Blockchain Integrity
SHA-256, ECDSA signatures, Merkle trees, and hash chains for tamper-proof data.
AI-Powered
Multi-provider LLM assistant, ML image recognition, and neural network modules.
Compliance
CONAMA/CETESB validation, domain validators, ESH matrices, and regulatory support.
IoT Integration
Connect real-time sensors for continuous environmental monitoring.
What's New
Features delivered between 24 September and 1 October 2026. Each item says what changed, where to open it and which section of this guide covers the rest. The ECBYTS Seal and the compliance presets have their own sections: ECBYTS Seal and Compliance Presets.
ECBYTS (included) AI, paid per use
Signed-in users get the ECBYTS (included) provider as the default AI, with no API key. There are two model categories, both debited from the $ECBT balance on every plan: Basic costs 2 $ECBT per 1,000 output tokens plus 8 $ECBT per 100,000 input tokens; Advanced costs 3 $ECBT per 1,000 output tokens plus 71 $ECBT per 100,000 input tokens. The balance is reserved before the call and settled by the real usage; a repeated or abandoned request is not charged. An optional free model (up to 50 requests per day per account) is available only to whoever accepts that its provider may train on the conversation. Other providers (OpenAI, Claude, Gemini, local models) stay available under AI Assistant > Configure API keys / provider.
Before the first message (chat, command bar or voice) an I agree card shows the approved privacy text with an unchecked box; Not now sends nothing. The acceptance is stored with version, date and language. The Preview before sending button in the chat header (and the tab of the same name in the privacy panel) shows what you typed next to what leaves the browser, with CPF, e-mail and phone replaced by markers such as [CPF_1]. Stored conversation text is erased after 12 months. The credits badge in the header shows the real balance, the included AI usage of the day and the latest movements. Related: AI Assistant, Wallet and Credits.
Payments: Stripe and Mercado Pago
Balance top-ups, the Pro plan and courses can be paid by card through Stripe or Mercado Pago, with the same catalog package in both. Choosing Mercado Pago switches the amount to BRL, converted from USD at the PTAX selling rate plus 3%. Pro is R$ 49 per month (a subscription in both providers) or R$ 490 per year paid once. Mercado Pago asks for the e-mail of your Mercado Pago account. The "Insufficient balance" dialog shows the same value in both providers. The pricing page lists the items paid with balance and the Seal line. Related: Wallet and Credits, Pricing.
Professional registration and model ownership
Verifying your professional council registration (CREA, CRQ, CRBio and others) and registering the ownership of a model cost R$ 25 each, by card, with up to 3 attempts, 12-month validity (then the status shows "Expired") and a 7-day refund. The uploaded proof goes through an automatic technical screening before the AI review; a suspicious file goes to human review, and an AI failure does not consume an attempt. Open it from Cloud > Professional profile, or from the Pro subscription dialog > Verify professional registration. Related: Ownership and Access, Authentication.
Terms and consents
Terms of Use version 1.2 asks every user to accept again; Terms and Privacy Policy are available in the 16 languages of the app, and the privacy policy lists hCaptcha, social logins and AI providers. The consent banner waits for the terms, and advertising measurement has its own consent. AI use has the "I agree" card above, and the free model has a separate acceptance. Related: Data Sovereignty.
Actions tab, HUD corners and phone layout
The Actions tab has a redesigned five-phase stepper, empty cards that explain what is missing, a sunburst in the family colors with path highlight and a grid diagram; it no longer scrolls sideways. The 3D cards (Seal, Equipment, Intangibles) snap to one of eight fixed corners: drag the header or use the grip button ⠿ and its "Move to..." menu; the position is saved in the browser. Below 600 px the cards go to a bottom panel with a button strip, one open at a time, Esc closes. The "Elements by family" panel became an outliner: search, family > element tree, eye toggle, severity and a detail with campaigns and the latest readings. The phone menu gained a tool search. Related: Interface Guide, Customize.
Selection bar and long press
Selecting an element in the 3D model shows an action bar next to the selection: move, rotate and scale modes (W, E, R, G), snap, X/Y/Z, focus, duplicate, hide, properties, more actions, delete and done. On desktop it sits at the top of the scene; below 600 px it moves to the footer with 44 px targets. Right-click an element (or long-press it on a phone) for its context menu; the gizmo is 40% larger on touch; Esc with a menu open only closes the menu. Related: 3D Scene, Keyboard Shortcuts.
Charts with Data, Edit and PNG
Charts show a Data / Edit / PNG bar. Data opens the underlying table with search and CSV export; Edit changes the color and visibility of each series or slice (saved per chart in the browser); PNG downloads the image. It is available in the Actions tab relation charts, the five Cost Analysis charts (the time axis now shows years), the EIS ring, the Analytics histogram and scatter (Data and PNG only) and the EVA PV/EV/AC and S-curves. Related: Analytics, Cost Analysis.
Ecby suggests the next step
Next to the Ecby mascot a box suggests one next step at a time (import, violations, trends with Mann-Kendall, interpolation, results per campaign, project location, data quality, cross-section, geology, report, sheet, presentation and steps per family) with a play button that opens the module. It hides after 8 seconds and pauses while the pointer or focus is on it. Turn it off with "Don't suggest again" or the proactive AI button. Related: AI Assistant.
Tours Trail, proof of completion and selling courses
The free ECBYTS Tours Trail course runs 10 guided tours and a final assessment (pass mark 80%). The proof of completion, a two-page PDF with QR and a performance report, costs USD 1 = 100 $ECBT; the name is confirmed before acceptance and the proof of completion shows on any device of the same account. Open it from the command palette ("Tours Trail"), the Home quick access, the tour picker or Learn. The tour ?tour=monetizacao ("How to earn with ECBYTS") shows how to price (minimum R$ 4.99), publish and receive 80% of each sale in $ECBT; "Enable payouts" next to the price in the lesson editor leads to Stripe Connect. Related: Guided Tours, Libraries Marketplace.
3D visuals and plume vertical reference
The scene uses ACES tone mapping, hemisphere light and a gradient background. Labels come in three layers with a budget of 14 on phones, show a dot in the family color and rotate between families. Each contamination layer of the interpolation can be bounded vertically: below or above the water table, the ground surface, a geological contact, a fixed elevation or a lake or river bottom, with an optional confining base and LNAPL top or DNAPL base anchoring; the plan area can follow the outline of an element. Z-X and Z-Y vertical sections of the plume are available. Open Analyze > Interpolation > layer card > Vertical reference. Related: Interpolation, 3D Labels.
Linked responsibles and auditor
In the Project tab, the technical responsible and auditor fields can be linked to an ECBYTS account: invitation, acceptance and withdrawal. Campaigns inherit the linked responsibles, and the ECBYTS Seal uses them for the proof bands. Related: Campaigns, ECBYTS Seal.
Faster start and ticker
The Home screen appears before the 3D model loads, and the loading overlay is limited to the Model tab. With a saved session the header shows your initials and "Connecting..." instead of "Sign in" while the session is restored. On small screens, slow networks or Save-Data, heavy 3D files are replaced by procedural meshes. The ticker settings explain that values are recalculated when the data changes (there is no clock), that sensors with auto-refresh bring readings every 5, 15 or 30 minutes, and that the bar is hidden on the Home screen and in Data Studio. Related: IoT Sensors, Authentication.
News on the public site
The public site has a News section with a list, article pages, RSS and sitemap, linked from the landing page, plans and courses. The first article presents the ECBYTS Seal.
Layouts: Default, Focus, Analysis and My arrangement
Open View > Layouts&, the command palette or Ctrl+Shift+L to rearrange the screen in one step. Default opens the side and bottom panels at their default size and returns the 3D HUDs to their default corners; Focus closes the side and bottom panels and leaves only the scene; Analysis opens everything with a taller bottom panel for tables and charts. Save current arrangement keeps your own layout as My arrangement. After applying a layout, Undo stays available for 10 seconds.
Data and PNG on the 3D HUD cards
The 3D HUD cards for EIS, costs, ECBT and violations now carry the same Data / PNG bar as the charts. It floats in the corner of the card and appears on hover, on keyboard focus or with Shift+F10. Data opens the table with search and CSV export, and the costs card lists every item, not only the three that fit on the card; PNG downloads the image of the card.
Terms 1.2, Purchase Contract and proof of acceptance
Terms of Use 1.2 and Privacy Policy 1.2 ask every account to accept again, and a new Purchase Contract page, in the 16 languages of the app, covers balance top-ups, the Pro plan and courses. Under the right of withdrawal, within 7 days of a purchase the full amount is refunded to the same card. Each acceptance is now recorded by the server with date, terms version, IP address and browser, as proof of the click; an account can read only its own records. The pricing page shows the AI rates, the AI data notice and the link to the contract.
Quick Start
- Open the application at
https://ecbyts.comorlocalhost:4000for local development. - On first visit, the Welcome Screen lets you choose an init mode: Random Model, Map Picker, Last Location, or Blank.
- Use the toolbar at the top to access grouped actions: File, History, Insert, Libraries, View, Analyze, and More.
- Click Insert > Add Element to create your first environmental element (well, plume, lake, etc.).
- Add Campaigns to define sampling events, then add Observations (parameter + value + timestamp) to your elements.
- Use the 3D viewport to visualize your site. Rotate (left-click drag), pan (right-click drag), zoom (scroll).
- Go to Optimize tab for analytics, neural networks, and guided environmental workflows.
- Export your model using File > Export to save as an ECBT key.
Demo Mode
Click File > Random to instantly create a sample site with elements, campaigns, observations, ticker data, and analytics. Great for exploring features.
Interface Guide
Layout
The application uses a CSS Grid layout with five main areas:
- Toolbar (top) — Flat toolbar with permanent groups and progressive-disclosure dropdowns.
- Left Panel — Element list organized by family. Click an element to select it in the 3D view.
- 3D Viewport (center) — Interactive Three.js scene showing your environmental model.
- Right Panel — Property inspector showing details of the selected element, observations, and campaigns.
- Constellation HUD (bottom) — Tabbed bottom bar with analytics charts, data entry matrix, cost analysis, timeline ticker, and more.
Panel Reference
These screenshots summarize the main panels and navigation surfaces used by most modules and submodules:
Dockable Panels
All panels support three states: docked (fixed to edge), minimized (collapsed to edge tab), and floating (draggable, resizable). Right-click a panel title bar for options.
Toolbar Groups
The toolbar uses a flat layout with permanent groups and dropdown menus for progressive disclosure:
| Group | Purpose | Key Actions |
|---|---|---|
| File | Project lifecycle and exchange | New, Random, Clear Model, Open/Import, Export, Download Key, Share URL, Drawing Plate, Diff & Merge |
| History | Edit history and duplication | Undo, Redo, Copy, Paste |
| Insert | Add model content and source data | Element, Campaign, Scene, Data Entry Matrix, EDD Import, DXF/CAD, Georeference, Field Variables, Sensors Center, Families |
| Libraries | Reusable content and packaged knowledge | Installed Libraries Gallery, Marketplace, Library Manager, Import Library, Product Wizard |
| View | Camera, layout, and display controls | 3D, Top, Front, Fit All, 2D/3D Toggle, Reset, Panels, Theme, Labels, Inspector, Symbology, Performance, Customize |
| Analyze | Analytics, modeling, automation, and AI | Temporal, Interpolation, Analytics/Governance/Cost/Issues panels, Hypothesis Test, MAC Curve, Geology, Voxels, EIS, SAO, Regulatory Standards, Aerial Recognition, ML, Workflows, Pipelines, AI Assistant |
| More | Auxiliary workspace utilities | Focus Mode, Snapshot, Account Usage, About, Documentation |
Two additional toolbar surfaces appear contextually: Voxel Controls are shown only when voxel mode is active, and the Edit Ribbon replaces the main toolbar while shape editing is in progress.
View Modes
The application has a View Router that manages four distinct modes, switchable via the toolbar or keyboard:
| Mode | Description |
|---|---|
| Home | Dashboard grid with project cards, recent activity, and quick actions. No 3D scene loaded. |
| Actions | Focused on data entry and tabular workflows — elements list, campaigns, observations. |
| 2D | Top-down orthographic view. Ideal for site plans, interpolation surfaces, and spatial analysis. |
| 3D | Full perspective 3D scene with orbit controls, labels, terrain, and voxel layers. |
Lazy 3D Initialization
The Three.js scene only initializes when you first switch to 2D or 3D mode. This keeps the Home and Actions views fast and lightweight.
Element Families (PDPL-U / PDPLU)
Elements are the building blocks of your environmental model. Each element belongs to a family that determines its 3D representation, available properties, and behavior. The classification follows the PDPL-U / PDPLU model.
In ecbyts, PDPL-U and PDPLU refer to the same organizing model: Ponto, Data, Parametro, Leitura, Unidade. This structure underpins the platform's element families, tabular observation views, CSV exports, and the broader organization of environmental records and site entities.
When you see PDPLU in the bottom Constellation HUD, it is the same concept rendered as a flat observation table and export format.
| Family | ID | Description |
|---|---|---|
| Environmental Monitoring | ||
| Contamination Plume | plume | 3D volume representing contaminated groundwater or soil. Can be visualized with interpolation surfaces. |
| Monitoring Well | well | Vertical borehole used for sampling groundwater. Supports constructive and lithologic SVG profiles. |
| Lake | lake | Surface water body. Can hold water quality observations over time. |
| River | river | Flowing water body modeled as a linear feature with cross-sections. |
| Spring | spring | Natural groundwater discharge point. Important for hydrogeological models. |
| Sample Point | sample | Soil, surface water, or other sampling location. |
| Geological Layer | stratum | Subsurface stratum representing different soil/rock types. |
| Marker | marker | Generic reference point for any location of interest. |
| Sensor | sensor | Remote IoT monitoring device. Collects real-time environmental data via external protocols. |
| Infrastructure | ||
| Building | building | Infrastructure element. Used as spatial reference for site layout. |
| Storage Tank | tank | Chemical or fuel storage container. Potential contamination source. |
| Boundary | boundary | Property or study area limits. Defines the extent of the model. |
| Spatial Blueprint | blueprint | Imported CAD/GIS footprint from DXF files. Provides base mapping. |
| ESG & H&S | ||
| Organizational Area | area | Plant sector or zone. Used for H&S metrics and resource allocation. |
| Individual | individual | Person, animal, or tree. For H&S (workers) and biodiversity (fauna/flora). |
| Incident | incident | H&S occurrence: accidents, near-misses, first aid. |
| Emission Source | emission_source | Chimney, vent, or fugitive emission point. For atmospheric emission inventories. |
| Waste Stream | waste_stream | Solid waste flow. For waste management and recycling tracking. |
| Effluent Point | effluent_point | Liquid effluent discharge point. For effluent quality monitoring. |
| Habitat | habitat | Biodiversity area: ecosystems, protected areas, restoration zones. |
| Special | ||
| Intangible Asset | intangible | Contracts, carbon credits, green energy certificates, environmental licenses. |
| Generic Element | generic | Wildcard type for elements that do not fit any other family. |
| Geological Fault | fault | Geological fault trace or zone. Used in structural geology and seismic hazard models. |
| Mining & Civil | ||
| Dam | dam | Water or tailings containment structure. Used in mining, hydro, and sanitation projects. |
| Open-pit Mine | pit | Surface benched excavation. Used in mining, quarries, and post-closure remediation. |
| Fleet & Operations | ||
| Vehicle | vehicle | Mobile fleet element (trucks, machinery, drones). Used for logistics and emission tracking. |
| Equipment | equipment | Operational equipment (pumps, generators, instruments). Used for CAPEX/OPEX and maintenance. |
| Linear Infrastructure | infra_linear | Linear built elements: pipes, cables, fences, conveyor belts. |
| Treatment System | treatment_system | Remediation and treatment systems: pump & treat, SVE, bioreactors, oil-water separators, septic systems. |
| Atmosphere | atmosphere | Atmospheric zone or air mass. Used for air quality and GHG dispersion modeling. |
| Transport & Flow | ||
| Route & Flow | route_flow | Linear directional elements: sampling routes, vehicle routes, pipes, connectors. Supports Manning hydraulics and graph connectivity. |
| Containers (Hierarchy) | ||
| Project | site_project | Top-level project container grouping all areas and zones of a site. |
| Area | site_area | Defined area within a project (e.g., contamination source zone, investigation perimeter). |
| Zone | site_zone | Sub-division of an area for granular spatial organization. |
Adding Elements
Go to Insert > Add Element, select a family, and the element will appear in the 3D viewport. Drag to position it. Use the Property Inspector (right panel) to edit coordinates, name, and properties.
Campaigns
A Campaign represents a field sampling event — a specific date when a team collected data from multiple elements. Campaigns organize observations chronologically.
- Each campaign has a date, team name, and description.
- Observations are always linked to both an element and a campaign.
- Use the Timeline Ticker in the Constellation HUD to navigate between campaigns and see how data changes over time.
- Create campaigns via Insert > Add Campaign or through the right panel.
Observations
An Observation is a single measurement at a specific point in time: a parameter (what was measured), a value (the result), and a timestamp (when). Observations are the core data of the environmental model.
- Parameter: What was measured (e.g., Benzene, pH, Dissolved Oxygen). Supports 30+ built-in parameters plus custom ones.
- Value: The numeric result with units (e.g., 0.005 mg/L). Unit conversion uses a 90+ unit catalog.
- Timestamp: When the measurement was taken (linked to a Campaign).
- Custom Fields: Additional context like sample depth, detection limit, fraction, and preservation method.
- Observations drive analytics: trends, exceedances, interpolation, compliance checks, and EIS scoring.
Scenes
Scenes are saved camera viewpoints and display configurations. They let you quickly switch between different views of your model.
- Save the current camera position, zoom, and rotation as a named scene.
- Scene snapshots are included in reports and the storyboard sequencer.
- Create scenes via Insert > Add Scene.
Stamps & Edges
Stamps are compliance or status tags attached to elements. Edges are directed relationships between elements, forming a knowledge graph of your environmental site.
Stamps
20+ predefined tags for element annotation:
compliance_ok,compliance_fail— Regulatory compliance status.priority_high,priority_medium,priority_low— Prioritization levels.retest_required,archived,under_review— Workflow status markers.- Stamps are visible in the element list and included in ECBT exports.
Edges
15+ directed relationship types between elements:
monitors— Well monitors a plume or area.sources_from,discharges_to,flows_to— Hydrological connections.contains,part_of— Spatial containment hierarchy.occurred_in,involved_in— Incident-area associations.inhabits,supplies,treats,adjacent_to— Ecological and operational links.
Adding Stamps & Edges
Select an element, then use the Stamps tab in the right panel to toggle tags. For edges, use the Edge Editor to create directed relationships between two selected elements.
Unit Conversion Engine
90+ units across 12 dimensions with automatic conversion between compatible units. When observations use different units for the same parameter, the engine converts values transparently for analytics and compliance checks.
| Dimension | Units |
|---|---|
| Concentration | mg/L, μg/L, ppm, ppb, mg/kg, μg/kg, meq/L, mol/L |
| Length | m, cm, mm, km, ft, in, yd, mi |
| Temperature | Celsius, Fahrenheit, Kelvin |
| Flow | m³/s, L/s, m³/h, L/min, gal/min |
| Mass | kg, g, mg, μg, ton, lb |
| Area | m², ha, km², acre |
| Volume | m³, L, mL, gal |
| Emissions | tCO2e, kgCO2e (GWP: CH4=28, N2O=265, SF6=23500) |
| Safety rates | per 200k hh (OSHA), per 1M hh (OIT) |
| Biodiversity | species count |
| Noise | dB(A) |
| Dimensionless | pH, ratio, percentage |
Auto-Conversion
When autoConvert is enabled on an observation, the system converts values to the parameter's default unit automatically. Custom parameters can define their own unit dimensions.
3D Scene
The 3D viewport is powered by Three.js and renders your environmental model in real-time.
Camera Controls
| Action | Mouse | Touch |
|---|---|---|
| Rotate / Orbit | Left-click + drag | One finger drag |
| Pan | Right-click + drag | Two finger drag |
| Zoom | Scroll wheel | Pinch |
| Select element | Left-click on element | Tap on element |
| Reset camera | Double-click background | Double-tap background |
Visualization Options
- Grid — Toggle reference grid on/off (View tab).
- Layer Visibility — Show/hide specific element families.
- Labels — Four categories of CSS2D billboards: element names, observation values, geology layers, and model title.
- Terrain — Enable interpolated terrain surface from elevation data.
- Symbology — Apply visual overlay profiles for standardized site mapping.
- Cursor Projector — Real-time coordinate display projected onto terrain and meshes.
3D Labels
In-scene element labeling using CSS2DRenderer billboards that always face the camera.
- Four label categories: element names, observation values, geology layers, and model title.
- Dynamic visibility based on zoom level and element selection.
- Labels update in real-time when observations or element properties change.
- Toggle via View > Labels in the toolbar.
Symbology Profiles
Standardized visual mapping profiles that control how elements are rendered in the 3D viewport. Symbology profiles ensure consistent visual communication across environmental site investigations.
- Profile-based rendering — Switch between symbology standards (ABNT, CETESB, custom) to change element colors, icons, and 3D shapes globally.
- Layer-aware styling — Each element family has configurable visual rules based on observation values, compliance status, and metadata.
- Legend generation — Auto-generated map legends matching the active symbology profile for reports and drawing plates.
- Custom profiles — Create organization-specific symbology standards via JSON configuration.
Activating Symbology
Go to View > Symbology in the toolbar to select or manage profiles. The active profile is persisted in the model and included in ECBT exports.
Analytics
The analytics module provides scientific analysis tools for environmental monitoring data, organized as a multi-viewport workspace.
Available Analyses
- Time Series Charts — Plot observation values over time with Chart.js. Compare multiple parameters and elements.
- Mann-Kendall Trend Test — Statistical test for monotonic trends in environmental data. Identifies increasing or decreasing contamination patterns.
- Predictions — Forecast future values based on historical trends using regression models.
- Cost Analysis (CAPEX+OPEX) — Roll up remediation costs by project, fiscal year, and cost category with L1–L4 aggregation.
- GA Optimization — Genetic Algorithm-based prescriptive optimization for spatial sampling network design, using Kriging variance minimization.
- Histograms — Frequency distribution of observation values.
- Scatter Plots — Bivariate analysis across parameters or elements.
- Cross-tabulation — Pivot-table analysis of multi-dimensional observation data.
- Violations Timeline — Compliance breach tracking across time.
- Temporal KPI (D2) — Time-series scoring for data density and coverage.
EventBus Integration
All analytics viewports communicate via a central pub/sub EventBus. Selecting a data point in one viewport highlights it across all others.
Parameter Filter & Radar (FEAT-FILTER-RADAR-001)
Aggregation engine that groups environmental parameters into 7 canonical classes and computes per-element radar charts for rapid multi-contaminant assessment.
- 7 canonical groups — VOC, SVOC, Metais (metals), Físico-Químicos, Hidrocarbonetos, Pesticidas, Nutrientes. Based on EPA QAPP §3.4.2.
- 6 aggregation functions — mean, median, max, min, P95 (EPA-240/B-06-003), standard deviation — configurable per group.
- O(1) element index —
buildElementGroupIndexpre-computes group membership so radar data resolves in constant time regardless of observation count. - Per-element radar —
computeElementRadarDatareturns 7-axis scores normalized to CETESB VP/VI thresholds for immediate visual risk classification. - Drill-down (Phase 2) — Canvas 2D radar renderer + lateral drill-down panel + i18n 16 locales + synchronized 3D highlighting. Pending.
Academic Reference
P95 interpolation method per EPA-240/B-06-003 §A.1.3. Group classification follows EPA QAPP §3.4.2 analyte category schema.
Scenario Simulation
Probabilistic environmental scenario modeling using Monte Carlo and Latin Hypercube Sampling (LHS). Evaluate remediation strategies under uncertainty before committing resources.
- 8 pre-defined scenarios — BTEX plume, heavy metals, chlorinated solvents, PAH, nitrate, GHG, effluent, leachate.
- 25+ remediation decisions — Pump & Treat, PRB, MNA, SVE, and more.
- P10–P90 cost ranges — CAPEX + OPEX with confidence intervals.
- Composite score —
compliance×30 + noFailure×20 + costEfficiency×20 + health×15 + speed×15
Running a Simulation
Go to Analyze > Scenarios MC in the toolbar. Select a scenario, configure distributions, and click Execute. Results target <2 s for 300 runs.
Calculator
The Calculator is a reusable filter pipeline for computing environmental metrics, compound rules, and parameter ratios from live model data.
- Metrics — Compute aggregate values (mean, max, exceedance count) across elements and campaigns.
- Compound Rules — Boolean or threshold-based rules combining multiple parameters (e.g., "Benzene > VI AND pH < 5").
- Ratios — Parameter-to-parameter ratios for diagnostic analysis.
- Hypotheses — What-if scenario definitions that feed neural network predictions.
- MAC Curves — Marginal Abatement Cost curves for remediation prioritization.
Calculator items are defined via the Data Entry Matrix in the Constellation HUD and persist in the model.
Import / Export (ECBT)
Guardar e recuperar dados / Save and recover / Guardar y recuperar
Os cards dos tours oferecem exemplos sintéticos para download: CSV de leituras, CSV com erros intencionais, GeoJSON, EDD R2 tabular CSV, modelo JSON e contorno DXF. No CAD, selecione LOCAL para o exemplo training-boundary-v1.dxf: retângulo de 10 × 5 m, área de 50 m². O EDD tabular CSV não substitui uma planilha XLSX de um perfil completo.
Escolha o destino permitido para o lote. Confirme a gravação e reabra a cópia antes de encerrar o trabalho. Choose the authorized destination, confirm saving and reopen the copy. Elija el destino autorizado, confirme y vuelva a abrir la copia.
| Destino / Destination | Uso / Purpose | Conferência / Check |
|---|---|---|
| Nuvem / Cloud / Nube | Modelo na conta e organização autorizadas | Reabrir na conta correta; conferir versão e conteúdo |
| Local e autosave | Recuperação no navegador/dispositivo | Conferir snapshot; não confundir com cópia online |
| Chave / Key / Clave | Cópia portável dos dados suportados | Importar em sessão de teste; preservar anexos necessários |
| EDD | Dados estruturados por perfil e versão | Reimportar e conferir campos, unidades e perdas |
| CSV, XLSX, JSON e SIG | Seleção ou formato interoperável disponível no módulo | Conferir filtros, CRS e relações; não presumir backup completo |
| Relatório / Report / Informe | Apresentação dos resultados | Vincular à versão dos dados; não substitui dados editáveis |
Compartilhar concede acesso conforme permissão; não cria necessariamente uma cópia independente. Sharing follows permissions and is not necessarily a backup. Compartir no equivale necesariamente a una copia de respaldo.
Retomada local / Local resume / Retomar localmente
Em Modelo Projeto Inicialização, marque Retomar sessão local quando disponível nas opções do modo aleatório. Aguarde a gravação antes de fechar. A cópia fica neste navegador/dispositivo; limpar seus dados pode removê-la. Exporte também uma cópia portável. Último projeto é uma opção distinta, vinculada ao carregamento na nuvem.
Under Model Project Initialization, enable local session resume in random-mode options. Wait for saving before closing. Browser data removal can erase this copy; also export a portable backup. Last project is a separate cloud-loading option.
En Modelo Proyecto Inicialización, active la recuperación local en las opciones del modo aleatorio. Espere a que termine el guardado. Borrar los datos del navegador puede eliminar esta copia; exporte también un respaldo portátil.
Origem do XLSX / XLSX data source / Origen del XLSX
Original preservado recupera a planilha EDD R2 de origem, quando disponível; não incorpora edições posteriores. Dados atuais exporta os campos previstos no template a partir do modelo atual. Nenhuma dessas opções comprova cobertura de todos os módulos: confira unidades, coordenadas, CRS e relações ao reimportar.
Preserved original recovers the source EDD R2 workbook when available, without later edits. Current data exports the template's supported fields from the current model. Check units, coordinates, CRS and relationships on reimport; neither option guarantees all-module coverage.
Original conservado recupera el EDD R2 de origen, sin cambios posteriores. Datos actuales exporta los campos admitidos por la plantilla. Verifique unidades, coordenadas, CRS y relaciones al reimportar.
The ECBT format is the unified serialization format for ecbyts models. It supports both simple and blockchain-backed models.
Export
- Export Key — Generates a compact ECBT string that encodes the entire model (elements, campaigns, observations, scenes, edges, calculator, constants, interpolation layers, and more). Copy and share as text.
- Export JSON — Full model as a JSON file for programmatic use.
- Download — Save the model as a downloadable file.
Import
- Import Key — Paste an ECBT key to restore a full model. Legacy ECO1 keys are also accepted for backward compatibility.
- Import JSON — Load a previously exported JSON file.
- Spreadsheet Import — Bulk import from XLSX/CSV files using the ingestion wizard.
- DXF Import — Import CAD site plans as Spatial Blueprint elements.
- URL Import — Shared links use
#key=ECBT.A0000001-...-10000000A.TBCEso the model is not sent in the HTTP request. Legacy?key=links remain readable. A fragment is not encryption: share only with authorized recipients.
ECBT Format Variants
Simple models use 6 segments. Blockchain-backed models use 10 segments (adding key ID, hash chain, Merkle root, and ECDSA signature). Both use the ECBT prefix — the format is differentiated by internal structure.
Simple (A): ECBT.A0000001-{families}-{salt}-{checksum}-{payload}-10000000A.TBCE
Blockchain (B): ECBT.B0000001-{families}-{keyId}-{prevHash}-{merkle}-{signature}-{salt}-{checksum}-{payload}-10000000B.TBCE
Compressed (C): ECBT.C0000001-{families}-{salt}-{crc32}-{payload}-10000000C.TBCE
Family codes encode which element types are present (e.g., “PWM” = Plume, Well, Marker). The checksum is a 4-character hex for integrity verification. Legacy ECO1 keys (without the ECBT envelope) are still accepted on import.
Files Module
Cloud-based file management integrated with Supabase Storage. Attach documents, images, and reports to your environmental model with full versioning and access control.
- Per-project storage — Files are organized by project with automatic folder structure.
- Drag & drop upload — Upload files directly from the file manager panel. Supports images, PDFs, DOCX, XLSX, DXF, and more.
- Inline preview — Preview images and documents without downloading. PDF and image files render inline.
- Element attachments — Link files to specific elements (e.g., well logs, lab reports, photos).
- Quota-aware — Storage usage counts against your plan quota. Free tier: 50 MB. Pro: 5 GB. Scale: 50 GB.
Accessing Files
Open the Files panel from the right sidebar or use More > Files in the toolbar. Files are synced to Supabase Storage and available across devices when authenticated.
IFC / BIM Export
Export your environmental model to IFC4 format (ISO 16739-1:2018), the international BIM standard for integration with Autodesk Revit, ArchiCAD, and BIM 360.
- Each element exported as an
IfcBuildingElementProxywith full 3D placement. - No external dependencies — pure STEP text output (ISO 10303-21).
- Axis conversion: Three.js Y-up → IFC Z-up automatically handled.
- Property sets:
ecbyts_Metadata(family, id, name) andecbyts_Observations(last observation per parameter).
Exporting to IFC
Go to File > Export > IFC (.ifc). The file can be opened in any IFC-compliant viewer (BIM Vision, IFC.js, xBIM).
Power BI Integration (BI v1)
Tabular BI API designed for analytics tools like Power BI. Endpoints expose a star-model friendly structure.
GET /api/bi/v1/schema— Table dictionary and column types.GET /api/bi/v1/dim_elements— Elements dimension.GET /api/bi/v1/dim_campaigns— Campaigns dimension.GET /api/bi/v1/fact_observations— Observations fact table (filterable by date, element, campaign, parameter).GET /api/bi/v1/fact_edges— Element relationship facts.
Interpolation
Spatial interpolation creates continuous surfaces from point observations, essential for mapping contamination plumes and terrain.
- IDW (Inverse Distance Weighting) — Simple, fast interpolation weighted by distance. Built-in, zero dependencies.
- RBF (Radial Basis Functions) — Smooth interpolation using radial basis functions. Loaded on demand via CDN.
- Kriging — Geostatistical interpolation providing best linear unbiased estimates with uncertainty quantification. Loaded on demand via CDN.
- Terrain Interpolation — Generate terrain surfaces from elevation data points.
Performance
Heavy interpolation computations run in a Web Worker off the main thread. Results are persisted to IndexedDB to avoid recomputation on reload.
Potentiometric Maps & Plume Generation
Automated spatial analysis from monitoring campaign data, generating potentiometric surfaces and contamination plumes.
- Potentiometric map — Generated from
water_levelobservations using Kriging or IDW interpolation. Shows groundwater flow direction and hydraulic gradient. - Contamination plume generation — Create plume boundaries from campaign concentration data, automatically identifying hotspots and extent.
- Contour isolines — Labeled contour lines with configurable intervals for precise value mapping.
- Coordinate deduplication — Handles co-located wells (multiple wells at similar coordinates) by averaging or selecting representative values.
- Water-level series with explicit datum — Each
water_levelobservation keeps its raw value, unit (unitId, converted to metres through the unit catalog), ISO date, campaign and quality flags. The vertical datum is read from the observation (datum:mslordepth_below_referencewithreferenceElevationor the well'scoordinates.elevation); an observation without a datum is excluded and listed as an issue (datum_missing) — it is never silently treated as an msl elevation; the legacy assumption only applies when the caller explicitly passesdefaultDatum, and every such point is flaggeddatumAssumed. Observations without a parseable date, without a reference elevation for depth readings, or with a unit that cannot be converted to metres are listed as issues and never enter the curve. - Hydrograph and interpolation — The report figure Hydrograph (water level per well) draws one curve per well (or all wells) from the same series, in metres msl with the declared datum in the footer; the Interpolation panel's water-table layer reads heads through the same module (unit converted, datum resolved) instead of the raw numeric value.
- Campaign comparison and export — The latest reading per well feeds the potentiometric figure; the command palette entry Export water-level series (TSV) downloads the whole series; two campaigns can be compared well by well (head difference in metres), and the series exports as TSV preserving raw value, unit, datum, reference elevation, conversion note, date, campaign and author (
core/hydrology/_headSeriesPure).
Generating a Potentiometric Map
Ensure your wells have water_level observations in at least one campaign. Go to the Interpolation panel in the Constellation HUD, select the campaign and Water Table layer type, then click Generate.
Voxel Modeling
3D subsurface modeling using volumetric voxels for contamination plume visualization and geochemical analysis.
- Discretize the subsurface into a 3D grid of voxels, each holding parameter values.
- Apply color ramps and opacity thresholds to visualize contamination extent in three dimensions.
- Combine with interpolation layers for integrated subsurface analysis.
- Voxel data is persisted to IndexedDB for fast reload.
Neural Networks
Custom neural network module for predictive modeling of environmental data.
- SimpleNN — Vanilla JavaScript neural network implementation (no external frameworks). Trained on calculator metric values from real element observations.
- Web Worker Training — Training runs off the main thread to keep the UI responsive.
- What-If Engine — Run scenario predictions by modifying input parameters and observing predicted outcomes.
- Plume Connector — Connect trained networks to plume visualization for dynamic contamination prediction.
- Named NN instances are persisted to IndexedDB and included in ECBT exports.
Fine-Tuning Pipeline
Domain-specific fine-tuning pipeline for training language models on environmental data. Uses Qwen2.5 as the base model with LoRA adapters for efficient specialization.
Pipeline Stages
| Stage | Description |
|---|---|
| Data Curation | Extract training pairs from environmental reports, observations, and compliance data. Auto-generates instruction/response pairs from PDPLU records. |
| Format Conversion | Convert curated data to ChatML/Alpaca format compatible with fine-tuning frameworks (Unsloth, Axolotl). |
| Training | LoRA fine-tuning with rank 16, alpha 32. Targets: q_proj, v_proj, k_proj, o_proj. Runs on consumer GPUs (RTX 3090+). |
| Evaluation | Automated benchmarks: environmental term accuracy, regulatory citation, unit conversion, and CONAMA/CETESB compliance checks. |
| Deployment | Export GGUF quantized model for local inference via Ollama or LM Studio integration. |
Training Data Sources
The pipeline ingests ecbyts model data (elements, observations, campaigns), environmental regulations (CONAMA, CETESB), and domain glossaries to produce a model specialized in Brazilian environmental consulting terminology and workflows.
ML Recognition
Machine learning modules for automated image analysis and environmental feature detection.
- Image Classification — Classify aerial or site images using neural network models.
- SLIC Superpixels — Segment images into visually coherent regions for pre-processing.
- YOLOS Object Detection — Detect environmental features (tanks, wells, buildings) in aerial imagery.
- SAM (Segment Anything) — Interactive segmentation for precise boundary extraction.
Aerial Georeferencing
Workflow for georeferencing user-owned aerial or satellite images onto the 3D model.
- Interactive GCP placement — Click and drag Ground Control Points on both the image and the map (minimum 3 points required).
- EXIF GPS bootstrap — Optionally reads GPS coordinates from JPEG EXIF metadata for initial placement.
- AI "Suggest Location" — Uses an LLM provider (OpenAI, Claude, or Gemini) to suggest the geographic location from image content.
- Live map preview — Real-time overlay of the image on the map with opacity slider and satellite toggle.
- Applies a georeferenced boundary element with the image as an overlay texture rendered in the 3D viewport.
Current Limits
GeoTIFF embedded coordinates are not auto-read yet (manual GCP works). Images >5 MB increase ECBT payload size and trigger a warning.
Blockchain Integrity
Data integrity is enforced through cryptographic primitives, ensuring environmental data cannot be tampered with after collection.
- SHA-256 Hashing — Every data point gets a unique cryptographic fingerprint.
- ECDSA Signatures — Digital signatures prove data authorship and prevent forgery (P-256 via Web Crypto API).
- Merkle Trees — Efficient verification of data sets — any modification invalidates the tree root.
- Hash Chains — Sequential linking ensures chronological ordering cannot be altered.
- AES Vault — Encrypted storage for sensitive key material.
Audit Trail
The crypto module works transparently. When blockchain mode is enabled, every observation and campaign update is automatically hashed and chained. The ECBT export includes the full integrity proof.
EIS — EnviroTech Integrity Score
The EIS (EnviroTech Integrity Score) evaluates the quality and trustworthiness of an environmental model using the 3CTA+ framework — a non-compensatory geometric weighted mean across 6 axes.
Score Axes
| Axis | Weight | What It Measures |
|---|---|---|
| T — Transparency | 3 | Evidence of data origin and provenance. Enhanced by academic credentials (1.0x–2.0x). |
| A — Accuracy | 3 | Sensor health, data accuracy, and measurement precision. |
| Cp — Completeness | 2 | Coverage uptime — planned vs. executed readings across the monitoring network. |
| Ty — Timeliness | 2 | Delivery latency — how quickly data reaches the platform after collection. |
| Cs — Consistency | 1 | SI unit consistency and internal coherence across datasets. |
| Cm — Comparability | 1 | Taxonomy alignment — consistent naming and classification enabling cross-site comparison. |
Score Interpretation
- ● ≥ 4.50 — High integrity. Model is reliable for decision-making.
- ▲ ≥ 3.50 — Moderate integrity. Review flagged axes before use.
- ◆ < 3.50 — Low integrity. Significant data quality issues.
Veto Mode
In veto mode, if Technicality (T) or Accuracy (A) scores ≤ 2, the EIS is automatically set to 0.0 — a "kill switch" that flags fundamentally unreliable data regardless of other scores.
ECBYTS Seal and Declaration
The ECBYTS Seal is a QR card that publishes, for the loaded model, the net ECBT balance, the EIS data-integrity score, the SDG ring and three proof bands (Technical Responsible with ART, independent audit, environmental agency via the Legal Representative). Anyone who scans the QR opens the public verification page with the registered numbers.
Self-declaration, never a certificate
Level 1 is the ECBYTS Declaration, a self-declared claim in the sense of ISO 14021, printed with "Not a seal nor a certification". The ECBYTS Seal is never a certificate. It serves internal use and B2B transparency; it does not serve to rank companies, to replace an accounting provision (CPC 25 / IAS 37) or as a third-party verified label.
Levels, who issues and what it costs
There are three levels. 1. Declaration: numbers only. 2. RT: the Technical Responsible attaches the ART over the issued numbers. 3. Agency: the Legal Representative attaches an acceptance document from the environmental agency that cites that ART (a filing receipt is not acceptance). The independent auditor is optional from level 2 and never changes the level; the auditor cannot be the RT or the Legal Representative of the same dataset. Every attachment points to the seal id and to the fingerprint of the numbers: if the data changes, the attachment becomes outdated and the seal falls back to Declaration until a new ART.
A seal of a random model is a free simulation for any signed-in account, with fictitious responsibles, and never counts as a seal. A seal of real data is issued only by the data owner with an active Pro account, at no cost to the owner, and only after an RT has accepted. Each responsible (RT, auditor, Legal Representative) pays USD 1 (100 $ECBT) from their own balance or by card when accepting; a partitioned dataset needs one paid attestation per partition and role.
Life cycle: after the last acceptance the seal is provisional for 7 days, the withdrawal window in which a responsible may get the USD 1 back and leave the seal. Then it is valid for 12 months. The owner may revoke it (the public record stays, marked revoked) or issue a new version that supersedes the old one. When the model changes after issuance, the card shows the seal as outdated and asks for a new issuance.
Where to find it
The card appears on the Home screen, in the Actions tab and over the 3D model. Its buttons: Rule (choose the evaluation rule), i (how the seal is calculated), the gear (appearance: show or hide the EIS ring, SDG ring, proof bands and drop; numbers and QR do not change), My seals (issued seals, state, who sees what, invitations), attachments and Issue. Hovering or clicking a ring sector explains it and leads to the data. The guided tour opens with ?tour=selo-ecbyts.
How the numbers are calculated, step by step
The seal uses the same engines as the EIS and ECBT panels, with stricter rules. The evaluation rule (AURUM, GAIA and the others) does not change the ECBT or the EIS: it sets the mandatory SDGs, the sub-preset of each front and the label printed on the seal. All formulas below are in the code; the worked examples at the end of this section are computed by that same code.
Step 1. Active compliance preset
The active compliance preset provides the EIS weights. With no preset active, the default weights apply (T 3, A 3, Cp 2, Ty 2, Cs 1, Cm 1). If the binding is invalid, the preset is revoked or its contentHash differs from the one recorded at activation, the context is blocked and the seal shows no numbers. A preset without EIS weights (for example the CETESB risk preset) leaves the seal without EIS.
Step 2. EIS (data integrity, 1 to 5)
Six core axes get a score from 1 to 5 from the observations of all elements. When an axis has no evidence it falls back to a heuristic score, which is shown as such in the examples. The four progressive axes (V, U, Un, Ex) are drawn on the ring but do not enter the number.
T (traceability) m = mean credential multiplier of the readings
(common 1.0 · professional 1.2 · pos_graduado 1.4 · mestre 1.6 · doutor 2.0)
m >= 1.8 5 · >= 1.4 4 · >= 1.2 3 · >= 1.0 2 · else 1
+0.5 if >= 90% of readings have an author (cap 5)
no readings 4 if any element has name and description, else 3
A (accuracy) sensors: operational / total; else readings within limits
(high relative uncertainty > 50% counts half);
ratio >= 0.95 5 · >= 0.80 4 · >= 0.60 3 · >= 0.40 2 · else 1
calibration: calibrated +0.5 · expired 0.5 · uncertain 0.7 · unknown 1.0
no evidence 5 if any element has coordinates, else 2
Cp (completeness) executed / planned readings of the campaigns
>= 0.95 5 · >= 0.80 4 · >= 0.60 3 · >= 0.30 2 · else 1
no numeric plan 4 if there is a boundary element, else 3
Ty (timeliness) median age of the readings at the reference date (days)
<= 30 5 · <= 90 4 · <= 180 3 · <= 365 2 · else 1
Cs (consistency) readings whose unit is in the unit catalog / readings with a unit
>= 0.95 5 · >= 0.80 4 · >= 0.60 3 · >= 0.40 2 · else 1
no readings 2
Cm (comparability) (mapped parameters + readings in the default unit) / (2 × readings)
same bands as Cs; without a parameter catalog 4 if >= 2 campaigns, else 2
EIS = axis_i ^ (w_i / £w) rounded to 2 decimals (geometric mode)
verdict: >= 4.50 Audit Ready · >= 3.50 Management Ready · else Critical Data
º (confidence) = EIS / 5 clamped to [0, 1]
The weighted geometric mean does not let a strong axis hide a weak one as much as an arithmetic mean would. "Critical Data" (EIS below 3.50) is printed next to the EIS. The veto mode (EIS = 0 when T or A is 2 or less) exists in the engine but is not applied on the seal path: the Rule screen lists it as planned.
Step 3. ECBT of the seal (net balance)
The main number is the net balance of realized assets minus environmental liabilities. Liabilities are the CAPEX and OPEX recorded on the elements (or the ERP chain when enabled), with a fixed 25% uncertainty. Natural capital never enters the main number: it goes to a separate informative line (step 4). The band is the root-sum-square uncertainty (GUM) widened by data confidence º.
V_net = £ realized assets £ liabilities (currency of the model)
u_i = |value_i| × u_frac_i (liabilities: u_frac = 0.25)
U = ( £ u_assets² + £ u_liabilities² ) (GUM, root-sum-square)
widener = 1 + 2 × (1 º) (º = 1 ×1 · º = 0.5 ×2 · º = 0 ×3)
band = [ V_net U × widener ; V_net + U × widener ]
ECBT % = V_net / denominator × 100 (only with a persisted denominator)
The ECBT percentage divides the net value by the denominator STORED in the model (model.financial.denominator: revenue, EBITDA or market value, with currency, fiscal year and source). The random model stores the net revenue of the generated income statement (source "ERP-derived"). With no stored denominator, or with a currency different from the net value, the seal prints ECBT % n/d and the absolute net value (for example "net R$ 1.0 mi"). Revenue, EBITDA, market value and similar figures typed only in the session are ignored on purpose: whoever verifies the seal could not reproduce the percentage. Fines and the fine impact score stay in the ECBT panel and do not enter the seal.
Step 4. Natural capital line (separate)
Natural capital is valued per element: family × area × R$/m² from the seed catalog (tier "expected", unless a library or the user overrides it). Area comes from the element, or from its polygon (shoelace formula), or for rivers from path length × width (5 m by default); a tree or animal is valued per unit. Each entry carries 30% uncertainty. Only catalog values or values with attached evidence are eligible; a value typed without evidence is declared, stays out and is reported only as a warning.
value_e = area_e (m²) × price_family (R$/m²) (individual: price per unit)
NC = £ eligible value_e (provenance catalog or evidenced)
U_NC = ( £ (value_e × 0.30)² ) × (1 + 2 × (1 º))
printed = "natural capital +R$ & (separate)" (never added to V_net)
Step 5. Intervention ratio and severity
For each point and parameter only the most recent reading counts, because the seal declares the current condition. The reading is converted to the unit of the intervention value (VI) of the regulatory matrix; the VI is the smallest intervention threshold (VI, CMA or severity "intervention"), never a minimum bound such as pH. The name is honest: it is a compliance ratio, not a toxicological hazard quotient.
ratio_i = reading_i / VI_i
R = min( max ratio_i ; 1 ) (0 when no reading has a VI)
alert = any ratio_i >= 1 ("ALERT: n readings in Intervention")
S = max( 1 º ; R )
label = S >= 0.7 high · S >= 0.4 medium · else low
Step 6. SDG ring
Each of the 17 SDGs gets only its impact score (0 to 1) from the SDG overlay. Below the threshold (0.5 by default) the sector points inward in red (harm); above it points outward in the SDG color (contribution). Data coverage and confidence never add to the impact: they become the data quality and the evidence tier. The mandatory SDGs come from the rule (AURUM requires all 17); a mandatory SDG without data is drawn dashed as "no data" and never disappears.
s = impact / 5 t = threshold (0.5)
harm: s < t magnitude = (t s) / t
contribution: s >= t magnitude = (s t) / (1 t)
quality = ( coverage/5 × confidence/5 ) (one of them zero quality zero)
tier = quality >= 0.6 measured · >= 0.3 estimated · else claimed
SDGs covered = SDGs with an impact score (goes into the AURUM line)
Step 7. Proof bands
Each dataset (campaign) weighs as many observations as it has (an empty campaign weighs 1). A dataset counts for the RT band when it has an RT and a valid ART number (8 to 24 letters or digits after removing punctuation); for the audit band when, on top of that, an auditor who is neither the RT nor the Legal Representative attached a report with a SHA-256 hash; for the agency band when, on top of the ART, the Legal Representative recorded the agency document. Pending acceptances do not count.
band % = £ observations of the datasets that qualify / £ observations × 100 (rounded to 0.1)
painted = clockwise from the top left, in proportion to band %
Step 8. Rule, fronts and the AURUM line
Each rule is composed of one sub-preset per front (health risk, soil and groundwater guidance values, water, air, GHG method, occupational exposure). The default of each front is the most restrictive available sub-preset (limit fronts) or the newest version of the same family (method fronts). The RT may only tighten a limit or move a method to a newer version, always with a justification; AURUM locks everything. The composition gets an FNV-1a 32-bit hash that the server recomputes at issuance and refuses when it differs. Every seal also prints its result on the AURUM 1.0 scale, so a GAIA seal shows how it would look under the strictest rule.
fronts line = "front=sub-preset;& · hash8" (fronts sorted by id)
hash8 = FNV-1a 32 bits of {"rule":"NAME VERSION","fronts":[[front, id, version], &]}
AURUM line = "AURUM 1.0 · ODS a/17 · frentes b/6" (a = SDGs with impact, b = composed fronts, "n/a" excluded)
comparable = same rule and same MAJOR version (trend and supersede skip other majors)
variant label = "REGRA GAIA 1.0 · PERSONALIZADA · a1b2" (owner) or "· RT · a1b2" (RT); a1b2 = first 4 hex of SHA-256
Step 9. Formatting printed on the seal
ECBT %: whole number from 10, one decimal from 1 to 10, two decimals below 1, "<0,01%" below 0.01, with a sign. Money: thousand, million and billion abbreviations with one decimal under 100. EIS: one decimal. The QR of a preview carries the numbers in the link and the verification page states "preview not registered"; a registered seal carries only its id.
Step 10. Issuance, fingerprint and server recalculation
At issuance the browser sends a snapshot of up to 8 KB with the printed fields (ECBT, net value, EIS, verdict, intervention line, AURUM line, rule label, fronts line, site coordinates). The server stores its SHA-256 as the fingerprint; the public page recomputes it and says whether the record is intact. Any change in the numbers produces another fingerprint and asks the responsibles to accept again.
The reproducible recalculation (shadow mode) rebuilds the numbers from the model data instead of trusting the browser: personal keys are removed, the same engines run, and each recalculated field (ECBT, net value, EIS, verdict, AURUM line) is compared with what the browser sent. A divergence is recorded, not blocked. After each issuance the browser sends this data snapshot, compressed, to the server function seal-recompute, which runs the same engine bundle and records the status (match, mismatch, unsupported, too large, error), the data hash and the engine hash. The server keeps only the hashes, never the model data, and compares against the numbers stored at issuance, not against what arrives with the data. Issuance and the public page do not depend on it yet. Its reproducible fingerprint is:
dataSha256 = SHA-256( canonical JSON of the data snapshot ) (keys sorted, no personal data, no images)
catalogSha256 = SHA-256( canonical JSON of the effective natural capital catalog )
reproFingerprint = SHA-256( canonical JSON of { schema: "ecbyts.seal.repro/1", dataSha256, engine,
rule: { name, version, frontsLine }, catalogSha256, fields } )
Known limits
Read the seal with these limits in mind: the ECBT percentage exists only when the model stores a denominator; several EIS axes fall back to heuristics when the model lacks plans, parameter catalogs or QA/QC evidence; the discount rate, maximum data age, veto, server-side credential check and ±1 weight robustness test are shown on the Rule screen as planned and do not change the numbers yet; liabilities are a management estimate, not an accounting provision; natural capital uses unit value transfer from global studies.
The tables below are generated from the code by scripts/docs/gen-seal-presets-doc.mjs: every rule, field, front and sub-preset with its version and definition hash, the version history, and the worked examples. A CI check fails when the code changes and this page was not regenerated.
Evaluation rules and versions (generated) / Regras e versões (gerado do código)
| Rule / Regra | Version | Case / Caso | Required SDGs / ODS obrigatórios | Required fronts / Frentes | Default fronts line / Linha das frentes | Definition hash |
|---|---|---|---|---|---|---|
| AURUM (gold / ouro) | 1.1 | Regra Ouro (padrão): a mais exigente, sem ajuste | 1 Pobreza, 2 Fome, 3 Saúde, 4 Educação, 5 Gênero, 6 Água, 7 Energia, 8 Trabalho, 9 Indústria, 10 Desigualdade, 11 Cidades, 12 Consumo, 13 Clima, 14 Vida na água, 15 Vida terrestre, 16 Instituições, 17 Parcerias | health-risk, soil-gw-guidance, water-quality, air-quality, ghg-method, occupational | ghg-method=global-ghg-protocol-corporate;health-risk=br-sp-cetesb-risk-v401;occupational=global-acgih-tlv-bei-2024;soil-gw-guidance=br-conama-420-ar4 · a6d4c0c7 | 7d72c7865e96 |
| GAIA | 1.1 | Terreno com contaminação no solo ou na água subterrânea | 3 Saúde, 6 Água, 12 Consumo, 14 Vida na água, 15 Vida terrestre | health-risk, soil-gw-guidance, water-quality | health-risk=br-sp-cetesb-risk-v401;soil-gw-guidance=br-conama-420-ar4 · f639a984 | 339e67d71ffc |
| VULCAN | 1.1 | Fábrica ou operação industrial em funcionamento | 3 Saúde, 6 Água, 9 Indústria, 12 Consumo, 13 Clima | health-risk, air-quality, ghg-method, occupational | ghg-method=global-ghg-protocol-corporate;health-risk=br-sp-cetesb-risk-v401;occupational=global-acgih-tlv-bei-2024 · 5f7c9b1d | c0814c58406e |
| CERES | 1.1 | Fazenda, lavoura ou criação de animais | 2 Fome, 6 Água, 12 Consumo, 13 Clima, 15 Vida terrestre | soil-gw-guidance, water-quality, ghg-method | ghg-method=global-ghg-protocol-corporate;soil-gw-guidance=br-conama-420-ar4 · bcbe5804 | 6f471bf45335 |
| PLUTO | 1.1 | Mina, lavra ou barragem de rejeito | 6 Água, 8 Trabalho, 12 Consumo, 13 Clima, 15 Vida terrestre | health-risk, soil-gw-guidance, water-quality, occupational | health-risk=br-sp-cetesb-risk-v401;occupational=global-acgih-tlv-bei-2024;soil-gw-guidance=br-conama-420-ar4 · 3b869f57 | 632bcdbc8d3a |
| ATHENA | 1.1 | Obra, loteamento ou expansão urbana | 3 Saúde, 6 Água, 11 Cidades, 13 Clima, 15 Vida terrestre | health-risk, soil-gw-guidance, air-quality | health-risk=br-sp-cetesb-risk-v401;soil-gw-guidance=br-conama-420-ar4 · a7bd159f | 49602c6b586e |
| ARTEMIS | 1.1 | Área natural, reserva ou recuperação de vegetação | 6 Água, 13 Clima, 14 Vida na água, 15 Vida terrestre | soil-gw-guidance, water-quality, ghg-method | ghg-method=global-ghg-protocol-corporate;soil-gw-guidance=br-conama-420-ar4 · 9d060dff | 45ca28aac20d |
Adjustable fields / Campos ajustáveis
| Key | Field / Campo | Access | Default | Owner range / Faixa do dono | RT range / Faixa do RT | Step | In the calculation? | Rail / Onde entra | Why / Para quê |
|---|---|---|---|---|---|---|---|---|---|
wT | Peso da transparência dos dados (EIS) | adjustable | 2 | 1 a 3 | 1 a 4 | 1 | applied / aplicado | EIS axis weight / peso de eixo do EIS | Peso do eixo de transparência e evidência de origem dos dados. Fora do padrão 2, este ajuste troca o peso do eixo T do método EIS ativo (não troca o método nem os outros eixos). |
wA | Peso da acurácia dos dados (EIS) | adjustable | 3 | 1 a 3 | — | 1 | applied / aplicado | EIS axis weight / peso de eixo do EIS | Peso do eixo de acurácia dos dados. Não mede exposição de pessoas nem risco à saúde. Fora do padrão 3, este ajuste troca o peso do eixo A do método EIS ativo. |
age | Idade máxima do dado | adjustable | 24 meses | 12 a 36 | 6 a 48 | 6 | planned / previsto | Recompute age filter (P08a) / corte de idade no recálculo (P08a) | PREVISTO (P08a, rail recompute): o corte que exclui dado mais velho do recorte, com razão visível, ainda não está implementado. Medido em 04/10/2026: nenhum motor lê este campo e ele não tem eixo EIS — corte de idade não é peso de eixo. O valor vai na faixa e no registro da emissão, e ainda não muda a conta. |
disc | Taxa de desconto | adjustable | 3% a.a. | 0 a 6 | 0 a 10 | 1 | planned / previsto | Valuation — discount rate (P08b) / valuation — taxa de desconto (P08b) | PREVISTO (P08b, rail valuation): a taxa que traz custos futuros de remediação ao valor de hoje ainda não está implementada. Medido em 04/10/2026: nenhum motor lê este campo e ele não tem eixo EIS — o EIS mede qualidade de dado, não valor econômico; e o 0 da faixa viraria peso 0, que o motor recusa. O valor vai na faixa e no registro da emissão, e ainda não muda a conta. |
recalc | Mudança que marca o selo como desatualizado | adjustable | 5% | 3 a 10 | — | 1 | planned / previsto | Seal lifecycle (P08c) / ciclo de vida do selo (P08c) | PREVISTO (P08c, rail lifecycle): o limiar que marca o selo como desatualizado ainda não está implementado. Medido em 04/10/2026: é política de reemissão, não peso — não tem eixo EIS e não move o número do selo. O valor vai na faixa e no registro da emissão, e ainda não muda a conta. |
vo | Valor orientador específico do sítio | rt_only | 0 | — | 0 a 1 | 1 | planned / previsto | Validation / manifest (P08d) / validação / manifesto (P08d) | PREVISTO (P08d, rail validation): trocar o valor da norma pelo de uma análise de risco do sítio (0 = norma, 1 = análise de risco) ainda não está implementado. Medido em 04/10/2026: é um interruptor de qual referência vale, não um peso, e não tem eixo EIS; declarar um eixo daria números diferentes conforme o eixo escolhido. O valor vai na faixa e no registro da emissão, e ainda não muda a conta. |
- RT changes need a justification of at least 30 characters / justificativa mínima do RT. AURUM locks every field.
Locked for everyone / Travado para todos
- applied / aplicado — Norma e valores orientadores (CONAMA 420 e a norma do estado)
- planned / previsto — Fronteira mínima: área, elementos, matrizes e período
- applied / aplicado — ECBT sem capital natural no número principal
- planned / previsto — Veto do EIS: confiabilidade ou exposição ≤ 2 dá crítico
- planned / previsto — Credencial do RT validada no servidor
- planned / previsto — Teste de robustez com pesos ±1
Fronts and sub-presets / Frentes e sub-presets
| Front / Frente | Label | Kind |
|---|---|---|
health-risk | Risco à saúde humana | limit |
soil-gw-guidance | Valores orientadores solo e água subterrânea | limit |
water-quality | Água (potabilidade e corpos d'água) | limit |
air-quality | Ar | limit |
ghg-method | Gases de efeito estufa (método) | method |
occupational | Exposição ocupacional | limit |
| Sub-preset | Front / Frente | Kind | Version | Family | Strictness | Available | In compliance catalog | Server mirror | Label | Hash |
|---|---|---|---|---|---|---|---|---|---|---|
br-sp-cetesb-risk-v401 | health-risk | limit | 4.01 | — | 5 | yes / sim | yes / sim | in sync / igual | CETESB planilha v4.01 (alvo 1e-5) | 49cb0c6d91df |
us-epa-rags-rsl | health-risk | limit | 2024.0 | — | 6 | no / não | no / não | in sync / igual | EPA RAGS/RSL (alvo 1e-6) | 0fb82be7162e |
br-conama-420-ar4 | soil-gw-guidance | limit | 2009.0 | — | 5 | yes / sim | yes / sim | in sync / igual | CONAMA 420/2009 | fc21e03ed7b6 |
br-sp-cetesb-dd125-2021 | soil-gw-guidance | limit | 2021.0 | — | 6 | no / não | no / não | in sync / igual | CETESB DD 125/2021 (VRQ/VP/VI) | d59f1b9ffe8a |
br-ms-portaria-888-2021 | water-quality | limit | 2021.0 | — | 5 | no / não | no / não | in sync / igual | Portaria GM/MS 888/2021 | 3c4a55361826 |
br-conama-357-2005 | water-quality | limit | 2005.0 | — | 5 | no / não | no / não | in sync / igual | CONAMA 357/2005 | 5acf5316a7a0 |
br-conama-430-2011 | water-quality | limit | 2011.0 | — | 5 | no / não | no / não | in sync / igual | CONAMA 430/2011 | 7a7c9c9fcc53 |
br-conama-506-2024 | air-quality | limit | 2024.0 | — | 5 | no / não | no / não | in sync / igual | CONAMA 506/2024 | 961adcc28387 |
global-ghg-protocol-corporate | ghg-method | method | 2015.1 | GHG Protocol | 0 | yes / sim | yes / sim | in sync / igual | GHG Protocol Corporate (AR4/AR5) | 27581746b318 |
global-ghg-protocol-corporate-ar6 | ghg-method | method | 2024.0 | GHG Protocol | 0 | no / não | no / não | in sync / igual | GHG Protocol com IPCC AR6 | e059292ff4d8 |
br-nr7-pcmso-nr15-lt | occupational | limit | 2022.1 | — | 5 | yes / sim | yes / sim | in sync / igual | NR-7 / NR-15 (LT) | 23928d509d1b |
global-acgih-tlv-bei-2024 | occupational | limit | 2024.0 | — | 6 | yes / sim | yes / sim | in sync / igual | ACGIH TLV/BEI 2024 | 3a5285170d53 |
- Server mirror / espelho no servidor (20261001090000_ecbyts_seal_sub_presets.sql, 20261001130000_ecbyts_seal_premises.sql, 20261004120000_lms_presets_espelho_sub_presets_e_frente_ceres.sql): in sync / igual ao código.
Version history / Histórico de versões
| Id | Version | Definition hash | First seen / Desde | Kind |
|---|---|---|---|---|
ARTEMIS | 1.0 | 5ff854afcbb5 | 2026-10-04 | seal-rule |
ARTEMIS | 1.1 | 45ca28aac20d | 2026-10-04 | seal-rule |
ATHENA | 1.0 | ee7cf8167ca1 | 2026-10-04 | seal-rule |
ATHENA | 1.1 | 49602c6b586e | 2026-10-04 | seal-rule |
AURUM | 1.0 | 2e763bade942 | 2026-10-04 | seal-rule |
AURUM | 1.1 | 7d72c7865e96 | 2026-10-04 | seal-rule |
CERES | 1.0 | 5aee2e500e14 | 2026-10-04 | seal-rule |
CERES | 1.1 | 6f471bf45335 | 2026-10-04 | seal-rule |
GAIA | 1.0 | f99929b0ba01 | 2026-10-04 | seal-rule |
GAIA | 1.1 | 339e67d71ffc | 2026-10-04 | seal-rule |
PLUTO | 1.0 | 24c6d1643b0f | 2026-10-04 | seal-rule |
PLUTO | 1.1 | 632bcdbc8d3a | 2026-10-04 | seal-rule |
VULCAN | 1.0 | 15743e97b791 | 2026-10-04 | seal-rule |
VULCAN | 1.1 | c0814c58406e | 2026-10-04 | seal-rule |
br-conama-357-2005 | 2005.0 | 5acf5316a7a0 | 2026-10-05 | seal-sub-preset |
br-conama-420-ar4 | 2009.0 | 25faee7045e0 ⚠ changed without a version bump / mudou sem subir versão | 2026-10-02 | seal-sub-preset |
br-conama-420-ar4 | 2009.0 | fc21e03ed7b6 ⚠ changed without a version bump / mudou sem subir versão | 2026-10-05 | seal-sub-preset |
br-conama-430-2011 | 2011.0 | 7a7c9c9fcc53 | 2026-10-05 | seal-sub-preset |
br-conama-506-2024 | 2024.0 | ad3a9f866bf3 ⚠ changed without a version bump / mudou sem subir versão | 2026-10-02 | seal-sub-preset |
br-conama-506-2024 | 2024.0 | 961adcc28387 ⚠ changed without a version bump / mudou sem subir versão | 2026-10-05 | seal-sub-preset |
br-ms-portaria-888-2021 | 2021.0 | 75320be9313c ⚠ changed without a version bump / mudou sem subir versão | 2026-10-02 | seal-sub-preset |
br-ms-portaria-888-2021 | 2021.0 | 3c4a55361826 ⚠ changed without a version bump / mudou sem subir versão | 2026-10-05 | seal-sub-preset |
br-nr7-pcmso-nr15-lt | 2022.1 | 41a3b9aabd6a ⚠ changed without a version bump / mudou sem subir versão | 2026-10-02 | seal-sub-preset |
br-nr7-pcmso-nr15-lt | 2022.1 | 23928d509d1b ⚠ changed without a version bump / mudou sem subir versão | 2026-10-05 | seal-sub-preset |
br-sp-cetesb-dd125-2021 | 2021.0 | c357b5dd950c ⚠ changed without a version bump / mudou sem subir versão | 2026-10-02 | seal-sub-preset |
br-sp-cetesb-dd125-2021 | 2021.0 | d59f1b9ffe8a ⚠ changed without a version bump / mudou sem subir versão | 2026-10-05 | seal-sub-preset |
br-sp-cetesb-risk-v401 | 4.01 | 601bf2373afe ⚠ changed without a version bump / mudou sem subir versão | 2026-10-02 | seal-sub-preset |
br-sp-cetesb-risk-v401 | 4.01 | 49cb0c6d91df ⚠ changed without a version bump / mudou sem subir versão | 2026-10-05 | seal-sub-preset |
global-acgih-tlv-bei-2024 | 2024.0 | 3ddcad6f7431 ⚠ changed without a version bump / mudou sem subir versão | 2026-10-02 | seal-sub-preset |
global-acgih-tlv-bei-2024 | 2024.0 | 3a5285170d53 ⚠ changed without a version bump / mudou sem subir versão | 2026-10-05 | seal-sub-preset |
global-ghg-protocol-corporate | 2015.1 | 17fa554c63ee ⚠ changed without a version bump / mudou sem subir versão | 2026-10-02 | seal-sub-preset |
global-ghg-protocol-corporate | 2015.1 | 27581746b318 ⚠ changed without a version bump / mudou sem subir versão | 2026-10-05 | seal-sub-preset |
global-ghg-protocol-corporate-ar6 | 2024.0 | ca700cc24a18 ⚠ changed without a version bump / mudou sem subir versão | 2026-10-02 | seal-sub-preset |
global-ghg-protocol-corporate-ar6 | 2024.0 | e059292ff4d8 ⚠ changed without a version bump / mudou sem subir versão | 2026-10-05 | seal-sub-preset |
us-epa-rags-rsl | 2024.0 | 8dd4bab6174b ⚠ changed without a version bump / mudou sem subir versão | 2026-10-02 | seal-sub-preset |
us-epa-rags-rsl | 2024.0 | 0fb82be7162e ⚠ changed without a version bump / mudou sem subir versão | 2026-10-05 | seal-sub-preset |
Worked examples (computed by the code) / Exemplos calculados pelo código
Example model / modelo de exemplo: 2 wells, 1 ha boundary, 1 habitat with a typed value, 2 campaigns, CAPEX + OPEX, reference date 2026-10-01
1. EIS
| Axis / Eixo | Score 1–5 | Source / Origem | Weight / Peso | Factor = scorew/Σw |
|---|---|---|---|---|
T | 2.50 | measured / medido | 3 | 2.503/12 = 1.2574 |
A | 5.00 | heuristic fallback / heurística | 3 | 5.003/12 = 1.4953 |
Cp | 4.00 | heuristic fallback / heurística | 2 | 4.002/12 = 1.2599 |
Ty | 4.00 | measured / medido | 2 | 4.002/12 = 1.2599 |
Cs | 5.00 | measured / medido | 1 | 5.001/12 = 1.1435 |
Cm | 4.00 | heuristic fallback / heurística | 1 | 4.001/12 = 1.1225 |
- EIS = ∏ factors = 3.83 → Management Ready; κ = EIS / 5 = 0.766.
- T credential multiplier / multiplicador de credencial (mean over readings): 1.1333 (professional × 2, common × 1).
- Veto mode with T = 2 / modo veto com T = 2: EIS = 0.00 (Critical Data). The seal path uses the geometric mode; veto stays listed as planned.
2. ECBT of the seal / ECBT do selo
- Liability / passivo = CAPEX R$ 800,000 + OPEX R$ 200,000 = R$ 1,000,000; fixed uncertainty / incerteza fixa u = 25% → uabs = R$ 250,000.
- Band widener / alargador = 1 + 2·(1 − κ) = 1 + 2·(1 − 0.766) = 1.468; half band / meia banda = R$ 250,000 × 1.468 = R$ 367,000.
- Principal ECBT (no natural capital / sem capital natural) = 0 − R$ 1,000,000 = R$ -1,000,000, band / banda [R$ -1,367,000; R$ -633,000]. Printed as / impresso como
ECBT % n/d+ net line, because no denominator is persisted in the model. - Natural capital line (separate, never added) / linha de capital natural (à parte, nunca somada) = R$ 150,000, band [R$ 83,940; R$ 216,060], 1 eligible entry(ies); declared without evidence and excluded / declarado sem evidência e excluído: R$ 50,000 (1).
| Element | Family | Value / Valor | Provenance / Origem | u | How / Como |
|---|---|---|---|---|---|
AREA | boundary | R$ 150,000 | catalog | 0.30 | boundary × 10000.0 m² × R$ 15/m² |
APP | habitat | R$ 50,000 | declared | 0.30 | Override direto (habitat) |
3. Intervention ratio and severity / Razão de intervenção e severidade
| Reading / Leitura | Value | VI (example) | Ratio = value / VI |
|---|---|---|---|
| benzene (PM-01) | 3 | 5 | 0.60 |
| toluene (PM-01) | 120 | 700 | 0.17 |
| benzene (PM-02) | 8 | 5 | 1.60 |
- Max ratio / maior razão = 1.60; R = min(max ratio; 1) = 1.00; readings in Intervention (ratio ≥ 1) / leituras em Intervenção: 1.
- S = max(1 − κ; R) = max(0.234; 1.00) = 1.000 (without VI / sem VI: 0.234). Label: S ≥ 0.7 high/alta, ≥ 0.4 medium/média, else low/baixa.
- Card line / linha do cartão:
razão de intervenção 1,6× VI · ALERTA: 1 leitura em Intervenção
4. Proof bands / Faixas de prova
| Dataset (campaign) | Observations / Peso | ART | Independent audit | Organ via RL |
|---|---|---|---|---|
| Mar/2026 | 120 | yes / sim | yes / sim | yes / sim |
| Ago/2026 | 60 | yes / sim | no / não | no / não |
| Set/2026 | 20 | no / não | no / não | no / não |
- ART = 90.0%, audit / auditoria = 60.0%, organ / órgão = 60.0% of 200 observations (rounded to 0.1). The second dataset's audit does not count: the auditor is the RT.
5. SDG ring / Anel ODS
- impact / impacto s = 0.2 with threshold t = 0.5: harm, magnitude = 0.60 ((t − s) / t).
- impact / impacto s = 0.5 with threshold t = 0.5: contribution, magnitude = 0.00 ((s − t) / (1 − t)).
- impact / impacto s = 0.8 with threshold t = 0.5: contribution, magnitude = 0.60 ((s − t) / (1 − t)).
- Data quality / qualidade do dado with coverage 4/5 and confidence 2/5 = √(0.8 × 0.4) = 0.566 → tier estimated (cuts: measured ≥ 0.6, estimated ≥ 0.3, else claimed).
- Material SDGs by site typology / ODS materiais por tipologia: contaminated_site = 3, 6, 12, 14, 15; industrial_operation = 3, 6, 9, 12, 13; agro_livestock = 2, 6, 12, 13, 15; urban_development = 3, 6, 11, 13, 15; mining = 3, 6, 12, 13, 15.
6. Formatting and trend / Formatação e tendência
- ECBT %: 250 →
+250%; 78.4 →+78%; 3.14159 →+3,1%; 0.456 →+0,46%; 0.004 →+<0,01%; -12.6 →−13%. - Trend with rule versions 1.0, 2.0, 2.1 / tendência: only same-major points stay (Mar/2026, Ago/2026); delta =
+0,2.
7. Server recalculation (shadow mode) / Recálculo do servidor (modo sombra)
| Item | Value / Valor |
|---|---|
| Engine / Motor | seal-recompute/2 |
| Data schema | ecbyts.seal.data/1 |
| Max data snapshot for the recalculation / limite do snapshot de dados do recálculo | 5242880 bytes (the issued card snapshot is separate: up to 8 KB / o snapshot do cartão emitido é outro: até 8 KB) |
| Fields compared / campos comparados | ecbt, ecbtNet, eis, verdict, aurum |
| Personal keys removed / chaves pessoais retiradas | 3 |
| Server fields / campos do servidor | {"ecbt":null,"ecbtNet":"líquido −R$ 1,0 mi","eis":"3,8","verdict":null,"aurum":"AURUM 1.1 · ODS 2/17 · frentes 0/6"} |
| Numbers / números | {"eis":3.83,"kappa":0.766,"severity":0.234,"severityLabel":"baixa","ecbtNet":-1000000,"naturalCapital":150000,"currency":"BRL","odsCovered":2} |
| dataSha256 | 97e70fe365ac8f1b641470fae8ce4a2f0e719cdc6f0ab0dbc74c4d67088f1103 |
| catalogSha256 | 3e26b4b2055590dcf0e7b8a06b793a2e115c42fdbc2ed6fd0da2f255c4465b6f |
| reproFingerprint | d7dc10480a0d1ca507cc701bfdae1ae7f733c5aeb929995e556daabd721b4f34 |
| Snapshot bytes | 1356 |
| Comparison / comparação | match |
8. Parameters / Parâmetros
| Parameter / Parâmetro | Value from code / Valor no código |
|---|---|
| EIS default weights / pesos padrão | {"T":3,"A":3,"Cp":2,"Ty":2,"Cs":1,"Cm":1} |
| T credential multipliers | {"common":1,"professional":1.2,"pos_graduado":1.4,"mestre":1.6,"doutor":2} |
| EIS verdicts / vereditos | Audit Ready 4.5–5 · Management Ready 3.5–4.49 · Critical Data 0–3.49 |
| Session-only denominators ignored by the seal | revenueBrl, ebitdaBrl, marketCapBrl, totalAssetsBrl, totalDebtBrl, cashBrl |
| Withdrawal window / desistência | 7 days |
| Seal validity / validade | 12 months |
| Organ acceptance documents | parecer_tecnico, termo_de_reabilitacao, licenca_ambiental, oficio_de_aceite, certificado_de_conformidade |
| Attestation price text | Esta atestação custa USD 1 (100 $ECBT) do meu saldo. |
| Natural capital family | Low R$/m² | Expected R$/m² (seal) | High R$/m² | Source / Fonte |
|---|---|---|---|---|
boundary | 5 | 15 | 50 | SNUC Lei 9.985/2000 + INCRA terra rural 2024 |
habitat | 8 | 25 | 80 | WWF Living Planet + ESVD 2020 biodiversity |
site_area | 1 | 3 | 10 | INCRA terra rural média BR 2024 |
area | 3 | 8 | 25 | BNDES Fundo Clima 2026-05 Mata Atlântica |
river | 10 | 30 | 100 | TEEB 2010 Wetlands + ANA Res. 1.245/2024 |
lake | 8 | 20 | 80 | TEEB 2010 Wetlands + ESVD 2020 |
spring | 20 | 60 | 200 | TEEB high-value + Lei 12.651/2012 APP |
individual | 50 | 150 | 500 | TEEB carbon stock + biodiversidade unitária |
SAO Matrices
Environment, Safety & Health (ESH) risk assessment using Systematic Assessment of Operations matrices.
- Multi-scenario evaluation — Assess risks across environmental, occupational safety, and operational health domains simultaneously.
- Parameter-based risk scoring — Observations feed directly into matrix calculations for evidence-based risk levels.
- Unit-aware calculations — Automatic unit conversion ensures consistent risk scoring regardless of input units.
- 9 parameter definition files covering environmental, safety, and health indicators.
Compliance Validation
Multi-level compliance validation against environmental regulatory standards.
Built-in Regulations
- CONAMA 420/2009 — Brazilian soil and groundwater quality standards (VR, VP, VI thresholds).
- CETESB DD-256/2016 — São Paulo state reference cleanup values.
- NR-15 — Occupational exposure limits.
Domain Validator Engine
A generic, extensible validation engine that loads domain-specific rules from JSON templates:
- 3-level validation: observation → element → site.
- Thresholds keyed by CAS Number for unambiguous substance identification.
- Custom domain templates can be imported from
docs/templates/(e.g., EPA GAC, GHG-BR). - Validation results feed the EIS Cs (Consistency) and Cm (Compliance) axes.
Compliance Presets
A compliance preset bundles, under one id and version, the regulatory basis of a model: authority and jurisdiction, legal basis, effective dates, validation profile, GHG factors (GWP version and horizon), emission factor registry, EIS weights, risk targets, coordinate system, units, currency, language and audit retention.
Activating a preset records its id, version and contentHash. The EIS and the seal only use it while the stored preset still has that hash and is not revoked; otherwise the calculation is blocked instead of silently changing. The CETESB risk preset carries the risk targets (ILCR 1e-5, HQ 1, engine CETESB v4.01); the worldwide Pareto envelope uses the strictest target (1e-6).
Presets are also the sub-presets of the ECBYTS Seal fronts. The catalog below, with versions, hashes and the version history, is generated from the code; a version or content change shows up here on the next generation.
Canonical catalog (generated) / Catálogo canônico (gerado do código)
| Preset | Version | Category | Authority | Effective / Vigência | Legal basis | GWP | EIS weights | Risk target | Seal front | contentHash | componentsHash | Definition hash |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
br-conama-420-ar4Resolução CONAMA nº 420/2009 — Solos Contaminados (Brasil) | 2009.0 | A_regulators | CONAMA · federal · BR | 2009-12-30 | Resolução CONAMA 420/2009; Decisão UNFCCC 24/CP.19 | AR4 / 100 y | {"T":4,"A":3,"Cp":2,"Ty":2,"Cs":1,"Cm":1} | — | soil-gw-guidance | 21a621d5759c | ef7e13f3b0bb | 16338f55233d |
global-ghg-protocol-corporatePadrão corporativo de contabilização e relato de inventário de GEE (revisado em 2015) | 2015.2 | B_corporate_frameworks | GHG Protocol · international · GLOBAL | 2015-01-01 | GHG Protocol Corporate Accounting and Reporting Standard (Revised Edition, 2004); GHG Protocol Scope 2 Guidance (2015) | AR5 / 100 y | {"T":3,"A":4,"Cp":2,"Ty":2,"Cs":1,"Cm":1} | — | ghg-method | 9ce256cef213 | 39e27f083525 | ceec8d473f65 |
global-pareto-most-restrictive-worldwideecbyts Pareto — Envelope Mais Restritivo Mundial (2026) | 2026.1 | C_pareto_envelope | ecbyts · international · GLOBAL | 2026-01-01 | min(CONAMA 420, CETESB DD256, EPA RCRA, EU CSRD/ESRS, ISSB S2); Pareto envelope conservador derivado | AR6 / 100 y | {"T":3,"A":4,"Cp":3,"Ty":2,"Cs":1,"Cm":1} | ILCR 0.000001 · HQ 1 · RES_URB · CETESB v4.01 | — | acc993a7c411 | c9ea434e9a6b | 2596554c9ccf |
global-aspirational-net-zero-2050UNFCCC Paris Agreement Art. 4.1 — Net Zero 2050 / SBTi 1.5°C | 2021.1 | D_aspirational_net_zero | UNFCCC · international · GLOBAL | 2021-11-01 | Paris Agreement Art. 4.1; SBTi 1.5°C pathway | AR6 / 100 y | {"T":2,"A":3,"Cp":4,"Ty":2,"Cs":1,"Cm":1} | — | — | e1ff9132f287 | b06d0aa2168e | 6a5261984b99 |
global-sector-mining-icmmICMM Performance Expectations 2024 + IBRAM Diretrizes Mineração BR | 2024.0 | E_sectoral | ICMM · sectoral · GLOBAL | 2024-01-01 | ICMM Performance Expectations 2024; IBRAM Diretrizes Mineração BR | AR6 / 100 y | {"T":3,"A":3,"Cp":2,"Ty":3,"Cs":1,"Cm":1} | — | — | a8350f3ea2b4 | 287bf8f8bba9 | 9e136ed3cad4 |
global-legacy-kyoto-sar-1997Protocolo de Kyoto Art. 3 (1997) — IPCC SAR Working Group I | 1997.0 | F_historical | UNFCCC · international · GLOBAL | 1997-12-11 → 2012-12-31 | Kyoto Protocol Art. 3 (1997); IPCC SAR Working Group I | SAR / 100 y | {"T":3,"A":3,"Cp":2,"Ty":2,"Cs":1,"Cm":1} | — | — | 5468cb966619 | db9171bf2b33 | 70d0c62eff20 |
global-acgih-tlv-bei-2024ACGIH TLV-TWA + BEI 2024 — Limites de Exposição Ocupacional (Global) | 2024.0 | Saúde Ocupacional Global | ACGIH · international · GLOBAL | 2024-01-01 | ACGIH TLVs and BEIs 2024 — Threshold Limit Values and Biological Exposure Indices; NIOSH REL (Recommended Exposure Limits); OSHA PEL (Permissible Exposure Limits) — fallback US | AR6 / 100 y | {"T":5,"A":2,"Cp":2,"Ty":1,"Cs":1,"Cm":1} | — | occupational | 7f4f88754f68 | 02112ec5cc14 | 1a55b6f4e61e |
br-nr7-pcmso-nr15-ltNR-7 PCMSO + NR-15 Limites de Tolerância + NR-9 PGR + PPP/INSS (Brasil) | 2022.2 | Saúde Ocupacional Brasil | MTE/SEPRT · federal · BR | 2022-01-03 | NR-7 PCMSO — Programa de Controle Médico de Saúde Ocupacional (Portaria 6.734/2020); NR-15 — Atividades e Operações Insalubres (Limites de Tolerância LT); NR-1 — Gerenciamento de Riscos Ocupacionais (GRO) e Programa de Gerenciamento de Riscos (PGR); NR-9 — Avaliação e Controle das Exposições Ocupacionais a Agentes Físicos, Químicos e Biológicos; INSS PPP — Perfil Profissiográfico Previdenciário | AR6 / 100 y | {"T":5,"A":2,"Cp":2,"Ty":1,"Cs":1,"Cm":1} | — | occupational | 9389ee478e59 | 582f0cd31a0d | 8d97445439cf |
br-sp-cetesb-risk-v401CETESB 4.01 | 4.01 | state | CETESB · state · BR-SP | 2026-06-01 | DD 103/2007/C/E; DD 038/2017/C; Planilhas de Avaliação de Risco v4.01 (jun/2026) | — | absent: the seal shows no EIS with this preset active / ausente: o selo sai sem EIS | ILCR 0.00001 · HQ 1 · RES_URB · CETESB v4.01 | health-risk | dac2a4cf8355 | d296934660ac | a42f55bdbbe0 |
- Boot default (violations panel) / padrão do boot:
global-pareto-most-restrictive-worldwide. Random model default / padrão do modelo random:br-sp-cetesb-dd256-2016. componentsHash= SHA-256 of the canonical components JSON (buildComponentsHashInput). Definition hash = SHA-256 of the whole preset body exceptcontentHash.
EIS weight presets / Presets de pesos do EIS
| Preset | T | A | Cp | Ty | Cs | Cm | Sum |
|---|---|---|---|---|---|---|---|
default | 3 | 3 | 2 | 2 | 1 | 1 | 12 |
mining | 4 | 4 | 2 | 2 | 1 | 1 | 14 |
remediation | 2 | 2 | 4 | 4 | 1 | 1 | 14 |
water | 3 | 4 | 2 | 1 | 3 | 1 | 14 |
Model presets / Presets de modelo
| Preset | Name | Category | Families | Reference | Parameters |
|---|---|---|---|---|---|
gac_gas_station | GAC Gas Station | gac | well, plume, boundary, tank, remediation, building | CONAMA 420/2009 + CETESB DD-256/2016 (groundwater) | 13 |
gac_industrial | GAC Industrial Plant | gac | well, plume, boundary, building, remediation, waste | CONAMA 420/2009 + CETESB DD-256/2016 (groundwater) | 16 |
ghg_inventory | GHG Inventory | inventory | boundary, building, tank | Padrão corporativo de inventário de GEE + PBGHGP (atmospheric) | 11 |
car_rural | Rural Environmental Registry | inventory | boundary, river, lake, spring | Lei 12.651/2012 (Codigo Florestal) + SICAR (land) | 5 |
remediation | Remediation Project | remediation | well, plume, boundary, remediation, tank, building | CONAMA 420/2009 + CMA especificas do site (groundwater) | 14 |
water_permit | Water Use Permit | permit | well, river, lake, spring, boundary | Lei 9.433/1997 + ANA/DAEE (surface_water) | 9 |
Version history / Histórico de versões
| Id | Version | Definition hash | First seen / Desde | Kind |
|---|---|---|---|---|
br-conama-420-ar4 | 2009.0 | 16338f55233d | 2026-10-02 | compliance-preset |
br-nr7-pcmso-nr15-lt | 2022.1 | 0c2b13fe943c | 2026-10-04 | compliance-preset |
br-nr7-pcmso-nr15-lt | 2022.2 | 8d97445439cf | 2026-10-04 | compliance-preset |
br-sp-cetesb-risk-v401 | 4.01 | a42f55bdbbe0 | 2026-10-02 | compliance-preset |
global-acgih-tlv-bei-2024 | 2024.0 | 1a55b6f4e61e | 2026-10-02 | compliance-preset |
global-aspirational-net-zero-2050 | 2021.1 | 6a5261984b99 | 2026-10-02 | compliance-preset |
global-ghg-protocol-corporate | 2015.1 | a763e9a0348c | 2026-10-04 | compliance-preset |
global-ghg-protocol-corporate | 2015.2 | ceec8d473f65 | 2026-10-04 | compliance-preset |
global-legacy-kyoto-sar-1997 | 1997.0 | 70d0c62eff20 | 2026-10-02 | compliance-preset |
global-pareto-most-restrictive-worldwide | 2026.1 | 2596554c9ccf | 2026-10-02 | compliance-preset |
global-sector-mining-icmm | 2024.0 | 9e136ed3cad4 | 2026-10-02 | compliance-preset |
Validation Profiles
Pluggable compliance rule engine for domain-specific validation beyond the built-in CONAMA/CETESB rules.
- JSON-based profiles — Define compliance rules in portable JSON format (CETESB DD-256, CONAMA 420, EPA GAC, custom).
- Rule types — Threshold checks, required field validation, unit verification, and statistical outlier detection.
- Batch validation — Validate all observations at once with results exportable as CSV. Errors include the one-based row position in the validated batch and the field when the rule targets a field. This position is not necessarily the original spreadsheet row.
- Missing values — Empty analytical values remain missing, not zero. A required-field rule reports empty values while preserving a measured zero.
- Unsupported rules — Unknown rule types stop validation with an explicit error; they are not silently accepted. Correct the profile before running it again.
- Error recovery — A failed new run invalidates the previous report. Correct the data or profile and run validation again. When source location is supplied by the import, CSV includes source file, sheet and row separately from the batch position; missing source location is left blank.
- Domain rules — The existing Domain Validator supports allowed values and numeric limits. Required fields reject whitespace-only text; allowed-value rules also check zero and false. Numeric checks reject non-finite values, booleans and containers rather than coercing them into measurements.
- Record balance — Every run reports
summary.records: total = clean + flagged, how many flagged records are blocking (prevention/intervention/critical) and an unevaluated list with the reason per row. A non-numeric value such asabcis reported as avalue_parsefinding instead of being skipped. - Censored values —
<0.5,ND,>10are parsed as censored results and evaluated at the reporting limit with acensoredflag; thecensored_valuerule type reports them explicitly. Decimal comma is accepted. - Duplicates — The
duplicate_checkrule type flags records sharing a key (defaultelementId+parameterId+date, configurable viafields). Duplicates are reported, never removed automatically. - Sender report — The results panel and the CSV list, per finding: batch row, source file / sheet / row when the import supplies them (accepted as
sourceLocation,sourceor flatsourceFile/sourceSheet/sourceRow), field, rule, message and a suggested fix. Each finding carries a stablefingerprint; re-running the same profile classifies findings as resolved, persisting or new, and resolved findings are kept in the CSV so a resubmission can be traced. - Human decision — No finding is discarded silently. Each one can receive a recorded decision (accept, reject, correct, defer) with a mandatory reason and optional reviewer; decisions persist with the profiles and are exported in the CSV. The panel shows how many findings still have no decision.
- Field comparison and templates — Custom domain rules can compare a field with another field of the same record (
compareField, e.g. screen top < screen bottom); unknown operators are rejected at definition time. The Domain Editor exports a CSV template per entity with a hint row and a_template_versioncolumn (domainId@version); Test Data checks that submitted records declare the matching template version. - Logical entities — Domain entities extend the data model as a governed logical contract. The Data Studio schema panel lists them under “Logical entities” next to the physical SQLite tables; they are not SQL tables and no physical table is created by saving a domain.
- Import community-contributed profiles from
docs/templates/or create your own.
Custom Profiles
Create a JSON file following the domain validator schema, add your thresholds keyed by CAS Number, and import via Analyze > Domain Validator. Profiles are persisted in the model.
ENV-05 — EDD submission portal
Receive EDD packages from external senders with a deterministic protocol, a visible state, an error report for the sender and a resume path that never duplicates a package.
- Audience — external senders (laboratories, consultancies) who deliver EDD packages, and the internal team that follows each protocol (RF-05).
- Prerequisites — none. The portal opens from the More menu (EDD submission portal); the guided tour EDD submission portal fills in a synthetic sender and a 3-line CSV package.
- Steps — fill in sender and organisation, choose the package and press Send EDD. The portal hashes the package (SHA-256) and issues a protocol
EDD-YYYYMMDD-HHMMSS-…that is deterministic for package, sender and instant. To resume after a correction, type the previous protocol in Previous protocol and send the corrected package. To follow a protocol, use Look up protocol. - Synthetic example —
edd-sintetico-tour.csvhas PM-02 with an empty value. Sending it again without a previous protocol is refused with the message this package was already received under protocol …; sending the corrected file (PM-02 = 1.2) with the previous protocol produces Attempt: 2 (resumes …). - Result — every record (protocol, sender, package hash, attempt, state, optional validation snapshot and resubmission delta) lives in the model and travels with the
.ecbtkey. The history table lists all protocols, newest first. - Errors — empty sender or missing package: no protocol is issued. Identical package: refused, the existing protocol is named. Previous protocol unknown, already validated, or from another sender: the resume is refused with the reason.
- Limits — no backend and no e-mail: the protocol is proof inside this model, not a notification. The state becomes validated/rejected only when a validation-profile result (ENV-13/14) is attached at send time (opt-in checkbox).
- Related — ENV-13 Pre-validation, ENV-14 Sender Report, ENV-06 Versions & Signature. Video: pending for this chapter.
ENV-06 — Immutable versions and ECDSA signature
Freeze a version of a result with a SHA-256 content hash, chain it to the previous version and sign it with an ECDSA P-256 key, so that any later change of a single byte is detected as tampering. This is layer 1 of the signature decision: it does not replace ICP-Brasil or gov.br.
- Audience — the technical lead who closes a version of a result and must later prove nobody changed it; auditors who verify offline (RF-06, layer 1).
- Prerequisites — a browser with WebCrypto and IndexedDB (the local key vault). No certificate is needed for layer 1; the panel creates an ECDSA P-256 key if none exists.
- Steps — open ECBT Score › How I reached this result and scroll to Versions and signatures. Press Sign new version: the current audit-trail result becomes v1 (number, canonical-content SHA-256, timestamp, previous hash or
GENESIS, version hash, ECDSA signature with the public key embedded). Press Verify versions: hashes, signature and chain are recomputed. Guided tour: Immutable versions and ECDSA signature. - Synthetic example — Simulate tampering (1 byte) appends one character to the presented content and verifies again: the content hash no longer matches and the verdict is TAMPERED. The signed record itself is frozen and unchanged — that is what makes the difference provable.
- Result — three verdicts, never collapsed: valid, tampered (hash or signature disagrees) and unavailable (the key could not be read — not evidence of fraud). The chain check confirms contiguous numbering, links to the previous version and non-regressing timestamps.
- Errors — if the vault is unavailable the panel says so and signs nothing. A signature that was not checked is shown as unverified, never as valid.
- Limits — versions signed here live in the session (not yet persisted in the
.ecbtkey or Supabase). Layer 1 is ecbyts' own signature: it does not replace an ICP-Brasil certificate (PAdES, layer 3) nor the gov.br signer (layer 2); both depend on the responsible person's credentials, run server-side and are not available yet. - Related — Blockchain Integrity, ENV-05 Submission Portal, EIS Score. Video: pending for this chapter.
ENV-04 — EDD designer and spreadsheet formats
Design a versioned schema for electronic data deliverables: entities, fields, mandatory fields, allowed values, numeric limits and field-to-field comparison; hand the sender a CSV template bound to the schema version and check that version on the received records.
- Audience — schema authors (data managers) who publish the EDD format that laboratories and consultancies must follow (RF-04 of the environmental data workflows).
- Prerequisites — none. Without a saved domain the guided tour opens an unsaved New Domain draft; nothing is persisted until Save.
- Steps — open Analyze > Domain Validators; pick a domain or press + New Domain; add rules per entity (Required, One Of, Numeric, Pattern, Custom); in a Custom rule fill either a constant value or the compare field input to compare two fields of the same record; press Template CSV to download the entity template; open Test Data, paste received records and press Run Test. Guided tour: EDD designer: schema, template and version (category Environmental Workflows).
- Synthetic example — domain
well-eddversion3.2, entityWELLwithwell_idrequired,statusone ofactive | sealed, and the Custom rulescreen_top lt screen_bottom. The template istemplate-well-edd-WELL-v3.2.csv: headerwell_id, status, screen_top, screen_bottom, _template_version, a hint row and a sample row carryingwell-edd@3.2. - Result — records that declare
_template_versionare checked against<domainId>@<version>: the Test Data panel reports Template version well-edd@3.2 confirmed for all records, or lists each mismatching row with the value it carried (for example a sender still usingwell-edd@3.1). - Errors — a Custom rule without value or compare field, a compare field equal to the field itself, or an unknown operator is a definition error and the run stops; comparing a number with text fails instead of passing as NaN; a compared field that is empty in the record is reported as a warning, never skipped.
- Limits — the template covers one entity per file (the active tab); the version check only runs when the records carry the
_template_versioncolumn. Publishing means saving the domain in this browser profile and exporting its JSON; there is no server-side registry of published schemas yet. - Related — Validation Profiles, ENV-12 Logical Entities, ENV-13 Pre-validation, Data Ingestion. Video: pending for this chapter.
ENV-12 — Model extension by logical entities
Extend the data model through governed logical entities declared by domain validators and browse them in the Data Studio Schema panel next to the physical tables. A logical entity is a versioned contract, not a SQL table.
- Audience — administrators who extend the model with new entities or fields under a governed contract (RF-12).
- Prerequisites — at least one domain saved in Domain Validators (see ENV-04); the Data Studio SQL mirror loaded (it loads with the current model).
- Steps — open Data Studio (Processing module); in the left Schema panel read Tables (physical SQL tables of the in-browser mirror) and then Logical entities (domain validators); expand an entity to see its fields. Guided tour: Logical entities in the Schema panel.
- Synthetic example — the saved domain
well-eddv3.2 shows asWELL · Well EDD v3.2 (logical)with the fieldswell_id,status,screen_top,screen_bottom: the union of the fields referenced by rules, compared fields and unique-key fields. - Result — the entity and its fields are browsable as a contract; each field's tooltip reads logical field (no SQL column). Adding a field or entity is done by editing the domain and publishing a new version; the panel, the CSV template and Test Data reflect it immediately. The saved domains travel inside the exported
.ecbtkey (sectionlogicalDomains) and are restored on import: a key without the section leaves local domains untouched, and a key that carries one replaces the domain of the same id. - Errors — a domain whose definition is invalid does not save, so it never reaches the panel; the section is absent when no domain is saved (the guided tour shows that step as unavailable by design). When the model has access control configured, a user without the admin (or owner) role cannot add, change or delete an entity or field: the Domain Validators editor opens read-only with a visible notice, the save is refused with
logical-extension-forbidden, and a key opened by that user does not extend the local model. - Limits — by decision, no physical table is created for a logical entity: no DDL runs, SQL queries cannot select from it and permissions follow the model's own role-based access (extension requires the admin role). The logical extension is never written to the cloud model record (
models.model_data), which a public model would expose; it travels only in the key the administrator exports on purpose. The physical tables listed under Tables are created by the app, not by administrators. - Related — ENV-04 EDD Designer, Data Studio, Validation Profiles, Import / Export. The Portuguese guide video is recorded from the guided tour on the synthetic domain; pause or replay for reading.
ENV-13 — Pre-validation before promotion
Apply the exact schema rules to a received batch before it is promoted, and read a record balance that always closes: total = clean + flagged, with unevaluated rows explained.
- Audience — data managers and reviewers who receive laboratory or field batches (RF-13 of the environmental data workflows).
- Prerequisites — observations loaded in the model (import wizard, data entry matrix or a random demo model) and at least one validation profile: built-in CETESB DD-256 / CONAMA 420 or your own JSON.
- Steps — open Analyze > Validation Profiles; pick the rule set; press Run on that row (or select several and press Run Active); read the Last run panel. Guided tour: Pre-validation before promotion (category Environmental Workflows).
- Synthetic example — two observations from
lab-2026-03.xlsx, sheetResults: row 42 with a censored value<0.5and row 43 with an empty value. A profile withrequired_fieldonvalueandcensored_valueflags both rows (row 42 censored, row 43 missing value) and the balance line closes: total = clean + flagged, 0 blocking, 0 unevaluated. - Result — the balance line reports total, clean, flagged and blocking counts and lists unevaluated rows with the reason. A non-numeric value such as
abcbecomes avalue_parsefinding, never a skipped row. - Errors — an unknown rule type stops the run with
Unsupported validation ruleand invalidates the previous report; there are no stale results. With no observations the run reports zero records and a warning toast. - Limits — the batch row is the position in the validated set, not the spreadsheet row (see ENV-14 for source locations). Validation runs on the model already loaded; it does not gate the import wizard itself.
- Related — Validation Profiles, ENV-14 Sender Report, ENV-15 Post-import QA/QC, Data Ingestion. Video: pending for this chapter.
ENV-14 — Error report for the sender
Return errors to the sender by file, sheet, row and field, with rule, message and suggested fix, and prove on resubmission which earlier errors were resolved.
- Audience — whoever returns a rejected batch to the laboratory or consultancy and later checks the corrected resubmission (RF-14).
- Prerequisites — a completed validation run (ENV-13). Source locations appear when the import attached
sourceLocation(file, sheet, row) to each record; the ingestion pipeline does this for spreadsheet imports. - Steps — open Validation Profiles; read the Last run table (Row, Source, Field, Rule, Severity, Message, Suggested fix, Decision); press Export CSV; send the file; after the corrected batch arrives, run the same profile again. Guided tour: Error report for the sender.
- Synthetic example — row 43 of
lab-2026-03.xlsx / Resultshas an empty value; the finding showsFill in "value"as suggested fix. After the sender fills the value and the profile runs again, the balance line reports 1 resolved. - Result — CSV columns include profile version, batch row, source file / sheet / row, field, rule, message, raw value, censoring, suggested fix, a stable
fingerprint,resubmissionStatus(new, persisting, resolved) and the recorded decision. Resolved findings stay in the file so the correction is traceable. - Errors — Export CSV with no findings shows No validation results to export. A missing source location is left blank, never guessed.
- Limits — the panel lists up to 200 findings; the CSV always carries the full report. Resubmission status compares against the previous run of the same profile in this session.
- Related — ENV-13 Pre-validation, ENV-15 Post-import QA/QC, Data Ingestion. Video: pending for this chapter.
ENV-15 — Post-import QA/QC
Configure quality flags for censored values, duplicates, units and outliers, and record a human decision with a reason for every finding. No data is discarded silently.
- Audience — quality reviewers who accept, reject, correct or defer each finding after an import (RF-15).
- Prerequisites — a validation run whose profile includes quality rules:
censored_value,duplicate_check(key defaults to element + parameter + date, configurable viafields), unit and threshold rules, statistical outliers. - Steps — open Validation Profiles; in the Last run table press Decide on a finding; choose
accept,reject,correctordefer; type the mandatory reason; the row shows the decision and the balance line updates the pending count. Guided tour: Post-import QA/QC decisions. - Synthetic example —
<0.5is parsed as censored (lt) and evaluated at 0.5 with acensoredflag; the reviewer recordscorrect: Lab resent value for row 43with reviewere2e-reviewer. The balance line then reads 1 recorded. - Result — decisions persist with the profiles, travel in the CSV (decision, reason, reviewer, timestamp) and in the
.ecbtkey undervalidationProfiles.decisions. Pressing Revise records a new decision without erasing the trail. - Errors — a decision without a reason is refused (Decision not recorded). Duplicates are reported, never removed automatically.
- Limits — the Decide button exists only when there are findings; with a clean batch the guided tour shows that step as unavailable by design. Outlier and unit rules depend on the profile in use.
- Related — ENV-13 Pre-validation, ENV-14 Sender Report, Validation Profiles, Import / Export. Video: pending for this chapter.
Constants Manager
User-defined constants for scientific calculations: emission factors, uncertainty values, unit conversion factors, and site-specific parameters.
- Constants are referenced by the Calculator engine for metric computations.
- Editable via the Constants Modal (Optimize tab).
- Persisted in the model and included in ECBT exports.
Guided Workflows
Step-by-step guided workflows help users through standard environmental engineering processes.
- Workflows are defined declaratively and executed by the workflow engine.
- Each step can collect data, validate inputs, and call platform actions.
- Workflow events integrate with the EventBus for real-time progress tracking.
- Access via Analyze > Workflows.
Spatial Blueprint (DXF)
Import CAD site plans as Spatial Blueprint elements using the DXF ingestion pipeline.
- Supports DXF files from AutoCAD, QGIS, and other CAD/GIS tools.
- Parses layers, polylines, circles, text, and blocks.
- Creates a
blueprintfamily element with the imported geometry rendered in the 3D viewport. - Use File > Import DXF to start the import process.
Data Ingestion
Bulk import environmental data from spreadsheets and documents.
Spreadsheet Import (EDD)
- Import XLSX and CSV files with the bulk import wizard.
- Map columns to element properties, parameters, and campaign dates.
- Supports Electronic Data Deliverables (EDD) format from laboratories.
Rich Document Ingestion (v0.2)
- Extract data from PDF and DOCX reports using neuro-symbolic processing.
- PDF extraction via pdfplumber server-side for high-fidelity table parsing.
- Split-view interface: source document on the left, extracted data on the right with source grounding highlights.
- Automatically identifies tables, measurements, and structured data.
- Includes a Cost Framework L1 for extracting financial data from environmental reports.
- AI-powered analyzer with decision tracking for audit trails.
Data Entry Matrix
Bulk data entry interface for observations, designed for rapid field data input without navigating between modals.
- Spreadsheet-like grid — Tabular interface for entering multiple observations at once. Select elements as rows, parameters as columns.
- Parameter and unit selection — Configure which parameters appear per column with automatic unit defaults.
- Accessible from the Constellation HUD (bottom panel) — Data Entry tab.
- Values are validated in real-time against compliance thresholds (highlighted in red when exceeding limits).
Storyboard & Sequencer
Create animated sequences and video presentations from your environmental model.
- Timeline Sequencer — Arrange scene snapshots and camera transitions on a timeline.
- Cluster Animations — Group related elements for coordinated visual storytelling.
- Playback — Preview animations directly in the 3D viewport.
- Plume Animation — Animate contamination plume evolution over time.
- Veo 2 Video Generation — Generate photorealistic environmental videos from scene descriptions using Google Veo 2. Deterministic seeding ensures reproducible outputs.
- Keyframe Validation — Automated consistency checks between keyframes: camera path smoothness, element visibility continuity, and temporal coherence.
- Scene Seeding — Deterministic random seeds for reproducible camera paths and animation sequences across exports.
Pipelines (BPMN)
Automate multi-step workflows using a BPMN-inspired pipeline system.
- Define pipelines as sequences of platform actions with conditional branching.
- A Pipeline Editor UI for visual pipeline design.
- Pipeline executor runs registered actions with a security allowlist (~15 safe action names).
- Pipeline events integrate with the EventBus for status tracking.
- Treatment system integration — Treatment System elements can link to operational pipelines. Run, monitor, and track execution from the element inspector.
Treatment Systems
Model and track remediation and treatment infrastructure linked to operational pipelines. The treatment_system family connects physical treatment equipment to automated workflows and cost accounting.
- System types — Pump & Treat, SVE (Soil Vapor Extraction), Air Sparging, PRB (Permeable Reactive Barrier), MNA (Monitored Natural Attenuation), ISCO, bioremediation, oil-water separators, septic systems, and custom configurations.
- Operational parameters — Track flow rates, extraction volumes, treatment efficiency, energy consumption, and maintenance schedules as observations.
- Pipeline integration — Link treatment system elements to BPMN pipelines for automated monitoring, alerting, and reporting. Run pipelines from the element inspector.
- Cost tracking — CAPEX + OPEX rollup per system with L1–L4 cost aggregation feeding the governance module.
- Compliance targets — Define target concentrations and track progress toward CMA (Concentração Máxima Aceitável) goals over time.
Adding a Treatment System
Use Insert > Add Element and select the Treatment System family. Configure the system type, link to wells and plumes via edges, and optionally attach a BPMN pipeline for operational automation.
Well Geology
Advanced geological analysis modules for monitoring wells, based on Brazilian and international stratigraphic standards.
- Geological cross-section — SVG cross-section correlating lithologic layers across wells with ABGE-standard patterns and colors.
- Stratigraphy engine — Normalizes raw lithologic data into ISO 14688 / AGS4 compatible schema with SUCS classification.
- Well compliance checker — Validates wells against NBR 15495-1:2007 (ABNT standard). Scores: ≥80 = ok, 50–79 = warning, <50 = error.
- Constructive profile — SVG well construction diagram showing casing, screen, grout, and filter pack.
Accessing Well Geology
Select monitoring wells, then go to Insert > Well Profile. Tabs: constructive profile, lithologic log, cross-section, and NBR 15495-1 compliance report.
Wells: lithology and construction intervals (env-08)
Goal: record the lithologic layers and the construction elements (casing, screen, filter pack, grout) of a monitoring well so that the graphic profile and the interval table always reconcile, and so that invalid intervals are detected before anything is saved. Audience: field professionals who register boreholes and internal technical reviewers. Prerequisites: a model with at least one well element; the guided tour Well lithology and construction intervals creates a synthetic well when the model has none.
Steps. Select the well in the element list and open its Well Profile module (family modules menu). The left side draws the constructive profile and the lithologic log; the Edit button opens the interval editor with one row per layer (top, base, soil type, description, SUCS, consistency) and one row per construction element (top, base, type). Change a depth and press Save: the module validates every interval before persisting. Errors block the save and are listed above the table (role="alert"), each pointing to its row, which is outlined and marked aria-invalid. Warnings (a gap between two layers) are listed but do not block.
Detected errors. INVERTED (top at or below the base), NEGATIVE, NON_FINITE, EXCEEDS_DEPTH (layer beyond the well depth, or construction element beyond the drilling depth), OVERLAP between consecutive lithologic layers and TOTAL_EXCEEDS_DRILLING. The rule set is the same one the renderer uses, so every row that the drawing would silently drop is now reported instead of disappearing.
Result. After the correction the error list disappears, the profile is saved on the element (data.profile) and the SVG draws exactly one lithologic rectangle per table row — the reconciliation the acceptance criterion asks for. Limits: depths are metres below the wellhead; the topographic elevation toggle requires the element to carry an elevation. Related: Well Geology, Water-level series, Guided Tours. Video demonstration: pending (not yet recorded).
Water-level series with explicit datum (env-09)
Goal: store water-level measurements with an explicit datum, unit and date, compare campaigns and export the series without losing the raw value or its origin. Audience: hydrogeologists and technical reviewers. Prerequisites: a well with at least two water_level observations that declare a datum (msl, or depth_below_reference together with a reference elevation on the observation or on the well). Observations without a datum are excluded from every curve and listed as datum_missing issues — they are never silently assumed to be elevations.
Steps. Open the Report editor and click ecbyts figures. The selector lists a Hydrograph (water level per well) entry for every well with two or more valid readings, plus an all wells candidate. Tick the candidates you want and press Insert selected: each becomes a corporate-layout figure in the report. The curve is drawn in metres above mean sea level; the footer states the datum declared by the observations and how many readings were converted, and how many were excluded.
Export. Open the command palette (Ctrl+K) and run Export water-level series (TSV). The file keeps, per reading, the well, date, campaign, raw value and raw unit, datum, reference elevation, the conversion note, the head in metres and the quality flags — values and origin are preserved, nothing is rounded away. The same series feeds the water-table layer of the Interpolation panel, so the map and the table agree.
Errors and limits. A reading without a parseable date, a depth reading without a reference elevation, or a unit that cannot be converted to metres is reported as an issue and never enters the curve. Comparison between campaigns is well-by-well (head difference in metres). Related: Potentiometric Maps, Reports, Wells. Video demonstration: pending (not yet recorded).
Human-health risk assessment record (env-10)
Goal: store a risk scenario (substance, exposure scenario, receptor, pathways, concentrations, method) as a record with provenance, and keep the record distinct from the calculation: a number is attached only when the method is implemented and validated, and regulatory approval is never presumed. Audience: consultants and internal reviewers. Prerequisites: none — the panel works on a synthetic scenario.
Steps. Open Risk Assessment (Analyse menu, command palette or Alt+R). Choose the substance and the exposure scenario, type at least one concentration and press Calculate CMA. The panel first stores the scenario as a record; the engine result (incremental cancer risk, hazard quotient, acceptable concentration, limiting pathway) is attached to that record together with its provenance: receptor and age group, pathways, media, method identifier, whether the method is implemented and which validation suite covers it, a digest of the input, and the timestamp. The line Regulatory approval: not asserted is part of the record.
Result. Records persist inside the model (model.riskAssessment) and travel with the .ecbt key. Closing and reopening the panel — or reloading the model — shows the last record with the note restored from the saved model, not recomputed; the digest proves which input produced the number. Limits: when the method is not implemented for the chosen scenario the record is stored without a result and says so; nothing in the panel claims regulatory acceptance. Related: SAO Matrices, Compliance Validation, Guided Workflows. Video demonstration: pending (not yet recorded).
ENV-02 — Internal and external profiles: roles per organization
Roles are resolved per organization and fail closed: membership in one organization grants nothing in another, the UI only mirrors the canonical policy, and the backend (row-level security) is what refuses an action outside your scope — with the error shown, never swallowed.
- Audience — organization administrators (internal reviewers) who configure governance, analysts who only read it, and external senders who must never see or change another organization's scope (RF-02).
- Prerequisites — an authenticated session with an active organization. Without one the panel does not open (
authenticated_organization_required) and the guided tour shows its first step as unavailable instead of pretending success. - Steps — open Data Studio > Communicate > Governance and Pilot. The panel resolves your role in this organization through the canonical policy (
canCurrent(MANAGE_MEMBERS)): admin or owner can save, member and guest read. Try to register an approval outside your scope: the database refuses it (RLS, error42501) and the alert above the sections reads operation denied by the backend. Guided tour: Roles per organization. - Synthetic example — two organizations and three roles. Org A: reviewer
admin, analystmember; Org B: the same people have no membership; an external sender isguestin Org A only. Read/write/share evaluated byevaluateScopedAccessgives 7 grants and 11 denials; every cell outside the person's organization isoutside_org_scope. The screenshots come from the analyst (member) session against a backend that answers42501. - Result — the read-only note and disabled Save buttons mirror the role; the denied write shows the backend message in a
role="alert"box and nothing is saved. Pilot flags stay OFF unless window, published SHA and distinct people are all present, and only for that tenant. - Errors —
42501/ RLS: role does not authorize the change;23514: record fails the table check constraint;23503: reference to a missing account or organization. Each one is displayed, never thrown away. - Limits — the institutional role (stakeholder) never grants access; only the organization role does. The two-organization matrix is proven in unit tests and, in the browser, against a stubbed backend: creating real accounts in two organizations is outside this chapter.
- Related — ENV-11 Audit Trail, Data Ingestion, Guided Workflows. Video: pending for this chapter.
ENV-03 — Corporate authentication: OIDC, mapping, provisioning and revocation
Sign in with your organization's corporate account over OIDC: the identity provider authenticates, the e-mail domain selects the organization, the IdP group selects the role and provisioning is fail-closed — without proof of mapping there is no corporate session; a revoked identity loses its memberships and sessions.
- Audience — organization administrators who connect their identity provider, and corporate users who sign in with the account the organization already manages (RF-03).
- Prerequisites — an OIDC identity provider registered in the authentication layer (provider
keycloak; the test IdP is a local Keycloak realm, by owner decision) and one mapping rule per issuer incorporate_idp_rules: accepted e-mail domains, target organization, default role (guestormember) and the optional IdP-group → role map. Migration20260909230000_corporate_idp_provisioning.sqlis versioned and proven locally; applying it to a hosted project is the owner's act. - Steps — open Login; press Sign in with a corporate account; authenticate at the provider; on return the application calls
corporate_provision_identity()with your session and reads the answer. Admitted: the user menu shows Corporate account (OIDC) · role. Refused: the session is closed, the modal reopens and the reason is shown above the list Why can a corporate sign-in be refused? (the list is rendered from the provisioning contract, not typed by hand). Guided tour: Corporate account (OIDC): sign-in, mapping and revocation. - Synthetic example — realm
ecbytswith usersanalyst@example.test(no group),reviewer@example.test(groupecbyts-admins) andoutsider@other.test; rule: issuer…/realms/ecbyts, domainexample.test, defaultmember,ecbyts-admins → admin. Measured against the real local IdP: analyst →create_membershipas member, second sign-innoop; reviewer → admin (groups arrive inidentity_data.custom_claims); outsider →email_domain_not_allowed; after revocation by the service role the old token gets403and the refresh token400. - Result — a stable external identity (
issuer|subject) bound to one organization and one role; the membership is created on first sign-in, updated when the group mapping changes, untouched otherwise; an existingowneris never downgraded by directory sync. - Errors —
issuer_not_trusted,email_domain_not_allowed,email_not_verified,invalid_claims,group_mapping_escalation_blocked,organization_missing,identity_revokedand, when the provisioning function is unreachable or answers something malformed,provisioning_unavailable/provisioning_rejected. Every one closes the session and is displayed; none is swallowed. On token refresh, an identity that is no longer active ends the session withidentity_inactive. - Limits — one OIDC provider (SAML is deferred until a corporate customer requires it); the button is not labelled “SSO” until the receipt against the real IdP is accepted by the owner; a corporate session still passes the existing invite, terms and registration gates; the screenshots come from the product UI against a simulated identity provider, and the measured flows above come from the local Keycloak runbook (
npm run env03:keycloak). - Related — Authentication, Corporate SSO status, ENV-02 Roles per Organization, ENV-11 Audit Trail. Video: recorded from the guided tour (see the media manifest for this chapter).
ENV-11 — Database audit: actor, operation, object, previous and new version
Every versioned change is recorded with actor, operation, object and the previous and new version when applicable; the history of one object is correlated change by change, and the trail cannot be edited or deleted by anyone — in the client by contract and in the database by migration.
- Audience — internal reviewers and auditors who need to know who changed what, and when, without being able to rewrite the record (RF-11).
- Prerequisites — none. The panel reads the session trail; with no entries it shows zero entries and the access matrix. It never invents data.
- Steps — open More > Audit trail (also in the system catalog). Section 1 lists entries:
createcarries only the new version,deleteonly the previous,update/transferboth. Section 2 correlates the history of one object and checks continuity: the previous version of each change must equal the new version of the change before it. Section 3 shows who can do what. Guided tour: Audit trail. - Synthetic example — well
W-01: Ana (reviewer) creates it with depth 12; Bruno (analyst) updates 12 → 15 (linked); Carla records an update whose previous version says 14 — the history flagsbefore_differs_from_previous_afterat that sequence and marks the object inconsistent. A fourth entry deletes sampleS-7with its previous version only. - Result — every entry hashes the previous one; the header verifies the chain. The access matrix shows
read_ownfor guests,appendfrom member,read_allfrom admin, andupdate/deleterefused for every role (audit_immutable). In the database, migration20260905230000_audit_log_drop_update_delete.sqldropped the UPDATE and DELETE policies ofpublic.audit_log; SELECT and INSERT remain. - Errors — a versioned change without actor, object or the required version is refused before writing (
audit_actor_required,audit_before_version_required, …). A rewritten or truncated trail failsassertAppendOnlyExtension. - Limits — this panel shows the client-side trail of the current session; the database trail is queried through the audit views with role-limited SELECT. Migration
20260905230000_audit_log_drop_update_delete.sqlis already applied to the production database (2026-09-05):public.audit_logkeeps only its SELECT and INSERT policies, so no role — not even owner — can rewrite or erase a row through the API. - Related — ENV-02 Roles per Organization, Blockchain Integrity, Data Audit. Video: pending for this chapter.
ENV-01 — Areas and geometries with explicit CRS
Import shapefile or KML geometries as areas, wells and drainage lines with the coordinate reference system stated up front: the wizard shows the CRS status, blocks import without a .prj and accepts an explicit declaration; KML enters as CRS84 by standard.
Guided environmental data presentation
Open the guided presentation to follow the demonstration course in the application. To open a specific block, keep training=demo-cetesb-gac and modo=apresentacao and add its lesson identifier. For example, open the QA/QC block. Use the block link to return directly to that part of the presentation after an interruption.
- Audience — data managers who receive site boundaries, wells and drainage lines from field teams or consultancies as shapefile or KML (RF-01 of the environmental data workflows).
- Prerequisites — a
.zipwith.shp,.shx,.dbfand, ideally,.prj; or a.kml(OGC KML 2.2). Reading shapefiles needs the shpjs library loaded from its CDN. The file CRS and the model origin are separate: KML requires an explicitly configured, valid and compatible model origin even though its source CRS84 is known. Do not change the model or origin while the file is being prepared or imported. - Steps — open Home > Import and choose the Spatial route (or use the legacy form Import > Spatial); select the file. For shapefiles the wizard opens with feature count, geometry types, attribute fields, geographic preview and the CRS block; pick the target family and name field and press Import. Guided tour: Areas and geometries with explicit CRS (category Environmental Workflows).
- Synthetic example — the tour builds two in-memory shapefiles with three points (
PM-DEMO-01..03, WGS84 longitude/latitude): one without.prj, whose CRS block is red and whose Import button stays disabled until the EPSG:4326 declaration is ticked; and one with.prj, whose block reads GCS_WGS_1984 in green. A KML with a Point, a LineString, a Polygon and a MultiGeometry of two polygons becomes 5 elements (1 well, 1 river, 3 boundaries) with CRS84 recorded in the report. - Result — every imported element carries
data.provenancewith format, source file, CRS, CRS source (prj,declaredorstandard), geometry hash and import date. The import report lists records received, added, duplicates and errors. - Errors — a shapefile without
.prjand without declaration is rejected with CRS missing; onlyEPSG:4326can be declared in this version. A KML without any Placemark, with unparseable coordinates, or without a compatible model origin is rejected before geometry insertion. A change of model, origin or edit permission during import rejects stale work. If a partial batch cannot be safely cleaned up, follow the explicit pending recovery guidance; do not assume that every failure removed every record. - Limits — no reprojection: UTM or other projected coordinates require the
.prjand are converted by the geographic origin of the model. Import runs on the whole file; partial selection is not supported. - Related — ENV-22 Lines, polygons and batches, Data Ingestion, Import / Export, Spatial Blueprint. The Portuguese guide video uses synthetic data; the wizard preview is unavailable in this recording. Pause or replay for reading.
ENV-22 — Lines, polygons and historical batches
Persist lines and polygons and migrate historical batches with reconciliation by stable id and provenance: the report closes counts (received, added, duplicates, errors), reimporting never duplicates, and a failed batch is rolled back proportionally.
- Audience — whoever migrates historical campaigns and geometries into the model and must prove counts, hashes and the absence of duplicates (RF-22).
- Prerequisites — a spatial file (shapefile, GeoJSON or KML) whose features may be points, lines, polygons or multi-geometries. KML declares the source CRS84, but an explicitly configured, valid and compatible model origin is also required. Keep the model, origin and edit permission unchanged while importing. The same file can be imported more than once after any pending recovery is resolved.
- Steps — open Import > Spatial, select the file and read the report in the progress overlay; open the left panel to see the new elements; import the same file again and compare the report. Guided tour: Lines, polygons and historical batches.
- Synthetic example — the tour imports
tour-env-22-campanha-2019.kml(Point, LineString, Polygon, MultiGeometry with two polygons). In a fresh demonstration batch, the first import receives 5 records, adds 5 and reports 0 duplicates. Reimporting that file receives 5, adds 0 and reports 5 duplicates: the batch still contains five elements, in addition to any preexisting model data. Tour cleanup must be limited to unchanged records created by that tour session; a matching filename does not establish ownership. - Result — each feature gets a stable id (
imp-plus a hash of dataset, layer, position and geometry) anddata.provenancewith geometry hash and count, so a batch can be checked against its source. Reconciliation modeskipignores ids that already exist. - Errors and recovery — failed batches attempt proportional rollback of their own unchanged records. Later edits, foreign child links or a changed model/origin can prevent safe cleanup: the interface keeps an explicit pending recovery instead of forcing deletion or claiming that nothing was imported. Resolve the indicated context or data conflict before retrying. If data were already applied and only finalization is pending, retry finalization without importing again. The tool never restores an external origin automatically.
- Limits — reconciliation compares ids, not attribute values: a feature whose geometry changed gets a new id and is added, the old one is not replaced automatically. Modes
replaceandsuffixexist in the library but the UI usesskip. Pending recovery capabilities belong to the current session; reopening a dialog is not a guarantee of recovery after a browser restart. Model persistence and reconstruction are tested separately from recovery of an unfinished operation. - Related — ENV-01 Areas and geometries, Data Ingestion, Import / Export. The Portuguese guide video demonstrates synthetic import, duplicate reconciliation and session cleanup. Rollback is explained, not induced in the recording.
ENV-07 — Environmental data entities from an EDD
Import a laboratory EDD package (Location, Sample, TestResults) and see where each entity lives in the model: points become elements, sampling dates become campaigns, and samples with their results become observations on the point.
- Audience — reviewers and data managers receiving laboratory EDD packages (RF-07 of the environmental data workflows).
- Prerequisites — an EDD workbook with
Location,SampleandTestResultssheets. The reference fixture istests/e2e/fixtures/env-edd/lab-edd-package.xlsx(6 points, 22 samples, 126 results; one sample references a point that does not exist). - Steps — open Data > Import; drop the workbook; read the recognised format and sheet counts; finish the wizard and apply the merge; open the Elements tab (points), the Campaigns tab (sampling dates) and select a point to see its observations. Guided tour: Environmental data entities from an EDD (category Environmental Workflows).
- Relations —
Location.sys_loc_code→ element;Sample.sys_loc_code+sample_date→ campaign;TestResults.sys_sample_code→Sample→ observation on the element with parameter, value, unit, matrix, date and detect flag. Each record keeps file / sheet / row for ENV-13/14. - Result (measured) — the import balance closes: 126 results = 120 observations + 6 discards. The fixture yields 6 elements and 4 campaigns; the six discards are the rows of the orphan sample (code
LOCATION_NOT_FOUND, sheetTestResults, row number and a detail namingMW-99), and that point is never created. Measured intests/e2e/env-c-internal-journey.spec.tsand in the tour walk oftests/e2e/tour-env-07-16-21.spec.ts. - Limits — the tour does not import the file for you (a file input needs your gesture) and seeds nothing: it shows the panel exactly as your import left it. Twenty-one results keep an unmapped unit and one value is non-numeric; those are kept and reported as issues, not discarded.
- Related — Data Ingestion, ENV-13 Pre-validation, ENV-16 Filter Reconciliation, ENV-18 Integration REST API. Video: pending for this chapter.
ENV-16 — Same selection in map and SQL
Filter observations by parameter and matrix in the interpolation panel and reproduce the exact same selection in Data Studio: the observations table carries parameter, matrix and campaign_id from the same records, so counts must agree.
- Audience — analysts exploring a model by area, campaign and parameter across maps, charts and tables (RF-16).
- Prerequisites — observations with
parameterId,sample_matrixandcampaignId(an imported EDD or the synthetic model used by the tour test). - Steps — open Interpolation; choose the matrix and the parameter; press Contamination to generate the plume (the precondition check counts the points that pass the filter); open Data Studio > Processing and run the query the tour writes:
SELECT campaign_id, matrix, COUNT(DISTINCT element_id) AS points, COUNT(*) AS results FROM observations WHERE parameter = ... AND matrix = ... GROUP BY campaign_id, matrix. Guided tour: Same selection in map and SQL. - Contract — the interpolation engine filters
o.parameterId,o.sample_matrixando.campaignId; the SQL table stores the same fields asparameter,matrixandcampaign_id. An observation without a campaign isNULLin SQL and never matches a campaign filter on either screen (tests/env-16-datastudio-filter-reconcile.test.mjs). - Result — for the same parameter, matrix and campaign, the plume point count equals
pointsin the query result. - Limits — the interpolation panel exposes matrix and parameter; the campaign filter is applied by the engine when a plume is generated for a campaign, and is explicit in SQL. The map uses the latest value per point; SQL counts every observation (
results). - Related — Interpolation, Data Studio, ENV-07 EDD Entities. Video: pending for this chapter.
ENV-17 — Alerts and notifications
Receive submission, error, review and deadline events in the panel and by email. The email channel is real and leaves in a labelled sandbox mode (provider test key); preferences hold on the client and on the server; the same event arrives once; a failure gets a limited retry and a recorded give-up.
- Audience — data managers, reviewers and senders who must be told when a batch is received, rejected, reviewed or due (RF-17).
- Prerequisites — none for the panel (it works offline, in this browser). Email requires a signed-in user with a confirmed address, a saved preference on the server, and the provider test key
RESEND_API_KEY_TEST(re_test_*) configured for thecreate-notificationEdge Function — without it the server records the alert in mode No test key and sends nothing. - Steps — open the Notifications panel (bell in the header, or the guided tour); read an entry; press the preferences button; read the Email channel mode block; per type, enable or disable the alert and tick the channels (In-app, Email); press Save. Guided tour: Alerts and notifications: panel and sandbox email (category Environmental Workflows).
- Synthetic example — the tour creates the panel-only entry
Exemplo sintético: lote lab-2026-03.xlsx rejeitado(typeprocessing.import_failed, P2) and deletes it at the end. A P0 alert such assecurity.alertfor user00000000-0000-4000-8000-000000000001leaves once as[SANDBOX] [Ecbyts] Alerta: …to the provider sandbox inbox, with the durable idempotency keynotification:<sha256>:1. - Result — the panel lists every entry; the server keeps one notification row per event; the sandbox inbox receives one email per event; the preferences modal labels the last delivery mode: SANDBOX (test key), No test key, Disabled, Failed or No alert left this session, with type, durable state and reason underneath.
- Deduplication — the client outbound gate drops the same event inside a 10-minute window; the server reserves each event durably (
notification_dispatch_attempts) so concurrent isolates and page reloads still produce one provider call. Explicitevent_id/event_versionnever reopens; only content-identified reminders may re-emit after their window. - Deactivation — disabling a type or unticking Email is applied to the local gate (nothing leaves the machine) and saved to
notification_preferences; the Edge Function re-reads that row before every send. No row, or a failed read, means no email (fail-closed). - Errors — a retryable provider failure (408/425/429/5xx, timeout) is retried up to 3 times with the same idempotency key; a permanent one (other 4xx, payload conflict) is not. After the attempts the durable state becomes retryable and, after three server reclaims, uncertain: the give-up is recorded in the receipt and shown as Failed. When the server does not confirm a preference save, a warning toast says so.
- Limits — P0 and P1 entries are never batched in the local panel by design (only P2 social entries merge), so the panel lists each producer call while email and the server row stay single. Push remains a declared stub. Email is sandbox-only until a separate decision authorises a production key; the tour never saves preferences for you.
- Related — ENV-05 Submission Portal, ENV-13 Pre-validation, ENV-14 Sender Report, ENV-02 Internal and external profiles. The Portuguese guide video uses synthetic data and a fake transport injected at the product's transport seam; the sandbox label comes from the real receipt path.
ENV-18 — Integration REST API
The v1 contract is documented and readable; the authenticated write API is deliberately postponed until a real integrator exists. This chapter says what you can call today and what you cannot — the gap is the deliverable, not an omission.
- Audience — teams integrating a spreadsheet or script with a shared model (RF-18).
- What exists — the read/compute endpoint consumed in production by the Excel add-in and three Office Scripts, plus a loopback bridge exposing
/api/v1/ecbtfor local development. Full reference in API reference; the versioned contract is Integration Contract (v1), and every sentence of it is locked bytests/env-18-api-contract-v1.test.mjs. - Steps — open Help > API reference in the ribbon (or the API docs card on the Home quick access); read Versioning, Authentication, Transport & CORS and Declared gap. Guided tour: Integration API: contract v1 and its limits (category Environmental Workflows), six steps over the Help menu, the session button, the Save > Shares item and the Home card. The tour never leaves the app nor opens a tab: opening the reference is your gesture.
- External API authentication — the Bearer credential is the access token of a signed-in user. A share code identifies a resource; it never grants identity. The
ecbt-apicontract requires authentication for POST: missing or invalid identity answers 401, while an unauthorized, expired or revoked share answers 403. GET returns public health information, not model data. Read the external Edge API OpenAPI contract for its operations and response shapes. Inspectokeven on HTTP 200; an application error can use that status. - Envelopes and errors —
/api/v1/ecbtanswers{ok, kind, data}. Transport errors carrykind: "error"with HTTP 400 (bad_args), 503 (not_built) or 500; domain errors come back with HTTP 200,ok: falseand nokind. Branch onok, never onkind. Limits: body up to 5 MB (413), JSON only (415), unknown route 404, one pipeline run at a time (409), no pagination on any route. - What does NOT exist — there is no package creation operation on any surface, so there is no idempotency key to verify; the loopback bridge has no 401/403 of its own; there is no pagination. The contract section Declared gap lists these items one by one.
- Integration scope — the external Edge endpoint exposes shared-model
value,tableandsumoperations. Scientific calculations remain in the client tier under the approved hybrid architecture. Package creation and integration with a specific institutional system require separate contracts. The limits listed above for/api/v1/ecbtdescribe the local bridge and must not be assumed to apply to the Edge endpoint. - Related — API reference, ENV-07 Environmental entities, ENV-02 Internal and external profiles, ENV-21 Language and AI assistant. The Portuguese guide video is recorded from the guided tour itself over the real interface; pause or replay for reading.
ENV-19 — SaaS and self-hosted installation
Know in which architecture this app runs and how to install it yourself. The SaaS (static front plus managed Supabase, operated by Ecbyts) and the self-hosted installation (a reproducible script over the Supabase CLI and the build) are assessed separately; the Installation and backend panel shows the architecture declared by the build, the backend host, an on-demand health probe and the installer commands.
- Audience — IT operators and administrators of public bodies or companies that must run the platform on their own infrastructure, and anyone who needs to know whether an instance is the Ecbyts SaaS or a self-hosted installation (RF-19).
- Architectures, assessed separately — SaaS: static front (Vercel/Bluehost) plus managed Supabase, operated by Ecbyts. Self-hosted: the same front and the same migrations/functions installed by
scripts/install/self-host.mjson a local Supabase stack (Docker) or on the customer's own Supabase Cloud project. The panel never infers SaaS from the domain: the build declaresINSTALL_KIND(saas,self-host-local,self-host-remoteorunknown). - Prerequisites — Node.js 22 and npm; Supabase CLI; for the local target an active Docker engine (the installer probes
docker info --format '{{.ServerVersion}}'and treats an empty answer as stopped); for the Supabase Cloud targetSUPABASE_ACCESS_TOKEN,SUPABASE_PROJECT_REF,SUPABASE_URLandSUPABASE_PUBLISHABLE_KEYof the customer project, with thepg_cronandpg_netextensions enabled in its dashboard (migrations require them). The local stack gets both extensions fromsupabase/roles.sql. - Steps — open More > Installation and backend to read the architecture, the host and to press Check health. To install:
node scripts/install/self-host.mjs --target localprints the plan (dry-run, nothing runs);--applyexecutes it:supabase start(orsupabase linkfor the remote target), migrations in chronological order (db resetlocally,db pushremotely), Edge Functions served (locally) or deployed,app/js/supabase-config.jsgenerated for that installation, TypeScript build, and a health probe (auth, REST OpenAPI exposingpublic.profiles, an authenticated query, andfunctions/v1/health). On a host where another Supabase stack already uses the default ports, add--project-id <id> --port-base <n>: the installer rewritessupabase/config.tomlonly during the run and restores it. Guided tour: SaaS or self-hosted: where this app runs. - Real example — the receipt in
docs/reports/ENV_RF19_BCD_20260909.mdrecords the local--applyexecuted on 2026-09-09 with the isolated projectecbyts-selfhost-rf19on ports 55320–55329: the steps, their durations, the health probe verdicts and the commands as templates ($SUPABASE_URL, never values). The screenshots of this chapter come from the app built by that run. - Result — a JSON receipt (
.runtime/self-host/receipt-*.jsonor--receipt) with every step, every command and the health verdicts; exit codes 0 ok, 1 command failed, 2 plan or production guard blocked, 3 health failed. The panel then reports the loopback host with self-host-local declared and the probe online. - Errors — the installer refuses the Ecbyts production project by ref and by URL (exit 2, zero commands); a blocked plan (missing Docker, CLI or token) never executes; a failing step rolls back proportionally (a stack started by this run is stopped, the previous
supabase-config.jsis restored byte by byte, background functions are killed);supabase statusoutput is never echoed and secret values never enter the receipt. The CLI's own.env.localloading is disabled (SUPABASE_ENV=test) so the repository production file is never read. - Update — check out the desired tag and run the same
--apply:db pushapplies only versions missing fromsupabase_migrations.schema_migrations, function deploy is an upsert by name, the app is rebuilt. Locally,db resetrecreates the database, so back up first. - Backup —
node scripts/supabase-backup-local.mjs(structure) andsupabase db dump --data-only(data) before every update; Storage objects are backed up from the bucket, not from the database. - Limits — an isolated localhost does not prove an autonomous installation on a clean machine (the panel says so whenever the host is loopback); Edge Functions require the Supabase Deno runtime;
pg_cronandpg_netmust exist in the target Postgres; the front build stops atapp/— publish it on your own static host; two migrations share the timestamp20260804223000(independent tables, applied in file-name order) and are reported as a warning, not a blocker. - Related — ENV-02 Internal and external profiles, ENV-18 Integration REST API, ENV-11 Audit trail. The Portuguese guide video walks the panel over the app built by the real local installation; pause or replay for reading.
ENV-21 — Language and AI assistant
Switch the interface between Portuguese, English and Spanish and ask the assistant about the loaded model. The system prompt carries the model context; a provider failure preserves your text.
- Audience — users working in Portuguese, English or Spanish who want contextual help from the assistant (RF-21).
- Prerequisites — a loaded model; an assistant engine (cloud with your key, local OpenAI-compatible endpoint, or in-browser). The tour test uses a mocked local endpoint: no external call.
- Steps — open the language selector in the title bar and pick a language; open the AI Assistant; read the engine badge and token meter; type a question about the model and send. Guided tour: Language and AI assistant.
- Context — every request carries the model context in the system prompt (
Elementos no modelo: N,Campanhas cadastradas: M, family summary). The E2E test reads N and M from the page and checks them in the captured payload (tests/e2e/env-21-assistant-context-mock.spec.ts). - Result — the answer appears in the chat with the engine used; the same panel renders with translated texts in PT, EN and ES.
- Errors — a provider failure (503) shows a recovery notice, keeps your message in the input and leaves the send button enabled.
- Limits — the assistant proposes; the model only changes through explicit user actions. Fourteen other locales fall back to English for the newest strings until translated.
- Related — AI Assistant, Languages, ENV-16 Filter Reconciliation. Video: pending for this chapter.
ENV-20 — Pricing, seals and declarations
Read the billing units, the plans with their limits, the optional services and the seals and declarations in one panel — every price carries the owner's approval state (example or approved). No price, certification or homologation is invented: what has no evidence is stated as absent.
- Audience — whoever evaluates contracting the product (customer, public body, auditor) and needs to know what is charged, what the limits are and what is actually certified (RF-20).
- Prerequisites — none. The panel reads the same tier table the checkout charges from and a versioned approval source; no model, login or fixture is required.
- Steps — open More > Help > Plans, prices and certifications (or the link inside the checkout); read the banner at the top, then sections 1 to 5. Guided tour: Plans, prices and certifications: what is charged and what is proven (category Environmental Workflows).
- Billing units — monthly or yearly subscription, one-time payment, prepaid balance metered per AI token, and per-plan limits (projects, elements, campaigns, storage). The panel also states what is not charged: per hectare, per sampling point or per seat.
- Approval state — the displayed price and the charged price come from mirrored tables; the third leg, the approved source, is a decision of the owner recorded in
app/assets/data/price-source.json. While it is pending, the banner says the values are EXAMPLE and every amount carries the badge example — not approved by the owner. Recording the decision switches the same panel to approved by the owner without any code change; changing a price after approval drops it back to example. - Optional services — library marketplace, courses, invoicing (NFS-e) and the enterprise plan exist in the code but have no approved price table, and the panel says so instead of inventing a value.
- Certifications — the product holds no third-party certification (ISO, SOC 2, INMETRO or similar). Declarations with evidence in the repository (software registration at INPI, LGPD technical controls with pending items) are listed as declarations, not as product certifications, and the list of what is not held is explicit. Self-declared seals are separated from third-party certificates by the anti-greenwashing policy (
core/certification/_antiGreenwashPure.ts). - Receipt — section 5 ties displayed → charged → approved source with the SHA-256 of the canonical price catalog;
node scripts/pricing/price-approval.mjs verifyreproduces it from the command line. - Errors — if the approval source cannot be read, the panel still renders every amount as example and shows the reason; it never assumes approval. A source that claims approved without a valid decision key or with an outdated catalog hash is rendered as example with the reason.
- Limits — the panel explains; it does not sell. Amounts shown are examples until the owner records the decision, and this chapter will read approved only after that record exists. Fourteen other locales fall back to English for the newest strings until translated.
- Related — Wallet, ENV-18 Integration REST API, ENV-21 Language and AI. The Portuguese guide video walks the six tour steps over the real panel.
Issues 3D (BCF-like)
3D-anchored non-conformity markers for collaborative issue tracking, inspired by BIM Collaboration Format (BCF).
- Create spatially-anchored issue markers directly in the 3D scene.
- Map-indexed for O(1) lookup performance.
- Persisted to IndexedDB with a sync queue for offline-first operation.
- 3-way merge conflict resolution for multi-user scenarios.
Data Audit
Detect anomalies and potential fraud in environmental datasets.
- Benford's Law Analysis — Check first-digit distribution of observations against the expected Benford distribution. Deviations may indicate fabricated or manipulated data.
- Greenwashing Detection — Flag suspiciously uniform or implausible environmental metrics.
Internationalization (i18n)
16 fully-translated locales with lazy loading, interpolation, pluralization, and RTL support.
| Code | Language | Code | Language |
|---|---|---|---|
pt-BR | Português | en-US | English |
es-LA | Español | zh-CN | Chinese |
fr-FR | Français | de-DE | Deutsch |
ja-JP | Japanese | it-IT | Italiano |
ko-KR | Korean | ru-RU | Russian |
id-ID | Bahasa Indonesia | hi-IN | Hindi |
tr-TR | Türkçe | pl-PL | Polski |
sv-SE | Svenska | ar-SA | Arabic (RTL) |
- Lazy loading — Only 1–2 JSON files loaded per session for fast startup.
- Interpolation —
t('key', { count: n })for dynamic values in translated strings. - Pluralization —
tp('key', n)viaIntl.PluralRulesfor grammatically correct plural forms. - Regional formatting — Numbers, dates, and currencies formatted via
Intl.*APIs. - RTL support — Arabic locale triggers
dir="rtl"on the root element. - Switch languages via the titlebar language selector (EN / PT / ES) or any of the 16 locales in settings.
Random Model Generator
One-click demo model generation with realistic environmental data for exploration, training, and presentations.
- 1 boundary with 6 geological strata.
- 3–8 monitoring wells, 1–4 contamination plumes, 1–3 tanks, 1–4 buildings.
- Lakes, rivers, springs, and general markers.
- ESG elements: emission sources, waste streams, effluent points, habitats, individuals, incidents, areas.
- Mining & civil: dams, open-pit excavations.
- Fleet & operations: vehicles, equipment, treatment systems, linear infrastructure.
- Route & flow elements for hydraulic connectivity.
- 3–5 sampling campaigns spanning 2 years with observations per element.
- Edge relationships (wells→plumes, incidents→areas, fauna→habitats).
- 50+ parameter types with realistic value ranges.
Generating a Random Model
Click File > Random in the toolbar. The model includes fully populated campaigns with observations, making it ideal for testing analytics, interpolation, and export features.
Regulatory Applicability
The Regulatory Applicability Assistant performs a first-pass screening of potentially applicable requirements using organization profile, jurisdiction, declared activities, source validity, and territorial competence.
- Four explicit states — applicable, conditional, not applicable when declared, and information missing. Silence never becomes a negative conclusion.
- Source provenance — each finding exposes authority, jurisdiction, version, effective dates, verification date, confidence, and uncertainty.
- Human decision — screenings that require review remain marked, and approval records the reviewer in an audit trail.
- Monitoring candidates — applicable and conditional findings can be carried into follow-up monitoring work.
Screening support, not legal advice
The assistant does not establish legal conformity. A qualified reviewer must confirm the organization profile, source currency, jurisdiction, exceptions, permits, and final obligations.
Results by Campaign / Resultados por Campanha
This panel compares monitoring results across campaigns and points, answering how concentrations evolved over time and how they relate to the selected guideline value.
- Shared filters — select the compound and monitoring points once for both chart and table views.
- Campaign chart — one series per point, canonical campaign order, optional logarithmic scale, dashed guideline value, and explicit gaps without interpolation.
- Censored results — values such as
<3remain verbatim and are shown as open circles at the quantification limit; they are never silently converted into numbers. - Transposed table and CSV — compare compounds, points, campaigns, units, guideline values, and exceedance markers without relying on color alone.
- Fail-closed warnings — unknown campaigns, unit mismatches, and missing thresholds remain visible instead of being dropped or inferred.
How to open
Home Grid → Compliance → Results by Campaign. When compatible project observations are unavailable, the panel offers a clearly labelled demonstration dataset without modifying the project.
Sustainability Reporting
The Sustainability Reporting Studio builds an evidence-backed reporting workspace, maps reusable facts to selected frameworks, identifies gaps, and prepares a structured content index before export.
- Reporting profile — entity, reporting period, consolidation boundary, audience, and objective are required and validated fail closed.
- Evidence-first disclosures — claims without evidence, conflicting values, and unreviewed equivalence mappings block export.
- Framework mapping — the current catalog supports demonstration mappings for ISSB S1/S2, ESRS/CSRD, CDP, GHG inventory methodologies, TNFD, SBTi, and PCAF workflows. GRI is not included in the current catalog.
- Gap review — coverage is reported against catalogued requirements with owners, status, reusable facts, and blocking or advisory findings.
- Structured export — JSON export becomes available only after blocking findings are resolved; human review and framework submission remain separate.
Partial framework baseline
Catalog coverage is a workflow aid, not a conformity or readiness percentage. Confirm current framework requirements, licensing terms, materiality decisions, assurance expectations, and filing rules with qualified reviewers.
System Catalog / Catálogo do Sistema
The System Catalog is the live operational inventory of capabilities available in the current ecbyts session. It combines structured Home Grid modules, browser handlers, curated core actions, and the API action registry in one searchable table. It is different from ECBT Catalogs, which manages scientific and data-governance catalogs.
Home Grid modules
User-facing modules retain their stable ID, translated label, description, and runtime entry point.
Handlers
Runtime handle* and toggle* functions registered by the loaded interface.
Core actions
Curated workflows for import, export, analysis, visualization, configuration, and collaboration.
API registry
478 actions across 46 categories, including parameter metadata and execution constraints.
Discovery, search, and export
- Runtime-aware inventory — the list reflects modules that were successfully loaded in the current session; it is not a static marketing list.
- Search — filter by technical name or translated description. The table reports matched, displayed, and total item counts.
- Large catalogs — the table displays up to 500 matching rows and reports truncation; CSV export includes the complete filtered result.
- Deep link — opening the catalog updates the URL to
?tools=system-catalog, so the tool can be shared or reopened directly.
Access and execution safety
| Control | Behavior |
|---|---|
| Open | Top ribbon More → Tools → System Catalog. |
| Destructive actions | Require a separate confirmation before execution. |
| Guest mode | Backend API execution is blocked; local interface handlers remain subject to their own guards. |
| Parameterized actions | The catalog shows required parameter names. Use the dedicated interface or API Reference when an action needs values that are not available from the current UI context. |
| Quality scores | Overall and per-module quality scores are visible only to the configured MASTER account and fail closed when identity or the score service is unavailable. |
Inventory, not proof of availability
An item in the catalog proves that it was discovered in the current runtime. Successful execution still depends on permissions, required parameters, loaded project data, provider configuration, and backend availability.
Home Grid Module Index
This index is generated from the canonical Home Grid registry. Every executable Home Grid module must resolve to a public documentation section; missing mappings fail the documentation gate.
Maturity is declared per module in the same registry: Experimental modules are usable but may change, lose data compatibility or be withdrawn without notice; Stable modules are covered by the supported scope. The Home screen shows the same "Experimental" badge on those modules.
54 executable Home Grid modules (2 experimental)
| Module | Category | Maturity | Runtime entry point | Documentation |
|---|---|---|---|---|
Aerial Georefaerial-georef | Ai | Stable | handleAerialGeoreference | Open section |
AI Assistantai-assistant | Ai | Stable | handleOpenAiAssistant | Open section |
ML Recognitionml-recognition | Ai | Stable | handleOpenAerialModal | Open section |
Neural Networksneural-networks | Ai | Stable | handleOpenNNManager | Open section |
Calculatorcalculator | Analytics | Stable | handleOpenCalculator | Open section |
Cross-Sectioncross-section | Analytics | Stable | handleOpenCrossSectionPanel | Open section |
Energy Sankeyenergy-sankey | Analytics | Stable | handleOpenEnergySankeyModal | Open section |
Interpolationinterpolation | Analytics | Stable | handleOpenInterpolationPanel | Open section |
3D Labelslabels-3d | Analytics | Stable | handleToggleLabels | Open section |
Mann-Kendallmann-kendall | Analytics | Stable | handleOpenTemporalAnalysis | Open section |
Monte Carlomonte-carlo | Analytics | Stable | handleOpenScenarioSimulationModal | Open section |
Potentiometricpotentiometric | Analytics | Stable | handleOpenInterpolationPanel | Open section |
Time Seriestemporal-charts | Analytics | Stable | handleOpenTemporalAnalysis | Open section |
Results by Campaigncampaign-results | Compliance | Stable | handleOpenCampaignResults | Open section |
Compliancecompliance-check | Compliance | Stable | handleOpenValidationProfiles | Open section |
EIS Scoreeis-dashboard | Compliance | Stable | handleOpenEisDashboard | Open section |
Regulatory Applicabilityregulatory-applicability | Compliance | Stable | handleOpenRegulatoryApplicability | Open section |
SAO Matricessao-matrices | Compliance | Stable | handleOpenSAOMatrixPanel | Open section |
Sustainability Reportingsustainability-reporting-studio | Compliance | Stable | handleOpenSustainabilityReportingStudio | Open section |
Validation Profilesvalidation-profiles | Compliance | Stable | handleOpenValidationProfiles | Open section |
Map Pickermap-picker | GettingStarted | Stable | handleOpenMapPicker | Open section |
New Projectnew-project | GettingStarted | Stable | newProject | Open section |
GAC Gas Stationpreset-gac | GettingStarted | Stable | handlePresetGacGasStation | Open section |
GHG Inventorypreset-ghg | GettingStarted | Stable | handlePresetGhgInventory | Open section |
Random Modelrandom-model | GettingStarted | Stable | handleGenerateRandomModel | Open section |
View Modesview-modes | GettingStarted | Stable | toggleViewMode | Open section |
Welcome Tourwelcome-tour | GettingStarted | Stable | handleOpenTour | Open section |
EVA Analysiseva | Governance | Stable | handleCalculateEVA | Open section |
Governance Panelgovernance-panel | Governance | Stable | handleOpenGovernancePanel | Open section |
WBSwbs | Governance | Stable | handleOpenWbsDataModal | Open section |
Drawing Platedrawing-plate | ImportExport | Stable | handleExportPlatePDF | Open section |
Export Keyexport-key | ImportExport | Stable | openExportModal | Open section |
Import EDDimport-edd | ImportExport | Stable | handleOpenIngestionModal | Open section |
Import Keyimport-key | ImportExport | Stable | openImportModal | Open section |
Reportsreports | ImportExport | Stable | handleOpenReportOverlay | Open section |
Constantsconstants | Libraries | Stable | handleOpenConstantsModal | Open section |
Marketplacemarketplace | Libraries | Experimental | handleOpenMarketplace | Open section |
My Librariesmy-libraries | Libraries | Stable | handleOpenLibraryManager | Open section |
Product Wizardproduct-wizard | Libraries | Experimental | handleOpenProductWizard | Open section |
Add Campaignadd-campaign | Modeling | Stable | handleAddCampaign | Open section |
Add Elementadd-element | Modeling | Stable | handleAddElement | Open section |
Add Sceneadd-scene | Modeling | Stable | handleAddScene | Open section |
Data Entry Matrixdata-entry | Modeling | Stable | handleOpenDataEntryMatrix | Open section |
Import DXFimport-dxf | Modeling | Stable | handleOpenSpatialModal | Open section |
IoT Sensorssensors | Modeling | Stable | handleOpenSensorsCenter | Open section |
Authenticationauthentication | Platform | Stable | handleOpenAuthModal | Open section |
Accountaccount | Settings | Stable | handleOpenAuthModal | Open section |
Customizecustomize | Settings | Stable | handleOpenCustomize | Open section |
Documentationdocs | Settings | Stable | handleOpenDocs | Open section |
Guided Toursguided-tours | Workflows | Stable | handleOpenGuidedTours | Open section |
Guided Workflowsguided-workflows | Workflows | Stable | handleOpenWorkflowPicker | Open section |
Issues 3Dissues-3d | Workflows | Stable | handleOpenIssuesPanel | Open section |
Pipelinespipelines | Workflows | Stable | handleOpenPipelineManager | Open section |
Storyboardstoryboard | Workflows | Stable | handleInitSequencer | Open section |
AI Assistant
The built-in AI assistant provides natural language interaction with the platform through a multi-provider LLM engine.
Capabilities
- 454 dynamic actions — Registry-based dispatch across 45 semantic categories (Model, Analytics, Visualization, Import/Export, Compliance, Infrastructure, and more).
- Natural language commands — "Add a monitoring well at coordinates 100, 50" or "Show me the benzene trend for Well-01".
- Data analysis — Ask questions about your model data and get AI-powered insights.
- Multi-provider support — Works with Cloud providers (OpenAI, Claude, Gemini), local models (Ollama, LM Studio), browser-based (Transformers.js, WebLLM).
- Agentic loop — Complex tasks are broken into a multi-step plan and executed autonomously with tool calling. Supports up to 10 chained actions per turn.
- 3-tier prompt system — System prompt (identity), registry injection (dynamic context), and user message (intent) for precise action resolution.
- MCP integration — External AI agents can interact via the Model Context Protocol server. See MCP Server.
Opening the AI Assistant
Click the AI Assistant floating widget button in the bottom-right corner of the screen.
LLM Dynamic Dispatch
The AI Assistant uses a registry-based dynamic dispatch system with 454 registered actions organized in 45 semantic categories. Instead of hardcoded function calls, actions are discovered and executed dynamically based on user intent.
3-Tier Prompt Architecture
| Tier | Role | Contents |
|---|---|---|
| System Prompt | Identity & rules | Platform identity, capabilities summary, response format rules, safety guardrails. |
| Registry Injection | Dynamic context | Current model state, available actions grouped by category, active element context. |
| User Message | Intent | Natural language request with optional element/parameter references. |
Semantic Categories
Model
Element CRUD, bulk operations, property edits
Analytics
Trends, predictions, statistical tests
Visualization
Camera, layers, labels, symbology
Import/Export
ECBT, JSON, XLSX, DXF, IFC, reports
Compliance
CONAMA, CETESB, domain validators
Infrastructure
Pipelines, workflows, remediation
Agentic Loop
For complex tasks, the AI decomposes the request into a multi-step plan, executes each action sequentially via tool_use calls, and reports results with a structured summary. The loop supports up to 10 chained actions per turn.
MCP Server
An ecbyts Model Context Protocol (MCP) server comes in two forms. The hosted server is read-only, runs over the cloud models of the API-key owner and works with any MCP client without installing anything. The local server runs on your own PC over stdio and talks to the api-server.js of the app open in your browser.
- 17 tools — Read the model state, elements and available actions, take a screenshot, add elements and observations, run app actions, plus read-only access to the local repository (files, search, git history).
- Stdio transport — Runs as a local process communicating via JSON-RPC over stdin/stdout. It talks to the local
api-server.js(defaulthttp://localhost:4000), which drives the ecbyts app open in your browser. - API key — Create a key in Cloud > API Keys and pass it in
ECBYTS_API_KEY. Model tools validate the key and count against themcp_callsquota of your plan. - Security — With a key created for an AI agent, tools that write data or run code are refused, and a person on the account has to run that action in ecbyts (two-party approval). Repository tools never read
.env*, keys or.git, and never leave the repository folder.
# Start the MCP server (from the repository root)
ECBYTS_API_KEY=ecb_live_... node scripts/ecbyts-mcp-server.mjs
# Configure in Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"ecbyts": {
"command": "node",
"args": ["scripts/ecbyts-mcp-server.mjs"],
"env": { "ECBYTS_API_KEY": "ecb_live_..." }
}
}
}
IDE Integration
Add the MCP server to your IDE's AI configuration to let AI assistants query and modify ecbyts models directly from your development environment.
Reports
Generate professional reports from your environmental model data.
- PDF Export — Create formatted reports with charts, tables, maps, and compliance summaries.
- DOCX Export — Generate editable Word documents for further customization.
- Report Editor — Customize report sections, add narrative text, and select which data to include. Supports filter presets.
- Drawing Plate — Export technical drawings with title blocks and scales.
- Multi-Report Manager — Maintain multiple report templates with tree-view navigation.
- Access via File > Drawing Plate or through the report panel.
Governance
Project management tools for environmental remediation contracts.
- Contracts — Track environmental service contracts with scope, dates, and milestones.
- WBS (Work Breakdown Structure) — Organize remediation activities hierarchically.
- EVA (Earned Value Analysis) — Track project performance: planned vs. actual cost and schedule.
- Project Registry — Central directory of projects with metadata and status.
Timekeeper
Cross-project time tracking panel embedded in the Constellation HUD. Log hours against projects, phases, and resources without leaving the modeling environment.
| Section | Description |
|---|---|
| Summary | Weekly, monthly, and lifetime hour totals across all projects. |
| Live Timer | Clock-in / clock-out with project, phase, and resource selectors. Elapsed time shown in real time. |
| Quick Entry | Fast hour entry for retroactive time logging. |
| Cross-Project Table | Full timesheet view with filters by project, resource, and date range. |
Opening Timekeeper
Expand the Constellation HUD (bottom panel) and select the Timekeeper tab. Active timer state persists across page reloads.
IoT Sensors
Connect real-time environmental sensors to your digital twin for continuous monitoring.
- Link sensors to elements for automatic observation updates.
- Configure polling intervals and alert thresholds.
- Sensor data feeds into the same analytics pipeline as manual observations.
Guided Tours
Interactive step-by-step tutorials that guide you through platform features.
- Task-oriented picker — Filter by your role and the job you want to learn; each card identifies its expected artifact and safe execution mode.
- Environmental-agency practices — Triage, chain of custody, inspection, licensing, technical opinion, independent review, and audit-package tours use synthetic data and stop before administrative mutation.
- Communicate tour —
agency-communicate-sharingteaches people/relationships, minimum dataset slices, purpose, classification, online access versus portable ECBT keys, review, recovery, and redacted receipts. - Honest completion — A visible first step is not completion; required artifacts, evidence checks, all stages, error recovery, and cleanup must pass.
- Access via More > Guided Tours or the Tour Picker.
Safe practice boundary
The Communicate practice is synthetic/read-only. It does not invite a real person, grant access, export a real key, sign, publish, or submit an administrative decision.
▶ Subcontractor Data Guide
This guide follows the route a subcontracted operator actually walks in the product, from receiving an assignment to handing a batch over. Each stage names the live screen, the guided tour that teaches it, and the limit you have to work around today. Where a screen does not exist, the guide says so instead of describing an intention.
What this guide does not claim
A guided tour teaches a screen; it never grants access, submits a decision or closes an engagement. A finished tour, a green panel or a saved file are not evidence that the work was accepted. Fields named in a tour exist only if the screen shows them, and this guide states the missing ones explicitly.
The route has ten stages. The last one has no screen in the product today, and that is stated in full rather than left out.
- Receive the assignment and the access
- Inventory the documents
- Digitize and check
- Import the EDD
- Bring in GIS and CAD data
- Enter readings by hand
- Validate and correct
- Change and remove records
- Hand over for review
- Close the engagement
Before you save or send anything, read the destination matrix under Import / Export: it lists every authorized destination, what each one is for, and what you must check after writing. This guide points back to that matrix instead of repeating it.
1. Receive the assignment and the access
- Where — Export > Resource Shares opens the live sharing panel. It lists the shares that already exist and the fields of a new one: resource, grantee, purpose, scope, classification and expiry date, with a preview before granting.
- What you do — Read the share aimed at you before opening any data: which resource, for what declared purpose, under which classification, and until when. Work only inside that scope.
- Guided tour —
share-access-assignmentwalks the real panel and stops before submitting. It also shows the denial path on purpose, because the denial is part of the task. - Limit today — The panel only mirrors your role: when your role cannot share, the grant button is disabled and a gate message appears. The decision that actually counts is enforced by the server, not by the button state. The revoke button in the list is disabled the same way.
- Limit today — The Communicate practice tour
agency-communicate-sharingruns on a synthetic training panel with simulated values. It is a rehearsal, not the live share. - See also Ownership and Access and Organization Management.
2. Inventory the documents
- Where — Data > Project Files opens the Files tab. The table lists name, extension, size, source, tags and last update, with Preview, Download, Re-import, Tag and Delete on each row. Filters cover extension, source and scope, plus a tag box and a sort order.
- What you do — Register everything you received before transcribing anything. Drag a file onto the drop zone to register it without ingesting it, then tag it so the batch can be found later.
- Guided tour —
document-inventory. - Limit today — The stored record keeps filename, MIME type, extension, size, storage path, SHA-256 checksum, tags, source, status, scope and dates. It has no document version, no rights or licence field, and no page or sheet count. Keep the version and the usage rights outside the panel — in the file name and in your own transmittal — because the product will not keep them for you.
- Limit today — Since there is no version field, the checksum is what identifies a revision. Two files with the same name and different checksums are different documents; treat them as such.
- See also Files Module.
3. Digitize and check
- Where — Data > Import Data handles PDF and DOCX reports in a split view: source document on the left, extracted data on the right with source-grounding highlights. Field photographs go through Data > Photo Log, which reads EXIF GPS and places the photo as a marker in the scene.
- What you do — Check the extraction against the page before confirming: compare the extracted table with its source, follow the page divider, read the confidence indicators, and look at what the review marked as excluded rather than only at what it accepted.
- Guided tour —
document-import-pdf, extended to cover the two checking aids the review screen already has. - Limit today — The individual review controls have no stable anchors, so the tour stops at the review container instead of pointing at a control that could move. Extraction can miss context: the source document, not the extracted table, remains the evidence.
- See also Document Assessment and PhotoLog.
4. Import the EDD
- Where — Data > Import Data runs the ingestion wizard for XLSX and CSV: choose the file, map columns to elements, parameters and campaign dates, answer the domain decisions, then review and confirm.
- What you do — Confirming does not write into your model directly. The wizard builds a candidate model and opens the comparison screen with your current model on one side and the imported data on the other, so the decision is explicit.
- Guided tours —
spreadsheet-import-wizard,edd-import-export-completeanddata-loading-from-scratch. The tour cards offer synthetic training examples for download, including a tabular EDD workbook. - Limit today — A tabular CSV or a training workbook is a subset, not a complete laboratory EDD profile. Do not read a successful training import as proof that a full profile will map.
- Limit today — A mapping plan is only executed after it is explicitly approved; an unapproved plan is rejected rather than applied quietly.
- Limit today — The wizard blocks its final button only in one case: when you asked it to clear the current model and to export a backup first, and that backup has not been downloaded yet. In every other configuration nothing forces you to hold a copy, so take one yourself.
Bulk acceptance: what Accept All Imported does, and what still deletes
On the comparison screen the button labelled Accept All Imported takes the file's side only where the file says something: values that differ, and records the file adds. A record that exists in your model and is simply absent from the imported file is not treated as a request to delete it; without a decision on that record the merge keeps it, so a file that carries a subset of the batch no longer erases the rest. Deletion is still possible, but only card by card, by choosing the imported side on the card of a record the file does not carry. That card asks for no confirmation, so read each one before you choose.
Keep All Current is the mirror image: it keeps every record your model already has and discards every record the file adds, so an import that only brings new records leaves your model as it was. Neither button is an undo. Whichever you choose, export a copy to an authorized destination before applying the merge, and reopen that copy afterwards to confirm what survived.
5. Bring in GIS and CAD data
- Where — Data > DXF imports CAD site plans as blueprint elements, parsing layers, polylines, circles, text and blocks. Data > Georeference and the Map Picker set the site position and the coordinate system.
- What you do — Declare the coordinate system before processing. The wizard accepts explicit local coordinates, so a purely local exercise does not need a geographic system invented for it. Projected coordinates are converted with the platform projector, and the original values and system are kept alongside the converted pair.
- Guided tours —
import-dxf-blueprintandmap-picker-geolocation. The training boundary example is a closed rectangle of 10 by 5 metres on a training layer, 50 m², in local coordinates. - Limit today — Never let an unknown coordinate pass as a known datum. If the source does not declare its system, the import must fail rather than guess one.
- Limit today — Geographic metadata stored on an element is not automatically refreshed when you move that element in the scene. After moving anything, check the exported coordinates instead of trusting the stored pair.
- See also Spatial Blueprint (DXF), Map Picker and Aerial Georeferencing.
6. Enter readings by hand
- Where — Data > Data Entry Matrix, also reachable from the Data Entry tab of the bottom panel. Elements are the rows, parameters are the columns, units default per column, and values are checked against the compliance thresholds as you type.
- What you do — Use it for a batch of readings instead of opening one modal per observation. Enter the campaign date with the reading; a reading without a date is incomplete, not current.
- Guided tours —
batch-data-entry,add-observationandadd-planned-readings. - Limit today — An empty analytical value stays empty; it is not turned into a zero, and a measured zero is preserved as a measurement. A missing date is not replaced by today's date. Do not fill either one to make a row look complete.
- Limit today — A red cell means the value crossed a configured threshold. It does not mean the value is wrong, and a cell that is not red has not been proven right.
- See also Data Entry Matrix and Observations.
7. Validate and correct
- Where — Compliance Validation carries the built-in regulatory thresholds; the Domain Validator loads profiles in JSON; Data Audit looks for anomalous distributions.
- What you do — Run the batch validation, export the result as CSV, correct at the source, and run it again.
- Guided tours —
data-qualityandregulatory-compliance. - Limit today — The position reported in an error is the one-based row of the validated batch, not necessarily the row of your original spreadsheet. Source file, sheet and row appear as separate columns only when the import supplied them, and stay blank when it did not.
- Limit today — An unknown rule type stops the run with an explicit error instead of being accepted silently; fix the profile before running again. A failed run invalidates the previous report, so never hand over a report from an earlier attempt.
- Limit today — Validation checks rules, not truth, and the audit tools flag suspicion, not proof. A clean report is not an attestation that the data is correct.
- See also Compliance Validation, Validation Profiles, DAMA Data Quality and Data Audit.
8. Change and remove records
- Where — Edit elements and observations from their own panels; use the history and recovery actions to inspect and undo recent changes; use the comparison screen to review a whole set of differences before applying it.
- What you do — Describe the change before making it: which records, which campaign, and why. Removal is a data decision, not a cleanup gesture.
- Guided tours —
edit-delete-observationandedit-element-properties. - Limit today — Recovery is only as good as the last persisted state, and the local resume copy lives in this browser on this device: clearing browsing data can remove it. A portable copy in an authorized destination is the only recovery you control.
- Limit today — The bulk-acceptance rules described in the note above apply here too, because the same comparison screen is used to apply a reviewed set of changes: a bulk button never deletes, and a per-card choice of the imported side deletes without asking.
- See also History, Undo and Recovery and Model Merge and Diff.
9. Hand over for review
- Where — Reports produce the PDF, DOCX and drawing-plate outputs; Issues 3D anchors a non-conformity to a point in the scene so the reviewer sees where it is; Resource Shares gives the reviewer scoped access to the data itself.
- What you do — Deliver two things that agree with each other: the data saved to an authorized destination, and the report bound to that same version. Reopen the saved copy before you declare the delivery done.
- Limit today — A report presents results; it does not replace editable data, and it is not a backup. Sharing follows permissions and does not necessarily create an independent copy for the reviewer.
- Limit today — There is no delivery receipt in the product. Nothing marks a batch as submitted for review, so record the handover, its date and the checksum of what you sent outside the product.
- See also Reports, Issues 3D, Governance and the destination matrix.
10. Close the engagement
There is no closure screen
The product has no screen that closes a subcontracted engagement. Nothing marks a batch as finished, nothing issues a completion receipt, and no panel changes state when the work ends. A finished tour, an applied import or a generated report are none of them a closure.
- What exists instead — A share carries an expiry date and can be revoked from the sharing panel by whoever holds that permission. Let the access lapse or ask for it to be revoked, and confirm in the list that it is gone.
- What exists instead — The Files tab keeps the checksum of every registered file. Record the checksum of each delivered file: it is the only identity the product stores for a document.
- What you do — Export a portable copy to an authorized destination, reopen it to confirm it loads, and register the closure outside the product: what was delivered, when, to whom, and against which checksums.
- Limit today — Because closure is recorded outside the product, two people can disagree about whether a batch is finished and nothing in the model settles it. Agree on the closure record before the access expires, not after.
Map Picker
Interactive georeferencing tool for setting your site's real-world location.
- Click on a map to set the UTM origin for your environmental model.
- Automatic UTM zone and CRS detection (including SIRGAS 2000 for Brazilian sites).
- Aerial imagery overlay for spatial context.
- Available as an init mode from the Welcome Screen or via View > Map Picker.
Multi-Model Tabs
Work with multiple environmental models simultaneously — each tab is an isolated namespace for elements, campaigns, scenes, and analytics.
- Independent state — Elements, observations, and interpolations in one tab don't leak into another.
- Cross-tab lock via BroadcastChannel — Prevents concurrent edits of the same model across browser tabs.
- Per-tab autosave — Each tab persists to a dedicated IndexedDB lane.
- ECBT round-trip preserves tab identity — Export and re-import keeps the tab's logical model separate.
Uncertainty (UNC-001 — GUM Tier 1)
First-order uncertainty propagation for environmental measurements following ISO GUM (Guide to the Expression of Uncertainty in Measurement).
- Propagation — Sum / product / linear formulas with covariance-aware combined standard uncertainty.
- Quality badge — Matrix-agnostic classifier (soil / water / air) decorates every observation with a data-quality indicator.
- ECBT v3 envelope — Uncertainty metadata travels inside exported keys (opt-in via flag).
- Visible in the Uncertainty Hub panel (ribbon > View) and inline in Data Entry Matrix.
Taxonomy / Data Dictionary
Regulatory taxonomy layer that adds auxiliary, standard-aligned fields to elements (EPA WQX, ABNT NBR, CETESB DD-256, CONAMA 420).
- Field resolver — Resolves a field by
{taxonomy, key, locale}and returns label, unit, valid-range, citation. - Picker modal — Pick fields from regulatory standards without leaving the form.
- Domain-aware validation — Combines with Validation Profiles for end-to-end compliance checks.
Historical Map Upload & Georeferencing
Upload raster maps (PNG/JPEG) and georeference them with 4+ control points using least-squares affine transform. Includes an OCR pipeline for elevation extraction from topographic maps.
- 4-point GCP workflow — Click to add control points; enter pixel (X, Y) and UTM (Easting, Northing) for each.
- RMS gate 5 m — Validates georef quality per CETESB mapping guidelines before accepting.
- TFW world-file export — ESRI-compliant sidecar for GIS interoperability.
- Contour extraction — Marching-squares + edge chains turn isolines into
generic:isolineelements in the 3D scene. - OCR elevation pipeline —
elevationClassifierreads numeric labels from scanned topographic maps (BR and US formats),contourLabelermatches labels to contour polylines,contourGeoreferencerassigns Z values, simplifies polylines, and exports georeferenced isolines as GeoJSON. - GeoJSON export — Georeferenced contours exported as
FeatureCollectionfor GIS interoperability. - Ribbon > Data > Historical Map Upload.
PhotoLog
Field photo registry with EXIF GPS extraction, AI vision analysis, and 3D scene markers.
- Capture sources — Camera, upload, clipboard paste.
- Offline-first — IDB stores photos locally; Supabase sync when online.
- EXIF GPS — Auto-positions photos as 3D markers in the scene at their capture location.
- AI vision analysis — Describes the photo, detects families (buildings, vehicles, vegetation), flags anomalies.
- Access via Data > PhotoLog or the PhotoLog button in Files.
Technical Diagrams (ISA S5.1)
Canvas-based technical diagram editor with process-industry symbology (ISA S5.1 / P&ID / FSM / DFD).
- Drag-and-drop symbol palette (tanks, valves, pumps, instruments, transmitters).
- Connections with automatic orthogonal routing.
- Pan, zoom, grid snap.
- Export PNG or SVG for reports and proposals.
Impact Estimator
Environmental impact estimator with financial formulas (passivo / ativo) traced to CONAMA, CNJ, and INSS benchmarks. Integrates with UNC-001 Monte Carlo for probabilistic risk quantification.
- Scenario comparison — Run baseline vs. intervention and quantify net benefit via
compareScenarios. - Family aggregation — Roll up impact across wells, plumes, tanks, etc. using
aggregateByFamily. - Traced benchmarks — Every number carries a citation (regulation or jurisprudence).
- Uncertainty integration — Wires into UNC-001 Monte Carlo (soil/groundwater/occupational matrices) to produce IC95 confidence intervals,
probExceedance, and risk class (green <5% / yellow <20% / red ≥20%). - Results rendered as HUD card with risk class indicator. Integrates with the EIS score and Environmental Valuation.
Environmental Valuation (ENV-VAL-001)
Project valuation engine for environmental investments using VPL (NPV), CRF (capital recovery factor), VPLA (equivalent annual value), and MAC curve.
- VPL / NPV — Discounted cash-flow of remediation costs vs. avoided passivo.
- CRF — Annualized capital charge for equipment + infrastructure.
- VPLA — Equivalent annual value for comparing projects of different lifespans.
- MAC curve — Marginal abatement cost curve for multiple interventions.
- Visible as a HUD card (
env-valuation-hud-mount) and in project reports.
Cost Analysis (CAPEX + OPEX)
Cost roll-up across the PDPL-U hierarchy (site → area → zone → element) with dashboard visualization.
- Four-level roll-up — L1 site, L2 area, L3 zone, L4 element.
- CAPEX vs. OPEX split — Separate capital and operational aggregates.
- Cost Centers — Assign elements to cost centers for accounting and EVA (Earned Value Analysis).
- PDF export — Ready-to-sign proposals with cost charts.
What-If Scenario Comparator
Answers the question what changes if I alter part of my process? without rebuilding the model. The comparator copies your model into an alternative scenario, applies the change to the copy, and shows base | alternative | Δ side by side for CAPEX, OPEX, ECBT Score and the UN Sustainable Development Goals. Your original model is never modified.
- Where — Open the More menu, choose ECBT Score (Area Verdict), then the Scenarios button.
- Main action — Choose the process subtype and move the throughput, recovery and yield controls inside the range curated for that subtype; every range carries its published source. Undo reverts the last change, and the session history stays in your browser — it is never stored on the server.
- Limit — Changing a rate moves the physical balance, not CAPEX, OPEX or ECBT Score: those follow the cost lines of the element, and a rate is not a cost line. The comparator supports a decision; it does not replace professional validation or regulatory review.
A banner always states whether the figures come from your real model or from labelled example data, which you have to accept explicitly before any demonstration number appears. The same provenance travels on every row of the CSV and Excel exports, so a spreadsheet detached from its context can never pass example figures off as measurements. Four export shapes are available: CSV, JSON, Excel and Markdown.
Missing information reads as no data, never as zero, and the panel separates two reasons: your model lacks the figure, or the conversion factor is still waiting for a published source — in which case the panel names the source it needs and leaves the column deliberately empty. When a measured physical flow changes but no published factor can convert it into an impact, the flow change is reported on its own channel instead of disappearing behind a no-data label.
Purpose Module
Track the real-world EIS impact of every modeled action and collect micro-feedback from stakeholders.
- Purpose snapshots — Capture EIS score over time and correlate with interventions.
- Micro-feedback toast — Lightweight thumbs-up / thumbs-down on outputs (reports, AI suggestions) for RLHF signal (F4.6).
- Community impact — Roll up individual snapshots into aggregate environmental outcomes.
Automation Bot Manager
Event-driven automation engine that reacts to file uploads, AI photo tags, map interpolation completion, and other triggers.
- Triggers — File upload, campaign import, AI photo classification, interpolation refresh, schedule.
- Actions — Run validation profile, create element, notify stakeholder, export report, enqueue pipeline.
- Chainable — Multi-step workflows with conditional branching (BPMN integration).
- Access via Tools > Automation in the ribbon.
Model Radar (Broadcasting)
Broadcast your model's state to stakeholders via time-limited share_code URLs — no account required for viewers.
- Broadcast profiles — Define what to share (layers, cameras, analytics) and for how long.
- Heartbeat — Viewers see live updates when the model changes.
- Public broadcast page —
broadcast.html?code=<share_code>served read-only. - Roles — Optional downgrade to observer-only mode for regulators and auditors.
Sample Files (Public Catalog)
Read-only catalog of reference files hosted on Supabase Storage — aerial images, templates, demos — available to every user without authentication.
- Aerial reference — Default aerial photo for overlay fallback, AI recognition, or raster upload demos.
- Use in dropdown — Select a consumer action (aerial overlay, raster upload, AI recognition, automation input) and the sample is auto-piped into the right modal / handler.
- No login required — Samples are public CDN URLs; workable offline in combination with Service Worker cache.
- Appears in the Files panel alongside your private files, tagged
sample.
DataStudio (SQL over your model)
Run client-side SQL queries against your environmental model — elements, campaigns, observations, edges, layers — without round-tripping to a server.
- Schema panel — Browse all queryable tables with column types.
- Query editor — Syntax-highlighted SQL editor with autocomplete for tables and columns.
- Results grid — Tabular results with sorting, filtering, and CSV export.
- History — All runs persisted locally; re-run or bookmark queries.
- Shell is modular: Collection, Processing, Analytics, and Communicate compose the interface.
- Manage people — Record the institutional relationship separately from administrative permissions.
- Share datasets — Select a minimum dataset slice, recipient, purpose, classification, permission, and expiration, then review before confirming.
Online access is not a portable copy
Revoking an online grant blocks future server reads, but it cannot recover an ECBT key already downloaded. Portable export therefore requires an explicit scope, a filtered snapshot, a verifiable manifest, and an unambiguous recipient key.
UI Customization
Personalize the interface: fonts, color palettes, density, home-screen card layout, and default panels.
- Fonts — Choose from curated typefaces optimized for technical readability.
- Palette — Dark, light, or custom palettes with tokens applied globally via CSS variables.
- Density — Compact / comfortable / spacious spacing.
- Home cards — Reorder and toggle the home-screen cards relevant to your workflow.
- Settings persist in
localStorage.ecbyts-customize.
Error Reporting & Bug Reports
Capture runtime errors and user-submitted bug reports with automatic screenshot, stack trace deduplication, and Supabase ingest.
- Global error boundary —
window.onerrorandonunhandledrejectionlog to a buffer, flushed in batches. - Bug report modal — User describes the issue; screenshot captured automatically via DOM snapshot.
- Dedup & classifier — Collapses identical stack traces; classifies as bug / feature request / question.
- Admin inbox — Reports visible in the admin module with triage workflow.
- LGPD-aware: PII is redacted from DOM screenshots before upload.
Libraries Marketplace (v2)
Install and monetize curated libraries of environmental data, ML models, pipelines, and AI services — all under AGPL-3.0-compatible licenses.
- Marketplace — Browse public libraries with reviews, ratings, and preview before install.
- Installed libraries — Manage versions, permissions, and update notifications.
- Import file — Side-load a
.ecoliblibrary package into your workspace. - AI Service listings — Automated API execution billed per output token in $ECBT.
- Consultoria Diretoria — Human-hours bookable at R$ 500/HH (4 h/week, 4 h minimum per contract).
- Access via the Libraries galeria in the ribbon.
License Compatibility
Every marketplace library is evaluated for AGPL-3.0 compatibility before listing. MIT / BSD / Apache / GPL-2.0 / MPL-2.0 are accepted; SSPL / PolyForm / proprietary are blocked.
Inspector
Review the selected element, its observations, relationships, campaigns, hierarchy, costs, and operational metadata in one side panel.
- Where — Open from the Actions workspace, element cards, context menus, or the selected element panel.
- Main action — Select an element, inspect linked records, then jump back to the model or related data.
- Limit — Inspector content depends on the active model and selected element; empty selections should not imply missing data.
Simulation Lab
Run local environmental simulation routines with explicit parameters, consent, and browser-side execution boundaries.
- Where — Open from simulation actions, modal launchers, or supported workflow steps.
- Main action — Choose a model, review parameters, accept execution responsibility, and run the simulation.
- Limit — Prototype solvers are educational and must be validated by qualified professionals before engineering use.
AI Agents
Use specialized assistants for general questions, regulatory analysis, campaigns, and occupational/environmental workflows.
- Where — Open from assistant controls, agent menus, command palette actions, or AI panels.
- Main action — Pick the agent scope, review the proposed action, and confirm before write operations.
- Limit — Agent output is AI-generated guidance and does not replace professional validation or regulatory review.
Document Assessment
Assess uploaded environmental documents for structure, evidence, decisions, coordinates, labels, and extractable observations.
- Where — Use from ingestion, file preview, assessment actions, or document track panels.
- Main action — Load a document, run assessment, review extracted findings, and accept or reject decisions.
- Limit — OCR and AI extraction can miss context; keep the source document as the evidence anchor.
Chemistry Registry
Search, normalize, and validate chemical parameter metadata such as names, aliases, and CAS references.
- Where — Open from chemistry actions, parameter editors, or validation workflows.
- Main action — Match a parameter, review aliases and identifiers, then reuse the normalized name in observations.
- Limit — Registry matches support data quality; legal limit interpretation still depends on the selected framework.
Field Metadata
Attach provenance, confidence, source, and validation notes to fields that affect model quality and auditability.
- Where — Field metadata appears near editable fields, popovers, and selected data cells.
- Main action — Open the metadata popover, review source information, and add traceability notes when needed.
- Limit — Metadata improves audit trails only when users keep source and decision notes current.
Model Merge and Diff
Compare two model states, inspect changes, and merge accepted differences with explicit review.
- Where — Open from merge actions, import flows, or collaboration review tasks.
- Main action — Load base and incoming models, inspect changed entities, then accept or reject each group.
- Limit — Never merge regulatory evidence blindly; review geometry, timestamps, and source ownership first.
Notifications
Review operational alerts, system messages, marketplace updates, and priority events generated by the workspace.
- Where — Use notification panels, badges, top-bar indicators, and contextual alerts.
- Main action — Open the alert, inspect priority and source, then navigate to the affected object or workflow.
- Limit — Some notifications depend on Supabase access and may be unavailable offline.
Notification Rules
Configure thresholds and rule-driven alerts for data quality, compliance, sensors, marketplace events, and operational changes.
- Where — Open from notification settings, governance controls, or advanced configuration actions.
- Main action — Define the trigger, scope, severity, and destination before enabling the rule.
- Limit — Rules should be tested with known data before they are used for operational escalation.
Wallet and Credits
Manage credits, payments, premium access, marketplace transactions, and blockchain-linked account actions.
- Where — Open from wallet actions, account controls, credits badges, marketplace flows, or premium gates.
- Main action — Review balance, transaction context, and any signing or payment requirement before proceeding.
- Limit — Blockchain and payment actions must be verified against the active environment before use.
History, Undo and Recovery
Inspect recent changes, undo safe operations, and recover workspace state after editing, import, or autosave events.
- Where — Use the ribbon history actions, model status indicators, and recovery prompts.
- Main action — Review the change description, confirm the affected objects, and apply undo or recovery.
- Limit — Destructive operations require explicit confirmation; recovery is only as good as the latest persisted state.
Imagery Layers
Add, inspect, and manage raster imagery used as aerial context, georeference support, or visual evidence in the model.
- Where — Open from imagery actions, raster upload, aerial tools, or scene layer controls.
- Main action — Add an image, align it to the model, adjust visibility, and document its source.
- Limit — Cross-origin imagery can taint canvas analysis; keep source metadata for auditability.
Organization Management
Manage organization-level workspace context, members, scopes, and model ownership boundaries.
- Where — Open from organization actions, account menus, workspace loader, or admin-linked flows.
- Main action — Select the organization context, review membership, and switch model scope deliberately.
- Limit — Organization operations may require hosted services and permissions outside a local-only workspace.
Ownership and Access
Review who owns a model, who can edit it, and which actions require role checks or explicit transfer.
- Where — Open from ownership actions, model settings, sharing flows, and role-guarded panels.
- Main action — Confirm owner, role, and target scope before changing access or transferring responsibility.
- Limit — Access decisions affect auditability and legal defensibility; avoid ambiguous ownership states.
Presets
Apply saved configurations for model views, workflows, validation profiles, visuals, and operational defaults.
- Where — Open from preset actions, scene controls, validation setup, or workflow launchers.
- Main action — Choose a preset, preview the affected settings, and apply only to the intended scope.
- Limit — Presets accelerate setup but should not override site-specific technical judgment.
Health Export
Export occupational health, exposure, or monitoring data in a structured package suitable for review and integration.
- Where — Open from health export actions, occupational modules, or compliance workflows.
- Main action — Select scope, anonymization mode, period, and output format before exporting.
- Limit — Health data can be sensitive; validate LGPD/privacy requirements before sharing files.
Accessibility
Use accessibility helpers for labels, keyboard flow, modal behavior, and form readability across the interface.
- Where — Accessibility behavior appears in forms, modals, custom controls, and validation feedback.
- Main action — Navigate with keyboard, verify labels, and keep focus movement predictable.
- Limit — Automated checks do not replace manual testing with real assistive technologies.
Background Analysis
Compare observations against background conditions to support environmental interpretation and anomaly review.
- Where — Open from analytics, hypothesis testing, or parameter review flows.
- Main action — Select reference data, compare current readings, and review flagged deviations.
- Limit — Background definitions are technical assumptions and must be justified for each site.
Decision Rules
Define deterministic rules that classify data quality, compliance, recommendations, or next actions from model evidence.
- Where — Open from governance, validation, uncertainty, or advanced rule configuration panels.
- Main action — Choose inputs, thresholds, rule priority, and expected outcome before enabling the rule.
- Limit — Rules must remain explainable and traceable; avoid hidden logic for regulatory decisions.
DAMA Data Quality
Evaluate data quality dimensions using DAMA-inspired criteria and link issues back to source fields and records.
- Where — Open from data quality, validation, ingestion, or EIS-adjacent workflows.
- Main action — Run checks, inspect failed dimensions, and resolve source data issues before export.
- Limit — Quality scoring indicates risk; it does not certify technical correctness by itself.
ECBT Validator
Validate model packages, exported data, and imported structures against ECBT expectations before use or sharing.
- Where — Open from import/export, validation, or advanced model integrity actions.
- Main action — Select a model or package, run validation, then fix blocking errors before continuing.
- Limit — Passing schema validation does not guarantee that domain assumptions are correct.
Ledger Summary
Summarize integrity records, hashes, signatures, and audit-relevant events linked to the active model.
- Where — Open from blockchain, audit, governance, or model integrity workflows.
- Main action — Review recorded events, compare hashes, and export supporting evidence when needed.
- Limit — Ledger summaries prove recorded state, not the technical truth of unverified source data.
Parameter Groups
Organize parameters into operational groups for filters, reports, analytics, and regulatory interpretation.
- Where — Open from parameter configuration, SAO matrices, analytics, or report setup.
- Main action — Create or select a group, assign parameters, and reuse the group in analysis flows.
- Limit — Grouping changes how data is interpreted; keep names and inclusion criteria explicit.
SAO Heatmap
Visualize source-activity-object relationships as heatmaps to identify concentration, exposure, or management priorities.
- Where — Open from SAO tools, analytics, or environmental matrix review flows.
- Main action — Select matrix, parameter, scope, and campaign range, then inspect hotspots.
- Limit — Heatmaps are prioritization aids; review raw observations before making decisions.
SDG Alignment
Map environmental and occupational evidence to Sustainable Development Goal indicators and confidence levels.
- Where — Open from EIS, governance, ESG, or impact reporting workflows.
- Main action — Review mapped SDGs, inspect confidence, and document why each alignment applies.
- Limit — SDG alignment is a reporting interpretation and should be backed by auditable evidence.
Spatial Clustering
Cluster spatial observations or document-extracted locations to identify groups, duplicates, and likely site patterns.
- Where — Open from ingestion, spatial tools, document assessment, or analytics flows.
- Main action — Choose spatial inputs, run clustering, and review grouped records before accepting them.
- Limit — Clusters are sensitive to distance thresholds, projection, and coordinate quality.
Optimization
Explore candidate decisions, resource allocation, or scenario improvements when a workflow exposes optimization controls.
- Where — Open from optimization actions, scenario workflows, or cost and remediation decision panels.
- Main action — Define objective, constraints, candidate options, and review recommended trade-offs.
- Limit — Optimization output is decision support; constraints and assumptions must be reviewed before adoption.
How to Contribute
ecbyts is an open-source project distributed under AGPL-3.0-only. For the authoritative legal terms, refer to the repository LICENSE file. Contributions are welcome from diverse backgrounds — you do not need to be a software developer to help. Below are five contributor profiles with guidance tailored to each.
▶ Developer
Software Engineers & Programmers
Fork or clone the repository from GitHub and submit Pull Requests. The codebase uses vanilla JS (ES modules) with no build step and no frameworks.
- Read the
ADR.mdin eachcore/module before modifying — it documents architectural decisions and trade-offs. - Follow the coding conventions: max ~30 lines per function, descriptive names, JSDoc with bilingual comments (English headers, Portuguese explanations).
- No emojis in UI code — use SVG icons or HTML entities.
- Register all
window.*handlers inutils/handlers/index.js.
▶ Dev Prompt Toolkit
23 Ready-to-Use Prompts for the Full Dev Lifecycle
A curated set of AI-assisted development prompts organized into 6 lifecycle phases. Copy any prompt, paste into your AI assistant, and adapt to your task.
| Phase | Prompts | Purpose |
|---|---|---|
| Plan | 3 | Architecture review, spec creation, dependency audit |
| Build | 4 | Module scaffolding, UI implementation, API integration, migration |
| Validate | 3 | Test generation, E2E journeys, accessibility audit |
| Maintain | 3 | Bug triage, performance profiling, i18n coverage |
| Meta | 3 | Documentation generation, changelog drafting, release checklist |
| Security | 3 | CSP audit, API key rotation, LGPD compliance scan |
All prompts follow the project conventions: vanilla JS (ES modules), no build step, bilingual comments (EN headers / PT explanations), and max ~30 lines per function. See docs/DEV_PROMPT_TOOLKIT.md for the full catalog.
▶ Vibe Coder
AI-Assisted Contributors
No traditional programming background? No problem. Use AI tools (GitHub Copilot, Claude, ChatGPT) to contribute effectively.
- Start with GitHub Issues tagged Good First Issue — these are scoped for newcomers.
- Use the built-in AI Assistant (AI Assistant (floating widget)) to explore and understand the codebase.
- Only vanilla JS knowledge is needed — no React, no Angular, no frameworks.
- The
CLAUDE.mdfile at the project root is your guide — it explains the full architecture and patterns.
▶ Regulatory Body
CONAMA, CETESB, IBAMA & Other Agencies
Environmental regulatory agencies can contribute normative data that improves compliance validation for all users.
- Provide threshold values (VR, VP, VI) and reference standards for soil and groundwater quality.
- Share compliance rules and regulatory schemas in JSON format for automated validation via the Domain Validator Engine.
- Review and validate the environmental glossary and regulatory references in the platform.
- Contact us via GitHub Issues with the label documentation.
▶ End User
Environmental Engineers & Consultants
Your domain expertise is more valuable than code. Help us build the right tool for real-world environmental work.
- File bug reports via GitHub Issues with detailed descriptions and screenshots.
- Suggest features based on your field experience — what workflows are missing? What data formats do you use?
- Share anonymized real-world use cases that help us test with realistic data.
- Domain expertise is valued over code — you know what environmental professionals actually need.
▶ Financial Sponsor
Support Independent Development
ecbyts is distributed under AGPL-3.0-only and developed independently. Financial sponsorship accelerates development and helps sustain long-term maintenance. As with the rest of the documentation, the repository LICENSE file is the authoritative source for legal terms.
- Sponsors receive recognition in the project credits and documentation.
- Sponsorship funds go directly to development — no corporate overhead.
- Contact us via GitHub Sponsors or open an issue for partnership inquiries.
Admin Module
Comprehensive administration panel for platform operators covering 14 management areas. Access is restricted to users with the admin role in Supabase.
Management Areas
Users
User management, roles, quotas, and activity logs
Subscriptions
Plan management, billing, Stripe & MercadoPago integration
Projects
Global project registry, storage metrics, ownership transfers
Libraries
Marketplace content, reviews, publishing approvals
AI & LLM
Provider config, token usage, fine-tuning jobs, prompt templates
Infrastructure
Edge Functions, storage buckets, database health, CDN cache
- Audit Trail — Every admin action is logged with timestamp, actor, and before/after state for LGPD compliance.
- Dashboard KPIs — Real-time metrics: active users, MRR, storage usage, AI call volume, error rates.
- Bulk Operations — Mass quota adjustment, user exports, subscription migrations.
- Feature Flags — Toggle experimental features per user or tier without redeployment.
Admin Access
The Admin Module is only available to users with the service_role or admin flag in Supabase. Regular users see no admin UI elements. All admin routes are protected by Row Level Security (RLS) policies.
Data Sovereignty & Transparency
ecbyts is built on the principle that environmental data is a public asset. The platform provides a framework for radical transparency and friction-less data sharing between regulators, stakeholders, and AI systems.
- Universal interoperability — JSON-based schemas and alphanumeric ECBT keys ensure data is never siloed. Transitioning between platforms is facilitated by open-format standards.
- Cryptographic integrity — Trust is mathematically enforced. Every record is secured via SHA-256 hashing and provenance chains, with optional blockchain notarization.
- Machine-centric design — Every data structure is strictly typed, enabling LLMs to perform complex reasoning, querying, and automated reporting without custom adapters.
- Regulatory alignment — First-class support for Brazilian (CONAMA, CETESB, IBAMA) and international standards ensures compliance is built into the data model.
ESG Economic Framework
ecbyts integrates a reporting-based incentive layer grounded in ESG conceptual models. This structure enables the tokenization of environmental performance and alignment with international H&S protocols.
- Performance-Indexed Assets — Proposed cryptocurrency framework where asset valuation is indexed to corporate socio-environmental metrics.
- Monetization Pathways — Data structures designed for market-based pricing, subscription models, and participant ecosystem integration.
- Post-IPCC Integration — Postulated integration of environmental digital twin assets with updated IPCC regulatory and reporting protocols.
Why ESG Matters Here
Environmental monitoring data has economic value. By structuring data for interoperability and cryptographic integrity from the start, ecbyts enables market-based incentives that reward transparency and compliance — not just measure it.
Security & Data Integrity
Multi-layered security architecture protecting environmental data integrity and user privacy. 4-phase hardening roadmap from CAPTCHA to fraud detection.
- Content Security Policy (CSP) — Restricted origins for scripts, images, and connections. No wildcard CORS.
- API server isolation — Bound to loopback only. CORS restricted to server origin.
- ECDSA P-256 key vault — Private keys wrapped with AES-GCM encryption (never stored as plaintext).
- LLM API key encryption — User API keys encrypted with per-user PBKDF2 salt.
- hCaptcha CAPTCHA — Bot protection on login, registration, and password reset forms. Invisible mode for authenticated users.
- MFA / TOTP — Optional multi-factor authentication via authenticator apps (Google Authenticator, Authy). TOTP with 6-digit codes and 30s rotation.
- LGPD Audit Trail — Full data processing log for Brazilian General Data Protection Law compliance. Records consent, data access, and deletion requests.
- Credential fraud detection — Behavioral analysis detecting suspicious login patterns, impossible travel, and credential stuffing attempts.
- EcoTools sandbox — External tools run in iframe without
allow-same-origin. - Atomic quota enforcement — Supabase RPC with row-level locking prevents race conditions.
- Security logging — Structured logs with automatic sensitive field stripping.
Authentication & SSO
Supabase-powered authentication with multiple sign-in methods.
- Social / OAuth sign-in — Google, GitHub, and Microsoft accounts through Supabase OAuth. These are consumer identity providers: convenient, but they are not corporate SSO and do not map a company directory onto organization roles.
- Email/password — Traditional registration with email verification.
- Login throttle — Rate-limited to 5 attempts per 10 minutes per IP. Exponential backoff with user-friendly countdown.
- MFA enrollment — Optional TOTP-based multi-factor authentication via the security settings panel.
- LGPD compliance — Consent management, data portability (JSON export of personal data), and right-to-deletion enforcement.
- Academic credential verification — Upload diplomas for EIS score credential multiplier (verified via Gemini Vision).
- Professional tier — Stripe checkout for premium features and higher usage quotas.
Corporate SSO (SAML / OIDC) — status: OIDC proven against the local test IdP; SAML not yet validated
Corporate sign-in over OIDC exists in the sign-in modal (Sign in with a corporate account, see ENV-03) and was exercised end-to-end against the local test identity provider chosen by the owner (Keycloak realm, synthetic identities): mapping, provisioning and revocation are measured by the runbook npm run env03:keycloak. The button is deliberately not labelled “SSO” until that receipt is accepted; SAML is not yet validated and stays deferred until a corporate customer requires it. Social OAuth providers are never presented as corporate SSO.
- Identity mapping — a stable external identity (
issuer|subject) is bound to one e-mail domain allow-list and one organization. Assertions from an untrusted issuer, an e-mail outside the issuer’s domains, or older than 5 minutes are rejected. - Roles — provisioning defaults to
guestormember;adminrequires an explicit IdP-group mapping;owneris never granted or removed by directory sync (human transfer only). - Provisioning — first sign-in creates the organization membership; a changed group mapping updates the role; unchanged identity is a no-op. All writes happen through the authorized backend trail, never from the browser.
- Revocation — an identity removed from the IdP has its non-owner memberships revoked and its sessions invalidated on the next sync.
- OIDC claims consumed —
iss,sub,emailandemail_verifiedare required; an unverified e-mail is rejected, because the e-mail domain is what selects the organization.iatis read in seconds (RFC 7519) and converted before the 5-minute age check. Group names are read fromgroups, falling back to Keycloak’srealm_access.rolesandresource_access[client].roles. Token signature,audandexpare verified by the identity layer before these claims are mapped, never by the mapping itself.
First Login
Click the auth button in the titlebar to open the sign-in modal. Choose a provider or register with email. Authentication is optional — the platform works fully offline without an account.
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| Ctrl + Z | Undo |
| Ctrl + Y | Redo |
| Ctrl + S | Export Key (save) |
| Ctrl + E | Export JSON |
| Ctrl + I | Import Key |
| Delete | Remove selected element |
| Escape | Deselect / Close modal |
| F11 | Toggle fullscreen |
| G | Toggle grid |
| 1 – 8 | Switch toolbar group focus |
Environmental Glossary
| Term | Definition |
|---|---|
| CONAMA | Conselho Nacional do Meio Ambiente — Brazilian National Environment Council. Sets environmental standards and resolutions (e.g., CONAMA 420/2009 for soil quality). |
| CETESB | Companhia Ambiental do Estado de São Paulo — São Paulo state environmental agency. Publishes reference cleanup values for contaminated sites. |
| IBAMA | Instituto Brasileiro do Meio Ambiente — Federal environmental enforcement agency. |
| VR | Valor de Referência — Natural background concentration (CETESB DD-256/2016). |
| VP | Valor de Prevenção — Prevention threshold; monitoring required (CONAMA 420 Anexo II). |
| VI | Valor de Intervenção — Intervention threshold; remediation required (CONAMA 420 Anexo II). |
| CMA | Concentração Máxima Aceitável — Site-specific risk-based threshold from assessment campaigns. |
| Plume | A 3D volume of contaminated groundwater or soil, typically spreading from a source area following groundwater flow direction. |
| Monitoring Well | A vertical borehole drilled to collect groundwater samples and measure water table levels. |
| Observation | A single measurement: parameter (what) + value (how much) + timestamp (when) at a specific location. |
| Campaign | A field sampling event — a specific date when a team collected data from multiple monitoring points. |
| GAC | Gerenciamento de Áreas Contaminadas — Contaminated Areas Management. Brazilian regulatory framework for contaminated site investigation and remediation (CONAMA, CETESB). |
| EDD | Electronic Data Deliverable — Standard format for laboratory analytical results. |
| PDPL-U / PDPLU | The core ecbyts organizing model for elements, observations, and exports: Ponto, Data, Parametro, Leitura, Unidade. |
| ESH | Environment, Safety & Health — Domain for the SAO (Systematic Assessment of Operations) matrices. |
| IDW | Inverse Distance Weighting — Spatial interpolation method where nearby points have more influence. |
| Kriging | Geostatistical interpolation method providing best linear unbiased estimates with uncertainty quantification. |
| ECBT | The unified export/import format for ecbyts models. Encodes elements, campaigns, observations, and optionally blockchain integrity proofs. Replaces the legacy ECO1 prefix. |
| Merkle Tree | A binary hash tree structure where any modification to a leaf node changes the root hash, enabling efficient data integrity verification. |
| EIS | EnviroTech Integrity Score — A composite metric (0–5) evaluating the technical quality and trustworthiness of an environmental model. |
| Digital Twin | A virtual replica of a physical environmental site that evolves with real data over time. |
| BCF | BIM Collaboration Format — Standard for 3D-anchored issue tracking, adapted for environmental site issues. |
| BPMN | Business Process Model and Notation — Standard for workflow automation, adapted for environmental pipelines. |
| MCP | Model Context Protocol — Open standard for AI agent–tool communication. ecbyts exposes an MCP server for external AI integration. |
| Dynamic Dispatch | Registry-based action resolution where 454 platform actions are discovered and executed by the AI assistant based on semantic intent matching. |
| Fine-Tuning | Process of specializing a pre-trained language model (Qwen2.5) on domain-specific environmental data for improved accuracy. |
| Symbology Profile | A visual mapping standard that controls element colors, icons, and 3D shapes for consistent site representation. |
| Veo 2 | Google’s AI video generation model used to create photorealistic environmental site fly-through videos from scene descriptions. |
| LGPD | Lei Geral de Proteção de Dados — Brazilian General Data Protection Law (equivalent to GDPR). |
| hCaptcha | Privacy-focused CAPTCHA service used for bot protection on authentication forms. |
| LoRA | Low-Rank Adaptation — Efficient fine-tuning technique that trains small adapter weights instead of modifying the full model. |
| TOTP | Time-based One-Time Password — Standard for multi-factor authentication (RFC 6238). |
Common Parameters
Environmental parameters available for observations. Custom parameters can also be added.
| Category | Parameters |
|---|---|
| Organic Compounds | Benzene, Toluene, Ethylbenzene, Xylenes (BTEX), TPH, PAHs, VOCs, SVOCs |
| Inorganics / Metals | Lead, Arsenic, Chromium, Mercury, Cadmium, Zinc, Copper, Nickel |
| Physical-Chemical | pH, Temperature, Dissolved Oxygen, Conductivity, ORP, Turbidity |
| Nutrients | Nitrate, Nitrite, Ammonia, Phosphate, Total Nitrogen, Total Phosphorus |
| Hydrogeological | Water Table Level, Hydraulic Conductivity, Porosity, Gradient |
| Microbiology | Total Coliforms, E. coli, Fecal Coliforms, Heterotrophic Plate Count |
| Safety & GHG | Incident rates, near-miss frequency, GHG emissions (CO2e), noise levels |
Custom Parameters
Need a parameter not in the default list? Add custom parameters via the configuration. Custom parameters support user-defined names, units, regulatory limits, and custom fields (sample depth, detection limit, fraction).
Technology Stack
| Layer | Technology | Purpose |
|---|---|---|
| 3D Rendering | Three.js 0.160.0 | WebGL scene, meshes, orthographic camera |
| Charts | Chart.js 4.4.1 | Scatter plots, histograms, time series |
| Language | TypeScript-first | Canonical ES module sources in src/app/js; browser JavaScript is generated by the repository build |
| Build | Repository TypeScript build | node scripts/ts-build-app.mjs generates deployable modules and source maps |
| Auth & Database | Supabase | SSO (Google, GitHub, Microsoft), PostgreSQL, 39 Edge Function entry points |
| AI / LLM | Multi-provider | 454 registered actions, 45 categories, 3-tier prompt, MCP server |
| ML | SimpleNN + Qwen2.5 | 6 solvers, fine-tuning pipeline, Transformers.js |
| Payments | Stripe + MercadoPago | 4-tier freemium, marketplace checkout |
| Cryptography | Web Crypto API | SHA-256, ECDSA P-256, AES-GCM, hCaptcha |
| Video | Google Veo 2 | AI-generated environmental site videos |
| Storage | IndexedDB + Supabase Storage | Model persistence, cloud files, key management |
| Typography | Geist, JetBrains Mono | Google Fonts (OFL-1.1, sem RFN) |
| Server | serve (npx) | Zero-config static file server |
Platform Metrics
3,300+ TypeScript source files • 3,700+ test files • 473 API actions across 46 categories • 39 Edge Function entry points • 6 ML solvers • 16 locales
Auditable TypeScript Build
ecbyts uses TypeScript as the canonical application source and generates browser ES modules through a repository-owned build script. The deployed JavaScript remains inspectable, while source maps preserve traceability to the TypeScript implementation.
Data Model (ECBT Schema)
Models are represented as validated JSON objects with the following top-level structure:
{
"ecbyts": "0.2.0",
"timestamp": "2026-02-07T12:00:00Z",
"project": {
"name": "Site Investigation",
"author": "Environmental Engineer",
"coordinateSystem": { "system": "UTM", "zone": 23, "hemisphere": "S" },
"areas": [{ "area": "Area A", "subarea": "Subarea 1" }]
},
"elements": [{ "family": "well", "id": "el_1", "name": "PM-01", ... }],
"campaigns": [{ "id": "camp_1", "name": "Q1 2026", "startDate": "2026-01-01" }],
"scenes": [{ "id": "scene_1", "name": "Overview", "viewStart": {}, "viewEnd": {} }],
"families": {},
"edges": [{ "id": "edge_1", "sourceId": "el_1", "targetId": "el_2", "type": "monitors" }],
"areasTree": []
}
- elements — Array of site elements with family, position, properties, and nested observations.
- campaigns — Sampling events with dates, team info, and visibility toggles.
- scenes — Saved camera viewpoints with start/end states and per-element visibility.
- edges — Directed relationships between elements (monitors, flows_to, contains, etc.).
- families — Custom family definitions extending the default PDPL-U set.
- areasTree — Hierarchical project organization (controladora > area > subarea).
ECBT Blockchain Extensions
Blockchain-verified models add chain (hash provenance), merkle (content integrity root), author (key ID), and verification (ECDSA signature) fields. The schema version jumps to 3.0.0 for blockchain models.
Discoverable Panels — Painéis Descobríveis
Panels that ship with ecbyts but have no fixed toolbar home — reach them from the top ribbon More menu (menu Mais). This list is generated from the panel discovery registry, so it never drifts from the code. Painéis que existem no ecbyts mas não têm lugar fixo na barra — abra-os pelo menu Mais do ribbon superior.
Admin — Administração
| Panel / Painel | How to open / Como abrir | Icon |
|---|---|---|
| Instalação e backend | Menu Mais → Instalação e backend | server |
Data — Dados
| Panel / Painel | How to open / Como abrir | Icon |
|---|---|---|
| Descobrir Modelos | Menu Mais → Descobrir Modelos | search |
| Portal de recebimento de EDD | Menu Mais → Portal de recebimento de EDD | file-up |
| Catálogos do ECBT | Menu Mais → Catálogos do ECBT | book-open |
| Orçamento Cotado | Menu Mais → Orçamento Cotado | dollar-sign |
| Áreas — cadastro e consulta | Menu Mais → Áreas — cadastro e consulta | map |
| Dicionário de campos | Menu Mais → Dicionário de campos | book-open |
| Demonstrações de valor | Menu Mais → Demonstrações de valor | sparkles |
Monitoring — Monitoramento
| Panel / Painel | How to open / Como abrir | Icon |
|---|---|---|
| Treinamento | Menu Mais → Treinamento | book-open |
| Saúde Ocupacional | Menu Mais → Saúde Ocupacional | heart |
| Avaliação de Risco CETESB | Menu Mais → Avaliação de Risco CETESB | shield-alert |
Governance — Governança
| Panel / Painel | How to open / Como abrir | Icon |
|---|---|---|
| Apontamento de horas | Menu Mais → Apontamento de horas | clock |
| Trilha de auditoria | Menu Mais → Trilha de auditoria | history |
| ECBT Score (Veredito da Área) | Menu Mais → ECBT Score (Veredito da Área) | dollar-sign |