slogan3

Ontwerp een Custom Workflow Automatisering voor Mijn Project

description

Met deze prompt kan de gebruiker een op maat gemaakte automatisering ontwerpen die repetitieve taken en processen binnen zijn project efficiënter maakt. Dit bespaart tijd, vermindert fouten en verhoogt de productiviteit. Het is een unieke aanpak die zich richt op workflow automatisering, wat nog niet eerder in deze categorie is behandeld.

prompt

Help me een custom workflow automatisering te ontwerpen die de volgende processen in mijn project optimaliseert: <beschrijf de processen>. Beschrijf de a ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een overzicht van een custom workflow automatisering voor factuurverwerking en automatische e-mailnotificaties, inclusief architectuur, technologieën en een stapsgewijze voorbeeldimplementatie in Python. --- **Architectuur en gebruikte technologieën** 1. **Architectuur:** - **Trigger:** Nieuwe factuur wordt geüpload of toegevoegd aan een specifieke map of database. - **Verwerking:** Extractie van factuurgegevens (bijvoorbeeld factuurnummer, bedrag, leverancier). - **Opslag:** Gegevens worden opgeslagen in een database voor verdere verwerking en rapportage. - **Notificaties:** Automatische e-mails worden gestuurd naar betrokken partijen (bijvoorbeeld leverancier, administratie). - **Monitoring:** Log en foutafhandeling voor betrouwbaarheid. 2. **Technologieën:** - **Python** voor scripting en automatisering. - **Watchdog** of **inotify** (Linux) / **watchdog** Python module voor bestandsmonitoring. - **PDF parsing:** `PyPDF2`, `pdfplumber`, of `Tesseract OCR` (bij gescande documenten). - **Database:** SQLite voor eenvoudige opslag of een andere relationele database. - **E-mail:** `smtplib` en `email` modules voor het versturen van notificaties. - **Scheduling:** `cron` of `APScheduler` voor periodieke taken. --- **Stapsgewijze workflow** 1. **Factuur uploaden:** Een gebruiker plaatst een factuur in een specifieke map. 2. **Detectie en extractie:** - De script detecteert nieuwe bestanden. - Het script leest de factuur en haalt relevante gegevens uit. 3. **Opslag gegevens:** - Gegevens worden opgeslagen in een database. 4. **Automatische notificatie:** - Op basis van bepaalde voorwaarden (bijvoorbeeld betaalstatus) wordt een e-mail gestuurd. 5. **Logging en foutafhandeling:** - Alle acties worden gelogd, fouten worden gemeld. --- **Voorbeeldimplementatie in Python** ```python import os import time import sqlite3 import smtplib from email.mime.text import MIMEText from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import pdfplumber # Configuratie FACTUUR_MAP = "/pad/naar/factuurs" DB_PATH = "facturen.db" SMTP_SERVER = "smtp.example.com" SMTP_PORT = 587 EMAIL_SENDER = "automatisering@example.com" EMAIL_PASSWORD = "jouw_wachtwoord" # Database setup def init_db(): conn = sqlite3.connect(DB_PATH) c = conn.cursor() c.execute(''' CREATE TABLE IF NOT EXISTS facturen ( id INTEGER PRIMARY KEY AUTOINCREMENT, factuurnummer TEXT, leverancier TEXT, bedrag REAL, datum TEXT, status TEXT ) ''') conn.commit() conn.close() # Factuurgegevens extraheren def extract_factuurgegevens(pdf_path): with pdfplumber.open(pdf_path) as pdf: text = '' for page in pdf.pages: text += page.extract_text() # Simpele regex of string zoeken voor gegevens import re factuurnummer = re.search(r'Factuurnummer[:\s]*(\w+)', text) leverancier = re.search(r'Leverancier[:\s]*(.+)', text) bedrag = re.search(r'Bedrag[:\s]*€?([\d,]+)', text) datum = re.search(r'Datum[:\s]*(\d{2}/\d{2}/\d{4})', text) return { 'factuurnummer': factuurnummer.group(1) if factuurnummer else '', 'leverancier': leverancier.group(1) if leverancier else '', 'bedrag': float(bedrag.group(1).replace(',', '.')) if bedrag else 0.0, 'datum': datum.group(1) if datum else '' } # E-mail verzenden def send_email(to_address, subject, body): msg = MIMEText(body) msg['Subject'] = subject msg['From'] = EMAIL_SENDER msg['To'] = to_address with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: server.starttls() server.login(EMAIL_SENDER, EMAIL_PASSWORD) server.send_message(msg) # Bestandsdetectie class FactuurHandler(FileSystemEventHandler): def on_created(self, event): if not event.is_directory and event.src_path.endswith('.pdf'): print(f"Nieuwe factuur gedetecteerd: {event.src_path}") try: data = extract_factuurgegevens(event.src_path) # Opslaan in database conn = sqlite3.connect(DB_PATH) c = conn.cursor() c.execute(''' INSERT INTO facturen (factuurnummer, leverancier, bedrag, datum, status) VALUES (?, ?, ?, ?, ?)''', (data['factuurnummer'], data['leverancier'], data['bedrag'], data['datum'], 'Geprocessed')) conn.commit() conn.close() # Verstuur notificatie body = f"Factuur {data['factuurnummer']} van {data['leverancier']} is verwerkt.\nBedrag: €{data['bedrag']}" send_email("admin@example.com", "Nieuwe factuur verwerkt", body) print("E-mail notificatie verzonden.") except Exception as e: print(f"Fout bij verwerking: {e}") # Main script if __name__ == "__main__": init_db() event_handler = FactuurHandler() observer = Observer() observer.schedule(event_handler, path=FACTUUR_MAP, recursive=False) observer.start() print("Monitoring gestart...") try: while True: time.sleep(10) except KeyboardInterrupt: observer.stop() observer.join() ``` --- **Samengevat:** - Monitor de map voor nieuwe PDF-facturen. - Extracteer relevante gegevens met `pdfplumber`. - Sla gegevens op in een SQLite database. - Verstuur automatische e-mailnotificaties. - Log alle acties en fouten voor troubleshooting. Deze aanpak kan verder worden uitgebreid met bijvoorbeeld OCR voor gescande documenten, uitgebreide foutafhandeling, rapportages, of integratie met andere systemen.
provider: deepseek
model: deepseek-chat
Zeker, ik help u graag een geautomatiseerde workflow te ontwerpen voor factuurverwerking en e-mailnotificaties. Hier is een complete architectuur, technologie-overzicht en Python-implementatie. ## 🏗 Architectuur Overzicht ``` Input (Facturen) → Verwerkingslaag → Database → Notificatielaag → Output (E-mails) ``` ## 🔧 Gebruikte Technologieën - **Python 3.8+** - Hoofdprogrammeertaal - **FastAPI** - REST API voor factuur-invoer - **Celery** - Taakwachtrij voor async verwerking - **PostgreSQL** - Database voor factuurgegevens - **SMTPLib** - E-mail verzending - **Pandas** - Dataverwerking facturen - **Redis** - Message broker voor Celery - **Docker** - Containerisatie ## 📋 Stapsgewijze Workflow 1. **Factuur Ontvangst** - PDF/XML facturen geüpload via API 2. **Data Extractie** - Parsen van factuurgegevens 3. **Validatie** - Controle op compleetheid en juistheid 4. **Database Opslag** - Opslaan in PostgreSQL 5. **Status Update** - Factuurstatus bijwerken 6. **E-mail Notificatie** - Automatische verzending 7. **Logging** - Uitgebreide logging van processen ## 💻 Voorbeeldimplementatie Python ```python import smtplib import pandas as pd from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from datetime import datetime import json import logging from celery import Celery from sqlalchemy import create_engine, Column, String, DateTime, Float from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # Configuratie DATABASE_URL = "postgresql://user:password@localhost/facturen_db" SMTP_SERVER = "smtp.gmail.com" SMTP_PORT = 587 EMAIL_USER = "uw.email@bedrijf.nl" EMAIL_PASSWORD = "uw_wachtwoord" # Database setup Base = declarative_base() engine = create_engine(DATABASE_URL) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) class Factuur(Base): __tablename__ = "facturen" id = Column(String, primary_key=True) factuurnummer = Column(String, unique=True) bedrag = Column(Float) klant_email = Column(String) status = Column(String, default="verwerkt") datum_ontvangen = Column(DateTime, default=datetime.utcnow) datum_verzonden = Column(DateTime, nullable=True) # Celery setup voor async verwerking app = Celery('factuur_worker', broker='redis://localhost:6379/0') @app.task def verwerk_factuur(factuur_data): """Asynchrone factuurverwerkingstaak""" try: session = SessionLocal() # Maak nieuwe factuur aan nieuwe_factuur = Factuur( id=factuur_data['factuur_id'], factuurnummer=factuur_data['factuurnummer'], bedrag=factuur_data['bedrag'], klant_email=factuur_data['klant_email'], status="in_verwerking" ) session.add(nieuwe_factuur) session.commit() # Valideer factuurgegevens if valideer_factuur(factuur_data): nieuwe_factuur.status = "goedgekeurd" stuur_bevestigingsmail.delay(factuur_data) else: nieuwe_factuur.status = "afgekeurd" stuur_foutmelding.delay(factuur_data) session.commit() logging.info(f"Factuur {factuur_data['factuurnummer']} verwerkt") except Exception as e: logging.error(f"Fout bij verwerken factuur: {str(e)}") finally: session.close() def valideer_factuur(factuur_data): """Valideer factuurgegevens""" required_fields = ['factuurnummer', 'bedrag', 'klant_email'] return all(field in factuur_data for field in required_fields) @app.task def stuur_bevestigingsmail(factuur_data): """Verzend bevestigingsmail naar klant""" try: msg = MIMEMultipart() msg['From'] = EMAIL_USER msg['To'] = factuur_data['klant_email'] msg['Subject'] = f"Factuur {factuur_data['factuurnummer']} Ontvangen" body = f""" Beste Klant, Uw factuur {factuur_data['factuurnummer']} is succesvol ontvangen. Details: - Factuurnummer: {factuur_data['factuurnummer']} - Bedrag: €{factuur_data['bedrag']:,.2f} - Datum: {datetime.now().strftime('%d-%m-%Y')} Met vriendelijke groet, Uw Factuurteam """ msg.attach(MIMEText(body, 'plain')) with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: server.starttls() server.login(EMAIL_USER, EMAIL_PASSWORD) server.send_message(msg) logging.info(f"Bevestigingsmail verzonden naar {factuur_data['klant_email']}") except Exception as e: logging.error(f"Fout bij verzenden mail: {str(e)}") # FastAPI endpoint voor factuur upload from fastapi import FastAPI, HTTPException from pydantic import BaseModel class FactuurUpload(BaseModel): factuur_id: str factuurnummer: str bedrag: float klant_email: str extra_data: dict = {} api = FastAPI() @api.post("/upload-factuur") async def upload_factuur(factuur: FactuurUpload): """Endpoint voor factuur upload""" try: # Start async verwerking verwerk_factuur.delay(factuur.dict()) return {"status": "success", "message": "Factuur in verwerking"} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) if __name__ == "__main__": # Maak database tabellen aan Base.metadata.create_all(bind=engine) logging.basicConfig(level=logging.INFO) ``` ## 🐳 Docker Compose Configuratie ```yaml version: '3.8' services: postgres: image: postgres:13 environment: POSTGRES_DB: facturen_db POSTGRES_USER: user POSTGRES_PASSWORD: password ports: - "5432:5432" redis: image: redis:alpine ports: - "6379:6379" api: build: . ports: - "8000:8000" depends_on: - postgres - redis worker: build: . command: celery -A main.app worker --loglevel=info depends_on: - redis - postgres ``` ## 🚀 Gebruiksvoorbeeld ```python # Factuur uploaden via API import requests factuur_data = { "factuur_id": "inv_001", "factuurnummer": "2024-001", "bedrag": 249.99, "klant_email": "klant@bedrijf.nl" } response = requests.post( "http://localhost:8000/upload-factuur", json=factuur_data ) print(response.json()) ``` ## 📊 Monitoring en Logging Voeg monitoring toe met: - **Prometheus** voor metrics - **Grafana** voor visualisatie - **ELK Stack** voor logging Deze architectuur biedt schaalbaarheid, betrouwbaarheid en onderhoudbaarheid voor uw factuurverwerkingssysteem.
error: Generation failed [deepseek] prompt_id=3556 locale=fr err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=3556 locale=pt err=DeepSeek connection/timeout