2024-07-18 17:51:24 +00:00
const MINIMUM _BASE _AREA = 0.5 ;
2024-07-23 19:51:21 +00:00
const MINIMUM _AREA _THREE _RATS = 1.5 ;
const AREA _PER _ADDITIONAL _RAT = 0.25 ;
2024-07-18 17:51:24 +00:00
const MAXIMUM _FALL _HEIGHT = 0.5 ;
2024-07-23 19:51:21 +00:00
const MINIMUM _LENGTH _LONG _SIDE = 0.8 ;
const MINIMUM _LENGTH _SHORT _SIDE = 0.5 ;
2024-07-21 21:14:36 +00:00
const MINIMUM _FLOOR _HEIGHT = 0.3 ;
2024-07-18 17:51:24 +00:00
const FAILED _BASE _AREA = "base_area" ;
const FAILED _OVERALL _AREA = "overall_area" ;
const FAILED _FALL _HEIGHT = "fall_height" ;
const FAILED _NUM _RATS = "num_rats" ;
2024-07-23 19:51:21 +00:00
const FAILED _MINIMUM _LENGTH _LONG _SIDE = "length_long_side" ;
const FAILED _MINIMUM _LENGTH _SHORT _SIDE = "length_short_side" ;
2024-07-21 21:14:36 +00:00
const FAILED _FLOOR _HEIGHT = "floor_height"
2024-07-18 17:51:24 +00:00
const FAIL _CRITERIA = {
[ FAILED _BASE _AREA ] : ` Die Mindestgrundfläche des Käfigs muss ${ MINIMUM _BASE _AREA } m² (also z.B. 100x50cm) betragen. ` ,
[ FAILED _OVERALL _AREA ] : "Die Gesamtfläche im Käfig ist zu klein." ,
2024-07-21 20:57:58 +00:00
[ FAILED _FALL _HEIGHT ] : ` Die mögliche Fallhöhe darf nicht mehr als ${ ( MAXIMUM _FALL _HEIGHT * 100 ) . toFixed ( 0 ) } cm betragen. ` ,
2024-07-22 06:50:19 +00:00
[ FAILED _FLOOR _HEIGHT ] : ` Der Mindestabstand zwischen Ebenen muss ${ ( MINIMUM _FLOOR _HEIGHT * 100 ) . toFixed ( 0 ) } cm betragen. ` ,
2024-07-18 17:51:24 +00:00
[ FAILED _NUM _RATS ] : "Es müssen mindestens 3 Ratten zusammenleben, Paarhaltung ist nicht artgerecht." ,
2024-07-23 19:51:21 +00:00
[ FAILED _MINIMUM _LENGTH _LONG _SIDE ] : ` Die lange Seite des Käfig muss mindestens ${ ( MINIMUM _LENGTH _LONG _SIDE * 100 ) . toFixed ( 0 ) } cm lang sein um Rennen zu ermöglichen. ` ,
[ FAILED _MINIMUM _LENGTH _SHORT _SIDE ] : ` Die kurze Seite des Käfig muss mindestens ${ ( MINIMUM _LENGTH _SHORT _SIDE * 100 ) . toFixed ( 0 ) } cm lang sein. ` ,
2024-07-18 17:51:24 +00:00
} ;
class Dimensions {
2024-07-20 06:18:38 +00:00
constructor ( width , depth , height ) {
2024-07-18 17:51:24 +00:00
this . width = width ;
2024-07-20 06:18:38 +00:00
this . depth = depth ;
2024-07-18 17:51:24 +00:00
this . height = height ;
}
toString ( ) {
2024-07-20 06:18:38 +00:00
return ` ${ this . width } x ${ this . depth } x ${ this . height } ` ;
2024-07-18 17:51:24 +00:00
}
static fromDict ( data ) {
2024-07-20 06:18:38 +00:00
const { width , depth , height } = data ;
return new Dimensions ( width , depth , height ) ;
2024-07-18 17:51:24 +00:00
}
}
function overallAreaNeeded ( numOfRats ) {
if ( numOfRats < 3 || numOfRats > 15 ) {
throw new Error ( "This formula works only from 3 to 15 rats" ) ;
}
return MINIMUM _AREA _THREE _RATS + ( numOfRats - 3 ) * AREA _PER _ADDITIONAL _RAT ;
}
function cageCheck ( dimensions , numRats , numFullFloors ) {
let failedCriteria = { } ;
if ( numRats < 2 || numRats > 15 ) {
failedCriteria [ FAILED _NUM _RATS ] = FAIL _CRITERIA [ FAILED _NUM _RATS ] ;
}
2024-07-20 06:50:07 +00:00
const baseArea = dimensions . depth * dimensions . width ;
2024-07-18 17:51:24 +00:00
if ( baseArea < MINIMUM _BASE _AREA ) {
failedCriteria [ FAILED _BASE _AREA ] = FAIL _CRITERIA [ FAILED _BASE _AREA ] ;
}
const areaNeeded = overallAreaNeeded ( numRats ) ;
if ( baseArea * numFullFloors < areaNeeded ) {
failedCriteria [ FAILED _OVERALL _AREA ] = FAIL _CRITERIA [ FAILED _OVERALL _AREA ] ;
}
if ( dimensions . height / numFullFloors > MAXIMUM _FALL _HEIGHT ) {
failedCriteria [ FAILED _FALL _HEIGHT ] = FAIL _CRITERIA [ FAILED _FALL _HEIGHT ] ;
}
2024-07-23 19:51:21 +00:00
if ( dimensions . width < MINIMUM _LENGTH _LONG _SIDE && dimensions . depth < MINIMUM _LENGTH _LONG _SIDE ) {
failedCriteria [ FAILED _MINIMUM _LENGTH _LONG _SIDE ] = FAIL _CRITERIA [ FAILED _MINIMUM _LENGTH _LONG _SIDE ] ;
}
if ( dimensions . width < MINIMUM _LENGTH _SHORT _SIDE || dimensions . depth < MINIMUM _LENGTH _SHORT _SIDE ) {
failedCriteria [ FAILED _MINIMUM _LENGTH _SHORT _SIDE ] = FAIL _CRITERIA [ FAILED _MINIMUM _LENGTH _SHORT _SIDE ] ;
2024-07-18 17:51:24 +00:00
}
2024-07-21 21:14:36 +00:00
if ( dimensions . height / numFullFloors < MINIMUM _FLOOR _HEIGHT ) {
failedCriteria [ FAILED _FLOOR _HEIGHT ] = FAIL _CRITERIA [ FAILED _FLOOR _HEIGHT ] ;
}
2024-07-18 17:51:24 +00:00
return failedCriteria ;
}