Add grouped replenishment analysis
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m1s
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m1s
This commit is contained in:
37
src/productParsing.ts
Normal file
37
src/productParsing.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
const sizeOrder = ['2', '4', '6', '8', '10', '12', '14', '16', 'PP', 'P', 'M', 'G', 'GG', 'XG', 'G1', 'G2', 'G3', 'G4', 'G5'];
|
||||
const sizeSet = new Set(sizeOrder);
|
||||
|
||||
export const normalizeProductText = (value: string) => value.replace(/\s+/g, ' ').trim();
|
||||
|
||||
export const sortProductSizes = (sizes: string[]) => [...sizes].sort((a, b) => {
|
||||
const indexA = sizeOrder.indexOf(a);
|
||||
const indexB = sizeOrder.indexOf(b);
|
||||
if (indexA !== -1 || indexB !== -1) {
|
||||
return (indexA === -1 ? Number.MAX_SAFE_INTEGER : indexA) - (indexB === -1 ? Number.MAX_SAFE_INTEGER : indexB);
|
||||
}
|
||||
return a.localeCompare(b, 'pt-BR');
|
||||
});
|
||||
|
||||
export const parseProductName = (name: string) => {
|
||||
const cleanName = normalizeProductText(name);
|
||||
const explicitSizeMatch = cleanName.match(/\bTAMANHO\s*-?\s*([A-Z0-9]+)\b/i);
|
||||
const trailingTokenMatch = cleanName.match(/(?:\s+-\s+|\s)([A-Z0-9]+)$/i);
|
||||
const trailingToken = trailingTokenMatch?.[1]?.toUpperCase() || '';
|
||||
const size = (explicitSizeMatch?.[1] || (sizeSet.has(trailingToken) ? trailingToken : '')).toUpperCase();
|
||||
|
||||
const colorMatch = cleanName.match(/\bCOR\s+(.+?)(?:\s+TAMANHO|\s+-\s+[A-Z0-9]+$|$)/i);
|
||||
const color = normalizeProductText(colorMatch?.[1] || '');
|
||||
|
||||
let baseName = cleanName
|
||||
.replace(/\bCOR\s+.+?(?:\s+TAMANHO\s*-?\s*[A-Z0-9]+|\s+-\s+[A-Z0-9]+$|$)/i, '')
|
||||
.replace(/\bTAMANHO\s*-?\s*[A-Z0-9]+\b/i, '')
|
||||
.replace(/\s+-\s*[A-Z0-9]+$/i, '');
|
||||
|
||||
baseName = normalizeProductText(baseName.replace(/\s+-\s*$/g, ''));
|
||||
|
||||
return {
|
||||
baseName: baseName || cleanName,
|
||||
color,
|
||||
size
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user