unit FinkOkWsComun;

interface
uses SysUtils,
     Facturacion.ProveedorAutorizadoCertificacion;
   function CodEstatus(Codigo:string):Boolean;

implementation

  function RaisePACCodEstatusNumerico( Codigo: string ): Boolean;
 var iCodigo: Integer;
 begin
    iCodigo:=StrToIntDef(Codigo,0);
    result := true;
    if ICodigo = 0 then
     begin
      result := false;
      exit;
     end
     else if Codigo='203' then raise EPACNoEncontradoParaCancelarException.Create('No corresponde el RFC del Emisor y de quien solicita la cancelación',-1,iCodigo,False)
     else if Codigo='204' then raise EPACNoEncontradoParaCancelarException.Create('UUID No encontrado',-1,iCodigo,False)
     else if Codigo='300' then raise EPACNoEncontradoParaCancelarException.Create('Usuario No Válido	300',-1,iCodigo,False)

     else if Codigo='301' then raise EPACNoEncontradoParaCancelarException.Create('XML Mal Formado',-1,iCodigo,False)
     else if Codigo='302' then raise EPACNoEncontradoParaCancelarException.Create('Sello Mal Formado o inválido',-1,iCodigo,False)
     else if Codigo='303' then raise EPACNoEncontradoParaCancelarException.Create('Sello no corresponde a emisor',-1,iCodigo,False)
     else if Codigo='304' then raise EPACNoEncontradoParaCancelarException.Create('Certificado Revocado o Caduco',-1,iCodigo,False)
     else if Codigo='305' then raise EPACNoEncontradoParaCancelarException.Create('Certificado Inválido ,La fecha de emisión no esta dentro de la vigencia del CSD del Emisor',-1,iCodigo,False)
     else if Codigo='306' then raise EPACNoEncontradoParaCancelarException.Create('El certificado no es de tipo CSD',-1,iCodigo,False)

     else if Codigo='307' then raise EPACNoEncontradoParaCancelarException.Create('Comprobante timbrado previamente',-1,iCodigo,False)
     else if Codigo='308' then raise EPACNoEncontradoParaCancelarException.Create('Certificado no expedido por el SAT',-1,iCodigo,False)

     else if Codigo='309' then raise EPACNoEncontradoParaCancelarException.Create('Patrón de Folio inválido',-1,iCodigo,False)

     else if Codigo='401' then raise EPACNoEncontradoParaCancelarException.Create('Fecha y hora de generación fuera de rango',-1,iCodigo,False)

     else if Codigo='402' then raise EPACNoEncontradoParaCancelarException.Create('RFC del emisor no se encuentra en el régimen de contribuyentes',-1,iCodigo,False)
     else if Codigo='403' then raise EPACNoEncontradoParaCancelarException.Create('La fecha de emisión no es posterior al 01 de enero de 2012',-1,iCodigo,False)

     else if Codigo='501' then raise EPACNoEncontradoParaCancelarException.Create('Autenticación no válida',-1,iCodigo,False)

     else if Codigo='603' then raise EPACNoEncontradoParaCancelarException.Create('El CFDI no contiene un timbre previo (método stamped)',-1,iCodigo,False)
     else if Codigo='701' then raise EPACNoEncontradoParaCancelarException.Create('Cliente o RFC emisor suspendido',-1,iCodigo,False)
     else if Codigo='702' then raise EPACNoEncontradoParaCancelarException.Create('No ha registrado el RFC emisor bajo la cuenta de el PAC',-1,iCodigo,False)
     else if Codigo='703' then raise EPACNoEncontradoParaCancelarException.Create('Cuenta suspendida',-1,iCodigo,False)
     else if Codigo='704' then raise EPACNoEncontradoParaCancelarException.Create('Error con la contraseña de la llave Privada',-1,iCodigo,False)
     else if Codigo='705' then raise EPACNoEncontradoParaCancelarException.Create('XML estructura inválida',-1,iCodigo,False)
     else if Codigo='706' then raise EPACNoEncontradoParaCancelarException.Create('Socio Inválido',-1,iCodigo,False)
     else if Codigo='707' then raise EPACNoEncontradoParaCancelarException.Create('XML ya contiene un nodo TimbreFiscalDigital',-1,iCodigo,False)
     else if Codigo='708' then raise EPACNoEncontradoParaCancelarException.Create('No se pudo conectar al SAT',-1,iCodigo,False)
     else if Codigo='711' then raise EPACNoEncontradoParaCancelarException.Create('Error con el certificado al cancelar',-1,iCodigo,False)
     else if Codigo='712' then raise EPACNoEncontradoParaCancelarException.Create('El numero de ''noCertificado'' es diferente al del numero de certificado del atributo ''certificado''',-1,iCodigo,False)

     else if Codigo='715' then raise EPACNoEncontradoParaCancelarException.Create('Error al crear XML de consulta Sector Primario',-1,iCodigo,False)

     else if Codigo='716' then raise EPACNoEncontradoParaCancelarException.Create('Firma Inválida - Consulta Sector Primario',-1,iCodigo,False)
     else if Codigo='717' then raise EPACNoEncontradoParaCancelarException.Create('Error al generar la firma del XML',-1,iCodigo,False)

     else if Codigo='1000' then raise EPACNoEncontradoParaCancelarException.Create('Se recibió la respuesta de la petición de forma exitosa',-1,iCodigo,False)

     else if Codigo='1001' then raise EPACNoEncontradoParaCancelarException.Create('No existen peticiones de cancelación en espera de respuesta para el uuid',-1,iCodigo,False)
     else if Codigo='1002' then raise EPACNoEncontradoParaCancelarException.Create('Ya se recibió una respuesta para la petición de cancelación del uuid',-1,iCodigo,False)
     else if Codigo='1003' then raise EPACNoEncontradoParaCancelarException.Create('Sello No Corresponde al RFC Receptor',-1,iCodigo,False)
     else if Codigo='1004' then raise EPACNoEncontradoParaCancelarException.Create('Existen más de una petición de cancelación para el mismo uuid',-1,iCodigo,False)
     else if Codigo='1005' then raise EPACNoEncontradoParaCancelarException.Create('El uuid es nulo no posee el formato correcto',-1,iCodigo,False)
     else if Codigo='1006' then raise EPACNoEncontradoParaCancelarException.Create('Se rebaso el número máximo de solicitudes permitidas',-1,iCodigo,False)

     else if Codigo='1201' then raise EPACNoEncontradoParaCancelarException.Create('UUID Cancelado',-1,iCodigo,False)

     else if Codigo='1202' then raise EPACNoEncontradoParaCancelarException.Create('UUID Previamente cancelado',-1,iCodigo,False)
     else if Codigo='1203' then raise EPACNoEncontradoParaCancelarException.Create('UUID a cancelar no corresponde con el emisor',-1,iCodigo,False)
     else if Codigo='1205' then raise EPACNoEncontradoParaCancelarException.Create('UUID No existe',-1,iCodigo,False)
     else if Codigo='1302' then raise EPACNoEncontradoParaCancelarException.Create('Estructura de folios no válida',-1,iCodigo,False)
     else if Codigo='1305' then raise EPACNoEncontradoParaCancelarException.Create('Certificado no corresponde al emisor',-1,iCodigo,False)
     else if Codigo='1306' then raise EPACNoEncontradoParaCancelarException.Create('Certificado no vigente',-1,iCodigo,False)
     else if Codigo='1307' then raise EPACNoEncontradoParaCancelarException.Create('El certificado no es de tipo CSD',-1,iCodigo,False)
     else if Codigo='1308' then raise EPACNoEncontradoParaCancelarException.Create('Certificado revocado o caduco',-1,iCodigo,False)
   else if Codigo='no_cancelable' then
    Begin
     Result:=False;
     raise EPACNoEncontradoParaCancelarException.Create('El UUID contiene CFDI relacionados',-1,-1,False);
    End
   else raise EPACNoEncontradoParaCancelarException.Create(Codigo,-1,-1,False);
   if  Codigo='202' then raise EPACNoEncontradoParaCancelarException.Create('Petición de cancelación realizada Previamente',-1,iCodigo,False);
  end;

  function RaisePACCodEstatusAlfaCFDI( Codigo: string ): boolean;
  begin
   result := true;
   if Codigo='CFDI33101' then raise EPACNoEncontradoParaCancelarException.Create('"El campo Fecha no cumple con el patrón requerido."',-1,-1,False)
   else if Codigo='CFDI33102' then raise EPACNoEncontradoParaCancelarException.Create('El resultado de la digestión debe ser igual al resultado de la desencripción del sello.',-1,-1,False)
   else if Codigo='CFDI33103' then raise EPACNoEncontradoParaCancelarException.Create('Si existe el complemento para recepción de pagos el campo FormaPago no debe existir.',-1,-1,False)
   else if Codigo='CFDI33104' then raise EPACNoEncontradoParaCancelarException.Create('El campo FormaPago no contiene un valor del catálogo c_FormaPago.',-1,-1,False)
   else if Codigo='CFDI33105' then raise EPACNoEncontradoParaCancelarException.Create('EL certificado no cumple con alguno de los valores permitidos.',-1,-1,False)
   else if Codigo='CFDI33106' then raise EPACNoEncontradoParaCancelarException.Create('El valor de este campo SubTotal excede la cantidad de decimales que soporta la moneda.',-1,-1,False)
   else if Codigo='CFDI33107' then raise EPACNoEncontradoParaCancelarException.Create('El TipoDeComprobante es I,E o N, el importe registrado en el campo no es igual a la suma de los importes de los conceptos registrados.',-1,-1,False)
   else if Codigo='CFDI33108' then raise EPACNoEncontradoParaCancelarException.Create('El TipoDeComprobante es T o P y el importe no es igual a 0, o cero con decimales.',-1,-1,False)
   else if Codigo='CFDI33109' then raise EPACNoEncontradoParaCancelarException.Create('El valor registrado en el campo Descuento no es menor o igual que el campo Subtotal.',-1,-1,False)
   else if Codigo='CFDI33110' then raise EPACNoEncontradoParaCancelarException.Create('El TipoDeComprobante no es I,E o N, y un concepto incluye el campo descuento.',-1,-1,False)
   else if Codigo='CFDI33111' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Descuento excede la cantidad de decimales que soporta la moneda.',-1,-1,False)
   else if Codigo='CFDI33112' then raise EPACNoEncontradoParaCancelarException.Create('El campo Moneda no contiene un valor del catálogo c_Moneda.',-1,-1,False)
   else if Codigo='CFDI33113' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoCambio no tiene el valor "1" y la moneda indicada es MXN.',-1,-1,False)
   else if Codigo='CFDI33114' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoCambio se debe registrar cuando el campo Moneda tiene un valor distinto de MXN y XXX.',-1,-1,False)
   else if Codigo='CFDI33115' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoCambio no se debe registrar cuando el campo Moneda tiene el valor XXX.',-1,-1,False)
   else if Codigo='CFDI33116' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoCambio no cumple con el patrón requerido.',-1,-1,False)
   else if Codigo='CFDI33117' then raise EPACNoEncontradoParaCancelarException.Create('Cuando el valor del campo TipoCambio se encuentre fuera de los límites establecidos, debe existir el campo Confirmacion.',-1,-1,False)
   else if Codigo='CFDI33118' then raise EPACNoEncontradoParaCancelarException.Create('El campo Total no corresponde con la suma del subtotal, menos los descuentos aplicables, más las contribuciones recibidas'+' (impuestos trasladados - federales o locales, derechos, productos, aprovechamientos, aportaciones de seguridad social, contribuciones de mejoras) menos los impuestos retenidos.',-1,-1,False)
   else if Codigo='CFDI33119' then raise EPACNoEncontradoParaCancelarException.Create('Cuando el valor del campo Total se encuentre fuera de los límites establecidos, debe existir el campo Confirmacion.',-1,-1,False)
   else if Codigo='CFDI33120' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoDeComprobante, no contiene un valor del catálogo c_TipoDeComprobante.',-1,-1,False)
   else if Codigo='CFDI33121' then raise EPACNoEncontradoParaCancelarException.Create('El campo MetodoPago, no contiene un valor del catálogo c_MetodoPago.',-1,-1,False)
   else if Codigo='CFDI33122' then raise EPACNoEncontradoParaCancelarException.Create('Cuando se tiene el valor PIP en el campo MetodoPago y el valor en el campo TipoDeComprobante es I ó E, el CFDI debe contener un complemento de recibo de pago.',-1,-1,False)
   else if Codigo='CFDI33123' then raise EPACNoEncontradoParaCancelarException.Create('Se debe omitir el campo MetodoPago cuando el TipoDeComprobante es T o P.',-1,-1,False)
   else if Codigo='CFDI33124' then raise EPACNoEncontradoParaCancelarException.Create('Si existe el complemento para recepción de pagos en este CFDI el campo MetodoPago no debe existir.',-1,-1,False)
   else if Codigo='CFDI33125' then raise EPACNoEncontradoParaCancelarException.Create('El campo LugarExpedicion, no contiene un valor del catálogo c_CodigoPostal.',-1,-1,False)
   else if Codigo='CFDI33126' then raise EPACNoEncontradoParaCancelarException.Create('El campo Confirmacion no debe existir cuando los atributos TipoCambio y/o Total están dentro del rango permitido.',-1,-1,False)
   else if Codigo='CFDI33127' then raise EPACNoEncontradoParaCancelarException.Create('Número de confirmación inválido.',-1,-1,False)
   else if Codigo='CFDI33128' then raise EPACNoEncontradoParaCancelarException.Create('Número de confirmación utilizado previamente.',-1,-1,False)
   else if Codigo='CFDI33129' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoRelacion, no contiene un valor del catálogo c_TipoRelacion.',-1,-1,False)
   else if Codigo='CFDI33130' then raise EPACNoEncontradoParaCancelarException.Create('El campo RegimenFiscal, no contiene un valor del catálogo c_RegimenFiscal.',-1,-1,False)
   else if Codigo='CFDI33131' then raise EPACNoEncontradoParaCancelarException.Create('La clave del campo RegimenFiscal debe corresponder con el tipo de persona (fisica o moral).',-1,-1,False)
   else if Codigo='CFDI33132' then raise EPACNoEncontradoParaCancelarException.Create('Este RFC del receptor no existe en la lista de RFC inscritos no cancelados del SAT.',-1,-1,False)
   else if Codigo='CFDI33133' then raise EPACNoEncontradoParaCancelarException.Create('El campo ResidenciaFiscal, no contiene un valor del catálogo c_Pais.',-1,-1,False)
   else if Codigo='CFDI33134' then raise EPACNoEncontradoParaCancelarException.Create('El RFC del receptor es de un RFC registrado en el SAT o un RFC genérico nacional y existe el campo ResidenciaFiscal.',-1,-1,False)
   else if Codigo='CFDI33135' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo ResidenciaFiscal no puede ser MEX.',-1,-1,False)
   else if Codigo='CFDI33136' then raise EPACNoEncontradoParaCancelarException.Create('Se debe registrar un valor de acuerdo al catálogo c_Pais en en el campo ResidenciaFiscal, cuando en el en el campo NumRegIdTrib se registre información.',-1,-1,False)
   else if Codigo='CFDI33137' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo es un RFC inscrito no cancelado en el SAT o un RFC genérico nacional, y se registró el campo NumRegIdTrib.',-1,-1,False)
   else if Codigo='CFDI33138' then raise EPACNoEncontradoParaCancelarException.Create('Para registrar el campo NumRegIdTrib, el CFDI debe contener el complemento de comercio exterior y el RFC del receptor debe ser un RFC genérico extranjero.',-1,-1,False)
   else if Codigo='CFDI33139' then raise EPACNoEncontradoParaCancelarException.Create('El campo NumRegIdTrib no cumple con el patrón correspondiente.',-1,-1,False)
   else if Codigo='CFDI33140' then raise EPACNoEncontradoParaCancelarException.Create('El campo UsoCFDI, no contiene un valor del catálogo c_UsoCFDI.',-1,-1,False)
   else if Codigo='CFDI33141' then raise EPACNoEncontradoParaCancelarException.Create('La clave del campo UsoCFDI debe corresponder con el tipo de persona (fisica o moral).',-1,-1,False)
   else if Codigo='CFDI33142' then raise EPACNoEncontradoParaCancelarException.Create('El campo ClaveProdServ, no contiene un valor del catálogo c_ClaveProdServ.',-1,-1,False)
   else if Codigo='CFDI33143' then raise EPACNoEncontradoParaCancelarException.Create('No existe el complemento requerido para el valor de ClaveProdServ.',-1,-1,False)
   else if Codigo='CFDI33144' then raise EPACNoEncontradoParaCancelarException.Create('No está declarado el impuesto relacionado con el valor de ClaveProdServ.',-1,-1,False)
   else if Codigo='CFDI33145' then raise EPACNoEncontradoParaCancelarException.Create('El campo ClaveUnidad no contiene un valor del catálogo c_ClaveUnidad.',-1,-1,False)
   else if Codigo='CFDI33147' then raise EPACNoEncontradoParaCancelarException.Create('El valor valor del campo ValorUnitario debe ser mayor que cero (0) cuando el tipo de comprobante es Ingreso, Egreso o Nomina.',-1,-1,False)
   else if Codigo='CFDI33149' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe no se encuentra entre el limite inferior y superior permitido.',-1,-1,False)
   else if Codigo='CFDI33150' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Descuento debe tener hasta la cantidad de decimales que tenga registrado el atributo importe del concepto.',-1,-1,False)
   else if Codigo='CFDI33151' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Descuento es mayor que el campo Importe.',-1,-1,False)
   else if Codigo='CFDI33152' then raise EPACNoEncontradoParaCancelarException.Create('En caso de utilizar el nodo Impuestos en un concepto, se deben incluir impuestos  de traslado y/o retenciones.',-1,-1,False)
   else if Codigo='CFDI33154' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Base que corresponde a Traslado debe ser mayor que cero.',-1,-1,False)
   else if Codigo='CFDI33155' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Impuesto que corresponde a Traslado no contiene un valor del catálogo c_Impuesto.',-1,-1,False)
   else if Codigo='CFDI33156' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TipoFactor que corresponde a Traslado no contiene un valor del catálogo c_TipoFactor.',-1,-1,False)
   else if Codigo='CFDI33157' then raise EPACNoEncontradoParaCancelarException.Create('Si el valor registrado en el campo TipoFactor que corresponde a Traslado es Exento no se deben registrar los campos TasaOCuota ni Importe.',-1,-1,False)
   else if Codigo='CFDI33158' then raise EPACNoEncontradoParaCancelarException.Create('Si el valor registrado en el campo TipoFactor que corresponde a Traslado es Tasa o Cuota, se deben registrar los campos TasaOCuota e Importe.',-1,-1,False)
   else if Codigo='CFDI33159' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TasaOCuota que corresponde a Traslado no contiene un valor del catálogo c_TasaOcuota o se encuentra fuera de rango.',-1,-1,False)
   else if Codigo='CFDI33161' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe o que corresponde a Traslado no se encuentra entre el limite inferior y superior permitido.',-1,-1,False)
   else if Codigo='CFDI33163' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Base que corresponde a Retención debe ser mayor que cero.',-1,-1,False)
   else if Codigo='CFDI33164' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Impuesto que corresponde a Retención no contiene un valor del catálogo c_Impuesto.',-1,-1,False)
   else if Codigo='CFDI33165' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TipoFactor que corresponde a Retención no contiene un valor del catálogo c_TipoFactor.',-1,-1,False)
   else if Codigo='CFDI33166' then raise EPACNoEncontradoParaCancelarException.Create('Si el valor registrado en el campo TipoFactor que corresponde a Retención debe ser distinto de Exento.',-1,-1,False)
   else if Codigo='CFDI33167' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TasaOCuota que corresponde a Retención, no contiene un valor del catálogo c_TasaOcuota o se encuentra fuera de rango.',-1,-1,False)
   else if Codigo='CFDI33169' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe que corresponde a Retención no se encuentra entre el limite inferior y superior permitido.',-1,-1,False)
   else if Codigo='CFDI33170' then raise EPACNoEncontradoParaCancelarException.Create('El número de pedimento es inválido.',-1,-1,False)
   else if Codigo='CFDI33171' then raise EPACNoEncontradoParaCancelarException.Create('El NumeroPedimento no debe existir si se incluye el complemento de comercio exterior.',-1,-1,False)
   else if Codigo='CFDI33172' then raise EPACNoEncontradoParaCancelarException.Create('El campo ClaveProdServ, no contiene un valor del catálogo c_ClaveProdServ.',-1,-1,False)
   else if Codigo='CFDI33176' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe no se encuentra entre el limite inferior y superior permitido.',-1,-1,False)
   else if Codigo='CFDI33177' then raise EPACNoEncontradoParaCancelarException.Create('El número de pedimento es inválido.',-1,-1,False)
   else if Codigo='CFDI33178' then raise EPACNoEncontradoParaCancelarException.Create('El NumeroPedimento no debe existir si se incluye el complemento de comercio exterior.',-1,-1,False)
   else if Codigo='CFDI33179' then raise EPACNoEncontradoParaCancelarException.Create('Cuando el TipoDeComprobante sea T o P, el elemento Impuestos no debe existir.',-1,-1,False)
   else if Codigo='CFDI33180' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TotalImpuestosRetenidos debe tener hasta la cantidad de decimales que soporte la moneda.',-1,-1,False)
   else if Codigo='CFDI33181' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TotalImpuestosRetenidos debe ser igual a la suma de los importes registrados en el elemento hijo Retencion.',-1,-1,False)
   else if Codigo='CFDI33182' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TotalImpuestosTrasladados debe tener hasta la cantidad de decimales que soporte la moneda.',-1,-1,False)
   else if Codigo='CFDI33183' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TotalImpuestosTrasladados no es igual a la suma de los importes registrados en el elemento hijo Traslado.',-1,-1,False)
   else if Codigo='CFDI33184' then raise EPACNoEncontradoParaCancelarException.Create('Debe existir el campo TotalImpuestosRetenidos.',-1,-1,False)
   else if Codigo='CFDI33185' then raise EPACNoEncontradoParaCancelarException.Create('El campo Impuesto no contiene un valor del catálogo c_Impuesto.',-1,-1,False)
   else if Codigo='CFDI33186' then raise EPACNoEncontradoParaCancelarException.Create('Debe haber sólo un registro por cada tipo de impuesto retenido.',-1,-1,False)
   else if Codigo='CFDI33187' then raise EPACNoEncontradoParaCancelarException.Create('Debe existir el campo TotalImpuestosRetenidos.',-1,-1,False)
   else if Codigo='CFDI33189' then raise EPACNoEncontradoParaCancelarException.Create('El campo Importe correspondiente a Retención no es igual a la suma de los importes de los impuestos retenidos registrados en los conceptos donde el impuesto sea igual al campo impuesto de este elemento.',-1,-1,False)
   else if Codigo='CFDI33190' then raise EPACNoEncontradoParaCancelarException.Create('Debe existir el campo TotalImpuestosTrasladados.',-1,-1,False)
   else if Codigo='CFDI33191' then raise EPACNoEncontradoParaCancelarException.Create('El campo Impuesto no contiene un valor del catálogo c_Impuesto.',-1,-1,False)
   else if Codigo='CFDI33192' then raise EPACNoEncontradoParaCancelarException.Create('Debe haber sólo un registro con la misma combinación de impuesto, factor y tasa por cada traslado.',-1,-1,False)
   else if Codigo='CFDI33193' then raise EPACNoEncontradoParaCancelarException.Create('El valor seleccionado debe corresponder a un valor del catalogo donde la columna impuesto corresponda con el campo impuesto y la columna factor corresponda con el campo TipoFactor.',-1,-1,False)
   else if Codigo='CFDI33195' then raise EPACNoEncontradoParaCancelarException.Create('El campo Importe correspondiente a Traslado no es igual a la suma de los importes de los impuestos trasladados registrados en los conceptos donde el impuesto del concepto sea igual '+'al campo impuesto de este elemento y la TasaOCuota del concepto sea igual al campo TasaOCuota de este elemento.',-1,-1,False)
   else if Codigo='CFDI40102' then raise EPACNoEncontradoParaCancelarException.Create('El resultado de la digestión debe ser igual al resultado de la desencripción del sello.',-1,-1,False)
