From f154173f2dc52639a3d8b0b8deabcc053aa0e5b9 Mon Sep 17 00:00:00 2001 From: Renaud Date: Sun, 19 Oct 2025 21:19:42 +0200 Subject: [PATCH] Minima CCNPA + simulateur modal + calculette --- Minima CCNPA 2025 (1).xlsx | Bin 0 -> 212815 bytes app/(app)/minima-ccn/ccneac/page.tsx | 77 +- .../ccnpa/Minima CCNPA 2025 - CAT C.pdf | Bin 0 -> 70443 bytes .../minima-ccn/ccnpa/artistes-interpretes.tsx | 166 +++ .../minima-ccn/ccnpa/artistes-musiciens.tsx | 109 ++ .../minima-ccn/ccnpa/categorie-a-data.tsx | 615 +++++++++ .../ccnpa/categorie-b-fiction-data-part2.tsx | 799 ++++++++++++ .../ccnpa/categorie-b-fiction-data-part3.tsx | 603 +++++++++ .../ccnpa/categorie-b-fiction-data.tsx | 979 +++++++++++++++ .../minima-ccn/ccnpa/categorie-b-fiction.tsx | 90 ++ .../ccnpa/categorie-b-flux-data-part2.tsx | 828 +++++++++++++ .../ccnpa/categorie-b-flux-data-part3.tsx | 632 ++++++++++ .../ccnpa/categorie-b-flux-data.tsx | 1094 +++++++++++++++++ .../minima-ccn/ccnpa/categorie-b-flux.tsx | 92 ++ .../ccnpa/categorie-b-hors-data-part2.tsx | 352 ++++++ .../ccnpa/categorie-b-hors-data-part3.tsx | 334 +++++ .../ccnpa/categorie-b-hors-data.tsx | 367 ++++++ .../minima-ccn/ccnpa/categorie-b-hors.tsx | 92 ++ app/(app)/minima-ccn/ccnpa/categorie-c.tsx | 122 ++ .../minima-ccn/ccnpa/fiction-realisateur.tsx | 87 ++ app/(app)/minima-ccn/ccnpa/page.tsx | 351 ++++++ app/(app)/minima-ccn/ccnsvp/page.tsx | 89 +- app/(app)/minima-ccn/page.tsx | 26 +- components/Calculator.tsx | 13 +- components/simulateur/SimulateurContent.tsx | 7 +- hooks/useDraggableModal.ts | 126 ++ public/simulateur-embed-compact.html | 222 ++++ public/simulateur-embed.html | 211 ++++ 28 files changed, 8339 insertions(+), 144 deletions(-) create mode 100644 Minima CCNPA 2025 (1).xlsx create mode 100644 app/(app)/minima-ccn/ccnpa/Minima CCNPA 2025 - CAT C.pdf create mode 100644 app/(app)/minima-ccn/ccnpa/artistes-interpretes.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/artistes-musiciens.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-a-data.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data-part2.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data-part3.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-fiction.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-flux-data-part2.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-flux-data-part3.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-flux-data.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-flux.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-hors-data-part2.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-hors-data-part3.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-hors-data.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-b-hors.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/categorie-c.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/fiction-realisateur.tsx create mode 100644 app/(app)/minima-ccn/ccnpa/page.tsx create mode 100644 hooks/useDraggableModal.ts create mode 100644 public/simulateur-embed-compact.html diff --git a/Minima CCNPA 2025 (1).xlsx b/Minima CCNPA 2025 (1).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..15ad4ca8c21ce0e1543afa74dc8f6e07042a5423 GIT binary patch literal 212815 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 vzX}{P*xzIL-z)w-xcXu>)DL8hs{ literal 0 HcmV?d00001 diff --git a/app/(app)/minima-ccn/ccneac/page.tsx b/app/(app)/minima-ccn/ccneac/page.tsx index d4a4c13..9c03358 100644 --- a/app/(app)/minima-ccn/ccneac/page.tsx +++ b/app/(app)/minima-ccn/ccneac/page.tsx @@ -11,65 +11,22 @@ import ArtistesCirqueContent from './artistes-cirque-data'; import EmploisNonArtistiquesContent from './emplois-non-artistiques-data'; import SimulateurContent from '@/components/simulateur/SimulateurContent'; import CalculatorComponent from '@/components/Calculator'; +import { useDraggableModal } from '@/hooks/useDraggableModal'; export default function CCNEACPage() { usePageTitle("Minima CCNEAC"); const [isSimulateurOpen, setIsSimulateurOpen] = useState(false); const [isCalculatorOpen, setIsCalculatorOpen] = useState(false); const [modalPosition, setModalPosition] = useState({ x: 0, y: 0 }); - const [isDragging, setIsDragging] = useState(false); - const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 }); const modalRef = React.useRef(null); + // Gestion du drag & drop du modal - const handleMouseDown = (e: React.MouseEvent) => { - if (!modalRef.current) return; - - // Si c'est le premier drag, calculer la position réelle du modal - if (modalPosition.x === 0 && modalPosition.y === 0) { - const rect = modalRef.current.getBoundingClientRect(); - setModalPosition({ x: rect.left, y: rect.top }); - setDragOffset({ - x: e.clientX - rect.left, - y: e.clientY - rect.top, - }); - } else { - setDragOffset({ - x: e.clientX - modalPosition.x, - y: e.clientY - modalPosition.y, - }); - } - - setIsDragging(true); - }; - - useEffect(() => { - const handleMouseMove = (e: MouseEvent) => { - if (!isDragging) return; - - const newX = e.clientX - dragOffset.x; - const newY = e.clientY - dragOffset.y; - - setModalPosition({ - x: newX, - y: newY, - }); - }; - - const handleMouseUp = () => { - setIsDragging(false); - }; - - if (isDragging) { - document.addEventListener('mousemove', handleMouseMove); - document.addEventListener('mouseup', handleMouseUp); - } - - return () => { - document.removeEventListener('mousemove', handleMouseMove); - document.removeEventListener('mouseup', handleMouseUp); - }; - }, [isDragging, dragOffset]); + const { onPointerDown, onPointerMove, onPointerUp } = useDraggableModal( + modalRef, + setModalPosition, + { constrainToViewport: true, disableIframeDuringDrag: true } + ); // Écouter les messages de l'iframe pour ouvrir la calculatrice useEffect(() => { @@ -298,31 +255,23 @@ export default function CCNEACPage() { {/* Modale compacte qui sort du bouton */} {isSimulateurOpen && ( <> - {/* Overlay transparent pour fermer au clic */} -
{ - setIsSimulateurOpen(false); - setModalPosition({ x: 0, y: 0 }); // Réinitialiser la position - }} - /> - {/* Modale compacte déplaçable */}
e.stopPropagation()} > {/* Header draggable */}

@@ -335,7 +284,7 @@ export default function CCNEACPage() { }} className="p-1.5 rounded-lg hover:bg-slate-100 transition-colors" aria-label="Fermer le simulateur" - onMouseDown={(e) => e.stopPropagation()} + onPointerDown={(e) => e.stopPropagation()} > diff --git a/app/(app)/minima-ccn/ccnpa/Minima CCNPA 2025 - CAT C.pdf b/app/(app)/minima-ccn/ccnpa/Minima CCNPA 2025 - CAT C.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f5968eee63345fb46fd55909a178f95bf7d6a7f6 GIT binary patch literal 70443 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
)#+VTNq{fVp z!=yVR4EUtRgb<6Q`LXU98SS3#cp2@^ZUKtV^L`rt_Xj6S=f;QO|EI@KqTzoXIfTRi zn?u{hA0ap;uFYJqdsr&-jTxh?PRf-k#Bp}<3W!1K!BMEi%$zcx5LB<+%(b76R7<~K z4!sE2Ck1Hj)sL{%g-nX4G?DC=U&rZ%hSo+-YBmqy0ZOUM0R?Oj<$1N=ChY-3RP?e1 z)6n$U#XTTwMNLUy^dv++ENEwH^8sj1l-~r}Q8>t*mIiXqlPM=ZHxSfKUFCK+YA( z$dm8nBWN}E3a5Ffh3(oj0S$1f;GSyzh>_o5wv!54&AO5R_++&_WfbTZUTID; z9>K=h#Ug zpgqguC9NPM$1!v=&T(ms>KSArAiQq}prlUEVw1V$lT(gT2%_Q#)%vyf3TB(SMNdLIE%sxg^q;zr;0p6`}++J zlQW=-97pne+Sq#GEH9}gk*pzVorGF?*hT66$-HuSGxxnjh#etUj|Ru zy?FZkAja(4q?4xLNfCe_2#$(Ai!BqoIa7Cm58wdI-W^xIonSo3XG_&Rp?eVHzoKKM zc2Z6eE~W)WK+DQ&4sbeBl;^q2OKUPhA4qD}d|ljUumWkusRbk3BFnNXo984)NF9<3 zy^%VM7rK@@w9abIb3#+Fnp{R;i&sihdXs;Uhx_2d7f?_VTOg1H0ANXB6yt4!24f2- zvL^G2af&_yQ=nC38n6^;WKybqk@hm~r7);J>rQ@JG-1dmaChZ+4x|GxyI0EqaIcK^ zK{+5&&`&9hDkZ%9xBR9w{HDV z1eJm4K*LuM82mz6$>M;2&Gf>Alj7`Ta{vth06=OkOgo{@P39wyd{^MVVb~ks{Y`O` z^flP7>J@)n54sJ?6VXjiXm!_j3?dWi1@`_G<_Wsq3u-?K(g*(OjV<=YE7Bc8y%)kh z8pJ8|D)dv&_uJOO{m1lzGdMB^> z-pQ|Q1dqsEYh#e|kQ;`D>z7g;V-SKfR%e3QOM5=r4Ff((4GTU{OekEa_fe3Mo%Olj zj}f-WAw_***1z8vyyh+*zev>bKBHN<+@k>*&jn%b5Z8q}pnV@9Z-F(>w@|O|ZP5rE zIL~wzRbP08*B~Dxe3yjR;C3HK(hiB!4&kG3y*kQ$wIDd5t)Z3?`c@!zTXb1Re9{Z1 zUin8@ULi-kUM$$r?rzWZU$;GzUs<$w)|P4tcPB+X+?{Wa4w|;cD~OI6%2u`)X6h~a zDnwge8fmT7%$#p5PZ#XWJjQzXwLIzx7Z)93TcGH-Z+c4I8F*^*CF*;cjW4lZ^t8^h z=^MR~N0+{F*NV-*oBw&pacg-5-q>M?w#enRnGq2ZQ9an*+rVjWMm8J0jfKzOCSLts ze^>m+cw@Gy&e((Kq5CX@&Q#4i23xU(>WuB6gljr_t>v1n@r?{IV`LAwAvkwz(Dm)G z;Pe`6rKQ~1vZ#am!=Sr|N!Lrwpvlb@LCV6E&g=~9rh>Y>=|XJ=FnUdKc6Q3UsJyVQ ztf_EY!9iYG!%!X?lPDj7`YWa`F%AKm@_5NTi9ZVYy`Uyqmc?CCOk1FCctEu(r+upT9 z{GZw@!~XG4He?3wYhR&@W|tDqoNp;kE^g|`Z+wF>nBkz@f{u#n8998W5@f69cka)a zeWrGj?%=6g1M&<$#ywdrq5v;eNelWC9rfCyj1Z@J*3^4_n?hEuq72?f$Gmc~i$p)PQ5#b9b#Gi$#fSiOB3~dfE<4f&JBSfAB zrGQEW4T1td^!Snrkz_$cqxC~?LD@qr_|gfXL?iY?%tLbcVts*3f~4?;V1hz{;1_})hhl?Z7lKuQ!i3-!;&4I{aD#yF zfbhpQ?C;9;MepGBt%THrY=iNHydyZnU03dChxmQ7IzwDH>{tUsrqW=au+GreMLXbq zZy`@1U!YuZ&P+RepkAQQP}i+GG9hdrS7BNq@5t8CeAl3L;alNcvCfdzjXO>u7$Lop zUD3~=*4;XAJ8U4@;rQTPvCn8bSbYm2+hNk+o}kVgI+T5teJLRYp`S3%VAkzAq&g5g znAW-0nLC&}6g$v`-Z8;QLZCtu!SX@5zPCj?BMrpfpmd9 zfmw#ULtl69u=4!?g$m^jaVM~@)}Nx>*Y}Hp|7Xd~2#7Pt_nr`NAACFEzx@B2{GU-A8=5`7Ula(e zkIMdA@^#Al&gZ`L)aL=}C9ypXdFS;5YD7l#KfxI+zqu)YfiwO;fQ|ki5siMMZvJ~K zXfSK%zb6{~A@Ka>6mc;BX5;)XfYEOV518cxW*YsAFa#$0u(1CdW%M6Spnqd|IR4;& zenX6Y6KdFg`!N451vY!;`tOiMzx|)Ve$K!BpMUo=7^wqh_JE;DY~Xf(|Nc(@c2@@5 zFN5u$*}!xkFuLeB@`n{{WX;A2M*n~_u>9dF{f_ky_y>GuVdVxl&-O>*1Y0}*s~Yw{ zWBI$xA2Vpq|6~UJr=j2ZSiupqf+0iyh8=+wFjnaAcF^E%-~?lk*ub2g-+U%;4luFl zKUzbx{HftzXVyQi*UVr56f@g@h9I&0xoVa_gr~otNML{wIC3!P2yEdD#vg%wt--ak zgUkLg*=7cJDp>s&?1?W(Ic|*oYbonF7}U?zjI1P+|e2oqnT{Siry~ z7Vx$G#wGo!7aSv)RK*N_4W>Z-KK}+RvHr2dW&zI*7Utih!~%v_fr(LnFi`&qt@OM5 z|G8BDPtZzWl9HvqsRI(*e?}^S$NOKF*5IrDzalFAji&U!v9$gJ#rea!`8Q4J&#eA^ z1+3t%`%C*x!TPO%xl&*Y^S{);cxPypH{_;|0 z1{;ZU{ZI9;TMgTPX#Mx#{Hc?Z89dqkUHgF{YO5q zxBNdej(^6-%K2a91Fz`6m1SXLWBq5l-2c$PSIhPHvP^8OTz`*`m6Mt2?|lHi!E*gQ zW>!w{TKjt}>>ONw*TA<&rhk^@{zqAMCf0wH1uIN{kB@_kmHqEy$GwJZzrjjbo7jNwPQTOOwdCNaZ}0eLC4uYVVnZS) J7n2u9`X8#RI}rc? literal 0 HcmV?d00001 diff --git a/app/(app)/minima-ccn/ccnpa/artistes-interpretes.tsx b/app/(app)/minima-ccn/ccnpa/artistes-interpretes.tsx new file mode 100644 index 0000000..a7a1082 --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/artistes-interpretes.tsx @@ -0,0 +1,166 @@ +"use client"; + +import React from 'react'; +import { Mic, Info } from 'lucide-react'; + +function euro(n: number) { + return new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR' }).format(n); +} + +const InfoRow: React.FC<{ children: React.ReactNode }> = ({ children }) => ( +
+
+
+

{children}

