Skip to content

Latest commit

 

History

340 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GrowFlow

Del esqueje al recibo firmado. Trazabilidad de cultivo de cannabis medicinal y gestión de la asociación civil que lo ampara, en un solo sistema: las plantas, lo que cuesta producirlas, a quién se le entrega y los papeles que eso exige.

sitio stack supabase licencia

Pensado para el marco argentino: Ley 27.350, Decreto 883/2020 y Resolución 1780/2025. No es un diario de cultivo con una planilla al lado — el cupo de plantas sale de los REPROCANN cargados, el aporte de un paciente se compara contra el costo real de producción, y cada entrega deja su dispensa, su asiento en el libro de caja y su recibo.


Probalo ahora

growflow-5vs.pages.dev — usuario demo, contraseña demo.

Vas a entrar a la aplicación real, la misma que corre en producción. No es un video, ni capturas, ni un clon recortado: son las pantallas de verdad, con sus formularios, sus validaciones y sus mensajes.

Lo único que no vas a encontrar son datos. Y eso es a propósito.

Por qué la demo está vacía

Un sistema que registra pacientes con su diagnóstico no puede tener una demo poblada con datos de demostración que después alguien confunda con reales, ni mucho menos mostrar los de una asociación que lo esté usando. Así que la cuenta demo entra con un rol propio que no lee ni una fila: ni una planta, ni un costo, ni el nombre de un paciente.

Eso no lo decide la interfaz escondiendo cosas. Lo decide Postgres: las policies de Row Level Security le devuelven cero filas a ese rol, así que aunque alguien saltee la aplicación y pegue directo contra la API, el resultado es el mismo. Podés comprobarlo — la clave está acá arriba.

Qué se ve entonces

La forma del sistema, que es lo que importa para entender si te sirve:

Cultivo Plantas, genéticas, línea de tiempo y el plano de la sala. Cómo se da de alta un lote de clones, cómo se riega una carpa entera de un saque
Cosecha El formulario de pesos y la merma de secado
Ambiente Temperatura, humedad, CO₂ y VPD
Econometría De dónde sale el costo por gramo, y qué pasa cuando falta un dato para calcularlo
O.N.G. Las quince pestañas: pacientes, entregas, libros, actas, DDJJ, autodispensación
Estadísticas Rendimiento por genética, gramos por vatio
Manual El manual de operación completo, con el paso a paso de las 38 tareas

Fijate especialmente en Econometría: con las tablas vacías, el costo por gramo muestra y no $0. La diferencia no es estética. Un cero diría que producir no cuesta nada, y ese número es contra el que se compara el aporte de un paciente para que la entrega siga siendo un reembolso de costos y no otra cosa. Cuando falta un dato, el sistema lo dice; no lo inventa.

El resto de las pantallas hace lo mismo: en vez de quedar en blanco, explican qué falta cargar para que ese número exista.

Lo que la demo no muestra

Instalación y Tablas quedan afuera, y no se puede escribir nada — ni crear una planta, ni editar un registro. Es una cuenta para mirar.

Si querés ver el sistema con datos, el camino es levantarlo: npm run dev sin configurar nada arranca en modo demo local, con datos de ejemplo en tu propio navegador y todo habilitado. Ahí sí podés cargar, borrar y romper lo que quieras.


Qué hace

Módulo Adentro Para qué
Panel Plantas activas, en floración, riegos del día, gramos cosechados
Cultivo Plantas · Genéticas · Línea de tiempo · Sala El ciclo completo: alta, fases, riegos por carpa, historial y QR por planta
Cosecha Peso húmedo/seco, merma, valoración y ranking por genética
Ambiente Temperatura, humedad, CO₂ y VPD en vivo + estado de cada equipo
Calendario Riegos, podas, fumigaciones, cosechas y mantenimientos
Calculadora Fertilizantes 17 sub-pestañas Recetas de sales desde cero, clonado de marcas y preparados DIY
Instalación Hardware DIY · Riego · Tablero · Faltantes Cómo está armado el equipamiento y qué falta comprar
Econometría Resumen · Costos · Inventario · Mantenimiento · Instalaciones Cuánto cuesta producir un gramo y de dónde sale ese número
O.N.G. 15 pestañas Pacientes, entregas, libros, actas, DDJJ y todo lo que pide la 1780
Estadísticas Rendimiento por genética, gramos por vatio, merma de secado
Tablas Editor genérico de las 48 tablas, celda por celda
Manual El manual de operación, adentro de la app, con buscador

El circuito de la ONG

Es la parte que distingue a GrowFlow de un registro de cultivo. Seis pasos, cada uno habilita el siguiente, y el sistema no deja saltear ninguno:

paciente → asociado → mandato firmado → reserva (72 h) → retiro en sede → reporte de seguimiento
                                            │                   │                  │
                                        QR + cupo          dispensa +          desbloquea la
                                                          caja + recibo        próxima entrega

Las reglas que el sistema hace cumplir

Cuando algo se bloquea, la pantalla dice qué regla es y cómo destrabarla. No se muestran de a una: si faltan tres cosas, se ven las tres.

Regla Qué exige
RN-01 REPROCANN vigente y vinculado a la entidad
RN-02 Tope de gramos en 30 días, contando lo entregado más lo reservado sin retirar
RN-03 Mandato de Gestión Operativa firmado (queda timestamp e IP)
RN-04 El aporte no puede superar el costo de producción — si no, deja de ser reembolso
RN-05 La entrega anterior necesita su reporte antes de habilitar la siguiente
RN-06 La reserva vence a las 72 h y el material vuelve al inventario
RN-07 El reporte clínico es inmutable: la base rechaza el update aunque la UI se equivoque
Por qué el cupo cuenta las reservas

