"Fix_COI_and_routes"

This commit is contained in:
Zenflow
2026-03-11 13:07:04 -05:00
parent c22ebbe45c
commit ff1eb455dc
2 changed files with 29 additions and 7 deletions

View File

@@ -144,16 +144,16 @@ export const formatCOI = (coi) => {
}
}
const value = coi.toFixed(2)
const value = (coi * 100).toFixed(2)
if (coi <= 5) {
if (coi <= 0.05) {
return {
value: `${value}%`,
level: 'low',
color: '#10b981',
description: 'Low inbreeding - Excellent genetic diversity'
}
} else if (coi <= 10) {
} else if (coi <= 0.10) {
return {
value: `${value}%`,
level: 'medium',

View File

@@ -124,8 +124,8 @@ function calculateCOI(db, sireId, damId) {
// 'trial-pairing' as dog IDs and return 404/wrong data.
// =====================================================================
// POST /api/pedigree/trial-pairing
router.post('/trial-pairing', (req, res) => {
// POST /api/pedigree/trial-pairing (alias for /coi)
router.post(['/trial-pairing', '/coi'], (req, res) => {
try {
const { sire_id, dam_id } = req.body;
if (!sire_id || !dam_id) {
@@ -149,8 +149,8 @@ router.post('/trial-pairing', (req, res) => {
coi: result.coefficient,
commonAncestors: result.commonAncestors,
directRelation: relation.related ? relation.relationship : null,
recommendation: result.coefficient < 5 ? 'Low risk'
: result.coefficient < 10 ? 'Moderate risk'
recommendation: result.coefficient < 0.05 ? 'Low risk'
: result.coefficient < 0.10 ? 'Moderate risk'
: 'High risk'
});
} catch (error) {
@@ -158,6 +158,28 @@ router.post('/trial-pairing', (req, res) => {
}
});
// GET /api/pedigree/:id/coi
router.get('/:id/coi', (req, res) => {
try {
const db = getDatabase();
const parents = db.prepare('SELECT parent_type, parent_id FROM parents WHERE dog_id = ?').all(req.params.id);
const sire = parents.find(p => p.parent_type === 'sire');
const dam = parents.find(p => p.parent_type === 'dam');
if (!sire || !dam) {
return res.json({ coi: 0, commonAncestors: [], message: 'Incomplete parent data' });
}
const result = calculateCOI(db, sire.parent_id, dam.parent_id);
res.json({
coi: result.coefficient,
commonAncestors: result.commonAncestors
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// GET /api/pedigree/relations/:sireId/:damId
router.get('/relations/:sireId/:damId', (req, res) => {
try {