Search by

nexconnect / dgii-consultas

sweetmedia

Consulta de RNC a partir del listado público de la DGII (República Dominicana), guardado en tu equipo.

v0.1.0 2026-11-01 19:42 UTC

This package is auto-updated.

Last update: 2026-11-01 21:05:59 UTC


README

Consulta de RNC a partir del listado público de la DGII (República Dominicana). El listado se guarda en tu equipo y las consultas no usan la red ni servicios intermedios. Requiere PHP 8.1 o superior, de 64 bits, con la extensión zip. No tiene otras dependencias de ejecución.

No está afiliado a la DGII. Es un proyecto independiente que lee un archivo que la DGII publica en su sitio. No lo respalda, no lo mantiene ni lo patrocina la Dirección General de Impuestos Internos.

Instalación

composer require nexconnect/dgii-consultas

actualizar() descarga por https con los flujos de PHP: necesita la extensión openssl y allow_url_fopen activado (lo normal). Con importar() no hace falta ninguna de las dos.

Una consulta

use NexConnect\DgiiConsultas\Listado;

$listado = new Listado();
$listado->actualizar();                 // descarga el listado si cambió; solo esto usa la red
$c = $listado->buscar('990-00000-1');   // null si no está
if ($c !== null) {
    echo $c->razon_social, ' ', $c->estado, ' ', $c->fecha_listado->format('Y-m-d');
}

fecha_listado es la fecha del listado consultado (hora de Santo Domingo, UTC-4): revísala, porque el listado puede estar viejo. Las fechas son DateTimeImmutable a medianoche en UTC-4, sin depender de la zona horaria por defecto de PHP, que la librería nunca cambia.

Contribuyente

rnc, razon_social, nombre_comercial, actividad, fecha_inicio (DateTimeImmutable o null), estado, regimen_pago y fecha_listado. Todos los de texto pueden ser null. Son propiedades public readonly: el objeto es inmutable.

Listado

Método Qué hace
new Listado(?string $carpeta = null, string $url = Listado::URL_DGII) $carpeta es la caché (por omisión, DGII_CONSULTAS_CACHE o la del sistema). Detrás de un servidor web, pásala siempre.
actualizar(bool $aceptar_corto = false): bool Hace un HEAD y baja el listado solo si hace falta. Devuelve true si cargó un listado, lo que no garantiza datos nuevos: compara la fecha si te importa.
importar(string $ruta, bool $aceptar_corto = false): void Carga un DGII_RNC.zip bajado a mano.
buscar(mixed $rnc): ?Contribuyente Acepta espacios y guiones; 9 u 11 dígitos ASCII. Lo que no sea texto da RncInvalido. Nunca usa la red.
fecha(): ?DateTimeImmutable, filas(): ?int, descartadas(): ?int Datos del listado en uso, o null si no hay.

Los errores viven en NexConnect\DgiiConsultas\Errores y son hijos de ErrorDgii: RncInvalido, ListadoNoDisponible, ErrorDescarga y ListadoRechazado. Un listado rechazado (no es un zip, falla el CRC, trae demasiadas pocas filas) nunca reemplaza al que ya tenías.

Si la DGII bloquea la descarga

Si responde HTTP 403, baja DGII_RNC.zip con tu navegador y cárgalo con $listado->importar('DGII_RNC.zip').

Dónde se guarda

En DGII_CONSULTAS_CACHE si existe; si no, en ~/Library/Caches/dgii-consultas (macOS), %LOCALAPPDATA%\dgii-consultas (Windows) o $XDG_CACHE_HOME/dgii-consultas o ~/.cache/dgii-consultas (el resto). El formato es el mismo que usan las otras librerías del proyecto, así que pueden compartir la carpeta.

Detrás de un servidor web, pasa la misma carpeta en el cron y en la web, con new Listado('/var/cache/dgii-consultas'): PHP-FPM limpia el entorno y el usuario no suele ser el del cron, así que sin carpeta explícita cada uno usaría una distinta. El usuario del cron debe poder escribir en ella y el del servidor web, leerla.

Cada consulta hace una búsqueda binaria sobre el índice sin cargarlo en memoria, así que cada proceso de PHP (una petición web, por ejemplo) gasta muy poca: la carga de un listado completo (unas 800 mil filas) cabe en el memory_limit de 128 MB que PHP trae por omisión.

Desarrollo

composer install
vendor/bin/phpunit      # ninguna prueba sale de 127.0.0.1
composer validate --strict

Créditos

Reconocemos el trabajo previo de developersdo/dgii-consultas, un proyecto con el mismo nombre dentro de la comunidad de desarrolladores dominicanos.

Hecho por NexConnect, que desarrolla facturación electrónica (e-CF) para empresas dominicanas. El código y la documentación completa están en github.com/NexConnect-SRL/dgii-consultas.