autofax/install.sh
Sochen aef5e5283a Initial commit: automated hourly fax sender for insurance claims
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>
2026-03-06 11:36:47 +00:00

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 -"