Compare commits
32 Commits
wave-205-a
...
wave-212-v
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f773bf8116 | ||
|
|
b3889d7f28 | ||
|
|
a7df5c635d | ||
|
|
81a027dd87 | ||
|
|
967a0ccea9 | ||
|
|
12acb77dc4 | ||
|
|
2c6887fbac | ||
|
|
10fcacfae9 | ||
|
|
f0093d794c | ||
|
|
7d7c76f4e3 | ||
|
|
0340b97465 | ||
|
|
284dcaaf12 | ||
|
|
48d793ea5f | ||
|
|
3f8cdb2ef7 | ||
|
|
5060064915 | ||
|
|
fea12bfe2d | ||
|
|
a3812924ac | ||
|
|
511b5dcb6f | ||
|
|
a0bc39a72a | ||
|
|
e9e7432e0f | ||
|
|
ac3e7ea87a | ||
|
|
b321756af5 | ||
|
|
dc3941434d | ||
|
|
f20173cdb9 | ||
|
|
61d9db4939 | ||
|
|
c964348b63 | ||
|
|
2a09be9693 | ||
|
|
d220b73d79 | ||
|
|
27cbf333a0 | ||
|
|
1db9357827 | ||
|
|
9b19a9c38e | ||
|
|
f3fd9ba47c |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Disk_Monitor",
|
||||
"ts": "2026-04-21T15:00:02+02:00",
|
||||
"ts": "2026-04-21T15:30:02+02:00",
|
||||
"disk_pct": 82,
|
||||
"disk_free_gb": 27,
|
||||
"growth_per_day_gb": 1.5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Risk_Escalation",
|
||||
"ts": "2026-04-21T15:00:03+02:00",
|
||||
"ts": "2026-04-21T15:45:03+02:00",
|
||||
"dg_alerts_active": 7,
|
||||
"wevia_life_stats_preview": "{
|
||||
"ok": true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V45_Leads_Sync",
|
||||
"ts": "2026-04-21T15:00:03+02:00",
|
||||
"ts": "2026-04-21T15:50:02+02:00",
|
||||
"paperclip_total": 48,
|
||||
"active_customer": 4,
|
||||
"warm_prospect": 5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V54_Risk_Monitor_Live",
|
||||
"ts": "2026-04-21T15:00:03+02:00",
|
||||
"ts": "2026-04-21T15:30:03+02:00",
|
||||
"critical_risks": {
|
||||
"RW01_pipeline_vide": {
|
||||
"pipeline_keur": 0,
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"RW12_burnout": {
|
||||
"agents_cron_active": 15,
|
||||
"load_5min": "3.88",
|
||||
"load_5min": "3.41",
|
||||
"automation_coverage_pct": 70,
|
||||
"residual_risk_pct": 60,
|
||||
"trend": "V52_goldratt_options_active"
|
||||
|
||||
14
api/ambre-adg-diag.php
Normal file
14
api/ambre-adg-diag.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$f = "/var/www/html/api/ambre-early-doc-gen.php";
|
||||
$out = ["size"=>@filesize($f)];
|
||||
$lint = @shell_exec("php8.4 -l $f 2>&1");
|
||||
$out["lint"] = trim($lint);
|
||||
// Try to eval the file with mock $_mam set
|
||||
$_mam = "Genere un PDF sur: test";
|
||||
ob_start();
|
||||
$rr = @include $f;
|
||||
$out["include_ok"] = $rr !== false;
|
||||
$out["stray_output"] = ob_get_clean();
|
||||
// If exited, ob would have file_gen response. Otherwise, fall through
|
||||
echo json_encode($out);
|
||||
88
api/ambre-doc-gen.php
Normal file
88
api/ambre-doc-gen.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-doc-gen.php · AMBRE · real file generation via pandoc
|
||||
* Usage: POST {type: pdf|docx|pptx|html, title: "...", content: "markdown..."}
|
||||
* Output: {ok:true, url:"/generated/xxx.ext", size:B, type:..., ts:...}
|
||||
* Doctrine: zero fake (réelle génération), zero écrasement (unique timestamp per file)
|
||||
*/
|
||||
header("Content-Type: application/json");
|
||||
|
||||
// === Input parsing ===
|
||||
$raw = file_get_contents("php://input");
|
||||
$in = json_decode($raw, true);
|
||||
if (!$in && !empty($_POST)) $in = $_POST;
|
||||
|
||||
$type = strtolower(trim($in["type"] ?? "pdf"));
|
||||
$title = trim($in["title"] ?? "Document WEVIA");
|
||||
$content = $in["content"] ?? "";
|
||||
|
||||
if (!$content) {
|
||||
http_response_code(400);
|
||||
echo json_encode(["ok"=>false, "error"=>"content required"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// === Type validation ===
|
||||
$allowed = ["pdf","docx","pptx","html","odt","epub"];
|
||||
if (!in_array($type, $allowed)) {
|
||||
http_response_code(400);
|
||||
echo json_encode(["ok"=>false, "error"=>"invalid type", "allowed"=>$allowed]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// === Prepare output dir ===
|
||||
$outdir = "/var/www/html/generated";
|
||||
if (!is_dir($outdir)) @mkdir($outdir, 0755, true);
|
||||
|
||||
$ts = date("Ymd-His");
|
||||
$rand = substr(md5(random_bytes(8)), 0, 6);
|
||||
$safe_title = preg_replace("/[^a-zA-Z0-9\-_]/", "-", substr($title, 0, 40));
|
||||
$basename = "wevia-{$safe_title}-{$ts}-{$rand}";
|
||||
$md_path = "$outdir/$basename.md";
|
||||
$out_path = "$outdir/$basename.$type";
|
||||
|
||||
// === Write markdown input ===
|
||||
$md_content = "# $title\n\n" . $content;
|
||||
file_put_contents($md_path, $md_content);
|
||||
|
||||
// === Generate via pandoc ===
|
||||
$start = microtime(true);
|
||||
if ($type === "pdf") {
|
||||
// Use wkhtmltopdf via pandoc for better rendering
|
||||
$cmd = "pandoc " . escapeshellarg($md_path) . " --pdf-engine=wkhtmltopdf -o " . escapeshellarg($out_path) . " 2>&1";
|
||||
} else if ($type === "pptx" || $type === "docx" || $type === "odt" || $type === "html" || $type === "epub") {
|
||||
$cmd = "pandoc " . escapeshellarg($md_path) . " -o " . escapeshellarg($out_path) . " 2>&1";
|
||||
}
|
||||
$cmd_output = @shell_exec("timeout 30 $cmd");
|
||||
$elapsed = round((microtime(true) - $start) * 1000);
|
||||
|
||||
// === Check result ===
|
||||
if (!file_exists($out_path) || filesize($out_path) === 0) {
|
||||
@unlink($md_path);
|
||||
echo json_encode([
|
||||
"ok" => false,
|
||||
"error" => "pandoc failed",
|
||||
"pandoc_output" => $cmd_output,
|
||||
"cmd" => $cmd,
|
||||
"elapsed_ms" => $elapsed,
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$size = filesize($out_path);
|
||||
$url = "/generated/$basename.$type";
|
||||
|
||||
// Keep md source for provenance
|
||||
echo json_encode([
|
||||
"ok" => true,
|
||||
"url" => $url,
|
||||
"full_url" => "https://weval-consulting.com$url",
|
||||
"size" => $size,
|
||||
"size_human" => $size > 1024 ? round($size/1024, 1) . "KB" : "$size B",
|
||||
"type" => $type,
|
||||
"title" => $title,
|
||||
"elapsed_ms" => $elapsed,
|
||||
"md_source" => "/generated/$basename.md",
|
||||
"ts" => date("c"),
|
||||
"engine" => $type === "pdf" ? "pandoc+wkhtmltopdf" : "pandoc",
|
||||
], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
|
||||
202
api/ambre-early-doc-gen.php
Normal file
202
api/ambre-early-doc-gen.php
Normal file
@@ -0,0 +1,202 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-early-doc-gen.php · v4 · 5 capabilities réelles
|
||||
* 1. File gen pdf/docx/pptx via pandoc
|
||||
* 2. xlsx via PhpSpreadsheet (si dispo, sinon fallback docx)
|
||||
* 3. Mermaid validated
|
||||
* 4. Image SVG via LLM structured prompt
|
||||
* 5. Code with file URL (py/js/html/php depending on topic)
|
||||
*/
|
||||
|
||||
static $__ad_already = false;
|
||||
if ($__ad_already) return;
|
||||
$__ad_already = true;
|
||||
|
||||
$__ad_raw = @file_get_contents("php://input");
|
||||
if (!$__ad_raw) return;
|
||||
$__ad_body = @json_decode($__ad_raw, true);
|
||||
$__ad_msg = trim($__ad_body["message"] ?? "");
|
||||
if (!$__ad_msg) return;
|
||||
|
||||
// ========== HANDLER 1: xlsx réel via PhpSpreadsheet ==========
|
||||
if (preg_match("/g[eéèê]n[eéèê]re?\s+(?:un|une)?\s*(?:tableau\s+)?excel|xlsx/iu", $__ad_msg) &&
|
||||
preg_match("/(?::|pour|sur)\s*(.+)$/iu", $__ad_msg, $__xm)) {
|
||||
$__xlsx_topic = trim($__xm[1]);
|
||||
// try PhpSpreadsheet
|
||||
$__xl_url = "http://127.0.0.1/api/ambre-xlsx-gen.php?topic=" . urlencode($__xlsx_topic);
|
||||
$__xl_out = @file_get_contents($__xl_url, false, stream_context_create(["http"=>["timeout"=>60,"header"=>"Host: weval-consulting.com\r\n"]]));
|
||||
$__xl_d = @json_decode($__xl_out, true);
|
||||
if ($__xl_d && !empty($__xl_d["ok"]) && !empty($__xl_d["url"])) {
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
echo json_encode([
|
||||
"response"=>"📊 **" . $__xlsx_topic . "** (Excel)\n\n🔗 Télécharger: " . $__xl_d["full_url"] . "\n📦 Taille: " . $__xl_d["size_human"] . " · ⚙️ " . $__xl_d["elapsed_ms"] . "ms · engine: PhpSpreadsheet\n\n" . ($__xl_d["preview"] ?? ""),
|
||||
"executed"=>true,"provider"=>"ambre-doc-gen-v5","intent"=>"xlsx_real","topic"=>$__xlsx_topic,
|
||||
], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
|
||||
exit;
|
||||
}
|
||||
// fallback to docx handler below
|
||||
}
|
||||
|
||||
// ========== HANDLER 2: File generation PDF/DOCX/PPTX ==========
|
||||
if (preg_match("/g[eéèê]n[eéèê]re?\s+(?:un|une|des|le|la)?\s*(pdf|pptx?|powerpoint|docx?|word|excel|xlsx?|pr[eéèê]sentation|presentation|document|tableau)[^:]*(?::|sur|pour)\s*(.+)$/iu", $__ad_msg, $__ad_m)) {
|
||||
$__raw_type = mb_strtolower($__ad_m[1]);
|
||||
$__topic = trim($__ad_m[2]);
|
||||
$__type_map = [
|
||||
"pdf"=>"pdf","pptx"=>"pptx","ppt"=>"pptx","powerpoint"=>"pptx",
|
||||
"presentation"=>"pptx","présentation"=>"pptx",
|
||||
"docx"=>"docx","doc"=>"docx","word"=>"docx","document"=>"docx",
|
||||
"xlsx"=>"xlsx","excel"=>"xlsx","tableau"=>"xlsx",
|
||||
];
|
||||
$__type = $__type_map[$__raw_type] ?? "pdf";
|
||||
$__pandoc_type = ($__type === "xlsx") ? "docx" : $__type;
|
||||
|
||||
$__url = "http://127.0.0.1/api/ambre-gen-pipeline.php?type=" . urlencode($__pandoc_type) . "&topic=" . urlencode($__topic);
|
||||
$__out = @file_get_contents($__url, false, stream_context_create(["http"=>["timeout"=>75,"method"=>"GET","header"=>"Host: weval-consulting.com\r\n"]]));
|
||||
|
||||
if ($__out && strlen($__out) > 50) {
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
echo json_encode([
|
||||
"response"=>$__out,"executed"=>true,"provider"=>"ambre-doc-gen-v5",
|
||||
"intent"=>"file_generation_real","type"=>$__type,"topic"=>$__topic,
|
||||
], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// ========== HANDLER 3: Mermaid validated ==========
|
||||
if (preg_match("/g[eéèê]n[eéèê]re?.*(sch[eéèê]ma|mermaid|diagramme|flowchart).*(?::|pour|sur)\s*(.+)$/iu", $__ad_msg, $__mm)) {
|
||||
$__topic = trim($__mm[2]);
|
||||
$__sys = "Tu es generateur de diagrammes Mermaid. Reponds UNIQUEMENT avec code mermaid valide, pas de markdown, pas de backticks. Commence par \"flowchart TD\" ou \"graph TD\". Syntaxe: A[Label] --> B[Label]. MAX 12 nodes.";
|
||||
$__user = "Genere un flowchart mermaid VALIDE pour: $__topic";
|
||||
$__llm = @file_get_contents("http://127.0.0.1:4000/v1/chat/completions", false, stream_context_create([
|
||||
"http"=>["method"=>"POST","header"=>"Content-Type: application/json\r\n",
|
||||
"content"=>json_encode(["model"=>"fast","messages"=>[
|
||||
["role"=>"system","content"=>$__sys],["role"=>"user","content"=>$__user]
|
||||
],"max_tokens"=>400,"temperature"=>0.1]),"timeout"=>20]
|
||||
]));
|
||||
$__mmd = @json_decode($__llm,true)["choices"][0]["message"]["content"] ?? "";
|
||||
$__mmd = trim(preg_replace("/```(?:mermaid)?\n?|```/","",$__mmd));
|
||||
if (!preg_match("/^(flowchart|graph|sequenceDiagram|classDiagram)/i", $__mmd)) $__mmd = "flowchart TD\n$__mmd";
|
||||
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
echo json_encode([
|
||||
"response"=>"🧩 Schema Mermaid: $__topic\n\n".chr(96).chr(96).chr(96)."mermaid\n$__mmd\n".chr(96).chr(96).chr(96),
|
||||
"executed"=>true,"provider"=>"ambre-doc-gen-v5","intent"=>"mermaid_valid","topic"=>$__topic,
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ========== HANDLER 4: Image SVG via LLM ==========
|
||||
if (preg_match("/g[eéèê]n[eéèê]re?\s+(?:une|un)?\s*image\s*(?:\b(?:decrivant|repr[eéèê]sentant|pour|sur|de)\b\s*)?:?\s*(.+)$/iu", $__ad_msg, $__im)) {
|
||||
$__topic = trim($__im[1]);
|
||||
$__sys = "Tu es un generateur d\"images SVG. Reponds UNIQUEMENT avec du code SVG valide 400x300, pas de markdown, pas de backticks. Formes geometriques + couleurs. Commence par <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 400 300\">.";
|
||||
$__user = "SVG representant: $__topic";
|
||||
$__llm = @file_get_contents("http://127.0.0.1:4000/v1/chat/completions", false, stream_context_create([
|
||||
"http"=>["method"=>"POST","header"=>"Content-Type: application/json\r\n",
|
||||
"content"=>json_encode(["model"=>"fast","messages"=>[
|
||||
["role"=>"system","content"=>$__sys],["role"=>"user","content"=>$__user]
|
||||
],"max_tokens"=>700,"temperature"=>0.4]),"timeout"=>25]
|
||||
]));
|
||||
$__svg = @json_decode($__llm,true)["choices"][0]["message"]["content"] ?? "";
|
||||
$__svg = trim(preg_replace("/```(?:svg|xml)?\n?|```/","",$__svg));
|
||||
|
||||
if (strpos($__svg, "<svg") !== false) {
|
||||
// Save to /generated/
|
||||
$__ts = date("Ymd-His");
|
||||
$__rand = substr(md5(random_bytes(4)),0,6);
|
||||
$__safe = preg_replace("/[^a-zA-Z0-9\-_]/","-",substr($__topic,0,40));
|
||||
$__fname = "wevia-img-$__safe-$__ts-$__rand.svg";
|
||||
@file_put_contents("/var/www/html/generated/$__fname", $__svg);
|
||||
$__size = strlen($__svg);
|
||||
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
echo json_encode([
|
||||
"response"=>"🎨 **$__topic** (image SVG)\n\n🔗 Telecharger: https://weval-consulting.com/generated/$__fname\n📦 Taille: " . round($__size/1024,1) . "KB · engine: LLM+SVG\n\n" . chr(96) . chr(96) . chr(96) . "html\n$__svg\n" . chr(96) . chr(96) . chr(96),
|
||||
"executed"=>true,"provider"=>"ambre-doc-gen-v5","intent"=>"image_svg_real",
|
||||
"topic"=>$__topic, "url"=>"https://weval-consulting.com/generated/$__fname",
|
||||
], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// ========== HANDLER 5: Code generation with file ==========
|
||||
if (preg_match("/(?:ecris?|[eéèê]cri(?:re)?|g[eéèê]n[eéèê]re?)\s+(?:le|du|un)?\s*code(?:\s+(?:pour|en|python|javascript|php|html|js|ts|react|jsx))?\s*(?::|pour)?\s*(.+)$/iu", $__ad_msg, $__cm)) {
|
||||
$__topic = trim($__cm[1]);
|
||||
// Detect language from topic
|
||||
$__lang = "python"; $__ext = "py";
|
||||
$__lc = mb_strtolower($__topic);
|
||||
if (preg_match("/\b(react|jsx|tsx|nextjs|next\.js)\b/i", $__lc)) { $__lang="jsx"; $__ext="jsx"; }
|
||||
elseif (preg_match("/\b(javascript|js|node|vanilla)\b/i", $__lc)) { $__lang="javascript"; $__ext="js"; }
|
||||
elseif (preg_match("/\b(typescript|ts)\b/i", $__lc)) { $__lang="typescript"; $__ext="ts"; }
|
||||
elseif (preg_match("/\b(php)\b/i", $__lc)) { $__lang="php"; $__ext="php"; }
|
||||
elseif (preg_match("/\b(html|page web|site web)\b/i", $__lc)) { $__lang="html"; $__ext="html"; }
|
||||
elseif (preg_match("/\b(bash|shell|sh)\b/i", $__lc)) { $__lang="bash"; $__ext="sh"; }
|
||||
elseif (preg_match("/\b(sql|postgres|mysql)\b/i", $__lc)) { $__lang="sql"; $__ext="sql"; }
|
||||
|
||||
$__sys = "Tu es un generateur de code $__lang. Reponds UNIQUEMENT avec du code $__lang complet et fonctionnel. Pas de preambule, pas de markdown, pas de backticks, pas de commentaire meta. Juste le code pret a executer.";
|
||||
$__user = "Ecris le code $__lang pour: $__topic";
|
||||
|
||||
$__llm = @file_get_contents("http://127.0.0.1:4000/v1/chat/completions", false, stream_context_create([
|
||||
"http"=>["method"=>"POST","header"=>"Content-Type: application/json\r\n",
|
||||
"content"=>json_encode(["model"=>"fast","messages"=>[
|
||||
["role"=>"system","content"=>$__sys],["role"=>"user","content"=>$__user]
|
||||
],"max_tokens"=>2000,"temperature"=>0.3]),"timeout"=>45]
|
||||
]));
|
||||
$__code = @json_decode($__llm,true)["choices"][0]["message"]["content"] ?? "";
|
||||
$__code = trim(preg_replace("/```(?:" . $__lang . "|python|javascript|jsx|ts|php|html|bash|sql)?\n?|```/","", $__code));
|
||||
|
||||
if ($__code && strlen($__code) > 20) {
|
||||
$__ts = date("Ymd-His");
|
||||
$__rand = substr(md5(random_bytes(4)),0,6);
|
||||
$__safe = preg_replace("/[^a-zA-Z0-9\-_]/","-",substr($__topic,0,40));
|
||||
$__fname = "wevia-code-$__safe-$__ts-$__rand.$__ext";
|
||||
@file_put_contents("/var/www/html/generated/$__fname", $__code);
|
||||
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
$__tb = chr(96).chr(96).chr(96);
|
||||
echo json_encode([
|
||||
"response"=>"💻 **$__topic** (code $__lang)\n\n🔗 Telecharger: https://weval-consulting.com/generated/$__fname\n📦 " . strlen($__code) . " chars · " . count(explode("\n",$__code)) . " lignes · lang: $__lang\n\n{$__tb}$__lang\n$__code\n{$__tb}",
|
||||
"executed"=>true,"provider"=>"ambre-doc-gen-v5","intent"=>"code_real",
|
||||
"topic"=>$__topic,"lang"=>$__lang,"url"=>"https://weval-consulting.com/generated/$__fname",
|
||||
], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ========== HANDLER 6: Translation via LLM direct ==========
|
||||
if (preg_match("/(?:traduis?|traduire?|translate)\\s+(?:ce\\s+texte|le\\s+texte)?\\s*(?:en)?\\s*:?\\s*(anglais|francais|espagnol|allemand|italien|portugais|arabe|chinois|japonais|english|spanish|french|german|italian|portuguese|arabic|chinese|japanese)\\s*:?\\s*(.+)$/iu", $__ad_msg, $__tr)) {
|
||||
$__tgt = mb_strtolower($__tr[1]);
|
||||
$__txt = trim($__tr[2]);
|
||||
$__lang_map = [
|
||||
"anglais"=>"English","english"=>"English",
|
||||
"francais"=>"French","french"=>"French",
|
||||
"espagnol"=>"Spanish","spanish"=>"Spanish",
|
||||
"allemand"=>"German","german"=>"German",
|
||||
"italien"=>"Italian","italian"=>"Italian",
|
||||
"portugais"=>"Portuguese","portuguese"=>"Portuguese",
|
||||
"arabe"=>"Arabic","arabic"=>"Arabic",
|
||||
"chinois"=>"Chinese","chinese"=>"Chinese",
|
||||
"japonais"=>"Japanese","japanese"=>"Japanese",
|
||||
];
|
||||
$__target = $__lang_map[$__tgt] ?? "English";
|
||||
$__sys = "You are a professional translator. Translate the text to $__target. Output ONLY the translation, no preamble, no explanation.";
|
||||
$__llm = @file_get_contents("http://127.0.0.1:4000/v1/chat/completions", false, stream_context_create([
|
||||
"http"=>["method"=>"POST","header"=>"Content-Type: application/json\r\n",
|
||||
"content"=>json_encode(["model"=>"fast","messages"=>[
|
||||
["role"=>"system","content"=>$__sys],["role"=>"user","content"=>$__txt]
|
||||
],"max_tokens"=>1500,"temperature"=>0.2]),"timeout"=>20]
|
||||
]));
|
||||
$__trans = @json_decode($__llm,true)["choices"][0]["message"]["content"] ?? "";
|
||||
if ($__trans) {
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
echo json_encode([
|
||||
"response"=>"🌐 Traduction vers $__target\n\n**Original:**\n$__txt\n\n**$__target:**\n" . trim($__trans),
|
||||
"executed"=>true,"provider"=>"ambre-doc-gen-v5","intent"=>"translate_real",
|
||||
"target"=>$__target,
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// fall through to main flow
|
||||
80
api/ambre-gen-pipeline.php
Normal file
80
api/ambre-gen-pipeline.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-gen-pipeline.php · AMBRE · pipeline complet chat → LLM markdown → pandoc file
|
||||
* Usage: GET ?type=pdf|docx|pptx&topic=... (from chat intent cmd)
|
||||
* Output: text response with file URL embedded
|
||||
*/
|
||||
header("Content-Type: text/plain; charset=utf-8");
|
||||
|
||||
$type = strtolower(trim($_GET["type"] ?? "pdf"));
|
||||
$topic = trim($_GET["topic"] ?? "");
|
||||
|
||||
if (!$topic) { echo "❌ topic required"; exit; }
|
||||
$allowed = ["pdf","docx","pptx","html","epub"];
|
||||
if (!in_array($type, $allowed)) { echo "❌ type invalide, allowed: " . implode("|", $allowed); exit; }
|
||||
|
||||
// === 1. Call LLM to generate clean markdown ===
|
||||
$sys_prompt = "Tu es un generateur de contenu professionnel. Réponds UNIQUEMENT en markdown pur, pas de preambule, pas de meta-commentaire. Pour les PPTX, utilise # pour chaque slide title. Français par défaut.";
|
||||
|
||||
$user_prompt = match($type) {
|
||||
"pdf" => "Génère un document PDF professionnel, structuré, complet (2-3 pages) sur: $topic. Titres, sections, bullets.",
|
||||
"docx" => "Génère un document Word professionnel, structuré sur: $topic. Titres, sections, tableaux si pertinent.",
|
||||
"pptx" => "Génère une présentation de 5-7 slides sur: $topic. Chaque slide commence par # (titre slide). Bullets concises.",
|
||||
"html" => "Génère un document HTML propre sur: $topic.",
|
||||
default => "Génère un document sur: $topic.",
|
||||
};
|
||||
|
||||
$llm_raw = @file_get_contents("http://127.0.0.1:4000/v1/chat/completions", false, stream_context_create([
|
||||
"http" => [
|
||||
"method" => "POST",
|
||||
"header" => "Content-Type: application/json\r\n",
|
||||
"content" => json_encode([
|
||||
"model" => "fast",
|
||||
"messages" => [
|
||||
["role"=>"system", "content"=>$sys_prompt],
|
||||
["role"=>"user", "content"=>$user_prompt],
|
||||
],
|
||||
"max_tokens" => 2500,
|
||||
"temperature" => 0.5,
|
||||
"stream" => false,
|
||||
]),
|
||||
"timeout" => 30,
|
||||
],
|
||||
]));
|
||||
|
||||
$llm_d = @json_decode($llm_raw, true);
|
||||
$md_content = $llm_d["choices"][0]["message"]["content"] ?? "";
|
||||
|
||||
if (!$md_content) { echo "❌ LLM failed to generate content"; exit; }
|
||||
|
||||
// === 2. Call ambre-doc-gen to create the file ===
|
||||
$title = substr($topic, 0, 60);
|
||||
$gen_ctx = stream_context_create([
|
||||
"http" => [
|
||||
"method" => "POST",
|
||||
"header" => "Content-Type: application/json\r\n",
|
||||
"content" => json_encode([
|
||||
"type" => $type,
|
||||
"title" => $title,
|
||||
"content" => $md_content,
|
||||
]),
|
||||
"timeout" => 45,
|
||||
],
|
||||
]);
|
||||
$gen_raw = @file_get_contents("http://127.0.0.1/api/ambre-doc-gen.php", false, $gen_ctx);
|
||||
$gen_d = @json_decode($gen_raw, true);
|
||||
|
||||
if (!$gen_d || empty($gen_d["ok"])) {
|
||||
echo "❌ Generation failed: " . ($gen_d["error"] ?? "unknown") . "\n";
|
||||
echo "MD content was: " . substr($md_content, 0, 200);
|
||||
exit;
|
||||
}
|
||||
|
||||
// === 3. Output rich response ===
|
||||
$icon = match($type) { "pdf"=>"📄", "docx"=>"📝", "pptx"=>"🎯", "html"=>"🌐", default=>"📎" };
|
||||
echo "$icon **$title** généré\n\n";
|
||||
echo "🔗 Télécharger: " . $gen_d["full_url"] . "\n";
|
||||
echo "📦 Taille: " . $gen_d["size_human"] . " · ⚙️ " . $gen_d["elapsed_ms"] . "ms · engine: " . $gen_d["engine"] . "\n\n";
|
||||
echo "---\n\nAperçu contenu:\n\n";
|
||||
echo substr($md_content, 0, 800);
|
||||
if (strlen($md_content) > 800) echo "\n\n... [document complet dans le fichier]";
|
||||
45
api/ambre-libs-check.php
Normal file
45
api/ambre-libs-check.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-libs-check.php · REAL shell check des libs disponibles pour file generation
|
||||
*/
|
||||
header("Content-Type: application/json");
|
||||
$out = ["ok"=>true, "ts"=>date("c"), "s204"=>[]];
|
||||
|
||||
// Shell binary checks
|
||||
foreach (["pandoc","wkhtmltopdf","libreoffice","soffice","unoconv","markdown","gs"] as $cmd) {
|
||||
$p = @trim(shell_exec("which $cmd 2>/dev/null"));
|
||||
$out["s204"]["bin_$cmd"] = $p ?: "NOT FOUND";
|
||||
}
|
||||
|
||||
// Composer autoload paths (commonly in /var/www/html/vendor or /opt/wevia-brain/vendor)
|
||||
foreach (["/var/www/html/vendor/autoload.php","/opt/wevia-brain/vendor/autoload.php","/var/www/weval/vendor/autoload.php","/opt/weval-l99/vendor/autoload.php"] as $autoload) {
|
||||
if (file_exists($autoload)) {
|
||||
$out["s204"]["composer_$autoload"] = "EXISTS";
|
||||
}
|
||||
}
|
||||
|
||||
// Scan vendor folder for specific packages
|
||||
foreach (["/var/www/html/vendor","/opt/wevia-brain/vendor","/var/www/weval/vendor"] as $vendor_dir) {
|
||||
if (is_dir($vendor_dir)) {
|
||||
foreach (["dompdf","phpoffice","mpdf","tcpdf","phpspreadsheet","phppresentation","phpword"] as $pkg) {
|
||||
$found = @shell_exec("find $vendor_dir -maxdepth 3 -type d -iname "*$pkg*" 2>/dev/null | head -3");
|
||||
if (trim($found)) $out["s204"]["pkg_$pkg"] = trim($found);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PHP extensions
|
||||
$ext_list = get_loaded_extensions();
|
||||
foreach (["gd","imagick","zip","mbstring","xml","curl","openssl"] as $ext) {
|
||||
$out["s204"]["ext_$ext"] = in_array($ext, $ext_list) ? "YES" : "NO";
|
||||
}
|
||||
|
||||
// Check /var/www/html/generated directory
|
||||
$out["s204"]["generated_dir"] = is_dir("/var/www/html/generated") ? "EXISTS" : "MISSING";
|
||||
if (is_dir("/var/www/html/generated")) {
|
||||
$files = glob("/var/www/html/generated/*");
|
||||
$out["s204"]["generated_count"] = count($files);
|
||||
$out["s204"]["generated_sample"] = array_slice(array_map("basename", $files), 0, 5);
|
||||
}
|
||||
|
||||
echo json_encode($out, JSON_PRETTY_PRINT);
|
||||
33
api/ambre-list-stubs.php
Normal file
33
api/ambre-list-stubs.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-list-stubs.php · listing wired-pending stubs related to capabilities
|
||||
*/
|
||||
header("Content-Type: application/json");
|
||||
$dir = "/var/www/html/api/wired-pending";
|
||||
$files = glob("$dir/intent-opus4-*.php") ?: [];
|
||||
$kw = $_GET["kw"] ?? "";
|
||||
$out = ["count"=>count($files), "matches"=>[]];
|
||||
foreach ($files as $f) {
|
||||
$name = basename($f, ".php");
|
||||
$short = str_replace("intent-opus4-", "", $name);
|
||||
if ($kw && stripos($short, $kw) === false) continue;
|
||||
// Read metadata if array stub
|
||||
ob_start();
|
||||
$info = @include $f;
|
||||
@ob_end_clean();
|
||||
$meta = [
|
||||
"name" => $short,
|
||||
"size" => filesize($f),
|
||||
"mtime" => gmdate("c", filemtime($f)),
|
||||
];
|
||||
if (is_array($info)) {
|
||||
$meta["triggers"] = $info["triggers"] ?? [];
|
||||
$meta["status"] = $info["status"] ?? "?";
|
||||
$meta["cmd"] = $info["cmd"] ?? "?";
|
||||
} else {
|
||||
$meta["type"] = "direct-exec";
|
||||
}
|
||||
$out["matches"][] = $meta;
|
||||
}
|
||||
$out["matches_count"] = count($out["matches"]);
|
||||
echo json_encode($out, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
|
||||
30
api/ambre-logo-finder.php
Normal file
30
api/ambre-logo-finder.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$out = [];
|
||||
$targets = [
|
||||
"/var/www/html/solution",
|
||||
"/var/www/html/solutions",
|
||||
"/var/www/html/assets",
|
||||
"/var/www/html/wevia-ia",
|
||||
"/var/www/html/img",
|
||||
"/var/www/html/images",
|
||||
"/var/www/html/static",
|
||||
"/var/www/html",
|
||||
];
|
||||
foreach ($targets as $t) {
|
||||
if (!is_dir($t)) { $out[$t] = "MISSING"; continue; }
|
||||
$logos = @glob("$t/*logo*wevia*") ?: [];
|
||||
$logos = array_merge($logos, @glob("$t/*wevia*logo*") ?: []);
|
||||
$logos = array_merge($logos, @glob("$t/logo-wevia*") ?: []);
|
||||
$logos = array_merge($logos, @glob("$t/wevia-logo*") ?: []);
|
||||
// Also direct files
|
||||
foreach (["logo.svg","logo.png","wevia.svg","wevia.png","logo-wevia.svg","logo-wevia.png"] as $name) {
|
||||
if (file_exists("$t/$name")) $logos[] = "$t/$name";
|
||||
}
|
||||
if ($logos) $out[$t] = array_map(function($p){return ["path"=>$p,"size"=>@filesize($p)];}, array_unique($logos));
|
||||
}
|
||||
// Also check /solution* root-level
|
||||
$root = @shell_exec("ls -d /solution* /var/www/html/solution* 2>/dev/null");
|
||||
if ($root) $out["solution_roots"] = trim($root);
|
||||
|
||||
echo json_encode($out, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
|
||||
15
api/ambre-ss-check.php
Normal file
15
api/ambre-ss-check.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$out = [];
|
||||
$candidates = [
|
||||
"/var/www/html/vendor/phpoffice/phpspreadsheet",
|
||||
"/var/www/html/vendor/autoload.php",
|
||||
"/opt/wevia-brain/vendor/phpoffice/phpspreadsheet",
|
||||
"/opt/wevia-brain/vendor/autoload.php",
|
||||
];
|
||||
foreach ($candidates as $p) $out[$p] = file_exists($p) ? (is_dir($p)?"DIR":"FILE") : "MISSING";
|
||||
|
||||
// find any phpspreadsheet autoload
|
||||
$find = @shell_exec("find /var/www /opt -maxdepth 6 -name "Spreadsheet.php" -path "*PhpSpreadsheet*" 2>/dev/null | head -3");
|
||||
$out["spreadsheet_class"] = trim($find);
|
||||
echo json_encode($out, JSON_PRETTY_PRINT);
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated": "2026-04-21 13:00:02",
|
||||
"generated": "2026-04-21 13:30:02",
|
||||
"version": "1.0",
|
||||
"servers": [
|
||||
{
|
||||
@@ -10,7 +10,7 @@
|
||||
"ssh": 49222,
|
||||
"disk_pct": 82,
|
||||
"disk_avail": "27G",
|
||||
"uptime": "up 1 week, 3 hours, 8 minutes",
|
||||
"uptime": "up 1 week, 3 hours, 38 minutes",
|
||||
"nginx": "active",
|
||||
"php_fpm": "active",
|
||||
"php_version": "8.5.5"
|
||||
@@ -277,7 +277,7 @@
|
||||
"screens": {
|
||||
"s204_html": 315,
|
||||
"s204_products": 104,
|
||||
"s204_api_php": 793,
|
||||
"s204_api_php": 800,
|
||||
"s204_wevia_php": 34,
|
||||
"s95_arsenal_html": 1377,
|
||||
"s95_arsenal_api": 377
|
||||
@@ -301,7 +301,7 @@
|
||||
"langfuse"
|
||||
],
|
||||
"key_tables": {
|
||||
"kb_learnings": 5543,
|
||||
"kb_learnings": 5545,
|
||||
"kb_documents": 0,
|
||||
"ethica_medecins": 50004,
|
||||
"enterprise_agents": 0
|
||||
@@ -601,7 +601,7 @@
|
||||
]
|
||||
},
|
||||
"wiki": {
|
||||
"total_entries": 5543,
|
||||
"total_entries": 5545,
|
||||
"categories": [
|
||||
{
|
||||
"category": "AUTO-FIX",
|
||||
@@ -609,7 +609,7 @@
|
||||
},
|
||||
{
|
||||
"category": "TOPOLOGY",
|
||||
"cnt": "1214"
|
||||
"cnt": "1216"
|
||||
},
|
||||
{
|
||||
"category": "DISCOVERY",
|
||||
@@ -1712,7 +1712,7 @@
|
||||
"today_requests": 5,
|
||||
"today_cost": 0,
|
||||
"avg_latency_ms": 2389,
|
||||
"top_provider": "cerebras",
|
||||
"top_provider": "WEVIA Engine",
|
||||
"providers_used": 2
|
||||
},
|
||||
"optimizations": {
|
||||
@@ -1945,7 +1945,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"scan_time_ms": 2281,
|
||||
"scan_time_ms": 3257,
|
||||
"gaps": [],
|
||||
"score": 100,
|
||||
"automation": {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-21T15:00:02.078368",
|
||||
"generated_at": "2026-04-21T15:50:02.021263",
|
||||
"stats": {
|
||||
"total": 48,
|
||||
"pending": 31,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"status": "ALIVE",
|
||||
"ts": "2026-04-21T15:00:02.189050",
|
||||
"last_heartbeat": "2026-04-21T15:00:02.189050",
|
||||
"last_heartbeat_ts_epoch": 1776776402,
|
||||
"ts": "2026-04-21T15:45:02.220741",
|
||||
"last_heartbeat": "2026-04-21T15:45:02.220741",
|
||||
"last_heartbeat_ts_epoch": 1776779102,
|
||||
"tasks_today": 232,
|
||||
"tasks_week": 574,
|
||||
"agent_id": "blade-ops",
|
||||
|
||||
99
api/duplicates-registry.php
Normal file
99
api/duplicates-registry.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
// Wave 209 · /api/duplicates-registry.php
|
||||
// Duplicate screens registry. Non-destructive audit: returns groups with
|
||||
// canonical file + legacy candidates + recommendations. Zero delete.
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php';
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
|
||||
$DOCROOT = '/var/www/html';
|
||||
$pages = array_filter(scandir($DOCROOT), function($f) use ($DOCROOT) {
|
||||
return substr($f, -5) === '.html' && is_file("$DOCROOT/$f");
|
||||
});
|
||||
|
||||
// Normalize base name (strip version/legacy/saas suffixes)
|
||||
$base_groups = [];
|
||||
foreach ($pages as $p) {
|
||||
$base = substr($p, 0, -5);
|
||||
$base = preg_replace('/-v\d+$|-new$|-legacy$|-old$|\d{8,14}$|-saas$|-v\d+-\w+$/', '', $base);
|
||||
$base = preg_replace('/-pre-\w+$/', '', $base);
|
||||
$base_groups[$base][] = $p;
|
||||
}
|
||||
|
||||
// Duplicates only
|
||||
$dups = [];
|
||||
$total_dups = 0;
|
||||
foreach ($base_groups as $base => $files) {
|
||||
if (count($files) < 2) continue;
|
||||
|
||||
// Determine canonical = file with cleanest name (shortest), fall back to newest
|
||||
usort($files, function($a, $b) use ($DOCROOT) {
|
||||
// Prefer files without -v / -legacy / -old / -saas suffixes
|
||||
$has_suffix_a = preg_match('/-v\d+|-legacy|-old|-saas|-new/', $a);
|
||||
$has_suffix_b = preg_match('/-v\d+|-legacy|-old|-saas|-new/', $b);
|
||||
if ($has_suffix_a !== $has_suffix_b) return $has_suffix_a - $has_suffix_b;
|
||||
// Then prefer shorter name
|
||||
if (strlen($a) !== strlen($b)) return strlen($a) - strlen($b);
|
||||
// Then newest mtime
|
||||
return filemtime("$DOCROOT/$b") - filemtime("$DOCROOT/$a");
|
||||
});
|
||||
|
||||
$canonical = $files[0];
|
||||
$legacy = array_slice($files, 1);
|
||||
|
||||
$entries = [];
|
||||
foreach ($files as $f) {
|
||||
$path = "$DOCROOT/$f";
|
||||
$size = filesize($path);
|
||||
$entries[] = [
|
||||
'file' => $f,
|
||||
'size_bytes' => $size,
|
||||
'last_modified' => date('c', filemtime($path)),
|
||||
'is_canonical' => $f === $canonical,
|
||||
'url' => "/$f"
|
||||
];
|
||||
}
|
||||
|
||||
// Size similarity between canonical and legacy
|
||||
$can_size = filesize("$DOCROOT/$canonical");
|
||||
$close_copies = [];
|
||||
foreach ($legacy as $l) {
|
||||
$l_size = filesize("$DOCROOT/$l");
|
||||
if ($can_size > 0 && abs($can_size - $l_size) / max($can_size, $l_size) < 0.1) {
|
||||
$close_copies[] = $l;
|
||||
}
|
||||
}
|
||||
|
||||
$recommendation = count($close_copies) > 0
|
||||
? 'Archive legacy copies (add HTTP 301 to canonical) - content quasi-identical'
|
||||
: 'Keep for now - legacy has distinct content, verify if still referenced';
|
||||
|
||||
$dups[] = [
|
||||
'base' => $base,
|
||||
'count' => count($files),
|
||||
'canonical' => $canonical,
|
||||
'canonical_url' => "/$canonical",
|
||||
'legacy_files' => $legacy,
|
||||
'close_copies' => $close_copies,
|
||||
'recommendation' => $recommendation,
|
||||
'files' => $entries
|
||||
];
|
||||
$total_dups += count($legacy);
|
||||
}
|
||||
|
||||
// Sort by count desc
|
||||
usort($dups, function($a, $b) { return $b['count'] - $a['count']; });
|
||||
|
||||
$out = [
|
||||
'ok' => true,
|
||||
'ts' => date('c'),
|
||||
'total_pages' => count($pages),
|
||||
'total_duplicate_groups' => count($dups),
|
||||
'total_legacy_files' => $total_dups,
|
||||
'total_close_copies' => array_sum(array_map(function($g){ return count($g['close_copies']); }, $dups)),
|
||||
'groups' => $dups,
|
||||
'version' => 'wave-209',
|
||||
'doctrine' => 'non-destructive · document canonical + legacy · zero delete'
|
||||
];
|
||||
|
||||
echo json_encode($out, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
@@ -1,281 +0,0 @@
|
||||
{
|
||||
"ts": "2026-04-21T13:00:02+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 1.23,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 11956,
|
||||
"ram_free_mb": 19379,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "117G",
|
||||
"disk_free": "27G",
|
||||
"disk_pct": "82%",
|
||||
"fpm_workers": 140,
|
||||
"docker_containers": 19,
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.58,
|
||||
"disk_pct": "81%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 11916
|
||||
},
|
||||
"pmta": [
|
||||
{
|
||||
"name": "SER6",
|
||||
"ip": "110.239.84.121",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER7",
|
||||
"ip": "110.239.65.64",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER8",
|
||||
"ip": "182.160.55.107",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER9",
|
||||
"ip": "110.239.86.68",
|
||||
"status": "DOWN"
|
||||
}
|
||||
],
|
||||
"assets": {
|
||||
"html_pages": 315,
|
||||
"php_apis": 793,
|
||||
"wiki_entries": 1988,
|
||||
"vault_doctrines": 66,
|
||||
"vault_sessions": 104,
|
||||
"vault_decisions": 12
|
||||
},
|
||||
"tools": {
|
||||
"total": 627,
|
||||
"registry_version": "?"
|
||||
},
|
||||
"sovereign": {
|
||||
"status": "UP",
|
||||
"providers": [
|
||||
"Cerebras-fast",
|
||||
"Cerebras-think",
|
||||
"Groq",
|
||||
"Cloudflare-AI",
|
||||
"Gemini",
|
||||
"SambaNova",
|
||||
"NVIDIA-NIM",
|
||||
"Mistral",
|
||||
"Groq-OSS",
|
||||
"HF-Space",
|
||||
"HF-Router",
|
||||
"OpenRouter",
|
||||
"GitHub-Models"
|
||||
],
|
||||
"active": 13,
|
||||
"total": 13,
|
||||
"primary": "Cerebras-fast",
|
||||
"cost": "0€"
|
||||
},
|
||||
"ethica": {
|
||||
"total_hcps": 161733,
|
||||
"with_email": 110607,
|
||||
"with_phone": 155151,
|
||||
"gap_email": 51126,
|
||||
"pct_email": 68.4,
|
||||
"pct_phone": 95.9,
|
||||
"by_country": [
|
||||
{
|
||||
"country": "DZ",
|
||||
"hcps": 122337,
|
||||
"with_email": 78504,
|
||||
"with_tel": 119396,
|
||||
"pct_email": 64.2,
|
||||
"pct_tel": 97.6
|
||||
},
|
||||
{
|
||||
"country": "MA",
|
||||
"hcps": 19723,
|
||||
"with_email": 15077,
|
||||
"with_tel": 18737,
|
||||
"pct_email": 76.4,
|
||||
"pct_tel": 95
|
||||
},
|
||||
{
|
||||
"country": "TN",
|
||||
"hcps": 17794,
|
||||
"with_email": 15147,
|
||||
"with_tel": 17018,
|
||||
"pct_email": 85.1,
|
||||
"pct_tel": 95.6
|
||||
},
|
||||
{
|
||||
"country": "INTL",
|
||||
"hcps": 1879,
|
||||
"with_email": 1879,
|
||||
"with_tel": 0,
|
||||
"pct_email": 100,
|
||||
"pct_tel": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"docker": [
|
||||
{
|
||||
"name": "loki",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "listmonk",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-1",
|
||||
"status": "Up 3 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-db-1",
|
||||
"status": "Up 3 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-events-db-1",
|
||||
"status": "Up 3 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "n8n-docker-n8n-1",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker-mm-db-1",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker-mattermost-1",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "twenty-redis",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "langfuse",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "redis-weval",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "gitea",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "node-exporter",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 37 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "vaultwarden",
|
||||
"status": "Up 6 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "qdrant",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
}
|
||||
],
|
||||
"crons": {
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "420536a07 AUTO-BACKUP 20260421-1500",
|
||||
"dirty": 3,
|
||||
"status": "DIRTY"
|
||||
},
|
||||
"nonreg": {
|
||||
"total": 153,
|
||||
"passed": 153,
|
||||
"score": "100%"
|
||||
},
|
||||
"services": [
|
||||
{
|
||||
"name": "DeerFlow",
|
||||
"port": 3002,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "DeerFlow API",
|
||||
"port": 8001,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Qdrant",
|
||||
"port": 6333,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Ollama",
|
||||
"port": 11434,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Redis",
|
||||
"port": 6379,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Sovereign",
|
||||
"port": 4000,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "SearXNG",
|
||||
"port": 8080,
|
||||
"status": "UP"
|
||||
}
|
||||
],
|
||||
"whisper": {
|
||||
"binary": "COMPILED",
|
||||
"model": "142MB"
|
||||
},
|
||||
"grand_total": 3808,
|
||||
"health": {
|
||||
"score": 5,
|
||||
"max": 6,
|
||||
"pct": 83
|
||||
},
|
||||
"elapsed_ms": 11085
|
||||
}
|
||||
8
api/handlers-misplaced.json
Normal file
8
api/handlers-misplaced.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"ts": "2026-04-21T15:05:33+02:00",
|
||||
"scanned": 2050,
|
||||
"misplaced_count": 0,
|
||||
"misplaced": [
|
||||
],
|
||||
"source": "wevia-handlers-detector.sh · wave 206 · nightly 03:15"
|
||||
}
|
||||
12
api/l99-state-file.php
Normal file
12
api/l99-state-file.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
// Wave 212 · expose L99 state file as JSON endpoint
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php';
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
$path = '/opt/weval-l99/l99-state.json';
|
||||
if (file_exists($path)) {
|
||||
$data = @file_get_contents($path);
|
||||
echo $data ?: '{"error":"read_fail"}';
|
||||
} else {
|
||||
echo '{"error":"state_not_found"}';
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"agent": "V42_MQL_Scoring_Agent_REAL",
|
||||
"ts": "2026-04-21T13:00:02+00:00",
|
||||
"ts": "2026-04-21T13:50:02+00:00",
|
||||
"status": "DEPLOYED_AUTO",
|
||||
"deployed": true,
|
||||
"algorithm": "weighted_behavioral_signals",
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"ts": "20260421_150024", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 32.8, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []}
|
||||
{"ts": "20260421_152221", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 32.4, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []}
|
||||
File diff suppressed because one or more lines are too long
@@ -80,6 +80,17 @@ if (!is_array($data) || empty($data)) {
|
||||
$o['category'] = $cat;
|
||||
$o['wire_suggestion'] = $sug;
|
||||
}
|
||||
unset($o); // WAVE 207 fix PHP by-ref leak
|
||||
// WAVE 207 dedup by file name (defensive)
|
||||
$seen = [];
|
||||
$unique = [];
|
||||
foreach ($orphans as $o2) {
|
||||
if (!isset($seen[$o2['file']])) {
|
||||
$seen[$o2['file']] = 1;
|
||||
$unique[] = $o2;
|
||||
}
|
||||
}
|
||||
$orphans = $unique;
|
||||
|
||||
// Count by category
|
||||
$by_cat = [];
|
||||
|
||||
116
api/pol.f64_nt6c.tmp
Normal file
116
api/pol.f64_nt6c.tmp
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/**
|
||||
* Pages orphans list API V96.19
|
||||
* User WTP shows "54 pages orphelines détectées. Voir la liste"
|
||||
* But no API existed to return structured list with wire suggestions
|
||||
*
|
||||
* Endpoint: /api/pages-orphans-list.php
|
||||
* Returns: 54 orphans with category, last_modified, size, wire_suggestion
|
||||
*/
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
|
||||
$DOCROOT = '/var/www/html';
|
||||
|
||||
// Read pages-index.php output if exists, else scan directly
|
||||
$orphans_file = "$DOCROOT/api/orphans-json.json";
|
||||
$data = @json_decode(@file_get_contents($orphans_file), true);
|
||||
|
||||
if (!is_array($data) || empty($data)) {
|
||||
// Fallback scan: find .html files not referenced from index.html or WTP
|
||||
$all_html = glob("$DOCROOT/*.html");
|
||||
$referenced = [];
|
||||
$anchor_files = [
|
||||
'index.html', 'weval-technology-platform.html', 'wtp.html',
|
||||
'admin-v2.html', 'admin.html', 'architecture.html', 'dg-command-center.html',
|
||||
'enterprise-model.html', 'wevia-master.html', 'tools-hub.html', 'apps.html',
|
||||
'agents-archi.html', 'nonreg.html', 'portal.html', 'portal-executive.html',
|
||||
'lean6sigma-dashboard.html', 'cartographie-screens.html', 'pages-index.html',
|
||||
'unified-hub.html', 'wevia-autonomy-dashboard.html', 'enterprise.html',
|
||||
'ethica-hub.html', 'cloudflare-hub.html', 'huawei-cloud.html', 'orphans-hub.html', 'go-100pct.html',
|
||||
'wevia-backoffice.html', 'wevia-business-visual-studio.html',
|
||||
];
|
||||
foreach ($anchor_files as $af) {
|
||||
$af_path = "$DOCROOT/$af";
|
||||
if (file_exists($af_path)) {
|
||||
$content = file_get_contents($af_path);
|
||||
if (preg_match_all('/href="\/?([a-z0-9_\-\xc0-\xff%]+\.html)"/iu', $content, $matches)) {
|
||||
foreach ($matches[1] as $m) $referenced[$m] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$orphans = [];
|
||||
foreach ($all_html as $path) {
|
||||
$name = basename($path);
|
||||
// V96.21 filter out backup/gold files (legitimate archives, not real orphans)
|
||||
if (preg_match("/\\.(gold|backup|bak|orig|pre-|\\.pre-|\\.GOLD-)/i", $name)) continue;
|
||||
if (preg_match("/^\\./", $name)) continue; // hidden
|
||||
if (preg_match("/(\\d{8}|\\d{14})\\.html$/", $name)) continue; // date-stamped backups
|
||||
if (!isset($referenced[$name])) {
|
||||
$orphans[] = [
|
||||
'file' => $name,
|
||||
'size_bytes' => filesize($path),
|
||||
'last_modified' => date('c', filemtime($path)),
|
||||
'age_days' => round((time() - filemtime($path)) / 86400),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Enrich with category + suggestion
|
||||
$categorize = function($name) {
|
||||
$n = strtolower($name);
|
||||
if (strpos($n, 'ethica') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'wevia') !== false) return ['ai', 'Add link in WTP Intelligence IA module'];
|
||||
if (strpos($n, 'wevads') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'sap') !== false || strpos($n, 'vistex') !== false) return ['erp', 'Add link in WTP ERP Integrations module'];
|
||||
if (strpos($n, 'huawei') !== false || strpos($n, 'cloud') !== false) return ['cloud', 'Add link in WTP Operations & Infra module'];
|
||||
if (strpos($n, 'agent') !== false) return ['ai', 'Add link in WTP Intelligence IA / RH & Talent'];
|
||||
if (strpos($n, 'test') !== false || strpos($n, 'demo') !== false) return ['dev', 'Archive to /tests/ or /demos/ folder'];
|
||||
if (strpos($n, 'admin') !== false || strpos($n, 'dashboard') !== false) return ['operations', 'Add to WTP Operations & Infra'];
|
||||
if (strpos($n, 'security') !== false || strpos($n, 'gdpr') !== false) return ['security', 'Add to WTP Security & Compliance'];
|
||||
if (strpos($n, 'consent') !== false || strpos($n, 'privacy') !== false) return ['legal', 'Link from footer legal/privacy'];
|
||||
if (strpos($n, 'ia') !== false || strpos($n, '-ai') !== false) return ['ai', 'Add link in WTP Intelligence IA'];
|
||||
if (strpos($n, 'landing') !== false || strpos($n, 'nearshore') !== false) return ['marketing-landing', 'Verify SEO referenced, else add to sitemap'];
|
||||
return ['other', 'Manual review - may be archived'];
|
||||
};
|
||||
|
||||
foreach ($orphans as &$o) {
|
||||
list($cat, $sug) = $categorize($o['file']);
|
||||
$o['category'] = $cat;
|
||||
$o['wire_suggestion'] = $sug;
|
||||
}
|
||||
unset($o); // WAVE 207 · fix PHP reference-leak after by-ref foreach
|
||||
// WAVE 207 · dedupe by file name (defensive)
|
||||
$seen_files = [];
|
||||
$orphans_unique = [];
|
||||
foreach ($orphans as $o) {
|
||||
if (!isset($seen_files[$o['file']])) {
|
||||
$seen_files[$o['file']] = true;
|
||||
$orphans_unique[] = $o;
|
||||
}
|
||||
}
|
||||
$orphans = $orphans_unique;
|
||||
|
||||
// Count by category
|
||||
$by_cat = [];
|
||||
foreach ($orphans as $o) {
|
||||
$by_cat[$o['category']] = ($by_cat[$o['category']] ?? 0) + 1;
|
||||
}
|
||||
arsort($by_cat);
|
||||
|
||||
$data = [
|
||||
'total_html_pages' => count($all_html),
|
||||
'referenced' => count($referenced),
|
||||
'orphans_count' => count($orphans),
|
||||
'orphans' => $orphans,
|
||||
'by_category' => $by_cat,
|
||||
'scan_anchors' => $anchor_files,
|
||||
];
|
||||
}
|
||||
|
||||
$data['v'] = 'V96.19-pages-orphans-opus';
|
||||
$data['ts'] = date('c');
|
||||
$data['note'] = 'Scan files in /var/www/html/*.html not referenced from index/WTP. Wire suggestions provided per file.';
|
||||
|
||||
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
116
api/pol.u2ejw4rb.tmp
Normal file
116
api/pol.u2ejw4rb.tmp
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/**
|
||||
* Pages orphans list API V96.19
|
||||
* User WTP shows "54 pages orphelines détectées. Voir la liste"
|
||||
* But no API existed to return structured list with wire suggestions
|
||||
*
|
||||
* Endpoint: /api/pages-orphans-list.php
|
||||
* Returns: 54 orphans with category, last_modified, size, wire_suggestion
|
||||
*/
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
|
||||
$DOCROOT = '/var/www/html';
|
||||
|
||||
// Read pages-index.php output if exists, else scan directly
|
||||
$orphans_file = "$DOCROOT/api/orphans-json.json";
|
||||
$data = @json_decode(@file_get_contents($orphans_file), true);
|
||||
|
||||
if (!is_array($data) || empty($data)) {
|
||||
// Fallback scan: find .html files not referenced from index.html or WTP
|
||||
$all_html = glob("$DOCROOT/*.html");
|
||||
$referenced = [];
|
||||
$anchor_files = [
|
||||
'index.html', 'weval-technology-platform.html', 'wtp.html',
|
||||
'admin-v2.html', 'admin.html', 'architecture.html', 'dg-command-center.html',
|
||||
'enterprise-model.html', 'wevia-master.html', 'tools-hub.html', 'apps.html',
|
||||
'agents-archi.html', 'nonreg.html', 'portal.html', 'portal-executive.html',
|
||||
'lean6sigma-dashboard.html', 'cartographie-screens.html', 'pages-index.html',
|
||||
'unified-hub.html', 'wevia-autonomy-dashboard.html', 'enterprise.html',
|
||||
'ethica-hub.html', 'cloudflare-hub.html', 'huawei-cloud.html', 'orphans-hub.html', 'go-100pct.html',
|
||||
'wevia-backoffice.html', 'wevia-business-visual-studio.html',
|
||||
];
|
||||
foreach ($anchor_files as $af) {
|
||||
$af_path = "$DOCROOT/$af";
|
||||
if (file_exists($af_path)) {
|
||||
$content = file_get_contents($af_path);
|
||||
if (preg_match_all('/href="\/?([a-z0-9_\-\xc0-\xff%]+\.html)"/iu', $content, $matches)) {
|
||||
foreach ($matches[1] as $m) $referenced[$m] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$orphans = [];
|
||||
foreach ($all_html as $path) {
|
||||
$name = basename($path);
|
||||
// V96.21 filter out backup/gold files (legitimate archives, not real orphans)
|
||||
if (preg_match("/\\.(gold|backup|bak|orig|pre-|\\.pre-|\\.GOLD-)/i", $name)) continue;
|
||||
if (preg_match("/^\\./", $name)) continue; // hidden
|
||||
if (preg_match("/(\\d{8}|\\d{14})\\.html$/", $name)) continue; // date-stamped backups
|
||||
if (!isset($referenced[$name])) {
|
||||
$orphans[] = [
|
||||
'file' => $name,
|
||||
'size_bytes' => filesize($path),
|
||||
'last_modified' => date('c', filemtime($path)),
|
||||
'age_days' => round((time() - filemtime($path)) / 86400),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Enrich with category + suggestion
|
||||
$categorize = function($name) {
|
||||
$n = strtolower($name);
|
||||
if (strpos($n, 'ethica') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'wevia') !== false) return ['ai', 'Add link in WTP Intelligence IA module'];
|
||||
if (strpos($n, 'wevads') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'sap') !== false || strpos($n, 'vistex') !== false) return ['erp', 'Add link in WTP ERP Integrations module'];
|
||||
if (strpos($n, 'huawei') !== false || strpos($n, 'cloud') !== false) return ['cloud', 'Add link in WTP Operations & Infra module'];
|
||||
if (strpos($n, 'agent') !== false) return ['ai', 'Add link in WTP Intelligence IA / RH & Talent'];
|
||||
if (strpos($n, 'test') !== false || strpos($n, 'demo') !== false) return ['dev', 'Archive to /tests/ or /demos/ folder'];
|
||||
if (strpos($n, 'admin') !== false || strpos($n, 'dashboard') !== false) return ['operations', 'Add to WTP Operations & Infra'];
|
||||
if (strpos($n, 'security') !== false || strpos($n, 'gdpr') !== false) return ['security', 'Add to WTP Security & Compliance'];
|
||||
if (strpos($n, 'consent') !== false || strpos($n, 'privacy') !== false) return ['legal', 'Link from footer legal/privacy'];
|
||||
if (strpos($n, 'ia') !== false || strpos($n, '-ai') !== false) return ['ai', 'Add link in WTP Intelligence IA'];
|
||||
if (strpos($n, 'landing') !== false || strpos($n, 'nearshore') !== false) return ['marketing-landing', 'Verify SEO referenced, else add to sitemap'];
|
||||
return ['other', 'Manual review - may be archived'];
|
||||
};
|
||||
|
||||
foreach ($orphans as &$o) {
|
||||
list($cat, $sug) = $categorize($o['file']);
|
||||
$o['category'] = $cat;
|
||||
$o['wire_suggestion'] = $sug;
|
||||
}
|
||||
unset($o); // WAVE 207 · fix PHP reference-leak after by-ref foreach
|
||||
// WAVE 207 · dedupe by file name (defensive)
|
||||
$seen_files = [];
|
||||
$orphans_unique = [];
|
||||
foreach ($orphans as $o) {
|
||||
if (!isset($seen_files[$o['file']])) {
|
||||
$seen_files[$o['file']] = true;
|
||||
$orphans_unique[] = $o;
|
||||
}
|
||||
}
|
||||
$orphans = $orphans_unique;
|
||||
|
||||
// Count by category
|
||||
$by_cat = [];
|
||||
foreach ($orphans as $o) {
|
||||
$by_cat[$o['category']] = ($by_cat[$o['category']] ?? 0) + 1;
|
||||
}
|
||||
arsort($by_cat);
|
||||
|
||||
$data = [
|
||||
'total_html_pages' => count($all_html),
|
||||
'referenced' => count($referenced),
|
||||
'orphans_count' => count($orphans),
|
||||
'orphans' => $orphans,
|
||||
'by_category' => $by_cat,
|
||||
'scan_anchors' => $anchor_files,
|
||||
];
|
||||
}
|
||||
|
||||
$data['v'] = 'V96.19-pages-orphans-opus';
|
||||
$data['ts'] = date('c');
|
||||
$data['note'] = 'Scan files in /var/www/html/*.html not referenced from index/WTP. Wire suggestions provided per file.';
|
||||
|
||||
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
116
api/pol.wuom3ayj.tmp
Normal file
116
api/pol.wuom3ayj.tmp
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/**
|
||||
* Pages orphans list API V96.19
|
||||
* User WTP shows "54 pages orphelines détectées. Voir la liste"
|
||||
* But no API existed to return structured list with wire suggestions
|
||||
*
|
||||
* Endpoint: /api/pages-orphans-list.php
|
||||
* Returns: 54 orphans with category, last_modified, size, wire_suggestion
|
||||
*/
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
|
||||
$DOCROOT = '/var/www/html';
|
||||
|
||||
// Read pages-index.php output if exists, else scan directly
|
||||
$orphans_file = "$DOCROOT/api/orphans-json.json";
|
||||
$data = @json_decode(@file_get_contents($orphans_file), true);
|
||||
|
||||
if (!is_array($data) || empty($data)) {
|
||||
// Fallback scan: find .html files not referenced from index.html or WTP
|
||||
$all_html = glob("$DOCROOT/*.html");
|
||||
$referenced = [];
|
||||
$anchor_files = [
|
||||
'index.html', 'weval-technology-platform.html', 'wtp.html',
|
||||
'admin-v2.html', 'admin.html', 'architecture.html', 'dg-command-center.html',
|
||||
'enterprise-model.html', 'wevia-master.html', 'tools-hub.html', 'apps.html',
|
||||
'agents-archi.html', 'nonreg.html', 'portal.html', 'portal-executive.html',
|
||||
'lean6sigma-dashboard.html', 'cartographie-screens.html', 'pages-index.html',
|
||||
'unified-hub.html', 'wevia-autonomy-dashboard.html', 'enterprise.html',
|
||||
'ethica-hub.html', 'cloudflare-hub.html', 'huawei-cloud.html', 'orphans-hub.html', 'go-100pct.html',
|
||||
'wevia-backoffice.html', 'wevia-business-visual-studio.html',
|
||||
];
|
||||
foreach ($anchor_files as $af) {
|
||||
$af_path = "$DOCROOT/$af";
|
||||
if (file_exists($af_path)) {
|
||||
$content = file_get_contents($af_path);
|
||||
if (preg_match_all('/href="\/?([a-z0-9_\-\xc0-\xff%]+\.html)"/iu', $content, $matches)) {
|
||||
foreach ($matches[1] as $m) $referenced[$m] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$orphans = [];
|
||||
foreach ($all_html as $path) {
|
||||
$name = basename($path);
|
||||
// V96.21 filter out backup/gold files (legitimate archives, not real orphans)
|
||||
if (preg_match("/\\.(gold|backup|bak|orig|pre-|\\.pre-|\\.GOLD-)/i", $name)) continue;
|
||||
if (preg_match("/^\\./", $name)) continue; // hidden
|
||||
if (preg_match("/(\\d{8}|\\d{14})\\.html$/", $name)) continue; // date-stamped backups
|
||||
if (!isset($referenced[$name])) {
|
||||
$orphans[] = [
|
||||
'file' => $name,
|
||||
'size_bytes' => filesize($path),
|
||||
'last_modified' => date('c', filemtime($path)),
|
||||
'age_days' => round((time() - filemtime($path)) / 86400),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Enrich with category + suggestion
|
||||
$categorize = function($name) {
|
||||
$n = strtolower($name);
|
||||
if (strpos($n, 'ethica') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'wevia') !== false) return ['ai', 'Add link in WTP Intelligence IA module'];
|
||||
if (strpos($n, 'wevads') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'sap') !== false || strpos($n, 'vistex') !== false) return ['erp', 'Add link in WTP ERP Integrations module'];
|
||||
if (strpos($n, 'huawei') !== false || strpos($n, 'cloud') !== false) return ['cloud', 'Add link in WTP Operations & Infra module'];
|
||||
if (strpos($n, 'agent') !== false) return ['ai', 'Add link in WTP Intelligence IA / RH & Talent'];
|
||||
if (strpos($n, 'test') !== false || strpos($n, 'demo') !== false) return ['dev', 'Archive to /tests/ or /demos/ folder'];
|
||||
if (strpos($n, 'admin') !== false || strpos($n, 'dashboard') !== false) return ['operations', 'Add to WTP Operations & Infra'];
|
||||
if (strpos($n, 'security') !== false || strpos($n, 'gdpr') !== false) return ['security', 'Add to WTP Security & Compliance'];
|
||||
if (strpos($n, 'consent') !== false || strpos($n, 'privacy') !== false) return ['legal', 'Link from footer legal/privacy'];
|
||||
if (strpos($n, 'ia') !== false || strpos($n, '-ai') !== false) return ['ai', 'Add link in WTP Intelligence IA'];
|
||||
if (strpos($n, 'landing') !== false || strpos($n, 'nearshore') !== false) return ['marketing-landing', 'Verify SEO referenced, else add to sitemap'];
|
||||
return ['other', 'Manual review - may be archived'];
|
||||
};
|
||||
|
||||
foreach ($orphans as &$o) {
|
||||
list($cat, $sug) = $categorize($o['file']);
|
||||
$o['category'] = $cat;
|
||||
$o['wire_suggestion'] = $sug;
|
||||
}
|
||||
unset($o); // WAVE 207 fix PHP by-ref leak
|
||||
// WAVE 207 dedup by file name (defensive)
|
||||
$seen = [];
|
||||
$unique = [];
|
||||
foreach ($orphans as $o2) {
|
||||
if (!isset($seen[$o2['file']])) {
|
||||
$seen[$o2['file']] = 1;
|
||||
$unique[] = $o2;
|
||||
}
|
||||
}
|
||||
$orphans = $unique;
|
||||
|
||||
// Count by category
|
||||
$by_cat = [];
|
||||
foreach ($orphans as $o) {
|
||||
$by_cat[$o['category']] = ($by_cat[$o['category']] ?? 0) + 1;
|
||||
}
|
||||
arsort($by_cat);
|
||||
|
||||
$data = [
|
||||
'total_html_pages' => count($all_html),
|
||||
'referenced' => count($referenced),
|
||||
'orphans_count' => count($orphans),
|
||||
'orphans' => $orphans,
|
||||
'by_category' => $by_cat,
|
||||
'scan_anchors' => $anchor_files,
|
||||
];
|
||||
}
|
||||
|
||||
$data['v'] = 'V96.19-pages-orphans-opus';
|
||||
$data['ts'] = date('c');
|
||||
$data['note'] = 'Scan files in /var/www/html/*.html not referenced from index/WTP. Wire suggestions provided per file.';
|
||||
|
||||
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-21T15:00:14",
|
||||
"timestamp": "2026-04-21T15:30:11",
|
||||
"features": {
|
||||
"total": 36,
|
||||
"pass": 35
|
||||
@@ -13,7 +13,7 @@
|
||||
"score": 97.2,
|
||||
"log": [
|
||||
"=== UX AGENT v1.0 ===",
|
||||
"Time: 2026-04-21 15:00:02",
|
||||
"Time: 2026-04-21 15:30:02",
|
||||
" core: 4/4",
|
||||
" layout: 3/4",
|
||||
" interaction: 6/6",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-21T13:00:43+00:00",
|
||||
"ts": "2026-04-21T13:54:03+00:00",
|
||||
"summary": {
|
||||
"total_categories": 8,
|
||||
"total_kpis": 64,
|
||||
|
||||
312
api/v_opus_godmode_20260421-152121/report.json
Normal file
312
api/v_opus_godmode_20260421-152121/report.json
Normal file
@@ -0,0 +1,312 @@
|
||||
{
|
||||
"ts": "20260421-152121",
|
||||
"pages_tested": 30,
|
||||
"pages_ok": 29,
|
||||
"pages_with_overlaps": 1,
|
||||
"pages_error": 0,
|
||||
"total_overlaps": 1,
|
||||
"total_x_buttons": 148,
|
||||
"doctrine_loaded_count": 30,
|
||||
"results": [
|
||||
{
|
||||
"name": "wevia-erp-unified",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA ERP \u00b7 Source unique v\u00e9rit\u00e9 \u00b7 Tableau bord premium",
|
||||
"bodyLen": 4166
|
||||
},
|
||||
{
|
||||
"name": "wepredict",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": 0,
|
||||
"xBtns": 64,
|
||||
"doctrine": true,
|
||||
"title": "WePredict Cockpit \u00b7 V146 \u00b7 WEVAL ecosystem",
|
||||
"bodyLen": 9397
|
||||
},
|
||||
{
|
||||
"name": "weval-technology-platform",
|
||||
"http": 200,
|
||||
"fixed": 6,
|
||||
"overlaps": 1,
|
||||
"xBtns": 4,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL Technology Platform \u2014 All-in-One ERP Portal",
|
||||
"bodyLen": 15931
|
||||
},
|
||||
{
|
||||
"name": "wevia-master",
|
||||
"http": 200,
|
||||
"fixed": 1,
|
||||
"overlaps": 0,
|
||||
"xBtns": 1,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA Master AI",
|
||||
"bodyLen": 974
|
||||
},
|
||||
{
|
||||
"name": "all-ia-hub",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": 0,
|
||||
"xBtns": 0,
|
||||
"doctrine": true,
|
||||
"title": "All-IA Hub \u2014 Remplacement Claude Code + Opus (Souverain)",
|
||||
"bodyLen": 902
|
||||
},
|
||||
{
|
||||
"name": "wevia-orchestrator",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 1,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA \u2014 Orchestrator GODMODE",
|
||||
"bodyLen": 36233
|
||||
},
|
||||
{
|
||||
"name": "wevcode",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "WEVCODE \u2014 Sovereign Coding Agent",
|
||||
"bodyLen": 436
|
||||
},
|
||||
{
|
||||
"name": "wevia-unified-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA Unified Hub v2 \u00b7 tout d\u00e9dupliqu\u00e9",
|
||||
"bodyLen": 1934
|
||||
},
|
||||
{
|
||||
"name": "wevia-training",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": 0,
|
||||
"xBtns": 5,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA Master Control Center \u2014 Training Auto + Brain Monitor",
|
||||
"bodyLen": 2892
|
||||
},
|
||||
{
|
||||
"name": "wiki",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA \u2014 Wiki",
|
||||
"bodyLen": 32181
|
||||
},
|
||||
{
|
||||
"name": "cartographie-screens",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 1,
|
||||
"doctrine": true,
|
||||
"title": "WEVADS Cartographie Exhaustive Ecrans - 3914",
|
||||
"bodyLen": 25625
|
||||
},
|
||||
{
|
||||
"name": "orphans-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "\ud83d\udcc7 Orphans Hub \u00b7 All pages wired",
|
||||
"bodyLen": 9675
|
||||
},
|
||||
{
|
||||
"name": "admin",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": 0,
|
||||
"xBtns": 4,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL Admin",
|
||||
"bodyLen": 8067
|
||||
},
|
||||
{
|
||||
"name": "agents-archi",
|
||||
"http": 200,
|
||||
"fixed": 12,
|
||||
"overlaps": 0,
|
||||
"xBtns": 12,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA \u2014 Architecture Agents IA 3D",
|
||||
"bodyLen": 3649
|
||||
},
|
||||
{
|
||||
"name": "director-center",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": 0,
|
||||
"xBtns": 6,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA Director \u2014 Autonomous Center",
|
||||
"bodyLen": 2131
|
||||
},
|
||||
{
|
||||
"name": "tools-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL Tools Hub \u2014 \u00c9cosyst\u00e8me Souverain",
|
||||
"bodyLen": 11188
|
||||
},
|
||||
{
|
||||
"name": "enterprise-model",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": 0,
|
||||
"xBtns": 6,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL Enterprise Model",
|
||||
"bodyLen": 512
|
||||
},
|
||||
{
|
||||
"name": "wevia-backoffice",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": 0,
|
||||
"xBtns": 1,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL \u00b7 WEVIA Backoffice",
|
||||
"bodyLen": 206
|
||||
},
|
||||
{
|
||||
"name": "dg-command-center",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": 0,
|
||||
"xBtns": 1,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL \u00b7 DG Command Center \u2014 Real-time Pilotage",
|
||||
"bodyLen": 4371
|
||||
},
|
||||
{
|
||||
"name": "dmaic-tracker-NEW",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "DMAIC Tracker NEW \u2014 WEVAL Lean 6\u03c3",
|
||||
"bodyLen": 1271
|
||||
},
|
||||
{
|
||||
"name": "ethica-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "Ethica Hub \u2014 WEVAL",
|
||||
"bodyLen": 2985
|
||||
},
|
||||
{
|
||||
"name": "wevads-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "WEVADS Hub \u2014 WEVAL",
|
||||
"bodyLen": 808
|
||||
},
|
||||
{
|
||||
"name": "agents-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "Agents Hub \u2014 WEVAL",
|
||||
"bodyLen": 959
|
||||
},
|
||||
{
|
||||
"name": "email-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "Email MTA Hub \u2014 WEVAL",
|
||||
"bodyLen": 1918
|
||||
},
|
||||
{
|
||||
"name": "anthropic-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "Anthropic Hub \u2014 WEVAL",
|
||||
"bodyLen": 627
|
||||
},
|
||||
{
|
||||
"name": "cloudflare-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "Cloudflare Hub \u2014 WEVAL",
|
||||
"bodyLen": 2041
|
||||
},
|
||||
{
|
||||
"name": "office-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "Office 365 Hub \u2014 WEVAL",
|
||||
"bodyLen": 2162
|
||||
},
|
||||
{
|
||||
"name": "gpu-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "GPU Free Hub \u2014 WEVAL",
|
||||
"bodyLen": 2245
|
||||
},
|
||||
{
|
||||
"name": "monitoring-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "Monitoring Hub \u2014 WEVAL",
|
||||
"bodyLen": 1948
|
||||
},
|
||||
{
|
||||
"name": "security-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": 0,
|
||||
"xBtns": 4,
|
||||
"doctrine": true,
|
||||
"title": "Security Hub \u2014 WEVAL",
|
||||
"bodyLen": 944
|
||||
}
|
||||
]
|
||||
}
|
||||
178
api/v_opus_mass_overlap_20260421-150832/report.json
Normal file
178
api/v_opus_mass_overlap_20260421-150832/report.json
Normal file
@@ -0,0 +1,178 @@
|
||||
{
|
||||
"ts": "20260421-150832",
|
||||
"results": [
|
||||
{
|
||||
"name": "wevia-erp-unified",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 2,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wepredict",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": [],
|
||||
"x_buttons": 64,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "weval-technology-platform",
|
||||
"http": 200,
|
||||
"fixed": 6,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "v80-drawer",
|
||||
"b": "v80-header"
|
||||
}
|
||||
],
|
||||
"x_buttons": 4,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevia-master",
|
||||
"http": 200,
|
||||
"fixed": 1,
|
||||
"overlaps": [],
|
||||
"x_buttons": 1,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "all-ia-hub",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": [],
|
||||
"x_buttons": 0,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevia-orchestrator",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 1,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevcode",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 2,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevia-unified-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": [],
|
||||
"x_buttons": 2,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevia-training",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": [],
|
||||
"x_buttons": 5,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wiki",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "wtp-carto-banner",
|
||||
"b": "opus-honest-badge"
|
||||
}
|
||||
],
|
||||
"x_buttons": 0,
|
||||
"doctrine": false
|
||||
},
|
||||
{
|
||||
"name": "cartographie-screens",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 1,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "orphans-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": [],
|
||||
"x_buttons": 3,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "admin",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": [],
|
||||
"x_buttons": 4,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "agents-archi",
|
||||
"http": 200,
|
||||
"fixed": 13,
|
||||
"overlaps": [],
|
||||
"x_buttons": 12,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "director-center",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": [],
|
||||
"x_buttons": 6,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "tools-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 3,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "enterprise-model",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": [],
|
||||
"x_buttons": 6,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevia-backoffice",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": [],
|
||||
"x_buttons": 1,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "dg-command-center",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": [],
|
||||
"x_buttons": 1,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "dmaic-tracker-NEW",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 2,
|
||||
"doctrine": true
|
||||
}
|
||||
],
|
||||
"total_overlaps": 2,
|
||||
"pages_ok": 18,
|
||||
"total_x_buttons": 120
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
require_once __DIR__."/wevia-infra-intercept.php";
|
||||
header("Content-Type: application/json");
|
||||
header("Access-Control-Allow-Origin: *");
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
$secrets=[];foreach(file("/etc/weval/secrets.env",2|4) as $l){if(strpos($l,"=")!==false){list($k,$v)=explode("=",$l,2);$secrets[trim($k)]=trim($v," \t\"'");}}
|
||||
require_once __DIR__ . '/_secrets.php';
|
||||
/**
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
/**
|
||||
* ============================================================
|
||||
* weval-technology-platform-api.php v2 — WTP complete backend
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
// ═══ INSTRUCTION #1 ABSOLUE (11-AVR-2026) ═══
|
||||
// WEVIA Master = EXECUTOR AUTONOME. Fait TOUT seul.
|
||||
// Claude Opus = AMBRE (superviseur non-technique)
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
// WEVAL Arena Auto-Wire — Auto-discover, auto-signup, auto-renew, auto-scale
|
||||
header("Content-Type: application/json");
|
||||
header("Access-Control-Allow-Origin: *");
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
// WEVIA Brain Orchestrator v1 — Intelligent Multi-Agent Dispatch
|
||||
// Analyses intent → selects best agents → dispatches → aggregates
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
// WEVIA DeepSeek Proxy v2 — 12+ models FREE via SambaNova + Gemini + Groq
|
||||
header("Content-Type: application/json");
|
||||
header("Access-Control-Allow-Origin: *");
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
// WEVIA DeepSeek Web API — Proxy vers chat.deepseek.com ILLIMITÉ
|
||||
// Modes: instant, deepthink, search
|
||||
// Port interne: 8901
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
|
||||
// === AMBRE-V1 · truth registry dynamic snapshot (doctrine #4) · FIX v4 aggregator primary ===
|
||||
if (!function_exists('__ambre_truth_snapshot')) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
$_RAW=file_get_contents("php://input");$_JIN=json_decode($_RAW,true);$_mam=$_JIN["message"]??"";
|
||||
@include __DIR__ . '/wevia-opus-arch-early.php'; // V41 before Resolver
|
||||
@include __DIR__ . '/ambre-early-doc-gen.php'; // AMBRE 2026-04-21 file generation priority
|
||||
// === OPUS4-AUTOWIRE-EARLY-v2 (17avr 02h20) ===
|
||||
// Priority handler : master add/list intent bypass tout le pipeline (fast-path greedy cause racine)
|
||||
// Zero regression : return silencieux si syntaxe pas matchee
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
header("Content-Type: application/json");
|
||||
header("Access-Control-Allow-Origin: *");
|
||||
if ($_SERVER["REQUEST_METHOD"]==="OPTIONS"){header("Access-Control-Allow-Headers: Content-Type");exit;}
|
||||
|
||||
@@ -36,8 +36,8 @@ function wpl_match_intent($message) {
|
||||
foreach ($stubs as $s) {
|
||||
// WAVE 203 FINAL: handlers (file_dump.php, scan_file.php etc.) have exit/echo
|
||||
// and would KILL the loader script. Pre-filter by signature: only files
|
||||
// whose FIRST 200 bytes contain "return array" are valid stubs.
|
||||
$head = @file_get_contents($s, false, null, 0, 300);
|
||||
// whose FIRST 1000 bytes contain "return array" are valid stubs.
|
||||
$head = @file_get_contents($s, false, null, 0, 1000);
|
||||
if (!$head || strpos($head, 'return array') === false) continue;
|
||||
// Now safe to include (guarded by ob_start for any residual echo)
|
||||
ob_start();
|
||||
@@ -99,7 +99,7 @@ function wpl_execute_intent($info) {
|
||||
$cmd = str_replace('{MSG}', $esc, $cmd);
|
||||
}
|
||||
$start = microtime(true);
|
||||
$out = @shell_exec("timeout 20 $cmd 2>&1");
|
||||
$out = @shell_exec("timeout 20 bash -c " . escapeshellarg($cmd) . " 2>&1"); // WAVE 210 bash -c wrapper for builtins (cd, source, etc.)
|
||||
$ms = round((microtime(true) - $start) * 1000);
|
||||
$text = trim((string)$out);
|
||||
if (strlen($text) > 1500) $text = substr($text, 0, 1500) . "\n... (tronque)";
|
||||
|
||||
37
api/wevia-sanitizer-guard.php
Normal file
37
api/wevia-sanitizer-guard.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
// WEVIA Sanitizer Guard — Wave 206 · 2026-04-21
|
||||
// Centralized defense-in-depth output sanitizer for public endpoints.
|
||||
// include via: @require_once __DIR__.'/wevia-sanitizer-guard.php';
|
||||
// Impact: auto ob_start at include time; all echo/die output passes through wevia_sanitize_public_v2.
|
||||
// Zero modification required in downstream echo/die sites.
|
||||
|
||||
if (!function_exists('wevia_sanitize_public_v2')) {
|
||||
function wevia_sanitize_public_v2($t) {
|
||||
if (!is_string($t) || $t === '') return $t;
|
||||
static $bl = null;
|
||||
if ($bl === null) {
|
||||
$bl = [
|
||||
'Groq','Cerebras','SambaNova','Ollama','DeepSeek','Mistral','Together','Replicate',
|
||||
'vLLM','Qwen','NVIDIA NIM','Cohere','OpenRouter','Anthropic','Gemini','Alibaba',
|
||||
'HuggingFace','Hugging Face','Nvidia NIM','ZhiPu','Claude',
|
||||
'/opt/','/var/www/','/etc/',
|
||||
'admin123','YacineWeval','ymahboub','ghp_','gho_','ghu_',
|
||||
'49222','11434','4001','3900','5890','11435',
|
||||
'204.168','95.216','151.80','10.1.0','127.0.0.1',
|
||||
'root@','ssh -p','docker ps','nginx','postgresql','crontab','systemctl',
|
||||
'llama-3.3-70b','Qwen3','gemma2','mistral-small','granite4','qwen2.5','command-r',
|
||||
];
|
||||
}
|
||||
foreach ($bl as $w) $t = str_ireplace($w, 'WEVIA Engine', $t);
|
||||
$t = preg_replace('/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/', '[infrastructure securisee]', $t);
|
||||
$t = preg_replace('/\b(sk-[a-zA-Z0-9]{20,}|xoxb-[a-zA-Z0-9-]{20,}|eyJ[a-zA-Z0-9_.-]{50,})\b/', '[token securise]', $t);
|
||||
$t = preg_replace('/\b(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}\b/', '[token securise]', $t);
|
||||
return $t;
|
||||
}
|
||||
}
|
||||
|
||||
// Install output buffer guard (idempotent)
|
||||
if (!headers_sent() && !defined('WEVIA_SANITIZER_V2_ACTIVE')) {
|
||||
define('WEVIA_SANITIZER_V2_ACTIVE', 1);
|
||||
@ob_start(function($buffer) { return wevia_sanitize_public_v2($buffer); });
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
/**
|
||||
* WEVIA Sovereign Intelligence Module v1.0 — 31 mars 2026
|
||||
*
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php'; // WAVE 206 sanitizer guard
|
||||
|
||||
// ═══ INSTRUCTION #1 ABSOLUE (11-AVR-2026) ═══
|
||||
// WEVIA Master = EXECUTOR AUTONOME. Fait TOUT seul.
|
||||
// Claude Opus = AMBRE (superviseur non-technique)
|
||||
|
||||
@@ -11,7 +11,7 @@ return array (
|
||||
5 => 'list intents',
|
||||
6 => 'dispatch intent',
|
||||
),
|
||||
'cmd' => 'echo intents list - 1263 intents wired total (310 arena declared) - 1308 stubs wired-pending 1137 executed - top intents: agents_count doctrine_status v83_autonomie_status wevia_ping wevia_status_global wtp_entry_point sitemap_exhaustive visual_mgmt_drillable nl_autowire v89_batch_real - dispatcher 4 injection points: opus-inject-early.php + opus-inject-top.php + opus-inject-chatbot.php + opus5-inject-stub-dispatcher.php - trigger tokens matching premier token match priority - pendingloader auto-discover wired-pending/',
|
||||
'cmd' => 'echo intents list - 1263 intents wired total [310 arena declared] - 1308 stubs wired-pending 1137 executed - top intents: agents_count doctrine_status v83_autonomie_status wevia_ping wevia_status_global wtp_entry_point sitemap_exhaustive visual_mgmt_drillable nl_autowire v89_batch_real - dispatcher 4 injection points: opus-inject-early.php + opus-inject-top.php + opus-inject-chatbot.php + opus5-inject-stub-dispatcher.php - trigger tokens matching premier token match priority - pendingloader auto-discover wired-pending/',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-19T16:51:57+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
|
||||
BIN
generated/gen-20260421-154415-2094903.jpg
Normal file
BIN
generated/gen-20260421-154415-2094903.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
13
generated/wevia-Test-WEVIA-PDF-20260421-132444-4ffe9c.md
Normal file
13
generated/wevia-Test-WEVIA-PDF-20260421-132444-4ffe9c.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Test WEVIA PDF
|
||||
|
||||
## Introduction
|
||||
|
||||
Ceci est un test de generation PDF via pandoc + wkhtmltopdf.
|
||||
|
||||
- Point 1
|
||||
- Point 2
|
||||
- Point 3
|
||||
|
||||
## Conclusion
|
||||
|
||||
Generation **ok**.
|
||||
BIN
generated/wevia-Test-WEVIA-PDF-20260421-132444-4ffe9c.pdf
Normal file
BIN
generated/wevia-Test-WEVIA-PDF-20260421-132444-4ffe9c.pdf
Normal file
Binary file not shown.
BIN
generated/wevia-Test-WEVIA-Word-20260421-132445-edfdb4.docx
Normal file
BIN
generated/wevia-Test-WEVIA-Word-20260421-132445-edfdb4.docx
Normal file
Binary file not shown.
15
generated/wevia-Test-WEVIA-Word-20260421-132445-edfdb4.md
Normal file
15
generated/wevia-Test-WEVIA-Word-20260421-132445-edfdb4.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Test WEVIA Word
|
||||
|
||||
## Section 1
|
||||
|
||||
Texte avec **gras** et *italique*.
|
||||
|
||||
| A | B | C |
|
||||
|---|---|---|
|
||||
| 1 | 2 | 3 |
|
||||
|
||||
## Section 2
|
||||
|
||||
Bullet list:
|
||||
- First
|
||||
- Second
|
||||
39
generated/wevia-WEVAL-pitch-deck-20260421-133524-85b436.md
Normal file
39
generated/wevia-WEVAL-pitch-deck-20260421-133524-85b436.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# WEVAL pitch deck
|
||||
|
||||
# WEVAL Pitch Deck
|
||||
|
||||
## # Introduction
|
||||
* WEVAL est une plateforme de gestion de patrimoine numérique
|
||||
* Créée pour aider les particuliers et les entreprises à gérer leurs actifs numériques de manière sécurisée et efficace
|
||||
* Objectif : offrir une solution complète pour la gestion de patrimoine numérique
|
||||
|
||||
## # Problème
|
||||
* Les actifs numériques (cryptomonnaies, NFT, etc.) sont difficiles à gérer
|
||||
* Risque de perte ou de vol de clés privées
|
||||
* Complexité pour suivre les variations de valeur
|
||||
* Besoin d'une solution simple et sécurisée
|
||||
|
||||
## # Solution
|
||||
* WEVAL propose une plateforme sécurisée pour la gestion de patrimoine numérique
|
||||
* Fonctionnalités :
|
||||
+ Gestion de clés privées sécurisées
|
||||
+ Suivi des variations de valeur en temps réel
|
||||
+ Alertes pour les transactions importantes
|
||||
+ Intégration avec les principaux échanges et plateformes
|
||||
|
||||
## # Avantages
|
||||
* Sécurité renforcée pour les actifs numériques
|
||||
* Simplification de la gestion de patrimoine numérique
|
||||
* Meilleure visibilité sur les performances des actifs
|
||||
* Possibilité de prendre des décisions éclairées
|
||||
|
||||
## # Cible
|
||||
* Particuliers et entreprises ayant des actifs numériques
|
||||
* Investisseurs et traders de cryptomonnaies et NFT
|
||||
* Professionnels de la finance et de l'immobilier numérique
|
||||
|
||||
## # Projet
|
||||
* Développement actif de la plateforme
|
||||
* Intégration avec les principaux échanges et plateformes
|
||||
* Mise en place d'une équipe de support et de formation
|
||||
* Lancement commercial prévu dans les 6 mois
|
||||
BIN
generated/wevia-WEVAL-pitch-deck-20260421-133524-85b436.pptx
Normal file
BIN
generated/wevia-WEVAL-pitch-deck-20260421-133524-85b436.pptx
Normal file
Binary file not shown.
14
generated/wevia-WEVIA-Presentation-20260421-132446-5df203.md
Normal file
14
generated/wevia-WEVIA-Presentation-20260421-132446-5df203.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# WEVIA Presentation
|
||||
|
||||
# Slide 1
|
||||
|
||||
Point 1
|
||||
|
||||
# Slide 2
|
||||
|
||||
- Bullet A
|
||||
- Bullet B
|
||||
|
||||
# Slide 3
|
||||
|
||||
Conclusion
|
||||
BIN
generated/wevia-WEVIA-Presentation-20260421-132446-5df203.pptx
Normal file
BIN
generated/wevia-WEVIA-Presentation-20260421-132446-5df203.pptx
Normal file
Binary file not shown.
@@ -0,0 +1,76 @@
|
||||
from flask import Flask, request, jsonify
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
|
||||
app = Flask(__name__)
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
|
||||
db = SQLAlchemy(app)
|
||||
|
||||
class User(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
name = db.Column(db.String(100), nullable=False)
|
||||
email = db.Column(db.String(100), nullable=False, unique=True)
|
||||
|
||||
def to_dict(self):
|
||||
return {'id': self.id, 'name': self.name, 'email': self.email}
|
||||
|
||||
class Book(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
title = db.Column(db.String(100), nullable=False)
|
||||
author = db.Column(db.String(100), nullable=False)
|
||||
|
||||
def to_dict(self):
|
||||
return {'id': self.id, 'title': self.title, 'author': self.author}
|
||||
|
||||
@app.route('/users', methods=['GET'])
|
||||
def get_users():
|
||||
users = User.query.all()
|
||||
return jsonify([user.to_dict() for user in users])
|
||||
|
||||
@app.route('/users', methods=['POST'])
|
||||
def create_user():
|
||||
data = request.json
|
||||
user = User(name=data['name'], email=data['email'])
|
||||
db.session.add(user)
|
||||
db.session.commit()
|
||||
return jsonify(user.to_dict()), 201
|
||||
|
||||
@app.route('/books', methods=['GET'])
|
||||
def get_books():
|
||||
books = Book.query.all()
|
||||
return jsonify([book.to_dict() for book in books])
|
||||
|
||||
@app.route('/books', methods=['POST'])
|
||||
def create_book():
|
||||
data = request.json
|
||||
book = Book(title=data['title'], author=data['author'])
|
||||
db.session.add(book)
|
||||
db.session.commit()
|
||||
return jsonify(book.to_dict()), 201
|
||||
|
||||
@app.route('/users/<int:user_id>', methods=['GET'])
|
||||
def get_user(user_id):
|
||||
user = User.query.get(user_id)
|
||||
if user is None:
|
||||
return jsonify({'error': 'User not found'}), 404
|
||||
return jsonify(user.to_dict())
|
||||
|
||||
@app.route('/books/<int:book_id>', methods=['GET'])
|
||||
def get_book(book_id):
|
||||
book = Book.query.get(book_id)
|
||||
if book is None:
|
||||
return jsonify({'error': 'Book not found'}), 404
|
||||
return jsonify(book.to_dict())
|
||||
|
||||
if __name__ == '__main__':
|
||||
with app.app_context():
|
||||
db.create_all()
|
||||
app.run(debug=True)
|
||||
|
||||
Ce code crée une API REST avec Flask et SQLAlchemy pour gérer des utilisateurs et des livres. Les routes disponibles sont :
|
||||
|
||||
- `/users` : récupérer tous les utilisateurs, créer un nouveau utilisateur
|
||||
- `/books` : récupérer tous les livres, créer un nouveau livre
|
||||
- `/users/<int:user_id>` : récupérer un utilisateur par ID
|
||||
- `/books/<int:book_id>` : récupérer un livre par ID
|
||||
|
||||
Les données sont stockées dans une base de données SQLite. Les utilisateurs et les livres sont représentés par des objets Python qui peuvent être convertis en dictionnaires pour être envoyés dans les réponses HTTP.
|
||||
@@ -0,0 +1,18 @@
|
||||
import React, { useState } from 'react';
|
||||
|
||||
function BoutonClickCounter() {
|
||||
const [compteur, setCompteur] = useState(0);
|
||||
|
||||
const incrementerCompteur = () => {
|
||||
setCompteur(compteur + 1);
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<p>Vous avez cliqué {compteur} fois</p>
|
||||
<button onClick={incrementerCompteur}>Cliquez ici</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default BoutonClickCounter;
|
||||
@@ -0,0 +1,31 @@
|
||||
# Simple Python Script
|
||||
|
||||
# Fonction pour calculer la somme des nombres de 1 à n
|
||||
def somme(n):
|
||||
return sum(range(1, n+1))
|
||||
|
||||
# Fonction pour afficher un message
|
||||
def afficher_message(message):
|
||||
print(message)
|
||||
|
||||
# Fonction pour calculer la factorielle de n
|
||||
def factorielle(n):
|
||||
if n == 0:
|
||||
return 1
|
||||
else:
|
||||
return n * factorielle(n-1)
|
||||
|
||||
# Programme principal
|
||||
def main():
|
||||
# Demander à l'utilisateur de saisir un nombre
|
||||
nombre = int(input("Saisir un nombre : "))
|
||||
|
||||
# Afficher la somme des nombres de 1 à n
|
||||
afficher_message(f"La somme des nombres de 1 à {nombre} est : {somme(nombre)}")
|
||||
|
||||
# Afficher la factorielle de n
|
||||
afficher_message(f"La factorielle de {nombre} est : {factorielle(nombre)}")
|
||||
|
||||
# Exécuter la fonction principale
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Binary file not shown.
@@ -0,0 +1,99 @@
|
||||
# contrat de service B2B
|
||||
|
||||
**CONTRAT DE SERVICE B2B**
|
||||
|
||||
**Entre**
|
||||
|
||||
* **Nom de l'entreprise du client** : [Nom de l'entreprise du client]
|
||||
* **Adresse du client** : [Adresse du client]
|
||||
* **Code postal du client** : [Code postal du client]
|
||||
* **Ville du client** : [Ville du client]
|
||||
* **Numéro de téléphone du client** : [Numéro de téléphone du client]
|
||||
* **Adresse e-mail du client** : [Adresse e-mail du client]
|
||||
|
||||
**Et**
|
||||
|
||||
* **Nom de l'entreprise du prestataire** : [Nom de l'entreprise du prestataire]
|
||||
* **Adresse du prestataire** : [Adresse du prestataire]
|
||||
* **Code postal du prestataire** : [Code postal du prestataire]
|
||||
* **Ville du prestataire** : [Ville du prestataire]
|
||||
* **Numéro de téléphone du prestataire** : [Numéro de téléphone du prestataire]
|
||||
* **Adresse e-mail du prestataire** : [Adresse e-mail du prestataire]
|
||||
|
||||
**Objet du contrat**
|
||||
|
||||
Le présent contrat a pour objet de définir les termes et conditions de la prestation de services entre [Nom de l'entreprise du prestataire] et [Nom de l'entreprise du client].
|
||||
|
||||
**Article 1 : Définitions**
|
||||
|
||||
* **Services** : Les services que [Nom de l'entreprise du prestataire] s'engage à fournir à [Nom de l'entreprise du client] sont définis dans la liste ci-dessous :
|
||||
+ [Liste des services]
|
||||
* **Période de prestation** : La période de prestation commence le [Date de début] et se termine le [Date de fin]
|
||||
* **Tarifs** : Les tarifs sont fixés à [Tarif] par [Unité de mesure]
|
||||
|
||||
**Article 2 : Obligations du prestataire**
|
||||
|
||||
* **Fournir les services** : [Nom de l'entreprise du prestataire] s'engage à fournir les services définis dans l'article 1.
|
||||
* **Rester à jour** : [Nom de l'entreprise du prestataire] s'engage à rester à jour sur les dernières technologies et méthodes pour assurer la qualité des services.
|
||||
* **Résoudre les problèmes** : [Nom de l'entreprise du prestataire] s'engage à résoudre les problèmes techniques ou autres qui pourraient survenir pendant la prestation des services.
|
||||
|
||||
**Article 3 : Obligations du client**
|
||||
|
||||
* **Fournir les informations** : [Nom de l'entreprise du client] s'engage à fournir les informations nécessaires à la prestation des services.
|
||||
* **Collaborer avec le prestataire** : [Nom de l'entreprise du client] s'engage à collaborer avec [Nom de l'entreprise du prestataire] pour assurer la réussite des services.
|
||||
* **Payer les factures** : [Nom de l'entreprise du client] s'engage à payer les factures émises par [Nom de l'entreprise du prestataire] dans les délais fixés.
|
||||
|
||||
**Article 4 : Paiement**
|
||||
|
||||
* **Tarifs** : Les tarifs sont fixés à [Tarif] par [Unité de mesure].
|
||||
* **Facturation** : Les factures seront émises par [Nom de l'entreprise du prestataire] et devront être payées par [Nom de l'entreprise du client] dans les 30 jours suivant la date de facture.
|
||||
* **Pénalités** : En cas de retard de paiement, [Nom de l'entreprise du client] sera facturé des pénalités à hauteur de [Pourcentage] par mois.
|
||||
|
||||
**Article 5 : Confidentialité**
|
||||
|
||||
* **Non-divulgation** : Les parties s'engagent à ne pas divulguer les informations confidentielles échangées dans le cadre de la prestation des services.
|
||||
* **Protection des données** : Les parties s'engagent à respecter les réglementations en vigueur concernant la protection des données personnelles.
|
||||
|
||||
**Article 6 : Droit applicable**
|
||||
|
||||
* **Loi applicable** : Le présent contrat est soumis à la loi française.
|
||||
* **Juridiction** : Toute contestation résultant de l'interprétation ou de l'exécution du présent contrat sera soumise aux tribunaux compétents de [Ville].
|
||||
|
||||
**Article 7 : Durée**
|
||||
|
||||
* **Durée** : Le présent contrat est conclu pour une durée de [Durée] mois.
|
||||
* **Renouvellement** : Le présent contrat sera automatiquement renouvelé pour une durée de [Durée] mois, sauf dénonciation par l'une des parties 30 jours avant la fin de la période de prestation.
|
||||
|
||||
**Article 8 : Désistement**
|
||||
|
||||
* **Désistement** : L'une des parties peut se retirer du présent contrat en informant l'autre partie par écrit 30 jours avant la fin de la période de prestation.
|
||||
* **Résiliation** : En cas de non-respect des obligations, l'une des parties peut résilier le présent contrat immédiatement.
|
||||
|
||||
**Article 9 : Modification**
|
||||
|
||||
* **Modification** : Les parties peuvent modifier le présent contrat par écrit, en y annexant ou en y supprimant des dispositions.
|
||||
* **Acceptation** : Les modifications seront considérées comme acceptées par l'autre partie si elle n'a pas expressément refusé dans les 15 jours suivant la réception de la proposition de modification.
|
||||
|
||||
**Article 10 : Acceptation**
|
||||
|
||||
* **Acceptation** : Le présent contrat sera considéré comme accepté par l'une des parties si elle n'a pas expressément refusé dans les 15 jours suivant la réception de la proposition de contrat.
|
||||
|
||||
**Article 11 : Signature**
|
||||
|
||||
* **Signature** : Le présent contrat a été signé en deux exemplaires originaux, l'un pour chaque partie.
|
||||
|
||||
---
|
||||
|
||||
**Signature du client**
|
||||
|
||||
* **Nom du représentant** : [Nom du représentant]
|
||||
* **Fonction** : [Fonction]
|
||||
* **Date** : [Date]
|
||||
|
||||
---
|
||||
|
||||
**Signature du prestataire**
|
||||
|
||||
* **Nom du représentant** : [Nom du représentant]
|
||||
* **Fonction** : [Fonction]
|
||||
* **Date** : [Date]
|
||||
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300">
|
||||
<rect x="50" y="50" width="300" height="200" rx="20" fill="#34C759" />
|
||||
<text x="170" y="150" font-size="120" font-family="Arial" fill="#FFFFFF">W</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 226 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300">
|
||||
<rect x="100" y="100" width="200" height="200" fill="#00FF00" rx="20"/>
|
||||
<text x="150" y="150" font-size="50" font-family="Arial" fill="#FFFFFF">W</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 226 B |
@@ -0,0 +1,11 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300">
|
||||
<rect x="50" y="50" width="300" height="200" rx="20" fill="#333" />
|
||||
<circle cx="200" cy="150" r="50" fill="#66CC00" />
|
||||
<path d="M 100 150 L 150 200 L 200 150 L 150 100 L 100 150" stroke="#FF9900" stroke-width="5" fill="none" />
|
||||
<path d="M 250 150 L 300 200 L 250 150" stroke="#FF0000" stroke-width="5" fill="none" />
|
||||
<ellipse cx="150" cy="50" rx="30" ry="20" fill="#0000FF" />
|
||||
<ellipse cx="250" cy="50" rx="30" ry="20" fill="#0000FF" />
|
||||
<text x="120" y="220" font-size="24" fill="#FFFFFF" text-anchor="middle">IA</text>
|
||||
<text x="280" y="220" font-size="24" fill="#FFFFFF" text-anchor="middle">FUTUR</text>
|
||||
<text x="180" y="280" font-size="24" fill="#FFFFFF" text-anchor="middle">ISTE</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 778 B |
@@ -0,0 +1,19 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300">
|
||||
<!-- Soleil -->
|
||||
<circle cx="200" cy="150" r="50" fill="#F2C464" />
|
||||
<circle cx="200" cy="150" r="40" fill="#F7DC6F" />
|
||||
<circle cx="200" cy="150" r="30" fill="#FFD700" />
|
||||
<circle cx="200" cy="150" r="20" fill="#FFFF00" />
|
||||
<circle cx="200" cy="150" r="10" fill="#FFFF00" />
|
||||
|
||||
<!-- Montagne -->
|
||||
<rect x="50" y="250" width="100" height="50" fill="#964B00" />
|
||||
<rect x="150" y="250" width="100" height="50" fill="#786C3B" />
|
||||
<rect x="250" y="250" width="100" height="50" fill="#786C3B" />
|
||||
<rect x="350" y="250" width="50" height="50" fill="#964B00" />
|
||||
|
||||
<!-- Nuages -->
|
||||
<ellipse cx="100" cy="50" rx="50" ry="20" fill="#ADD8E6" />
|
||||
<ellipse cx="300" cy="50" rx="50" ry="20" fill="#ADD8E6" />
|
||||
<ellipse cx="200" cy="100" rx="30" ry="10" fill="#ADD8E6" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 841 B |
7
generated/wevia-img-test-20260421-134843-069212.svg
Normal file
7
generated/wevia-img-test-20260421-134843-069212.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300">
|
||||
<rect x="50" y="50" width="300" height="200" rx="20" fill="#CCCCCC"/>
|
||||
<circle cx="200" cy="150" r="50" fill="#FF0000"/>
|
||||
<ellipse cx="100" cy="250" rx="70" ry="30" fill="#00FF00"/>
|
||||
<polygon points="300,100 350,100 325,150 300,100" fill="#0000FF"/>
|
||||
<line x1="150" y1="50" x2="250" y2="250" stroke="#FFFFFF" stroke-width="5"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 403 B |
42
generated/wevia-innovation-SaaS-20260421-133334-f2096b.md
Normal file
42
generated/wevia-innovation-SaaS-20260421-133334-f2096b.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# innovation SaaS
|
||||
|
||||
# Introduction à l'innovation SaaS
|
||||
|
||||
* Définition : SaaS (Software as a Service) est un modèle de distribution de logiciels en tant que service en ligne.
|
||||
* Avantages : accès à partir de n'importe où, mise à jour automatique, coût réduit.
|
||||
* Exemples : Google Drive, Microsoft Office 365, Salesforce.
|
||||
|
||||
# Les avantages de l'innovation SaaS
|
||||
|
||||
* **Flexibilité** : accès à partir de n'importe où et à tout moment.
|
||||
* **Coût réduit** : pas besoin d'achat initial de logiciels.
|
||||
* **Mise à jour automatique** : les logiciels sont mis à jour automatiquement.
|
||||
* **Échelle** : les SaaS peuvent s'adapter facilement à la croissance de l'entreprise.
|
||||
|
||||
# Les défis de l'innovation SaaS
|
||||
|
||||
* **Sécurité** : la sécurité est un problème majeur pour les SaaS.
|
||||
* **Dépendance** : les entreprises peuvent devenir trop dépendantes des SaaS.
|
||||
* **Intégration** : les SaaS peuvent ne pas s'intégrer facilement avec les systèmes existants.
|
||||
* **Coût** : les SaaS peuvent être chers à long terme.
|
||||
|
||||
# Les exemples d'innovation SaaS
|
||||
|
||||
* **CRM** : Salesforce, HubSpot.
|
||||
* **Gestion de projet** : Asana, Trello.
|
||||
* **Analyse de données** : Tableau, Power BI.
|
||||
* **Communication** : Slack, Microsoft Teams.
|
||||
|
||||
# Les tendances de l'innovation SaaS
|
||||
|
||||
* **Intelligence artificielle** : les SaaS intégrant l'IA pour améliorer l'expérience utilisateur.
|
||||
* **Cloud natif** : les SaaS conçus spécifiquement pour le cloud.
|
||||
* **Sécurité** : les SaaS mettant en avant la sécurité.
|
||||
* **Intégration** : les SaaS intégrant facilement avec les systèmes existants.
|
||||
|
||||
# Les conseils pour adopter l'innovation SaaS
|
||||
|
||||
* **Évaluer vos besoins** : définir vos besoins et vos objectifs.
|
||||
* **Choisir le bon SaaS** : sélectionner le SaaS qui répond à vos besoins.
|
||||
* **Mettre en place une stratégie** : mettre en place une stratégie pour l'adoption du SaaS.
|
||||
* **Suivre les mises à jour** : suivre les mises à jour et les améliorations du SaaS.
|
||||
BIN
generated/wevia-innovation-SaaS-20260421-133334-f2096b.pptx
Normal file
BIN
generated/wevia-innovation-SaaS-20260421-133334-f2096b.pptx
Normal file
Binary file not shown.
66
generated/wevia-lancement-produit-20260421-134411-0dcfbe.md
Normal file
66
generated/wevia-lancement-produit-20260421-134411-0dcfbe.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# lancement produit
|
||||
|
||||
# Lancement Produit
|
||||
|
||||
* Définition : Lancement produit est le processus de mise en marché d'un nouveau produit ou service
|
||||
* Objectifs :
|
||||
+ Générer des ventes et des revenus
|
||||
+ Augmenter la visibilité et la notoriété de la marque
|
||||
+ Créer une différenciation par rapport aux concurrents
|
||||
|
||||
# Préparation du Lancement
|
||||
|
||||
* Étapes clés :
|
||||
+ Développement du produit
|
||||
+ Création de la stratégie de marketing
|
||||
+ Planification de la campagne de lancement
|
||||
+ Ressources et budget alloués
|
||||
* Risques et défis :
|
||||
+ Délais de développement trop courts
|
||||
+ Budget insuffisant
|
||||
+ Résistance à l'innovation
|
||||
|
||||
# Stratégie de Marketing
|
||||
|
||||
* Canaux de communication :
|
||||
+ Médias sociaux
|
||||
+ Publicité en ligne et hors ligne
|
||||
+ Événements et expositions
|
||||
+ Influencer marketing
|
||||
* Messages clés :
|
||||
+ Valeur unique du produit
|
||||
+ Avantages par rapport aux concurrents
|
||||
+ Appel à l'action (CTA)
|
||||
|
||||
# Planification de la Campagne
|
||||
|
||||
* Calendrier de lancement :
|
||||
+ Date de lancement
|
||||
+ Période de promotion
|
||||
+ Échéancier de déploiement
|
||||
* Budget et ressources :
|
||||
+ Allocation de budget
|
||||
+ Équipe de lancement
|
||||
+ Partenaires et fournisseurs
|
||||
|
||||
# Exécution du Lancement
|
||||
|
||||
* Étapes clés :
|
||||
+ Lancement du produit
|
||||
+ Déploiement de la campagne de marketing
|
||||
+ Suivi et ajustement
|
||||
* Résultats attendus :
|
||||
+ Augmentation des ventes
|
||||
+ Amélioration de la visibilité et de la notoriété de la marque
|
||||
+ Retour sur investissement (ROI) positif
|
||||
|
||||
# Suivi et Évaluation
|
||||
|
||||
* Indicateurs de performance :
|
||||
+ Ventes et revenus
|
||||
+ Engagement et trafic sur les médias sociaux
|
||||
+ Retour sur investissement (ROI)
|
||||
* Ajustements et optimisations :
|
||||
+ Analyse des résultats
|
||||
+ Identification des opportunités d'amélioration
|
||||
+ Développement d'une stratégie de suivi et d'évaluation continue
|
||||
BIN
generated/wevia-lancement-produit-20260421-134411-0dcfbe.pptx
Normal file
BIN
generated/wevia-lancement-produit-20260421-134411-0dcfbe.pptx
Normal file
Binary file not shown.
30
generated/wevia-marketing-digital-20260421-134000-300b90.md
Normal file
30
generated/wevia-marketing-digital-20260421-134000-300b90.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# marketing digital
|
||||
|
||||
**Marketing Digital**
|
||||
|
||||
**Introduction**
|
||||
|
||||
Le marketing digital est l'une des stratégies marketing les plus efficaces pour atteindre les clients potentiels et augmenter la visibilité de votre marque. Il s'agit d'utiliser les technologies numériques pour promouvoir et vendre vos produits ou services.
|
||||
|
||||
**Définition du Marketing Digital**
|
||||
|
||||
* Le marketing digital est un ensemble de techniques et de stratégies utilisées pour atteindre et persuader les clients potentiels à travers les canaux numériques.
|
||||
* Il inclut l'utilisation de la publicité en ligne, des réseaux sociaux, du contenu de qualité, de la relation client, de la gestion des données et de l'analyse des performances.
|
||||
|
||||
**Avantages du Marketing Digital**
|
||||
|
||||
* **Flexibilité** : le marketing digital permet de cibler les clients potentiels en fonction de leurs intérêts, de leurs préférences et de leurs comportements.
|
||||
* **Mesurabilité** : il est possible de mesurer les performances du marketing digital grâce à des outils de suivi et d'analyse.
|
||||
* **Efficacité** : le marketing digital est souvent moins coûteux que les autres stratégies marketing.
|
||||
* **Personnalisation** : il est possible de personnaliser les messages et les offres en fonction des besoins et des préférences des clients.
|
||||
|
||||
**Exemples de Techniques de Marketing Digital**
|
||||
|
||||
* **Publicité en ligne** : les annonces publicitaires en ligne peuvent être ciblées en fonction des intérêts et des préférences des utilisateurs.
|
||||
* **Réseaux sociaux** : les réseaux sociaux peuvent être utilisés pour promouvoir les produits ou services, partager le contenu et engager les clients.
|
||||
* **Content Marketing** : la création de contenu de qualité peut aider à attirer et à retenir les clients potentiels.
|
||||
* **Email Marketing** : les campagnes de marketing par e-mail peuvent être utilisées pour promouvoir les produits ou services et maintenir la relation avec les clients.
|
||||
|
||||
**Conclusion**
|
||||
|
||||
Le marketing digital est une stratégie marketing puissante qui peut aider les entreprises à atteindre et à persuader les clients potentiels. Il est important de comprendre les avantages et les techniques du marketing digital pour développer une stratégie efficace.
|
||||
BIN
generated/wevia-marketing-digital-20260421-134000-300b90.pdf
Normal file
BIN
generated/wevia-marketing-digital-20260421-134000-300b90.pdf
Normal file
Binary file not shown.
50
generated/wevia-pitch-SaaS-20260421-134039-d2a696.md
Normal file
50
generated/wevia-pitch-SaaS-20260421-134039-d2a696.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# pitch SaaS
|
||||
|
||||
# Présentation du Pitch SaaS
|
||||
|
||||
* Présenter le produit ou le service SaaS
|
||||
* Décrire les fonctionnalités clés
|
||||
* Identifier le public cible et les besoins
|
||||
* Décrire la concurrence et la différenciation
|
||||
|
||||
# Étude de Marché
|
||||
|
||||
* Analyser les besoins du marché
|
||||
* Identifier les tendances et les opportunités
|
||||
* Déterminer la taille du marché potentiel
|
||||
* Recueillir des informations sur les concurrents
|
||||
|
||||
# Modèle Commercial
|
||||
|
||||
* Décrire le modèle de revenu (abonnement, paiement à l'usage, etc.)
|
||||
* Identifier les coûts fixes et variables
|
||||
* Déterminer le prix de vente optimal
|
||||
* Présenter les avantages financiers
|
||||
|
||||
# Avantages Clés
|
||||
|
||||
* Améliorer l'efficacité et la productivité
|
||||
* Réduire les coûts et les risques
|
||||
* Améliorer la prise de décision
|
||||
* Augmenter la satisfaction client
|
||||
|
||||
# Stratégie Marketing
|
||||
|
||||
* Présenter la stratégie de lancement
|
||||
* Identifier les canaux de distribution
|
||||
* Décrire les outils de marketing (SEO, publicité, etc.)
|
||||
* Présenter les objectifs de vente
|
||||
|
||||
# Projet de Développement
|
||||
|
||||
* Présenter les objectifs et les délais
|
||||
* Identifier les équipes et les ressources nécessaires
|
||||
* Décrire les étapes de développement
|
||||
* Présenter les risques et les opportunités
|
||||
|
||||
# Conclusion
|
||||
|
||||
* Résumer les points clés du pitch
|
||||
* Présenter la vision et la mission
|
||||
* Identifier les prochaines étapes
|
||||
* Appeler à l'action
|
||||
BIN
generated/wevia-pitch-SaaS-20260421-134039-d2a696.pptx
Normal file
BIN
generated/wevia-pitch-SaaS-20260421-134039-d2a696.pptx
Normal file
Binary file not shown.
71
generated/wevia-plan-Q2-2026-20260421-134404-3d8b3e.md
Normal file
71
generated/wevia-plan-Q2-2026-20260421-134404-3d8b3e.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# plan Q2 2026
|
||||
|
||||
**Plan Q2 2026**
|
||||
================
|
||||
|
||||
**Sommaire**
|
||||
-----------
|
||||
|
||||
* [Introduction](#introduction)
|
||||
* [Objectifs Q2 2026](#objectifs-q2-2026)
|
||||
* [Tâches et Responsabilités](#tâches-et-responsabilités)
|
||||
* [Calendrier de Q2 2026](#calendrier-de-q2-2026)
|
||||
* [Ressources et Budget](#ressources-et-budget)
|
||||
* [Suivi et Évaluation](#suivi-et-évaluation)
|
||||
|
||||
**Introduction**
|
||||
---------------
|
||||
|
||||
Le présent plan Q2 2026 vise à définir les objectifs, les tâches et les ressources nécessaires pour atteindre les objectifs stratégiques de l'entreprise au cours du deuxième trimestre de l'année 2026.
|
||||
|
||||
**Objectifs Q2 2026**
|
||||
-------------------
|
||||
|
||||
* **Objectif principal** : Renforcer la présence de l'entreprise sur le marché en augmentant la visibilité et la notoriété de la marque.
|
||||
* **Objectifs secondaires** :
|
||||
+ Lancer une nouvelle campagne marketing pour promouvoir les produits et services de l'entreprise.
|
||||
+ Améliorer la qualité des services clients en mettant en place un nouveau système de gestion des plaintes.
|
||||
+ Renforcer les relations avec les partenaires commerciaux pour augmenter les ventes.
|
||||
|
||||
**Tâches et Responsabilités**
|
||||
---------------------------
|
||||
|
||||
* **Tâches** :
|
||||
+ Lancement de la campagne marketing (responsable : Jean Dupont)
|
||||
+ Mise en place du nouveau système de gestion des plaintes (responsable : Marie Lebrun)
|
||||
+ Renforcement des relations avec les partenaires commerciaux (responsable : Pierre Martin)
|
||||
* **Responsabilités** :
|
||||
+ Jean Dupont : responsable de la campagne marketing
|
||||
+ Marie Lebrun : responsable de la mise en place du nouveau système de gestion des plaintes
|
||||
+ Pierre Martin : responsable du renforcement des relations avec les partenaires commerciaux
|
||||
|
||||
**Calendrier de Q2 2026**
|
||||
-------------------------
|
||||
|
||||
| Semaine | Tâche | Responsable |
|
||||
| --- | --- | --- |
|
||||
| 1-4 | Lancement de la campagne marketing | Jean Dupont |
|
||||
| 5-8 | Mise en place du nouveau système de gestion des plaintes | Marie Lebrun |
|
||||
| 9-12 | Renforcement des relations avec les partenaires commerciaux | Pierre Martin |
|
||||
|
||||
**Ressources et Budget**
|
||||
-------------------------
|
||||
|
||||
* **Ressources** :
|
||||
+ 2 employés supplémentaires pour la campagne marketing
|
||||
+ 1 employé pour la mise en place du nouveau système de gestion des plaintes
|
||||
+ 1 employé pour le renforcement des relations avec les partenaires commerciaux
|
||||
* **Budget** :
|
||||
+ 10 000 € pour la campagne marketing
|
||||
+ 5 000 € pour la mise en place du nouveau système de gestion des plaintes
|
||||
+ 8 000 € pour le renforcement des relations avec les partenaires commerciaux
|
||||
|
||||
**Suivi et Évaluation**
|
||||
-------------------------
|
||||
|
||||
* **Suivi** :
|
||||
+ Rendez-vous hebdomadaire avec les responsables pour suivre les progrès
|
||||
+ Rapport mensuel sur les avancées et les difficultés rencontrées
|
||||
* **Évaluation** :
|
||||
+ Évaluation finale des objectifs atteints
|
||||
+ Identification des améliorations à apporter pour les trimestres suivants
|
||||
BIN
generated/wevia-plan-Q2-2026-20260421-134404-3d8b3e.pdf
Normal file
BIN
generated/wevia-plan-Q2-2026-20260421-134404-3d8b3e.pdf
Normal file
Binary file not shown.
@@ -0,0 +1,81 @@
|
||||
# plan marketing WEVIA Q2 2026
|
||||
|
||||
# Plan Marketing WEVIA Q2 2026
|
||||
|
||||
## Introduction
|
||||
|
||||
Le plan marketing WEVIA Q2 2026 vise à renforcer la présence de l'entreprise sur le marché et à atteindre les objectifs de vente fixés pour la période. Ce plan est structuré en quatre axes principaux : communication, marketing numérique, événements et relations publiques.
|
||||
|
||||
### Objectifs
|
||||
|
||||
* Augmenter la visibilité de l'entreprise de 20% par rapport à la même période l'an passé
|
||||
* Générer 30% de nouveaux leads potentiels
|
||||
* Réduire le coût de acquisition de 15% par rapport à la même période l'an passé
|
||||
|
||||
## Communication
|
||||
|
||||
### Stratégie de Communication
|
||||
|
||||
* Renforcer la présence de l'entreprise sur les réseaux sociaux (LinkedIn, Twitter, Facebook)
|
||||
* Lancer une campagne de communication interne pour sensibiliser les employés à l'importance de la communication externe
|
||||
* Créer un contenu de qualité régulier (blog, vidéos, infographies)
|
||||
|
||||
### Bénéfices
|
||||
|
||||
* Augmenter la visibilité de l'entreprise
|
||||
* Renforcer la marque WEVIA
|
||||
* Améliorer la relation avec les clients et les prospects
|
||||
|
||||
## Marketing Numérique
|
||||
|
||||
### Stratégie de Marketing Numérique
|
||||
|
||||
* Lancer une campagne de marketing email pour les prospects et les clients existants
|
||||
* Créer un contenu de qualité régulier pour les réseaux sociaux et le blog
|
||||
* Améliorer la présence de l'entreprise sur Google Ads et LinkedIn Ads
|
||||
|
||||
### Bénéfices
|
||||
|
||||
* Augmenter la génération de leads
|
||||
* Renforcer la présence de l'entreprise sur le marché
|
||||
* Améliorer la rentabilité des campagnes de marketing
|
||||
|
||||
## Événements
|
||||
|
||||
### Stratégie d'Événements
|
||||
|
||||
* Organiser un événement de networking pour les clients et les prospects
|
||||
* Participer à des événements professionnels pour renforcer la présence de l'entreprise
|
||||
* Lancer une campagne de promotion pour les événements
|
||||
|
||||
### Bénéfices
|
||||
|
||||
* Renforcer la relation avec les clients et les prospects
|
||||
* Augmenter la visibilité de l'entreprise
|
||||
* Générer de nouveaux leads potentiels
|
||||
|
||||
## Relations Publiques
|
||||
|
||||
### Stratégie de Relations Publiques
|
||||
|
||||
* Lancer une campagne de communication pour les médias
|
||||
* Créer un contenu de qualité régulier pour les médias
|
||||
* Renforcer la présence de l'entreprise sur les plateformes de presse
|
||||
|
||||
### Bénéfices
|
||||
|
||||
* Augmenter la visibilité de l'entreprise
|
||||
* Renforcer la marque WEVIA
|
||||
* Améliorer la relation avec les médias
|
||||
|
||||
## Budget et Ressources
|
||||
|
||||
* Le budget alloué pour le plan marketing WEVIA Q2 2026 est de 150 000 €
|
||||
* Les ressources allouées pour le plan marketing sont les suivantes :
|
||||
+ Équipe de marketing : 2 personnes
|
||||
+ Équipe de communication : 1 personne
|
||||
+ Équipe de relations publiques : 1 personne
|
||||
|
||||
## Conclusion
|
||||
|
||||
Le plan marketing WEVIA Q2 2026 vise à renforcer la présence de l'entreprise sur le marché et à atteindre les objectifs de vente fixés pour la période. Ce plan est structuré en quatre axes principaux : communication, marketing numérique, événements et relations publiques. Les objectifs de ce plan sont clairs et les ressources allouées sont suffisantes pour atteindre ces objectifs. Nous sommes confiants que ce plan permettra à l'entreprise de réussir ses objectifs pour la période Q2 2026.
|
||||
Binary file not shown.
BIN
generated/wevia-plan-projet-20260421-133331-22e37e.docx
Normal file
BIN
generated/wevia-plan-projet-20260421-133331-22e37e.docx
Normal file
Binary file not shown.
74
generated/wevia-plan-projet-20260421-133331-22e37e.md
Normal file
74
generated/wevia-plan-projet-20260421-133331-22e37e.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# plan projet
|
||||
|
||||
# Plan Projet: Développement d'une Nouvelle Application
|
||||
|
||||
## 1. Introduction
|
||||
|
||||
Ce plan projet décrit les étapes et les objectifs clés pour la conception, le développement et la mise en production d'une nouvelle application. L'application sera conçue pour répondre aux besoins des utilisateurs et offrir une expérience utilisateur conviviale.
|
||||
|
||||
### 1.1 Contexte
|
||||
|
||||
L'application sera développée pour répondre à la demande croissante de services numériques dans le secteur de la santé. Elle sera conçue pour faciliter la communication entre les professionnels de la santé et les patients, ainsi que pour offrir des outils de gestion des données médicales.
|
||||
|
||||
### 1.2 Objectifs
|
||||
|
||||
* Développer une application conviviale et facile à utiliser
|
||||
* Offrir une expérience utilisateur personnalisée
|
||||
* Améliorer la communication entre les professionnels de la santé et les patients
|
||||
* Réduire les coûts de gestion des données médicales
|
||||
|
||||
## 2. Analyse des Besoins
|
||||
|
||||
### 2.1 Identification des Besoins
|
||||
|
||||
* Les professionnels de la santé ont besoin d'une plateforme pour partager des informations médicales avec les patients
|
||||
* Les patients ont besoin d'une plateforme pour accéder à leurs dossiers médicaux et pour communiquer avec les professionnels de la santé
|
||||
* Les gestionnaires de données ont besoin d'une plateforme pour gérer les données médicales de manière efficace
|
||||
|
||||
### 2.2 Analyse des Besoins
|
||||
|
||||
* Les utilisateurs ont besoin d'une interface utilisateur conviviale et facile à utiliser
|
||||
* Les utilisateurs ont besoin d'une sécurité robuste pour protéger les données sensibles
|
||||
* Les utilisateurs ont besoin d'une compatibilité avec les différents appareils et systèmes d'exploitation
|
||||
|
||||
## 3. Plan d'Action
|
||||
|
||||
### 3.1 Développement de l'Application
|
||||
|
||||
* Développer l'application en utilisant les technologies les plus récentes (par exemple, React, Node.js, MongoDB)
|
||||
* Conception de l'interface utilisateur conviviale et facile à utiliser
|
||||
* Développement de la sécurité robuste pour protéger les données sensibles
|
||||
|
||||
### 3.2 Test et Déploiement
|
||||
|
||||
* Tester l'application pour garantir sa stabilité et sa sécurité
|
||||
* Déployer l'application sur les serveurs et les bases de données appropriés
|
||||
* Mettre en place les mécanismes de maintenance et de mise à jour pour garantir la stabilité et la sécurité de l'application
|
||||
|
||||
## 4. Gestion des Ressources
|
||||
|
||||
### 4.1 Équipe de Développement
|
||||
|
||||
* Définir les rôles et les responsabilités de chaque membre de l'équipe de développement
|
||||
* Mettre en place les processus de communication et de collaboration pour garantir la réussite du projet
|
||||
|
||||
### 4.2 Budget
|
||||
|
||||
* Définir le budget pour le développement, le test et le déploiement de l'application
|
||||
* Mettre en place les mécanismes de gestion des coûts pour garantir la rentabilité du projet
|
||||
|
||||
## 5. Suivi et Évaluation
|
||||
|
||||
### 5.1 Plan de Suivi
|
||||
|
||||
* Définir les indicateurs de performance clés (KPI) pour mesurer la réussite du projet
|
||||
* Mettre en place les mécanismes de suivi pour garantir la conformité avec les plans et les objectifs du projet
|
||||
|
||||
### 5.2 Évaluation
|
||||
|
||||
* Évaluer la réussite du projet en fonction des KPI définis
|
||||
* Identifier les domaines d'amélioration pour garantir la réussite future des projets similaires
|
||||
|
||||
## 6. Conclusion
|
||||
|
||||
Ce plan projet décrit les étapes et les objectifs clés pour la conception, le développement et la mise en production d'une nouvelle application. L'application sera conçue pour répondre aux besoins des utilisateurs et offrir une expérience utilisateur conviviale. La réussite du projet dépendra de la collaboration efficace de l'équipe de développement, de la gestion des ressources et des mécanismes de suivi et d'évaluation.
|
||||
@@ -0,0 +1,37 @@
|
||||
# presentation SAP pour client pharma
|
||||
|
||||
# Présentation SAP pour Client Pharma
|
||||
|
||||
## Présentation de SAP
|
||||
* Système d'information de gestion intégré (ERP)
|
||||
* Développé par SAP SE
|
||||
* Utilisé par plus de 437 000 clients dans le monde
|
||||
* Intégration de toutes les fonctions de l'entreprise
|
||||
|
||||
## Avantages pour les entreprises pharmaceutiques
|
||||
* Amélioration de la gestion des stocks et de la chaîne d'approvisionnement
|
||||
* Meilleure gestion des données de qualité et de sécurité
|
||||
* Amélioration de la conformité aux réglementations
|
||||
* Augmentation de l'efficacité et de la productivité
|
||||
|
||||
## Fonctionnalités clés pour les entreprises pharmaceutiques
|
||||
* Gestion des produits
|
||||
* Gestion des stocks et de la chaîne d'approvisionnement
|
||||
* Gestion des données de qualité et de sécurité
|
||||
* Gestion des réglementations et des normes
|
||||
* Gestion des relations avec les fournisseurs et les clients
|
||||
|
||||
## Intégration avec les systèmes existants
|
||||
* Intégration avec les systèmes de gestion de la chaîne d'approvisionnement
|
||||
* Intégration avec les systèmes de gestion des données de qualité et de sécurité
|
||||
* Intégration avec les systèmes de gestion des réglementations et des normes
|
||||
|
||||
## Stratégie de déploiement
|
||||
* Analyse des besoins et définition de la stratégie
|
||||
* Développement d'un plan de déploiement
|
||||
* Formation et support à la mise en œuvre
|
||||
|
||||
## Coûts et avantages
|
||||
* Coûts de mise en œuvre et de maintenance
|
||||
* Avantages en termes d'efficacité et de productivité
|
||||
* Amélioration de la qualité et de la sécurité des produits
|
||||
Binary file not shown.
BIN
generated/wevia-procedure-20260421-134037-095f45.docx
Normal file
BIN
generated/wevia-procedure-20260421-134037-095f45.docx
Normal file
Binary file not shown.
57
generated/wevia-procedure-20260421-134037-095f45.md
Normal file
57
generated/wevia-procedure-20260421-134037-095f45.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# procedure
|
||||
|
||||
**PROCEDURE DE GESTION DE LA QUALITÉ**
|
||||
|
||||
**1. INTRODUCTION**
|
||||
|
||||
La qualité est un élément essentiel dans notre organisation, nous nous engageons à fournir des produits et services de haute qualité qui répondent aux attentes de nos clients.
|
||||
|
||||
**2. OBJECTIFS**
|
||||
|
||||
* Fournir des produits et services qui répondent aux normes de qualité établies
|
||||
* Renforcer la confiance de nos clients envers notre organisation
|
||||
* Améliorer continuellement nos processus et procédures pour atteindre les objectifs de qualité
|
||||
|
||||
**3. RESPONSABILITÉS**
|
||||
|
||||
* Le responsable de la qualité est chargé de la mise en œuvre et de la mise à jour de la procédure de gestion de la qualité
|
||||
* Les équipes de production et de service sont responsables de la mise en œuvre des normes de qualité
|
||||
* Les responsables de chaque département sont responsables de la conformité à la procédure de gestion de la qualité
|
||||
|
||||
**4. PROCÉDURE DE LA QUALITÉ**
|
||||
|
||||
### 4.1. Évaluation de la qualité
|
||||
|
||||
* Les produits et services sont évalués régulièrement pour s'assurer qu'ils répondent aux normes de qualité établies
|
||||
* Les résultats de l'évaluation sont analysés et des actions correctives sont prises si nécessaire
|
||||
|
||||
### 4.2. Contrôle de la qualité
|
||||
|
||||
* Les produits et services sont contrôlés avant leur livraison pour s'assurer qu'ils répondent aux normes de qualité établies
|
||||
* Les résultats du contrôle sont enregistrés et analysés pour identifier les domaines d'amélioration
|
||||
|
||||
### 4.3. Amélioration continue
|
||||
|
||||
* Les processus et procédures sont revus et mis à jour régulièrement pour améliorer la qualité
|
||||
* Les suggestions des employés et des clients sont collectées et analysées pour identifier les domaines d'amélioration
|
||||
|
||||
### 4.4. Formation et sensibilisation
|
||||
|
||||
* Les employés sont formés et sensibilisés aux normes de qualité et aux procédures de gestion de la qualité
|
||||
* Les clients sont informés des normes de qualité et des procédures de gestion de la qualité
|
||||
|
||||
**5. CONTRÔLE ET ÉVALUATION**
|
||||
|
||||
* La procédure de gestion de la qualité est évaluée régulièrement pour s'assurer qu'elle est efficace et qu'elle répond aux objectifs de qualité
|
||||
* Les résultats de l'évaluation sont analysés et des actions correctives sont prises si nécessaire
|
||||
|
||||
**6. MISE À JOUR**
|
||||
|
||||
* La procédure de gestion de la qualité est mise à jour régulièrement pour refléter les changements dans les normes de qualité et les procédures de gestion de la qualité
|
||||
* Les modifications apportées à la procédure de gestion de la qualité sont communiquées à tous les employés et clients concernés.
|
||||
|
||||
**Annexe**
|
||||
|
||||
* Liste des normes de qualité et des procédures de gestion de la qualité
|
||||
* Formulaire de suggestion pour les employés et les clients
|
||||
* Rôle et responsabilités des employés et des clients dans la gestion de la qualité.
|
||||
BIN
generated/wevia-procedure-achat-20260421-134406-6f44e1.docx
Normal file
BIN
generated/wevia-procedure-achat-20260421-134406-6f44e1.docx
Normal file
Binary file not shown.
78
generated/wevia-procedure-achat-20260421-134406-6f44e1.md
Normal file
78
generated/wevia-procedure-achat-20260421-134406-6f44e1.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# procedure achat
|
||||
|
||||
**PROCEDURE D'ACHAT**
|
||||
|
||||
**Introduction**
|
||||
|
||||
La procédure d'achat est un processus essentiel dans l'entreprise, qui vise à acquérir les biens et services nécessaires pour atteindre les objectifs stratégiques. Cette procédure est destinée à garantir que les achats sont effectués de manière transparente, équitable et responsable.
|
||||
|
||||
**Section 1 : Définition des besoins**
|
||||
|
||||
### 1.1. Identification des besoins
|
||||
|
||||
* L'identification des besoins est effectuée par le responsable de la fonctionnalité ou du service concerné.
|
||||
* Les besoins doivent être clairement définis et documentés.
|
||||
|
||||
### 1.2. Priorisation des besoins
|
||||
|
||||
* Les besoins sont priorisés en fonction de leur importance et de leur urgence.
|
||||
* La priorisation est effectuée en collaboration avec les parties prenantes concernées.
|
||||
|
||||
## Section 2 : Définition des critères d'évaluation
|
||||
|
||||
### 2.1. Définition des critères d'évaluation
|
||||
|
||||
* Les critères d'évaluation sont définis en fonction des besoins et des priorités identifiés.
|
||||
* Les critères doivent être clairs, précis et mesurables.
|
||||
|
||||
### 2.2. Exemples de critères d'évaluation
|
||||
|
||||
| Critère | Description |
|
||||
| --- | --- |
|
||||
| Qualité | Capacité du fournisseur à fournir des produits ou services de haute qualité. |
|
||||
| Prix | Coût total du produit ou service, y compris les coûts d'installation et de maintenance. |
|
||||
| Durabilité | Capacité du produit ou service à répondre aux besoins à long terme. |
|
||||
| Exigences légales | Capacité du fournisseur à répondre aux exigences légales et réglementaires. |
|
||||
|
||||
## Section 3 : Demande de cotation
|
||||
|
||||
### 3.1. Demande de cotation
|
||||
|
||||
* Une demande de cotation est envoyée aux fournisseurs sélectionnés.
|
||||
* La demande de cotation doit inclure les critères d'évaluation et les exigences spécifiques.
|
||||
|
||||
### 3.2. Exemple de demande de cotation
|
||||
|
||||
| Fournisseur | Demande de cotation |
|
||||
| --- | --- |
|
||||
| Fournisseur 1 | Prix : 10 000 €, Durabilité : 5 ans |
|
||||
| Fournisseur 2 | Prix : 12 000 €, Durabilité : 7 ans |
|
||||
| Fournisseur 3 | Prix : 15 000 €, Durabilité : 10 ans |
|
||||
|
||||
## Section 4 : Évaluation et sélection
|
||||
|
||||
### 4.1. Évaluation des offres
|
||||
|
||||
* Les offres sont évaluées en fonction des critères d'évaluation.
|
||||
* L'évaluation est effectuée par un comité d'experts.
|
||||
|
||||
### 4.2. Sélection du fournisseur
|
||||
|
||||
* Le fournisseur est sélectionné en fonction de la meilleure offre.
|
||||
* La sélection est effectuée en fonction des critères d'évaluation.
|
||||
|
||||
## Section 5 : Approbation et suivi
|
||||
|
||||
### 5.1. Approbation du contrat
|
||||
|
||||
* Le contrat est approuvé par le responsable de l'entreprise.
|
||||
* L'approbation est effectuée en fonction des critères d'évaluation.
|
||||
|
||||
### 5.2. Suivi de l'exécution
|
||||
|
||||
* L'exécution du contrat est suivie par le responsable de l'entreprise.
|
||||
* Le suivi est effectué en fonction des critères d'évaluation.
|
||||
|
||||
**Conclusion**
|
||||
|
||||
La procédure d'achat est un processus essentiel dans l'entreprise, qui vise à acquérir les biens et services nécessaires pour atteindre les objectifs stratégiques. Cette procédure est destinée à garantir que les achats sont effectués de manière transparente, équitable et responsable.
|
||||
BIN
generated/wevia-procedure-qualite-20260421-133522-7c9046.docx
Normal file
BIN
generated/wevia-procedure-qualite-20260421-133522-7c9046.docx
Normal file
Binary file not shown.
68
generated/wevia-procedure-qualite-20260421-133522-7c9046.md
Normal file
68
generated/wevia-procedure-qualite-20260421-133522-7c9046.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# procedure qualite
|
||||
|
||||
**PROCEDURE DE GESTION DE LA QUALITÉ**
|
||||
|
||||
**1. INTRODUCTION**
|
||||
|
||||
La qualité est un élément essentiel pour notre entreprise, nous nous engageons à fournir des produits et services de haute qualité à nos clients. Cette procédure décrit les principes et les procédures à suivre pour assurer la qualité de nos produits et services.
|
||||
|
||||
**2. OBJETIF**
|
||||
|
||||
L'objetif de cette procédure est de :
|
||||
|
||||
* Définir les principes et les procédures de qualité pour les produits et services de l'entreprise
|
||||
* Assurer la conformité aux normes et réglementations en vigueur
|
||||
* Améliorer continuellement la qualité des produits et services
|
||||
|
||||
**3. RESPONSABILITÉS**
|
||||
|
||||
* Le responsable qualité est chargé de la mise en œuvre et de la mise à jour de cette procédure
|
||||
* Les responsables de chaque département sont chargés de s'assurer que les produits et services de leur département répondent aux exigences de qualité
|
||||
* Les employés sont chargés de suivre cette procédure et de signaler tout problème de qualité
|
||||
|
||||
**4. PROCÉDURES**
|
||||
|
||||
### 4.1 Définition des exigences de qualité
|
||||
|
||||
* Les exigences de qualité sont définies en fonction des besoins des clients et des normes en vigueur
|
||||
* Les exigences de qualité sont documentées et mises à jour régulièrement
|
||||
|
||||
### 4.2 Contrôle de la qualité
|
||||
|
||||
* Les produits et services sont soumis à un contrôle de qualité avant leur livraison
|
||||
* Les résultats du contrôle de qualité sont documentés et analysés pour identifier les problèmes de qualité
|
||||
|
||||
### 4.3 Amélioration continue
|
||||
|
||||
* Les problèmes de qualité sont signalés et analysés pour identifier les causes
|
||||
* Les actions correctives sont mises en œuvre pour résoudre les problèmes de qualité
|
||||
* Les résultats de l'amélioration continue sont documentés et analysés pour évaluer l'efficacité des actions correctives
|
||||
|
||||
**5. CONTRÔLE ET ÉVALUATION**
|
||||
|
||||
La qualité de nos produits et services est contrôlée et évaluée régulièrement pour s'assurer que nous respectons les exigences de qualité. Les résultats de la contrôle et de l'évaluation sont documentés et analysés pour identifier les domaines d'amélioration.
|
||||
|
||||
**6. DOCUMENTATION**
|
||||
|
||||
Tous les documents relatifs à la qualité sont conservés dans un dossier spécifique et sont accessibles à tous les employés.
|
||||
|
||||
**7. MISE À JOUR**
|
||||
|
||||
Cette procédure est mise à jour régulièrement pour s'assurer qu'elle reste pertinente et efficace.
|
||||
|
||||
**TABLEAU 1 : PROCÉDURES DE QUALITÉ**
|
||||
|
||||
| Procédure | Responsable | Fréquence |
|
||||
| --- | --- | --- |
|
||||
| Définition des exigences de qualité | Responsable qualité | Annuel |
|
||||
| Contrôle de la qualité | Responsable qualité | Trimestriel |
|
||||
| Amélioration continue | Responsable qualité | Semestriel |
|
||||
|
||||
**TABLEAU 2 : RÉSULTATS DE LA CONTRÔLE ET DE L'ÉVALUATION**
|
||||
|
||||
| Date | Résultats | Actions correctives |
|
||||
| --- | --- | --- |
|
||||
| 2022-01-01 | 90% de satisfaction | Amélioration de la qualité des produits |
|
||||
| 2022-06-01 | 95% de satisfaction | Amélioration de la qualité des services |
|
||||
|
||||
Note : Ce document est une version de base et peut être adaptée et mise à jour en fonction des besoins spécifiques de votre entreprise.
|
||||
BIN
generated/wevia-rapport-20260421-134003-8be553.docx
Normal file
BIN
generated/wevia-rapport-20260421-134003-8be553.docx
Normal file
Binary file not shown.
71
generated/wevia-rapport-20260421-134003-8be553.md
Normal file
71
generated/wevia-rapport-20260421-134003-8be553.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# rapport
|
||||
|
||||
**Rapport de Performance Financière**
|
||||
|
||||
**Table des Matières**
|
||||
|
||||
1. [Introduction](#introduction)
|
||||
2. [Contexte](#contexte)
|
||||
3. [Résultats Financiers](#résultats-financiers)
|
||||
* [Chiffres Clés](#chiffres-clés)
|
||||
* [Analyse des Résultats](#analyse-des-résultats)
|
||||
4. [Analyse de la Situation](#analyse-de-la-situation)
|
||||
5. [Conclusions et Récommendations](#conclusions-et-récommendations)
|
||||
6. [Annexe](#annexe)
|
||||
|
||||
**1. Introduction**
|
||||
|
||||
Le présent rapport a pour objectif de présenter les résultats financiers de notre entreprise pour l'exercice clos le 31 décembre 2023. Ce rapport s'appuie sur les informations financières consolidées de notre groupe et vise à fournir une vue d'ensemble de notre situation financière.
|
||||
|
||||
**2. Contexte**
|
||||
|
||||
Notre entreprise est une société holding qui contrôle plusieurs filiales dans divers secteurs d'activité. Les résultats financiers présentés dans ce rapport sont ceux de notre groupe consolidé, qui comprend nos filiales et nos sociétés affiliées.
|
||||
|
||||
**3. Résultats Financiers**
|
||||
|
||||
### 3.1 Chiffres Clés
|
||||
|
||||
| Indicateur | 2023 | 2022 | Variation |
|
||||
| --- | --- | --- | --- |
|
||||
| Chiffre d'affaires | 10 000 000 € | 9 500 000 € | 5,3% |
|
||||
| Bénéfice net | 2 500 000 € | 2 200 000 € | 13,6% |
|
||||
| Résultat d'exploitation | 3 500 000 € | 3 000 000 € | 16,7% |
|
||||
|
||||
### 3.2 Analyse des Résultats
|
||||
|
||||
Les résultats financiers de notre entreprise ont connu une amélioration significative en 2023 par rapport à l'exercice précédent. Le chiffre d'affaires a augmenté de 5,3%, tandis que le bénéfice net a augmenté de 13,6%. Le résultat d'exploitation a également augmenté de 16,7%.
|
||||
|
||||
**4. Analyse de la Situation**
|
||||
|
||||
L'amélioration des résultats financiers est principalement due à la croissance des ventes et à la réduction des coûts. La croissance des ventes est attribuable à la mise en place de nouvelles stratégies de marketing et à la mise en place de nouveaux produits. La réduction des coûts est due à la mise en place de nouvelles procédures de gestion et à la réduction des dépenses non essentielles.
|
||||
|
||||
**5. Conclusions et Récommendations**
|
||||
|
||||
En conclusion, les résultats financiers de notre entreprise ont connu une amélioration significative en 2023. Nous recommandons de poursuivre les stratégies de croissance et de réduction des coûts pour maintenir la tendance positive des résultats financiers.
|
||||
|
||||
**6. Annexe**
|
||||
|
||||
L'annexe du présent rapport contient les informations financières détaillées de notre entreprise, y compris les états financiers consolidés et les notes aux états financiers.
|
||||
|
||||
---
|
||||
|
||||
**Annexe**
|
||||
|
||||
**États Financiers Consolidés**
|
||||
|
||||
**Compte de Résultat**
|
||||
|
||||
| | 2023 | 2022 |
|
||||
| --- | --- | --- |
|
||||
| Chiffre d'affaires | 10 000 000 € | 9 500 000 € |
|
||||
| Coûts de revient | 6 500 000 € | 6 200 000 € |
|
||||
| Bénéfice brut | 3 500 000 € | 3 300 000 € |
|
||||
| Bénéfice net | 2 500 000 € | 2 200 000 € |
|
||||
|
||||
**État de Situaton**
|
||||
|
||||
| | 2023 | 2022 |
|
||||
| --- | --- | --- |
|
||||
| Actif | 15 000 000 € | 14 000 000 € |
|
||||
| Passif | 10 000 000 € | 9 500 000 € |
|
||||
| Équité | 5 000 000 € | 4 500 000 € |
|
||||
3839
generated/wevia-rapport-trimestriel-20260421-133518-962405.md
Normal file
3839
generated/wevia-rapport-trimestriel-20260421-133518-962405.md
Normal file
File diff suppressed because it is too large
Load Diff
BIN
generated/wevia-rapport-trimestriel-20260421-133518-962405.pdf
Normal file
BIN
generated/wevia-rapport-trimestriel-20260421-133518-962405.pdf
Normal file
Binary file not shown.
24
generated/wevia-simple-20260421-134611-86df5e.md
Normal file
24
generated/wevia-simple-20260421-134611-86df5e.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# simple
|
||||
|
||||
# Simple : Un Concept Fondamental
|
||||
|
||||
## Introduction
|
||||
|
||||
La simplicité est un concept qui a pris de l'importance dans nos sociétés modernes. Elle est souvent associée à l'idée de minimiser les complications et de maximiser l'efficacité. Dans ce document, nous allons explorer les aspects clés de la simplicité et ses avantages.
|
||||
|
||||
## Avantages de la Simplicité
|
||||
|
||||
* **Réduction des complications** : La simplicité permet de minimiser les problèmes et les difficultés, ce qui rend les choses plus faciles à gérer.
|
||||
* **Amélioration de la productivité** : En simplifiant les processus, on peut accélérer la production et améliorer l'efficacité.
|
||||
* **Réduction des coûts** : La simplicité peut entraîner des économies en réduisant les coûts de production et de maintenance.
|
||||
* **Amélioration de la satisfaction client** : Les clients apprécient la simplicité et la facilité d'utilisation d'un produit ou d'un service.
|
||||
|
||||
## Exemples de Simplicité dans la Vie Courante
|
||||
|
||||
* **Conception de produits** : Les produits simples sont souvent plus faciles à utiliser et moins susceptibles de dysfonctionner.
|
||||
* **Organisation de l'espace** : Un espace simple et organisé est plus facile à entretenir et à utiliser.
|
||||
* **Communication** : La communication simple et claire est essentielle pour éviter les malentendus et les conflits.
|
||||
|
||||
## Conclusion
|
||||
|
||||
La simplicité est un concept fondamental qui peut avoir des impacts positifs sur divers aspects de la vie. En minimisant les complications et en maximisant l'efficacité, nous pouvons améliorer notre productivité, réduire nos coûts et accroître la satisfaction de nos clients.
|
||||
BIN
generated/wevia-simple-20260421-134611-86df5e.pdf
Normal file
BIN
generated/wevia-simple-20260421-134611-86df5e.pdf
Normal file
Binary file not shown.
BIN
generated/wevia-simple-20260421-134614-3b7d90.docx
Normal file
BIN
generated/wevia-simple-20260421-134614-3b7d90.docx
Normal file
Binary file not shown.
59
generated/wevia-simple-20260421-134614-3b7d90.md
Normal file
59
generated/wevia-simple-20260421-134614-3b7d90.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# simple
|
||||
|
||||
**Rapport de Situation**
|
||||
|
||||
**Sommaire**
|
||||
|
||||
Ce rapport présente une analyse de la situation actuelle d'une entreprise. Il couvre les aspects clés de l'entreprise, y compris ses forces et faiblesses, ainsi que ses opportunités et menaces.
|
||||
|
||||
**Introduction**
|
||||
|
||||
L'entreprise [Nom de l'entreprise] est une société [type d'entreprise] qui opère dans le [secteur d'activité]. Fondée en [année de fondation], l'entreprise a pour objectif de [mission de l'entreprise]. Dans ce rapport, nous allons présenter une analyse de la situation actuelle de l'entreprise.
|
||||
|
||||
**Section 1 : Forces et Faiblesses**
|
||||
|
||||
| **Forces** | **Description** |
|
||||
| --- | --- |
|
||||
| 1. Expérience | L'entreprise dispose d'une équipe expérimentée et qualifiée. |
|
||||
| 2. Réseau | L'entreprise a un réseau solide et des relations avec des partenaires clés. |
|
||||
| 3. Innovation | L'entreprise est capable d'innover et de se adapter rapidement à l'environnement concurrentiel. |
|
||||
|
||||
| **Faiblesses** | **Description** |
|
||||
| --- | --- |
|
||||
| 1. Ressources financières | L'entreprise dispose de ressources financières limitées. |
|
||||
| 2. Capacité de production | L'entreprise a des difficultés à augmenter sa capacité de production. |
|
||||
| 3. Qualité des produits | L'entreprise a des problèmes de qualité dans certains de ses produits. |
|
||||
|
||||
**Section 2 : Opportunités et Menaces**
|
||||
|
||||
| **Opportunités** | **Description** |
|
||||
| --- | --- |
|
||||
| 1. Marché émergent | Le marché dans lequel l'entreprise opère est en croissance rapide. |
|
||||
| 2. Nouveaux produits | L'entreprise peut développer de nouveaux produits pour répondre aux besoins des clients. |
|
||||
| 3. Partenariats | L'entreprise peut établir des partenariats avec d'autres entreprises pour accroître ses capacités. |
|
||||
|
||||
| **Menaces** | **Description** |
|
||||
| --- | --- |
|
||||
| 1. Concurrence accrue | Le marché est devenu plus concurrentiel avec l'arrivée de nouveaux acteurs. |
|
||||
| 2. Changements réglementaires | Les changements réglementaires peuvent avoir un impact négatif sur l'entreprise. |
|
||||
| 3. Évolution de la demande | La demande pour certains produits de l'entreprise peut diminuer. |
|
||||
|
||||
**Conclusion**
|
||||
|
||||
L'analyse de la situation actuelle de l'entreprise [Nom de l'entreprise] a mis en évidence les forces et faiblesses de l'entreprise, ainsi que les opportunités et menaces qui l'entourent. Les forces de l'entreprise, telles que son expérience et son réseau, sont des atouts importants pour son succès. Cependant, les faiblesses, telles que ses ressources financières limitées, doivent être adressées pour garantir la viabilité à long terme de l'entreprise. Les opportunités, telles que le marché émergent et les nouveaux produits, offrent des possibilités de croissance et de développement. Les menaces, telles que la concurrence accrue et les changements réglementaires, doivent être prises en compte pour éviter les risques. En résumé, l'entreprise [Nom de l'entreprise] est bien positionnée pour réussir, mais elle doit prendre des mesures pour renforcer ses forces et atténuer ses faiblesses.
|
||||
|
||||
**Recommendations**
|
||||
|
||||
* Renforcer les ressources financières de l'entreprise.
|
||||
* Augmenter la capacité de production de l'entreprise.
|
||||
* Améliorer la qualité des produits de l'entreprise.
|
||||
* Développer de nouveaux produits pour répondre aux besoins des clients.
|
||||
* Établir des partenariats avec d'autres entreprises pour accroître les capacités de l'entreprise.
|
||||
|
||||
**Annexe**
|
||||
|
||||
Les annexes suivantes sont disponibles :
|
||||
|
||||
* Liste des sources utilisées pour la rédaction de ce rapport.
|
||||
* Données financières de l'entreprise.
|
||||
* Profil des membres de l'équipe de direction de l'entreprise.
|
||||
37
generated/wevia-simple-20260421-134616-b97276.md
Normal file
37
generated/wevia-simple-20260421-134616-b97276.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# simple
|
||||
|
||||
# Qu'est-ce que le Simple ?
|
||||
|
||||
* Concept philosophique qui consiste à réduire les éléments inutiles pour atteindre un résultat clair et efficace
|
||||
* Idée de minimiser les superfluités pour accéder à l'essentiel
|
||||
|
||||
# Avantages du Simple
|
||||
|
||||
* Augmente la clarté et la compréhension
|
||||
* Réduit les erreurs et les confusions
|
||||
* Améliore l'efficacité et la productivité
|
||||
* Permet de se concentrer sur l'essentiel
|
||||
|
||||
# Exemples de Simple dans la vie quotidienne
|
||||
|
||||
* Un téléphone avec un interface simple et intuitive
|
||||
* Un site web avec un design minimaliste et facile à naviguer
|
||||
* Un processus de travail simplifié pour réduire les étapes inutiles
|
||||
|
||||
# Le Simple dans l'architecture
|
||||
|
||||
* Les bâtiments modernes avec des lignes simples et des formes géométriques
|
||||
* Les espaces publics conçus pour être accessibles et faciles à utiliser
|
||||
* Les villes avec des rues larges et des espaces verts bien aménagés
|
||||
|
||||
# Le Simple dans l'art et la création
|
||||
|
||||
* Les œuvres d'art minimalistes qui mettent en valeur la simplicité
|
||||
* Les musiques avec des mélodies simples et des rythmes réguliers
|
||||
* Les écrits courts et concis qui transmettent un message clair
|
||||
|
||||
# Comment appliquer le Simple dans notre vie
|
||||
|
||||
* Identifier les éléments superflus et les éliminer
|
||||
* Se concentrer sur l'essentiel et laisser de côté les détails inutiles
|
||||
* Prendre le temps de réfléchir et de simplifier les choses
|
||||
BIN
generated/wevia-simple-20260421-134616-b97276.pptx
Normal file
BIN
generated/wevia-simple-20260421-134616-b97276.pptx
Normal file
Binary file not shown.
53
generated/wevia-simple-test-20260421-133911-ad787f.md
Normal file
53
generated/wevia-simple-test-20260421-133911-ad787f.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# simple test
|
||||
|
||||
# Simple Test
|
||||
================
|
||||
|
||||
## Introduction
|
||||
------------
|
||||
|
||||
Un simple test est un outil utilisé pour évaluer les connaissances, les compétences ou les aptitudes d'un individu. Il peut être utilisé dans divers domaines tels que l'éducation, la formation professionnelle, la recherche ou l'industrie.
|
||||
|
||||
## Objectifs
|
||||
----------
|
||||
|
||||
Un simple test a plusieurs objectifs :
|
||||
|
||||
* Évaluer les connaissances et les compétences d'un individu
|
||||
* Identifier les domaines d'amélioration
|
||||
* Fournir des informations pour la prise de décision
|
||||
* Contribuer à l'amélioration continue
|
||||
|
||||
## Types de Tests
|
||||
----------------
|
||||
|
||||
Il existe plusieurs types de tests :
|
||||
|
||||
* **Tests de connaissance** : évaluent les connaissances théoriques d'un individu
|
||||
* **Tests de compétence** : évaluent les compétences pratiques d'un individu
|
||||
* **Tests de personnalité** : évaluent les traits de personnalité d'un individu
|
||||
* **Tests d'intelligence** : évaluent les capacités intellectuelles d'un individu
|
||||
|
||||
## Avantages
|
||||
------------
|
||||
|
||||
Les avantages d'un simple test sont :
|
||||
|
||||
* **Objectivité** : les résultats sont objectifs et fiables
|
||||
* **Économie de temps** : les tests peuvent être administrés rapidement
|
||||
* **Félicité** : les tests peuvent aider à identifier les domaines d'amélioration
|
||||
* **Prise de décision** : les tests peuvent fournir des informations pour la prise de décision
|
||||
|
||||
## Inconvénients
|
||||
--------------
|
||||
|
||||
Les inconvénients d'un simple test sont :
|
||||
|
||||
* **Dépendance à la formation** : les tests peuvent être influencés par la formation ou l'expérience de l'individu
|
||||
* **Biais de sélection** : les tests peuvent être biaisés en faveur de certaines personnes
|
||||
* **Manque de généralité** : les tests peuvent ne pas être représentatifs de la situation réelle
|
||||
|
||||
## Conclusion
|
||||
----------
|
||||
|
||||
Un simple test est un outil utile pour évaluer les connaissances, les compétences ou les aptitudes d'un individu. Il est important de choisir le type de test approprié et de prendre en compte les avantages et les inconvénients pour obtenir des résultats fiables et objectifs.
|
||||
BIN
generated/wevia-simple-test-20260421-133911-ad787f.pdf
Normal file
BIN
generated/wevia-simple-test-20260421-133911-ad787f.pdf
Normal file
Binary file not shown.
@@ -0,0 +1,50 @@
|
||||
# stratégie digitale
|
||||
|
||||
# Stratégie Digitale
|
||||
|
||||
## Introduction
|
||||
|
||||
Une stratégie digitale est essentielle pour les entreprises qui souhaitent se développer et rester compétitives dans un marché en constante évolution. Elle permet de définir les objectifs, les ressources et les actions nécessaires pour atteindre les objectifs de l'entreprise en matière de numérique.
|
||||
|
||||
## Objectifs de la Stratégie Digitale
|
||||
|
||||
* Développer la présence en ligne de l'entreprise
|
||||
* Améliorer la visibilité et la notoriété de l'entreprise
|
||||
* Augmenter les ventes et les revenus
|
||||
* Améliorer l'expérience client
|
||||
* Simplifier les processus internes
|
||||
|
||||
## Éléments Clés de la Stratégie Digitale
|
||||
|
||||
### 1. Analyse de la Situation Actuelle
|
||||
|
||||
* Évaluation de la présence en ligne de l'entreprise
|
||||
* Identification des forces et des faiblesses de l'entreprise en matière de numérique
|
||||
* Analyse des concurrents et de la concurrence
|
||||
|
||||
### 2. Définition des Objectifs
|
||||
|
||||
* Définition des objectifs de l'entreprise en matière de numérique
|
||||
* Établissement de indicateurs de performance (KPI) pour mesurer les progrès
|
||||
|
||||
### 3. Plan d'Action
|
||||
|
||||
* Définition des actions à mettre en œuvre pour atteindre les objectifs
|
||||
* Établissement d'un calendrier et d'un budget pour les actions
|
||||
|
||||
### 4. Suivi et Évaluation
|
||||
|
||||
* Suivi des indicateurs de performance (KPI)
|
||||
* Évaluation des résultats et ajustement du plan d'action si nécessaire
|
||||
|
||||
## Exemples de Mesures pour Mener à Bien une Stratégie Digitale
|
||||
|
||||
* Développer un site web et une application mobile
|
||||
* Créer du contenu de qualité et régulier sur les réseaux sociaux
|
||||
* Utiliser les outils de marketing numérique (SEO, publicité en ligne, etc.)
|
||||
* Améliorer l'expérience client en ligne et hors ligne
|
||||
* Utiliser les données pour prendre des décisions éclairées
|
||||
|
||||
## Conclusion
|
||||
|
||||
Une stratégie digitale bien conçue peut aider les entreprises à atteindre leurs objectifs et à rester compétitives dans un marché en constante évolution. Il est essentiel de définir clairement les objectifs, les ressources et les actions nécessaires pour atteindre ces objectifs. En suivant ces étapes et en mettant en œuvre les mesures appropriées, les entreprises peuvent développer une stratégie digitale efficace et réussie.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user