feat: add product-to-museum and channel mapping config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
38
src/config/museumMapping.ts
Normal file
38
src/config/museumMapping.ts
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
// Definitive mapping of ERP product descriptions to museum names.
|
||||||
|
// Priority order matters — first match wins (handles combo tickets).
|
||||||
|
|
||||||
|
const MUSEUM_KEYWORDS: [string, string[]][] = [
|
||||||
|
['Revelation Exhibition', ['Revelation', 'الوحي']],
|
||||||
|
['Creation Story Museum', ['Creation Story', 'قصة الخلق']],
|
||||||
|
['Holy Quraan Museum', ['Holy Quraan', 'القرآن الكريم']],
|
||||||
|
['Trail To Hira Cave', ['Trail To Hira', 'غار حراء']],
|
||||||
|
['Makkah Greets Us', ['Makkah Greets']],
|
||||||
|
['VIP Experience', ['VIP Experience']],
|
||||||
|
];
|
||||||
|
|
||||||
|
export const MUSEUM_NAMES = MUSEUM_KEYWORDS.map(([name]) => name);
|
||||||
|
|
||||||
|
export function getMuseumFromProduct(productDescription: string): string {
|
||||||
|
const desc = productDescription.trim();
|
||||||
|
for (const [museum, keywords] of MUSEUM_KEYWORDS) {
|
||||||
|
for (const kw of keywords) {
|
||||||
|
if (desc.includes(kw)) return museum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 'Other';
|
||||||
|
}
|
||||||
|
|
||||||
|
export const CHANNEL_LABELS: Record<string, string> = {
|
||||||
|
'B2C': 'HiHala Website/App',
|
||||||
|
'B2B': 'B2B',
|
||||||
|
'POS': 'POS',
|
||||||
|
'Safiyyah POS': 'Safiyyah POS',
|
||||||
|
'Standalone': 'Standalone',
|
||||||
|
'Mobile': 'Mobile',
|
||||||
|
'Viva': 'Viva',
|
||||||
|
'IT': 'IT',
|
||||||
|
};
|
||||||
|
|
||||||
|
export function getChannelLabel(operatingAreaName: string): string {
|
||||||
|
return CHANNEL_LABELS[operatingAreaName] || operatingAreaName;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user