- Table of contents
- For developers
- Data model
- Tables of the engine
Tables of the RED FLAGS engine
Database tables are based on the POJO classes, so here we don't repeat field descriptions, we're focusing on the differences and structure.
Every table has a rev field, which is described at MySQLExporter.
te_address
| Field | Type | Description | 
| buyerProfileUrl | varchar(200) |  | 
| id | varchar(200) | [PK] MD5 hash of the Address.toString()result. | 
| city | varchar(200) |  | 
| contactPerson | varchar(200) |  | 
| contactPoint | varchar(200) |  | 
| country | varchar(200) |  | 
| email | varchar(200) |  | 
| fax | varchar(200) |  | 
| infoUrl | varchar(200) |  | 
| organizationId | varchar(200) | ID of the organization this address belongs to. | 
| phone | varchar(200) |  | 
| _raw | longtext |  | 
| rev | decimal(22,0) |  | 
| street | varchar(200) |  | 
| url | varchar(200) |  | 
| zip | varchar(200) |  | 
te_award
| Field | Type | Description | 
| decisionDate | datetime |  | 
| id | varchar(200) | [PK] Format: "noticeId-A-number" | 
| lotNumber | decimal(22,0) |  | 
| lotTitle | longtext |  | 
| noticeId | varchar(200) |  | 
| number | decimal(22,0) |  | 
| numberOfOffers | decimal(22,0) |  | 
| rawDecisionDate | varchar(200) |  | 
| rawHeader | longtext |  | 
| rawLotNumber | varchar(200) |  | 
| rawNumber | varchar(200) |  | 
| rawNumberOfOffers | varchar(200) |  | 
| rawTotalEstimatedValue | varchar(200) |  | 
| rawTotalEstimatedValueVat | varchar(200) |  | 
| rawTotalFinalValue | varchar(200) |  | 
| rawTotalFinalValueVat | varchar(200) |  | 
| rev | decimal(22,0) |  | 
| subcontracting | longtext |  | 
| subcontractingRate | decimal(22,2) |  | 
| totalEstimatedValue | decimal(22,0) |  | 
| totalEstimatedValueCurr | varchar(200) |  | 
| totalEstimatedValueVat | decimal(22,2) |  | 
| totalFinalValue | decimal(22,0) |  | 
| totalFinalValueCurr | varchar(200) |  | 
| totalFinalValueVat | decimal(22,2) |  | 
To be able to map documents using 2014/24/EU directive, we introduced the following new fields:
| Field | Type | Description | 
| awarded | decimal(1,0) |  | 
| nonAward | longtext |  | 
| rawAwarded | varchar(200) |  | 
Winner organization is stored in te_organization and the relation in te_relationdescriptor looks like this:
| Field | Value (as Java code) | 
| id | String.format("AWARD-%s-2-ORG-%s", award.getId(), award.getWinnerOrg().getId()) | 
| _type | "AWARD_TO_ORGANIZATION" | 
| additonalInfo | "winnerOrg" | 
| relationLeftId | award.getId() | 
| relationRightId | award.getWinnerOrg().getId() | 
te_complementaryinfo
| Field | Type | Description | 
| additionalInfo | longtext |  | 
| genRegFWInfo | longtext |  | 
| id | varchar(200) | [PK] Same as the notice ID. | 
| lodgingOfAppeals | longtext |  | 
| noticeId | longtext |  | 
| rawRelToEUProjects | longtext |  | 
| recurrence | longtext |  | 
| refsToEUProjects | longtext |  | 
| relToEUProjects | decimal(1,0) |  | 
| rev | decimal(22,0) |  | 
te_contractingauthority
| Field | Type | Description | 
| id | varchar(200) | [PK] Same as the notice ID. | 
| noticeId | varchar(200) |  | 
| purchasingOnBehalfOfOther | decimal(1,0) |  | 
| rawPurchasingOnBehalfOfOther | longtext |  | 
| rev | decimal(22,0) |  | 
Contracting organization is stored in te_organization and the relation in te_relationdescriptor looks like this:
| Field | Value (as Java code) | 
| id | String.format("CONTR-%s-2-ORG-%s-AS-%s", contr.getId(), contr.getContractingOrg().getId(), "contractingOrg") | 
| _type | "CONTRACTINGAUTHORITY_TO_ORGANIZATION" | 
| additonalInfo | "contractingOrg" | 
| relationLeftId | contr.getId() | 
| relationRightId | contr.getContractingOrg().getId() | 
te_cpv
| Field | Type | Description | 
| code | decimal(22,0) | CPV.id | 
| id | varchar(200) | [PK] Same as code. | 
| name | varchar(200) |  | 
| rev | decimal(22,0) |  | 
te_data
| Field | Type | Description | 
| country | varchar(200) |  | 
| deadline | datetime |  | 
| deadlineForDocs | datetime |  | 
| directive | varchar(200) |  | 
| documentSent | datetime |  | 
| id | varchar(200) | [PK] Same as the notice ID. | 
| internetAddress | varchar(200) |  | 
| noticeId | varchar(200) |  | 
| oj | varchar(200) |  | 
| originalLanguage | varchar(200) |  | 
| place | varchar(200) |  | 
| publicationDate | datetime |  | 
| rev | decimal(22,0) |  | 
| title | varchar(200) |  | 
Types are stored in te_datatype and the relations in te_relationdescriptor look like this:
| Field | Value (as Java code) | 
| id | String.format("DATA-%s-2-TYPE-%s", data.getId(), type.getId()) | 
| _type | "DATA_TO_DATATYPE" | 
| additonalInfo | "authorityType"or"awardCriteria"or"bidType"or"contractType"or"documentType"or"procedureType"or"regulationType" | 
| relationLeftId | data.getId() | 
| relationRightId | type.getId() | 
te_datatype (Type)
| Field | Type | Description | 
| id | varchar(200) | [PK] Same as typeId | 
| name | varchar(200) |  | 
| rev | decimal(22,0) |  | 
| typeId | varchar(200) | Type.id | 
te_duration
| Field | Type | Description | 
| beginDate | datetime` |  | 
| endDate | datetime` |  | 
| id | varchar(200) | [PK] Generated from the container object's ID and a field description. | 
| inDays | decimal(22,0)` |  | 
| inMonths | decimal(22,0)` |  | 
| _raw | varchar(200)` |  | 
| rev | varchar(200)` |  | 
te_flag (IndicatorResult)
| Field | Type | Description | 
| id | varchar(200) | [PK] Format: "noticeId-F-indicatorClassname" | 
| effectLevel | varchar(200) | (not used) | 
| flagType | varchar(200) | IndicatorResult.flagCategory | 
| information | text | IndicatorResult.description | 
| noticeId | varchar(200) |  | 
| rev | decimal(22,0) |  | 
| score | decimal(22,2) | IndicatorResult.weight | 
te_leftinfo
| Field | Type | Description | 
| depositsAndGuarantees | longtext |  | 
| executionStaff | longtext |  | 
| financialAbility | longtext |  | 
| financingConditions | longtext |  | 
| id | varchar(200) | [PK] Same as the notice ID. | 
| legalFormToBeTaken | longtext |  | 
| noticeId | longtext |  | 
| otherParticularConditions | longtext |  | 
| particularProfession | longtext |  | 
| personalSituation | longtext |  | 
| qualificationForTheSystem | longtext |  | 
| reservedContracts | longtext |  | 
| rev | decimal(22,0) |  | 
| technicalCapacity | longtext |  | 
To be able to map documents using 2014/24/EU directive, we introduced the following new fields:
| Field | Type | Description | 
| objRulesAndCritForParticipation | longtext |  | 
te_lot
| Field | Type | Description | 
| additionalInfo | longtext |  | 
| id | varchar(200) | [PK] Format: "noticeId-L-number" | 
| noticeId | varchar(200) |  | 
| numb | decimal(22,0) | Lot.number | 
| quantity | longtext |  | 
| rawCpvCodes | longtext |  | 
| rawNumber | varchar(200) |  | 
| rev | decimal(22,0) |  | 
| shortDescription | longtext |  | 
| title | longtext |  | 
Duration is stored in te_duration, its ID will be the same as the lot's ID. The relation in te_relationdescriptor looks like this:
| Field | Value (as Java code) | 
| id | String.format("LOT-%s-2-DUR-%s", lot.getId(), lot.getDifferentDuration().getId()) | 
| _type | "LOT_TO_DURATION" | 
| additonalInfo | "differentDuration" | 
| relationLeftId | lot.getId() | 
| relationRightId | lot.getDifferentDuration().getId() | 
te_notice
| Field | Type | Description | 
| documentFamilyId | varchar(200) |  | 
| id | varchar(200) | Notice.id.toString() | 
| noticeNumber | decimal(22,0) | Notice.id.number() | 
| noticeYear | decimal(22,0) | Notice.id.year() | 
| rev | decimal(22,0) |  | 
| tedUrl | varchar(200) | Notice.url | 
Chapters are stored in their own tables, without relation records. Their noticeId fields are storing the connection.
te_objofthecontract
| Field | Type | Description | 
| additionalInfo | longtext |  | 
| contractTitle | longtext |  | 
| contractTypeInfo | longtext |  | 
| estimatedValue | decimal(22,0) |  | 
| estimatedValueCurr | varchar(200) |  | 
| financingConditions | longtext |  | 
| frameworkAgreement | longtext |  | 
| frameworkParticipants | decimal(22,0) |  | 
| gpa | longtext |  | 
| id | varchar(200) | [PK] Format: "noticeId-O-number". The number is the index of the current obj. block in the notice document. First obj. block has 1. | 
| lots | longtext |  | 
| noticeId | varchar(200) |  | 
| options | longtext |  | 
| pcFaDps | longtext |  | 
| placeOfPerformance | longtext |  | 
| plannedStartDate | datetime |  | 
| rawEstimatedValue | longtext |  | 
| rawPlannedStartDate | varchar(200) |  | 
| rawRenewable | longtext |  | 
| rawRenewalCount | varchar(200) |  | 
| rawTotalFinalValue | varchar(200) |  | 
| rawTotalFinalValueVat | varchar(200) |  | 
| renewable | decimal(1,0) |  | 
| renewalCount | decimal(22,0) |  | 
| rev | decimal(22,0) |  | 
| shortDescription | longtext |  | 
| totalFinalValue | decimal(22,0) |  | 
| totalFinalValueCurr | varchar(200) |  | 
| totalFinalValueVat | decimal(22,2) |  | 
| totalQuantity | longtext |  | 
| variants | longtext |  | 
To be able to map documents using 2014/24/EU directive, we introduced the following new fields:
| Field | Type | Description | 
| lotTitle | longtext |  | 
| rawLotCpvCodes | longtext |  | 
| awardCriteria | longtext |  | 
| rawLotEstimatedValue | varchar(200) |  | 
| lotEstimatedValue | decimal(22,0) |  | 
| lotEstimatedValueCurr | varchar(200) |  | 
Durations are stored in te_duration with IDs:
- obj.getId() + "-CONTRACT-DUR"
- obj.getId() + "-FRAMEW-DUR"
- obj.getId() + "-RENEWAL-DUR"
The relations in te_relationdescriptor look like this:
| Field | Value (as Java code) | 
| id | String.format("OBJ-%s-2-DUR-%s", obj.getId(), duration.getId()) | 
| _type | "OBJOFTHECONTRACT_TO_DURATION" | 
| additonalInfo | "duration"or"frameworkDuration"or"renewalDuration" | 
| relationLeftId | obj.getId() | 
| relationRightId | duration().getId() | 
te_organization
| Field | Type | Description | 
| code | varchar(200) |  | 
| id | varchar(200) | [PK] MD5 hash of organization name normalized for hashing | 
| mainActivities | longtext |  | 
| name | longtext | Organization name normalized for displaying | 
| rawMainActivities | longtext |  | 
| rev | decimal(22,0) |  | 
| _type | varchar(200) |  | 
te_procedure
| Field | Type | Description | 
| awardCriteria | longtext |  | 
| electronicAuction | longtext |  | 
| fileRefNumber | varchar(200) |  | 
| id | varchar(200) | [PK] Same as the notice ID. | 
| interestDeadline | datetime |  | 
| invitationsDispatchDate | datetime |  | 
| limitOfInvitedOperators | longtext |  | 
| noticeId | varchar(200) |  | 
| obtainingSpecs | longtext |  | 
| openingConditions | longtext |  | 
| openingDate | datetime |  | 
| previousPublication | longtext |  | 
| procedureTypeInfo | longtext |  | 
| rawInterestDeadline | varchar(200) |  | 
| rawInvitationsDispatchDate | varchar(200) |  | 
| reductionOfOperators | longtext |  | 
| renewalInfo | longtext |  | 
| rev | decimal(22,0) |  | 
| tenderLanguage | varchar(200) |  | 
To be able to map documents using 2014/24/EU directive, we introduced the following new fields:
| Field | Type | Description | 
| faDps | longtext |  | 
| gpa | longtext |  | 
Durations are stored in te_duration with IDs:
- proc.getId()+"-MINMAIN-DUR"
- proc.getId()+"-QSYS-DUR"
The relations in te_relationdescriptor look like this:
| Field | Value (as Java code) | 
| id | String.format("PROC-%s-2-DUR-%s", proc.getId(), duration.getId()) | 
| _type | "PROCEDURE_TO_DURATION" | 
| additonalInfo | "minMaintainDuration"or"qualificationSystemDuration" | 
| relationLeftId | obj.getId() | 
| relationRightId | duration().getId() | 
te_relationdescriptor
| Field | Type | Description | 
| additonalInfo | varchar(200) | Field of left class | 
| id | varchar(200) | [PK] Format: "LEFTCLASS-leftId-2-RIGHTCLASS-rightId[-FIELD]" | 
| relationLeftId | varchar(200) | ID of the left record | 
| relationRightId | varchar(200) | ID of the right record | 
| rev | decimal(22,0) |  | 
| _type | varchar(200) | Format: "LEFTCLASS_TO_RIGHTCLASS" | 
Where left = container, right = contained.