2010-03-08 11 views
5

Mi sitio va a tener un sistema de crédito que básicamente funciona como una tarjeta de crédito. Cada usuario tiene un límite de crédito ilimitado, pero al final de cada semana, tienen que pagarlo. Por ejemplo, un usuario puede realizar varias compras entre el 1 y el 7 de marzo, y luego, al final del 7 de marzo, recibirá por correo electrónico una factura que enumera todas sus compras durante la semana y un total que vence el día 14. Si no lo pagan, su cuenta simplemente se desactivará hasta que lo hagan. Solo estoy tratando de entender cómo implementar esto.¿Implementación del sistema de tarjeta de crédito?

Tengo una lista de todas sus compras, eso no es un problema, pero solo estoy tratando de averiguar qué hacer con él. Al final del séptimo día, podría configurar un cronjob para generar una factura, que básicamente tendría un id y una fecha de vencimiento, y luego necesitaría otra tabla de muchos a muchos para vincular todas las compras con la factura. . Entonces, cuando un usuario agrega dinero a su cuenta, ¿supongo que se aplica a su factura pendiente actual? Y, ¿qué sucede si no pagan la factura en el momento en que se presenta una nueva factura, por lo que ahora tienen 2 pendientes, ¿cómo sé contra qué aplicarla? ¿O hago el cronjob para ver si hay facturas pendientes pendientes, las cancelo y agrego un nuevo artículo a la nueva factura como "saldo adelante (+ interés)"? ¿Cómo aplicaría el dinero contra una factura? ¿Habría que vincular cada pago a una factura, o podría simplemente depositarlo en el crédito de su cuenta, y de alguna manera averiguar qué se pagó y qué no? ¿Qué pasa si pagan por adelantado, antes de que se haya generado su factura? ¿Lo deduzco de su crédito de la factura en la generación, o al final de la semana cuando es debido? Hay muchas maneras de hacerlo ...

¿Alguien puede describir qué enfoque tomarían?


Si alguien está interesado, mi modelo de Factura tiene el siguiente aspecto (en Django). Los FacturasItems están vinculados a "productos" reales mediante un Id. Reverso (el FK está en el producto, no el ítem de factura para permitir diferentes tipos de ítems (diferentes tablas)), pero creo que voy a cambiar eso.

class Invoice(models.Model): 
    user = models.ForeignKey(User, related_name='invoices') 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    closed_date = models.DateTimeField(null=True, blank=True) 
    due_date = models.DateTimeField(default=_next_weekday()) 
    payment_date = models.DateTimeField(null=True, blank=True) # date the invoice was fully paid 
    total_payments = CurrencyField(default=0) 
    interest_charges = CurrencyField(default=0) 

    @property 
    def days_overdue(self): 
     dt = self.due_date - datetime.date.today() 
     return dt.days if dt.days > 0 else 0 

    @property 
    def item_total(self): 
     return self.items.filter(amount__gt=0).aggregate(t=Sum('amount'))['t'] or Decimal('0.00') 

    @property 
    def daily_interest(self): 
     return _round((self.item_total - self.total_payments) * settings.INTEREST_RATE/Decimal('365.242199')) 

    @property 
    def subtotal(self): 
     return self.item_total + self.interest_charges 

    @property 
    def tax(self): 
     return _round(self.subtotal * settings.GST) 

    @property 
    def total(self): 
     return self.subtotal + self.tax 

    @property 
    def balance_owing(self): 
     return self.total - self.total_payments 

    @property 
    def is_paid(self): 
     return self.payment_date != None 

    @property 
    def is_open(self): 
     return self.closed_date == None 

    @property 
    def is_overdue(self): 
     return not self.is_paid and self.due_date < datetime.date.today() 

class InvoiceItem(models.Model): 
    invoice = models.ForeignKey(Invoice, related_name='items') 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    description = models.CharField(max_length=200) 
    trans_date = models.DateTimeField(verbose_name='transaction date') 
    amount = CurrencyField() 

Tengo un crontab configurar para funcionar a la medianoche cada noche para agregar cargos de interés a todos los elementos atrasados, y las facturas se envían por correo a cabo todos los viernes por la mañana.

Respuesta

10

Lo que está describiendo aquí es básicamente una decisión entre la contabilidad de partidas abiertas y la contabilidad de saldos.

En la contabilidad de posiciones abiertas, cada factura se mantiene "abierta" mientras tiene un saldo adeudado y los pagos se atribuyen a las facturas individuales que están pagando. Esto facilita la tarea de calcular intereses como, por ejemplo, si solo carga intereses sobre saldos adeudados por más de 30 días, entonces necesita saber qué facturas tienen saldos pendientes con más de 30 días de antigüedad.

La contabilidad de saldos adeudados es similar a los pagos con tarjeta de crédito, cuando hay un saldo a tanto alzado que se transfiere hacia adelante y los pagos se realizan contra ese saldo total en lugar de facturas individuales.

actualización de aclaración

abierto contable artículo es bueno para los procesos de facturación complejas, por ejemplo, cuando sólo algunos de los productos que están unidas a determinadas facturas. Por ejemplo, un constructor compra algunas docenas de productos, pero se deben facturar por separado a tres proyectos de construcción diferentes.