// 4.0
   else if Codigo='CFDI40102' then raise EPACNoEncontradoParaCancelarException.Create('El resultado de la digestión debe ser igual al resultado de la desencripción del sello.',-1,-1,False)
   else if Codigo='CFDI40103' then raise EPACNoEncontradoParaCancelarException.Create('Si existe el tipo de comprobante T, N o P el campo FormaPago no debe existir.',-1,-1,False)
   else if Codigo='CFDI40104' then raise EPACNoEncontradoParaCancelarException.Create('El campo FormaPago no contiene un valor del catálogo c_FormaPago.',-1,-1,False)
   else if Codigo='CFDI40105' then raise EPACNoEncontradoParaCancelarException.Create('El campo FormaPago no contiene el valor "99".',-1,-1,False)
   else if Codigo='CFDI40106' then raise EPACNoEncontradoParaCancelarException.Create('EL certificado no cumple con alguno de los valores permitidos.',-1,-1,False)
   else if Codigo='CFDI40107' then raise EPACNoEncontradoParaCancelarException.Create('El valor de este campo SubTotal excede la cantidad de decimales que soporta la moneda.',-1,-1,False)
   else if Codigo='CFDI40108' then raise EPACNoEncontradoParaCancelarException.Create('El TipoDeComprobante es I,E o N, el importe registrado en el campo no es igual al redondeo de la suma de los importes de los conceptos registrados.',-1,-1,False)
   else if Codigo='CFDI40109' then raise EPACNoEncontradoParaCancelarException.Create('El TipoDeComprobante es T o P y el importe no es igual a 0, o cero con decimales.',-1,-1,False)
   else if Codigo='CFDI40110' then raise EPACNoEncontradoParaCancelarException.Create('El valor registrado en el campo Descuento no es menor o igual que el campo Subtotal.',-1,-1,False)
   else if Codigo='CFDI40111' then raise EPACNoEncontradoParaCancelarException.Create('El TipoDeComprobante no es I,E o N, y un concepto incluye el campo descuento.',-1,-1,False)
   else if Codigo='CFDI40112' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Descuento excede la cantidad de decimales que soporta la moneda.',-1,-1,False)
   else if Codigo='CFDI40113' then raise EPACNoEncontradoParaCancelarException.Create('El campo Moneda no contiene un valor del catálogo c_Moneda.',-1,-1,False)
   else if Codigo='CFDI40114' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoCambio no tiene el valor "1" y la moneda indicada es MXN.',-1,-1,False)
   else if Codigo='CFDI40115' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoCambio se debe registrar cuando el campo Moneda tiene un valor distinto de MXN y XXX.',-1,-1,False)
   else if Codigo='CFDI40116' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoCambio no se debe registrar cuando el campo Moneda tiene el valor XXX.',-1,-1,False)
   else if Codigo='CFDI40117' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoCambio no cumple con el patrón requerido.',-1,-1,False)
   else if Codigo='CFDI40118' then raise EPACNoEncontradoParaCancelarException.Create('Cuando el valor del campo TipoCambio se encuentre fuera de los límites establecidos, debe existir el campo Confirmacion.',-1,-1,False)
   else if Codigo='CFDI40119' then raise EPACNoEncontradoParaCancelarException.Create('El campo Total no corresponde con la suma del subtotal,'+' menos los descuentos aplicables, más las contribuciones recibidas (impuestos trasladados - federales o locales, derechos, productos, aprovechamientos, aportaciones de seguridad social, contribuciones de mejoras) menos los impuestos retenidos y/o locales.',-1,-1,False)
   else if Codigo='CFDI40120' then raise EPACNoEncontradoParaCancelarException.Create('Cuando el valor del campo Total se encuentre fuera de los límites establecidos, debe existir el campo Confirmacion.',-1,-1,False)
   else if Codigo='CFDI40121' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoDeComprobante, no contiene un valor del catálogo c_TipoDeComprobante.',-1,-1,False)
   else if Codigo='CFDI40122' then raise EPACNoEncontradoParaCancelarException.Create('El campo Exportacion contiene el valor "02", el CFDI debe contener el complemento para Comercio Exterior.',-1,-1,False)
   else if Codigo='CFDI40123' then raise EPACNoEncontradoParaCancelarException.Create('El campo Exportacion no contiene un valor del catálogo c_Exportacion.',-1,-1,False)
   else if Codigo='CFDI40124' then raise EPACNoEncontradoParaCancelarException.Create('El campo MetodoPago, no contiene un valor del catálogo c_MetodoPago.',-1,-1,False)
   else if Codigo='CFDI40125' then raise EPACNoEncontradoParaCancelarException.Create('Se debe omitir el campo MetodoPago cuando el TipoDeComprobante es T o P.',-1,-1,False)
   else if Codigo='CFDI40126' then raise EPACNoEncontradoParaCancelarException.Create('El campo LugarExpedicion, no contiene un valor del catálogo c_CodigoPostal.',-1,-1,False)
   else if Codigo='CFDI40127' then raise EPACNoEncontradoParaCancelarException.Create('El campo Confirmacion no debe existir cuando los campos TipoCambio y/o Total están dentro del rango permitido.',-1,-1,False)
   else if Codigo='CFDI40128' then raise EPACNoEncontradoParaCancelarException.Create('Número de confirmación inválido.',-1,-1,False)
   else if Codigo='CFDI40129' then raise EPACNoEncontradoParaCancelarException.Create('Número de confirmación utilizado previamente.',-1,-1,False)
   else if Codigo='CFDI40130' then raise EPACNoEncontradoParaCancelarException.Create('El campo Rfc del nodo receptor debe contener valor "XAXX010101000" y el valor del campo Nombre del nodo Receptor debe contener el valor ?PUBLICO EN GENERAL?.',-1,-1,False)
   else if Codigo='CFDI40131' then raise EPACNoEncontradoParaCancelarException.Create('El campo Periodicidad, no contiene un valor del catálogo c_Periodicidad.',-1,-1,False)
   else if Codigo='CFDI40132' then raise EPACNoEncontradoParaCancelarException.Create('El campo RegimenFiscal, no contiene el valor 621',-1,-1,False)
   else if Codigo='CFDI40133' then raise EPACNoEncontradoParaCancelarException.Create('El campo Meses, no contiene un valor del catálogo c_Meses.',-1,-1,False)
   else if Codigo='CFDI40134' then raise EPACNoEncontradoParaCancelarException.Create('El campo Meses, no contiene alguno de los valores ?01?, ?02?, ?03?, ?04?, ?05?, ?06?, ?07?, ?08?, ?09?, ?10?, ?11? o "12".',-1,-1,False)
   else if Codigo='CFDI40135' then raise EPACNoEncontradoParaCancelarException.Create('El campo Meses, no contiene alguno de los valores ?13?, ?14?, ?15?, ?16?, ?17? o ?18?.',-1,-1,False)
   else if Codigo='CFDI40136' then raise EPACNoEncontradoParaCancelarException.Create('El campo Año, no es igual al año en curso o al año inmediato anterior.',-1,-1,False)
   else if Codigo='CFDI40137' then raise EPACNoEncontradoParaCancelarException.Create('El campo TipoRelacion, no contiene un valor del catálogo c_TipoRelacion.',-1,-1,False)
   else if Codigo='CFDI40138' then raise EPACNoEncontradoParaCancelarException.Create('El campo Nombre del emisor, no corresponde con el nombre del titular del certificado de sello digital del Emisor.',-1,-1,False)
   else if Codigo='CFDI40139' then raise EPACNoEncontradoParaCancelarException.Create('El campo Nombre del emisor no debe corresponde a un  nombre del titular del certificado de sello digital del Emisor',-1,-1,False)
   else if Codigo='CFDI40140' then raise EPACNoEncontradoParaCancelarException.Create('El campo RegimenFiscal, no contiene un valor del catálogo c_RegimenFiscal.',-1,-1,False)
   else if Codigo='CFDI40141' then raise EPACNoEncontradoParaCancelarException.Create('La clave del campo RegimenFiscal debe corresponder con el tipo de persona (fisica o moral).',-1,-1,False)
   else if Codigo='CFDI40142' then raise EPACNoEncontradoParaCancelarException.Create('El campo FacAtrAdquirente, no contiene un número de operación valido.',-1,-1,False)
   else if Codigo='CFDI40143' then raise EPACNoEncontradoParaCancelarException.Create('Este RFC del receptor no existe en la lista de RFC inscritos no cancelados del SAT.',-1,-1,False)
   else if Codigo='CFDI40144' then raise EPACNoEncontradoParaCancelarException.Create('El campo Nombre del receptor, debe encontrarse en la lista de RFC inscritos no cancelados en el SAT.',-1,-1,False)
   else if Codigo='CFDI40145' then raise EPACNoEncontradoParaCancelarException.Create('El campo Nombre del receptor, debe pertenecer al nombre asociado al RFC registrado en el campo Rfc del Receptor.',-1,-1,False)
   else if Codigo='CFDI40146' then raise EPACNoEncontradoParaCancelarException.Create('El campo RFC del receptor debe contener el valor  "XAXX010101000".',-1,-1,False)
   else if Codigo='CFDI40147' then raise EPACNoEncontradoParaCancelarException.Create('El campo DomicilioFiscalReceptor del receptor, debe encontrarse en la lista de RFC inscritos no cancelados en el SAT.',-1,-1,False)
   else if Codigo='CFDI40148' then raise EPACNoEncontradoParaCancelarException.Create('El campo DomicilioFiscalReceptor del receptor, debe pertenecer al nombre asociado al RFC registrado en el campo Rfc del Receptor.',-1,-1,False)
   else if Codigo='CFDI40149' then raise EPACNoEncontradoParaCancelarException.Create('El campo DomicilioFiscalReceptor, no es igual al valor del campo LugarExpedicion.',-1,-1,False)
   else if Codigo='CFDI40150' then raise EPACNoEncontradoParaCancelarException.Create('El campo ResidenciaFiscal, no contiene un valor del catálogo c_Pais.',-1,-1,False)
   else if Codigo='CFDI40151' then raise EPACNoEncontradoParaCancelarException.Create('El RFC del receptor es de un RFC registrado en el SAT o un RFC genérico nacional y existe el campo ResidenciaFiscal.',-1,-1,False)
   else if Codigo='CFDI40152' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo ResidenciaFiscal no puede ser MEX.',-1,-1,False)
   else if Codigo='CFDI40153' then raise EPACNoEncontradoParaCancelarException.Create('Se debe registrar un valor de acuerdo al catálogo c_Pais en en el campo ResidenciaFiscal, cuando en el en el campo NumRegIdTrib se registre información.',-1,-1,False)
   else if Codigo='CFDI40154' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo es un RFC inscrito no cancelado en el SAT o un RFC genérico nacional, y se registró el campo NumRegIdTrib.',-1,-1,False)
   else if Codigo='CFDI40155' then raise EPACNoEncontradoParaCancelarException.Create('Para registrar el campo NumRegIdTrib, el CFDI debe contener el complemento de comercio exterior y el RFC del receptor debe ser un RFC genérico extranjero.',-1,-1,False)
   else if Codigo='CFDI40156' then raise EPACNoEncontradoParaCancelarException.Create('El campo NumRegIdTrib no cumple con el patrón correspondiente.',-1,-1,False)
   else if Codigo='CFDI40157' then raise EPACNoEncontradoParaCancelarException.Create('El campo RegimenFiscalR, no contiene un valor del catálogo c_RegimenFiscal.',-1,-1,False)
   else if Codigo='CFDI40158' then raise EPACNoEncontradoParaCancelarException.Create('La clave del campo RegimenFiscalR debe corresponder con el tipo de persona (física o moral).',-1,-1,False)
   else if Codigo='CFDI40159' then raise EPACNoEncontradoParaCancelarException.Create('La clave del campo RegimenFiscalR no corresponde de acuerdo al RFC del receptor.',-1,-1,False)
   else if Codigo='CFDI40160' then raise EPACNoEncontradoParaCancelarException.Create('El campo UsoCFDI, no contiene un valor del catálogo c_UsoCFDI.',-1,-1,False)
   else if Codigo='CFDI40161' then raise EPACNoEncontradoParaCancelarException.Create('La clave del campo UsoCFDI debe corresponder con el tipo de persona (física o moral) y el régimen correspondiente conforme al catálogo c_UsoCFDI.',-1,-1,False)
   else if Codigo='CFDI40162' then raise EPACNoEncontradoParaCancelarException.Create('El campo ClaveProdServ, no contiene un valor del catálogo c_ClaveProdServ.',-1,-1,False)
   else if Codigo='CFDI40163' then raise EPACNoEncontradoParaCancelarException.Create('No existe el complemento requerido para el valor de ClaveProdServ.',-1,-1,False)
   else if Codigo='CFDI40164' then raise EPACNoEncontradoParaCancelarException.Create('No está declarado el impuesto relacionado con el valor de ClaveProdServ.',-1,-1,False)
   else if Codigo='CFDI40165' then raise EPACNoEncontradoParaCancelarException.Create('El campo ClaveUnidad no contiene un valor del catálogo c_ClaveUnidad.',-1,-1,False)
   else if Codigo='CFDI40166' then raise EPACNoEncontradoParaCancelarException.Create('El valor valor del campo ValorUnitario debe ser mayor que cero (0) cuando el tipo de comprobante es Ingreso, Egreso o Nomina.',-1,-1,False)
   else if Codigo='CFDI40167' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe no se encuentra entre el limite inferior y superior permitido.',-1,-1,False)
   else if Codigo='CFDI40168' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Descuento debe tener hasta la cantidad de decimales que tenga registrado el campo importe del concepto.',-1,-1,False)
   else if Codigo='CFDI40169' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Descuento es mayor que el campo Importe.',-1,-1,False)
   else if Codigo='CFDI40170' then raise EPACNoEncontradoParaCancelarException.Create('El campo ObjetoImp, no contiene un valor del catálogo c_ObjetoImp.',-1,-1,False)
   else if Codigo='CFDI40171' then raise EPACNoEncontradoParaCancelarException.Create('El nodo concepto, no contiene el nodo hijo Impuestos.',-1,-1,False)
   else if Codigo='CFDI40172' then raise EPACNoEncontradoParaCancelarException.Create('El nodo hijo Impuestos del nodo concepto, no debe existir.',-1,-1,False)
   else if Codigo='CFDI40173' then raise EPACNoEncontradoParaCancelarException.Create('En caso de utilizar el nodo Impuestos en un concepto, se deben incluir impuestos  de traslado y/o retenciones.',-1,-1,False)
   else if Codigo='CFDI40174' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Base que corresponde a Traslado debe ser mayor que cero.',-1,-1,False)
   else if Codigo='CFDI40175' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Impuesto que corresponde a Traslado no contiene un valor del catálogo c_Impuesto.',-1,-1,False)
   else if Codigo='CFDI40176' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TipoFactor que corresponde a Traslado no contiene un valor del catálogo c_TipoFactor.',-1,-1,False)
   else if Codigo='CFDI40177' then raise EPACNoEncontradoParaCancelarException.Create('Si el valor registrado en el campo TipoFactor que corresponde a Traslado es Exento no se deben registrar los campos TasaOCuota ni Importe.',-1,-1,False)
   else if Codigo='CFDI40178' then raise EPACNoEncontradoParaCancelarException.Create('Si el valor registrado en el campo TipoFactor que corresponde a Traslado es Tasa o Cuota, se deben registrar los campos TasaOCuota e Importe.',-1,-1,False)
   else if Codigo='CFDI40179' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TasaOCuota que corresponde a Traslado no contiene un valor del catálogo c_TasaOcuota o se encuentra fuera de rango.',-1,-1,False)
   else if Codigo='CFDI40180' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe o que corresponde a Traslado no se encuentra entre el limite inferior y superior permitido.',-1,-1,False)
   else if Codigo='CFDI40181' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Base que corresponde a Retención debe ser mayor que cero.',-1,-1,False)
   else if Codigo='CFDI40182' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Impuesto que corresponde a Retención no contiene un valor del catálogo c_Impuesto.',-1,-1,False)
   else if Codigo='CFDI40183' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TipoFactor que corresponde a Retención no contiene un valor del catálogo c_TipoFactor.',-1,-1,False)
   else if Codigo='CFDI40184' then raise EPACNoEncontradoParaCancelarException.Create('Si el valor registrado en el campo TipoFactor que corresponde a Retención debe ser distinto de Exento.',-1,-1,False)
   else if Codigo='CFDI40185' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TasaOCuota que corresponde a Retención, no contiene un valor del catálogo c_TasaOcuota o se encuentra fuera de rango.',-1,-1,False)
   else if Codigo='CFDI40186' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe que corresponde a Retención no se encuentra entre el limite inferior y superior permitido.',-1,-1,False)
   else if Codigo='CFDI40187' then raise EPACNoEncontradoParaCancelarException.Create('El campo ACuentaTerceros, no se encuentra en la lista l_LCO.',-1,-1,False)
   else if Codigo='CFDI40188' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo RfcACuentaTerceros, debe ser diferente de los valores de los campos Rfc del Emisor y Receptor.',-1,-1,False)
   else if Codigo='CFDI40189' then raise EPACNoEncontradoParaCancelarException.Create('El campo NombreACuentaTerceros, debe encontrarse en la lista de RFC inscritos no cancelados en el SAT.',-1,-1,False)
   else if Codigo='CFDI40190' then raise EPACNoEncontradoParaCancelarException.Create('El campo NombreACuentaTerceros, debe pertenecer al nombre asociado al RFC registrado en el campo Rfc del tercero.',-1,-1,False)
   else if Codigo='CFDI40191' then raise EPACNoEncontradoParaCancelarException.Create('El campo RegimenFiscalACuentaTerceros, no contiene un valor del catálogo c_RegimenFiscal.',-1,-1,False)
   else if Codigo='CFDI40192' then raise EPACNoEncontradoParaCancelarException.Create('El campo DomicilioFiscalACuentaTerceros, debe encontrarse en la lista de RFC inscritos no cancelados en el SAT.',-1,-1,False)
   else if Codigo='CFDI40193' then raise EPACNoEncontradoParaCancelarException.Create('El campo DomicilioFiscalACuentaTerceros, debe pertenecer al nombre asociado al RFC registrado en el campo Rfc del tercero.',-1,-1,False)
   else if Codigo='CFDI40194' then raise EPACNoEncontradoParaCancelarException.Create('El número de pedimento es inválido.',-1,-1,False)
   else if Codigo='CFDI40195' then raise EPACNoEncontradoParaCancelarException.Create('El NumeroPedimento no debe existir si se incluye el complemento de comercio exterior.',-1,-1,False)
   else if Codigo='CFDI40196' then raise EPACNoEncontradoParaCancelarException.Create('El campo ClaveProdServ, no contiene un valor del catálogo c_ClaveProdServ.',-1,-1,False)
   else if Codigo='CFDI40197' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo ValorUnitario debe ser mayor que cero (0).',-1,-1,False)
   else if Codigo='CFDI40198' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe no se encuentra entre el limite inferior y superior permitido.',-1,-1,False)
   else if Codigo='CFDI40199' then raise EPACNoEncontradoParaCancelarException.Create('El número de pedimento es inválido.',-1,-1,False)
   else if Codigo='CFDI40200' then raise EPACNoEncontradoParaCancelarException.Create('El NumeroPedimento no debe existir si se incluye el complemento de comercio exterior.',-1,-1,False)
   else if Codigo='CFDI40201' then raise EPACNoEncontradoParaCancelarException.Create('Cuando el TipoDeComprobante sea T o P, el elemento Impuestos no debe existir.',-1,-1,False)
   else if Codigo='CFDI40202' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TotalImpuestosRetenidos debe tener hasta la cantidad de decimales que soporte la moneda.',-1,-1,False)
   else if Codigo='CFDI40203' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TotalImpuestosRetenidos debe ser igual a la suma de los importes registrados en el elemento hijo Retencion.',-1,-1,False)
   else if Codigo='CFDI40204' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TotalImpuestosTrasladados debe tener hasta la cantidad de decimales que soporte la moneda.',-1,-1,False)
   else if Codigo='CFDI40205' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo TotalImpuestosTrasladados no es igual a la suma de los importes registrados en el elemento hijo Traslado.',-1,-1,False)
   else if Codigo='CFDI40206' then raise EPACNoEncontradoParaCancelarException.Create('Debe existir el campo TotalImpuestosRetenidos.',-1,-1,False)
   else if Codigo='CFDI40207' then raise EPACNoEncontradoParaCancelarException.Create('El campo Impuesto no contiene un valor del catálogo c_Impuesto.',-1,-1,False)
   else if Codigo='CFDI40208' then raise EPACNoEncontradoParaCancelarException.Create('Debe haber sólo un registro por cada tipo de impuesto retenido.',-1,-1,False)
   else if Codigo='CFDI40209' then raise EPACNoEncontradoParaCancelarException.Create('Debe existir el campo TotalImpuestosRetenidos.',-1,-1,False)
   else if Codigo='CFDI40210' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe correspondiente a Retención debe tener hasta la cantidad de decimales que soporte la moneda.',-1,-1,False)
   else if Codigo='CFDI40211' then raise EPACNoEncontradoParaCancelarException.Create('El campo Importe correspondiente a Retención no es igual al redondeo de la suma de los importes de los impuestos retenidos registrados en los conceptos donde el impuesto sea igual al campo impuesto de este elemento.',-1,-1,False)
   else if Codigo='CFDI40212' then raise EPACNoEncontradoParaCancelarException.Create('Debe existir el campo TotalImpuestosTrasladados.',-1,-1,False)
   else if Codigo='CFDI40213' then raise EPACNoEncontradoParaCancelarException.Create('Deben exitir los campos Base, Impuesto y TipoFactor',-1,-1,False)
   else if Codigo='CFDI40214' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe correspondiente a Traslado debe tener hasta la cantidad de decimales que soporte la moneda.',-1,-1,False)
   else if Codigo='CFDI40215' then raise EPACNoEncontradoParaCancelarException.Create('El campo Importe correspondiente a Traslado no es igual al redondeo de la suma de los importes '+'de las bases trasladados registrados en los conceptos donde el impuesto del concepto sea igual al campo impuesto de este elemento y la TasaOCuota del concepto sea igual al campo TasaOCuota de este elemento.',-1,-1,False)
   else if Codigo='CFDI40216' then raise EPACNoEncontradoParaCancelarException.Create('El importe del campo Base correspondiente a Traslado no es igual al redondeo de la suma de los importes de las bases trasladados registrados en los conceptos.',-1,-1,False)
   else if Codigo='CFDI40217' then raise EPACNoEncontradoParaCancelarException.Create('El campo Impuesto no contiene un valor del catálogo c_Impuesto.',-1,-1,False)
   else if Codigo='CFDI40218' then raise EPACNoEncontradoParaCancelarException.Create('Debe haber sólo un registro con la misma combinación de impuesto, factor y tasa por cada traslado.',-1,-1,False)
   else if Codigo='CFDI40219' then raise EPACNoEncontradoParaCancelarException.Create('El valor seleccionado debe corresponder a un valor del catalogo donde la columna impuesto corresponda con el campo impuesto y la columna factor corresponda con el campo TipoFactor.',-1,-1,False)
   else if Codigo='CFDI40220' then raise EPACNoEncontradoParaCancelarException.Create('El valor del campo Importe correspondiente a Traslado debe tener hasta la cantidad de decimales que soporte la moneda.',-1,-1,False)
   else if Codigo='CFDI40221' then raise EPACNoEncontradoParaCancelarException.Create('El campo Importe correspondiente a Traslado no es igual al redondeo de la'+' suma de los importes de los impuestos trasladados registrados en los conceptos donde el impuesto del concepto sea igual al campo impuesto de este elemento y la TasaOCuota del concepto sea igual al campo TasaOCuota de este elemento.',-1,-1,False)
   else if Codigo='CFDI40999' then raise EPACNoEncontradoParaCancelarException.Create('Error no clasificado.',-1,-1,False)
   else result := false;
  end;

  function RaisePACCodEstatusAlfaCCE( Codigo: string ): boolean;
  begin
   result := true;
   if Codigo='CCE101' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante no tiene un valor valido',-1,-1,False)
   else if Codigo='CCE102' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:fecha no cumple con el patrón requerido.',-1,-1,False)
   else if Codigo='CCE103' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:subtotal no coincide con la suma de los atributos importe de los nodos Concepto.',-1,-1,False)
   else if Codigo='CCE104' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Moneda se debe registrar',-1,-1,False)
   else if Codigo='CCE105' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Moneda no contiene un valor del catálogo catCFDI:c_Moneda.',-1,-1,False)
   else if Codigo='CCE106' then raise EPACNoEncontradoParaCancelarException.Create('El atributo TipoCambio no tiene el valor "1" y la moneda indicada es MXN.',-1,-1,False)
   else if Codigo='CCE107' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:TipoCambio se debe registrar cuando el atributo cfdi:Comprobante:Moneda tiene un valor distinto de MXN y XXX.',-1,-1,False)
   else if Codigo='CCE108' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:TipoCambio no se debe registrar cuando el atributo cfdi:Comprobante:Moneda tiene el valor XXX.',-1,-1,False)
   else if Codigo='CCE109' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:TipoCambio no cumple con el patrón requerido.',-1,-1,False)
   else if Codigo='CCE110' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:tipoDeComprobante no cumple con alguno de los valores permitidos.',-1,-1,False)
   else if Codigo='CCE111' then raise EPACNoEncontradoParaCancelarException.Create('El atributo MotivoTraslado debe registrarse cuando cfdi:Comprobante:tipoDeComprobante tiene el valor "traslado".',-1,-1,False)
   else if Codigo='CCE112' then raise EPACNoEncontradoParaCancelarException.Create('El nodo Propietario se debe registrar cuando cfdi:Comprobante:tipoDeComprobante tiene el valor "traslado" y MotivoTraslado tiene la clave "05".',-1,-1,False)
   else if Codigo='CCE113' then raise EPACNoEncontradoParaCancelarException.Create('El atributo MotivoTraslado no debe existir cuando cfdi:Comprobante:tipoDeComprobante es distinto de "traslado".',-1,-1,False)
   else if Codigo='CCE114' then raise EPACNoEncontradoParaCancelarException.Create('El nodo Propietario no debe existir cuando cfdi:Comprobante:tipoDeComprobante es distinto de "traslado" y MotivoTraslado tiene una clave distinta de "05".',-1,-1,False)
   else if Codigo='CCE115' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:total no coincide con la suma del cfdi:Comprobante:subTotal, menos el cfdi:Comprobante:descuento, más cfdi:Comprobante:Impuestos:totalImpuestosTrasladados menos cfdi:Comprobante:Impuestos:totalImpuestosRetenidos.',-1,-1,False)
   else if Codigo='CCE116' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:LugarExpedicion no cumple con alguno de los valores permitidos.',-1,-1,False)
   else if Codigo='CCE117' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:Nombre se debe registrar.',-1,-1,False)
   else if Codigo='CCE118' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:DomicilioFiscal:pais debe tener el valor "MEX".',-1,-1,False)
   else if Codigo='CCE119' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:ExpedidoEn:pais debe tener el valor "MEX".',-1,-1,False)
   else if Codigo='CCE120' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:DomicilioFiscal:estado debe contener una clave del catálogo catCFDI:c_Estado donde la columna c_Pais tenga el valor "MEX".',-1,-1,False)
   else if Codigo='CCE121' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:ExpedidoEn:estado debe contener una clave del catálogo catCFDI:c_Estado donde la columna c_Pais tenga el valor "MEX".',-1,-1,False)
   else if Codigo='CCE122' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:DomicilioFiscal:municipio debe contener una clave del catálogo de catCFDI:c_Municipio donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo estado si el nodo es generado.',-1,-1,False)
   else if Codigo='CCE123' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:ExpedidoEn:municipio debe contener una clave del catálogo de catCFDI:c_Municipio donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo estado si el nodo es generado.',-1,-1,False)
   else if Codigo='CCE124' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:DomicilioFiscal:localidad debe contener una clave del catálogo de catCFDI:c_Localidad, donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo estado si el nodo es generado.',-1,-1,False)
   else if Codigo='CCE125' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:ExpedidoEn:localidad debe contener una clave del catálogo de catCFDI:c_Localidad, donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo estado si el nodo es generado.',-1,-1,False)
   else if Codigo='CCE126' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:DomicilioFiscal:colonia debe contener una clave del catálogo de catCFDI:c_Colonia, donde la columna c_CodigoPostal debe ser igual a la clave registrada en el atributo codigoPostal si el nodo es generado.',-1,-1,False)
   else if Codigo='CCE127' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:ExpedidoEn:colonia debe contener una clave del catálogo de catCFDI:c_Colonia, donde la columna c_CodigoPostal debe ser igual a la clave registrada en el atributo codigoPostal si el nodo es generado.',-1,-1,False)
   else if Codigo='CCE128' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:DomicilioFiscal:codigoPostal debe contener una clave del catálogo de catCFDI:c_CodigoPostal, donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo estado, la columna'+' clave de c_Municipio debe ser igual a la clave registrada en el atributo municipio, y si existe el atributo de localidad, la columna clave de c_Localidad debe ser igual a la clave registrada en el atributo localidad si el nodo es generado.',-1,-1,False)
   else if Codigo='CCE129' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:ExpedidoEn:codigoPostal debe contener una clave del catálogo de catCFDI:c_CodigoPostal, donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo estado, la columna clave'+' de c_Municipio debe ser igual a la clave registrada en el atributo municipio, y si existe el atributo de localidad, la columna clave de c_Localidad debe ser igual a la clave registrada en el atributo localidad si el nodo es generado.',-1,-1,False)
   else if Codigo='CCE130' then raise EPACNoEncontradoParaCancelarException.Create('El nodo Comprobante.Emisor.RegimenFiscal debe tener solo un elemento hijo Regimen.',-1,-1,False)
   else if Codigo='CCE131' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:RegistroFiscal:Regimen no cumple con alguno de los valores permitidos para el tipo de persona del emisor.',-1,-1,False)
   else if Codigo='CCE132' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:rfc no tiene el valor "XEXX010101000" y el tipoDeComprobante tiene un valor distinto de "traslado" y MotivoTraslado un valor distinto de "02".',-1,-1,False)
   else if Codigo='CCE133' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:rfc debe tener un RFC válido dentro de la lista de RFC''s o el valor "XEXX010101000" cuando el tipoDeComprobante es "traslado" y MotivoTraslado es "02".',-1,-1,False)
   else if Codigo='CCE134' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:nombre se debe registrar.',-1,-1,False)
   else if Codigo='CCE135' then raise EPACNoEncontradoParaCancelarException.Create('El nodo cfdi:Comprobante:Receptor:Domicilio se debe registrar.',-1,-1,False)
   else if Codigo='CCE136' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Domicilio:estado debe '+'contener una clave del catálogo catCFDI:c_Estado donde la columna c_Pais tenga el valor "MEX" si el atributo pais tiene el valor "MEX", el tipoDeComprobante es "traslado" y MotivoTraslado tiene el valor "02".',-1,-1,False)
   else if Codigo='CCE137' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Domicilio:municipio '+'debe contener una clave del catálogo de catCFDI:c_Municipio donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo estado si el atributo pais tiene el valor "MEX", el '+'tipoDeComprobante es "traslado" y MotivoTraslado tiene el valor "02".',-1,-1,False)
   else if Codigo='CCE138' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Domicilio:localidad debe '+'contener una clave del catálogo de catCFDI:c_Localidad, donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo estado si el atributo pais tiene el valor "MEX", el '+'tipoDeComprobante es "traslado" y MotivoTraslado tiene el valor "02".',-1,-1,False)
   else if Codigo='CCE139' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Domicilio:colonia debe '+'contener una clave del catálogo de catCFDI:c_Colonia, donde la columna c_CodigoPostal debe ser igual a la clave registrada en el atributo codigoPostal si el atributo pais tiene el valor "MEX", el '+'tipoDeComprobante es "traslado" y MotivoTraslado tiene el valor "02".',-1,-1,False)
   else if Codigo='CCE140' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Domicilio:codigoPostal '+'debe contener una clave del catálogo de catCFDI:c_CodigoPostal, donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo estado, la columna clave de c_Municipio debe '+'ser igual a la clave registrada en el atributo municipio, y si existe el atributo de localidad, la columna clave de c_Localidad debe ser igual a la '+'clave registrada en el atributo localidad si el atributo pais tiene el valor "MEX", el tipoDeComprobante es "traslado" y MotivoTraslado tiene el valor "02".',-1,-1,False)
   else if Codigo='CCE141' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Domicilio:pais debe ser '+'distinto de "MEX" y existir en el catálogo catCFDI:c_Pais si tipoDeComprobante es distinto de "traslado" o MotivoTraslado es distinto de "02".',-1,-1,False)
   else if Codigo='CCE142' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Domicilio:pais debe '+'contener una clave del catálogo catCFDI:c_Estado donde la columna c_Pais sea igual a la clave del pais registrada en el atributo pais del mismo nodo.',-1,-1,False)
   else if Codigo='CCE143' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Domicilio:codigoPostal '+'se debe registrar cuando tipoDeComprobante es distinto de "traslado" o MotivoTraslado es distinto de "02" y el pais es distinto de "MEX".',-1,-1,False)
   else if Codigo='CCE144' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Domicilio:codigoPostal '+'debe cumplir con el patrón especificado en el catálogo catCFDI:c_Pais cuando tipoDeComprobante es distinto de "traslado" o MotivoTraslado es distinto de "02" y el pais es distinto de "MEX".',-1,-1,False)
   else if Codigo='CCE145' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:TipoDeComprobante no cumple con '+'alguno de los valores permitidos para este complemento.',-1,-1,False)
   else if Codigo='CCE146' then raise EPACNoEncontradoParaCancelarException.Create('El atributo MotivoTraslado se debe registrar cuando el atributo '+'cfdi:Comprobante:TipoDeComprobante tiene el valor "T".',-1,-1,False)
   else if Codigo='CCE147' then raise EPACNoEncontradoParaCancelarException.Create('El nodo Propietario se debe registrar cuando el atributo '+'cfdi:Comprobante:TipoDeComprobante tiene el valor "T" y MotivoTraslado tiene la clave "05".',-1,-1,False)
   else if Codigo='CCE148' then raise EPACNoEncontradoParaCancelarException.Create('El nodo Propietario no se debe registrar cuando el atributo  '+'cfdi:Comprobante:TipoDeComprobante tiene un valor distinto de "T" y MotivoTraslado tiene una clave distinta de "05".',-1,-1,False)
   else if Codigo='CCE149' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Emisor:Nombre se debe registrar.',-1,-1,False)
   else if Codigo='CCE150' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfd:Comprobante:Receptor:Rfc no tiene el valor '+'"XEXX010101000" y el TipoDeComprobante tiene un valor distinto de "T" y MotivoTraslado un valor distinto de "02".',-1,-1,False)
   else if Codigo='CCE151' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Rfc debe tener un RFC '+'válido dentro de la lista de RFC''s o el valor "XEXX010101000" cuando el TipoDeComprobante es "T" y MotivoTraslado es "02".',-1,-1,False)
   else if Codigo='CCE152' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Receptor:Nombre se debe registrar.',-1,-1,False)
   else if Codigo='CCE153' then raise EPACNoEncontradoParaCancelarException.Create('El nodo cce11:ComercioExterior no puede registrarse mas de una vez.',-1,-1,False)
   else if Codigo='CCE154' then raise EPACNoEncontradoParaCancelarException.Create('El nodo cce11:ComercioExterior debe registrarse como un nodo hijo del nodo Complemento en el CFDI.',-1,-1,False)
   else if Codigo='CCE155' then raise EPACNoEncontradoParaCancelarException.Create('El nodo cce11:ComercioExterior solo puede coexistir con los complementos Timbre Fiscal Digital, otros derechos e impuestos, leyendas fiscales, recepción de pago, CFDI registro fiscal.',-1,-1,False)
   else if Codigo='CCE156' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:FolioFiscalOrig se debe registrar si el valor de cce11:ComercioExterior:MotivoTraslado es "01".',-1,-1,False)
   else if Codigo='CCE157' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:CfdiRelacionados:CfdiRelacionado:UUID se debe registrar si el valor de cce11:ComercioExterior:MotivoTraslado es "01" con el tipo de relación "05".',-1,-1,False)
   else if Codigo='CCE158' then raise EPACNoEncontradoParaCancelarException.Create('El atributo XXXXX no debe existir si el valor de cce11:ComercioExterior:TipoOperacion es "A".',-1,-1,False)
   else if Codigo='CCE159' then raise EPACNoEncontradoParaCancelarException.Create('El atributo XXXX debe registrarse si la clave de cce11:ComercioExterior:TipoOperacion registrada es "1" ó "2".',-1,-1,False)
   else if Codigo='CCE160' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:NumCertificadoOrigen no se debe registrar si el valor de cce11:ComercioExterior:CertificadoOrigen es "0".',-1,-1,False)
   else if Codigo='CCE161' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:NumExportadorConfiable no se debe registrar si la clave de país del receptor o del destinatario no corresponde a un país del catálogo catCFDI:c_Pais donde la columna Agrupación tenga el valor Unión Europea.',-1,-1,False)
   else if Codigo='CCE162' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:TotalUSD no coincide con la suma de ValorDolares de las mercancías.',-1,-1,False)
   else if Codigo='CCE163' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:TotalUSD debe registrarse con dos decimales.',-1,-1,False)
   else if Codigo='CCE164' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Emisor:Curp no se debe registrar si el atributo Rfc del nodo cfdi:Comprobante:Emisor es de longitud 12.',-1,-1,False)
   else if Codigo='CCE165' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Emisor:Curp se debe registrar si el atributo Rfc del nodo cfdi:Comprobante:Emisor es de longitud 13.',-1,-1,False)
   else if Codigo='CCE166' then raise EPACNoEncontradoParaCancelarException.Create('El nodo cce11:ComercioExterior:Emisor:Domicilio no debe registrarse si la versión de CFDI es  3.2.',-1,-1,False)
   else if Codigo='CCE167' then raise EPACNoEncontradoParaCancelarException.Create('El nodo cce11:ComercioExterior:Emisor:Domicilio debe registrarse si la versión de CFDI es 3.3.',-1,-1,False)
   else if Codigo='CCE168' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Emisor:Domicilio:Pais debe tener la clave "MEX".',-1,-1,False)
   else if Codigo='CCE169' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Emisor:Domicilio:Estado debe contener una clave del catálogo de catCFDI:c_Estado donde la columna c_Pais tiene el valor "MEX".',-1,-1,False)
   else if Codigo='CCE170' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Emisor:Domicilio:Municipio debe contener una clave del catálogo de catCFDI:c_Municipio donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo Estado.',-1,-1,False)
   else if Codigo='CCE171' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Emisor:Domicilio:Localidad debe contener una clave del catálogo de catCFDI:c_Localidad donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo Estado.',-1,-1,False)
   else if Codigo='CCE172' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Emisor:Domicilio:Colonia debe contener una clave del catálogo de catCFDI:c_Colonia donde la columna c_CodigoPostal debe ser igual a la clave registrada en el atributo CodigoPostal.',-1,-1,False)
   else if Codigo='CCE173' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Emisor:Domicilio:CodigoPostal debe contener una clave del catálogo catCFDI:c_CodigoPostal donde la columna clave de c_Estado debe ser igual a la clave registrada en el atributo Estado'+', la columna clave de c_Municipio debe ser igual a la clave registrada en el atributo Municipio y si existe el atributo de Localidad, la columna clave de c_Localidad debe ser igual a la clave registrada en el atributo Localidad.',-1,-1,False)
   else if Codigo='CCE174' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Propietario:NumRegIdTrib no tiene un valor que exista en el registro del país indicado en el atributo cce1:Propietario:ResidenciaFiscal.',-1,-1,False)
   else if Codigo='CCE175' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Propietario:NumRegIdTrib no cumple con el patrón publicado en la columna "Formato de registro de identidad tributaria" del país indicado en el atributo cce1:Propietario:ResidenciaFiscal.',-1,-1,False)
   else if Codigo='CCE176' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Receptor:NumRegIdTrib no debe registrarse si la versión de CFDI es 3.3.',-1,-1,False)
   else if Codigo='CCE177' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Receptor:NumRegIdTrib debe registrarse si la versión de CFDI es 3.2.',-1,-1,False)
   else if Codigo='CCE178' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Receptor:NumRegIdTrib no tiene un valor que exista en el registro del país indicado en el atributo cfdi:Comprobante:Receptor:Domicilio:pais.',-1,-1,False)
   else if Codigo='CCE179' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Receptor:NumRegIdTrib no cumple con el patrón publicado en la columna "Formato de registro de identidad tributaria" del país indicado en el atributo cfdi:Comprobante:Receptor:Domicilio:pais.',-1,-1,False)
   else if Codigo='CCE180' then raise EPACNoEncontradoParaCancelarException.Create('El nodo cce11:ComercioExterior:Receptor:Domicilio no debe registrarse si la versión de CFDI es  3.2.',-1,-1,False)
   else if Codigo='CCE181' then raise EPACNoEncontradoParaCancelarException.Create('El nodo cce11:ComercioExterior:Receptor:Domicilio debe registrarse si la versión de CFDI es  3.3.',-1,-1,False)
   else if Codigo='CCE182' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Receptor:Domicilio:Colonia debe tener un valor del catálogo de colonia donde '+'la columna código postal sea igual a la clave registrada en el atributo CodigoPostal cuando la clave de país es "MEX", contiene una cadena numérica de cuatro posiciones y la versión de CFDI es 3.3.',-1,-1,False)
   else if Codigo='CCE183' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Receptor:Domicilio:Localidad debe tener un valor del catálogo de localidades'+' (catCFDI:c_Localidad) donde la columna c_Estado sea igual a la clave registrada en el atributo Estado cuando la clave de país es "MEX" y la versión de CFDI es 3.3.',-1,-1,False)
   else if Codigo='CCE184' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Receptor:Domicilio:Municipio debe tener un valor del catálogo de municipios'+' (catCFDI:c_Municipio) donde la columna c_Estado sea igual a la clave registrada en el atributo Estado cuando la clave de país es "MEX" y la versión de CFDI es 3.3.',-1,-1,False)
   else if Codigo='CCE185' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Receptor:Domicilio:Estado debe tener un valor del catálogo de estados catCFDI:c_Estado '+'donde la columna c_Pais sea igual a la clave de país registrada en el atributo Pais y la versión de CFDI es 3.3.',-1,-1,False)
   else if Codigo='CCE186' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Receptor:Domicilio:CodigoPostal debe cumplir con el patrón especificado para el país '+'cuando es distinta de "MEX" y la versión de CFDI es 3.3.',-1,-1,False)
   else if Codigo='CCE187' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Receptor:Domicilio:CodigoPostal debe tener un valor del catálogo de códigos postales '+'catCFDI:c_CodigoPostal donde la columna c_Estado sea igual a la clave '+'registrada en el atributo Estado, la columna c_Municipio sea igual a la clave registrada en el atributo Municipio y la columna c_Localidad sea igual a la clave registrada en el atributo Localidad en caso de que se haya registrado cuando la clave de '+'país es "MEX" y la versión de CFDI es 3.3.',-1,-1,False)
   else if Codigo='CCE188' then raise EPACNoEncontradoParaCancelarException.Create('El campo tipoDeComprobante tiene el valor "traslado" por lo tanto sólo podrás registrar un Destinatario.',-1,-1,False)
   else if Codigo='CCE189' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Destinatario:NumRegIdTrib no tiene un valor que exista en el registro del país indicado '+'en el atributo cce11:ComercioExterior:Destinatario:Domicilio:Pais.',-1,-1,False)
   else if Codigo='CCE190' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Destinatario:NumRegIdTrib no cumple con el patrón publicado en la columna "Formato de '+'registro de identidad tributaria" del país indicado en el atributo cce11:ComercioExterior:Destinatario:Domicilio:Pais.',-1,-1,False)
   else if Codigo='CCE191' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Destinatario:Domicilio:Colonia debe tener un valor del catálogo de colonias donde la '+'columna código postal sea igual a la clave registrada en el atributo CodigoPostal cuando la clave de país es "MEX" y contiene una cadena numérica de cuatro posiciones.',-1,-1,False)
   else if Codigo='CCE192' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Destinatario:Domicilio:Localidad debe tener un valor del catálogo de localidades '+'(catCFDI:c_Localidad) donde la columna c_Estado sea igual a la clave registrada en el atributo Estado cuando la clave de país es "MEX".',-1,-1,False)
   else if Codigo='CCE193' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Destinatario:Domicilio:Municipio debe tener un valor del catálogo de municipios '+'(catCFDI:c_Municipio) donde la columna c_Estado sea igual a la clave registrada en el atributo Estado cuando la clave de país es "MEX".',-1,-1,False)
   else if Codigo='CCE194' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Destinatario:Domicilio:Estado debe tener un valor del catálogo de estados catCFDI:c_Estado '+'donde la columna c_Pais sea igual a la clave de país registrada en el atributo Pais cuando la clave de país existe en la columna c_Pais del catálogo catCFDI:c_Estado y es diferente de "ZZZ".',-1,-1,False)
   else if Codigo='CCE195' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Destinatario:Domicilio:CodigoPostal debe cumplir con el patrón especificado para el país '+'cuando es distinta de "MEX".',-1,-1,False)
   else if Codigo='CCE196' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Destinatario:Domicilio:CodigoPostal debe tener un valor del catálogo de códigos postales '+'catCFDI:c_CodigoPostal donde la columna c_Estado sea igual a la '+'clave registrada en el atributo Estado, la columna c_Municipio sea igual a la clave registrada en el atributo Municipio y la columna c_Localidad sea igual a la clave registrada en el atributo Localidad en caso de que se haya registrado cuando la clave de '+'país es "MEX".',-1,-1,False)
   else if Codigo='CCE197' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Conceptos:Concepto:NoIdentificacion se debe registrar en cada concepto.',-1,-1,False)
   else if Codigo='CCE198' then raise EPACNoEncontradoParaCancelarException.Create('Debe existir al menos un cfdi:Comprobante:Conceptos:Concepto:NoIdentificacion relacionado con cce11:ComercioExterior:Mercancias:Mercancia:NoIdentificacion.',-1,-1,False)
   else if Codigo='CCE199' then raise EPACNoEncontradoParaCancelarException.Create('Debe existir al menos un concepto en el nodo cfdi:Comprobante:Conceptos por cada mercancía registrada en el elemento cce1:ComercioExterior:Mercancias donde el atributo '+'cce11:ComercioExterior:Mercancias:Mercancia:NoIdentificacion sea igual al atributo cfdi:Comprobante:Conceptos:Concepto:NoIdentificacion.',-1,-1,False)
   else if Codigo='CCE200' then raise EPACNoEncontradoParaCancelarException.Create('No se deben repetir elementos Mercancia donde el NoIdentificacion y la FraccionArancelaria sean iguales en el elemento cce11:ComercioExterior:Mercancias.',-1,-1,False)
   else if Codigo='CCE201' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Conceptos:Concepto:Cantidad no cumple con alguno de los valores permitidos cuando no se registra el atributo cce11:ComercioExterior:Mercancias:Mercancia:CantidadAduana.',-1,-1,False)
   else if Codigo='CCE202' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Conceptos:Concepto:Unidad no cumple con alguno de los valores permitidos cuando no se registra el atributo cce11:ComercioExterior:Mercancias:Mercancia:CantidadAduana.',-1,-1,False)
   else if Codigo='CCE203' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Conceptos:Concepto:ValorUnitario no cumple con alguno de los valores permitidos cuando no se registra el atributo cce11:ComercioExterior:Mercancias:Mercancia:CantidadAduana.',-1,-1,False)
   else if Codigo='CCE204' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Conceptos:Concepto:importe debe ser mayor o igual que el límite inferior y menor o igual que el límite superior calculado.',-1,-1,False)
   else if Codigo='CCE205' then raise EPACNoEncontradoParaCancelarException.Create('La suma de los campos cce11:ComercioExterior:Mercancias:Mercancia:ValorDolares distintos  de "0" y "1" de todas las mercancías que tengan el mismo NoIdentificacion y '+'éste sea igual al NoIdentificacion del concepto debe ser mayor o igual al valor mínimo y menor o igual al valor máximo calculado.',-1,-1,False)
   else if Codigo='CCE206' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Mercancias:Mercancia:FraccionArancelaria debe registrarse cuando el atributo cce11:ComercioExterior:Mercancias:Mercancia:UnidadAduana '+'o el atributo cfdi:Comprobante:Conceptos:Concepto:Unidad tienen un valor distinto de "99".',-1,-1,False)
   else if Codigo='CCE207' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Mercancias:Mercancia:FraccionArancelaria no debe registrarse cuando el atributo cce11:ComercioExterior:Mercancias:Mercancia:UnidadAduana '+'o el atributo cfdi:Comprobante:Conceptos:Concepto:Unidad tienen el valor "99".',-1,-1,False)
   else if Codigo='CCE208' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Mercancias:Mercancia:FraccionArancelaria debe tener un valor vigente del catálogo catCFDI:c_FraccionArancelaria.',-1,-1,False)
   else if Codigo='CCE209' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Mercancias:Mercancia:UnidadAduana debe tener el valor especificado en el catálogo catCFDI:c_FraccionArancelaria columna "UMT" cuando el '+'atributo cce11:ComercioExterior:Mercancias:Mercancia:FraccionArancelaria está registrado.',-1,-1,False)
   else if Codigo='CCE210' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:Conceptos:Concepto:Unidad del concepto relacionado a la mercncía debe tener el valor especificado en el catálogo catCFDI:c_FraccionArancelaria '+'columna "UMT" cuando el atributo cce11:ComercioExterior:Mercancias:Mercancia:FraccionArancelaria está registrado.',-1,-1,False)
   else if Codigo='CCE211' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cfdi:Comprobante:descuento debe ser mayor o igual que la suma de los atributos cce11:ComercioExterior:Mercancias:Mercancia:ValorDolares de todas las mercancías '+'que tengan la fracción arancelaria "98010001" convertida a la moneda del comprobante si la versión del CFDI es 3.2.',-1,-1,False)
   else if Codigo='CCE212' then raise EPACNoEncontradoParaCancelarException.Create('La suma de los valores de cfdi:Comprobante:Conceptos:Concepto:Descuento donde el NoIdentificacion es el mismo que el de la mercancía convertida a la moneda del comprobante '+'debe ser mayor o igual que la suma de los valores de  cce11:ComercioExterior:Mercancias:Mercancia:ValorDolares de todas las mercancías '+'que tengan la fracción arancelaria "98010001" y el NoIdentificacion sea igual al NoIdentificacion del concepto si la versión del CFDI es 3.3.',-1,-1,False)
   else if Codigo='CCE213' then raise EPACNoEncontradoParaCancelarException.Create('Los atributos CantidadAduana, UnidadAduana y ValorUnitarioAduana deben existir en los registros involucrados si se ha registrado alguno de ellos, si existe más de un concepto '+'con el mismo NoIdentificacion o si existe más de una mercancía con el mismo NoIdentificacion.',-1,-1,False)
   else if Codigo='CCE214' then raise EPACNoEncontradoParaCancelarException.Create('Los atributos CantidadAduana, UnidadAduana y ValorUnitarioAduana deben registrarse en todos los elementos mercancía del comprobante, siempre que uno de ellos los tenga registrados.',-1,-1,False)
   else if Codigo='CCE215' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Mercancias:Mercancia:ValorUnitarioAduana debe ser mayor que "0" cuando  cce11:ComercioExterior:Mercancias:Mercancia:UnidadAduana es distinto de "99".',-1,-1,False)
   else if Codigo='CCE216' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Mercancias:ValorDolares de cada mercancía registrada debe ser mayor o igual que el límite inferior y menor o igual que el límtie superior o uno, cuando la '+'normatividad lo permita y exista el atributo cce11:ComercioExterior:Mercancias:Mercancia:CantidadAduana.',-1,-1,False)
   else if Codigo='CCE217' then raise EPACNoEncontradoParaCancelarException.Create('El atributo cce11:ComercioExterior:Mercancias:ValorDolares de cada mercancía registrada debe ser igual al producto del valor del atributo cfdi:Comprobante:Conceptos:Concepto:Importe por el valor '+'del atributo cfdi:Comprobante:TipoCambio y dividido entre el valor del atributo  cce11:ComercioExterior:TipoDeCambioUSD '+'donde el atributo cfdi:Comprobante:Conceptos:NoIdentificacion es igual al atributo  cce11:ComercioExterior:Mercancias:Mercancia:NoIdentificacion, "0" cuando el atributo cce11:ComercioExterior:Mercancias:Mercancia:UnidadAduana '+'o el atributo  cfdi:Comprobante:Conceptos:Concepto:Unidad tienen el valor "99", o "1", cuando la normatividad lo permita y no debe existir el atributo cce11:ComercioExterior:Mercancias:Mercancia:CantidadAduana',-1,-1,False)
   else result := false;
  end;

function CodEstatus(Codigo:string):Boolean;
var iCodigo : Integer;
  Code: Integer;
  Value: Double;
Begin
 Result:=False;
 val(Codigo, Value, Code);

 {NOTA: Se tuvo que dividir el lanzamiento de excepciones debido a que en delphi XE1
  y anteriores manda un error de 'Too many local constants'
 }
 if Code=0 then // verifico si es numerico
  Begin
   RaisePACCodEstatusNumerico(Codigo);
  End
 else
 Begin
  if not RaisePACCodEstatusAlfaCFDI(Codigo) then
      if not RaisePACCodEstatusAlfaCCE(Codigo) then
         raise EPACErrorGenericoException.Create(Codigo,-1,-1,False);
  end;
 End;

end.

