SITE ENTIÈREMENT FICTIF — USAGE RÔLEPLAY UNIQUEMENT
Ce site est une création fictive à des fins récréatives dans le cadre d'un serveur de rôleplay. Il ne représente AUCUNE institution gouvernementale réelle. « San Andreas » est un État fictif.
SITE FICTIF — ROLEPLAY UNIQUEMENT — Contenu fictif à des fins récréatives
San Andreas — État de San Andreas
Justice
DOJ

Espace Juge Fédéral

Cour de Justice Fédérale — District de San Andreas

Code d'Accès Confidentiel
Code incorrect. Accès refusé.

Registre de Suivi — Documents Émis par le Juge

0
Aucun document émis pour l'instant.
Demandes de Mandats — Bureau du Procureur
0
Chargement des demandes...
Émission d'un Document Judiciaire
Signature Manuscrite du Juge
Signature manuscrite — Souris ou doigt
Examen de la Demande de Mandat
Décision & Signature du Juge
Signature manuscrite — Souris ou doigt
'; var a = document.createElement('a'); a.href = URL.createObjectURL(new Blob([html],{type:'text/html;charset=utf-8'})); a.download = 'mandat_officiel_' + (m.id||Date.now()) + '.html'; a.click(); } function jmDlPNG() { var el = document.getElementById('jmDocPaper') || document.getElementById('jmDocView'); html2canvas(el,{scale:2,backgroundColor:'#fff',useCORS:true,logging:false}).then(function(canvas){ var a=document.createElement('a'); a.href=canvas.toDataURL('image/png'); a.download='mandat_officiel_'+(jmApprovedData?jmApprovedData.id:Date.now())+'.png'; a.click(); }); } document.addEventListener('keydown', function(e){ if(e.key==='Escape'){ document.getElementById('jmOverlay').classList.remove('open'); document.getElementById('jdOverlay').classList.remove('open'); } }); // Auto-load when menu opens (if logged in) setTimeout(function(){ if (document.getElementById('mqList')) loadMandatQueue(); }, 500); // ════════════════════════════════════════════════════ // ═══ MANDATS DIRECTS JUGE ═══════════════════════════ // ════════════════════════════════════════════════════ // ════════════════════════════════════════════ // INFRACTIONS — Code Pénal SA (89 infractions) // ════════════════════════════════════════════ var INFRACTIONS_SA = [ {cat:1,art:'—', name:'Appel inutile aux services publics'}, {cat:1,art:'Art. 1-2', name:'Conduite à contre sens'}, {cat:1,art:'Art. 1-2', name:'Conduite sans casque'}, {cat:1,art:'Art. 1-2', name:'Excès de vitesse > 30 KM'}, {cat:1,art:'Art. 1-2', name:'Excès de vitesse < 30 KM'}, {cat:1,art:'Art. 1-2', name:'Stationnement gênant/interdit'}, {cat:1,art:'Art. 1-2', name:'Véhicule non conforme / en mauvais état'}, {cat:1,art:'Art. 2-2.7',name:'Atteinte à la pudeur'}, {cat:1,art:'Art. 2-2.5',name:'Ivresse sur la voie publique'}, {cat:1,art:'Art. 1-2', name:'Utilisation abusive de l\'avertisseur sonore'}, {cat:1,art:'Art. 5-1.1',name:'Exhibition d\'armes à feu (holster)'}, {cat:2,art:'Art. 3-1.1', name:'Agression'}, {cat:2,art:'Art. 1-2', name:'Conduite Dangereuse'}, {cat:2,art:'Art. 1-2', name:'Conduite sans permis'}, {cat:2,art:'Art. 4-1.3', name:'Braquage de superette'}, {cat:2,art:'Art. 4-1.3', name:'Braquage d\'ATM'}, {cat:2,art:'Art. 4-1.4', name:'Cambriolage'}, {cat:2,art:'Art. 4-1.1', name:'Carjacking'}, {cat:2,art:'Art. 3-4.3', name:'Diffamation'}, {cat:2,art:'Art. 5-1.6', name:'Détention d\'armes légères sans PPA'}, {cat:2,art:'Art. 2-1.1', name:'Refus d\'obtempérer'}, {cat:2,art:'Art. 2-1.5', name:'Délit de fuite'}, {cat:2,art:'Art. 4-2.4', name:'Dégradation de bien public'}, {cat:2,art:'Art. 4-2.4', name:'Dégradation de bien privé'}, {cat:2,art:'Art. 5-1.6', name:'Détention d\'armes blanche'}, {cat:2,art:'Art. 5-1.1', name:'Exhibition d\'armes blanche'}, {cat:2,art:'Art. 2-2.7', name:'Exhibition sexuelle à la vue d\'autrui'}, {cat:2,art:'Art. 3-2.1', name:'Non-assistance à personne en danger'}, {cat:2,art:'Art. 5-2.3', name:'Go-fast'}, {cat:2,art:'Art. 4-2.5', name:'Possession d\'argent non déclaré'}, {cat:2,art:'Art. 3-4.5', name:'Menaces'}, {cat:2,art:'Art. 3-4.5', name:'Menaces sur fonctionnaire d\'État'}, {cat:2,art:'Art. 3-2.5', name:'Mise en danger de la vie d\'autrui'}, {cat:2,art:'Art. 2-1.9', name:'Non-présentation de documents officiels'}, {cat:2,art:'Art. 2-1.12',name:'Non-présentation à une convocation de police'}, {cat:2,art:'Art. 2-2.6', name:'Intrusion dans une zone à accès restreint'}, {cat:2,art:'Art. 5-2.2', name:'Possession de Weed'}, {cat:2,art:'Art. 5-2.2', name:'Possession d\'Opium'}, {cat:2,art:'Art. 5-2.2', name:'Possession de Méthamphétamine'}, {cat:2,art:'Art. 5-2.2', name:'Possession de Cocaïne'}, {cat:2,art:'Art. 5-2.2', name:'Possession d\'autrès drogues'}, {cat:2,art:'Art. 5-2.3', name:'Transport de drogue'}, {cat:2,art:'Art. 5-2.1', name:'Vente de drogue'}, {cat:2,art:'Art. 2-2.6', name:'Intrusion dans un bâtiment d\'État'}, {cat:2,art:'Art. 2-2.4', name:'Violation de domicile'}, {cat:2,art:'Art. 4-1.1', name:'Vol de véhicule'}, {cat:2,art:'Art. 4-1.1', name:'Vol de véhicule de l\'État'}, {cat:2,art:'Art. 4-1.1', name:'Vol de biens'}, {cat:2,art:'Art. 4-2.4', name:'Cruauté envers un animal'}, {cat:2,art:'Art. 2-1.2', name:'Trouble à l\'ordre public'}, {cat:2,art:'Art. 2-1.7', name:'Usurpation d\'identité'}, {cat:2,art:'Art. 2-1.8', name:'Usurpation de fonction'}, {cat:2,art:'Art. 2-1B.2',name:'Partage de contenu illicite'}, {cat:2,art:'Art. 2-2.8', name:'Manifestation illégale'}, {cat:2,art:'Art. 2-2.2', name:'Dissimulation du visage'}, {cat:3,art:'Art. 5-1.4', name:'Achat/vente d\'arme'}, {cat:3,art:'Art. 3-1.2', name:'Agression à l\'arme blanche'}, {cat:3,art:'Art. 3-1.3', name:'Agression sur agent de l\'État'}, {cat:3,art:'Art. 2-1.16', name:'Destruction ou dissimulation de preuve'}, {cat:3,art:'Art. 5-1.6', name:'Détention d\'armes lourdes'}, {cat:3,art:'Art. 5-1.1', name:'Exhibition d\'armes lourdes'}, {cat:3,art:'Art. 5-1.2', name:'Détention d\'explosifs / outils incendiaires'}, {cat:3,art:'Art. 6-2', name:'Blanchiment d\'argent'}, {cat:3,art:'Art. 4-1.3', name:'Braquage à main armé sur citoyen'}, {cat:3,art:'Art. 4-1.3', name:'Braquage à main armé sur fonctionnaire d\'État'}, {cat:3,art:'Art. 4-1.3', name:'Braquage de la Banque Fleeca'}, {cat:3,art:'Art. 4-1.3', name:'Braquage de Bijouterie'}, {cat:3,art:'Art. 3-1.6', name:'Prise d\'Otage sur civil'}, {cat:3,art:'Art. 4-1.3', name:'Braquage de convoi'}, {cat:3,art:'Art. 2-1.11', name:'Entrave à une opération / enquête de police'}, {cat:3,art:'Art. 2-1.12', name:'Non présentation injustifiée à convocation judiciaire'}, {cat:3,art:'Art. 2-1.10', name:'Obstruction à la justice'}, {cat:3,art:'Art. 2-1.14', name:'Parjure'}, {cat:3,art:'Art. 2-2.1.1',name:'Outrage à magistrat'}, {cat:3,art:'Art. 2-1.3', name:'Tentative de Corruption'}, {cat:3,art:'Art. 5-1.5', name:'Utilisation d\'une arme dans un cadre non défensif'}, {cat:3,art:'Art. 5-1.5', name:'Utilisation d\'une arme à l\'encontre des fonctionnaires d\'État'}, {cat:3,art:'Art. 3-2.3', name:'Homicide Involontaire'}, {cat:4,art:'Art. 6-1', name:'Association de malfaiteurs'}, {cat:4,art:'Art. 6-3', name:'Atteinte à la sécurité intérieure'}, {cat:4,art:'Art. 4-1.3', name:'Braquage de la Pacific Standard'}, {cat:4,art:'Art. 4-2.3', name:'Détournement de fonds'}, {cat:4,art:'Art. 6-7', name:'Organisation d\'évasion / Évasion'}, {cat:4,art:'Art. 3-2.2', name:'Homicide Volontaire'}, {cat:4,art:'Art. 3-1.5', name:'Prise d\'Otage sur fonctionnaire d\'État'}, {cat:4,art:'Art. 4-2.3', name:'Fraude fiscale'}, {cat:4,art:'Art. 6-4', name:'Terrorisme'}, {cat:4,art:'Art. 5-1.4', name:'Trafic d\'armes'}, {cat:4,art:'Art. 5-2.3', name:'Trafic de drogue'} ]; var infPickerState = {}; var INF_CAT_LABEL = {1:'Art. 1 — Contraventions',2:'Art. 2 — Délits Mineurs',3:'Art. 3 — Délits Majeurs',4:'Art. 4 — Crimes'}; var INF_CAT_COLOR = {1:'#6b7280',2:'#78350f',3:'#7c2d12',4:'#7f1d1d'}; var INF_CAT_BG = {1:'#e5e7eb',2:'#fefce8',3:'#fff7ed',4:'#fff1f2'}; function infPickerInit(cid) { infPickerState[cid] = {selected:[]}; infPickerRenderList(cid,''); } function infPickerOpen(cid) { var l=document.getElementById('ip_list_'+cid); if(l) l.classList.add('open'); } function infPickerFilter(cid) { var s=document.getElementById('ip_search_'+cid); infPickerRenderList(cid, s?s.value:''); infPickerOpen(cid); } function infPickerRenderList(cid,q) { var state=infPickerState[cid]; var listEl=document.getElementById('ip_list_'+cid); if(!listEl||!state) return; var ql=(q||'').toLowerCase(); var html=''; var lastCat=0; INFRACTIONS_SA.forEach(function(inf,idx){ if(ql && inf.name.toLowerCase().indexOf(ql)===-1 && inf.art.toLowerCase().indexOf(ql)===-1) return; if(inf.cat!==lastCat){ html+='
'+INF_CAT_LABEL[inf.cat]+'
'; lastCat=inf.cat; } var isSel=false; for(var i=0;i' +''+inf.art+'' +''+inf.name+''; }); if(!html) html='
Aucune infraction trouvée
'; listEl.innerHTML=html; } function infPickerToggle(cid,idx) { var state=infPickerState[cid]; if(!state) return; var inf=INFRACTIONS_SA[idx]; var found=-1; for(var i=0;i=0){state.selected.splice(found,1);} else{state.selected.push({idx:idx,art:inf.art,name:inf.name,cat:inf.cat});} var s=document.getElementById('ip_search_'+cid); infPickerRenderList(cid,s?s.value:''); infPickerRenderTags(cid); infPickerSyncHidden(cid); } function infPickerRemove(cid,idx) { var state=infPickerState[cid]; if(!state) return; var newSel=[]; for(var i=0;i '+s.name +' '; }); tagsEl.innerHTML=html; } function infPickerSyncHidden(cid) { var state=infPickerState[cid]; if(!state) return; var val=state.selected.map(function(s){return s.art+' — '+s.name;}).join('\n'); var hiddenId; if(cid.indexOf('ipc_jdf_')===0){hiddenId='jdf_'+cid.substring(8);} else if(cid.indexOf('ipc_sf_')===0){hiddenId='sf_'+cid.substring(7);} else if(cid==='ipc_ginf'){hiddenId='g_infractions';} else{hiddenId=cid+'_val';} var hidden=document.getElementById(hiddenId); if(hidden) hidden.value=val; } document.addEventListener('click',function(e){ Object.keys(infPickerState).forEach(function(cid){ var wrap=document.getElementById(cid); var list=document.getElementById('ip_list_'+cid); if(list&&wrap&&!wrap.contains(e.target)) list.classList.remove('open'); }); }); var JD_TYPES = { depot:{ name:'Mandat de Dépôt', code:'MAN-DEP', law:'Art. 14-1 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'prévenu',l:'Nom du prévenu',req:true}, {k:'dob',l:'Date de naissance'}, {k:'motifs',l:'Motifs de la détention',type:'textarea',req:true}, {k:'infractions',l:'Infractions retenues',type:'infraction-picker'}, {k:'durée',l:'Durée maximale de détention'}, {k:'établissement',l:'Établissement pénitentiaire'} ] }, liberation:{ name:'Ordonnance de Mise en Liberté', code:'ORD-LIB', law:'Art. 9-3 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'prévenu',l:'Nom du prévenu',req:true}, {k:'motifs',l:'Motifs de la mise en liberté',type:'textarea',req:true}, {k:'conditions',l:'Conditions éventuelles (contrôle judiciaire…)'}, {k:'date_effet',l:'Date d\'effet immédiat',type:'date'} ] }, renvoi:{ name:'Ordonnance de Renvoi en Jugement', code:'ORD-REN', law:'Art. 6-1 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'prévenu',l:'Nom du prévenu',req:true}, {k:'infractions',l:'Infractions renvoyées',type:'infraction-picker',req:true}, {k:'juridiction',l:'Juridiction de jugement',req:true}, {k:'date_audience',l:'Date d\'audience proposée',type:'date'}, {k:'observations',l:'Observations du juge',type:'textarea'} ] }, nonlieu:{ name:'Ordonnance de Non-Lieu', code:'ORD-NLI', law:'Art. 6-2 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'prévenu',l:'Nom du prévenu / mis en cause',req:true}, {k:'motifs',l:'Motifs du non-lieu',type:'textarea',req:true}, {k:'charges',l:'Charges examinées',type:'infraction-picker'}, {k:'liberation',l:'Libération immédiate ?',type:'select',opts:['Oui — libération immédiate','Non — prévenu en liberté']} ] }, comparution:{ name:'Ordonnance de Comparution', code:'ORD-COM', law:'Art. 5-1 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'prévenu',l:'Personne convoquée',req:true}, {k:'qualité',l:'Qualité (prévenu / témoin / expert…)',req:true}, {k:'date_audience',l:'Date de comparution',type:'date',req:true}, {k:'heure',l:'Heure'}, {k:'lieu',l:'Lieu de comparution'}, {k:'objet',l:'Objet de la convocation',type:'textarea'} ] }, huisclos:{ name:'Ordonnance de Huis Clos', code:'ORD-HCL', law:'Art. 11-1 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'date_audience',l:'Date de l\'audience',type:'date',req:true}, {k:'motifs',l:'Motifs du huis clos',type:'textarea',req:true}, {k:'personnes_autorisées',l:'Personnes autorisées à rester'}, {k:'durée_hc',l:'Durée (toute l\'audience / partielle)'} ] }, expertise:{ name:'Ordonnance d\'Expertise Judiciaire', code:'ORD-EXP', law:'Art. 3-7 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'expert',l:'Nom de l\'expert désigné',req:true}, {k:'domaine',l:'Domaine d\'expertise',req:true}, {k:'mission',l:'Mission confiée à l\'expert',type:'textarea',req:true}, {k:'delai',l:'Délai de remise du rapport'}, {k:'parties',l:'Parties à informér'} ] }, recusation:{ name:'Ordonnance de Récusation', code:'ORD-REC', law:'Art. 4-5 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'personne_recusee',l:'Personne récusée',req:true}, {k:'qualité_rec',l:'Qualité (juge / officier / expert…)',req:true}, {k:'motifs',l:'Motifs de la récusation',type:'textarea',req:true}, {k:'remplacement',l:'Remplacement désigné'} ] }, condamnation:{ name:'Jugement — Condamnation', code:'JUG-CON', law:'Art. 11 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'prévenu',l:'Nom du condamné',req:true}, {k:'infractions',l:'Infractions retenues',type:'infraction-picker',req:true}, {k:'peine',l:'Peine prononcée',type:'textarea',req:true}, {k:'amende',l:'Amende (si applicable)'}, {k:'sursis',l:'Sursis (oui / non / partiel)'}, {k:'motifs',l:'Motivation du jugement',type:'textarea'}, {k:'appel',l:'Délai d\'appel',type:'select',opts:['10 jours à compter du jugement','Renonciation au délai d\'appel']} ] }, acquittement:{ name:'Jugement — Acquittement', code:'JUG-ACQ', law:'Art. 11-2 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'prévenu',l:'Nom du prévenu acquitté',req:true}, {k:'infractions',l:'Charges examinées',type:'infraction-picker',req:true}, {k:'motifs',l:'Motivation de l\'acquittement',type:'textarea',req:true}, {k:'liberation',l:'Mise en liberté immédiate',type:'select',opts:['Oui — libération immédiate','Non — déjà libre']}, {k:'dommages',l:'Dommages et intérêts éventuels'} ] }, sursis:{ name:'Ordonnance de Sursis', code:'ORD-SUR', law:'Art. 12-1 CPP SA', fields:[ {k:'affaire',l:'N° Affaire / Réf.',req:true}, {k:'prévenu',l:'Nom du bénéficiaire',req:true}, {k:'peine_initiale',l:'Peine initiale',req:true}, {k:'type_sursis',l:'Type de sursis',type:'select',opts:['Sursis simple','Sursis avec mise à l\'épreuve','Sursis partiel']}, {k:'durée_epreuve',l:'Durée de la période d\'épreuve'}, {k:'conditions',l:'Conditions imposées',type:'textarea'}, {k:'motifs',l:'Motivation',type:'textarea'} ] } }; var jdCurrentType = null; var jdSignedDoc = null; var jdSigCtx = null; var jdDrawing = false; function openJugeDirectForm(typeId) { var t = JD_TYPES[typeId]; if (!t) return; jdCurrentType = typeId; jdSignedDoc = null; document.getElementById('jdModalTitle').textContent = t.name + ' — Émission Directe'; document.getElementById('jdJugeName').value = ''; document.getElementById('jdFeedback').style.display = 'none'; document.getElementById('jdDocPreview').style.display = 'none'; document.getElementById('jdDlBar').style.display = 'none'; var form = '
' + t.code + '  ·  ' + t.law + '
'; var jdPickerIds = []; t.fields.forEach(function(f) { form += '
'; form += ''; if (f.type === 'infraction-picker') { var pid = 'ipc_jdf_' + f.k; jdPickerIds.push(pid); form += '
' + '
' + '' + '' + '
' + '
' + '
Cliquez pour sélectionner des infractions
' + '
' + ''; } else if (f.type === 'textarea') { form += ''; } else if (f.type === 'select') { form += ''; } else if (f.type === 'date') { form += ''; } else { form += ''; } form += '
'; }); document.getElementById('jdFormArea').innerHTML = form; jdPickerIds.forEach(function(pid){ infPickerInit(pid); }); var c = document.getElementById('jdSigCanvas'); c._init = false; c.getContext('2d').clearRect(0,0,c.width,c.height); document.getElementById('jdOverlay').classList.add('open'); setTimeout(initJdSig, 80); } function closeJugeDirectModal() { document.getElementById('jdOverlay').classList.remove('open'); jdCurrentType = null; jdSignedDoc = null; } function initJdSig() { var canvas = document.getElementById('jdSigCanvas'); if (!canvas || canvas._init) return; canvas._init = true; var ctx = canvas.getContext('2d'); ctx.strokeStyle = '#0d1f3c'; ctx.lineWidth = 1.8; ctx.lineCap = 'round'; ctx.lineJoin = 'round'; var drawing = false; function pos(e) { var r = canvas.getBoundingClientRect(); var src = e.touches ? e.touches[0] : e; return { x: (src.clientX - r.left) * (canvas.width / r.width), y: (src.clientY - r.top) * (canvas.height / r.height) }; } function start(e) { e.preventDefault(); drawing = true; var p = pos(e); ctx.beginPath(); ctx.moveTo(p.x, p.y); } function move(e) { e.preventDefault(); if (!drawing) return; var p = pos(e); ctx.lineTo(p.x, p.y); ctx.stroke(); } function stop() { drawing = false; } canvas.addEventListener('mousedown', start); canvas.addEventListener('mousemove', move); canvas.addEventListener('mouseup', stop); canvas.addEventListener('mouseleave', stop); canvas.addEventListener('touchstart', start, {passive:false}); canvas.addEventListener('touchmove', move, {passive:false}); canvas.addEventListener('touchend', stop); document.getElementById('jdSigClear').onclick = function() { ctx.clearRect(0,0,canvas.width,canvas.height); }; } function getJdSig() { var c = document.getElementById('jdSigCanvas'); if (!c) return ''; var px = c.getContext('2d').getImageData(0,0,c.width,c.height).data; for (var i=3;i0) return c.toDataURL('image/png'); } return ''; } function signJugeDoc() { var t = JD_TYPES[jdCurrentType]; if (!t) return; var jugeName = (document.getElementById('jdJugeName').value||'').trim(); if (!jugeName) { alert('Veuillez saisir votre nom de Juge.'); return; } var missing = []; t.fields.forEach(function(f) { if (f.req) { var el = document.getElementById('jdf_' + f.k); if (el && !el.value.trim()) missing.push(f.l); } }); if (missing.length) { alert('Champs obligatoires manquants :\n- ' + missing.join('\n- ')); return; } var sig = getJdSig(); if (!sig && !confirm('Aucune signature dessinée. Émettre quand même ?')) return; var data = { type: jdCurrentType, typeName: t.name, code: t.code, law: t.law }; t.fields.forEach(function(f) { var el = document.getElementById('jdf_' + f.k); data[f.k] = el ? el.value.trim() : ''; }); data.juge_nom = jugeName; data.signature = sig; data.date = new Date().toISOString(); data.ref = t.code + '-' + Date.now().toString(36).toUpperCase(); var docHtml = buildJugeDirectDoc(data); data.doc_html = docHtml; saveJudgeRegistry(data); jdSignedDoc = data; var fb = document.getElementById('jdFeedback'); fb.style.display = 'block'; fb.style.background = '#dcfce7'; fb.style.color = '#166534'; fb.innerHTML = 'Document émis et enregistré au registre. Réf : ' + data.ref + ''; document.getElementById('jdDocPreview').style.display = 'block'; document.getElementById('jdDocPreview').innerHTML = docHtml; document.getElementById('jdDlBar').style.display = 'flex'; loadJudgeRegistry(); } function buildJugeDirectDoc(d) { var t = JD_TYPES[d.type] || {}; var now = new Date(d.date); var dateStr = now.toLocaleDateString('fr-FR',{day:'2-digit',month:'long',year:'numeric'}) + ' à ' + now.toLocaleTimeString('fr-FR',{hour:'2-digit',minute:'2-digit'}); var sigImg = d.signature ? '' : 'Signature non disponible'; var isVerdict = (d.type === 'condamnation' || d.type === 'acquittement'); var verdictColor = d.type === 'condamnation' ? '#8b0000' : '#166534'; var verdictText = d.type === 'condamnation' ? 'CONDAMNÉ' : d.type === 'acquittement' ? 'ACQUITTÉ' : ''; var rows = ''; t.fields && t.fields.forEach(function(f) { var v = d[f.k]; if (v) rows += '
' + f.l + '' + v + '
'; }); var preamble = 'ATTENDU QUE les circonstances de la cause et les éléments du dossier soumis à l\'examen de la Cour établissent la nécessité d\'une décision judiciaire immédiate ;\n\nVU les dispositions de ' + d.law + ' ;\nVU l\'Article 1er de la Constitution de l\'État de San Andreas garantissant le respect des droits fondamentaux et l\'autorité de la justice fédérale ;\n\nPAR CES MOTIFS, la Cour de Justice Fédérale du District de San Andreas,'; return '
' + '
' + '' + '
État de San Andreas — Cour de Justice Fédérale
' + '
' + d.typeName + '
' + '
' + d.law + '  ·  ' + d.code + '
' + '
' + '
' + 'Réf. : ' + d.ref + '' + 'Émis le : ' + dateStr + '' + 'ÉMISSION DIRECTE — JUGE
' + '
Document judiciaire émis directement par le Juge — Sans intervention du Parquet — ' + d.law + '
' + (isVerdict ? '
Décision de la Cour
' + verdictText + '
' : '') + '
Détails de l\'Acte Judiciaire
' + rows + '
' + '
' + preamble + '
' + '
' + '
PAR CES MOTIFS
' + 'La Cour, statuant publiquement et contradictoirement, ORDONNE et DÉCIDE conformément aux dispositions visées ci-dessus, et DIT que le présent acte judiciaire prend effet immédiatement à compter de sa signature par le Juge compétent.
' + '
' + '
Le Greffier de la Cour
Signature & Cachet du Greffe
' + '
Le Juge — Cour Fédérale de San Andreas
' + sigImg + '
' + d.juge_nom + '
Juge Fédéral — District de San Andreas
' + '
' + '
' + 'DOCUMENT FICTIF — ROLEPLAY UNIQUEMENT — San Andreas DOJ' + d.ref + '
' + '
'; } // ─── REGISTRE localStorage ─────────────────────── var REGISTRY_KEY = 'judgeRegistry_SA'; function saveJudgeRegistry(entry) { var list = getJudgeRegistryList(); list.push(entry); localStorage.setItem(REGISTRY_KEY, JSON.stringify(list)); } function getJudgeRegistryList() { try { return JSON.parse(localStorage.getItem(REGISTRY_KEY) || '[]'); } catch(e) { return []; } } function clearJudgeRegistry() { if (!confirm('Vider tout le registre ? Cette action est irréversible.')) return; localStorage.removeItem(REGISTRY_KEY); loadJudgeRegistry(); } function loadJudgeRegistry() { var list = getJudgeRegistryList(); var cntEl = document.getElementById('jreg-count'); if (cntEl) cntEl.textContent = list.length; var el = document.getElementById('jregBody'); if (!el) return; if (list.length === 0) { el.innerHTML = '
Aucun document émis pour l\'instant.
'; return; } var html = '' + '' + ''; list.slice().reverse().forEach(function(e, idx) { var realIdx = list.length - 1 - idx; var dateStr = ''; try { dateStr = new Date(e.date).toLocaleDateString('fr-FR',{day:'2-digit',month:'short',year:'numeric',hour:'2-digit',minute:'2-digit'}); } catch(x){} var typeColors = { condamnation:'background:#fee2e2;color:#991b1b', acquittement:'background:#dcfce7;color:#166534', depot:'background:#fef9c3;color:#78350f', liberation:'background:#dbeafe;color:#1e40af' }; var badgeStyle = typeColors[e.type] || 'background:#f3f4f6;color:#374151'; html += '' + '' + '' + '' + '' + '' + '' + ''; }); html += '
RéférenceTypeAffaire / PrévenuDate d\'émissionJugeAction
' + (e.ref||'—') + '' + (e.typeName||'—') + '' + (e.affaire||'—') + (e.prévenu ? '
' + e.prévenu + '' : '') + '
' + dateStr + '' + (e.juge_nom||'—') + '' + '
'; el.innerHTML = html; } var jdViewStore = {}; function viewJudgeDoc(idx) { var list = getJudgeRegistryList(); var entry = list[idx]; if (!entry) return; jdSignedDoc = entry; var win = window.open('','_blank','width=900,height=700,scrollbars=yes'); if (!win) { alert('Autorisez les popups pour afficher le document.'); return; } win.document.write('' + entry.typeName + ' — ' + entry.ref + '' + '' + '' + (entry.doc_html || buildJugeDirectDoc(entry)) + ' '); win.document.close(); } function deleteJudgeDoc(idx) { if (!confirm('Supprimer ce document du registre ?')) return; var list = getJudgeRegistryList(); list.splice(idx, 1); localStorage.setItem(REGISTRY_KEY, JSON.stringify(list)); loadJudgeRegistry(); } function jdDlHTML() { if (!jdSignedDoc) return; var html = '' + jdSignedDoc.typeName + '' + '' + '' + (jdSignedDoc.doc_html || buildJugeDirectDoc(jdSignedDoc)) + ' '; var a = document.createElement('a'); a.href = URL.createObjectURL(new Blob([html],{type:'text/html;charset=utf-8'})); a.download = jdSignedDoc.ref + '.html'; a.click(); } function jdDlPNG() { var el = document.getElementById('jdDocPaper') || document.getElementById('jdDocPreview'); if (!el || typeof html2canvas === 'undefined') { alert('html2canvas non disponible.'); return; } html2canvas(el,{scale:2,backgroundColor:'#fff',useCORS:true,logging:false}).then(function(canvas){ var a = document.createElement('a'); a.href = canvas.toDataURL('image/png'); a.download = (jdSignedDoc ? jdSignedDoc.ref : 'document_juge') + '.png'; a.click(); }); }