ferrero-naming-tool/backend/data.json
DJP 7233a49252 Add v2 with PostgreSQL tracking ID system for asset lifecycle management
Implements complete tracking ID system for linking derivative assets to master files with automatic metadata inheritance.

Major features:
- v2 web interface (public-v2/) with tracking ID support
- PostgreSQL database (Docker) for master asset metadata storage
- 6-character alphanumeric tracking IDs with collision-free generation
- OpenText DAM integration with metadata import script
- Upload simulator showing filename transformations (strips job number and tracking ID)
- Visual transformation flow display
- Complete asset lifecycle event logging with triggers
- Database schema with optimized indexes and views
- Helper scripts for database management (db-start.sh, db-stop.sh)

Technical implementation:
- PostgreSQL 15 in Docker on port 5433 (md5 auth for MAMP compatibility)
- PHP PDO with singleton database class
- Automatic event logging via PostgreSQL triggers
- JSON storage for naming convention data (shared with v1)
- Case-sensitive tracking ID input fields

Both v1 (simple) and v2 (tracking) versions coexist for different workflows.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 12:24:35 -04:00

526 lines
No EOL
13 KiB
JSON

{
"naming_structure": {
"BRAND_CODE": {
"min_length": 2,
"max_length": 5,
"description": "Brand Code"
},
"COUNTRY_CODE": {
"min_length": 2,
"max_length": 2,
"description": "Country Code (ISO 3166-1)"
},
"LANGUAGE_CODE": {
"min_length": 2,
"max_length": 3,
"description": "Language Code (ISO 639-1/639-2)"
},
"SUBJECT_TITLE": {
"min_length": 1,
"max_length": 15,
"description": "Subject Title"
},
"ASSET_TYPE": {
"min_length": 3,
"max_length": 3,
"description": "Asset Type"
},
"SPOT_VERSION": {
"min_length": 3,
"max_length": 3,
"description": "Spot Version (add MST if Master File)"
},
"SECONDS": {
"min_length": 2,
"max_length": 3,
"description": "Duration in Seconds"
},
"ASPECT_RATIO": {
"min_length": 4,
"max_length": 4,
"description": "Aspect Ratio"
}
},
"brands": {
"MC": "MON CHERI",
"PK": "POCKET COFFEE",
"ROC": "ROCHER",
"FPR": "FERRERO PRESTIGE",
"KMAX": "KINDER MAXI",
"KSB": "SCHOKOBONS",
"KCH": "KINDER CHOCOLATE",
"RAF": "RAFFAELLO",
"DUN": "DUPLO NOCCIOLATO",
"TRO": "TRONKY",
"KCY": "KINDER COUNTRY",
"BUE": "KINDER BUENO",
"KSUR": "KINDER SURPRISE",
"KMS": "KINDER MAXI SURPRISE",
"KPI": "KINDER PINGUI",
"NUT": "NUTELLA",
"NUGO": "NUTELLA & GO",
"FFIE": "FERRERO FIESTA",
"KBRI": "KINDER BRIOSS",
"FBRI": "FERRERO BRIOSS",
"KFL": "KINDER MILK SLICE",
"KCOL": "KINDER COLAZIONE PIU",
"KDEL": "KINDER DELICE",
"KCHO": "KINDER CHOCOFRESH",
"KHH": "KINDER HAPPY HIPPO",
"TT": "TIC TAC",
"ET": "ESTATHE",
"DEL": "DELACRE",
"KUS": "KUSSCHEN",
"KPAR": "KINDER PARADISO",
"KMKNG": "KINDER MAXI KING",
"HAN": "HANUTA",
"GIO": "GIOTTO",
"KJOY": "KINDER MERENDERO/JOY",
"KPC": "KINDER PAN E CIOC",
"YOG": "YOGURETTE",
"DU": "DUPLO",
"KSBCR": "KINDER SCHOKOBONS CRISPY",
"KMIX": "KINDER MIX",
"TTCHE": "TIC TAC CHEWY",
"100GR": "100 GRAND",
"BRUTH": "BABY RUTH",
"GOOB": "GOOBERS",
"BTF": "BUTTERFINGER",
"CHU": "CHUNKY",
"CRU": "CRUNCH",
"RAIS": "RAISINETS",
"SCAPS": "SNO CAPS",
"UPPR": "UOVA PASQUA PRALINE",
"MWF": "MISTE WAFERATE(COLLECTION)",
"KPLUM": "KINDER PLUMCAKE",
"TTJEL": "TIC TAC JELLY",
"OVMOD": "OVETTI MODELLATI",
"KCHIC": "KINDER CHOCOLATE ICE CREAM",
"BUEIC": "KINDER BUENO ICE CREAM",
"ROIC": "FERRERO ROCHER ICE CREAM",
"RAFIC": "RAFFAELLO ICE CREAM",
"ETIC": "ESTATHE ICE",
"RDN": "RONDNOIR",
"TTSF": "TIC TAC CHILL/TIC TAC BREEZE",
"KCCK": "KINDER CRUNCHY COOKIES",
"KDUO": "KINDER DUO",
"KTRO": "KINDER TRONKY",
"FRO": "FERRERO ROCHER ORIGINS",
"KSURM": "KINDER SORPRESA MAXI",
"NUCOK": "NUTELLA COOKIES",
"RDNIC": "RONDNOIR ICE CREAM",
"PKIC": "POCKET COFFEE ICE CREAM",
"YOGIC": "YOGURETTE ICE CREAM",
"FCRO": "FIGURA CAVA ROCHER",
"SQGM": "SQUARES GRANDI MARCHE",
"BURT": "BURTONS",
"FTG": "TAVOLETTE GRANDI MARCHE",
"NUBR": "NUTELLA B-READY",
"TTTWO": "TIC TAC TWO",
"NUIC": "NUTELLA ICE CREAM",
"HANR": "HANUTA RIEGEL",
"KCHH": "KINDER CIOCCOLATO HAPPY",
"KTRIS": "KINDER TRIS",
"NUCRE": "NUTELLA CREPES",
"NUDON": "NUTELLA DONUT",
"GFRO": "GRAND FERRERO ROCHER",
"MBPAT": "MA BARRE PATISSIERE",
"TROSN": "TRONKY SANDWICH",
"KCRO": "KINDER CROISSANT",
"NUCRO": "NUTELLA CROISSANT",
"RABIS": "RAFFAELLO BISCUITS",
"KCYB": "KINDER COUNTRY BISCUIT",
"KCARD": "KINDER CARDS",
"KHMO": "KINDER HAPPY MOMENTS",
"KKIND": "KINDER KINDERINI",
"KKOR": "KINDER KORNETTI",
"THO": "THORNTONS",
"DDCH": "DELACRE DELICHOC",
"KCRE": "KINDER CREAMY",
"NUBIS": "NUTELLA BISCUITS",
"ROMO": "FERRERO ROCHER MOMENTS",
"KCLA": "KINDER COEUR AU LAIT",
"FULF": "FF ENERGY BA",
"KFIG": "KINDER FIGURE",
"KCER": "KINDER CEREALE",
"FOX": "FOX",
"EATN": "EAT NATURAL",
"FCIC": "FERRERO COLLECTION EXPERIENCE ICE CREAM",
"RAFTE": "RAFFAELLO TRIPLE EXPERIENCE ICE CREAM"
},
"countries": {
"GL": "Global",
"AD": "Andorra",
"AE": "United Arab Emirates",
"AF": "Afghanistan",
"AG": "Antigua and Barbuda",
"AI": "Anguilla",
"AL": "Albania",
"AM": "Armenia",
"AO": "Angola",
"AQ": "Antarctica",
"AR": "Argentina",
"AS": "American Samoa",
"AT": "Austria",
"AU": "Australia",
"AW": "Aruba",
"AX": "Åland Islands",
"AZ": "Azerbaijan",
"BA": "Bosnia and Herzegovina",
"BB": "Barbados",
"BD": "Bangladesh",
"BE": "Belgium",
"BF": "Burkina Faso",
"BG": "Bulgaria",
"BH": "Bahrain",
"BI": "Burundi",
"BJ": "Benin",
"BL": "Saint Barthélemy",
"BM": "Bermuda",
"BN": "Brunei",
"BO": "Bolivia",
"BQ": "Caribbean Netherlands",
"BR": "Brazil",
"BS": "Bahamas",
"BT": "Bhutan",
"BV": "Bouvet Island",
"BW": "Botswana",
"BY": "Belarus",
"BZ": "Belize",
"CA": "Canada",
"CC": "Cocos (Keeling) Islands",
"CD": "Congo (DRC)",
"CF": "Central African Republic",
"CG": "Congo (Republic)",
"CH": "Switzerland",
"CI": "Côte d'Ivoire",
"CK": "Cook Islands",
"CL": "Chile",
"CM": "Cameroon",
"CN": "China",
"CO": "Colombia",
"CR": "Costa Rica",
"CU": "Cuba",
"CV": "Cape Verde",
"CW": "Curaçao",
"CX": "Christmas Island",
"CY": "Cyprus",
"CZ": "Czech Republic",
"DE": "Germany",
"DJ": "Djibouti",
"DK": "Denmark",
"DM": "Dominica",
"DO": "Dominican Republic",
"DZ": "Algeria",
"EC": "Ecuador",
"EE": "Estonia",
"EG": "Egypt",
"EH": "Western Sahara",
"ER": "Eritrea",
"ES": "Spain",
"ET": "Ethiopia",
"FI": "Finland",
"FJ": "Fiji",
"FK": "Falkland Islands",
"FM": "Micronesia",
"FO": "Faroe Islands",
"FR": "France",
"GA": "Gabon",
"GB": "United Kingdom",
"GD": "Grenada",
"GE": "Georgia",
"GF": "French Guiana",
"GG": "Guernsey",
"GH": "Ghana",
"GI": "Gibraltar",
"GL": "Greenland",
"GM": "Gambia",
"GN": "Guinea",
"GP": "Guadeloupe",
"GQ": "Equatorial Guinea",
"GR": "Greece",
"GS": "South Georgia",
"GT": "Guatemala",
"GU": "Guam",
"GW": "Guinea-Bissau",
"GY": "Guyana",
"HK": "Hong Kong",
"HM": "Heard Island and McDonald Islands",
"HN": "Honduras",
"HR": "Croatia",
"HT": "Haiti",
"HU": "Hungary",
"ID": "Indonesia",
"IE": "Ireland",
"IL": "Israel",
"IM": "Isle of Man",
"IN": "India",
"IO": "British Indian Ocean Territory",
"IQ": "Iraq",
"IR": "Iran",
"IS": "Iceland",
"IT": "Italy",
"JE": "Jersey",
"JM": "Jamaica",
"JO": "Jordan",
"JP": "Japan",
"KE": "Kenya",
"KG": "Kyrgyzstan",
"KH": "Cambodia",
"KI": "Kiribati",
"KM": "Comoros",
"KN": "Saint Kitts and Nevis",
"KP": "North Korea",
"KR": "South Korea",
"KW": "Kuwait",
"KY": "Cayman Islands",
"KZ": "Kazakhstan",
"LA": "Laos",
"LB": "Lebanon",
"LC": "Saint Lucia",
"LI": "Liechtenstein",
"LK": "Sri Lanka",
"LR": "Liberia",
"LS": "Lesotho",
"LT": "Lithuania",
"LU": "Luxembourg",
"LV": "Latvia",
"LY": "Libya",
"MA": "Morocco",
"MC": "Monaco",
"MD": "Moldova",
"ME": "Montenegro",
"MF": "Saint Martin",
"MG": "Madagascar",
"MH": "Marshall Islands",
"MK": "North Macedonia",
"ML": "Mali",
"MM": "Myanmar",
"MN": "Mongolia",
"MO": "Macao",
"MP": "Northern Mariana Islands",
"MQ": "Martinique",
"MR": "Mauritania",
"MS": "Montserrat",
"MT": "Malta",
"MU": "Mauritius",
"MV": "Maldives",
"MW": "Malawi",
"MX": "Mexico",
"MY": "Malaysia",
"MZ": "Mozambique",
"NA": "Namibia",
"NC": "New Caledonia",
"NE": "Niger",
"NF": "Norfolk Island",
"NG": "Nigeria",
"NI": "Nicaragua",
"NL": "Netherlands",
"NO": "Norway",
"NP": "Nepal",
"NR": "Nauru",
"NU": "Niue",
"NZ": "New Zealand",
"OM": "Oman",
"PA": "Panama",
"PE": "Peru",
"PF": "French Polynesia",
"PG": "Papua New Guinea",
"PH": "Philippines",
"PK": "Pakistan",
"PL": "Poland",
"PM": "Saint Pierre and Miquelon",
"PN": "Pitcairn Islands",
"PR": "Puerto Rico",
"PS": "Palestine",
"PT": "Portugal",
"PW": "Palau",
"PY": "Paraguay",
"QA": "Qatar",
"RE": "Réunion",
"RO": "Romania",
"RS": "Serbia",
"RU": "Russia",
"RW": "Rwanda",
"SA": "Saudi Arabia",
"SB": "Solomon Islands",
"SC": "Seychelles",
"SD": "Sudan",
"SE": "Sweden",
"SG": "Singapore",
"SH": "Saint Helena",
"SI": "Slovenia",
"SJ": "Svalbard and Jan Mayen",
"SK": "Slovakia",
"SL": "Sierra Leone",
"SM": "San Marino",
"SN": "Senegal",
"SO": "Somalia",
"SR": "Suriname",
"SS": "South Sudan",
"ST": "São Tomé and Príncipe",
"SV": "El Salvador",
"SX": "Sint Maarten",
"SY": "Syria",
"SZ": "Eswatini",
"TC": "Turks and Caicos Islands",
"TD": "Chad",
"TF": "French Southern Territories",
"TG": "Togo",
"TH": "Thailand",
"TJ": "Tajikistan",
"TK": "Tokelau",
"TL": "Timor-Leste",
"TM": "Turkmenistan",
"TN": "Tunisia",
"TO": "Tonga",
"TR": "Turkey",
"TT": "Trinidad and Tobago",
"TV": "Tuvalu",
"TW": "Taiwan",
"TZ": "Tanzania",
"UA": "Ukraine",
"UG": "Uganda",
"UM": "U.S. Minor Outlying Islands",
"US": "United States",
"UY": "Uruguay",
"UZ": "Uzbekistan",
"VA": "Vatican City",
"VC": "Saint Vincent and the Grenadines",
"VE": "Venezuela",
"VG": "British Virgin Islands",
"VI": "U.S. Virgin Islands",
"VN": "Vietnam",
"VU": "Vanuatu",
"WF": "Wallis and Futuna",
"WS": "Samoa",
"YE": "Yemen",
"YT": "Mayotte",
"ZA": "South Africa",
"ZM": "Zambia",
"ZW": "Zimbabwe"
},
"languages": {
"ar": "Arabic",
"cs": "Czech",
"da": "Danish",
"de": "German",
"el": "Greek",
"en": "English",
"es": "Spanish",
"fi": "Finnish",
"fr": "French",
"he": "Hebrew",
"hi": "Hindi",
"hu": "Hungarian",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"nl": "Dutch",
"no": "Norwegian",
"pl": "Polish",
"pt": "Portuguese",
"ro": "Romanian",
"ru": "Russian",
"sv": "Swedish",
"th": "Thai",
"tr": "Turkish",
"zh": "Chinese"
},
"asset_types": {
"FNT": "Font",
"GDT": "Gadget",
"GRG": "Group Guidelines",
"IMG": "Immagine Guida /",
"FPO": "Front of Pack Image",
"LGL": "Local Guidelines",
"LOG": "Logo",
"MLF": "Marketing Leaflet",
"OLV": "On Line Video",
"PAW": "Pack Artworks",
"PKI": "Pack Images",
"POS": "POS Material",
"PDM": "Product Demo",
"PRI": "Product Images",
"QRC": "QR code",
"SND": "Sound",
"SIP": "Styleguide Internal Properties",
"SGL": "Styleguide Licenses",
"TVC": "TVC",
"VIE": "Visual Identity Elements",
"3RT": "3D Real Toys",
"APC": "Applaydu Characters",
"BBK": "Brand Book",
"BRC": "Brand Character",
"BSG": "Brand Signature",
"CKV": "Campaign Key Visual",
"CID": "Creative Idea",
"DAT": "Digital Assets/Toolkit",
"ECA": "E-COMM: A+",
"ECB": "E-COMM: Back Packshot",
"EBS": "E-COMM: Beauty shot",
"EBR": "E-COMM: Brand Store",
"EEM": "E-COMM: E-Media",
"EHI": "E-COMM: Hero Image",
"EIL": "E-COMM: Ingredients List",
"EOP": "E-COMM: Out Of Pack",
"EUG": "E-COMM: UGC",
"EWB": "E-COMM: Why Buy",
"FLA": "Flyer Artworks"
},
"aspect_ratios": [
"16x9",
"1x1",
"2x3",
"4x5",
"5x4",
"9x16"
],
"spot_versions": [
"Master"
],
"examples": [
{
"brand": "Raffaello",
"filename": "RAF_GL_en_ME MOMENT_OLV_6S_1x1",
"breakdown": {
"brand_code": "RAF",
"country_code": "GL",
"language_code": "en",
"subject_title": "ME MOMENT",
"asset_type": "OLV",
"spot_version": "",
"seconds": "6S",
"aspect_ratio": "1x1"
}
},
{
"brand": "Kinder Gran Sorpresa",
"filename": "KGS_IT_it_IN THE AIR_TVC_MST_20S_16x9",
"breakdown": {
"brand_code": "KGS",
"country_code": "IT",
"language_code": "it",
"subject_title": "IN THE AIR",
"asset_type": "TVC",
"spot_version": "MST",
"seconds": "20S",
"aspect_ratio": "16x9"
}
},
{
"brand": "Bueno Ice Cream",
"filename": "BIC_GL_en_HOW BUENO IT IS_OLV_6S_1x1",
"breakdown": {
"brand_code": "BIC",
"country_code": "GL",
"language_code": "en",
"subject_title": "HOW BUENO IT IS",
"asset_type": "OLV",
"spot_version": "",
"seconds": "6S",
"aspect_ratio": "1x1"
}
}
]
}