Skip to main content
Sintesis includes a reporting engine that analyses obra data and surfaces actionable findings — deviations between planned and actual progress, unpaid certificates, missing monthly certifications, and more. Reports can be filtered, saved as presets, shared via links, and exported.

Report types

Obras report

A filterable, paginated view of all obras (/excel/reporte). Filter by surface area, contracting entity, contract amounts, timeline, and completion percentage.

Per-obra findings

Automated rule-based findings shown on the obra general tab. Findings are classified as info, warn, or critical.

Progress curve

A plan-vs-actual progress chart built from the Curva Plan tabla (planned cumulative %) and the PMC Resumen tabla (actual physical progress %).

Macro table report

A report view for each macro table at /macro/[id]/reporte, applying the same filter and preset system.

Obras report

Navigate to Generar Reporte from the obras dashboard toolbar, or go directly to /excel/reporte.

Available filters

FilterFieldType
Surface areasup_de_obra_m2Numeric range
Contracting entityentidad_contratanteText contains
Base contract month (year)mes_basico_de_contratoYear / text contains
Start date (year)iniciacionYear / text contains
Contract + amendmentscontrato_mas_ampliacionesNumeric range
Certified to datecertificado_a_la_fechaNumeric range
Balance to certifysaldo_a_certificarNumeric range
Per-contract termsegun_contratoNumeric range
Extensions grantedprorrogas_acordadasNumeric range
Total termplazo_totalNumeric range
Elapsed termplazo_transcNumeric range
Completion %porcentajeNumeric range
StatusderivedAll / In progress / Completed
Filters are initialised from URL query parameters, so you can deep-link to a pre-filtered report view.

Report presets

Report presets let users save and reuse filter and column configurations without rebuilding them each time.

report_presets schema

ColumnTypeDescription
iduuidPrimary key.
tenant_iduuidOwning tenant.
owner_user_iduuidUser who created the preset.
report_keytextIdentifies the report type (e.g. obras).
nametextDisplay name (unique per tenant + report key).
filtersjsonbSerialised filter state.
report_statejsonbSerialised column visibility, sort, and other UI state.

report_templates schema

System-level or admin-created templates that pre-populate a report configuration:
ColumnTypeDescription
report_keytextReport type this template applies to.
nametextTemplate name.
descriptiontextOptional description.
payloadjsonbFull configuration payload.
is_systembooleanWhether this is a system-provided template.
You can generate a shareable link for any report view. Share links encode the filter and state at creation time:
ColumnTypeDescription
tokentextUnique URL token.
preset_iduuidThe preset this link is based on (optional).
payloadjsonbSnapshot of the report state at link creation.
expires_attimestamptzOptional expiry. null means the link never expires.
Share links grant access to the report state snapshot at creation time. Revoke them by deleting the report_share_links record if the data they reference becomes sensitive.

Automated findings (rule engine)

Sintesis continuously evaluates a set of configurable rules against each obra and stores the results as signals and findings.

Finding severity levels

SeverityMeaning
infoInformational — no action required, but worth noting
warnWarning — potential issue that should be reviewed
criticalCritical — requires immediate attention

Built-in rule packs

Compares planned cumulative progress (from the Curva Plan tabla) against actual physical progress (from the PMC Resumen tabla) for the current period. Fires a warn finding if actual is more than warnBelow percentage points behind plan, or critical if more than criticalBelow points behind.Default thresholds: warnBelow: 10, criticalBelow: 20.
Checks for certificates where cobrado = false and vencimiento is in the past. Configurable severity (warn or critical).
Detects obras where no measurement or certificate has been recorded within the configured number of days or months. Useful for identifying stalled projects.
Fires if the current month has no certificate recorded for an obra that is expected to certify monthly.
Monitors a stage/location tabla for rows that have been in the same stage for longer than the configured number of weeks.

Rule configuration

Rule packs and their thresholds are configurable per obra via obra_rule_config:
{
  "enabledPacks": {
    "curve": true,
    "unpaidCerts": true,
    "inactivity": true,
    "monthlyMissingCert": true,
    "stageStalled": false
  },
  "mappings": {
    "curve": {
      "planTableId": "<obra-tabla-uuid>",
      "resumenTableId": "<obra-tabla-uuid>",
      "plan": { "startPeriod": "2024-03" }
    }
  },
  "thresholds": {
    "curve": { "warnBelow": 10, "criticalBelow": 20 },
    "unpaidCerts": { "severity": "warn" }
  }
}
If no custom configuration exists for an obra, Sintesis falls back to the default rule configuration (all packs enabled, default thresholds).

Reporting tables schema

obra_signals — computed metric values per obra and period:
ColumnTypeDescription
obra_iduuidThe obra this signal belongs to.
period_keytextPeriod identifier (e.g. 2024-11).
signal_keytextThe metric name (e.g. curve.actual_pct).
value_numnumericNumeric signal value.
value_boolbooleanBoolean signal value.
value_jsonjsonbStructured signal value.
computed_attimestamptzWhen the signal was last computed.
obra_findings — rule evaluation results:
ColumnTypeDescription
obra_iduuidThe obra this finding belongs to.
period_keytextThe period when this finding was created.
rule_keytextWhich rule generated this finding.
severitytextinfo, warn, or critical.
titletextShort finding title shown in the UI.
messagetextDetailed explanation of the finding.
evidence_jsonjsonbSupporting data used to generate the finding.
statustextopen or resolved.
resolved_attimestamptzWhen the finding was marked resolved.

Progress curve visualisation

The obra general tab displays a plan-vs-actual progress chart when Sintesis can identify both a Curva Plan tabla and a PMC Resumen tabla for the obra.

How curve data is sourced

1

Identify plan table

Sintesis looks for an obra tabla with columns periodo, avance_mensual_pct, and avance_acumulado_pct. If obra_rule_config specifies a planTableId, that tabla is used instead.
2

Identify resumen table

Sintesis looks for a tabla with avance_fisico_acumulado_pct and a period column. If obra_rule_config specifies a resumenTableId, that tabla is used.
3

Align periods

Period labels from both tables are normalised to a YYYY-MM key. Spanish month names, Mes N patterns, and full date strings are all supported. If a startPeriod is configured, Mes 1, Mes 2, … values are mapped to calendar months from that start.
4

Render the chart

Points where planPct and realPct exist for the same period are plotted together. The chart shows the deviation between planned and actual cumulative progress.
If your obra is behind schedule, the obraDelay value (time progress % minus physical completion %) is calculated and shown as a risk indicator on the general tab. Obras with a delay greater than 10 percentage points are flagged as at risk.

Build docs developers (and LLMs) love