@flatfile/blueprint v0.0.14
Blueprint
@flatfile/blueprint
is the point of reference for working with customer-defined data structures in Flatfile. We have a lot of different data problems to solve for across different systems such as the DAL, Pipelines, Workbooks, Turntable, and the SDK.
Objectives
- Describe any reasonable structure of data as defined by external systems
- Inform underlying databases engines on how best to store and retrieve data
- Inform rendering engines (such as tables or forms) on how best to render data points
- Inform matching or AI systems of ontological classifications of data
- Provide guidance to end-users that is specific to the data structure
- Provide configuration for database driven validations
- Report for analytics or future optimization purposes, what user or system defined hooks are running
Term Considerations
- Property โ Describes an attribute of the entity (eg. name, email) and how it should behave.
Example Configuration
{
"properties": [
{
"key": "code",
"label": "Product Code",
"type": "string",
"description": "Unique identifier defining an individual product.",
"constraints": [
{
"type": "unique",
"config": {
"caseSensitive": false
}
}
],
"config": {
"size": "tiny"
}
},
{
"key": "description",
"type": "string"
},
{
"key": "price",
"type": "number",
"config": {
"decimalPlaces": 2
}
},
{
"key": "category",
"label": "Product Category",
"type": "enum",
"multi": true,
"config": {
"allowCustom": false,
"options": [
{
"value": 9,
"label": "Kitchenware",
"icon": "pots-and-pans",
"color": "#f00000",
"meta": {
"product_code_prefix": "KI-"
}
},
{
"value": 9,
"label": "Clothing",
"meta": {
"product_code_prefix": "CL-"
}
}
]
}
}
]
}
Core Properties
All properties have the following options. If a property type ends with []
(such as string[]
) it should be stored, retrieved, and presented as an array of unlimited size.
Option | Description | Default | Required? |
---|---|---|---|
key | The system name of this field. Primarily informs JSON and egress structures. | โ | |
type | One of string , number , boolean , date , enum , reference . Defines the handling of this property. | โ | |
label | A user-facing descriptive label designed to be displayed in the UI such as a table header. | key | |
description | A long form description of the property intended to be displayed to an end user. | ||
constraints | An array of system level Validation Rules meant to be applied after hooks are run. | [] | |
config | Configuration relevant to the type of column. See property documentation below. | {} | Sometimes |
multi | Will allow multiple values and store / provide the values in an array if set. Not all field types support arrays. | false | |
meta | Arbitrary object of values to pass through to hooks and egress | {} |
string
๐งต (default)
Defines a property that should be stored and read as a basic string. Database engines should expect any length of text to be provided here unless explicitly defined in the config.
Configuration Options
size: enum(tiny, normal, medium, long)
โ How much text should be storeable in this field?tiny
= up to 255 characters- โก
normal
= 64kb (default) medium
= 16mblong
= 4gb
number
#๏ธโฃ
Defines a property that should be stored and read as either an integer or floating point number. Database engines should look at the configuration to determine ideal storage format.
Configuration Options
Option | Description | Default |
---|---|---|
decimalPlaces | The number of decimal places to preserve accuracy to. Overages should be automatically rounded with a warning. A hook can pre-format to accomplish floor or ceil. | 0 |
reference
๐
Warning
This is not comparable to a foreign key. There should be no specification of which column to reference by as it is multi-variate. A user may establish a relationship in mapping with a soft reference like a
company name
, once stored in our system we will reference by our internal IDs, and on egress we provide the knownsystem_id
if available.
Defines a reference to another sheet. Links should be established automatically by the matching engine or similar upon an evaluation of unique or similar columns between datasets.
Configuration Options
Option | Description | Required? |
---|---|---|
ref | Full path reference to another sheet/table configuration. Must be in the same workbook. | โ |
relationship | The type of relationship this defines. Can be one of has-many or has-one | โ |
enum
Defines an enumerated list of options for the user to select from. Matching tooling attempts to resolve incoming data assigment to a valid option. The maximum number of options for this list is 100
. For larger lists, users should use the reference
or future lookup
types.
Configuration Options
Option | Description | Default | Required? | |
---|---|---|---|---|
allowCustom | Permit the user to create new options for this specific field. | false | ||
options[] | A list of valid options the user can select from | โ | ||
value | The value or ID of this option. This value will be sent in egress | โ | ||
label | A visual label for this option, defaults to value if not provided | |||
color | An optional color to assign this option | |||
icon | A reference pointer to a previously registered icon | |||
meta | An arbitrary JSON object to be associated with this option and made available to hooks |
boolean
A true
or false
value type. Matching engines should attempt to resolve all common ways of representing this value and it should usually be displayed as a checkbox.
Option | Description | Default |
---|---|---|
allowIndeterminate | Allow an indeterminate (null ) option that is neither selected or unselected. | true |
date
Store a field as a GMT date. Data hooks must convert this value into a YYYY-MM-DD
format in order for it to be considered a valid value. Datetime should be a separate and future supported value as it must consider timezone.
Future Types
- Linked Property โ Populate this property with a value or values from a referenced table - data hooks can further transform. Should support filters.
- Example 1: Show a readonly value on a
contact
based on thecountry
of a linkedcompany
- Example 1: Show a readonly value on a
- Rollup โ Use a datahook to sum or compute all the referenced values. Should support filtering.
- Example 1: The
sum()
of allitems.price * items.quty
linked to aninvoice
- Example 2: The count of
deals
withstatus: lost
linked to asalesperson
- Example 1: The
- Groups/Sets โ An arbitrarily named group of records that can either be merely grouped under a namespace or repeated similar to a relational set.
- Example 1: List of
contact_methods
with atype
,value
, andpriority
. - Example 2:
address
group withstreet
,city
, ...
- Example 1: List of
- Remote Lookup โ a type of field that relies on a datahook to return valid options instead of an enum list or a reference table.
- Example 1: This field must be a valid flight number for the provided
city
anddate
. Users should be able to select from a list of valid flights when interacting with the cell. - Example 2: Global autocomplete for
address
entry. As you type, a set of suggestions appear in a dropdown.
- Example 1: This field must be a valid flight number for the provided