Verifica RFCs contra la lista del artículo 69-B del SAT — los contribuyentes que el SAT señala por facturar operaciones simuladas (EFOS/EDOS). Útil para tamizar proveedores y clientes antes de deducir o acreditar sus comprobantes.
Un núcleo independiente de framework (solo PHP) con un puente opcional para Laravel que descarga el CSV oficial, lo cachea y expone una facade y comandos.
use Webrek\Sat69b\Laravel\Facades\Sat69b;
Sat69b::isBlacklisted('AAA010101AA1'); // true si es presunto o definitivo
Sat69b::isListed('AAA010101AA1'); // true aunque haya sido desvirtuado
$contribuyente = Sat69b::check('AAA010101AA1');
$contribuyente?->status->label(); // "Definitivo"Esto es una herramienta de tamizado sobre la publicación oficial del SAT. La fuente de verdad es el listado del SAT y el Diario Oficial; valida los hallazgos antes de tomar decisiones fiscales o contractuales.
| Situación | ¿En lista negra? | Significado |
|---|---|---|
| Presunto | Sí | El SAT presume operaciones simuladas. |
| Definitivo | Sí | Quedó definitivo tras no desvirtuar. |
| Desvirtuado | No | El contribuyente aclaró su situación. |
| Sentencia favorable | No | Un tribunal le dio la razón. |
isBlacklisted() es verdadero solo para presunto y definitivo.
composer require webrek/sat-69bEl service provider se descubre automáticamente. Descarga el listado (idealmente de forma programada) y consúltalo:
php artisan sat69b:sync # descarga y cachea el listado oficial
php artisan sat69b:check AAA010101AA1// routes/console.php — mantenlo fresco
use Illuminate\Support\Facades\Schedule;
Schedule::command('sat69b:sync')->daily();Publica la configuración para ajustar la URL, el caché o el timeout:
php artisan vendor:publish --tag=sat-69b-configSi el caché está frío, la primera consulta descarga el listado sola; aun así
conviene programar sat69b:sync para no pagar esa descarga en una petición de
usuario.
No hay dependencia de framework. Parsea el CSV oficial con CsvParser y consulta
con Checker sobre cualquier implementación de Webrek\Sat69b\Contracts\Listado
(se incluye InMemoryListado):
use Webrek\Sat69b\{Checker, CsvParser, InMemoryListado};
$contribuyentes = (new CsvParser)->parse(file_get_contents('Listado_Completo_69-B.csv'));
$checker = new Checker(new InMemoryListado($contribuyentes));
$checker->isBlacklisted('AAA010101AA1');Para una fuente propia (una tabla, un servicio), implementa la interfaz
Listado y pásala al Checker.
composer testLa suite del núcleo (tests/Unit) corre sin framework; la de Laravel
(tests/Feature) simula la descarga del CSV con Http::fake().
Consulta CONTRIBUTING.md. Corre make check antes de abrir un
pull request.
Reporta vulnerabilidades a través del formulario de avisos de seguridad, no como issues públicos. Consulta SECURITY.md.
Licencia MIT (MIT). Consulta LICENSE.