El cupo de 30 días suma lo entregado más lo reservado y todavía sin retirar. Contando sólo entregas, cinco reservas hechas el mismo día pasarían el tope las cinco, y el exceso aparecería recién en el mostrador con el material ya comprometido.

Documentos que genera

Se completan con lo que ya está cargado; lo que falta sale entre corchetes en vez de inventado.

  • Recibo oficial por reembolso de costos, con la leyenda legal obligatoria al pie
  • Comprobante de dispensación y guía de tránsito interno
  • Actas para transcribir al libro, con control de quórum y firmantes
  • Designaciones de Director Médico y Responsable Técnico
  • Comodatos de sede y de predio de cultivo
  • Informe de variedades genéticas y compromiso de análisis
  • Declaración Jurada de Vinculación Exclusiva y Mandato de Gestión Operativa
  • Informe semestral del Director Médico (diagnóstico → lotes → curva de alivio → efectos adversos)

Stack

Capa Qué
Frontend React 19 · Vite 8 · TypeScript · Tailwind CSS 4
Datos Supabase (Postgres + RLS + Storage) — 48 tablas, 30 migraciones
Ruteo y estado React Router 7 · TanStack Query
Deploy Cloudflare Pages, automático al pushear a main
Extras PWA instalable · QR (generación y escaneo) · lectura de PDF · export a Excel

Sin .env la app arranca en modo demo: guarda todo en localStorage y no necesita backend. Es suficiente para desarrollar y para probar el sistema entero.


Arrancar

cd app
npm install
npm run dev          # http://localhost:5173 — modo demo, sin configurar nada

Para usar una base real, copiá .env.example a .env y completá VITE_SUPABASE_URL y VITE_SUPABASE_ANON_KEY. Las migraciones están en supabase/migrations/ y se aplican desde el SQL editor de Supabase (o con supabase start para una base local).

Antes de pushear:

npm run build        # tsc -b && vite build — tiene que quedar en verde

Estructura

app/
  src/
    pages/          66 pantallas
    components/     por dominio: ong/, econometria/, nutrientes/, layout/, manual/
    lib/            la lógica de verdad vive acá, no en los componentes
      ong.ts            reglas de la asociación, cupos, vencimientos
      portal.ts         autodispensación: reservas, 72 h, disponibilidad
      informeMedico.ts  el informe semestral del Director Médico
      nutrientes.ts     motor de la calculadora: sales, solver NNLS, conversiones
      econometria.ts    costos, amortización, costo por gramo
      documentos*.ts    generadores de los documentos legales
    contenido/
      manual.md       el manual: se edita acá y la pantalla se actualiza sola
supabase/migrations/  esquema completo
scripts/              utilidades (versión web del manual, etc.)

La lógica va en lib/, no en los componentes. Es lo que permite verificar una regla sin montar una pantalla, y que la misma regla valga en todas las pantallas que la usan.


La calculadora de fertilizantes

Módulo tipo HydroBuddy en español (/nutrientes). Arma recetas desde cero o clonando marcas comerciales (Athena, Advanced Nutrients, Jacks, Canna, Plagron, Ryanodine) con sales crudas.

  • lib/nutrientes.ts — el motor: base de sales con composición elemental, solver NNLS, kitParaPerfil, presets por etapa, conversiones (óxido→elemental, EC por balance iónico, ppm↔meq), costos y los servicios de Supabase.
  • components/nutrientes/CreadorNutrientes.tsx — la UI, con sus 17 sub-pestañas.

Además de la receta, el módulo trae los preparados DIY que normalmente se compran hechos, con su fórmula y sus proveedores: gel de enraizado, elicitor, bioestimulantes e hipocloroso. Y las herramientas alrededor: análisis del agua de partida, soluciones madre A/B, ajuste de pH, estabilizantes y comparador de recetas.

Modelo químico: 16 nutrientes (NO3, NH4, P, K, Mg, Ca, S, Fe, Zn, B, Cu, Mo, Mn, Na, Si, Cl). La composición de cada sal es su fracción elemental (0-1), y ppm = fracción × g/L × 1000. Las etiquetas en óxidos se convierten a elemental (P₂O₅ × 0.4364, K₂O × 0.8301).


Convenciones

Cosas que conviene saber antes de tocar el código:

  • Toda tabla nueva se registra en dos lugares: pages/PaginaTablas.tsx (para que sea editable) y lib/demo/demoStore.ts (para que exista en modo demo). Si falta una, la tabla no aparece.
  • RLS siempre to authenticated. Una policy sobre public incluye a anon: los datos quedan legibles sin login. Se verifica con la clave publicable, no con el service role — el service role saltea RLS y no prueba nada.
  • Móvil primero. Los inputs van en text-[16px] en celular o iOS hace zoom y descuadra el formulario; los botones, mínimo 44 px de alto.
  • Un guion no es un cero. Cuando falta un dato para calcular se muestra . Un $0 diría que producir no cuesta nada.
  • Un build verde no dice que la pantalla abre. Antes de dar algo por terminado, abrirlo.

Licencia

MIT. Usalo, modificalo y compartilo.

GrowFlow es una herramienta de registro y gestión. No sustituye asesoramiento legal ni médico. Verificá la normativa vigente en tu jurisdicción antes de operar.

About

Trazabilidad de cultivo de cannabis medicinal y gestión de la asociación civil que lo ampara (Res. 1780/2025). Demo en vivo con usuario demo / demo — la app real, sin datos: los permisos los corta Postgres, no la interfaz

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages