feat: add CIE-10 diagnosticos migration endpoint and table

- migrations/20260717_cie10_diagnosticos.sql: CREATE TABLE cie10_diagnosticos
- api/lab/ingest_diagnosticos.php: POST endpoint that receives batches of
  {cod, concepto} rows and upserts into cie10_diagnosticos (ON DUPLICATE KEY)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-17 10:27:22 -05:00
co-authored by Claude Sonnet 4.6
parent 0fe4948a34
commit f5de2c90ca
2 changed files with 68 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
<?php
/**
* POST /api/lab/ingest_diagnosticos.php
* Recibe un lote de diagnósticos CIE-10 desde RIPS Manager y los upserta en cie10_diagnosticos.
* Body: { "rows": [{"cod": "A000", "concepto": "..."}, ...] }
*/
ob_start();
require_once __DIR__ . '/../../config/config.php';
error_reporting(E_ERROR | E_PARSE);
ini_set('display_errors', '0');
header('Content-Type: application/json; charset=utf-8');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
ob_clean();
echo json_encode(['ok' => false, 'error' => 'Método no permitido']);
exit;
}
$keyHeader = $_SERVER['HTTP_X_LAB_KEY'] ?? $_SERVER['HTTP_X_LAB_SYNC_KEY'] ?? '';
if (!$keyHeader || !hash_equals(LAB_SYNC_KEY, $keyHeader)) {
http_response_code(401);
ob_clean();
echo json_encode(['ok' => false, 'error' => 'API key inválida']);
exit;
}
$data = json_decode(file_get_contents('php://input'), true);
if (!is_array($data) || empty($data['rows']) || !is_array($data['rows'])) {
http_response_code(400);
ob_clean();
echo json_encode(['ok' => false, 'error' => 'Body inválido: se espera {rows: [...]}']);
exit;
}
try {
$pdo = db();
$stmt = $pdo->prepare(
"INSERT INTO cie10_diagnosticos (cod_diag, concepto)
VALUES (?, ?)
ON DUPLICATE KEY UPDATE concepto = VALUES(concepto)"
);
$insertados = 0;
foreach ($data['rows'] as $row) {
$cod = trim($row['cod'] ?? '');
$concepto = trim($row['concepto'] ?? '');
if (!$cod || !$concepto) continue;
$stmt->execute([$cod, $concepto]);
$insertados++;
}
ob_clean();
echo json_encode(['ok' => true, 'insertados' => $insertados]);
} catch (Exception $e) {
ob_clean();
http_response_code(500);
echo json_encode(['ok' => false, 'error' => $e->getMessage()]);
}
@@ -0,0 +1,6 @@
-- Migración: tabla CIE-10 diagnósticos desde Firebird
CREATE TABLE IF NOT EXISTS cie10_diagnosticos (
cod_diag VARCHAR(10) NOT NULL,
concepto VARCHAR(500) NOT NULL,
PRIMARY KEY (cod_diag)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;