La contabilidad de partidas abiertas también se utiliza cuando necesita rastrear cada factura individual para propósitos de pago y resolución de disputas. Por ejemplo, un suministro de construcción tiene un generador para un cliente.A veces los bienes suministrados son incorrectos o defectuosos, por lo que el constructor paga todas las demás facturas (incluidas facturas más recientes), excepto aquella, que se rastrea y se trata por separado, tal vez cobrando cuando se suministran productos de reemplazo o tal vez obteniendo una nota de crédito contra el factura.

En la contabilidad de saldos adelantados, debe tratar esta situación simplemente aplicando un crédito en contra de la cuenta como un todo, y luego volver a agregar la transacción cuando se suministren los bienes de reemplazo. Cualquier interés cargado en el saldo también se puede revertir contra la cuenta.

manera simplista, he aquí una forma de poder establecer estas arriba en su base de datos:

Abrir elemento Contabilidad

Se necesitan las siguientes tablas:

Client  [ClientId, Name, AccountBalance] 
Product  [ProductId, Description, Cost] 
Invoice  [InvoiceId, ClientId, Date, TotalAmount, Outstanding] 
InvoiceItem [InvoiceId, ProductId, Quantity, Amount] 
Receipt  [ReceiptId, Date, TotalAmount] 
ReceiptItem [ReceiptId, InvoiceId, Amount] 

cliente recibe una factura creada cuando comprando productos. Para cada producto comprado, se crea un artículo de factura para ese producto que muestra la cantidad comprada y el monto. Cuando se actualiza la factura, el saldo pendiente de la factura es el total de la factura y se actualiza el saldo de la cuenta del cliente (se puede calcular sobre la marcha, pero más fácil y rápido si se mantiene automáticamente). Cuando el cliente paga una o más facturas, se crea un recibo y los recibos se asignan a cada factura que se paga. El saldo pendiente de la factura se actualiza según el saldo de la cuenta del cliente. Tenga en cuenta que los pagos en exceso deben tratarse por separado. Los cargos por intereses se generan en la próxima factura (o en una factura separada) como un ítem de factura (puede ser un producto personalizado).

Equilibrio Adelante Contabilidad

Se necesitan las siguientes tablas:

Client  [ClientId, Name, AccountBalance] 
Product  [ProductId, Description, Cost] 
Invoice  [InvoiceId, ClientId, Date, Amount] 
Transaction [TransactionId, ClientId, InvoiceId, ProductId, Date, Quantity, Amount] 

Cuando se compra un producto, se realiza una transacción en la cuenta del cliente que muestra la cantidad del producto y la cantidad y el saldo de la cuenta del cliente se actualiza. Cuando se realiza un recibo, nuevamente se realiza una transacción en la cuenta del cliente y se actualiza el saldo de la cuenta del cliente. Los pagos en exceso y los intereses también son solo una transacción. En el momento de la facturación, simplemente toma todas las transacciones (compras, recibos, pagos de intereses, etc.) que no están asignadas a una factura y las agrega a su nueva factura. La factura no aparece en la lista de transacciones, es solo por conveniencia al rastrear transacciones que han sido facturadas y por darles a sus clientes un número de referencia al momento de pagar. Es posible que también desee realizar un seguimiento de los recibos en este modelo.

Otras consideraciones

  • Esto no toma en cuenta la publicación del libro mayor, que será un conjunto totalmente diferente de las tablas. Esto es solo para la contabilidad de gestión, no la contabilidad financiera.
  • En la práctica, puede haber una tabla de proyectos entre el cliente y la factura para rastrear cada uno de los proyectos individuales del cliente con usted.
  • Esto es realmente simplista solo para que se haga una idea. Más tablas y campos sin duda serían necesarios para una implementación completa.

Con respecto a lo que sucede si no pagan su factura cuando llega el momento de la facturación, en cualquiera de los sistemas no importa; no retrocede en el tiempo y cambia las entradas contables anteriores. Todo lo que sucede ahora va en una nueva factura.Por supuesto, es completamente apropiado incluir una línea en la nueva factura que diga "Saldo anterior pendiente" que muestra la cantidad que ya adeuda (o que se acredita por los pagos en exceso).

También querrá poder elaborar un extracto de cuenta, que no es una factura, es como una carta que les recuerda que tienen saldos pendientes. Esto se usa cuando no se genera una nueva factura, pero el cliente necesita un recordatorio sobre el saldo de su cuenta.

Prefiero la contabilidad de partidas abiertas para mis sistemas, pero a partir de su descripción, la contabilidad de saldos parece una buena opción.

+0

Con balance hacia adelante, no puede realizar un seguimiento de lo vencido y de qué cobrar intereses? – mpen

+0

Parece que tengo que ir con la contabilidad de artículos abierta para saber cuándo está vencido, entonces ... ¡esto será divertido de implementar! Muchas gracias por su ayuda, ojalá pudiera votarte varias veces. – mpen

+0

Acabo de agregar una aclaración sobre las nuevas facturas. Con el saldo hacia adelante, cualquier interés generalmente se carga en el saldo adeudado al final del período, al igual que con su tarjeta de crédito. Utilizo la contabilidad de elementos abiertos ya que proporciona un control más detallado sobre el historial de pagos (usted sabe exactamente lo que está pagando su cliente, no solo poniendo todo en un cubo grande). Sin embargo, la contabilidad de saldos adeudados es apropiada para cosas como facturas de teléfono, tarjetas de crédito, etc. Depende de su caso de uso. –

Cuestiones relacionadas