Sends doula coverage claims via Telnyx fax API every hour, logs every attempt, and generates a printable HTML report for HR. Includes both a Linux CLI with cron scheduling and a Windows GUI (tkinter) that can be packaged as a portable exe via PyInstaller. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
82 lines
2.6 KiB
Bash
Executable file
82 lines
2.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
VENV_DIR="$SCRIPT_DIR/venv"
|
|
PYTHON="$VENV_DIR/bin/python"
|
|
CRON_TAG="# autofax"
|
|
|
|
echo "=== AutoFax Setup ==="
|
|
|
|
# Create virtual environment
|
|
if [ ! -d "$VENV_DIR" ]; then
|
|
echo "Creating virtual environment..."
|
|
python3 -m venv "$VENV_DIR"
|
|
fi
|
|
|
|
echo "Installing dependencies..."
|
|
"$VENV_DIR/bin/pip" install -q -r "$SCRIPT_DIR/requirements.txt"
|
|
|
|
# Create directories
|
|
mkdir -p "$SCRIPT_DIR/claims" "$SCRIPT_DIR/reports"
|
|
|
|
# Check for .env
|
|
if [ ! -f "$SCRIPT_DIR/.env" ]; then
|
|
echo ""
|
|
echo "WARNING: No .env file found!"
|
|
echo "Copy .env.example to .env and fill in your credentials:"
|
|
echo " cp $SCRIPT_DIR/.env.example $SCRIPT_DIR/.env"
|
|
echo ""
|
|
fi
|
|
|
|
# Check for claim PDF
|
|
PDF_COUNT=$(find "$SCRIPT_DIR/claims" -name "*.pdf" 2>/dev/null | wc -l)
|
|
if [ "$PDF_COUNT" -eq 0 ]; then
|
|
echo "WARNING: No PDF found in claims/ directory."
|
|
echo "Place your claim PDF in: $SCRIPT_DIR/claims/"
|
|
echo ""
|
|
fi
|
|
|
|
# Calculate expiry date (7 days from now)
|
|
if date --version >/dev/null 2>&1; then
|
|
# GNU date
|
|
EXPIRY=$(date -d "+7 days" "+%Y-%m-%d %H:%M")
|
|
else
|
|
# BSD/macOS date
|
|
EXPIRY=$(date -v+7d "+%Y-%m-%d %H:%M")
|
|
fi
|
|
|
|
# Install cron jobs
|
|
echo "Installing cron jobs..."
|
|
# Remove any existing autofax entries
|
|
crontab -l 2>/dev/null | grep -v "$CRON_TAG" > /tmp/autofax_cron || true
|
|
|
|
# Hourly fax job
|
|
echo "0 * * * * $PYTHON $SCRIPT_DIR/autofax.py >> $SCRIPT_DIR/reports/cron.log 2>&1 $CRON_TAG" >> /tmp/autofax_cron
|
|
|
|
# Self-destruct: remove autofax cron entries after 7 days
|
|
# Runs once at the expiry time, removes all autofax lines, then removes itself
|
|
echo "0 0 * * * $PYTHON -c \"
|
|
import subprocess, datetime
|
|
if datetime.datetime.now() >= datetime.datetime.fromisoformat('$(date -d '+7 days' '+%Y-%m-%dT%H:%M' 2>/dev/null || date -v+7d '+%Y-%m-%dT%H:%M')'):
|
|
result = subprocess.run(['crontab', '-l'], capture_output=True, text=True)
|
|
lines = [l for l in result.stdout.splitlines() if 'autofax' not in l]
|
|
subprocess.run(['crontab', '-'], input=chr(10).join(lines), text=True)
|
|
\" 2>/dev/null $CRON_TAG" >> /tmp/autofax_cron
|
|
|
|
crontab /tmp/autofax_cron
|
|
rm /tmp/autofax_cron
|
|
|
|
echo ""
|
|
echo "=== Setup Complete ==="
|
|
echo "Fax will be sent every hour on the hour."
|
|
echo "Auto-expires: $EXPIRY (7 days from now)"
|
|
echo ""
|
|
echo "Checklist:"
|
|
echo " [ ] .env file configured with Telnyx credentials"
|
|
echo " [ ] Claim PDF placed in claims/ directory"
|
|
echo ""
|
|
echo "Manual test: $PYTHON $SCRIPT_DIR/autofax.py"
|
|
echo "View report: open $SCRIPT_DIR/reports/fax_report.html"
|
|
echo "View log: cat $SCRIPT_DIR/reports/fax_log.json"
|
|
echo "Remove cron: crontab -l | grep -v autofax | crontab -"
|