"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 { return {
value: `${value}%`, value: `${value}%`,
level: 'low', level: 'low',
color: '#10b981', color: '#10b981',
description: 'Low inbreeding - Excellent genetic diversity' description: 'Low inbreeding - Excellent genetic diversity'
} }
} else if (coi <= 10) { } else if (coi <= 0.10) {
return { return {
value: `${value}%`, value: `${value}%`,
level: 'medium', level: 'medium',

View File

@@ -124,8 +124,8 @@ function calculateCOI(db, sireId, damId) {
// 'trial-pairing' as dog IDs and return 404/wrong data. // 'trial-pairing' as dog IDs and return 404/wrong data.
// ===================================================================== // =====================================================================
// POST /api/pedigree/trial-pairing // POST /api/pedigree/trial-pairing (alias for /coi)
router.post('/trial-pairing', (req, res) => { router.post(['/trial-pairing', '/coi'], (req, res) => {
try { try {
const { sire_id, dam_id } = req.body; const { sire_id, dam_id } = req.body;
if (!sire_id || !dam_id) { if (!sire_id || !dam_id) {
@@ -149,8 +149,8 @@ router.post('/trial-pairing', (req, res) => {
coi: result.coefficient, coi: result.coefficient,
commonAncestors: result.commonAncestors, commonAncestors: result.commonAncestors,
directRelation: relation.related ? relation.relationship : null, directRelation: relation.related ? relation.relationship : null,
recommendation: result.coefficient < 5 ? 'Low risk' recommendation: result.coefficient < 0.05 ? 'Low risk'
: result.coefficient < 10 ? 'Moderate risk' : result.coefficient < 0.10 ? 'Moderate risk'
: 'High risk' : 'High risk'
}); });
} catch (error) { } 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 // GET /api/pedigree/relations/:sireId/:damId
router.get('/relations/:sireId/:damId', (req, res) => { router.get('/relations/:sireId/:damId', (req, res) => {
try { try {