# Definitions

dataset:
* set of objects
* 
* Can be hand crafted or generated by a task
* Can be either a CSV file or ini file

delta: the change from one version of an object to another.
the object needs a key

database: collection of objects

object: instance of a type. string key-values with a type

# Tasks

task: kicad-sch-to-dataset
    input:
        $sch
    output:
        data-set:
            * name: kicad-sch
            * types:
                * kicad-schematic-component
                * kicad-sheet
                * kicad-design

task: kicad-pcb-to-dataset
    input:
        $pcb
    output:
        data-set:
            * name: kicad-pcb
            * types:
                * kicad-pcb-component
        file:
            gerber

task: kicad-create-component-data-set
    input:
        * data-set:
            * name: kicad-pcb
        * data-set:
            * name: kicad-sch
        * uses types:
            * kicad-schematic-component
            * kicad-pcb-component
    output:
        data-set:
            type: component

task: validate-component
    input:
        type: component
    output:
        data-set:
            type: component

task: create-bom
    input:
        type: component
    output:
        data-set: (CSV)
            type: bom-component

## Customizations

Case: your 'value' field is (usually) on the form 'Capacity/Max voltage/Tolerance' and you want to split this out into separate fields.

Standard setup:

 * task: create-kicad-sch-objects
  * inputs: none
  * outputs: dataset:create-kicad-sch-objects
 * task: create-kicad-sch-objects
  * inputs: none
  * outputs: dataset:create-kicad-sch-objects

# Hand crafted datasets

CSV files unless specified.

* kicad-footprint-mapping: mappings from a footprint
* value-to-mpn: mapping from value to MPN, for components not found at
  seller
* digikey-footprint-mapping: mappings from digikey's footprint names
  to normalized form

# Directory structure

    $dataset-base-dir/$data-set/
                               data-set.ini
                               $object-type/
                                            $key.ini

For tasks $data-set = $task-name.