resilient-core/resilient-mono.jh

788 lines
24 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Resilient JHipster JDL file definition.
* DON'T use infinite-scroll. The infinite-scroll paginate option
* has some kind of error, and makes it IMPOSSIBLE to login into the
* APP.
*/
// POST generation metadata
// This metadata set the order of fields. And the only ones visible. All others, will be hidden
// @@ List:: < A list of properties for the list view. Ex: code;name;description >
// @@ Update:: < A list of properties for the Update/Create form. Ex: code;name;description >
// @@ View:: < A list of properties for the Detail form. Ex: code;name;description >
// The properties in this list, will be EDITABLE only when in CREATE mode. Readonly otherwise
// @@ READONLY:: < A list of properties for the Detail form. Ex: code;name;description >
// @@ IMAGE:: <Tells the post-generator to customize HTML of this type of fields>
/**
* Monolith app
*
* Resilient core functions microservice.
*/
application {
config {
baseName resilient
packageName com.oguerreiro.resilient
applicationType monolith
authenticationType session
devDatabaseType mysql
prodDatabaseType mysql
clientFramework angularX
buildTool maven
cacheProvider ehcache
enableHibernateCache true
enableTranslation true
languages [pt-pt, en]
nativeLanguage pt-pt
serverPort 8081
}
entities *
}
/**
* **************************************************
* Core - Entities & Relations
* **************************************************
*/
/**
* Organization Nature enum
* This identifies the nature of the organization entry level.
*/
enum OrganizationNature {
/**
* Represents an organizational level (company; department; university; ...)
* Rules : An Organization always starts with and entry level ORGANIZATION.
* Parent's allowed: none; ORGANIZATION; LEVEL
*/
ORGANIZATION,
/**
* Represents a human. With or without a login to the APP.
* Rules : Must have a parent Organization entry
* Parent's allowed: any
*/
PERSON,
/**
* Represents physical building.
* Rules : Must have a parent Organization entry
* Parent's allowed: ORGANIZATION; LEVEL
*/
FACILITY,
/**
* Generic. Its a organizer, creating a level without any system meaning
* Rules : Must have a parent Organization entry
* Parent's allowed: any
*/
LEVEL
}
/**
* Organization Type
* The organization type is a setup that defines the usage of the Organization level and other configurations.
*/
@dto(mapstruct)
entity OrganizationType {
// @@ List:: icon;name;description
// @@ Update:: code;name;description;nature;icon;metadataProperties
// @@ View:: code;name;description;nature;icon;metadataProperties
// @@ READONLY:: code;nature
// @@ IMAGE:: icon
/** User defined code. Must be unique in the OrganizationType */
code String required minlength(3) unique
/** The name of the type. Must be unique in the system */
name String required minlength(3) unique
/** A more complete description of the type. Whats the meaning of this type? */
description String required minlength(3)
/** The nature of the type */
nature OrganizationNature required
/** Icon image associated with this organization type. Will be used in user interface. */
icon ImageBlob
/**
* Record version for concurrency control.
*/
version Integer
}
/**
* Organization
* Hierarchical organigram of the organization.
*/
@dto(mapstruct)
entity Organization {
// @@ List:: organizationType;code;name;parent
// @@ Update:: parent;organizationType;code;name;image;inputInventory;outputInventory;user
// @@ View:: parent;organizationType;code;name;image;inputInventory;outputInventory;user
// @@ READONLY:: parent;organizationType;code
//References:
/*
* Applies only to OrganizationType.OrganizationNature.PERSON.
* Associates a PERSON with a login User. It's NOT mandatory that all PERSON have a system user
*/
//to User(user)
//to Organization(parent)
//to OrganizationType(organizationType)
/** User defined code. Must be unique in the Organization */
code String required minlength(3) unique
/** The name of the Organization entry. Allows duplicate name's, but NOT duplicate code's. */
name String required minlength(3)
/* Optional image associated with this hierarchical level. NOT the same as OrganizationType.icon.
* The Organization.imagem is not an icon and its intended to be specific of the entry it self
*/
image ImageBlob
/*
* Applies only to OrganizationType.OrganizationNature.ORGANIZATION.
* Means that this level is allowed to have inventory data input. Data can be inserted into table InputData associated to this Organization
*/
inputInventory Boolean
/*
* Applies only to OrganizationType.OrganizationNature.ORGANIZATION.
* Means that this level will be evaluated for inventory output variables.
*/
outputInventory Boolean
/**
* Record version for concurrency control.
*/
version Integer
}
// Metadata is a structure for any info associated with other entity domains.
// It's general information that can be used, for example, in formulas.
/**
* Metadata type enum
* The property type
*/
enum MetadataType {
STRING,
BOOLEAN,
INTEGER,
DECIMAL,
DATE
}
/**
* Metadata Property
* Configuration of a metadata property. Defines its type and a description of its usage.
*/
@dto(mapstruct)
entity MetadataProperty {
// @@ List:: code;name;description;mandatory
// @@ Update:: code;name;description;metadataTye;mandatory;pattern
// @@ View:: code;name;description;metadataTye;mandatory;pattern
// @@ READONLY:: code;metadataType
code String required minlength(3) unique
name String required
description String
mandatory Boolean
metadataType MetadataType required
/** Regex pattern for validation (optional). Only applies when the value is not empty. */
pattern String
/**
* Record version for concurrency control.
*/
version Integer
}
/**
* Metadata Value
* The value of a metadata property.
*/
@dto(mapstruct)
entity MetadataValue {
/** Functional relational key to MetadataProperty */
metadataPropertyCode String required
/**
* The target domain key that this MetadataValue belongs. Its a class name or a key provided by the consumer. <br>
* Used with targetDomainId to create as unique relation with the target domain
* @see targetDomainId
*/
targetDomainKey String required
/**
* The target domain Id that this MetadataValue belongs. <br>
* Used with targetDomainKey to create as unique relation with the target domain
* @see targetDomainKey
*/
targetDomainId Long required
/**
* The value of the MetadataProperty, persisted as a string. <br>
*/
value String
/**
* Record version for concurrency control.
*/
version Integer
}
relationship OneToMany {
Organization{child(name)} to Organization{parent(name)}
OrganizationType to Organization{organizationType(name)}
}
relationship OneToOne {
/* Relation to builtInEntity User, must have the name "user", any other, JHipster generates TC with error */
Organization{user(login)} to User with builtInEntity
}
relationship ManyToMany {
// NOTE: For this to work, the OrganizationTypeMapper.toDtoMetadataPropertyName(MetadataProperty metadataProperty)
// Must have an additional mapping for the version property : @Mapping(target = "version", source = "version")
OrganizationType{metadataProperties(name)} to MetadataProperty{organizationType(name)}
}
/**
* **************************************************
* Inventory - Entities & Relations
* **************************************************
*/
/**
* Variable InputMode enum
* Defines how the input values for the variable are inserted.
*/
enum InputMode {
/** Values are inserted by DataFile only. User can always change the value manually, but they can't delete it or insert it */
DATAFILE,
/** Values are inserted Manually. In this mode, only a human can insert and change the variable values. If a file or integration attempts to insert it, an error will be thrown */
MANUAL,
/** Values are inserted by Integration files. Very similar to the option DATAFILE */
INTEGRATION,
/** The variable can be inserted by any of the modes */
ANY
}
/**
* Unit Variable Type
* The type of data this unit represents
*/
enum UnitValueType {
/** Decimal value */
DECIMAL,
/** boolean value */
BOOLEAN
}
/**
* UnitType
* Type of measure unit types. Convertions can only be done within Unit's of the same UnitType
*/
@dto(mapstruct)
entity UnitType {
// @@ List:: name;description;valueType
// @@ Update:: name;description;valueType
// @@ View:: name;description;valueType
name String required unique
description String required
valueType UnitValueType required
/**
* Record version for concurrency control.
*/
version Integer
}
/**
* Unit
*/
@dto(mapstruct)
entity Unit {
// @@ List:: unitType;symbol;name;description
// @@ Update:: unitType;code;symbol;name;description;convertionRate
// @@ View:: unitType;code;symbol;name;description;convertionRate
// @@ Readonly:: unitType;code
/** Required code to use in integrations */
code String required unique
/** Math symbol that is usually used as sufix for this unit. Eg. 'm3' for square metters.*/
symbol String required
/** Math name for this unit. Eg. 'Square metters'.*/
name String required
description String
/**
* The convertion rate (CR), relative to the base unit.
* This values awnsers the question: When the base unit is 1 (one), whats the value of this unit measure ?
* Ex: How many Ml (miligrams) 1Kg has? 1000
* The formula to convert between any value unit the scale is:
* <Value>*CR(target unit)/CR(source unit)
*/
convertionRate BigDecimal required
/**
* Record version for concurrency control.
*/
version Integer
}
/**
* Unit Converter
*/
@dto(mapstruct)
entity UnitConverter {
// @@ List:: fromUnit;toUnit;name;description
// @@ Update:: fromUnit;toUnit;name;description;convertionFormula
// @@ View:: fromUnit;toUnit;name;description;convertionFormula
// @@ Readonly:: fromUnit;toUnit
//References:
//to Unit(fromUnit)
//to Unit(toUnit)
name String required
description String required
/**
* The convertion formula to convert the fromUnit into the toUnit.
*/
convertionFormula String required
/**
* Record version for concurrency control.
*/
version Integer
}
// Standard GEE Variable definition schema
// VariableScope
// (1-n) VariableCategory
// (1-n) Variable
// ---------------------------------------------------
/**
* Variable Scope
* Example: GEE Scope 1/2/3 or General Info
*/
@dto(mapstruct)
entity VariableScope {
// @@ List:: code;name;description
// @@ Update:: code;name;description
// @@ View:: code;name;description
// @@ Readonly:: code
/**
* Unique key, user defined.
* Be aware, that this will be used to create the Variable.code
* NOTE: The field type is string, but restricted to only numbers
*/
code String required pattern(/^[0-9]*$/) unique
/** The name or title for this scope */
name String required
/** A description or usage of this scope */
description String required
/** Record version for concurrency control. */
version Integer
}
/**
* Variable Category
* Sub-division of VariableScope in Categories
*/
@dto(mapstruct)
entity VariableCategory {
// @@ List:: code;name;description
// @@ Update:: variableScope;code;name;description
// @@ View:: variableScope;code;name;description
// @@ Readonly:: variableScope;code
//References:
//to VariableScope
/**
* Unique key, user defined.
* Be aware, that this will be used to create the Variable.code
* NOTE: The field type is string, but restricted to only numbers
*/
code String required pattern(/^[0-9]*$/)
/** The name or title for this category */
name String required
/** A description or usage of this category */
description String required
/** Record version for concurrency control. */
version Integer
}
/**
* Variable Definition (GEE variable classification)
*/
@dto(mapstruct)
entity Variable {
// @@ List:: name;description;input;output
// @@ Update:: variableScope;variableCategory;code;name;baseUnit;description
// @@ View:: variableScope;variableCategory;code;name;baseUnit;description
// @@ Readonly:: variableScope;variableCategory;code
//References:
//to VariableScope
//to VariableCategory
//to Unit (baseUnit) - The unit of the variable
/**
* Unique key, composed by: <br>
* VariableScope.code + VariableCategory.code + <index>
* NOTA: User will provide the index property, and the software will create the code
* index and code are NOT changeable
*/
code String required pattern(/^[0-9]*$/) unique
/** Variable index */
variableIndex Integer required
/** The name or title for the variable */
name String required
/** The descriptions of the variable. Its meaning. Its usage. */
description String required
/** Defines this variable as input. Values will be inserted for this variable */
input Boolean required
/** Defines the way of input. See the enum for instructions. */
inputMode InputMode required
/** Defines this variable as output. This variable will be evaluated for output */
output Boolean required
/** The formula to calculate the output valut of the variable. Mandatory when output==TRUE */
outputFormula String
/** Record version for concurrency control. */
version Integer
}
filter Variable
/**
* Variable allowed input units. Also defines the converters needed if the
*/
@dto(mapstruct)
entity VariableUnits {
// @@ List:: variable;unit
// @@ Update:: variable;unit
// @@ View:: variable;unit
// @@ Readonly:: variable;unit
//References:
//to Variable
//to Unit (unit) - The allowed unit for input
/** Record version for concurrency control. */
version Integer
}
/**
* Variable Class
* A sub-variable classification. Example: Variable=FUEL CONSUMPTIOM; CLASS=GASOLINE; OR ELECTRICAL; ETC...
*/
@dto(mapstruct)
entity VariableClass {
// @@ List:: variable;code;name
// @@ Update:: variable;code;name
// @@ View:: variable;code;name
// @@ Readonly:: variable;code
//References:
//to Variable
/** Code of the class. Must be unique within the Variavle */
code String required
/** Human name of the class. Must be unique within the Variable, because it will be used as key for the Excel integration data. */
name String required
/** Record version for concurrency control. */
version Integer
}
// Period schema
// Period (1-n) PeriodVersion
// ---------------------------------------------------
/**
* Period status enum
*/
enum PeriodStatus {
OPEN,
REOPEN,
CLOSED
}
/**
* Data Source enum
*/
enum DataSourceType {
MANUAL,
FILE,
AUTO,
/** Special case, where a InputData value from an Organization is distributed to other Organization's */
DISTRIB
}
/**
* Upload file type enum
*/
enum UploadType {
/** Custom Excel file template, for variable input upload */
INVENTORY,
/** Exported file from the accounting software */
ACCOUNTING
}
/**
* Upload file status enum
*/
enum UploadStatus {
UPLOADED,
PROCESSING,
PROCESSED,
ERROR
}
/**
* Period
*/
@dto(mapstruct)
entity Period (period) {
// @@ List:: name;description;beginDate;endDate;state
// @@ Update:: name;description;beginDate;endDate;state
// @@ View:: name;description;beginDate;endDate;state
//References:
//?
/** Name of the period */
name String required
/** Description for the period */
description String
/** Period start date */
beginDate LocalDate required
/** Period end date */
endDate LocalDate required
/** State of the Period */
state PeriodStatus required
/** The creation date (insert). When the data was inserted into the system. */
creationDate Instant required
/** The actual username logged into the system, that inserted the data. NOT a reference to the user, but the login username. */
creationUsername String required
/** Record version for concurrency control. */
version Integer
}
/**
* Period versions
* Always have at least one version.
*/
@dto(mapstruct)
entity PeriodVersion {
//References:
//to Period
/** Name of the version */
name String required
/** Description for the version */
description String
/** Period version (sequencial) */
periodVersion Integer required
/** State of the Period */
state PeriodStatus required
/** The creation date (insert). When the data was inserted into the system. */
creationDate Instant required
/** The actual username logged into the system, that inserted the data. NOT a reference to the user, but the login username. */
creationUsername String required
/** Record version for concurrency control. */
version Integer
}
/**
* Input data Values
* The values inserted from:
* - Each Organic Unit
* - Variable
* - PeriodVersion
*/
@dto(mapstruct)
entity InputData {
//References:
//to Variable - The Variable that this data reports
//to Period - The period that this data belongs
//to PeriodVersion - The period version active, when the data was inserted
//to Unit (sourceUnit) - The Unit that the data was inserted. Must be one of the allowed input units for the variable
//to Unit (unit) - The Unit of the variableValue. Its the unit configured in Variable.baseUnit
//to Organization (owner) - The owner of the data. The Organization responsable for generating this data (that consumed this value)
//to InputData (inputData) - In case of InputData.source==DataSourceType.DISTRIB, this points to the parent owner InputData
//to InputDataUpload - In case of InputData.source==DataSourceType.FILE, this points to the InputDataUpload file that contains this data
/** The value of the data in the source Unit. This might be different from the Variable baseUnit. @see variableValue and variableUnit */
sourceValue BigDecimal required
/** The value of the data converted to the variable baseUnit. */
variableValue BigDecimal required
/**
* The value that the InputData.owner is accounted for.
* In case a variableValue is distributed to other Organization's (InputData.source==DataSources.DISTRIB)
* , this will have the value to consider when calculating the final inventory value for the variable
*/
imputedValue BigDecimal required
/** What was the source of this data ? */
sourceType DataSourceType required
/**
* The date that this data relates to.
* Eg. energy consumptium happens every month, this should be the date of invoice
* [optional]
*/
dataDate LocalDate
/** Last change date */
changeDate Instant required
/** The actual username logged into the system, that last changed the data */
changeUsername String required
/** Where this data originates from? Where were the data collected ? */
dataSource String
/** Who collected the data ? */
dataUser String
/** Comments added by the user */
dataComments String
/** The creation date (insert). When the data was inserted into the system. */
creationDate Instant required
/** The actual username logged into the system, that inserted the data. NOT a reference to the user, but the login username. */
creationUsername String required
/** Record version for concurrency control. */
version Integer
}
/**
* Input data upload file
* Users can upload an Excel file with InputData that will automatically insert values in the table InputData
*/
@dto(mapstruct)
entity InputDataUpload {
// @@ List:: title;type;state
// @@ Update:: title;type;dataFile;comments;state
// @@ View:: title;type;dataFile;comments:state
//References:
//to Period - The period that this data belongs
//to PeriodVersion - The period version active, when the data was inserted
//to Organization (owner) - The owner of the data. The Organization responsable for generating this data (that consumed this value)
/** A simple text with a title, for human reference and better relation */
title String required
/** An Excel file, that must match a template for input */
dataFile Blob required
/** The name of the uploaded Excel file */
uploadFileName String
/** The generated name of the Excel file, used to save to disk */
diskFileName String
/** Type of the Upload */
type UploadType required
/** State of the Upload */
state UploadStatus required
/** Optional comments */
comments String
/** The creation date (insert). When the data was inserted into the system. */
creationDate Instant required
/** The actual username logged into the system, that inserted the data. NOT a reference to the user, but the login username. */
creationUsername String required
/** Record version for concurrency control. */
version Integer
}
/**
* Input data upload file
* Users can upload an Excel file with InputData that will automatically insert values in the table InputData
*/
@dto(mapstruct)
entity InputDataUploadLog {
//References:
//to InputDataUpload - The InputDataUpload that this log belongs
/** The log of the event. Eg. "InputDataUpload created"; "InputDataUpload replaced with new file"; "125 records inserted"; "User XPTO confirmed the file replacement." */
logMessage String required
/** The creation date (insert). When the data was inserted into the system. */
creationDate Instant required
/** The actual username logged into the system, that inserted the data. NOT a reference to the user, but the login username. */
creationUsername String required
/** Record version for concurrency control. */
version Integer
}
/**
* Output data Values
* The values calculated using the Variable.outputFormula, for all variables with Variable.output==TRUE.
*/
@dto(mapstruct)
entity OutputData {
//References:
//to Variable - The Variable that this data reports
//to Period - The period that this data belongs
//to PeriodVersion - The period version active, when the data was inserted
//to Unit (baseUnit) - The Unit of the variableValue. Its the unit configured in Variable.baseUnit
//to Organization (owner) - The owner of the data. The Organization responsable for generating this data (that consumed this value)
/** The evaluated value, calculated by Variable.outputFormula. This will probably represent an emission value. */
value BigDecimal required
/** Record version for concurrency control. */
version Integer
}
relationship OneToMany {
UnitType to Unit{unitType(name)}
Unit{fromUnit(name)} to UnitConverter{fromUnit(name)}
Unit{toUnit(name)} to UnitConverter{toUnit(name)}
Unit{baseUnit(name)} to Variable{baseUnit(name)}
VariableScope to VariableCategory{variableScope(name)}
VariableScope to Variable {variableScope(name)}
VariableCategory to Variable {variableCategory(name)}
Variable to VariableClass{variable(name)}
Period to PeriodVersion{period(name)}
//InputData references
Variable to InputData{variable(name)}
Period to InputData{period(name)}
PeriodVersion to InputData{periodVersion(name)}
Unit{sourceUnit} to InputData{sourceUnit(name)}
Unit to InputData{unit(name)}
Organization to InputData{owner(name)}
InputData to InputData{sourceInputData}
InputDataUpload to InputData{sourceInputDataUpload}
//InputDataUpload
Period to InputDataUpload{period(name)}
PeriodVersion to InputDataUpload{periodVersion(name)}
Organization to InputDataUpload{owner(name)}
//OutputData references
Variable to OutputData{variable(name)}
Period to OutputData{period(name)}
PeriodVersion to OutputData{periodVersion(name)}
Unit to OutputData{baseUnit(name)}
Organization to InputData{owner(name)}
//VariableUnits
Variable to VariableUnits{variable(name)}
Unit to VariableUnits{unit(name)}
//InputDataUploadLog
InputDataUpload to InputDataUploadLog{inputDataUpload(title)}
}
/** paginate Entry, Tag with infinite-scroll */
// paginate Organization, Metadata with pagination
service * with serviceClass