thegreenter / greenter

Facturación Electrónica - SUNAT - PE :four_leaf_clover:
https://greenter.dev
MIT License
269 stars 138 forks source link

duda #14

Closed abelnexus closed 6 years ago

abelnexus commented 6 years ago

amigo en la comunicación de baja: si quiero dar de baja una boleta o factura que tenga relacionada una ndc o ndb, solo le doy de baja la ndb o ndc verdad ? (ya que 'supongo' al momento de generar la ndb o ndc la factura o boleta se reemplaza por la ndb o ndc )

giansalex commented 6 years ago

son documentos diferentes, tendrías que anular la ncr y luego la factura. Las boletas y sus notas (NCR, NDB) se anulan en el resumen diario, usando el status=3

abelnexus commented 6 years ago

entonces la nota de credito no reemplaza los datos que se genero anteriormente en una factura ? solo seria necesario usar la comunicacion de baja para facturas entocnes

abelnexus commented 6 years ago

mi idea es errada creo(segun yo si una factura esta errada hago una nota de credito para corregir esa factura errada poniendo en la nota de credito los datos correctos y eliminando los datos de la factura errada)

giansalex commented 6 years ago

puedes corregirlo con nota de credito, o también puedes anularla comunicandola de baja (en este caso emites otra factura con la información correcta)

abelnexus commented 6 years ago

no se si el metodo que encontre para que no me salgan erradas las facturas y demas esta bien tu que opinas amigo: captura como puedes ver en este codigo solo almaceno el xml el cdr y el pdf "solo" si if ($res->isSuccess(), entonces cuando no lo es recibo el mensaje en pantalla mostrandome el error

abelnexus commented 6 years ago

por ejemplo si el ruc o dni esta mal me botara un mensaje asi captura pero mi gran duda es si no tendre problemas con sunat ya que por lo que veo se envia la factura asi este errada ($res = $see->send($invoice);) y ocurre todo si es correcto o no, pero se envia de todos modos

giansalex commented 6 years ago

Para que sunat acepte una factura esta debe terminar en La Factura F00X-X ha sido aceptada. No basta con $res->isSuccess(), eso solo indica que sunat a emitido el CDR, pero este puede ser:

para ello debes verificar el codigo del $cdr sea igual a cero.

if ($cdr->getCode() == '0') {
   // accepted
}
abelnexus commented 6 years ago

ahhh ya te entiendo amigo entonces mientras no reciba el cdr no habra ningun problema :)

giansalex commented 6 years ago

no ninguno, para la sunat ese comprobante estaría aun como no informado. De todos modos si intentas enviar una factura que previamente recibió un cdr, la sunat te indicara que el comprobante ya fue informado.

abelnexus commented 6 years ago

gracias amigo, lo que no puedo y no tengo idea :'( es como manejar las relaciones entre boletas con su ndc o ndb para el resumen diario

giansalex commented 6 years ago

puede manejarse guardando el id de la boleta, o su tipo, serie, numero, esa es la información que se requiere al momento de adjuntar una nota de credito o debito

abelnexus commented 6 years ago

ESOS DATOS YA LOS TENGO AMIGO, mi problema es uqe la boleta debe tener algo que diga que tiene una ndc o ndb para al momento de "jalarla" para armar el resumen se jale tambien su ndb o ndc y no se como manejarlo eso, mi cabeza se esta colgando

giansalex commented 6 years ago

no tienes que hacer eso, tienes que listar todos los comprobantes que empiecen con las serie BXXX para una fecha determinada, ya que la ncr o ndb puede generarse otro dia, no se van enviar en el mismo resumen.

abelnexus commented 6 years ago

hola amigo,intentare hacer algo. lo estoy almacenando todos los comprobantes en una sola tabla crees que esta bien asi ? o deberia crear una tabla para cada comprobante ? captura

giansalex commented 6 years ago

para mi esta bien tenerlo en una tabla

abelnexus commented 6 years ago

hola amigo, como te decia aqui radica mi problema foreach ($this->model->listar_resumen() as $clave => $value) { $syn = $value['serie'].'-'.$value['numeracion']; $detiail1 = new SummaryDetail(); $detiail1 ->setTipoDoc($value['codigo_documento']) ->setSerieNro($syn) ->setEstado('2') ->setClienteTipo('6') ->setClienteNro('00000000') ->setTotal($value['total']) ->setMtoOperGravadas($value['gravadas']) ->setMtoIGV($value['igv']);
$items[] = $detiail1;

                     }

este codio me extrae las boletas generadas durante el dia y me las lista hasta ahi todo bacan pero cuando es una ndb o ndc ya cambia la estrucutura y necesita 2 datos mas

abelnexus commented 6 years ago

captura entonces eso no se puede o no se como hacerlo que tambien jale la nbd ->setDocReferencia((new Document()) ->setTipoDoc('03') ->setNroDoc('B001-122'))

giansalex commented 6 years ago

tendrías que traer la información del documento de referencia (tipo, serie, correlativo) y aplicar una validación para cuando sea ncr o ndb.

