Appearance
Entity: reportBlock
Entity Type: Database table
Description: A reportBlock represents a single inserted block (chart, table, or text) within a reportTemplate — what the block is (type + config) and where it sits in the template's order. Created via the block-insertion action described in Report Builder; the type-to-schema registry is independent from the Dashboard tile registry (dashboardBlock).
Data Attributes Table
| Attribute Name | Description | Data Type | Default Value | Required (= Nullable) | Unique | Format | Validations | Index | Example |
|---|---|---|---|---|---|---|---|---|---|
| id | Unique identifier for the report block record. | UUID | Generated in code (app layer) | Yes | Yes | UUID v7 | Must be a valid UUID v7. | Primary Key | 01960000-0000-7000-8000-000000000401 |
| tenantId | Tenant this report block belongs to. Required on every entity — primary mechanism for data isolation across organisations. | UUID | - | Yes | No | UUID v7 | Foreign Key → tenant.id | name: idx_reportBlock_tenantId, type: btree | 01960000-0000-7000-8000-000000000099 |
| reportTemplateId | The report template this block belongs to. | UUID | - | Yes | No | UUID v7 | Foreign Key → reportTemplate.id | name: idx_reportBlock_reportTemplateId, type: btree | 01960000-0000-7000-8000-000000000301 |
| type | Identifies which block renderer draws this content and which schema its config must satisfy. Extensible — new values are added as new block renderers are supported; not a fixed enum. Independent registry from dashboardBlock.type. | String | - | Yes | No | Type-to-schema registry — see Report Builder, Block type registry and validation. | Must match a registered block type. | name: idx_reportBlock_type, type: btree | placeholderChart |
| order | Position of the block within its report template's linear sequence (not a 2D grid position — reports are ordered lists, not resizable grids). | Integer | - | Yes | No | - | Non-negative integer; on reorder, the full ordered set of a template's blocks is rewritten together. | name: idx_reportBlock_reportTemplateId_order, type: btree | 2 |
| config | Configuration describing what the block shows. Shape depends on type — e.g. for type = "text", config holds plain text content. | JSON | {} | Yes | No | Type-dependent — see Report Builder, Block type registry and validation. | Validated on write against the required-key schema registered for type. Only presence of required keys is checked in this iteration. | - | {"content": "Q3 summary"} |
| createdAt | Timestamp of entity creation (block insertion time). Immutable. | Timestamp with time zone | Set in code | Yes | No | ISO 8601 | - | - | 2026-08-19T10:05:00Z |
| updatedAt | Timestamp of last entity update (e.g. moved to a new order position, or config edited). | Timestamp with time zone | Set in code | Yes | No | ISO 8601 | - | - | 2026-08-19T10:05:00Z |
| deletedAt | Timestamp of soft delete — set when the block is removed from the template. Records with deletedAt IS NULL are considered active. | Timestamp with time zone | null | No | No | ISO 8601 | - | - | null |
| createdBy | Identifier of the actor who created this record. | String | - | Yes | No | type:actor | - | - | user:01960000-0000-7000-8000-000000000050 |
| updatedBy | Identifier of the actor who last updated this record. | String | - | Yes | No | type:actor | - | - | user:01960000-0000-7000-8000-000000000050 |
Note. config's internal shape is not documented on the source page — it is validated only for presence of required keys against a registry described in the Report Builder feature, and is extensible per type. No JSON-DAT sibling file is created for it since no concrete shape is specified to document.
Audited fields
Recorded on created (in full), updated (changed only) and deleted (in full): reportTemplateId, type, order, config.
Excluded: none.
Every entry would carry subjectEntityType = reportTemplate / subjectEntityId = reportTemplateId — a block has no independent identity outside the template it belongs to, mirroring dashboardBlock/dashboardLayout.
Not registered for entityName resolution — identified by its position within a reportTemplateId, not a name a person would type.