Initial commit: SKEEN Derma Experts - Sistema Integral de Gestión Clínica

- Frontend React (SKEEN Brand) con Vite, TypeScript, Tailwind
- Frontend Homenest (versión alternativa)
- Módulos Odoo 17 custom (citas, pacientes, monedero, pagos, ventas, inventario, whatsapp)
- WACRM fork (Next.js 16 + Supabase)
- Hermes + Bridge + Skills (Qwen3.6 via Nan Builders)
- Scripts de migración y operación
- Documentación extensiva en docs/
This commit is contained in:
2026-07-20 07:44:23 +00:00
commit a718592291
699 changed files with 324602 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_skeen_corte_caja_tree" model="ir.ui.view">
<field name="name">skeen.corte.caja.tree</field>
<field name="model">skeen.corte.caja</field>
<field name="arch" type="xml">
<tree decoration-muted="state=='closed'">
<field name="name" />
<field name="date" />
<field name="user_id" />
<field name="opening_cash" />
<field name="total_cash" />
<field name="total_card" />
<field name="total_sales" />
<field name="closing_cash" />
<field name="difference" />
<field name="state" />
</tree>
</field>
</record>
<record id="view_skeen_corte_caja_form" model="ir.ui.view">
<field name="name">skeen.corte.caja.form</field>
<field name="model">skeen.corte.caja</field>
<field name="arch" type="xml">
<form>
<header>
<button name="action_close" string="Cerrar Caja" type="object" invisible="state != 'open'" class="oe_highlight" />
<button name="action_reopen" string="Reabrir" type="object" invisible="state != 'closed'" />
<field name="state" widget="statusbar" />
</header>
<sheet>
<group>
<group>
<field name="name" />
<field name="date" />
<field name="user_id" />
<field name="opening_cash" />
<field name="closing_cash" />
</group>
<group>
<field name="total_cash" />
<field name="total_card" />
<field name="total_transfer" />
<field name="total_other" />
<field name="total_sales" />
<field name="difference" />
</group>
</group>
<field name="notes" />
</sheet>
</form>
</field>
</record>
<record id="action_skeen_corte_caja" model="ir.actions.act_window">
<field name="name">Cortes de Caja</field>
<field name="res_model">skeen.corte.caja</field>
<field name="view_mode">tree,form</field>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<menuitem id="menu_skeen_ventas_root" name="Ventas" parent="skeen_citas.menu_skeen_root" sequence="30" />
<menuitem id="menu_skeen_venta" name="Ventas" parent="menu_skeen_ventas_root" action="action_skeen_venta" sequence="10" />
<menuitem id="menu_skeen_corte_caja" name="Cortes de Caja" parent="menu_skeen_ventas_root" action="action_skeen_corte_caja" sequence="20" />
</data>
</odoo>

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Vista tree de ventas -->
<record id="view_skeen_venta_tree" model="ir.ui.view">
<field name="name">skeen.venta.tree</field>
<field name="model">skeen.venta</field>
<field name="arch" type="xml">
<tree decoration-success="state=='paid'" decoration-warning="state=='partial'" decoration-muted="state=='cancelled'">
<field name="name" />
<field name="partner_id" />
<field name="date" />
<field name="total" />
<field name="amount_paid" />
<field name="amount_due" />
<field name="state" />
</tree>
</field>
</record>
<!-- Vista form de ventas -->
<record id="view_skeen_venta_form" model="ir.ui.view">
<field name="name">skeen.venta.form</field>
<field name="model">skeen.venta</field>
<field name="arch" type="xml">
<form>
<header>
<button name="action_confirm" string="Confirmar" type="object" invisible="state != 'draft'" class="oe_highlight" />
<button name="action_mark_paid" string="Marcar Pagada" type="object" invisible="state not in ('confirmed', 'partial')" class="oe_highlight" />
<button name="action_cancel" string="Cancelar" type="object" invisible="state not in ('draft', 'confirmed', 'partial')" />
<field name="state" widget="statusbar" />
</header>
<sheet>
<group>
<group>
<field name="name" />
<field name="partner_id" />
<field name="cita_id" />
<field name="date" />
</group>
<group>
<field name="subtotal" />
<field name="discount" />
<field name="points_discount" />
<field name="tax" />
<field name="total" />
<field name="amount_paid" />
<field name="amount_due" />
</group>
</group>
<field name="line_ids">
<tree editable="bottom">
<field name="service_id" />
<field name="description" />
<field name="quantity" />
<field name="price_unit" />
<field name="subtotal" />
</tree>
</field>
<field name="notes" />
</sheet>
</form>
</field>
</record>
<!-- Action -->
<record id="action_skeen_venta" model="ir.actions.act_window">
<field name="name">Ventas</field>
<field name="res_model">skeen.venta</field>
<field name="view_mode">tree,form</field>
</record>
</data>
</odoo>