@codetanzania/ewea-case
Version:
A representation of an entity which define and track cases during an emergency event.
392 lines (381 loc) • 10.9 kB
JavaScript
import {
PREDEFINE_NAMESPACE_CASESEVERITY,
PREDEFINE_NAMESPACE_CASESTAGE,
} from '@codetanzania/ewea-internals';
import { get } from 'lodash';
import moment from 'moment';
import { ObjectId } from '@lykmapipo/mongoose-common';
import { Predefine } from '@lykmapipo/predefine';
import { DEFAULT_SEEDS } from '@codetanzania/ewea-common';
import { Event } from '@codetanzania/ewea-event';
import { AUTOPOPULATE_OPTION_PREDEFINE, COUNTRY_CODE } from '../internals';
/**
* @name group
* @description Event group underwhich a case belongs to.
*
* @memberof Case
*
* @type {object}
* @property {object} type - schema(data) type
* @property {boolean} required - mark required
* @property {boolean} index - ensure database index
* @property {boolean} exists - ensure ref exists before save
* @property {object} autopopulate - auto populate(eager loading) options
* @property {boolean} taggable - allow field use for tagging
* @property {boolean} exportable - allow field use for exporting
* @property {boolean} aggregatable - allow field use for aggregation
* @property {boolean} default - default value set when none provided
* @property {object} fake - fake data generator options
*
* @author lally elias <lallyelias87@gmail.com>
* @since 0.1.0
* @version 0.1.0
* @instance
* @example
* {
* _id: '5dde6ca23631a92c2d616253',
* strings: { name: { en: 'Meteorological' }, code: 'MAT' },
* }
*/
export const group = {
type: ObjectId,
ref: Predefine.MODEL_NAME,
// required: true,
index: true,
exists: true,
aggregatable: { unwind: true },
autopopulate: AUTOPOPULATE_OPTION_PREDEFINE,
taggable: true,
exportable: {
format: (v) => get(v, 'strings.name.en'),
default: 'NA',
},
default: undefined,
};
/**
* @name type
* @description Event type underwhich a case belongs to.
*
* @memberof Case
*
* @type {object}
* @property {object} type - schema(data) type
* @property {boolean} required - mark required
* @property {boolean} index - ensure database index
* @property {boolean} exists - ensure ref exists before save
* @property {object} autopopulate - auto populate(eager loading) options
* @property {boolean} taggable - allow field use for tagging
* @property {boolean} exportable - allow field use for exporting
* @property {boolean} aggregatable - allow field use for aggregation
* @property {boolean} default - default value set when none provided
* @property {object} fake - fake data generator options
*
* @author lally elias <lallyelias87@gmail.com>
* @since 0.1.0
* @version 0.1.0
* @instance
* @example
* {
* _id: '5dde6ca33631a92c2d616298',
* strings: { name: { en: 'Flood' }, code: 'FL' },
* }
*/
export const type = {
type: ObjectId,
ref: Predefine.MODEL_NAME,
// required: true,
index: true,
exists: true,
aggregatable: { unwind: true },
autopopulate: AUTOPOPULATE_OPTION_PREDEFINE,
taggable: true,
exportable: {
format: (v) => get(v, 'strings.name.en'),
default: 'NA',
},
default: undefined,
};
/**
* @name event
* @description Event underwhich a case belongs to.
*
* @memberof Case
*
* @type {object}
* @property {object} type - schema(data) type
* @property {boolean} required - mark required
* @property {boolean} index - ensure database index
* @property {boolean} exists - ensure ref exists before save
* @property {object} autopopulate - auto populate(eager loading) options
* @property {boolean} taggable - allow field use for tagging
* @property {boolean} exportable - allow field use for exporting
* @property {boolean} aggregatable - allow field use for aggregation
* @property {boolean} default - default value set when none provided
* @property {object} fake - fake data generator options
*
* @author lally elias <lallyelias87@gmail.com>
* @since 0.1.0
* @version 0.1.0
* @instance
* @example
* {
* _id: '5dde6ca33631a92c2d616298',
* strings: { name: { en: 'Flood' }, code: 'FL' },
* }
*/
export const event = {
type: ObjectId,
ref: Event.MODEL_NAME,
// required: true,
index: true,
exists: true,
aggregatable: { unwind: true },
autopopulate: Event.OPTION_AUTOPOPULATE,
taggable: true,
exportable: {
format: (v) => get(v, 'strings.name.en'),
default: 'NA',
},
default: undefined,
};
/**
* @name stage
* @description Currently assigned stage of a case.
*
* @memberof Case
*
* @type {object}
* @property {object} type - schema(data) type
* @property {boolean} required - mark required
* @property {boolean} index - ensure database index
* @property {boolean} exists - ensure ref exists before save
* @property {object} autopopulate - auto populate(eager loading) options
* @property {boolean} taggable - allow field use for tagging
* @property {boolean} exportable - allow field use for exporting
* @property {boolean} aggregatable - allow field use for aggregation
* @property {boolean} default - default value set when none provided
* @property {object} fake - fake data generator options
*
* @author lally elias <lallyelias87@gmail.com>
* @since 0.4.0
* @version 0.1.0
* @instance
* @example
* {
* _id: '5dde6ca23631a92c2d616250',
* strings: { name: { en: 'Confirmed' } },
* }
*/
export const stage = {
type: ObjectId,
ref: Predefine.MODEL_NAME,
// required: true,
index: true,
exists: true,
aggregatable: { unwind: true },
autopopulate: AUTOPOPULATE_OPTION_PREDEFINE,
taggable: true,
exportable: {
format: (v) => get(v, 'strings.name.en'),
default: 'NA',
},
default: DEFAULT_SEEDS[PREDEFINE_NAMESPACE_CASESTAGE],
};
/**
* @name severity
* @description Currently assigned severity of a case.
*
* @memberof Case
*
* @type {object}
* @property {object} type - schema(data) type
* @property {boolean} required - mark required
* @property {boolean} index - ensure database index
* @property {boolean} exists - ensure ref exists before save
* @property {object} autopopulate - auto populate(eager loading) options
* @property {boolean} taggable - allow field use for tagging
* @property {boolean} exportable - allow field use for exporting
* @property {boolean} aggregatable - allow field use for aggregation
* @property {boolean} default - default value set when none provided
* @property {object} fake - fake data generator options
*
* @author lally elias <lallyelias87@gmail.com>
* @since 0.4.0
* @version 0.1.0
* @instance
* @example
* {
* _id: '5dde6ca23631a92c2d616250',
* strings: { name: { en: 'Extreme' } },
* }
*/
export const severity = {
type: ObjectId,
ref: Predefine.MODEL_NAME,
// required: true,
index: true,
exists: true,
aggregatable: { unwind: true },
autopopulate: AUTOPOPULATE_OPTION_PREDEFINE,
taggable: true,
exportable: {
format: (v) => get(v, 'strings.name.en'),
default: 'NA',
},
default: DEFAULT_SEEDS[PREDEFINE_NAMESPACE_CASESEVERITY],
};
/**
* @name number
* @description Human readable, unique identifier of a case.
*
* It consist of two letters to identify the emergency event type
* (e.g. FL - Flood); the year of the event; a six-digit, sequential
* event number; and the three-letter ISO code for country of occurrence
* e.g FL-2001-000033-TZA.
*
* @memberof Case
*
* @type {object}
* @property {object} type - schema(data) type
* @property {boolean} trim - force trimming
* @property {boolean} uppercase - force value to uppercase
* @property {boolean} required - mark required
* @property {boolean} index - ensure database index
* @property {boolean} unique - ensure unique database index
* @property {boolean} searchable - allow searching
* @property {boolean} taggable - allow field use for tagging
* @property {boolean} exportable - allow field use for exporting
* @property {object} fake - fake data generator options
*
* @author lally elias <lallyelias87@gmail.com>
* @since 0.1.0
* @version 0.1.0
* @instance
* @example
* FL-2018-000033-TZA
*/
export const number = {
type: String,
trim: true,
uppercase: true,
required: true,
index: true,
// unique: true,
searchable: true,
taggable: true,
exportable: true,
sequenceable: {
prefix: function prefix() {
const year = moment(new Date()).format('YYYY-MM');
return year;
},
suffix: COUNTRY_CODE,
length: 4,
pad: '0',
separator: '-',
},
fake: {
generator: 'random',
type: 'uuid',
},
};
/**
* @name description
* @description A brief summary about a case i.e additional
* details that clarify more about a case.
*
* @memberof Case
*
* @type {object}
* @property {object} type - schema(data) type
* @property {boolean} trim - force trimming
* @property {boolean} required - mark required
* @property {boolean} index - ensure database index
* @property {boolean} searchable - allow for searching
* @property {boolean} exportable - allow field use for exporting
* @property {object} fake - fake data generator options
*
* @author lally elias <lallyelias87@gmail.com>
* @since 0.1.0
* @version 0.1.0
* @instance
* @example
* Provide medical assistance on rescue mission.
*/
export const description = {
type: String,
trim: true,
// required: true,
index: true,
searchable: true,
exportable: true,
fake: {
generator: 'lorem',
type: 'sentence',
},
};
/**
* @name remarks
* @description A brief human readable comments and feedbacks
* about a case.
*
* @memberof Case
*
* @type {object}
* @property {object} type - schema(data) type
* @property {boolean} trim - force trimming
* @property {boolean} index - ensure database index
* @property {boolean} searchable - allow for searching
* @property {boolean} exportable - allow field use for exporting
* @property {object} fake - fake data generator options
*
* @author lally elias <lallyelias87@gmail.com>
* @since 0.1.0
* @version 0.1.0
* @instance
* @example
* Requested first aid were provided to the victim immediately.
*/
export const remarks = {
type: String,
trim: true,
index: true,
searchable: true,
exportable: true,
fake: {
generator: 'lorem',
type: 'sentence',
},
};
/**
* @name outcome
* @description An outcome of about a case followup.
*
* @memberof Case
*
* @type {object}
* @property {object} type - schema(data) type
* @property {boolean} trim - force trimming
* @property {boolean} index - ensure database index
* @property {boolean} searchable - allow for searching
* @property {boolean} exportable - allow field use for exporting
* @property {object} fake - fake data generator options
*
* @author lally elias <lallyelias87@gmail.com>
* @since 0.1.0
* @version 0.1.0
* @instance
* @example
* Home
*/
export const outcome = {
type: String,
trim: true,
index: true,
searchable: true,
exportable: true,
fake: {
generator: 'lorem',
type: 'sentence',
},
};