foreach ($this->model->listar_resumen() as $clave => $value) {
 $syn = $value['serie'].'-'.$value['numeracion'];
 $tipo = $value['codigo_documento'];
 $detiail = new SummaryDetail();
 $detiail ->setTipoDoc($tipo)
 ->setSerieNro($syn)
 ->setEstado('2')
 ->setClienteTipo('6')
 ->setClienteNro('00000000')
 ->setTotal($value['total'])
 ->setMtoOperGravadas($value['gravadas'])
 ->setMtoIGV($value['igv']);

 if ($tipo == '07' || $tipo == '08') {
   $detail->setDocReferencia((new Document())
   ->setTipoDoc($value['tipo_ref'])
   ->setNroDoc($value['serie-ref'].'-'.$value['numero_ref']))
  }
  $items[] = $detiail;
}
abelnexus commented 6 years ago

mmmm entiendo... en todo caso debere aumentar tambien en mi bd esos 2 campos a ver como resulta :D

abelnexus commented 6 years ago

hola amigo, quizás sepas a que se debe este mensaje de error "El comprobante más "código de operación del ítem" no debe repetirse" en resumen diario

abelnexus commented 6 years ago

estos son los items que estan para el resumen captura

giansalex commented 6 years ago

al parecer estas repitiendo la boleta 2 veces en el resumen

abelnexus commented 6 years ago

uno es ndb y el otro boleta y parece que hacen conflicto pero no deberia si la ndb o ndc tienen similar serie y correlativo pero son documentos diferentes :/

giansalex commented 6 years ago

se diferencian por el tipo de venta, boleta - 03, ndb - 08; has corroborado en el xml que sea asi

abelnexus commented 6 years ago

si en el xml esta bien, pero eso no tiene que ver o si ? ya que genero el resumen con los datos de la bd no con el xml captura

giansalex commented 6 years ago

me referia al xml del resumen diario

abelnexus commented 6 years ago

este codigo estoy usando o quizas tenga errores captura

abelnexus commented 6 years ago

captura bd

giansalex commented 6 years ago

el problema es el codigo estas comparando con = y debe ser ==, por ello la primera condicion siempre se cumple y termina cambiando el tipo a boleta y ya que serie-correlativo son iguales, termina agregando la boleta 2 veces.

if ($value['codigo_documento'] == '03') {
}

image

abelnexus commented 6 years ago

ya encontre el error amigo, era que $items[] = $detiail1; estaba en ambos cuando solo debia haber uno para ambos y los == tambien para mas precisión en las condiciones

abelnexus commented 6 years ago

mmmm pero por alguna razón funciona y si me jala los datos captura

giansalex commented 6 years ago

Al estar en distintos contextos se agrega una vez sea en if o en else, el problema es que en el primer if cambia el tipo de documento a 03 y como la nota de débito tiene la misma serie y correlativo, se termina agregando 2 veces '03-B001-000001'

abelnexus commented 6 years ago

captura

captura

abelnexus commented 6 years ago

captura

abelnexus commented 6 years ago

yo creo que como es un foreach cuando llega y es 03 se genera ese "03" y luego pasa al siguiente y asi

abelnexus commented 6 years ago

solo una vez por item mientras se almacena en items[]

abelnexus commented 6 years ago

lo unico que compara es si es boleta("03") o es ndc(08) o ndb(07)

giansalex commented 6 years ago

si eso después de corregir la comparación = a == , ahora funciona correctamente. El estado si es modificar(2) no nuevo (1)?

abelnexus commented 6 years ago

si debo corregir eso ahora y al enviarse y generarse correctamente (el xml y cdr) debe ser estado 1 en la bd , al generarse una ndb debe pasar a estado 2 y al darle de baja debe pasar a ser estado 3 y todo debe estar en la bd para cuando jale los datos validar tam,bien el estado

giansalex commented 6 years ago

al generarse un ndb no tiene que pasar al estado 2, se usa cuando por ejemplo en la boleta enviaste a sunat el total 1000 pero era 100, alli necesitas modificar la boleta. y volverla enviar.

abelnexus commented 6 years ago

ahhh entiendo, si se genero mal la boleta y creo un ndc solo envio la nota de credito mas no la boleta: pero aun asi necesito diferenciar de alguna forma las boletas que tienen asociadas ndb o ndc para ya no cargar esas boletas en el resumen

giansalex commented 6 years ago

las boletas solo se envian en su fecha de emision, si se genera una ndb se envia este y el campo de referencia la boleta.

abelnexus commented 6 years ago

es posible en vez de enviar ndc solo darlo de baja y listo creo es mas simple y menos confuso(osea nunca enviar una ndc o ndb jajaja)

giansalex commented 6 years ago

Eso depende de cada empresa, como quiere manejarlo, hay algunas empresas que nunca usan la comunicación de baja, siempre hacen ndc o ndb segun el caso

abelnexus commented 6 years ago

tienes razón si yo tendria mi empresa y sabiendo como es usaria solo bajas, pero debo hacer con ndc y ndb y comunicación de baja para que sea funcional el sistema que hago, ya en producción con las puteadas y presión aprenderé espero :'( y solo son facturas convencionales para lo que hago (solo total igv y gravados)

abelnexus commented 6 years ago

gracias de nuevo por tu apoyo amigo todo el avance que tengo hasta ahora es por tu ayuda :D

yaircaballero10 commented 5 years ago

enviar el resumen es obligatorio ¿? tengo que hacer eso para boletas enviadas y procesadas por sunat ¿? como le doy de baja ¿? tengo que hacer nota de credito para cancelar la boleta o lo puedo hacer directamente dandole de baja ¿?.