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:
co-authored by
Claude Sonnet 4.6
parent
0fe4948a34
commit
f5de2c90ca
@@ -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;
|
||||
Reference in New Issue
Block a user