Premiere commit - Omika

This commit is contained in:
2026-10-23 18:46:50 +02:00
commit 8ea76c1b24
2155 changed files with 984301 additions and 0 deletions
+172
View File
@@ -0,0 +1,172 @@
# ============================================================
# Probe LECTURE SEULE — Audit physique de OMIKA_TEST
# Aucune écriture. Aucune modification de configuration.
# Connexion OLE DB PCSOFT.HFSQL (ADODB COM) sur le même serveur
# que BATIK_TEST mais catalogue/base = OMIKA_TEST.
# ============================================================
$ErrorActionPreference = "Stop"
$server = "127.0.0.1"
$port = 4900
$database = "OMIKA_TEST"
$user = "susana"
$password = "123"
# --- Schéma Omika attendu (source : docs/schema-compatibilite-batik-omika.json,
# presence = "Commun" ou "Omika uniquement") ---
$expectedOmika = @(
"Doc_Aide","Document","DocumentNote","MailCat","MailModele","MessageExterne",
"MessageInterne","ModeleRapport","ModeleRapportMob","MotClef","RubriquesDocument",
"Action","CheckList","CheckList_Collab","CompteRendu","Dossier","EtatIntervention",
"Intervention","Intervention_ChampLibre","Intervention_Personne","BddExterne",
"Client_BddExterne","ElementModifie","ElementSupprime","Intervention_BddExterne",
"Mobile","MobLog","MobReception","Collaborateur","Equipe","Equipe_Collaborateur",
"Societe","Societe_Collaborateur","Compteur","Etats","ParametreApplication",
"ParametreMetier","ParametreMetierEntete","ParametreSysteme","ParametreUtilisateur",
"Planning_RDV","Planning_RDV_Personne","RDV_Collaborateur","RDV_Contact","RDV_Planning",
"SuiviDesTemps","Adresse","Client","Client_Adresse","Client_Lieu","Lieu","Lieu_Personne",
"Personne","Telephone","AccesEtDroit","CategorieAcces","Role","Utilisateur"
)
# --- Tables importantes pour le snapshot (noms physiques Omika) ---
$importantTables = @(
"Client", # Clients
"Collaborateur", # Collaborateurs
"Personne", # Personnes / Contacts
"Lieu", # Sites / Lieux
"Dossier", # Dossiers
"Intervention", # Interventions
"RDV_Planning", # RendezVous
"SuiviDesTemps", # SuiviTemps
"Document", # Documents
"ParametreMetier" # ParametreMetier
)
Write-Host "========== AUDIT OMIKA_TEST (READ-ONLY) =========="
Write-Host "Base : $database"
Write-Host "Serveur : ${server}:${port}"
Write-Host ""
$connStr = "Provider=PCSoft.HFSQL;Data Source=${server};Port=${port};Initial Catalog=${database};User ID=${user};Password=${password};"
$cn = $null
try {
$cn = New-Object -ComObject ADODB.Connection
$cn.ConnectionTimeout = 15
$cn.Open($connStr)
Write-Host "CONNEXION : OUVERTE"
Write-Host ""
# ---- 1. Lister les tables physiques via OpenSchema (adSchemaTables = 20) ----
$tables = New-Object System.Collections.Generic.List[string]
try {
$rs = $cn.OpenSchema(20) # adSchemaTables
while (-not $rs.EOF) {
$name = $rs.Fields.Item("TABLE_NAME").Value
if ($name) { $tables.Add([string]$name) }
$rs.MoveNext()
}
$rs.Close()
} catch {
Write-Host " (OpenSchema Tables indisponible: $($_.Exception.Message))"
}
$actualSet = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase)
foreach ($t in $tables) { [void]$actualSet.Add($t) }
Write-Host "NOMBRE TABLES OMIKA_TEST REELLES : $($actualSet.Count)"
Write-Host "NOMBRE TABLES OMIKA ATTENDUES : $($expectedOmika.Count)"
Write-Host ""
# ---- 2. Tables manquantes (EXPECTED - ACTUAL) ----
$missing = @()
foreach ($e in $expectedOmika) {
if (-not $actualSet.Contains($e)) { $missing += $e }
}
Write-Host "--- TABLES MANQUANTES (EXPECTED_OMIKA - ACTUAL_OMIKA) ---"
if ($missing.Count -eq 0) { Write-Host " (aucune)" } else { $missing | ForEach-Object { Write-Host " - $_" } }
Write-Host ""
# ---- 3. Tables supplémentaires (ACTUAL - EXPECTED) ----
$extra = @()
foreach ($a in $actualSet) {
if ($expectedOmika -notcontains $a) { $extra += $a }
}
Write-Host "--- TABLES SUPPLEMENTAIRES (ACTUAL_OMIKA - EXPECTED_OMIKA) ---"
if ($extra.Count -eq 0) { Write-Host " (aucune)" } else { $extra | Sort-Object | ForEach-Object { Write-Host " - $_" } }
Write-Host ""
# ---- 4. Détection de schéma ----
Write-Host "--- DETECTION DE SCHEMA ---"
$criticalOmika = @("Client","Collaborateur","Personne","Lieu","Dossier","Intervention","RDV_Planning","SuiviDesTemps","Document","ParametreMetier")
$criticalMissing = ($criticalOmika | Where-Object { -not $actualSet.Contains($_) }).Count
Write-Host " Tables critiques Omika manquantes : $criticalMissing / $($criticalOmika.Count)"
if ($missing.Count -eq 0 -and $criticalMissing -eq 0) {
Write-Host " SCHEMA DETECTE : OMIKA (complet)"
} elseif ($criticalMissing -gt 0) {
Write-Host " SCHEMA DETECTE : OMIKA_INCOMPLET"
} else {
Write-Host " SCHEMA DETECTE : OMIKA (avec écarts non critiques)"
}
Write-Host ""
# ---- 5. Comptage des tables importantes ----
Write-Host "--- COUNTS TABLES IMPORTANTES (SELECT COUNT(*)) ---"
foreach ($table in $importantTables) {
if ($actualSet.Contains($table)) {
try {
$rs2 = New-Object -ComObject ADODB.Recordset
$rs2.Open("SELECT COUNT(*) AS C FROM $table", $cn, 1, 1)
$count = $rs2.Fields.Item("C").Value
$rs2.Close()
Write-Host (" {0,-20} : PRESENT count={1}" -f $table, $count)
} catch {
Write-Host (" {0,-20} : PRESENT count=ERREUR ({1})" -f $table, $_.Exception.Message)
}
} else {
Write-Host (" {0,-20} : ABSENT" -f $table)
}
}
Write-Host ""
# ---- 6. ParametreMetier : TypeTemps ----
# Test direct SELECT même si la table n'apparaît pas dans le listing
# OpenSchema : distingue "table absente" de "table protégée (FLS)".
Write-Host "--- PARAMETREMETIER (TypeTemps) ---"
$pmDirect = $null
try {
$rs3 = New-Object -ComObject ADODB.Recordset
$rs3.Open("SELECT COUNT(*) AS C FROM ParametreMetier", $cn, 1, 1)
$pmDirect = $rs3.Fields.Item("C").Value
$rs3.Close()
Write-Host " ParametreMetier : PRESENT (SELECT direct) count=$pmDirect"
try {
$rs4 = New-Object -ComObject ADODB.Recordset
$rs4.Open("SELECT COUNT(*) AS C FROM ParametreMetier WHERE PA_Categorie = 'TypeTemps'", $cn, 1, 1)
$ttCount = $rs4.Fields.Item("C").Value
$rs4.Close()
Write-Host " TypeTemps (PA_Categorie='TypeTemps') : count=$ttCount"
} catch {
Write-Host " TypeTemps : non déterminé (colonne PA_Categorie absente ou autre)"
}
} catch {
$err = $_.Exception.Message
if ($err -match "introuvable|not found|inexistante|does not exist|28000001") {
Write-Host " ParametreMetier : ABSENT (table introuvable)"
} else {
Write-Host " ParametreMetier : PRESENT mais PROTEGE (SELECT direct échoue: $err)"
}
}
$cn.Close()
Write-Host ""
Write-Host "RESULTAT : OK (lecture seule)"
exit 0
}
catch {
Write-Host "CONNEXION : ECHEC"
Write-Host "Erreur : $($_.Exception.Message)"
Write-Host "RESULTAT : KO"
exit 3
}