+
+); + +export default function ArtistesInterpretes() { + return ( +
+ {/* En-tête */} +
+
+
+ +
+
+

Artistes Interprètes

+

Salaires minima applicables au 1er janvier 2025 (Avenant n°20 du 29 novembre 2024, non étendu)

+

Rémunération au cachet

+
+
+
+ + {/* Émissions dramatiques */} +
+
Émissions dramatiques (article 5.14.1)
+
+
Définition
+
Cachet
+
+ {[{def:"Journée de répétition ou d'enregistrement",val:289.23},{def:'Journée unique',val:304.99},{def:"Prestation de lecture d'une durée inférieure à 4 heures",val:152.49}].map((r,idx)=> ( +
+
{r.def}
+
{euro(r.val)}
+
+ ))} +
+ + {/* Émissions de variétés */} +
+
Émissions de variétés (article 5.14.2)
+
Répétitions effectuées en dehors de la journée d'enregistrement
+
+
Définition
+
Cachet
+
+ {[{def:"Répétition d'une durée inférieure ou égale à 4 heures",val:184.90},{def:"Répétition d'une durée supérieure à 4 heures",val:289.23}].map((r,idx)=> ( +
+
{r.def}
+
{euro(r.val)}
+
+ ))} +
+
Enregistrement
+
{euro(419.31)}
+
+
+ + {/* Émissions lyriques */} +
+
Émissions lyriques (article 5.14.3)
+
Répétition ou enregistrement
+
+
Définition
+
Cachet
+
+ {[{def:'Soliste',val:432.86},{def:'Artistes des chœurs',val:289.23}].map((r,idx)=> ( +
+
{r.def}
+
{euro(r.val)}
+
+ ))} +
Préparation ou déchiffrage (3 heures maximum)
+ {[{def:'Soliste',val:165.96},{def:"Artistes des chœurs",val:110.89}].map((r,idx)=> ( +
+
{r.def}
+
{euro(r.val)}
+
+ ))} +
+ + {/* Émissions chorégraphiques */} +
+
Émissions chorégraphiques (article 5.14.4)
+
Répétition ou enregistrement (6h de travail effectif au maximum)
+ {[{def:'Soliste',val:432.86},{def:'Corps de ballet',val:289.23}].map((r,idx)=> ( +
+
{r.def}
+
{euro(r.val)}
+
+ ))} +
+ + {/* Reportages / Actualité */} +
+
Reportages / Actualité
+
+
Définition
+
Cachet
+
+
+
Reportage (art. 6.2.1.b, pas de gré à gré)
+
{euro(73.64)}
+
+
+
Prestation d'actualité (art. 6.3.1, pas de gré à gré)
+
{euro(170.16)}
+
+
+ + {/* Indemnités de costumes */} +
+
Indemnités de costumes (article 5.13)
+
Indemnités visées à l'article 5.13.1
+
+
Définition
+
Montant
+
+ {[{def:'Engagement pour une journée unique — Tenue de ville',val:18.34},{def:'Engagement pour une journée unique — Tenue de soirée',val:30.10},{def:'Engagement pour plusieurs jours — Tenue de ville',val:14.67},{def:'Engagement pour plusieurs jours — Tenue de soirée',val:24.77}].map((r,idx)=> ( +
+
{r.def}
+
{euro(r.val)}
+
+ ))} +
Indemnités visées à l'article 5.13.2
+ {[{def:'Homme — pourpoint',val:14.56},{def:'Femme — Tutu court',val:14.56},{def:'Femme — Tutu romantique',val:24.77},{def:'Chaussons',val:5.60}].map((r,idx)=> ( +
+
{r.def}
+
{euro(r.val)}
+
+ ))} +
+ + {/* Notes et définitions */} +
+ + La durée du travail journalière est de 9 heures (6 heures pour les mineurs de moins de 16 ans), y compris le temps passé à l'habillage et au maquillage, dans la limite d'une heure. La durée du travail hebdomadaire est de 45 heures (5 × 9 heures) pour les adultes. + + + Émissions dramatiques : artistes engagés pour la réalisation télévisuelle d'œuvres ou extraits d'œuvres dramatiques (...), y compris artistes sans texte à respecter (voix hors champ, lectures de commentaires). + + + Émissions chorégraphiques : réalisations télévisuelles d'œuvres chorégraphiques (suite de pas/enchaînements réglés), à l'exclusion des artistes d'interprétation d'un texte parlé/chanté ou d'un numéro de variétés. + + + Émissions lyriques : réalisations télévisuelles d'œuvres lyriques ou émissions avec extraits lyriques ; inclut artistes des chœurs à l'image si intégrés à l'action dramatique. À l'exclusion des artistes d'interprétation d'un texte parlé/numéro de variétés ou de danse (ces derniers relèvent des dispositions des émissions dramatiques). + + + Émissions de variétés : prestations dans des conditions autres que celles prévues pour les émissions dramatiques, lyriques ou chorégraphiques, à l'exclusion des artistes chorégraphiques. + +
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/artistes-musiciens.tsx b/app/(app)/minima-ccn/ccnpa/artistes-musiciens.tsx new file mode 100644 index 0000000..2b4f6aa --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/artistes-musiciens.tsx @@ -0,0 +1,109 @@ +"use client"; + +import React from 'react'; +import { Music, Info } from 'lucide-react'; + +function euro(n: number) { + return new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR' }).format(n); +} + +const MUSICIENS_CACHETS = [ + { def: 'Cachet initial (avec un mode) pour un service de 3 heures', montant: 106.05 }, + { def: 'Cachet initial (avec un mode) pour un service de 4 heures', montant: 137.87 }, + { def: 'Cachet initial (avec un mode) pour un engagement à la journée (isolée, enregistrement)', montant: 228.02 }, + { def: 'Cachet initial (avec un mode) pour un engagement à la journée (3 journées isolées ou 2 journées consécutives sur 7 jours)', montant: 217.41 }, + { def: 'Cachet initial (avec un mode) pour un engagement à la journée (5 journées isolées ou 3 journées consécutives sur 7 jours)', montant: 190.89 }, +]; + +const MUSICIENS_ABATTEMENTS = [ + { seuil: '+ 10 musiciens', value: '-10%' }, + { seuil: '+ 20 musiciens', value: '-15%' }, + { seuil: '+ 30 musiciens', value: '-20%' }, + { seuil: '+ 40 musiciens', value: '-25%' }, +]; + +const MUSICIENS_REPETITIONS = [ + { def: 'Cachet pour un service de trois heures', montant: 63.63 }, + { def: 'Cachet pour un double service de trois heures', montant: 106.05 }, +]; + +const InfoRow: React.FC<{ children: React.ReactNode }> = ({ children }) => ( +
+
+
+

{children}

+
+); + +export default function ArtistesMusiciens() { + return ( +
+ {/* En-tête */} +
+
+
+ +
+
+

Artistes Musiciens

+

Salaires applicables au 1er janvier 2025 (Avenant n°20 du 29 novembre 2024, non étendu)

+
+
+
+ + {/* Cachets minima */} +
+
+
Définition du cachet
+
Cachets minima
+
+ {MUSICIENS_CACHETS.map((row, idx) => ( +
+
{row.def}
+
{euro(row.montant)}
+
+ ))} +
+ + {/* Abattement pour ensemble */} +
+
+
+

Abattement pour ensemble

+

+ En cas d'interprétation d'ensemble, abattement appliqué sur les cachets définis ci-avant en fonction du nombre de musiciens participant à l'ensemble. +

+
+
+
+
Seuil
+
Abattement
+
+ {MUSICIENS_ABATTEMENTS.map((a, i) => ( +
+
{a.seuil}
+
{a.value}
+
+ ))} +
+
+
+ + {/* Cachets répétitions */} +
+
Cachet pour répétitions
+
+
Définition
+
Cachet
+
+ {MUSICIENS_REPETITIONS.map((r, idx) => ( +
+
{r.def}
+
{euro(r.montant)}
+
+ ))} +
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-a-data.tsx b/app/(app)/minima-ccn/ccnpa/categorie-a-data.tsx new file mode 100644 index 0000000..372f358 --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-a-data.tsx @@ -0,0 +1,615 @@ +"use client"; + +import React from 'react'; +import { Briefcase, ShoppingBag } from 'lucide-react'; + +const parseEuro = (str: string) => { + if (!str || str === '-') return null; + const cleaned = str.replace(/\s/g, '').replace('€', '').replace(',', '.'); + return parseFloat(cleaned); +}; + +const euro = (n: number | null) => { + if (n === null) return '-'; + return new Intl.NumberFormat('fr-FR', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(n) + ' €'; +}; + +export default function CategorieAContent() { + return ( +
+ {/* En-tête */} +
+

+ Catégorie A - Personnel d'administration et commercial +

+

+ Minima conventionnels pour le personnel administratif et commercial de la production audiovisuelle +

+

+ Grille de salaires CCNPA (IDCC 2642) - Valeurs 2025 +

+
+ + {/* Hors niveau */} +
+

+ + + Hors niveau +

+ +
+ + + + + + + + + + + + + + + + + + + + + +
EmploisSalaire minimum
Producteur{euro(null)}
Directeur général (non mandataire social){euro(null)}
Directeur général délégué (non mandataire social){euro(null)}
+
+
+ + {/* Niveau I - Administration */} +
+

+ + + Niveau I - Filière Administration +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Délégué Général{euro(parseEuro("3 314,29 €"))}
Directeur général adjoint{euro(parseEuro("3 314,29 €"))}
Directeur des productions{euro(parseEuro("3 314,29 €"))}
Directeur des programmes{euro(parseEuro("3 314,29 €"))}
+
+
+ + {/* Niveau II - Administration */} +
+

+ + + Niveau II - Filière Administration +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Directeur des jeux{euro(parseEuro("3 162,15 €"))}
Secrétaire général{euro(parseEuro("3 013,00 €"))}
Directeur administratif et financier{euro(parseEuro("3 013,00 €"))}
Directeur financier{euro(parseEuro("2 892,47 €"))}
Directeur juridique{euro(parseEuro("2 892,47 €"))}
Directeur technique{euro(parseEuro("2 892,47 €"))}
Directeur des ressources humaines{euro(parseEuro("2 892,47 €"))}
Directeur littéraire{euro(parseEuro("2 892,47 €"))}
Directeur du développement{euro(parseEuro("2 892,47 €"))}
Directeur informatique{euro(parseEuro("2 892,47 €"))}
Directeur de la Comptabilité{euro(parseEuro("2 892,47 €"))}
Directeur de la communication{euro(parseEuro("2 892,47 €"))}
+
+
+ + {/* Niveau II - Commercial et édition */} +
+

+ + + Niveau II - Filière Commercial et édition +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Directeur du Pôle Edition - Distribution{euro(parseEuro("2 892,47 €"))}
Directeur multimedia{euro(parseEuro("2 892,47 €"))}
Directeur produits dérivés{euro(parseEuro("2 892,47 €"))}
Directeur commercial{euro(parseEuro("2 651,44 €"))}
+
+
+ + {/* Niveau IIIA - Administration */} +
+

+ + + Niveau IIIA - Filière Administration +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Responsable administratif et financier{euro(parseEuro("2 651,44 €"))}
Chef comptable{euro(parseEuro("2 530,92 €"))}
Responsable des ressources humaines{euro(parseEuro("2 530,92 €"))}
Responsable du développement{euro(parseEuro("2 530,92 €"))}
Responsable informatique{euro(parseEuro("2 530,92 €"))}
Responsable juridique{euro(parseEuro("2 530,92 €"))}
Contrôleur de gestion{euro(parseEuro("2 410,40 €"))}
Responsable de la trésorerie{euro(parseEuro("2 410,40 €"))}
Responsable de la communication{euro(parseEuro("2 410,40 €"))}
Responsable de la paie{euro(parseEuro("2 339,74 €"))}
Responsable technique{euro(parseEuro("2 289,87 €"))}
Responsable des services généraux{euro(parseEuro("2 289,87 €"))}
Chargé de mission{euro(parseEuro("2 289,87 €"))}
Attaché de direction{euro(parseEuro("2 171,66 €"))}
+
+
+ + {/* Niveau IIIA - Commercial et édition */} +
+

+ + + Niveau IIIA - Filière Commercial et édition +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Responsable des sites web/multimedia{euro(parseEuro("2 410,40 €"))}
Responsable des ventes{euro(parseEuro("2 289,87 €"))}
Responsable des produits dérivés{euro(parseEuro("2 289,87 €"))}
Responsable acquisitions{euro(parseEuro("2 289,87 €"))}
+
+
+ + {/* Niveau IIIB - Administration */} +
+

+ + + Niveau IIIB - Filière Administration +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Responsable de la comptabilité{euro(parseEuro("2 169,36 €"))}
Responsable de l'administration du personnel{euro(parseEuro("2 169,36 €"))}
Attaché de presse{euro(parseEuro("2 048,84 €"))}
Collaborateur juridique{euro(parseEuro("2 048,84 €"))}
Contrôleur de gestion junior{euro(parseEuro("2 048,84 €"))}
Informaticien{euro(parseEuro("2 048,84 €"))}
Responsable d'exploitation{euro(parseEuro("2 048,84 €"))}
Chargé d'étude{euro(parseEuro("2 028,56 €"))}
+
+
+ + {/* Niveau IIIB - Commercial et édition */} +
+

+ + + Niveau IIIB - Filière Commercial et édition +

+ +
+ + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Responsable des supports{euro(parseEuro("2 048,84 €"))}
+
+
+ + {/* Niveau IV - Administration */} +
+

+ + + Niveau IV - Filière Administration +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Comptable{euro(parseEuro("1 988,58 €"))}
Gestionnaire paie{euro(parseEuro("1 988,58 €"))}
Webmestre{euro(parseEuro("1 928,32 €"))}
Chargé des services généraux{euro(parseEuro("1 828,83 €"))}
Assistant de direction{euro(parseEuro("1 828,83 €"))}
Assistant juridique{euro(parseEuro("1 828,83 €"))}
+
+
+ + {/* Niveau IV - Commercial et édition */} +
+

+ + + Niveau IV - Filière Commercial et édition +

+ +
+ + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Gestionnaire des supports{euro(parseEuro("1 909,23 €"))}
Vendeur{euro(parseEuro("1 828,83 €"))}
+
+
+ + {/* Niveau V - Administration */} +
+

+ + + Niveau V - Filière Administration +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Secrétaire - assistant{euro(parseEuro("1 828,83 €"))}
Secrétaire - standardiste{euro(parseEuro("1 828,83 €"))}
Responsable d'entretien{euro(parseEuro("1 828,83 €"))}
Assistant paye{euro(parseEuro("1 828,83 €"))}
Assistant comptable{euro(parseEuro("1 828,83 €"))}
Assistant de la communication{euro(parseEuro("1 828,83 €"))}
Agent des services généraux{euro(parseEuro("1 828,83 €"))}
+
+
+ + {/* Niveau V - Commercial et édition */} +
+

+ + + Niveau V - Filière Commercial et édition +

+ +
+ + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Assistant web / téléphonie / multimedia{euro(parseEuro("1 828,83 €"))}
Assistant commercial{euro(parseEuro("1 828,83 €"))}
+
+
+ + {/* Niveau VI - Administration */} +
+

+ + + Niveau VI - Filière Administration +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EmploisSalaire minimum CDI/CDD
Hôtesse - standardiste{euro(parseEuro("1 828,83 €"))}
Chauffeur d'entreprise{euro(parseEuro("1 828,83 €"))}
Agent d'exploitation{euro(parseEuro("1 828,83 €"))}
Coursier{euro(parseEuro("1 828,83 €"))}
Gardien{euro(parseEuro("1 828,83 €"))}
Agent d'entretien{euro(parseEuro("1 828,83 €"))}
+
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data-part2.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data-part2.tsx new file mode 100644 index 0000000..b8ed527 --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data-part2.tsx @@ -0,0 +1,799 @@ +"use client"; + +import React, { useState, useMemo } from 'react'; +import { Sparkles, Film, ClipboardList, Search, ChevronDown, ChevronUp } from 'lucide-react'; + +const parseEuro = (str: string) => { + if (!str || str === '-') return null; + const cleaned = str.replace(/\s/g, '').replace('€', '').replace(',', '.'); + return parseFloat(cleaned); +}; + +const euro = (n: number | null) => { + if (n === null) return '-'; + return new Intl.NumberFormat('fr-FR', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(n) + ' €'; +}; + +interface Emploi { + nom: string; + filiere: string; + niveau: string; + cddu: { + semaine35h: number | null; + semaine39h: number | null; + jour7h: number | null; + jour8h: number | null; + mois35h: number | null; + mois39h: number | null; + }; + cdi: number | null; +} + +const emploisData: Emploi[] = [ + // Filière D - Maquillage & Coiffure + { + nom: "Blocker / Rigger", + filiere: "D", + niveau: "IV", + cddu: { + semaine35h: parseEuro("873,86 €"), + semaine39h: parseEuro("998,69 €"), + jour7h: parseEuro("194,19 €"), + jour8h: parseEuro("221,93 €"), + mois35h: parseEuro("3 320,66 €"), + mois39h: parseEuro("3 795,03 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Chef électricien", + filiere: "D", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("989,68 €"), + semaine39h: parseEuro("1 131,06 €"), + jour7h: parseEuro("219,93 €"), + jour8h: parseEuro("251,35 €"), + mois35h: parseEuro("3 760,77 €"), + mois39h: parseEuro("4 298,01 €"), + }, + cdi: parseEuro("2 289,87 €"), + }, + { + nom: "Chef machiniste", + filiere: "D", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("989,68 €"), + semaine39h: parseEuro("1 131,06 €"), + jour7h: parseEuro("219,93 €"), + jour8h: parseEuro("251,35 €"), + mois35h: parseEuro("3 760,77 €"), + mois39h: parseEuro("4 298,01 €"), + }, + cdi: parseEuro("2 289,87 €"), + }, + { + nom: "Chef maquilleur", + filiere: "D", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("884,43 €"), + semaine39h: parseEuro("1 010,78 €"), + jour7h: parseEuro("196,54 €"), + jour8h: parseEuro("224,62 €"), + mois35h: parseEuro("3 360,84 €"), + mois39h: parseEuro("3 840,95 €"), + }, + cdi: parseEuro("2 410,40 €"), + }, + { + nom: "Coiffeur", + filiere: "D", + niveau: "V", + cddu: { + semaine35h: parseEuro("714,32 €"), + semaine39h: parseEuro("816,36 €"), + jour7h: parseEuro("158,74 €"), + jour8h: parseEuro("181,41 €"), + mois35h: parseEuro("2 714,40 €"), + mois39h: parseEuro("3 102,16 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Coiffeur perruquier", + filiere: "D", + niveau: "IV", + cddu: { + semaine35h: parseEuro("893,19 €"), + semaine39h: parseEuro("1 020,79 €"), + jour7h: parseEuro("198,49 €"), + jour8h: parseEuro("226,84 €"), + mois35h: parseEuro("3 394,11 €"), + mois39h: parseEuro("3 878,98 €"), + }, + cdi: parseEuro("1 988,58 €"), + }, + { + nom: "Conducteur de groupe", + filiere: "D", + niveau: "IV", + cddu: { + semaine35h: parseEuro("881,41 €"), + semaine39h: parseEuro("1 007,33 €"), + jour7h: parseEuro("195,87 €"), + jour8h: parseEuro("223,85 €"), + mois35h: parseEuro("3 349,36 €"), + mois39h: parseEuro("3 827,83 €"), + }, + cdi: parseEuro("1 988,58 €"), + }, + { + nom: "Électricien / Éclairagiste", + filiere: "D", + niveau: "V", + cddu: { + semaine35h: parseEuro("811,99 €"), + semaine39h: parseEuro("927,99 €"), + jour7h: parseEuro("180,44 €"), + jour8h: parseEuro("206,22 €"), + mois35h: parseEuro("3 085,55 €"), + mois39h: parseEuro("3 526,34 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Machiniste", + filiere: "D", + niveau: "V", + cddu: { + semaine35h: parseEuro("811,99 €"), + semaine39h: parseEuro("927,99 €"), + jour7h: parseEuro("180,44 €"), + jour8h: parseEuro("206,22 €"), + mois35h: parseEuro("3 085,55 €"), + mois39h: parseEuro("3 526,34 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Maquilleur", + filiere: "D", + niveau: "V", + cddu: { + semaine35h: parseEuro("714,32 €"), + semaine39h: parseEuro("816,36 €"), + jour7h: parseEuro("158,74 €"), + jour8h: parseEuro("181,41 €"), + mois35h: parseEuro("2 714,40 €"), + mois39h: parseEuro("3 102,16 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Maquilleur et coiffeur effets spéciaux", + filiere: "D", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("1 072,06 €"), + semaine39h: parseEuro("1 225,21 €"), + jour7h: parseEuro("238,24 €"), + jour8h: parseEuro("272,27 €"), + mois35h: parseEuro("4 073,83 €"), + mois39h: parseEuro("4 655,79 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Prothésiste", + filiere: "D", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("1 072,06 €"), + semaine39h: parseEuro("1 225,21 €"), + jour7h: parseEuro("238,24 €"), + jour8h: parseEuro("272,27 €"), + mois35h: parseEuro("4 073,83 €"), + mois39h: parseEuro("4 655,79 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + + // Filière E - Post-production + { + nom: "Assistant de post-production", + filiere: "E", + niveau: "IV", + cddu: { + semaine35h: parseEuro("626,05 €"), + semaine39h: parseEuro("715,48 €"), + jour7h: parseEuro("139,12 €"), + jour8h: parseEuro("159,00 €"), + mois35h: parseEuro("2 378,97 €"), + mois39h: parseEuro("2 718,82 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Assistant monteur", + filiere: "E", + niveau: "IV", + cddu: { + semaine35h: parseEuro("714,32 €"), + semaine39h: parseEuro("816,36 €"), + jour7h: parseEuro("158,74 €"), + jour8h: parseEuro("181,41 €"), + mois35h: parseEuro("2 714,40 €"), + mois39h: parseEuro("3 102,16 €"), + }, + cdi: parseEuro("1 928,32 €"), + }, + { + nom: "Assistant monteur adjoint", + filiere: "E", + niveau: "VI", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Chargé de post-production", + filiere: "E", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 051,06 €"), + semaine39h: parseEuro("1 201,21 €"), + jour7h: parseEuro("233,57 €"), + jour8h: parseEuro("266,94 €"), + mois35h: parseEuro("3 994,02 €"), + mois39h: parseEuro("4 564,58 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Chef monteur", + filiere: "E", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 127,35 €"), + semaine39h: parseEuro("1 288,39 €"), + jour7h: parseEuro("250,52 €"), + jour8h: parseEuro("286,31 €"), + mois35h: parseEuro("4 283,91 €"), + mois39h: parseEuro("4 895,89 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Directeur de post-production", + filiere: "E", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 264,33 €"), + semaine39h: parseEuro("1 444,95 €"), + jour7h: parseEuro("280,96 €"), + jour8h: parseEuro("321,10 €"), + mois35h: parseEuro("4 804,45 €"), + mois39h: parseEuro("5 490,78 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Étalonneur", + filiere: "E", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("964,96 €"), + semaine39h: parseEuro("1 102,82 €"), + jour7h: parseEuro("214,44 €"), + jour8h: parseEuro("245,07 €"), + mois35h: parseEuro("3 666,86 €"), + mois39h: parseEuro("4 190,69 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Infographiste", + filiere: "E", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 051,06 €"), + semaine39h: parseEuro("1 201,21 €"), + jour7h: parseEuro("233,57 €"), + jour8h: parseEuro("266,94 €"), + mois35h: parseEuro("3 994,02 €"), + mois39h: parseEuro("4 564,58 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Mixeur", + filiere: "E", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 348,40 €"), + semaine39h: parseEuro("1 541,03 €"), + jour7h: parseEuro("299,65 €"), + jour8h: parseEuro("342,45 €"), + mois35h: parseEuro("5 123,93 €"), + mois39h: parseEuro("5 855,91 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Superviseur d'effets spéciaux postproduction", + filiere: "E", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 180,27 €"), + semaine39h: parseEuro("1 348,88 €"), + jour7h: parseEuro("262,28 €"), + jour8h: parseEuro("299,75 €"), + mois35h: parseEuro("4 485,04 €"), + mois39h: parseEuro("5 125,75 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Truquiste", + filiere: "E", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("979,97 €"), + semaine39h: parseEuro("1 119,97 €"), + jour7h: parseEuro("217,77 €"), + jour8h: parseEuro("248,88 €"), + mois35h: parseEuro("3 723,90 €"), + mois39h: parseEuro("4 255,88 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + + // Filière F - Production + { + nom: "Administrateur de production", + filiere: "F", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("877,44 €"), + semaine39h: parseEuro("1 002,79 €"), + jour7h: parseEuro("194,99 €"), + jour8h: parseEuro("222,84 €"), + mois35h: parseEuro("3 334,28 €"), + mois39h: parseEuro("3 810,59 €"), + }, + cdi: parseEuro("2 591,18 €"), + }, + { + nom: "Assistant de production", + filiere: "F", + niveau: "IV", + cddu: { + semaine35h: parseEuro("714,32 €"), + semaine39h: parseEuro("816,36 €"), + jour7h: parseEuro("158,74 €"), + jour8h: parseEuro("181,41 €"), + mois35h: parseEuro("2 714,40 €"), + mois39h: parseEuro("3 102,16 €"), + }, + cdi: parseEuro("1 988,58 €"), + }, + { + nom: "Assistant de production adjoint", + filiere: "F", + niveau: "VI", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Assistant régisseur adjoint", + filiere: "F", + niveau: "VI", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Chargé de production", + filiere: "F", + niveau: "II", + cddu: { + semaine35h: parseEuro("962,49 €"), + semaine39h: parseEuro("1 099,99 €"), + jour7h: parseEuro("213,89 €"), + jour8h: parseEuro("244,44 €"), + mois35h: parseEuro("3 657,48 €"), + mois39h: parseEuro("4 179,96 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Chauffeur", + filiere: "F", + niveau: "VI", + cddu: { + semaine35h: parseEuro("482,48 €"), + semaine39h: parseEuro("551,41 €"), + jour7h: parseEuro("107,22 €"), + jour8h: parseEuro("122,53 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Comptable de production", + filiere: "F", + niveau: "IV", + cddu: { + semaine35h: parseEuro("750,78 €"), + semaine39h: parseEuro("858,04 €"), + jour7h: parseEuro("166,84 €"), + jour8h: parseEuro("190,68 €"), + mois35h: parseEuro("2 852,98 €"), + mois39h: parseEuro("3 260,54 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Directeur de production", + filiere: "F", + niveau: "I", + cddu: { + semaine35h: parseEuro("1 532,22 €"), + semaine39h: parseEuro("1 751,11 €"), + jour7h: parseEuro("340,49 €"), + jour8h: parseEuro("389,14 €"), + mois35h: parseEuro("5 822,44 €"), + mois39h: parseEuro("6 654,20 €"), + }, + cdi: parseEuro("3 314,29 €"), + }, + { + nom: "Producteur exécutif", + filiere: "F", + niveau: "HN", + cddu: { + semaine35h: null, + semaine39h: null, + jour7h: null, + jour8h: null, + mois35h: null, + mois39h: null, + }, + cdi: null, + }, + { + nom: "Régisseur / Responsable des repérages", + filiere: "F", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("830,81 €"), + semaine39h: parseEuro("949,50 €"), + jour7h: parseEuro("184,63 €"), + jour8h: parseEuro("211,00 €"), + mois35h: parseEuro("3 157,09 €"), + mois39h: parseEuro("3 608,09 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Régisseur adjoint", + filiere: "F", + niveau: "IV", + cddu: { + semaine35h: parseEuro("714,32 €"), + semaine39h: parseEuro("816,36 €"), + jour7h: parseEuro("158,74 €"), + jour8h: parseEuro("181,41 €"), + mois35h: parseEuro("2 714,40 €"), + mois39h: parseEuro("3 102,16 €"), + }, + cdi: parseEuro("1 988,58 €"), + }, + { + nom: "Régisseur général", + filiere: "F", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("962,49 €"), + semaine39h: parseEuro("1 099,99 €"), + jour7h: parseEuro("213,89 €"), + jour8h: parseEuro("244,44 €"), + mois35h: parseEuro("3 657,48 €"), + mois39h: parseEuro("4 179,96 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Responsable des enfants", + filiere: "F", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("746,08 €"), + semaine39h: parseEuro("852,66 €"), + jour7h: parseEuro("165,80 €"), + jour8h: parseEuro("189,48 €"), + mois35h: parseEuro("2 835,09 €"), + mois39h: parseEuro("3 240,10 €"), + }, + cdi: parseEuro("2 048,84 €"), + }, + { + nom: "Secrétaire de production", + filiere: "F", + niveau: "V", + cddu: { + semaine35h: parseEuro("626,05 €"), + semaine39h: parseEuro("715,48 €"), + jour7h: parseEuro("139,12 €"), + jour8h: parseEuro("159,00 €"), + mois35h: parseEuro("2 378,97 €"), + mois39h: parseEuro("2 718,82 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, +]; + +const filieres = [ + { code: 'D', nom: 'Plateaux et tournage', icon: Sparkles, color: 'pink' }, + { code: 'E', nom: 'Postproduction', icon: Film, color: 'indigo' }, + { code: 'F', nom: 'Production', icon: ClipboardList, color: 'green' }, +]; + +const colorClasses = { + pink: { + bg: 'bg-pink-50', + border: 'border-pink-200', + text: 'text-pink-900', + hover: 'hover:bg-pink-100', + gradient: 'from-pink-500 to-rose-600', + ring: 'ring-pink-500', + }, + indigo: { + bg: 'bg-indigo-50', + border: 'border-indigo-200', + text: 'text-indigo-900', + hover: 'hover:bg-indigo-100', + gradient: 'from-indigo-500 to-purple-600', + ring: 'ring-indigo-500', + }, + green: { + bg: 'bg-green-50', + border: 'border-green-200', + text: 'text-green-900', + hover: 'hover:bg-green-100', + gradient: 'from-green-500 to-emerald-600', + ring: 'ring-green-500', + }, +}; + +interface EmploiCardProps { + emploi: Emploi; + color: keyof typeof colorClasses; +} + +function EmploiCard({ emploi, color }: EmploiCardProps) { + const [isExpanded, setIsExpanded] = useState(false); + const [activeTab, setActiveTab] = useState<'cddu' | 'cdi'>('cdi'); + const colors = colorClasses[color]; + + return ( +
+ {/* Header */} + + + {/* Content */} + {isExpanded && ( +
+ {/* Tabs */} +
+ + +
+ + {/* Content based on tab */} + {activeTab === 'cdi' ? ( +
+

Salaire mensuel minimum

+

{euro(emploi.cdi)}

+
+ ) : ( +
+ {/* Par semaine */} +
+

Par semaine

+
+
+

Base 35h

+

{euro(emploi.cddu.semaine35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.semaine39h)}

+
+
+
+ + {/* Par jour */} +
+

Par jour

+
+
+

Base 7h

+

{euro(emploi.cddu.jour7h)}

+
+
+

Base 8h

+

{euro(emploi.cddu.jour8h)}

+
+
+
+ + {/* Par mois */} +
+

Par mois

+
+
+

Base 35h

+

{euro(emploi.cddu.mois35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.mois39h)}

+
+
+
+
+ )} +
+ )} +
+ ); +} + +interface CategorieBFictionDataPart2Props { + activeFiliere: string; +} + +export default function CategorieBFictionDataPart2({ activeFiliere }: CategorieBFictionDataPart2Props) { + const [searchTerm, setSearchTerm] = useState(''); + + const filteredEmplois = useMemo(() => { + // D'abord filtrer par la filière active + let result = emploisData.filter(e => e.filiere === activeFiliere); + + // Puis appliquer le filtre de recherche + if (searchTerm) { + result = result.filter(e => + e.nom.toLowerCase().includes(searchTerm.toLowerCase()) + ); + } + + return result.sort((a, b) => a.nom.localeCompare(b.nom)); + }, [activeFiliere, searchTerm]); + + // Déterminer la couleur en fonction de la filière + const getColorForFiliere = (filiereCode: string): keyof typeof colorClasses => { + const filiere = filieres.find(f => f.code === filiereCode); + return (filiere?.color as keyof typeof colorClasses) || 'blue'; + }; + + return ( +
+ {/* En-tête */} +
+

+ Filières D, E et F +

+

+ {emploisData.length} emplois - Grille de salaires CCNPA (IDCC 2642) - Valeurs 2025 +

+
+ + {/* Recherche */} +
+ {/* Barre de recherche */} +
+ + setSearchTerm(e.target.value)} + placeholder="Rechercher un emploi (nom ou filière D/E/F)..." + className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-slate-200 focus:ring-2 focus:ring-cyan-500 focus:border-transparent text-sm" + /> +
+ + {/* Résultats */} +
+
+

+ {filteredEmplois.length} emploi{filteredEmplois.length > 1 ? 's' : ''} trouvé{filteredEmplois.length > 1 ? 's' : ''} +

+ {searchTerm && ( + + )} +
+ +
+ {filteredEmplois.map((emploi, index) => ( + + ))} +
+ + {filteredEmplois.length === 0 && ( +
+

Aucun emploi trouvé pour cette recherche.

+
+ )} +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data-part3.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data-part3.tsx new file mode 100644 index 0000000..83b1f4a --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data-part3.tsx @@ -0,0 +1,603 @@ +"use client"; + +import React, { useState, useMemo } from 'react'; +import { Clapperboard, Volume2, Globe, Search, ChevronDown, ChevronUp } from 'lucide-react'; + +const parseEuro = (str: string) => { + if (!str || str === '-') return null; + const cleaned = str.replace(/\s/g, '').replace('€', '').replace(',', '.'); + return parseFloat(cleaned); +}; + +const euro = (n: number | null) => { + if (n === null) return '-'; + return new Intl.NumberFormat('fr-FR', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(n) + ' €'; +}; + +interface Emploi { + nom: string; + filiere: string; + niveau: string; + cddu: { + semaine35h: number | null; + semaine39h: number | null; + jour7h: number | null; + jour8h: number | null; + mois35h: number | null; + mois39h: number | null; + }; + cdi: number | null; +} + +const emploisData: Emploi[] = [ + // Filière G - Réalisation + { + nom: "1er assistant réalisateur", + filiere: "G", + niveau: "II", + cddu: { + semaine35h: parseEuro("962,49 €"), + semaine39h: parseEuro("1 099,99 €"), + jour7h: parseEuro("213,89 €"), + jour8h: parseEuro("244,44 €"), + mois35h: parseEuro("3 657,48 €"), + mois39h: parseEuro("4 179,96 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "2ème assistant réalisateur", + filiere: "G", + niveau: "IV", + cddu: { + semaine35h: parseEuro("804,93 €"), + semaine39h: parseEuro("919,92 €"), + jour7h: parseEuro("178,87 €"), + jour8h: parseEuro("204,43 €"), + mois35h: parseEuro("3 058,73 €"), + mois39h: parseEuro("3 495,68 €"), + }, + cdi: parseEuro("1 988,58 €"), + }, + { + nom: "Assistant réalisateur adjoint", + filiere: "G", + niveau: "VI", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Assistant scripte adjoint", + filiere: "G", + niveau: "VI", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Conseiller technique à la réalisation", + filiere: "G", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 051,06 €"), + semaine39h: parseEuro("1 201,21 €"), + jour7h: parseEuro("233,57 €"), + jour8h: parseEuro("266,94 €"), + mois35h: parseEuro("3 994,02 €"), + mois39h: parseEuro("4 564,58 €"), + }, + cdi: parseEuro("3 013,00 €"), + }, + { + nom: "Répétiteur", + filiere: "G", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("746,08 €"), + semaine39h: parseEuro("852,66 €"), + jour7h: parseEuro("165,80 €"), + jour8h: parseEuro("189,48 €"), + mois35h: parseEuro("2 835,09 €"), + mois39h: parseEuro("3 240,10 €"), + }, + cdi: parseEuro("2 048,84 €"), + }, + { + nom: "Scripte", + filiere: "G", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("962,49 €"), + semaine39h: parseEuro("1 099,99 €"), + jour7h: parseEuro("213,89 €"), + jour8h: parseEuro("244,44 €"), + mois35h: parseEuro("3 657,48 €"), + mois39h: parseEuro("4 179,96 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Storyboarder", + filiere: "G", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("894,37 €"), + semaine39h: parseEuro("1 022,14 €"), + jour7h: parseEuro("198,75 €"), + jour8h: parseEuro("227,14 €"), + mois35h: parseEuro("3 398,61 €"), + mois39h: parseEuro("3 884,11 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + + // Filière H - Son + { + nom: "Assistant son", + filiere: "H", + niveau: "IV", + cddu: { + semaine35h: parseEuro("714,32 €"), + semaine39h: parseEuro("816,36 €"), + jour7h: parseEuro("158,74 €"), + jour8h: parseEuro("181,41 €"), + mois35h: parseEuro("2 714,40 €"), + mois39h: parseEuro("3 102,16 €"), + }, + cdi: parseEuro("1 928,32 €"), + }, + { + nom: "Assistant son adjoint", + filiere: "H", + niveau: "VI", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Bruiteur", + filiere: "H", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 051,06 €"), + semaine39h: parseEuro("1 201,21 €"), + jour7h: parseEuro("233,57 €"), + jour8h: parseEuro("266,94 €"), + mois35h: parseEuro("3 994,02 €"), + mois39h: parseEuro("4 564,58 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Chef OPS / Ingénieur du son", + filiere: "H", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 212,78 €"), + semaine39h: parseEuro("1 386,03 €"), + jour7h: parseEuro("269,51 €"), + jour8h: parseEuro("308,01 €"), + mois35h: parseEuro("4 608,56 €"), + mois39h: parseEuro("5 266,91 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Perchiste / 1er assistant son", + filiere: "H", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("882,10 €"), + semaine39h: parseEuro("1 008,12 €"), + jour7h: parseEuro("196,02 €"), + jour8h: parseEuro("224,03 €"), + mois35h: parseEuro("3 351,98 €"), + mois39h: parseEuro("3 830,83 €"), + }, + cdi: parseEuro("2 410,40 €"), + }, + + // Filière I - Web + { + nom: "Assistant technique web", + filiere: "I", + niveau: "VI", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 006,02 €"), + mois39h: parseEuro("2 292,59 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Concepteur de programme web", + filiere: "I", + niveau: "I", + cddu: { + semaine35h: parseEuro("785,78 €"), + semaine39h: parseEuro("898,03 €"), + jour7h: parseEuro("174,62 €"), + jour8h: parseEuro("199,56 €"), + mois35h: parseEuro("3 402,43 €"), + mois39h: parseEuro("3 888,47 €"), + }, + cdi: parseEuro("2 969,12 €"), + }, + { + nom: "Coordinateur de diffusion web", + filiere: "I", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("519,92 €"), + semaine39h: parseEuro("594,19 €"), + jour7h: parseEuro("115,54 €"), + jour8h: parseEuro("132,04 €"), + mois35h: parseEuro("2 251,23 €"), + mois39h: parseEuro("2 572,83 €"), + }, + cdi: parseEuro("1 959,62 €"), + }, + { + nom: "Coordinateur de production web", + filiere: "I", + niveau: "II", + cddu: { + semaine35h: parseEuro("590,82 €"), + semaine39h: parseEuro("675,22 €"), + jour7h: parseEuro("131,29 €"), + jour8h: parseEuro("150,05 €"), + mois35h: parseEuro("2 558,24 €"), + mois39h: parseEuro("2 923,70 €"), + }, + cdi: parseEuro("2 197,15 €"), + }, + { + nom: "Designer web", + filiere: "I", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("543,55 €"), + semaine39h: parseEuro("621,20 €"), + jour7h: parseEuro("120,79 €"), + jour8h: parseEuro("138,05 €"), + mois35h: parseEuro("2 353,59 €"), + mois39h: parseEuro("2 689,80 €"), + }, + cdi: parseEuro("2 019,01 €"), + }, + { + nom: "Editeur artistique web", + filiere: "I", + niveau: "IV", + cddu: { + semaine35h: parseEuro("502,19 €"), + semaine39h: parseEuro("573,93 €"), + jour7h: parseEuro("111,60 €"), + jour8h: parseEuro("127,54 €"), + mois35h: parseEuro("2 174,48 €"), + mois39h: parseEuro("2 485,11 €"), + }, + cdi: parseEuro("1 900,24 €"), + }, + { + nom: "Gestionnaire de diffusion internet (traffic manager)", + filiere: "I", + niveau: "V", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 006,02 €"), + mois39h: parseEuro("2 292,59 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Opérateur web / Opérateur multicam web", + filiere: "I", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("567,18 €"), + semaine39h: parseEuro("648,21 €"), + jour7h: parseEuro("126,04 €"), + jour8h: parseEuro("144,05 €"), + mois35h: parseEuro("2 455,89 €"), + mois39h: parseEuro("2 806,72 €"), + }, + cdi: parseEuro("2 137,77 €"), + }, + { + nom: "Technicien de développement web", + filiere: "I", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("519,92 €"), + semaine39h: parseEuro("594,19 €"), + jour7h: parseEuro("115,54 €"), + jour8h: parseEuro("132,04 €"), + mois35h: parseEuro("2 251,23 €"), + mois39h: parseEuro("2 572,83 €"), + }, + cdi: parseEuro("1 959,62 €"), + }, + { + nom: "Technicien vidéo web", + filiere: "I", + niveau: "V", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 006,02 €"), + mois39h: parseEuro("2 292,59 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, +]; + +const filieres = [ + { code: 'G', nom: 'Réalisation', icon: Clapperboard, color: 'orange' }, + { code: 'H', nom: 'Son', icon: Volume2, color: 'red' }, + { code: 'I', nom: 'Web', icon: Globe, color: 'teal' }, +]; + +const colorClasses = { + orange: { + bg: 'bg-orange-50', + border: 'border-orange-200', + text: 'text-orange-900', + hover: 'hover:bg-orange-100', + gradient: 'from-orange-500 to-amber-600', + ring: 'ring-orange-500', + }, + red: { + bg: 'bg-red-50', + border: 'border-red-200', + text: 'text-red-900', + hover: 'hover:bg-red-100', + gradient: 'from-red-500 to-rose-600', + ring: 'ring-red-500', + }, + teal: { + bg: 'bg-teal-50', + border: 'border-teal-200', + text: 'text-teal-900', + hover: 'hover:bg-teal-100', + gradient: 'from-teal-500 to-cyan-600', + ring: 'ring-teal-500', + }, +}; + +interface EmploiCardProps { + emploi: Emploi; + color: keyof typeof colorClasses; +} + +function EmploiCard({ emploi, color }: EmploiCardProps) { + const [isExpanded, setIsExpanded] = useState(false); + const [activeTab, setActiveTab] = useState<'cddu' | 'cdi'>('cdi'); + const colors = colorClasses[color]; + + return ( +
+ {/* Header */} + + + {/* Content */} + {isExpanded && ( +
+ {/* Tabs */} +
+ + +
+ + {/* Content based on tab */} + {activeTab === 'cdi' ? ( +
+

Salaire mensuel minimum

+

{euro(emploi.cdi)}

+
+ ) : ( +
+ {/* Par semaine */} +
+

Par semaine

+
+
+

Base 35h

+

{euro(emploi.cddu.semaine35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.semaine39h)}

+
+
+
+ + {/* Par jour */} +
+

Par jour

+
+
+

Base 7h

+

{euro(emploi.cddu.jour7h)}

+
+
+

Base 8h

+

{euro(emploi.cddu.jour8h)}

+
+
+
+ + {/* Par mois */} +
+

Par mois

+
+
+

Base 35h

+

{euro(emploi.cddu.mois35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.mois39h)}

+
+
+
+
+ )} +
+ )} +
+ ); +} + +interface CategorieBFictionDataPart3Props { + activeFiliere: string; +} + +export default function CategorieBFictionDataPart3({ activeFiliere }: CategorieBFictionDataPart3Props) { + const [searchTerm, setSearchTerm] = useState(''); + + const filteredEmplois = useMemo(() => { + // D'abord filtrer par la filière active + let result = emploisData.filter(e => e.filiere === activeFiliere); + + // Puis appliquer le filtre de recherche + if (searchTerm) { + result = result.filter(e => + e.nom.toLowerCase().includes(searchTerm.toLowerCase()) + ); + } + + return result.sort((a, b) => a.nom.localeCompare(b.nom)); + }, [activeFiliere, searchTerm]); + + // Déterminer la couleur en fonction de la filière + const getColorForFiliere = (filiereCode: string): keyof typeof colorClasses => { + const filiere = filieres.find(f => f.code === filiereCode); + return (filiere?.color as keyof typeof colorClasses) || 'blue'; + }; + + return ( +
+ {/* En-tête */} +
+

+ Filières G, H et I +

+

+ {emploisData.length} emplois - Grille de salaires CCNPA (IDCC 2642) - Valeurs 2025 +

+
+ + {/* Recherche */} +
+ {/* Barre de recherche */} +
+ + setSearchTerm(e.target.value)} + placeholder="Rechercher un emploi (nom ou filière G/H/I)..." + className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-slate-200 focus:ring-2 focus:ring-cyan-500 focus:border-transparent text-sm" + /> +
+ + {/* Résultats */} +
+
+

+ {filteredEmplois.length} emploi{filteredEmplois.length > 1 ? 's' : ''} trouvé{filteredEmplois.length > 1 ? 's' : ''} +

+ {searchTerm && ( + + )} +
+ +
+ {filteredEmplois.map((emploi, index) => ( + + ))} +
+ + {filteredEmplois.length === 0 && ( +
+

Aucun emploi trouvé pour cette recherche.

+
+ )} +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data.tsx new file mode 100644 index 0000000..b3d52cc --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-fiction-data.tsx @@ -0,0 +1,979 @@ +"use client"; + +import React, { useState, useMemo } from 'react'; +import { Pencil, Palette, Camera, Search, ChevronDown, ChevronUp } from 'lucide-react'; + +const parseEuro = (str: string) => { + if (!str || str === '-') return null; + const cleaned = str.replace(/\s/g, '').replace('€', '').replace(',', '.'); + return parseFloat(cleaned); +}; + +const euro = (n: number | null) => { + if (n === null) return '-'; + return new Intl.NumberFormat('fr-FR', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(n) + ' €'; +}; + +interface Emploi { + nom: string; + filiere: string; + niveau: string; + cddu: { + semaine35h: number | null; + semaine39h: number | null; + jour7h: number | null; + jour8h: number | null; + mois35h: number | null; + mois39h: number | null; + }; + cdi: number | null; +} + +const emploisData: Emploi[] = [ + // Filière A - Écriture + { + nom: "Chargé de recherche", + filiere: "A", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("803,07 €"), + semaine39h: parseEuro("917,80 €"), + jour7h: parseEuro("178,46 €"), + jour8h: parseEuro("203,95 €"), + mois35h: parseEuro("3 051,68 €"), + mois39h: parseEuro("3 487,62 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Chargé de sélection", + filiere: "A", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("822,67 €"), + semaine39h: parseEuro("940,19 €"), + jour7h: parseEuro("182,82 €"), + jour8h: parseEuro("208,93 €"), + mois35h: parseEuro("3 126,14 €"), + mois39h: parseEuro("3 572,72 €"), + }, + cdi: parseEuro("2 590,58 €"), + }, + { + nom: "Collaborateur artistique", + filiere: "A", + niveau: "IV", + cddu: { + semaine35h: parseEuro("534,27 €"), + semaine39h: parseEuro("610,60 €"), + jour7h: parseEuro("118,73 €"), + jour8h: parseEuro("135,69 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Conseiller artistique d'émission", + filiere: "A", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("807,61 €"), + semaine39h: parseEuro("922,98 €"), + jour7h: parseEuro("179,47 €"), + jour8h: parseEuro("205,11 €"), + mois35h: parseEuro("3 068,91 €"), + mois39h: parseEuro("3 507,31 €"), + }, + cdi: parseEuro("2 590,58 €"), + }, + { + nom: "Coordinateur d'écriture (ex script éditeur)", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("877,44 €"), + semaine39h: parseEuro("1 002,79 €"), + jour7h: parseEuro("194,99 €"), + jour8h: parseEuro("222,84 €"), + mois35h: parseEuro("3 334,28 €"), + mois39h: parseEuro("3 810,59 €"), + }, + cdi: parseEuro("3 013,00 €"), + }, + { + nom: "Dir. de collection / Dir. de programmation", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 127,35 €"), + semaine39h: parseEuro("1 288,39 €"), + jour7h: parseEuro("250,52 €"), + jour8h: parseEuro("286,31 €"), + mois35h: parseEuro("4 283,91 €"), + mois39h: parseEuro("4 895,89 €"), + }, + cdi: parseEuro("2 952,74 €"), + }, + { + nom: "Directeur artistique", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 127,35 €"), + semaine39h: parseEuro("1 288,39 €"), + jour7h: parseEuro("250,52 €"), + jour8h: parseEuro("286,31 €"), + mois35h: parseEuro("4 283,91 €"), + mois39h: parseEuro("4 895,89 €"), + }, + cdi: parseEuro("2 952,74 €"), + }, + { + nom: "Directeur de la distribution", + filiere: "A", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("877,44 €"), + semaine39h: parseEuro("1 002,79 €"), + jour7h: parseEuro("194,99 €"), + jour8h: parseEuro("222,84 €"), + mois35h: parseEuro("3 334,28 €"), + mois39h: parseEuro("3 810,59 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Directeur des dialogues", + filiere: "A", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("746,08 €"), + semaine39h: parseEuro("852,66 €"), + jour7h: parseEuro("165,80 €"), + jour8h: parseEuro("189,48 €"), + mois35h: parseEuro("2 835,09 €"), + mois39h: parseEuro("3 240,10 €"), + }, + cdi: parseEuro("2 048,84 €"), + }, + { + nom: "Documentaliste", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("838,98 €"), + semaine39h: parseEuro("958,83 €"), + jour7h: parseEuro("186,44 €"), + jour8h: parseEuro("213,07 €"), + mois35h: parseEuro("3 188,12 €"), + mois39h: parseEuro("3 643,55 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Enquêteur / Recherchiste", + filiere: "A", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("768,45 €"), + semaine39h: parseEuro("878,23 €"), + jour7h: parseEuro("170,77 €"), + jour8h: parseEuro("195,16 €"), + mois35h: parseEuro("2 920,11 €"), + mois39h: parseEuro("3 337,26 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Responsable d'enquête / de recherche", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("838,98 €"), + semaine39h: parseEuro("958,83 €"), + jour7h: parseEuro("186,44 €"), + jour8h: parseEuro("213,07 €"), + mois35h: parseEuro("3 188,12 €"), + mois39h: parseEuro("3 643,55 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + + // Filière B - Décor & Costume + { + nom: "1er assistant décorateur", + filiere: "B", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("962,49 €"), + semaine39h: parseEuro("1 099,99 €"), + jour7h: parseEuro("213,89 €"), + jour8h: parseEuro("244,44 €"), + mois35h: parseEuro("3 657,48 €"), + mois39h: parseEuro("4 179,96 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "2ème assistant décorateur", + filiere: "B", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("839,05 €"), + semaine39h: parseEuro("958,92 €"), + jour7h: parseEuro("186,46 €"), + jour8h: parseEuro("213,09 €"), + mois35h: parseEuro("3 188,41 €"), + mois39h: parseEuro("3 643,88 €"), + }, + cdi: parseEuro("2 109,10 €"), + }, + { + nom: "Accessoiriste", + filiere: "B", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("810,81 €"), + semaine39h: parseEuro("926,64 €"), + jour7h: parseEuro("180,18 €"), + jour8h: parseEuro("205,92 €"), + mois35h: parseEuro("3 081,06 €"), + mois39h: parseEuro("3 521,20 €"), + }, + cdi: parseEuro("2 048,84 €"), + }, + { + nom: "Assistant décorateur adjoint", + filiere: "B", + niveau: "VI", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Chef constructeur", + filiere: "B", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 221,74 €"), + semaine39h: parseEuro("1 396,28 €"), + jour7h: parseEuro("271,50 €"), + jour8h: parseEuro("310,28 €"), + mois35h: parseEuro("4 642,63 €"), + mois39h: parseEuro("5 305,84 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Chef costumier", + filiere: "B", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("894,37 €"), + semaine39h: parseEuro("1 022,14 €"), + jour7h: parseEuro("198,75 €"), + jour8h: parseEuro("227,14 €"), + mois35h: parseEuro("3 398,61 €"), + mois39h: parseEuro("3 884,11 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Chef d'équipe de décor", + filiere: "B", + niveau: "IV", + cddu: { + semaine35h: parseEuro("1 114,05 €"), + semaine39h: parseEuro("1 273,20 €"), + jour7h: parseEuro("247,57 €"), + jour8h: parseEuro("282,93 €"), + mois35h: parseEuro("4 233,38 €"), + mois39h: parseEuro("4 838,13 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Chef décorateur", + filiere: "B", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 664,48 €"), + semaine39h: parseEuro("1 902,26 €"), + jour7h: parseEuro("369,88 €"), + jour8h: parseEuro("422,73 €"), + mois35h: parseEuro("6 325,03 €"), + mois39h: parseEuro("7 228,58 €"), + }, + cdi: parseEuro("3 013,00 €"), + }, + { + nom: "Constructeur de décor", + filiere: "B", + niveau: "IV", + cddu: { + semaine35h: parseEuro("932,11 €"), + semaine39h: parseEuro("1 065,27 €"), + jour7h: parseEuro("207,14 €"), + jour8h: parseEuro("236,73 €"), + mois35h: parseEuro("3 542,03 €"), + mois39h: parseEuro("4 048,02 €"), + }, + cdi: parseEuro("2 481,29 €"), + }, + { + nom: "Costumier", + filiere: "B", + niveau: "IV", + cddu: { + semaine35h: parseEuro("714,32 €"), + semaine39h: parseEuro("816,36 €"), + jour7h: parseEuro("158,74 €"), + jour8h: parseEuro("181,41 €"), + mois35h: parseEuro("2 714,40 €"), + mois39h: parseEuro("3 102,16 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Créateur de costume", + filiere: "B", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 640,95 €"), + semaine39h: parseEuro("1 875,37 €"), + jour7h: parseEuro("364,66 €"), + jour8h: parseEuro("416,75 €"), + mois35h: parseEuro("6 235,62 €"), + mois39h: parseEuro("7 126,40 €"), + }, + cdi: parseEuro("3 013,00 €"), + }, + { + nom: "Décorateur", + filiere: "B", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 069,70 €"), + semaine39h: parseEuro("1 222,51 €"), + jour7h: parseEuro("237,71 €"), + jour8h: parseEuro("271,67 €"), + mois35h: parseEuro("4 064,86 €"), + mois39h: parseEuro("4 645,54 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Dessinateur en décor", + filiere: "B", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("839,05 €"), + semaine39h: parseEuro("958,92 €"), + jour7h: parseEuro("186,46 €"), + jour8h: parseEuro("213,09 €"), + mois35h: parseEuro("3 188,41 €"), + mois39h: parseEuro("3 643,88 €"), + }, + cdi: parseEuro("2 109,10 €"), + }, + { + nom: "Électricien déco / Machiniste déco", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("920,25 €"), + semaine39h: parseEuro("1 051,72 €"), + jour7h: parseEuro("204,50 €"), + jour8h: parseEuro("233,72 €"), + mois35h: parseEuro("3 496,97 €"), + mois39h: parseEuro("3 996,52 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Ensemblier - décorateur", + filiere: "B", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("962,49 €"), + semaine39h: parseEuro("1 099,99 €"), + jour7h: parseEuro("213,89 €"), + jour8h: parseEuro("244,44 €"), + mois35h: parseEuro("3 657,48 €"), + mois39h: parseEuro("4 179,96 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Habilleur", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("643,70 €"), + semaine39h: parseEuro("735,66 €"), + jour7h: parseEuro("143,04 €"), + jour8h: parseEuro("163,48 €"), + mois35h: parseEuro("2 446,06 €"), + mois39h: parseEuro("2 795,49 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Maçon de décor", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("920,25 €"), + semaine39h: parseEuro("1 051,72 €"), + jour7h: parseEuro("204,50 €"), + jour8h: parseEuro("233,72 €"), + mois35h: parseEuro("3 496,97 €"), + mois39h: parseEuro("3 996,52 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Menuisier-traceur-toupilleur de décor", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("949,67 €"), + semaine39h: parseEuro("1 085,34 €"), + jour7h: parseEuro("211,04 €"), + jour8h: parseEuro("241,19 €"), + mois35h: parseEuro("3 608,76 €"), + mois39h: parseEuro("4 124,29 €"), + }, + cdi: parseEuro("2 410,40 €"), + }, + { + nom: "Métallier / Serrurier / Mécanicien de décor", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("920,25 €"), + semaine39h: parseEuro("1 051,72 €"), + jour7h: parseEuro("204,50 €"), + jour8h: parseEuro("233,72 €"), + mois35h: parseEuro("3 496,97 €"), + mois39h: parseEuro("3 996,52 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Peintre de décor", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("920,25 €"), + semaine39h: parseEuro("1 051,72 €"), + jour7h: parseEuro("204,50 €"), + jour8h: parseEuro("233,72 €"), + mois35h: parseEuro("3 496,97 €"), + mois39h: parseEuro("3 996,52 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Peintre en lettres / en faux bois de décor", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("920,25 €"), + semaine39h: parseEuro("1 051,72 €"), + jour7h: parseEuro("204,50 €"), + jour8h: parseEuro("233,72 €"), + mois35h: parseEuro("3 496,97 €"), + mois39h: parseEuro("3 996,52 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Régisseur d'extérieurs", + filiere: "B", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("839,05 €"), + semaine39h: parseEuro("958,92 €"), + jour7h: parseEuro("186,46 €"), + jour8h: parseEuro("213,09 €"), + mois35h: parseEuro("3 188,41 €"), + mois39h: parseEuro("3 643,88 €"), + }, + cdi: parseEuro("2 109,10 €"), + }, + { + nom: "Rippeur", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("822,58 €"), + semaine39h: parseEuro("940,09 €"), + jour7h: parseEuro("182,80 €"), + jour8h: parseEuro("208,91 €"), + mois35h: parseEuro("3 125,81 €"), + mois39h: parseEuro("3 572,35 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Staffeur de décor", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("949,67 €"), + semaine39h: parseEuro("1 085,34 €"), + jour7h: parseEuro("211,04 €"), + jour8h: parseEuro("241,19 €"), + mois35h: parseEuro("3 608,76 €"), + mois39h: parseEuro("4 124,29 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Styliste", + filiere: "B", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("804,93 €"), + semaine39h: parseEuro("919,92 €"), + jour7h: parseEuro("178,87 €"), + jour8h: parseEuro("204,43 €"), + mois35h: parseEuro("3 058,73 €"), + mois39h: parseEuro("3 495,68 €"), + }, + cdi: parseEuro("2 048,84 €"), + }, + { + nom: "Tapissier de décor", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("920,25 €"), + semaine39h: parseEuro("1 051,72 €"), + jour7h: parseEuro("204,50 €"), + jour8h: parseEuro("233,72 €"), + mois35h: parseEuro("3 496,97 €"), + mois39h: parseEuro("3 996,52 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + + // Filière C - Image + { + nom: "1er assistant OPV / pointeur", + filiere: "C", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("968,32 €"), + semaine39h: parseEuro("1 106,66 €"), + jour7h: parseEuro("215,18 €"), + jour8h: parseEuro("245,92 €"), + mois35h: parseEuro("3 679,63 €"), + mois39h: parseEuro("4 205,28 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "2ème assistant OPV", + filiere: "C", + niveau: "V", + cddu: { + semaine35h: parseEuro("714,32 €"), + semaine39h: parseEuro("816,36 €"), + jour7h: parseEuro("158,74 €"), + jour8h: parseEuro("181,41 €"), + mois35h: parseEuro("2 714,40 €"), + mois39h: parseEuro("3 102,16 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Assistant lumière", + filiere: "C", + niveau: "IV", + cddu: { + semaine35h: parseEuro("764,93 €"), + semaine39h: parseEuro("874,20 €"), + jour7h: parseEuro("169,98 €"), + jour8h: parseEuro("194,27 €"), + mois35h: parseEuro("2 906,72 €"), + mois39h: parseEuro("3 321,95 €"), + }, + cdi: parseEuro("2 018,71 €"), + }, + { + nom: "Assistant OPV adjoint", + filiere: "C", + niveau: "VI", + cddu: { + semaine35h: parseEuro("463,28 €"), + semaine39h: parseEuro("529,47 €"), + jour7h: parseEuro("102,95 €"), + jour8h: parseEuro("117,66 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Cadreur / OPV", + filiere: "C", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 125,04 €"), + semaine39h: parseEuro("1 285,76 €"), + jour7h: parseEuro("250,01 €"), + jour8h: parseEuro("285,72 €"), + mois35h: parseEuro("4 275,15 €"), + mois39h: parseEuro("4 885,87 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Directeur photo", + filiere: "C", + niveau: "I", + cddu: { + semaine35h: parseEuro("1 762,00 €"), + semaine39h: parseEuro("2 013,72 €"), + jour7h: parseEuro("391,56 €"), + jour8h: parseEuro("447,49 €"), + mois35h: parseEuro("6 695,61 €"), + mois39h: parseEuro("7 652,11 €"), + }, + cdi: parseEuro("3 314,29 €"), + }, + { + nom: "Opérateur de transfert et de traitement numérique", + filiere: "C", + niveau: "V", + cddu: { + semaine35h: parseEuro("714,32 €"), + semaine39h: parseEuro("816,36 €"), + jour7h: parseEuro("158,74 €"), + jour8h: parseEuro("181,41 €"), + mois35h: parseEuro("2 714,40 €"), + mois39h: parseEuro("3 102,17 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Opérateur spécial (steadicamer)", + filiere: "C", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 180,27 €"), + semaine39h: parseEuro("1 348,88 €"), + jour7h: parseEuro("262,28 €"), + jour8h: parseEuro("299,75 €"), + mois35h: parseEuro("4 485,04 €"), + mois39h: parseEuro("5 125,75 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Photographe de plateau", + filiere: "C", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("810,81 €"), + semaine39h: parseEuro("926,64 €"), + jour7h: parseEuro("180,18 €"), + jour8h: parseEuro("205,92 €"), + mois35h: parseEuro("3 081,06 €"), + mois39h: parseEuro("3 521,20 €"), + }, + cdi: parseEuro("2 229,61 €"), + }, + { + nom: "Pupitreur lumière", + filiere: "C", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("932,11 €"), + semaine39h: parseEuro("1 065,27 €"), + jour7h: parseEuro("207,14 €"), + jour8h: parseEuro("236,73 €"), + mois35h: parseEuro("3 542,03 €"), + mois39h: parseEuro("4 048,02 €"), + }, + cdi: parseEuro("2 481,29 €"), + }, + { + nom: "Superviseur d'effets spéciaux image", + filiere: "C", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 051,06 €"), + semaine39h: parseEuro("1 201,21 €"), + jour7h: parseEuro("233,57 €"), + jour8h: parseEuro("266,94 €"), + mois35h: parseEuro("3 994,02 €"), + mois39h: parseEuro("4 564,58 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Technicien vidéo", + filiere: "C", + niveau: "IV", + cddu: { + semaine35h: parseEuro("822,58 €"), + semaine39h: parseEuro("940,09 €"), + jour7h: parseEuro("182,80 €"), + jour8h: parseEuro("208,91 €"), + mois35h: parseEuro("3 125,81 €"), + mois39h: parseEuro("3 572,35 €"), + }, + cdi: parseEuro("2 109,10 €"), + }, +]; + +const filieres = [ + { code: 'A', nom: 'Contenu du programme et collaboration artistique', icon: Pencil, color: 'violet' }, + { code: 'B', nom: 'Costumes, décor', icon: Palette, color: 'blue' }, + { code: 'C', nom: 'Image', icon: Camera, color: 'cyan' }, +]; + +const colorClasses = { + violet: { + bg: 'bg-violet-50', + border: 'border-violet-200', + text: 'text-violet-900', + hover: 'hover:bg-violet-100', + gradient: 'from-violet-500 to-purple-600', + ring: 'ring-violet-500', + }, + blue: { + bg: 'bg-blue-50', + border: 'border-blue-200', + text: 'text-blue-900', + hover: 'hover:bg-blue-100', + gradient: 'from-blue-500 to-indigo-600', + ring: 'ring-blue-500', + }, + cyan: { + bg: 'bg-cyan-50', + border: 'border-cyan-200', + text: 'text-cyan-900', + hover: 'hover:bg-cyan-100', + gradient: 'from-cyan-500 to-blue-600', + ring: 'ring-cyan-500', + }, +}; + +interface EmploiCardProps { + emploi: Emploi; + color: keyof typeof colorClasses; +} + +function EmploiCard({ emploi, color }: EmploiCardProps) { + const [isExpanded, setIsExpanded] = useState(false); + const [activeTab, setActiveTab] = useState<'cddu' | 'cdi'>('cdi'); + const colors = colorClasses[color]; + + return ( +
+ {/* Header */} + + + {/* Content */} + {isExpanded && ( +
+ {/* Tabs */} +
+ + +
+ + {/* Content based on tab */} + {activeTab === 'cdi' ? ( +
+

Salaire mensuel minimum

+

{euro(emploi.cdi)}

+
+ ) : ( +
+ {/* Par semaine */} +
+

Par semaine

+
+
+

Base 35h

+

{euro(emploi.cddu.semaine35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.semaine39h)}

+
+
+
+ + {/* Par jour */} +
+

Par jour

+
+
+

Base 7h

+

{euro(emploi.cddu.jour7h)}

+
+
+

Base 8h

+

{euro(emploi.cddu.jour8h)}

+
+
+
+ + {/* Par mois */} +
+

Par mois

+
+
+

Base 35h

+

{euro(emploi.cddu.mois35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.mois39h)}

+
+
+
+
+ )} +
+ )} +
+ ); +} + +interface CategorieBFictionContentProps { + activeFiliere: string; +} + +export default function CategorieBFictionContent({ activeFiliere }: CategorieBFictionContentProps) { + const [searchTerm, setSearchTerm] = useState(''); + + const filteredEmplois = useMemo(() => { + // D'abord filtrer par la filière active + let result = emploisData.filter(e => e.filiere === activeFiliere); + + // Puis appliquer le filtre de recherche + if (searchTerm) { + result = result.filter(e => + e.nom.toLowerCase().includes(searchTerm.toLowerCase()) + ); + } + + return result.sort((a, b) => a.nom.localeCompare(b.nom)); + }, [activeFiliere, searchTerm]); + + // Obtenir les infos de la filière active + const activeFiliereInfo = filieres.find(f => f.code === activeFiliere); + const colorForActive = (activeFiliereInfo?.color as keyof typeof colorClasses) || 'violet'; + + return ( +
+ {/* En-tête */} +
+

+ Filière {activeFiliere} - {activeFiliereInfo?.nom || 'Filière'} +

+

+ {filteredEmplois.length} emploi{filteredEmplois.length > 1 ? 's' : ''} - Grille de salaires CCNPA (IDCC 2642) - Valeurs 2025 +

+
+ + {/* Recherche */} +
+ {/* Barre de recherche */} +
+ + setSearchTerm(e.target.value)} + placeholder={`Rechercher dans ${activeFiliereInfo?.nom || 'la filière'}...`} + className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-slate-200 focus:ring-2 focus:ring-cyan-500 focus:border-transparent text-sm" + /> +
+ + {/* Résultats */} +
+
+

+ {filteredEmplois.length} emploi{filteredEmplois.length > 1 ? 's' : ''} trouvé{filteredEmplois.length > 1 ? 's' : ''} +

+ {searchTerm && ( + + )} +
+ +
+ {filteredEmplois.map((emploi, index) => ( + + ))} +
+ + {filteredEmplois.length === 0 && ( +
+

Aucun emploi trouvé pour cette recherche.

+
+ )} +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-fiction.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-fiction.tsx new file mode 100644 index 0000000..394b95c --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-fiction.tsx @@ -0,0 +1,90 @@ +"use client"; + +import React, { useState } from 'react'; +import CategorieBFictionDataPart1 from './categorie-b-fiction-data'; +import CategorieBFictionDataPart2 from './categorie-b-fiction-data-part2'; +import CategorieBFictionDataPart3 from './categorie-b-fiction-data-part3'; + +type Filiere = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I'; + +const filieres: { code: Filiere; nom: string; part: 1 | 2 | 3 }[] = [ + { code: 'A', nom: 'Contenu du programme et collaboration artistique', part: 1 }, + { code: 'B', nom: 'Costumes, décor', part: 1 }, + { code: 'C', nom: 'Image', part: 1 }, + { code: 'D', nom: 'Plateaux et tournage', part: 2 }, + { code: 'E', nom: 'Postproduction', part: 2 }, + { code: 'F', nom: 'Production', part: 2 }, + { code: 'G', nom: 'Réalisation', part: 3 }, + { code: 'H', nom: 'Son', part: 3 }, + { code: 'I', nom: 'Web', part: 3 }, +]; + +export default function CategorieBFiction() { + const [activeFiliere, setActiveFiliere] = useState('A'); + const [hoveredFiliere, setHoveredFiliere] = useState(null); + + return ( +
+ {/* En-tête de la catégorie */} +
+

+ Catégorie B - Fiction +

+

+ Grille des salaires par filière - Production audiovisuelle fiction +

+ {/* Ligne d'information globale supprimée pour alléger l'en-tête */} +
+ + {/* Sélection des filières */} +
+

+ Sélectionnez une filière pour explorer les emplois : +

+ +
+ {filieres.map((filiere) => ( +
+ + + {/* Tooltip */} + {hoveredFiliere === filiere.code && ( +
+ {filiere.nom} +
+
+
+
+ )} +
+ ))} +
+ + {/* Contenu */} +
+ {filieres.find(f => f.code === activeFiliere)?.part === 1 && } + {filieres.find(f => f.code === activeFiliere)?.part === 2 && } + {filieres.find(f => f.code === activeFiliere)?.part === 3 && } +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-flux-data-part2.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-flux-data-part2.tsx new file mode 100644 index 0000000..eefef80 --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-flux-data-part2.tsx @@ -0,0 +1,828 @@ +"use client"; + +import React, { useState, useMemo } from 'react'; +import { Sparkles, Film, ClipboardList, Search, ChevronDown, ChevronUp } from 'lucide-react'; + +const parseEuro = (str: string) => { + if (!str || str === '-') return null; + const cleaned = str.replace(/\s/g, '').replace('€', '').replace(',', '.'); + return parseFloat(cleaned); +}; + +const euro = (n: number | null) => { + if (n === null) return '-'; + return new Intl.NumberFormat('fr-FR', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(n) + ' €'; +}; + +interface Emploi { + nom: string; + filiere: string; + niveau: string; + cddu: { + semaine35h: number | null; + semaine39h: number | null; + jour7h: number | null; + jour8h: number | null; + mois35h: number | null; + mois39h: number | null; + }; + cdi: number | null; +} + +const emploisData: Emploi[] = [ + // Filière D - Maquillage & Coiffure + { + nom: "Blocker / Rigger", + filiere: "D", + niveau: "IV", + cddu: { + semaine35h: parseEuro("861,07 €"), + semaine39h: parseEuro("984,08 €"), + jour7h: parseEuro("191,35 €"), + jour8h: parseEuro("218,68 €"), + mois35h: parseEuro("3 272,07 €"), + mois39h: parseEuro("3 739,49 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Chef électricien", + filiere: "D", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("975,19 €"), + semaine39h: parseEuro("1 114,51 €"), + jour7h: parseEuro("216,71 €"), + jour8h: parseEuro("247,67 €"), + mois35h: parseEuro("3 705,74 €"), + mois39h: parseEuro("4 235,12 €"), + }, + cdi: parseEuro("2 289,87 €"), + }, + { + nom: "Chef machiniste", + filiere: "D", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("975,19 €"), + semaine39h: parseEuro("1 114,51 €"), + jour7h: parseEuro("216,71 €"), + jour8h: parseEuro("247,67 €"), + mois35h: parseEuro("3 705,74 €"), + mois39h: parseEuro("4 235,12 €"), + }, + cdi: parseEuro("2 289,87 €"), + }, + { + nom: "Chef maquilleur", + filiere: "D", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("871,49 €"), + semaine39h: parseEuro("995,99 €"), + jour7h: parseEuro("193,66 €"), + jour8h: parseEuro("221,33 €"), + mois35h: parseEuro("3 311,66 €"), + mois39h: parseEuro("3 784,74 €"), + }, + cdi: parseEuro("2 410,40 €"), + }, + { + nom: "Coiffeur", + filiere: "D", + niveau: "V", + cddu: { + semaine35h: parseEuro("703,86 €"), + semaine39h: parseEuro("804,41 €"), + jour7h: parseEuro("156,41 €"), + jour8h: parseEuro("178,76 €"), + mois35h: parseEuro("2 674,68 €"), + mois39h: parseEuro("3 056,77 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Coiffeur perruquier", + filiere: "D", + niveau: "IV", + cddu: { + semaine35h: parseEuro("880,12 €"), + semaine39h: parseEuro("1 005,85 €"), + jour7h: parseEuro("195,58 €"), + jour8h: parseEuro("223,52 €"), + mois35h: parseEuro("3 344,44 €"), + mois39h: parseEuro("3 822,21 €"), + }, + cdi: parseEuro("1 988,58 €"), + }, + { + nom: "Électricien / Éclairagiste", + filiere: "D", + niveau: "V", + cddu: { + semaine35h: parseEuro("800,11 €"), + semaine39h: parseEuro("914,41 €"), + jour7h: parseEuro("177,80 €"), + jour8h: parseEuro("203,20 €"), + mois35h: parseEuro("3 040,40 €"), + mois39h: parseEuro("3 474,73 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Machiniste", + filiere: "D", + niveau: "V", + cddu: { + semaine35h: parseEuro("800,11 €"), + semaine39h: parseEuro("914,41 €"), + jour7h: parseEuro("177,80 €"), + jour8h: parseEuro("203,20 €"), + mois35h: parseEuro("3 040,40 €"), + mois39h: parseEuro("3 474,73 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Maquilleur", + filiere: "D", + niveau: "V", + cddu: { + semaine35h: parseEuro("703,86 €"), + semaine39h: parseEuro("804,41 €"), + jour7h: parseEuro("156,41 €"), + jour8h: parseEuro("178,76 €"), + mois35h: parseEuro("2 674,68 €"), + mois39h: parseEuro("3 056,77 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Maquilleur et coiffeur effets spéciaux", + filiere: "D", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("1 056,37 €"), + semaine39h: parseEuro("1 207,28 €"), + jour7h: parseEuro("234,75 €"), + jour8h: parseEuro("268,28 €"), + mois35h: parseEuro("4 014,21 €"), + mois39h: parseEuro("4 587,65 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + + // Filière E - Post-production + { + nom: "Assistant de post-production", + filiere: "E", + niveau: "IV", + cddu: { + semaine35h: parseEuro("616,88 €"), + semaine39h: parseEuro("705,01 €"), + jour7h: parseEuro("137,09 €"), + jour8h: parseEuro("156,67 €"), + mois35h: parseEuro("2 344,16 €"), + mois39h: parseEuro("2 679,03 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Assistant monteur", + filiere: "E", + niveau: "IV", + cddu: { + semaine35h: parseEuro("703,86 €"), + semaine39h: parseEuro("804,41 €"), + jour7h: parseEuro("156,41 €"), + jour8h: parseEuro("178,76 €"), + mois35h: parseEuro("2 674,68 €"), + mois39h: parseEuro("3 056,77 €"), + }, + cdi: parseEuro("1 928,32 €"), + }, + { + nom: "Assistant monteur adjoint", + filiere: "E", + niveau: "VI", + cddu: { + semaine35h: parseEuro("456,50 €"), + semaine39h: parseEuro("521,72 €"), + jour7h: parseEuro("101,45 €"), + jour8h: parseEuro("115,94 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Chargé de post-production", + filiere: "E", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 035,68 €"), + semaine39h: parseEuro("1 183,63 €"), + jour7h: parseEuro("230,15 €"), + jour8h: parseEuro("263,03 €"), + mois35h: parseEuro("3 935,57 €"), + mois39h: parseEuro("4 497,78 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Chef monteur", + filiere: "E", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 110,85 €"), + semaine39h: parseEuro("1 269,54 €"), + jour7h: parseEuro("246,86 €"), + jour8h: parseEuro("282,12 €"), + mois35h: parseEuro("4 221,22 €"), + mois39h: parseEuro("4 824,24 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Directeur de post-production", + filiere: "E", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 245,64 €"), + semaine39h: parseEuro("1 423,59 €"), + jour7h: parseEuro("276,81 €"), + jour8h: parseEuro("316,35 €"), + mois35h: parseEuro("4 733,44 €"), + mois39h: parseEuro("5 409,64 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Étalonneur", + filiere: "E", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("950,84 €"), + semaine39h: parseEuro("1 086,68 €"), + jour7h: parseEuro("211,30 €"), + jour8h: parseEuro("241,48 €"), + mois35h: parseEuro("3 613,20 €"), + mois39h: parseEuro("4 129,36 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Infographiste", + filiere: "E", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 035,68 €"), + semaine39h: parseEuro("1 183,63 €"), + jour7h: parseEuro("230,15 €"), + jour8h: parseEuro("263,03 €"), + mois35h: parseEuro("3 935,57 €"), + mois39h: parseEuro("4 497,78 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Mixeur", + filiere: "E", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 328,48 €"), + semaine39h: parseEuro("1 518,26 €"), + jour7h: parseEuro("295,22 €"), + jour8h: parseEuro("337,39 €"), + mois35h: parseEuro("5 048,21 €"), + mois39h: parseEuro("5 769,37 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Superviseur d'effets spéciaux postproduction", + filiere: "E", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 162,83 €"), + semaine39h: parseEuro("1 328,95 €"), + jour7h: parseEuro("258,41 €"), + jour8h: parseEuro("295,32 €"), + mois35h: parseEuro("4 418,76 €"), + mois39h: parseEuro("5 050,00 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Truquiste", + filiere: "E", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("965,63 €"), + semaine39h: parseEuro("1 103,58 €"), + jour7h: parseEuro("214,59 €"), + jour8h: parseEuro("245,24 €"), + mois35h: parseEuro("3 669,41 €"), + mois39h: parseEuro("4 193,60 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + + // Filière F - Production + { + nom: "Administrateur de production", + filiere: "F", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("864,60 €"), + semaine39h: parseEuro("988,11 €"), + jour7h: parseEuro("192,13 €"), + jour8h: parseEuro("219,58 €"), + mois35h: parseEuro("3 285,48 €"), + mois39h: parseEuro("3 754,83 €"), + }, + cdi: parseEuro("2 591,18 €"), + }, + { + nom: "Aide de plateau", + filiere: "F", + niveau: "VI", + cddu: { + semaine35h: parseEuro("475,42 €"), + semaine39h: parseEuro("543,34 €"), + jour7h: parseEuro("105,65 €"), + jour8h: parseEuro("120,74 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Assistant d'émission", + filiere: "F", + niveau: "VI", + cddu: { + semaine35h: parseEuro("456,50 €"), + semaine39h: parseEuro("521,72 €"), + jour7h: parseEuro("101,45 €"), + jour8h: parseEuro("115,94 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Assistant de production", + filiere: "F", + niveau: "IV", + cddu: { + semaine35h: parseEuro("703,86 €"), + semaine39h: parseEuro("804,41 €"), + jour7h: parseEuro("156,41 €"), + jour8h: parseEuro("178,76 €"), + mois35h: parseEuro("2 674,68 €"), + mois39h: parseEuro("3 056,77 €"), + }, + cdi: parseEuro("1 988,58 €"), + }, + { + nom: "Assistant de production adjoint", + filiere: "F", + niveau: "VI", + cddu: { + semaine35h: parseEuro("456,50 €"), + semaine39h: parseEuro("521,72 €"), + jour7h: parseEuro("101,45 €"), + jour8h: parseEuro("115,94 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Assistant régisseur adjoint", + filiere: "F", + niveau: "VI", + cddu: { + semaine35h: parseEuro("456,50 €"), + semaine39h: parseEuro("521,72 €"), + jour7h: parseEuro("101,45 €"), + jour8h: parseEuro("115,94 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Chargé de production", + filiere: "F", + niveau: "II", + cddu: { + semaine35h: parseEuro("948,41 €"), + semaine39h: parseEuro("1 083,90 €"), + jour7h: parseEuro("210,76 €"), + jour8h: parseEuro("240,87 €"), + mois35h: parseEuro("3 603,95 €"), + mois39h: parseEuro("4 118,79 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Chauffeur", + filiere: "F", + niveau: "VI", + cddu: { + semaine35h: parseEuro("475,42 €"), + semaine39h: parseEuro("543,34 €"), + jour7h: parseEuro("105,65 €"), + jour8h: parseEuro("120,74 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Chauffeur de salle", + filiere: "F", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("880,12 €"), + semaine39h: parseEuro("1 005,85 €"), + jour7h: parseEuro("195,58 €"), + jour8h: parseEuro("223,52 €"), + mois35h: parseEuro("3 344,44 €"), + mois39h: parseEuro("3 822,21 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Coordinateur d'émission", + filiere: "F", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("735,16 €"), + semaine39h: parseEuro("840,18 €"), + jour7h: parseEuro("163,37 €"), + jour8h: parseEuro("186,71 €"), + mois35h: parseEuro("2 793,61 €"), + mois39h: parseEuro("3 192,68 €"), + }, + cdi: parseEuro("2 147,87 €"), + }, + { + nom: "Directeur de production", + filiere: "F", + niveau: "I", + cddu: { + semaine35h: parseEuro("1 509,58 €"), + semaine39h: parseEuro("1 725,23 €"), + jour7h: parseEuro("335,46 €"), + jour8h: parseEuro("383,39 €"), + mois35h: parseEuro("5 736,40 €"), + mois39h: parseEuro("6 555,86 €"), + }, + cdi: parseEuro("3 314,29 €"), + }, + { + nom: "Producteur exécutif", + filiere: "F", + niveau: "HN", + cddu: { + semaine35h: null, + semaine39h: null, + jour7h: null, + jour8h: null, + mois35h: null, + mois39h: null, + }, + cdi: null, + }, + { + nom: "Régisseur / Responsable des repérages", + filiere: "F", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("818,65 €"), + semaine39h: parseEuro("935,61 €"), + jour7h: parseEuro("181,92 €"), + jour8h: parseEuro("207,91 €"), + mois35h: parseEuro("3 110,89 €"), + mois39h: parseEuro("3 555,29 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Régisseur adjoint", + filiere: "F", + niveau: "IV", + cddu: { + semaine35h: parseEuro("703,86 €"), + semaine39h: parseEuro("804,41 €"), + jour7h: parseEuro("156,41 €"), + jour8h: parseEuro("178,76 €"), + mois35h: parseEuro("2 674,68 €"), + mois39h: parseEuro("3 056,77 €"), + }, + cdi: parseEuro("1 988,58 €"), + }, + { + nom: "Régisseur de plateau / Chef de plateau", + filiere: "F", + niveau: "IV", + cddu: { + semaine35h: parseEuro("703,86 €"), + semaine39h: parseEuro("804,41 €"), + jour7h: parseEuro("156,41 €"), + jour8h: parseEuro("178,76 €"), + mois35h: parseEuro("2 674,68 €"), + mois39h: parseEuro("3 056,77 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Régisseur général", + filiere: "F", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("948,41 €"), + semaine39h: parseEuro("1 083,90 €"), + jour7h: parseEuro("210,76 €"), + jour8h: parseEuro("240,87 €"), + mois35h: parseEuro("3 603,95 €"), + mois39h: parseEuro("4 118,79 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Responsable des enfants", + filiere: "F", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("735,16 €"), + semaine39h: parseEuro("840,18 €"), + jour7h: parseEuro("163,37 €"), + jour8h: parseEuro("186,71 €"), + mois35h: parseEuro("2 793,61 €"), + mois39h: parseEuro("3 192,68 €"), + }, + cdi: parseEuro("2 048,84 €"), + }, + { + nom: "Secrétaire de production", + filiere: "F", + niveau: "V", + cddu: { + semaine35h: parseEuro("616,88 €"), + semaine39h: parseEuro("705,01 €"), + jour7h: parseEuro("137,09 €"), + jour8h: parseEuro("156,67 €"), + mois35h: parseEuro("2 344,16 €"), + mois39h: parseEuro("2 679,03 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, +]; + +const filieres = [ + { code: 'D', nom: 'Plateaux et tournage', icon: Sparkles, color: 'pink' }, + { code: 'E', nom: 'Postproduction', icon: Film, color: 'indigo' }, + { code: 'F', nom: 'Production', icon: ClipboardList, color: 'green' }, +]; + +const colorClasses = { + pink: { + bg: 'bg-pink-50', + border: 'border-pink-200', + text: 'text-pink-900', + hover: 'hover:bg-pink-100', + gradient: 'from-pink-500 to-rose-600', + ring: 'ring-pink-500', + }, + indigo: { + bg: 'bg-indigo-50', + border: 'border-indigo-200', + text: 'text-indigo-900', + hover: 'hover:bg-indigo-100', + gradient: 'from-indigo-500 to-purple-600', + ring: 'ring-indigo-500', + }, + green: { + bg: 'bg-green-50', + border: 'border-green-200', + text: 'text-green-900', + hover: 'hover:bg-green-100', + gradient: 'from-green-500 to-emerald-600', + ring: 'ring-green-500', + }, +}; + +interface EmploiCardProps { + emploi: Emploi; + color: keyof typeof colorClasses; +} + +function EmploiCard({ emploi, color }: EmploiCardProps) { + const [isExpanded, setIsExpanded] = useState(false); + const [activeTab, setActiveTab] = useState<'cddu' | 'cdi'>('cdi'); + const colors = colorClasses[color]; + + return ( +
+ {/* Header */} + + + {/* Content */} + {isExpanded && ( +
+ {/* Tabs */} +
+ + +
+ + {/* Content based on tab */} + {activeTab === 'cdi' ? ( +
+

Salaire mensuel minimum

+

{euro(emploi.cdi)}

+
+ ) : ( +
+ {/* Par semaine */} +
+

Par semaine

+
+
+

Base 35h

+

{euro(emploi.cddu.semaine35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.semaine39h)}

+
+
+
+ + {/* Par jour */} +
+

Par jour

+
+
+

Base 7h

+

{euro(emploi.cddu.jour7h)}

+
+
+

Base 8h

+

{euro(emploi.cddu.jour8h)}

+
+
+
+ + {/* Par mois */} +
+

Par mois

+
+
+

Base 35h

+

{euro(emploi.cddu.mois35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.mois39h)}

+
+
+
+
+ )} +
+ )} +
+ ); +} + +interface CategorieBFluxDataPart2Props { + activeFiliere: string; +} + +export default function CategorieBFluxDataPart2({ activeFiliere }: CategorieBFluxDataPart2Props) { + const [searchTerm, setSearchTerm] = useState(''); + + const filteredEmplois = useMemo(() => { + // D'abord filtrer par la filière active + let result = emploisData.filter(e => e.filiere === activeFiliere); + + // Puis appliquer le filtre de recherche + if (searchTerm) { + result = result.filter(e => + e.nom.toLowerCase().includes(searchTerm.toLowerCase()) + ); + } + + return result.sort((a, b) => a.nom.localeCompare(b.nom)); + }, [activeFiliere, searchTerm]); + + // Déterminer la couleur en fonction de la filière + const getColorForFiliere = (filiereCode: string): keyof typeof colorClasses => { + const filiere = filieres.find(f => f.code === filiereCode); + return (filiere?.color as keyof typeof colorClasses) || 'blue'; + }; + const activeFiliereInfo = filieres.find(f => f.code === activeFiliere); + + return ( +
+ {/* En-tête */} +
+

+ Filière {activeFiliere} - {activeFiliereInfo?.nom || 'Filière'} +

+

+ {emploisData.length} emplois - Grille de salaires CCNPA (IDCC 2642) - Valeurs 2025 +

+
+ + {/* Recherche */} +
+ {/* Barre de recherche */} +
+ + setSearchTerm(e.target.value)} + placeholder={`Rechercher dans ${activeFiliereInfo?.nom || 'la filière'}...`} + className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-slate-200 focus:ring-2 focus:ring-amber-500 focus:border-transparent text-sm" + /> +
+ + {/* Résultats */} +
+
+

+ {filteredEmplois.length} emploi{filteredEmplois.length > 1 ? 's' : ''} trouvé{filteredEmplois.length > 1 ? 's' : ''} +

+ {searchTerm && ( + + )} +
+ +
+ {filteredEmplois.map((emploi, index) => ( + + ))} +
+ + {filteredEmplois.length === 0 && ( +
+

Aucun emploi trouvé pour cette recherche.

+
+ )} +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-flux-data-part3.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-flux-data-part3.tsx new file mode 100644 index 0000000..dd0ed95 --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-flux-data-part3.tsx @@ -0,0 +1,632 @@ +"use client"; + +import React, { useState, useMemo } from 'react'; +import { Clapperboard, Volume2, Globe, Search, ChevronDown, ChevronUp } from 'lucide-react'; + +const parseEuro = (str: string) => { + if (!str || str === '-') return null; + const cleaned = str.replace(/\s/g, '').replace('€', '').replace(',', '.'); + return parseFloat(cleaned); +}; + +const euro = (n: number | null) => { + if (n === null) return '-'; + return new Intl.NumberFormat('fr-FR', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(n) + ' €'; +}; + +interface Emploi { + nom: string; + filiere: string; + niveau: string; + cddu: { + semaine35h: number | null; + semaine39h: number | null; + jour7h: number | null; + jour8h: number | null; + mois35h: number | null; + mois39h: number | null; + }; + cdi: number | null; +} + +const emploisData: Emploi[] = [ + // Filière G - Réalisation + { + nom: "1er assistant réalisateur", + filiere: "G", + niveau: "II", + cddu: { + semaine35h: parseEuro("948,41 €"), + semaine39h: parseEuro("1 083,90 €"), + jour7h: parseEuro("210,76 €"), + jour8h: parseEuro("240,87 €"), + mois35h: parseEuro("3 603,95 €"), + mois39h: parseEuro("4 118,79 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "2ème assistant réalisateur", + filiere: "G", + niveau: "IV", + cddu: { + semaine35h: parseEuro("793,15 €"), + semaine39h: parseEuro("906,46 €"), + jour7h: parseEuro("176,26 €"), + jour8h: parseEuro("201,43 €"), + mois35h: parseEuro("3 013,97 €"), + mois39h: parseEuro("3 444,52 €"), + }, + cdi: parseEuro("1 988,58 €"), + }, + { + nom: "Assistant réalisateur", + filiere: "G", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("881,28 €"), + semaine39h: parseEuro("1 007,18 €"), + jour7h: parseEuro("195,84 €"), + jour8h: parseEuro("223,82 €"), + mois35h: parseEuro("3 348,87 €"), + mois39h: parseEuro("3 827,27 €"), + }, + cdi: parseEuro("2 229,61 €"), + }, + { + nom: "Conseiller technique à la réalisation", + filiere: "G", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 035,68 €"), + semaine39h: parseEuro("1 183,63 €"), + jour7h: parseEuro("230,15 €"), + jour8h: parseEuro("263,03 €"), + mois35h: parseEuro("3 935,57 €"), + mois39h: parseEuro("4 497,78 €"), + }, + cdi: parseEuro("3 013,00 €"), + }, + { + nom: "Réalisateur", + filiere: "G", + niveau: "HN", + cddu: { + semaine35h: null, + semaine39h: null, + jour7h: null, + jour8h: null, + mois35h: null, + mois39h: null, + }, + cdi: null, + }, + { + nom: "Scripte", + filiere: "G", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("948,41 €"), + semaine39h: parseEuro("1 083,90 €"), + jour7h: parseEuro("210,76 €"), + jour8h: parseEuro("240,87 €"), + mois35h: parseEuro("3 603,95 €"), + mois39h: parseEuro("4 118,79 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Storyboarder", + filiere: "G", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("881,28 €"), + semaine39h: parseEuro("1 007,18 €"), + jour7h: parseEuro("195,84 €"), + jour8h: parseEuro("223,82 €"), + mois35h: parseEuro("3 348,87 €"), + mois39h: parseEuro("3 827,27 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + + // Filière H - Son + { + nom: "Assistant son", + filiere: "H", + niveau: "IV", + cddu: { + semaine35h: parseEuro("703,86 €"), + semaine39h: parseEuro("804,41 €"), + jour7h: parseEuro("156,41 €"), + jour8h: parseEuro("178,76 €"), + mois35h: parseEuro("2 674,68 €"), + mois39h: parseEuro("3 056,77 €"), + }, + cdi: parseEuro("1 928,32 €"), + }, + { + nom: "Assistant son adjoint", + filiere: "H", + niveau: "VI", + cddu: { + semaine35h: parseEuro("456,50 €"), + semaine39h: parseEuro("521,72 €"), + jour7h: parseEuro("101,45 €"), + jour8h: parseEuro("115,94 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Bruiteur", + filiere: "H", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 035,68 €"), + semaine39h: parseEuro("1 183,63 €"), + jour7h: parseEuro("230,15 €"), + jour8h: parseEuro("263,03 €"), + mois35h: parseEuro("3 935,57 €"), + mois39h: parseEuro("4 497,78 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Chef OPS / Ingénieur du son", + filiere: "H", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 194,86 €"), + semaine39h: parseEuro("1 365,55 €"), + jour7h: parseEuro("265,52 €"), + jour8h: parseEuro("303,46 €"), + mois35h: parseEuro("4 540,45 €"), + mois39h: parseEuro("5 189,07 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Mixeur (direct ou conditions du direct)", + filiere: "H", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 035,68 €"), + semaine39h: parseEuro("1 183,63 €"), + jour7h: parseEuro("230,15 €"), + jour8h: parseEuro("263,03 €"), + mois35h: parseEuro("3 935,57 €"), + mois39h: parseEuro("4 497,78 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "OPS", + filiere: "H", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("881,28 €"), + semaine39h: parseEuro("1 007,18 €"), + jour7h: parseEuro("195,84 €"), + jour8h: parseEuro("223,82 €"), + mois35h: parseEuro("3 348,87 €"), + mois39h: parseEuro("3 827,27 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Perchiste / 1er assistant son", + filiere: "H", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("869,19 €"), + semaine39h: parseEuro("993,36 €"), + jour7h: parseEuro("193,15 €"), + jour8h: parseEuro("220,75 €"), + mois35h: parseEuro("3 302,93 €"), + mois39h: parseEuro("3 774,77 €"), + }, + cdi: parseEuro("2 410,40 €"), + }, + { + nom: "Technicien instruments (backliner)", + filiere: "H", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("881,28 €"), + semaine39h: parseEuro("1 007,18 €"), + jour7h: parseEuro("195,84 €"), + jour8h: parseEuro("223,82 €"), + mois35h: parseEuro("3 348,87 €"), + mois39h: parseEuro("3 827,27 €"), + }, + cdi: parseEuro("2 386,53 €"), + }, + + // Filière I - Web + { + nom: "Assistant technique web", + filiere: "I", + niveau: "VI", + cddu: { + semaine35h: parseEuro("456,50 €"), + semaine39h: parseEuro("521,72 €"), + jour7h: parseEuro("101,45 €"), + jour8h: parseEuro("115,94 €"), + mois35h: parseEuro("1 976,67 €"), + mois39h: parseEuro("2 259,04 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Concepteur de programme web", + filiere: "I", + niveau: "I", + cddu: { + semaine35h: parseEuro("774,28 €"), + semaine39h: parseEuro("884,89 €"), + jour7h: parseEuro("172,06 €"), + jour8h: parseEuro("196,64 €"), + mois35h: parseEuro("3 352,63 €"), + mois39h: parseEuro("3 831,57 €"), + }, + cdi: parseEuro("2 969,12 €"), + }, + { + nom: "Coordinateur de diffusion web", + filiere: "I", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("512,31 €"), + semaine39h: parseEuro("585,49 €"), + jour7h: parseEuro("113,85 €"), + jour8h: parseEuro("130,11 €"), + mois35h: parseEuro("2 218,29 €"), + mois39h: parseEuro("2 535,18 €"), + }, + cdi: parseEuro("1 959,62 €"), + }, + { + nom: "Coordinateur de production web", + filiere: "I", + niveau: "II", + cddu: { + semaine35h: parseEuro("582,17 €"), + semaine39h: parseEuro("665,34 €"), + jour7h: parseEuro("129,37 €"), + jour8h: parseEuro("147,85 €"), + mois35h: parseEuro("2 520,81 €"), + mois39h: parseEuro("2 880,91 €"), + }, + cdi: parseEuro("2 197,15 €"), + }, + { + nom: "Designer web", + filiere: "I", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("535,60 €"), + semaine39h: parseEuro("612,11 €"), + jour7h: parseEuro("119,02 €"), + jour8h: parseEuro("136,03 €"), + mois35h: parseEuro("2 319,14 €"), + mois39h: parseEuro("2 650,44 €"), + }, + cdi: parseEuro("2 019,01 €"), + }, + { + nom: "Editeur artistique web", + filiere: "I", + niveau: "IV", + cddu: { + semaine35h: parseEuro("494,84 €"), + semaine39h: parseEuro("565,53 €"), + jour7h: parseEuro("109,96 €"), + jour8h: parseEuro("125,67 €"), + mois35h: parseEuro("2 142,66 €"), + mois39h: parseEuro("2 448,75 €"), + }, + cdi: parseEuro("1 900,24 €"), + }, + { + nom: "Gestionnaire de diffusion internet (traffic manager)", + filiere: "I", + niveau: "V", + cddu: { + semaine35h: parseEuro("456,50 €"), + semaine39h: parseEuro("521,72 €"), + jour7h: parseEuro("101,45 €"), + jour8h: parseEuro("115,94 €"), + mois35h: parseEuro("1 976,67 €"), + mois39h: parseEuro("2 259,04 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Opérateur web / Opérateur multicam web", + filiere: "I", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("558,88 €"), + semaine39h: parseEuro("638,72 €"), + jour7h: parseEuro("124,20 €"), + jour8h: parseEuro("141,94 €"), + mois35h: parseEuro("2 419,95 €"), + mois39h: parseEuro("2 765,65 €"), + }, + cdi: parseEuro("2 137,77 €"), + }, + { + nom: "Technicien de développement web", + filiere: "I", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("512,31 €"), + semaine39h: parseEuro("585,49 €"), + jour7h: parseEuro("113,85 €"), + jour8h: parseEuro("130,11 €"), + mois35h: parseEuro("2 218,29 €"), + mois39h: parseEuro("2 535,18 €"), + }, + cdi: parseEuro("1 959,62 €"), + }, + { + nom: "Technicien vidéo web", + filiere: "I", + niveau: "V", + cddu: { + semaine35h: parseEuro("456,50 €"), + semaine39h: parseEuro("521,72 €"), + jour7h: parseEuro("101,45 €"), + jour8h: parseEuro("115,94 €"), + mois35h: parseEuro("1 976,67 €"), + mois39h: parseEuro("2 259,04 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, +]; + +const filieres = [ + { code: 'G', nom: 'Réalisation', icon: Clapperboard, color: 'orange' }, + { code: 'H', nom: 'Son', icon: Volume2, color: 'red' }, + { code: 'I', nom: 'Web', icon: Globe, color: 'teal' }, +]; + +const colorClasses = { + orange: { + bg: 'bg-orange-50', + border: 'border-orange-200', + text: 'text-orange-900', + hover: 'hover:bg-orange-100', + gradient: 'from-orange-500 to-amber-600', + ring: 'ring-orange-500', + }, + red: { + bg: 'bg-red-50', + border: 'border-red-200', + text: 'text-red-900', + hover: 'hover:bg-red-100', + gradient: 'from-red-500 to-rose-600', + ring: 'ring-red-500', + }, + teal: { + bg: 'bg-teal-50', + border: 'border-teal-200', + text: 'text-teal-900', + hover: 'hover:bg-teal-100', + gradient: 'from-teal-500 to-cyan-600', + ring: 'ring-teal-500', + }, +}; + +interface EmploiCardProps { + emploi: Emploi; + color: keyof typeof colorClasses; +} + +function EmploiCard({ emploi, color }: EmploiCardProps) { + const [isExpanded, setIsExpanded] = useState(false); + const [activeTab, setActiveTab] = useState<'cddu' | 'cdi'>('cdi'); + const colors = colorClasses[color]; + + return ( +
+ {/* Header */} + + + {/* Content */} + {isExpanded && ( +
+ {/* Tabs */} +
+ + +
+ + {/* Content based on tab */} + {activeTab === 'cdi' ? ( +
+

Salaire mensuel minimum

+

{euro(emploi.cdi)}

+
+ ) : ( +
+ {/* Par semaine */} +
+

Par semaine

+
+
+

Base 35h

+

{euro(emploi.cddu.semaine35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.semaine39h)}

+
+
+
+ + {/* Par jour */} +
+

Par jour

+
+
+

Base 7h

+

{euro(emploi.cddu.jour7h)}

+
+
+

Base 8h

+

{euro(emploi.cddu.jour8h)}

+
+
+
+ + {/* Par mois */} +
+

Par mois

+
+
+

Base 35h

+

{euro(emploi.cddu.mois35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.mois39h)}

+
+
+
+
+ )} +
+ )} +
+ ); +} + +interface CategorieBFluxDataPart3Props { + activeFiliere: string; +} + +export default function CategorieBFluxDataPart3({ activeFiliere }: CategorieBFluxDataPart3Props) { + const [searchTerm, setSearchTerm] = useState(''); + + const filteredEmplois = useMemo(() => { + // D'abord filtrer par la filière active + let result = emploisData.filter(e => e.filiere === activeFiliere); + + // Puis appliquer le filtre de recherche + if (searchTerm) { + result = result.filter(e => + e.nom.toLowerCase().includes(searchTerm.toLowerCase()) + ); + } + + return result.sort((a, b) => a.nom.localeCompare(b.nom)); + }, [activeFiliere, searchTerm]); + + // Déterminer la couleur en fonction de la filière + const getColorForFiliere = (filiereCode: string): keyof typeof colorClasses => { + const filiere = filieres.find(f => f.code === filiereCode); + return (filiere?.color as keyof typeof colorClasses) || 'blue'; + }; + const activeFiliereInfo = filieres.find(f => f.code === activeFiliere); + + return ( +
+ {/* En-tête */} +
+

+ Filière {activeFiliere} - {activeFiliereInfo?.nom || 'Filière'} +

+

+ {emploisData.length} emplois - Grille de salaires CCNPA (IDCC 2642) - Valeurs 2025 +

+
+ + {/* Recherche */} +
+ {/* Barre de recherche */} +
+ + setSearchTerm(e.target.value)} + placeholder={`Rechercher dans ${activeFiliereInfo?.nom || 'la filière'}...`} + className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-slate-200 focus:ring-2 focus:ring-amber-500 focus:border-transparent text-sm" + /> +
+ + {/* Résultats */} +
+
+

+ {filteredEmplois.length} emploi{filteredEmplois.length > 1 ? 's' : ''} trouvé{filteredEmplois.length > 1 ? 's' : ''} +

+ {searchTerm && ( + + )} +
+ +
+ {filteredEmplois.map((emploi, index) => ( + + ))} +
+ + {filteredEmplois.length === 0 && ( +
+

Aucun emploi trouvé pour cette recherche.

+
+ )} +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-flux-data.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-flux-data.tsx new file mode 100644 index 0000000..a20056f --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-flux-data.tsx @@ -0,0 +1,1094 @@ +"use client"; + +import React, { useState, useMemo } from 'react'; +import { Pencil, Palette, Camera, Search, ChevronDown, ChevronUp } from 'lucide-react'; + +const parseEuro = (str: string) => { + if (!str || str === '-') return null; + const cleaned = str.replace(/\s/g, '').replace('€', '').replace(',', '.'); + return parseFloat(cleaned); +}; + +const euro = (n: number | null) => { + if (n === null) return '-'; + return new Intl.NumberFormat('fr-FR', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(n) + ' €'; +}; + +interface Emploi { + nom: string; + filiere: string; + niveau: string; + cddu: { + semaine35h: number | null; + semaine39h: number | null; + jour7h: number | null; + jour8h: number | null; + mois35h: number | null; + mois39h: number | null; + }; + cdi: number | null; +} + +const emploisData: Emploi[] = [ + // Filière A - Écriture + { + nom: "Chargé d'enquête / de recherche", + filiere: "A", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("791,32 €"), + semaine39h: parseEuro("904,37 €"), + jour7h: parseEuro("175,85 €"), + jour8h: parseEuro("200,97 €"), + mois35h: parseEuro("3 007,02 €"), + mois39h: parseEuro("3 436,58 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Chargé de sélection", + filiere: "A", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("810,63 €"), + semaine39h: parseEuro("926,43 €"), + jour7h: parseEuro("180,14 €"), + jour8h: parseEuro("205,87 €"), + mois35h: parseEuro("3 080,39 €"), + mois39h: parseEuro("3 520,43 €"), + }, + cdi: parseEuro("2 590,58 €"), + }, + { + nom: "Collaborateur artistique", + filiere: "A", + niveau: "IV", + cddu: { + semaine35h: parseEuro("526,45 €"), + semaine39h: parseEuro("601,66 €"), + jour7h: parseEuro("116,99 €"), + jour8h: parseEuro("133,70 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Collaborateur de sélection", + filiere: "A", + niveau: "IV", + cddu: { + semaine35h: parseEuro("634,28 €"), + semaine39h: parseEuro("724,89 €"), + jour7h: parseEuro("140,95 €"), + jour8h: parseEuro("161,09 €"), + mois35h: parseEuro("2 410,26 €"), + mois39h: parseEuro("2 754,58 €"), + }, + cdi: parseEuro("2 048,84 €"), + }, + { + nom: "Conseiller artistique d'émission", + filiere: "A", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("795,79 €"), + semaine39h: parseEuro("909,47 €"), + jour7h: parseEuro("176,84 €"), + jour8h: parseEuro("202,11 €"), + mois35h: parseEuro("3 024,00 €"), + mois39h: parseEuro("3 455,99 €"), + }, + cdi: parseEuro("2 590,58 €"), + }, + { + nom: "Coordinateur d'écriture (ex script éditeur)", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("864,60 €"), + semaine39h: parseEuro("988,11 €"), + jour7h: parseEuro("192,13 €"), + jour8h: parseEuro("219,58 €"), + mois35h: parseEuro("3 285,48 €"), + mois39h: parseEuro("3 754,83 €"), + }, + cdi: parseEuro("3 013,00 €"), + }, + { + nom: "Directeur artistique", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 110,85 €"), + semaine39h: parseEuro("1 269,54 €"), + jour7h: parseEuro("246,86 €"), + jour8h: parseEuro("282,12 €"), + mois35h: parseEuro("4 221,22 €"), + mois39h: parseEuro("4 824,24 €"), + }, + cdi: parseEuro("2 952,74 €"), + }, + { + nom: "Directeur de jeux", + filiere: "A", + niveau: "I", + cddu: { + semaine35h: parseEuro("1 110,85 €"), + semaine39h: parseEuro("1 269,54 €"), + jour7h: parseEuro("246,86 €"), + jour8h: parseEuro("282,12 €"), + mois35h: parseEuro("4 221,22 €"), + mois39h: parseEuro("4 824,24 €"), + }, + cdi: parseEuro("2 952,14 €"), + }, + { + nom: "Directeur de programmation", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 110,85 €"), + semaine39h: parseEuro("1 269,54 €"), + jour7h: parseEuro("246,86 €"), + jour8h: parseEuro("282,12 €"), + mois35h: parseEuro("4 221,22 €"), + mois39h: parseEuro("4 824,24 €"), + }, + cdi: parseEuro("2 952,74 €"), + }, + { + nom: "Directeur de sélection", + filiere: "A", + niveau: "I", + cddu: { + semaine35h: parseEuro("1 110,85 €"), + semaine39h: parseEuro("1 269,54 €"), + jour7h: parseEuro("246,86 €"), + jour8h: parseEuro("282,12 €"), + mois35h: parseEuro("4 221,22 €"), + mois39h: parseEuro("4 824,24 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Documentaliste", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("826,70 €"), + semaine39h: parseEuro("944,80 €"), + jour7h: parseEuro("183,71 €"), + jour8h: parseEuro("209,96 €"), + mois35h: parseEuro("3 141,46 €"), + mois39h: parseEuro("3 590,23 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Enquêteur / Recherchiste", + filiere: "A", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("757,20 €"), + semaine39h: parseEuro("865,38 €"), + jour7h: parseEuro("168,27 €"), + jour8h: parseEuro("192,31 €"), + mois35h: parseEuro("2 877,37 €"), + mois39h: parseEuro("3 288,42 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Illustrateur sonore", + filiere: "A", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("777,33 €"), + semaine39h: parseEuro("888,38 €"), + jour7h: parseEuro("172,74 €"), + jour8h: parseEuro("197,42 €"), + mois35h: parseEuro("2 953,86 €"), + mois39h: parseEuro("3 375,83 €"), + }, + cdi: parseEuro("2 410,40 €"), + }, + { + nom: "Préparateur de questions", + filiere: "A", + niveau: "IV", + cddu: { + semaine35h: parseEuro("634,28 €"), + semaine39h: parseEuro("724,89 €"), + jour7h: parseEuro("140,95 €"), + jour8h: parseEuro("161,09 €"), + mois35h: parseEuro("2 410,26 €"), + mois39h: parseEuro("2 754,58 €"), + }, + cdi: parseEuro("2 147,87 €"), + }, + { + nom: "Producteur artistique", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 110,85 €"), + semaine39h: parseEuro("1 269,54 €"), + jour7h: parseEuro("246,86 €"), + jour8h: parseEuro("282,12 €"), + mois35h: parseEuro("4 221,22 €"), + mois39h: parseEuro("4 824,24 €"), + }, + cdi: parseEuro("2 952,74 €"), + }, + { + nom: "Programmateur artistique d'émission", + filiere: "A", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("735,16 €"), + semaine39h: parseEuro("840,18 €"), + jour7h: parseEuro("163,37 €"), + jour8h: parseEuro("186,71 €"), + mois35h: parseEuro("2 793,61 €"), + mois39h: parseEuro("3 192,68 €"), + }, + cdi: parseEuro("2 048,84 €"), + }, + { + nom: "Responsable d'enquête / de recherche", + filiere: "A", + niveau: "II", + cddu: { + semaine35h: parseEuro("826,70 €"), + semaine39h: parseEuro("944,80 €"), + jour7h: parseEuro("183,71 €"), + jour8h: parseEuro("209,96 €"), + mois35h: parseEuro("3 141,46 €"), + mois39h: parseEuro("3 590,23 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Responsable de questions", + filiere: "A", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("777,33 €"), + semaine39h: parseEuro("888,38 €"), + jour7h: parseEuro("172,74 €"), + jour8h: parseEuro("197,42 €"), + mois35h: parseEuro("2 953,86 €"), + mois39h: parseEuro("3 375,83 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + + // Filière B - Décor & Costume + { + nom: "1er assistant décorateur", + filiere: "B", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("948,41 €"), + semaine39h: parseEuro("1 083,90 €"), + jour7h: parseEuro("210,76 €"), + jour8h: parseEuro("240,87 €"), + mois35h: parseEuro("3 603,95 €"), + mois39h: parseEuro("4 118,79 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "2ème assistant décorateur", + filiere: "B", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("826,78 €"), + semaine39h: parseEuro("944,89 €"), + jour7h: parseEuro("183,73 €"), + jour8h: parseEuro("209,97 €"), + mois35h: parseEuro("3 141,75 €"), + mois39h: parseEuro("3 590,56 €"), + }, + cdi: parseEuro("2 109,10 €"), + }, + { + nom: "Accessoiriste", + filiere: "B", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("798,94 €"), + semaine39h: parseEuro("913,07 €"), + jour7h: parseEuro("177,54 €"), + jour8h: parseEuro("202,91 €"), + mois35h: parseEuro("3 035,97 €"), + mois39h: parseEuro("3 469,67 €"), + }, + cdi: parseEuro("2 048,84 €"), + }, + { + nom: "Assistant décorateur adjoint", + filiere: "B", + niveau: "VI", + cddu: { + semaine35h: parseEuro("456,50 €"), + semaine39h: parseEuro("521,72 €"), + jour7h: parseEuro("101,45 €"), + jour8h: parseEuro("115,94 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Chef constructeur", + filiere: "B", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 203,69 €"), + semaine39h: parseEuro("1 375,64 €"), + jour7h: parseEuro("267,49 €"), + jour8h: parseEuro("305,70 €"), + mois35h: parseEuro("4 574,02 €"), + mois39h: parseEuro("5 227,43 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Chef costumier", + filiere: "B", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("881,28 €"), + semaine39h: parseEuro("1 007,18 €"), + jour7h: parseEuro("195,84 €"), + jour8h: parseEuro("223,82 €"), + mois35h: parseEuro("3 348,87 €"), + mois39h: parseEuro("3 827,27 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Chef décorateur", + filiere: "B", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 639,88 €"), + semaine39h: parseEuro("1 874,15 €"), + jour7h: parseEuro("364,42 €"), + jour8h: parseEuro("416,48 €"), + mois35h: parseEuro("6 231,55 €"), + mois39h: parseEuro("7 121,75 €"), + }, + cdi: parseEuro("3 013,00 €"), + }, + { + nom: "Constructeur de décor", + filiere: "B", + niveau: "IV", + cddu: { + semaine35h: parseEuro("918,47 €"), + semaine39h: parseEuro("1 049,68 €"), + jour7h: parseEuro("204,10 €"), + jour8h: parseEuro("233,26 €"), + mois35h: parseEuro("3 490,19 €"), + mois39h: parseEuro("3 988,78 €"), + }, + cdi: parseEuro("2 481,29 €"), + }, + { + nom: "Costumier", + filiere: "B", + niveau: "IV", + cddu: { + semaine35h: parseEuro("703,86 €"), + semaine39h: parseEuro("804,41 €"), + jour7h: parseEuro("156,41 €"), + jour8h: parseEuro("178,76 €"), + mois35h: parseEuro("2 674,68 €"), + mois39h: parseEuro("3 056,77 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Créateur de costume", + filiere: "B", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 616,70 €"), + semaine39h: parseEuro("1 847,66 €"), + jour7h: parseEuro("359,27 €"), + jour8h: parseEuro("410,59 €"), + mois35h: parseEuro("6 143,47 €"), + mois39h: parseEuro("7 021,08 €"), + }, + cdi: parseEuro("3 013,00 €"), + }, + { + nom: "Décorateur", + filiere: "B", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 054,04 €"), + semaine39h: parseEuro("1 204,62 €"), + jour7h: parseEuro("234,23 €"), + jour8h: parseEuro("267,69 €"), + mois35h: parseEuro("4 005,37 €"), + mois39h: parseEuro("4 577,55 €"), + }, + cdi: parseEuro("2 892,47 €"), + }, + { + nom: "Électricien déco / Machiniste déco", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("906,79 €"), + semaine39h: parseEuro("1 036,33 €"), + jour7h: parseEuro("201,51 €"), + jour8h: parseEuro("230,30 €"), + mois35h: parseEuro("3 445,79 €"), + mois39h: parseEuro("3 938,04 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Ensemblier - décorateur", + filiere: "B", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("948,41 €"), + semaine39h: parseEuro("1 083,90 €"), + jour7h: parseEuro("210,76 €"), + jour8h: parseEuro("240,87 €"), + mois35h: parseEuro("3 603,95 €"), + mois39h: parseEuro("4 118,79 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Habilleur", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("634,28 €"), + semaine39h: parseEuro("724,89 €"), + jour7h: parseEuro("140,95 €"), + jour8h: parseEuro("161,09 €"), + mois35h: parseEuro("2 410,26 €"), + mois39h: parseEuro("2 754,58 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Menuisier-traceur-toupilleur de décor", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("935,78 €"), + semaine39h: parseEuro("1 069,46 €"), + jour7h: parseEuro("207,95 €"), + jour8h: parseEuro("237,66 €"), + mois35h: parseEuro("3 555,95 €"), + mois39h: parseEuro("4 063,93 €"), + }, + cdi: parseEuro("2 410,40 €"), + }, + { + nom: "Métallier / Serrurier / Mécanicien de décor", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("906,79 €"), + semaine39h: parseEuro("1 036,33 €"), + jour7h: parseEuro("201,51 €"), + jour8h: parseEuro("230,30 €"), + mois35h: parseEuro("3 445,79 €"), + mois39h: parseEuro("3 938,04 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Peintre en lettres / en faux bois de décor", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("906,79 €"), + semaine39h: parseEuro("1 036,33 €"), + jour7h: parseEuro("201,51 €"), + jour8h: parseEuro("230,30 €"), + mois35h: parseEuro("3 445,79 €"), + mois39h: parseEuro("3 938,04 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Régisseur d'extérieurs", + filiere: "B", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("826,78 €"), + semaine39h: parseEuro("944,89 €"), + jour7h: parseEuro("183,73 €"), + jour8h: parseEuro("209,97 €"), + mois35h: parseEuro("3 141,75 €"), + mois39h: parseEuro("3 590,56 €"), + }, + cdi: parseEuro("2 109,10 €"), + }, + { + nom: "Rippeur", + filiere: "B", + niveau: "V", + cddu: { + semaine35h: parseEuro("810,55 €"), + semaine39h: parseEuro("926,34 €"), + jour7h: parseEuro("180,12 €"), + jour8h: parseEuro("205,85 €"), + mois35h: parseEuro("3 080,07 €"), + mois39h: parseEuro("3 520,07 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Styliste", + filiere: "B", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("793,15 €"), + semaine39h: parseEuro("906,46 €"), + jour7h: parseEuro("176,26 €"), + jour8h: parseEuro("201,43 €"), + mois35h: parseEuro("3 013,97 €"), + mois39h: parseEuro("3 444,52 €"), + }, + cdi: parseEuro("2 048,84 €"), + }, + + // Filière C - Image + { + nom: "1er assistant OPV / pointeur", + filiere: "C", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("954,15 €"), + semaine39h: parseEuro("1 090,46 €"), + jour7h: parseEuro("212,03 €"), + jour8h: parseEuro("242,32 €"), + mois35h: parseEuro("3 625,78 €"), + mois39h: parseEuro("4 143,74 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "2ème assistant OPV", + filiere: "C", + niveau: "V", + cddu: { + semaine35h: parseEuro("703,86 €"), + semaine39h: parseEuro("804,41 €"), + jour7h: parseEuro("156,41 €"), + jour8h: parseEuro("178,76 €"), + mois35h: parseEuro("2 674,68 €"), + mois39h: parseEuro("3 056,77 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Assistant OPV adjoint", + filiere: "C", + niveau: "VI", + cddu: { + semaine35h: parseEuro("456,50 €"), + semaine39h: parseEuro("521,72 €"), + jour7h: parseEuro("101,45 €"), + jour8h: parseEuro("115,94 €"), + mois35h: parseEuro("2 342,34 €"), + mois39h: parseEuro("2 676,95 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Cadreur / OPV", + filiere: "C", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 108,57 €"), + semaine39h: parseEuro("1 266,94 €"), + jour7h: parseEuro("246,35 €"), + jour8h: parseEuro("281,54 €"), + mois35h: parseEuro("4 212,58 €"), + mois39h: parseEuro("4 814,37 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Chef OPV", + filiere: "C", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 245,64 €"), + semaine39h: parseEuro("1 423,59 €"), + jour7h: parseEuro("276,81 €"), + jour8h: parseEuro("316,35 €"), + mois35h: parseEuro("4 733,44 €"), + mois39h: parseEuro("5 409,64 €"), + }, + cdi: parseEuro("3 013,00 €"), + }, + { + nom: "Directeur photo", + filiere: "C", + niveau: "I", + cddu: { + semaine35h: parseEuro("1 735,96 €"), + semaine39h: parseEuro("1 983,96 €"), + jour7h: parseEuro("385,77 €"), + jour8h: parseEuro("440,88 €"), + mois35h: parseEuro("6 596,66 €"), + mois39h: parseEuro("7 539,02 €"), + }, + cdi: parseEuro("3 314,29 €"), + }, + { + nom: "Ingénieur de la vision", + filiere: "C", + niveau: "II", + cddu: { + semaine35h: parseEuro("1 245,64 €"), + semaine39h: parseEuro("1 423,59 €"), + jour7h: parseEuro("276,81 €"), + jour8h: parseEuro("316,35 €"), + mois35h: parseEuro("4 733,44 €"), + mois39h: parseEuro("5 409,64 €"), + }, + cdi: parseEuro("3 013,00 €"), + }, + { + nom: "Ingénieur de la vision adjoint", + filiere: "C", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("881,28 €"), + semaine39h: parseEuro("1 007,18 €"), + jour7h: parseEuro("195,84 €"), + jour8h: parseEuro("223,82 €"), + mois35h: parseEuro("3 348,87 €"), + mois39h: parseEuro("3 827,27 €"), + }, + cdi: parseEuro("2 169,36 €"), + }, + { + nom: "Monteur", + filiere: "C", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("927,66 €"), + semaine39h: parseEuro("1 060,18 €"), + jour7h: parseEuro("206,15 €"), + jour8h: parseEuro("235,60 €"), + mois35h: parseEuro("3 525,09 €"), + mois39h: parseEuro("4 028,66 €"), + }, + cdi: parseEuro("2 289,87 €"), + }, + { + nom: "Opérateur de transfert et de traitement numérique", + filiere: "C", + niveau: "V", + cddu: { + semaine35h: parseEuro("703,86 €"), + semaine39h: parseEuro("804,41 €"), + jour7h: parseEuro("156,41 €"), + jour8h: parseEuro("178,76 €"), + mois35h: parseEuro("2 674,68 €"), + mois39h: parseEuro("3 056,78 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Opérateur magnéto / Opérateur magnéto ralenti", + filiere: "C", + niveau: "V", + cddu: { + semaine35h: parseEuro("669,07 €"), + semaine39h: parseEuro("764,65 €"), + jour7h: parseEuro("148,68 €"), + jour8h: parseEuro("169,92 €"), + mois35h: parseEuro("2 542,47 €"), + mois39h: parseEuro("2 905,67 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Opérateur régie-vidéo", + filiere: "C", + niveau: "V", + cddu: { + semaine35h: parseEuro("669,07 €"), + semaine39h: parseEuro("764,65 €"), + jour7h: parseEuro("148,68 €"), + jour8h: parseEuro("169,92 €"), + mois35h: parseEuro("2 542,47 €"), + mois39h: parseEuro("2 905,67 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Opérateur spécial (steadicamer)", + filiere: "C", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 162,83 €"), + semaine39h: parseEuro("1 328,95 €"), + jour7h: parseEuro("258,41 €"), + jour8h: parseEuro("295,32 €"), + mois35h: parseEuro("4 418,76 €"), + mois39h: parseEuro("5 050,00 €"), + }, + cdi: parseEuro("2 651,44 €"), + }, + { + nom: "Opérateur synthétiseur", + filiere: "C", + niveau: "V", + cddu: { + semaine35h: parseEuro("669,07 €"), + semaine39h: parseEuro("764,65 €"), + jour7h: parseEuro("148,68 €"), + jour8h: parseEuro("169,92 €"), + mois35h: parseEuro("2 542,47 €"), + mois39h: parseEuro("2 905,67 €"), + }, + cdi: parseEuro("1 828,83 €"), + }, + { + nom: "Photographe de plateau", + filiere: "C", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("798,94 €"), + semaine39h: parseEuro("913,07 €"), + jour7h: parseEuro("177,54 €"), + jour8h: parseEuro("202,91 €"), + mois35h: parseEuro("3 035,97 €"), + mois39h: parseEuro("3 469,67 €"), + }, + cdi: parseEuro("2 229,61 €"), + }, + { + nom: "Pupitreur lumière", + filiere: "C", + niveau: "IIIB", + cddu: { + semaine35h: parseEuro("918,47 €"), + semaine39h: parseEuro("1 049,68 €"), + jour7h: parseEuro("204,10 €"), + jour8h: parseEuro("233,26 €"), + mois35h: parseEuro("3 490,19 €"), + mois39h: parseEuro("3 988,78 €"), + }, + cdi: parseEuro("2 481,29 €"), + }, + { + nom: "Superviseur d'effets spéciaux image", + filiere: "C", + niveau: "IIIA", + cddu: { + semaine35h: parseEuro("1 035,68 €"), + semaine39h: parseEuro("1 183,63 €"), + jour7h: parseEuro("230,15 €"), + jour8h: parseEuro("263,03 €"), + mois35h: parseEuro("3 935,57 €"), + mois39h: parseEuro("4 497,78 €"), + }, + cdi: parseEuro("2 530,92 €"), + }, + { + nom: "Technicien truquiste", + filiere: "C", + niveau: "IV", + cddu: { + semaine35h: parseEuro("810,55 €"), + semaine39h: parseEuro("926,34 €"), + jour7h: parseEuro("180,12 €"), + jour8h: parseEuro("205,85 €"), + mois35h: parseEuro("3 080,07 €"), + mois39h: parseEuro("3 520,07 €"), + }, + cdi: parseEuro("2 109,10 €"), + }, + { + nom: "Technicien vidéo", + filiere: "C", + niveau: "IV", + cddu: { + semaine35h: parseEuro("810,55 €"), + semaine39h: parseEuro("926,34 €"), + jour7h: parseEuro("180,12 €"), + jour8h: parseEuro("205,85 €"), + mois35h: parseEuro("3 080,07 €"), + mois39h: parseEuro("3 520,07 €"), + }, + cdi: parseEuro("2 109,10 €"), + }, + { + nom: "Assistant lumière", + filiere: "C", + niveau: "IV", + cddu: { + semaine35h: parseEuro("753,73 €"), + semaine39h: parseEuro("861,41 €"), + jour7h: parseEuro("167,50 €"), + jour8h: parseEuro("191,42 €"), + mois35h: parseEuro("2 864,18 €"), + mois39h: parseEuro("3 273,34 €"), + }, + cdi: parseEuro("2 018,71 €"), + }, +]; + +const filieres = [ + { code: 'A', nom: 'Contenu du programme et collaboration artistique', icon: Pencil, color: 'violet' }, + { code: 'B', nom: 'Costumes, décor', icon: Palette, color: 'blue' }, + { code: 'C', nom: 'Image', icon: Camera, color: 'cyan' }, +]; + +const colorClasses = { + violet: { + bg: 'bg-violet-50', + border: 'border-violet-200', + text: 'text-violet-900', + hover: 'hover:bg-violet-100', + gradient: 'from-violet-500 to-purple-600', + ring: 'ring-violet-500', + }, + blue: { + bg: 'bg-blue-50', + border: 'border-blue-200', + text: 'text-blue-900', + hover: 'hover:bg-blue-100', + gradient: 'from-blue-500 to-indigo-600', + ring: 'ring-blue-500', + }, + cyan: { + bg: 'bg-cyan-50', + border: 'border-cyan-200', + text: 'text-cyan-900', + hover: 'hover:bg-cyan-100', + gradient: 'from-cyan-500 to-teal-600', + ring: 'ring-cyan-500', + }, +}; + +interface EmploiCardProps { + emploi: Emploi; + color: keyof typeof colorClasses; +} + +function EmploiCard({ emploi, color }: EmploiCardProps) { + const [isExpanded, setIsExpanded] = useState(false); + const [activeTab, setActiveTab] = useState<'cddu' | 'cdi'>('cdi'); + const colors = colorClasses[color]; + + return ( +
+ {/* Header */} + + + {/* Content */} + {isExpanded && ( +
+ {/* Tabs */} +
+ + +
+ + {/* Content based on tab */} + {activeTab === 'cdi' ? ( +
+

Salaire mensuel minimum

+

{euro(emploi.cdi)}

+
+ ) : ( +
+ {/* Par semaine */} +
+

Par semaine

+
+
+

Base 35h

+

{euro(emploi.cddu.semaine35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.semaine39h)}

+
+
+
+ + {/* Par jour */} +
+

Par jour

+
+
+

Base 7h

+

{euro(emploi.cddu.jour7h)}

+
+
+

Base 8h

+

{euro(emploi.cddu.jour8h)}

+
+
+
+ + {/* Par mois */} +
+

Par mois

+
+
+

Base 35h

+

{euro(emploi.cddu.mois35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.mois39h)}

+
+
+
+
+ )} +
+ )} +
+ ); +} + +interface CategorieBFluxDataPart1Props { + activeFiliere: string; +} + +export default function CategorieBFluxDataPart1({ activeFiliere }: CategorieBFluxDataPart1Props) { + const [searchTerm, setSearchTerm] = useState(''); + + const filteredEmplois = useMemo(() => { + // D'abord filtrer par la filière active + let result = emploisData.filter(e => e.filiere === activeFiliere); + + // Puis appliquer le filtre de recherche + if (searchTerm) { + result = result.filter(e => + e.nom.toLowerCase().includes(searchTerm.toLowerCase()) + ); + } + + return result.sort((a, b) => a.nom.localeCompare(b.nom)); + }, [activeFiliere, searchTerm]); + + // Déterminer la couleur en fonction de la filière + const getColorForFiliere = (filiereCode: string): keyof typeof colorClasses => { + const filiere = filieres.find(f => f.code === filiereCode); + return (filiere?.color as keyof typeof colorClasses) || 'blue'; + }; + const activeFiliereInfo = filieres.find(f => f.code === activeFiliere); + + return ( +
+ {/* En-tête */} +
+

+ Filière {activeFiliere} - {activeFiliereInfo?.nom || 'Filière'} +

+

+ {emploisData.length} emplois - Grille de salaires CCNPA (IDCC 2642) - Valeurs 2025 +

+
+ + {/* Recherche */} +
+ {/* Barre de recherche */} +
+ + setSearchTerm(e.target.value)} + placeholder={`Rechercher dans ${activeFiliereInfo?.nom || 'la filière'}...`} + className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-slate-200 focus:ring-2 focus:ring-amber-500 focus:border-transparent text-sm" + /> +
+ + {/* Résultats */} +
+
+

+ {filteredEmplois.length} emploi{filteredEmplois.length > 1 ? 's' : ''} trouvé{filteredEmplois.length > 1 ? 's' : ''} +

+ {searchTerm && ( + + )} +
+ +
+ {filteredEmplois.map((emploi, index) => ( + + ))} +
+ + {filteredEmplois.length === 0 && ( +
+

Aucun emploi trouvé pour cette recherche.

+
+ )} +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-flux.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-flux.tsx new file mode 100644 index 0000000..dc74aa1 --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-flux.tsx @@ -0,0 +1,92 @@ +"use client"; + +import React, { useState } from 'react'; +import CategorieBFluxDataPart1 from './categorie-b-flux-data'; +import CategorieBFluxDataPart2 from './categorie-b-flux-data-part2'; +import CategorieBFluxDataPart3 from './categorie-b-flux-data-part3'; + +type Filiere = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I'; + +const filieres: { code: Filiere; nom: string; part: 1 | 2 | 3 }[] = [ + { code: 'A', nom: 'Contenu du programme et collaboration artistique', part: 1 }, + { code: 'B', nom: 'Costumes, décor', part: 1 }, + { code: 'C', nom: 'Image', part: 1 }, + { code: 'D', nom: 'Plateaux et tournage', part: 2 }, + { code: 'E', nom: 'Postproduction', part: 2 }, + { code: 'F', nom: 'Production', part: 2 }, + { code: 'G', nom: 'Réalisation', part: 3 }, + { code: 'H', nom: 'Son', part: 3 }, + { code: 'I', nom: 'Web', part: 3 }, +]; + +export default function CategorieBFlux() { + const [activeFiliere, setActiveFiliere] = useState('A'); + const [hoveredFiliere, setHoveredFiliere] = useState(null); + + return ( +
+ {/* En-tête de la catégorie */} +
+

+ Catégorie B - Flux +

+

+ Grille des salaires par filière - Programmes de flux (jeux, divertissement, plateaux) +

+ {/* Ligne d'information globale supprimée pour alléger l'en-tête */} +
+ + {/* Boutons de filières */} +
+

+ Sélectionnez une filière pour explorer les emplois : +

+ +
+ {filieres.map((filiere) => ( +
+ + {hoveredFiliere === filiere.code && ( +
+ {filiere.nom} +
+
+
+
+ )} +
+ ))} +
+ + {/* Contenu */} +
+ {(() => { + const activePart = filieres.find(f => f.code === activeFiliere)?.part; + if (activePart === 1) return ; + if (activePart === 2) return ; + if (activePart === 3) return ; + return null; + })()} +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-hors-data-part2.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-hors-data-part2.tsx new file mode 100644 index 0000000..93fc0ee --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-hors-data-part2.tsx @@ -0,0 +1,352 @@ +"use client"; + +import React, { useState, useMemo } from 'react'; +import { Sparkles, Film, ClipboardList, Search, ChevronDown, ChevronUp } from 'lucide-react'; + +// Fonction pour parser les montants en euros +function parseEuro(value: string | null): number | null { + if (!value || value === '-') return null; + const cleaned = value.replace(/\s/g, '').replace('€', '').replace(',', '.'); + const parsed = parseFloat(cleaned); + return isNaN(parsed) ? null : parsed; +} + +// Fonction pour formater en euros +function euro(value: number | null): string { + if (value === null) return '-'; + return new Intl.NumberFormat('fr-FR', { + style: 'currency', + currency: 'EUR' + }).format(value); +} + +// Interface pour un emploi +interface Emploi { + nom: string; + filiere: string; + niveau: string; + cddu: { + semaine35h: number | null; + semaine39h: number | null; + jour7h: number | null; + jour8h: number | null; + mois35h: number | null; + mois39h: number | null; + }; + cdi: number | null; +} + +// Données des emplois - Filières D, E, F +const emploisData: Emploi[] = [ + // Filière D - Maquillage & Coiffure + { nom: "Blocker / Rigger", filiere: "D", niveau: "IV", cddu: { semaine35h: 852.54, semaine39h: 974.34, jour7h: 189.45, jour8h: 216.52, mois35h: 3239.67, mois39h: 3702.47 }, cdi: 1828.83 }, + { nom: "Chef électricien", filiere: "D", niveau: "IIIB", cddu: { semaine35h: 965.54, semaine39h: 1103.47, jour7h: 214.56, jour8h: 245.22, mois35h: 3669.05, mois39h: 4193.19 }, cdi: 2289.87 }, + { nom: "Chef machiniste", filiere: "D", niveau: "IIIB", cddu: { semaine35h: 965.54, semaine39h: 1103.47, jour7h: 214.56, jour8h: 245.22, mois35h: 3669.05, mois39h: 4193.19 }, cdi: 2289.87 }, + { nom: "Chef maquilleur", filiere: "D", niveau: "IIIA", cddu: { semaine35h: 862.86, semaine39h: 986.13, jour7h: 191.75, jour8h: 219.14, mois35h: 3278.87, mois39h: 3747.27 }, cdi: 2410.40 }, + { nom: "Coiffeur", filiere: "D", niveau: "V", cddu: { semaine35h: 696.89, semaine39h: 796.45, jour7h: 154.87, jour8h: 176.99, mois35h: 2648.20, mois39h: 3026.50 }, cdi: 1828.83 }, + { nom: "Coiffeur perruquier", filiere: "D", niveau: "IV", cddu: { semaine35h: 871.40, semaine39h: 995.89, jour7h: 193.65, jour8h: 221.31, mois35h: 3311.33, mois39h: 3784.37 }, cdi: 1988.58 }, + { nom: "Conducteur de groupe", filiere: "D", niveau: "IV", cddu: { semaine35h: 859.91, semaine39h: 982.76, jour7h: 191.09, jour8h: 218.39, mois35h: 3267.67, mois39h: 3734.47 }, cdi: 1988.58 }, + { nom: "Électricien / Éclairagiste", filiere: "D", niveau: "V", cddu: { semaine35h: 792.18, semaine39h: 905.35, jour7h: 176.04, jour8h: 201.19, mois35h: 3010.30, mois39h: 3440.33 }, cdi: 1828.83 }, + { nom: "Machiniste", filiere: "D", niveau: "V", cddu: { semaine35h: 792.18, semaine39h: 905.35, jour7h: 176.04, jour8h: 201.19, mois35h: 3010.30, mois39h: 3440.33 }, cdi: 1828.83 }, + { nom: "Maquilleur", filiere: "D", niveau: "V", cddu: { semaine35h: 696.89, semaine39h: 796.45, jour7h: 154.87, jour8h: 176.99, mois35h: 2648.20, mois39h: 3026.50 }, cdi: 1828.83 }, + { nom: "Maquilleur et coiffeur effets spéciaux", filiere: "D", niveau: "IIIB", cddu: { semaine35h: 1045.91, semaine39h: 1195.33, jour7h: 232.42, jour8h: 265.63, mois35h: 3974.47, mois39h: 4542.23 }, cdi: 2169.36 }, + { nom: "Prothésiste", filiere: "D", niveau: "IIIB", cddu: { semaine35h: 1045.91, semaine39h: 1195.33, jour7h: 232.42, jour8h: 265.63, mois35h: 3974.47, mois39h: 4542.23 }, cdi: 2169.36 }, + + // Filière E - Post-production + { nom: "Assistant de post-production", filiere: "E", niveau: "IV", cddu: { semaine35h: 610.78, semaine39h: 698.03, jour7h: 135.73, jour8h: 155.12, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Assistant monteur", filiere: "E", niveau: "IV", cddu: { semaine35h: 696.89, semaine39h: 796.45, jour7h: 154.87, jour8h: 176.99, mois35h: 2648.20, mois39h: 3026.50 }, cdi: 1928.32 }, + { nom: "Assistant monteur adjoint", filiere: "E", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Chargé de post-production", filiere: "E", niveau: "IIIA", cddu: { semaine35h: 1025.42, semaine39h: 1171.91, jour7h: 227.87, jour8h: 260.42, mois35h: 3896.61, mois39h: 4453.25 }, cdi: 2651.44 }, + { nom: "Chef monteur", filiere: "E", niveau: "IIIA", cddu: { semaine35h: 1099.85, semaine39h: 1256.97, jour7h: 244.41, jour8h: 279.33, mois35h: 4179.43, mois39h: 4776.47 }, cdi: 2651.44 }, + { nom: "Conformateur", filiere: "E", niveau: "IIIB", cddu: { semaine35h: 941.43, semaine39h: 1075.92, jour7h: 209.21, jour8h: 239.09, mois35h: 3577.43, mois39h: 4088.48 }, cdi: 2169.36 }, + { nom: "Directeur de post-production", filiere: "E", niveau: "II", cddu: { semaine35h: 1245.64, semaine39h: 1423.59, jour7h: 276.81, jour8h: 316.35, mois35h: 4733.44, mois39h: 5409.64 }, cdi: 2892.47 }, + { nom: "Étalonneur", filiere: "E", niveau: "IIIB", cddu: { semaine35h: 941.43, semaine39h: 1075.92, jour7h: 209.21, jour8h: 239.09, mois35h: 3577.43, mois39h: 4088.48 }, cdi: 2169.36 }, + { nom: "Infographiste", filiere: "E", niveau: "IIIA", cddu: { semaine35h: 1025.42, semaine39h: 1171.91, jour7h: 227.87, jour8h: 260.42, mois35h: 3896.61, mois39h: 4453.25 }, cdi: 2530.92 }, + { nom: "Mixeur", filiere: "E", niveau: "II", cddu: { semaine35h: 1328.48, semaine39h: 1518.26, jour7h: 295.22, jour8h: 337.39, mois35h: 5048.21, mois39h: 5769.37 }, cdi: 2892.47 }, + { nom: "Mixeur (direct ou conditions du direct)", filiere: "E", niveau: "IIIA", cddu: { semaine35h: 1025.42, semaine39h: 1171.91, jour7h: 227.87, jour8h: 260.42, mois35h: 3896.61, mois39h: 4453.25 }, cdi: 2530.92 }, + { nom: "Superviseur d'effets spéciaux postproduction", filiere: "E", niveau: "IIIA", cddu: { semaine35h: 1162.83, semaine39h: 1328.95, jour7h: 258.41, jour8h: 295.32, mois35h: 4418.76, mois39h: 5050.00 }, cdi: 2651.44 }, + { nom: "Truquiste", filiere: "E", niveau: "IIIA", cddu: { semaine35h: 956.07, semaine39h: 1092.65, jour7h: 212.46, jour8h: 242.81, mois35h: 3633.08, mois39h: 4152.08 }, cdi: 2530.92 }, + + // Filière F - Production + { nom: "Administrateur de production", filiere: "F", niveau: "IIIA", cddu: { semaine35h: 856.04, semaine39h: 978.33, jour7h: 190.23, jour8h: 217.41, mois35h: 3252.95, mois39h: 3717.65 }, cdi: 2591.18 }, + { nom: "Aide de plateau", filiere: "F", niveau: "VI", cddu: { semaine35h: 470.71, semaine39h: 537.96, jour7h: 104.60, jour8h: 119.55, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Assistant d'émission", filiere: "F", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Assistant de production", filiere: "F", niveau: "IV", cddu: { semaine35h: 696.89, semaine39h: 796.45, jour7h: 154.87, jour8h: 176.99, mois35h: 2648.20, mois39h: 3026.50 }, cdi: 1988.58 }, + { nom: "Assistant de production adjoint", filiere: "F", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Assistant régisseur adjoint", filiere: "F", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Chargé de production", filiere: "F", niveau: "II", cddu: { semaine35h: 939.02, semaine39h: 1073.16, jour7h: 208.67, jour8h: 238.48, mois35h: 3568.27, mois39h: 4078.01 }, cdi: 2892.47 }, + { nom: "Chauffeur", filiere: "F", niveau: "VI", cddu: { semaine35h: 470.71, semaine39h: 537.96, jour7h: 104.60, jour8h: 119.55, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Chauffeur de salle", filiere: "F", niveau: "IIIB", cddu: { semaine35h: 871.40, semaine39h: 995.89, jour7h: 193.65, jour8h: 221.31, mois35h: 3311.33, mois39h: 3784.37 }, cdi: 2169.36 }, + { nom: "Comptable de production", filiere: "F", niveau: "IV", cddu: { semaine35h: 732.47, semaine39h: 837.11, jour7h: 162.77, jour8h: 186.02, mois35h: 2783.39, mois39h: 3181.01 }, cdi: 2169.36 }, + { nom: "Coordinateur d'émission", filiere: "F", niveau: "IIIB", cddu: { semaine35h: 727.88, semaine39h: 831.86, jour7h: 161.75, jour8h: 184.86, mois35h: 2765.95, mois39h: 3161.07 }, cdi: 2147.87 }, + { nom: "Directeur de production", filiere: "F", niveau: "I", cddu: { semaine35h: 1509.58, semaine39h: 1725.23, jour7h: 335.46, jour8h: 383.39, mois35h: 5736.40, mois39h: 6555.86 }, cdi: 3314.29 }, + { nom: "Dresseur", filiere: "F", niveau: "II", cddu: { semaine35h: 1099.85, semaine39h: 1256.97, jour7h: 244.41, jour8h: 279.33, mois35h: 4179.43, mois39h: 4776.47 }, cdi: 2952.74 }, + { nom: "Producteur exécutif", filiere: "", niveau: "HN", cddu: { semaine35h: null, semaine39h: null, jour7h: null, jour8h: null, mois35h: null, mois39h: null }, cdi: null }, + { nom: "Régisseur / Responsable des repérages", filiere: "F", niveau: "IIIB", cddu: { semaine35h: 810.55, semaine39h: 926.34, jour7h: 180.12, jour8h: 205.85, mois35h: 3080.09, mois39h: 3520.09 }, cdi: 2169.36 }, + { nom: "Régisseur adjoint", filiere: "F", niveau: "IV", cddu: { semaine35h: 696.89, semaine39h: 796.45, jour7h: 154.87, jour8h: 176.99, mois35h: 2648.20, mois39h: 3026.50 }, cdi: 1988.58 }, + { nom: "Régisseur de plateau / Chef de plateau", filiere: "F", niveau: "IV", cddu: { semaine35h: 696.89, semaine39h: 796.45, jour7h: 154.87, jour8h: 176.99, mois35h: 2648.20, mois39h: 3026.50 }, cdi: 1828.83 }, + { nom: "Régisseur général", filiere: "F", niveau: "IIIA", cddu: { semaine35h: 939.02, semaine39h: 1073.16, jour7h: 208.67, jour8h: 238.48, mois35h: 3568.27, mois39h: 4078.01 }, cdi: 2651.44 }, + { nom: "Régulateur de stationnement", filiere: "F", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Responsable des enfants", filiere: "F", niveau: "IIIB", cddu: { semaine35h: 727.88, semaine39h: 831.86, jour7h: 161.75, jour8h: 184.86, mois35h: 2765.95, mois39h: 3161.07 }, cdi: 2048.84 }, + { nom: "Secrétaire de production", filiere: "F", niveau: "V", cddu: { semaine35h: 610.78, semaine39h: 698.03, jour7h: 135.73, jour8h: 155.12, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, +]; + +// Définition des filières +const filieres = [ + { code: 'D', nom: 'Plateaux et tournage', icon: Sparkles, color: 'pink' }, + { code: 'E', nom: 'Postproduction', icon: Film, color: 'indigo' }, + { code: 'F', nom: 'Production', icon: ClipboardList, color: 'green' }, +]; + +// Classes de couleurs pour chaque filière +const colorClasses: Record = { + pink: { + bg: 'from-pink-50 to-rose-50', + border: 'border-pink-200', + text: 'text-pink-700', + hover: 'hover:border-pink-300', + gradient: 'from-pink-500 to-rose-600', + ring: 'ring-pink-200', + }, + indigo: { + bg: 'from-indigo-50 to-purple-50', + border: 'border-indigo-200', + text: 'text-indigo-700', + hover: 'hover:border-indigo-300', + gradient: 'from-indigo-500 to-purple-600', + ring: 'ring-indigo-200', + }, + green: { + bg: 'from-green-50 to-emerald-50', + border: 'border-green-200', + text: 'text-green-700', + hover: 'hover:border-green-300', + gradient: 'from-green-500 to-emerald-600', + ring: 'ring-green-200', + }, +}; + +// Composant pour une carte d'emploi +interface EmploiCardProps { + emploi: Emploi; + color: string; +} + +function EmploiCard({ emploi, color }: EmploiCardProps) { + const [isExpanded, setIsExpanded] = useState(false); + const [activeTab, setActiveTab] = useState<'cddu' | 'cdi'>('cdi'); + const colors = colorClasses[color]; + + return ( +
+ + + {isExpanded && emploi.niveau !== 'HN' && ( +
+ {/* Tabs CDI / CDDU */} +
+ + +
+ + {/* Contenu CDI */} + {activeTab === 'cdi' && ( +
+

Salaire mensuel

+

{euro(emploi.cdi)}

+

Base 35h / mois

+
+ )} + + {/* Contenu CDDU */} + {activeTab === 'cddu' && ( +
+ {/* Par semaine */} +
+

Par semaine

+
+
+

Base 35h

+

{euro(emploi.cddu.semaine35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.semaine39h)}

+
+
+
+ + {/* Par jour */} +
+

Par jour

+
+
+

Base 7h

+

{euro(emploi.cddu.jour7h)}

+
+
+

Base 8h

+

{euro(emploi.cddu.jour8h)}

+
+
+
+ + {/* Par mois */} +
+

Par mois

+
+
+

Base 35h

+

{euro(emploi.cddu.mois35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.mois39h)}

+
+
+
+
+ )} +
+ )} +
+ ); +} + +// Composant principal +interface CategorieBHorsDataPart2Props { + activeFiliere: string; +} + +export default function CategorieBHorsDataPart2({ activeFiliere }: CategorieBHorsDataPart2Props) { + const [searchTerm, setSearchTerm] = useState(''); + + const filteredEmplois = useMemo(() => { + // D'abord filtrer par la filière active + let result = emploisData.filter(e => e.filiere === activeFiliere); + + // Puis appliquer le filtre de recherche + if (searchTerm) { + result = result.filter(e => + e.nom.toLowerCase().includes(searchTerm.toLowerCase()) + ); + } + + return result.sort((a, b) => a.nom.localeCompare(b.nom)); + }, [activeFiliere, searchTerm]); + + // Déterminer la couleur en fonction de la filière + const getColorForFiliere = (filiereCode: string): keyof typeof colorClasses => { + const filiere = filieres.find(f => f.code === filiereCode); + return (filiere?.color as keyof typeof colorClasses) || 'blue'; + }; + const activeFiliereInfo = filieres.find(f => f.code === activeFiliere); + + return ( +
+ {/* En-tête */} +
+

+ Filière {activeFiliere} - {activeFiliereInfo?.nom || 'Filière'} +

+

+ {emploisData.length} emplois - Grille de salaires CCNPA (IDCC 2642) - Valeurs 2025 +

+
+ + {/* Recherche */} +
+ {/* Barre de recherche */} +
+ + setSearchTerm(e.target.value)} + placeholder={`Rechercher dans ${activeFiliereInfo?.nom || 'la filière'}...`} + className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-slate-200 focus:ring-2 focus:ring-emerald-500 focus:border-transparent text-sm" + /> +
+ + {/* Résultats */} +
+
+

+ {filteredEmplois.length} emploi{filteredEmplois.length > 1 ? 's' : ''} trouvé{filteredEmplois.length > 1 ? 's' : ''} +

+ {searchTerm && ( + + )} +
+ +
+ {filteredEmplois.map((emploi, index) => ( + + ))} +
+ + {filteredEmplois.length === 0 && ( +
+

Aucun emploi trouvé pour cette recherche.

+
+ )} +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-hors-data-part3.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-hors-data-part3.tsx new file mode 100644 index 0000000..b6d1a06 --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-hors-data-part3.tsx @@ -0,0 +1,334 @@ +"use client"; + +import React, { useState, useMemo } from 'react'; +import { Clapperboard, Volume2, Globe, Search, ChevronDown, ChevronUp } from 'lucide-react'; + +// Fonction pour parser les montants en euros +function parseEuro(value: string | null): number | null { + if (!value || value === '-') return null; + const cleaned = value.replace(/\s/g, '').replace('€', '').replace(',', '.'); + const parsed = parseFloat(cleaned); + return isNaN(parsed) ? null : parsed; +} + +// Fonction pour formater en euros +function euro(value: number | null): string { + if (value === null) return '-'; + return new Intl.NumberFormat('fr-FR', { + style: 'currency', + currency: 'EUR' + }).format(value); +} + +// Interface pour un emploi +interface Emploi { + nom: string; + filiere: string; + niveau: string; + cddu: { + semaine35h: number | null; + semaine39h: number | null; + jour7h: number | null; + jour8h: number | null; + mois35h: number | null; + mois39h: number | null; + }; + cdi: number | null; +} + +// Données des emplois - Filières G, H, I +const emploisData: Emploi[] = [ + // Filière G - Réalisation + { nom: "1er assistant réalisateur", filiere: "G", niveau: "II", cddu: { semaine35h: 939.02, semaine39h: 1073.16, jour7h: 208.67, jour8h: 238.48, mois35h: 3568.27, mois39h: 4078.01 }, cdi: 2892.47 }, + { nom: "2ème assistant réalisateur", filiere: "G", niveau: "IV", cddu: { semaine35h: 785.30, semaine39h: 897.48, jour7h: 174.51, jour8h: 199.44, mois35h: 2984.13, mois39h: 3410.42 }, cdi: 1988.58 }, + { nom: "Assistant réalisateur", filiere: "G", niveau: "IIIB", cddu: { semaine35h: 872.56, semaine39h: 997.21, jour7h: 193.90, jour8h: 221.60, mois35h: 3315.71, mois39h: 3789.38 }, cdi: 2229.61 }, + { nom: "Assistant réalisateur adjoint", filiere: "G", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Assistant scripte adjoint", filiere: "G", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Conseiller technique à la réalisation", filiere: "G", niveau: "II", cddu: { semaine35h: 1025.42, semaine39h: 1171.91, jour7h: 227.87, jour8h: 260.42, mois35h: 3896.61, mois39h: 4453.25 }, cdi: 3013.00 }, + { nom: "Réalisateur", filiere: "", niveau: "HN", cddu: { semaine35h: null, semaine39h: null, jour7h: null, jour8h: null, mois35h: null, mois39h: null }, cdi: null }, + { nom: "Répétiteur", filiere: "G", niveau: "IIIB", cddu: { semaine35h: 727.88, semaine39h: 831.86, jour7h: 161.75, jour8h: 184.86, mois35h: 2765.95, mois39h: 3161.07 }, cdi: 2048.84 }, + { nom: "Scripte", filiere: "G", niveau: "IIIA", cddu: { semaine35h: 939.02, semaine39h: 1073.16, jour7h: 208.67, jour8h: 238.48, mois35h: 3568.27, mois39h: 4078.01 }, cdi: 2651.44 }, + { nom: "Storyboarder", filiere: "G", niveau: "IIIB", cddu: { semaine35h: 872.56, semaine39h: 997.21, jour7h: 193.90, jour8h: 221.60, mois35h: 3315.71, mois39h: 3789.38 }, cdi: 2169.36 }, + + // Filière H - Son + { nom: "Assistant son", filiere: "H", niveau: "IV", cddu: { semaine35h: 696.89, semaine39h: 796.45, jour7h: 154.87, jour8h: 176.99, mois35h: 2648.20, mois39h: 3026.50 }, cdi: 1928.32 }, + { nom: "Assistant son adjoint", filiere: "H", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Bruiteur", filiere: "H", niveau: "IIIA", cddu: { semaine35h: 1025.42, semaine39h: 1171.91, jour7h: 227.87, jour8h: 260.42, mois35h: 3896.61, mois39h: 4453.25 }, cdi: 2530.92 }, + { nom: "Chef OPS / Ingénieur du son", filiere: "H", niveau: "IIIA", cddu: { semaine35h: 1194.86, semaine39h: 1365.55, jour7h: 265.52, jour8h: 303.46, mois35h: 4540.45, mois39h: 5189.07 }, cdi: 2651.44 }, + { nom: "Mixeur (direct ou conditions du direct)", filiere: "H", niveau: "IIIA", cddu: { semaine35h: 1025.42, semaine39h: 1171.91, jour7h: 227.87, jour8h: 260.42, mois35h: 3896.61, mois39h: 4453.25 }, cdi: 2530.92 }, + { nom: "OPS", filiere: "H", niveau: "IIIB", cddu: { semaine35h: 872.56, semaine39h: 997.21, jour7h: 193.90, jour8h: 221.60, mois35h: 3315.71, mois39h: 3789.38 }, cdi: 2169.36 }, + { nom: "Perchiste / 1er assistant son", filiere: "H", niveau: "IIIA", cddu: { semaine35h: 860.59, semaine39h: 983.53, jour7h: 191.24, jour8h: 218.56, mois35h: 3270.23, mois39h: 3737.39 }, cdi: 2410.40 }, + { nom: "Technicien instruments (backliner)", filiere: "H", niveau: "IIIB", cddu: { semaine35h: 872.56, semaine39h: 997.21, jour7h: 193.90, jour8h: 221.60, mois35h: 3315.71, mois39h: 3789.38 }, cdi: 2386.53 }, + + // Filière I - Web + { nom: "Assistant technique web", filiere: "I", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 1957.10, mois39h: 2236.67 }, cdi: 1828.83 }, + { nom: "Concepteur de programme web", filiere: "I", niveau: "I", cddu: { semaine35h: 766.61, semaine39h: 876.13, jour7h: 170.36, jour8h: 194.70, mois35h: 3319.44, mois39h: 3793.63 }, cdi: 2969.12 }, + { nom: "Coordinateur de diffusion web", filiere: "I", niveau: "IIIB", cddu: { semaine35h: 507.23, semaine39h: 579.70, jour7h: 112.72, jour8h: 128.82, mois35h: 2196.32, mois39h: 2510.08 }, cdi: 1959.62 }, + { nom: "Coordinateur de production web", filiere: "I", niveau: "II", cddu: { semaine35h: 576.41, semaine39h: 658.75, jour7h: 128.09, jour8h: 146.39, mois35h: 2495.85, mois39h: 2852.39 }, cdi: 2197.15 }, + { nom: "Designer web", filiere: "I", niveau: "IIIA", cddu: { semaine35h: 530.30, semaine39h: 606.05, jour7h: 117.84, jour8h: 134.68, mois35h: 2296.18, mois39h: 2624.20 }, cdi: 2019.01 }, + { nom: "Editeur artistique web", filiere: "I", niveau: "IV", cddu: { semaine35h: 489.94, semaine39h: 559.93, jour7h: 108.88, jour8h: 124.43, mois35h: 2121.44, mois39h: 2424.50 }, cdi: 1900.24 }, + { nom: "Gestionnaire de diffusion internet (traffic manager)", filiere: "I", niveau: "V", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 1957.10, mois39h: 2236.67 }, cdi: 1828.83 }, + { nom: "Opérateur web / Opérateur multicam web", filiere: "I", niveau: "IIIA", cddu: { semaine35h: 553.35, semaine39h: 632.40, jour7h: 122.97, jour8h: 140.53, mois35h: 2395.99, mois39h: 2738.27 }, cdi: 2137.77 }, + { nom: "Technicien de développement web", filiere: "I", niveau: "IIIB", cddu: { semaine35h: 507.23, semaine39h: 579.70, jour7h: 112.72, jour8h: 128.82, mois35h: 2196.32, mois39h: 2510.08 }, cdi: 1959.62 }, + { nom: "Technicien vidéo web", filiere: "I", niveau: "V", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 1957.10, mois39h: 2236.67 }, cdi: 1828.83 }, +]; + +// Définition des filières +const filieres = [ + { code: 'G', nom: 'Réalisation', icon: Clapperboard, color: 'orange' }, + { code: 'H', nom: 'Son', icon: Volume2, color: 'red' }, + { code: 'I', nom: 'Web', icon: Globe, color: 'teal' }, +]; + +// Classes de couleurs pour chaque filière +const colorClasses: Record = { + orange: { + bg: 'from-orange-50 to-amber-50', + border: 'border-orange-200', + text: 'text-orange-700', + hover: 'hover:border-orange-300', + gradient: 'from-orange-500 to-amber-600', + ring: 'ring-orange-200', + }, + red: { + bg: 'from-red-50 to-rose-50', + border: 'border-red-200', + text: 'text-red-700', + hover: 'hover:border-red-300', + gradient: 'from-red-500 to-rose-600', + ring: 'ring-red-200', + }, + teal: { + bg: 'from-teal-50 to-cyan-50', + border: 'border-teal-200', + text: 'text-teal-700', + hover: 'hover:border-teal-300', + gradient: 'from-teal-500 to-cyan-600', + ring: 'ring-teal-200', + }, +}; + +// Composant pour une carte d'emploi +interface EmploiCardProps { + emploi: Emploi; + color: string; +} + +function EmploiCard({ emploi, color }: EmploiCardProps) { + const [isExpanded, setIsExpanded] = useState(false); + const [activeTab, setActiveTab] = useState<'cddu' | 'cdi'>('cdi'); + const colors = colorClasses[color]; + + return ( +
+ + + {isExpanded && emploi.niveau !== 'HN' && ( +
+ {/* Tabs CDI / CDDU */} +
+ + +
+ + {/* Contenu CDI */} + {activeTab === 'cdi' && ( +
+

Salaire mensuel

+

{euro(emploi.cdi)}

+

Base 35h / mois

+
+ )} + + {/* Contenu CDDU */} + {activeTab === 'cddu' && ( +
+ {/* Par semaine */} +
+

Par semaine

+
+
+

Base 35h

+

{euro(emploi.cddu.semaine35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.semaine39h)}

+
+
+
+ + {/* Par jour */} +
+

Par jour

+
+
+

Base 7h

+

{euro(emploi.cddu.jour7h)}

+
+
+

Base 8h

+

{euro(emploi.cddu.jour8h)}

+
+
+
+ + {/* Par mois */} +
+

Par mois

+
+
+

Base 35h

+

{euro(emploi.cddu.mois35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.mois39h)}

+
+
+
+
+ )} +
+ )} +
+ ); +} + +// Composant principal +interface CategorieBHorsDataPart3Props { + activeFiliere: string; +} + +export default function CategorieBHorsDataPart3({ activeFiliere }: CategorieBHorsDataPart3Props) { + const [searchTerm, setSearchTerm] = useState(''); + + const filteredEmplois = useMemo(() => { + // D'abord filtrer par la filière active + let result = emploisData.filter(e => e.filiere === activeFiliere); + + // Puis appliquer le filtre de recherche + if (searchTerm) { + result = result.filter(e => + e.nom.toLowerCase().includes(searchTerm.toLowerCase()) + ); + } + + return result.sort((a, b) => a.nom.localeCompare(b.nom)); + }, [activeFiliere, searchTerm]); + + // Déterminer la couleur en fonction de la filière + const getColorForFiliere = (filiereCode: string): keyof typeof colorClasses => { + const filiere = filieres.find(f => f.code === filiereCode); + return (filiere?.color as keyof typeof colorClasses) || 'blue'; + }; + const activeFiliereInfo = filieres.find(f => f.code === activeFiliere); + + return ( +
+ {/* En-tête */} +
+

+ Filière {activeFiliere} - {activeFiliereInfo?.nom || 'Filière'} +

+

+ {emploisData.length} emplois - Grille de salaires CCNPA (IDCC 2642) - Valeurs 2025 +

+
+ + {/* Recherche */} +
+ {/* Barre de recherche */} +
+ + setSearchTerm(e.target.value)} + placeholder={`Rechercher dans ${activeFiliereInfo?.nom || 'la filière'}...`} + className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-slate-200 focus:ring-2 focus:ring-emerald-500 focus:border-transparent text-sm" + /> +
+ + {/* Résultats */} +
+
+

+ {filteredEmplois.length} emploi{filteredEmplois.length > 1 ? 's' : ''} trouvé{filteredEmplois.length > 1 ? 's' : ''} +

+ {searchTerm && ( + + )} +
+ +
+ {filteredEmplois.map((emploi, index) => ( + + ))} +
+ + {filteredEmplois.length === 0 && ( +
+

Aucun emploi trouvé pour cette recherche.

+
+ )} +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-hors-data.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-hors-data.tsx new file mode 100644 index 0000000..44fd3cc --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-hors-data.tsx @@ -0,0 +1,367 @@ +"use client"; + +import React, { useState, useMemo } from 'react'; +import { Pencil, Palette, Camera, Search, ChevronDown, ChevronUp } from 'lucide-react'; + +// Fonction pour parser les montants en euros +function parseEuro(value: string | null): number | null { + if (!value || value === '-') return null; + const cleaned = value.replace(/\s/g, '').replace('€', '').replace(',', '.'); + const parsed = parseFloat(cleaned); + return isNaN(parsed) ? null : parsed; +} + +// Fonction pour formater en euros +function euro(value: number | null): string { + if (value === null) return '-'; + return new Intl.NumberFormat('fr-FR', { + style: 'currency', + currency: 'EUR' + }).format(value); +} + +// Interface pour un emploi +interface Emploi { + nom: string; + filiere: string; + niveau: string; + cddu: { + semaine35h: number | null; + semaine39h: number | null; + jour7h: number | null; + jour8h: number | null; + mois35h: number | null; + mois39h: number | null; + }; + cdi: number | null; +} + +// Données des emplois - Filières A, B, C +const emploisData: Emploi[] = [ + // Filière A - Écriture + { nom: "Animatronicien", filiere: "A", niveau: "IIIA", cddu: { semaine35h: 769.64, semaine39h: 879.58, jour7h: 171.03, jour8h: 195.46, mois35h: 2924.61, mois39h: 3342.41 }, cdi: 2530.92 }, + { nom: "Chargé d'enquête / de recherche", filiere: "A", niveau: "IIIA", cddu: { semaine35h: 783.49, semaine39h: 895.41, jour7h: 174.11, jour8h: 198.98, mois35h: 2977.24, mois39h: 3402.56 }, cdi: 2530.92 }, + { nom: "Chargé de sélection", filiere: "A", niveau: "IIIA", cddu: { semaine35h: 802.60, semaine39h: 917.26, jour7h: 178.36, jour8h: 203.84, mois35h: 3049.89, mois39h: 3485.58 }, cdi: 2590.58 }, + { nom: "Collaborateur artistique", filiere: "A", niveau: "IV", cddu: { semaine35h: 521.24, semaine39h: 595.71, jour7h: 115.83, jour8h: 132.38, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Collaborateur de sélection", filiere: "A", niveau: "IV", cddu: { semaine35h: 628.00, semaine39h: 717.71, jour7h: 139.56, jour8h: 159.49, mois35h: 2386.40, mois39h: 2727.30 }, cdi: 2048.84 }, + { nom: "Conseiller artistique d'émission", filiere: "A", niveau: "IIIA", cddu: { semaine35h: 787.91, semaine39h: 900.47, jour7h: 175.09, jour8h: 200.10, mois35h: 2994.06, mois39h: 3421.77 }, cdi: 2590.58 }, + { nom: "Coordinateur d'écriture (ex script éditeur)", filiere: "A", niveau: "II", cddu: { semaine35h: 856.04, semaine39h: 978.33, jour7h: 190.23, jour8h: 217.41, mois35h: 3252.95, mois39h: 3717.65 }, cdi: 3013.00 }, + { nom: "Dir. de collection / Dir. de programmation", filiere: "A", niveau: "II", cddu: { semaine35h: 1099.85, semaine39h: 1256.97, jour7h: 244.41, jour8h: 279.33, mois35h: 4179.43, mois39h: 4776.47 }, cdi: 2952.74 }, + { nom: "Directeur artistique", filiere: "A", niveau: "II", cddu: { semaine35h: 1099.85, semaine39h: 1256.97, jour7h: 244.41, jour8h: 279.33, mois35h: 4179.43, mois39h: 4776.47 }, cdi: 2952.74 }, + { nom: "Directeur de jeux", filiere: "A", niveau: "I", cddu: { semaine35h: 1099.85, semaine39h: 1256.97, jour7h: 244.41, jour8h: 279.33, mois35h: 4179.43, mois39h: 4776.47 }, cdi: 2952.14 }, + { nom: "Directeur de la distribution", filiere: "A", niveau: "IIIA", cddu: { semaine35h: 856.04, semaine39h: 978.33, jour7h: 190.23, jour8h: 217.41, mois35h: 3252.95, mois39h: 3717.65 }, cdi: 2530.92 }, + { nom: "Directeur de sélection", filiere: "A", niveau: "I", cddu: { semaine35h: 1099.85, semaine39h: 1256.97, jour7h: 244.41, jour8h: 279.33, mois35h: 4179.43, mois39h: 4776.47 }, cdi: 2892.47 }, + { nom: "Directeur des dialogues", filiere: "A", niveau: "IIIB", cddu: { semaine35h: 727.88, semaine39h: 831.86, jour7h: 161.75, jour8h: 184.86, mois35h: 2765.95, mois39h: 3161.07 }, cdi: 2048.84 }, + { nom: "Documentaliste", filiere: "A", niveau: "II", cddu: { semaine35h: 818.52, semaine39h: 935.45, jour7h: 181.89, jour8h: 207.88, mois35h: 3110.36, mois39h: 3554.68 }, cdi: 2892.47 }, + { nom: "Enquêteur / Recherchiste", filiere: "A", niveau: "IIIB", cddu: { semaine35h: 749.71, semaine39h: 856.81, jour7h: 166.60, jour8h: 190.40, mois35h: 2848.89, mois39h: 3255.86 }, cdi: 2169.36 }, + { nom: "Illustrateur sonore", filiere: "A", niveau: "IIIA", cddu: { semaine35h: 769.64, semaine39h: 879.58, jour7h: 171.03, jour8h: 195.46, mois35h: 2924.61, mois39h: 3342.41 }, cdi: 2410.40 }, + { nom: "Préparateur de questions", filiere: "A", niveau: "IV", cddu: { semaine35h: 628.00, semaine39h: 717.71, jour7h: 139.56, jour8h: 159.49, mois35h: 2386.40, mois39h: 2727.30 }, cdi: 2147.87 }, + { nom: "Producteur artistique", filiere: "A", niveau: "II", cddu: { semaine35h: 1099.85, semaine39h: 1256.97, jour7h: 244.41, jour8h: 279.33, mois35h: 4179.43, mois39h: 4776.47 }, cdi: 2952.74 }, + { nom: "Programmateur artistique d'émission", filiere: "A", niveau: "IIIB", cddu: { semaine35h: 727.88, semaine39h: 831.86, jour7h: 161.75, jour8h: 184.86, mois35h: 2765.95, mois39h: 3161.07 }, cdi: 2048.84 }, + { nom: "Responsable d'enquête / de recherche", filiere: "A", niveau: "II", cddu: { semaine35h: 818.52, semaine39h: 935.45, jour7h: 181.89, jour8h: 207.88, mois35h: 3110.36, mois39h: 3554.68 }, cdi: 2892.47 }, + { nom: "Responsable de questions", filiere: "A", niveau: "IIIA", cddu: { semaine35h: 769.64, semaine39h: 879.58, jour7h: 171.03, jour8h: 195.46, mois35h: 2924.61, mois39h: 3342.41 }, cdi: 2651.44 }, + + // Filière B - Décor & Costume + { nom: "1er assistant décorateur", filiere: "B", niveau: "IIIA", cddu: { semaine35h: 939.02, semaine39h: 1073.16, jour7h: 208.67, jour8h: 238.48, mois35h: 3568.27, mois39h: 4078.01 }, cdi: 2530.92 }, + { nom: "2ème assistant décorateur", filiere: "B", niveau: "IIIB", cddu: { semaine35h: 818.59, semaine39h: 935.53, jour7h: 181.91, jour8h: 207.90, mois35h: 3110.64, mois39h: 3555.01 }, cdi: 2109.10 }, + { nom: "Accessoiriste", filiere: "B", niveau: "IIIB", cddu: { semaine35h: 791.03, semaine39h: 904.03, jour7h: 175.78, jour8h: 200.90, mois35h: 3005.91, mois39h: 3435.32 }, cdi: 2048.84 }, + { nom: "Assistant décorateur adjoint", filiere: "B", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Chef constructeur", filiere: "B", niveau: "IIIA", cddu: { semaine35h: 1203.69, semaine39h: 1375.64, jour7h: 267.49, jour8h: 305.70, mois35h: 4574.02, mois39h: 5227.43 }, cdi: 2651.44 }, + { nom: "Chef costumier", filiere: "B", niveau: "IIIA", cddu: { semaine35h: 872.56, semaine39h: 997.21, jour7h: 193.90, jour8h: 221.60, mois35h: 3315.71, mois39h: 3789.38 }, cdi: 2169.36 }, + { nom: "Chef d'équipe de décor", filiere: "B", niveau: "IV", cddu: { semaine35h: 1086.87, semaine39h: 1242.14, jour7h: 241.53, jour8h: 276.03, mois35h: 4130.12, mois39h: 4720.13 }, cdi: 2530.92 }, + { nom: "Chef décorateur", filiere: "B", niveau: "II", cddu: { semaine35h: 1639.88, semaine39h: 1874.15, jour7h: 364.42, jour8h: 416.48, mois35h: 6231.55, mois39h: 7121.75 }, cdi: 3013.00 }, + { nom: "Constructeur de décor", filiere: "B", niveau: "IV", cddu: { semaine35h: 909.38, semaine39h: 1039.29, jour7h: 202.08, jour8h: 230.95, mois35h: 3455.63, mois39h: 3949.29 }, cdi: 2481.29 }, + { nom: "Costumier", filiere: "B", niveau: "IV", cddu: { semaine35h: 696.89, semaine39h: 796.45, jour7h: 154.87, jour8h: 176.99, mois35h: 2648.20, mois39h: 3026.50 }, cdi: 1828.83 }, + { nom: "Créateur de costume", filiere: "B", niveau: "II", cddu: { semaine35h: 1616.70, semaine39h: 1847.66, jour7h: 359.27, jour8h: 410.59, mois35h: 6143.47, mois39h: 7021.08 }, cdi: 3013.00 }, + { nom: "Décorateur", filiere: "B", niveau: "II", cddu: { semaine35h: 1043.61, semaine39h: 1192.70, jour7h: 231.91, jour8h: 265.04, mois35h: 3965.71, mois39h: 4532.23 }, cdi: 2892.47 }, + { nom: "Dessinateur en décor", filiere: "B", niveau: "IIIB", cddu: { semaine35h: 818.59, semaine39h: 935.53, jour7h: 181.91, jour8h: 207.90, mois35h: 3110.64, mois39h: 3555.01 }, cdi: 2109.10 }, + { nom: "Électricien déco / Machiniste déco", filiere: "B", niveau: "V", cddu: { semaine35h: 897.81, semaine39h: 1026.07, jour7h: 199.51, jour8h: 228.02, mois35h: 3411.68, mois39h: 3899.05 }, cdi: 2169.36 }, + { nom: "Ensemblier - décorateur", filiere: "B", niveau: "IIIA", cddu: { semaine35h: 939.02, semaine39h: 1073.16, jour7h: 208.67, jour8h: 238.48, mois35h: 3568.27, mois39h: 4078.01 }, cdi: 2530.92 }, + { nom: "Habilleur", filiere: "B", niveau: "V", cddu: { semaine35h: 628.00, semaine39h: 717.71, jour7h: 139.56, jour8h: 159.49, mois35h: 2386.40, mois39h: 2727.30 }, cdi: 1828.83 }, + { nom: "Maçon de décor", filiere: "B", niveau: "V", cddu: { semaine35h: 897.81, semaine39h: 1026.07, jour7h: 199.51, jour8h: 228.02, mois35h: 3411.68, mois39h: 3899.05 }, cdi: 2169.36 }, + { nom: "Menuisier-traceur-toupilleur de décor", filiere: "B", niveau: "V", cddu: { semaine35h: 926.51, semaine39h: 1058.87, jour7h: 205.89, jour8h: 235.30, mois35h: 3520.74, mois39h: 4023.70 }, cdi: 2410.40 }, + { nom: "Métallier / Serrurier / Mécanicien de décor", filiere: "B", niveau: "V", cddu: { semaine35h: 897.81, semaine39h: 1026.07, jour7h: 199.51, jour8h: 228.02, mois35h: 3411.68, mois39h: 3899.05 }, cdi: 2169.36 }, + { nom: "Peintre de décor", filiere: "B", niveau: "V", cddu: { semaine35h: 897.81, semaine39h: 1026.07, jour7h: 199.51, jour8h: 228.02, mois35h: 3411.68, mois39h: 3899.05 }, cdi: 2169.36 }, + { nom: "Peintre en lettres / en faux bois de décor", filiere: "B", niveau: "V", cddu: { semaine35h: 897.81, semaine39h: 1026.07, jour7h: 199.51, jour8h: 228.02, mois35h: 3411.68, mois39h: 3899.05 }, cdi: 2169.36 }, + { nom: "Régisseur d'extérieurs", filiere: "B", niveau: "IIIB", cddu: { semaine35h: 818.59, semaine39h: 935.53, jour7h: 181.91, jour8h: 207.90, mois35h: 3110.64, mois39h: 3555.01 }, cdi: 2109.10 }, + { nom: "Rippeur", filiere: "B", niveau: "V", cddu: { semaine35h: 802.52, semaine39h: 917.17, jour7h: 178.34, jour8h: 203.81, mois35h: 3049.58, mois39h: 3485.22 }, cdi: 1828.83 }, + { nom: "Staffeur de décor", filiere: "B", niveau: "V", cddu: { semaine35h: 926.51, semaine39h: 1058.87, jour7h: 205.89, jour8h: 235.30, mois35h: 3520.74, mois39h: 4023.70 }, cdi: 2169.36 }, + { nom: "Styliste", filiere: "B", niveau: "IIIB", cddu: { semaine35h: 785.30, semaine39h: 897.48, jour7h: 174.51, jour8h: 199.44, mois35h: 2984.13, mois39h: 3410.42 }, cdi: 2048.84 }, + { nom: "Tapissier de décor", filiere: "B", niveau: "V", cddu: { semaine35h: 897.81, semaine39h: 1026.07, jour7h: 199.51, jour8h: 228.02, mois35h: 3411.68, mois39h: 3899.05 }, cdi: 2169.36 }, + + // Filière C - Image + { nom: "1er assistant OPV / pointeur", filiere: "C", niveau: "IIIA", cddu: { semaine35h: 944.71, semaine39h: 1079.66, jour7h: 209.93, jour8h: 239.93, mois35h: 3589.89, mois39h: 4102.71 }, cdi: 2651.44 }, + { nom: "2ème assistant OPV", filiere: "C", niveau: "V", cddu: { semaine35h: 696.89, semaine39h: 796.45, jour7h: 154.87, jour8h: 176.99, mois35h: 2648.20, mois39h: 3026.50 }, cdi: 1828.83 }, + { nom: "Assistant lumière", filiere: "C", niveau: "IV", cddu: { semaine35h: 746.27, semaine39h: 852.88, jour7h: 165.84, jour8h: 189.53, mois35h: 2835.82, mois39h: 3240.93 }, cdi: 2018.71 }, + { nom: "Assistant OPV adjoint", filiere: "C", niveau: "VI", cddu: { semaine35h: 451.99, semaine39h: 516.55, jour7h: 100.44, jour8h: 114.79, mois35h: 2342.34, mois39h: 2676.95 }, cdi: 1828.83 }, + { nom: "Cadreur / OPV", filiere: "C", niveau: "IIIA", cddu: { semaine35h: 1097.60, semaine39h: 1254.40, jour7h: 243.91, jour8h: 278.76, mois35h: 4170.87, mois39h: 4766.70 }, cdi: 2651.44 }, + { nom: "Chef OPV", filiere: "C", niveau: "II", cddu: { semaine35h: 1245.64, semaine39h: 1423.59, jour7h: 276.81, jour8h: 316.35, mois35h: 4733.44, mois39h: 5409.64 }, cdi: 3013.00 }, + { nom: "Directeur photo", filiere: "C", niveau: "I", cddu: { semaine35h: 1735.96, semaine39h: 1983.96, jour7h: 385.77, jour8h: 440.88, mois35h: 6596.66, mois39h: 7539.02 }, cdi: 3314.29 }, + { nom: "Ingénieur de la vision", filiere: "C", niveau: "II", cddu: { semaine35h: 1245.64, semaine39h: 1423.59, jour7h: 276.81, jour8h: 316.35, mois35h: 4733.44, mois39h: 5409.64 }, cdi: 3013.00 }, + { nom: "Ingénieur de la vision adjoint", filiere: "C", niveau: "IIIB", cddu: { semaine35h: 872.56, semaine39h: 997.21, jour7h: 193.90, jour8h: 221.60, mois35h: 3315.71, mois39h: 3789.38 }, cdi: 2169.36 }, + { nom: "Monteur", filiere: "C", niveau: "IIIB", cddu: { semaine35h: 918.47, semaine39h: 1049.68, jour7h: 204.10, jour8h: 233.26, mois35h: 3490.19, mois39h: 3988.78 }, cdi: 2289.87 }, + { nom: "Opérateur de transfert et de traitement numérique", filiere: "C", niveau: "V", cddu: { semaine35h: 696.89, semaine39h: 796.45, jour7h: 154.87, jour8h: 176.99, mois35h: 2648.20, mois39h: 3026.51 }, cdi: 1828.83 }, + { nom: "Opérateur magnéto / Opérateur magnéto ralenti", filiere: "C", niveau: "V", cddu: { semaine35h: 662.45, semaine39h: 757.08, jour7h: 147.21, jour8h: 168.24, mois35h: 2517.30, mois39h: 2876.90 }, cdi: 1828.83 }, + { nom: "Opérateur régie-vidéo", filiere: "C", niveau: "V", cddu: { semaine35h: 662.45, semaine39h: 757.08, jour7h: 147.21, jour8h: 168.24, mois35h: 2517.30, mois39h: 2876.90 }, cdi: 1828.83 }, + { nom: "Opérateur spécial (steadicamer)", filiere: "C", niveau: "IIIA", cddu: { semaine35h: 1162.83, semaine39h: 1328.95, jour7h: 258.41, jour8h: 295.32, mois35h: 4418.76, mois39h: 5050.00 }, cdi: 2651.44 }, + { nom: "Opérateur synthétiseur", filiere: "C", niveau: "V", cddu: { semaine35h: 662.45, semaine39h: 757.08, jour7h: 147.21, jour8h: 168.24, mois35h: 2517.30, mois39h: 2876.90 }, cdi: 1828.83 }, + { nom: "Photographe de plateau", filiere: "C", niveau: "IIIB", cddu: { semaine35h: 791.03, semaine39h: 904.03, jour7h: 175.78, jour8h: 200.90, mois35h: 3005.91, mois39h: 3435.32 }, cdi: 2229.61 }, + { nom: "Pupitreur lumière", filiere: "C", niveau: "IIIB", cddu: { semaine35h: 909.38, semaine39h: 1039.29, jour7h: 202.08, jour8h: 230.95, mois35h: 3455.63, mois39h: 3949.29 }, cdi: 2481.29 }, + { nom: "Superviseur d'effets spéciaux image", filiere: "C", niveau: "IIIA", cddu: { semaine35h: 1025.42, semaine39h: 1171.91, jour7h: 227.87, jour8h: 260.42, mois35h: 3896.61, mois39h: 4453.25 }, cdi: 2530.92 }, + { nom: "Technicien truquiste", filiere: "C", niveau: "IV", cddu: { semaine35h: 802.52, semaine39h: 917.17, jour7h: 178.34, jour8h: 203.81, mois35h: 3049.58, mois39h: 3485.22 }, cdi: 2109.10 }, + { nom: "Technicien vidéo", filiere: "C", niveau: "IV", cddu: { semaine35h: 802.52, semaine39h: 917.17, jour7h: 178.34, jour8h: 203.81, mois35h: 3049.58, mois39h: 3485.22 }, cdi: 2109.10 }, +]; + +// Définition des filières +const filieres = [ + { code: 'A', nom: 'Contenu du programme et collaboration artistique', icon: Pencil, color: 'violet' }, + { code: 'B', nom: 'Costumes, décor', icon: Palette, color: 'blue' }, + { code: 'C', nom: 'Image', icon: Camera, color: 'cyan' }, +]; + +// Classes de couleurs pour chaque filière +const colorClasses: Record = { + violet: { + bg: 'from-violet-50 to-purple-50', + border: 'border-violet-200', + text: 'text-violet-700', + hover: 'hover:border-violet-300', + gradient: 'from-violet-500 to-purple-600', + ring: 'ring-violet-200', + }, + blue: { + bg: 'from-blue-50 to-indigo-50', + border: 'border-blue-200', + text: 'text-blue-700', + hover: 'hover:border-blue-300', + gradient: 'from-blue-500 to-indigo-600', + ring: 'ring-blue-200', + }, + cyan: { + bg: 'from-cyan-50 to-sky-50', + border: 'border-cyan-200', + text: 'text-cyan-700', + hover: 'hover:border-cyan-300', + gradient: 'from-cyan-500 to-sky-600', + ring: 'ring-cyan-200', + }, +}; + +// Composant pour une carte d'emploi +interface EmploiCardProps { + emploi: Emploi; + color: string; +} + +function EmploiCard({ emploi, color }: EmploiCardProps) { + const [isExpanded, setIsExpanded] = useState(false); + const [activeTab, setActiveTab] = useState<'cddu' | 'cdi'>('cdi'); + const colors = colorClasses[color]; + + return ( +
+ + + {isExpanded && ( +
+ {/* Tabs CDI / CDDU */} +
+ + +
+ + {/* Contenu CDI */} + {activeTab === 'cdi' && ( +
+

Salaire mensuel

+

{euro(emploi.cdi)}

+

Base 35h / mois

+
+ )} + + {/* Contenu CDDU */} + {activeTab === 'cddu' && ( +
+ {/* Par semaine */} +
+

Par semaine

+
+
+

Base 35h

+

{euro(emploi.cddu.semaine35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.semaine39h)}

+
+
+
+ + {/* Par jour */} +
+

Par jour

+
+
+

Base 7h

+

{euro(emploi.cddu.jour7h)}

+
+
+

Base 8h

+

{euro(emploi.cddu.jour8h)}

+
+
+
+ + {/* Par mois */} +
+

Par mois

+
+
+

Base 35h

+

{euro(emploi.cddu.mois35h)}

+
+
+

Base 39h

+

{euro(emploi.cddu.mois39h)}

+
+
+
+
+ )} +
+ )} +
+ ); +} + +// Composant principal +interface CategorieBHorsDataProps { + activeFiliere: string; +} + +export default function CategorieBHorsData({ activeFiliere }: CategorieBHorsDataProps) { + const [searchTerm, setSearchTerm] = useState(''); + + const filteredEmplois = useMemo(() => { + // D'abord filtrer par la filière active + let result = emploisData.filter(e => e.filiere === activeFiliere); + + // Puis appliquer le filtre de recherche + if (searchTerm) { + result = result.filter(e => + e.nom.toLowerCase().includes(searchTerm.toLowerCase()) + ); + } + + return result.sort((a, b) => a.nom.localeCompare(b.nom)); + }, [activeFiliere, searchTerm]); + + // Déterminer la couleur en fonction de la filière + const getColorForFiliere = (filiereCode: string): keyof typeof colorClasses => { + const filiere = filieres.find(f => f.code === filiereCode); + return (filiere?.color as keyof typeof colorClasses) || 'blue'; + }; + const activeFiliereInfo = filieres.find(f => f.code === activeFiliere); + + return ( +
+ {/* En-tête */} +
+

+ Filière {activeFiliere} - {activeFiliereInfo?.nom || 'Filière'} +

+

+ {emploisData.length} emplois - Grille de salaires CCNPA (IDCC 2642) - Valeurs 2025 +

+
+ + {/* Recherche */} +
+ {/* Barre de recherche */} +
+ + setSearchTerm(e.target.value)} + placeholder={`Rechercher dans ${activeFiliereInfo?.nom || 'la filière'}...`} + className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-slate-200 focus:ring-2 focus:ring-emerald-500 focus:border-transparent text-sm" + /> +
+ + {/* Résultats */} +
+
+

+ {filteredEmplois.length} emploi{filteredEmplois.length > 1 ? 's' : ''} trouvé{filteredEmplois.length > 1 ? 's' : ''} +

+ {searchTerm && ( + + )} +
+ +
+ {filteredEmplois.map((emploi, index) => ( + + ))} +
+ + {filteredEmplois.length === 0 && ( +
+

Aucun emploi trouvé pour cette recherche.

+
+ )} +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-b-hors.tsx b/app/(app)/minima-ccn/ccnpa/categorie-b-hors.tsx new file mode 100644 index 0000000..672e10f --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-b-hors.tsx @@ -0,0 +1,92 @@ +"use client"; + +import React, { useState } from 'react'; +import CategorieBHorsData from './categorie-b-hors-data'; +import CategorieBHorsDataPart2 from './categorie-b-hors-data-part2'; +import CategorieBHorsDataPart3 from './categorie-b-hors-data-part3'; + +type Filiere = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I'; + +const filieres: { code: Filiere; nom: string; part: 1 | 2 | 3 }[] = [ + { code: 'A', nom: 'Contenu du programme et collaboration artistique', part: 1 }, + { code: 'B', nom: 'Costumes, décor', part: 1 }, + { code: 'C', nom: 'Image', part: 1 }, + { code: 'D', nom: 'Plateaux et tournage', part: 2 }, + { code: 'E', nom: 'Postproduction', part: 2 }, + { code: 'F', nom: 'Production', part: 2 }, + { code: 'G', nom: 'Réalisation', part: 3 }, + { code: 'H', nom: 'Son', part: 3 }, + { code: 'I', nom: 'Web', part: 3 }, +]; + +export default function CategorieBHors() { + const [activeFiliere, setActiveFiliere] = useState('A'); + const [hoveredFiliere, setHoveredFiliere] = useState(null); + + const activePart = filieres.find(f => f.code === activeFiliere)?.part || 1; + + return ( +
+ {/* En-tête de la catégorie */} +
+

+ Catégorie B - Hors fiction & flux +

+

+ Grille des salaires par filière - Programmes ni fiction, ni flux +

+ {/* Ligne d'information globale supprimée pour alléger l'en-tête */} +
+ + {/* Sélection des filières */} +
+

+ Sélectionnez une filière pour explorer les emplois : +

+ +
+ {filieres.map((filiere) => ( +
+ + + {/* Tooltip */} + {hoveredFiliere === filiere.code && ( +
+ {filiere.nom} +
+
+
+
+ )} +
+ ))} +
+ + {/* Contenu */} +
+ {activePart === 1 && } + {activePart === 2 && } + {activePart === 3 && } +
+
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/categorie-c.tsx b/app/(app)/minima-ccn/ccnpa/categorie-c.tsx new file mode 100644 index 0000000..cc91273 --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/categorie-c.tsx @@ -0,0 +1,122 @@ +"use client"; + +import React from 'react'; +import { Users, Info, Sparkles } from 'lucide-react'; + +function euro(n: number) { + return new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR' }).format(n); +} + +const HN_ROLES = [ + "Animateur d’émission", + "Artiste invité", + "Intervenant spécialisé (suivi du nom de la spécialité)", + "Invité / Intervenant", +]; + +const CACHETS = [ + { emploi: "Doublure lumière", journalier: 122.00 }, + { emploi: "Figurant - Ensemble de 30 personnes ou plus", journalier: 96.00 }, + { emploi: "Figurant - Ensemble de moins de 30 personnes", journalier: 98.00 }, +]; + +const SUPPLEMENTS = [ + { label: "Fourniture de costumes spéciaux (jaquette, costume de service, barman, steward, garçon de café, agent de police, costume d'époque ancienne, costume de soirée, habit, de maître d'hôtel, spencer, smoking, robe du soir, toutes teintes pouvant être exigées)", montant: 47.05 }, + { label: "Silhouettes (artistes de complément dont le personnage doit ressortir dans le champ de la caméra, jusqu’à 2 répliques)", montant: 42.24 }, + { label: "Essayage", montant: 15.53 }, +]; + + +const InfoRow: React.FC<{ children: React.ReactNode }> = ({ children }) => ( +
+
+
+

{children}

+
+); + +export default function CategorieC() { + return ( +
+ {/* En-tête */} +
+
+
+ +
+
+
+

Catégorie C

+ + Intervenants à l’image et artistes de complément + +
+

Salaires applicables au 1er janvier 2025 (Avenant n°20 du 29 novembre 2024, non étendu)

+
+
+
+ + {/* HN roles */} +
+

+ Emplois Hors Niveau (HN) +

+
    + {HN_ROLES.map((r, i) => ( +
  • {r} — HN
  • + ))} +
+
+ + {/* Cachets */} +
+
+
Emploi
+
Cachet minimum journalier
+
Semaine civile (5 jours)
+
+ {CACHETS.map((c, idx) => ( +
+
{c.emploi}
+
{euro(c.journalier)}
+
{euro(+(c.journalier * 4.5).toFixed(2))}
+
+ ))} +
+ + La demi-journée est rémunérée 65% du tarif journalier. La semaine civile de 5 jours est rémunérée 4,5 fois le tarif journalier. + +
+
+ + {/* Définition et suppléments */} +
+

Figurants — définitions

+
+ + (1) Ensemble de 30 personnes ou plus, portant costumes tout venant, de correction ordinaire, élégant de ville, tailleur, robe d'après-midi, de cocktail ou de dîner, teinte claire ou foncée pouvant être exigée, d'époque actuelle, avec désignation ou pas de la saison. + + + (2) Ensemble de moins de 30 personnes, mêmes conditions vestimentaires que ci-dessus. + +
+ +

Suppléments

+
    + {SUPPLEMENTS.map((s, i) => ( +
  • +
    +
    +
    + {s.label} — {euro(s.montant)} +
    +
  • + ))} +
+
+ +
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/fiction-realisateur.tsx b/app/(app)/minima-ccn/ccnpa/fiction-realisateur.tsx new file mode 100644 index 0000000..f165cda --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/fiction-realisateur.tsx @@ -0,0 +1,87 @@ +"use client"; + +import React from 'react'; +import { Clapperboard, Info } from 'lucide-react'; + +function euro(value: number): string { + return new Intl.NumberFormat('fr-FR', { + style: 'currency', + currency: 'EUR', + }).format(value); +} + +export default function FictionRealisateur() { + const lines = [ + { label: 'Journalier', duree: '9 heures', montant: 300.07 }, + { label: 'Hebdomadaire', duree: '45 heures', montant: 1500.96 }, + { label: 'Mensuel', duree: '45 heures / semaine', montant: 5250.04 }, + ]; + + const InfoRow: React.FC<{ children: React.ReactNode }> = ({ children }) => ( +
+
+
+

{children}

+
+ ); + + return ( +
+ {/* En-tête */} +
+
+
+ +
+
+
+

Fiction - Réalisateur

+ + Filière G — Hors niveau + +
+

+ Annexe A de l'accord du 15 septembre 2023 relatif aux réalisateurs — applicable au 1er novembre 2023 (non étendu) +

+
+
+
+ + {/* Tableau */} +
+
+
Salaire minimum
+
Durée du travail
+
Montant minimum garanti
+
Applicable si
+
+ {lines.map((l, idx) => ( +
+
{l.label}
+
{l.duree}
+
{euro(l.montant)}
+
+ {l.label === 'Journalier' && (Engagement < 5 jours sur une même semaine calendaire)} + {l.label === 'Hebdomadaire' && (Engagement ≥ 5 jours sur la même semaine calendaire)} + {l.label === 'Mensuel' && (Engagement ≥ 13 semaines réparties sur 4 mois consécutifs)} +
+
+ ))} +
+ + {/* Notes */} +
+ + Depuis la loi du 7 juillet 2016, les réalisateurs relèvent du statut d’artistes du spectacle (art. L7121-2 du Code du travail) et de l’annexe X du règlement général d’assurance chômage. + + + La rémunération peut être établie en cachets ou en heures. Les montants indiqués sont des minima garantis, même si la durée effective n’atteint pas 9h ou 45h. + + + L’accord du 15 septembre 2023 précise la fonction et les conditions d’engagement des réalisateurs. L’annexe A fixe les minima spécifiques aux réalisateurs de fictions audiovisuelles. Application à compter du 1er novembre 2023 (non étendu). + +
+
+ ); +} diff --git a/app/(app)/minima-ccn/ccnpa/page.tsx b/app/(app)/minima-ccn/ccnpa/page.tsx new file mode 100644 index 0000000..7b3b4f7 --- /dev/null +++ b/app/(app)/minima-ccn/ccnpa/page.tsx @@ -0,0 +1,351 @@ +"use client"; + +import React, { useEffect, useState } from 'react'; +import { usePageTitle } from '@/hooks/usePageTitle'; +import Link from 'next/link'; +import { ArrowLeft, Scale, Calculator, X } from 'lucide-react'; +import CategorieAContent from './categorie-a-data'; +import CategorieBFiction from './categorie-b-fiction'; +import CategorieBFlux from './categorie-b-flux'; +import CategorieBHors from './categorie-b-hors'; +import FictionRealisateur from './fiction-realisateur'; +import CategorieC from './categorie-c'; +import ArtistesMusiciens from './artistes-musiciens'; +import ArtistesInterpretes from './artistes-interpretes'; +import SimulateurContent from '@/components/simulateur/SimulateurContent'; +import CalculatorComponent from '@/components/Calculator'; +import { useDraggableModal } from '@/hooks/useDraggableModal'; + +export default function CCNPAPage() { + usePageTitle("Minima CCNPA"); + const [isSimulateurOpen, setIsSimulateurOpen] = useState(false); + const [isCalculatorOpen, setIsCalculatorOpen] = useState(false); + const [modalPosition, setModalPosition] = useState({ x: 0, y: 0 }); + const modalRef = React.useRef(null); + + + // Gestion du drag & drop du modal + const { onPointerDown, onPointerMove, onPointerUp } = useDraggableModal( + modalRef, + setModalPosition, + { constrainToViewport: true, disableIframeDuringDrag: true } + ); + + // Écouter les messages de l'iframe pour ouvrir la calculatrice + useEffect(() => { + const handleMessage = (event: MessageEvent) => { + if (event.data?.type === 'openCalculator') { + setIsCalculatorOpen(true); + } + }; + + window.addEventListener('message', handleMessage); + return () => window.removeEventListener('message', handleMessage); + }, []); + + useEffect(() => { + // Script de gestion des onglets + const tabs = Array.from(document.querySelectorAll('[role="tab"]')); + const panels = Array.from(document.querySelectorAll('.ccnpa-panel')); + + function activateTab(tab: Element) { + tabs.forEach((t) => { + const selected = t === tab; + t.setAttribute('aria-selected', selected ? 'true' : 'false'); + (t as HTMLElement).tabIndex = selected ? 0 : -1; + }); + + panels.forEach((p) => { + const active = p.id === tab.getAttribute('aria-controls'); + p.classList.toggle('active', active); + if (active) { + p.removeAttribute('hidden'); + } else { + p.setAttribute('hidden', ''); + } + }); + + (tab as HTMLElement).focus({ preventScroll: true }); + } + + tabs.forEach((tab) => { + tab.addEventListener('click', () => activateTab(tab)); + }); + + // Navigation clavier + document.addEventListener('keydown', (e) => { + const current = document.querySelector('[role="tab"][aria-selected="true"]'); + if (!current) return; + const i = tabs.indexOf(current); + if (e.key === 'ArrowRight') { + e.preventDefault(); + activateTab(tabs[(i + 1) % tabs.length]); + } + if (e.key === 'ArrowLeft') { + e.preventDefault(); + activateTab(tabs[(i - 1 + tabs.length) % tabs.length]); + } + if (e.key === 'Home') { + e.preventDefault(); + activateTab(tabs[0]); + } + if (e.key === 'End') { + e.preventDefault(); + activateTab(tabs[tabs.length - 1]); + } + }); + }, []); + + return ( +
+ + + {/* Navigation retour */} + + + Retour aux minima CCN + + + {/* En-tête */} +
+
+
+ +
+
+
+

CCNPA (IDCC 2642)

+ + À jour 2025 + +
+

+ Convention Collective Nationale de la Production Audiovisuelle +

+

+ Grille des minima conventionnels pour les salariés de la production audiovisuelle. +
+ Tous les montants sont exprimés bruts. +

+
+
+
+ + {/* Onglets */} +
+

+ Cliquez sur un onglet pour accéder aux minima par catégorie professionnelle. +

+ +
+ + + + + + + + +
+ + {/* Panneaux */} +
+ +
+ + + + + + + + + + + + + + +
+ + {/* Bouton flottant Simulateur */} + + + {/* Modale compacte qui sort du bouton */} + {isSimulateurOpen && ( + <> + {/* Modale compacte déplaçable */} +
+ {/* Header draggable */} +
+

+ + Simulateur de paie +

+ +
+ + {/* Content avec scroll */} +
+ +
+
+ + )} + + {/* Calculatrice globale */} + setIsCalculatorOpen(false)} + /> +
+ ); +} diff --git a/app/(app)/minima-ccn/ccnsvp/page.tsx b/app/(app)/minima-ccn/ccnsvp/page.tsx index 237ba45..4b5e115 100644 --- a/app/(app)/minima-ccn/ccnsvp/page.tsx +++ b/app/(app)/minima-ccn/ccnsvp/page.tsx @@ -13,65 +13,34 @@ import Annexe5Content from './annexe5-data'; import Annexe6Content from './annexe6-data'; import SimulateurContent from '@/components/simulateur/SimulateurContent'; import CalculatorComponent from '@/components/Calculator'; +import { useDraggableModal } from '@/hooks/useDraggableModal'; export default function CCNSVPPage() { usePageTitle("Minima CCNSVP"); const [isSimulateurOpen, setIsSimulateurOpen] = useState(false); const [isCalculatorOpen, setIsCalculatorOpen] = useState(false); const [modalPosition, setModalPosition] = useState({ x: 0, y: 0 }); - const [isDragging, setIsDragging] = useState(false); - const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 }); const modalRef = React.useRef(null); + // Etat de drag performant (hors React) + const dragState = React.useRef<{ + dragging: boolean; + startX: number; + startY: number; + origLeft: number; + origTop: number; + dx: number; + dy: number; + raf: number | null; + iframe: HTMLIFrameElement | null; + }>({ dragging: false, startX: 0, startY: 0, origLeft: 0, origTop: 0, dx: 0, dy: 0, raf: null, iframe: null }); + // Gestion du drag & drop du modal - const handleMouseDown = (e: React.MouseEvent) => { - if (!modalRef.current) return; - - // Si c'est le premier drag, calculer la position réelle du modal - if (modalPosition.x === 0 && modalPosition.y === 0) { - const rect = modalRef.current.getBoundingClientRect(); - setModalPosition({ x: rect.left, y: rect.top }); - setDragOffset({ - x: e.clientX - rect.left, - y: e.clientY - rect.top, - }); - } else { - setDragOffset({ - x: e.clientX - modalPosition.x, - y: e.clientY - modalPosition.y, - }); - } - - setIsDragging(true); - }; - - useEffect(() => { - const handleMouseMove = (e: MouseEvent) => { - if (!isDragging) return; - - const newX = e.clientX - dragOffset.x; - const newY = e.clientY - dragOffset.y; - - setModalPosition({ - x: newX, - y: newY, - }); - }; - - const handleMouseUp = () => { - setIsDragging(false); - }; - - if (isDragging) { - document.addEventListener('mousemove', handleMouseMove); - document.addEventListener('mouseup', handleMouseUp); - } - - return () => { - document.removeEventListener('mousemove', handleMouseMove); - document.removeEventListener('mouseup', handleMouseUp); - }; - }, [isDragging, dragOffset]); + const { onPointerDown, onPointerMove, onPointerUp } = useDraggableModal( + modalRef, + setModalPosition, + { constrainToViewport: true, disableIframeDuringDrag: true } + ); // Écouter les messages de l'iframe pour ouvrir la calculatrice useEffect(() => { @@ -594,31 +563,23 @@ export default function CCNSVPPage() { {/* Modale compacte qui sort du bouton */} {isSimulateurOpen && ( <> - {/* Overlay transparent pour fermer au clic */} -
{ - setIsSimulateurOpen(false); - setModalPosition({ x: 0, y: 0 }); // Réinitialiser la position - }} - /> - {/* Modale compacte déplaçable */}
e.stopPropagation()} > {/* Header draggable */}

@@ -631,7 +592,7 @@ export default function CCNSVPPage() { }} className="p-1.5 rounded-lg hover:bg-slate-100 transition-colors" aria-label="Fermer le simulateur" - onMouseDown={(e) => e.stopPropagation()} + onPointerDown={(e) => e.stopPropagation()} > diff --git a/app/(app)/minima-ccn/page.tsx b/app/(app)/minima-ccn/page.tsx index fc1ef42..e3446bc 100644 --- a/app/(app)/minima-ccn/page.tsx +++ b/app/(app)/minima-ccn/page.tsx @@ -91,33 +91,37 @@ export default function MinimaCCNPage() {

- {/* CCNPA - Bientôt disponible */} -
+ {/* CCNPA */} + {/* Badge */}
- - Bientôt disponible + + À jour 2025
{/* Icône */} -
-
); diff --git a/components/Calculator.tsx b/components/Calculator.tsx index 66620b8..6800d4f 100644 --- a/components/Calculator.tsx +++ b/components/Calculator.tsx @@ -191,10 +191,11 @@ export default function Calculator({ isOpen, onClose, onUseResult }: CalculatorP const calculatorRef = React.useRef(null); useEffect(() => { - if (isOpen && calculatorRef.current) { + // Focus une fois que le composant est monté (position non nulle) + if (isOpen && position !== null && calculatorRef.current) { calculatorRef.current.focus(); } - }, [isOpen]); + }, [isOpen, position]); if (!isOpen || position === null) return null; @@ -228,7 +229,13 @@ export default function Calculator({ isOpen, onClose, onUseResult }: CalculatorP {/* Body */}
{/* Display */} -
+
+ {/* Opérateur courant (badge) */} + {operator && ( + + {operator === '/' ? '÷' : operator === '*' ? '×' : operator === '-' ? '−' : operator} + + )} {display || '0'}
diff --git a/components/simulateur/SimulateurContent.tsx b/components/simulateur/SimulateurContent.tsx index f3bf1d0..8a0907a 100644 --- a/components/simulateur/SimulateurContent.tsx +++ b/components/simulateur/SimulateurContent.tsx @@ -81,6 +81,9 @@ export default function SimulateurContent({ hideInfoPanel = false }: SimulateurC border: none; background: white; } + .simulateur-iframe-sidebar.compact { + height: 420px; /* Taille plus compacte pour le modal */ + } `} {/* Layout avec simulateur et info */} @@ -89,8 +92,8 @@ export default function SimulateurContent({ hideInfoPanel = false }: SimulateurC {/* Simulateur principal */}
+ + + + + diff --git a/public/simulateur-embed.html b/public/simulateur-embed.html index f229283..ed84158 100644 --- a/public/simulateur-embed.html +++ b/public/simulateur-embed.html @@ -9,6 +9,129 @@ + @@ -210,10 +333,64 @@