UNPKG

@ansvar/singapore-law-mcp

Version:

Complete Singapore law database — 523 Acts, 28K+ provisions from Singapore Statutes Online (sso.agc.gov.sg) with full-text search, definitions, and citation support

52 lines 2.08 kB
/** * get_eu_basis — Get EU/international legal basis for a Singapore statute. */ import { resolveDocumentId } from '../utils/statute-id.js'; import { generateResponseMetadata } from '../utils/metadata.js'; export async function getEUBasis(db, input) { const resolvedId = resolveDocumentId(db, input.document_id); if (!resolvedId) { return { results: [], _metadata: generateResponseMetadata(db) }; } // Check if EU reference tables exist try { db.prepare('SELECT 1 FROM eu_references LIMIT 1').get(); } catch { return { results: [], _metadata: { ...generateResponseMetadata(db), ...{ note: 'EU/international references not available in this database tier' }, }, }; } let sql = ` SELECT er.eu_document_id, ed.type as eu_document_type, COALESCE(ed.title, ed.short_name) as eu_document_title, er.reference_type, COUNT(*) as reference_count, MAX(er.implementation_status) as implementation_status FROM eu_references er LEFT JOIN eu_documents ed ON ed.id = er.eu_document_id WHERE er.document_id = ? `; const params = [resolvedId]; if (input.reference_types && input.reference_types.length > 0) { const placeholders = input.reference_types.map(() => '?').join(', '); sql += ` AND er.reference_type IN (${placeholders})`; params.push(...input.reference_types); } sql += ' GROUP BY er.eu_document_id, er.reference_type ORDER BY reference_count DESC'; const rows = db.prepare(sql).all(...params); if (input.include_articles) { for (const row of rows) { const articles = db.prepare('SELECT DISTINCT eu_article FROM eu_references WHERE document_id = ? AND eu_document_id = ? AND eu_article IS NOT NULL').all(resolvedId, row.eu_document_id); row.articles = articles.map(a => a.eu_article); } } return { results: rows, _metadata: generateResponseMetadata(db) }; } //# sourceMappingURL=get-eu-basis.js.map