Skip to main content

Cat Aggregate

Aggregates Definition

This file defines the cat aggregate structure within the Roll Claw domain model.

Implementation

Cat Aggregate Definition

File: domain/aggregates/cat_aggregate.pseudo

// Cat Aggregate - Root entity for a cat with associated entities

class Cat {
// Identity
string id
string name
List<string> nicknames

// Properties
Gender gender
CoatPattern coatPattern
CoatColor primaryColor
List<CoatColor> secondaryColors
string distinctiveFeatures
EyeColor eyeColor
boolean isEarTipped
string earTippedSide // "left", "right", or null
boolean isNeutered
boolean isSpayed
boolean isMicrochipped
boolean isPet // vs feral
string microchipId

// References
Date firstSeen
Location lastKnownLocation
CatStatus status
List<MedicalProcedure> medicalHistory
List<MedicalCondition> medicalConditions
List<Sighting> sightingHistory
AccessLevel accessLevel

// Relationships
Map<Cat, Relationship> relationships
Map<Cat, RelationshipConfidence> relationshipConfidence
List<SocialGroup> socialGroups

// Methods
function addRelationship(Cat otherCat, Relationship type, RelationshipConfidence confidence)
function addNickname(string nickname)
function updateStatus(CatStatus newStatus, Date date)
function recordMedicalProcedure(MedicalProcedure procedure)
function recordSighting(Sighting sighting)
function diagnoseMedicalCondition(MedicalCondition condition)
function getMaternalSiblings()
function getPaternalSiblings()
function getFriends()
function getConflicts()
function getChildren()
function getParents()
function updateAccessLevel(AccessLevel newLevel, Person authorizedBy, Date date)
function assignToSocialGroup(SocialGroup group)
function removeFromSocialGroup(SocialGroup group)
function updateDescription(Map<string, string> attributes)
function getLastSeenTimestamp()
function getDaysSinceLastSighting(Date currentDate)
function isPotentiallyMissing(Date currentDate, int thresholdDays)
function getPreferredLocations()
function recordMicrochip(string chipId, Date date, MedicalProvider provider)
function getAgeGroup()
function isIndoor()
function isOutdoor()
function isIndoorOutdoor()
function hasConflictWith(Cat otherCat)
function getFriendshipStrength(Cat otherCat)
function getLocationHistory(Date startDate, Date endDate)
function getMovementPattern()
function getVaccinationStatus()
function needsVaccination()
function getActiveConditions()
}

class CatStatus {
CatStatus statusType // ACTIVE, MISSING, DECEASED, RELOCATED, ADOPTED
boolean isActive
boolean isDeceased
boolean isMissing
boolean isRelocated
boolean isAdopted
Date statusDate
string statusNotes
Person reportedBy
Colony currentColony
Colony previousColony // if relocated
string deathCause // if deceased
string relocatedTo // if relocated
Person adoptedBy // if adopted

// Methods
function getDaysInStatus(Date currentDate)
function wasReportedMissing()
function getReasonForStatus()
}

class SocialGroup {
// Identity
string id
string name

// Properties
List<Cat> members
Date formed
string description
Location primaryTerritory
List<Location> frequentedLocations

// Methods
function addMember(Cat cat)
function removeMember(Cat cat)
function hasConflictWithGroup(SocialGroup otherGroup)
function getLeader()
function getSize()
function getFormationDuration(Date currentDate)
function getMembershipHistory(Cat cat)
}

class RelationshipRecord {
// Properties
Cat cat1
Cat cat2
Relationship type
RelationshipConfidence confidence
Date established
Person reportedBy
string notes

// Methods
function updateConfidence(RelationshipConfidence newConfidence, Person by)
function addEvidenceNotes(string evidence)
function getDuration(Date currentDate)
}

class ConflictRecord {
// Properties
Cat cat1
Cat cat2
Date firstObserved
Date lastObserved
string severity // mild, moderate, severe
string notes
List<Location> conflictLocations
boolean isResolved
Date resolvedDate
string resolutionMethod

// Methods
function recordIncident(Date date, string details)
function escalateSeverity(string newSeverity, Date date)
function resolveConflict(string method, Date date)
function getConflictDuration()
function getFrequency()
}

class FamilyGroup {
// Properties
Cat mother
Cat fatherIfKnown
List<Cat> offspring
Date birthDate

// Methods
function addOffspring(Cat kitten)
function updateFather(Cat father, RelationshipConfidence confidence)
function getMaternallySiblings()
function getPaternalSiblings(Cat cat)
function getAgeOfOffspring(Date currentDate)
}
  • See the Domain Model Overview for more information on how this component fits into the overall domain model.